From ecb87608e683b11a460af400cf064dc947db5644 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Mon, 18 May 2026 13:43:56 +0900 Subject: [PATCH] fix: wire host config.skills.paths into command skill discovery Mirrors the agent-config-handler change: command-config-handler now also discovers skills from host config.skills.paths set by other plugins, making them available as slash commands. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- .../command-config-handler.test.ts | 33 +++++++++++++++++++ src/plugin-handlers/command-config-handler.ts | 8 +++++ 2 files changed, 41 insertions(+) diff --git a/src/plugin-handlers/command-config-handler.test.ts b/src/plugin-handlers/command-config-handler.test.ts index fa39cea1b..63837559e 100644 --- a/src/plugin-handlers/command-config-handler.test.ts +++ b/src/plugin-handlers/command-config-handler.test.ts @@ -157,4 +157,37 @@ describe("applyCommandConfig", () => { const commandConfig = config.command as Record; expect(commandConfig["start-work"]?.agent).toBe(getAgentListDisplayName("atlas")); }); + + test("includes host config skills declared in config.skills.paths by other plugins", async () => { + // given - second call to discoverConfigSourceSkills returns host config skills + discoverConfigSourceSkillsSpy + .mockResolvedValueOnce([]) + .mockResolvedValueOnce([ + { + name: "host-config-skill", + definition: { + name: "host-config-skill", + description: "Host config skill", + template: "template", + }, + scope: "config", + }, + ]); + const config: Record = { + command: {}, + skills: { paths: ["/host/skills"] }, + }; + + // when + await applyCommandConfig({ + config, + pluginConfig: createPluginConfig(), + ctx: { directory: "/tmp" }, + pluginComponents: createPluginComponents(), + }); + + // then + const commandConfig = config.command as Record; + expect(commandConfig["host-config-skill"]?.description).toContain("Host config skill"); + }); }); diff --git a/src/plugin-handlers/command-config-handler.ts b/src/plugin-handlers/command-config-handler.ts index 3d5fafd2c..c0189ba78 100644 --- a/src/plugin-handlers/command-config-handler.ts +++ b/src/plugin-handlers/command-config-handler.ts @@ -26,6 +26,7 @@ import { log, } from "../shared"; import type { PluginComponents } from "./plugin-components-loader"; +import { adaptHostSkillConfig } from "../shared/host-skill-config"; export async function applyCommandConfig(params: { config: Record; @@ -47,8 +48,10 @@ export async function applyCommandConfig(params: { log(getSkillPluginConflictWarning(externalSkillPlugin.pluginName)); } + const hostSkillConfig = adaptHostSkillConfig(params.config.skills); const [ configSourceSkills, + hostConfigSkills, userCommands, projectCommands, opencodeGlobalCommands, @@ -64,6 +67,10 @@ export async function applyCommandConfig(params: { config: params.pluginConfig.skills, configDir: params.ctx.directory, }), + discoverConfigSourceSkills({ + config: hostSkillConfig, + configDir: params.ctx.directory, + }), includeClaudeCommands ? loadUserCommands() : Promise.resolve({}), includeClaudeCommands ? loadProjectCommands(params.ctx.directory) : Promise.resolve({}), loadOpencodeGlobalCommands(), @@ -79,6 +86,7 @@ export async function applyCommandConfig(params: { params.config.command = { ...builtinCommands, ...skillsToCommandDefinitionRecord(configSourceSkills), + ...skillsToCommandDefinitionRecord(hostConfigSkills), ...userCommands, ...userSkills, ...globalAgentsSkills,