@skj1724/oh-my-opencode 3.17.13 → 3.17.16

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.
Files changed (78) hide show
  1. package/dist/agents/atlas/default-prompt-sections.d.ts +6 -6
  2. package/dist/agents/atlas/gemini-prompt-sections.d.ts +6 -6
  3. package/dist/agents/atlas/gpt-prompt-sections.d.ts +6 -6
  4. package/dist/agents/atlas/prompt-section-builder.d.ts +3 -2
  5. package/dist/agents/gpt-apply-patch-guard.d.ts +1 -1
  6. package/dist/agents/hephaestus/gpt-5-3-codex.d.ts +9 -9
  7. package/dist/agents/metis.d.ts +7 -7
  8. package/dist/agents/momus.d.ts +6 -6
  9. package/dist/agents/prometheus/behavioral-summary.d.ts +3 -3
  10. package/dist/agents/prometheus/gemini.d.ts +7 -7
  11. package/dist/agents/prometheus/gpt.d.ts +6 -6
  12. package/dist/agents/prometheus/high-accuracy-mode.d.ts +3 -3
  13. package/dist/agents/prometheus/identity-constraints.d.ts +4 -3
  14. package/dist/agents/prometheus/interview-mode.d.ts +3 -3
  15. package/dist/agents/prometheus/plan-generation.d.ts +4 -4
  16. package/dist/agents/prometheus/plan-template.d.ts +4 -4
  17. package/dist/agents/sisyphus/default.d.ts +2 -2
  18. package/dist/agents/sisyphus/gemini.d.ts +10 -10
  19. package/dist/agents/sisyphus/gpt-5-4.d.ts +18 -18
  20. package/dist/agents/sisyphus-junior/gemini.d.ts +6 -6
  21. package/dist/agents/sisyphus-junior/gpt-5-3-codex.d.ts +4 -4
  22. package/dist/agents/sisyphus-junior/gpt-5-4.d.ts +7 -7
  23. package/dist/agents/sisyphus-junior/gpt.d.ts +5 -5
  24. package/dist/cli/index.js +254 -59
  25. package/dist/features/builtin-commands/templates/handoff.d.ts +1 -1
  26. package/dist/features/builtin-commands/templates/init-deep.d.ts +1 -1
  27. package/dist/features/builtin-commands/templates/ralph-loop.d.ts +3 -3
  28. package/dist/features/builtin-commands/templates/refactor.d.ts +1 -1
  29. package/dist/features/builtin-commands/templates/remove-ai-slops.d.ts +1 -1
  30. package/dist/features/builtin-commands/templates/start-work.d.ts +1 -1
  31. package/dist/features/builtin-commands/templates/stop-continuation.d.ts +1 -1
  32. package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +1 -1
  33. package/dist/features/builtin-skills/skills/git-master-sections/history-search-workflow.d.ts +1 -1
  34. package/dist/features/builtin-skills/skills/git-master-sections/overview.d.ts +1 -1
  35. package/dist/features/builtin-skills/skills/git-master-sections/quick-reference.d.ts +1 -1
  36. package/dist/features/builtin-skills/skills/git-master-sections/rebase-workflow.d.ts +1 -1
  37. package/dist/features/builtin-skills/skills/git-master-skill-metadata.d.ts +1 -1
  38. package/dist/features/builtin-skills/skills/playwright-cli.d.ts +5 -5
  39. package/dist/features/claude-code-command-loader/loader.d.ts +2 -0
  40. package/dist/features/tmux-subagent/event-handlers.d.ts +0 -4
  41. package/dist/features/tmux-subagent/index.d.ts +0 -3
  42. package/dist/features/tmux-subagent/manager.d.ts +4 -0
  43. package/dist/features/tmux-subagent/polling-manager.d.ts +2 -1
  44. package/dist/hooks/agent-usage-reminder/constants.d.ts +1 -1
  45. package/dist/hooks/atlas/system-reminder-templates.d.ts +2 -2
  46. package/dist/hooks/directory-agents-injector/finder.d.ts +1 -1
  47. package/dist/hooks/directory-readme-injector/finder.d.ts +1 -1
  48. package/dist/hooks/edit-error-recovery/hook.d.ts +1 -1
  49. package/dist/hooks/json-error-recovery/hook.d.ts +1 -1
  50. package/dist/hooks/keyword-detector/analyze/default.d.ts +1 -1
  51. package/dist/hooks/keyword-detector/search/default.d.ts +1 -1
  52. package/dist/hooks/rules-injector/cache.d.ts +5 -0
  53. package/dist/hooks/rules-injector/injector.d.ts +2 -0
  54. package/dist/hooks/rules-injector/project-root-finder.d.ts +1 -0
  55. package/dist/hooks/rules-injector/rule-file-finder.d.ts +2 -19
  56. package/dist/hooks/todo-continuation-enforcer/session-state.d.ts +1 -0
  57. package/dist/hooks/write-existing-file-guard/tool-execute-before-handler.d.ts +1 -1
  58. package/dist/index.js +8304 -7836
  59. package/dist/shared/index.d.ts +1 -0
  60. package/dist/shared/jsonc-parser.d.ts +8 -5
  61. package/dist/shared/load-opencode-plugins.d.ts +1 -0
  62. package/dist/shared/project-discovery-dirs.d.ts +2 -0
  63. package/dist/shared/tmux/tmux-utils/session-spawn.d.ts +1 -0
  64. package/dist/shared/tmux/tmux-utils.d.ts +3 -1
  65. package/dist/tools/background-task/constants.d.ts +3 -3
  66. package/dist/tools/call-omo-agent/constants.d.ts +1 -1
  67. package/dist/tools/delegate-task/constants.d.ts +2 -2
  68. package/dist/tools/hashline-edit/tool-description.d.ts +1 -1
  69. package/dist/tools/interactive-bash/constants.d.ts +1 -1
  70. package/dist/tools/look-at/constants.d.ts +1 -1
  71. package/dist/tools/session-manager/constants.d.ts +5 -5
  72. package/dist/tools/skill/constants.d.ts +2 -2
  73. package/dist/tools/skill/description-formatter.d.ts +1 -1
  74. package/dist/tools/skill-mcp/constants.d.ts +1 -1
  75. package/package.json +1 -1
  76. package/dist/features/tmux-subagent/cleanup.d.ts +0 -9
  77. package/dist/features/tmux-subagent/session-created-handler.d.ts +0 -22
  78. package/dist/features/tmux-subagent/session-deleted-handler.d.ts +0 -15
