@skj1724/oh-my-opencode 3.11.2 → 3.11.4

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
@@ -16442,8 +16442,8 @@ var init_model_capabilities_generated = __esm(() => {
16442
16442
  ]
16443
16443
  },
16444
16444
  limit: {
16445
- context: 204800,
16446
- output: 131072
16445
+ context: 2000000,
16446
+ output: 262144
16447
16447
  }
16448
16448
  },
16449
16449
  "zai-org/autoglm-phone-9b-multilingual": {
@@ -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.2",
50379
+ version: "3.11.4",
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",
@@ -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 +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
@@ -27758,8 +27758,8 @@ var model_capabilities_generated_default = {
27758
27758
  ]
27759
27759
  },
27760
27760
  limit: {
27761
- context: 204800,
27762
- output: 131072
27761
+ context: 2000000,
27762
+ output: 262144
27763
27763
  }
27764
27764
  },
27765
27765
  "zai-org/autoglm-phone-9b-multilingual": {
@@ -83284,29 +83284,29 @@ var AGENT_TOOLS = new Set([
83284
83284
  "task"
83285
83285
  ]);
83286
83286
  var REMINDER_MESSAGE = `
83287
- [Agent Usage Reminder]
83287
+ [\u4EE3\u7406\u4F7F\u7528\u63D0\u9192]
83288
83288
 
83289
- You called a search/fetch tool directly without leveraging specialized agents.
83289
+ \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
83290
 
83291
- RECOMMENDED: Use task with explore/librarian agents for better results:
83291
+ \u63A8\u8350\u505A\u6CD5\uFF1A\u4F7F\u7528 task \u8C03\u7528 explore/librarian \u4EE3\u7406\u4EE5\u83B7\u5F97\u66F4\u597D\u7684\u7ED3\u679C\uFF1A
83292
83292
 
83293
83293
  \`\`\`
83294
- // Parallel exploration - fire multiple agents simultaneously
83294
+ // \u5E76\u884C\u63A2\u7D22 - \u540C\u65F6\u542F\u52A8\u591A\u4E2A\u4EE3\u7406
83295
83295
  task(agent="explore", prompt="Find all files matching pattern X")
83296
- task(agent="explore", prompt="Search for implementation of Y")
83296
+ task(agent="explore", prompt="Search for implementation of Y")
83297
83297
  task(agent="librarian", prompt="Lookup documentation for Z")
83298
83298
 
83299
- // Then continue your work while they run in background
83300
- // System will notify you when each completes
83299
+ // \u5728\u5B83\u4EEC\u540E\u53F0\u8FD0\u884C\u65F6\u7EE7\u7EED\u4F60\u7684\u5DE5\u4F5C
83300
+ // \u7CFB\u7EDF\u4F1A\u5728\u6BCF\u4E2A\u4EE3\u7406\u5B8C\u6210\u65F6\u901A\u77E5\u4F60
83301
83301
  \`\`\`
83302
83302
 
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
83303
+ \u539F\u56E0\uFF1A
83304
+ - \u4EE3\u7406\u53EF\u4EE5\u6267\u884C\u66F4\u6DF1\u3001\u66F4\u5F7B\u5E95\u7684\u641C\u7D22
83305
+ - \u540E\u53F0\u4EFB\u52A1\u5E76\u884C\u8FD0\u884C\uFF0C\u8282\u7701\u65F6\u95F4
83306
+ - \u4E13\u95E8\u7684\u4EE3\u7406\u5177\u6709\u9886\u57DF\u4E13\u4E1A\u77E5\u8BC6
83307
+ - \u51CF\u5C11\u4E3B\u4F1A\u8BDD\u4E2D\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u4F7F\u7528
83308
83308
 
83309
- ALWAYS prefer: Multiple parallel task calls > Direct tool calls
83309
+ \u59CB\u7EC8\u4F18\u5148\u9009\u62E9\uFF1A\u591A\u4E2A\u5E76\u884C task \u8C03\u7528 > \u76F4\u63A5\u5DE5\u5177\u8C03\u7528
83310
83310
  `;
83311
83311
 
83312
83312
  // src/hooks/agent-usage-reminder/storage.ts
@@ -97191,34 +97191,34 @@ function createReadImageResizerHook(_ctx) {
97191
97191
  };
97192
97192
  }
