fix: session replays now include mid-turn messages so the full session gets replayed
This commit is contained in:
1 file changed
+36
-1
+36
-1
@@ -1,6 +1,6 @@
|
||||
use anyhow::Result;
|
||||
|
||||
use crate::client::{Message, MessageRole};
|
||||
use crate::client::{Message, MessageContent, MessageContentToolCalls, MessageRole};
|
||||
use crate::config::{AppConfig, Session};
|
||||
use crate::utils::{dimmed_text, replay_label_text};
|
||||
|
||||
@@ -52,9 +52,44 @@ fn render_messages(app: &AppConfig, messages: &[Message]) -> Result<()> {
|
||||
println!();
|
||||
}
|
||||
}
|
||||
MessageRole::Tool => {
|
||||
if let MessageContent::ToolCalls(tool_calls) = &message.content {
|
||||
render_tool_call_rounds(app, tool_calls)?;
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn render_tool_call_rounds(app: &AppConfig, tool_calls: &MessageContentToolCalls) -> Result<()> {
|
||||
let mut needs_gap_after_calls = false;
|
||||
if !tool_calls.text.trim().is_empty() {
|
||||
println!("{}", replay_label_text("Assistant:"));
|
||||
app.print_markdown(&tool_calls.text)?;
|
||||
println!();
|
||||
}
|
||||
|
||||
for result in &tool_calls.tool_results {
|
||||
if let Some(text) = result.text.as_deref().filter(|t| !t.trim().is_empty()) {
|
||||
if needs_gap_after_calls {
|
||||
println!();
|
||||
}
|
||||
|
||||
println!("{}", replay_label_text("Assistant:"));
|
||||
app.print_markdown(text)?;
|
||||
println!();
|
||||
}
|
||||
|
||||
println!("{}", dimmed_text(&format!("⚙ {}", result.call.name)));
|
||||
needs_gap_after_calls = true;
|
||||
}
|
||||
|
||||
if needs_gap_after_calls {
|
||||
println!();
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Reference in new issue
Block a user