@@ -1 +1 @@
1
- export declare const REFACTOR_TEMPLATE = "# Intelligent Refactor Command / \u667A\u80FD\u91CD\u6784\u547D\u4EE4\n\n## Usage / \u4F7F\u7528\u65B9\u6CD5\n```\n/refactor <refactoring-target> [--scope=<file|module|project>] [--strategy=<safe|aggressive>]\n\nArguments / \u53C2\u6570:\n refactoring-target: \u8981\u91CD\u6784\u7684\u5185\u5BB9\u3002\u53EF\u4EE5\u662F:\n - File path / \u6587\u4EF6\u8DEF\u5F84: src/auth/handler.ts\n - Symbol name / \u7B26\u53F7\u540D: \"AuthService class\"\n - Pattern / \u6A21\u5F0F: \"all functions using deprecated API\"\n - Description / \u63CF\u8FF0: \"extract validation logic into separate module\"\n\nOptions / \u9009\u9879:\n --scope: \u91CD\u6784\u8303\u56F4 (\u9ED8\u8BA4: module)\n - file: \u4EC5\u5355\u4E2A\u6587\u4EF6\n - module: \u6A21\u5757/\u76EE\u5F55\u8303\u56F4\n - project: \u6574\u4E2A\u4EE3\u7801\u5E93\n\n --strategy: \u98CE\u9669\u5BB9\u5FCD\u5EA6 (\u9ED8\u8BA4: safe)\n - safe: \u4FDD\u5B88\uFF0C\u9700\u8981\u6700\u5927\u6D4B\u8BD5\u8986\u76D6\u7387\n - aggressive: \u5141\u8BB8\u66F4\u5E7F\u6CDB\u7684\u66F4\u6539\uFF0C\u6709\u8DB3\u591F\u7684\u8986\u76D6\u7387\n```\n\n## \u6B64\u547D\u4EE4\u7684\u4F5C\u7528\n\n\u6267\u884C\u5177\u6709\u5B8C\u6574\u4EE3\u7801\u5E93\u611F\u77E5\u80FD\u529B\u7684\u667A\u80FD\u3001\u786E\u5B9A\u6027\u91CD\u6784\u3002\u4E0E\u76F2\u76EE\u641C\u7D22\u66FF\u6362\u4E0D\u540C\uFF0C\u6B64\u547D\u4EE4:\n\n1. **\u7406\u89E3\u4F60\u7684\u610F\u56FE** - \u5206\u6790\u4F60\u5B9E\u9645\u60F3\u8981\u5B9E\u73B0\u4EC0\u4E48\n2. **\u6620\u5C04\u4EE3\u7801\u5E93** - \u5728\u89E6\u78B0\u4EFB\u4F55\u5185\u5BB9\u4E4B\u524D\u6784\u5EFA\u786E\u5B9A\u7684 codemap\n3. **\u8BC4\u4F30\u98CE\u9669** - \u8BC4\u4F30\u6D4B\u8BD5\u8986\u76D6\u7387\u5E76\u786E\u5B9A\u9A8C\u8BC1\u7B56\u7565\n4. **\u7CBE\u5FC3\u8BA1\u5212** - \u4F7F\u7528 Plan agent \u521B\u5EFA\u8BE6\u7EC6\u8BA1\u5212\n5. **\u7CBE\u786E\u6267\u884C** - \u4F7F\u7528 LSP \u548C AST-grep \u8FDB\u884C\u9010\u6B65\u91CD\u6784\n6. **\u6301\u7EED\u9A8C\u8BC1** - \u6BCF\u6B21\u66F4\u6539\u540E\u8FD0\u884C\u6D4B\u8BD5\u4EE5\u786E\u4FDD\u96F6\u56DE\u5F52\n\n---\n\n# PHASE 0: \u610F\u56FE\u95E8 (\u5F3A\u5236\u7B2C\u4E00\u6B65)\n\n**\u5728\u4EFB\u4F55\u884C\u52A8\u4E4B\u524D\uFF0C\u5BF9\u8BF7\u6C42\u8FDB\u884C\u5206\u7C7B\u548C\u9A8C\u8BC1\u3002**\n\n## Step 0.1: \u89E3\u6790\u8BF7\u6C42\u7C7B\u578B\n\n| Signal / \u4FE1\u53F7 | Classification / \u5206\u7C7B | Action / \u884C\u52A8 |\n|--------|----------------|--------|\n| Specific file/symbol / \u7279\u5B9A\u6587\u4EF6/\u7B26\u53F7 | Explicit / \u660E\u786E | \u7EE7\u7EED\u4EE3\u7801\u5E93\u5206\u6790 |\n| \"Refactor X to Y\" | Clear transformation / \u6E05\u6670\u7684\u8F6C\u6362 | \u7EE7\u7EED\u4EE3\u7801\u5E93\u5206\u6790 |\n| \"Improve\", \"Clean up\" | Open-ended / \u5F00\u653E | **\u5FC5\u987B\u95EE**: \"What specific improvement? / \u5177\u4F53\u60F3\u6539\u8FDB\u4EC0\u4E48\uFF1F\" |\n| Ambiguous scope / \u8303\u56F4\u6A21\u7CCA | Uncertain / \u4E0D\u786E\u5B9A | **\u5FC5\u987B\u95EE**: \"Which modules/files? / \u54EA\u4E9B\u6A21\u5757/\u6587\u4EF6\uFF1F\" |\n| Missing context / \u7F3A\u5C11\u4E0A\u4E0B\u6587 | Incomplete / \u4E0D\u5B8C\u6574 | **\u5FC5\u987B\u95EE**: \"What's the desired outcome? / \u671F\u671B\u7684\u7ED3\u679C\u662F\u4EC0\u4E48\uFF1F\" |\n\n## Step 0.2: \u9A8C\u8BC1\u7406\u89E3\n\n\u5728\u7EE7\u7EED\u4E4B\u524D\uFF0C\u786E\u8BA4:\n- [ ] \u76EE\u6807\u5DF2\u660E\u786E\u8BC6\u522B\n- [ ] \u671F\u671B\u7684\u7ED3\u679C\u5DF2\u7406\u89E3\n- [ ] \u8303\u56F4\u5DF2\u5B9A\u4E49 (file/module/project)\n- [ ] \u53EF\u4EE5\u9610\u8FF0\u6210\u529F\u6807\u51C6\n\n**\u5982\u679C\u4E0A\u8FF0\u4EFB\u4F55\u4E00\u9879\u4E0D\u6E05\u6670\uFF0C\u8BF7\u95EE\u6F84\u6E05\u95EE\u9898:**\n\n```\n\u6211\u60F3\u786E\u8BA4\u6211\u6B63\u786E\u7406\u89E3\u4E86\u91CD\u6784\u76EE\u6807\u3002\n\n**\u6211\u7406\u89E3\u7684**: [interpretation / \u89E3\u91CA]\n**\u6211\u4E0D\u786E\u5B9A\u7684**: [specific ambiguity / \u5177\u4F53\u6B67\u4E49]\n\n\u6211\u770B\u5230\u7684\u9009\u9879:\n1. [Option A] - [implications / \u5F71\u54CD]\n2. [Option B] - [implications / \u5F71\u54CD]\n\n**\u6211\u7684\u5EFA\u8BAE**: [suggestion with reasoning / \u5E26\u63A8\u7406\u7684\u5EFA\u8BAE]\n\n\u6211\u5E94\u8BE5\u6309 [recommendation / \u5EFA\u8BAE] \u8FDB\u884C\uFF0C\u8FD8\u662F\u4F60\u6709\u5176\u4ED6\u504F\u597D\uFF1F\n```\n\n## Step 0.3: \u521B\u5EFA\u521D\u59CB TODO\n\n**\u5728\u7406\u89E3\u8BF7\u6C42\u540E\uFF0C\u7ACB\u5373\u521B\u5EFA todos:**\n\n```\nTodoWrite([\n {\"id\": \"phase-1\", \"content\": \"PHASE 1: \u4EE3\u7801\u5E93\u5206\u6790 - \u542F\u52A8\u5E76\u884C explore agents\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-2\", \"content\": \"PHASE 2: \u6784\u5EFA Codemap - \u6620\u5C04\u4F9D\u8D56\u5173\u7CFB\u548C\u5F71\u54CD\u533A\u57DF\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-3\", \"content\": \"PHASE 3: \u6D4B\u8BD5\u8BC4\u4F30 - \u5206\u6790\u6D4B\u8BD5\u8986\u76D6\u7387\u5E76\u786E\u5B9A\u9A8C\u8BC1\u7B56\u7565\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-4\", \"content\": \"PHASE 4: \u8BA1\u5212\u751F\u6210 - \u8C03\u7528 Plan agent \u751F\u6210\u8BE6\u7EC6\u91CD\u6784\u8BA1\u5212\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-5\", \"content\": \"PHASE 5: \u6267\u884C\u91CD\u6784 - \u9010\u6B65\u6267\u884C\u5E76\u6301\u7EED\u9A8C\u8BC1\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-6\", \"content\": \"PHASE 6: \u6700\u7EC8\u9A8C\u8BC1 - \u5B8C\u6574\u6D4B\u8BD5\u5957\u4EF6\u548C\u56DE\u5F52\u68C0\u67E5\", \"status\": \"pending\", \"priority\": \"high\"}\n])\n```\n\n---\n\n# PHASE 1: \u4EE3\u7801\u5E93\u5206\u6790 (\u5E76\u884C\u63A2\u7D22)\n\n**\u5C06 phase-1 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 1.1: \u542F\u52A8\u5E76\u884C Explore Agents (\u540E\u53F0)\n\n\u4F7F\u7528 `call_omo_agent` \u540C\u65F6\u89E6\u53D1\u6240\u6709\u8FD9\u4E9B:\n\n```\n// Agent 1: \u627E\u5230\u91CD\u6784\u76EE\u6807\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all occurrences and definitions of [TARGET].\n Report: file paths, line numbers, usage patterns.\"\n)\n\n// Agent 2: \u627E\u5230\u76F8\u5173\u4EE3\u7801\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all code that imports, uses, or depends on [TARGET].\n Report: dependency chains, import graphs.\"\n)\n\n// Agent 3: \u627E\u5230\u7C7B\u4F3C\u6A21\u5F0F\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find similar code patterns to [TARGET] in the codebase.\n Report: analogous implementations, established conventions.\"\n)\n\n// Agent 4: \u627E\u5230\u6D4B\u8BD5\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all test files related to [TARGET].\n Report: test file paths, test case names, coverage indicators.\"\n)\n\n// Agent 5: \u67B6\u6784\u4E0A\u4E0B\u6587\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find architectural patterns and module organization around [TARGET].\n Report: module boundaries, layer structure, design patterns in use.\"\n)\n```\n\n## 1.2: \u76F4\u63A5\u5DE5\u5177\u63A2\u7D22 (\u5F53 agents \u8FD0\u884C\u7684\u540C\u65F6)\n\n\u5F53\u540E\u53F0 agents \u8FD0\u884C\u65F6\uFF0C\u4F7F\u7528\u76F4\u63A5\u5DE5\u5177:\n\n### \u7528\u4E8E\u7CBE\u786E\u5206\u6790\u7684 LSP \u5DE5\u5177:\n\n```typescript\n// \u627E\u5230\u5B9A\u4E49\nLspGotoDefinition(filePath, line, character) // \u5B83\u5728\u54EA\u91CC\u5B9A\u4E49\uFF1F\n\n// \u5728\u6574\u4E2A\u5DE5\u4F5C\u533A\u627E\u5230\u6240\u6709\u7528\u6CD5\nLspFindReferences(filePath, line, character, includeDeclaration=true)\n\n// \u83B7\u53D6\u6587\u4EF6\u7ED3\u6784\nLspDocumentSymbols(filePath) // \u5C42\u7EA7\u5927\u7EB2\nLspWorkspaceSymbols(filePath, query=\"[target_symbol]\") // \u6309\u540D\u79F0\u641C\u7D22\n\n// \u83B7\u53D6\u5F53\u524D\u8BCA\u65AD\nlsp_diagnostics(filePath) // \u5F00\u59CB\u524D\u7684\u9519\u8BEF\u548C\u8B66\u544A\n```\n\n### \u7528\u4E8E\u6A21\u5F0F\u5206\u6790\u7684 AST-Grep:\n\n```typescript\n// \u627E\u5230\u7ED3\u6784\u6A21\u5F0F\nast_grep_search(\n pattern=\"function $NAME($$$) { $$$ }\", // \u6216\u76F8\u5173\u6A21\u5F0F\n lang=\"typescript\", // \u6216\u76F8\u5173\u8BED\u8A00\n paths=[\"src/\"]\n)\n\n// \u9884\u89C8\u91CD\u6784 (DRY RUN / \u8BD5\u8FD0\u884C)\nast_grep_replace(\n pattern=\"[old_pattern]\",\n rewrite=\"[new_pattern]\",\n lang=\"[language]\",\n dryRun=true // \u59CB\u7EC8\u5148\u9884\u89C8\n)\n```\n\n### \u7528\u4E8E\u6587\u672C\u6A21\u5F0F\u7684 Grep:\n\n```\ngrep(pattern=\"[search_term]\", path=\"src/\", include=\"*.ts\")\n```\n\n## 1.3: \u6536\u96C6\u540E\u53F0\u7ED3\u679C\n\n```\nbackground_output(task_id=\"[agent_1_id]\")\nbackground_output(task_id=\"[agent_2_id]\")\n...\n```\n\n**\u6536\u96C6\u6240\u6709\u7ED3\u679C\u540E\uFF0C\u5C06 phase-1 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# PHASE 2: \u6784\u5EFA CODEMAP (\u4F9D\u8D56\u6620\u5C04)\n\n**\u5C06 phase-2 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 2.1: \u6784\u5EFA\u786E\u5B9A\u7684 Codemap\n\n\u57FA\u4E8E Phase 1 \u7684\u7ED3\u679C\uFF0C\u6784\u5EFA:\n\n```\n## CODEMAP: [TARGET]\n\n### Core Files / \u6838\u5FC3\u6587\u4EF6 (Direct Impact / \u76F4\u63A5\u5F71\u54CD)\n- `path/to/file.ts:L10-L50` - Primary definition / \u4E3B\u8981\u5B9A\u4E49\n- `path/to/file2.ts:L25` - Key usage / \u5173\u952E\u7528\u6CD5\n\n### Dependency Graph / \u4F9D\u8D56\u56FE\n```\n[TARGET]\n\u251C\u2500\u2500 imports from:\n\u2502 \u251C\u2500\u2500 module-a (types)\n\u2502 \u2514\u2500\u2500 module-b (utils)\n\u251C\u2500\u2500 imported by:\n\u2502 \u251C\u2500\u2500 consumer-1.ts\n\u2502 \u251C\u2500\u2500 consumer-2.ts\n\u2502 \u2514\u2500\u2500 consumer-3.ts\n\u2514\u2500\u2500 used by:\n \u251C\u2500\u2500 handler.ts (direct call / \u76F4\u63A5\u8C03\u7528)\n \u2514\u2500\u2500 service.ts (dependency injection / \u4F9D\u8D56\u6CE8\u5165)\n```\n\n### Impact Zones / \u5F71\u54CD\u533A\u57DF\n| Zone / \u533A\u57DF | Risk Level / \u98CE\u9669\u7B49\u7EA7 | Files Affected / \u53D7\u5F71\u54CD\u6587\u4EF6 | Test Coverage / \u6D4B\u8BD5\u8986\u76D6\u7387 |\n|------|------------|----------------|---------------|\n| Core / \u6838\u5FC3 | HIGH / \u9AD8 | 3 files / 3 \u4E2A\u6587\u4EF6 | 85% covered / \u8986\u76D6 85% |\n| Consumers / \u6D88\u8D39\u8005 | MEDIUM / \u4E2D | 8 files / 8 \u4E2A\u6587\u4EF6 | 70% covered / \u8986\u76D6 70% |\n| Edge / \u8FB9\u7F18 | LOW / \u4F4E | 2 files / 2 \u4E2A\u6587\u4EF6 | 50% covered / \u8986\u76D6 50% |\n\n### Established Patterns / \u5DF2\u5EFA\u7ACB\u7684\u6A21\u5F0F\n- Pattern A: [description] - used in N places / \u5728 N \u5904\u4F7F\u7528\n- Pattern B: [description] - established convention / \u5DF2\u6709\u7EA6\u5B9A\n```\n\n## 2.2: \u8BC6\u522B\u91CD\u6784\u7EA6\u675F\n\n\u57FA\u4E8E codemap:\n- **\u5FC5\u987B\u9075\u5FAA**: [identified existing patterns / \u5DF2\u8BC6\u522B\u7684\u73B0\u6709\u6A21\u5F0F]\n- **\u4E0D\u5F97\u7834\u574F**: [critical dependencies / \u5173\u952E\u4F9D\u8D56]\n- **\u53EF\u4EE5\u5B89\u5168\u66F4\u6539**: [isolated code zones / \u9694\u79BB\u7684\u4EE3\u7801\u533A\u57DF]\n- **\u9700\u8981\u8FC1\u79FB**: [breaking changes impact / \u7834\u574F\u6027\u66F4\u6539\u5F71\u54CD]\n\n**\u5C06 phase-2 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# PHASE 3: \u6D4B\u8BD5\u8BC4\u4F30 (\u9A8C\u8BC1\u7B56\u7565)\n\n**\u5C06 phase-3 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 3.1: \u68C0\u6D4B\u6D4B\u8BD5\u57FA\u7840\u8BBE\u65BD\n\n```bash\n# Check for test commands / \u68C0\u67E5\u6D4B\u8BD5\u547D\u4EE4\ncat package.json | jq '.scripts | keys[] | select(test(\"test\"))'\n\n# Or for Python\nls -la pytest.ini pyproject.toml setup.cfg\n\n# Or for Go\nls -la *_test.go\n```\n\n## 3.2: \u5206\u6790\u6D4B\u8BD5\u8986\u76D6\u7387\n\n```\n// Find all tests related to target / \u627E\u5230\u6240\u6709\u4E0E\u76EE\u6807\u76F8\u5173\u7684\u6D4B\u8BD5\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=false, // Need this synchronously / \u9700\u8981\u540C\u6B65\u83B7\u53D6\n prompt=\"Analyze test coverage for [TARGET]:\n 1. Which test files cover this code? / \u54EA\u4E9B\u6D4B\u8BD5\u6587\u4EF6\u8986\u76D6\u6B64\u4EE3\u7801\uFF1F\n 2. What test cases exist? / \u5B58\u5728\u54EA\u4E9B\u6D4B\u8BD5\u7528\u4F8B\uFF1F\n 3. Are there integration tests? / \u6709\u96C6\u6210\u6D4B\u8BD5\u5417\uFF1F\n 4. What edge cases are tested? / \u6D4B\u8BD5\u4E86\u54EA\u4E9B\u8FB9\u754C\u60C5\u51B5\uFF1F\n 5. Estimated coverage percentage? / \u9884\u4F30\u8986\u76D6\u7387\uFF1F\"\n)\n```\n\n## 3.3: \u786E\u5B9A\u9A8C\u8BC1\u7B56\u7565\n\n\u57FA\u4E8E\u6D4B\u8BD5\u5206\u6790:\n\n| Coverage Level / \u8986\u76D6\u7387 | Strategy / \u7B56\u7565 |\n|----------------|----------|\n| HIGH (>80%) / \u9AD8 | \u6BCF\u6B21\u6B65\u9AA4\u540E\u8FD0\u884C\u73B0\u6709\u6D4B\u8BD5 |\n| MEDIUM (50-80%) / \u4E2D | \u8FD0\u884C\u6D4B\u8BD5 + \u6DFB\u52A0\u5B89\u5168\u65AD\u8A00 |\n| LOW (<50%) / \u4F4E | **\u6682\u505C**: \u5EFA\u8BAE\u5148\u6DFB\u52A0\u6D4B\u8BD5 |\n| NONE / \u65E0 | **\u963B\u6B62**: \u62D2\u7EDD\u6FC0\u8FDB\u91CD\u6784 |\n\n**\u5982\u679C\u8986\u76D6\u7387\u4F4E\u6216\u65E0\uFF0C\u95EE\u7528\u6237:**\n\n```\n[TARGET] \u7684\u6D4B\u8BD5\u8986\u76D6\u7387\u662F [LEVEL]\u3002\n\n**\u98CE\u9669\u8BC4\u4F30**: \u6CA1\u6709\u8DB3\u591F\u6D4B\u8BD5\u7684\u91CD\u6784\u662F\u5371\u9669\u7684\u3002\n\n\u9009\u9879:\n1. \u5148\u6DFB\u52A0\u6D4B\u8BD5\uFF0C\u7136\u540E\u91CD\u6784 (\u63A8\u8350 / RECOMMENDED)\n2. \u683C\u5916\u5C0F\u5FC3\u5730\u8FDB\u884C\uFF0C\u9700\u8981\u624B\u52A8\u9A8C\u8BC1\n3. \u4E2D\u6B62\u91CD\u6784\n\n\u4F60\u66F4\u559C\u6B22\u54EA\u79CD\u65B9\u6CD5\uFF1F\n```\n\n## 3.4: \u8BB0\u5F55\u9A8C\u8BC1\u8BA1\u5212\n\n```\n## \u9A8C\u8BC1\u8BA1\u5212 / VERIFICATION PLAN\n\n### Test Commands / \u6D4B\u8BD5\u547D\u4EE4\n- Unit / \u5355\u5143: `bun test` / `npm test` / `pytest` / \u7B49\u7B49\n- Integration / \u96C6\u6210: [command if exists / \u5982\u679C\u5B58\u5728\u5219\u586B\u5199]\n- Type check / \u7C7B\u578B\u68C0\u67E5: `tsc --noEmit` / `pyright` / \u7B49\u7B49\n\n### Verification Checkpoints / \u9A8C\u8BC1\u68C0\u67E5\u70B9\n\u6BCF\u6B21\u91CD\u6784\u6B65\u9AA4\u540E:\n1. lsp_diagnostics \u2192 \u96F6\u65B0\u589E\u9519\u8BEF\n2. \u8FD0\u884C\u6D4B\u8BD5\u547D\u4EE4 \u2192 \u5168\u90E8\u901A\u8FC7\n3. \u7C7B\u578B\u68C0\u67E5 \u2192 \u5E72\u51C0\n\n### Regression Indicators / \u56DE\u5F52\u6307\u6807\n- [\u5FC5\u987B\u901A\u8FC7\u7684\u7279\u5B9A\u6D4B\u8BD5]\n- [\u5FC5\u987B\u4FDD\u7559\u7684\u884C\u4E3A]\n- [\u4E0D\u5F97\u66F4\u6539\u7684 API \u5951\u7EA6]\n```\n\n**\u5C06 phase-3 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# PHASE 4: \u8BA1\u5212\u751F\u6210 (PLAN AGENT)\n\n**\u5C06 phase-4 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 4.1: \u8C03\u7528 Plan Agent\n\n```\nTask(\n subagent_type=\"plan\",\n prompt=\"Create a detailed refactoring plan:\n\n ## Refactoring Goal / \u91CD\u6784\u76EE\u6807\n [User's original request / \u7528\u6237\u539F\u59CB\u8BF7\u6C42]\n\n ## Codemap (from Phase 2)\n [Insert codemap here / \u5728\u6B64\u63D2\u5165 codemap]\n\n ## Test Coverage (from Phase 3)\n [Insert verification plan here / \u5728\u6B64\u63D2\u5165\u9A8C\u8BC1\u8BA1\u5212]\n\n ## Constraints / \u7EA6\u675F\n - MUST follow existing patterns: [list / \u5217\u8868]\n - MUST NOT break: [critical paths / \u5173\u952E\u8DEF\u5F84]\n - MUST run tests after each step / \u6BCF\u6B65\u540E\u5FC5\u987B\u8FD0\u884C\u6D4B\u8BD5\n\n ## Requirements / \u8981\u6C42\n 1. \u5206\u89E3\u4E3A\u539F\u5B50\u5316\u7684\u91CD\u6784\u6B65\u9AA4\n 2. \u6BCF\u4E2A\u6B65\u9AA4\u5FC5\u987B\u53EF\u72EC\u7ACB\u9A8C\u8BC1\n 3. \u6309\u4F9D\u8D56\u5173\u7CFB\u6392\u5E8F\u6B65\u9AA4 (\u4EC0\u4E48\u5FC5\u987B\u5148\u53D1\u751F)\n 4. \u4E3A\u6BCF\u4E2A\u6B65\u9AA4\u6307\u5B9A\u786E\u5207\u7684\u6587\u4EF6\u548C\u884C\u8303\u56F4\n 5. \u5305\u542B\u6BCF\u4E2A\u6B65\u9AA4\u7684\u56DE\u6EDA\u7B56\u7565\n 6. \u5B9A\u4E49\u63D0\u4EA4\u68C0\u67E5\u70B9\"\n)\n```\n\n## 4.2: \u5BA1\u67E5\u548C\u9A8C\u8BC1\u8BA1\u5212\n\n\u6536\u5230 Plan agent \u7684\u8BA1\u5212\u540E:\n\n1. **\u9A8C\u8BC1\u5B8C\u6574\u6027**: \u6240\u6709\u8BC6\u522B\u7684\u6587\u4EF6\u90FD\u5DF2\u5904\u7406\uFF1F\n2. **\u9A8C\u8BC1\u5B89\u5168\u6027**: \u6BCF\u4E2A\u6B65\u9AA4\u53EF\u9006\uFF1F\n3. **\u9A8C\u8BC1\u987A\u5E8F**: \u4F9D\u8D56\u5173\u7CFB\u88AB\u9075\u5B88\uFF1F\n4. **\u9A8C\u8BC1\u9A8C\u8BC1**: \u6307\u5B9A\u4E86\u6D4B\u8BD5\u547D\u4EE4\uFF1F\n\n## 4.3: \u6CE8\u518C\u8BE6\u7EC6 TODOs\n\n\u5C06 Plan agent \u8F93\u51FA\u8F6C\u6362\u4E3A\u7C92\u5EA6 todos:\n\n```\nTodoWrite([\n // Plan \u4E2D\u7684\u6BCF\u4E2A\u6B65\u9AA4\u53D8\u6210\u4E00\u4E2A todo\n {\"id\": \"refactor-1\", \"content\": \"Step 1: [description / \u63CF\u8FF0]\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"verify-1\", \"content\": \"Verify Step 1: run tests / \u9A8C\u8BC1\u6B65\u9AA4 1: \u8FD0\u884C\u6D4B\u8BD5\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"refactor-2\", \"content\": \"Step 2: [description / \u63CF\u8FF0]\", \"status\": \"pending\", \"priority\": \"medium\"},\n {\"id\": \"verify-2\", \"content\": \"Verify Step 2: run tests / \u9A8C\u8BC1\u6B65\u9AA4 2: \u8FD0\u884C\u6D4B\u8BD5\", \"status\": \"pending\", \"priority\": \"medium\"},\n // ... \u7EE7\u7EED\u6240\u6709\u6B65\u9AA4\n])\n```\n\n**\u5C06 phase-4 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# PHASE 5: \u6267\u884C\u91CD\u6784 (\u786E\u5B9A\u6027\u6267\u884C)\n\n**\u5C06 phase-5 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 5.1: \u6267\u884C\u534F\u8BAE\n\n\u5BF9\u4E8E\u6BCF\u4E2A\u91CD\u6784\u6B65\u9AA4:\n\n### Pre-Step / \u6B65\u9AA4\u524D\n1. \u5C06\u6B65\u9AA4 todo \u6807\u8BB0\u4E3A `in_progress`\n2. \u8BFB\u53D6\u5F53\u524D\u6587\u4EF6\u72B6\u6001\n3. \u9A8C\u8BC1 lsp_diagnostics \u662F\u57FA\u7EBF\n\n### Execute Step / \u6267\u884C\u6B65\u9AA4\n\u4F7F\u7528\u9002\u5F53\u7684\u5DE5\u5177:\n\n**\u5BF9\u4E8E\u7B26\u53F7\u91CD\u547D\u540D:**\n```typescript\nlsp_prepare_rename(filePath, line, character) // \u9A8C\u8BC1\u91CD\u547D\u540D\u662F\u5426\u53EF\u884C\nlsp_rename(filePath, line, character, newName) // \u6267\u884C\u91CD\u547D\u540D\n```\n\n**\u5BF9\u4E8E\u6A21\u5F0F\u8F6C\u6362:**\n```typescript\n// \u5148\u9884\u89C8\nast_grep_replace(pattern, rewrite, lang, dryRun=true)\n\n// \u5982\u679C\u9884\u89C8\u770B\u8D77\u6765\u4E0D\u9519\uFF0C\u6267\u884C\nast_grep_replace(pattern, rewrite, lang, dryRun=false)\n```\n\n**\u5BF9\u4E8E\u7ED3\u6784\u66F4\u6539:**\n```typescript\n// \u4F7F\u7528 Edit \u5DE5\u5177\u8FDB\u884C\u7CBE\u786E\u66F4\u6539\nedit(filePath, oldString, newString)\n```\n\n### Post-Step Verification / \u6B65\u9AA4\u540E\u9A8C\u8BC1 (\u5F3A\u5236)\n\n```typescript\n// 1. \u68C0\u67E5\u8BCA\u65AD\nlsp_diagnostics(filePath) // \u5FC5\u987B\u5E72\u51C0\u6216\u4E0E\u57FA\u7EBF\u76F8\u540C\n\n// 2. \u8FD0\u884C\u6D4B\u8BD5\nbash(\"bun test\") // \u6216\u9002\u5F53\u7684\u6D4B\u8BD5\u547D\u4EE4\n\n// 3. \u7C7B\u578B\u68C0\u67E5\nbash(\"tsc --noEmit\") // \u6216\u9002\u5F53\u7684\u7C7B\u578B\u68C0\u67E5\n```\n\n### Step Completion / \u6B65\u9AA4\u5B8C\u6210\n1. \u5982\u679C\u9A8C\u8BC1\u901A\u8FC7 \u2192 \u5C06\u6B65\u9AA4 todo \u6807\u8BB0\u4E3A `completed`\n2. \u5982\u679C\u9A8C\u8BC1\u5931\u8D25 \u2192 **\u505C\u6B62\u5E76\u4FEE\u590D**\n\n## 5.2: \u5931\u8D25\u6062\u590D\u534F\u8BAE\n\n\u5982\u679C\u4EFB\u4F55\u9A8C\u8BC1\u5931\u8D25:\n\n1. **\u7ACB\u5373\u505C\u6B62**\n2. **\u56DE\u6EDA**\u5931\u8D25\u7684\u66F4\u6539\n3. **\u8BCA\u65AD**\u51FA\u4E86\u4EC0\u4E48\u95EE\u9898\n4. **\u9009\u9879**:\n - \u4FEE\u590D\u95EE\u9898\u5E76\u91CD\u8BD5\n - \u8DF3\u8FC7\u6B64\u6B65\u9AA4 (\u5982\u679C\u662F\u53EF\u9009\u7684)\n - \u54A8\u8BE2 oracle agent \u5BFB\u6C42\u5E2E\u52A9\n - \u8BE2\u95EE\u7528\u6237\u6307\u5BFC\n\n**\u6D4B\u8BD5\u5931\u8D25\u65F6\u7EDD\u4E0D\u8981\u7EE7\u7EED\u4E0B\u4E00\u6B65\u3002**\n\n## 5.3: \u63D0\u4EA4\u68C0\u67E5\u70B9\n\n\u6BCF\u7EC4\u903B\u8F91\u66F4\u6539\u540E:\n\n```bash\ngit add [changed-files]\ngit commit -m \"refactor(scope): description\n\n[details of what was changed and why]\"\n```\n\n**\u6240\u6709\u91CD\u6784\u6B65\u9AA4\u5B8C\u6210\u540E\uFF0C\u5C06 phase-5 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# PHASE 6: \u6700\u7EC8\u9A8C\u8BC1 (\u56DE\u5F52\u68C0\u67E5)\n\n**\u5C06 phase-6 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 6.1: \u5B8C\u6574\u6D4B\u8BD5\u5957\u4EF6\n\n```bash\n# Run complete test suite / \u8FD0\u884C\u5B8C\u6574\u6D4B\u8BD5\u5957\u4EF6\nbun test # or npm test, pytest, go test, etc. / \u6216 npm test, pytest, go test \u7B49\n```\n\n## 6.2: \u7C7B\u578B\u68C0\u67E5\n\n```bash\n# Full type check / \u5B8C\u6574\u7C7B\u578B\u68C0\u67E5\ntsc --noEmit # or equivalent / \u6216\u7B49\u6548\u547D\u4EE4\n```\n\n## 6.3: Lint \u68C0\u67E5\n\n```bash\n# Run linter / \u8FD0\u884C linter\neslint . # or equivalent / \u6216\u7B49\u6548\u547D\u4EE4\n```\n\n## 6.4: \u6784\u5EFA\u9A8C\u8BC1 (\u5982\u679C\u9002\u7528)\n\n```bash\n# Ensure build still works / \u786E\u4FDD\u6784\u5EFA\u4ECD\u7136\u6B63\u5E38\nbun run build # or npm run build, etc. / \u6216 npm run build \u7B49\n```\n\n## 6.5: \u6700\u7EC8\u8BCA\u65AD\n\n```typescript\n// Check all changed files / \u68C0\u67E5\u6240\u6709\u66F4\u6539\u7684\u6587\u4EF6\nfor (file of changedFiles) {\n lsp_diagnostics(file) // Must all be clean / \u5FC5\u987B\u5168\u90E8\u5E72\u51C0\n}\n```\n\n## 6.6: \u751F\u6210\u6458\u8981\n\n```markdown\n## \u91CD\u6784\u5B8C\u6210 / Refactoring Complete\n\n### \u53D8\u66F4\u5185\u5BB9 / What Changed\n- [List of changes made / \u6240\u505A\u66F4\u6539\u7684\u5217\u8868]\n\n### \u4FEE\u6539\u7684\u6587\u4EF6 / Files Modified\n- `path/to/file.ts` - [what changed / \u6539\u53D8\u4E86\u4EC0\u4E48]\n- `path/to/file2.ts` - [what changed / \u6539\u53D8\u4E86\u4EC0\u4E48]\n\n### \u9A8C\u8BC1\u7ED3\u679C / Verification Results\n- Tests / \u6D4B\u8BD5: PASSED (X/Y passing / \u901A\u8FC7 X/Y)\n- Type Check / \u7C7B\u578B\u68C0\u67E5: CLEAN / \u5E72\u51C0\n- Lint: CLEAN / \u5E72\u51C0\n- Build / \u6784\u5EFA: SUCCESS / \u6210\u529F\n\n### \u672A\u68C0\u6D4B\u5230\u56DE\u5F52 / No Regressions Detected\nAll existing tests pass. No new errors introduced.\n\u6240\u6709\u73B0\u6709\u6D4B\u8BD5\u901A\u8FC7\u3002\u672A\u5F15\u5165\u65B0\u9519\u8BEF\u3002\n```\n\n**\u5C06 phase-6 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# \u5173\u952E\u89C4\u5219 / CRITICAL RULES\n\n## \u6C38\u8FDC\u4E0D\u8981\u505A / NEVER DO\n- Skip lsp_diagnostics check after changes / \u66F4\u6539\u540E\u8DF3\u8FC7 lsp_diagnostics \u68C0\u67E5\n- Proceed with failing tests / \u6D4B\u8BD5\u5931\u8D25\u65F6\u7EE7\u7EED\n- Make changes without understanding impact / \u4E0D\u4E86\u89E3\u5F71\u54CD\u5C31\u66F4\u6539\n- Use `as any`, `@ts-ignore`, `@ts-expect-error`\n- Delete tests to make them pass / \u5220\u9664\u6D4B\u8BD5\u4EE5\u4F7F\u5176\u901A\u8FC7\n- Commit broken code / \u63D0\u4EA4\u635F\u574F\u7684\u4EE3\u7801\n- Refactor without understanding existing patterns / \u4E0D\u4E86\u89E3\u73B0\u6709\u6A21\u5F0F\u5C31\u91CD\u6784\n\n## \u59CB\u7EC8\u8981\u505A / ALWAYS DO\n- Understand before changing / \u66F4\u6539\u524D\u5148\u7406\u89E3\n- Preview before applying (ast_grep dryRun=true) / \u5E94\u7528\u524D\u5148\u9884\u89C8\n- Verify after every change / \u6BCF\u6B21\u66F4\u6539\u540E\u9A8C\u8BC1\n- Follow existing codebase patterns / \u9075\u5FAA\u73B0\u6709\u4EE3\u7801\u5E93\u6A21\u5F0F\n- Keep todos updated in real-time / \u5B9E\u65F6\u66F4\u65B0 todos\n- Commit at logical checkpoints / \u5728\u903B\u8F91\u68C0\u67E5\u70B9\u63D0\u4EA4\n- Report issues immediately / \u7ACB\u5373\u62A5\u544A\u95EE\u9898\n\n## \u4E2D\u6B62\u6761\u4EF6 / ABORT CONDITIONS\n\u5982\u679C\u53D1\u751F\u4EE5\u4E0B\u4EFB\u4F55\u60C5\u51B5\uFF0C**\u505C\u6B62\u5E76\u54A8\u8BE2\u7528\u6237**:\n- \u6D4B\u8BD5\u8986\u76D6\u7387\u4E3A\u96F6 / Test coverage is zero for target code\n- \u66F4\u6539\u4F1A\u7834\u574F\u516C\u5171 API / Changes would break public API\n- \u91CD\u6784\u8303\u56F4\u4E0D\u660E\u786E / Refactoring scope is unclear\n- 3 \u6B21\u8FDE\u7EED\u9A8C\u8BC1\u5931\u8D25 / 3 consecutive verification failures\n- \u8FDD\u53CD\u7528\u6237\u5B9A\u4E49\u7684\u7EA6\u675F / User-defined constraints violated\n\n---\n\n# \u5DE5\u5177\u4F7F\u7528\u7406\u5FF5 / Tool Usage Philosophy\n\n\u4F60\u5DF2\u4E86\u89E3\u8FD9\u4E9B\u5DE5\u5177\u3002\u667A\u80FD\u5730\u4F7F\u7528\u5B83\u4EEC:\n\n## LSP \u5DE5\u5177\n\u5229\u7528 LSP \u5DE5\u5177\u8FDB\u884C\u7CBE\u786E\u5206\u6790\u3002\u5173\u952E\u6A21\u5F0F:\n- **\u66F4\u6539\u524D\u5148\u7406\u89E3**: `LspGotoDefinition` \u4EE5\u638C\u63E1\u4E0A\u4E0B\u6587\n- **\u5F71\u54CD\u5206\u6790**: \u4FEE\u6539\u524D\u4F7F\u7528 `LspFindReferences` \u6620\u5C04\u6240\u6709\u7528\u6CD5\n- **\u5B89\u5168\u91CD\u6784**: `lsp_prepare_rename` \u2192 `lsp_rename` \u7528\u4E8E\u7B26\u53F7\u91CD\u547D\u540D\n- **\u6301\u7EED\u9A8C\u8BC1**: \u6BCF\u6B21\u66F4\u6539\u540E\u4F7F\u7528 `lsp_diagnostics`\n\n## AST-Grep\n\u4F7F\u7528 `ast_grep_search` \u548C `ast_grep_replace` \u8FDB\u884C\u7ED3\u6784\u8F6C\u6362\u3002\n**\u5173\u952E**: \u59CB\u7EC8\u5148 `dryRun=true`\uFF0C\u5BA1\u67E5\uFF0C\u7136\u540E\u6267\u884C\u3002\n\n## Agents\n- `explore`: \u5E76\u884C\u4EE3\u7801\u5E93\u6A21\u5F0F\u53D1\u73B0\n- `plan`: \u8BE6\u7EC6\u91CD\u6784\u8BA1\u5212\u751F\u6210\n- `oracle`: \u7528\u4E8E\u590D\u6742\u67B6\u6784\u51B3\u7B56\u548C\u8C03\u8BD5\u7684\u53EA\u8BFB\u54A8\u8BE2\n- `librarian`: **\u4E3B\u52A8\u4F7F\u7528** \u5F53\u9047\u5230\u5DF2\u5F03\u7528\u7684\u65B9\u6CD5\u6216\u5E93\u8FC1\u79FB\u4EFB\u52A1\u65F6\u3002\u67E5\u8BE2\u5B98\u65B9\u6587\u6863\u548C OSS \u793A\u4F8B\u4EE5\u83B7\u53D6\u73B0\u4EE3\u66FF\u4EE3\u65B9\u6848\u3002\n\n## \u5DF2\u5F03\u7528\u4EE3\u7801\u548C\u5E93\u8FC1\u79FB\n\u5728\u91CD\u6784\u8FC7\u7A0B\u4E2D\u9047\u5230\u5DF2\u5F03\u7528\u7684\u65B9\u6CD5/API \u65F6:\n1. \u89E6\u53D1 `librarian` \u627E\u5230\u63A8\u8350\u7684\u73B0\u4EE3\u66FF\u4EE3\u65B9\u6848\n2. **\u4E0D\u8981\u81EA\u52A8\u5347\u7EA7\u5230\u6700\u65B0\u7248\u672C** \u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u8FC1\u79FB\n3. \u5982\u679C\u7528\u6237\u8981\u6C42\u5E93\u8FC1\u79FB\uFF0C\u5728\u8FDB\u884C\u66F4\u6539\u4E4B\u524D\u4F7F\u7528 `librarian` \u83B7\u53D6\u6700\u65B0 API \u6587\u6863\n\n---\n\n**\u8BB0\u4F4F: \u6CA1\u6709\u6D4B\u8BD5\u7684\u91CD\u6784\u662F\u9C81\u83BD\u7684\u3002\u6CA1\u6709\u7406\u89E3\u7684\u91CD\u6784\u662F\u7834\u574F\u6027\u7684\u3002\u6B64\u547D\u4EE4\u786E\u4FDD\u4F60\u4E24\u8005\u90FD\u4E0D\u4F1A\u505A\u3002**\n\n<user-request>\n$ARGUMENTS\n</user-request>\n";
1
+ export declare const REFACTOR_TEMPLATE = "# \u667A\u80FD\u91CD\u6784\u547D\u4EE4\n\n## \u4F7F\u7528\u65B9\u5F0F\n```\n/refactor <\u91CD\u6784\u76EE\u6807> [--scope=<file|module|project>] [--strategy=<safe|aggressive>]\n\n\u53C2\u6570\uFF1A\n \u91CD\u6784\u76EE\u6807\uFF1A\u8981\u91CD\u6784\u7684\u5185\u5BB9\u3002\u53EF\u4E3A\uFF1A\n - \u6587\u4EF6\u8DEF\u5F84\uFF1Asrc/auth/handler.ts\n - \u7B26\u53F7\u540D\u79F0\uFF1A\"AuthService class\"\n - \u6A21\u5F0F\uFF1A\"all functions using deprecated API\"\n - \u63CF\u8FF0\uFF1A\"extract validation logic into separate module\"\n\n\u9009\u9879\uFF1A\n --scope\uFF1A\u91CD\u6784\u8303\u56F4\uFF08\u9ED8\u8BA4\uFF1Amodule\uFF09\n - file\uFF1A\u4EC5\u5355\u4E2A\u6587\u4EF6\n - module\uFF1A\u6A21\u5757/\u76EE\u5F55\u8303\u56F4\n - project\uFF1A\u6574\u4E2A\u4EE3\u7801\u5E93\n\n --strategy\uFF1A\u98CE\u9669\u5BB9\u5FCD\u5EA6\uFF08\u9ED8\u8BA4\uFF1Asafe\uFF09\n - safe\uFF1A\u4FDD\u5B88\u7B56\u7565\uFF0C\u9700\u8981\u6700\u5927\u5316\u7684\u6D4B\u8BD5\u8986\u76D6\u7387\n - aggressive\uFF1A\u5141\u8BB8\u66F4\u5E7F\u6CDB\u7684\u53D8\u66F4\uFF0C\u53EA\u8981\u6709\u8DB3\u591F\u7684\u8986\u76D6\u7387\n```\n\n## \u6B64\u547D\u4EE4\u7684\u529F\u80FD\n\n\u6267\u884C\u667A\u80FD\u7684\u3001\u786E\u5B9A\u6027\u7684\u91CD\u6784\uFF0C\u5168\u9762\u4E86\u89E3\u4EE3\u7801\u5E93\u3002\u4E0E\u76F2\u76EE\u7684\u641C\u7D22\u66FF\u6362\u4E0D\u540C\uFF0C\u6B64\u547D\u4EE4\uFF1A\n\n1. **\u7406\u89E3\u4F60\u7684\u610F\u56FE** - \u5206\u6790\u4F60\u5B9E\u9645\u60F3\u8981\u8FBE\u5230\u7684\u76EE\u6807\n2. **\u6620\u5C04\u4EE3\u7801\u5E93** - \u5728\u4FEE\u6539\u4EFB\u4F55\u5185\u5BB9\u4E4B\u524D\u6784\u5EFA\u786E\u5B9A\u7684 codemap\n3. **\u8BC4\u4F30\u98CE\u9669** - \u8BC4\u4F30\u6D4B\u8BD5\u8986\u76D6\u7387\u5E76\u786E\u5B9A\u9A8C\u8BC1\u7B56\u7565\n4. **\u7CBE\u5FC3\u89C4\u5212** - \u4F7F\u7528 Plan agent \u521B\u5EFA\u8BE6\u7EC6\u8BA1\u5212\n5. **\u7CBE\u786E\u6267\u884C** - \u901A\u8FC7 LSP \u548C AST-grep \u9010\u6B65\u91CD\u6784\n6. **\u6301\u7EED\u9A8C\u8BC1** - \u6BCF\u6B21\u53D8\u66F4\u540E\u8FD0\u884C\u6D4B\u8BD5\uFF0C\u786E\u4FDD\u96F6\u56DE\u5F52\n\n---\n\n# \u9636\u6BB5 0\uFF1A\u610F\u56FE\u95E8\u63A7\uFF08\u5F3A\u5236\u6027\u7B2C\u4E00\u6B65\uFF09\n\n**\u5728\u4EFB\u4F55\u64CD\u4F5C\u4E4B\u524D\uFF0C\u5BF9\u8BF7\u6C42\u8FDB\u884C\u5206\u7C7B\u548C\u9A8C\u8BC1\u3002**\n\n## \u6B65\u9AA4 0.1\uFF1A\u89E3\u6790\u8BF7\u6C42\u7C7B\u578B\n\n| \u4FE1\u53F7 | \u5206\u7C7B | \u64CD\u4F5C |\n|--------|----------------|--------|\n| \u7279\u5B9A\u6587\u4EF6/\u7B26\u53F7 | \u660E\u786E\u7684 | \u8FDB\u5165\u4EE3\u7801\u5E93\u5206\u6790 |\n| \"Refactor X to Y\" | \u6E05\u6670\u7684\u8F6C\u6362 | \u8FDB\u5165\u4EE3\u7801\u5E93\u5206\u6790 |\n| \"Improve\"\u3001\"Clean up\" | \u5F00\u653E\u5F0F | **\u5FC5\u987B\u8BE2\u95EE**\uFF1A\"\u5177\u4F53\u60F3\u8981\u6539\u8FDB\u4EC0\u4E48\uFF1F\" |\n| \u8303\u56F4\u6A21\u7CCA | \u4E0D\u786E\u5B9A | **\u5FC5\u987B\u8BE2\u95EE**\uFF1A\"\u6D89\u53CA\u54EA\u4E9B\u6A21\u5757/\u6587\u4EF6\uFF1F\" |\n| \u7F3A\u5C11\u4E0A\u4E0B\u6587 | \u4E0D\u5B8C\u6574 | **\u5FC5\u987B\u8BE2\u95EE**\uFF1A\"\u671F\u671B\u7684\u7ED3\u679C\u662F\u4EC0\u4E48\uFF1F\" |\n\n## \u6B65\u9AA4 0.2\uFF1A\u9A8C\u8BC1\u7406\u89E3\n\n\u5728\u7EE7\u7EED\u4E4B\u524D\uFF0C\u786E\u8BA4\uFF1A\n- [ ] \u76EE\u6807\u5DF2\u660E\u786E\u8BC6\u522B\n- [ ] \u671F\u671B\u7ED3\u679C\u5DF2\u7406\u89E3\n- [ ] \u8303\u56F4\u5DF2\u5B9A\u4E49\uFF08file/module/project\uFF09\n- [ ] \u53EF\u4EE5\u8868\u8FF0\u6210\u529F\u6807\u51C6\n\n**\u5982\u679C\u4E0A\u8FF0\u4EFB\u4F55\u4E00\u9879\u4E0D\u6E05\u6670\uFF0C\u63D0\u51FA\u6F84\u6E05\u95EE\u9898\uFF1A**\n\n```\n\u6211\u60F3\u786E\u4FDD\u6211\u6B63\u786E\u7406\u89E3\u4E86\u91CD\u6784\u76EE\u6807\u3002\n\n**\u6211\u7406\u89E3\u7684\u5185\u5BB9**\uFF1A[\u89E3\u91CA]\n**\u6211\u4E0D\u786E\u5B9A\u7684\u90E8\u5206**\uFF1A[\u5177\u4F53\u6A21\u7CCA\u4E4B\u5904]\n\n\u6211\u770B\u5230\u7684\u9009\u9879\uFF1A\n1. [\u9009\u9879 A] - [\u542B\u4E49]\n2. [\u9009\u9879 B] - [\u542B\u4E49]\n\n**\u6211\u7684\u5EFA\u8BAE**\uFF1A[\u5E26\u63A8\u7406\u7684\u5EFA\u8BAE]\n\n\u6211\u5E94\u8BE5\u6309 [\u5EFA\u8BAE] \u8FDB\u884C\u5417\uFF0C\u8FD8\u662F\u4F60\u6709\u5176\u4ED6\u504F\u597D\uFF1F\n```\n\n## \u6B65\u9AA4 0.3\uFF1A\u521B\u5EFA\u521D\u59CB Todos\n\n**\u5728\u7406\u89E3\u8BF7\u6C42\u540E\u7ACB\u5373\u521B\u5EFA todos\uFF1A**\n\n```\nTodoWrite([\n {\"id\": \"phase-1\", \"content\": \"PHASE 1: \u4EE3\u7801\u5E93\u5206\u6790 - \u542F\u52A8\u5E76\u884C\u7684 explore agents\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-2\", \"content\": \"PHASE 2: \u6784\u5EFA Codemap - \u6620\u5C04\u4F9D\u8D56\u5173\u7CFB\u548C\u5F71\u54CD\u533A\u57DF\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-3\", \"content\": \"PHASE 3: \u6D4B\u8BD5\u8BC4\u4F30 - \u5206\u6790\u6D4B\u8BD5\u8986\u76D6\u7387\u5E76\u786E\u5B9A\u9A8C\u8BC1\u7B56\u7565\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-4\", \"content\": \"PHASE 4: \u8BA1\u5212\u751F\u6210 - \u8C03\u7528 Plan agent \u751F\u6210\u8BE6\u7EC6\u91CD\u6784\u8BA1\u5212\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-5\", \"content\": \"PHASE 5: \u6267\u884C\u91CD\u6784 - \u9010\u6B65\u8FDB\u884C\u5E76\u6301\u7EED\u9A8C\u8BC1\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"phase-6\", \"content\": \"PHASE 6: \u6700\u7EC8\u9A8C\u8BC1 - \u5B8C\u6574\u6D4B\u8BD5\u5957\u4EF6\u548C\u56DE\u5F52\u68C0\u67E5\", \"status\": \"pending\", \"priority\": \"high\"}\n])\n```\n\n---\n\n# \u9636\u6BB5 1\uFF1A\u4EE3\u7801\u5E93\u5206\u6790\uFF08\u5E76\u884C\u63A2\u7D22\uFF09\n\n**\u5C06 phase-1 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 1.1\uFF1A\u542F\u52A8\u5E76\u884C Explore Agents\uFF08\u540E\u53F0\uFF09\n\n\u4F7F\u7528 `call_omo_agent` \u540C\u65F6\u542F\u52A8\u6240\u6709\u8FD9\u4E9B agents\uFF1A\n\n```\n// Agent 1: \u627E\u5230\u91CD\u6784\u76EE\u6807\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all occurrences and definitions of [TARGET].\n Report: file paths, line numbers, usage patterns.\"\n)\n\n// Agent 2: \u627E\u5230\u76F8\u5173\u4EE3\u7801\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all code that imports, uses, or depends on [TARGET].\n Report: dependency chains, import graphs.\"\n)\n\n// Agent 3: \u627E\u5230\u76F8\u4F3C\u6A21\u5F0F\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find similar code patterns to [TARGET] in the codebase.\n Report: analogous implementations, established conventions.\"\n)\n\n// Agent 4: \u627E\u5230\u6D4B\u8BD5\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find all test files related to [TARGET].\n Report: test file paths, test case names, coverage indicators.\"\n)\n\n// Agent 5: \u67B6\u6784\u4E0A\u4E0B\u6587\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=true,\n prompt=\"Find architectural patterns and module organization around [TARGET].\n Report: module boundaries, layer structure, design patterns in use.\"\n)\n```\n\n## 1.2\uFF1A\u76F4\u63A5\u5DE5\u5177\u63A2\u7D22\uFF08\u540E\u53F0 agents \u8FD0\u884C\u671F\u95F4\uFF09\n\n\u5728\u540E\u53F0 agents \u8FD0\u884C\u65F6\uFF0C\u4F7F\u7528\u76F4\u63A5\u5DE5\u5177\uFF1A\n\n### \u7528\u4E8E\u7CBE\u786E\u5206\u6790\u7684 LSP \u5DE5\u5177\uFF1A\n\n```typescript\n// \u67E5\u627E\u5B9A\u4E49\nLspGotoDefinition(filePath, line, character) // \u5B9A\u4E49\u5728\u54EA\u91CC\uFF1F\n\n// \u67E5\u627E\u6574\u4E2A workspace \u4E2D\u7684\u6240\u6709\u7528\u6CD5\nLspFindReferences(filePath, line, character, includeDeclaration=true)\n\n// \u83B7\u53D6\u6587\u4EF6\u7ED3\u6784\nLspDocumentSymbols(filePath) // \u5C42\u7EA7\u5927\u7EB2\nLspWorkspaceSymbols(filePath, query=\"[target_symbol]\") // \u6309\u540D\u79F0\u641C\u7D22\n\n// \u83B7\u53D6\u5F53\u524D\u8BCA\u65AD\nlsp_diagnostics(filePath) // \u5F00\u59CB\u524D\u7684\u9519\u8BEF\u548C\u8B66\u544A\n```\n\n### \u7528\u4E8E\u6A21\u5F0F\u5206\u6790\u7684 AST-Grep\uFF1A\n\n```typescript\n// \u67E5\u627E\u7ED3\u6784\u6A21\u5F0F\nast_grep_search(\n pattern=\"function $NAME($$$) { $$$ }\", // \u6216\u76F8\u5173\u6A21\u5F0F\n lang=\"typescript\", // \u6216\u76F8\u5173\u8BED\u8A00\n paths=[\"src/\"]\n)\n\n// \u9884\u89C8\u91CD\u6784\uFF08DRY RUN\uFF09\nast_grep_replace(\n pattern=\"[old_pattern]\",\n rewrite=\"[new_pattern]\",\n lang=\"[language]\",\n dryRun=true // \u59CB\u7EC8\u5148\u9884\u89C8\n)\n```\n\n### \u7528\u4E8E\u6587\u672C\u6A21\u5F0F\u7684 Grep\uFF1A\n\n```\ngrep(pattern=\"[search_term]\", path=\"src/\", include=\"*.ts\")\n```\n\n## 1.3\uFF1A\u6536\u96C6\u540E\u53F0\u7ED3\u679C\n\n```\nbackground_output(task_id=\"[agent_1_id]\")\nbackground_output(task_id=\"[agent_2_id]\")\n...\n```\n\n**\u6536\u96C6\u5B8C\u6240\u6709\u7ED3\u679C\u540E\uFF0C\u5C06 phase-1 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# \u9636\u6BB5 2\uFF1A\u6784\u5EFA CODEMAP\uFF08\u4F9D\u8D56\u5173\u7CFB\u6620\u5C04\uFF09\n\n**\u5C06 phase-2 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 2.1\uFF1A\u6784\u5EFA\u786E\u5B9A\u7684 Codemap\n\n\u57FA\u4E8E\u9636\u6BB5 1 \u7684\u7ED3\u679C\uFF0C\u6784\u5EFA\uFF1A\n\n```\n## CODEMAP: [TARGET]\n\n### \u6838\u5FC3\u6587\u4EF6\uFF08\u76F4\u63A5\u5F71\u54CD\uFF09\n- `path/to/file.ts:L10-L50` - \u4E3B\u8981\u5B9A\u4E49\n- `path/to/file2.ts:L25` - \u5173\u952E\u7528\u6CD5\n\n### \u4F9D\u8D56\u5173\u7CFB\u56FE\n```\n[TARGET]\n\u251C\u2500\u2500 \u5BFC\u5165\u81EA:\n\u2502 \u251C\u2500\u2500 module-a (types)\n\u2502 \u2514\u2500\u2500 module-b (utils)\n\u251C\u2500\u2500 \u88AB\u4EE5\u4E0B\u5BFC\u5165:\n\u2502 \u251C\u2500\u2500 consumer-1.ts\n\u2502 \u251C\u2500\u2500 consumer-2.ts\n\u2502 \u2514\u2500\u2500 consumer-3.ts\n\u2514\u2500\u2500 \u88AB\u4EE5\u4E0B\u4F7F\u7528:\n \u251C\u2500\u2500 handler.ts (\u76F4\u63A5\u8C03\u7528)\n \u2514\u2500\u2500 service.ts (\u4F9D\u8D56\u6CE8\u5165)\n```\n\n### \u5F71\u54CD\u533A\u57DF\n| \u533A\u57DF | \u98CE\u9669\u7B49\u7EA7 | \u6D89\u53CA\u6587\u4EF6 | \u6D4B\u8BD5\u8986\u76D6\u7387 |\n|------|------------|----------------|---------------|\n| \u6838\u5FC3 | HIGH | 3 \u4E2A\u6587\u4EF6 | 85% \u8986\u76D6 |\n| \u6D88\u8D39\u8005 | MEDIUM | 8 \u4E2A\u6587\u4EF6 | 70% \u8986\u76D6 |\n| \u8FB9\u7F18 | LOW | 2 \u4E2A\u6587\u4EF6 | 50% \u8986\u76D6 |\n\n### \u5DF2\u786E\u7ACB\u7684\u6A21\u5F0F\n- Pattern A: [\u63CF\u8FF0] - \u5728 N \u5904\u4F7F\u7528\n- Pattern B: [\u63CF\u8FF0] - \u5DF2\u5EFA\u7ACB\u7684\u7EA6\u5B9A\n```\n\n## 2.2\uFF1A\u8BC6\u522B\u91CD\u6784\u7EA6\u675F\n\n\u57FA\u4E8E codemap\uFF1A\n- **\u5FC5\u987B\u9075\u5FAA**\uFF1A[\u5DF2\u8BC6\u522B\u7684\u73B0\u6709\u6A21\u5F0F]\n- **\u4E0D\u80FD\u7834\u574F**\uFF1A[\u5173\u952E\u4F9D\u8D56\u5173\u7CFB]\n- **\u53EF\u4EE5\u5B89\u5168\u4FEE\u6539**\uFF1A[\u9694\u79BB\u7684\u4EE3\u7801\u533A\u57DF]\n- **\u9700\u8981\u8FC1\u79FB**\uFF1A[\u7834\u574F\u6027\u53D8\u66F4\u7684\u5F71\u54CD]\n\n**\u5C06 phase-2 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# \u9636\u6BB5 3\uFF1A\u6D4B\u8BD5\u8BC4\u4F30\uFF08\u9A8C\u8BC1\u7B56\u7565\uFF09\n\n**\u5C06 phase-3 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 3.1\uFF1A\u68C0\u6D4B\u6D4B\u8BD5\u57FA\u7840\u8BBE\u65BD\n\n```bash\n# \u68C0\u67E5\u6D4B\u8BD5\u547D\u4EE4\ncat package.json | jq '.scripts | keys[] | select(test(\"test\"))'\n\n# \u6216\u5BF9\u4E8E Python\nls -la pytest.ini pyproject.toml setup.cfg\n\n# \u6216\u5BF9\u4E8E Go\nls -la *_test.go\n```\n\n## 3.2\uFF1A\u5206\u6790\u6D4B\u8BD5\u8986\u76D6\u7387\n\n```\n// \u67E5\u627E\u4E0E\u76EE\u6807\u76F8\u5173\u7684\u6240\u6709\u6D4B\u8BD5\ncall_omo_agent(\n subagent_type=\"explore\",\n run_in_background=false, // \u9700\u8981\u540C\u6B65\u83B7\u53D6\n prompt=\"Analyze test coverage for [TARGET]:\n 1. Which test files cover this code?\n 2. What test cases exist?\n 3. Are there integration tests?\n 4. What edge cases are tested?\n 5. Estimated coverage percentage?\"\n)\n```\n\n## 3.3\uFF1A\u786E\u5B9A\u9A8C\u8BC1\u7B56\u7565\n\n\u57FA\u4E8E\u6D4B\u8BD5\u5206\u6790\uFF1A\n\n| \u8986\u76D6\u7387\u7B49\u7EA7 | \u7B56\u7565 |\n|----------------|----------|\n| HIGH (>80%) | \u6BCF\u6B65\u540E\u8FD0\u884C\u73B0\u6709\u6D4B\u8BD5 |\n| MEDIUM (50-80%) | \u8FD0\u884C\u6D4B\u8BD5 + \u6DFB\u52A0\u5B89\u5168\u65AD\u8A00 |\n| LOW (<50%) | **\u6682\u505C**\uFF1A\u5EFA\u8BAE\u5148\u6DFB\u52A0\u6D4B\u8BD5 |\n| NONE | **\u963B\u6B62**\uFF1A\u62D2\u7EDD\u6FC0\u8FDB\u91CD\u6784 |\n\n**\u5982\u679C\u8986\u76D6\u7387\u4E3A LOW \u6216 NONE\uFF0C\u5411\u7528\u6237\u8BE2\u95EE\uFF1A**\n\n```\n[TARGET] \u7684\u6D4B\u8BD5\u8986\u76D6\u7387\u4E3A [\u7B49\u7EA7]\u3002\n\n**\u98CE\u9669\u8BC4\u4F30**\uFF1A\u6CA1\u6709\u8DB3\u591F\u6D4B\u8BD5\u7684\u91CD\u6784\u662F\u5371\u9669\u7684\u3002\n\n\u9009\u9879\uFF1A\n1. \u5148\u6DFB\u52A0\u6D4B\u8BD5\uFF0C\u518D\u91CD\u6784\uFF08\u63A8\u8350\uFF09\n2. \u683C\u5916\u5C0F\u5FC3\u5730\u8FDB\u884C\uFF0C\u9700\u8981\u624B\u52A8\u9A8C\u8BC1\n3. \u7EC8\u6B62\u91CD\u6784\n\n\u4F60\u503E\u5411\u4E8E\u54EA\u79CD\u65B9\u5F0F\uFF1F\n```\n\n## 3.4\uFF1A\u8BB0\u5F55\u9A8C\u8BC1\u8BA1\u5212\n\n```\n## \u9A8C\u8BC1\u8BA1\u5212\n\n### \u6D4B\u8BD5\u547D\u4EE4\n- \u5355\u5143\u6D4B\u8BD5\uFF1A`bun test` / `npm test` / `pytest` / \u7B49\n- \u96C6\u6210\u6D4B\u8BD5\uFF1A[\u547D\u4EE4\uFF0C\u5982\u5B58\u5728]\n- \u7C7B\u578B\u68C0\u67E5\uFF1A`tsc --noEmit` / `pyright` / \u7B49\n\n### \u9A8C\u8BC1\u68C0\u67E5\u70B9\n\u6BCF\u6B21\u91CD\u6784\u6B65\u9AA4\u540E\uFF1A\n1. lsp_diagnostics \u2192 \u65E0\u65B0\u589E\u9519\u8BEF\n2. \u8FD0\u884C\u6D4B\u8BD5\u547D\u4EE4 \u2192 \u5168\u90E8\u901A\u8FC7\n3. \u7C7B\u578B\u68C0\u67E5 \u2192 \u6E05\u6D01\n\n### \u56DE\u5F52\u6307\u6807\n- [\u5FC5\u987B\u901A\u8FC7\u7684\u7279\u5B9A\u6D4B\u8BD5]\n- [\u5FC5\u987B\u4FDD\u7559\u7684\u884C\u4E3A]\n- [\u4E0D\u80FD\u6539\u53D8\u7684 API \u5951\u7EA6]\n```\n\n**\u5C06 phase-3 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# \u9636\u6BB5 4\uFF1A\u8BA1\u5212\u751F\u6210\uFF08PLAN AGENT\uFF09\n\n**\u5C06 phase-4 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 4.1\uFF1A\u8C03\u7528 Plan Agent\n\n```\nTask(\n subagent_type=\"plan\",\n prompt=\"Create a detailed refactoring plan:\n\n ## Refactoring Goal\n [User's original request]\n\n ## Codemap (from Phase 2)\n [Insert codemap here]\n\n ## Test Coverage (from Phase 3)\n [Insert verification plan here]\n\n ## Constraints\n - MUST follow existing patterns: [list]\n - MUST NOT break: [critical paths]\n - MUST run tests after each step\n\n ## Requirements\n 1. Break down into atomic refactoring steps\n 2. Each step must be independently verifiable\n 3. Order steps by dependency (what must happen first)\n 4. Specify exact files and line ranges for each step\n 5. Include rollback strategy for each step\n 6. Define commit checkpoints\"\n)\n```\n\n## 4.2\uFF1A\u5BA1\u67E5\u548C\u9A8C\u8BC1\u8BA1\u5212\n\n\u5728\u6536\u5230 Plan agent \u7684\u8BA1\u5212\u540E\uFF1A\n\n1. **\u9A8C\u8BC1\u5B8C\u6574\u6027**\uFF1A\u6240\u6709\u8BC6\u522B\u7684\u6587\u4EF6\u90FD\u5DF2\u5904\u7406\uFF1F\n2. **\u9A8C\u8BC1\u5B89\u5168\u6027**\uFF1A\u6BCF\u6B65\u90FD\u662F\u53EF\u9006\u7684\uFF1F\n3. **\u9A8C\u8BC1\u987A\u5E8F**\uFF1A\u4F9D\u8D56\u5173\u7CFB\u88AB\u5C0A\u91CD\u4E86\uFF1F\n4. **\u9A8C\u8BC1\u9A8C\u8BC1**\uFF1A\u6D4B\u8BD5\u547D\u4EE4\u662F\u5426\u5DF2\u6307\u5B9A\uFF1F\n\n## 4.3\uFF1A\u6CE8\u518C\u8BE6\u7EC6 Todos\n\n\u5C06 Plan agent \u7684\u8F93\u51FA\u8F6C\u6362\u4E3A\u7EC6\u7C92\u5EA6 todos\uFF1A\n\n```\nTodoWrite([\n // \u8BA1\u5212\u4E2D\u7684\u6BCF\u4E00\u6B65\u90FD\u6210\u4E3A\u4E00\u4E2A todo\n {\"id\": \"refactor-1\", \"content\": \"Step 1: [\u63CF\u8FF0]\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"verify-1\", \"content\": \"Verify Step 1: run tests\", \"status\": \"pending\", \"priority\": \"high\"},\n {\"id\": \"refactor-2\", \"content\": \"Step 2: [\u63CF\u8FF0]\", \"status\": \"pending\", \"priority\": \"medium\"},\n {\"id\": \"verify-2\", \"content\": \"Verify Step 2: run tests\", \"status\": \"pending\", \"priority\": \"medium\"},\n // ... \u4E3A\u6240\u6709\u6B65\u9AA4\u7EE7\u7EED\n])\n```\n\n**\u5C06 phase-4 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# \u9636\u6BB5 5\uFF1A\u6267\u884C\u91CD\u6784\uFF08\u786E\u5B9A\u6027\u6267\u884C\uFF09\n\n**\u5C06 phase-5 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 5.1\uFF1A\u6267\u884C\u534F\u8BAE\n\n\u5BF9\u4E8E\u6BCF\u4E2A\u91CD\u6784\u6B65\u9AA4\uFF1A\n\n### \u6B65\u9AA4\u524D\n1. \u5C06\u6B65\u9AA4 todo \u6807\u8BB0\u4E3A `in_progress`\n2. \u8BFB\u53D6\u5F53\u524D\u6587\u4EF6\u72B6\u6001\n3. \u9A8C\u8BC1 lsp_diagnostics \u57FA\u7EBF\n\n### \u6267\u884C\u6B65\u9AA4\n\u4F7F\u7528\u9002\u5F53\u7684\u5DE5\u5177\uFF1A\n\n**\u5BF9\u4E8E\u7B26\u53F7\u91CD\u547D\u540D\uFF1A**\n```typescript\nlsp_prepare_rename(filePath, line, character) // \u9A8C\u8BC1\u91CD\u547D\u540D\u662F\u5426\u53EF\u884C\nlsp_rename(filePath, line, character, newName) // \u6267\u884C\u91CD\u547D\u540D\n```\n\n**\u5BF9\u4E8E\u6A21\u5F0F\u8F6C\u6362\uFF1A**\n```typescript\n// \u5148\u9884\u89C8\nast_grep_replace(pattern, rewrite, lang, dryRun=true)\n\n// \u5982\u679C\u9884\u89C8\u770B\u8D77\u6765\u6CA1\u95EE\u9898\uFF0C\u6267\u884C\nast_grep_replace(pattern, rewrite, lang, dryRun=false)\n```\n\n**\u5BF9\u4E8E\u7ED3\u6784\u53D8\u66F4\uFF1A**\n```typescript\n// \u4F7F\u7528 Edit \u5DE5\u5177\u8FDB\u884C\u7CBE\u786E\u4FEE\u6539\nedit(filePath, oldString, newString)\n```\n\n### \u6B65\u9AA4\u540E\u9A8C\u8BC1\uFF08\u5F3A\u5236\uFF09\n\n```typescript\n// 1. \u68C0\u67E5\u8BCA\u65AD\nlsp_diagnostics(filePath) // \u5FC5\u987B\u6E05\u6D01\u6216\u4E0E\u57FA\u7EBF\u76F8\u540C\n\n// 2. \u8FD0\u884C\u6D4B\u8BD5\nbash(\"bun test\") // \u6216\u9002\u5F53\u7684\u6D4B\u8BD5\u547D\u4EE4\n\n// 3. \u7C7B\u578B\u68C0\u67E5\nbash(\"tsc --noEmit\") // \u6216\u9002\u5F53\u7684\u7C7B\u578B\u68C0\u67E5\n```\n\n### \u6B65\u9AA4\u5B8C\u6210\n1. \u5982\u679C\u9A8C\u8BC1\u901A\u8FC7 \u2192 \u5C06\u6B65\u9AA4 todo \u6807\u8BB0\u4E3A `completed`\n2. \u5982\u679C\u9A8C\u8BC1\u5931\u8D25 \u2192 **\u505C\u6B62\u5E76\u4FEE\u590D**\n\n## 5.2\uFF1A\u5931\u8D25\u6062\u590D\u534F\u8BAE\n\n\u5982\u679C\u4EFB\u4F55\u9A8C\u8BC1\u5931\u8D25\uFF1A\n\n1. **\u7ACB\u5373\u505C\u6B62**\n2. **\u56DE\u6EDA**\u5931\u8D25\u7684\u53D8\u66F4\n3. **\u8BCA\u65AD**\u95EE\u9898\u6240\u5728\n4. **\u9009\u9879**\uFF1A\n - \u4FEE\u590D\u95EE\u9898\u5E76\u91CD\u8BD5\n - \u8DF3\u8FC7\u6B64\u6B65\u9AA4\uFF08\u5982\u53EF\u9009\uFF09\n - \u54A8\u8BE2 oracle agent\n - \u5411\u7528\u6237\u5BFB\u6C42\u6307\u5BFC\n\n**\u6C38\u8FDC\u4E0D\u8981\u5728\u6D4B\u8BD5\u5931\u8D25\u7684\u60C5\u51B5\u4E0B\u7EE7\u7EED\u4E0B\u4E00\u6B65\u3002**\n\n## 5.3\uFF1A\u63D0\u4EA4\u68C0\u67E5\u70B9\n\n\u5728\u6BCF\u7EC4\u903B\u8F91\u53D8\u66F4\u4E4B\u540E\uFF1A\n\n```bash\ngit add [changed-files]\ngit commit -m \"refactor(scope): description\n\n[details of what was changed and why]\"\n```\n\n**\u6240\u6709\u91CD\u6784\u6B65\u9AA4\u5B8C\u6210\u540E\uFF0C\u5C06 phase-5 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# \u9636\u6BB5 6\uFF1A\u6700\u7EC8\u9A8C\u8BC1\uFF08\u56DE\u5F52\u68C0\u67E5\uFF09\n\n**\u5C06 phase-6 \u6807\u8BB0\u4E3A in_progress\u3002**\n\n## 6.1\uFF1A\u5B8C\u6574\u6D4B\u8BD5\u5957\u4EF6\n\n```bash\n# \u8FD0\u884C\u5B8C\u6574\u6D4B\u8BD5\u5957\u4EF6\nbun test # \u6216 npm test, pytest, go test, \u7B49\n```\n\n## 6.2\uFF1A\u7C7B\u578B\u68C0\u67E5\n\n```bash\n# \u5B8C\u6574\u7C7B\u578B\u68C0\u67E5\ntsc --noEmit # \u6216\u7B49\u6548\u547D\u4EE4\n```\n\n## 6.3\uFF1ALint \u68C0\u67E5\n\n```bash\n# \u8FD0\u884C linter\neslint . # \u6216\u7B49\u6548\u547D\u4EE4\n```\n\n## 6.4\uFF1A\u6784\u5EFA\u9A8C\u8BC1\uFF08\u5982\u9002\u7528\uFF09\n\n```bash\n# \u786E\u4FDD\u6784\u5EFA\u4ECD\u7136\u6B63\u5E38\nbun run build # \u6216 npm run build, \u7B49\n```\n\n## 6.5\uFF1A\u6700\u7EC8\u8BCA\u65AD\n\n```typescript\n// \u68C0\u67E5\u6240\u6709\u53D8\u66F4\u7684\u6587\u4EF6\nfor (file of changedFiles) {\n lsp_diagnostics(file) // \u5FC5\u987B\u5168\u90E8\u6E05\u6D01\n}\n```\n\n## 6.6\uFF1A\u751F\u6210\u6458\u8981\n\n```markdown\n## \u91CD\u6784\u5B8C\u6210\n\n### \u53D8\u66F4\u5185\u5BB9\n- [\u6240\u505A\u53D8\u66F4\u5217\u8868]\n\n### \u4FEE\u6539\u7684\u6587\u4EF6\n- `path/to/file.ts` - [\u53D8\u66F4\u5185\u5BB9]\n- `path/to/file2.ts` - [\u53D8\u66F4\u5185\u5BB9]\n\n### \u9A8C\u8BC1\u7ED3\u679C\n- \u6D4B\u8BD5\uFF1A\u5DF2\u901A\u8FC7\uFF08X/Y \u901A\u8FC7\uFF09\n- \u7C7B\u578B\u68C0\u67E5\uFF1A\u6E05\u6D01\n- Lint\uFF1A\u6E05\u6D01\n- \u6784\u5EFA\uFF1A\u6210\u529F\n\n### \u672A\u68C0\u6D4B\u5230\u56DE\u5F52\n\u6240\u6709\u73B0\u6709\u6D4B\u8BD5\u5747\u901A\u8FC7\u3002\u65E0\u65B0\u589E\u9519\u8BEF\u3002\n```\n\n**\u5C06 phase-6 \u6807\u8BB0\u4E3A completed\u3002**\n\n---\n\n# \u5173\u952E\u89C4\u5219\n\n## \u7981\u6B62\u4E8B\u9879\n- \u53D8\u66F4\u540E\u8DF3\u8FC7 lsp_diagnostics \u68C0\u67E5\n- \u5728\u6D4B\u8BD5\u5931\u8D25\u7684\u60C5\u51B5\u4E0B\u7EE7\u7EED\n- \u4E0D\u4E86\u89E3\u5F71\u54CD\u5C31\u8FDB\u884C\u4FEE\u6539\n- \u4F7F\u7528 `as any`\u3001`@ts-ignore`\u3001`@ts-expect-error`\n- \u5220\u9664\u6D4B\u8BD5\u4F7F\u5176\u901A\u8FC7\n- \u63D0\u4EA4\u6709\u95EE\u9898\u7684\u4EE3\u7801\n- \u4E0D\u4E86\u89E3\u73B0\u6709\u6A21\u5F0F\u5C31\u91CD\u6784\n\n## \u5FC5\u505A\u4E8B\u9879\n- \u6539\u524D\u5148\u7406\u89E3\n- \u5E94\u7528\u524D\u5148\u9884\u89C8\uFF08ast_grep dryRun=true\uFF09\n- \u6BCF\u6B21\u53D8\u66F4\u540E\u9A8C\u8BC1\n- \u9075\u5FAA\u73B0\u6709\u4EE3\u7801\u5E93\u6A21\u5F0F\n- \u5B9E\u65F6\u66F4\u65B0 todos\n- \u5728\u903B\u8F91\u68C0\u67E5\u70B9\u63D0\u4EA4\n- \u7ACB\u5373\u62A5\u544A\u95EE\u9898\n\n## \u4E2D\u6B62\u6761\u4EF6\n\u5982\u679C\u53D1\u751F\u4EE5\u4E0B\u4EFB\u4F55\u60C5\u51B5\uFF0C**\u505C\u6B62\u5E76\u54A8\u8BE2\u7528\u6237**\uFF1A\n- \u76EE\u6807\u4EE3\u7801\u7684\u6D4B\u8BD5\u8986\u76D6\u7387\u4E3A\u96F6\n- \u53D8\u66F4\u4F1A\u7834\u574F public API\n- \u91CD\u6784\u8303\u56F4\u4E0D\u6E05\u6670\n- \u8FDE\u7EED 3 \u6B21\u9A8C\u8BC1\u5931\u8D25\n- \u7528\u6237\u5B9A\u4E49\u7684\u7EA6\u675F\u88AB\u8FDD\u53CD\n\n---\n\n# \u5DE5\u5177\u4F7F\u7528\u7406\u5FF5\n\n\u4F60\u5DF2\u4E86\u89E3\u8FD9\u4E9B\u5DE5\u5177\u3002\u8BF7\u660E\u667A\u5730\u4F7F\u7528\u5B83\u4EEC\uFF1A\n\n## LSP \u5DE5\u5177\n\u5229\u7528 LSP \u5DE5\u5177\u8FDB\u884C\u7CBE\u786E\u5206\u6790\u3002\u5173\u952E\u6A21\u5F0F\uFF1A\n- **\u6539\u524D\u5148\u7406\u89E3**\uFF1A\u4F7F\u7528 `LspGotoDefinition` \u7406\u89E3\u4E0A\u4E0B\u6587\n- **\u5F71\u54CD\u5206\u6790**\uFF1A\u4FEE\u6539\u524D\u4F7F\u7528 `LspFindReferences` \u6620\u5C04\u6240\u6709\u7528\u6CD5\n- **\u5B89\u5168\u91CD\u6784**\uFF1A\u7B26\u53F7\u91CD\u547D\u540D\u4F7F\u7528 `lsp_prepare_rename` \u2192 `lsp_rename`\n- **\u6301\u7EED\u9A8C\u8BC1**\uFF1A\u6BCF\u6B21\u53D8\u66F4\u540E\u4F7F\u7528 `lsp_diagnostics`\n\n## AST-Grep\n\u4F7F\u7528 `ast_grep_search` \u548C `ast_grep_replace` \u8FDB\u884C\u7ED3\u6784\u8F6C\u6362\u3002\n**\u5173\u952E**\uFF1A\u59CB\u7EC8\u5148\u7528 `dryRun=true` \u9884\u89C8\uFF0C\u5BA1\u67E5\u540E\u518D\u6267\u884C\u3002\n\n## Agents\n- `explore`\uFF1A\u5E76\u884C\u4EE3\u7801\u5E93\u6A21\u5F0F\u53D1\u73B0\n- `plan`\uFF1A\u8BE6\u7EC6\u91CD\u6784\u8BA1\u5212\u751F\u6210\n- `oracle`\uFF1A\u7528\u4E8E\u590D\u6742\u67B6\u6784\u51B3\u7B56\u548C\u8C03\u8BD5\u7684\u53EA\u8BFB\u54A8\u8BE2\n- `librarian`\uFF1A\u9047\u5230\u5F03\u7528\u65B9\u6CD5\u6216\u5E93\u8FC1\u79FB\u4EFB\u52A1\u65F6**\u4E3B\u52A8\u4F7F\u7528**\u3002\u67E5\u8BE2\u5B98\u65B9\u6587\u6863\u548C\u5F00\u6E90\u793A\u4F8B\u4EE5\u83B7\u53D6\u73B0\u4EE3\u66FF\u4EE3\u65B9\u6848\u3002\n\n## \u5F03\u7528\u4EE3\u7801\u4E0E\u5E93\u8FC1\u79FB\n\u5728\u91CD\u6784\u8FC7\u7A0B\u4E2D\u9047\u5230\u5F03\u7528\u7684\u65B9\u6CD5/API \u65F6\uFF1A\n1. \u542F\u52A8 `librarian` \u67E5\u627E\u63A8\u8350\u7684\u73B0\u4EE3\u66FF\u4EE3\u65B9\u6848\n2. **\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u8FC1\u79FB\uFF0C\u5426\u5219\u4E0D\u8981\u81EA\u52A8\u5347\u7EA7\u5230\u6700\u65B0\u7248\u672C**\n3. \u5982\u679C\u7528\u6237\u8981\u6C42\u5E93\u8FC1\u79FB\uFF0C\u5728\u8FDB\u884C\u66F4\u6539\u4E4B\u524D\u4F7F\u7528 `librarian` \u83B7\u53D6\u6700\u65B0\u7684 API \u6587\u6863\n\n---\n\n**\u8BB0\u4F4F\uFF1A\u6CA1\u6709\u6D4B\u8BD5\u7684\u91CD\u6784\u662F\u9C81\u83BD\u7684\u3002\u6CA1\u6709\u7406\u89E3\u7684\u91CD\u6784\u662F\u7834\u574F\u6027\u7684\u3002\u6B64\u547D\u4EE4\u786E\u4FDD\u4F60\u4E24\u8005\u90FD\u4E0D\u4F1A\u505A\u3002**\n\n<user-request>\n$ARGUMENTS\n</user-request>\n";
@@ -1 +1 @@
1
- export declare const REMOVE_AI_SLOPS_TEMPLATE = "# Remove AI Slops \u547D\u4EE4\n\n## \u6B64\u547D\u4EE4\u7684\u4F5C\u7528\n\u5206\u6790\u5F53\u524D\u5206\u652F\u4E2D\u6240\u6709\u53D8\u66F4\u7684\u6587\u4EF6\uFF08\u4E0E\u7236\u63D0\u4EA4\u76F8\u6BD4\uFF09\uFF0C\u5E76\u884C\u79FB\u9664 AI \u751F\u6210\u7684\u4EE3\u7801\u5F02\u5473\uFF0C\u7136\u540E\u6279\u5224\u6027\u5730\u5BA1\u67E5\u53D8\u66F4\u4EE5\u786E\u4FDD\u5B89\u5168\u6027\u548C\u884C\u4E3A\u4FDD\u6301\u3002\u5728\u5BA1\u67E5\u4E2D\u53D1\u73B0\u95EE\u9898\u65F6\u8FDB\u884C\u4FEE\u590D\u3002\n\n## Step 0: \u4EFB\u52A1\u89C4\u5212\n\n\u4F7F\u7528 TodoWrite \u521B\u5EFA\u4EFB\u52A1\u5217\u8868\uFF1A\n1. \u4ECE\u5206\u652F\u83B7\u53D6\u53D8\u66F4\u6587\u4EF6\n2. \u5E76\u884C\u5BF9\u6BCF\u4E2A\u6587\u4EF6\u8FD0\u884C ai-slop-remover\n3. \u6279\u5224\u6027\u5730\u5BA1\u67E5\u6240\u6709\u53D8\u66F4\n4. \u4FEE\u590D\u53D1\u73B0\u7684\u95EE\u9898\n\n## \u89D2\u8272\u5B9A\u4E49\n\u4F60\u662F\u4E00\u4F4D\u8D44\u6DF1\u4EE3\u7801\u8D28\u91CF\u5DE5\u7A0B\u5E08\uFF0C\u4E13\u95E8\u8BC6\u522B\u548C\u79FB\u9664 AI \u751F\u6210\u7684\u4EE3\u7801\u6A21\u5F0F\uFF0C\u540C\u65F6\u4FDD\u7559\u539F\u6709\u529F\u80FD\u3002\u4F60\u5728\u4EE3\u7801\u5BA1\u67E5\u3001\u91CD\u6784\u5B89\u5168\u6027\u548C\u884C\u4E3A\u4FDD\u6301\u65B9\u9762\u6709\u6DF1\u539A\u4E13\u4E1A\u77E5\u8BC6\u3002\n\n## \u6D41\u7A0B\n\n### Phase 1: \u8BC6\u522B\u53D8\u66F4\u6587\u4EF6\n\u52A8\u6001\u68C0\u6D4B\u4ED3\u5E93\u57FA\u7840\u5206\u652F\uFF0C\u7136\u540E\u83B7\u53D6\u5F53\u524D\u5206\u652F\u4E2D\u7684\u6240\u6709\u53D8\u66F4\u6587\u4EF6\uFF1A\n```bash\nBASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo \"main\")\ngit diff $(git merge-base \"$BASE_BRANCH\" HEAD)..HEAD --name-only\n```\n\n\u5982\u679C `git symbolic-ref refs/remotes/origin/HEAD` \u4E0D\u53EF\u7528\uFF0C\u5728\u8FD0\u884C\u65F6\u4F7F\u7528\u4ED3\u5E93\u914D\u7F6E\u7684\u8FDC\u7A0B\u9ED8\u8BA4\u5206\u652F\u68C0\u6D4B\u57FA\u7840\u5206\u652F\u3002\u4EC5\u5728\u6700\u540E\u624D\u56DE\u9000\u5230 `main`\u3002\n\n### Phase 2: \u5E76\u884C AI Slop \u79FB\u9664\n\u5BF9\u4E8E\u6BCF\u4E2A\u53D8\u66F4\u6587\u4EF6\uFF0C\u4F7F\u7528\u5E26\u6709 ai-slop-remover skill \u7684 Task \u5DE5\u5177\u5E76\u884C\u751F\u6210\u4EE3\u7406\uFF1A\n\n```\ntask(category=\"quick\", load_skills=[\"ai-slop-remover\"], run_in_background=true, description=\"Remove AI slops from {filename}\", prompt=\"Remove AI slops from: {file_path}\")\n```\n\n**\u5173\u952E**\uFF1A\u5728\u4E00\u6761\u6D88\u606F\u4E2D\u542F\u52A8\u6240\u6709 agents\uFF0C\u4F7F\u7528\u591A\u4E2A Task \u5DE5\u5177\u8C03\u7528\u4EE5\u5B9E\u73B0\u6700\u5927\u5E76\u884C\u5EA6\u3002\n\n\u5728\u6BCF\u4E2A\u6587\u4EF6\u4E0A\u8FD0\u884C ai-slop-remover \u4E4B\u524D\uFF0C\u4FDD\u5B58\u4E00\u4E2A\u6587\u4EF6\u7279\u5B9A\u7684\u56DE\u6EDA\u4EA7\u7269\uFF0C\u4EC5\u6355\u83B7 slop-removal \u8FC7\u7A0B\u5F15\u5165\u7684\u589E\u91CF\u3002\u4F7F\u7528\u5B89\u5168\u6A21\u5F0F\uFF0C\u4F8B\u5982\u751F\u6210\u6BCF\u4E2A\u6587\u4EF6\u7684\u8865\u4E01\u5E76\u5728\u5BA1\u67E5\u5931\u8D25\u65F6\u53CD\u5411\u5E94\u7528\u3002\n\n\u4E0D\u8981\u4F7F\u7528 `git checkout -- {file_path}` \u6216\u4EFB\u4F55\u4E22\u5F03\u6587\u4EF6\u4E2D\u9884\u5148\u5B58\u5728\u7684\u5206\u652F\u53D8\u66F4\u7684\u56DE\u6EDA\u3002\n\n### Phase 3: \u6279\u5224\u6027\u5BA1\u67E5\n\u5728\u6240\u6709 ai-slop-remover agents \u5B8C\u6210\u540E\uFF0C\u4F7F\u7528\u4EE5\u4E0B\u68C0\u67E5\u6E05\u5355\u6267\u884C\u6279\u5224\u6027\u5BA1\u67E5\uFF1A\n\n**\u5B89\u5168\u6027\u9A8C\u8BC1**\uFF1A\n- [ ] \u6CA1\u6709\u610F\u5916\u79FB\u9664\u529F\u80FD\u903B\u8F91\n- [ ] \u6240\u6709\u9519\u8BEF\u5904\u7406\u90FD\u4FDD\u7559\n- [ ] \u7C7B\u578B\u63D0\u793A\u4ECD\u7136\u6B63\u786E\u5B8C\u6574\n- [ ] Import \u8BED\u53E5\u4ECD\u7136\u6709\u6548\n- [ ] \u5BF9\u516C\u5171 API \u6CA1\u6709\u7834\u574F\u6027\u53D8\u66F4\n\n**\u884C\u4E3A\u4FDD\u6301**\uFF1A\n- [ ] \u8FD4\u56DE\u503C\u672A\u6539\u53D8\n- [ ] \u526F\u4F5C\u7528\u672A\u6539\u53D8\n- [ ] \u5F02\u5E38\u884C\u4E3A\u672A\u6539\u53D8\n- [ ] \u8FB9\u7F18\u60C5\u51B5\u5904\u7406\u5DF2\u4FDD\u7559\n\n**\u4EE3\u7801\u8D28\u91CF**\uFF1A\n- [ ] \u79FB\u9664\u7684\u53D8\u66F4\u786E\u5B9E\u662F AI slop\uFF08\u975E\u6709\u610F\u7684\u6A21\u5F0F\uFF09\n- [ ] \u5269\u4F59\u4EE3\u7801\u9075\u5FAA\u9879\u76EE\u7EA6\u5B9A\n- [ ] \u6CA1\u6709\u5B64\u7ACB\u4EE3\u7801\u6216\u6B7B\u5F15\u7528\n\n### Phase 4: \u4FEE\u590D\u95EE\u9898\n\u5982\u679C\u5728\u6279\u5224\u6027\u5BA1\u67E5\u4E2D\u53D1\u73B0\u4EFB\u4F55\u95EE\u9898\uFF1A\n1. \u8BC6\u522B\u5177\u4F53\u95EE\u9898\n2. \u89E3\u91CA\u4E3A\u4EC0\u4E48\u8FD9\u662F\u95EE\u9898\n3. \u4F7F\u7528\u4FDD\u5B58\u7684\u6BCF\u6587\u4EF6\u8865\u4E01\u6216\u7B49\u6548\u7684\u53CD\u5411\u5E94\u7528\u5DE5\u4F5C\u6D41\u4EC5\u56DE\u6EDA ai-slop-remover \u7684\u589E\u91CF\n4. \u5982\u679C\u5728\u56DE\u6EDA\u540E\u53D1\u73B0\u4ECD\u6709 ai-slops\uFF0C\u4EB2\u81EA\u7F16\u8F91\u6587\u4EF6\u79FB\u9664\u5B83\u4EEC\u2014\u2014\u4F7F\u7528\u5E76\u884C\u5DE5\u5177\u8C03\u7528\uFF0C\u6BCF\u4E2A\u6587\u4EF6\u5355\u72EC\u5904\u7406\n5. \u9A8C\u8BC1\u4FEE\u590D\u6CA1\u6709\u5F15\u5165\u65B0\u95EE\u9898\n\n## \u8F93\u51FA\u683C\u5F0F\n\n### \u6458\u8981\u62A5\u544A\n```\n## AI Slop Removal Summary\n\n### Files Processed\n- file1.py: X changes\n- file2.py: Y changes\n\n### Critical Review Results\n- Safety: PASS/FAIL\n- Behavior: PASS/FAIL\n- Quality: PASS/FAIL\n\n### Issues Found & Fixed\n1. [Issue description] -> [Fix applied]\n\n### Final Status\n[CLEAN / ISSUES FIXED / REQUIRES ATTENTION]\n```\n\n## \u8D28\u91CF\u4FDD\u8BC1\n- \u6C38\u8FDC\u4E0D\u8981\u79FB\u9664\u6709\u529F\u80FD\u76EE\u7684\u7684\u4EE3\u7801\n- \u59CB\u7EC8\u9A8C\u8BC1\u53D8\u66F4\u7F16\u8BD1/\u89E3\u6790\u6B63\u786E\n- \u59CB\u7EC8\u4FDD\u7559\u6D4B\u8BD5\u8986\u76D6\u7387\n- \u5982\u679C\u5BF9\u53D8\u66F4\u4E0D\u786E\u5B9A\uFF0C\u503E\u5411\u4E8E\u4FDD\u7559\u539F\u59CB\u4EE3\u7801";
1
+ export declare const REMOVE_AI_SLOPS_TEMPLATE = "# \u79FB\u9664 AI Slops \u547D\u4EE4\n\n## \u6B64\u547D\u4EE4\u7684\u4F5C\u7528\n\u5206\u6790\u5F53\u524D\u5206\u652F\u4E2D\u6240\u6709\u53D8\u66F4\u7684\u6587\u4EF6\uFF08\u4E0E\u7236 commit \u76F8\u6BD4\uFF09\uFF0C\u5E76\u884C\u79FB\u9664 AI \u751F\u6210\u7684\u4EE3\u7801\u5473\u9053\uFF0C\u7136\u540E\u5BF9\u53D8\u66F4\u8FDB\u884C\u4E25\u683C\u5BA1\u67E5\u4EE5\u786E\u4FDD\u5B89\u5168\u6027\u548C\u884C\u4E3A\u4FDD\u7559\u3002\u4FEE\u590D\u5BA1\u67E5\u8FC7\u7A0B\u4E2D\u53D1\u73B0\u7684\u4EFB\u4F55\u95EE\u9898\u3002\n\n## \u6B65\u9AA4 0\uFF1A\u4EFB\u52A1\u89C4\u5212\n\n\u4F7F\u7528 TodoWrite \u521B\u5EFA\u4EFB\u52A1\u5217\u8868\uFF1A\n1. \u4ECE\u5206\u652F\u83B7\u53D6\u53D8\u66F4\u7684\u6587\u4EF6\n2. \u5E76\u884C\u5BF9\u6BCF\u4E2A\u6587\u4EF6\u8FD0\u884C ai-slop-remover\n3. \u4E25\u683C\u5BA1\u67E5\u6240\u6709\u53D8\u66F4\n4. \u4FEE\u590D\u53D1\u73B0\u7684\u95EE\u9898\n\n## \u89D2\u8272\u5B9A\u4E49\n\u4F60\u662F\u4E00\u4F4D\u8D44\u6DF1\u4EE3\u7801\u8D28\u91CF\u5DE5\u7A0B\u5E08\uFF0C\u4E13\u6CE8\u4E8E\u8BC6\u522B\u548C\u79FB\u9664 AI \u751F\u6210\u7684\u4EE3\u7801\u6A21\u5F0F\uFF0C\u540C\u65F6\u4FDD\u7559\u539F\u59CB\u529F\u80FD\u3002\u4F60\u5728\u4EE3\u7801\u5BA1\u67E5\u3001\u91CD\u6784\u5B89\u5168\u6027\u548C\u884C\u4E3A\u4FDD\u7559\u65B9\u9762\u6709\u6DF1\u539A\u7684\u4E13\u4E1A\u77E5\u8BC6\u3002\n\n## \u6D41\u7A0B\n\n### \u9636\u6BB5 1\uFF1A\u8BC6\u522B\u53D8\u66F4\u7684\u6587\u4EF6\n\u52A8\u6001\u68C0\u6D4B\u4ED3\u5E93\u7684 base branch\uFF0C\u7136\u540E\u83B7\u53D6\u5F53\u524D\u5206\u652F\u4E2D\u6240\u6709\u53D8\u66F4\u7684\u6587\u4EF6\uFF1A\n```bash\nBASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo \"main\")\ngit diff $(git merge-base \"$BASE_BRANCH\" HEAD)..HEAD --name-only\n```\n\n\u5982\u679C `git symbolic-ref refs/remotes/origin/HEAD` \u4E0D\u53EF\u7528\uFF0C\u5728\u8FD0\u884C\u65F6\u4F7F\u7528\u4ED3\u5E93\u914D\u7F6E\u7684\u8FDC\u7A0B\u9ED8\u8BA4\u5206\u652F\u6765\u68C0\u6D4B base branch\u3002\u53EA\u6709\u5728\u4E07\u4E0D\u5F97\u5DF2\u65F6\u624D\u56DE\u9000\u5230 `main`\u3002\n\n### \u9636\u6BB5 2\uFF1A\u5E76\u884C\u79FB\u9664 AI Slop\n\u5BF9\u4E8E\u6BCF\u4E2A\u53D8\u66F4\u7684\u6587\u4EF6\uFF0C\u4F7F\u7528 ai-slop-remover skill \u901A\u8FC7 Task \u5DE5\u5177\u5E76\u884C\u542F\u52A8\u4E00\u4E2A agent\uFF1A\n\n```\ntask(category=\"quick\", load_skills=[\"ai-slop-remover\"], run_in_background=true, description=\"Remove AI slops from {filename}\", prompt=\"Remove AI slops from: {file_path}\")\n```\n\n**\u5173\u952E**\uFF1A\u5728\u5355\u6761\u6D88\u606F\u4E2D\u542F\u52A8\u6240\u6709 agents\uFF0C\u901A\u8FC7\u591A\u4E2A Task \u5DE5\u5177\u8C03\u7528\u4EE5\u5B9E\u73B0\u6700\u5927\u5E76\u884C\u5EA6\u3002\n\n\u5728\u6BCF\u4E2A\u6587\u4EF6\u4E0A\u8FD0\u884C ai-slop-remover \u4E4B\u524D\uFF0C\u4FDD\u5B58\u4E00\u4E2A\u7279\u5B9A\u4E8E\u6587\u4EF6\u7684\u56DE\u6EDA\u4EA7\u7269\uFF0C\u4EC5\u6355\u83B7 slop-removal pass \u5F15\u5165\u7684\u589E\u91CF\u3002\u5982\u679C\u5BA1\u67E5\u5931\u8D25\uFF0C\u4F7F\u7528\u5B89\u5168\u6A21\u5F0F\uFF08\u5982\u751F\u6210\u6BCF\u4E2A\u6587\u4EF6\u7684 patch \u5E76\u53CD\u5411\u5E94\u7528\uFF09\u6765\u56DE\u6EDA\u3002\n\n\u4E0D\u8981\u4F7F\u7528 `git checkout -- {file_path}` \u6216\u4EFB\u4F55\u4F1A\u4E22\u5F03\u6587\u4EF6\u4E2D\u9884\u5148\u5B58\u5728\u7684\u5206\u652F\u53D8\u66F4\u7684\u56DE\u6EDA\u65B9\u5F0F\u3002\n\n### \u9636\u6BB5 3\uFF1A\u4E25\u683C\u5BA1\u67E5\n\u5728\u6240\u6709 ai-slop-remover agents \u5B8C\u6210\u540E\uFF0C\u4F7F\u7528\u4EE5\u4E0B\u68C0\u67E5\u6E05\u5355\u8FDB\u884C\u4E25\u683C\u5BA1\u67E5\uFF1A\n\n**\u5B89\u5168\u6027\u9A8C\u8BC1**\uFF1A\n- [ ] \u6CA1\u6709\u610F\u5916\u79FB\u9664\u529F\u80FD\u6027\u903B\u8F91\n- [ ] \u6240\u6709\u9519\u8BEF\u5904\u7406\u90FD\u4FDD\u7559\u4E86\n- [ ] \u7C7B\u578B\u63D0\u793A\u4ECD\u7136\u6B63\u786E\u5B8C\u6574\n- [ ] Import \u8BED\u53E5\u4ECD\u7136\u6709\u6548\n- [ ] \u6CA1\u6709\u5BF9 public API \u7684\u7834\u574F\u6027\u53D8\u66F4\n\n**\u884C\u4E3A\u4FDD\u7559**\uFF1A\n- [ ] \u8FD4\u56DE\u503C\u672A\u6539\u53D8\n- [ ] \u526F\u4F5C\u7528\u672A\u6539\u53D8\n- [ ] \u5F02\u5E38\u884C\u4E3A\u672A\u6539\u53D8\n- [ ] \u8FB9\u754C\u60C5\u51B5\u5904\u7406\u4FDD\u7559\n\n**\u4EE3\u7801\u8D28\u91CF**\uFF1A\n- [ ] \u79FB\u9664\u7684\u53D8\u66F4\u786E\u5B9E\u662F AI slop\uFF08\u800C\u975E\u6709\u610F\u7684\u6A21\u5F0F\uFF09\n- [ ] \u5269\u4F59\u4EE3\u7801\u9075\u5FAA\u9879\u76EE\u7EA6\u5B9A\n- [ ] \u6CA1\u6709\u5B64\u7ACB\u4EE3\u7801\u6216\u6B7B\u5F15\u7528\n\n### \u9636\u6BB5 4\uFF1A\u4FEE\u590D\u95EE\u9898\n\u5982\u679C\u5728\u4E25\u683C\u5BA1\u67E5\u4E2D\u53D1\u73B0\u4EFB\u4F55\u95EE\u9898\uFF1A\n1. \u8BC6\u522B\u5177\u4F53\u95EE\u9898\n2. \u89E3\u91CA\u4E3A\u4EC0\u4E48\u8FD9\u662F\u4E2A\u95EE\u9898\n3. \u4F7F\u7528\u4FDD\u5B58\u7684\u6BCF\u4E2A\u6587\u4EF6\u7684 patch \u6216\u7B49\u6548\u7684\u53CD\u5411\u5E94\u7528\u5DE5\u4F5C\u6D41\uFF0C\u4EC5\u56DE\u6EDA ai-slop-remover \u7684\u589E\u91CF\n4. \u5982\u679C\u56DE\u6EDA\u540E\u4ECD\u53D1\u73B0\u5269\u4F59\u7684 AI slops\uFF0C\u901A\u8FC7\u76F4\u63A5\u7F16\u8F91\u6587\u4EF6\u6765\u79FB\u9664\u5B83\u4EEC\u2014\u2014\u4F7F\u7528\u5E76\u884C\u5DE5\u5177\u8C03\u7528\uFF0C\u6309\u6587\u4EF6\u5904\u7406\n5. \u9A8C\u8BC1\u4FEE\u590D\u6CA1\u6709\u5F15\u5165\u65B0\u95EE\u9898\n\n## \u8F93\u51FA\u683C\u5F0F\n\n### \u6458\u8981\u62A5\u544A\n```\n## AI Slop \u79FB\u9664\u6458\u8981\n\n### \u5DF2\u5904\u7406\u7684\u6587\u4EF6\n- file1.py: X \u5904\u53D8\u66F4\n- file2.py: Y \u5904\u53D8\u66F4\n\n### \u4E25\u683C\u5BA1\u67E5\u7ED3\u679C\n- \u5B89\u5168\u6027\uFF1APASS/FAIL\n- \u884C\u4E3A\uFF1APASS/FAIL\n- \u8D28\u91CF\uFF1APASS/FAIL\n\n### \u53D1\u73B0\u5E76\u4FEE\u590D\u7684\u95EE\u9898\n1. [\u95EE\u9898\u63CF\u8FF0] -> [\u5E94\u7528\u7684\u4FEE\u590D]\n\n### \u6700\u7EC8\u72B6\u6001\n[CLEAN / ISSUES FIXED / REQUIRES ATTENTION]\n```\n\n## \u8D28\u91CF\u4FDD\u8BC1\n- \u6C38\u8FDC\u4E0D\u8981\u79FB\u9664\u6709\u529F\u80FD\u6027\u76EE\u7684\u7684\u4EE3\u7801\n- \u59CB\u7EC8\u9A8C\u8BC1\u53D8\u66F4\u80FD\u6B63\u786E\u7F16\u8BD1/\u89E3\u6790\n- \u59CB\u7EC8\u4FDD\u7559\u6D4B\u8BD5\u8986\u76D6\u7387\n- \u5982\u679C\u5BF9\u67D0\u4E2A\u53D8\u66F4\u4E0D\u786E\u5B9A\uFF0C\u503E\u5411\u4E8E\u4FDD\u7559\u539F\u59CB\u4EE3\u7801";
@@ -1 +1 @@
1
- export declare const START_WORK_TEMPLATE = "\u4F60\u6B63\u5728\u542F\u52A8 Sisyphus \u5DE5\u4F5C\u4F1A\u8BDD\u3002\n\n## \u53C2\u6570\n\n- `/start-work [plan-name] [--worktree <path>]`\n - `plan-name`\uFF08\u53EF\u9009\uFF09\uFF1A\u8981\u542F\u52A8\u7684\u8BA1\u5212\u540D\u79F0\u6216\u90E8\u5206\u5339\u914D\n - `--worktree <path>`\uFF08\u53EF\u9009\uFF09\uFF1A\u8981\u5DE5\u4F5C\u7684\u73B0\u6709 git worktree \u7684\u7EDD\u5BF9\u8DEF\u5F84\n - \u5982\u679C\u6307\u5B9A\u4E14\u6709\u6548\uFF1Ahook \u9884\u8BBE boulder.json \u4E2D\u7684 worktree_path\n - \u5982\u679C\u6307\u5B9A\u4F46\u65E0\u6548\uFF1A\u4F60\u5FC5\u987B\u5148\u8FD0\u884C `git worktree add <path> <branch>`\n - \u5982\u679C\u7701\u7565\uFF1A\u76F4\u63A5\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E2D\u5DE5\u4F5C\uFF08\u4E0D\u4F7F\u7528 worktree\uFF09\n\n## \u505A\u4EC0\u4E48\n\n1. **\u67E5\u627E\u53EF\u7528\u8BA1\u5212**\uFF1A\u5728 `.sisyphus/plans/` \u4E2D\u641C\u7D22 Prometheus \u751F\u6210\u7684\u8BA1\u5212\u6587\u4EF6\n\n2. **\u68C0\u67E5\u6D3B\u52A8\u7684 boulder \u72B6\u6001**\uFF1A\u5982\u679C\u5B58\u5728\u5219\u8BFB\u53D6 `.sisyphus/boulder.json`\n\n3. **\u51B3\u7B56\u903B\u8F91**\uFF1A\n - \u5982\u679C `.sisyphus/boulder.json` \u5B58\u5728 AND \u8BA1\u5212\u672A\u5B8C\u6210\uFF08\u6709\u672A\u52FE\u9009\u9879\uFF09\uFF1A\n - **\u8FFD\u52A0**\u5F53\u524D\u4F1A\u8BDD\u5230 session_ids\n - \u7EE7\u7EED\u73B0\u6709\u8BA1\u5212\u7684\u5DE5\u4F5C\n - \u5982\u679C\u6CA1\u6709\u6D3B\u52A8\u8BA1\u5212 OR \u8BA1\u5212\u5DF2\u5B8C\u6210\uFF1A\n - \u5217\u51FA\u53EF\u7528\u8BA1\u5212\u6587\u4EF6\n - \u5982\u679C\u53EA\u6709\u4E00\u4E2A\u8BA1\u5212\uFF1A\u81EA\u52A8\u9009\u62E9\n - \u5982\u679C\u6709\u591A\u4E2A\u8BA1\u5212\uFF1A\u663E\u793A\u5E26\u65F6\u95F4\u6233\u7684\u5217\u8868\uFF0C\u8BF7\u7528\u6237\u9009\u62E9\n\n4. **Worktree \u8BBE\u7F6E**\uFF08\u4EC5\u5F53\u660E\u786E\u6307\u5B9A\u4E86 `--worktree` \u4E14 boulder.json \u4E2D\u672A\u8BBE\u7F6E `worktree_path` \u65F6\uFF09\uFF1A\n 1. `git worktree list --porcelain` - \u67E5\u770B\u53EF\u7528\u7684 worktrees\n 2. \u521B\u5EFA\uFF1A`git worktree add <absolute-path> <branch-or-HEAD>`\n 3. \u66F4\u65B0 boulder.json \u6DFB\u52A0 `\"worktree_path\": \"<absolute-path>\"`\n 4. \u6240\u6709\u5DE5\u4F5C\u5728\u8BE5 worktree \u76EE\u5F55\u5185\u8FDB\u884C\n\n5. **\u521B\u5EFA/\u66F4\u65B0 boulder.json**\uFF1A\n ```json\n {\n \"active_plan\": \"/absolute/path/to/plan.md\",\n \"started_at\": \"ISO_TIMESTAMP\",\n \"session_ids\": [\"session_id_1\", \"session_id_2\"],\n \"plan_name\": \"plan-name\",\n \"worktree_path\": \"/absolute/path/to/git/worktree\"\n }\n ```\n\n6. **\u8BFB\u53D6\u8BA1\u5212\u6587\u4EF6**\u5E76\u6839\u636E atlas \u5DE5\u4F5C\u6D41\u5F00\u59CB\u6267\u884C\u4EFB\u52A1\n\n## \u8F93\u51FA\u683C\u5F0F\n\n\u5217\u51FA\u8BA1\u5212\u4F9B\u9009\u62E9\u65F6\uFF1A\n```\nAvailable Work Plans\n\nCurrent Time: {ISO timestamp}\nSession ID: {current session id}\n\n1. [plan-name-1.md] - Modified: {date} - Progress: 3/10 tasks\n2. [plan-name-2.md] - Modified: {date} - Progress: 0/5 tasks\n\nWhich plan would you like to work on? (Enter number or plan name)\n```\n\n\u6062\u590D\u73B0\u6709\u5DE5\u4F5C\u65F6\uFF1A\n```\nResuming Work Session\n\nActive Plan: {plan-name}\nProgress: {completed}/{total} tasks\nSessions: {count} (appending current session)\nWorktree: {worktree_path}\n\nReading plan and continuing from last incomplete task...\n```\n\n\u81EA\u52A8\u9009\u62E9\u5355\u4E2A\u8BA1\u5212\u65F6\uFF1A\n```\nStarting Work Session\n\nPlan: {plan-name}\nSession ID: {session_id}\nStarted: {timestamp}\nWorktree: {worktree_path}\n\nReading plan and beginning execution...\n```\n\n## \u5173\u952E\u8981\u70B9\n\n- session_id \u7531 hook \u6CE8\u5165 - \u76F4\u63A5\u4F7F\u7528\n- \u5728\u5F00\u59CB\u5DE5\u4F5C\u524D\u59CB\u7EC8\u66F4\u65B0 boulder.json\n- \u5982\u679C boulder.json \u4E2D\u8BBE\u7F6E\u4E86 worktree_path\uFF0C\u6240\u6709\u5DE5\u4F5C\u90FD\u5728\u8BE5 worktree \u76EE\u5F55\u5185\u8FDB\u884C\n- \u5728\u59D4\u6258\u4EFB\u4F55\u4EFB\u52A1\u524D\u5148\u8BFB\u53D6\u5B8C\u6574\u8BA1\u5212\u6587\u4EF6\n- \u9075\u5FAA atlas \u59D4\u6258\u534F\u8BAE\uFF087 \u90E8\u5206\u683C\u5F0F\uFF09\n\n## \u4EFB\u52A1\u5206\u89E3\uFF08\u5F3A\u5236\uFF09\n\n\u8BFB\u53D6\u8BA1\u5212\u6587\u4EF6\u540E\uFF0C\u4F60\u5FC5\u987B\u5C06\u6BCF\u4E2A\u8BA1\u5212\u4EFB\u52A1\u5206\u89E3\u4E3A\u7C92\u5316\u7684\u3001\u5B9E\u73B0\u7EA7\u522B\u7684\u5B50\u6B65\u9AA4\uFF0C\u5E76\u5728\u5F00\u59CB\u4EFB\u4F55\u5DE5\u4F5C\u524D\u5C06\u6240\u6709\u8FD9\u4E9B\u6CE8\u518C\u4E3A task/todo \u9879\u3002\n\n**\u5982\u4F55\u5206\u89E3**\uFF1A\n- \u6BCF\u4E2A\u8BA1\u5212\u590D\u9009\u6846\u9879\uFF08\u4F8B\u5982\uFF1A`- [ ] Add user authentication`\uFF09\u5FC5\u987B\u62C6\u5206\u4E3A\u5177\u4F53\u7684\u3001\u53EF\u64CD\u4F5C\u7684\u5B50\u4EFB\u52A1\n- \u5B50\u4EFB\u52A1\u5E94\u8BE5\u8DB3\u591F\u5177\u4F53\uFF0C\u6BCF\u4E2A\u90FD\u6D89\u53CA\u660E\u786E\u7684\u6587\u4EF6/\u51FD\u6570\u96C6\u5408\n- \u5305\u542B\uFF1A\u8981\u4FEE\u6539\u7684\u6587\u4EF6\u3001\u8981\u66F4\u6539\u4EC0\u4E48\u3001\u9884\u671F\u884C\u4E3A\u3001\u5982\u4F55\u9A8C\u8BC1\n- \u4E0D\u8981\u7559\u4E0B\u6A21\u7CCA\u4EFB\u52A1\u2014\u2014\"\u5B9E\u73B0 feature X\" \u4E0D\u53EF\u63A5\u53D7\uFF1B\"\u5728 src/auth/middleware.ts \u4E2D\u6DFB\u52A0 validateToken() \u68C0\u67E5 JWT \u8FC7\u671F\u5E76\u8FD4\u56DE 401\" \u662F\u53EF\u63A5\u53D7\u7684\n\n**\u5206\u89E3\u793A\u4F8B**\uFF1A\n\u8BA1\u5212\u4EFB\u52A1\uFF1A`- [ ] Add rate limiting to API`\n\u2192 Todo \u9879\uFF1A\n 1. \u521B\u5EFA `src/middleware/rate-limiter.ts`\uFF0C\u4F7F\u7528\u6ED1\u52A8\u7A97\u53E3\u7B97\u6CD5\uFF08\u6BCF\u4E2A IP \u6700\u591A 100 req/min\uFF09\n 2. \u5728 `src/app.ts` \u8DEF\u7531\u5668\u94FE\u4E2D\u6DFB\u52A0 RateLimiter \u4E2D\u95F4\u4EF6\uFF0C\u5728 auth \u4E2D\u95F4\u4EF6\u4E4B\u524D\n 3. \u5728 `rate-limiter.ts` \u4E2D\u7684\u54CD\u5E94\u6DFB\u52A0\u9650\u6D41\u5934\uFF08X-RateLimit-Limit, X-RateLimit-Remaining\uFF09\n 4. \u6DFB\u52A0\u6D4B\u8BD5\uFF1A\u5728 `src/middleware/rate-limiter.test.ts` \u4E2D\u9A8C\u8BC1\u8D85\u8FC7\u9650\u5236\u540E\u8FD4\u56DE 429\n 5. \u6DFB\u52A0\u6D4B\u8BD5\uFF1A\u9A8C\u8BC1\u6B63\u5E38\u54CD\u5E94\u4E2D\u5B58\u5728\u5934\u4FE1\u606F\n\n\u5C06\u8FD9\u4E9B\u6CE8\u518C\u4E3A task/todo \u9879\uFF0C\u4EE5\u4FBF\u5728\u6574\u4E2A\u4F1A\u8BDD\u4E2D\u8DDF\u8E2A\u548C\u663E\u793A\u8FDB\u5EA6\u3002\n\n## WORKTREE \u5B8C\u6210\n\n\u5F53\u5728 worktree \u4E2D\u5DE5\u4F5C\uFF08boulder.json \u4E2D\u8BBE\u7F6E\u4E86 `worktree_path`\uFF09\u4E14\u6240\u6709\u8BA1\u5212\u4EFB\u52A1\u5B8C\u6210\u65F6\uFF1A\n1. \u63D0\u4EA4 worktree \u4E2D\u6240\u6709\u5269\u4F59\u7684\u53D8\u66F4\n2. **\u5C06 .sisyphus \u72B6\u6001\u540C\u6B65\u56DE\u6765**\uFF1A\u5728\u79FB\u9664\u524D\u5C06 `.sisyphus/` \u4ECE worktree \u590D\u5236\u5230\u4E3B\u4ED3\u5E93\u3002\n \u5F53 `.sisyphus/` \u88AB gitignore \u65F6\u8FD9\u5F88\u5173\u952E\u2014\u2014\u5426\u5219 worktree \u6267\u884C\u671F\u95F4\u5199\u5165\u7684\u72B6\u6001\u4F1A\u4E22\u5931\u3002\n ```bash\n cp -r <worktree-path>/.sisyphus/* <main-repo>/.sisyphus/ 2>/dev/null || true\n ```\n3. \u5207\u6362\u5230\u4E3B\u5DE5\u4F5C\u76EE\u5F55\uFF08\u539F\u59CB\u4ED3\u5E93\uFF0C\u800C\u975E worktree\uFF09\n4. \u5C06 worktree \u5206\u652F\u5408\u5E76\u5230\u5F53\u524D\u5206\u652F\uFF1A`git merge <worktree-branch>`\n5. \u5982\u679C\u5408\u5E76\u6210\u529F\uFF0C\u6E05\u7406\uFF1A`git worktree remove <worktree-path>`\n6. \u79FB\u9664 boulder.json \u72B6\u6001\n\n\u8FD9\u662F\u4F7F\u7528 `--worktree` \u65F6\u7684\u9ED8\u8BA4\u884C\u4E3A\u3002\u4EC5\u5728\u7528\u6237\u660E\u786E\u6307\u793A\u65F6\u8DF3\u8FC7\u5408\u5E76\uFF08\u4F8B\u5982\uFF0C\u8981\u6C42\u521B\u5EFA PR\uFF09\u3002";
1
+ export declare const START_WORK_TEMPLATE = "\u4F60\u6B63\u5728\u542F\u52A8\u4E00\u4E2A Sisyphus \u5DE5\u4F5C\u4F1A\u8BDD\u3002\n\n## \u53C2\u6570\n\n- `/start-work [plan-name] [--worktree <path>]`\n - `plan-name`\uFF08\u53EF\u9009\uFF09\uFF1A\u8981\u542F\u52A8\u7684\u8BA1\u5212\u540D\u79F0\u6216\u90E8\u5206\u5339\u914D\n - `--worktree <path>`\uFF08\u53EF\u9009\uFF09\uFF1A\u8981\u5DE5\u4F5C\u7684\u73B0\u6709 git worktree \u7684\u7EDD\u5BF9\u8DEF\u5F84\n - \u5982\u679C\u6307\u5B9A\u4E14\u6709\u6548\uFF1Ahook \u4F1A\u9884\u5148\u5728 boulder.json \u4E2D\u8BBE\u7F6E worktree_path\n - \u5982\u679C\u6307\u5B9A\u4F46\u65E0\u6548\uFF1A\u4F60\u5FC5\u987B\u5148\u8FD0\u884C `git worktree add <path> <branch>`\n - \u5982\u679C\u7701\u7565\uFF1A\u76F4\u63A5\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E2D\u5DE5\u4F5C\uFF08\u4E0D\u4F7F\u7528 worktree\uFF09\n\n## \u9700\u8981\u505A\u4EC0\u4E48\n\n1. **\u67E5\u627E\u53EF\u7528\u8BA1\u5212**\uFF1A\u5728 `.sisyphus/plans/` \u4E2D\u641C\u7D22 Prometheus \u751F\u6210\u7684\u8BA1\u5212\u6587\u4EF6\n\n2. **\u68C0\u67E5\u6D3B\u8DC3\u7684 boulder \u72B6\u6001**\uFF1A\u5982\u679C\u5B58\u5728\u5219\u8BFB\u53D6 `.sisyphus/boulder.json`\n\n3. **\u51B3\u7B56\u903B\u8F91**\uFF1A\n - \u5982\u679C `.sisyphus/boulder.json` \u5B58\u5728\u4E14\u8BA1\u5212\u672A\u5B8C\u6210\uFF08\u6709\u672A\u52FE\u9009\u9879\uFF09\uFF1A\n - \u5C06\u5F53\u524D session \u8FFD\u52A0\u5230 session_ids\n - \u7EE7\u7EED\u5904\u7406\u73B0\u6709\u8BA1\u5212\n - \u5982\u679C\u6CA1\u6709\u6D3B\u8DC3\u8BA1\u5212\u6216\u8BA1\u5212\u5DF2\u5B8C\u6210\uFF1A\n - \u5217\u51FA\u53EF\u7528\u7684\u8BA1\u5212\u6587\u4EF6\n - \u5982\u679C\u53EA\u6709\u4E00\u4E2A\u8BA1\u5212\uFF1A\u81EA\u52A8\u9009\u62E9\n - \u5982\u679C\u6709\u591A\u4E2A\u8BA1\u5212\uFF1A\u663E\u793A\u5E26\u65F6\u95F4\u6233\u7684\u5217\u8868\uFF0C\u8BF7\u7528\u6237\u9009\u62E9\n\n4. **Worktree \u8BBE\u7F6E**\uFF08\u4EC5\u5728\u660E\u786E\u6307\u5B9A\u4E86 `--worktree` \u4E14 boulder.json \u4E2D\u5C1A\u672A\u8BBE\u7F6E `worktree_path` \u65F6\u6267\u884C\uFF09\uFF1A\n 1. `git worktree list --porcelain` - \u67E5\u770B\u53EF\u7528\u7684 worktrees\n 2. \u521B\u5EFA\uFF1A`git worktree add <absolute-path> <branch-or-HEAD>`\n 3. \u66F4\u65B0 boulder.json\uFF0C\u6DFB\u52A0 `\"worktree_path\": \"<absolute-path>\"`\n 4. \u6240\u6709\u5DE5\u4F5C\u5728 worktree \u76EE\u5F55\u5185\u8FDB\u884C\n\n5. **\u521B\u5EFA/\u66F4\u65B0 boulder.json**\uFF1A\n ```json\n {\n \"active_plan\": \"/absolute/path/to/plan.md\",\n \"started_at\": \"ISO_TIMESTAMP\",\n \"session_ids\": [\"session_id_1\", \"session_id_2\"],\n \"plan_name\": \"plan-name\",\n \"worktree_path\": \"/absolute/path/to/git/worktree\"\n }\n ```\n\n6. **\u8BFB\u53D6\u8BA1\u5212\u6587\u4EF6**\u5E76\u6309\u7167 atlas workflow \u5F00\u59CB\u6267\u884C\u4EFB\u52A1\n\n## \u8F93\u51FA\u683C\u5F0F\n\n\u5217\u51FA\u8BA1\u5212\u4F9B\u9009\u62E9\u65F6\uFF1A\n```\nAvailable Work Plans\n\nCurrent Time: {ISO timestamp}\nSession ID: {current session id}\n\n1. [plan-name-1.md] - Modified: {date} - Progress: 3/10 tasks\n2. [plan-name-2.md] - Modified: {date} - Progress: 0/5 tasks\n\nWhich plan would you like to work on? (Enter number or plan name)\n```\n\n\u6062\u590D\u73B0\u6709\u5DE5\u4F5C\u65F6\uFF1A\n```\nResuming Work Session\n\nActive Plan: {plan-name}\nProgress: {completed}/{total} tasks\nSessions: {count} (appending current session)\nWorktree: {worktree_path}\n\nReading plan and continuing from last incomplete task...\n```\n\n\u81EA\u52A8\u9009\u62E9\u5355\u4E2A\u8BA1\u5212\u65F6\uFF1A\n```\nStarting Work Session\n\nPlan: {plan-name}\nSession ID: {session_id}\nStarted: {timestamp}\nWorktree: {worktree_path}\n\nReading plan and beginning execution...\n```\n\n## \u5173\u952E\u89C4\u5219\n\n- session_id \u7531 hook \u6CE8\u5165\u2014\u2014\u76F4\u63A5\u4F7F\u7528\n- \u5728\u5F00\u59CB\u5DE5\u4F5C\u524D\u59CB\u7EC8\u66F4\u65B0 boulder.json\n- \u5982\u679C\u5728 boulder.json \u4E2D\u8BBE\u7F6E\u4E86 worktree_path\uFF0C\u6240\u6709\u5DE5\u4F5C\u5728 worktree \u76EE\u5F55\u5185\u8FDB\u884C\n- \u5728\u59D4\u6258\u4EFB\u4F55\u4EFB\u52A1\u4E4B\u524D\u5148\u9605\u8BFB\u5B8C\u6574\u7684\u8BA1\u5212\u6587\u4EF6\n- \u9075\u5FAA atlas \u59D4\u6258\u534F\u8BAE\uFF087 \u6BB5\u5F0F\u683C\u5F0F\uFF09\n\n## \u4EFB\u52A1\u5206\u89E3\uFF08\u5F3A\u5236\uFF09\n\n\u5728\u9605\u8BFB\u8BA1\u5212\u6587\u4EF6\u540E\uFF0C\u4F60\u5FC5\u987B\u5C06\u6BCF\u4E2A\u8BA1\u5212\u4EFB\u52A1\u5206\u89E3\u4E3A\u7EC6\u7C92\u5EA6\u7684\u3001\u53EF\u5B9E\u73B0\u7EA7\u522B\u7684\u5B50\u6B65\u9AA4\uFF0C\u5E76\u5728\u5F00\u59CB\u4EFB\u4F55\u5DE5\u4F5C\u4E4B\u524D\u5C06\u5B83\u4EEC\u5168\u90E8\u6CE8\u518C\u4E3A task/todo \u9879\u3002\n\n**\u5982\u4F55\u5206\u89E3**\uFF1A\n- \u6BCF\u4E2A\u8BA1\u5212\u590D\u9009\u6846\u9879\uFF08\u5982 `- [ ] Add user authentication`\uFF09\u5FC5\u987B\u62C6\u5206\u4E3A\u5177\u4F53\u7684\u3001\u53EF\u64CD\u4F5C\u7684\u5B50\u4EFB\u52A1\n- \u5B50\u4EFB\u52A1\u5E94\u8BE5\u8DB3\u591F\u5177\u4F53\uFF0C\u6BCF\u4E2A\u90FD\u6D89\u53CA\u4E00\u7EC4\u660E\u786E\u7684\u6587\u4EF6/\u51FD\u6570\n- \u5305\u542B\uFF1A\u8981\u4FEE\u6539\u7684\u6587\u4EF6\u3001\u8981\u66F4\u6539\u4EC0\u4E48\u3001\u671F\u671B\u884C\u4E3A\u4EE5\u53CA\u5982\u4F55\u9A8C\u8BC1\n- \u4E0D\u8981\u7559\u4E0B\u6A21\u7CCA\u7684\u4EFB\u52A1\u2014\u2014\"implement feature X\"\u662F\u4E0D\u53EF\u63A5\u53D7\u7684\uFF1B\"\u5728 src/auth/middleware.ts \u4E2D\u6DFB\u52A0 validateToken()\uFF0C\u68C0\u67E5 JWT \u8FC7\u671F\u5E76\u8FD4\u56DE 401\"\u624D\u662F\u53EF\u63A5\u53D7\u7684\n\n**\u5206\u89E3\u793A\u4F8B**\uFF1A\n\u8BA1\u5212\u4EFB\u52A1\uFF1A`- [ ] Add rate limiting to API`\n\u2192 Todo \u9879\uFF1A\n 1. \u5728 `src/middleware/rate-limiter.ts` \u4E2D\u521B\u5EFA\u6ED1\u52A8\u7A97\u53E3\u7B97\u6CD5\uFF08\u6BCF\u4E2A IP \u6700\u591A 100 \u8BF7\u6C42/\u5206\u949F\uFF09\n 2. \u5728 `src/app.ts` \u8DEF\u7531\u94FE\u4E2D\uFF0C\u5728 auth middleware \u4E4B\u524D\u6DFB\u52A0 RateLimiter middleware\n 3. \u5728 `rate-limiter.ts` \u4E2D\u5411\u54CD\u5E94\u6DFB\u52A0\u901F\u7387\u9650\u5236\u5934\uFF08X-RateLimit-Limit\u3001X-RateLimit-Remaining\uFF09\n 4. \u6DFB\u52A0\u6D4B\u8BD5\uFF1A\u5728 `src/middleware/rate-limiter.test.ts` \u4E2D\u9A8C\u8BC1\u8D85\u8FC7\u9650\u5236\u540E\u8FD4\u56DE 429\n 5. \u6DFB\u52A0\u6D4B\u8BD5\uFF1A\u9A8C\u8BC1\u6B63\u5E38\u54CD\u5E94\u4E2D\u5B58\u5728\u8FD9\u4E9B\u5934\n\n\u5C06\u8FD9\u4E9B\u6CE8\u518C\u4E3A task/todo \u9879\uFF0C\u4EE5\u4FBF\u5728\u6574\u4E2A\u4F1A\u8BDD\u4E2D\u8FFD\u8E2A\u548C\u663E\u793A\u8FDB\u5EA6\u3002\n\n## WORKTREE \u5B8C\u6210\n\n\u5F53\u5728 worktree \u4E2D\u5DE5\u4F5C\uFF08boulder.json \u4E2D\u8BBE\u7F6E\u4E86 `worktree_path`\uFF09\u4E14\u6240\u6709\u8BA1\u5212\u4EFB\u52A1\u90FD\u5DF2\u5B8C\u6210\u65F6\uFF1A\n1. \u63D0\u4EA4 worktree \u4E2D\u6240\u6709\u5269\u4F59\u7684\u53D8\u66F4\n2. **\u5C06 .sisyphus \u72B6\u6001\u540C\u6B65\u56DE\u4E3B\u4ED3\u5E93**\uFF1A\u5728\u79FB\u9664 worktree \u4E4B\u524D\uFF0C\u5C06 `.sisyphus/` \u4ECE worktree \u590D\u5236\u5230\u4E3B\u4ED3\u5E93\u3002\n \u5F53 `.sisyphus/` \u88AB gitignore \u65F6\uFF0C\u8FD9\u4E00\u70B9\u81F3\u5173\u91CD\u8981\u2014\u2014\u5426\u5219 worktree \u6267\u884C\u671F\u95F4\u5199\u5165\u7684\u72B6\u6001\u5C06\u4F1A\u4E22\u5931\u3002\n ```bash\n cp -r <worktree-path>/.sisyphus/* <main-repo>/.sisyphus/ 2>/dev/null || true\n ```\n3. \u5207\u6362\u5230\u4E3B\u5DE5\u4F5C\u76EE\u5F55\uFF08\u539F\u59CB\u4ED3\u5E93\uFF0C\u800C\u4E0D\u662F worktree\uFF09\n4. \u5C06 worktree \u5206\u652F\u5408\u5E76\u5230\u5F53\u524D\u5206\u652F\uFF1A`git merge <worktree-branch>`\n5. \u5982\u679C\u5408\u5E76\u6210\u529F\uFF0C\u6E05\u7406\uFF1A`git worktree remove <worktree-path>`\n6. \u79FB\u9664 boulder.json \u72B6\u6001\n\n\u8FD9\u662F\u4F7F\u7528 `--worktree` \u65F6\u7684\u9ED8\u8BA4\u884C\u4E3A\u3002\u53EA\u6709\u5728\u7528\u6237\u660E\u786E\u6307\u793A\u4E0D\u5408\u5E76\u65F6\u624D\u8DF3\u8FC7\u5408\u5E76\uFF08\u5982\u8981\u6C42\u521B\u5EFA PR\uFF09\u3002";
@@ -1 +1 @@
1
- export declare const STOP_CONTINUATION_TEMPLATE = "\u505C\u6B62\u5F53\u524D\u4F1A\u8BDD\u7684\u6240\u6709\u7EE7\u7EED\u673A\u5236\u3002\n\n\u6B64\u547D\u4EE4\u5C06:\n1. \u505C\u6B62 todo-continuation-enforcer \u81EA\u52A8\u7EE7\u7EED\u672A\u5B8C\u6210\u7684\u4EFB\u52A1\n2. \u53D6\u6D88\u4EFB\u4F55\u6D3B\u52A8\u7684 Ralph Loop\n3. \u6E05\u9664\u5F53\u524D\u9879\u76EE\u7684 boulder \u72B6\u6001\n\n\u8FD0\u884C\u6B64\u547D\u4EE4\u540E:\n- \u4F1A\u8BDD\u5728\u7A7A\u95F2\u65F6\u4E0D\u4F1A\u81EA\u52A8\u7EE7\u7EED\n- \u4F60\u53EF\u4EE5\u5728\u51C6\u5907\u597D\u65F6\u624B\u52A8\u7EE7\u7EED\u5DE5\u4F5C\n- \u505C\u6B62\u72B6\u6001\u662F\u6309\u4F1A\u8BDD\u7684\uFF0C\u4F1A\u8BDD\u7ED3\u675F\u65F6\u6E05\u9664\n\n\u5F53\u4F60\u9700\u8981\u6682\u505C\u81EA\u52A8\u7EE7\u7EED\u5E76\u624B\u52A8\u63A7\u5236\u65F6\u4F7F\u7528\u3002";
1
+ export declare const STOP_CONTINUATION_TEMPLATE = "\u505C\u6B62\u5F53\u524D\u4F1A\u8BDD\u7684\u6240\u6709\u81EA\u52A8\u7EED\u884C\u673A\u5236\u3002\n\n\u6B64\u547D\u4EE4\u5C06\uFF1A\n1. \u505C\u6B62 todo-continuation-enforcer \u81EA\u52A8\u7EED\u884C\u672A\u5B8C\u6210\u4EFB\u52A1\u7684\u673A\u5236\n2. \u53D6\u6D88\u4EFB\u4F55\u6D3B\u8DC3\u7684 Ralph Loop\n3. \u6E05\u9664\u5F53\u524D\u9879\u76EE\u7684 boulder state\n\n\u8FD0\u884C\u6B64\u547D\u4EE4\u540E\uFF1A\n- \u4F1A\u8BDD\u5728\u7A7A\u95F2\u65F6\u4E0D\u4F1A\u81EA\u52A8\u7EED\u884C\n- \u4F60\u53EF\u4EE5\u5728\u51C6\u5907\u597D\u65F6\u624B\u52A8\u7EE7\u7EED\u5DE5\u4F5C\n- \u505C\u6B62\u72B6\u6001\u4EE5\u4F1A\u8BDD\u4E3A\u5355\u4F4D\uFF0C\u4F1A\u8BDD\u7ED3\u675F\u540E\u6E05\u9664\n\n\u5F53\u4F60\u9700\u8981\u6682\u505C\u81EA\u52A8\u7EED\u884C\u5E76\u63A5\u7BA1\u624B\u52A8\u63A7\u5236\u65F6\u4F7F\u7528\u6B64\u547D\u4EE4\u3002";
@@ -1 +1 @@
1
- export declare const GIT_MASTER_COMMIT_WORKFLOW_SECTION = "## \u9636\u6BB5 0: \u5E76\u884C\u4E0A\u4E0B\u6587\u6536\u96C6\uFF08\u5F3A\u5236\u4F18\u5148\u6B65\u9AA4\uFF09\n\n<parallel_analysis>\n**\u540C\u65F6\u5E76\u884C\u6267\u884C\u4EE5\u4E0B\u6240\u6709\u547D\u4EE4\u4EE5\u6700\u5C0F\u5316\u5EF6\u8FDF\uFF1A**\n\n```bash\n# \u7B2C 1 \u7EC4\uFF1A\u5F53\u524D\u72B6\u6001\ngit status\ngit diff --staged --stat\ngit diff --stat\n\n# \u7B2C 2 \u7EC4\uFF1A\u5386\u53F2\u4E0A\u4E0B\u6587\ngit log -30 --oneline\ngit log -30 --pretty=format:\"%s\"\n\n# \u7B2C 3 \u7EC4\uFF1A\u5206\u652F\u4E0A\u4E0B\u6587\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**\u540C\u65F6\u6355\u83B7\u4EE5\u4E0B\u6570\u636E\u70B9\uFF1A**\n1. \u54EA\u4E9B\u6587\u4EF6\u53D1\u751F\u4E86\u53D8\u5316\uFF08\u5DF2\u6682\u5B58 vs \u672A\u6682\u5B58\uFF09\n2. \u6700\u8FD1 30 \u6761 commit \u6D88\u606F\u7528\u4E8E\u6837\u5F0F\u68C0\u6D4B\n3. \u5206\u652F\u76F8\u5BF9\u4E8E main/master \u7684\u4F4D\u7F6E\n4. \u5206\u652F\u662F\u5426\u5177\u6709\u4E0A\u6E38\u8DDF\u8E2A\n5. \u5C06\u8FDB\u5165 PR \u7684 commits\uFF08\u4EC5\u672C\u5730\uFF09\n</parallel_analysis>\n\n---\n\n## \u9636\u6BB5 1: \u6837\u5F0F\u68C0\u6D4B\uFF08\u963B\u585E - \u5FC5\u987B\u5148\u8F93\u51FA\u518D\u7EE7\u7EED\uFF09\n\n<style_detection>\n**\u672C\u9636\u6BB5\u5FC5\u987B\u5F3A\u5236\u8F93\u51FA** - \u5728\u8FDB\u5165\u9636\u6BB5 2 \u4E4B\u524D\u5FC5\u987B\u6253\u5370\u5206\u6790\u7ED3\u679C\u3002\n\n### 1.1 \u8BED\u8A00\u68C0\u6D4B\n\n```\n\u4ECE git log -30 \u4E2D\u7EDF\u8BA1\uFF1A\n- \u5305\u542B\u97E9\u6587\u5B57\u7B26\uFF1AN \u6761 commits\n- \u7EAF\u82F1\u6587\uFF1AM \u6761 commits\n- \u6DF7\u5408\uFF1AK \u6761 commits\n\n\u51B3\u7B56\u89C4\u5219\uFF1A\n- \u82E5\u4E2D\u6587 >= 50% -> CHINESE\n- \u82E5\u82F1\u6587 >= 50% -> ENGLISH\n- \u82E5\u4E3A\u6DF7\u5408 -> \u4F7F\u7528\u591A\u6570\u8BED\u8A00\n```\n\n### 1.2 Commit \u6837\u5F0F\u5206\u7C7B\n\n| \u6837\u5F0F | \u6A21\u5F0F | \u793A\u4F8B | \u68C0\u6D4B\u6B63\u5219 |\n|-------|---------|---------|-----------------|\n| `SEMANTIC` | `type: message` \u6216 `type(scope): message` | `feat: add login` | `/^(feat\\|fix\\|chore\\|refactor\\|docs\\|test\\|ci\\|style\\|perf\\|build)(\\(.+\\))?:/` |\n| `PLAIN` | \u4EC5\u6709\u63CF\u8FF0\uFF0C\u65E0\u524D\u7F00 | `Add login feature` | \u65E0 conventional prefix\uFF0C\u5B57\u6570 >3 |\n| `SENTENCE` | \u5B8C\u6574\u53E5\u5B50\u98CE\u683C | `Implemented the new login flow` | \u5B8C\u6574\u8BED\u6CD5\u53E5\u5B50 |\n| `SHORT` | \u6700\u7B80\u5173\u952E\u8BCD | `format`, `lint` | \u4EC5 1-3 \u4E2A\u8BCD |\n\n**\u68C0\u6D4B\u7B97\u6CD5\uFF1A**\n```\nsemantic_count = \u5339\u914D semantic \u6B63\u5219\u7684 commits \u6570\u91CF\nplain_count = \u975E semantic \u4E14\u5B57\u6570 >3 \u7684 commits \u6570\u91CF\nshort_count = \u5B57\u6570 <=3 \u7684 commits \u6570\u91CF\n\n\u82E5 semantic_count >= 15 (50%)\uFF1ASTYLE = SEMANTIC\n\u5426\u5219\u82E5 plain_count >= 15\uFF1ASTYLE = PLAIN\n\u5426\u5219\u82E5 short_count >= 10\uFF1ASTYLE = SHORT\n\u5426\u5219\uFF1ASTYLE = PLAIN\uFF08\u5B89\u5168\u9ED8\u8BA4\u503C\uFF09\n```\n\n### 1.3 \u5F3A\u5236\u8F93\u51FA\uFF08\u963B\u585E\uFF09\n\n**\u5728\u8FDB\u5165\u9636\u6BB5 2 \u4E4B\u524D\u5FC5\u987B\u8F93\u51FA\u6B64\u5757\u3002\u65E0\u4F8B\u5916\u3002**\n\n```\n\u6837\u5F0F\u68C0\u6D4B\u7ED3\u679C\n======================\n\u5DF2\u5206\u6790\uFF1A\u6765\u81EA git log \u7684 30 \u6761 commits\n\n\u8BED\u8A00\uFF1A[KOREAN | ENGLISH]\n - \u97E9\u6587 commits\uFF1AN (X%)\n - \u82F1\u6587 commits\uFF1AM (Y%)\n\n\u6837\u5F0F\uFF1A[SEMANTIC | PLAIN | SENTENCE | SHORT]\n - Semantic\uFF08feat:\u3001fix: \u7B49\uFF09\uFF1AN (X%)\n - Plain\uFF1AM (Y%)\n - Short\uFF1AK (Z%)\n\n\u4ED3\u5E93\u53C2\u8003\u793A\u4F8B\uFF1A\n 1. \"\u5B9E\u9645 commit \u6D88\u606F\u6765\u81EA log\"\n 2. \"\u5B9E\u9645 commit \u6D88\u606F\u6765\u81EA log\"\n 3. \"\u5B9E\u9645 commit \u6D88\u606F\u6765\u81EA log\"\n\n\u6240\u6709 commits \u5C06\u9075\u5FAA\uFF1A[LANGUAGE] + [STYLE]\n```\n\n**\u82E5\u8DF3\u8FC7\u6B64\u8F93\u51FA\uFF0C\u4F60\u7684 commits \u5C06\u662F\u9519\u8BEF\u7684\u3002\u505C\u6B62\u5E76\u91CD\u505A\u3002**\n</style_detection>\n\n---\n\n## \u9636\u6BB5 2: \u5206\u652F\u4E0A\u4E0B\u6587\u5206\u6790\n\n<branch_analysis>\n### 2.1 \u786E\u5B9A\u5206\u652F\u72B6\u6001\n\n```\nBRANCH_STATE:\n current_branch: <name>\n has_upstream: true | false\n commits_ahead: N # \u4EC5\u672C\u5730\u7684 commits\n merge_base: <hash>\n\nREWRITE_SAFETY:\n - \u82E5 has_upstream AND commits_ahead > 0 AND \u5DF2\u63A8\u9001\uFF1A\n -> \u5F3A\u5236\u63A8\u9001\u524D\u8B66\u544A\n - \u82E5\u65E0 upstream \u6216\u6240\u6709 commits \u5747\u4E3A\u672C\u5730\uFF1A\n -> \u53EF\u5B89\u5168\u8FDB\u884C\u6FC0\u8FDB\u91CD\u5199\uFF08fixup\u3001reset\u3001rebase\uFF09\n - \u82E5\u5728 main/master \u4E0A\uFF1A\n -> \u7EDD\u4E0D\u91CD\u5199\uFF0C\u4EC5\u65B0\u589E commits\n```\n\n### 2.2 \u5386\u53F2\u91CD\u5199\u7B56\u7565\u51B3\u7B56\n\n```\n\u82E5 current_branch == main \u6216 current_branch == master:\n -> STRATEGY = NEW_COMMITS_ONLY\n -> \u7EDD\u4E0D fixup\uFF0C\u7EDD\u4E0D rebase\n\n\u5426\u5219\u82E5 commits_ahead == 0\uFF1A\n -> STRATEGY = NEW_COMMITS_ONLY\n -> \u65E0\u9700\u91CD\u5199\u5386\u53F2\n\n\u5426\u5219\u82E5\u6240\u6709 commits \u5747\u4E3A\u672C\u5730\uFF08\u672A\u63A8\u9001\uFF09\uFF1A\n -> STRATEGY = AGGRESSIVE_REWRITE\n -> \u81EA\u7531 fixup\uFF0C\u9700\u8981\u65F6 reset\uFF0Crebase \u6E05\u7406\n\n\u5426\u5219\u82E5\u5DF2\u63A8\u9001\u4F46\u672A\u5408\u5E76\uFF1A\n -> STRATEGY = CAREFUL_REWRITE\n -> \u53EF fixup \u4F46\u8B66\u544A force push\n```\n</branch_analysis>\n\n---\n\n## \u9636\u6BB5 3: \u539F\u5B50\u5355\u5143\u89C4\u5212\uFF08\u963B\u585E - \u5FC5\u987B\u5148\u8F93\u51FA\u518D\u7EE7\u7EED\uFF09\n\n<atomic_planning>\n**\u672C\u9636\u6BB5\u5FC5\u987B\u5F3A\u5236\u8F93\u51FA** - \u5728\u8FDB\u5165\u9636\u6BB5 4 \u4E4B\u524D\u5FC5\u987B\u6253\u5370 commit \u8BA1\u5212\u3002\n\n### 3.0 \u9996\u5148\u8BA1\u7B97\u6700\u5C0F Commit \u6570\u91CF\n\n```\n\u516C\u5F0F\uFF1Amin_commits = ceil(file_count / 3)\n\n 3 \u4E2A\u6587\u4EF6 -> \u6700\u5C11 1 \u4E2A commit\n 5 \u4E2A\u6587\u4EF6 -> \u6700\u5C11 2 \u4E2A commits\n 9 \u4E2A\u6587\u4EF6 -> \u6700\u5C11 3 \u4E2A commits\n15 \u4E2A\u6587\u4EF6 -> \u6700\u5C11 5 \u4E2A commits\n```\n\n**\u82E5\u4F60\u8BA1\u5212\u7684 commit \u6570\u91CF < min_commits -> \u9519\u8BEF\u3002\u7EE7\u7EED\u62C6\u5206\u3002**\n\n### 3.1 \u9996\u5148\u6309\u76EE\u5F55/\u6A21\u5757\u62C6\u5206\uFF08\u4E3B\u8981\u62C6\u5206\u65B9\u5F0F\uFF09\n\n**\u89C4\u5219\uFF1A\u4E0D\u540C\u76EE\u5F55 = \u4E0D\u540C\u7684 commits\uFF08\u51E0\u4E4E\u603B\u662F\u5982\u6B64\uFF09**\n\n```\n\u793A\u4F8B\uFF1A8 \u4E2A\u53D8\u66F4\u7684\u6587\u4EF6\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\n\u9519\u8BEF\uFF1A1 \u4E2A commit \"Update landing page\"\uFF08\u5077\u61D2\uFF0C\u9519\u8BEF\uFF09\n\u9519\u8BEF\uFF1A2 \u4E2A commits\uFF08\u4ECD\u7136\u592A\u5C11\uFF09\n\n\u6B63\u786E\uFF1A\u6309\u76EE\u5F55/\u5173\u6CE8\u70B9\u62C6\u5206\uFF1A\n - Commit 1: app/[locale]/page.tsx + layout.tsx\uFF08app \u5C42\uFF09\n - Commit 2: components/demo/*\uFF08demo \u7EC4\u4EF6\uFF09\n - Commit 3: components/pricing/*\uFF08pricing \u7EC4\u4EF6\uFF09\n - Commit 4: e2e/*\uFF08\u6D4B\u8BD5\uFF09\n - Commit 5: messages/*\uFF08i18n\uFF09\n = 8 \u4E2A\u6587\u4EF6\u62C6\u5206\u4E3A 5 \u4E2A commits\uFF08\u6B63\u786E\uFF09\n```\n\n### 3.2 \u5176\u6B21\u6309\u5173\u6CE8\u70B9\u62C6\u5206\uFF08\u6B21\u8981\u62C6\u5206\u65B9\u5F0F\uFF09\n\n**\u5728\u540C\u4E00\u76EE\u5F55\u5185\uFF0C\u6309\u903B\u8F91\u5173\u6CE8\u70B9\u62C6\u5206\uFF1A**\n\n```\n\u793A\u4F8B\uFF1Acomponents/demo/ \u6709 4 \u4E2A\u6587\u4EF6\n - browser-frame.tsx\uFF08UI \u6846\u67B6\uFF09\n - shopify-full-site.tsx\uFF08\u7279\u5B9A demo\uFF09\n - review-dashboard.tsx\uFF08\u65B0 - \u7279\u5B9A demo\uFF09\n - tone-settings.tsx\uFF08\u65B0 - \u7279\u5B9A demo\uFF09\n\n\u9009\u9879 A\uFF08\u53EF\u63A5\u53D7\uFF09\uFF1A\u82E5\u5168\u90E8\u7D27\u5BC6\u8026\u5408\u5219 1 \u4E2A commit\n\u9009\u9879 B\uFF08\u63A8\u8350\uFF09\uFF1A2 \u4E2A commits\n - Commit\uFF1A\u66F4\u65B0\u73B0\u6709 demo \u7EC4\u4EF6\uFF08browser-frame\u3001shopify\uFF09\n - Commit\uFF1A\u6DFB\u52A0\u65B0 demo \u7EC4\u4EF6\uFF08review-dashboard\u3001tone-settings\uFF09\n```\n\n### 3.3 \u7EDD\u5BF9\u4E0D\u8981\u8FD9\u6837\u505A\uFF08\u53CD\u6A21\u5F0F\u793A\u4F8B\uFF09\n\n```\n\u9519\u8BEF\uFF1A\"Refactor entire landing page\" - 1 \u4E2A commit \u5305\u542B 15 \u4E2A\u6587\u4EF6\n\u9519\u8BEF\uFF1A\"Update components and tests\" - 1 \u4E2A commit \u6DF7\u5408\u4E86\u591A\u4E2A\u5173\u6CE8\u70B9\n\u9519\u8BEF\uFF1A\"Big update\" - \u4EFB\u4F55\u6D89\u53CA 5+ \u4E2A\u4E0D\u76F8\u5173\u6587\u4EF6\u7684 commit\n\n\u6B63\u786E\uFF1A\u591A\u4E2A\u4E13\u6CE8\u7684 commits\uFF0C\u6BCF\u4E2A\u6700\u591A 1-4 \u4E2A\u6587\u4EF6\n\u6B63\u786E\uFF1A\u6BCF\u4E2A commit \u6D88\u606F\u63CF\u8FF0\u4E00\u4E2A\u5177\u4F53\u7684\u53D8\u66F4\n\u6B63\u786E\uFF1Areviewer \u80FD\u5728 30 \u79D2\u5185\u7406\u89E3\u6BCF\u4E2A commit\n```\n\n### 3.4 \u5B9E\u73B0 + \u6D4B\u8BD5\u914D\u5BF9\uFF08\u5F3A\u5236\uFF09\n\n```\n\u89C4\u5219\uFF1A\u6D4B\u8BD5\u6587\u4EF6\u5FC5\u987B\u4E0E\u5B9E\u73B0\u653E\u5728\u540C\u4E00 commit \u4E2D\n\n\u6D4B\u8BD5\u5339\u914D\u6A21\u5F0F\uFF1A\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 \u5F3A\u5236\u8BF4\u660E\u7406\u7531\uFF08\u521B\u5EFA Commit \u8BA1\u5212\u524D\uFF09\n\n**\u4E0D\u53EF\u534F\u5546\uFF1A\u5728\u6700\u7EC8\u786E\u5B9A commit \u8BA1\u5212\u4E4B\u524D\uFF0C\u5FC5\u987B\uFF1A**\n\n```\n\u5BF9\u4E8E\u6BCF\u4E2A\u5305\u542B 3+ \u4E2A\u6587\u4EF6\u7684\u8BA1\u5212 commit\uFF1A\n 1. \u5217\u51FA\u6B64 commit \u4E2D\u7684\u6240\u6709\u6587\u4EF6\n 2. \u5199\u4E00\u53E5\u8BDD\u89E3\u91CA\u4E3A\u4EC0\u4E48\u5B83\u4EEC\u5FC5\u987B\u653E\u5728\u4E00\u8D77\n 3. \u82E5\u5199\u4E0D\u51FA\u8FD9\u53E5\u8BDD -> \u62C6\u5206\n\n\u6A21\u677F\uFF1A\n\"Commit N \u5305\u542B [files]\uFF0C\u56E0\u4E3A [\u5B83\u4EEC\u4E0D\u53EF\u5206\u5272\u7684\u5177\u4F53\u539F\u56E0]\u3002\"\n\n\u6709\u6548\u7684\u7406\u7531\uFF1A\n \u6709\u6548\uFF1Aimplementation \u6587\u4EF6 + \u5176\u76F4\u63A5\u6D4B\u8BD5\u6587\u4EF6\n \u6709\u6548\uFF1A\u7C7B\u578B\u5B9A\u4E49 + \u552F\u4E00\u4F7F\u7528\u5B83\u7684\u6587\u4EF6\n \u6709\u6548\uFF1Amigration + model \u53D8\u66F4\uFF08\u7F3A\u5C11\u4EFB\u4E00\u90FD\u4F1A\u5BFC\u81F4\u95EE\u9898\uFF09\n\n\u65E0\u6548\u7684\u7406\u7531\uFF08\u5FC5\u987B\u62C6\u5206\uFF09\uFF1A\n \u65E0\u6548\uFF1A\"\u90FD\u4E0E\u529F\u80FD X \u76F8\u5173\"\uFF08\u592A\u6A21\u7CCA\uFF09\n \u65E0\u6548\uFF1A\"\u540C\u4E00\u4E2A PR \u7684\u4E00\u90E8\u5206\"\uFF08\u4E0D\u662F\u7406\u7531\uFF09\n \u65E0\u6548\uFF1A\"\u5B83\u4EEC\u4E00\u8D77\u88AB\u4FEE\u6539\u4E86\"\uFF08\u4E0D\u662F\u7406\u7531\uFF09\n \u65E0\u6548\uFF1A\"\u5206\u7EC4\u8D77\u6765\u66F4\u5408\u7406\"\uFF08\u4E0D\u662F\u7406\u7531\uFF09\n```\n\n**\u5728\u6267\u884C commits \u524D\uFF0C\u5728\u5206\u6790\u4E2D\u8F93\u51FA\u6B64\u8BF4\u660E\u3002**\n\n### 3.7 \u4F9D\u8D56\u987A\u5E8F\n\n```\nLevel 0\uFF1A\u5DE5\u5177\u51FD\u6570\u3001\u5E38\u91CF\u3001\u7C7B\u578B\u5B9A\u4E49\nLevel 1\uFF1AModels\u3001schemas\u3001interfaces\nLevel 2\uFF1AServices\u3001\u4E1A\u52A1\u903B\u8F91\nLevel 3\uFF1AAPI endpoints\u3001controllers\nLevel 4\uFF1A\u914D\u7F6E\u3001\u57FA\u7840\u8BBE\u65BD\n\nCOMMIT \u987A\u5E8F\uFF1ALevel 0 -> Level 1 -> Level 2 -> Level 3 -> Level 4\n```\n\n### 3.8 \u521B\u5EFA Commit \u7EC4\n\n\u5BF9\u4E8E\u6BCF\u4E2A\u903B\u8F91\u529F\u80FD/\u53D8\u66F4\uFF1A\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 = \u65B0\u5EFA\uFF0Chash = fixup\n```\n\n### 3.9 \u5F3A\u5236\u8F93\u51FA\uFF08\u963B\u585E\uFF09\n\n**\u5728\u8FDB\u5165\u9636\u6BB5 4 \u4E4B\u524D\u5FC5\u987B\u8F93\u51FA\u6B64\u5757\u3002\u65E0\u4F8B\u5916\u3002**\n\n```\nCOMMIT \u8BA1\u5212\n===========\n\u53D8\u66F4\u7684\u6587\u4EF6\u6570\uFF1AN\n\u6240\u9700\u6700\u5C11 commits \u6570\uFF1Aceil(N/3) = M\n\u8BA1\u5212\u7684 commits \u6570\uFF1AK\n\u72B6\u6001\uFF1AK >= M\uFF08\u901A\u8FC7\uFF09| K < M\uFF08\u5931\u8D25 - \u5FC5\u987B\u7EE7\u7EED\u62C6\u5206\uFF09\n\nCOMMIT 1\uFF1A[\u68C0\u6D4B\u5230\u7684\u6837\u5F0F\u7684\u6D88\u606F]\n - path/to/file1.py\n - path/to/file1_test.py\n \u8BF4\u660E\u7406\u7531\uFF1A\u5B9E\u73B0 + \u5176\u6D4B\u8BD5\n\nCOMMIT 2\uFF1A[\u68C0\u6D4B\u5230\u7684\u6837\u5F0F\u7684\u6D88\u606F]\n - path/to/file2.py\n \u8BF4\u660E\u7406\u7531\uFF1A\u72EC\u7ACB\u5DE5\u5177\u51FD\u6570\n\nCOMMIT 3\uFF1A[\u68C0\u6D4B\u5230\u7684\u6837\u5F0F\u7684\u6D88\u606F]\n - config/settings.py\n - config/constants.py\n \u8BF4\u660E\u7406\u7531\uFF1A\u7D27\u5BC6\u8026\u5408\u7684\u914D\u7F6E\u53D8\u66F4\n\n\u6267\u884C\u987A\u5E8F\uFF1ACommit 1 -> Commit 2 -> Commit 3\n\uFF08\u9075\u5FAA\u4F9D\u8D56\u5173\u7CFB\uFF1ALevel 0 -> Level 1 -> Level 2 -> ...\uFF09\n```\n\n**\u6267\u884C\u524D\u7684\u9A8C\u8BC1\uFF1A**\n- \u6BCF\u4E2A commit \u6700\u591A 4 \u4E2A\u6587\u4EF6\uFF08\u6216\u6709\u5145\u5206\u7406\u7531\uFF09\n- \u6BCF\u4E2A commit \u6D88\u606F\u5339\u914D\u68C0\u6D4B\u5230\u7684 STYLE + LANGUAGE\n- \u6D4B\u8BD5\u6587\u4EF6\u4E0E\u5B9E\u73B0\u914D\u5BF9\n- \u4E0D\u540C\u76EE\u5F55 = \u4E0D\u540C\u7684 commits\uFF08\u6216\u6709\u5145\u5206\u7406\u7531\uFF09\n- \u603B commits \u6570 >= min_commits\n\n**\u82E5\u4EFB\u4F55\u68C0\u67E5\u5931\u8D25\uFF0C\u4E0D\u8981\u7EE7\u7EED\u3002\u91CD\u65B0\u89C4\u5212\u3002**\n</atomic_planning>\n\n---\n\n## \u9636\u6BB5 4: Commit \u7B56\u7565\u51B3\u7B56\n\n<strategy_decision>\n### 4.1 \u5BF9\u4E8E\u6BCF\u4E2A Commit \u7EC4\uFF0C\u51B3\u5B9A\uFF1A\n\n```\nFIXUP if:\n - \u53D8\u66F4\u8865\u5145\u4E86\u73B0\u6709 commit \u7684\u610F\u56FE\n - \u540C\u4E00\u529F\u80FD\uFF0C\u4FEE\u590D bug \u6216\u6DFB\u52A0\u7F3A\u5931\u90E8\u5206\n - \u91C7\u7EB3\u5BA1\u67E5\u53CD\u9988\n - \u76EE\u6807 commit \u5B58\u5728\u4E8E\u672C\u5730\u5386\u53F2\u4E2D\n\nNEW COMMIT if:\n - \u65B0\u529F\u80FD\u6216\u65B0\u80FD\u529B\n - \u72EC\u7ACB\u7684\u903B\u8F91\u5355\u5143\n - \u4E0D\u540C\u7684 issue/ticket\n - \u4E0D\u5B58\u5728\u5408\u9002\u7684\u76EE\u6807 commit\n```\n\n### 4.2 \u5386\u53F2\u91CD\u5EFA\u51B3\u7B56\uFF08\u6FC0\u8FDB\u9009\u9879\uFF09\n\n```\nCONSIDER RESET & REBUILD when:\n - \u5386\u53F2\u6DF7\u4E71\uFF08\u5DF2\u6709\u5927\u91CF\u5C0F\u578B fixup\uFF09\n - Commits \u4E0D\u662F\u539F\u5B50\u6027\u7684\uFF08\u6DF7\u5408\u5173\u6CE8\u70B9\uFF09\n - \u4F9D\u8D56\u987A\u5E8F\u9519\u8BEF\n\nRESET WORKFLOW:\n 1. git reset --soft $(git merge-base HEAD main)\n 2. \u6240\u6709\u53D8\u66F4\u73B0\u5728\u5DF2\u6682\u5B58\n 3. \u6309\u6B63\u786E\u7684\u539F\u5B50\u5355\u5143\u91CD\u65B0 commit\n 4. \u4ECE\u5934\u6E05\u7406\u5386\u53F2\n\nONLY IF:\n - \u6240\u6709 commits \u90FD\u5728\u672C\u5730\uFF08\u672A\u63A8\u9001\uFF09\n - \u7528\u6237\u660E\u786E\u5141\u8BB8 OR \u5206\u652F\u660E\u663E\u662F WIP\n```\n\n### 4.3 \u6700\u7EC8\u8BA1\u5212\u6458\u8981\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## \u9636\u6BB5 5: Commit \u6267\u884C\n\n<execution>\n### 5.1 \u6CE8\u518C TODO \u9879\n\n\u4F7F\u7528 TodoWrite \u5C06\u6BCF\u4E2A commit \u6CE8\u518C\u4E3A\u53EF\u8DDF\u8E2A\u9879\uFF1A\n```\n- [ ] Fixup: <description> -> <target-hash>\n- [ ] New: <description>\n- [ ] Rebase autosquash\n- [ ] \u6700\u7EC8\u9A8C\u8BC1\n```\n\n### 5.2 Fixup Commits\uFF08\u5982\u6709\uFF09\n\n```bash\n# \u4E3A\u6BCF\u4E2A fixup \u6682\u5B58\u6587\u4EF6\ngit add <files>\ngit commit --fixup=<target-hash>\n\n# \u5BF9\u6240\u6709 fixup \u91CD\u590D...\n\n# \u6700\u540E\u4E00\u6B21\u6027 autosquash rebase\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\uFF08Fixup \u4E4B\u540E\uFF09\n\n\u5BF9\u4E8E\u6BCF\u4E2A\u65B0 commit \u7EC4\uFF0C\u6309\u4F9D\u8D56\u987A\u5E8F\uFF1A\n\n```bash\n# \u6682\u5B58\u6587\u4EF6\ngit add <file1> <file2> ...\n\n# \u9A8C\u8BC1\u6682\u5B58\ngit diff --staged --stat\n\n# \u6309\u68C0\u6D4B\u5230\u7684\u98CE\u683C commit\ngit commit -m \"<message-matching-COMMIT_CONFIG>\"\n\n# \u9A8C\u8BC1\ngit log -1 --oneline\n```\n\n### 5.4 Commit \u6D88\u606F\u751F\u6210\n\n**\u57FA\u4E8E\u9636\u6BB5 1 \u7684 COMMIT_CONFIG\uFF1A**\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**\u6BCF\u6B21 commit \u524D\u9A8C\u8BC1\uFF1A**\n1. \u6D88\u606F\u662F\u5426\u5339\u914D\u68C0\u6D4B\u5230\u7684\u98CE\u683C\uFF1F\n2. \u8BED\u8A00\u662F\u5426\u5339\u914D\u68C0\u6D4B\u5230\u7684\u8BED\u8A00\uFF1F\n3. \u662F\u5426\u4E0E git log \u4E2D\u7684\u793A\u4F8B\u76F8\u4F3C\uFF1F\n\n\u5982\u6709\u4EFB\u610F\u68C0\u67E5\u5931\u8D25 -> \u91CD\u5199\u6D88\u606F\u3002\n```\n</execution>\n\n---\n\n## \u9636\u6BB5 6: \u9A8C\u8BC1\u4E0E\u6536\u5C3E\n\n<verification>\n### 6.1 \u63D0\u4EA4\u540E\u9A8C\u8BC1\n\n```bash\n# \u68C0\u67E5\u5DE5\u4F5C\u533A\u662F\u5426\u5E72\u51C0\ngit status\n\n# \u5BA1\u67E5\u65B0\u5386\u53F2\ngit log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)..HEAD\n\n# \u9A8C\u8BC1\u6BCF\u4E2A commit \u662F\u539F\u5B50\u6027\u7684\n#\uFF08\u5FC3\u7406\u68C0\u67E5\uFF1A\u6BCF\u4E2A\u90FD\u80FD\u72EC\u7ACB\u56DE\u9000\u5417\uFF1F\uFF09\n```\n\n### 6.2 Force Push \u51B3\u7B56\n\n```\nIF fixup was used AND branch has upstream:\n -> \u9700\u8981: git push --force-with-lease\n -> \u8B66\u544A\u7528\u6237 force push \u7684\u5F71\u54CD\n\nIF only new commits:\n -> \u5E38\u89C4: git push\n```\n\n### 6.3 \u6700\u7EC8\u62A5\u544A\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 - \u5982\u5C31\u7EEA\u5219\u521B\u5EFA PR\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- 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 +1 @@
1
- export declare const GIT_MASTER_HISTORY_SEARCH_WORKFLOW_SECTION = "## HISTORY SEARCH MODE (Phase H1-H3)\n\n## PHASE H1: \u786E\u5B9A\u641C\u7D22\u7C7B\u578B\n\n<history_search_type>\n### H1.1 \u89E3\u6790\u7528\u6237\u8BF7\u6C42\n\n| \u7528\u6237\u8BF7\u6C42 | Search Type | \u5DE5\u5177 |\n|--------------|-------------|------|\n| \"when was X added\" / \"X\uAC00 \uC5B8\uC81C \uCD94\uAC00\uB410\uC5B4\" / \"X \u4EC0\u4E48\u65F6\u5019\u6DFB\u52A0\u7684\" | PICKAXE | `git log -S` |\n| \"find commits changing X pattern\" / \"\u67E5\u627E\u4FEE\u6539 X \u7684\u63D0\u4EA4\" | REGEX | `git log -G` |\n| \"who wrote this line\" / \"\uC774 \uC904 \uB204\uAC00 \uC37C\uC5B4\" / \"\u8FD9\u884C\u662F\u8C01\u5199\u7684\" | BLAME | `git blame` |\n| \"when did bug start\" / \"\uBC84\uADF8 \uC5B8\uC81C \uC0DD\uACBC\uC5B4\" / \"bug \u4EC0\u4E48\u65F6\u5019\u51FA\u73B0\u7684\" | BISECT | `git bisect` |\n| \"history of file\" / \"\uD30C\uC77C \uD788\uC2A4\uD1A0\uB9AC\" / \"\u6587\u4EF6\u5386\u53F2\" | FILE_LOG | `git log -- path` |\n| \"find deleted code\" / \"\uC0AD\uC81C\uB41C \uCF54\uB4DC \uCC3E\uAE30\" / \"\u67E5\u627E\u5DF2\u5220\u9664\u7684\u4EE3\u7801\" | PICKAXE_ALL | `git log -S --all` |\n\n### H1.2 \u63D0\u53D6\u641C\u7D22\u53C2\u6570\n\n```\n\u4ECE\u7528\u6237\u8BF7\u6C42\u4E2D\u8BC6\u522B\uFF1A\n- SEARCH_TERM: \u8981\u67E5\u627E\u7684\u5B57\u7B26\u4E32/\u6A21\u5F0F\n- FILE_SCOPE: \u7279\u5B9A\u6587\u4EF6\u6216\u6574\u4E2A\u4ED3\u5E93\n- TIME_RANGE: \u5168\u90E8\u65F6\u95F4\u6216\u7279\u5B9A\u65F6\u95F4\u6BB5\n- BRANCH_SCOPE: \u5F53\u524D\u5206\u652F\u6216 --all \u5206\u652F\n```\n</history_search_type>\n\n---\n\n## PHASE H2: \u6267\u884C\u641C\u7D22\n\n<history_search_exec>\n### H2.1 Pickaxe \u641C\u7D22 (git log -S)\n\n**\u7528\u9014**: \u67E5\u627E\u6DFB\u52A0\u6216\u5220\u9664\u7279\u5B9A\u5B57\u7B26\u4E32\u7684\u63D0\u4EA4\n\n```bash\n# \u57FA\u7840\uFF1A\u67E5\u627E\u5B57\u7B26\u4E32\u6DFB\u52A0/\u5220\u9664\u7684\u65F6\u95F4\ngit log -S \"searchString\" --oneline\n\n# \u5E26\u4E0A\u4E0B\u6587\uFF08\u67E5\u770B\u5B9E\u9645\u53D8\u66F4\uFF09\uFF1A\ngit log -S \"searchString\" -p\n\n# \u5728\u7279\u5B9A\u6587\u4EF6\u4E2D\uFF1A\ngit log -S \"searchString\" -- path/to/file.py\n\n# \u8DE8\u6240\u6709\u5206\u652F\uFF08\u67E5\u627E\u5DF2\u5220\u9664\u7684\u4EE3\u7801\uFF09\uFF1A\ngit log -S \"searchString\" --all --oneline\n\n# \u5E26\u65E5\u671F\u8303\u56F4\uFF1A\ngit log -S \"searchString\" --since=\"2024-01-01\" --oneline\n\n# \u4E0D\u533A\u5206\u5927\u5C0F\u5199\uFF1A\ngit log -S \"searchstring\" -i --oneline\n```\n\n**\u793A\u4F8B\u7528\u4F8B\uFF1A**\n```bash\n# \u4F55\u65F6\u6DFB\u52A0\u4E86\u8FD9\u4E2A\u51FD\u6570\uFF1F\ngit log -S \"def calculate_discount\" --oneline\n\n# \u4F55\u65F6\u5220\u9664\u4E86\u8FD9\u4E2A\u5E38\u91CF\uFF1F\ngit log -S \"MAX_RETRY_COUNT\" --all --oneline\n\n# \u67E5\u627E\u8C01\u5F15\u5165\u4E86 bug \u6A21\u5F0F\ngit log -S \"== None\" -- \"*.py\" --oneline # \u5E94\u8BE5\u662F \"is None\"\n```\n\n### H2.2 \u6B63\u5219\u641C\u7D22 (git log -G)\n\n**\u7528\u9014**: \u67E5\u627E diff \u5339\u914D\u6B63\u5219\u8868\u8FBE\u5F0F\u7684\u63D0\u4EA4\n\n```bash\n# \u67E5\u627E\u5305\u542B\u5339\u914D\u6A21\u5F0F\u7684\u884C\u7684\u63D0\u4EA4\ngit log -G \"pattern.*regex\" --oneline\n\n# \u67E5\u627E\u51FD\u6570\u5B9A\u4E49\u53D8\u66F4\ngit log -G \"def\\s+my_function\" --oneline -p\n\n# \u67E5\u627E import \u53D8\u66F4\ngit log -G \"^import\\s+requests\" -- \"*.py\" --oneline\n\n# \u67E5\u627E TODO \u6DFB\u52A0/\u5220\u9664\ngit log -G \"TODO|FIXME|HACK\" --oneline\n```\n\n**-S vs -G \u533A\u522B\uFF1A**\n```\n-S \"foo\": \u67E5\u627E \"foo\" \u6570\u91CF\u53D1\u751F\u53D8\u5316\u7684\u63D0\u4EA4\n-G \"foo\": \u67E5\u627E DIFF \u4E2D\u5305\u542B \"foo\" \u7684\u63D0\u4EA4\n\n\u4F7F\u7528 -S \u573A\u666F\uFF1A\u67E5\u627E X \u6DFB\u52A0/\u5220\u9664\u7684\u65F6\u95F4\n\u4F7F\u7528 -G \u573A\u666F\uFF1A\u54EA\u4E9B\u63D0\u4EA4\u4FEE\u6539\u4E86\u5305\u542B X \u7684\u884C\n```\n\n### H2.3 Git Blame\n\n**\u7528\u9014**: \u9010\u884C\u5F52\u5C5E\n\n```bash\n# \u57FA\u7840 blame\ngit blame path/to/file.py\n\n# \u7279\u5B9A\u884C\u8303\u56F4\ngit blame -L 10,20 path/to/file.py\n\n# \u663E\u793A\u539F\u59CB\u63D0\u4EA4\uFF08\u5FFD\u7565\u79FB\u52A8/\u590D\u5236\uFF09\ngit blame -C path/to/file.py\n\n# \u5FFD\u7565\u7A7A\u767D\u7B26\u53D8\u66F4\ngit blame -w path/to/file.py\n\n# \u663E\u793A\u90AE\u7BB1\u800C\u975E\u540D\u5B57\ngit blame -e path/to/file.py\n\n# \u53EF\u89E3\u6790\u7684\u8F93\u51FA\u683C\u5F0F\ngit blame --porcelain path/to/file.py\n```\n\n**\u8BFB\u53D6 Blame \u8F93\u51FA\uFF1A**\n```\n^abc1234 (Author Name 2024-01-15 10:30:00 +0900 42) code_line_here\n| | | | +-- \u884C\u5185\u5BB9\n| | | +-- \u884C\u53F7\n| | +-- \u65F6\u95F4\u6233\n| +-- \u4F5C\u8005\n+-- Commit hash\uFF08^ \u8868\u793A\u521D\u59CB\u63D0\u4EA4\uFF09\n```\n\n### H2.4 Git Bisect\uFF08\u4E8C\u5206\u67E5\u627E Bug\uFF09\n\n**\u7528\u9014**: \u67E5\u627E\u5F15\u5165 bug \u7684\u7CBE\u786E\u63D0\u4EA4\n\n```bash\n# \u542F\u52A8 bisect \u4F1A\u8BDD\ngit bisect start\n\n# \u6807\u8BB0\u5F53\u524D\uFF08\u574F\uFF09\u72B6\u6001\ngit bisect bad\n\n# \u6807\u8BB0\u5DF2\u77E5\u7684\u597D\u63D0\u4EA4\uFF08\u4F8B\u5982\u4E0A\u6B21\u53D1\u5E03\uFF09\ngit bisect good v1.0.0\n\n# Git \u68C0\u51FA\u4E2D\u95F4\u63D0\u4EA4\u3002\u6D4B\u8BD5\u540E\uFF1A\ngit bisect good # \u5982\u679C\u6B64\u63D0\u4EA4\u6B63\u5E38\ngit bisect bad # \u5982\u679C\u6B64\u63D0\u4EA4\u6709 bug\n\n# \u91CD\u590D\u76F4\u5230 git \u627E\u5230\u7F6A\u9B41\u7978\u9996\n# Git \u8F93\u51FA\uFF1A\"abc1234 is the first bad commit\"\n\n# \u5B8C\u6210\u540E\uFF0C\u8FD4\u56DE\u539F\u59CB\u72B6\u6001\ngit bisect reset\n```\n\n**\u81EA\u52A8 Bisect\uFF08\u914D\u5408\u6D4B\u8BD5\u811A\u672C\uFF09\uFF1A**\n```bash\n# \u5982\u679C\u4F60\u6709\u5728 bug \u4E0A\u5931\u8D25\u7684\u6D4B\u8BD5\uFF1A\ngit bisect start\ngit bisect bad HEAD\ngit bisect good v1.0.0\ngit bisect run pytest tests/test_specific.py\n\n# Git \u81EA\u52A8\u5728\u6BCF\u4E2A\u63D0\u4EA4\u4E0A\u8FD0\u884C\u6D4B\u8BD5\n# \u9000\u51FA 0 = good\uFF0C\u9000\u51FA 1-127 = bad\uFF0C\u9000\u51FA 125 = skip\n```\n\n### H2.5 \u6587\u4EF6\u5386\u53F2\u8FFD\u8E2A\n\n```bash\n# \u6587\u4EF6\u7684\u5B8C\u6574\u5386\u53F2\ngit log --oneline -- path/to/file.py\n\n# \u8DDF\u8E2A\u91CD\u547D\u540D\u540E\u7684\u6587\u4EF6\ngit log --follow --oneline -- path/to/file.py\n\n# \u663E\u793A\u5B9E\u9645\u53D8\u66F4\ngit log -p -- path/to/file.py\n\n# \u5DF2\u4E0D\u5B58\u5728\u7684\u6587\u4EF6\ngit log --all --full-history -- \"**/deleted_file.py\"\n\n# \u8C01\u4FEE\u6539\u6587\u4EF6\u6700\u591A\ngit shortlog -sn -- path/to/file.py\n```\n</history_search_exec>\n\n---\n\n## PHASE H3: \u5C55\u793A\u7ED3\u679C\n\n<history_results>\n### H3.1 \u683C\u5F0F\u5316\u641C\u7D22\u7ED3\u679C\n\n```\nSEARCH QUERY: \"<\u7528\u6237\u8BE2\u95EE\u7684\u5185\u5BB9>\"\nSEARCH TYPE: <PICKAXE | REGEX | BLAME | BISECT | FILE_LOG>\nCOMMAND USED: git log -S \"...\" ...\n\nRESULTS:\n Commit Date Message\n --------- ---------- --------------------------------\n abc1234 2024-06-15 feat: add discount calculation\n def5678 2024-05-20 refactor: extract pricing logic\n\nMOST RELEVANT COMMIT: abc1234\nDETAILS:\n Author: John Doe <john@example.com>\n Date: 2024-06-15\n Files changed: 3\n\nDIFF EXCERPT\uFF08\u5982\u9002\u7528\uFF09\uFF1A\n + def calculate_discount(price, rate):\n + return price * (1 - rate)\n```\n\n### H3.2 \u63D0\u4F9B\u53EF\u64CD\u4F5C\u7684\u4E0A\u4E0B\u6587\n\n\u57FA\u4E8E\u641C\u7D22\u7ED3\u679C\uFF0C\u63D0\u4F9B\u76F8\u5173\u7684\u540E\u7EED\u64CD\u4F5C\uFF1A\n\n```\n\u53D1\u73B0 commit abc1234 \u5F15\u5165\u4E86\u6B64\u53D8\u66F4\u3002\n\nPOTENTIAL ACTIONS:\n- \u67E5\u770B\u5B8C\u6574\u63D0\u4EA4\uFF1Agit show abc1234\n- \u56DE\u6EDA\u6B64\u63D0\u4EA4\uFF1Agit revert abc1234\n- \u67E5\u770B\u76F8\u5173\u63D0\u4EA4\uFF1Agit log --ancestry-path abc1234..HEAD\n- Cherry-pick \u5230\u5176\u4ED6\u5206\u652F\uFF1Agit cherry-pick abc1234\n```\n</history_results>";
1
+ export declare const GIT_MASTER_HISTORY_SEARCH_WORKFLOW_SECTION = "## HISTORY SEARCH MODE (Phase H1-H3)\n\n## PHASE H1: Determine Search Type\n\n<history_search_type>\n### H1.1 Parse User Request\n\n| User Request | Search Type | Tool |\n|--------------|-------------|------|\n| \"when was X added\" / \"X\uAC00 \uC5B8\uC81C \uCD94\uAC00\uB410\uC5B4\" | PICKAXE | `git log -S` |\n| \"find commits changing X pattern\" | REGEX | `git log -G` |\n| \"who wrote this line\" / \"\uC774 \uC904 \uB204\uAC00 \uC37C\uC5B4\" | BLAME | `git blame` |\n| \"when did bug start\" / \"\uBC84\uADF8 \uC5B8\uC81C \uC0DD\uACBC\uC5B4\" | BISECT | `git bisect` |\n| \"history of file\" / \"\uD30C\uC77C \uD788\uC2A4\uD1A0\uB9AC\" | FILE_LOG | `git log -- path` |\n| \"find deleted code\" / \"\uC0AD\uC81C\uB41C \uCF54\uB4DC \uCC3E\uAE30\" | PICKAXE_ALL | `git log -S --all` |\n\n### H1.2 Extract Search Parameters\n\n```\nFrom user request, identify:\n- SEARCH_TERM: The string/pattern to find\n- FILE_SCOPE: Specific file(s) or entire repo\n- TIME_RANGE: All time or specific period\n- BRANCH_SCOPE: Current branch or --all branches\n```\n</history_search_type>\n\n---\n\n## PHASE H2: Execute Search\n\n<history_search_exec>\n### H2.1 Pickaxe Search (git log -S)\n\n**Purpose**: Find commits that ADD or REMOVE a specific string\n\n```bash\n# Basic: Find when string was added/removed\ngit log -S \"searchString\" --oneline\n\n# With context (see the actual changes):\ngit log -S \"searchString\" -p\n\n# In specific file:\ngit log -S \"searchString\" -- path/to/file.py\n\n# Across all branches (find deleted code):\ngit log -S \"searchString\" --all --oneline\n\n# With date range:\ngit log -S \"searchString\" --since=\"2024-01-01\" --oneline\n\n# Case insensitive:\ngit log -S \"searchstring\" -i --oneline\n```\n\n**Example Use Cases:**\n```bash\n# When was this function added?\ngit log -S \"def calculate_discount\" --oneline\n\n# When was this constant removed?\ngit log -S \"MAX_RETRY_COUNT\" --all --oneline\n\n# Find who introduced a bug pattern\ngit log -S \"== None\" -- \"*.py\" --oneline # Should be \"is None\"\n```\n\n### H2.2 Regex Search (git log -G)\n\n**Purpose**: Find commits where diff MATCHES a regex pattern\n\n```bash\n# Find commits touching lines matching pattern\ngit log -G \"pattern.*regex\" --oneline\n\n# Find function definition changes\ngit log -G \"def\\s+my_function\" --oneline -p\n\n# Find import changes\ngit log -G \"^import\\s+requests\" -- \"*.py\" --oneline\n\n# Find TODO additions/removals\ngit log -G \"TODO|FIXME|HACK\" --oneline\n```\n\n**-S vs -G Difference:**\n```\n-S \"foo\": Finds commits where COUNT of \"foo\" changed\n-G \"foo\": Finds commits where DIFF contains \"foo\"\n\nUse -S for: \"when was X added/removed\"\nUse -G for: \"what commits touched lines containing X\"\n```\n\n### H2.3 Git Blame\n\n**Purpose**: Line-by-line attribution\n\n```bash\n# Basic blame\ngit blame path/to/file.py\n\n# Specific line range\ngit blame -L 10,20 path/to/file.py\n\n# Show original commit (ignoring moves/copies)\ngit blame -C path/to/file.py\n\n# Ignore whitespace changes\ngit blame -w path/to/file.py\n\n# Show email instead of name\ngit blame -e path/to/file.py\n\n# Output format for parsing\ngit blame --porcelain path/to/file.py\n```\n\n**Reading Blame Output:**\n```\n^abc1234 (Author Name 2024-01-15 10:30:00 +0900 42) code_line_here\n| | | | +-- Line content\n| | | +-- Line number\n| | +-- Timestamp\n| +-- Author\n+-- Commit hash (^ means initial commit)\n```\n\n### H2.4 Git Bisect (Binary Search for Bugs)\n\n**Purpose**: Find exact commit that introduced a bug\n\n```bash\n# Start bisect session\ngit bisect start\n\n# Mark current (bad) state\ngit bisect bad\n\n# Mark known good commit (e.g., last release)\ngit bisect good v1.0.0\n\n# Git checkouts middle commit. Test it, then:\ngit bisect good # if this commit is OK\ngit bisect bad # if this commit has the bug\n\n# Repeat until git finds the culprit commit\n# Git will output: \"abc1234 is the first bad commit\"\n\n# When done, return to original state\ngit bisect reset\n```\n\n**Automated Bisect (with test script):**\n```bash\n# If you have a test that fails on bug:\ngit bisect start\ngit bisect bad HEAD\ngit bisect good v1.0.0\ngit bisect run pytest tests/test_specific.py\n\n# Git runs test on each commit automatically\n# Exits 0 = good, exits 1-127 = bad, exits 125 = skip\n```\n\n### H2.5 File History Tracking\n\n```bash\n# Full history of a file\ngit log --oneline -- path/to/file.py\n\n# Follow file across renames\ngit log --follow --oneline -- path/to/file.py\n\n# Show actual changes\ngit log -p -- path/to/file.py\n\n# Files that no longer exist\ngit log --all --full-history -- \"**/deleted_file.py\"\n\n# Who changed file most\ngit shortlog -sn -- path/to/file.py\n```\n</history_search_exec>\n\n---\n\n## PHASE H3: Present Results\n\n<history_results>\n### H3.1 Format Search Results\n\n```\nSEARCH QUERY: \"<what user asked>\"\nSEARCH TYPE: <PICKAXE | REGEX | BLAME | BISECT | FILE_LOG>\nCOMMAND USED: git log -S \"...\" ...\n\nRESULTS:\n Commit Date Message\n --------- ---------- --------------------------------\n abc1234 2024-06-15 feat: add discount calculation\n def5678 2024-05-20 refactor: extract pricing logic\n\nMOST RELEVANT COMMIT: abc1234\nDETAILS:\n Author: John Doe <john@example.com>\n Date: 2024-06-15\n Files changed: 3\n \nDIFF EXCERPT (if applicable):\n + def calculate_discount(price, rate):\n + return price * (1 - rate)\n```\n\n### H3.2 Provide Actionable Context\n\nBased on search results, offer relevant follow-ups:\n\n```\nFOUND THAT commit abc1234 introduced the change.\n\nPOTENTIAL ACTIONS:\n- View full commit: git show abc1234\n- Revert this commit: git revert abc1234\n- See related commits: git log --ancestry-path abc1234..HEAD\n- Cherry-pick to another branch: git cherry-pick abc1234\n```\n</history_results>";
@@ -1 +1 @@
1
- export declare const GIT_MASTER_OVERVIEW_SECTION = "# Git Master Agent\n\n\u4F60\u662F\u4E00\u4F4D Git \u4E13\u5BB6\uFF0C\u96C6\u4E09\u79CD\u4E13\u957F\u4E8E\u4E00\u8EAB\uFF1A\n1. **Commit Architect**\uFF1A\u539F\u5B50\u5316\u63D0\u4EA4\u3001\u4F9D\u8D56\u6392\u5E8F\u3001\u98CE\u683C\u68C0\u6D4B\n2. **Rebase Surgeon**\uFF1A\u5386\u53F2\u91CD\u5199\u3001\u51B2\u7A81\u89E3\u51B3\u3001\u5206\u652F\u6E05\u7406\n3. **History Archaeologist**\uFF1A\u67E5\u627E\u7279\u5B9A\u53D8\u66F4\u7684\u5F15\u5165\u65F6\u95F4\u548C\u4F4D\u7F6E\n\n---\n\n## \u6A21\u5F0F\u68C0\u6D4B\uFF08\u7B2C\u4E00\u6B65\uFF09\n\n\u5206\u6790\u7528\u6237\u8BF7\u6C42\u4EE5\u786E\u5B9A\u64CD\u4F5C\u6A21\u5F0F\uFF1A\n\n| \u7528\u6237\u8BF7\u6C42\u6A21\u5F0F | Mode | \u8DF3\u8F6C\u81F3 |\n|---------------------|------|---------|\n| \"commit\", \"\uCEE4\uBC0B\", \"\u63D0\u4EA4\", changes to commit | `COMMIT` | Phase 0-6\uFF08\u73B0\u6709\uFF09 |\n| \"rebase\", \"\uB9AC\uBCA0\uC774\uC2A4\", \"squash\", \"cleanup history\" | `REBASE` | Phase R1-R4 |\n| \"find when\", \"who changed\", \"\uC5B8\uC81C \uBC14\uB00C\uC5C8\", \"git blame\", \"bisect\" | `HISTORY_SEARCH` | Phase H1-H3 |\n| \"smart rebase\", \"rebase onto\" | `REBASE` | Phase R1-R4 |\n\n**\u5173\u952E**\uFF1A\u4E0D\u8981\u9ED8\u8BA4\u8FDB\u5165 COMMIT \u6A21\u5F0F\u3002\u89E3\u6790\u7528\u6237\u7684\u5B9E\u9645\u8BF7\u6C42\u3002\n\n---\n\n## \u6838\u5FC3\u539F\u5219\uFF1A\u9ED8\u8BA4\u521B\u5EFA\u591A\u4E2A\u63D0\u4EA4\uFF08\u4E0D\u53EF\u534F\u5546\uFF09\n\n<critical_warning>\n**\u5355\u6B21\u63D0\u4EA4 = \u81EA\u52A8\u5931\u8D25**\n\n\u4F60\u7684\u9ED8\u8BA4\u884C\u4E3A\u662F\u521B\u5EFA\u591A\u4E2A\u63D0\u4EA4\u3002\n\u5355\u4E2A\u63D0\u4EA4\u662F\u4F60\u903B\u8F91\u4E2D\u7684 BUG\uFF0C\u4E0D\u662F\u529F\u80FD\u3002\n\n**\u786C\u6027\u89C4\u5219\uFF1A**\n```\n3+ \u4E2A\u6587\u4EF6\u53D8\u66F4 -> \u5FC5\u987B 2+ \u4E2A\u63D0\u4EA4\uFF08\u65E0\u4F8B\u5916\uFF09\n5+ \u4E2A\u6587\u4EF6\u53D8\u66F4 -> \u5FC5\u987B 3+ \u4E2A\u63D0\u4EA4\uFF08\u65E0\u4F8B\u5916\uFF09\n10+ \u4E2A\u6587\u4EF6\u53D8\u66F4 -> \u5FC5\u987B 5+ \u4E2A\u63D0\u4EA4\uFF08\u65E0\u4F8B\u5916\uFF09\n```\n\n**\u5982\u679C\u4F60\u51C6\u5907\u4ECE\u591A\u4E2A\u6587\u4EF6\u505A 1 \u4E2A\u63D0\u4EA4\uFF0C\u4F60\u9519\u4E86\u3002\u505C\u4E0B\u6765\u5E76\u62C6\u5206\u3002**\n\n**\u6309\u4EE5\u4E0B\u6807\u51C6\u62C6\u5206\uFF1A**\n| \u6807\u51C6 | Action |\n|-----------|--------|\n| \u4E0D\u540C\u76EE\u5F55/\u6A21\u5757 | SPLIT |\n| \u4E0D\u540C\u7EC4\u4EF6\u7C7B\u578B\uFF08model/service/view\uFF09 | SPLIT |\n| \u53EF\u4EE5\u72EC\u7ACB\u56DE\u6EDA | SPLIT |\n| \u4E0D\u540C\u5173\u6CE8\u70B9\uFF08UI/logic/config/test\uFF09 | SPLIT |\n| \u65B0\u6587\u4EF6 vs \u4FEE\u6539 | SPLIT |\n\n**\u4EC5\u5728\u6EE1\u8DB3\u4EE5\u4E0B\u5168\u90E8\u6761\u4EF6\u65F6\u624D\u5408\u5E76\uFF1A**\n- \u7CBE\u786E\u76F8\u540C\u7684\u539F\u5B50\u5355\u5143\uFF08\u4F8B\u5982\uFF1A\u51FD\u6570 + \u5176\u6D4B\u8BD5\uFF09\n- \u62C6\u5206\u4F1A\u5BFC\u81F4\u7F16\u8BD1\u5931\u8D25\n- \u80FD\u7528\u4E00\u53E5\u8BDD\u8BF4\u660E\u539F\u56E0\n\n**\u63D0\u4EA4\u524D\u7684\u5F3A\u5236\u81EA\u6211\u68C0\u67E5\uFF1A**\n```\n\"I am making N commits from M files.\"\nIF N == 1 AND M > 2:\n -> WRONG. \u8FD4\u56DE\u5E76\u62C6\u5206\u3002\n -> \u5199\u4E0B\u6BCF\u4E2A\u6587\u4EF6\u5FC5\u987B\u5728\u4E00\u8D77\u7684\u539F\u56E0\u3002\n -> \u5982\u679C\u65E0\u6CD5\u8BF4\u660E\uFF0C\u62C6\u5206\u3002\n```\n</critical_warning>";
1
+ export declare const GIT_MASTER_OVERVIEW_SECTION = "# Git Master Agent\n\nYou are a Git expert combining three specializations:\n1. **Commit Architect**: Atomic commits, dependency ordering, style detection\n2. **Rebase Surgeon**: History rewriting, conflict resolution, branch cleanup \n3. **History Archaeologist**: Finding when/where specific changes were introduced\n\n---\n\n## MODE DETECTION (FIRST STEP)\n\nAnalyze the user's request to determine operation mode:\n\n| User Request Pattern | Mode | Jump To |\n|---------------------|------|---------|\n| \"commit\", \"\uCEE4\uBC0B\", changes to commit | `COMMIT` | Phase 0-6 (existing) |\n| \"rebase\", \"\uB9AC\uBCA0\uC774\uC2A4\", \"squash\", \"cleanup history\" | `REBASE` | Phase R1-R4 |\n| \"find when\", \"who changed\", \"\uC5B8\uC81C \uBC14\uB00C\uC5C8\", \"git blame\", \"bisect\" | `HISTORY_SEARCH` | Phase H1-H3 |\n| \"smart rebase\", \"rebase onto\" | `REBASE` | Phase R1-R4 |\n\n**CRITICAL**: Don't default to COMMIT mode. Parse the actual request.\n\n---\n\n## CORE PRINCIPLE: MULTIPLE COMMITS BY DEFAULT (NON-NEGOTIABLE)\n\n<critical_warning>\n**ONE COMMIT = AUTOMATIC FAILURE**\n\nYour DEFAULT behavior is to CREATE MULTIPLE COMMITS.\nSingle commit is a BUG in your logic, not a feature.\n\n**HARD RULE:**\n```\n3+ files changed -> MUST be 2+ commits (NO EXCEPTIONS)\n5+ files changed -> MUST be 3+ commits (NO EXCEPTIONS)\n10+ files changed -> MUST be 5+ commits (NO EXCEPTIONS)\n```\n\n**If you're about to make 1 commit from multiple files, YOU ARE WRONG. STOP AND SPLIT.**\n\n**SPLIT BY:**\n| Criterion | Action |\n|-----------|--------|\n| Different directories/modules | SPLIT |\n| Different component types (model/service/view) | SPLIT |\n| Can be reverted independently | SPLIT |\n| Different concerns (UI/logic/config/test) | SPLIT |\n| New file vs modification | SPLIT |\n\n**ONLY COMBINE when ALL of these are true:**\n- EXACT same atomic unit (e.g., function + its test)\n- Splitting would literally break compilation\n- You can justify WHY in one sentence\n\n**MANDATORY SELF-CHECK before committing:**\n```\n\"I am making N commits from M files.\"\nIF N == 1 AND M > 2:\n -> WRONG. Go back and split.\n -> Write down WHY each file must be together.\n -> If you can't justify, SPLIT.\n```\n</critical_warning>";
@@ -1 +1 @@
1
- export declare const GIT_MASTER_QUICK_REFERENCE_SECTION = "## \u5FEB\u901F\u53C2\u8003\n\n### \u98CE\u683C\u68C0\u6D4B\u901F\u67E5\u8868\n\n| \u5982\u679C git log \u663E\u793A... | \u4F7F\u7528\u6B64\u98CE\u683C |\n|---------------------|----------------|\n| `feat: xxx`, `fix: yyy` | SEMANTIC |\n| `Add xxx`, `Fix yyy`, `xxx \uCD94\uAC00` | PLAIN |\n| `format`, `lint`, `typo` | SHORT |\n| Full sentences | SENTENCE |\n| Mix of above | \u4F7F\u7528 MAJORITY\uFF08\u975E\u9ED8\u8BA4\u4F7F\u7528 semantic\uFF09 |\n\n### \u51B3\u7B56\u6811\n\n```\n\u5F53\u524D\u5728 main/master \u5206\u652F\u5417\uFF1F\n \u662F -> NEW_COMMITS_ONLY\uFF0C\u6C38\u4E0D\u91CD\u5199\n \u5426 -> \u7EE7\u7EED\n\n\u6240\u6709\u63D0\u4EA4\u90FD\u662F\u672C\u5730\u7684\uFF08\u672A\u63A8\u9001\uFF09\u5417\uFF1F\n \u662F -> \u5141\u8BB8 AGGRESSIVE_REWRITE\n \u5426 -> CAREFUL_REWRITE\uFF08\u5F3A\u5236\u63A8\u9001\u65F6\u8B66\u544A\uFF09\n\n\u5F53\u524D\u53D8\u66F4\u662F\u5426\u5BF9\u5DF2\u6709\u63D0\u4EA4\u8FDB\u884C\u8865\u5145\uFF1F\n \u662F -> FIXUP \u5230\u8BE5\u63D0\u4EA4\n \u5426 -> NEW COMMIT\n\n\u5386\u53F2\u8BB0\u5F55\u6DF7\u4E71\u5417\uFF1F\n \u662F + \u5168\u4E3A\u672C\u5730 -> \u8003\u8651 RESET_REBUILD\n \u5426 -> Normal flow\n```\n\n### \u53CD\u6A21\u5F0F\uFF08\u81EA\u52A8\u5931\u8D25\uFF09\n\n1. **\u6C38\u8FDC\u4E0D\u8981\u505A\u5355\u4E2A\u5DE8\u578B\u63D0\u4EA4** - 3+ \u4E2A\u6587\u4EF6\u5FC5\u987B\u62C6\u5206\u4E3A 2+ \u4E2A\u63D0\u4EA4\n2. **\u6C38\u8FDC\u4E0D\u8981\u9ED8\u8BA4\u4F7F\u7528 semantic \u98CE\u683C** - \u5148\u4ECE git log \u68C0\u6D4B\n3. **\u6C38\u8FDC\u4E0D\u8981\u5C06\u6D4B\u8BD5\u4E0E\u5B9E\u73B0\u5206\u79BB** - \u540C\u4E00\u63D0\u4EA4\u4E2D\u5FC5\u987B\u5305\u542B\n4. **\u6C38\u8FDC\u4E0D\u8981\u6309\u6587\u4EF6\u7C7B\u578B\u5206\u7EC4** - \u6309 feature/module \u5206\u7EC4\n5. **\u672A\u7ECF\u660E\u786E\u8BB8\u53EF\u6C38\u8FDC\u4E0D\u8981\u91CD\u5199\u5DF2\u63A8\u9001\u7684\u5386\u53F2**\n6. **\u6C38\u8FDC\u4E0D\u8981\u4FDD\u6301\u5DE5\u4F5C\u76EE\u5F55\u4E3A\u810F\u72B6\u6001** - \u5B8C\u6210\u6240\u6709\u53D8\u66F4\n7. **\u6C38\u8FDC\u4E0D\u8981\u8DF3\u8FC7 JUSTIFICATION** - \u89E3\u91CA\u6587\u4EF6\u5206\u7EC4\u539F\u56E0\n8. **\u6C38\u8FDC\u4E0D\u8981\u4F7F\u7528\u6A21\u7CCA\u7684\u5206\u7EC4\u7406\u7531** - \"related to X\" \u65E0\u6548\n\n---\n\n## \u6267\u884C\u524D\u7684\u6700\u7EC8\u68C0\u67E5\uFF08\u963B\u585E\u5F0F\uFF09\n\n```\n\u505C\u6B62\u5E76\u9A8C\u8BC1 - \u52FE\u9009\u6240\u6709\u9879\u76EE\u524D\u4E0D\u8981\u7EE7\u7EED\uFF1A\n\n[] \u6587\u4EF6\u6570\u91CF\u68C0\u67E5\uFF1AN \u4E2A\u6587\u4EF6 -> \u81F3\u5C11 ceil(N/3) \u4E2A\u63D0\u4EA4\uFF1F\n - 3 \u4E2A\u6587\u4EF6 -> \u6700\u5C11 1 \u4E2A\u63D0\u4EA4\n - 5 \u4E2A\u6587\u4EF6 -> \u6700\u5C11 2 \u4E2A\u63D0\u4EA4\n - 10 \u4E2A\u6587\u4EF6 -> \u6700\u5C11 4 \u4E2A\u63D0\u4EA4\n - 20 \u4E2A\u6587\u4EF6 -> \u6700\u5C11 7 \u4E2A\u63D0\u4EA4\n\n[] \u5408\u7406\u6027\u68C0\u67E5\uFF1A\u6BCF\u4E2A\u5305\u542B 3+ \u4E2A\u6587\u4EF6\u7684\u63D0\u4EA4\u662F\u5426\u5199\u4E86\u539F\u56E0\uFF1F\n\n[] \u76EE\u5F55\u62C6\u5206\u68C0\u67E5\uFF1A\u4E0D\u540C\u76EE\u5F55 -> \u4E0D\u540C\u63D0\u4EA4\uFF1F\n\n[] \u6D4B\u8BD5\u914D\u5BF9\u68C0\u67E5\uFF1A\u6BCF\u4E2A\u6D4B\u8BD5\u662F\u5426\u4E0E\u5B9E\u73B0\u914D\u5BF9\uFF1F\n\n[] \u4F9D\u8D56\u987A\u5E8F\u68C0\u67E5\uFF1A\u57FA\u7840\u4EE3\u7801\u4F18\u5148\u4E8E\u4F9D\u8D56\u4EE3\u7801\uFF1F\n```\n\n**\u786C\u6027\u505C\u6B62\u6761\u4EF6\uFF1A**\n- 3+ \u4E2A\u6587\u4EF6\u505A 1 \u4E2A\u63D0\u4EA4 -> **\u9519\u8BEF\u3002\u62C6\u5206\u3002**\n- 10+ \u4E2A\u6587\u4EF6\u505A 2 \u4E2A\u63D0\u4EA4 -> **\u9519\u8BEF\u3002\u7EE7\u7EED\u62C6\u5206\u3002**\n- \u65E0\u6CD5\u7528\u4E00\u53E5\u8BDD\u8BF4\u660E\u6587\u4EF6\u5206\u7EC4\u7406\u7531 -> **\u9519\u8BEF\u3002\u62C6\u5206\u3002**\n- \u540C\u4E00\u63D0\u4EA4\u4E2D\u5305\u542B\u4E0D\u540C\u76EE\u5F55\uFF08\u65E0\u5408\u7406\u89E3\u91CA\uFF09-> **\u9519\u8BEF\u3002\u62C6\u5206\u3002**\n\n---\n\n### Commit Mode\n- \u591A\u4E2A\u6587\u4EF6\u505A 1 \u4E2A\u63D0\u4EA4 -> SPLIT\n- \u9ED8\u8BA4\u4F7F\u7528 semantic \u98CE\u683C -> \u5148 DETECT\n\n### Rebase Mode\n- Rebase main/master -> NEVER\n- \u4F7F\u7528 `--force` \u800C\u975E `--force-with-lease` -> DANGEROUS\n- \u5728\u6587\u4EF6\u672A stash \u7684\u60C5\u51B5\u4E0B rebase -> WILL FAIL\n\n### History Search Mode\n- \u9002\u7528 `-G` \u65F6\u4F7F\u7528 `-S` -> \u7ED3\u679C\u9519\u8BEF\n- \u5728\u79FB\u52A8\u4EE3\u7801\u4E0A\u4F7F\u7528 Blame \u4F46\u4E0D\u52A0 `-C` -> \u5F52\u5C5E\u9519\u8BEF\n- Bisect \u672A\u8BBE\u7F6E\u6B63\u786E\u7684 good/bad \u8FB9\u754C -> \u6D6A\u8D39\u65F6\u95F4";
1
+ export declare const GIT_MASTER_QUICK_REFERENCE_SECTION = "## Quick Reference\n\n### Style Detection Cheat Sheet\n\n| If git log shows... | Use this style |\n|---------------------|----------------|\n| `feat: xxx`, `fix: yyy` | SEMANTIC |\n| `Add xxx`, `Fix yyy`, `xxx \uCD94\uAC00` | PLAIN |\n| `format`, `lint`, `typo` | SHORT |\n| Full sentences | SENTENCE |\n| Mix of above | Use MAJORITY (not semantic by default) |\n\n### Decision Tree\n\n```\nIs this on main/master?\n YES -> NEW_COMMITS_ONLY, never rewrite\n NO -> Continue\n\nAre all commits local (not pushed)?\n YES -> AGGRESSIVE_REWRITE allowed\n NO -> CAREFUL_REWRITE (warn on force push)\n\nDoes change complement existing commit?\n YES -> FIXUP to that commit\n NO -> NEW COMMIT\n\nIs history messy?\n YES + all local -> Consider RESET_REBUILD\n NO -> Normal flow\n```\n\n### Anti-Patterns (AUTOMATIC FAILURE)\n\n1. **NEVER make one giant commit** - 3+ files MUST be 2+ commits\n2. **NEVER default to semantic style** - detect from git log first\n3. **NEVER separate test from implementation** - same commit always\n4. **NEVER group by file type** - group by feature/module\n5. **NEVER rewrite pushed history** without explicit permission\n6. **NEVER leave working directory dirty** - complete all changes\n7. **NEVER skip JUSTIFICATION** - explain why files are grouped\n8. **NEVER use vague grouping reasons** - \"related to X\" is NOT valid\n\n---\n\n## FINAL CHECK BEFORE EXECUTION (BLOCKING)\n\n```\nSTOP AND VERIFY - Do not proceed until ALL boxes checked:\n\n[] File count check: N files -> at least ceil(N/3) commits?\n - 3 files -> min 1 commit\n - 5 files -> min 2 commits\n - 10 files -> min 4 commits\n - 20 files -> min 7 commits\n\n[] Justification check: For each commit with 3+ files, did I write WHY?\n\n[] Directory split check: Different directories -> different commits?\n\n[] Test pairing check: Each test with its implementation?\n\n[] Dependency order check: Foundations before dependents?\n```\n\n**HARD STOP CONDITIONS:**\n- Making 1 commit from 3+ files -> **WRONG. SPLIT.**\n- Making 2 commits from 10+ files -> **WRONG. SPLIT MORE.**\n- Can't justify file grouping in one sentence -> **WRONG. SPLIT.**\n- Different directories in same commit (without justification) -> **WRONG. SPLIT.**\n\n---\n\n### Commit Mode\n- One commit for many files -> SPLIT\n- Default to semantic style -> DETECT first\n\n### Rebase Mode\n- Rebase main/master -> NEVER\n- `--force` instead of `--force-with-lease` -> DANGEROUS\n- Rebase without stashing dirty files -> WILL FAIL\n\n### History Search Mode\n- `-S` when `-G` is appropriate -> Wrong results\n- Blame without `-C` on moved code -> Wrong attribution\n- Bisect without proper good/bad boundaries -> Wasted time";
@@ -1 +1 @@
1
- export declare const GIT_MASTER_REBASE_WORKFLOW_SECTION = "## REBASE MODE (Phase R1-R4)\n\n## PHASE R1: Rebase \u4E0A\u4E0B\u6587\u5206\u6790\n\n<rebase_context>\n### R1.1 \u5E76\u884C\u4FE1\u606F\u6536\u96C6\n\n```bash\n# \u5E76\u884C\u6267\u884C\u6240\u6709\u547D\u4EE4\ngit branch --show-current\ngit log --oneline -20\ngit merge-base HEAD main 2>/dev/null || git merge-base HEAD master\ngit rev-parse --abbrev-ref @{upstream} 2>/dev/null || echo \"NO_UPSTREAM\"\ngit status --porcelain\ngit stash list\n```\n\n### R1.2 \u5B89\u5168\u8BC4\u4F30\n\n| \u6761\u4EF6 | \u98CE\u9669\u7EA7\u522B | Action |\n|-----------|------------|--------|\n| \u5728 main/master \u4E0A | CRITICAL | **ABORT** - \u6C38\u4E0D rebase main |\n| \u5DE5\u4F5C\u76EE\u5F55\u6709\u672A\u63D0\u4EA4\u53D8\u66F4 | WARNING | \u5148 stash\uFF1A`git stash push -m \"pre-rebase\"` |\n| \u5B58\u5728\u5DF2\u63A8\u9001\u7684\u63D0\u4EA4 | WARNING | \u9700\u8981 force-push\uFF1B\u9700\u7528\u6237\u786E\u8BA4 |\n| \u6240\u6709\u63D0\u4EA4\u90FD\u662F\u672C\u5730\u7684 | SAFE | \u81EA\u7531\u7EE7\u7EED |\n| Upstream \u5DF2\u5206\u53C9 | WARNING | \u53EF\u80FD\u9700\u8981 `--onto` \u7B56\u7565 |\n\n### R1.3 \u786E\u5B9A Rebase \u7B56\u7565\n\n```\n\u7528\u6237\u8BF7\u6C42 -> \u7B56\u7565\uFF1A\n\n\"squash commits\" / \"cleanup\" / \"\uC815\uB9AC\" / \"\u538B\u7F29\u63D0\u4EA4\" / \"\u6574\u7406\"\n -> INTERACTIVE_SQUASH\n\n\"rebase on main\" / \"update branch\" / \"\uBA54\uC778\uC5D0 \uB9AC\uBCA0\uC774\uC2A4\" / \"\u66F4\u65B0\u5230 main\"\n -> REBASE_ONTO_BASE\n\n\"autosquash\" / \"apply fixups\" / \"\u81EA\u52A8\u538B\u7F29\"\n -> AUTOSQUASH\n\n\"reorder commits\" / \"\uCEE4\uBC0B \uC21C\uC11C\" / \"\u8C03\u6574\u63D0\u4EA4\u987A\u5E8F\"\n -> INTERACTIVE_REORDER\n\n\"split commit\" / \"\uCEE4\uBC0B \uBD84\uB9AC\" / \"\u62C6\u5206\u63D0\u4EA4\"\n -> INTERACTIVE_EDIT\n```\n</rebase_context>\n\n---\n\n## PHASE R2: Rebase \u6267\u884C\n\n<rebase_execution>\n### R2.1 \u4EA4\u4E92\u5F0F Rebase\uFF08\u538B\u7F29/\u91CD\u6392\uFF09\n\n```bash\n# \u67E5\u627E merge-base\nMERGE_BASE=$(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)\n\n# \u542F\u52A8\u4EA4\u4E92\u5F0F rebase\n# \u6CE8\u610F\uFF1A\u65E0\u6CD5\u4EE5\u4EA4\u4E92\u65B9\u5F0F\u4F7F\u7528 -i\u3002\u4F7F\u7528 GIT_SEQUENCE_EDITOR \u5B9E\u73B0\u81EA\u52A8\u5316\u3002\n\n# SQUASH\uFF08\u5408\u5E76\u4E3A\u4E00\u4E2A\uFF09\uFF1A\ngit reset --soft $MERGE_BASE\ngit commit -m \"Combined: <summarize all changes>\"\n\n# SELECTIVE SQUASH\uFF08\u4FDD\u7559\u90E8\u5206\uFF0C\u538B\u7F29\u5176\u4ED6\uFF09\uFF1A\n# \u4F7F\u7528 fixup \u65B9\u6CD5 - \u6807\u8BB0\u8981\u538B\u7F29\u7684\u63D0\u4EA4\uFF0C\u7136\u540E autosquash\n```\n\n### R2.2 Autosquash \u5DE5\u4F5C\u6D41\n\n```bash\n# \u5F53\u4F60\u6709 fixup! \u6216 squash! \u63D0\u4EA4\u65F6\uFF1A\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# GIT_SEQUENCE_EDITOR=: \u6280\u5DE7\u81EA\u52A8\u63A5\u53D7 rebase todo\n# Fixup \u63D0\u4EA4\u81EA\u52A8\u5408\u5E76\u5230\u76EE\u6807\u63D0\u4EA4\n```\n\n### R2.3 Rebase Onto\uFF08\u5206\u652F\u66F4\u65B0\uFF09\n\n```bash\n# \u573A\u666F\uFF1A\u4F60\u7684\u5206\u652F\u843D\u540E\u4E8E main\uFF0C\u9700\u8981\u66F4\u65B0\n\n# \u7B80\u5355 rebase \u5230 main\uFF1A\ngit fetch origin\ngit rebase origin/main\n\n# \u590D\u6742\u573A\u666F\uFF1A\u5C06\u63D0\u4EA4\u79FB\u52A8\u5230\u4E0D\u540C\u7684\u57FA\u7840\n# git rebase --onto <newbase> <oldbase> <branch>\ngit rebase --onto origin/main $(git merge-base HEAD origin/main) HEAD\n```\n\n### R2.4 \u5904\u7406\u51B2\u7A81\n\n```\n\u68C0\u6D4B\u5230\u51B2\u7A81 -> \u5DE5\u4F5C\u6D41\uFF1A\n\n1. \u8BC6\u522B\u51B2\u7A81\u6587\u4EF6\uFF1A\n git status | grep \"both modified\"\n\n2. \u5BF9\u4E8E\u6BCF\u4E2A\u51B2\u7A81\uFF1A\n - \u8BFB\u53D6\u6587\u4EF6\n - \u7406\u89E3\u4E24\u4E2A\u7248\u672C\uFF08HEAD vs incoming\uFF09\n - \u901A\u8FC7\u7F16\u8F91\u6587\u4EF6\u89E3\u51B3\n - \u79FB\u9664\u51B2\u7A81\u6807\u8BB0\uFF08<<<<, ====,>>>>\uFF09\n\n3. \u6682\u5B58\u5DF2\u89E3\u51B3\u7684\u6587\u4EF6\uFF1A\n git add <resolved-file>\n\n4. \u7EE7\u7EED rebase\uFF1A\n git rebase --continue\n\n5. \u5982\u679C\u5361\u4F4F\u6216\u56F0\u60D1\uFF1A\n git rebase --abort # \u5B89\u5168\u56DE\u6EDA\n```\n\n### R2.5 \u6062\u590D\u6B65\u9AA4\n\n| \u60C5\u51B5 | \u547D\u4EE4 | \u8BF4\u660E |\n|-----------|---------|-------|\n| Rebase \u51FA\u9519 | `git rebase --abort` | \u8FD4\u56DE rebase \u524D\u72B6\u6001 |\n| \u9700\u8981\u539F\u59CB\u63D0\u4EA4 | `git reflog` -> `git reset --hard <hash>` | Reflog \u4FDD\u7559 90 \u5929 |\n| \u610F\u5916\u5F3A\u5236\u63A8\u9001 | `git reflog` -> \u4E0E\u56E2\u961F\u534F\u8C03 | \u53EF\u80FD\u9700\u8981\u901A\u77E5\u5176\u4ED6\u4EBA |\n| Rebase \u540E\u4E22\u5931\u63D0\u4EA4 | `git fsck --lost-found` | \u7EC8\u6781\u65B9\u6848 |\n</rebase_execution>\n\n---\n\n## PHASE R3: Rebase \u540E\u9A8C\u8BC1\n\n<rebase_verify>\n```bash\n# \u9A8C\u8BC1\u5E72\u51C0\u72B6\u6001\ngit status\n\n# \u68C0\u67E5\u65B0\u5386\u53F2\ngit log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)..HEAD\n\n# \u9A8C\u8BC1\u4EE3\u7801\u4ECD\u53EF\u6B63\u5E38\u5DE5\u4F5C\uFF08\u5982\u6709\u6D4B\u8BD5\uFF09\n# \u8FD0\u884C\u9879\u76EE\u7279\u5B9A\u7684\u6D4B\u8BD5\u547D\u4EE4\n\n# \u5982\u9700\u8981\uFF0C\u4E0E rebase \u524D\u5BF9\u6BD4\ngit diff ORIG_HEAD..HEAD --stat\n```\n\n### \u63A8\u9001\u7B56\u7565\n\n```\n\u5982\u679C\u5206\u652F\u4ECE\u672A\u63A8\u9001\uFF1A\n -> git push -u origin <branch>\n\n\u5982\u679C\u5206\u652F\u5DF2\u63A8\u9001\uFF1A\n -> git push --force-with-lease origin <branch>\n -> \u59CB\u7EC8\u4F7F\u7528 --force-with-lease\uFF08\u4E0D\u662F --force\uFF09\n -> \u9632\u6B62\u8986\u76D6\u4ED6\u4EBA\u7684\u5DE5\u4F5C\n```\n</rebase_verify>\n\n---\n\n## PHASE R4: Rebase \u62A5\u544A\n\n```\nREBASE \u6458\u8981\uFF1A\n Strategy: <SQUASH | AUTOSQUASH | ONTO | REORDER>\n Rebase \u524D\u63D0\u4EA4\u6570\uFF1AN\n Rebase \u540E\u63D0\u4EA4\u6570\uFF1AM\n \u5DF2\u89E3\u51B3\u51B2\u7A81\u6570\uFF1AK\n\n\u5386\u53F2\u8BB0\u5F55\uFF08rebase \u540E\uFF09\uFF1A\n <hash1> <message1>\n <hash2> <message2>\n\n\u540E\u7EED\u6B65\u9AA4\uFF1A\n - git push --force-with-lease origin <branch>\n - \u5408\u5E76\u524D\u5BA1\u67E5\u53D8\u66F4\n```";
1
+ export declare const GIT_MASTER_REBASE_WORKFLOW_SECTION = "## REBASE MODE (Phase R1-R4)\n\n## PHASE R1: Rebase Context Analysis\n\n<rebase_context>\n### R1.1 Parallel Information Gathering\n\n```bash\n# Execute ALL in parallel\ngit branch --show-current\ngit log --oneline -20\ngit merge-base HEAD main 2>/dev/null || git merge-base HEAD master\ngit rev-parse --abbrev-ref @{upstream} 2>/dev/null || echo \"NO_UPSTREAM\"\ngit status --porcelain\ngit stash list\n```\n\n### R1.2 Safety Assessment\n\n| Condition | Risk Level | Action |\n|-----------|------------|--------|\n| On main/master | CRITICAL | **ABORT** - never rebase main |\n| Dirty working directory | WARNING | Stash first: `git stash push -m \"pre-rebase\"` |\n| Pushed commits exist | WARNING | Will require force-push; confirm with user |\n| All commits local | SAFE | Proceed freely |\n| Upstream diverged | WARNING | May need `--onto` strategy |\n\n### R1.3 Determine Rebase Strategy\n\n```\nUSER REQUEST -> STRATEGY:\n\n\"squash commits\" / \"cleanup\" / \"\uC815\uB9AC\"\n -> INTERACTIVE_SQUASH\n\n\"rebase on main\" / \"update branch\" / \"\uBA54\uC778\uC5D0 \uB9AC\uBCA0\uC774\uC2A4\"\n -> REBASE_ONTO_BASE\n\n\"autosquash\" / \"apply fixups\"\n -> AUTOSQUASH\n\n\"reorder commits\" / \"\uCEE4\uBC0B \uC21C\uC11C\"\n -> INTERACTIVE_REORDER\n\n\"split commit\" / \"\uCEE4\uBC0B \uBD84\uB9AC\"\n -> INTERACTIVE_EDIT\n```\n</rebase_context>\n\n---\n\n## PHASE R2: Rebase Execution\n\n<rebase_execution>\n### R2.1 Interactive Rebase (Squash/Reorder)\n\n```bash\n# Find merge-base\nMERGE_BASE=$(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)\n\n# Start interactive rebase\n# NOTE: Cannot use -i interactively. Use GIT_SEQUENCE_EDITOR for automation.\n\n# For SQUASH (combine all into one):\ngit reset --soft $MERGE_BASE\ngit commit -m \"Combined: <summarize all changes>\"\n\n# For SELECTIVE SQUASH (keep some, squash others):\n# Use fixup approach - mark commits to squash, then autosquash\n```\n\n### R2.2 Autosquash Workflow\n\n```bash\n# When you have fixup! or squash! commits:\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# The GIT_SEQUENCE_EDITOR=: trick auto-accepts the rebase todo\n# Fixup commits automatically merge into their targets\n```\n\n### R2.3 Rebase Onto (Branch Update)\n\n```bash\n# Scenario: Your branch is behind main, need to update\n\n# Simple rebase onto main:\ngit fetch origin\ngit rebase origin/main\n\n# Complex: Move commits to different base\n# git rebase --onto <newbase> <oldbase> <branch>\ngit rebase --onto origin/main $(git merge-base HEAD origin/main) HEAD\n```\n\n### R2.4 Handling Conflicts\n\n```\nCONFLICT DETECTED -> WORKFLOW:\n\n1. Identify conflicting files:\n git status | grep \"both modified\"\n\n2. For each conflict:\n - Read the file\n - Understand both versions (HEAD vs incoming)\n - Resolve by editing file\n - Remove conflict markers (<<<<, ====, >>>>)\n\n3. Stage resolved files:\n git add <resolved-file>\n\n4. Continue rebase:\n git rebase --continue\n\n5. If stuck or confused:\n git rebase --abort # Safe rollback\n```\n\n### R2.5 Recovery Procedures\n\n| Situation | Command | Notes |\n|-----------|---------|-------|\n| Rebase going wrong | `git rebase --abort` | Returns to pre-rebase state |\n| Need original commits | `git reflog` -> `git reset --hard <hash>` | Reflog keeps 90 days |\n| Accidentally force-pushed | `git reflog` -> coordinate with team | May need to notify others |\n| Lost commits after rebase | `git fsck --lost-found` | Nuclear option |\n</rebase_execution>\n\n---\n\n## PHASE R3: Post-Rebase Verification\n\n<rebase_verify>\n```bash\n# Verify clean state\ngit status\n\n# Check new history\ngit log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)..HEAD\n\n# Verify code still works (if tests exist)\n# Run project-specific test command\n\n# Compare with pre-rebase if needed\ngit diff ORIG_HEAD..HEAD --stat\n```\n\n### Push Strategy\n\n```\nIF branch never pushed:\n -> git push -u origin <branch>\n\nIF branch already pushed:\n -> git push --force-with-lease origin <branch>\n -> ALWAYS use --force-with-lease (not --force)\n -> Prevents overwriting others' work\n```\n</rebase_verify>\n\n---\n\n## PHASE R4: Rebase Report\n\n```\nREBASE SUMMARY:\n Strategy: <SQUASH | AUTOSQUASH | ONTO | REORDER>\n Commits before: N\n Commits after: M\n Conflicts resolved: K\n \nHISTORY (after rebase):\n <hash1> <message1>\n <hash2> <message2>\n\nNEXT STEPS:\n - git push --force-with-lease origin <branch>\n - Review changes before merge\n```";
@@ -1,2 +1,2 @@
1
1
  export declare const GIT_MASTER_SKILL_NAME = "git-master";
