diff --git a/src/gateway/agent_factory.rs b/src/gateway/agent_factory.rs index 43922fe..c14e7aa 100644 --- a/src/gateway/agent_factory.rs +++ b/src/gateway/agent_factory.rs @@ -15,6 +15,8 @@ pub(crate) struct AgentFactory { skills: Arc, reinject_every: usize, prompt_repository: Arc, + /// 实例创建时间戳(用于区分新旧 AgentFactory 实例) + instance_id: u64, } pub(crate) struct AgentBuildRequest<'a> { @@ -37,17 +39,36 @@ impl AgentFactory { reinject_every: usize, prompt_repository: Arc, ) -> Self { + // 使用 Arc 指针地址作为实例标识符,用于区分新旧 AgentFactory 实例 + let instance_id = Arc::as_ptr(&tools) as u64; + tracing::info!( + instance_id = instance_id, + tool_count = tools.tool_names().len(), + "AgentFactory::new created" + ); Self { tools, skills, reinject_every, prompt_repository, + instance_id, } } pub(crate) fn create(&self, request: AgentBuildRequest<'_>) -> Result { let session_id = persistent_session_id(request.channel_name, request.session_chat_id); + // 诊断日志:记录 agent 实际使用的配置和实例 ID + tracing::info!( + instance_id = self.instance_id, + channel = %request.channel_name, + session_id = %session_id, + provider = %request.provider_config.name, + model_id = %request.provider_config.model_id, + tool_count = self.tools.tool_names().len(), + "AgentFactory: creating agent with config" + ); + // 创建组合的系统提示词提供者 let system_prompt_provider = Arc::new(CompositeSystemPromptProvider::new(vec![ Box::new(AgentPromptProvider::new( diff --git a/src/gateway/agent_prompt_provider.rs b/src/gateway/agent_prompt_provider.rs index e825904..3aee796 100644 --- a/src/gateway/agent_prompt_provider.rs +++ b/src/gateway/agent_prompt_provider.rs @@ -55,6 +55,15 @@ impl SystemPromptProvider for AgentPromptProvider { return None; } + // 诊断日志:记录系统提示词实际使用的模型配置(用于排查"配置不生效"问题) + tracing::info!( + session_id = ?context.session_id, + chat_id = %context.chat_id, + provider = %self.provider_config.name, + model_id = %self.provider_config.model_id, + "AgentPromptProvider: building system prompt with model config" + ); + // 加载 Agent 提示词(AGENT.md + builtin + MEMORY_SUMMARY.md) let agent_prompt = load_agent_prompt().ok().flatten()?; diff --git a/src/gateway/mod.rs b/src/gateway/mod.rs index b127707..f8ab7d5 100644 --- a/src/gateway/mod.rs +++ b/src/gateway/mod.rs @@ -104,6 +104,12 @@ impl GatewayState { Some(bus.clone()), )?; + // 诊断日志:记录新 GatewayState 的创建(用于排查重启后是否使用了新状态) + tracing::info!( + mcp_manager_present = mcp_manager.is_some(), + "GatewayState::from_config: new GatewayState created" + ); + let cancel_manager = CancelManager::new(); Ok(Self { diff --git a/src/gateway/runtime.rs b/src/gateway/runtime.rs index cbd3638..e609267 100644 --- a/src/gateway/runtime.rs +++ b/src/gateway/runtime.rs @@ -224,6 +224,15 @@ pub(crate) fn build_session_manager_with_sender( // Build base tools let tools = factory.build(); + // 诊断日志:记录 MCP 初始化状态和基础工具数量 + tracing::info!( + mcp_enabled = mcp_initializer.is_enabled(), + mcp_tools_collected = mcp_tools_for_subagents.len(), + base_tool_count = tools.tool_names().len(), + base_tools = ?tools.tool_names(), + "build_session_manager: base tools built (before MCP registration)" + ); + // Register MCP tools to main agent (async) // Note: MCP tools for subagents are already collected above if mcp_initializer.is_enabled() { @@ -240,6 +249,13 @@ pub(crate) fn build_session_manager_with_sender( let tools = Arc::new(tools); + // 诊断日志:记录最终工具数量(含 MCP 工具,如果启用) + tracing::info!( + final_tool_count = tools.tool_names().len(), + final_tools = ?tools.tool_names(), + "build_session_manager: final tools registered to main agent" + ); + let prompt_repository: Arc = store.clone(); let agent_factory = AgentFactory::new( tools.clone(),