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)