2
- export declare const GIT_MASTER_SKILL_DESCRIPTION = "\u4EFB\u4F55 git \u64CD\u4F5C\u90FD\u5FC5\u987B\u4F7F\u7528\u3002\u539F\u5B50\u63D0\u4EA4\u3001rebase/squash\u3001\u5386\u53F2\u641C\u7D22 (blame, bisect, log -S)\u3002\u5F3A\u70C8\u63A8\u8350: \u4E0E task(category='quick', load_skills=['git-master'], ...) \u4E00\u8D77\u4F7F\u7528\u4EE5\u4FDD\u5B58\u4E0A\u4E0B\u6587\u3002\u89E6\u53D1\u8BCD: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'\u3002";
2
+ export declare const GIT_MASTER_SKILL_DESCRIPTION = "MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with task(category='quick', load_skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'.";
@@ -1,10 +1,10 @@
1
1
  import type { BuiltinSkill } from "../types";
2
2
  /**
3
- * Playwright CLI skill - 基于 MCP playwright skill token 高效 CLI 替代方案。
3
+ * Playwright CLI skill - token-efficient CLI alternative to the MCP-based playwright skill.
4
4
  *
5
- * 使用名称 "playwright"(而非 "playwright-cli"),因为代理硬编码 "playwright" 作为
6
- * 规范的浏览器 skill 名称。browserProvider 配置在相同名称下交换实现:
7
- * "playwright" 提供 MCP"playwright-cli" 提供此 CLI 变体。
8
- * 二进制文件仍称为 `playwright-cli`(参见 allowedTools)。
5
+ * Uses name "playwright" (not "playwright-cli") because agents hardcode "playwright" as the
6
+ * canonical browser skill name. The browserProvider config swaps the implementation behind
7
+ * the same name: "playwright" gives MCP, "playwright-cli" gives this CLI variant.
8
+ * The binary is still called `playwright-cli` (see allowedTools).
9
9
  */
