diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 98ff01073..38ac49e5c 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -55,6 +55,7 @@ pub use prompt::Prompt; pub use provider::{Provider, ProviderMeta}; pub use services::{ profile::{ProfilePayload, ProfileScope, ProfileService}, + provider::reapply_current_codex_official_live, skill::{migrate_skills_to_ssot, ImportSkillSelection}, ConfigService, EndpointLatency, McpService, PromptService, ProviderService, ProxyService, SkillService, SpeedtestService, diff --git a/src-tauri/src/services/mcp.rs b/src-tauri/src/services/mcp.rs index ed07c56fe..67bb2b66e 100644 --- a/src-tauri/src/services/mcp.rs +++ b/src-tauri/src/services/mcp.rs @@ -181,16 +181,35 @@ impl McpService { let servers = Self::get_all_servers(state)?; for app in AppType::all() { - if matches!(app, AppType::OpenClaw | AppType::ClaudeDesktop) { - continue; - } + Self::project_servers_to_app(state, &servers, &app)?; + } - for server in servers.values() { - if server.apps.is_enabled_for(&app) { - Self::sync_server_to_app(state, server, &app)?; - } else { - Self::remove_server_from_app(state, &server.id, &app)?; - } + Ok(()) + } + + /// 只把启用状态投影到单个应用。某个应用的 live 被整体重写后用它做 + /// 定向重投影:sync_all_enabled 按 AppType::all() 顺序逐应用短路, + /// 排在前面的无关应用 live 损坏(如 ~/.claude.json 坏 JSON)会阻断 + /// 后面应用的投影。 + pub fn sync_enabled_for_app(state: &AppState, app: &AppType) -> Result<(), AppError> { + let servers = Self::get_all_servers(state)?; + Self::project_servers_to_app(state, &servers, app) + } + + fn project_servers_to_app( + state: &AppState, + servers: &IndexMap, + app: &AppType, + ) -> Result<(), AppError> { + if matches!(app, AppType::OpenClaw | AppType::ClaudeDesktop) { + return Ok(()); + } + + for server in servers.values() { + if server.apps.is_enabled_for(app) { + Self::sync_server_to_app(state, server, app)?; + } else { + Self::remove_server_from_app(state, &server.id, app)?; } } diff --git a/src-tauri/src/services/provider/mod.rs b/src-tauri/src/services/provider/mod.rs index 6d3368c1a..c804db291 100644 --- a/src-tauri/src/services/provider/mod.rs +++ b/src-tauri/src/services/provider/mod.rs @@ -81,6 +81,18 @@ pub fn reapply_current_codex_official_live(state: &AppState) -> Result