feat(plugin): integrate skill_mcp tool with session-scoped lifecycle management

🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
This commit is contained in:
YeonGyu-Kim
2026-01-01 22:53:18 +09:00
parent 439785ef90
commit 4039722160
2 changed files with 19 additions and 2 deletions

View File

@@ -58,8 +58,9 @@ import {
setMainSession, setMainSession,
getMainSessionID, getMainSessionID,
} from "./features/claude-code-session-state"; } 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 { BackgroundManager } from "./features/background-agent";
import { SkillMcpManager } from "./features/skill-mcp-manager";
import { createBuiltinMcps } from "./mcp"; import { createBuiltinMcps } from "./mcp";
import { OhMyOpenCodeConfigSchema, type OhMyOpenCodeConfig, type HookName } from "./config"; import { OhMyOpenCodeConfigSchema, type OhMyOpenCodeConfig, type HookName } from "./config";
import { log, deepMerge, getUserConfigDir, addConfigLoadError, parseJsonc, detectConfigFile, migrateConfigFile } from "./shared"; import { log, deepMerge, getUserConfigDir, addConfigLoadError, parseJsonc, detectConfigFile, migrateConfigFile } from "./shared";
@@ -292,7 +293,18 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => {
includeClaudeSkills ? discoverProjectClaudeSkills() : [], includeClaudeSkills ? discoverProjectClaudeSkills() : [],
discoverOpencodeProjectSkills(), 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 const googleAuthHooks = pluginConfig.google_auth !== false
? await createGoogleAntigravityAuthPlugin(ctx) ? await createGoogleAntigravityAuthPlugin(ctx)
@@ -309,6 +321,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => {
call_omo_agent: callOmoAgent, call_omo_agent: callOmoAgent,
look_at: lookAt, look_at: lookAt,
skill: skillTool, skill: skillTool,
skill_mcp: skillMcpTool,
...(tmuxAvailable ? { interactive_bash } : {}), ...(tmuxAvailable ? { interactive_bash } : {}),
}, },
@@ -593,6 +606,9 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => {
if (sessionInfo?.id === getMainSessionID()) { if (sessionInfo?.id === getMainSessionID()) {
setMainSession(undefined); setMainSession(undefined);
} }
if (sessionInfo?.id) {
await skillMcpManager.disconnectSession(sessionInfo.id);
}
} }
if (event.type === "session.error") { if (event.type === "session.error") {

View File

@@ -31,6 +31,7 @@ import {
export { interactive_bash, startBackgroundCheck as startTmuxCheck } from "./interactive-bash" export { interactive_bash, startBackgroundCheck as startTmuxCheck } from "./interactive-bash"
export { createSkillTool } from "./skill" export { createSkillTool } from "./skill"
export { getTmuxPath } from "./interactive-bash/utils" export { getTmuxPath } from "./interactive-bash/utils"
export { createSkillMcpTool } from "./skill-mcp"
import { import {
createBackgroundTask, createBackgroundTask,