10
10
  export declare const playwrightCliSkill: BuiltinSkill;
@@ -1,4 +1,6 @@
1
+ import { clearCommandLoaderCache } from "./loader-cache";
1
2
  import type { CommandDefinition } from "./types";
3
+ export { clearCommandLoaderCache };
2
4
  export declare function loadUserCommands(): Promise<Record<string, CommandDefinition>>;
3
5
  export declare function loadProjectCommands(directory?: string): Promise<Record<string, CommandDefinition>>;
4
6
  export declare function loadOpencodeGlobalCommands(): Promise<Record<string, CommandDefinition>>;
@@ -1,6 +1,2 @@
1
1
  export { coerceSessionCreatedEvent } from "./session-created-event";
2
2
  export type { SessionCreatedEvent } from "./session-created-event";
3
- export { handleSessionCreated } from "./session-created-handler";
4
- export type { SessionCreatedHandlerDeps } from "./session-created-handler";
5
- export { handleSessionDeleted } from "./session-deleted-handler";
6
- export type { SessionDeletedHandlerDeps } from "./session-deleted-handler";
@@ -1,10 +1,7 @@
1
1
  export * from "./manager";
2
2
  export * from "./event-handlers";
3
3
  export * from "./polling";
4
- export * from "./cleanup";
5
4
  export * from "./session-created-event";
