@skj1724/oh-my-opencode 3.17.8 → 3.17.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -6747,10 +6747,10 @@ var init_agent_display_names = __esm(() => {
6747
6747
  "council-member": "council-member"
6748
6748
  };
6749
6749
  AGENT_LIST_SORT_PREFIXES = {
6750
- sisyphus: "\u200B",
6751
- hephaestus: "\u200B\u200B",
6752
- prometheus: "\u200B\u200B\u200B",
6753
- atlas: "\u200B\u200B\u200B\u200B"
6750
+ sisyphus: "",
6751
+ hephaestus: "",
6752
+ prometheus: "",
6753
+ atlas: ""
6754
6754
  };
6755
6755
  INVISIBLE_AGENT_CHARACTERS_REGEX = /[\u200B\u200C\u200D\uFEFF]/g;
6756
6756
  REVERSE_DISPLAY_NAMES = Object.fromEntries(Object.entries(AGENT_DISPLAY_NAMES).map(([key, displayName]) => [displayName.toLowerCase(), key]));
@@ -53591,7 +53591,7 @@ var {
53591
53591
  // package.json
53592
53592
  var package_default = {
53593
53593
  name: "@skj1724/oh-my-opencode",
53594
- version: "3.17.8",
53594
+ version: "3.17.9",
53595
53595
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
53596
53596
  main: "./dist/index.js",
53597
53597
  types: "dist/index.d.ts",
package/dist/index.js CHANGED
@@ -2841,10 +2841,10 @@ var init_agent_display_names = __esm(() => {
2841
2841
  "council-member": "council-member"
2842
2842
  };
2843
2843
  AGENT_LIST_SORT_PREFIXES = {
2844
- sisyphus: "\u200B",
2845
- hephaestus: "\u200B\u200B",
2846
- prometheus: "\u200B\u200B\u200B",
2847
- atlas: "\u200B\u200B\u200B\u200B"
2844
+ sisyphus: "",
2845
+ hephaestus: "",
2846
+ prometheus: "",
2847
+ atlas: ""
2848
2848
  };
2849
2849
  INVISIBLE_AGENT_CHARACTERS_REGEX = /[\u200B\u200C\u200D\uFEFF]/g;
2850
2850
  REVERSE_DISPLAY_NAMES = Object.fromEntries(Object.entries(AGENT_DISPLAY_NAMES).map(([key, displayName]) => [displayName.toLowerCase(), key]));
@@ -94136,16 +94136,16 @@ function createGlobTools(ctx) {
94136
94136
  return { glob };
94137
94137
  }
94138
94138
  // src/tools/skill/constants.ts
94139
- var TOOL_DESCRIPTION_NO_SKILLS = "Load a skill or execute a slash command to get detailed instructions for a specific task. No skills are currently available.";
94140
- var TOOL_DESCRIPTION_PREFIX = `Load a skill or execute a slash command to get detailed instructions for a specific task.
94139
+ var TOOL_DESCRIPTION_NO_SKILLS = "\u52A0\u8F7D\u4E00\u4E2A Skill \u6216\u6267\u884C\u4E00\u4E2A\u659C\u6760\u547D\u4EE4\u6765\u83B7\u53D6\u7279\u5B9A\u4EFB\u52A1\u7684\u8BE6\u7EC6\u8BF4\u660E\u3002\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u7684 Skills\u3002";
94140
+ var TOOL_DESCRIPTION_PREFIX = `\u52A0\u8F7D\u4E00\u4E2A Skill \u6216\u6267\u884C\u4E00\u4E2A\u659C\u6760\u547D\u4EE4\u6765\u83B7\u53D6\u7279\u5B9A\u4EFB\u52A1\u7684\u8BE6\u7EC6\u8BF4\u660E\u3002
94141
94141
 
94142
- Skills and commands provide specialized knowledge and step-by-step guidance.
94143
- Use this when a task matches an available skill's or command's description.
94142
+ Skills \u548C Commands \u63D0\u4F9B\u4E13\u4E1A\u77E5\u8BC6\u548C\u5206\u6B65\u9AA4\u6307\u5BFC\u3002
94143
+ \u5F53\u4EFB\u52A1\u4E0E\u67D0\u4E2A\u53EF\u7528\u7684 Skill \u6216 Command \u7684\u63CF\u8FF0\u5339\u914D\u65F6\u4F7F\u7528\u6B64\u5DE5\u5177\u3002
94144
94144
 
94145
- **How to use:**
94146
- - Call with a skill name: name='review-work'
94147
- - Call with a command name (without leading slash): name='publish'
94148
- - The tool will return detailed instructions with your context applied.
94145
+ **\u4F7F\u7528\u65B9\u6CD5\uFF1A**
94146
+ - \u901A\u8FC7 Skill \u540D\u79F0\u8C03\u7528\uFF1Aname='review-work'
94147
+ - \u901A\u8FC7 Command \u540D\u79F0\u8C03\u7528\uFF08\u4E0D\u5E26\u524D\u5BFC\u659C\u6760\uFF09\uFF1Aname='publish'
94148
+ - \u8BE5\u5DE5\u5177\u5C06\u8FD4\u56DE\u5E26\u6709\u4F60\u4E0A\u4E0B\u6587\u7684\u8BE6\u7EC6\u8BF4\u660E\u3002
94149
94149
  `;
94150
94150
  // src/tools/skill/tools.ts
94151
94151
  import { dirname as dirname27 } from "path";
@@ -94239,7 +94239,7 @@ function formatSlashCommand(command) {
94239
94239
  const lines = [
94240
94240
  " <command>",
94241
94241
  ` <name>/${command.name}</name>`,
94242
- ` <description>${command.metadata.description || "(no description)"}</description>`,
94242
+ ` <description>${command.metadata.description || "\uFF08\u65E0\u63CF\u8FF0\uFF09"}</description>`,
94243
94243
  ` <scope>${command.scope}</scope>`
94244
94244
  ];
94245
94245
  if (argumentHint) {
@@ -94262,8 +94262,8 @@ function formatCombinedDescription(skills2, commands3) {
94262
94262
  }
94263
94263
  return `${TOOL_DESCRIPTION_PREFIX}
94264
94264
  <available_items>
94265
- Priority: project > user > opencode > builtin/plugin | Skills listed before commands
94266
- Invoke via: skill(name="item-name") - omit leading slash for commands.
94265
+ \u4F18\u5148\u7EA7\uFF1Aproject > user > opencode > builtin/plugin | Skills \u4F18\u5148\u4E8E Commands
94266
+ \u8C03\u7528\u65B9\u5F0F\uFF1Askill(name="item-name") - Commands \u4E0D\u5E26\u524D\u5BFC\u659C\u6760\u3002
94267
94267
  ${availableItems.join(`
94268
94268
  `)}
94269
94269
  </available_items>`;
@@ -94553,8 +94553,8 @@ function createSkillTool(options = {}) {
94553
94553
  return cachedDescription ?? TOOL_DESCRIPTION_PREFIX;
94554
94554
  },
94555
94555
  args: {
94556
- name: tool.schema.string().describe("The skill or command name (e.g., 'review-work' or 'publish'). Use without leading slash for commands."),
94557
- user_message: tool.schema.string().optional().describe("Optional arguments or context for command invocation. Example: name='publish', user_message='patch'")
94556
+ name: tool.schema.string().describe("Skill \u6216 Command \u7684\u540D\u79F0\uFF08\u4F8B\u5982 'review-work' \u6216 'publish'\uFF09\u3002Commands \u4E0D\u5E26\u524D\u5BFC\u659C\u6760\u3002"),
94557
+ user_message: tool.schema.string().optional().describe("Command \u8C03\u7528\u65F6\u7684\u53EF\u9009\u53C2\u6570\u6216\u4E0A\u4E0B\u6587\u3002\u793A\u4F8B\uFF1Aname='publish', user_message='patch'")
94558
94558
  },
94559
94559
  async execute(args, ctx) {
94560
94560
  const skills2 = await getSkills();
@@ -94572,7 +94572,7 @@ function createSkillTool(options = {}) {
94572
94572
  }
94573
94573
  });
94574
94574
  if (matchedSkill.definition.agent && (!ctx?.agent || matchedSkill.definition.agent !== ctx.agent)) {
94575
- throw new Error(`Skill "${matchedSkill.name}" is restricted to agent "${matchedSkill.definition.agent}"`);
94575
+ throw new Error(`Skill "${matchedSkill.name}" \u4EC5\u9650 Agent "${matchedSkill.definition.agent}" \u4F7F\u7528`);
94576
94576
  }
94577
94577
  let body = await extractSkillBody(matchedSkill);
94578
94578
  if (matchedSkill.name === "git-master") {
@@ -94606,13 +94606,13 @@ function createSkillTool(options = {}) {
94606
94606
  }
94607
94607
  const partialMatches = findPartialMatches(skills2, commands3, requestedName);
94608
94608
  if (partialMatches.length > 0) {
94609
- throw new Error(`Skill or command "${args.name}" not found. Did you mean: ${partialMatches.join(", ")}?`);
94609
+ throw new Error(`\u672A\u627E\u5230 Skill \u6216 Command "${args.name}"\u3002\u4F60\u662F\u5728\u627E\uFF1A${partialMatches.join(", ")} \u5417\uFF1F`);
94610
94610
  }
94611
94611
  const available = [
94612
94612
  ...skills2.map((skill) => skill.name),
94613
94613
  ...commands3.map((command) => `/${command.name}`)
94614
94614
  ].join(", ");
94615
- throw new Error(`Skill or command "${args.name}" not found. Available: ${available || "none"}`);
94615
+ throw new Error(`\u672A\u627E\u5230 Skill \u6216 Command "${args.name}"\u3002\u53EF\u7528\u9879\uFF1A${available || "\u65E0"}`);
94616
94616
  }
94617
94617
  });
94618
94618
  }
@@ -95600,9 +95600,9 @@ function validateOperationParams(args) {
95600
95600
  if (args.prompt_name)
95601
95601
  operations.push({ type: "prompt", name: args.prompt_name });
95602
95602
  if (operations.length === 0) {
95603
- throw new Error(`Missing operation. Exactly one of tool_name, resource_name, or prompt_name must be specified.
95603
+ throw new Error(`\u7F3A\u5C11\u64CD\u4F5C\u3002\u5FC5\u987B\u6307\u5B9A tool_name\u3001resource_name \u6216 prompt_name \u4E2D\u7684\u5176\u4E2D\u4E00\u4E2A\u3002
95604
95604
 
95605
- ` + `Examples:
95605
+ ` + `\u793A\u4F8B:
95606
95606
  ` + ` skill_mcp(mcp_name="sqlite", tool_name="query", arguments='{"sql": "SELECT * FROM users"}')
95607
95607
  ` + ` skill_mcp(mcp_name="memory", resource_name="memory://notes")
95608
95608
  ` + ` skill_mcp(mcp_name="helper", prompt_name="summarize", arguments='{"text": "..."}')`);
@@ -95613,11 +95613,11 @@ function validateOperationParams(args) {
95613
95613
  args.resource_name && `resource_name="${args.resource_name}"`,
95614
95614
  args.prompt_name && `prompt_name="${args.prompt_name}"`
95615
95615
  ].filter(Boolean).join(", ");
95616
- throw new Error(`Multiple operations specified. Exactly one of tool_name, resource_name, or prompt_name must be provided.
95616
+ throw new Error(`\u6307\u5B9A\u4E86\u591A\u4E2A\u64CD\u4F5C\u3002\u53EA\u80FD\u63D0\u4F9B tool_name\u3001resource_name \u6216 prompt_name \u4E2D\u7684\u5176\u4E2D\u4E00\u4E2A\u3002
95617
95617
 
95618
- ` + `Received: ${provided}
95618
+ ` + `\u6536\u5230: ${provided}
95619
95619
 
95620
- ` + `Use separate calls for each operation.`);
95620
+ ` + `\u8BF7\u4F7F\u7528\u72EC\u7ACB\u7684\u8C03\u7528\u6765\u5904\u7406\u6BCF\u4E2A\u64CD\u4F5C\u3002`);
95621
95621
  }
95622
95622
  return operations[0];
95623
95623
  }
@@ -95634,19 +95634,19 @@ function formatAvailableMcps(skills2) {
95634
95634
  for (const skill2 of skills2) {
95635
95635
  if (skill2.mcpConfig) {
95636
95636
  for (const serverName of Object.keys(skill2.mcpConfig)) {
95637
- mcps.push(` - "${serverName}" from skill "${skill2.name}"`);
95637
+ mcps.push(` - "${serverName}"\uFF08\u6765\u81EA skill "${skill2.name}"\uFF09`);
95638
95638
  }
95639
95639
  }
95640
95640
  }
95641
95641
  return mcps.length > 0 ? mcps.join(`
95642
- `) : " (none found)";
95642
+ `) : " \uFF08\u672A\u627E\u5230\uFF09";
95643
95643
  }
95644
95644
  function formatBuiltinMcpHint(mcpName) {
95645
95645
  const nativeTools = BUILTIN_MCP_TOOL_HINTS[mcpName];
95646
95646
  if (!nativeTools)
95647
95647
  return null;
95648
- return `"${mcpName}" is a builtin MCP, not a skill MCP.
95649
- ` + `Use the native tools directly:
95648
+ return `"${mcpName}" \u662F\u4E00\u4E2A\u5185\u7F6E MCP\uFF0C\u800C\u975E skill MCP\u3002
95649
+ ` + `\u8BF7\u76F4\u63A5\u4F7F\u7528\u539F\u751F\u5DE5\u5177:
95650
95650
  ` + nativeTools.map((toolName) => ` - ${toolName}`).join(`
95651
95651
  `);
95652
95652
  }
@@ -95659,7 +95659,7 @@ function applyGrepFilter(output, pattern) {
95659
95659
  `);
95660
95660
  const filtered = lines.filter((line) => regex.test(line));
95661
95661
  return filtered.length > 0 ? filtered.join(`
95662
- `) : `[grep] No lines matched pattern: ${pattern}`;
95662
+ `) : `[grep] \u6CA1\u6709\u884C\u5339\u914D\u6A21\u5F0F: ${pattern}`;
95663
95663
  } catch {
95664
95664
  return output;
95665
95665
  }
@@ -95669,12 +95669,12 @@ function createSkillMcpTool(options) {
95669
95669
  return tool({
95670
95670
  description: SKILL_MCP_DESCRIPTION,
95671
95671
  args: {
95672
- mcp_name: tool.schema.string().describe("Name of the MCP server from skill config"),
95673
- tool_name: tool.schema.string().optional().describe("MCP tool to call"),
95674
- resource_name: tool.schema.string().optional().describe("MCP resource URI to read"),
95675
- prompt_name: tool.schema.string().optional().describe("MCP prompt to get"),
95676
- arguments: tool.schema.union([tool.schema.string(), tool.schema.object({})]).optional().describe("JSON string or object of arguments"),
95677
- grep: tool.schema.string().optional().describe("Regex pattern to filter output lines (only matching lines returned)")
95672
+ mcp_name: tool.schema.string().describe("skill \u914D\u7F6E\u4E2D MCP \u670D\u52A1\u5668\u7684\u540D\u79F0"),
95673
+ tool_name: tool.schema.string().optional().describe("\u8981\u8C03\u7528\u7684 MCP \u5DE5\u5177"),
95674
+ resource_name: tool.schema.string().optional().describe("\u8981\u8BFB\u53D6\u7684 MCP \u8D44\u6E90 URI"),
95675
+ prompt_name: tool.schema.string().optional().describe("\u8981\u83B7\u53D6\u7684 MCP \u63D0\u793A"),
95676
+ arguments: tool.schema.union([tool.schema.string(), tool.schema.object({})]).optional().describe("JSON \u5B57\u7B26\u4E32\u6216\u5BF9\u8C61\u5F62\u5F0F\u7684\u53C2\u6570"),
95677
+ grep: tool.schema.string().optional().describe("\u7528\u4E8E\u8FC7\u6EE4\u8F93\u51FA\u884C\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\uFF08\u4EC5\u8FD4\u56DE\u5339\u914D\u7684\u884C\uFF09")
95678
95678
  },
95679
95679
  async execute(args, toolContext) {
95680
95680
  const operation = validateOperationParams(args);
@@ -95685,16 +95685,16 @@ function createSkillMcpTool(options) {
95685
95685
  if (builtinHint) {
95686
95686
  throw new Error(builtinHint);
95687
95687
  }
95688
- throw new Error(`MCP server "${args.mcp_name}" not found.
95688
+ throw new Error(`\u672A\u627E\u5230 MCP \u670D\u52A1\u5668 "${args.mcp_name}"\u3002
95689
95689
 
95690
- ` + `Available MCP servers in loaded skills:
95690
+ ` + `\u5DF2\u52A0\u8F7D skills \u4E2D\u7684\u53EF\u7528 MCP \u670D\u52A1\u5668:
95691
95691
  ` + formatAvailableMcps(skills2) + `
95692
95692
 
95693
- ` + `Hint: Load the skill first using the 'skill' tool, then call skill_mcp.`);
95693
+ ` + `\u63D0\u793A: \u8BF7\u5148\u4F7F\u7528 'skill' \u5DE5\u5177\u52A0\u8F7D skill\uFF0C\u7136\u540E\u518D\u8C03\u7528 skill_mcp\u3002`);
95694
95694
  }
95695
95695
  const sessionID = toolContext.sessionID || getSessionID2?.();
95696
95696
  if (!sessionID) {
95697
- throw new Error("No active session available for skill MCP call.");
95697
+ throw new Error("\u6CA1\u6709\u53EF\u7528\u7684\u6D3B\u8DC3\u4F1A\u8BDD\u6765\u6267\u884C skill MCP \u8C03\u7528\u3002");
95698
95698
  }
95699
95699
  const info = {
95700
95700
  serverName: args.mcp_name,
@@ -96246,8 +96246,8 @@ function createBackgroundCancel(manager, _client) {
96246
96246
  return tool({
96247
96247
  description: BACKGROUND_CANCEL_DESCRIPTION,
96248
96248
  args: {
96249
- taskId: tool.schema.string().optional().describe("Task ID to cancel (required if all=false)"),
96250
- all: tool.schema.boolean().optional().describe("Cancel all running background tasks (default: false)")
96249
+ taskId: tool.schema.string().optional().describe("\u8981\u53D6\u6D88\u7684 task ID\uFF08\u5F53 all=false \u65F6\u5FC5\u987B\u63D0\u4F9B\uFF09"),
96250
+ all: tool.schema.boolean().optional().describe("\u53D6\u6D88\u6240\u6709\u6B63\u5728\u8FD0\u884C\u7684\u540E\u53F0\u4EFB\u52A1\uFF08\u9ED8\u8BA4: false\uFF09")
96251
96251
  },
96252
96252
  async execute(args, toolContext) {
96253
96253
  try {
@@ -96896,11 +96896,11 @@ function createCallOmoAgent(ctx, backgroundManager, disabledAgents = [], agentOv
96896
96896
  return tool({
96897
96897
  description,
96898
96898
  args: {
96899
- description: tool.schema.string().describe("A short (3-5 words) description of the task"),
96900
- prompt: tool.schema.string().describe("The task for the agent to perform"),
96901
- subagent_type: tool.schema.string().describe("The agent to invoke. Supports built-in agents and any custom agents registered at runtime."),
96902
- run_in_background: tool.schema.boolean().describe("REQUIRED. true: run asynchronously (use background_output to get results), false: run synchronously and wait for completion"),
96903
- session_id: tool.schema.string().describe("Existing Task session to continue").optional()
96899
+ description: tool.schema.string().describe("\u4EFB\u52A1\u7684\u7B80\u77ED\u63CF\u8FF0\uFF083-5 \u4E2A\u8BCD\uFF09"),
96900
+ prompt: tool.schema.string().describe("agent \u9700\u8981\u6267\u884C\u7684\u4EFB\u52A1\u5185\u5BB9"),
96901
+ subagent_type: tool.schema.string().describe("\u8981\u8C03\u7528\u7684 agent\u3002\u652F\u6301\u5185\u7F6E agents \u548C\u8FD0\u884C\u65F6\u6CE8\u518C\u7684\u81EA\u5B9A\u4E49 agents\u3002"),
96902
+ run_in_background: tool.schema.boolean().describe("\u5FC5\u586B\u3002true: \u5F02\u6B65\u8FD0\u884C\uFF08\u4F7F\u7528 background_output \u83B7\u53D6\u7ED3\u679C\uFF09\uFF0Cfalse: \u540C\u6B65\u8FD0\u884C\u5E76\u7B49\u5F85\u5B8C\u6210"),
96903
+ session_id: tool.schema.string().describe("\u8981\u7EE7\u7EED\u7684\u5DF2\u6709 Task session").optional()
96904
96904
  },
96905
96905
  async execute(args, toolContext) {
96906
96906
  const toolCtx = toolContext;
@@ -100057,14 +100057,14 @@ function createDelegateTaskPresentation(options) {
100057
100057
 
100058
100058
  // src/tools/delegate-task/tools.ts
100059
100059
  var delegateTaskArgsSchema = {
100060
- load_skills: tool.schema.array(tool.schema.string()).describe("Skill names to inject. REQUIRED - pass [] if no skills needed."),
100061
- description: tool.schema.string().optional().describe("Short task description (3-5 words). Auto-generated from prompt if omitted."),
100062
- prompt: tool.schema.string().describe("Full detailed prompt for the agent"),
100063
- run_in_background: tool.schema.boolean().describe("REQUIRED. true=async (returns task_id), false=sync (waits). Use false for task delegation, true ONLY for parallel exploration."),
100064
- category: tool.schema.string().optional().describe("REQUIRED if subagent_type not provided. Do NOT provide both category and subagent_type."),
100065
- subagent_type: tool.schema.string().optional().describe("REQUIRED if category not provided. Do NOT provide both category and subagent_type."),
100066
- task_id: tool.schema.string().optional().describe("Existing task to continue. Canonical resume identifier."),
100067
- command: tool.schema.string().optional().describe("The command that triggered this task")
100060
+ load_skills: tool.schema.array(tool.schema.string()).describe("\u8981\u6CE8\u5165\u7684 Skill \u540D\u79F0\u3002REQUIRED - \u65E0\u9700 skills \u65F6\u8BF7\u4F20\u5165 []\u3002"),
100061
+ description: tool.schema.string().optional().describe("\u7B80\u77ED\u7684\u4EFB\u52A1\u63CF\u8FF0\uFF083-5 \u4E2A\u8BCD\uFF09\u3002\u5982\u7701\u7565\u5C06\u4ECE prompt \u81EA\u52A8\u751F\u6210\u3002"),
100062
+ prompt: tool.schema.string().describe("\u7ED9 agent \u7684\u5B8C\u6574\u8BE6\u7EC6 prompt"),
100063
+ run_in_background: tool.schema.boolean().describe("REQUIRED\u3002true=\u5F02\u6B65\uFF08\u8FD4\u56DE task_id\uFF09\uFF0Cfalse=\u540C\u6B65\uFF08\u7B49\u5F85\uFF09\u3002\u4EFB\u52A1\u59D4\u6258\u8BF7\u4F7F\u7528 false\uFF0C\u4EC5\u5728\u5E76\u884C\u63A2\u7D22\u65F6\u4F7F\u7528 true\u3002"),
100064
+ category: tool.schema.string().optional().describe("\u672A\u63D0\u4F9B subagent_type \u65F6 REQUIRED\u3002\u8BF7\u52FF\u540C\u65F6\u63D0\u4F9B category \u548C subagent_type\u3002"),
100065
+ subagent_type: tool.schema.string().optional().describe("\u672A\u63D0\u4F9B category \u65F6 REQUIRED\u3002\u8BF7\u52FF\u540C\u65F6\u63D0\u4F9B category \u548C subagent_type\u3002"),
100066
+ task_id: tool.schema.string().optional().describe("\u8981\u7EE7\u7EED\u7684\u73B0\u6709\u4EFB\u52A1\u3002\u6807\u51C6\u7684\u6062\u590D\u6807\u8BC6\u7B26\u3002"),
100067
+ command: tool.schema.string().optional().describe("\u89E6\u53D1\u6B64\u4EFB\u52A1\u7684 command")
100068
100068
  };
100069
100069
  function createDelegateTask(options) {
100070
100070
  const { availableCategories, availableSkills, categoryExamples, description } = createDelegateTaskPresentation(options);
@@ -100581,11 +100581,11 @@ import { join as join93 } from "path";
100581
100581
  import { existsSync as existsSync87, readdirSync as readdirSync24 } from "fs";
100582
100582
  function createTaskList(config2) {
100583
100583
  return tool({
100584
- description: `List all active tasks with summary information.
100585
-
100586
- Returns tasks excluding completed and deleted statuses by default.
100587
- For each task's blockedBy field, filters to only include unresolved (non-completed) blockers.
100588
- Returns summary format: id, subject, status, owner, blockedBy (not full description).`,
100584
+ description: `\u5217\u51FA\u6240\u6709\u6D3B\u8DC3 task\uFF0C\u5305\u542B\u6458\u8981\u4FE1\u606F\u3002
100585
+
100586
+ \u9ED8\u8BA4\u6392\u9664\u5DF2 completed \u548C deleted \u72B6\u6001\u7684 task\u3002
100587
+ \u5BF9\u6BCF\u4E2A task \u7684 blockedBy \u5B57\u6BB5\uFF0C\u4EC5\u4FDD\u7559\u672A\u89E3\u51B3\uFF08\u975E completed\uFF09\u7684\u963B\u585E\u9879\u3002
100588
+ \u8FD4\u56DE\u6458\u8981\u683C\u5F0F\uFF1Aid\u3001subject\u3001status\u3001owner\u3001blockedBy\uFF08\u4E0D\u542B\u5B8C\u6574 description\uFF09\u3002`,
100589
100589
  args: {},
100590
100590
  execute: async () => {
100591
100591
  const taskDir = getTaskDir(config2);
@@ -100620,7 +100620,7 @@ Returns summary format: id, subject, status, owner, blockedBy (not full descript
100620
100620
  });
100621
100621
  return JSON.stringify({
100622
100622
  tasks: summaries,
100623
- reminder: "1 task = 1 task. Maximize parallel execution by running independent tasks (tasks with empty blockedBy) concurrently."
100623
+ reminder: "1 task = 1 task\u3002\u901A\u8FC7\u5E76\u53D1\u8FD0\u884C\u72EC\u7ACB\u7684 task\uFF08blockedBy \u4E3A\u7A7A\u7684 task\uFF09\u6700\u5927\u5316\u5E76\u884C\u6267\u884C\u6548\u7387\u3002"
100624
100624
  });
100625
100625
  }
100626
100626
  });
@@ -129846,7 +129846,7 @@ class PostHog extends PostHogBackendClient {
129846
129846
  // package.json
129847
129847
  var package_default = {
129848
129848
  name: "@skj1724/oh-my-opencode",
129849
- version: "3.17.8",
129849
+ version: "3.17.9",
129850
129850
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
129851
129851
  main: "./dist/index.js",
129852
129852
  types: "dist/index.d.ts",
@@ -1,3 +1,3 @@
1
1
  export declare const TOOL_NAME: "skill";
2
- export declare const TOOL_DESCRIPTION_NO_SKILLS = "Load a skill or execute a slash command to get detailed instructions for a specific task. No skills are currently available.";
3
- export declare const TOOL_DESCRIPTION_PREFIX = "Load a skill or execute a slash command to get detailed instructions for a specific task.\n\nSkills and commands provide specialized knowledge and step-by-step guidance.\nUse this when a task matches an available skill's or command's description.\n\n**How to use:**\n- Call with a skill name: name='review-work'\n- Call with a command name (without leading slash): name='publish'\n- The tool will return detailed instructions with your context applied.\n";
2
+ export declare const TOOL_DESCRIPTION_NO_SKILLS = "\u52A0\u8F7D\u4E00\u4E2A Skill \u6216\u6267\u884C\u4E00\u4E2A\u659C\u6760\u547D\u4EE4\u6765\u83B7\u53D6\u7279\u5B9A\u4EFB\u52A1\u7684\u8BE6\u7EC6\u8BF4\u660E\u3002\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u7684 Skills\u3002";
3
+ export declare const TOOL_DESCRIPTION_PREFIX = "\u52A0\u8F7D\u4E00\u4E2A Skill \u6216\u6267\u884C\u4E00\u4E2A\u659C\u6760\u547D\u4EE4\u6765\u83B7\u53D6\u7279\u5B9A\u4EFB\u52A1\u7684\u8BE6\u7EC6\u8BF4\u660E\u3002\n\nSkills \u548C Commands \u63D0\u4F9B\u4E13\u4E1A\u77E5\u8BC6\u548C\u5206\u6B65\u9AA4\u6307\u5BFC\u3002\n\u5F53\u4EFB\u52A1\u4E0E\u67D0\u4E2A\u53EF\u7528\u7684 Skill \u6216 Command \u7684\u63CF\u8FF0\u5339\u914D\u65F6\u4F7F\u7528\u6B64\u5DE5\u5177\u3002\n\n**\u4F7F\u7528\u65B9\u6CD5\uFF1A**\n- \u901A\u8FC7 Skill \u540D\u79F0\u8C03\u7528\uFF1Aname='review-work'\n- \u901A\u8FC7 Command \u540D\u79F0\u8C03\u7528\uFF08\u4E0D\u5E26\u524D\u5BFC\u659C\u6760\uFF09\uFF1Aname='publish'\n- \u8BE5\u5DE5\u5177\u5C06\u8FD4\u56DE\u5E26\u6709\u4F60\u4E0A\u4E0B\u6587\u7684\u8BE6\u7EC6\u8BF4\u660E\u3002\n";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skj1724/oh-my-opencode",
3
- "version": "3.17.8",
3
+ "version": "3.17.9",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",