Add Message Metadata for Visibility Control (#4538)

This commit is contained in:
David Katz
2025-09-10 17:26:16 -04:00
committed by GitHub
parent 63f3669cf7
commit 3f17f4007a
26 changed files with 542 additions and 324 deletions
+4 -2
View File
@@ -14,8 +14,9 @@ use rmcp::model::{
use utoipa::{OpenApi, ToSchema};
use goose::conversation::message::{
ContextLengthExceeded, FrontendToolRequest, Message, MessageContent, RedactedThinkingContent,
SummarizationRequested, ThinkingContent, ToolConfirmationRequest, ToolRequest, ToolResponse,
ContextLengthExceeded, FrontendToolRequest, Message, MessageContent, MessageMetadata,
RedactedThinkingContent, SummarizationRequested, ThinkingContent, ToolConfirmationRequest,
ToolRequest, ToolResponse,
};
use utoipa::openapi::schema::{
AdditionalProperties, AnyOfBuilder, ArrayBuilder, ObjectBuilder, OneOfBuilder, Schema,
@@ -421,6 +422,7 @@ impl<'__s> ToSchema<'__s> for AnnotatedSchema {
super::routes::session::SessionHistoryResponse,
Message,
MessageContent,
MessageMetadata,
ContentSchema,
EmbeddedResourceSchema,
ImageContentSchema,
+6 -1
View File
@@ -62,7 +62,12 @@ async fn manage_context(
}
Ok(Json(ContextManageResponse {
messages: processed_messages.messages().clone(),
messages: processed_messages
.messages()
.iter()
.filter(|m| m.is_user_visible())
.cloned()
.collect(),
token_counts,
}))
}
+5 -1
View File
@@ -309,7 +309,11 @@ async fn reply_handler(
}
all_messages.push(message.clone());
stream_event(MessageEvent::Message { message }, &tx, &cancel_token).await;
// Only send message to client if it's user_visible
if message.is_user_visible() {
stream_event(MessageEvent::Message { message }, &tx, &cancel_token).await;
}
}
Ok(Some(Ok(AgentEvent::HistoryReplaced(new_messages)))) => {
// Replace the message history with the compacted messages
+9 -1
View File
@@ -124,10 +124,18 @@ async fn get_session_history(
}
};
// Filter messages to only include user_visible ones
let user_visible_messages: Vec<Message> = messages
.messages()
.iter()
.filter(|m| m.is_user_visible())
.cloned()
.collect();
Ok(Json(SessionHistoryResponse {
session_id,
metadata,
messages: messages.messages().clone(),
messages: user_visible_messages,
}))
}