97193
97193
  // 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.
97194
+ 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
97195
 
97196
- ## Todo Format (MANDATORY)
97196
+ ## \u5F85\u529E\u683C\u5F0F\uFF08\u5FC5\u987B\u9075\u5B88\uFF09
97197
97197
 
97198
- Each todo title MUST encode four elements: WHERE, WHY, HOW, and EXPECTED RESULT.
97198
+ \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
97199
 
97200
- Format: "[WHERE] [HOW] to [WHY] \u2014 expect [RESULT]"
97200
+ \u683C\u5F0F\uFF1A"[\u4F4D\u7F6E] [\u65B9\u6CD5] \u4EE5 [\u539F\u56E0] \u2014 \u9884\u671F [\u7ED3\u679C]"
97201
97201
 
97202
- GOOD:
97202
+ \u6B63\u786E\u793A\u4F8B\uFF1A
97203
97203
  - "src/utils/validation.ts: Add validateEmail() for input sanitization \u2014 returns boolean"
97204
97204
  - "UserService.create(): Call validateEmail() before DB insert \u2014 rejects invalid emails with 400"
97205
97205
  - "validation.test.ts: Add test for missing @ sign \u2014 expect validateEmail('foo') to return false"
97206
97206
 
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?)
97207
+ \u9519\u8BEF\u793A\u4F8B\uFF1A
97208
+ - "Implement email validation"\uFF08\u4F4D\u7F6E\uFF1F\u65B9\u6CD5\uFF1F\u7ED3\u679C\uFF1F\uFF09
97209
+ - "Add dark mode"\uFF08\u8FD9\u662F\u529F\u80FD\uFF0C\u4E0D\u662F\u5F85\u529E\uFF09
97210
+ - "Fix auth"\uFF08\u54EA\u4E2A\u6587\u4EF6\uFF1F\u4EC0\u4E48\u4FEE\u6539\uFF1F\u9884\u671F\u4EC0\u4E48\uFF1F\uFF09
97211
97211
 
97212
- ## Granularity Rules
97212
+ ## \u7C92\u5EA6\u89C4\u5219
97213
97213
 
97214
- Each todo MUST be a single atomic action completable in 1-3 tool calls. If it needs more, split it.
97214
+ \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
97215
 
