diff --git a/src/gateway/ws.rs b/src/gateway/ws.rs index 5f5bba1..0cb8d85 100644 --- a/src/gateway/ws.rs +++ b/src/gateway/ws.rs @@ -21,6 +21,7 @@ use crate::command::handlers::load_chat_messages::LoadChatMessagesCommandHandler use crate::command::handlers::load_task_messages::LoadTaskMessagesCommandHandler; use crate::command::handlers::load_topic::LoadTopicCommandHandler; use crate::command::handlers::save_session::SaveSessionCommandHandler; +use crate::command::handlers::save_topic::SaveTopicCommandHandler; use crate::command::handlers::session::SessionCommandHandler; use crate::command::handlers::stop_execution::StopExecutionCommandHandler; use crate::command::handlers::switch_topic::SwitchTopicCommandHandler; @@ -411,6 +412,12 @@ async fn handle_inbound( state.task_repository.clone(), system_prompt_provider.clone(), ))); + // 注册 save_topic 处理器 + router.register(Box::new(SaveTopicCommandHandler::new( + store.clone(), + state.task_repository.clone(), + system_prompt_provider.clone(), + ).with_session_manager(state.session_manager.clone()))); // 注册 delete_topic 处理器 router.register(Box::new( DeleteTopicCommandHandler::new(store.clone()) diff --git a/web/src/components/Chat/MessageBubble.tsx b/web/src/components/Chat/MessageBubble.tsx index e780ab6..e75d69a 100644 --- a/web/src/components/Chat/MessageBubble.tsx +++ b/web/src/components/Chat/MessageBubble.tsx @@ -606,8 +606,9 @@ export function MessageBubble({ message, onNavigateToSubAgent, showThinking = tr ) } - // 隐藏思考且无实质内容时,不渲染空的助手消息气泡 - if (!isUser && !isTool && !isMergedTool && !showThinking && !message.content.trim() && message.reasoningContent) { + // 隐藏无可见内容的助手消息(无文本,且无思考或思考被关闭) + const hasVisibleContent = !!(message.content && message.content.trim()) || (showThinking && message.reasoningContent) + if (!isUser && !isTool && !isMergedTool && !hasVisibleContent) { return null }