feat: 注册 save_topic 处理器并优化助手消息渲染逻辑

This commit is contained in:
oudecheng 2026-06-25 14:10:04 +08:00
parent ef18500100
commit a40f57fb22
2 changed files with 10 additions and 2 deletions

View File

@ -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_task_messages::LoadTaskMessagesCommandHandler;
use crate::command::handlers::load_topic::LoadTopicCommandHandler; use crate::command::handlers::load_topic::LoadTopicCommandHandler;
use crate::command::handlers::save_session::SaveSessionCommandHandler; use crate::command::handlers::save_session::SaveSessionCommandHandler;
use crate::command::handlers::save_topic::SaveTopicCommandHandler;
use crate::command::handlers::session::SessionCommandHandler; use crate::command::handlers::session::SessionCommandHandler;
use crate::command::handlers::stop_execution::StopExecutionCommandHandler; use crate::command::handlers::stop_execution::StopExecutionCommandHandler;
use crate::command::handlers::switch_topic::SwitchTopicCommandHandler; use crate::command::handlers::switch_topic::SwitchTopicCommandHandler;
@ -411,6 +412,12 @@ async fn handle_inbound(
state.task_repository.clone(), state.task_repository.clone(),
system_prompt_provider.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 处理器 // 注册 delete_topic 处理器
router.register(Box::new( router.register(Box::new(
DeleteTopicCommandHandler::new(store.clone()) DeleteTopicCommandHandler::new(store.clone())

View File

@ -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 return null
} }