97216
- **Size test**: Can you complete this todo by editing one file or running one command? If not, it's too big.
97216
+ **\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
97217
 
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).`;
97218
+ ## \u4EFB\u52A1\u7BA1\u7406
97219
+ - \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
97220
+ - \u6BCF\u9879\u5B8C\u6210\u540E\u7ACB\u5373\u6807\u8BB0\u4E3A\u5DF2\u5B8C\u6210\u3002
97221
+ - \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
97222
 
97223
97223
  // src/hooks/todo-description-override/hook.ts
97224
97224
  function createTodoDescriptionOverrideHook() {
@@ -119772,60 +119772,60 @@ Tip: reuse LINE#ID entries from the latest read/edit output, or batch related ed
119772
119772
  }
119773
119773
 
119774
119774
  // src/tools/hashline-edit/tool-description.ts
119775
- var HASHLINE_EDIT_DESCRIPTION = `Edit files using LINE#ID format for precise, safe modifications.
119776
-
119777
- WORKFLOW:
119778
- 1. Read target file/range and copy exact LINE#ID tags.
119779
- 2. Pick the smallest operation per logical mutation site.
119780
- 3. Submit one edit call per file with all related operations.
119781
- 4. If same file needs another call, re-read first.
119782
- 5. Use anchors as "LINE#ID" only (never include trailing "|content").
119783
-
119784
- <must>
119785
- - 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.
119786
- - 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.
119787
- - lines must contain ONLY the content that belongs inside the consumed range. Content after end survives unchanged.
119788
- - Tags MUST be copied exactly from read output or >>> mismatch output. NEVER guess tags.
119789
- - Batch = multiple operations in edits[], NOT one big replace covering everything. Each operation targets the smallest possible change.
119790
- - lines must contain plain replacement text only (no LINE#ID prefixes, no diff + markers).
119791
- </must>
119792
-
119793
- <operations>
119794
- LINE#ID FORMAT:
119795
- Each line reference must be in "{line_number}#{hash_id}" format where:
119796
- {line_number}: 1-based line number
119797
- {hash_id}: Two CID letters from the set ZPMQVRWSNKTXJBYH
119798
-
119799
- OPERATION CHOICE:
119800
- replace with pos only -> replace one line at pos
119801
- replace with pos+end -> replace range pos..end inclusive as a block (ranges MUST NOT overlap across edits)
119802
- append with pos/end anchor -> insert after that anchor
119803
- prepend with pos/end anchor -> insert before that anchor
119804
- append/prepend without anchors -> EOF/BOF insertion (also creates missing files)
119805
-
119806
- CONTENT FORMAT:
119807
- lines can be a string (single line) or string[] (multi-line, preferred).
119808
- If you pass a multi-line string, it is split by real newline characters.
119809
- lines: null or lines: [] with replace -> delete those lines.
119810
-
119811
- FILE MODES:
119812
- delete=true deletes file and requires edits=[] with no rename
119813
- rename moves final content to a new path and removes old path
119814
-
119815
- RULES:
119816
- 1. Minimize scope: one logical mutation site per operation.
119817
- 2. Preserve formatting: keep indentation, punctuation, line breaks, trailing commas, brace style.
119818
- 3. Prefer insertion over neighbor rewrites: anchor to structural boundaries (}, ], },), not interior property lines.
119819
- 4. No no-ops: replacement content must differ from current content.
119820
- 5. Touch only requested code: avoid incidental edits.
119821
- 6. Use exact current tokens: NEVER rewrite approximately.
119822
- 7. For swaps/moves: prefer one range operation over multiple single-line operations.
119823
- 8. Anchor to structural lines (function/class/brace), NEVER blank lines.
119824
- 9. Re-read after each successful edit call before issuing another on the same file.
119825
- </operations>
119826
-
119827
- <examples>
119828
- Given this file content after read:
119775
+ 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
119776
+
119777
+ \u5DE5\u4F5C\u6D41\u7A0B\uFF1A
119778
+ 1. \u8BFB\u53D6\u76EE\u6807\u6587\u4EF6/\u8303\u56F4\uFF0C\u590D\u5236\u7CBE\u786E\u7684 LINE#ID \u6807\u7B7E\u3002
119779
+ 2. \u6BCF\u4E2A\u903B\u8F91\u53D8\u66F4\u70B9\u9009\u62E9\u6700\u5C0F\u5316\u7684\u64CD\u4F5C\u3002
119780
+ 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
119781
+ 4. \u5982\u679C\u540C\u4E00\u6587\u4EF6\u9700\u8981\u518D\u6B21\u8C03\u7528\uFF0C\u5148\u91CD\u65B0\u8BFB\u53D6\u3002
119782
+ 5. \u4EC5\u5C06\u951A\u70B9\u7528\u4F5C "LINE#ID"\uFF08\u6C38\u4E0D\u5305\u542B\u5C3E\u90E8 "|content"\uFF09\u3002
119783
+
119784
+ <\u5FC5\u987B\u9075\u5B88>
119785
+ - 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
119786
+ - 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
119787
+ - 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
119788
+ - \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
119789
+ - \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
119790
+ - 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
119791
+ </\u5FC5\u987B\u9075\u5B88>
119792
+
119793
+ <\u64CD\u4F5C\u8BF4\u660E>
119794
+ LINE#ID \u683C\u5F0F\uFF1A
119795
+ \u6BCF\u884C\u5F15\u7528\u5FC5\u987B\u91C7\u7528 "{\u884C\u53F7}#{\u54C8\u5E0CID}" \u683C\u5F0F\uFF0C\u5176\u4E2D\uFF1A
119796
+ {\u884C\u53F7}\uFF1A\u4ECE 1 \u5F00\u59CB\u7684\u884C\u53F7
119797
+ {\u54C8\u5E0CID}\uFF1A\u6765\u81EA ZPMQVRWSNKTXJBYH \u96C6\u5408\u7684\u4E24\u4E2A CID \u5B57\u6BCD
119798
+
119799
+ \u64CD\u4F5C\u9009\u62E9\uFF1A
119800
+ \u4EC5\u7528 pos \u8FDB\u884C replace \u2192 \u66FF\u6362 pos \u5904\u7684\u4E00\u884C
119801
+ \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
119802
+ \u7528 pos/end \u951A\u70B9\u8FDB\u884C append \u2192 \u5728\u8BE5\u951A\u70B9\u4E4B\u540E\u63D2\u5165
119803
+ \u7528 pos/end \u951A\u70B9\u8FDB\u884C prepend \u2192 \u5728\u8BE5\u951A\u70B9\u4E4B\u524D\u63D2\u5165
119804
+ \u65E0\u951A\u70B9\u7684 append/prepend \u2192 \u5728 EOF/BOF \u63D2\u5165\uFF08\u4E5F\u53EF\u521B\u5EFA\u4E0D\u5B58\u5728\u7684\u6587\u4EF6\uFF09
119805
+
119806
+ \u5185\u5BB9\u683C\u5F0F\uFF1A
119807
+ lines \u53EF\u4EE5\u662F\u5B57\u7B26\u4E32\uFF08\u5355\u884C\uFF09\u6216 string[]\uFF08\u591A\u884C\uFF0C\u63A8\u8350\uFF09\u3002
119808
+ \u5982\u679C\u4F20\u5165\u591A\u884C\u5B57\u7B26\u4E32\uFF0C\u5C06\u6309\u771F\u5B9E\u6362\u884C\u7B26\u62C6\u5206\u3002
119809
+ lines: null \u6216 lines: [] \u914D\u5408 replace \u2192 \u5220\u9664\u8FD9\u4E9B\u884C\u3002
119810
+
119811
+ \u6587\u4EF6\u6A21\u5F0F\uFF1A
119812
+ delete=true \u5220\u9664\u6587\u4EF6\uFF0C\u8981\u6C42 edits=[] \u4E14\u65E0 rename
119813
+ rename \u5C06\u6700\u7EC8\u5185\u5BB9\u79FB\u52A8\u5230\u65B0\u8DEF\u5F84\u5E76\u5220\u9664\u65E7\u8DEF\u5F84
119814
+
119815
+ \u89C4\u5219\uFF1A
119816
+ 1. \u6700\u5C0F\u5316\u8303\u56F4\uFF1A\u6BCF\u4E2A\u903B\u8F91\u53D8\u66F4\u70B9\u4E00\u4E2A\u64CD\u4F5C\u3002
119817
+ 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
119818
+ 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
119819
+ 4. \u7981\u6B62\u65E0\u610F\u4E49\u64CD\u4F5C\uFF1A\u66FF\u6362\u5185\u5BB9\u5FC5\u987B\u4E0E\u5F53\u524D\u5185\u5BB9\u4E0D\u540C\u3002
119820
+ 5. \u4EC5\u4FEE\u6539\u8BF7\u6C42\u7684\u4EE3\u7801\uFF1A\u907F\u514D\u9644\u5E26\u7F16\u8F91\u3002
119821
+ 6. \u4F7F\u7528\u7CBE\u786E\u7684\u5F53\u524D\u6807\u8BB0\uFF1A\u7EDD\u4E0D\u8FD1\u4F3C\u91CD\u5199\u3002
119822
+ 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
119823
+ 8. \u951A\u5B9A\u5230\u7ED3\u6784\u884C\uFF08\u51FD\u6570/\u7C7B/\u5927\u62EC\u53F7\uFF09\uFF0C\u7EDD\u4E0D\u5B9A\u951A\u5230\u7A7A\u884C\u3002
119824
+ 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
119825
+ </\u64CD\u4F5C\u8BF4\u660E>
119826
+
119827
+ <\u793A\u4F8B>
119828
+ \u8BFB\u53D6\u540E\u6587\u4EF6\u5185\u5BB9\u5982\u4E0B\uFF1A
119829
119829
  10#VK|function hello() {
