From 581065eff5fc513bb99051e020254a7acdc1cfec Mon Sep 17 00:00:00 2001 From: Douwe Osinga Date: Tue, 24 Feb 2026 07:10:05 -0500 Subject: [PATCH] Fix out of order messages --- crates/goose/src/agents/agent.rs | 1 + crates/goose/src/conversation/mod.rs | 4 ++++ crates/goose/src/session/session_manager.rs | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index e4134dd79d..93b28540ca 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -1638,6 +1638,7 @@ impl Agent { session_manager.add_message(&session_config.id, msg).await?; } conversation.extend(messages_to_add); + conversation.sort_by_created(); if exit_chat { break; } diff --git a/crates/goose/src/conversation/mod.rs b/crates/goose/src/conversation/mod.rs index 9d2fe71496..480607c26c 100644 --- a/crates/goose/src/conversation/mod.rs +++ b/crates/goose/src/conversation/mod.rs @@ -103,6 +103,10 @@ impl Conversation { self.0.clear(); } + pub fn sort_by_created(&mut self) { + self.0.sort_by_key(|m| m.created); + } + pub fn filtered_messages(&self, filter: F) -> Vec where F: Fn(&MessageMetadata) -> bool, diff --git a/crates/goose/src/session/session_manager.rs b/crates/goose/src/session/session_manager.rs index a11e4b1273..7d79a69e0f 100644 --- a/crates/goose/src/session/session_manager.rs +++ b/crates/goose/src/session/session_manager.rs @@ -1082,7 +1082,7 @@ impl SessionStorage { async fn get_conversation(&self, session_id: &str) -> Result { let pool = self.pool().await?; let rows = sqlx::query_as::<_, (String, String, i64, Option, Option)>( - "SELECT role, content_json, created_timestamp, metadata_json, message_id FROM messages WHERE session_id = ? ORDER BY timestamp", + "SELECT role, content_json, created_timestamp, metadata_json, message_id FROM messages WHERE session_id = ? ORDER BY created_timestamp", ) .bind(session_id) .fetch_all(pool)