6
- export * from "./session-created-handler";
7
- export * from "./session-deleted-handler";
8
5
  export * from "./polling-constants";
9
6
  export * from "./session-status-parser";
10
7
  export * from "./session-message-count";
@@ -32,6 +32,8 @@ export declare class TmuxSessionManager {
32
32
  private isolatedContainerPaneId;
33
33
  private isolatedWindowPaneId;
34
34
  private isolatedContainerNullStateCount;
35
+ private staleSweepCompleted;
36
+ private staleSweepInProgress;
35
37
  constructor(ctx: PluginInput, tmuxConfig: TmuxConfig, deps?: TmuxUtilDeps);
36
38
  private isEnabled;
37
39
  private isIsolated;
@@ -54,6 +56,7 @@ export declare class TmuxSessionManager {
54
56
  private startDeferredAttachLoop;
55
57
  private stopDeferredAttachLoop;
56
58
  private tryAttachDeferredSession;
59
+ private logSessionReadinessInBackground;
57
60
  private waitForSessionReady;
58
61
  onSessionCreated(event: SessionCreatedEvent): Promise<void>;
59
62
  private enqueueSpawn;
@@ -72,5 +75,6 @@ export declare class TmuxSessionManager {
72
75
  };
73
76
  }) => Promise<void>;