119830
119830
  11#XJ| console.log("hi");
119831
119831
  12#MB| console.log("bye");
@@ -119833,40 +119833,41 @@ Given this file content after read:
119833
119833
  14#TN|
119834
119834
  15#WS|function world() {
119835
119835
 
119836
- Single-line replace (change line 11):
119836
+ \u5355\u884C\u66FF\u6362\uFF08\u4FEE\u6539\u7B2C 11 \u884C\uFF09\uFF1A
119837
119837
  { op: "replace", pos: "11#XJ", lines: [" console.log(\\"hello\\");"] }
119838
- Result: line 11 replaced. Lines 10, 12-15 unchanged.
119838
+ \u7ED3\u679C\uFF1A\u66FF\u6362\u7B2C 11 \u884C\u3002\u7B2C 10\u300112-15 \u884C\u4E0D\u53D8\u3002
119839
119839
 
119840
- Range replace (rewrite function body, lines 11-12):
119840
+ \u8303\u56F4\u66FF\u6362\uFF08\u91CD\u5199\u51FD\u6570\u4F53\uFF0C\u7B2C 11-12 \u884C\uFF09\uFF1A
119841
119841
  { op: "replace", pos: "11#XJ", end: "12#MB", lines: [" return \\"hello world\\";"] }
119842
- Result: lines 11-12 removed, replaced by 1 new line. Lines 10, 13-15 unchanged.
119842
+ \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
119843
119843
 
