diff --git a/src/index.ts b/src/index.ts index b65b096..4d0c1e7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -58,8 +58,9 @@ import { setMainSession, getMainSessionID, } from "./features/claude-code-session-state"; -import { builtinTools, createCallOmoAgent, createBackgroundTools, createLookAt, createSkillTool, interactive_bash, getTmuxPath } from "./tools"; +import { builtinTools, createCallOmoAgent, createBackgroundTools, createLookAt, createSkillTool, createSkillMcpTool, interactive_bash, getTmuxPath } from "./tools"; import { BackgroundManager } from "./features/background-agent"; +import { SkillMcpManager } from "./features/skill-mcp-manager"; import { createBuiltinMcps } from "./mcp"; import { OhMyOpenCodeConfigSchema, type OhMyOpenCodeConfig, type HookName } from "./config"; import { log, deepMerge, getUserConfigDir, addConfigLoadError, parseJsonc, detectConfigFile, migrateConfigFile } from "./shared"; @@ -292,7 +293,18 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { includeClaudeSkills ? discoverProjectClaudeSkills() : [], discoverOpencodeProjectSkills(), ); - const skillTool = createSkillTool({ skills: mergedSkills }); + const skillMcpManager = new SkillMcpManager(); + const getSessionIDForMcp = () => getMainSessionID() || ""; + const skillTool = createSkillTool({ + skills: mergedSkills, + mcpManager: skillMcpManager, + getSessionID: getSessionIDForMcp, + }); + const skillMcpTool = createSkillMcpTool({ + manager: skillMcpManager, + getLoadedSkills: () => mergedSkills, + getSessionID: getSessionIDForMcp, + }); const googleAuthHooks = pluginConfig.google_auth !== false ? await createGoogleAntigravityAuthPlugin(ctx) @@ -309,6 +321,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { call_omo_agent: callOmoAgent, look_at: lookAt, skill: skillTool, + skill_mcp: skillMcpTool, ...(tmuxAvailable ? { interactive_bash } : {}), }, @@ -593,6 +606,9 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { if (sessionInfo?.id === getMainSessionID()) { setMainSession(undefined); } + if (sessionInfo?.id) { + await skillMcpManager.disconnectSession(sessionInfo.id); + } } if (event.type === "session.error") { diff --git a/src/tools/index.ts b/src/tools/index.ts index 9484473..b9de354 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -31,6 +31,7 @@ import { export { interactive_bash, startBackgroundCheck as startTmuxCheck } from "./interactive-bash" export { createSkillTool } from "./skill" export { getTmuxPath } from "./interactive-bash/utils" +export { createSkillMcpTool } from "./skill-mcp" import { createBackgroundTask,