@skj1724/oh-my-opencode 3.18.6 → 3.18.8

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.6",
53773
+ version: "3.18.8",
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",
@@ -1 +1 @@
1
- export declare const GIT_MASTER_COMMIT_WORKFLOW_SECTION = "## PHASE 0: Parallel Context Gathering (MANDATORY FIRST STEP)\n\n<parallel_analysis>\n**Execute ALL of the following commands IN PARALLEL to minimize latency:**\n\n```bash\n# Group 1: Current state\ngit status\ngit diff --staged --stat\ngit diff --stat\n\n# Group 2: History context \ngit log -30 --oneline\ngit log -30 --pretty=format:\"%s\"\n\n# Group 3: Branch context\ngit branch --show-current\ngit merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null\ngit rev-parse --abbrev-ref @{upstream} 2>/dev/null || echo \"NO_UPSTREAM\"\ngit log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null)..HEAD 2>/dev/null\n```\n\n**Capture these data points simultaneously:**\n1. What files changed (staged vs unstaged)\n2. Recent 30 commit messages for style detection\n3. Branch position relative to main/master\n4. Whether branch has upstream tracking\n5. Commits that would go in PR (local only)\n</parallel_analysis>\n\n---\n\n## PHASE 1: Style Detection (BLOCKING - MUST OUTPUT BEFORE PROCEEDING)\n\n<style_detection>\n**THIS PHASE HAS MANDATORY OUTPUT** - You MUST print the analysis result before moving to Phase 2.\n\n### 1.1 Language Detection\n\n```\nCount from git log -30:\n- Korean characters: N commits\n- English only: M commits\n- Mixed: K commits\n\nDECISION:\n- If Korean >= 50% -> KOREAN\n- If English >= 50% -> ENGLISH \n- If Mixed -> Use MAJORITY language\n```\n\n### 1.2 Commit Style Classification\n\n| Style | Pattern | Example | Detection Regex |\n|-------|---------|---------|-----------------|\n| `SEMANTIC` | `type: message` or `type(scope): message` | `feat: add login` | `/^(feat\\|fix\\|chore\\|refactor\\|docs\\|test\\|ci\\|style\\|perf\\|build)(\\(.+\\))?:/` |\n| `PLAIN` | Just description, no prefix | `Add login feature` | No conventional prefix, >3 words |\n| `SENTENCE` | Full sentence style | `Implemented the new login flow` | Complete grammatical sentence |\n| `SHORT` | Minimal keywords | `format`, `lint` | 1-3 words only |\n\n**Detection Algorithm:**\n```\nsemantic_count = commits matching semantic regex\nplain_count = non-semantic commits with >3 words\nshort_count = commits with <=3 words\n\nIF semantic_count >= 15 (50%): STYLE = SEMANTIC\nELSE IF plain_count >= 15: STYLE = PLAIN \nELSE IF short_count >= 10: STYLE = SHORT\nELSE: STYLE = PLAIN (safe default)\n```\n\n### 1.3 MANDATORY OUTPUT (BLOCKING)\n\n**You MUST output this block before proceeding to Phase 2. NO EXCEPTIONS.**\n\n```\nSTYLE DETECTION RESULT\n======================\nAnalyzed: 30 commits from git log\n\nLanguage: [KOREAN | ENGLISH]\n - Korean commits: N (X%)\n - English commits: M (Y%)\n\nStyle: [SEMANTIC | PLAIN | SENTENCE | SHORT]\n - Semantic (feat:, fix:, etc): N (X%)\n - Plain: M (Y%)\n - Short: K (Z%)\n\nReference examples from repo:\n 1. \"actual commit message from log\"\n 2. \"actual commit message from log\"\n 3. \"actual commit message from log\"\n\nAll commits will follow: [LANGUAGE] + [STYLE]\n```\n\n**IF YOU SKIP THIS OUTPUT, YOUR COMMITS WILL BE WRONG. STOP AND REDO.**\n</style_detection>\n\n---\n\n## PHASE 2: Branch Context Analysis\n\n<branch_analysis>\n### 2.1 Determine Branch State\n\n```\nBRANCH_STATE:\n current_branch: <name>\n has_upstream: true | false\n commits_ahead: N # Local-only commits\n merge_base: <hash>\n \nREWRITE_SAFETY:\n - If has_upstream AND commits_ahead > 0 AND already pushed:\n -> WARN before force push\n - If no upstream OR all commits local:\n -> Safe for aggressive rewrite (fixup, reset, rebase)\n - If on main/master:\n -> NEVER rewrite, only new commits\n```\n\n### 2.2 History Rewrite Strategy Decision\n\n```\nIF current_branch == main OR current_branch == master:\n -> STRATEGY = NEW_COMMITS_ONLY\n -> Never fixup, never rebase\n\nELSE IF commits_ahead == 0:\n -> STRATEGY = NEW_COMMITS_ONLY\n -> No history to rewrite\n\nELSE IF all commits are local (not pushed):\n -> STRATEGY = AGGRESSIVE_REWRITE\n -> Fixup freely, reset if needed, rebase to clean\n\nELSE IF pushed but not merged:\n -> STRATEGY = CAREFUL_REWRITE \n -> Fixup OK but warn about force push\n```\n</branch_analysis>\n\n---\n\n## PHASE 3: Atomic Unit Planning (BLOCKING - MUST OUTPUT BEFORE PROCEEDING)\n\n<atomic_planning>\n**THIS PHASE HAS MANDATORY OUTPUT** - You MUST print the commit plan before moving to Phase 4.\n\n### 3.0 Calculate Minimum Commit Count FIRST\n\n```\nFORMULA: min_commits = ceil(file_count / 3)\n\n 3 files -> min 1 commit\n 5 files -> min 2 commits\n 9 files -> min 3 commits\n15 files -> min 5 commits\n```\n\n**If your planned commit count < min_commits -> WRONG. SPLIT MORE.**\n\n### 3.1 Split by Directory/Module FIRST (Primary Split)\n\n**RULE: Different directories = Different commits (almost always)**\n\n```\nExample: 8 changed files\n - app/[locale]/page.tsx\n - app/[locale]/layout.tsx\n - components/demo/browser-frame.tsx\n - components/demo/shopify-full-site.tsx\n - components/pricing/pricing-table.tsx\n - e2e/navbar.spec.ts\n - messages/en.json\n - messages/ko.json\n\nWRONG: 1 commit \"Update landing page\" (LAZY, WRONG)\nWRONG: 2 commits (still too few)\n\nCORRECT: Split by directory/concern:\n - Commit 1: app/[locale]/page.tsx + layout.tsx (app layer)\n - Commit 2: components/demo/* (demo components)\n - Commit 3: components/pricing/* (pricing components)\n - Commit 4: e2e/* (tests)\n - Commit 5: messages/* (i18n)\n = 5 commits from 8 files (CORRECT)\n```\n\n### 3.2 Split by Concern SECOND (Secondary Split)\n\n**Within same directory, split by logical concern:**\n\n```\nExample: components/demo/ has 4 files\n - browser-frame.tsx (UI frame)\n - shopify-full-site.tsx (specific demo)\n - review-dashboard.tsx (NEW - specific demo)\n - tone-settings.tsx (NEW - specific demo)\n\nOption A (acceptable): 1 commit if ALL tightly coupled\nOption B (preferred): 2 commits\n - Commit: \"Update existing demo components\" (browser-frame, shopify)\n - Commit: \"Add new demo components\" (review-dashboard, tone-settings)\n```\n\n### 3.3 NEVER Do This (Anti-Pattern Examples)\n\n```\nWRONG: \"Refactor entire landing page\" - 1 commit with 15 files\nWRONG: \"Update components and tests\" - 1 commit mixing concerns\nWRONG: \"Big update\" - Any commit touching 5+ unrelated files\n\nRIGHT: Multiple focused commits, each 1-4 files max\nRIGHT: Each commit message describes ONE specific change\nRIGHT: A reviewer can understand each commit in 30 seconds\n```\n\n### 3.4 Implementation + Test Pairing (MANDATORY)\n\n```\nRULE: Test files MUST be in same commit as implementation\n\nTest patterns to match:\n- test_*.py <-> *.py\n- *_test.py <-> *.py\n- *.test.ts <-> *.ts\n- *.spec.ts <-> *.ts\n- __tests__/*.ts <-> *.ts\n- tests/*.py <-> src/*.py\n```\n\n### 3.5 MANDATORY JUSTIFICATION (Before Creating Commit Plan)\n\n**NON-NEGOTIABLE: Before finalizing your commit plan, you MUST:**\n\n```\nFOR EACH planned commit with 3+ files:\n 1. List all files in this commit\n 2. Write ONE sentence explaining why they MUST be together\n 3. If you can't write that sentence -> SPLIT\n \nTEMPLATE:\n\"Commit N contains [files] because [specific reason they are inseparable].\"\n\nVALID reasons:\n VALID: \"implementation file + its direct test file\"\n VALID: \"type definition + the only file that uses it\"\n VALID: \"migration + model change (would break without both)\"\n \nINVALID reasons (MUST SPLIT instead):\n INVALID: \"all related to feature X\" (too vague)\n INVALID: \"part of the same PR\" (not a reason)\n INVALID: \"they were changed together\" (not a reason)\n INVALID: \"makes sense to group\" (not a reason)\n```\n\n**OUTPUT THIS JUSTIFICATION in your analysis before executing commits.**\n\n### 3.7 Dependency Ordering\n\n```\nLevel 0: Utilities, constants, type definitions\nLevel 1: Models, schemas, interfaces\nLevel 2: Services, business logic\nLevel 3: API endpoints, controllers\nLevel 4: Configuration, infrastructure\n\nCOMMIT ORDER: Level 0 -> Level 1 -> Level 2 -> Level 3 -> Level 4\n```\n\n### 3.8 Create Commit Groups\n\nFor each logical feature/change:\n```yaml\n- group_id: 1\n feature: \"Add Shopify discount deletion\"\n files:\n - errors/shopify_error.py\n - types/delete_input.py\n - mutations/update_contract.py\n - tests/test_update_contract.py\n dependency_level: 2\n target_commit: null | <existing-hash> # null = new, hash = fixup\n```\n\n### 3.9 MANDATORY OUTPUT (BLOCKING)\n\n**You MUST output this block before proceeding to Phase 4. NO EXCEPTIONS.**\n\n```\nCOMMIT PLAN\n===========\nFiles changed: N\nMinimum commits required: ceil(N/3) = M\nPlanned commits: K\nStatus: K >= M (PASS) | K < M (FAIL - must split more)\n\nCOMMIT 1: [message in detected style]\n - path/to/file1.py\n - path/to/file1_test.py\n Justification: implementation + its test\n\nCOMMIT 2: [message in detected style]\n - path/to/file2.py\n Justification: independent utility function\n\nCOMMIT 3: [message in detected style]\n - config/settings.py\n - config/constants.py\n Justification: tightly coupled config changes\n\nExecution order: Commit 1 -> Commit 2 -> Commit 3\n(follows dependency: Level 0 -> Level 1 -> Level 2 -> ...)\n```\n\n**VALIDATION BEFORE EXECUTION:**\n- Each commit has <=4 files (or justified)\n- Each commit message matches detected STYLE + LANGUAGE\n- Test files paired with implementation\n- Different directories = different commits (or justified)\n- Total commits >= min_commits\n\n**IF ANY CHECK FAILS, DO NOT PROCEED. REPLAN.**\n</atomic_planning>\n\n---\n\n## PHASE 4: Commit Strategy Decision\n\n<strategy_decision>\n### 4.1 For Each Commit Group, Decide:\n\n```\nFIXUP if:\n - Change complements existing commit's intent\n - Same feature, fixing bugs or adding missing parts\n - Review feedback incorporation\n - Target commit exists in local history\n\nNEW COMMIT if:\n - New feature or capability\n - Independent logical unit\n - Different issue/ticket\n - No suitable target commit exists\n```\n\n### 4.2 History Rebuild Decision (Aggressive Option)\n\n```\nCONSIDER RESET & REBUILD when:\n - History is messy (many small fixups already)\n - Commits are not atomic (mixed concerns)\n - Dependency order is wrong\n \nRESET WORKFLOW:\n 1. git reset --soft $(git merge-base HEAD main)\n 2. All changes now staged\n 3. Re-commit in proper atomic units\n 4. Clean history from scratch\n \nONLY IF:\n - All commits are local (not pushed)\n - User explicitly allows OR branch is clearly WIP\n```\n\n### 4.3 Final Plan Summary\n\n```yaml\nEXECUTION_PLAN:\n strategy: FIXUP_THEN_NEW | NEW_ONLY | RESET_REBUILD\n fixup_commits:\n - files: [...]\n target: <hash>\n new_commits:\n - files: [...]\n message: \"...\"\n level: N\n requires_force_push: true | false\n```\n</strategy_decision>\n\n---\n\n## PHASE 5: Commit Execution\n\n<execution>\n### 5.1 Register TODO Items\n\nUse TodoWrite to register each commit as a trackable item:\n```\n- [ ] Fixup: <description> -> <target-hash>\n- [ ] New: <description>\n- [ ] Rebase autosquash\n- [ ] Final verification\n```\n\n### 5.2 Fixup Commits (If Any)\n\n```bash\n# Stage files for each fixup\ngit add <files>\ngit commit --fixup=<target-hash>\n\n# Repeat for all fixups...\n\n# Single autosquash rebase at the end\nMERGE_BASE=$(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)\nGIT_SEQUENCE_EDITOR=: git rebase -i --autosquash $MERGE_BASE\n```\n\n### 5.3 New Commits (After Fixups)\n\nFor each new commit group, in dependency order:\n\n```bash\n# Stage files\ngit add <file1> <file2> ...\n\n# Verify staging\ngit diff --staged --stat\n\n# Commit with detected style\ngit commit -m \"<message-matching-COMMIT_CONFIG>\"\n\n# Verify\ngit log -1 --oneline\n```\n\n### 5.4 Commit Message Generation\n\n**Based on COMMIT_CONFIG from Phase 1:**\n\n```\nIF style == SEMANTIC AND language == KOREAN:\n -> \"feat: \uB85C\uADF8\uC778 \uAE30\uB2A5 \uCD94\uAC00\"\n \nIF style == SEMANTIC AND language == ENGLISH:\n -> \"feat: add login feature\"\n \nIF style == PLAIN AND language == KOREAN:\n -> \"\uB85C\uADF8\uC778 \uAE30\uB2A5 \uCD94\uAC00\"\n \nIF style == PLAIN AND language == ENGLISH:\n -> \"Add login feature\"\n \nIF style == SHORT:\n -> \"format\" / \"type fix\" / \"lint\"\n```\n\n**VALIDATION before each commit:**\n1. Does message match detected style?\n2. Does language match detected language?\n3. Is it similar to examples from git log?\n\nIf ANY check fails -> REWRITE message.\n```\n</execution>\n\n---\n\n## PHASE 6: Verification & Cleanup\n\n<verification>\n### 6.1 Post-Commit Verification\n\n```bash\n# Check working directory clean\ngit status\n\n# Review new history\ngit log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)..HEAD\n\n# Verify each commit is atomic\n# (mentally check: can each be reverted independently?)\n```\n\n### 6.2 Force Push Decision\n\n```\nIF fixup was used AND branch has upstream:\n -> Requires: git push --force-with-lease\n -> WARN user about force push implications\n \nIF only new commits:\n -> Regular: git push\n```\n\n### 6.3 Final Report\n\n```\nCOMMIT SUMMARY:\n Strategy: <what was done>\n Commits created: N\n Fixups merged: M\n \nHISTORY:\n <hash1> <message1>\n <hash2> <message2>\n ...\n\nNEXT STEPS:\n - git push [--force-with-lease]\n - Create PR if ready\n```\n</verification>";
1
+ export declare const GIT_MASTER_COMMIT_WORKFLOW_SECTION = "## PHASE 0: Parallel Context Gathering (MANDATORY FIRST STEP)\n\n<parallel_analysis>\n**Execute ALL of the following commands IN PARALLEL to minimize latency:**\n\n```bash\n# Group 1: Current state\ngit status\ngit diff --staged --stat\ngit diff --stat\n\n# Group 2: History context \ngit log -30 --oneline\ngit log -30 --pretty=format:\"%s\"\n\n# Group 3: Branch context\ngit branch --show-current\ngit merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null\ngit rev-parse --abbrev-ref @{upstream} 2>/dev/null || echo \"NO_UPSTREAM\"\ngit log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null)..HEAD 2>/dev/null\n```\n\n**Capture these data points simultaneously:**\n1. What files changed (staged vs unstaged)\n2. Recent 30 commit messages for style detection\n3. Branch position relative to main/master\n4. Whether branch has upstream tracking\n5. Commits that would go in PR (local only)\n</parallel_analysis>\n\n---\n\n## PHASE 1: Style Detection (BLOCKING - MUST OUTPUT BEFORE PROCEEDING)\n\n<style_detection>\n**THIS PHASE HAS MANDATORY OUTPUT** - You MUST print the analysis result before moving to Phase 2.\n\n### 1.1 Language Detection\n\n```\nCount from git log -30:\n- Chinese characters (\\u4e00-\\u9fff): N commits\n- English only: K commits\n- Mixed: L commits\n\nDECISION:\n- If Chinese >= 50% -> CHINESE\n- If English >= 50% -> ENGLISH\n- If Mixed -> Use MAJORITY language\n```\n\n### 1.2 Commit Style Classification\n\n| Style | Pattern | Example | Detection Regex |\n|-------|---------|---------|-----------------|\n| `SEMANTIC` | `type: message` or `type(scope): message` | `feat: add login` | `/^(feat\\|fix\\|chore\\|refactor\\|docs\\|test\\|ci\\|style\\|perf\\|build)(\\(.+\\))?:/` |\n| `PLAIN` | Just description, no prefix | `Add login feature` | No conventional prefix, >3 words |\n| `SENTENCE` | Full sentence style | `Implemented the new login flow` | Complete grammatical sentence |\n| `SHORT` | Minimal keywords | `format`, `lint` | 1-3 words only |\n\n**Detection Algorithm:**\n```\nsemantic_count = commits matching semantic regex\nplain_count = non-semantic commits with >3 words\nshort_count = commits with <=3 words\n\nIF semantic_count >= 15 (50%): STYLE = SEMANTIC\nELSE IF plain_count >= 15: STYLE = PLAIN \nELSE IF short_count >= 10: STYLE = SHORT\nELSE: STYLE = PLAIN (safe default)\n```\n\n### 1.3 MANDATORY OUTPUT (BLOCKING)\n\n**You MUST output this block before proceeding to Phase 2. NO EXCEPTIONS.**\n\n```\nSTYLE DETECTION RESULT\n======================\nAnalyzed: 30 commits from git log\n\nLanguage: [CHINESE | ENGLISH]\n - Chinese commits: N (X%)\n - English commits: K (Z%)\n\nStyle: [SEMANTIC | PLAIN | SENTENCE | SHORT]\n - Semantic (feat:, fix:, etc): N (X%)\n - Plain: M (Y%)\n - Short: K (Z%)\n\nReference examples from repo:\n 1. \"actual commit message from log\"\n 2. \"actual commit message from log\"\n 3. \"actual commit message from log\"\n\nAll commits will follow: [LANGUAGE] + [STYLE]\n```\n\n**IF YOU SKIP THIS OUTPUT, YOUR COMMITS WILL BE WRONG. STOP AND REDO.**\n</style_detection>\n\n---\n\n## PHASE 2: Branch Context Analysis\n\n<branch_analysis>\n### 2.1 Determine Branch State\n\n```\nBRANCH_STATE:\n current_branch: <name>\n has_upstream: true | false\n commits_ahead: N # Local-only commits\n merge_base: <hash>\n \nREWRITE_SAFETY:\n - If has_upstream AND commits_ahead > 0 AND already pushed:\n -> WARN before force push\n - If no upstream OR all commits local:\n -> Safe for aggressive rewrite (fixup, reset, rebase)\n - If on main/master:\n -> NEVER rewrite, only new commits\n```\n\n### 2.2 History Rewrite Strategy Decision\n\n```\nIF current_branch == main OR current_branch == master:\n -> STRATEGY = NEW_COMMITS_ONLY\n -> Never fixup, never rebase\n\nELSE IF commits_ahead == 0:\n -> STRATEGY = NEW_COMMITS_ONLY\n -> No history to rewrite\n\nELSE IF all commits are local (not pushed):\n -> STRATEGY = AGGRESSIVE_REWRITE\n -> Fixup freely, reset if needed, rebase to clean\n\nELSE IF pushed but not merged:\n -> STRATEGY = CAREFUL_REWRITE \n -> Fixup OK but warn about force push\n```\n</branch_analysis>\n\n---\n\n## PHASE 3: Atomic Unit Planning (BLOCKING - MUST OUTPUT BEFORE PROCEEDING)\n\n<atomic_planning>\n**THIS PHASE HAS MANDATORY OUTPUT** - You MUST print the commit plan before moving to Phase 4.\n\n### 3.0 Calculate Minimum Commit Count FIRST\n\n```\nFORMULA: min_commits = ceil(file_count / 3)\n\n 3 files -> min 1 commit\n 5 files -> min 2 commits\n 9 files -> min 3 commits\n15 files -> min 5 commits\n```\n\n**If your planned commit count < min_commits -> WRONG. SPLIT MORE.**\n\n### 3.1 Split by Directory/Module FIRST (Primary Split)\n\n**RULE: Different directories = Different commits (almost always)**\n\n```\nExample: 8 changed files\n - app/[locale]/page.tsx\n - app/[locale]/layout.tsx\n - components/demo/browser-frame.tsx\n - components/demo/shopify-full-site.tsx\n - components/pricing/pricing-table.tsx\n - e2e/navbar.spec.ts\n - messages/en.json\n - messages/ko.json\n\nWRONG: 1 commit \"Update landing page\" (LAZY, WRONG)\nWRONG: 2 commits (still too few)\n\nCORRECT: Split by directory/concern:\n - Commit 1: app/[locale]/page.tsx + layout.tsx (app layer)\n - Commit 2: components/demo/* (demo components)\n - Commit 3: components/pricing/* (pricing components)\n - Commit 4: e2e/* (tests)\n - Commit 5: messages/* (i18n)\n = 5 commits from 8 files (CORRECT)\n```\n\n### 3.2 Split by Concern SECOND (Secondary Split)\n\n**Within same directory, split by logical concern:**\n\n```\nExample: components/demo/ has 4 files\n - browser-frame.tsx (UI frame)\n - shopify-full-site.tsx (specific demo)\n - review-dashboard.tsx (NEW - specific demo)\n - tone-settings.tsx (NEW - specific demo)\n\nOption A (acceptable): 1 commit if ALL tightly coupled\nOption B (preferred): 2 commits\n - Commit: \"Update existing demo components\" (browser-frame, shopify)\n - Commit: \"Add new demo components\" (review-dashboard, tone-settings)\n```\n\n### 3.3 NEVER Do This (Anti-Pattern Examples)\n\n```\nWRONG: \"Refactor entire landing page\" - 1 commit with 15 files\nWRONG: \"Update components and tests\" - 1 commit mixing concerns\nWRONG: \"Big update\" - Any commit touching 5+ unrelated files\n\nRIGHT: Multiple focused commits, each 1-4 files max\nRIGHT: Each commit message describes ONE specific change\nRIGHT: A reviewer can understand each commit in 30 seconds\n```\n\n### 3.4 Implementation + Test Pairing (MANDATORY)\n\n```\nRULE: Test files MUST be in same commit as implementation\n\nTest patterns to match:\n- test_*.py <-> *.py\n- *_test.py <-> *.py\n- *.test.ts <-> *.ts\n- *.spec.ts <-> *.ts\n- __tests__/*.ts <-> *.ts\n- tests/*.py <-> src/*.py\n```\n\n### 3.5 MANDATORY JUSTIFICATION (Before Creating Commit Plan)\n\n**NON-NEGOTIABLE: Before finalizing your commit plan, you MUST:**\n\n```\nFOR EACH planned commit with 3+ files:\n 1. List all files in this commit\n 2. Write ONE sentence explaining why they MUST be together\n 3. If you can't write that sentence -> SPLIT\n \nTEMPLATE:\n\"Commit N contains [files] because [specific reason they are inseparable].\"\n\nVALID reasons:\n VALID: \"implementation file + its direct test file\"\n VALID: \"type definition + the only file that uses it\"\n VALID: \"migration + model change (would break without both)\"\n \nINVALID reasons (MUST SPLIT instead):\n INVALID: \"all related to feature X\" (too vague)\n INVALID: \"part of the same PR\" (not a reason)\n INVALID: \"they were changed together\" (not a reason)\n INVALID: \"makes sense to group\" (not a reason)\n```\n\n**OUTPUT THIS JUSTIFICATION in your analysis before executing commits.**\n\n### 3.7 Dependency Ordering\n\n```\nLevel 0: Utilities, constants, type definitions\nLevel 1: Models, schemas, interfaces\nLevel 2: Services, business logic\nLevel 3: API endpoints, controllers\nLevel 4: Configuration, infrastructure\n\nCOMMIT ORDER: Level 0 -> Level 1 -> Level 2 -> Level 3 -> Level 4\n```\n\n### 3.8 Create Commit Groups\n\nFor each logical feature/change:\n```yaml\n- group_id: 1\n feature: \"Add Shopify discount deletion\"\n files:\n - errors/shopify_error.py\n - types/delete_input.py\n - mutations/update_contract.py\n - tests/test_update_contract.py\n dependency_level: 2\n target_commit: null | <existing-hash> # null = new, hash = fixup\n```\n\n### 3.9 MANDATORY OUTPUT (BLOCKING)\n\n**You MUST output this block before proceeding to Phase 4. NO EXCEPTIONS.**\n\n```\nCOMMIT PLAN\n===========\nFiles changed: N\nMinimum commits required: ceil(N/3) = M\nPlanned commits: K\nStatus: K >= M (PASS) | K < M (FAIL - must split more)\n\nCOMMIT 1: [message in detected style]\n - path/to/file1.py\n - path/to/file1_test.py\n Justification: implementation + its test\n\nCOMMIT 2: [message in detected style]\n - path/to/file2.py\n Justification: independent utility function\n\nCOMMIT 3: [message in detected style]\n - config/settings.py\n - config/constants.py\n Justification: tightly coupled config changes\n\nExecution order: Commit 1 -> Commit 2 -> Commit 3\n(follows dependency: Level 0 -> Level 1 -> Level 2 -> ...)\n```\n\n**VALIDATION BEFORE EXECUTION:**\n- Each commit has <=4 files (or justified)\n- Each commit message matches detected STYLE + LANGUAGE\n- Test files paired with implementation\n- Different directories = different commits (or justified)\n- Total commits >= min_commits\n\n**IF ANY CHECK FAILS, DO NOT PROCEED. REPLAN.**\n</atomic_planning>\n\n---\n\n## PHASE 4: Commit Strategy Decision\n\n<strategy_decision>\n### 4.1 For Each Commit Group, Decide:\n\n```\nFIXUP if:\n - Change complements existing commit's intent\n - Same feature, fixing bugs or adding missing parts\n - Review feedback incorporation\n - Target commit exists in local history\n\nNEW COMMIT if:\n - New feature or capability\n - Independent logical unit\n - Different issue/ticket\n - No suitable target commit exists\n```\n\n### 4.2 History Rebuild Decision (Aggressive Option)\n\n```\nCONSIDER RESET & REBUILD when:\n - History is messy (many small fixups already)\n - Commits are not atomic (mixed concerns)\n - Dependency order is wrong\n \nRESET WORKFLOW:\n 1. git reset --soft $(git merge-base HEAD main)\n 2. All changes now staged\n 3. Re-commit in proper atomic units\n 4. Clean history from scratch\n \nONLY IF:\n - All commits are local (not pushed)\n - User explicitly allows OR branch is clearly WIP\n```\n\n### 4.3 Final Plan Summary\n\n```yaml\nEXECUTION_PLAN:\n strategy: FIXUP_THEN_NEW | NEW_ONLY | RESET_REBUILD\n fixup_commits:\n - files: [...]\n target: <hash>\n new_commits:\n - files: [...]\n message: \"...\"\n level: N\n requires_force_push: true | false\n```\n</strategy_decision>\n\n---\n\n## PHASE 5: Commit Execution\n\n<execution>\n### 5.1 Register TODO Items\n\nUse TodoWrite to register each commit as a trackable item:\n```\n- [ ] Fixup: <description> -> <target-hash>\n- [ ] New: <description>\n- [ ] Rebase autosquash\n- [ ] Final verification\n```\n\n### 5.2 Fixup Commits (If Any)\n\n```bash\n# Stage files for each fixup\ngit add <files>\ngit commit --fixup=<target-hash>\n\n# Repeat for all fixups...\n\n# Single autosquash rebase at the end\nMERGE_BASE=$(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)\nGIT_SEQUENCE_EDITOR=: git rebase -i --autosquash $MERGE_BASE\n```\n\n### 5.3 New Commits (After Fixups)\n\nFor each new commit group, in dependency order:\n\n```bash\n# Stage files\ngit add <file1> <file2> ...\n\n# Verify staging\ngit diff --staged --stat\n\n# Commit with detected style\ngit commit -m \"<message-matching-COMMIT_CONFIG>\"\n\n# Verify\ngit log -1 --oneline\n```\n\n### 5.4 Commit Message Generation\n\n**Based on COMMIT_CONFIG from Phase 1:**\n\n```\nIF style == SEMANTIC AND language == CHINESE:\n -> \"feat: \u6DFB\u52A0\u767B\u5F55\u529F\u80FD\"\n \nIF style == SEMANTIC AND language == ENGLISH:\n -> \"feat: add login feature\"\n\nIF style == PLAIN AND language == CHINESE:\n -> \"\u6DFB\u52A0\u767B\u5F55\u529F\u80FD\"\n\nIF style == PLAIN AND language == ENGLISH:\n -> \"Add login feature\"\n\nIF style == SHORT:\n -> \"format\" / \"type fix\" / \"lint\"\n```\n\n**VALIDATION before each commit:**\n1. Does message match detected style?\n2. Does language match detected language?\n3. Is it similar to examples from git log?\n\nIf ANY check fails -> REWRITE message.\n```\n</execution>\n\n---\n\n## PHASE 6: Verification & Cleanup\n\n<verification>\n### 6.1 Post-Commit Verification\n\n```bash\n# Check working directory clean\ngit status\n\n# Review new history\ngit log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)..HEAD\n\n# Verify each commit is atomic\n# (mentally check: can each be reverted independently?)\n```\n\n### 6.2 Force Push Decision\n\n```\nIF fixup was used AND branch has upstream:\n -> Requires: git push --force-with-lease\n -> WARN user about force push implications\n \nIF only new commits:\n -> Regular: git push\n```\n\n### 6.3 Final Report\n\n```\nCOMMIT SUMMARY:\n Strategy: <what was done>\n Commits created: N\n Fixups merged: M\n \nHISTORY:\n <hash1> <message1>\n <hash2> <message2>\n ...\n\nNEXT STEPS:\n - git push [--force-with-lease]\n - Create PR if ready\n```\n</verification>";
package/dist/index.js CHANGED
@@ -71149,6 +71149,7 @@ function createAnthropicContextWindowLimitRecoveryHook(ctx, options) {
71149
71149
  }