119844
- Delete a line:
119844
+ \u5220\u9664\u4E00\u884C\uFF1A
119845
119845
  { op: "replace", pos: "12#MB", lines: null }
119846
- Result: line 12 removed. Lines 10-11, 13-15 unchanged.
119846
+ \u7ED3\u679C\uFF1A\u5220\u9664\u7B2C 12 \u884C\u3002\u7B2C 10-11\u300113-15 \u884C\u4E0D\u53D8\u3002
119847
119847
 
119848
- Insert after line 13 (between functions):
119848
+ \u5728\u7B2C 13 \u884C\u540E\u63D2\u5165\uFF08\u4E24\u51FD\u6570\u4E4B\u95F4\uFF09\uFF1A
119849
119849
  { op: "append", pos: "13#QR", lines: ["", "function added() {", " return true;", "}"] }
119850
- Result: 4 new lines inserted after line 13. All existing lines unchanged.
119850
+ \u7ED3\u679C\uFF1A\u5728\u7B2C 13 \u884C\u540E\u63D2\u5165 4 \u884C\u65B0\u5185\u5BB9\u3002\u6240\u6709\u73B0\u6709\u884C\u4E0D\u53D8\u3002
119851
119851
 
119852
- BAD \u2014 lines extend past end (DUPLICATES line 13):
119852
+ \u9519\u8BEF\u793A\u4F8B \u2014 lines \u8D85\u51FA end\uFF08\u5BFC\u81F4\u7B2C 13 \u884C\u91CD\u590D\uFF09\uFF1A
119853
119853
  { op: "replace", pos: "11#XJ", end: "12#MB", lines: [" return \\"hi\\";", "}"] }
