fix: session replays now include mid-turn messages so the full session gets replayed

This commit is contained in:
Dark-Alex-17 committed 2026-09-03 15:12:49 -06:00
1 parent b04270950a
commit 101b706be5
1 file changed
+36 -1
+36 -1
View File
@@ -1,6 +1,6 @@
use anyhow::Result; use anyhow::Result;
use crate::client::{Message, MessageRole}; use crate::client::{Message, MessageContent, MessageContentToolCalls, MessageRole};
use crate::config::{AppConfig, Session}; use crate::config::{AppConfig, Session};
use crate::utils::{dimmed_text, replay_label_text}; use crate::utils::{dimmed_text, replay_label_text};
@@ -52,9 +52,44 @@ fn render_messages(app: &AppConfig, messages: &[Message]) -> Result<()> {
println!(); println!();
} }
} }
MessageRole::Tool => {
if let MessageContent::ToolCalls(tool_calls) = &message.content {
render_tool_call_rounds(app, tool_calls)?;
}
}
_ => {} _ => {}
} }
} }
Ok(()) 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(())
}