From a8d4bd041596188807f76eb68c58fc4b7d26c5ee Mon Sep 17 00:00:00 2001 From: Raduan Al-Shedivat <88370223+dbraduan@users.noreply.github.com> Date: Thu, 8 May 2025 01:42:52 +0200 Subject: [PATCH] load all previous messages if --resume is passed (#2424) --- crates/goose-cli/src/cli.rs | 15 +++++++++++++++ crates/goose-cli/src/session/mod.rs | 25 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/crates/goose-cli/src/cli.rs b/crates/goose-cli/src/cli.rs index 18cdb694..b0833654 100644 --- a/crates/goose-cli/src/cli.rs +++ b/crates/goose-cli/src/cli.rs @@ -203,6 +203,14 @@ enum Command { )] resume: bool, + /// Show message history when resuming + #[arg( + long, + help = "Show previous messages when resuming a session", + requires = "resume" + )] + history: bool, + /// Enable debug output mode #[arg( long, @@ -413,6 +421,7 @@ pub async fn cli() -> Result<()> { command, identifier, resume, + history, debug, extensions, remote_extensions, @@ -448,6 +457,12 @@ pub async fn cli() -> Result<()> { session.session_file().file_stem().and_then(|s| s.to_str()), None, )?; + + // Render previous messages if resuming a session and history flag is set + if resume && history { + session.render_message_history(); + } + let _ = session.interactive(None).await; Ok(()) } diff --git a/crates/goose-cli/src/session/mod.rs b/crates/goose-cli/src/session/mod.rs index 04d92834..e4f5dfdb 100644 --- a/crates/goose-cli/src/session/mod.rs +++ b/crates/goose-cli/src/session/mod.rs @@ -899,6 +899,31 @@ impl Session { self.messages.clone() } + /// Render all past messages from the session history + pub fn render_message_history(&self) { + if self.messages.is_empty() { + return; + } + + // Print session restored message + println!( + "\n{} {} messages loaded into context.", + console::style("Session restored:").green().bold(), + console::style(self.messages.len()).green() + ); + + // Render each message + for message in &self.messages { + output::render_message(message, self.debug); + } + + // Add a visual separator after restored messages + println!( + "\n{}\n", + console::style("──────── New Messages ────────").dim() + ); + } + /// Get the session metadata pub fn get_metadata(&self) -> Result { if !self.session_file.exists() {