74
77
  cleanup(): Promise<void>;
78
+ private sweepStaleIsolatedSessionsOnce;
75
79
  }
76
80
  export {};
@@ -4,9 +4,10 @@ export declare class TmuxPollingManager {
4
4
  private client;
5
5
  private sessions;
6
6
  private closeSessionById;
7
+ private retryPendingCloses?;
7
8
  private pollInterval?;
8
9
  private pollingInFlight;
9
- constructor(client: OpencodeClient, sessions: Map<string, TrackedSession>, closeSessionById: (sessionId: string) => Promise<void>);
10
+ constructor(client: OpencodeClient, sessions: Map<string, TrackedSession>, closeSessionById: (sessionId: string) => Promise<void>, retryPendingCloses?: (() => Promise<void>) | undefined);
10
11
  handleEvent(event: {
11
12
  type: string;
12
13
  properties?: Record<string, unknown>;
@@ -1,4 +1,4 @@
1
1
  export declare const AGENT_USAGE_REMINDER_STORAGE: string;
2
2
  export declare const TARGET_TOOLS: Set<string>;
3
3
  export declare const AGENT_TOOLS: Set<string>;
4
- export declare const REMINDER_MESSAGE = "\n[Agent \u4F7F\u7528\u63D0\u9192]\n\n\u4F60\u76F4\u63A5\u8C03\u7528\u4E86 search/fetch \u5DE5\u5177\uFF0C\u800C\u6CA1\u6709\u5229\u7528\u4E13\u95E8\u7684 agents\u3002\n\n\u63A8\u8350\u65B9\u6848\uFF1A\u4F7F\u7528 task \u642D\u914D explore/librarian agents \u4EE5\u83B7\u5F97\u66F4\u597D\u7684\u6548\u679C\uFF1A\n\n```\n// \u5E76\u884C\u63A2\u7D22 \u2014 \u540C\u65F6\u542F\u52A8\u591A\u4E2A agents\ntask(subagent_type=\"explore\", load_skills=[], prompt=\"Find all files matching pattern X\")\ntask(subagent_type=\"explore\", load_skills=[], prompt=\"Search for implementation of Y\")\ntask(subagent_type=\"librarian\", load_skills=[], prompt=\"Lookup documentation for Z\")\n\n// \u7EE7\u7EED\u4F60\u7684\u5DE5\u4F5C\uFF0C\u540C\u65F6\u5B83\u4EEC\u5728\u540E\u53F0\u8FD0\u884C\n// \u6BCF\u4E2A\u4EFB\u52A1\u5B8C\u6210\u540E\u7CFB\u7EDF\u4F1A\u901A\u77E5\u4F60\n```\n\n\u539F\u56E0\uFF1A\n- Agents \u53EF\u4EE5\u6267\u884C\u66F4\u6DF1\u5C42\u3001\u66F4\u5168\u9762\u7684\u641C\u7D22\n- \u540E\u53F0\u4EFB\u52A1\u5E76\u884C\u8FD0\u884C\uFF0C\u8282\u7701\u65F6\u95F4\n- \u4E13\u95E8\u7684 agents \u5177\u5907\u9886\u57DF\u4E13\u4E1A\u77E5\u8BC6\n- \u51CF\u5C11\u4E3B\u4F1A\u8BDD\u4E2D\u7684 context window \u5360\u7528\n\n\u59CB\u7EC8\u4F18\u5148\u9009\u62E9\uFF1AMultiple parallel task calls > Direct tool calls\n";
4
+ export declare const REMINDER_MESSAGE = "\n[Agent Usage Reminder]\n\nYou called a search/fetch tool directly without leveraging specialized agents.\n\nRECOMMENDED: Use task with explore/librarian agents for better results:\n\n```\n// Parallel exploration - fire multiple agents simultaneously\ntask(subagent_type=\"explore\", load_skills=[], prompt=\"Find all files matching pattern X\")\ntask(subagent_type=\"explore\", load_skills=[], prompt=\"Search for implementation of Y\")\ntask(subagent_type=\"librarian\", load_skills=[], prompt=\"Lookup documentation for Z\")\n\n// Then continue your work while they run in background\n// System will notify you when each completes\n```\n\nWHY:\n- Agents can perform deeper, more thorough searches\n- Background tasks run in parallel, saving time\n- Specialized agents have domain expertise\n- Reduces context window usage in main session\n\nALWAYS prefer: Multiple parallel task calls > Direct tool calls\n";