From 945c7e658a8e5e596988e2b43fc6c2d754ca2c2e Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 21 Feb 2026 02:16:11 +0900 Subject: [PATCH] fix(skill/command): add user_message param to skill tool, fix command priority order - BUG-20: Add optional user_message parameter to skill tool for command arguments - BUG-19: Reorder command discovery: user > project > opencode-project > opencode-global > builtin - Update AGENTS.md to reflect slashcommand removal and skill tool changes --- src/tools/AGENTS.md | 5 ++--- src/tools/skill/tools.ts | 6 +++++- src/tools/skill/types.ts | 1 + src/tools/slashcommand/command-discovery.ts | 8 ++++---- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/tools/AGENTS.md b/src/tools/AGENTS.md index 429922179..accb6fb62 100644 --- a/src/tools/AGENTS.md +++ b/src/tools/AGENTS.md @@ -67,13 +67,12 @@ | `session_search` | `createSessionManagerTools` | query, session_id, case_sensitive, limit | | `session_info` | `createSessionManagerTools` | session_id | -### Skill/Command (3) +### Skill/Command (2) | Tool | Factory | Parameters | |------|---------|------------| -| `skill` | `createSkillTool` | name | +| `skill` | `createSkillTool` | name, user_message | | `skill_mcp` | `createSkillMcpTool` | mcp_name, tool_name/resource_name/prompt_name, arguments, grep | -| `slashcommand` | `createSlashcommandTool` | command, user_message | ### System (2) diff --git a/src/tools/skill/tools.ts b/src/tools/skill/tools.ts index 2821a8070..eec456f62 100644 --- a/src/tools/skill/tools.ts +++ b/src/tools/skill/tools.ts @@ -224,6 +224,10 @@ export function createSkillTool(options: SkillLoadOptions = {}): ToolDefinition }, args: { name: tool.schema.string().describe("The skill or command name (e.g., 'code-review' or 'publish'). Use without leading slash for commands."), + user_message: tool.schema + .string() + .optional() + .describe("Optional arguments or context for command invocation. Example: name='publish', user_message='patch'"), }, async execute(args: SkillArgs, ctx?: { agent?: string }) { const skills = await getSkills() @@ -273,7 +277,7 @@ export function createSkillTool(options: SkillLoadOptions = {}): ToolDefinition const matchedCommand = commands.find(c => c.name.toLowerCase() === requestedName.toLowerCase()) if (matchedCommand) { - return await formatLoadedCommand(matchedCommand) + return await formatLoadedCommand(matchedCommand, args.user_message) } // No match found — provide helpful error with partial matches diff --git a/src/tools/skill/types.ts b/src/tools/skill/types.ts index 13551ba94..4fd48d6c7 100644 --- a/src/tools/skill/types.ts +++ b/src/tools/skill/types.ts @@ -5,6 +5,7 @@ import type { CommandInfo } from "../slashcommand/types" export interface SkillArgs { name: string + user_message?: string } export interface SkillInfo { diff --git a/src/tools/slashcommand/command-discovery.ts b/src/tools/slashcommand/command-discovery.ts index 50be5d024..f4a9d1e2c 100644 --- a/src/tools/slashcommand/command-discovery.ts +++ b/src/tools/slashcommand/command-discovery.ts @@ -76,10 +76,10 @@ export function discoverCommandsSync(directory?: string): CommandInfo[] { })) return [ - ...builtinCommands, - ...opencodeProjectCommands, - ...projectCommands, - ...opencodeGlobalCommands, ...userCommands, + ...projectCommands, + ...opencodeProjectCommands, + ...opencodeGlobalCommands, + ...builtinCommands, ] }