119854
- Line 13 is "}" which already exists after end. Including "}" in lines duplicates it.
119855
- CORRECT: { op: "replace", pos: "11#XJ", end: "12#MB", lines: [" return \\"hi\\";"] }
119856
- </examples>
119857
-
119858
- <auto>
119859
- Built-in autocorrect (you do NOT need to handle these):
119860
- Merged lines are auto-expanded back to original line count.
119861
- Indentation is auto-restored from original lines.
119862
- BOM and CRLF line endings are preserved automatically.
119863
- Hashline prefixes and diff markers in text are auto-stripped.
119864
- Boundary echo lines (duplicating adjacent surviving lines) are auto-stripped.
119865
- </auto>
119866
-
119867
- RECOVERY (when >>> mismatch error appears):
119868
- Copy the updated LINE#ID tags shown in the error output directly.
119869
- Re-read only if the needed tags are missing from the error snippet.`;
119854
+ \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
119855
+ \u6B63\u786E\u5199\u6CD5\uFF1A{ op: "replace", pos: "11#XJ", end: "12#MB", lines: [" return \\"hi\\";"] }
119856
+ </\u793A\u4F8B>
119857
+
119858
+ <\u81EA\u52A8\u4FEE\u6B63>
119859
+ \u5185\u7F6E\u81EA\u52A8\u7EA0\u6B63\uFF08\u65E0\u9700\u624B\u52A8\u5904\u7406\uFF09\uFF1A
119860
+ \u5408\u5E76\u7684\u884C\u4F1A\u81EA\u52A8\u6269\u5C55\u56DE\u539F\u59CB\u884C\u6570\u3002
119861
+ \u7F29\u8FDB\u4F1A\u4ECE\u539F\u59CB\u884C\u81EA\u52A8\u6062\u590D\u3002
119862
+ BOM \u548C CRLF \u6362\u884C\u7B26\u81EA\u52A8\u4FDD\u7559\u3002
119863
+ \u6587\u672C\u4E2D\u7684 hashline \u524D\u7F00\u548C diff \u6807\u8BB0\u4F1A\u81EA\u52A8\u53BB\u9664\u3002
119864
+ \u8FB9\u754C\u56DE\u663E\u884C\uFF08\u590D\u5236\u76F8\u90BB\u5B58\u6D3B\u884C\uFF09\u4F1A\u81EA\u52A8\u53BB\u9664\u3002
119865
+ </\u81EA\u52A8\u4FEE\u6B63>
119866
+
119867
+ \u6062\u590D\uFF08\u51FA\u73B0 >>> \u4E0D\u5339\u914D\u9519\u8BEF\u65F6\uFF09\uFF1A
119868
+ \u76F4\u63A5\u590D\u5236\u9519\u8BEF\u8F93\u51FA\u4E2D\u663E\u793A\u7684\u66F4\u65B0\u540E\u7684 LINE#ID \u6807\u7B7E\u3002
119869
+ \u4EC5\u5728\u9519\u8BEF\u7247\u6BB5\u4E2D\u7F3A\u5C11\u6240\u9700\u6807\u7B7E\u65F6\u624D\u91CD\u65B0\u8BFB\u53D6\u3002
119870
+ `;
119870
119871
 
119871
119872
  // src/tools/hashline-edit/tools.ts
