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,