71150
71150
  // src/hooks/think-mode/detector.ts
71151
71151
  var MULTILINGUAL_KEYWORDS = [
71152
+ "\u6DF1\u601D\u719F\u8651",
71152
71153
  "\uC0DD\uAC01",
71153
71154
  "\uAC80\uD1A0",
71154
71155
  "\uC81C\uB300\uB85C",
@@ -79512,13 +79513,13 @@ git log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD
79512
79513
 
79513
79514
  \`\`\`
79514
79515
  Count from git log -30:
79515
- - Korean characters: N commits
79516
- - English only: M commits
79517
- - Mixed: K commits
79516
+ - Chinese characters (\\u4e00-\\u9fff): N commits
79517
+ - English only: K commits
79518
+ - Mixed: L commits
79518
79519
 
79519
79520
  DECISION:
79520
- - If Korean >= 50% -> KOREAN
79521
- - If English >= 50% -> ENGLISH
79521
+ - If Chinese >= 50% -> CHINESE
79522
+ - If English >= 50% -> ENGLISH
79522
79523
  - If Mixed -> Use MAJORITY language
79523
79524
  \`\`\`
79524
79525
 
@@ -79552,9 +79553,9 @@ STYLE DETECTION RESULT
79552
79553
  ======================
79553
79554
  Analyzed: 30 commits from git log
79554
79555
 
79555
- Language: [KOREAN | ENGLISH]
79556
- - Korean commits: N (X%)
79557
- - English commits: M (Y%)
79556
+ Language: [CHINESE | ENGLISH]
79557
+ - Chinese commits: N (X%)
79558
+ - English commits: K (Z%)
79558
79559
 
79559
79560
  Style: [SEMANTIC | PLAIN | SENTENCE | SHORT]
79560
79561
  - Semantic (feat:, fix:, etc): N (X%)
@@ -79908,18 +79909,18 @@ git log -1 --oneline
79908
79909
  **Based on COMMIT_CONFIG from Phase 1:**
79909
79910
 
79910
79911
  \`\`\`
79911
- IF style == SEMANTIC AND language == KOREAN:
79912
- -> "feat: \uB85C\uADF8\uC778 \uAE30\uB2A5 \uCD94\uAC00"
79912
+ IF style == SEMANTIC AND language == CHINESE:
79913
+ -> "feat: \u6DFB\u52A0\u767B\u5F55\u529F\u80FD"
79913
79914
 
79914
79915
  IF style == SEMANTIC AND language == ENGLISH:
79915
79916
  -> "feat: add login feature"
79916
-
79917
- IF style == PLAIN AND language == KOREAN:
79918
- -> "\uB85C\uADF8\uC778 \uAE30\uB2A5 \uCD94\uAC00"
79919
-
79917
+
79918
+ IF style == PLAIN AND language == CHINESE:
79919
+ -> "\u6DFB\u52A0\u767B\u5F55\u529F\u80FD"
79920
+
79920
79921
  IF style == PLAIN AND language == ENGLISH:
79921
79922
  -> "Add login feature"
79922
-
79923
+
79923
79924
  IF style == SHORT:
79924
79925
  -> "format" / "type fix" / "lint"
79925
79926
  \`\`\`
@@ -96880,14 +96881,14 @@ var ALLOWED_AGENTS = [
96880
96881
  "momus",
96881
96882
  "multimodal-looker"
96882
96883
  ];
96883
- var CALL_OMO_AGENT_DESCRIPTION = `Spawn explore/librarian agent or custom agents. run_in_background REQUIRED (true=async with task_id, false=sync).
96884
+ var CALL_OMO_AGENT_DESCRIPTION = `\u542F\u52A8 explore/librarian \u4EE3\u7406\u6216\u81EA\u5B9A\u4E49\u4EE3\u7406\u3002\u5FC5\u987B\u63D0\u4F9B run_in_background (true=\u5F02\u6B65\u8FD4\u56DE task_id, false=\u540C\u6B65)\u3002
96884
96885
 
96885
- Built-in agents:
96886
+ \u5185\u7F6E\u4EE3\u7406:
96886
96887
  {agents}
96887
96888
 
96888
- Custom agents registered via user or project agent directories are also supported.
96889
+ \u4E5F\u652F\u6301\u901A\u8FC7\u7528\u6237\u6216\u9879\u76EE\u4EE3\u7406\u76EE\u5F55\u6CE8\u518C\u7684\u81EA\u5B9A\u4E49\u4EE3\u7406\u3002
96889
96890
 
96890
- Pass \`session_id=<id>\` to continue previous agent with full context. Nested subagent depth is tracked automatically and blocked past the configured limit. Prompts MUST be in English. Use \`background_output\` for async results.`;
96891
+ \u4F20\u9012 \`session_id=<id>\` \u53EF\u7EE7\u7EED\u4E4B\u524D\u7684\u4EE3\u7406\u5E76\u4FDD\u7559\u5B8C\u6574\u4E0A\u4E0B\u6587\u3002\u5D4C\u5957 subagent \u6DF1\u5EA6\u81EA\u52A8\u8FFD\u8E2A\uFF0C\u8D85\u8FC7\u914D\u7F6E\u9650\u5236\u540E\u4F1A\u88AB\u963B\u6B62\u3002\u4F7F\u7528 \`background_output\` \u83B7\u53D6\u5F02\u6B65\u7ED3\u679C\u3002**\u63D0\u793A\u8BCD\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587,\u4E0D\u5F97\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\u3002**`;
96891
96892
  // src/tools/call-omo-agent/tools.ts
96892
96893
  init_agent_display_names();
96893
96894
 
@@ -98186,10 +98187,10 @@ var FREE_OR_LOCAL_PROMPT_TOKEN_LIMIT = 24000;
98186
98187
  var PLAN_AGENT_PROMPT_BASE = `
98187
98188
 
98188
98189
  Additional requirements for this planning request:
98189
- - Answer in English.
98190
- - Write the plan in English.
98191
- - Plan well for ultrawork execution.
98192
- - Include a clear atomic commit strategy.`;
98190
+ - \u4F7F\u7528\u4E2D\u6587\u56DE\u7B54\u3002
98191
+ - \u4F7F\u7528\u4E2D\u6587\u64B0\u5199\u8BA1\u5212\u3002
98192
+ - \u4E3A\u9AD8\u6548\u5DE5\u4F5C\u505A\u597D\u89C4\u5212\u3002
98193
+ - \u5305\u542B\u6E05\u6670\u7684\u539F\u5B50\u5316\u63D0\u4EA4\u7B56\u7565\u3002`;
98193
98194
  var TDD_LINE = "- Use TDD-oriented planning.";
98194
98195
  function buildPlanAgentPromptAppend(tddEnabled) {
98195
98196
  if (tddEnabled) {
@@ -100604,46 +100605,46 @@ function createDelegateTaskPresentation(options) {
100604
100605
  return description2 ? ` - ${name}: ${description2}` : ` - ${name}`;
100605
100606
  }).join(`
100606
100607
  `);
100607
- const description = `Spawn agent task with category-based or direct agent selection.
100608
-
100609
- \u26A0\uFE0F CRITICAL: You MUST provide EITHER category OR subagent_type. Omitting BOTH will FAIL.
100610
-
100611
- **COMMON MISTAKE (DO NOT DO THIS):**
100608
+ const description = `\u57FA\u4E8E\u5206\u7C7B\u6216\u76F4\u63A5\u4EE3\u7406\u9009\u62E9\u7684\u4EFB\u52A1\u521B\u5EFA\u3002
100609
+
100610
+ \u26A0\uFE0F \u91CD\u8981: \u5FC5\u987B\u63D0\u4F9B category \u6216 subagent_type \u4E4B\u4E00\u3002\u4E24\u8005\u90FD\u7701\u7565\u5C06\u5BFC\u81F4\u5931\u8D25\u3002
100611
+
100612
+ **\u5E38\u89C1\u9519\u8BEF (\u8BF7\u52FF\u8FD9\u6837\u505A):**
100612
100613
  \`\`\`
100613
- task(description="...", prompt="...", run_in_background=false) // \u274C FAILS - missing category AND subagent_type
100614
+ task(description="...", prompt="...", run_in_background=false) // \u274C \u5931\u8D25 - \u7F3A\u5C11 category \u548C subagent_type
100614
100615
  \`\`\`
100615
-
100616
- **CORRECT - Using category:**
100616
+
100617
+ **\u6B63\u786E\u7528\u6CD5 - \u4F7F\u7528 category:**
100617
100618
  \`\`\`
100618
- task(category="quick", load_skills=[], description="Fix type error", prompt="...", run_in_background=false)
100619
+ task(category="quick", load_skills=[], description="\u4FEE\u590D\u7C7B\u578B\u9519\u8BEF", prompt="...", run_in_background=false)
100619
100620
  \`\`\`
100620
-
100621
- **CORRECT - Using subagent_type:**
100621
+
100622
+ **\u6B63\u786E\u7528\u6CD5 - \u4F7F\u7528 subagent_type:**
100622
100623
  \`\`\`
100623
- task(subagent_type="explore", load_skills=[], description="Find patterns", prompt="...", run_in_background=true)
100624
+ task(subagent_type="explore", load_skills=[], description="\u67E5\u627E\u6A21\u5F0F", prompt="...", run_in_background=true)
100624
100625
  \`\`\`
100625
-
100626
- REQUIRED: Provide ONE of:
100627
- - category: For task delegation (uses Sisyphus-Junior with category-optimized model)
100628
- - subagent_type: For direct agent invocation (explore, librarian, oracle, etc.)
100629
-
100630
- **DO NOT provide both.** If category is provided, subagent_type is ignored.
100631
-
100632
- - load_skills: ALWAYS REQUIRED. Pass [] if no skills needed, or ["skill-1", "skill-2"] for category tasks.
100633
- - category: Use predefined category \u2192 Spawns Sisyphus-Junior with category config
100634
- Available categories:
100626
+
100627
+ \u5FC5\u987B\u63D0\u4F9B\u4EE5\u4E0B\u4E4B\u4E00:
100628
+ - category: \u4EFB\u52A1\u59D4\u6258 (\u4F7F\u7528 Sisyphus-Junior \u53CA\u5206\u7C7B\u4F18\u5316\u6A21\u578B)
100629
+ - subagent_type: \u76F4\u63A5\u8C03\u7528\u4EE3\u7406 (explore, librarian, oracle \u7B49)
100630
+
100631
+ **\u4E0D\u8981\u540C\u65F6\u63D0\u4F9B\u4E24\u8005\u3002** \u5982\u679C\u63D0\u4F9B\u4E86 category\uFF0C\u5219 subagent_type \u4F1A\u88AB\u5FFD\u7565\u3002
100632
+
100633
+ - load_skills: \u59CB\u7EC8\u5FC5\u987B\u3002\u65E0\u9700\u6280\u80FD\u65F6\u4F20\u9012 []\uFF0C\u5206\u7C7B\u4EFB\u52A1\u53EF\u4F20\u9012 ["skill-1", "skill-2"]\u3002
100634
+ - category: \u4F7F\u7528\u9884\u5B9A\u4E49\u5206\u7C7B \u2192 \u542F\u52A8 Sisyphus-Junior \u5E76\u5E94\u7528\u5206\u7C7B\u914D\u7F6E
100635
+ \u53EF\u7528\u5206\u7C7B:
100635
100636
  ${categoryList}
100636
- - subagent_type: Use specific agent directly (explore, librarian, oracle, metis, momus)
100637
- - run_in_background: REQUIRED. true=async (returns task_id), false=sync (waits). Use background=true ONLY for parallel exploration with 5+ independent queries.
100638
- - task_id: Existing task to continue (from previous task output). Continues the same subagent session with FULL CONTEXT PRESERVED.
100639
- - command: The command that triggered this task (optional, for slash command tracking).
100640
-
100641
- **WHEN TO USE task_id:**
100642
- - Task failed/incomplete \u2192 task_id with "fix: [specific issue]"
100643
- - Need follow-up on previous result \u2192 task_id with additional question
100644
- - Multi-turn conversation with same agent \u2192 always task_id instead of new task
100645
-
100646
- Prompts MUST be in English.`;
100637
+ - subagent_type: \u76F4\u63A5\u4F7F\u7528\u6307\u5B9A\u4EE3\u7406 (explore, librarian, oracle, metis, momus)
100638
+ - run_in_background: \u5FC5\u987B\u63D0\u4F9B\u3002true=\u5F02\u6B65 (\u8FD4\u56DE task_id), false=\u540C\u6B65 (\u7B49\u5F85\u7ED3\u679C)\u3002\u4EC5\u5728\u5E76\u884C\u63A2\u7D22 (5+ \u4E2A\u72EC\u7ACB\u67E5\u8BE2) \u65F6\u4F7F\u7528 background=true\u3002
100639
+ - task_id: \u7EE7\u7EED\u73B0\u6709\u4EFB\u52A1 (\u6765\u81EA\u4E4B\u524D\u7684\u4EFB\u52A1\u8F93\u51FA)\u3002\u7EE7\u7EED\u540C\u4E00 subagent \u4F1A\u8BDD\uFF0C\u5B8C\u6574\u4FDD\u7559\u4E0A\u4E0B\u6587\u3002
100640
+ - command: \u89E6\u53D1\u6B64\u4EFB\u52A1\u7684\u547D\u4EE4 (\u53EF\u9009\uFF0C\u7528\u4E8E\u659C\u6760\u547D\u4EE4\u8FFD\u8E2A)\u3002
100641
+
100642
+ **\u4F55\u65F6\u4F7F\u7528 task_id:**
100643
+ - \u4EFB\u52A1\u5931\u8D25/\u4E0D\u5B8C\u6574 \u2192 \u4F7F\u7528 task_id \u5E76\u9644\u5E26 "fix: [\u5177\u4F53\u95EE\u9898]"
100644
+ - \u9700\u8981\u8DDF\u8FDB\u4E4B\u524D\u7684\u7ED3\u679C \u2192 \u4F7F\u7528 task_id \u5E76\u63D0\u51FA\u989D\u5916\u95EE\u9898
100645
+ - \u4E0E\u540C\u4E00\u4EE3\u7406\u7684\u591A\u8F6E\u5BF9\u8BDD \u2192 \u59CB\u7EC8\u4F7F\u7528 task_id \u800C\u975E\u65B0\u5EFA\u4EFB\u52A1
100646
+
100647
+ **\u63D0\u793A\u8BCD\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587,\u4E0D\u8981\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\u3002**`;
100647
100648
  return {
100648
100649
  availableCategories,
100649
100650
  availableSkills,
@@ -120313,22 +120314,22 @@ No todos on multi-step work = INCOMPLETE WORK. The user tracks your progress thr
120313
120314
  }
120314
120315
  // src/agents/env-context.ts
120315
120316
  var LANGUAGE_GUIDANCE = {
120316
- "zh-CN": "Language Guidance: Respond in Chinese unless explicitly requested otherwise",
120317
- "zh-TW": "Language Guidance: Respond in Traditional Chinese unless explicitly requested otherwise",
120318
- "ja-JP": "Language Guidance: Respond in Japanese unless explicitly requested otherwise",
120319
- "ko-KR": "Language Guidance: Respond in Korean unless explicitly requested otherwise",
120320
- "fr-FR": "Language Guidance: Respond in French unless explicitly requested otherwise",
120321
- "de-DE": "Language Guidance: Respond in German unless explicitly requested otherwise",
120322
- "es-ES": "Language Guidance: Respond in Spanish unless explicitly requested otherwise",
120323
- "pt-BR": "Language Guidance: Respond in Portuguese unless explicitly requested otherwise",
120324
- "ru-RU": "Language Guidance: Respond in Russian unless explicitly requested otherwise",
120325
- "vi-VN": "Language Guidance: Respond in Vietnamese unless explicitly requested otherwise",
120326
- "th-TH": "Language Guidance: Respond in Thai unless explicitly requested otherwise",
120327
- "id-ID": "Language Guidance: Respond in Indonesian unless explicitly requested otherwise",
120328
- "ms-MY": "Language Guidance: Respond in Malay unless explicitly requested otherwise",
120329
- "hi-IN": "Language Guidance: Respond in Hindi unless explicitly requested otherwise",
120330
- "ar-SA": "Language Guidance: Respond in Arabic unless explicitly requested otherwise",
120331
- "he-IL": "Language Guidance: Respond in Hebrew unless explicitly requested otherwise"
120317
+ "zh-CN": "\u8BED\u8A00\u6307\u5F15: \u9664\u975E\u660E\u786E\u8981\u6C42\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\uFF0C\u5426\u5219\u8BF7\u4F7F\u7528\u4E2D\u6587\u56DE\u590D",
120318
+ "zh-TW": "\u8A9E\u8A00\u6307\u5F15: \u9664\u975E\u660E\u78BA\u8981\u6C42\u4F7F\u7528\u5176\u4ED6\u8A9E\u8A00\uFF0C\u5426\u5247\u8ACB\u4F7F\u7528\u7E41\u9AD4\u4E2D\u6587\u56DE\u8986",
120319
+ "ja-JP": "\u8A00\u8A9E\u30AC\u30A4\u30C0\u30F3\u30B9: \u660E\u793A\u7684\u306B\u8981\u6C42\u3055\u308C\u306A\u3044\u9650\u308A\u3001\u65E5\u672C\u8A9E\u8A9E\u3067\u5FDC\u7B54\u3057\u3066\u304F\u3060\u3055\u3044",
120320
+ "ko-KR": "\uC5B8\uC5B4 \uC9C0\uCE68: \uBCC4\uB3C4\uB85C \uC694\uCCAD\uD558\uC9C0 \uC54A\uB294 \uD55C \uD55C\uAD6D\uC5B4\uB85C \uC751\uB2F5\uD558\uC138\uC694",
120321
+ "fr-FR": "Guide linguistique: R\xE9pondez en fran\xE7ais sauf demande explicite",
120322
+ "de-DE": "Sprachleitfaden: Antworten Sie auf Deutsch, sofern nicht ausdr\xFCcklich anders angefordert",
120323
+ "es-ES": "Gu\xEDa de idioma: Responda en espa\xF1ol a menos que se solicite expl\xEDcitamente lo contrario",
120324
+ "pt-BR": "Guia de idioma: Responda em portugu\xEAs, a menos que seja explicitamente solicitado o contr\xE1rio",
120325
+ "ru-RU": "\u042F\u0437\u044B\u043A\u043E\u0432\u043E\u0435 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0441\u0442\u0432\u043E: \u041E\u0442\u0432\u0435\u0447\u0430\u0439\u0442\u0435 \u043D\u0430 \u0440\u0443\u0441\u0441\u043A\u043E\u043C \u044F\u0437\u044B\u043A\u0435, \u0435\u0441\u043B\u0438 \u044F\u0432\u043D\u043E \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0438\u043D\u043E\u0435",
120326
+ "vi-VN": "H\u01B0\u1EDBng d\u1EABn ng\xF4n ng\u1EEF: Tr\u1EA3 l\u1EDDi b\u1EB1ng ti\u1EBFng Vi\u1EC7t tr\u1EEB khi c\xF3 y\xEAu c\u1EA7u r\xF5 r\xE0ng kh\xE1c",
120327
+ "th-TH": "\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E20\u0E32\u0E29\u0E32: \u0E15\u0E2D\u0E1A\u0E40\u0E1B\u0E47\u0E19\u0E20\u0E32\u0E29\u0E32\u0E44\u0E17\u0E22\u0E40\u0E27\u0E49\u0E19\u0E41\u0E15\u0E48\u0E08\u0E30\u0E23\u0E49\u0E2D\u0E07\u0E02\u0E2D\u0E40\u0E1B\u0E47\u0E19\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E2D\u0E37\u0E48\u0E19\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E0A\u0E31\u0E14\u0E40\u0E08\u0E19",
120328
+ "id-ID": "Panduan bahasa: Merespons dalam bahasa Indonesia kecuali diminta secara eksplisit",
120329
+ "ms-MY": "Panduan bahasa: Respons dalam bahasa Melayu melainkan dimohon\u5176\u4ED6\u8BED\u8A00",
120330
+ "hi-IN": "\u092D\u093E\u0937\u093E \u092E\u093E\u0930\u094D\u0917\u0926\u0930\u094D\u0936\u0928: \u091C\u092C \u0924\u0915 \u0938\u094D\u092A\u0937\u094D\u091F \u0930\u0942\u092A \u0938\u0947 \u0905\u0928\u0941\u0930\u094B\u0927 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E \u091C\u093E\u090F, \u0939\u093F\u0902\u0926\u0940 \u092E\u0947\u0902 \u0909\u0924\u094D\u0924\u0930 \u0926\u0947\u0902",
120331
+ "ar-SA": "\u062F\u0644\u064A\u0644 \u0627\u0644\u0644\u063A\u0629: \u0623\u062C\u0628 \u0628\u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0645\u0627 \u0644\u0645 \u064A\u064F\u0637\u0644\u0628 \u062E\u0644\u0627\u0641 \u0630\u0644\u0643 \u0635\u0631\u0627\u062D\u0629\u064B",
120332
+ "he-IL": "\u05DE\u05D3\u05E8\u05D9\u05DA \u05E9\u05E4\u05D4: \u05D4\u05E9\u05D1 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA \u05D0\u05DC\u05D0 \u05D0\u05DD \u05E0\u05D3\u05E8\u05E9 \u05D0\u05D7\u05E8\u05EA \u05D1\u05DE\u05E4\u05D5\u05E8\u05E9"
120332
120333
  };
120333
120334
  function createEnvContext(language) {
120334
120335
  const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
@@ -120339,6 +120340,11 @@ function createEnvContext(language) {
120339
120340
  if (guidance) {
120340
120341
  lines.push(guidance);
120341
120342
  }
120343
+ } else {
120344
+ const chineseGuidance = LANGUAGE_GUIDANCE["zh-CN"];
120345
+ if (chineseGuidance) {
120346
+ lines.push(chineseGuidance);
120347
+ }
120342
120348
  }
120343
120349
  return `
120344
120350
  <omo-env>
@@ -130764,7 +130770,7 @@ class PostHog extends PostHogBackendClient {
130764
130770
  // package.json
130765
130771
  var package_default = {
130766
130772
  name: "@skj1724/oh-my-opencode",
130767
- version: "3.18.6",
130773
+ version: "3.18.8",
130768
130774
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
130769
130775
  main: "./dist/index.js",
130770
130776
  types: "dist/index.d.ts",
@@ -1,2 +1,2 @@
1
1
  export declare const ALLOWED_AGENTS: readonly ["explore", "librarian", "oracle", "hephaestus", "metis", "momus", "multimodal-looker"];
2
- export declare const CALL_OMO_AGENT_DESCRIPTION = "Spawn explore/librarian agent or custom agents. run_in_background REQUIRED (true=async with task_id, false=sync).\n\nBuilt-in agents:\n{agents}\n\nCustom agents registered via user or project agent directories are also supported.\n\nPass `session_id=<id>` to continue previous agent with full context. Nested subagent depth is tracked automatically and blocked past the configured limit. Prompts MUST be in English. Use `background_output` for async results.";
2
+ export declare const CALL_OMO_AGENT_DESCRIPTION = "\u542F\u52A8 explore/librarian \u4EE3\u7406\u6216\u81EA\u5B9A\u4E49\u4EE3\u7406\u3002\u5FC5\u987B\u63D0\u4F9B run_in_background (true=\u5F02\u6B65\u8FD4\u56DE task_id, false=\u540C\u6B65)\u3002\n\n\u5185\u7F6E\u4EE3\u7406:\n{agents}\n\n\u4E5F\u652F\u6301\u901A\u8FC7\u7528\u6237\u6216\u9879\u76EE\u4EE3\u7406\u76EE\u5F55\u6CE8\u518C\u7684\u81EA\u5B9A\u4E49\u4EE3\u7406\u3002\n\n\u4F20\u9012 `session_id=<id>` \u53EF\u7EE7\u7EED\u4E4B\u524D\u7684\u4EE3\u7406\u5E76\u4FDD\u7559\u5B8C\u6574\u4E0A\u4E0B\u6587\u3002\u5D4C\u5957 subagent \u6DF1\u5EA6\u81EA\u52A8\u8FFD\u8E2A\uFF0C\u8D85\u8FC7\u914D\u7F6E\u9650\u5236\u540E\u4F1A\u88AB\u963B\u6B62\u3002\u4F7F\u7528 `background_output` \u83B7\u53D6\u5F02\u6B65\u7ED3\u679C\u3002**\u63D0\u793A\u8BCD\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587,\u4E0D\u5F97\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\u3002**";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skj1724/oh-my-opencode",
3
- "version": "3.18.6",
3
+ "version": "3.18.8",
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",
@@ -1,5 +0,0 @@
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>;