feat(mcp): import Codex MCP from ~/.codex/config.toml

- Support both TOML schemas: [mcp.servers.<id>] and [mcp_servers.<id>]
- Non-destructive merge of imported servers (enabled=true only)
- Preserve existing TOML schema when syncing (prefer mcp_servers)
- Remove both mcp and mcp_servers when no enabled items

feat(ui): auto-import Codex MCP on panel init (app=codex)

chore(tauri): add import_mcp_from_codex command and register

chore(types): expose window.api.importMcpFromCodex and typings

fix(ui): remove unused variable for typecheck
This commit is contained in:
Jason
2025-10-10 14:59:02 +08:00
parent 428369cae0
commit 6cf7dacd0e
9 changed files with 214 additions and 27 deletions

View File

@@ -17,8 +17,7 @@ export const buttonStyles = {
"px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600 dark:bg-red-600 dark:hover:bg-red-700 transition-colors text-sm font-medium",
// MCP 专属按钮:绿底白字
mcp:
"px-4 py-2 bg-emerald-500 text-white rounded-lg hover:bg-emerald-600 dark:bg-emerald-600 dark:hover:bg-emerald-700 transition-colors text-sm font-medium",
mcp: "px-4 py-2 bg-emerald-500 text-white rounded-lg hover:bg-emerald-600 dark:bg-emerald-600 dark:hover:bg-emerald-700 transition-colors text-sm font-medium",
// 幽灵按钮:无背景,仅悬浮反馈
ghost:

View File

@@ -355,7 +355,11 @@ export const tauriAPI = {
spec: McpServer | Record<string, any>,
): Promise<boolean> => {
try {
return await invoke<boolean>("upsert_mcp_server_in_config", { app, id, spec });
return await invoke<boolean>("upsert_mcp_server_in_config", {
app,
id,
spec,
});
} catch (error) {
console.error("写入 MCPconfig.json失败:", error);
throw error;
@@ -415,6 +419,16 @@ export const tauriAPI = {
}
},
// 从 ~/.codex/config.toml 导入 MCPCodex 作用域)
importMcpFromCodex: async (): Promise<number> => {
try {
return await invoke<number>("import_mcp_from_codex");
} catch (error) {
console.error("从 ~/.codex/config.toml 导入 MCP 失败:", error);
throw error;
}
},
// ours: 第三方/自定义供应商——测速与端点管理
// 第三方/自定义供应商:批量测试端点延迟
testApiEndpoints: async (