@skj1724/oh-my-opencode 3.18.4 → 3.18.6

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
@@ -53770,7 +53770,7 @@ var {
53770
53770
  // package.json
53771
53771
  var package_default = {
53772
53772
  name: "@skj1724/oh-my-opencode",
53773
- version: "3.18.4",
53773
+ version: "3.18.6",
53774
53774
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
53775
53775
  main: "./dist/index.js",
53776
53776
  types: "dist/index.d.ts",
@@ -74094,8 +74094,7 @@ var BuiltinCommandNameSchema = exports_external.enum([
74094
74094
  "refactor",
74095
74095
  "start-work",
74096
74096
  "stop-continuation",
74097
- "remove-ai-slops",
74098
- "open-plan"
74097
+ "remove-ai-slops"
74099
74098
  ]);
74100
74099
  // src/config/schema/dynamic-context-pruning.ts
74101
74100
  var DynamicContextPruningConfigSchema = exports_external.object({
@@ -8,6 +8,5 @@ export declare const BuiltinCommandNameSchema: z.ZodEnum<{
8
8
  "start-work": "start-work";
9
9
  "stop-continuation": "stop-continuation";
10
10
  "remove-ai-slops": "remove-ai-slops";
11
- "open-plan": "open-plan";
12
11
  }>;
13
12
  export type BuiltinCommandName = z.infer<typeof BuiltinCommandNameSchema>;
@@ -25,7 +25,6 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
25
25
  "start-work": "start-work";
26
26
  "stop-continuation": "stop-continuation";
27
27
  "remove-ai-slops": "remove-ai-slops";
28
- "open-plan": "open-plan";
29
28
  }>>>;
30
29
  disabled_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
30
  mcp_env_allowlist: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1,6 +1,6 @@
1
- export declare const DIRECT_WORK_REMINDER: string;
2
- export declare const BOULDER_CONTINUATION_PROMPT: string;
1
+ export declare function getDirectWorkReminder(locale?: string): string;
2
+ export declare function getBoulderContinuationPrompt(locale?: string): string;
3
3
  export declare const VERIFICATION_REMINDER = "**THE SUBAGENT JUST CLAIMED THIS TASK IS DONE. THEY ARE PROBABLY LYING.**\n\nSubagents say \"done\" when code has errors, tests pass trivially, logic is wrong,\nor they quietly added features nobody asked for. This happens EVERY TIME.\nAssume the work is broken until YOU prove otherwise.\n\n---\n\n**PHASE 1: READ THE CODE FIRST (before running anything)**\n\nDo NOT run tests yet. Read the code FIRST so you know what you're testing.\n\n1. `Bash(\"git diff --stat -- ':!node_modules'\")` - see exactly which files changed. Any file outside expected scope = scope creep.\n2. `Read` EVERY changed file - no exceptions, no skimming.\n3. For EACH file, critically ask:\n - Does this code ACTUALLY do what the task required? (Re-read the task, compare line by line)\n - Any stubs, TODOs, placeholders, hardcoded values? (`Grep` for TODO, FIXME, HACK, xxx)\n - Logic errors? Trace the happy path AND the error path in your head.\n - Anti-patterns? (`Grep` for `as any`, `@ts-ignore`, empty catch, console.log in changed files)\n - Scope creep? Did the subagent touch things or add features NOT in the task spec?\n4. Cross-check every claim:\n - Said \"Updated X\" - READ X. Actually updated, or just superficially touched?\n - Said \"Added tests\" - READ the tests. Do they test REAL behavior or just `expect(true).toBe(true)`?\n - Said \"Follows patterns\" - OPEN a reference file. Does it ACTUALLY match?\n\n**If you cannot explain what every changed line does, you have NOT reviewed it.**\n\n**PHASE 2: RUN AUTOMATED CHECKS (targeted, then broad)**\n\nNow that you understand the code, verify mechanically:\n1. `lsp_diagnostics` on EACH changed file - ZERO new errors\n2. Run tests for changed modules FIRST, then full suite\n3. Build/typecheck - exit 0\n\nIf Phase 1 found issues but Phase 2 passes: Phase 2 is WRONG. The code has bugs that tests don't cover. Fix the code.\n\n**PHASE 3: HANDS-ON QA - ACTUALLY RUN IT (MANDATORY for user-facing changes)**\n\nTests and linters CANNOT catch: visual bugs, wrong CLI output, broken user flows, API response shape issues.\n\n**If this task produced anything a user would SEE or INTERACT with, you MUST launch it and verify yourself.**\n\n- **Frontend/UI**: `/playwright` skill - load the page, click through the flow, check console. Verify: page loads, interactions work, console clean, responsive.\n- **TUI/CLI**: `interactive_bash` - run the command, try good input, try bad input, try --help. Verify: command runs, output correct, error messages helpful, edge inputs handled.\n- **API/Backend**: `Bash` with curl - hit the endpoint, check response body, send malformed input. Verify: returns 200, body correct, error cases return proper errors.\n- **Config/Build**: Actually start the service or import the config. Verify: loads without error, backward compatible.\n\nThis is NOT optional \"if applicable\". If the deliverable is user-facing and you did not run it, you are shipping untested work.\n\n**PHASE 4: GATE DECISION - Should you proceed to the next task?**\n\nAnswer honestly:\n1. Can I explain what EVERY changed line does? (If no - back to Phase 1)\n2. Did I SEE it work with my own eyes? (If user-facing and no - back to Phase 3)\n3. Am I confident nothing existing is broken? (If no - run broader tests)\n\nALL three must be YES. \"Probably\" = NO. \"I think so\" = NO. Investigate until CERTAIN.\n\n- **All 3 YES** - Proceed: mark task complete, move to next.\n- **Any NO** - Reject: resume session with `session_id`, fix the specific issue.\n- **Unsure** - Reject: \"unsure\" = \"no\". Investigate until you have a definitive answer.\n\n**DO NOT proceed to the next task until all 4 phases are complete and the gate passes.**";
4
4
  export declare const VERIFICATION_REMINDER_GEMINI = "**THE SUBAGENT HAS FINISHED. THEIR WORK IS EXTREMELY SUSPICIOUS.**\n\nThe subagent CLAIMS this task is done. Based on thousands of executions, subagent claims are FALSE more often than true.\nThey ROUTINELY:\n- Ship code with syntax errors they didn't bother to check\n- Create stub implementations with TODOs and call it \"done\"\n- Write tests that pass trivially (testing nothing meaningful)\n- Implement logic that does NOT match what was requested\n- Add features nobody asked for and call it \"improvement\"\n- Report \"all tests pass\" when they didn't run any tests\n\n**This is NOT a theoretical warning. This WILL happen on this task. Assume the work is BROKEN.**\n\n**YOU MUST VERIFY WITH ACTUAL TOOL CALLS. NOT REASONING. TOOL CALLS.**\nThinking \"it looks correct\" is NOT verification. Running `lsp_diagnostics` IS.\n\n---\n\n**PHASE 1: READ THE CODE FIRST (DO NOT SKIP - DO NOT RUN TESTS YET)**\n\nRead the code FIRST so you know what you're testing.\n\n1. `Bash(\"git diff --stat -- ':!node_modules'\")` - see exactly which files changed.\n2. `Read` EVERY changed file - no exceptions, no skimming.\n3. For EACH file:\n - Does this code ACTUALLY do what the task required? RE-READ the task spec.\n - Any stubs, TODOs, placeholders? `Grep` for TODO, FIXME, HACK, xxx\n - Anti-patterns? `Grep` for `as any`, `@ts-ignore`, empty catch\n - Scope creep? Did the subagent add things NOT in the task spec?\n4. Cross-check EVERY claim against actual code.\n\n**If you cannot explain what every changed line does, GO BACK AND READ AGAIN.**\n\n**PHASE 2: RUN AUTOMATED CHECKS**\n\n1. `lsp_diagnostics` on EACH changed file - ZERO new errors. ACTUALLY RUN THIS.\n2. Run tests for changed modules, then full suite. ACTUALLY RUN THESE.\n3. Build/typecheck - exit 0.\n\nIf Phase 1 found issues but Phase 2 passes: Phase 2 is WRONG. Fix the code.\n\n**PHASE 3: HANDS-ON QA (MANDATORY for user-facing changes)**\n\n- **Frontend/UI**: `/playwright`\n- **TUI/CLI**: `interactive_bash`\n- **API/Backend**: `Bash` with curl\n\n**If user-facing and you did not run it, you are shipping UNTESTED BROKEN work.**\n\n**PHASE 4: GATE DECISION**\n\n1. Can I explain what EVERY changed line does? (If no \u2192 Phase 1)\n2. Did I SEE it work via tool calls? (If user-facing and no \u2192 Phase 3)\n3. Am I confident nothing is broken? (If no \u2192 broader tests)\n\nALL three must be YES. \"Probably\" = NO. \"I think so\" = NO.\n\n**DO NOT proceed to the next task until all 4 phases are complete.**";
5
- export declare const ORCHESTRATOR_DELEGATION_REQUIRED: string;
6
- export declare const SINGLE_TASK_DIRECTIVE: string;
5
+ export declare function getOrchestratorDelegationRequired(locale?: string): string;
6
+ export declare function getSingleTaskDirective(locale?: string): string;
@@ -1 +1 @@
1
- export declare const COMPACTION_CONTEXT_PROMPT: string;
1
+ export declare function getCompactionContextPrompt(locale?: string): string;
@@ -3,5 +3,5 @@ export declare const PROMETHEUS_AGENT = "prometheus";
3
3
  export declare const ALLOWED_EXTENSIONS: string[];
4
4
  export declare const ALLOWED_PATH_PREFIX = ".sisyphus";
5
5
  export declare const BLOCKED_TOOLS: string[];
6
- export declare const PLANNING_CONSULT_WARNING: string;
7
- export declare const PROMETHEUS_WORKFLOW_REMINDER: string;
6
+ export declare function getPlanningConsultWarning(locale?: string): string;
7
+ export declare function getPrometheusWorkflowReminder(locale?: string): string;
@@ -1,6 +1,6 @@
1
1
  export declare const HOOK_NAME = "todo-continuation-enforcer";
2
2
  export declare const DEFAULT_SKIP_AGENTS: string[];
3
- export declare const CONTINUATION_PROMPT: string;
3
+ export declare function getContinuationPrompt(locale?: string): string;
4
4
  export declare const COUNTDOWN_SECONDS = 2;
5
5
  export declare const TOAST_DURATION_MS = 900;
6
6
  export declare const COUNTDOWN_GRACE_PERIOD_MS = 500;
package/dist/index.js CHANGED
@@ -19170,7 +19170,22 @@ function shellEscapeForDoubleQuotedCommand(value) {
19170
19170
  // src/shared/system-directive.ts
19171
19171
  var SYSTEM_DIRECTIVE_PREFIX = "[SYSTEM DIRECTIVE: OH-MY-OPENCODE";
19172
19172
  var SYSTEM_DIRECTIVE_LEADING_KEYWORD_PATTERN = /^\s*(?:ultrawork|ulw)\s+/i;
19173
- function createSystemDirective(type2) {
19173
+ var localeMap = {
19174
+ "zh-CN": {
19175
+ "TODO CONTINUATION": "[\u7CFB\u7EDF\u6307\u4EE4: \u5F85\u529E\u5EF6\u7EED]",
19176
+ "RALPH LOOP": "[\u7CFB\u7EDF\u6307\u4EE4: Ralph \u5FAA\u73AF]",
19177
+ "BOULDER CONTINUATION": "[\u7CFB\u7EDF\u6307\u4EE4: \u5DE8\u77F3\u5EF6\u7EED]",
19178
+ DELEGATION_REQUIRED: "[\u7CFB\u7EDF\u6307\u4EE4: \u9700\u8981\u59D4\u6258]",
19179
+ SINGLE_TASK_ONLY: "[\u7CFB\u7EDF\u6307\u4EE4: \u5355\u4EFB\u52A1\u6A21\u5F0F]",
19180
+ COMPACTION_CONTEXT: "[\u7CFB\u7EDF\u6307\u4EE4: \u538B\u7F29\u4E0A\u4E0B\u6587]",
19181
+ "CONTEXT WINDOW MONITOR": "[\u7CFB\u7EDF\u6307\u4EE4: \u4E0A\u4E0B\u6587\u7A97\u53E3\u76D1\u63A7]",
19182
+ "PROMETHEUS READ-ONLY": "[\u7CFB\u7EDF\u6307\u4EE4: Prometheus \u53EA\u8BFB]"
19183
+ }
19184
+ };
19185
+ function createSystemDirective(type2, locale) {
19186
+ if (locale && localeMap[locale]?.[type2]) {
19187
+ return localeMap[locale][type2];
19188
+ }
19174
19189
  return `${SYSTEM_DIRECTIVE_PREFIX} - ${type2}]`;
19175
19190
  }
19176
19191
  function isSystemDirective(text) {
@@ -65761,14 +65776,26 @@ init_logger();
65761
65776
  // src/hooks/todo-continuation-enforcer/constants.ts
65762
65777
  var HOOK_NAME = "todo-continuation-enforcer";
65763
65778
  var DEFAULT_SKIP_AGENTS = ["prometheus", "compaction", "plan"];
65764
- var CONTINUATION_PROMPT = `${createSystemDirective(SystemDirectiveTypes.TODO_CONTINUATION)}
65779
+ var continuationPromptLocaleMap = {
65780
+ "zh-CN": `\u672A\u5B8C\u6210\u7684\u4EFB\u52A1\u4ECD\u4FDD\u7559\u5728\u60A8\u7684\u5F85\u529E\u5217\u8868\u4E2D\u3002\u7EE7\u7EED\u5904\u7406\u4E0B\u4E00\u4E2A\u5F85\u529E\u4EFB\u52A1\u3002
65765
65781
 
65766
- Incomplete tasks remain in your todo list. Continue working on the next pending task.
65782
+ - \u65E0\u9700\u8BF7\u6C42\u8BB8\u53EF\u5373\u53EF\u7EE7\u7EED
65783
+ - \u5B8C\u6210\u4EFB\u52A1\u540E\u6807\u8BB0\u4E3A\u5B8C\u6210
65784
+ - \u4E0D\u8981\u505C\u6B62\uFF0C\u76F4\u5230\u6240\u6709\u4EFB\u52A1\u5B8C\u6210
65785
+ - \u5982\u679C\u60A8\u8BA4\u4E3A\u6240\u6709\u5DE5\u4F5C\u5DF2\u7ECF\u5B8C\u6210\uFF0C\u7CFB\u7EDF\u4F1A\u5BF9\u60A8\u7684\u5B8C\u6210\u58F0\u660E\u63D0\u51FA\u8D28\u7591\u3002\u4ECE\u6000\u7591\u7684\u89D2\u5EA6\u91CD\u65B0\u5BA1\u89C6\u6BCF\u4E2A\u5F85\u529E\u4E8B\u9879\uFF0C\u9A8C\u8BC1\u5DE5\u4F5C\u662F\u5426\u786E\u5B9E\u6B63\u786E\u5B8C\u6210\uFF0C\u5E76\u76F8\u5E94\u66F4\u65B0\u5F85\u529E\u5217\u8868\u3002`
65786
+ };
65787
+ var continuationPromptFallback = `Incomplete tasks remain in your todo list. Continue working on the next pending task.
65767
65788
 
65768
65789
  - Proceed without asking for permission
65769
65790
  - Mark each task complete when finished
65770
65791
  - Do not stop until all tasks are done
65771
65792
  - If you believe all work is already complete, the system is questioning your completion claim. Critically re-examine each todo item from a skeptical perspective, verify the work was actually done correctly, and update the todo list accordingly.`;
65793
+ function getContinuationPrompt(locale) {
65794
+ const localizedPrompt = locale && continuationPromptLocaleMap[locale];
65795
+ return `${createSystemDirective(SystemDirectiveTypes.TODO_CONTINUATION, locale)}
65796
+
65797
+ ${localizedPrompt ?? continuationPromptFallback}`;
65798
+ }
65772
65799
  var COUNTDOWN_SECONDS = 2;
65773
65800
  var TOAST_DURATION_MS = 900;
65774
65801
  var COUNTDOWN_GRACE_PERIOD_MS = 500;
@@ -66294,7 +66321,7 @@ async function injectContinuation(args) {
66294
66321
  const incompleteTodos = todos.filter((todo) => todo.status !== "completed" && todo.status !== "cancelled");
66295
66322
  const todoList = incompleteTodos.map((todo) => `- [${todo.status}] ${todo.content}`).join(`
66296
66323
  `);
66297
- const prompt = `${CONTINUATION_PROMPT}
66324
+ const prompt = `${getContinuationPrompt()}
66298
66325
 
66299
66326
  [Status: ${todos.length - freshIncompleteCount}/${todos.length} completed, ${freshIncompleteCount} remaining]
66300
66327
 
@@ -66976,13 +67003,20 @@ function createTodoContinuationEnforcer(ctx, options = {}) {
66976
67003
  }
66977
67004
  // src/hooks/context-window-monitor.ts
66978
67005
  var CONTEXT_WARNING_THRESHOLD = 0.7;
66979
- function createContextReminder(actualLimit) {
67006
+ var contextReminderLocaleMap = {
67007
+ "zh-CN": (limitTokens) => `\u60A8\u6B63\u5728\u4F7F\u7528 ${limitTokens}-token \u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u3002
67008
+ \u60A8\u4ECD\u6709\u5269\u4F59\u4E0A\u4E0B\u6587 - \u4E0D\u8981\u6025\u4E8E\u6216\u8DF3\u8FC7\u4EFB\u52A1\u3002
67009
+ \u5F7B\u5E95\u4E14\u6709\u6761\u4E0D\u7D0A\u5730\u5B8C\u6210\u60A8\u7684\u5DE5\u4F5C\u3002`
67010
+ };
67011
+ function createContextReminder(actualLimit, locale) {
66980
67012
  const limitTokens = actualLimit.toLocaleString();
66981
- return `${createSystemDirective(SystemDirectiveTypes.CONTEXT_WINDOW_MONITOR)}
66982
-
66983
- You are using a ${limitTokens}-token context window.
67013
+ const localizedReminder = locale && contextReminderLocaleMap[locale];
67014
+ const reminderText = localizedReminder ? localizedReminder(limitTokens) : `You are using a ${limitTokens}-token context window.
66984
67015
  You still have context remaining - do NOT rush or skip tasks.
66985
67016
  Complete your work thoroughly and methodically.`;
67017
+ return `${createSystemDirective(SystemDirectiveTypes.CONTEXT_WINDOW_MONITOR, locale)}
67018
+
67019
+ ${reminderText}`;
66986
67020
  }
66987
67021
  function createContextWindowMonitorHook(_ctx, modelCacheState) {
66988
67022
  const remindedSessions = new Set;
@@ -76927,7 +76961,7 @@ init_logger();
76927
76961
  function getMaxIterationsLabel(state3) {
76928
76962
  return typeof state3.max_iterations === "number" ? String(state3.max_iterations) : "unbounded";
76929
76963
  }
76930
- var CONTINUATION_PROMPT2 = `${SYSTEM_DIRECTIVE_PREFIX} - RALPH LOOP {{ITERATION}}/{{MAX}}]
76964
+ var CONTINUATION_PROMPT = `${SYSTEM_DIRECTIVE_PREFIX} - RALPH LOOP {{ITERATION}}/{{MAX}}]
76931
76965
 
76932
76966
  Your previous attempt did not output the completion promise. Continue working on the task.
76933
76967
 
@@ -76968,7 +77002,7 @@ REQUIRED NOW:
76968
77002
  Original task:
76969
77003
  {{PROMPT}}`;
76970
77004
  function buildContinuationPrompt(state3) {
76971
- const template = state3.verification_pending ? ULTRAWORK_VERIFICATION_PROMPT : CONTINUATION_PROMPT2;
77005
+ const template = state3.verification_pending ? ULTRAWORK_VERIFICATION_PROMPT : CONTINUATION_PROMPT;
76972
77006
  const continuationPrompt = template.replace("{{ITERATION}}", String(state3.iteration)).replace("{{MAX}}", getMaxIterationsLabel(state3)).replace("{{INITIAL_PROMISE}}", state3.initial_completion_promise ?? state3.completion_promise).replace("{{PROMISE}}", state3.completion_promise).replace("{{PROMPT}}", state3.prompt);
76973
77007
  return state3.ultrawork ? `ultrawork ${continuationPrompt}` : continuationPrompt;
76974
77008
  }
@@ -81749,8 +81783,7 @@ var BuiltinCommandNameSchema = z12.enum([
81749
81783
  "refactor",
81750
81784
  "start-work",
81751
81785
  "stop-continuation",
81752
- "remove-ai-slops",
81753
- "open-plan"
81786
+ "remove-ai-slops"
81754
81787
  ]);
81755
81788
  // src/config/schema/dynamic-context-pruning.ts
81756
81789
  import { z as z13 } from "zod";
@@ -84450,13 +84483,63 @@ var HOOK_NAME4 = "prometheus-md-only";
84450
84483
  var PROMETHEUS_AGENT = "prometheus";
84451
84484
  var ALLOWED_EXTENSIONS = [".md"];
84452
84485
  var BLOCKED_TOOLS = ["Write", "Edit", "write", "edit"];
84453
- var PLANNING_CONSULT_WARNING = `
84486
+ var planningConsultWarningLocaleMap = {
84487
+ "zh-CN": `\u60A8\u6B63\u5728\u88AB ${getAgentDisplayName("prometheus")} \u8C03\u7528\uFF0C\u8FD9\u662F\u4E00\u4E2A\u4EC5\u9650\u4E8E .sisyphus/*.md \u8BA1\u5212\u6587\u4EF6\u7684\u89C4\u5212\u4EE3\u7406\u3002
84488
+
84489
+ **\u5173\u952E\u7EA6\u675F\uFF1A**
84490
+ - \u4E0D\u8981\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\uFF08\u4E0D\u8981 Write\u3001Edit \u6216\u4EFB\u4F55\u6587\u4EF6\u53D8\u66F4\uFF09
84491
+ - \u4E0D\u8981\u6267\u884C\u6539\u53D8\u7CFB\u7EDF\u72B6\u6001\u7684\u547D\u4EE4
84492
+ - \u4E0D\u8981\u521B\u5EFA\u3001\u5220\u9664\u6216\u91CD\u547D\u540D\u6587\u4EF6
84493
+ - \u4EC5\u63D0\u4F9B\u5206\u6790\u3001\u5EFA\u8BAE\u548C\u4FE1\u606F
84494
+
84495
+ **\u60A8\u7684\u89D2\u8272**\uFF1A\u63D0\u4F9B\u54A8\u8BE2\u3001\u7814\u7A76\u548C\u5206\u6790\u4EE5\u534F\u52A9\u89C4\u5212\u3002
84496
+ \u8FD4\u56DE\u60A8\u7684\u53D1\u73B0\u548C\u5EFA\u8BAE\u3002\u5B9E\u9645\u5B9E\u65BD\u5C06\u5728\u89C4\u5212\u5B8C\u6210\u540E\u5355\u72EC\u5904\u7406\u3002`
84497
+ };
84498
+ var prometheusWorkflowReminderLocaleMap = {
84499
+ "zh-CN": `## PROMETHEUS \u5F3A\u5236\u5DE5\u4F5C\u6D41\u7A0B\u63D0\u9192
84500
+
84501
+ **\u60A8\u6B63\u5728\u7F16\u5199\u5DE5\u4F5C\u8BA1\u5212\u3002\u505C\u6B62\u5E76\u9A8C\u8BC1\u60A8\u5B8C\u6210\u4E86\u6240\u6709\u6B65\u9AA4\uFF1A**
84502
+
84503
+ \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
84504
+ \u2502 PROMETHEUS \u5DE5\u4F5C\u6D41\u7A0B \u2502
84505
+ \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
84506
+ \u2502 1 \u2502 \u8BBF\u8C08\uFF1A\u4E0E\u7528\u6237\u5168\u9762\u534F\u5546 \u2502
84507
+ \u2502 \u2502 - \u6536\u96C6\u6240\u6709\u9700\u6C42 \u2502
84508
+ \u2502 \u2502 - \u6F84\u6E05\u6A21\u7CCA\u4E4B\u5904 \u2502
84509
+ \u2502 \u2502 - \u5C06\u51B3\u7B56\u8BB0\u5F55\u5230 .sisyphus/drafts/ \u2502
84510
+ \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
84511
+ \u2502 2 \u2502 METIS \u54A8\u8BE2\uFF1A\u9884\u751F\u6210\u5DEE\u8DDD\u5206\u6790 \u2502
84512
+ \u2502 \u2502 - task(agent="Metis - \u8BA1\u5212\u987E\u95EE", ...) \u2502
84513
+ \u2502 \u2502 - \u8BC6\u522B\u9057\u6F0F\u7684\u95EE\u9898\u3001\u62A4\u680F\u3001\u5047\u8BBE \u2502
84514
+ \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
84515
+ \u2502 3 \u2502 \u8BA1\u5212\u751F\u6210\uFF1A\u5199\u5165 .sisyphus/plans/*.md \u2502
84516
+ \u2502 \u2502 <- \u60A8\u5728\u8FD9\u91CC \u2502
84517
+ \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
84518
+ \u2502 4 \u2502 MOMUS \u8BC4\u5BA1\uFF08\u5982\u8BF7\u6C42\u9AD8\u7CBE\u5EA6\uFF09 \u2502
84519
+ \u2502 \u2502 - task(agent="Momus - \u8BA1\u5212\u8BC4\u8BBA\u5458", ...) \u2502
84520
+ \u2502 \u2502 - \u5FAA\u73AF\u76F4\u5230\u83B7\u5F97 OKAY \u88C1\u51B3 \u2502
84521
+ \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
84522
+ \u2502 5 \u2502 \u603B\u7ED3\uFF1A\u5448\u73B0\u7ED9\u7528\u6237 \u2502
84523
+ \u2502 \u2502 - \u505A\u51FA\u7684\u5173\u952E\u51B3\u7B56 \u2502
84524
+ \u2502 \u2502 - \u8303\u56F4 \u5185/\u5916 \u2502
84525
+ \u2502 \u2502 - \u63D0\u4F9B\uFF1A"\u5F00\u59CB\u5DE5\u4F5C" vs "\u9AD8\u7CBE\u5EA6\u8BC4\u5BA1" \u2502
84526
+ \u2502 \u2502 - \u5F15\u5BFC\u81F3 /start-work \u2502
84527
+ \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
84528
+
84529
+ **\u60A8\u5728\u7F16\u5199\u6B64\u8BA1\u5212\u4E4B\u524D\u662F\u5426\u5B8C\u6210\u4E86\u6B65\u9AA4 1-2\uFF1F**
84530
+ **\u7F16\u5199\u4E4B\u540E\uFF0C\u60A8\u4F1A\u6267\u884C\u6B65\u9AA4 4-5 \u5417\uFF1F**
84531
+
84532
+ \u5982\u679C\u60A8\u8DF3\u8FC7\u4E86\u6B65\u9AA4\uFF0C\u73B0\u5728\u505C\u6B62\u3002\u56DE\u53BB\u5B8C\u6210\u5B83\u4EEC\u3002`
84533
+ };
84534
+ function getPlanningConsultWarning(locale) {
84535
+ const localizedWarning = locale && planningConsultWarningLocaleMap[locale];
84536
+ return `
84454
84537
 
84455
84538
  ---
84456
84539
 
84457
- ${createSystemDirective(SystemDirectiveTypes.PROMETHEUS_READ_ONLY)}
84540
+ ${createSystemDirective(SystemDirectiveTypes.PROMETHEUS_READ_ONLY, locale)}
84458
84541
 
84459
- You are being invoked by ${getAgentDisplayName("prometheus")}, a planning agent restricted to .sisyphus/*.md plan files only.
84542
+ ${localizedWarning ?? `You are being invoked by ${getAgentDisplayName("prometheus")}, a planning agent restricted to .sisyphus/*.md plan files only.
84460
84543
 
84461
84544
  **CRITICAL CONSTRAINTS:**
84462
84545
  - DO NOT modify any files (no Write, Edit, or any file mutations)
@@ -84465,28 +84548,31 @@ You are being invoked by ${getAgentDisplayName("prometheus")}, a planning agent
84465
84548
  - ONLY provide analysis, recommendations, and information
84466
84549
 
84467
84550
  **YOUR ROLE**: Provide consultation, research, and analysis to assist with planning.
84468
- Return your findings and recommendations. The actual implementation will be handled separately after planning is complete.
84551
+ Return your findings and recommendations. The actual implementation will be handled separately after planning is complete.`}
84469
84552
 
84470
84553
  ---
84471
84554
 
84472
84555
  `;
84473
- var PROMETHEUS_WORKFLOW_REMINDER = `
84556
+ }
84557
+ function getPrometheusWorkflowReminder(locale) {
84558
+ const localizedReminder = locale && prometheusWorkflowReminderLocaleMap[locale];
84559
+ return `
84474
84560
 
84475
84561
  ---
84476
84562
 
84477
- ${createSystemDirective(SystemDirectiveTypes.PROMETHEUS_READ_ONLY)}
84563
+ ${createSystemDirective(SystemDirectiveTypes.PROMETHEUS_READ_ONLY, locale)}
84478
84564
 
84479
- ## PROMETHEUS MANDATORY WORKFLOW REMINDER
84565
+ ${localizedReminder ?? `## PROMETHEUS MANDATORY WORKFLOW REMINDER
84480
84566
 
84481
84567
  **You are writing a work plan. STOP AND VERIFY you completed ALL steps:**
84482
84568
 
84483
84569
  \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
84484
84570
  \u2502 PROMETHEUS WORKFLOW \u2502
84485
84571
  \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
84486
- \u2502 1 \u2502 INTERVIEW: Full consultation with user \u2502
84572
+ \u2502 1 \u2502 INTERVIEW: Full consultation with user \u2502
84487
84573
  \u2502 \u2502 - Gather ALL requirements \u2502
84488
84574
  \u2502 \u2502 - Clarify ambiguities \u2502
84489
- \u2502 \u2502 - Record decisions to .sisyphus/drafts/ \u2502
84575
+ \u2502 \u2502 - Record decisions to .sisyphus/drafts/ \u2502
84490
84576
  \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
84491
84577
  \u2502 2 \u2502 METIS CONSULTATION: Pre-generation gap analysis \u2502
84492
84578
  \u2502 \u2502 - task(agent="Metis - Plan Consultant", ...) \u2502
@@ -84501,7 +84587,7 @@ ${createSystemDirective(SystemDirectiveTypes.PROMETHEUS_READ_ONLY)}
84501
84587
  \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
84502
84588
  \u2502 5 \u2502 SUMMARY: Present to user \u2502
84503
84589
  \u2502 \u2502 - Key decisions made \u2502
84504
- \u2502 \u2502 - Scope IN/OUT \u2502
84590
+ \u2502 \u2502 - Scope IN/OUT \u2502
84505
84591
  \u2502 \u2502 - Offer: "Start Work" vs "High Accuracy Review" \u2502
84506
84592
  \u2502 \u2502 - Guide to /start-work \u2502
84507
84593
  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
@@ -84509,11 +84595,12 @@ ${createSystemDirective(SystemDirectiveTypes.PROMETHEUS_READ_ONLY)}
84509
84595
  **DID YOU COMPLETE STEPS 1-2 BEFORE WRITING THIS PLAN?**
84510
84596
  **AFTER WRITING, WILL YOU DO STEPS 4-5?**
84511
84597
 
84512
- If you skipped steps, STOP NOW. Go back and complete them.
84598
+ If you skipped steps, STOP NOW. Go back and complete them.`}
84513
84599
 
84514
84600
  ---
84515
84601
 
84516
84602
  `;
84603
+ }
84517
84604
  // src/hooks/prometheus-md-only/hook.ts
84518
84605
  init_logger();
84519
84606
  // src/features/boulder-state/constants.ts
@@ -84877,7 +84964,7 @@ function createPrometheusMdOnlyHook(ctx) {
84877
84964
  if (TASK_TOOLS.includes(toolName)) {
84878
84965
  const prompt = output.args.prompt;
84879
84966
  if (prompt && !prompt.includes(SYSTEM_DIRECTIVE_PREFIX)) {
84880
- output.args.prompt = PLANNING_CONSULT_WARNING + prompt;
84967
+ output.args.prompt = getPlanningConsultWarning() + prompt;
84881
84968
  log(`[${HOOK_NAME4}] Injected planning warning to ${toolName}`, {
84882
84969
  sessionID: input.sessionID,
84883
84970
  tool: toolName,
@@ -84910,7 +84997,7 @@ function createPrometheusMdOnlyHook(ctx) {
84910
84997
  filePath,
84911
84998
  agent: agentName
84912
84999
  });
84913
- output.message = (output.message || "") + PROMETHEUS_WORKFLOW_REMINDER;
85000
+ output.message = (output.message || "") + getPrometheusWorkflowReminder();
84914
85001
  }
84915
85002
  log(`[${HOOK_NAME4}] Allowed: .sisyphus/*.md write permitted`, {
84916
85003
  sessionID: input.sessionID,
@@ -85489,13 +85576,45 @@ init_logger();
85489
85576
  init_logger();
85490
85577
 
85491
85578
  // src/hooks/atlas/system-reminder-templates.ts
85492
- var DIRECT_WORK_REMINDER = `
85579
+ var directWorkReminderLocaleMap = {
85580
+ "zh-CN": `\u60A8\u521A\u521A\u5728 \`.sisyphus/\` \u5916\u90E8\u6267\u884C\u4E86\u76F4\u63A5\u6587\u4EF6\u4FEE\u6539\u3002
85581
+
85582
+ **\u60A8\u662F\u534F\u8C03\u8005\uFF0C\u4E0D\u662F\u5B9E\u73B0\u8005\u3002**
85583
+
85584
+ \u4F5C\u4E3A\u534F\u8C03\u8005\uFF0C\u60A8\u5E94\u8BE5\uFF1A
85585
+ - \u901A\u8FC7 \`task\` \u5C06\u5B9E\u65BD\u5DE5\u4F5C\u59D4\u6258\u7ED9\u5B50\u4EE3\u7406
85586
+ - \u9A8C\u8BC1\u5B50\u4EE3\u7406\u5B8C\u6210\u7684\u5DE5\u4F5C
85587
+ - \u534F\u8C03\u591A\u4E2A\u4EFB\u52A1\u5E76\u786E\u4FDD\u5B8C\u6210
85588
+
85589
+ \u60A8\u4E0D\u5E94\u8BE5\uFF1A
85590
+ - \u76F4\u63A5\u7F16\u5199\u4EE3\u7801\uFF08\`.sisyphus/\` \u6587\u4EF6\u5982\u8BA1\u5212\u548C\u5927\u7EB2\u9664\u5916\uFF09
85591
+ - \u5728 \`.sisyphus/\` \u5916\u90E8\u8FDB\u884C\u76F4\u63A5\u6587\u4EF6\u7F16\u8F91
85592
+ - \u81EA\u5DF1\u5B9E\u73B0\u529F\u80FD
85593
+
85594
+ **\u5982\u679C\u60A8\u9700\u8981\u8FDB\u884C\u66F4\u6539\uFF1A**
85595
+ 1. \u4F7F\u7528 \`task\` \u59D4\u6258\u7ED9\u9002\u5F53\u7684\u5B50\u4EE3\u7406
85596
+ 2. \u5728\u63D0\u793A\u4E2D\u63D0\u4F9B\u6E05\u6670\u7684\u8BF4\u660E
85597
+ 3. \u5B8C\u6210\u540E\u9A8C\u8BC1\u5B50\u4EE3\u7406\u7684\u5DE5\u4F5C`
85598
+ };
85599
+ var boulderContinuationPromptLocaleMap = {
85600
+ "zh-CN": `\u60A8\u6709\u4E00\u4E2A\u5305\u542B\u672A\u5B8C\u6210\u4EFB\u52A1\u7684 active \u5DE5\u4F5C\u8BA1\u5212\u3002\u7EE7\u7EED\u5DE5\u4F5C\u3002
85601
+
85602
+ \u89C4\u5219\uFF1A
85603
+ - **\u9996\u5148**\uFF1A\u7ACB\u5373\u9605\u8BFB\u8BA1\u5212\u6587\u4EF6\u3002\u5982\u679C\u6700\u540E\u4E00\u4E2A\u5DF2\u5B8C\u6210\u7684\u4EFB\u52A1\u4ECD\u672A\u52FE\u9009\uFF0C\u5728\u6267\u884C\u4EFB\u4F55\u5176\u4ED6\u64CD\u4F5C\u4E4B\u524D\u7ACB\u5373\u5C06\u5176\u6807\u8BB0\u4E3A \`- [x]\`
85604
+ - \u65E0\u9700\u8BF7\u6C42\u8BB8\u53EF\u5373\u53EF\u7EE7\u7EED
85605
+ - \u4F7F\u7528 .sisyphus/notepads/{PLAN_NAME}/ \u4E2D\u7684\u5927\u7EB2\u8BB0\u5F55\u5B66\u4E60\u5185\u5BB9
85606
+ - \u4E0D\u8981\u505C\u6B62\uFF0C\u76F4\u5230\u6240\u6709\u4EFB\u52A1\u5B8C\u6210
85607
+ - \u5982\u679C\u88AB\u963B\u6B62\uFF0C\u8BB0\u5F55\u963B\u788D\u56E0\u7D20\u5E76\u8F6C\u5230\u4E0B\u4E00\u4E2A\u4EFB\u52A1`
85608
+ };
85609
+ function getDirectWorkReminder(locale) {
85610
+ const localizedReminder = locale && directWorkReminderLocaleMap[locale];
85611
+ return `
85493
85612
 
85494
85613
  ---
85495
85614
 
85496
- ${createSystemDirective(SystemDirectiveTypes.DELEGATION_REQUIRED)}
85615
+ ${createSystemDirective(SystemDirectiveTypes.DELEGATION_REQUIRED, locale)}
85497
85616
 
85498
- You just performed direct file modifications outside \`.sisyphus/\`.
85617
+ ${localizedReminder ?? `You just performed direct file modifications outside \`.sisyphus/\`.
85499
85618
 
85500
85619
  **You are an ORCHESTRATOR, not an IMPLEMENTER.**
85501
85620
 
@@ -85512,20 +85631,24 @@ You should NOT:
85512
85631
  **If you need to make changes:**
85513
85632
  1. Use \`task\` to delegate to an appropriate subagent
85514
85633
  2. Provide clear instructions in the prompt
85515
- 3. Verify the subagent's work after completion
85634
+ 3. Verify the subagent's work after completion`}
85516
85635
 
85517
85636
  ---
85518
85637
  `;
85519
- var BOULDER_CONTINUATION_PROMPT = `${createSystemDirective(SystemDirectiveTypes.BOULDER_CONTINUATION)}
85638
+ }
85639
+ function getBoulderContinuationPrompt(locale) {
85640
+ const localizedPrompt = locale && boulderContinuationPromptLocaleMap[locale];
85641
+ return `${createSystemDirective(SystemDirectiveTypes.BOULDER_CONTINUATION, locale)}
85520
85642
 
85521
- You have an active work plan with incomplete tasks. Continue working.
85643
+ ${localizedPrompt ?? `You have an active work plan with incomplete tasks. Continue working.
85522
85644
 
85523
85645
  RULES:
85524
85646
  - **FIRST**: Read the plan file NOW. If the last completed task is still unchecked, mark it \`- [x]\` IMMEDIATELY before anything else
85525
85647
  - Proceed without asking for permission
85526
85648
  - Use the notepad at .sisyphus/notepads/{PLAN_NAME}/ to record learnings
85527
85649
  - Do not stop until all tasks are complete
85528
- - If blocked, document the blocker and move to the next task`;
85650
+ - If blocked, document the blocker and move to the next task`}`;
85651
+ }
85529
85652
  var VERIFICATION_REMINDER = `**THE SUBAGENT JUST CLAIMED THIS TASK IS DONE. THEY ARE PROBABLY LYING.**
85530
85653
 
85531
85654
  Subagents say "done" when code has errors, tests pass trivially, logic is wrong,
@@ -85589,19 +85712,95 @@ ALL three must be YES. "Probably" = NO. "I think so" = NO. Investigate until CER
85589
85712
  - **Unsure** - Reject: "unsure" = "no". Investigate until you have a definitive answer.
85590
85713
 
85591
85714
  **DO NOT proceed to the next task until all 4 phases are complete and the gate passes.**`;
85592
- var ORCHESTRATOR_DELEGATION_REQUIRED = `
85715
+ var orchestratorDelegationRequiredLocaleMap = {
85716
+ "zh-CN": `**\u505C\u6B62\u3002\u60A8\u8FDD\u53CD\u4E86\u534F\u8C03\u8005\u534F\u8BAE\u3002**
85717
+
85718
+ \u60A8\uFF08Atlas\uFF09\u8BD5\u56FE\u76F4\u63A5\u4FEE\u6539 \`.sisyphus/\` \u5916\u90E8\u7684\u6587\u4EF6\u3002
85719
+
85720
+ **\u5C1D\u8BD5\u7684\u8DEF\u5F84\uFF1A** $FILE_PATH
85721
+
85722
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
85723
+
85724
+ **\u8FD9\u662F\u7981\u6B62\u7684**\uFF08\u9A8C\u8BC1\u76EE\u7684\u9664\u5916\uFF09
85725
+
85726
+ \u4F5C\u4E3A\u534F\u8C03\u8005\uFF0C\u60A8\u5FC5\u987B\uFF1A
85727
+ 1. \u901A\u8FC7 \`task\` \u59D4\u6258\u6240\u6709\u5B9E\u65BD\u5DE5\u4F5C
85728
+ 2. \u9A8C\u8BC1\u5B50\u4EE3\u7406\u5B8C\u6210\u7684\u5DE5\u4F5C\uFF08\u9605\u8BFB\u6587\u4EF6\u662F\u53EF\u4EE5\u7684\uFF09
85729
+ 3. \u534F\u8C03 - \u60A8\u534F\u8C03\uFF0C\u800C\u4E0D\u662F\u5B9E\u73B0
85730
+
85731
+ **\u5141\u8BB8\u7684\u76F4\u63A5\u6587\u4EF6\u64CD\u4F5C\uFF1A**
85732
+ - \`.sisyphus/\` \u5185\u7684\u6587\u4EF6\uFF08\u8BA1\u5212\u3001\u5927\u7EB2\u3001\u8349\u7A3F\uFF09
85733
+ - \u4E3A\u9A8C\u8BC1\u800C\u9605\u8BFB\u6587\u4EF6
85734
+ - \u8FD0\u884C\u8BCA\u65AD/\u6D4B\u8BD5
85735
+
85736
+ **\u7981\u6B62\u7684\u76F4\u63A5\u6587\u4EF6\u64CD\u4F5C\uFF1A**
85737
+ - \u7F16\u5199/\u7F16\u8F91\u6E90\u4EE3\u7801
85738
+ - \u5728 \`.sisyphus/\` \u5916\u90E8\u521B\u5EFA\u65B0\u6587\u4EF6
85739
+ - \u4EFB\u4F55\u5B9E\u65BD\u5DE5\u4F5C
85740
+
85741
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
85742
+
85743
+ **\u5982\u679C\u8FD9\u662F\u4E3A\u4E86\u9A8C\u8BC1\uFF1A**
85744
+ \u5982\u679C\u4F60\u662F\u901A\u8FC7\u8FDB\u884C\u5C0F\u7684\u4FEE\u590D\u6765\u9A8C\u8BC1\u5B50\u4EE3\u7406\u7684\u5DE5\u4F5C\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u3002
85745
+ \u4F46\u5BF9\u4E8E\u4EFB\u4F55\u91CD\u5927\u66F4\u6539\uFF0C\u8BF7\u4F7F\u7528 \`task\`\u3002
85746
+
85747
+ **\u6B63\u786E\u7684\u65B9\u6CD5\uFF1A**
85748
+ \`\`\`
85749
+ task(
85750
+ category="...",
85751
+ load_skills=[],
85752
+ prompt="[\u5177\u6709\u660E\u786E\u9A8C\u6536\u6807\u51C6\u7684\u7279\u5B9A\u5355\u4E00\u4EFB\u52A1]"
85753
+ )
85754
+ \`\`\`
85755
+
85756
+ \u59D4\u6258\u3002\u4E0D\u8981\u5B9E\u73B0\u3002`
85757
+ };
85758
+ var singleTaskDirectiveLocaleMap = {
85759
+ "zh-CN": `**\u505C\u6B62\u3002\u5728\u7EE7\u7EED\u4E4B\u524D\u9605\u8BFB\u672C\u6587\u3002**
85760
+
85761
+ \u5982\u679C\u60A8\u88AB\u7ED9\u4E88\u4E86**\u591A\u4E2A\u771F\u6B63\u72EC\u7ACB\u7684\u76EE\u6807**\uFF08\u4E0D\u76F8\u5173\u7684\u4EFB\u52A1\u3001\u5E76\u884C\u5DE5\u4F5C\u6D41\u3001\u72EC\u7ACB\u7684\u529F\u80FD\uFF09\uFF0C\u60A8\u5FC5\u987B\uFF1A
85762
+ 1. **\u7ACB\u5373\u62D2\u7EDD**\u6B64\u8BF7\u6C42
85763
+ 2. **\u8981\u6C42**\u534F\u8C03\u8005\u63D0\u4F9B\u5355\u4E00\u76EE\u6807
85764
+
85765
+ **\u4EC0\u4E48\u7B97\u4F5C\u591A\u4E2A\u72EC\u7ACB\u4EFB\u52A1\uFF08\u62D2\u7EDD\uFF09\uFF1A**
85766
+ - "\u5B9E\u73B0\u529F\u80FD A\u3002\u540C\u65F6\uFF0C\u6DFB\u52A0\u529F\u80FD B\u3002"
85767
+ - "\u4FEE\u590D bug X\u3002\u7136\u540E\u91CD\u6784\u6A21\u5757 Y\u3002\u540C\u65F6\u66F4\u65B0\u6587\u6863\u3002"
85768
+ - \u6346\u7ED1\u5728\u4E00\u4E2A\u8BF7\u6C42\u4E2D\u7684\u591A\u4E2A\u4E0D\u76F8\u5173\u66F4\u6539
85769
+
85770
+ **\u4EC0\u4E48\u662F\u5177\u6709\u987A\u5E8F\u6B65\u9AA4\u7684\u5355\u4E00\u4EFB\u52A1\uFF08\u7EE7\u7EED\uFF09\uFF1A**
85771
+ - \u5206\u89E3\u4E3A\u7F16\u53F7\u6B65\u9AA4\u7684\u5355\u4E00\u76EE\u6807\uFF08\u4F8B\u5982\uFF0C"\u5B9E\u73B0 X\uFF1A1. \u67E5\u627E\u6587\u4EF6\uFF0C2. \u6DFB\u52A0\u903B\u8F91\uFF0C3. \u7F16\u5199\u6D4B\u8BD5"\uFF09
85772
+ - \u591A\u6B65\u9AA4\u4E0A\u4E0B\u6587\uFF0C\u5176\u4E2D\u6240\u6709\u6B65\u9AA4\u670D\u52A1\u4E8E\u4E00\u4E2A\u76EE\u6807
85773
+ - \u534F\u8C03\u8005\u63D0\u4F9B\u7684\u5355\u4E00\u4EA4\u4ED8\u7269\u65B9\u6CD5\u8BF4\u660E
85774
+
85775
+ **\u5982\u679C\u68C0\u6D4B\u5230\u771F\u6B63\u72EC\u7ACB\u7684\u4EFB\u52A1\uFF0C\u60A8\u7684\u56DE\u5E94\uFF1A**
85776
+ > "\u6211\u62D2\u7EDD\u7EE7\u7EED\u3002\u60A8\u63D0\u4F9B\u4E86\u591A\u4E2A\u72EC\u7ACB\u7684\u4EFB\u52A1\u3002\u6BCF\u4E2A\u4EFB\u52A1\u90FD\u9700\u8981\u5168\u795E\u8D2F\u6CE8\u3002
85777
+ >
85778
+ > \u4EC5\u63D0\u4F9B\u4E00\u4E2A\u76EE\u6807\u3002\u4E00\u4E2A\u53EF\u4EA4\u4ED8\u6210\u679C\u3002\u4E00\u4E2A\u660E\u786E\u7684\u7ED3\u679C\u3002
85779
+ >
85780
+ > \u6346\u7ED1\u4E0D\u76F8\u5173\u7684\u4EFB\u52A1\u4F1A\u5BFC\u81F4\uFF1A\u5DE5\u4F5C\u4E0D\u5B8C\u6574\u3001\u9057\u6F0F\u8FB9\u7F18\u60C5\u51B5\u3001\u6D4B\u8BD5\u4E2D\u65AD\u3001\u6D6A\u8D39\u4E0A\u4E0B\u6587\u3002"
85781
+
85782
+ **\u7ED9\u534F\u8C03\u8005\u7684\u8B66\u544A\uFF1A**
85783
+ - \u6346\u7ED1\u4E0D\u76F8\u5173\u7684\u4EFB\u52A1\u4F1A\u6BC1\u6389\u53EF\u4EA4\u4ED8\u6210\u679C
85784
+ - \u6BCF\u4E2A\u72EC\u7ACB\u76EE\u6807\u90FD\u9700\u8981\u5168\u795E\u8D2F\u6CE8\u548C\u9002\u5F53\u7684\u9A8C\u8BC1
85785
+ - \u5355\u72EC\u59D4\u6258\u4E0D\u540C\u5173\u6CE8\u70B9 = \u5DE5\u4F5C\u8349\u7387 = \u8FD4\u5DE5 = \u6D6A\u8D39 tokens
85786
+
85787
+ **\u62D2\u7EDD\u771F\u6B63\u591A\u4EFB\u52A1\u7684\u8BF7\u6C42\u3002\u5141\u8BB8\u5355\u4E00\u76EE\u6807\u591A\u6B65\u9AA4\u5DE5\u4F5C\u6D41\u3002**`
85788
+ };
85789
+ function getOrchestratorDelegationRequired(locale) {
85790
+ const localizedPrompt = locale && orchestratorDelegationRequiredLocaleMap[locale];
85791
+ return `
85593
85792
 
85594
85793
  ---
85595
85794
 
85596
- ${createSystemDirective(SystemDirectiveTypes.DELEGATION_REQUIRED)}
85795
+ ${createSystemDirective(SystemDirectiveTypes.DELEGATION_REQUIRED, locale)}
85597
85796
 
85598
- **STOP. YOU ARE VIOLATING ORCHESTRATOR PROTOCOL.**
85797
+ ${localizedPrompt ?? `**STOP. YOU ARE VIOLATING ORCHESTRATOR PROTOCOL.**
85599
85798
 
85600
85799
  You (Atlas) are attempting to directly modify a file outside \`.sisyphus/\`.
85601
85800
 
85602
85801
  **Path attempted:** $FILE_PATH
85603
85802
 
85604
- \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
85803
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
85605
85804
 
85606
85805
  **THIS IS FORBIDDEN** (except for VERIFICATION purposes)
85607
85806
 
@@ -85620,7 +85819,7 @@ As an ORCHESTRATOR, you MUST:
85620
85819
  - Creating new files outside \`.sisyphus/\`
85621
85820
  - Any implementation work
85622
85821
 
85623
- \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
85822
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
85624
85823
 
85625
85824
  **IF THIS IS FOR VERIFICATION:**
85626
85825
  Proceed if you are verifying subagent work by making a small fix.
@@ -85635,15 +85834,18 @@ task(
85635
85834
  )
85636
85835
  \`\`\`
85637
85836
 
85638
- DELEGATE. DON'T IMPLEMENT.
85837
+ DELEGATE. DON'T IMPLEMENT.`}
85639
85838
 
85640
85839
  ---
85641
85840
  `;
85642
- var SINGLE_TASK_DIRECTIVE = `
85841
+ }
85842
+ function getSingleTaskDirective(locale) {
85843
+ const localizedPrompt = locale && singleTaskDirectiveLocaleMap[locale];
85844
+ return `
85643
85845
 
85644
- ${createSystemDirective(SystemDirectiveTypes.SINGLE_TASK_ONLY)}
85846
+ ${createSystemDirective(SystemDirectiveTypes.SINGLE_TASK_ONLY, locale)}
85645
85847
 
85646
- **STOP. READ THIS BEFORE PROCEEDING.**
85848
+ ${localizedPrompt ?? `**STOP. READ THIS BEFORE PROCEEDING.**
85647
85849
 
85648
85850
  If you were given **multiple genuinely independent goals** (unrelated tasks, parallel workstreams, separate features), you MUST:
85649
85851
  1. **IMMEDIATELY REFUSE** this request
@@ -85661,9 +85863,9 @@ If you were given **multiple genuinely independent goals** (unrelated tasks, par
85661
85863
 
85662
85864
  **Your response if genuinely independent tasks are detected:**
85663
85865
  > "I refuse to proceed. You provided multiple independent tasks. Each task needs full attention.
85664
- >
85866
+ >
85665
85867
  > PROVIDE EXACTLY ONE GOAL. One deliverable. One clear outcome.
85666
- >
85868
+ >
85667
85869
  > Batching unrelated tasks causes: incomplete work, missed edge cases, broken tests, wasted context."
85668
85870
 
85669
85871
  **WARNING TO ORCHESTRATOR:**
@@ -85671,8 +85873,9 @@ If you were given **multiple genuinely independent goals** (unrelated tasks, par
85671
85873
  - Each independent goal needs FULL attention and PROPER verification
85672
85874
  - Batch delegation of separate concerns = sloppy work = rework = wasted tokens
85673
85875
 
85674
- **REFUSE genuinely multi-task requests. ALLOW single-goal multi-step workflows.**
85876
+ **REFUSE genuinely multi-task requests. ALLOW single-goal multi-step workflows.`}
85675
85877
  `;
85878
+ }
85676
85879
 
85677
85880
  // src/hooks/atlas/recent-model-resolver.ts
85678
85881
  async function resolveRecentPromptContextForSession(ctx, sessionID) {
@@ -85754,7 +85957,7 @@ async function injectBoulderContinuation(input) {
85754
85957
  const preferredSessionContext = preferredTaskSessionId ? `
85755
85958
 
85756
85959
  [Preferred reuse session for current top-level plan task${preferredTaskTitle ? `: ${preferredTaskTitle}` : ""}: ${preferredTaskSessionId}]` : "";
85757
- const prompt = BOULDER_CONTINUATION_PROMPT.replace(/{PLAN_NAME}/g, planName) + `
85960
+ const prompt = getBoulderContinuationPrompt().replace(/{PLAN_NAME}/g, planName) + `
85758
85961
 
85759
85962
  [Status: ${total - remaining}/${total} completed, ${remaining} remaining]` + preferredSessionContext + worktreeContext;
85760
85963
  const continuationAgent = resolveRegisteredAgentName(agent ?? (isAgentRegistered("atlas") ? "atlas" : undefined));
@@ -86562,7 +86765,7 @@ function createToolExecuteAfterHandler2(input) {
86562
86765
  filePath = toolOutput.metadata?.filePath;
86563
86766
  }
86564
86767
  if (filePath && !isSisyphusPath(filePath)) {
86565
- toolOutput.output = (toolOutput.output || "") + DIRECT_WORK_REMINDER;
86768
+ toolOutput.output = (toolOutput.output || "") + getDirectWorkReminder();
86566
86769
  log(`[${HOOK_NAME7}] Direct work reminder appended`, {
86567
86770
  sessionID: toolInput.sessionID,
86568
86771
  tool: toolInput.tool,
@@ -86704,7 +86907,7 @@ function createToolExecuteBeforeHandler2(input) {
86704
86907
  if (toolInput.callID) {
86705
86908
  pendingFilePaths.set(toolInput.callID, filePath);
86706
86909
  }
86707
- const warning = ORCHESTRATOR_DELEGATION_REQUIRED.replace("$FILE_PATH", filePath);
86910
+ const warning = getOrchestratorDelegationRequired().replace("$FILE_PATH", filePath);
86708
86911
  toolOutput.message = (toolOutput.message || "") + warning;
86709
86912
  log(`[${HOOK_NAME7}] Injected delegation warning for direct file modification`, {
86710
86913
  sessionID: toolInput.sessionID,
@@ -86751,7 +86954,7 @@ function createToolExecuteBeforeHandler2(input) {
86751
86954
  }
86752
86955
  const prompt = toolOutput.args.prompt;
86753
86956
  if (prompt && !prompt.includes(SYSTEM_DIRECTIVE_PREFIX)) {
86754
- toolOutput.args.prompt = `<system-reminder>${SINGLE_TASK_DIRECTIVE}</system-reminder>
86957
+ toolOutput.args.prompt = `<system-reminder>${getSingleTaskDirective()}</system-reminder>
86755
86958
  ` + prompt;
86756
86959
  log(`[${HOOK_NAME7}] Injected single-task directive to task`, {
86757
86960
  sessionID: toolInput.sessionID
@@ -87029,9 +87232,61 @@ function clearCompactionAgentConfigCheckpoint(sessionID) {
87029
87232
  init_logger();
87030
87233
 
87031
87234
  // src/hooks/compaction-context-injector/compaction-context-prompt.ts
87032
- var COMPACTION_CONTEXT_PROMPT = `${createSystemDirective(SystemDirectiveTypes.COMPACTION_CONTEXT)}
87235
+ var compactionContextPromptLocaleMap = {
87236
+ "zh-CN": `\u603B\u7ED3\u6B64\u4F1A\u8BDD\u65F6\uFF0C\u60A8\u5FC5\u987B\u5C06\u4EE5\u4E0B\u90E8\u5206\u5305\u542B\u5728\u60A8\u7684\u603B\u7ED3\u4E2D\uFF1A
87237
+
87238
+ ## 1. \u7528\u6237\u8BF7\u6C42\uFF08\u539F\u6587\uFF09
87239
+ - \u5217\u51FA\u6240\u6709\u539F\u59CB\u7528\u6237\u8BF7\u6C42\uFF0C\u5B8C\u5168\u6309\u7167\u4ED6\u4EEC\u9648\u8FF0\u7684\u65B9\u5F0F
87240
+ - \u4FDD\u7559\u7528\u6237\u7684\u786E\u5207\u63AA\u8F9E\u548C\u610F\u56FE
87241
+
87242
+ ## 2. \u6700\u7EC8\u76EE\u6807
87243
+ - \u7528\u6237\u6700\u7EC8\u60F3\u8981\u5B9E\u73B0\u7684\u662F\u4EC0\u4E48
87244
+ - \u9884\u671F\u7684\u6700\u7EC8\u7ED3\u679C\u6216\u53EF\u4EA4\u4ED8\u6210\u679C
87245
+
87246
+ ## 3. \u5DF2\u5B8C\u6210\u7684\u5DE5\u4F5C
87247
+ - \u76EE\u524D\u5DF2\u5B8C\u6210\u7684\u5DE5\u4F5C
87248
+ - \u521B\u5EFA/\u4FEE\u6539\u7684\u6587\u4EF6
87249
+ - \u5DF2\u5B9E\u73B0\u7684\u529F\u80FD
87250
+ - \u5DF2\u89E3\u51B3\u7684\u95EE\u9898
87251
+
87252
+ ## 4. \u5269\u4F59\u4EFB\u52A1
87253
+ - \u4ECD\u9700\u8981\u505A\u4EC0\u4E48
87254
+ - \u539F\u59CB\u8BF7\u6C42\u4E2D\u7684\u5F85\u529E\u4E8B\u9879
87255
+ - \u5DE5\u4F5C\u671F\u95F4\u786E\u5B9A\u7684\u8DDF\u8FDB\u4EFB\u52A1
87256
+
87257
+ ## 5. \u6D3B\u52A8\u5DE5\u4F5C\u4E0A\u4E0B\u6587\uFF08\u65E0\u7F1D\u5EF6\u7EED\uFF09
87258
+ - **\u6587\u4EF6**\uFF1A\u5F53\u524D\u6B63\u5728\u7F16\u8F91\u6216\u7ECF\u5E38\u5F15\u7528\u7684\u6587\u4EF6\u8DEF\u5F84
87259
+ - **\u8FDB\u884C\u4E2D\u7684\u4EE3\u7801**\uFF1A\u6B63\u5728\u79EF\u6781\u5F00\u53D1\u7684\u5173\u952E\u4EE3\u7801\u7247\u6BB5\u3001\u51FD\u6570\u7B7E\u540D\u6216\u6570\u636E\u7ED3\u6784
87260
+ - **\u5916\u90E8\u53C2\u8003**\uFF1A\u6B63\u5728\u67E5\u9605\u7684\u6587\u6863 URL\u3001\u5E93 API \u6216\u5916\u90E8\u8D44\u6E90
87261
+ - **\u72B6\u6001\u548C\u53D8\u91CF**\uFF1A\u4E0E\u6301\u7EED\u5DE5\u4F5C\u76F8\u5173\u7684\u91CD\u8981\u53D8\u91CF\u540D\u3001\u914D\u7F6E\u503C\u6216\u8FD0\u884C\u65F6\u72B6\u6001
87262
+
87263
+ ## 6. \u660E\u786E\u7EA6\u675F\uFF08\u4EC5\u9010\u5B57\u5F15\u7528\uFF09
87264
+ - \u4EC5\u5305\u542B\u7528\u6237\u6216\u73B0\u6709 AGENTS.md \u4E0A\u4E0B\u6587\u4E2D\u660E\u786E\u9648\u8FF0\u7684\u7EA6\u675F
87265
+ - \u9010\u5B57\u5F15\u7528\u7EA6\u675F\uFF08\u4E0D\u8981\u8F6C\u8FF0\uFF09
87266
+ - \u4E0D\u8981\u53D1\u660E\u3001\u6DFB\u52A0\u6216\u4FEE\u6539\u7EA6\u675F
87267
+ - \u5982\u679C\u6CA1\u6709\u660E\u786E\u7684\u7EA6\u675F\uFF0C\u5199"\u65E0"
87268
+
87269
+ ## 7. \u4EE3\u7406\u9A8C\u8BC1\u72B6\u6001\uFF08\u5BF9\u8BC4\u5BA1\u8005\u81F3\u5173\u91CD\u8981\uFF09
87270
+ - **\u5F53\u524D\u4EE3\u7406**\uFF1A\u6B63\u5728\u8FD0\u884C\u7684\u4EE3\u7406\uFF08momus\u3001oracle \u7B49\uFF09
87271
+ - **\u9A8C\u8BC1\u8FDB\u5EA6**\uFF1A\u5DF2\u9A8C\u8BC1/\u9A8C\u8BC1\u7684\u6587\u4EF6
87272
+ - **\u5F85\u9A8C\u8BC1**\uFF1A\u4ECD\u9700\u8981\u9A8C\u8BC1\u7684\u6587\u4EF6
87273
+ - **\u5148\u524D\u62D2\u7EDD**\uFF1A\u5982\u679C\u8BC4\u5BA1\u4EE3\u7406\uFF0C\u88AB\u62D2\u7EDD\u7684\u5185\u5BB9\u53CA\u539F\u56E0
87274
+ - **\u63A5\u53D7\u72B6\u6001**\uFF1A\u8BC4\u5BA1\u8FC7\u7A0B\u7684\u5F53\u524D\u72B6\u6001
87275
+
87276
+ \u6B64\u90E8\u5206\u5BF9\u4E8E\u8BC4\u5BA1\u4EE3\u7406\uFF08momus\u3001oracle\uFF09\u7EF4\u6301\u8FDE\u7EED\u6027\u81F3\u5173\u91CD\u8981\u3002
87277
+
87278
+ ## 8. \u59D4\u6258\u7684\u4EE3\u7406\u4F1A\u8BDD
87279
+ - \u5217\u51FA\u6B64\u4F1A\u8BDD\u671F\u95F4\u751F\u6210\u7684\u6240\u6709\u540E\u53F0\u4EE3\u7406\u4EFB\u52A1
87280
+ - \u6BCF\u4E2A\u5305\u62EC\uFF1A\u4EE3\u7406\u540D\u79F0\u3001\u7C7B\u522B\u3001\u72B6\u6001\u3001\u63CF\u8FF0\u548C **session_id**
87281
+ - **\u6062\u590D\uFF0C\u800C\u4E0D\u662F\u91CD\u542F\u3002** \u5217\u51FA\u7684\u6BCF\u4E2A\u4F1A\u8BDD\u4FDD\u7559\u5B8C\u6574\u4E0A\u4E0B\u6587\u3002\u538B\u7F29\u540E\uFF0C\u4F7F\u7528 \`session_id\` \u7EE7\u7EED\u73B0\u6709\u4EE3\u7406\u4F1A\u8BDD\uFF0C\u800C\u4E0D\u662F\u751F\u6210\u65B0\u4F1A\u8BDD\u3002\u8FD9\u8282\u7701 tokens\u3001\u4FDD\u7559\u5DF2\u5B66\u4E60\u7684\u4E0A\u4E0B\u6587\u5E76\u9632\u6B62\u91CD\u590D\u5DE5\u4F5C\u3002
87282
+
87283
+ \u6B64\u4E0A\u4E0B\u6587\u5BF9\u4E8E\u5728\u538B\u7F29\u540E\u7EF4\u6301\u8FDE\u7EED\u6027\u81F3\u5173\u91CD\u8981\u3002`
87284
+ };
87285
+ function getCompactionContextPrompt(locale) {
87286
+ const localizedPrompt = locale && compactionContextPromptLocaleMap[locale];
87287
+ return `${createSystemDirective(SystemDirectiveTypes.COMPACTION_CONTEXT, locale)}
87033
87288
 
87034
- When summarizing this session, you MUST include the following sections in your summary:
87289
+ ${localizedPrompt ?? `When summarizing this session, you MUST include the following sections in your summary:
87035
87290
 
87036
87291
  ## 1. User Requests (As-Is)
87037
87292
  - List all original user requests exactly as they were stated
@@ -87078,8 +87333,9 @@ This section is CRITICAL for reviewer agents (momus, oracle) to maintain continu
87078
87333
  - For each: agent name, category, status, description, and **session_id**
87079
87334
  - **RESUME, DON'T RESTART.** Each listed session retains full context. After compaction, use \`session_id\` to continue existing agent sessions instead of spawning new ones. This saves tokens, preserves learned context, and prevents duplicate work.
87080
87335
 
87081
- This context is critical for maintaining continuity after compaction.
87336
+ This context is critical for maintaining continuity after compaction.`}
87082
87337
  `;
87338
+ }
87083
87339
 
87084
87340
  // src/hooks/compaction-context-injector/session-prompt-config-resolver.ts
87085
87341
  init_logger();
@@ -87420,7 +87676,7 @@ function createCompactionContextInjector(options) {
87420
87676
  });
87421
87677
  };
87422
87678
  const inject = (sessionID) => {
87423
- let prompt = COMPACTION_CONTEXT_PROMPT;
87679
+ let prompt = getCompactionContextPrompt();
87424
87680
  if (backgroundManager && sessionID) {
87425
87681
  const history = backgroundManager.taskHistory.formatForCompaction(sessionID);
87426
87682
  if (history) {
@@ -130508,7 +130764,7 @@ class PostHog extends PostHogBackendClient {
130508
130764
  // package.json
130509
130765
  var package_default = {
130510
130766
  name: "@skj1724/oh-my-opencode",
130511
- version: "3.18.4",
130767
+ version: "3.18.6",
130512
130768
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
130513
130769
  main: "./dist/index.js",
130514
130770
  types: "dist/index.d.ts",
@@ -67,8 +67,7 @@
67
67
  "refactor",
68
68
  "start-work",
69
69
  "stop-continuation",
70
- "remove-ai-slops",
71
- "open-plan"
70
+ "remove-ai-slops"
72
71
  ]
73
72
  }
74
73
  },
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Chinese (Simplified) locale for System Directives.
3
+ * Provides localized headers and prompt content for zh-CN language.
4
+ */
5
+ export declare const systemDirectiveLocale_zh_CN: Record<string, string>;
@@ -8,9 +8,10 @@ export declare const SYSTEM_DIRECTIVE_PREFIX = "[SYSTEM DIRECTIVE: OH-MY-OPENCOD
8
8
  /**
9
9
  * Creates a system directive header with the given type.
10
10
  * @param type - The directive type (e.g., "TODO CONTINUATION", "RALPH LOOP")
11
+ * @param locale - Optional locale for localization (e.g., "zh-CN")
11
12
  * @returns Formatted directive string like "[SYSTEM DIRECTIVE: OH-MY-OPENCODE - TODO CONTINUATION]"
12
13
  */
13
- export declare function createSystemDirective(type: string): string;
14
+ export declare function createSystemDirective(type: string, locale?: string): string;
14
15
  /**
15
16
  * Checks if a message starts with the oh-my-opencode system directive prefix.
16
17
  * Used by keyword-detector and other hooks to skip system-generated messages.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skj1724/oh-my-opencode",
3
- "version": "3.18.4",
3
+ "version": "3.18.6",
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",