119872
119873
  function createHashlineEditTool(ctx) {
@@ -130561,7 +130562,7 @@ function createSisyphusAgent(model, availableAgents, availableToolNames, availab
130561
130562
  if (isGpt5_4Model(model)) {
130562
130563
  const prompt2 = buildGpt54SisyphusPrompt(model, agents, tools, skills2, categories2, useTaskSystem);
130563
130564
  return {
130564
- 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)",
130565
+ 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",
130565
130566
  mode: MODE,
130566
130567
  model,
130567
130568
  maxTokens: 64000,
@@ -130597,7 +130598,7 @@ ${buildGeminiVerificationOverride()}
130597
130598
  call_omo_agent: "deny"
130598
130599
  };
130599
130600
  const base = {
130600
- 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)",
130601
+ 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",
130601
130602
  mode: MODE,
130602
130603
  model,
130603
130604
  maxTokens: 64000,
@@ -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,103 +1,103 @@
1
- {
2
- "name": "@skj1724/oh-my-opencode",
3
- "version": "3.11.2",
4
- "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "type": "module",
8
- "bin": {
9
- "oh-my-opencode": "bin/oh-my-opencode.js"
10
- },
11
- "files": [
12
- "dist",
13
- "bin",
14
- "postinstall.mjs"
15
- ],
16
- "exports": {
17
- ".": {
18
- "types": "./dist/index.d.ts",
19
- "import": "./dist/index.js"
20
- },
21
- "./schema.json": "./dist/oh-my-opencode.schema.json"
22
- },
23
- "scripts": {
24
- "build": "bun build src/index.ts --outdir dist --target bun --format esm --external @ast-grep/napi && tsc --emitDeclarationOnly && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --external @ast-grep/napi && bun run build:schema",
25
- "build:all": "bun run build && bun run build:binaries",
26
- "build:binaries": "bun run script/build-binaries.ts",
27
- "build:schema": "bun run script/build-schema.ts",
28
- "build:model-capabilities": "bun run script/build-model-capabilities.ts",
29
- "clean": "rm -rf dist",
30
- "prepare": "bun run build",
31
- "postinstall": "node postinstall.mjs",
32
- "prepublishOnly": "bun run clean && bun run build",
33
- "test:model-capabilities": "bun test src/shared/model-capability-aliases.test.ts src/shared/model-capability-guardrails.test.ts src/shared/model-capabilities.test.ts src/cli/doctor/checks/model-resolution.test.ts --bail",
34
- "typecheck": "tsc --noEmit",
35
- "test": "bun test"
36
- },
37
- "keywords": [
38
- "opencode",
39
- "plugin",
40
- "oracle",
41
- "librarian",
42
- "agents",
43
- "ai",
44
- "llm"
45
- ],
46
- "author": "YeonGyu-Kim",
47
- "license": "SUL-1.0",
48
- "repository": {
49
- "type": "git",
50
- "url": "git+https://github.com/code-yeongyu/oh-my-openagent.git"
51
- },
52
- "bugs": {
53
- "url": "https://github.com/code-yeongyu/oh-my-openagent/issues"
54
- },
55
- "homepage": "https://github.com/code-yeongyu/oh-my-openagent#readme",
56
- "dependencies": {
57
- "@ast-grep/cli": "^0.41.1",
58
- "@ast-grep/napi": "^0.41.1",
59
- "@clack/prompts": "^0.11.0",
60
- "@code-yeongyu/comment-checker": "^0.7.0",
61
- "@modelcontextprotocol/sdk": "^1.25.2",
62
- "@opencode-ai/plugin": "^1.2.24",
63
- "@opencode-ai/sdk": "^1.2.24",
64
- "commander": "^14.0.2",
65
- "detect-libc": "^2.0.0",
66
- "diff": "^8.0.3",
67
- "js-yaml": "^4.1.1",
68
- "jsonc-parser": "^3.3.1",
69
- "picocolors": "^1.1.1",
70
- "picomatch": "^4.0.2",
71
- "vscode-jsonrpc": "^8.2.0",
72
- "zod": "^4.1.8"
73
- },
74
- "devDependencies": {
75
- "@types/js-yaml": "^4.0.9",
76
- "@types/picomatch": "^3.0.2",
77
- "bun-types": "1.3.10",
78
- "typescript": "^5.7.3",
79
- "@types/bun": "latest"
80
- },
81
- "optionalDependencies": {
82
- "oh-my-opencode-darwin-arm64": "3.11.0",
83
- "oh-my-opencode-darwin-x64": "3.11.0",
84
- "oh-my-opencode-darwin-x64-baseline": "3.11.0",
85
- "oh-my-opencode-linux-arm64": "3.11.0",
86
- "oh-my-opencode-linux-arm64-musl": "3.11.0",
87
- "oh-my-opencode-linux-x64": "3.11.0",
88
- "oh-my-opencode-linux-x64-baseline": "3.11.0",
89
- "oh-my-opencode-linux-x64-musl": "3.11.0",
90
- "oh-my-opencode-linux-x64-musl-baseline": "3.11.0",
91
- "oh-my-opencode-windows-x64": "3.11.0",
92
- "oh-my-opencode-windows-x64-baseline": "3.11.0"
93
- },
94
- "overrides": {
95
- "@opencode-ai/sdk": "^1.2.24"
96
- },
97
- "trustedDependencies": [
98
- "@ast-grep/cli",
99
- "@ast-grep/napi",
100
- "@code-yeongyu/comment-checker"
101
- ],
102
- "private": false
103
- }
1
+ {
2
+ "name": "@skj1724/oh-my-opencode",
3
+ "version": "3.11.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
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "oh-my-opencode": "bin/oh-my-opencode.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "bin",
14
+ "postinstall.mjs"
15
+ ],
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js"
20
+ },
21
+ "./schema.json": "./dist/oh-my-opencode.schema.json"
22
+ },
23
+ "scripts": {
24
+ "build": "bun build src/index.ts --outdir dist --target bun --format esm --external @ast-grep/napi && tsc --emitDeclarationOnly && bun build src/cli/index.ts --outdir dist/cli --target bun --format esm --external @ast-grep/napi && bun run build:schema",
25
+ "build:all": "bun run build && bun run build:binaries",
26
+ "build:binaries": "bun run script/build-binaries.ts",
27
+ "build:schema": "bun run script/build-schema.ts",
28
+ "build:model-capabilities": "bun run script/build-model-capabilities.ts",
29
+ "clean": "rm -rf dist",
30
+ "prepare": "bun run build",
31
+ "postinstall": "node postinstall.mjs",
32
+ "prepublishOnly": "bun run clean && bun run build",
33
+ "test:model-capabilities": "bun test src/shared/model-capability-aliases.test.ts src/shared/model-capability-guardrails.test.ts src/shared/model-capabilities.test.ts src/cli/doctor/checks/model-resolution.test.ts --bail",
34
+ "typecheck": "tsc --noEmit",
35
+ "test": "bun test"
36
+ },
37
+ "keywords": [
38
+ "opencode",
39
+ "plugin",
40
+ "oracle",
41
+ "librarian",
42
+ "agents",
43
+ "ai",
44
+ "llm"
45
+ ],
46
+ "author": "YeonGyu-Kim",
47
+ "license": "SUL-1.0",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "git+https://github.com/code-yeongyu/oh-my-openagent.git"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/code-yeongyu/oh-my-openagent/issues"
54
+ },
55
+ "homepage": "https://github.com/code-yeongyu/oh-my-openagent#readme",
56
+ "dependencies": {
57
+ "@ast-grep/cli": "^0.41.1",
58
+ "@ast-grep/napi": "^0.41.1",
59
+ "@clack/prompts": "^0.11.0",
60
+ "@code-yeongyu/comment-checker": "^0.7.0",
61
+ "@modelcontextprotocol/sdk": "^1.25.2",
62
+ "@opencode-ai/plugin": "^1.2.24",
63
+ "@opencode-ai/sdk": "^1.2.24",
64
+ "commander": "^14.0.2",
65
+ "detect-libc": "^2.0.0",
66
+ "diff": "^8.0.3",
67
+ "js-yaml": "^4.1.1",
68
+ "jsonc-parser": "^3.3.1",
69
+ "picocolors": "^1.1.1",
70
+ "picomatch": "^4.0.2",
71
+ "vscode-jsonrpc": "^8.2.0",
72
+ "zod": "^4.1.8"
73
+ },
74
+ "devDependencies": {
75
+ "@types/js-yaml": "^4.0.9",
76
+ "@types/picomatch": "^3.0.2",
77
+ "bun-types": "1.3.10",
78
+ "typescript": "^5.7.3",
79
+ "@types/bun": "latest"
80
+ },
81
+ "optionalDependencies": {
82
+ "oh-my-opencode-darwin-arm64": "3.11.0",
83
+ "oh-my-opencode-darwin-x64": "3.11.0",
84
+ "oh-my-opencode-darwin-x64-baseline": "3.11.0",
85
+ "oh-my-opencode-linux-arm64": "3.11.0",
86
+ "oh-my-opencode-linux-arm64-musl": "3.11.0",
87
+ "oh-my-opencode-linux-x64": "3.11.0",
88
+ "oh-my-opencode-linux-x64-baseline": "3.11.0",
89
+ "oh-my-opencode-linux-x64-musl": "3.11.0",
90
+ "oh-my-opencode-linux-x64-musl-baseline": "3.11.0",
91
+ "oh-my-opencode-windows-x64": "3.11.0",
92
+ "oh-my-opencode-windows-x64-baseline": "3.11.0"
93
+ },
94
+ "overrides": {
95
+ "@opencode-ai/sdk": "^1.2.24"
96
+ },
97
+ "trustedDependencies": [
98
+ "@ast-grep/cli",
99
+ "@ast-grep/napi",
100
+ "@code-yeongyu/comment-checker"
101
+ ],
102
+ "private": false
103
+ }