From 2af70642de950fef6b02341cda0f60e44a77110f Mon Sep 17 00:00:00 2001 From: Coffee Date: Mon, 16 Mar 2026 17:07:26 +0800 Subject: [PATCH] Review staging merge conflict status --- src/app.rs | 1 + src/channels/web/server.rs | 1 + src/extensions/manager.rs | 11 ++++++++++- src/tools/builtin/extension_tools.rs | 1 + src/tools/mcp/client.rs | 4 +++- src/tools/mcp/factory.rs | 20 +++++++++++++++----- tests/module_init_integration.rs | 1 + 7 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/app.rs b/src/app.rs index 6e041cc5..ad4f27a0 100644 --- a/src/app.rs +++ b/src/app.rs @@ -646,6 +646,7 @@ impl AppBuilder { Arc::clone(&mcp_session_manager), Arc::clone(&mcp_process_manager), Some(Arc::clone(&self.session)), + self.config.llm.nearai.api_key.clone(), ext_secrets, Arc::clone(tools), Some(Arc::clone(hooks)), diff --git a/src/channels/web/server.rs b/src/channels/web/server.rs index c7916c2d..86325b26 100644 --- a/src/channels/web/server.rs +++ b/src/channels/web/server.rs @@ -3366,6 +3366,7 @@ mod tests { mcp_sm, mcp_pm, None, + None, secrets, tool_registry, None, diff --git a/src/extensions/manager.rs b/src/extensions/manager.rs index 62561b25..13067b77 100644 --- a/src/extensions/manager.rs +++ b/src/extensions/manager.rs @@ -65,6 +65,7 @@ pub struct ExtensionManager { mcp_session_manager: Arc, mcp_process_manager: Arc, nearai_session_manager: Option>, + nearai_api_key: Option, /// Active MCP clients keyed by server name. mcp_clients: RwLock>>, @@ -151,6 +152,7 @@ impl ExtensionManager { mcp_session_manager: Arc, mcp_process_manager: Arc, nearai_session_manager: Option>, + nearai_api_key: Option, secrets: Arc, tool_registry: Arc, hooks: Option>, @@ -174,6 +176,7 @@ impl ExtensionManager { mcp_session_manager, mcp_process_manager, nearai_session_manager, + nearai_api_key, mcp_clients: RwLock::new(HashMap::new()), wasm_tool_runtime, wasm_tools_dir, @@ -2869,7 +2872,7 @@ impl ExtensionManager { server.clone(), &self.mcp_session_manager, self.nearai_session_manager.clone(), - None, + self.nearai_api_key.clone(), &self.mcp_process_manager, Some(Arc::clone(&self.secrets)), &self.user_id, @@ -4612,6 +4615,7 @@ mod tests { mcp, Arc::new(McpProcessManager::new()), None, + None, secrets, tools, None, // hooks @@ -4793,6 +4797,7 @@ mod tests { Arc::new(McpSessionManager::new()), Arc::new(McpProcessManager::new()), None, + None, Arc::new(InMemorySecretsStore::new(crypto)), Arc::new(ToolRegistry::new()), None, @@ -4877,6 +4882,8 @@ mod tests { let manager = ExtensionManager::new( Arc::new(McpSessionManager::new()), Arc::new(McpProcessManager::new()), + None, + None, Arc::new(InMemorySecretsStore::new(crypto)), Arc::new(ToolRegistry::new()), None, @@ -4886,6 +4893,7 @@ mod tests { None, "test".to_string(), Some(db.clone() as Arc), + None, Vec::new(), ); @@ -5365,6 +5373,7 @@ mod tests { mcp, Arc::new(McpProcessManager::new()), None, + None, secrets, tools, None, diff --git a/src/tools/builtin/extension_tools.rs b/src/tools/builtin/extension_tools.rs index 91c0bae4..261eacf5 100644 --- a/src/tools/builtin/extension_tools.rs +++ b/src/tools/builtin/extension_tools.rs @@ -801,6 +801,7 @@ mod tests { Arc::new(McpSessionManager::new()), Arc::new(crate::tools::mcp::process::McpProcessManager::new()), None, + None, Arc::new(InMemorySecretsStore::new(crypto)), Arc::new(ToolRegistry::new()), None, diff --git a/src/tools/mcp/client.rs b/src/tools/mcp/client.rs index dca1e27d..96451393 100644 --- a/src/tools/mcp/client.rs +++ b/src/tools/mcp/client.rs @@ -905,7 +905,9 @@ mod tests { .set_token(SecretString::from("sess_test_token")) .await; - let client = McpClient::new_with_config(config).with_nearai_session_manager(nearai_session); + let client = McpClient::new_with_config(config) + .expect("valid MCP config") + .with_nearai_session_manager(nearai_session); let headers = client.build_request_headers().await.expect("headers"); assert_eq!( diff --git a/src/tools/mcp/factory.rs b/src/tools/mcp/factory.rs index 52d91bf6..915db1a2 100644 --- a/src/tools/mcp/factory.rs +++ b/src/tools/mcp/factory.rs @@ -20,6 +20,8 @@ pub enum McpFactoryError { UnixNotSupported { name: String }, #[error("Invalid configuration for MCP server '{name}': {reason}")] InvalidConfig { name: String, reason: String }, + #[error("Missing runtime auth context for MCP server '{name}': {reason}")] + MissingRuntimeAuthContext { name: String, reason: String }, } /// Create an `McpClient` from a server configuration, dispatching on the @@ -81,12 +83,20 @@ pub async fn create_client_from_config( } EffectiveTransport::Http => { if server.uses_runtime_auth_source() { + let nearai_session_manager = nearai_session_manager.ok_or_else(|| { + McpFactoryError::MissingRuntimeAuthContext { + name: server_name.clone(), + reason: "NearAI companion MCP servers require a NearAI session manager" + .to_string(), + } + })?; + return Ok(McpClient::new_with_config(server) - .with_nearai_session_manager( - nearai_session_manager.expect( - "NearAI companion MCP servers require a NearAI session manager", - ), - ) + .map_err(|e| McpFactoryError::InvalidConfig { + name: server_name.clone(), + reason: e.to_string(), + })? + .with_nearai_session_manager(nearai_session_manager) .with_nearai_api_key(nearai_api_key) .with_session_manager(Arc::clone(session_manager))); } diff --git a/tests/module_init_integration.rs b/tests/module_init_integration.rs index ff0c1e3b..5f3f3f67 100644 --- a/tests/module_init_integration.rs +++ b/tests/module_init_integration.rs @@ -204,6 +204,7 @@ async fn extension_manager_with_process_manager_constructs() { Arc::new(McpSessionManager::new()), Arc::new(McpProcessManager::new()), None, + None, secrets, tools, None,