fix(goose): propagate session_id across providers and MCP (#6584)

Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
Adrian Cole
2026-01-22 09:28:56 +09:00
committed by GitHub
parent f3bae7ea7a
commit 67de49abbb
61 changed files with 1457 additions and 616 deletions
+12 -6
View File
@@ -40,6 +40,7 @@ struct SummarizeContext {
///
/// # Arguments
/// * `provider` - The provider to use for summarization
/// * `session_id` - The session to use for summarization
/// * `conversation` - The current conversation history
/// * `manual_compact` - If true, this is a manual compaction (don't preserve user message)
///
@@ -49,6 +50,7 @@ struct SummarizeContext {
/// - `ProviderUsage`: Provider usage from summarization
pub async fn compact_messages(
provider: &dyn Provider,
session_id: &str,
conversation: &Conversation,
manual_compact: bool,
) -> Result<(Conversation, ProviderUsage)> {
@@ -110,7 +112,8 @@ pub async fn compact_messages(
let messages_to_compact = messages.as_slice();
let (summary_message, summarization_usage) = do_compact(provider, messages_to_compact).await?;
let (summary_message, summarization_usage) =
do_compact(provider, session_id, messages_to_compact).await?;
// Create the final message list with updated visibility metadata:
// 1. Original messages become user_visible but not agent_visible
@@ -271,6 +274,7 @@ fn filter_tool_responses<'a>(messages: &[&'a Message], remove_percent: u32) -> V
async fn do_compact(
provider: &dyn Provider,
session_id: &str,
messages: &[Message],
) -> Result<(Message, ProviderUsage), anyhow::Error> {
let agent_visible_messages: Vec<&Message> = messages
@@ -301,7 +305,7 @@ async fn do_compact(
let summarization_request = vec![user_message];
match provider
.complete_fast(&system_prompt, &summarization_request, &[])
.complete_fast(session_id, &system_prompt, &summarization_request, &[])
.await
{
Ok((mut response, mut provider_usage)) => {
@@ -468,6 +472,7 @@ mod tests {
async fn complete_with_model(
&self,
_session_id: &str,
_model_config: &ModelConfig,
_system: &str,
messages: &[Message],
@@ -529,9 +534,10 @@ mod tests {
];
let conversation = Conversation::new_unvalidated(basic_conversation);
let (compacted_conversation, _usage) = compact_messages(&provider, &conversation, false)
.await
.unwrap();
let (compacted_conversation, _usage) =
compact_messages(&provider, "test-session-id", &conversation, false)
.await
.unwrap();
let agent_conversation = compacted_conversation.agent_visible_messages();
@@ -568,7 +574,7 @@ mod tests {
}
let conversation = Conversation::new_unvalidated(messages);
let result = compact_messages(&provider, &conversation, false).await;
let result = compact_messages(&provider, "test-session-id", &conversation, false).await;
// Should succeed after progressive removal
assert!(