@skj1724/oh-my-opencode 3.11.1 → 3.11.3

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
@@ -50376,7 +50376,7 @@ var {
50376
50376
  // package.json
50377
50377
  var package_default = {
50378
50378
  name: "@skj1724/oh-my-opencode",
50379
- version: "3.11.1",
50379
+ version: "3.11.3",
50380
50380
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
50381
50381
  main: "dist/index.js",
50382
50382
  types: "dist/index.d.ts",
@@ -65985,7 +65985,8 @@ var ExperimentalConfigSchema = exports_external.object({
65985
65985
  safe_hook_creation: exports_external.boolean().optional(),
65986
65986
  disable_omo_env: exports_external.boolean().optional(),
65987
65987
  hashline_edit: exports_external.boolean().optional(),
65988
- model_fallback_title: exports_external.boolean().optional()
65988
+ model_fallback_title: exports_external.boolean().optional(),
65989
+ minimax_4m_context_enabled: exports_external.boolean().optional()
65989
65990
  });
65990
65991
  // src/config/schema/git-env-prefix.ts
65991
65992
  var GIT_ENV_ASSIGNMENT_PATTERN = /^(?:[A-Za-z_][A-Za-z0-9_]*=[A-Za-z0-9_-]*)(?: [A-Za-z_][A-Za-z0-9_]*=[A-Za-z0-9_-]*)*$/;
@@ -36,5 +36,6 @@ export declare const ExperimentalConfigSchema: z.ZodObject<{
36
36
  disable_omo_env: z.ZodOptional<z.ZodBoolean>;
37
37
  hashline_edit: z.ZodOptional<z.ZodBoolean>;
38
38
  model_fallback_title: z.ZodOptional<z.ZodBoolean>;
39
+ minimax_4m_context_enabled: z.ZodOptional<z.ZodBoolean>;
39
40
  }, z.core.$strip>;
40
41
  export type ExperimentalConfig = z.infer<typeof ExperimentalConfigSchema>;
@@ -1636,6 +1636,7 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
1636
1636
  disable_omo_env: z.ZodOptional<z.ZodBoolean>;
1637
1637
  hashline_edit: z.ZodOptional<z.ZodBoolean>;
1638
1638
  model_fallback_title: z.ZodOptional<z.ZodBoolean>;
1639
+ minimax_4m_context_enabled: z.ZodOptional<z.ZodBoolean>;
1639
1640
  }, z.core.$strip>>;
1640
1641
  auto_update: z.ZodOptional<z.ZodBoolean>;
1641
1642
  skills: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodObject<{
@@ -1,4 +1,4 @@
1
1
  export declare const AGENT_USAGE_REMINDER_STORAGE: string;
2
2
  export declare const TARGET_TOOLS: Set<string>;
3
3
  export declare const AGENT_TOOLS: Set<string>;
4
- export declare const REMINDER_MESSAGE = "\n[Agent Usage Reminder]\n\nYou called a search/fetch tool directly without leveraging specialized agents.\n\nRECOMMENDED: Use task with explore/librarian agents for better results:\n\n```\n// Parallel exploration - fire multiple agents simultaneously\ntask(agent=\"explore\", prompt=\"Find all files matching pattern X\")\ntask(agent=\"explore\", prompt=\"Search for implementation of Y\") \ntask(agent=\"librarian\", prompt=\"Lookup documentation for Z\")\n\n// Then continue your work while they run in background\n// System will notify you when each completes\n```\n\nWHY:\n- Agents can perform deeper, more thorough searches\n- Background tasks run in parallel, saving time\n- Specialized agents have domain expertise\n- Reduces context window usage in main session\n\nALWAYS prefer: Multiple parallel task calls > Direct tool calls\n";
4
+ export declare const REMINDER_MESSAGE = "\n[\u4EE3\u7406\u4F7F\u7528\u63D0\u9192]\n\n\u4F60\u76F4\u63A5\u8C03\u7528\u4E86\u641C\u7D22/\u83B7\u53D6\u5DE5\u5177\uFF0C\u800C\u6CA1\u6709\u5229\u7528\u4E13\u95E8\u7684\u4EE3\u7406\u3002\n\n\u63A8\u8350\u505A\u6CD5\uFF1A\u4F7F\u7528 task \u8C03\u7528 explore/librarian \u4EE3\u7406\u4EE5\u83B7\u5F97\u66F4\u597D\u7684\u7ED3\u679C\uFF1A\n\n```\n// \u5E76\u884C\u63A2\u7D22 - \u540C\u65F6\u542F\u52A8\u591A\u4E2A\u4EE3\u7406\ntask(agent=\"explore\", prompt=\"Find all files matching pattern X\")\ntask(agent=\"explore\", prompt=\"Search for implementation of Y\")\ntask(agent=\"librarian\", prompt=\"Lookup documentation for Z\")\n\n// \u5728\u5B83\u4EEC\u540E\u53F0\u8FD0\u884C\u65F6\u7EE7\u7EED\u4F60\u7684\u5DE5\u4F5C\n// \u7CFB\u7EDF\u4F1A\u5728\u6BCF\u4E2A\u4EE3\u7406\u5B8C\u6210\u65F6\u901A\u77E5\u4F60\n```\n\n\u539F\u56E0\uFF1A\n- \u4EE3\u7406\u53EF\u4EE5\u6267\u884C\u66F4\u6DF1\u3001\u66F4\u5F7B\u5E95\u7684\u641C\u7D22\n- \u540E\u53F0\u4EFB\u52A1\u5E76\u884C\u8FD0\u884C\uFF0C\u8282\u7701\u65F6\u95F4\n- \u4E13\u95E8\u7684\u4EE3\u7406\u5177\u6709\u9886\u57DF\u4E13\u4E1A\u77E5\u8BC6\n- \u51CF\u5C11\u4E3B\u4F1A\u8BDD\u4E2D\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u4F7F\u7528\n\n\u59CB\u7EC8\u4F18\u5148\u9009\u62E9\uFF1A\u591A\u4E2A\u5E76\u884C task \u8C03\u7528 > \u76F4\u63A5\u5DE5\u5177\u8C03\u7528\n";
@@ -1,19 +1,18 @@
1
1
  /**
2
- * Think Mode Switcher
2
+ * Think Mode 切换器
3
3
  *
4
- * This module handles "thinking mode" activation for reasoning-capable models.
5
- * When a user includes "think" keywords in their prompt, models are upgraded to
6
- * their high-reasoning variants with extended thinking budgets.
4
+ * 本模块处理具备推理能力的模型的"思考模式"激活。
5
+ * 当用户在提示词中包含"思考"关键词时,模型将升级到
6
+ * 具有扩展思考预算的高推理变体。
7
7
  *
8
- * PROVIDER ALIASING:
9
- * GitHub Copilot acts as a proxy provider that routes to underlying providers
10
- * (Anthropic, Google, OpenAI). We resolve the proxy to the actual provider
11
- * based on model name patterns, allowing GitHub Copilot to inherit thinking
12
- * configurations without duplication.
8
+ * 提供商别名机制:
9
+ * GitHub Copilot 充当代理提供商,路由到底层提供商
10
+ *(AnthropicGoogleOpenAI)。我们根据模型名称模式解析代理到实际提供商,
11
+ * 使 GitHub Copilot 能够继承思考配置而无需重复。
13
12
  *
14
- * NORMALIZATION:
15
- * Model IDs are normalized (dots hyphens in version numbers) to handle API
16
- * inconsistencies defensively while maintaining backwards compatibility.
13
+ * 规范化:
14
+ * 模型 ID 经过规范化(点号版本号中的连字符)以防御性处理 API
15
+ * 不一致性,同时保持向后兼容性。
17
16
  */
18
17
  export declare function getHighVariant(modelID: string): string | null;
19
18
  export declare function isAlreadyHighVariant(modelID: string): boolean;
@@ -1,17 +1,16 @@
1
1
  /**
2
- * Proactive Thinking Block Validator Hook
2
+ * 主动式 Thinking Block 验证器 Hook
3
3
  *
4
- * Prevents "Expected thinking/redacted_thinking but found tool_use" errors
5
- * by validating and fixing message structure BEFORE sending to Anthropic API.
4
+ * 在发送消息到 Anthropic API 之前,通过验证和修复消息结构来
5
+ * 防止"Expected thinking/redacted_thinking but found tool_use"错误。
6
6
  *
7
- * This hook runs on the "experimental.chat.messages.transform" hook point,
8
- * which is called before messages are converted to ModelMessage format and
9
- * sent to the API.
7
+ * Hook 运行在"experimental.chat.messages.transform"钩子点,
8
+ * 该钩子在消息转换为 ModelMessage 格式并发送到 API 之前调用。
10
9
  *
11
- * Key differences from session-recovery hook:
12
- * - PROACTIVE (prevents error) vs REACTIVE (fixes after error)
13
- * - Runs BEFORE API call vs AFTER API error
14
- * - User never sees the error vs User sees error then recovery
10
+ * session-recovery hook 的关键区别:
11
+ * - 主动式(预防错误)vs 响应式(错误后修复)
12
+ * - API 调用之前运行 vs API 错误之后运行
13
+ * - 用户永远不会看到错误 vs 用户看到错误然后恢复
15
14
  */
16
15
  import type { Message, Part } from "@opencode-ai/sdk";
17
16
  interface MessageWithParts {
@@ -24,7 +23,7 @@ type MessagesTransformHook = {
24
23
  }) => Promise<void>;
25
24
  };
26
25
  /**
27
- * Validate and fix assistant messages that have tool_use but no thinking block
26
+ * 验证并修复包含 tool_use 但没有 thinking block assistant 消息
28
27
  */
29
28
  export declare function createThinkingBlockValidatorHook(): MessagesTransformHook;
30
29
  export {};
@@ -1 +1 @@
1
- export declare const TODOWRITE_DESCRIPTION = "Use this tool to create and manage a structured task list for tracking progress on multi-step work.\n\n## Todo Format (MANDATORY)\n\nEach todo title MUST encode four elements: WHERE, WHY, HOW, and EXPECTED RESULT.\n\nFormat: \"[WHERE] [HOW] to [WHY] \u2014 expect [RESULT]\"\n\nGOOD:\n- \"src/utils/validation.ts: Add validateEmail() for input sanitization \u2014 returns boolean\"\n- \"UserService.create(): Call validateEmail() before DB insert \u2014 rejects invalid emails with 400\"\n- \"validation.test.ts: Add test for missing @ sign \u2014 expect validateEmail('foo') to return false\"\n\nBAD:\n- \"Implement email validation\" (where? how? what result?)\n- \"Add dark mode\" (this is a feature, not a todo)\n- \"Fix auth\" (what file? what changes? what's expected?)\n\n## Granularity Rules\n\nEach todo MUST be a single atomic action completable in 1-3 tool calls. If it needs more, split it.\n\n**Size test**: Can you complete this todo by editing one file or running one command? If not, it's too big.\n\n## Task Management\n- One in_progress at a time. Complete it before starting the next.\n- Mark completed immediately after finishing each item.\n- Skip this tool for single trivial tasks (one-step, obvious action).";
1
+ export declare const TODOWRITE_DESCRIPTION = "\u4F7F\u7528\u6B64\u5DE5\u5177\u521B\u5EFA\u548C\u7BA1\u7406\u7ED3\u6784\u5316\u5F85\u529E\u5217\u8868\uFF0C\u7528\u4E8E\u8DDF\u8E2A\u591A\u6B65\u9AA4\u5DE5\u4F5C\u7684\u8FDB\u5EA6\u3002\n\n## \u5F85\u529E\u683C\u5F0F\uFF08\u5FC5\u987B\u9075\u5B88\uFF09\n\n\u6BCF\u4E2A\u5F85\u529E\u6807\u9898\u5FC5\u987B\u5305\u542B\u56DB\u4E2A\u8981\u7D20\uFF1A\u4F4D\u7F6E\uFF08WHERE\uFF09\u3001\u539F\u56E0\uFF08WHY\uFF09\u3001\u65B9\u6CD5\uFF08HOW\uFF09\u548C\u9884\u671F\u7ED3\u679C\uFF08EXPECTED RESULT\uFF09\u3002\n\n\u683C\u5F0F\uFF1A\"[\u4F4D\u7F6E] [\u65B9\u6CD5] \u4EE5 [\u539F\u56E0] \u2014 \u9884\u671F [\u7ED3\u679C]\"\n\n\u6B63\u786E\u793A\u4F8B\uFF1A\n- \"src/utils/validation.ts: Add validateEmail() for input sanitization \u2014 returns boolean\"\n- \"UserService.create(): Call validateEmail() before DB insert \u2014 rejects invalid emails with 400\"\n- \"validation.test.ts: Add test for missing @ sign \u2014 expect validateEmail('foo') to return false\"\n\n\u9519\u8BEF\u793A\u4F8B\uFF1A\n- \"Implement email validation\"\uFF08\u4F4D\u7F6E\uFF1F\u65B9\u6CD5\uFF1F\u7ED3\u679C\uFF1F\uFF09\n- \"Add dark mode\"\uFF08\u8FD9\u662F\u529F\u80FD\uFF0C\u4E0D\u662F\u5F85\u529E\uFF09\n- \"Fix auth\"\uFF08\u54EA\u4E2A\u6587\u4EF6\uFF1F\u4EC0\u4E48\u4FEE\u6539\uFF1F\u9884\u671F\u4EC0\u4E48\uFF1F\uFF09\n\n## \u7C92\u5EA6\u89C4\u5219\n\n\u6BCF\u4E2A\u5F85\u529E\u5FC5\u987B\u662F\u5355\u4E2A\u539F\u5B50\u64CD\u4F5C\uFF0C\u53EF\u5728 1-3 \u6B21\u5DE5\u5177\u8C03\u7528\u5185\u5B8C\u6210\u3002\u5982\u679C\u9700\u8981\u66F4\u591A\u8C03\u7528\uFF0C\u5219\u5E94\u62C6\u5206\u3002\n\n**\u89C4\u6A21\u6D4B\u8BD5**\uFF1A\u4F60\u80FD\u5426\u901A\u8FC7\u7F16\u8F91\u4E00\u4E2A\u6587\u4EF6\u6216\u8FD0\u884C\u4E00\u4E2A\u547D\u4EE4\u6765\u5B8C\u6210\u6B64\u5F85\u529E\uFF1F\u5982\u679C\u4E0D\u80FD\uFF0C\u5219\u89C4\u6A21\u8FC7\u5927\u3002\n\n## \u4EFB\u52A1\u7BA1\u7406\n- \u4E00\u6B21\u53EA\u80FD\u6709\u4E00\u4E2A\u8FDB\u884C\u4E2D\uFF08in_progress\uFF09\u7684\u4EFB\u52A1\u3002\u5B8C\u6210\u540E\u518D\u5F00\u59CB\u4E0B\u4E00\u4E2A\u3002\n- \u6BCF\u9879\u5B8C\u6210\u540E\u7ACB\u5373\u6807\u8BB0\u4E3A\u5DF2\u5B8C\u6210\u3002\n- \u7B80\u5355\u7684\u4E00\u6B21\u6027\u4EFB\u52A1\uFF08\u5355\u6B65\u3001\u660E\u663E\u64CD\u4F5C\uFF09\u65E0\u9700\u4F7F\u7528\u6B64\u5DE5\u5177\u3002";
package/dist/index.js CHANGED
@@ -15456,7 +15456,7 @@ function getAnthropicActualLimit(modelCacheState) {
15456
15456
  function isAnthropicNoHeaderGaModel(modelID) {
15457
15457
  return ANTHROPIC_NO_HEADER_GA_MODEL_IDS.has(modelID.toLowerCase());
15458
15458
  }
15459
- function resolveActualContextLimit(providerID, modelID, modelCacheState) {
15459
+ function resolveActualContextLimit(providerID, modelID, modelCacheState, pluginConfig) {
15460
15460
  if (isAnthropicProvider(providerID)) {
15461
15461
  const explicit1M = getAnthropicActualLimit(modelCacheState);
15462
15462
  if (explicit1M === 1e6)
@@ -15466,6 +15466,10 @@ function resolveActualContextLimit(providerID, modelID, modelCacheState) {
15466
15466
  return cachedLimit;
15467
15467
  return DEFAULT_ANTHROPIC_ACTUAL_LIMIT;
15468
15468
  }
15469
+ const providerIDLower = providerID.toLowerCase();
15470
+ if (providerIDLower.includes("minimax")) {
15471
+ return pluginConfig?.experimental?.minimax_4m_context_enabled ? 4000000 : 1e6;
15472
+ }
15469
15473
  return modelCacheState?.modelContextLimitsCache?.get(`${providerID}/${modelID}`) ?? null;
15470
15474
  }
15471
15475
 
@@ -80155,7 +80159,7 @@ function createThinkModeHook() {
80155
80159
  output.message.variant = "high";
80156
80160
  state3.modelSwitched = false;
80157
80161
  state3.variantSet = true;
80158
- log("Think mode: variant set to high", { sessionID });
80162
+ log("\u601D\u8003\u6A21\u5F0F\uFF1A\u5DF2\u8BBE\u7F6E\u4E3A high \u53D8\u4F53", { sessionID });
80159
80163
  thinkModeState.set(sessionID, state3);
80160
80164
  },
80161
80165
  event: async ({ event }) => {
@@ -83284,29 +83288,29 @@ var AGENT_TOOLS = new Set([
83284
83288
  "task"
83285
83289
  ]);
83286
83290
  var REMINDER_MESSAGE = `
83287
- [Agent Usage Reminder]
83291
+ [\u4EE3\u7406\u4F7F\u7528\u63D0\u9192]
83288
83292
 
83289
- You called a search/fetch tool directly without leveraging specialized agents.
83293
+ \u4F60\u76F4\u63A5\u8C03\u7528\u4E86\u641C\u7D22/\u83B7\u53D6\u5DE5\u5177\uFF0C\u800C\u6CA1\u6709\u5229\u7528\u4E13\u95E8\u7684\u4EE3\u7406\u3002
83290
83294
 
83291
- RECOMMENDED: Use task with explore/librarian agents for better results:
83295
+ \u63A8\u8350\u505A\u6CD5\uFF1A\u4F7F\u7528 task \u8C03\u7528 explore/librarian \u4EE3\u7406\u4EE5\u83B7\u5F97\u66F4\u597D\u7684\u7ED3\u679C\uFF1A
83292
83296
 
83293
83297
  \`\`\`
83294
- // Parallel exploration - fire multiple agents simultaneously
83298
+ // \u5E76\u884C\u63A2\u7D22 - \u540C\u65F6\u542F\u52A8\u591A\u4E2A\u4EE3\u7406
83295
83299
  task(agent="explore", prompt="Find all files matching pattern X")
83296
- task(agent="explore", prompt="Search for implementation of Y")
83300
+ task(agent="explore", prompt="Search for implementation of Y")
83297
83301
  task(agent="librarian", prompt="Lookup documentation for Z")
83298
83302
 
83299
- // Then continue your work while they run in background
83300
- // System will notify you when each completes
83303
+ // \u5728\u5B83\u4EEC\u540E\u53F0\u8FD0\u884C\u65F6\u7EE7\u7EED\u4F60\u7684\u5DE5\u4F5C
83304
+ // \u7CFB\u7EDF\u4F1A\u5728\u6BCF\u4E2A\u4EE3\u7406\u5B8C\u6210\u65F6\u901A\u77E5\u4F60
83301
83305
  \`\`\`
83302
83306
 
83303
- WHY:
83304
- - Agents can perform deeper, more thorough searches
83305
- - Background tasks run in parallel, saving time
83306
- - Specialized agents have domain expertise
83307
- - Reduces context window usage in main session
83307
+ \u539F\u56E0\uFF1A
83308
+ - \u4EE3\u7406\u53EF\u4EE5\u6267\u884C\u66F4\u6DF1\u3001\u66F4\u5F7B\u5E95\u7684\u641C\u7D22
83309
+ - \u540E\u53F0\u4EFB\u52A1\u5E76\u884C\u8FD0\u884C\uFF0C\u8282\u7701\u65F6\u95F4
83310
+ - \u4E13\u95E8\u7684\u4EE3\u7406\u5177\u6709\u9886\u57DF\u4E13\u4E1A\u77E5\u8BC6
83311
+ - \u51CF\u5C11\u4E3B\u4F1A\u8BDD\u4E2D\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u4F7F\u7528
83308
83312
 
83309
- ALWAYS prefer: Multiple parallel task calls > Direct tool calls
83313
+ \u59CB\u7EC8\u4F18\u5148\u9009\u62E9\uFF1A\u591A\u4E2A\u5E76\u884C task \u8C03\u7528 > \u76F4\u63A5\u5DE5\u5177\u8C03\u7528
83310
83314
  `;
83311
83315
 
83312
83316
  // src/hooks/agent-usage-reminder/storage.ts
@@ -89197,7 +89201,8 @@ var ExperimentalConfigSchema = exports_external.object({
89197
89201
  safe_hook_creation: exports_external.boolean().optional(),
89198
89202
  disable_omo_env: exports_external.boolean().optional(),
89199
89203
  hashline_edit: exports_external.boolean().optional(),
89200
- model_fallback_title: exports_external.boolean().optional()
89204
+ model_fallback_title: exports_external.boolean().optional(),
89205
+ minimax_4m_context_enabled: exports_external.boolean().optional()
89201
89206
  });
89202
89207
  // src/config/schema/git-env-prefix.ts
89203
89208
  var GIT_ENV_ASSIGNMENT_PATTERN = /^(?:[A-Za-z_][A-Za-z0-9_]*=[A-Za-z0-9_-]*)(?: [A-Za-z_][A-Za-z0-9_]*=[A-Za-z0-9_-]*)*$/;
@@ -97191,34 +97196,34 @@ function createReadImageResizerHook(_ctx) {
97191
97196
  };
97192
97197
  }
97193
97198
  // src/hooks/todo-description-override/description.ts
97194
- var TODOWRITE_DESCRIPTION = `Use this tool to create and manage a structured task list for tracking progress on multi-step work.
97199
+ var TODOWRITE_DESCRIPTION = `\u4F7F\u7528\u6B64\u5DE5\u5177\u521B\u5EFA\u548C\u7BA1\u7406\u7ED3\u6784\u5316\u5F85\u529E\u5217\u8868\uFF0C\u7528\u4E8E\u8DDF\u8E2A\u591A\u6B65\u9AA4\u5DE5\u4F5C\u7684\u8FDB\u5EA6\u3002
97195
97200
 
97196
- ## Todo Format (MANDATORY)
97201
+ ## \u5F85\u529E\u683C\u5F0F\uFF08\u5FC5\u987B\u9075\u5B88\uFF09
97197
97202
 
97198
- Each todo title MUST encode four elements: WHERE, WHY, HOW, and EXPECTED RESULT.
97203
+ \u6BCF\u4E2A\u5F85\u529E\u6807\u9898\u5FC5\u987B\u5305\u542B\u56DB\u4E2A\u8981\u7D20\uFF1A\u4F4D\u7F6E\uFF08WHERE\uFF09\u3001\u539F\u56E0\uFF08WHY\uFF09\u3001\u65B9\u6CD5\uFF08HOW\uFF09\u548C\u9884\u671F\u7ED3\u679C\uFF08EXPECTED RESULT\uFF09\u3002
97199
97204
 
97200
- Format: "[WHERE] [HOW] to [WHY] \u2014 expect [RESULT]"
97205
+ \u683C\u5F0F\uFF1A"[\u4F4D\u7F6E] [\u65B9\u6CD5] \u4EE5 [\u539F\u56E0] \u2014 \u9884\u671F [\u7ED3\u679C]"
97201
97206
 
97202
- GOOD:
97207
+ \u6B63\u786E\u793A\u4F8B\uFF1A
97203
97208
  - "src/utils/validation.ts: Add validateEmail() for input sanitization \u2014 returns boolean"
97204
97209
  - "UserService.create(): Call validateEmail() before DB insert \u2014 rejects invalid emails with 400"
97205
97210
  - "validation.test.ts: Add test for missing @ sign \u2014 expect validateEmail('foo') to return false"
97206
97211
 
97207
- BAD:
97208
- - "Implement email validation" (where? how? what result?)
97209
- - "Add dark mode" (this is a feature, not a todo)
97210
- - "Fix auth" (what file? what changes? what's expected?)
97212
+ \u9519\u8BEF\u793A\u4F8B\uFF1A
97213
+ - "Implement email validation"\uFF08\u4F4D\u7F6E\uFF1F\u65B9\u6CD5\uFF1F\u7ED3\u679C\uFF1F\uFF09
97214
+ - "Add dark mode"\uFF08\u8FD9\u662F\u529F\u80FD\uFF0C\u4E0D\u662F\u5F85\u529E\uFF09
97215
+ - "Fix auth"\uFF08\u54EA\u4E2A\u6587\u4EF6\uFF1F\u4EC0\u4E48\u4FEE\u6539\uFF1F\u9884\u671F\u4EC0\u4E48\uFF1F\uFF09
97211
97216
 
97212
- ## Granularity Rules
97217
+ ## \u7C92\u5EA6\u89C4\u5219
97213
97218
 
97214
- Each todo MUST be a single atomic action completable in 1-3 tool calls. If it needs more, split it.
97219
+ \u6BCF\u4E2A\u5F85\u529E\u5FC5\u987B\u662F\u5355\u4E2A\u539F\u5B50\u64CD\u4F5C\uFF0C\u53EF\u5728 1-3 \u6B21\u5DE5\u5177\u8C03\u7528\u5185\u5B8C\u6210\u3002\u5982\u679C\u9700\u8981\u66F4\u591A\u8C03\u7528\uFF0C\u5219\u5E94\u62C6\u5206\u3002
97215
97220
 
97216
- **Size test**: Can you complete this todo by editing one file or running one command? If not, it's too big.
97221
+ **\u89C4\u6A21\u6D4B\u8BD5**\uFF1A\u4F60\u80FD\u5426\u901A\u8FC7\u7F16\u8F91\u4E00\u4E2A\u6587\u4EF6\u6216\u8FD0\u884C\u4E00\u4E2A\u547D\u4EE4\u6765\u5B8C\u6210\u6B64\u5F85\u529E\uFF1F\u5982\u679C\u4E0D\u80FD\uFF0C\u5219\u89C4\u6A21\u8FC7\u5927\u3002
97217
97222
 
97218
- ## Task Management
97219
- - One in_progress at a time. Complete it before starting the next.
97220
- - Mark completed immediately after finishing each item.
97221
- - Skip this tool for single trivial tasks (one-step, obvious action).`;
97223
+ ## \u4EFB\u52A1\u7BA1\u7406
97224
+ - \u4E00\u6B21\u53EA\u80FD\u6709\u4E00\u4E2A\u8FDB\u884C\u4E2D\uFF08in_progress\uFF09\u7684\u4EFB\u52A1\u3002\u5B8C\u6210\u540E\u518D\u5F00\u59CB\u4E0B\u4E00\u4E2A\u3002
97225
+ - \u6BCF\u9879\u5B8C\u6210\u540E\u7ACB\u5373\u6807\u8BB0\u4E3A\u5DF2\u5B8C\u6210\u3002
97226
+ - \u7B80\u5355\u7684\u4E00\u6B21\u6027\u4EFB\u52A1\uFF08\u5355\u6B65\u3001\u660E\u663E\u64CD\u4F5C\uFF09\u65E0\u9700\u4F7F\u7528\u6B64\u5DE5\u5177\u3002`;
97222
97227
 
97223
97228
  // src/hooks/todo-description-override/hook.ts
97224
97229
  function createTodoDescriptionOverrideHook() {
@@ -114202,8 +114207,8 @@ function createSkillMcpTool(options) {
114202
114207
  });
114203
114208
  }
114204
114209
  // src/tools/background-task/constants.ts
114205
- var BACKGROUND_OUTPUT_DESCRIPTION = `Get output from background task. Use full_session=true to fetch session messages with filters. System notifies on completion, so block=true rarely needed. - Timeout values are in milliseconds (ms), NOT seconds.`;
114206
- var BACKGROUND_CANCEL_DESCRIPTION = `Cancel running background task(s). Use all=true to cancel ALL before final answer.`;
114210
+ var BACKGROUND_OUTPUT_DESCRIPTION = `\u83B7\u53D6\u540E\u53F0\u4EFB\u52A1\u7684\u8F93\u51FA\u3002\u4F7F\u7528 full_session=true \u901A\u8FC7\u8FC7\u6EE4\u5668\u83B7\u53D6\u4F1A\u8BDD\u6D88\u606F\u3002\u7CFB\u7EDF\u4F1A\u5728\u5B8C\u6210\u65F6\u53D1\u9001\u901A\u77E5\uFF0C\u56E0\u6B64\u5F88\u5C11\u9700\u8981\u8BBE\u7F6E block=true\u3002- timeout \u503C\u4E3A\u6BEB\u79D2\uFF08ms\uFF09\uFF0C\u4E0D\u662F\u79D2\u3002`;
114211
+ var BACKGROUND_CANCEL_DESCRIPTION = `\u53D6\u6D88\u6B63\u5728\u8FD0\u884C\u7684\u540E\u53F0\u4EFB\u52A1\u3002\u4F7F\u7528 all=true \u5728\u6700\u7EC8\u7B54\u6848\u524D\u53D6\u6D88\u6240\u6709\u4EFB\u52A1\u3002`;
114207
114212
 
114208
114213
  // src/features/tool-metadata-store/store.ts
114209
114214
  var pendingStore = new Map;
@@ -116349,7 +116354,10 @@ async function executeSyncContinuation(args, ctx, executorCtx, deps = syncContin
116349
116354
  const info = messages[i2].info;
116350
116355
  if (info?.agent || info?.model || info?.modelID && info?.providerID) {
116351
116356
  resumeAgent = info.agent;
116352
- resumeModel = info.model ?? (info.providerID && info.modelID ? { providerID: info.providerID, modelID: info.modelID } : undefined);
116357
+ resumeModel = info.model ?? (info.providerID && info.modelID ? {
116358
+ providerID: info.providerID,
116359
+ modelID: info.modelID
116360
+ } : undefined);
116353
116361
  resumeVariant = info.variant;
116354
116362
  break;
116355
116363
  }
@@ -117566,46 +117574,46 @@ function createDelegateTask(options) {
117566
117574
  return desc ? ` - ${name}: ${desc}` : ` - ${name}`;
117567
117575
  }).join(`
117568
117576
  `);
117569
- const description = `Spawn agent task with category-based or direct agent selection.
117570
-
117571
- \u26A0\uFE0F CRITICAL: You MUST provide EITHER category OR subagent_type. Omitting BOTH will FAIL.
117572
-
117573
- **COMMON MISTAKE (DO NOT DO THIS):**
117577
+ const description = `\u542F\u52A8\u4EE3\u7406\u4EFB\u52A1\uFF0C\u652F\u6301\u57FA\u4E8E\u7C7B\u522B\u6216\u76F4\u63A5\u6307\u5B9A\u4EE3\u7406\u7C7B\u578B\u3002
117578
+
117579
+ \u26A0\uFE0F \u91CD\u8981\uFF1A\u5FC5\u987B\u63D0\u4F9B category \u6216 subagent_type \u4E4B\u4E00\u3002\u4E24\u8005\u90FD\u4E0D\u63D0\u4F9B\u5C06\u5BFC\u81F4\u6267\u884C\u5931\u8D25\u3002
117580
+
117581
+ **\u5E38\u89C1\u9519\u8BEF\uFF08\u8BF7\u52FF\u8FD9\u6837\u505A\uFF09\uFF1A**
117574
117582
  \`\`\`
117575
- task(description="...", prompt="...", run_in_background=false) // \u274C FAILS - missing category AND subagent_type
117583
+ task(description="...", prompt="...", run_in_background=false) // \u274C \u5931\u8D25 - \u7F3A\u5C11 category \u548C subagent_type
117576
117584
  \`\`\`
117577
-
117578
- **CORRECT - Using category:**
117585
+
117586
+ **\u6B63\u786E\u65B9\u5F0F - \u4F7F\u7528 category\uFF1A**
117579
117587
  \`\`\`
117580
117588
  task(category="quick", load_skills=[], description="Fix type error", prompt="...", run_in_background=false)
117581
117589
  \`\`\`
117582
-
117583
- **CORRECT - Using subagent_type:**
117590
+
117591
+ **\u6B63\u786E\u65B9\u5F0F - \u4F7F\u7528 subagent_type\uFF1A**
117584
117592
  \`\`\`
117585
117593
  task(subagent_type="explore", load_skills=[], description="Find patterns", prompt="...", run_in_background=true)
117586
117594
  \`\`\`
117587
-
117588
- REQUIRED: Provide ONE of:
117589
- - category: For task delegation (uses Sisyphus-Junior with category-optimized model)
117590
- - subagent_type: For direct agent invocation (explore, librarian, oracle, etc.)
117591
-
117592
- **DO NOT provide both.** If category is provided, subagent_type is ignored.
117593
-
117594
- - load_skills: ALWAYS REQUIRED. Pass [] if no skills needed, or ["skill-1", "skill-2"] for category tasks.
117595
- - category: Use predefined category \u2192 Spawns Sisyphus-Junior with category config
117596
- Available categories:
117595
+
117596
+ \u5FC5\u586B\u9879\uFF1A\u63D0\u4F9B\u4EE5\u4E0B\u4E4B\u4E00\uFF1A
117597
+ - category\uFF1A\u7528\u4E8E\u4EFB\u52A1\u59D4\u6258\uFF08\u4F7F\u7528 Sisyphus-Junior \u548C\u7C7B\u522B\u4F18\u5316\u6A21\u578B\uFF09
117598
+ - subagent_type\uFF1A\u7528\u4E8E\u76F4\u63A5\u8C03\u7528\u4EE3\u7406\uFF08explore\u3001librarian\u3001oracle \u7B49\uFF09
117599
+
117600
+ **\u4E0D\u8981\u540C\u65F6\u63D0\u4F9B\u4E24\u8005\u3002**\u5982\u679C\u63D0\u4F9B\u4E86 category\uFF0Csubagent_type \u4F1A\u88AB\u5FFD\u7565\u3002
117601
+
117602
+ - load_skills\uFF1A\u59CB\u7EC8\u5FC5\u586B\u3002\u5982\u65E0\u9700\u6280\u80FD\u5219\u4F20\u5165 []\uFF0C\u6216\u4F20\u5165 ["skill-1", "skill-2"] \u7528\u4E8E\u7C7B\u522B\u4EFB\u52A1\u3002
117603
+ - category\uFF1A\u4F7F\u7528\u9884\u5B9A\u4E49\u7C7B\u522B \u2192 \u542F\u52A8 Sisyphus-Junior \u5E76\u5E94\u7528\u7C7B\u522B\u914D\u7F6E
117604
+ \u53EF\u7528\u7C7B\u522B\uFF1A
117597
117605
  ${categoryList}
117598
- - subagent_type: Use specific agent directly (explore, librarian, oracle, metis, momus)
117599
- - run_in_background: REQUIRED. true=async (returns task_id), false=sync (waits). Use background=true ONLY for parallel exploration with 5+ independent queries.
117600
- - session_id: Existing Task session to continue (from previous task output). Continues agent with FULL CONTEXT PRESERVED - saves tokens, maintains continuity.
117601
- - command: The command that triggered this task (optional, for slash command tracking).
117602
-
117603
- **WHEN TO USE session_id:**
117604
- - Task failed/incomplete \u2192 session_id with "fix: [specific issue]"
117605
- - Need follow-up on previous result \u2192 session_id with additional question
117606
- - Multi-turn conversation with same agent \u2192 always session_id instead of new task
117607
-
117608
- Prompts MUST be in English.`;
117606
+ - subagent_type\uFF1A\u76F4\u63A5\u4F7F\u7528\u6307\u5B9A\u4EE3\u7406\uFF08explore\u3001librarian\u3001oracle\u3001metis\u3001momus\uFF09
117607
+ - run_in_background\uFF1A\u5FC5\u586B\u3002true=\u5F02\u6B65\uFF08\u8FD4\u56DE task_id\uFF09\uFF0Cfalse=\u540C\u6B65\uFF08\u7B49\u5F85\u7ED3\u679C\uFF09\u3002\u4EC5\u5728\u5E76\u884C\u63A2\u7D22\u4E14\u6709 5+ \u4E2A\u72EC\u7ACB\u67E5\u8BE2\u65F6\u624D\u4F7F\u7528 background=true\u3002
117608
+ - session_id\uFF1A\u73B0\u6709\u4EFB\u52A1\u4F1A\u8BDD ID\uFF0C\u7528\u4E8E\u7EE7\u7EED\u4E4B\u524D\u7684\u4EFB\u52A1\uFF08\u6765\u81EA\u4E4B\u524D\u7684 task \u8F93\u51FA\uFF09\u3002\u7EE7\u7EED\u65F6\u4FDD\u7559\u5B8C\u6574\u4E0A\u4E0B\u6587 - \u8282\u7701 token\uFF0C\u4FDD\u6301\u8FDE\u7EED\u6027\u3002
117609
+ - command\uFF1A\u89E6\u53D1\u6B64\u4EFB\u52A1\u7684\u547D\u4EE4\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u659C\u6760\u547D\u4EE4\u8FFD\u8E2A\uFF09\u3002
117610
+
117611
+ **\u4F55\u65F6\u4F7F\u7528 session_id\uFF1A**
117612
+ - \u4EFB\u52A1\u5931\u8D25/\u672A\u5B8C\u6210 \u2192 \u4F7F\u7528 session_id \u5E76\u9644\u4E0A "fix: [\u5177\u4F53\u95EE\u9898]"
117613
+ - \u9700\u8981\u8DDF\u8FDB\u4E4B\u524D\u7684\u7ED3\u679C \u2192 \u4F7F\u7528 session_id \u5E76\u9644\u4E0A\u8865\u5145\u95EE\u9898
117614
+ - \u4E0E\u540C\u4E00\u4EE3\u7406\u8FDB\u884C\u591A\u8F6E\u5BF9\u8BDD \u2192 \u59CB\u7EC8\u4F7F\u7528 session_id \u800C\u975E\u65B0\u5EFA\u4EFB\u52A1
117615
+
117616
+ \u63D0\u793A\u8BCD\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u3002`;
117609
117617
  return tool({
117610
117618
  description,
117611
117619
  args: {
@@ -119769,60 +119777,60 @@ Tip: reuse LINE#ID entries from the latest read/edit output, or batch related ed
119769
119777
  }
119770
119778
 
119771
119779
  // src/tools/hashline-edit/tool-description.ts
119772
- var HASHLINE_EDIT_DESCRIPTION = `Edit files using LINE#ID format for precise, safe modifications.
119773
-
119774
- WORKFLOW:
119775
- 1. Read target file/range and copy exact LINE#ID tags.
119776
- 2. Pick the smallest operation per logical mutation site.
119777
- 3. Submit one edit call per file with all related operations.
119778
- 4. If same file needs another call, re-read first.
119779
- 5. Use anchors as "LINE#ID" only (never include trailing "|content").
119780
-
119781
- <must>
119782
- - SNAPSHOT: All edits in one call reference the ORIGINAL file state. Do NOT adjust line numbers for prior edits in the same call \u2014 the system applies them bottom-up automatically.
119783
- - replace removes lines pos..end (inclusive) and inserts lines in their place. Lines BEFORE pos and AFTER end are UNTOUCHED \u2014 do NOT include them in lines. If you do, they will appear twice.
119784
- - lines must contain ONLY the content that belongs inside the consumed range. Content after end survives unchanged.
119785
- - Tags MUST be copied exactly from read output or >>> mismatch output. NEVER guess tags.
119786
- - Batch = multiple operations in edits[], NOT one big replace covering everything. Each operation targets the smallest possible change.
119787
- - lines must contain plain replacement text only (no LINE#ID prefixes, no diff + markers).
119788
- </must>
119789
-
119790
- <operations>
119791
- LINE#ID FORMAT:
119792
- Each line reference must be in "{line_number}#{hash_id}" format where:
119793
- {line_number}: 1-based line number
119794
- {hash_id}: Two CID letters from the set ZPMQVRWSNKTXJBYH
119795
-
119796
- OPERATION CHOICE:
119797
- replace with pos only -> replace one line at pos
119798
- replace with pos+end -> replace range pos..end inclusive as a block (ranges MUST NOT overlap across edits)
119799
- append with pos/end anchor -> insert after that anchor
119800
- prepend with pos/end anchor -> insert before that anchor
119801
- append/prepend without anchors -> EOF/BOF insertion (also creates missing files)
119802
-
119803
- CONTENT FORMAT:
119804
- lines can be a string (single line) or string[] (multi-line, preferred).
119805
- If you pass a multi-line string, it is split by real newline characters.
119806
- lines: null or lines: [] with replace -> delete those lines.
119807
-
119808
- FILE MODES:
119809
- delete=true deletes file and requires edits=[] with no rename
119810
- rename moves final content to a new path and removes old path
119811
-
119812
- RULES:
119813
- 1. Minimize scope: one logical mutation site per operation.
119814
- 2. Preserve formatting: keep indentation, punctuation, line breaks, trailing commas, brace style.
119815
- 3. Prefer insertion over neighbor rewrites: anchor to structural boundaries (}, ], },), not interior property lines.
119816
- 4. No no-ops: replacement content must differ from current content.
119817
- 5. Touch only requested code: avoid incidental edits.
119818
- 6. Use exact current tokens: NEVER rewrite approximately.
119819
- 7. For swaps/moves: prefer one range operation over multiple single-line operations.
119820
- 8. Anchor to structural lines (function/class/brace), NEVER blank lines.
119821
- 9. Re-read after each successful edit call before issuing another on the same file.
119822
- </operations>
119823
-
119824
- <examples>
119825
- Given this file content after read:
119780
+ var HASHLINE_EDIT_DESCRIPTION = `\u4F7F\u7528 LINE#ID \u683C\u5F0F\u7F16\u8F91\u6587\u4EF6\uFF0C\u5B9E\u73B0\u7CBE\u786E\u3001\u5B89\u5168\u7684\u4FEE\u6539\u3002
119781
+
119782
+ \u5DE5\u4F5C\u6D41\u7A0B\uFF1A
119783
+ 1. \u8BFB\u53D6\u76EE\u6807\u6587\u4EF6/\u8303\u56F4\uFF0C\u590D\u5236\u7CBE\u786E\u7684 LINE#ID \u6807\u7B7E\u3002
119784
+ 2. \u6BCF\u4E2A\u903B\u8F91\u53D8\u66F4\u70B9\u9009\u62E9\u6700\u5C0F\u5316\u7684\u64CD\u4F5C\u3002
119785
+ 3. \u6BCF\u4E2A\u6587\u4EF6\u6BCF\u6B21\u63D0\u4EA4\u4E00\u4E2A\u7F16\u8F91\u8C03\u7528\uFF0C\u5305\u542B\u6240\u6709\u76F8\u5173\u64CD\u4F5C\u3002
119786
+ 4. \u5982\u679C\u540C\u4E00\u6587\u4EF6\u9700\u8981\u518D\u6B21\u8C03\u7528\uFF0C\u5148\u91CD\u65B0\u8BFB\u53D6\u3002
119787
+ 5. \u4EC5\u5C06\u951A\u70B9\u7528\u4F5C "LINE#ID"\uFF08\u6C38\u4E0D\u5305\u542B\u5C3E\u90E8 "|content"\uFF09\u3002
119788
+
119789
+ <\u5FC5\u987B\u9075\u5B88>
119790
+ - SNAPSHOT\uFF1A\u5355\u6B21\u8C03\u7528\u4E2D\u7684\u6240\u6709\u7F16\u8F91\u5747\u53C2\u7167\u539F\u59CB\u6587\u4EF6\u72B6\u6001\u3002\u4E0D\u8981\u4E3A\u540C\u4E00\u6B21\u8C03\u7528\u4E2D\u4E4B\u524D\u7684\u7F16\u8F91\u8C03\u6574\u884C\u53F7\u2014\u2014\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u4ECE\u4E0B\u5F80\u4E0A\u5E94\u7528\u5B83\u4EEC\u3002
119791
+ - replace \u5220\u9664 pos..end\uFF08\u5305\u542B\uFF09\u8303\u56F4\u7684\u884C\u5E76\u63D2\u5165\u65B0\u884C\u3002pos \u4E4B\u524D\u7684\u884C\u548C end \u4E4B\u540E\u7684\u884C\u4E0D\u53D7\u5F71\u54CD\u2014\u2014\u4E0D\u8981\u5C06\u5B83\u4EEC\u5305\u542B\u5728 lines \u4E2D\u3002\u5426\u5219\u4F1A\u51FA\u73B0\u91CD\u590D\u3002
119792
+ - lines \u5FC5\u987B\u53EA\u5305\u542B\u5C5E\u4E8E\u6240\u6D88\u8D39\u8303\u56F4\u5185\u7684\u5185\u5BB9\u3002end \u4E4B\u540E\u7684\u5185\u5BB9\u4FDD\u6301\u4E0D\u53D8\u3002
119793
+ - \u6807\u7B7E\u5FC5\u987B\u4ECE\u8BFB\u53D6\u8F93\u51FA\u6216 >>> \u4E0D\u5339\u914D\u8F93\u51FA\u4E2D\u7CBE\u786E\u590D\u5236\u3002\u5207\u52FF\u731C\u6D4B\u6807\u7B7E\u3002
119794
+ - \u6279\u91CF\u64CD\u4F5C = \u5728 edits[] \u4E2D\u5305\u542B\u591A\u4E2A\u64CD\u4F5C\uFF0C\u800C\u975E\u4E00\u4E2A\u8986\u76D6\u6240\u6709\u5185\u5BB9\u7684\u5927 replace\u3002\u6BCF\u4E2A\u64CD\u4F5C\u5E94\u9488\u5BF9\u6700\u5C0F\u7684\u53EF\u80FD\u53D8\u66F4\u3002
119795
+ - lines \u5FC5\u987B\u53EA\u5305\u542B\u7EAF\u66FF\u6362\u6587\u672C\uFF08\u4E0D\u542B LINE#ID \u524D\u7F00\uFF0C\u65E0 diff + \u6807\u8BB0\uFF09\u3002
119796
+ </\u5FC5\u987B\u9075\u5B88>
119797
+
119798
+ <\u64CD\u4F5C\u8BF4\u660E>
119799
+ LINE#ID \u683C\u5F0F\uFF1A
119800
+ \u6BCF\u884C\u5F15\u7528\u5FC5\u987B\u91C7\u7528 "{\u884C\u53F7}#{\u54C8\u5E0CID}" \u683C\u5F0F\uFF0C\u5176\u4E2D\uFF1A
119801
+ {\u884C\u53F7}\uFF1A\u4ECE 1 \u5F00\u59CB\u7684\u884C\u53F7
119802
+ {\u54C8\u5E0CID}\uFF1A\u6765\u81EA ZPMQVRWSNKTXJBYH \u96C6\u5408\u7684\u4E24\u4E2A CID \u5B57\u6BCD
119803
+
119804
+ \u64CD\u4F5C\u9009\u62E9\uFF1A
119805
+ \u4EC5\u7528 pos \u8FDB\u884C replace \u2192 \u66FF\u6362 pos \u5904\u7684\u4E00\u884C
119806
+ \u7528 pos+end \u8FDB\u884C replace \u2192 \u5C06 pos..end \u8303\u56F4\uFF08\u542B\uFF09\u4F5C\u4E3A\u5757\u66FF\u6362\uFF08\u8303\u56F4\u5728\u591A\u4E2A\u7F16\u8F91\u95F4\u4E0D\u5F97\u91CD\u53E0\uFF09
119807
+ \u7528 pos/end \u951A\u70B9\u8FDB\u884C append \u2192 \u5728\u8BE5\u951A\u70B9\u4E4B\u540E\u63D2\u5165
119808
+ \u7528 pos/end \u951A\u70B9\u8FDB\u884C prepend \u2192 \u5728\u8BE5\u951A\u70B9\u4E4B\u524D\u63D2\u5165
119809
+ \u65E0\u951A\u70B9\u7684 append/prepend \u2192 \u5728 EOF/BOF \u63D2\u5165\uFF08\u4E5F\u53EF\u521B\u5EFA\u4E0D\u5B58\u5728\u7684\u6587\u4EF6\uFF09
119810
+
119811
+ \u5185\u5BB9\u683C\u5F0F\uFF1A
119812
+ lines \u53EF\u4EE5\u662F\u5B57\u7B26\u4E32\uFF08\u5355\u884C\uFF09\u6216 string[]\uFF08\u591A\u884C\uFF0C\u63A8\u8350\uFF09\u3002
119813
+ \u5982\u679C\u4F20\u5165\u591A\u884C\u5B57\u7B26\u4E32\uFF0C\u5C06\u6309\u771F\u5B9E\u6362\u884C\u7B26\u62C6\u5206\u3002
119814
+ lines: null \u6216 lines: [] \u914D\u5408 replace \u2192 \u5220\u9664\u8FD9\u4E9B\u884C\u3002
119815
+
119816
+ \u6587\u4EF6\u6A21\u5F0F\uFF1A
119817
+ delete=true \u5220\u9664\u6587\u4EF6\uFF0C\u8981\u6C42 edits=[] \u4E14\u65E0 rename
119818
+ rename \u5C06\u6700\u7EC8\u5185\u5BB9\u79FB\u52A8\u5230\u65B0\u8DEF\u5F84\u5E76\u5220\u9664\u65E7\u8DEF\u5F84
119819
+
119820
+ \u89C4\u5219\uFF1A
119821
+ 1. \u6700\u5C0F\u5316\u8303\u56F4\uFF1A\u6BCF\u4E2A\u903B\u8F91\u53D8\u66F4\u70B9\u4E00\u4E2A\u64CD\u4F5C\u3002
119822
+ 2. \u4FDD\u6301\u683C\u5F0F\uFF1A\u4FDD\u7559\u7F29\u8FDB\u3001\u6807\u70B9\u3001\u6362\u884C\u3001\u5C3E\u90E8\u9017\u53F7\u3001\u5927\u62EC\u53F7\u98CE\u683C\u3002
119823
+ 3. \u4F18\u5148\u63D2\u5165\u800C\u975E\u90BB\u8FD1\u91CD\u5199\uFF1A\u951A\u5B9A\u5230\u7ED3\u6784\u8FB9\u754C\uFF08}\u3001]\u3001}), \u800C\u975E\u5185\u90E8\u5C5E\u6027\u884C\u3002
119824
+ 4. \u7981\u6B62\u65E0\u610F\u4E49\u64CD\u4F5C\uFF1A\u66FF\u6362\u5185\u5BB9\u5FC5\u987B\u4E0E\u5F53\u524D\u5185\u5BB9\u4E0D\u540C\u3002
119825
+ 5. \u4EC5\u4FEE\u6539\u8BF7\u6C42\u7684\u4EE3\u7801\uFF1A\u907F\u514D\u9644\u5E26\u7F16\u8F91\u3002
119826
+ 6. \u4F7F\u7528\u7CBE\u786E\u7684\u5F53\u524D\u6807\u8BB0\uFF1A\u7EDD\u4E0D\u8FD1\u4F3C\u91CD\u5199\u3002
119827
+ 7. \u5BF9\u4E8E\u4EA4\u6362/\u79FB\u52A8\uFF1A\u4F18\u5148\u4F7F\u7528\u4E00\u4E2A\u8303\u56F4\u64CD\u4F5C\u800C\u975E\u591A\u4E2A\u5355\u884C\u64CD\u4F5C\u3002
119828
+ 8. \u951A\u5B9A\u5230\u7ED3\u6784\u884C\uFF08\u51FD\u6570/\u7C7B/\u5927\u62EC\u53F7\uFF09\uFF0C\u7EDD\u4E0D\u5B9A\u951A\u5230\u7A7A\u884C\u3002
119829
+ 9. \u6BCF\u6B21\u6210\u529F\u7F16\u8F91\u8C03\u7528\u540E\u91CD\u65B0\u8BFB\u53D6\uFF0C\u518D\u5BF9\u540C\u4E00\u6587\u4EF6\u53D1\u51FA\u4E0B\u4E00\u4E2A\u8C03\u7528\u3002
119830
+ </\u64CD\u4F5C\u8BF4\u660E>
119831
+
119832
+ <\u793A\u4F8B>
119833
+ \u8BFB\u53D6\u540E\u6587\u4EF6\u5185\u5BB9\u5982\u4E0B\uFF1A
119826
119834
  10#VK|function hello() {
119827
119835
  11#XJ| console.log("hi");
119828
119836
  12#MB| console.log("bye");
@@ -119830,40 +119838,41 @@ Given this file content after read:
119830
119838
  14#TN|
119831
119839
  15#WS|function world() {
119832
119840
 
119833
- Single-line replace (change line 11):
119841
+ \u5355\u884C\u66FF\u6362\uFF08\u4FEE\u6539\u7B2C 11 \u884C\uFF09\uFF1A
119834
119842
  { op: "replace", pos: "11#XJ", lines: [" console.log(\\"hello\\");"] }
119835
- Result: line 11 replaced. Lines 10, 12-15 unchanged.
119843
+ \u7ED3\u679C\uFF1A\u66FF\u6362\u7B2C 11 \u884C\u3002\u7B2C 10\u300112-15 \u884C\u4E0D\u53D8\u3002
119836
119844
 
119837
- Range replace (rewrite function body, lines 11-12):
119845
+ \u8303\u56F4\u66FF\u6362\uFF08\u91CD\u5199\u51FD\u6570\u4F53\uFF0C\u7B2C 11-12 \u884C\uFF09\uFF1A
119838
119846
  { op: "replace", pos: "11#XJ", end: "12#MB", lines: [" return \\"hello world\\";"] }
119839
- Result: lines 11-12 removed, replaced by 1 new line. Lines 10, 13-15 unchanged.
119847
+ \u7ED3\u679C\uFF1A\u5220\u9664\u7B2C 11-12 \u884C\uFF0C\u66FF\u6362\u4E3A 1 \u884C\u65B0\u5185\u5BB9\u3002\u7B2C 10\u300113-15 \u884C\u4E0D\u53D8\u3002
119840
119848
 
119841
- Delete a line:
119849
+ \u5220\u9664\u4E00\u884C\uFF1A
119842
119850
  { op: "replace", pos: "12#MB", lines: null }
119843
- Result: line 12 removed. Lines 10-11, 13-15 unchanged.
119851
+ \u7ED3\u679C\uFF1A\u5220\u9664\u7B2C 12 \u884C\u3002\u7B2C 10-11\u300113-15 \u884C\u4E0D\u53D8\u3002
119844
119852
 
119845
- Insert after line 13 (between functions):
119853
+ \u5728\u7B2C 13 \u884C\u540E\u63D2\u5165\uFF08\u4E24\u51FD\u6570\u4E4B\u95F4\uFF09\uFF1A
119846
119854
  { op: "append", pos: "13#QR", lines: ["", "function added() {", " return true;", "}"] }
119847
- Result: 4 new lines inserted after line 13. All existing lines unchanged.
119855
+ \u7ED3\u679C\uFF1A\u5728\u7B2C 13 \u884C\u540E\u63D2\u5165 4 \u884C\u65B0\u5185\u5BB9\u3002\u6240\u6709\u73B0\u6709\u884C\u4E0D\u53D8\u3002
119848
119856
 
119849
- BAD \u2014 lines extend past end (DUPLICATES line 13):
119857
+ \u9519\u8BEF\u793A\u4F8B \u2014 lines \u8D85\u51FA end\uFF08\u5BFC\u81F4\u7B2C 13 \u884C\u91CD\u590D\uFF09\uFF1A
119850
119858
  { op: "replace", pos: "11#XJ", end: "12#MB", lines: [" return \\"hi\\";", "}"] }
119851
- Line 13 is "}" which already exists after end. Including "}" in lines duplicates it.
119852
- CORRECT: { op: "replace", pos: "11#XJ", end: "12#MB", lines: [" return \\"hi\\";"] }
119853
- </examples>
119854
-
119855
- <auto>
119856
- Built-in autocorrect (you do NOT need to handle these):
119857
- Merged lines are auto-expanded back to original line count.
119858
- Indentation is auto-restored from original lines.
119859
- BOM and CRLF line endings are preserved automatically.
119860
- Hashline prefixes and diff markers in text are auto-stripped.
119861
- Boundary echo lines (duplicating adjacent surviving lines) are auto-stripped.
119862
- </auto>
119863
-
119864
- RECOVERY (when >>> mismatch error appears):
119865
- Copy the updated LINE#ID tags shown in the error output directly.
119866
- Re-read only if the needed tags are missing from the error snippet.`;
119859
+ \u7B2C 13 \u884C\u662F "}"\uFF0C\u5DF2\u5B58\u5728\u4E8E end \u4E4B\u540E\u3002\u5C06 "}" \u5305\u542B\u5728 lines \u4E2D\u4F1A\u5BFC\u81F4\u91CD\u590D\u3002
119860
+ \u6B63\u786E\u5199\u6CD5\uFF1A{ op: "replace", pos: "11#XJ", end: "12#MB", lines: [" return \\"hi\\";"] }
119861
+ </\u793A\u4F8B>
119862
+
119863
+ <\u81EA\u52A8\u4FEE\u6B63>
119864
+ \u5185\u7F6E\u81EA\u52A8\u7EA0\u6B63\uFF08\u65E0\u9700\u624B\u52A8\u5904\u7406\uFF09\uFF1A
119865
+ \u5408\u5E76\u7684\u884C\u4F1A\u81EA\u52A8\u6269\u5C55\u56DE\u539F\u59CB\u884C\u6570\u3002
119866
+ \u7F29\u8FDB\u4F1A\u4ECE\u539F\u59CB\u884C\u81EA\u52A8\u6062\u590D\u3002
119867
+ BOM \u548C CRLF \u6362\u884C\u7B26\u81EA\u52A8\u4FDD\u7559\u3002
119868
+ \u6587\u672C\u4E2D\u7684 hashline \u524D\u7F00\u548C diff \u6807\u8BB0\u4F1A\u81EA\u52A8\u53BB\u9664\u3002
119869
+ \u8FB9\u754C\u56DE\u663E\u884C\uFF08\u590D\u5236\u76F8\u90BB\u5B58\u6D3B\u884C\uFF09\u4F1A\u81EA\u52A8\u53BB\u9664\u3002
119870
+ </\u81EA\u52A8\u4FEE\u6B63>
119871
+
119872
+ \u6062\u590D\uFF08\u51FA\u73B0 >>> \u4E0D\u5339\u914D\u9519\u8BEF\u65F6\uFF09\uFF1A
119873
+ \u76F4\u63A5\u590D\u5236\u9519\u8BEF\u8F93\u51FA\u4E2D\u663E\u793A\u7684\u66F4\u65B0\u540E\u7684 LINE#ID \u6807\u7B7E\u3002
119874
+ \u4EC5\u5728\u9519\u8BEF\u7247\u6BB5\u4E2D\u7F3A\u5C11\u6240\u9700\u6807\u7B7E\u65F6\u624D\u91CD\u65B0\u8BFB\u53D6\u3002
119875
+ `;
119867
119876
 
119868
119877
  // src/tools/hashline-edit/tools.ts
119869
119878
  function createHashlineEditTool(ctx) {
@@ -130558,7 +130567,7 @@ function createSisyphusAgent(model, availableAgents, availableToolNames, availab
130558
130567
  if (isGpt5_4Model(model)) {
130559
130568
  const prompt2 = buildGpt54SisyphusPrompt(model, agents, tools, skills2, categories2, useTaskSystem);
130560
130569
  return {
130561
- description: "Powerful AI orchestrator. Plans obsessively with todos, assesses search complexity before exploration, delegates strategically via category+skills combinations. Uses explore for internal code (parallel-friendly), librarian for external docs. (Sisyphus - OhMyOpenCode)",
130570
+ description: "\u5F3A\u5927\u7684 AI \u7F16\u6392\u5668\u3002\u901A\u8FC7\u5F85\u529E\u4E8B\u9879\u6267\u7740\u5730\u89C4\u5212\uFF0C\u5728\u63A2\u7D22\u524D\u8BC4\u4F30\u641C\u7D22\u590D\u6742\u5EA6\uFF0C\u901A\u8FC7 category+skills \u7EC4\u5408\u7B56\u7565\u6027\u5730\u5206\u914D\u4EFB\u52A1\u3002\u5BF9\u5185\u90E8\u4EE3\u7801\u4F7F\u7528 explore\uFF08\u652F\u6301\u5E76\u884C\uFF09\uFF0C\u5BF9\u5916\u90E8\u6587\u6863\u4F7F\u7528 librarian\u3002\uFF08Sisyphus - OhMyOpenCode\uFF09",
130562
130571
  mode: MODE,
130563
130572
  model,
130564
130573
  maxTokens: 64000,
@@ -130594,7 +130603,7 @@ ${buildGeminiVerificationOverride()}
130594
130603
  call_omo_agent: "deny"
130595
130604
  };
130596
130605
  const base = {
130597
- description: "Powerful AI orchestrator. Plans obsessively with todos, assesses search complexity before exploration, delegates strategically via category+skills combinations. Uses explore for internal code (parallel-friendly), librarian for external docs. (Sisyphus - OhMyOpenCode)",
130606
+ description: "\u5F3A\u5927\u7684 AI \u7F16\u6392\u5668\u3002\u901A\u8FC7\u5F85\u529E\u4E8B\u9879\u6267\u7740\u5730\u89C4\u5212\uFF0C\u5728\u63A2\u7D22\u524D\u8BC4\u4F30\u641C\u7D22\u590D\u6742\u5EA6\uFF0C\u901A\u8FC7 category+skills \u7EC4\u5408\u7B56\u7565\u6027\u5730\u5206\u914D\u4EFB\u52A1\u3002\u5BF9\u5185\u90E8\u4EE3\u7801\u4F7F\u7528 explore\uFF08\u652F\u6301\u5E76\u884C\uFF09\uFF0C\u5BF9\u5916\u90E8\u6587\u6863\u4F7F\u7528 librarian\u3002\uFF08Sisyphus - OhMyOpenCode\uFF09",
130598
130607
  mode: MODE,
130599
130608
  model,
130600
130609
  maxTokens: 64000,
@@ -4423,6 +4423,9 @@
4423
4423
  },
4424
4424
  "model_fallback_title": {
4425
4425
  "type": "boolean"
4426
+ },
4427
+ "minimax_4m_context_enabled": {
4428
+ "type": "boolean"
4426
4429
  }
4427
4430
  },
4428
4431
  "additionalProperties": false
@@ -1,5 +1,6 @@
1
+ import type { OhMyOpenCodeConfig } from "../config/schema/oh-my-opencode-config";
1
2
  export type ContextLimitModelCacheState = {
2
3
  anthropicContext1MEnabled: boolean;
3
4
  modelContextLimitsCache?: Map<string, number>;
4
5
  };
5
- export declare function resolveActualContextLimit(providerID: string, modelID: string, modelCacheState?: ContextLimitModelCacheState): number | null;
6
+ export declare function resolveActualContextLimit(providerID: string, modelID: string, modelCacheState?: ContextLimitModelCacheState, pluginConfig?: OhMyOpenCodeConfig): number | null;
@@ -1,3 +1,3 @@
1
- export declare const BACKGROUND_TASK_DESCRIPTION = "Run agent task in background. Returns task_id immediately; notifies on completion.\n\nUse `background_output` to get results. Prompts MUST be in English.";
2
- export declare const BACKGROUND_OUTPUT_DESCRIPTION = "Get output from background task. Use full_session=true to fetch session messages with filters. System notifies on completion, so block=true rarely needed. - Timeout values are in milliseconds (ms), NOT seconds.";
3
- export declare const BACKGROUND_CANCEL_DESCRIPTION = "Cancel running background task(s). Use all=true to cancel ALL before final answer.";
1
+ export declare const BACKGROUND_TASK_DESCRIPTION = "\u5728\u540E\u53F0\u8FD0\u884C\u4EE3\u7406\u4EFB\u52A1\u3002\u7ACB\u5373\u8FD4\u56DE task_id\uFF1B\u4EFB\u52A1\u5B8C\u6210\u65F6\u53D1\u9001\u901A\u77E5\u3002\n\n\u4F7F\u7528 `background_output` \u83B7\u53D6\u7ED3\u679C\u3002\u63D0\u793A\u8BCD\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u3002";
2
+ export declare const BACKGROUND_OUTPUT_DESCRIPTION = "\u83B7\u53D6\u540E\u53F0\u4EFB\u52A1\u7684\u8F93\u51FA\u3002\u4F7F\u7528 full_session=true \u901A\u8FC7\u8FC7\u6EE4\u5668\u83B7\u53D6\u4F1A\u8BDD\u6D88\u606F\u3002\u7CFB\u7EDF\u4F1A\u5728\u5B8C\u6210\u65F6\u53D1\u9001\u901A\u77E5\uFF0C\u56E0\u6B64\u5F88\u5C11\u9700\u8981\u8BBE\u7F6E block=true\u3002- timeout \u503C\u4E3A\u6BEB\u79D2\uFF08ms\uFF09\uFF0C\u4E0D\u662F\u79D2\u3002";
3
+ export declare const BACKGROUND_CANCEL_DESCRIPTION = "\u53D6\u6D88\u6B63\u5728\u8FD0\u884C\u7684\u540E\u53F0\u4EFB\u52A1\u3002\u4F7F\u7528 all=true \u5728\u6700\u7EC8\u7B54\u6848\u524D\u53D6\u6D88\u6240\u6709\u4EFB\u52A1\u3002";
@@ -1 +1 @@
1
- export declare const HASHLINE_EDIT_DESCRIPTION = "Edit files using LINE#ID format for precise, safe modifications.\n\nWORKFLOW:\n1. Read target file/range and copy exact LINE#ID tags.\n2. Pick the smallest operation per logical mutation site.\n3. Submit one edit call per file with all related operations.\n4. If same file needs another call, re-read first.\n5. Use anchors as \"LINE#ID\" only (never include trailing \"|content\").\n\n<must>\n- SNAPSHOT: All edits in one call reference the ORIGINAL file state. Do NOT adjust line numbers for prior edits in the same call \u2014 the system applies them bottom-up automatically.\n- replace removes lines pos..end (inclusive) and inserts lines in their place. Lines BEFORE pos and AFTER end are UNTOUCHED \u2014 do NOT include them in lines. If you do, they will appear twice.\n- lines must contain ONLY the content that belongs inside the consumed range. Content after end survives unchanged.\n- Tags MUST be copied exactly from read output or >>> mismatch output. NEVER guess tags.\n- Batch = multiple operations in edits[], NOT one big replace covering everything. Each operation targets the smallest possible change.\n- lines must contain plain replacement text only (no LINE#ID prefixes, no diff + markers).\n</must>\n\n<operations>\nLINE#ID FORMAT:\n Each line reference must be in \"{line_number}#{hash_id}\" format where:\n {line_number}: 1-based line number\n {hash_id}: Two CID letters from the set ZPMQVRWSNKTXJBYH\n\nOPERATION CHOICE:\n replace with pos only -> replace one line at pos\n replace with pos+end -> replace range pos..end inclusive as a block (ranges MUST NOT overlap across edits)\n append with pos/end anchor -> insert after that anchor\n prepend with pos/end anchor -> insert before that anchor\n append/prepend without anchors -> EOF/BOF insertion (also creates missing files)\n\nCONTENT FORMAT:\n lines can be a string (single line) or string[] (multi-line, preferred).\n If you pass a multi-line string, it is split by real newline characters.\n lines: null or lines: [] with replace -> delete those lines.\n\nFILE MODES:\n delete=true deletes file and requires edits=[] with no rename\n rename moves final content to a new path and removes old path\n\nRULES:\n 1. Minimize scope: one logical mutation site per operation.\n 2. Preserve formatting: keep indentation, punctuation, line breaks, trailing commas, brace style.\n 3. Prefer insertion over neighbor rewrites: anchor to structural boundaries (}, ], },), not interior property lines.\n 4. No no-ops: replacement content must differ from current content.\n 5. Touch only requested code: avoid incidental edits.\n 6. Use exact current tokens: NEVER rewrite approximately.\n 7. For swaps/moves: prefer one range operation over multiple single-line operations.\n 8. Anchor to structural lines (function/class/brace), NEVER blank lines.\n 9. Re-read after each successful edit call before issuing another on the same file.\n</operations>\n\n<examples>\nGiven this file content after read:\n 10#VK|function hello() {\n 11#XJ| console.log(\"hi\");\n 12#MB| console.log(\"bye\");\n 13#QR|}\n 14#TN|\n 15#WS|function world() {\n\nSingle-line replace (change line 11):\n { op: \"replace\", pos: \"11#XJ\", lines: [\" console.log(\\\"hello\\\");\"] }\n Result: line 11 replaced. Lines 10, 12-15 unchanged.\n\nRange replace (rewrite function body, lines 11-12):\n { op: \"replace\", pos: \"11#XJ\", end: \"12#MB\", lines: [\" return \\\"hello world\\\";\"] }\n Result: lines 11-12 removed, replaced by 1 new line. Lines 10, 13-15 unchanged.\n\nDelete a line:\n { op: \"replace\", pos: \"12#MB\", lines: null }\n Result: line 12 removed. Lines 10-11, 13-15 unchanged.\n\nInsert after line 13 (between functions):\n { op: \"append\", pos: \"13#QR\", lines: [\"\", \"function added() {\", \" return true;\", \"}\"] }\n Result: 4 new lines inserted after line 13. All existing lines unchanged.\n\nBAD \u2014 lines extend past end (DUPLICATES line 13):\n { op: \"replace\", pos: \"11#XJ\", end: \"12#MB\", lines: [\" return \\\"hi\\\";\", \"}\"] }\n Line 13 is \"}\" which already exists after end. Including \"}\" in lines duplicates it.\n CORRECT: { op: \"replace\", pos: \"11#XJ\", end: \"12#MB\", lines: [\" return \\\"hi\\\";\"] }\n</examples>\n\n<auto>\nBuilt-in autocorrect (you do NOT need to handle these):\n Merged lines are auto-expanded back to original line count.\n Indentation is auto-restored from original lines.\n BOM and CRLF line endings are preserved automatically.\n Hashline prefixes and diff markers in text are auto-stripped.\n Boundary echo lines (duplicating adjacent surviving lines) are auto-stripped.\n</auto>\n\nRECOVERY (when >>> mismatch error appears):\n Copy the updated LINE#ID tags shown in the error output directly.\n Re-read only if the needed tags are missing from the error snippet.";
1
+ export declare const HASHLINE_EDIT_DESCRIPTION = "\u4F7F\u7528 LINE#ID \u683C\u5F0F\u7F16\u8F91\u6587\u4EF6\uFF0C\u5B9E\u73B0\u7CBE\u786E\u3001\u5B89\u5168\u7684\u4FEE\u6539\u3002\n\n\u5DE5\u4F5C\u6D41\u7A0B\uFF1A\n1. \u8BFB\u53D6\u76EE\u6807\u6587\u4EF6/\u8303\u56F4\uFF0C\u590D\u5236\u7CBE\u786E\u7684 LINE#ID \u6807\u7B7E\u3002\n2. \u6BCF\u4E2A\u903B\u8F91\u53D8\u66F4\u70B9\u9009\u62E9\u6700\u5C0F\u5316\u7684\u64CD\u4F5C\u3002\n3. \u6BCF\u4E2A\u6587\u4EF6\u6BCF\u6B21\u63D0\u4EA4\u4E00\u4E2A\u7F16\u8F91\u8C03\u7528\uFF0C\u5305\u542B\u6240\u6709\u76F8\u5173\u64CD\u4F5C\u3002\n4. \u5982\u679C\u540C\u4E00\u6587\u4EF6\u9700\u8981\u518D\u6B21\u8C03\u7528\uFF0C\u5148\u91CD\u65B0\u8BFB\u53D6\u3002\n5. \u4EC5\u5C06\u951A\u70B9\u7528\u4F5C \"LINE#ID\"\uFF08\u6C38\u4E0D\u5305\u542B\u5C3E\u90E8 \"|content\"\uFF09\u3002\n\n<\u5FC5\u987B\u9075\u5B88>\n- SNAPSHOT\uFF1A\u5355\u6B21\u8C03\u7528\u4E2D\u7684\u6240\u6709\u7F16\u8F91\u5747\u53C2\u7167\u539F\u59CB\u6587\u4EF6\u72B6\u6001\u3002\u4E0D\u8981\u4E3A\u540C\u4E00\u6B21\u8C03\u7528\u4E2D\u4E4B\u524D\u7684\u7F16\u8F91\u8C03\u6574\u884C\u53F7\u2014\u2014\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u4ECE\u4E0B\u5F80\u4E0A\u5E94\u7528\u5B83\u4EEC\u3002\n- replace \u5220\u9664 pos..end\uFF08\u5305\u542B\uFF09\u8303\u56F4\u7684\u884C\u5E76\u63D2\u5165\u65B0\u884C\u3002pos \u4E4B\u524D\u7684\u884C\u548C end \u4E4B\u540E\u7684\u884C\u4E0D\u53D7\u5F71\u54CD\u2014\u2014\u4E0D\u8981\u5C06\u5B83\u4EEC\u5305\u542B\u5728 lines \u4E2D\u3002\u5426\u5219\u4F1A\u51FA\u73B0\u91CD\u590D\u3002\n- lines \u5FC5\u987B\u53EA\u5305\u542B\u5C5E\u4E8E\u6240\u6D88\u8D39\u8303\u56F4\u5185\u7684\u5185\u5BB9\u3002end \u4E4B\u540E\u7684\u5185\u5BB9\u4FDD\u6301\u4E0D\u53D8\u3002\n- \u6807\u7B7E\u5FC5\u987B\u4ECE\u8BFB\u53D6\u8F93\u51FA\u6216 >>> \u4E0D\u5339\u914D\u8F93\u51FA\u4E2D\u7CBE\u786E\u590D\u5236\u3002\u5207\u52FF\u731C\u6D4B\u6807\u7B7E\u3002\n- \u6279\u91CF\u64CD\u4F5C = \u5728 edits[] \u4E2D\u5305\u542B\u591A\u4E2A\u64CD\u4F5C\uFF0C\u800C\u975E\u4E00\u4E2A\u8986\u76D6\u6240\u6709\u5185\u5BB9\u7684\u5927 replace\u3002\u6BCF\u4E2A\u64CD\u4F5C\u5E94\u9488\u5BF9\u6700\u5C0F\u7684\u53EF\u80FD\u53D8\u66F4\u3002\n- lines \u5FC5\u987B\u53EA\u5305\u542B\u7EAF\u66FF\u6362\u6587\u672C\uFF08\u4E0D\u542B LINE#ID \u524D\u7F00\uFF0C\u65E0 diff + \u6807\u8BB0\uFF09\u3002\n</\u5FC5\u987B\u9075\u5B88>\n\n<\u64CD\u4F5C\u8BF4\u660E>\nLINE#ID \u683C\u5F0F\uFF1A\n \u6BCF\u884C\u5F15\u7528\u5FC5\u987B\u91C7\u7528 \"{\u884C\u53F7}#{\u54C8\u5E0CID}\" \u683C\u5F0F\uFF0C\u5176\u4E2D\uFF1A\n {\u884C\u53F7}\uFF1A\u4ECE 1 \u5F00\u59CB\u7684\u884C\u53F7\n {\u54C8\u5E0CID}\uFF1A\u6765\u81EA ZPMQVRWSNKTXJBYH \u96C6\u5408\u7684\u4E24\u4E2A CID \u5B57\u6BCD\n\n\u64CD\u4F5C\u9009\u62E9\uFF1A\n \u4EC5\u7528 pos \u8FDB\u884C replace \u2192 \u66FF\u6362 pos \u5904\u7684\u4E00\u884C\n \u7528 pos+end \u8FDB\u884C replace \u2192 \u5C06 pos..end \u8303\u56F4\uFF08\u542B\uFF09\u4F5C\u4E3A\u5757\u66FF\u6362\uFF08\u8303\u56F4\u5728\u591A\u4E2A\u7F16\u8F91\u95F4\u4E0D\u5F97\u91CD\u53E0\uFF09\n \u7528 pos/end \u951A\u70B9\u8FDB\u884C append \u2192 \u5728\u8BE5\u951A\u70B9\u4E4B\u540E\u63D2\u5165\n \u7528 pos/end \u951A\u70B9\u8FDB\u884C prepend \u2192 \u5728\u8BE5\u951A\u70B9\u4E4B\u524D\u63D2\u5165\n \u65E0\u951A\u70B9\u7684 append/prepend \u2192 \u5728 EOF/BOF \u63D2\u5165\uFF08\u4E5F\u53EF\u521B\u5EFA\u4E0D\u5B58\u5728\u7684\u6587\u4EF6\uFF09\n\n\u5185\u5BB9\u683C\u5F0F\uFF1A\n lines \u53EF\u4EE5\u662F\u5B57\u7B26\u4E32\uFF08\u5355\u884C\uFF09\u6216 string[]\uFF08\u591A\u884C\uFF0C\u63A8\u8350\uFF09\u3002\n \u5982\u679C\u4F20\u5165\u591A\u884C\u5B57\u7B26\u4E32\uFF0C\u5C06\u6309\u771F\u5B9E\u6362\u884C\u7B26\u62C6\u5206\u3002\n lines: null \u6216 lines: [] \u914D\u5408 replace \u2192 \u5220\u9664\u8FD9\u4E9B\u884C\u3002\n\n\u6587\u4EF6\u6A21\u5F0F\uFF1A\n delete=true \u5220\u9664\u6587\u4EF6\uFF0C\u8981\u6C42 edits=[] \u4E14\u65E0 rename\n rename \u5C06\u6700\u7EC8\u5185\u5BB9\u79FB\u52A8\u5230\u65B0\u8DEF\u5F84\u5E76\u5220\u9664\u65E7\u8DEF\u5F84\n\n\u89C4\u5219\uFF1A\n 1. \u6700\u5C0F\u5316\u8303\u56F4\uFF1A\u6BCF\u4E2A\u903B\u8F91\u53D8\u66F4\u70B9\u4E00\u4E2A\u64CD\u4F5C\u3002\n 2. \u4FDD\u6301\u683C\u5F0F\uFF1A\u4FDD\u7559\u7F29\u8FDB\u3001\u6807\u70B9\u3001\u6362\u884C\u3001\u5C3E\u90E8\u9017\u53F7\u3001\u5927\u62EC\u53F7\u98CE\u683C\u3002\n 3. \u4F18\u5148\u63D2\u5165\u800C\u975E\u90BB\u8FD1\u91CD\u5199\uFF1A\u951A\u5B9A\u5230\u7ED3\u6784\u8FB9\u754C\uFF08}\u3001]\u3001}), \u800C\u975E\u5185\u90E8\u5C5E\u6027\u884C\u3002\n 4. \u7981\u6B62\u65E0\u610F\u4E49\u64CD\u4F5C\uFF1A\u66FF\u6362\u5185\u5BB9\u5FC5\u987B\u4E0E\u5F53\u524D\u5185\u5BB9\u4E0D\u540C\u3002\n 5. \u4EC5\u4FEE\u6539\u8BF7\u6C42\u7684\u4EE3\u7801\uFF1A\u907F\u514D\u9644\u5E26\u7F16\u8F91\u3002\n 6. \u4F7F\u7528\u7CBE\u786E\u7684\u5F53\u524D\u6807\u8BB0\uFF1A\u7EDD\u4E0D\u8FD1\u4F3C\u91CD\u5199\u3002\n 7. \u5BF9\u4E8E\u4EA4\u6362/\u79FB\u52A8\uFF1A\u4F18\u5148\u4F7F\u7528\u4E00\u4E2A\u8303\u56F4\u64CD\u4F5C\u800C\u975E\u591A\u4E2A\u5355\u884C\u64CD\u4F5C\u3002\n 8. \u951A\u5B9A\u5230\u7ED3\u6784\u884C\uFF08\u51FD\u6570/\u7C7B/\u5927\u62EC\u53F7\uFF09\uFF0C\u7EDD\u4E0D\u5B9A\u951A\u5230\u7A7A\u884C\u3002\n 9. \u6BCF\u6B21\u6210\u529F\u7F16\u8F91\u8C03\u7528\u540E\u91CD\u65B0\u8BFB\u53D6\uFF0C\u518D\u5BF9\u540C\u4E00\u6587\u4EF6\u53D1\u51FA\u4E0B\u4E00\u4E2A\u8C03\u7528\u3002\n</\u64CD\u4F5C\u8BF4\u660E>\n\n<\u793A\u4F8B>\n\u8BFB\u53D6\u540E\u6587\u4EF6\u5185\u5BB9\u5982\u4E0B\uFF1A\n 10#VK|function hello() {\n 11#XJ| console.log(\"hi\");\n 12#MB| console.log(\"bye\");\n 13#QR|}\n 14#TN|\n 15#WS|function world() {\n\n\u5355\u884C\u66FF\u6362\uFF08\u4FEE\u6539\u7B2C 11 \u884C\uFF09\uFF1A\n { op: \"replace\", pos: \"11#XJ\", lines: [\" console.log(\\\"hello\\\");\"] }\n \u7ED3\u679C\uFF1A\u66FF\u6362\u7B2C 11 \u884C\u3002\u7B2C 10\u300112-15 \u884C\u4E0D\u53D8\u3002\n\n\u8303\u56F4\u66FF\u6362\uFF08\u91CD\u5199\u51FD\u6570\u4F53\uFF0C\u7B2C 11-12 \u884C\uFF09\uFF1A\n { op: \"replace\", pos: \"11#XJ\", end: \"12#MB\", lines: [\" return \\\"hello world\\\";\"] }\n \u7ED3\u679C\uFF1A\u5220\u9664\u7B2C 11-12 \u884C\uFF0C\u66FF\u6362\u4E3A 1 \u884C\u65B0\u5185\u5BB9\u3002\u7B2C 10\u300113-15 \u884C\u4E0D\u53D8\u3002\n\n\u5220\u9664\u4E00\u884C\uFF1A\n { op: \"replace\", pos: \"12#MB\", lines: null }\n \u7ED3\u679C\uFF1A\u5220\u9664\u7B2C 12 \u884C\u3002\u7B2C 10-11\u300113-15 \u884C\u4E0D\u53D8\u3002\n\n\u5728\u7B2C 13 \u884C\u540E\u63D2\u5165\uFF08\u4E24\u51FD\u6570\u4E4B\u95F4\uFF09\uFF1A\n { op: \"append\", pos: \"13#QR\", lines: [\"\", \"function added() {\", \" return true;\", \"}\"] }\n \u7ED3\u679C\uFF1A\u5728\u7B2C 13 \u884C\u540E\u63D2\u5165 4 \u884C\u65B0\u5185\u5BB9\u3002\u6240\u6709\u73B0\u6709\u884C\u4E0D\u53D8\u3002\n\n\u9519\u8BEF\u793A\u4F8B \u2014 lines \u8D85\u51FA end\uFF08\u5BFC\u81F4\u7B2C 13 \u884C\u91CD\u590D\uFF09\uFF1A\n { op: \"replace\", pos: \"11#XJ\", end: \"12#MB\", lines: [\" return \\\"hi\\\";\", \"}\"] }\n \u7B2C 13 \u884C\u662F \"}\"\uFF0C\u5DF2\u5B58\u5728\u4E8E end \u4E4B\u540E\u3002\u5C06 \"}\" \u5305\u542B\u5728 lines \u4E2D\u4F1A\u5BFC\u81F4\u91CD\u590D\u3002\n \u6B63\u786E\u5199\u6CD5\uFF1A{ op: \"replace\", pos: \"11#XJ\", end: \"12#MB\", lines: [\" return \\\"hi\\\";\"] }\n</\u793A\u4F8B>\n\n<\u81EA\u52A8\u4FEE\u6B63>\n\u5185\u7F6E\u81EA\u52A8\u7EA0\u6B63\uFF08\u65E0\u9700\u624B\u52A8\u5904\u7406\uFF09\uFF1A\n \u5408\u5E76\u7684\u884C\u4F1A\u81EA\u52A8\u6269\u5C55\u56DE\u539F\u59CB\u884C\u6570\u3002\n \u7F29\u8FDB\u4F1A\u4ECE\u539F\u59CB\u884C\u81EA\u52A8\u6062\u590D\u3002\n BOM \u548C CRLF \u6362\u884C\u7B26\u81EA\u52A8\u4FDD\u7559\u3002\n \u6587\u672C\u4E2D\u7684 hashline \u524D\u7F00\u548C diff \u6807\u8BB0\u4F1A\u81EA\u52A8\u53BB\u9664\u3002\n \u8FB9\u754C\u56DE\u663E\u884C\uFF08\u590D\u5236\u76F8\u90BB\u5B58\u6D3B\u884C\uFF09\u4F1A\u81EA\u52A8\u53BB\u9664\u3002\n</\u81EA\u52A8\u4FEE\u6B63>\n\n\u6062\u590D\uFF08\u51FA\u73B0 >>> \u4E0D\u5339\u914D\u9519\u8BEF\u65F6\uFF09\uFF1A\n \u76F4\u63A5\u590D\u5236\u9519\u8BEF\u8F93\u51FA\u4E2D\u663E\u793A\u7684\u66F4\u65B0\u540E\u7684 LINE#ID \u6807\u7B7E\u3002\n \u4EC5\u5728\u9519\u8BEF\u7247\u6BB5\u4E2D\u7F3A\u5C11\u6240\u9700\u6807\u7B7E\u65F6\u624D\u91CD\u65B0\u8BFB\u53D6\u3002\n";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skj1724/oh-my-opencode",
3
- "version": "3.11.1",
3
+ "version": "3.11.3",
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",