@xdevops/issue-auto-finish 1.0.0

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 (161) hide show
  1. package/bin/issue-auto-finish.js +2 -0
  2. package/dist/ai-runner/AIRunner.d.ts +27 -0
  3. package/dist/ai-runner/AIRunner.d.ts.map +1 -0
  4. package/dist/ai-runner/BaseAIRunner.d.ts +19 -0
  5. package/dist/ai-runner/BaseAIRunner.d.ts.map +1 -0
  6. package/dist/ai-runner/ClaudeInternalRunner.d.ts +13 -0
  7. package/dist/ai-runner/ClaudeInternalRunner.d.ts.map +1 -0
  8. package/dist/ai-runner/CodebuddyRunner.d.ts +13 -0
  9. package/dist/ai-runner/CodebuddyRunner.d.ts.map +1 -0
  10. package/dist/ai-runner/CursorAgentRunner.d.ts +13 -0
  11. package/dist/ai-runner/CursorAgentRunner.d.ts.map +1 -0
  12. package/dist/ai-runner/index.d.ts +15 -0
  13. package/dist/ai-runner/index.d.ts.map +1 -0
  14. package/dist/chunk-HCHEFK4Z.js +80 -0
  15. package/dist/chunk-HCHEFK4Z.js.map +1 -0
  16. package/dist/chunk-I3T573SU.js +153 -0
  17. package/dist/chunk-I3T573SU.js.map +1 -0
  18. package/dist/chunk-IDUKWCC2.js +1995 -0
  19. package/dist/chunk-IDUKWCC2.js.map +1 -0
  20. package/dist/chunk-OWVT3Z34.js +770 -0
  21. package/dist/chunk-OWVT3Z34.js.map +1 -0
  22. package/dist/chunk-RIUI4ROA.js +180 -0
  23. package/dist/chunk-RIUI4ROA.js.map +1 -0
  24. package/dist/chunk-TBIEB3JY.js +3295 -0
  25. package/dist/chunk-TBIEB3JY.js.map +1 -0
  26. package/dist/cli/commands/doctor.d.ts +2 -0
  27. package/dist/cli/commands/doctor.d.ts.map +1 -0
  28. package/dist/cli/commands/init.d.ts +6 -0
  29. package/dist/cli/commands/init.d.ts.map +1 -0
  30. package/dist/cli/commands/start.d.ts +5 -0
  31. package/dist/cli/commands/start.d.ts.map +1 -0
  32. package/dist/cli/index.d.ts +3 -0
  33. package/dist/cli/index.d.ts.map +1 -0
  34. package/dist/cli/setup/ConfigGenerator.d.ts +44 -0
  35. package/dist/cli/setup/ConfigGenerator.d.ts.map +1 -0
  36. package/dist/cli/setup/DependencyChecker.d.ts +21 -0
  37. package/dist/cli/setup/DependencyChecker.d.ts.map +1 -0
  38. package/dist/cli.js +73 -0
  39. package/dist/cli.js.map +1 -0
  40. package/dist/clients/GongfengClient.d.ts +86 -0
  41. package/dist/clients/GongfengClient.d.ts.map +1 -0
  42. package/dist/config.d.ts +92 -0
  43. package/dist/config.d.ts.map +1 -0
  44. package/dist/deploy/DevServerManager.d.ts +21 -0
  45. package/dist/deploy/DevServerManager.d.ts.map +1 -0
  46. package/dist/deploy/PortAllocator.d.ts +20 -0
  47. package/dist/deploy/PortAllocator.d.ts.map +1 -0
  48. package/dist/deploy/index.d.ts +3 -0
  49. package/dist/deploy/index.d.ts.map +1 -0
  50. package/dist/doctor-B26Q6JWI.js +33 -0
  51. package/dist/doctor-B26Q6JWI.js.map +1 -0
  52. package/dist/e2e/E2eSettings.d.ts +6 -0
  53. package/dist/e2e/E2eSettings.d.ts.map +1 -0
  54. package/dist/e2e/ScreenshotCollector.d.ts +11 -0
  55. package/dist/e2e/ScreenshotCollector.d.ts.map +1 -0
  56. package/dist/e2e/ScreenshotPublisher.d.ts +16 -0
  57. package/dist/e2e/ScreenshotPublisher.d.ts.map +1 -0
  58. package/dist/events/EventBus.d.ts +14 -0
  59. package/dist/events/EventBus.d.ts.map +1 -0
  60. package/dist/git/GitOperations.d.ts +30 -0
  61. package/dist/git/GitOperations.d.ts.map +1 -0
  62. package/dist/git/WorktreeContext.d.ts +9 -0
  63. package/dist/git/WorktreeContext.d.ts.map +1 -0
  64. package/dist/i18n/index.d.ts +8 -0
  65. package/dist/i18n/index.d.ts.map +1 -0
  66. package/dist/i18n/locales/en.d.ts +2 -0
  67. package/dist/i18n/locales/en.d.ts.map +1 -0
  68. package/dist/i18n/locales/zh-CN.d.ts +2 -0
  69. package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
  70. package/dist/index.d.ts +2 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +12 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/init-L3VIWCOV.js +65 -0
  75. package/dist/init-L3VIWCOV.js.map +1 -0
  76. package/dist/lib.d.ts +26 -0
  77. package/dist/lib.d.ts.map +1 -0
  78. package/dist/lib.js +50 -0
  79. package/dist/lib.js.map +1 -0
  80. package/dist/logger.d.ts +15 -0
  81. package/dist/logger.d.ts.map +1 -0
  82. package/dist/notesync/NoteSyncSettings.d.ts +12 -0
  83. package/dist/notesync/NoteSyncSettings.d.ts.map +1 -0
  84. package/dist/orchestrator/PipelineOrchestrator.d.ts +53 -0
  85. package/dist/orchestrator/PipelineOrchestrator.d.ts.map +1 -0
  86. package/dist/persistence/PlanPersistence.d.ts +37 -0
  87. package/dist/persistence/PlanPersistence.d.ts.map +1 -0
  88. package/dist/phases/AnalysisPhase.d.ts +13 -0
  89. package/dist/phases/AnalysisPhase.d.ts.map +1 -0
  90. package/dist/phases/BasePhase.d.ts +44 -0
  91. package/dist/phases/BasePhase.d.ts.map +1 -0
  92. package/dist/phases/BuildPhase.d.ts +9 -0
  93. package/dist/phases/BuildPhase.d.ts.map +1 -0
  94. package/dist/phases/DesignPhase.d.ts +13 -0
  95. package/dist/phases/DesignPhase.d.ts.map +1 -0
  96. package/dist/phases/ImplementPhase.d.ts +9 -0
  97. package/dist/phases/ImplementPhase.d.ts.map +1 -0
  98. package/dist/phases/PhaseFactory.d.ts +13 -0
  99. package/dist/phases/PhaseFactory.d.ts.map +1 -0
  100. package/dist/phases/PlanPhase.d.ts +14 -0
  101. package/dist/phases/PlanPhase.d.ts.map +1 -0
  102. package/dist/phases/VerifyPhase.d.ts +13 -0
  103. package/dist/phases/VerifyPhase.d.ts.map +1 -0
  104. package/dist/pipeline/PipelineDefinition.d.ts +40 -0
  105. package/dist/pipeline/PipelineDefinition.d.ts.map +1 -0
  106. package/dist/poller/IssuePoller.d.ts +26 -0
  107. package/dist/poller/IssuePoller.d.ts.map +1 -0
  108. package/dist/prompts/brainstorm-templates.d.ts +4 -0
  109. package/dist/prompts/brainstorm-templates.d.ts.map +1 -0
  110. package/dist/prompts/templates.d.ts +27 -0
  111. package/dist/prompts/templates.d.ts.map +1 -0
  112. package/dist/rules/RuleResolver.d.ts +13 -0
  113. package/dist/rules/RuleResolver.d.ts.map +1 -0
  114. package/dist/rules/index.d.ts +3 -0
  115. package/dist/rules/index.d.ts.map +1 -0
  116. package/dist/run.d.ts +2 -0
  117. package/dist/run.d.ts.map +1 -0
  118. package/dist/run.js +15 -0
  119. package/dist/run.js.map +1 -0
  120. package/dist/services/BrainstormService.d.ts +39 -0
  121. package/dist/services/BrainstormService.d.ts.map +1 -0
  122. package/dist/start-TVN4SS6E.js +25 -0
  123. package/dist/start-TVN4SS6E.js.map +1 -0
  124. package/dist/supplement/SupplementStore.d.ts +21 -0
  125. package/dist/supplement/SupplementStore.d.ts.map +1 -0
  126. package/dist/tracker/IssueState.d.ts +63 -0
  127. package/dist/tracker/IssueState.d.ts.map +1 -0
  128. package/dist/tracker/IssueTracker.d.ts +29 -0
  129. package/dist/tracker/IssueTracker.d.ts.map +1 -0
  130. package/dist/utils/AsyncMutex.d.ts +14 -0
  131. package/dist/utils/AsyncMutex.d.ts.map +1 -0
  132. package/dist/utils/MergeRequestHelper.d.ts +10 -0
  133. package/dist/utils/MergeRequestHelper.d.ts.map +1 -0
  134. package/dist/web/AgentLogStore.d.ts +22 -0
  135. package/dist/web/AgentLogStore.d.ts.map +1 -0
  136. package/dist/web/WebServer.d.ts +26 -0
  137. package/dist/web/WebServer.d.ts.map +1 -0
  138. package/dist/web/routes/api.d.ts +20 -0
  139. package/dist/web/routes/api.d.ts.map +1 -0
  140. package/dist/web/routes/brainstorm.d.ts +9 -0
  141. package/dist/web/routes/brainstorm.d.ts.map +1 -0
  142. package/dist/web/routes/setup.d.ts +8 -0
  143. package/dist/web/routes/setup.d.ts.map +1 -0
  144. package/dist/webhook/CommandExecutor.d.ts +45 -0
  145. package/dist/webhook/CommandExecutor.d.ts.map +1 -0
  146. package/dist/webhook/CommandParser.d.ts +24 -0
  147. package/dist/webhook/CommandParser.d.ts.map +1 -0
  148. package/dist/webhook/IntentRecognizer.d.ts +35 -0
  149. package/dist/webhook/IntentRecognizer.d.ts.map +1 -0
  150. package/dist/webhook/NoteDeduplicator.d.ts +18 -0
  151. package/dist/webhook/NoteDeduplicator.d.ts.map +1 -0
  152. package/dist/webhook/WebhookHandler.d.ts +30 -0
  153. package/dist/webhook/WebhookHandler.d.ts.map +1 -0
  154. package/dist/webhook/WebhookServer.d.ts +21 -0
  155. package/dist/webhook/WebhookServer.d.ts.map +1 -0
  156. package/dist/webhook/index.d.ts +12 -0
  157. package/dist/webhook/index.d.ts.map +1 -0
  158. package/package.json +82 -0
  159. package/src/web/frontend/dist/assets/index-CQdlU9PE.js +65 -0
  160. package/src/web/frontend/dist/assets/index-CgMEkyZJ.css +1 -0
  161. package/src/web/frontend/dist/index.html +13 -0
@@ -0,0 +1,770 @@
1
+ // src/i18n/locales/zh-CN.ts
2
+ var zhCN = {
3
+ // Phase labels
4
+ "phase.analysis": "\u5206\u6790",
5
+ "phase.design": "\u8BBE\u8BA1",
6
+ "phase.implement": "\u5B9E\u73B0",
7
+ "phase.verify": "\u9A8C\u8BC1",
8
+ "phase.plan": "\u89C4\u5212",
9
+ "phase.build": "\u5B9E\u65BD",
10
+ "phase.review": "\u5BA1\u6838",
11
+ // Pipeline phase labels (used in PipelineDefinition)
12
+ "pipeline.phase.analysis": "\u5206\u6790",
13
+ "pipeline.phase.design": "\u8BBE\u8BA1",
14
+ "pipeline.phase.implement": "\u5B9E\u65BD",
15
+ "pipeline.phase.verify": "\u9A8C\u8BC1",
16
+ "pipeline.phase.plan": "\u89C4\u5212",
17
+ "pipeline.phase.review": "\u5BA1\u6838",
18
+ "pipeline.phase.build": "\u5B9E\u65BD",
19
+ // Plan file labels
20
+ "planFile.01-analysis.md": "\u9700\u6C42\u5206\u6790",
21
+ "planFile.02-design.md": "\u7CFB\u7EDF\u8BBE\u8BA1",
22
+ "planFile.03-todolist.md": "\u5B9E\u65BD\u6E05\u5355",
23
+ "planFile.04-verify-report.md": "\u9A8C\u8BC1\u62A5\u544A",
24
+ "planFile.01-plan.md": "\u5B9E\u65BD\u8BA1\u5212",
25
+ "planFile.02-verify-report.md": "\u9A8C\u8BC1\u62A5\u544A",
26
+ "planFile.review-feedback.md": "\u5BA1\u6838\u53CD\u9988",
27
+ "planFile.review-history.json": "\u5BA1\u6838\u5386\u53F2",
28
+ // State labels (from collectStateLabels)
29
+ "state.pending": "\u5F85\u5904\u7406",
30
+ "state.branchCreated": "\u5206\u652F\u5DF2\u521B\u5EFA",
31
+ "state.completed": "\u5DF2\u5B8C\u6210",
32
+ "state.failed": "\u5931\u8D25",
33
+ "state.phaseDoing": "{label}\u4E2D",
34
+ "state.phaseDone": "{label}\u5B8C\u6210",
35
+ "state.phaseApproved": "{label}\u901A\u8FC7",
36
+ // Orchestrator messages
37
+ "orchestrator.retryComment": "\u{1F504} **\u81EA\u52A8\u5904\u7406\u91CD\u8BD5\u4E2D**\n\n\u68C0\u6D4B\u5230\u4E4B\u524D\u5904\u7406\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u8BD5...",
38
+ "orchestrator.startComment": "\u{1F680} **\u81EA\u52A8\u5904\u7406\u5F00\u59CB**\n\n\u5DF2\u68C0\u6D4B\u5230 `auto-finish` \u6807\u7B7E\uFF0C\u5F00\u59CB\u81EA\u52A8\u5206\u6790\u548C\u5B9E\u65BD\u3002",
39
+ "orchestrator.fetchProgress": "\u6B63\u5728\u62C9\u53D6\u6700\u65B0\u4EE3\u7801...",
40
+ "orchestrator.worktreeProgress": "\u6B63\u5728\u51C6\u5907\u5DE5\u4F5C\u76EE\u5F55...",
41
+ "orchestrator.installProgress": "\u6B63\u5728\u5B89\u88C5\u9879\u76EE\u4F9D\u8D56 (pnpm install)...",
42
+ "orchestrator.initPlanProgress": "\u6B63\u5728\u521D\u59CB\u5316\u8BA1\u5212\u76EE\u5F55...",
43
+ "orchestrator.phaseStartProgress": "\u51C6\u5907\u5C31\u7EEA\uFF0C\u5F00\u59CB\u6267\u884C\u9636\u6BB5 (\u4ECE {phase} \u5F00\u59CB)...",
44
+ "orchestrator.autoApproveComment": "\u26A1 **\u5BA1\u6838\u81EA\u52A8\u901A\u8FC7**\n\n\u68C0\u6D4B\u5230\u6807\u7B7E\u5339\u914D `autoApproveLabels` \u914D\u7F6E\uFF0C\u5DF2\u81EA\u52A8\u8DF3\u8FC7\u5BA1\u6838\u8FDB\u5165\u5B9E\u65BD\u9636\u6BB5\u3002",
45
+ "orchestrator.createMrProgress": "\u6B63\u5728\u521B\u5EFA\u5408\u5E76\u8BF7\u6C42...",
46
+ "orchestrator.uploadScreenshotsProgress": "\u6B63\u5728\u4E0A\u4F20 E2E \u622A\u56FE...",
47
+ "orchestrator.mrSection": "\n\n\u{1F517} \u5408\u5E76\u8BF7\u6C42: {mrUrl}",
48
+ "orchestrator.mrFailSection": "\n\n\u26A0\uFE0F \u5408\u5E76\u8BF7\u6C42\u521B\u5EFA\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u521B\u5EFA\u3002",
49
+ "orchestrator.completedComment": "\u2705 **\u81EA\u52A8\u5904\u7406\u5B8C\u6210**\n\n\u6240\u6709\u9636\u6BB5\u5DF2\u5B8C\u6210\u3002\u5206\u652F: `{branch}`{mrSection}{previewSection}",
50
+ "orchestrator.failedComment": "\u274C **\u81EA\u52A8\u5904\u7406\u5931\u8D25**\n\n{error}\n\n\u5C06\u5728\u4E0B\u6B21\u8F6E\u8BE2\u65F6\u91CD\u8BD5\uFF08\u5982\u679C\u672A\u8D85\u8FC7\u6700\u5927\u91CD\u8BD5\u6B21\u6570\uFF09\u3002",
51
+ "orchestrator.deployProgress": "\u6B63\u5728\u542F\u52A8 Preview \u73AF\u5883...",
52
+ "orchestrator.deployDoneProgress": "Preview \u73AF\u5883\u5DF2\u5C31\u7EEA: {url}",
53
+ "orchestrator.previewComment.title": "\u{1F310} **Preview Environment \u5DF2\u5C31\u7EEA**",
54
+ "orchestrator.previewComment.tableHeader": "| \u7EC4\u4EF6 | \u5730\u5740 |",
55
+ "orchestrator.previewComment.tableSep": "|------|------|",
56
+ "orchestrator.previewComment.frontend": "\u524D\u7AEF",
57
+ "orchestrator.previewComment.backendApi": "\u540E\u7AEF API",
58
+ "orchestrator.previewComment.hint": "\u53EF\u76F4\u63A5\u8BBF\u95EE\u524D\u7AEF\u94FE\u63A5\u4F53\u9A8C\u672C\u6B21\u53D8\u66F4\u3002",
59
+ "orchestrator.previewComment.expiry": "Preview \u5C06\u5728 MR \u5408\u5E76\u540E\u81EA\u52A8\u6E05\u7406\uFF0C\u6216 {hours}h \u540E\u8FC7\u671F\u3002",
60
+ // BasePhase messages
61
+ "basePhase.aiStarting": "\u6B63\u5728\u542F\u52A8 AI Agent ({label})...",
62
+ "basePhase.rulesSection": "## \u9879\u76EE\u5F00\u53D1\u89C4\u8303\u53C2\u8003\n\u4EE5\u4E0B\u662F\u4E0E\u672C\u6B21\u4EFB\u52A1\u76F8\u5173\u7684\u5F00\u53D1\u89C4\u8303\uFF0C\u8BF7\u5728\u7F16\u7801\u65F6\u4E25\u683C\u9075\u5FAA\uFF1A\n\n{rules}",
63
+ "basePhase.error": "\u9519\u8BEF: {message}",
64
+ // IssuePoller messages
65
+ "poller.autoApproveComment": "\u26A1 **\u5BA1\u6838\u81EA\u52A8\u901A\u8FC7**\n\n\u68C0\u6D4B\u5230\u6807\u7B7E\u5339\u914D `autoApproveLabels` \u914D\u7F6E\uFF08\u5339\u914D: {labels}\uFF09\uFF0C\u5DF2\u81EA\u52A8\u8DF3\u8FC7\u5BA1\u6838\u8FDB\u5165\u5B9E\u65BD\u9636\u6BB5\u3002",
66
+ // Progress comment
67
+ "progress.completed": "\u5DF2\u5B8C\u6210",
68
+ "progress.failed": "\u5931\u8D25",
69
+ "progress.inProgress": "\u8FDB\u884C\u4E2D",
70
+ "progress.comment": "{icon} **\u81EA\u52A8\u5904\u7406\u8FDB\u5EA6\u66F4\u65B0**\n\n\u9636\u6BB5: **{phase}** \u2014 {status}",
71
+ // NoteSync messages
72
+ "notesync.phaseCompleted": "{icon} **{label}\u9636\u6BB5\u5B8C\u6210**",
73
+ "notesync.viewDoc": "\u{1F4C4} [\u67E5\u770B\u5B8C\u6574{label}\u6587\u6863]({url})",
74
+ "notesync.viewDashboard": "\u{1F4CA} [\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u67E5\u770B\u8BE6\u60C5]({url})",
75
+ // MergeRequest messages
76
+ "mr.relatedIssue": "## \u5173\u8054 Issue",
77
+ "mr.title": "\u6807\u9898",
78
+ "mr.branch": "\u5206\u652F",
79
+ "mr.issueDescription": "## Issue \u63CF\u8FF0",
80
+ "mr.noDescription": "\uFF08\u65E0\u63CF\u8FF0\uFF09",
81
+ "mr.summaryFiles.01-analysis.md": "\u9700\u6C42\u5206\u6790",
82
+ "mr.summaryFiles.01-plan.md": "\u5B9E\u65BD\u8BA1\u5212",
83
+ "mr.summaryFiles.02-design.md": "\u7CFB\u7EDF\u8BBE\u8BA1",
84
+ "mr.summaryFiles.04-verify-report.md": "\u9A8C\u8BC1\u62A5\u544A",
85
+ "mr.summaryFiles.02-verify-report.md": "\u9A8C\u8BC1\u62A5\u544A",
86
+ "mr.aiSummary": "## AI \u4EA7\u7269\u6458\u8981",
87
+ "mr.autoCreated": "*\u6B64 MR \u7531 Issue Auto-Finish \u7CFB\u7EDF\u81EA\u52A8\u521B\u5EFA*",
88
+ "mr.truncated": "...\uFF08\u5DF2\u622A\u65AD\uFF09",
89
+ // Screenshot messages
90
+ "screenshot.title": "\u{1F4F8} **E2E \u6D4B\u8BD5\u622A\u56FE**",
91
+ "screenshot.truncated": "> \u26A0\uFE0F \u622A\u56FE\u6570\u91CF\u8FC7\u591A\uFF0C\u4EC5\u5C55\u793A\u524D 20 \u5F20\u3002",
92
+ // Webhook handler
93
+ "webhook.helpText": [
94
+ "\u65E0\u6CD5\u8BC6\u522B\u6307\u4EE4\uFF0C\u652F\u6301\u4EE5\u4E0B\u547D\u4EE4\uFF1A",
95
+ "",
96
+ "| \u547D\u4EE4 | \u8BF4\u660E |",
97
+ "| --- | --- |",
98
+ "| `@issue-auto status` / `\u72B6\u6001` | \u67E5\u8BE2\u5F53\u524D\u5904\u7406\u72B6\u6001 |",
99
+ "| `@issue-auto retry` / `\u91CD\u8BD5` | \u4ECE\u5931\u8D25\u5904\u91CD\u8BD5 |",
100
+ "| `@issue-auto retry-from <\u9636\u6BB5>` | \u4ECE\u6307\u5B9A\u9636\u6BB5\u91CD\u8BD5 |",
101
+ "| `@issue-auto restart` / `\u91CD\u65B0\u5F00\u59CB` | \u5B8C\u5168\u91CD\u505A |",
102
+ "| `@issue-auto approve` / `\u901A\u8FC7` | \u6279\u51C6\u5F53\u524D\u65B9\u6848 |",
103
+ "| `@issue-auto reject <\u539F\u56E0>` / `\u9A73\u56DE\uFF1A<\u539F\u56E0>` | \u9A73\u56DE\u65B9\u6848 |",
104
+ "| `@issue-auto supplement <\u5185\u5BB9>` / `\u8865\u5145\uFF1A<\u5185\u5BB9>` | \u8865\u5145\u4E0A\u4E0B\u6587 |",
105
+ "| `@issue-auto clean-notes` / `\u6E05\u7406\u8BC4\u8BBA` | \u5220\u9664 Agent \u5386\u53F2\u8BC4\u8BBA |"
106
+ ].join("\n"),
107
+ // Command executor
108
+ "cmd.previewNotStarted": "Issue #{iid} \u5C1A\u672A\u542F\u52A8 Preview \u73AF\u5883\u3002\nPreview \u4F1A\u5728\u4EE3\u7801\u5B9E\u73B0\u5B8C\u6210\u540E\u81EA\u52A8\u542F\u52A8\uFF08\u9700\u542F\u7528 E2E \u6216 Preview \u914D\u7F6E\uFF09\u3002",
109
+ "cmd.previewStopped": "\u23F9 \u5DF2\u505C\u6B62",
110
+ "cmd.previewRunning": "\u2705 \u8FD0\u884C\u4E2D",
111
+ "cmd.previewTable.component": "\u7EC4\u4EF6",
112
+ "cmd.previewTable.address": "\u5730\u5740",
113
+ "cmd.previewTable.frontend": "\u524D\u7AEF",
114
+ "cmd.previewTable.backendApi": "\u540E\u7AEF API",
115
+ "cmd.previewTable.status": "\u72B6\u6001",
116
+ "cmd.previewTable.startedAt": "\u542F\u52A8\u4E8E",
117
+ "cmd.noPreview": "Issue #{iid} \u6CA1\u6709\u6B63\u5728\u8FD0\u884C\u7684 Preview \u73AF\u5883\u3002",
118
+ "cmd.previewStoppedMsg": "Issue #{iid} \u7684 Preview \u73AF\u5883\u5DF2\u505C\u6B62\u3002",
119
+ "cmd.cleanNotesSuccess": "\u{1F9F9} \u5DF2\u6E05\u7406 {count} \u6761 Agent \u8BC4\u8BBA\u3002",
120
+ // Intent recognizer
121
+ "intent.systemPrompt": `\u4F60\u662F\u4E00\u4E2A\u6307\u4EE4\u89E3\u6790\u52A9\u624B\u3002\u7528\u6237\u4F1A\u5728\u5DE5\u8702(GitLab) Issue \u8BC4\u8BBA\u4E2D\u7528\u81EA\u7136\u8BED\u8A00\u63CF\u8FF0\u4ED6\u4EEC\u60F3\u8BA9\u81EA\u52A8\u5316\u7CFB\u7EDF\u505A\u4EC0\u4E48\u3002
122
+ \u4F60\u9700\u8981\u4ECE\u7528\u6237\u7684\u8BC4\u8BBA\u4E2D\u63D0\u53D6\u51FA\u7ED3\u6784\u5316\u7684\u6307\u4EE4\u3002
123
+
124
+ \u53EF\u7528\u7684 intent:
125
+ - retry: \u91CD\u8BD5\u5931\u8D25\u7684\u4EFB\u52A1\uFF08\u4ECE\u4E0A\u6B21\u5931\u8D25\u7684\u5730\u65B9\u7EE7\u7EED\uFF09
126
+ - retry-from: \u4ECE\u6307\u5B9A\u9636\u6BB5\u91CD\u65B0\u5F00\u59CB\uFF08\u9700\u8981\u63D0\u53D6 phase\uFF09
127
+ - supplement: \u8865\u5145\u989D\u5916\u7684\u9700\u6C42\u4FE1\u606F\u6216\u4E0A\u4E0B\u6587
128
+ - approve: \u6279\u51C6/\u901A\u8FC7\u5F53\u524D\u7684\u8BBE\u8BA1\u65B9\u6848
129
+ - reject: \u9A73\u56DE\u5F53\u524D\u65B9\u6848\uFF08\u9700\u8981\u63D0\u53D6 feedback\uFF09
130
+ - status: \u67E5\u8BE2\u5F53\u524D\u5904\u7406\u72B6\u6001
131
+ - restart: \u4ECE\u5934\u5F00\u59CB\uFF0C\u5B8C\u5168\u91CD\u505A
132
+
133
+ \u53EF\u7528\u7684 phase\uFF08\u4EC5 retry-from \u65F6\u9700\u8981\uFF09:
134
+ - analysis: \u9700\u6C42\u5206\u6790\u9636\u6BB5
135
+ - design: \u7CFB\u7EDF\u8BBE\u8BA1\u9636\u6BB5
136
+ - implement: \u4EE3\u7801\u5B9E\u65BD\u9636\u6BB5
137
+ - verify: \u9A8C\u8BC1\u6D4B\u8BD5\u9636\u6BB5
138
+ - plan: \u89C4\u5212\u9636\u6BB5
139
+ - build: \u6784\u5EFA\u9636\u6BB5
140
+
141
+ \u89C4\u5219:
142
+ 1. \u5982\u679C\u7528\u6237\u540C\u65F6\u8868\u8FBE\u4E86"\u91CD\u8BD5"\u548C"\u8865\u5145\u4FE1\u606F"\uFF0C\u4F18\u5148\u4F7F\u7528 retry-from \u6216 retry \u4F5C\u4E3A intent\uFF0C\u628A\u8865\u5145\u4FE1\u606F\u653E\u5728 context \u5B57\u6BB5
143
+ 2. \u5982\u679C\u7528\u6237\u53EA\u662F\u5728\u8865\u5145\u8BF4\u660E\u3001\u63D0\u4F9B\u989D\u5916\u4FE1\u606F\uFF0C\u4F7F\u7528 supplement
144
+ 3. feedback \u5B57\u6BB5\u4EC5\u7528\u4E8E reject \u610F\u56FE
145
+ 4. \u5982\u679C\u65E0\u6CD5\u5224\u65AD\u7528\u6237\u610F\u56FE\uFF0C\u8FD4\u56DE null
146
+
147
+ \u4E25\u683C\u6309\u4EE5\u4E0B JSON \u683C\u5F0F\u8FD4\u56DE\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u5176\u4ED6\u6587\u5B57:
148
+ {"intent":"...","phase":"...\u6216null","context":"...\u6216null","feedback":"...\u6216null"}`,
149
+ // API routes
150
+ "api.invalidFilename": "\u65E0\u6548\u7684\u6587\u4EF6\u540D",
151
+ "api.docNotGenerated": "\u6587\u6863\u5C1A\u672A\u751F\u6210",
152
+ "api.viewInDashboard": "\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u67E5\u770B",
153
+ "api.reviewFeedback": "\u{1F440} **\u65B9\u6848\u5BA1\u6838\u53CD\u9988\uFF08\u7B2C {round} \u8F6E\uFF09**",
154
+ "api.viewPlan": "\u{1F4C4} [\u67E5\u770B\u5B9E\u65BD\u8BA1\u5212]({url})",
155
+ "api.viewDetail": "\u{1F4CA} [\u5728\u7BA1\u7406\u9762\u677F\u4E2D\u67E5\u770B\u8BE6\u60C5]({url})",
156
+ // Doc labels for api routes
157
+ "docLabel.01-analysis.md": "\u9700\u6C42\u5206\u6790",
158
+ "docLabel.02-design.md": "\u7CFB\u7EDF\u8BBE\u8BA1",
159
+ "docLabel.03-todolist.md": "\u5B9E\u65BD\u6E05\u5355",
160
+ "docLabel.04-verify-report.md": "\u9A8C\u8BC1\u62A5\u544A",
161
+ "docLabel.01-plan.md": "\u5B9E\u65BD\u8BA1\u5212",
162
+ "docLabel.02-verify-report.md": "\u9A8C\u8BC1\u62A5\u544A",
163
+ "docLabel.review-feedback.md": "\u5BA1\u6838\u53CD\u9988",
164
+ // CLI DependencyChecker
165
+ "cli.nodeInstallHint": "\u901A\u8FC7 nvm \u5B89\u88C5: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && nvm install 20",
166
+ "cli.cursorInstallHint": "\u5B89\u88C5 Cursor IDE \u540E\uFF0CCLI \u81EA\u52A8\u53EF\u7528: https://www.cursor.com/",
167
+ "cli.unknownDep": "\u672A\u77E5\u4F9D\u8D56: {name}",
168
+ "cli.alreadyInstalled": "{name} \u5DF2\u5B89\u88C5 ({version})",
169
+ "cli.manualInstall": "{name} \u9700\u8981\u624B\u52A8\u5B89\u88C5: {hint}",
170
+ "cli.installing": "\u6B63\u5728\u5B89\u88C5 {name}...",
171
+ "cli.installSuccess": "{name} \u5B89\u88C5\u6210\u529F",
172
+ "cli.installFailed": "{name} \u5B89\u88C5\u5931\u8D25 (exit code: {code})",
173
+ // Prompt templates
174
+ "prompt.analysis": `\u4F60\u662F\u9700\u6C42\u5206\u6790\u5E08\u3002\u8BF7\u5206\u6790\u4EE5\u4E0B\u5DE5\u8702 Issue \u5E76\u8F93\u51FA\u9700\u6C42\u5206\u6790\u6587\u6863\u3002
175
+
176
+ ## Issue \u4FE1\u606F
177
+ - IID: #{iid}
178
+ - \u6807\u9898: {title}
179
+ - \u63CF\u8FF0:
180
+ {description}{supplement}
181
+
182
+ ## \u8F93\u51FA\u8981\u6C42
183
+ \u8BF7\u5C06\u5206\u6790\u7ED3\u679C\u5199\u5165 {planDir}/01-analysis.md\uFF0C\u5185\u5BB9\u5305\u62EC\uFF1A
184
+ 1. **\u9700\u6C42\u6982\u8FF0** \u2014 \u7528\u7B80\u6D01\u7684\u8BED\u8A00\u603B\u7ED3\u9700\u6C42\u76EE\u6807
185
+ 2. **\u529F\u80FD\u70B9\u62C6\u89E3** \u2014 \u5217\u51FA\u9700\u8981\u5B9E\u73B0\u7684\u5177\u4F53\u529F\u80FD\u70B9
186
+ 3. **\u5F71\u54CD\u8303\u56F4\u5206\u6790** \u2014 \u54EA\u4E9B\u6A21\u5757/\u6587\u4EF6\u53EF\u80FD\u53D7\u5230\u5F71\u54CD
187
+ 4. **\u975E\u529F\u80FD\u9700\u6C42** \u2014 \u6027\u80FD\u3001\u5B89\u5168\u3001\u517C\u5BB9\u6027\u7B49\u65B9\u9762\u7684\u8003\u91CF
188
+ 5. **\u98CE\u9669\u548C\u4F9D\u8D56** \u2014 \u6F5C\u5728\u98CE\u9669\u548C\u5916\u90E8\u4F9D\u8D56
189
+
190
+ \u8BF7\u5148\u9605\u8BFB\u9879\u76EE\u6839\u76EE\u5F55\u7684 CLAUDE.md \u4E86\u89E3\u9879\u76EE\u67B6\u6784\uFF0C\u518D\u8FDB\u884C\u5206\u6790\u3002
191
+ \u53EA\u8F93\u51FA\u6587\u6863\u5185\u5BB9\uFF0C\u4E0D\u8981\u8F93\u51FA\u5176\u4ED6\u8BF4\u660E\u3002`,
192
+ "prompt.design": `\u4F60\u662F\u7CFB\u7EDF\u8BBE\u8BA1\u5E08\u3002\u57FA\u4E8E\u9700\u6C42\u5206\u6790\u6587\u6863\u8FDB\u884C\u7CFB\u7EDF\u8BBE\u8BA1\u3002
193
+
194
+ ## Issue \u4FE1\u606F
195
+ - IID: #{iid}
196
+ - \u6807\u9898: {title}{supplement}
197
+
198
+ \u8BF7\u5148\u9605\u8BFB:
199
+ - {planDir}/01-analysis.md (\u9700\u6C42\u5206\u6790)
200
+ - CLAUDE.md (\u9879\u76EE\u67B6\u6784)
201
+
202
+ ## \u8F93\u51FA\u8981\u6C42
203
+ \u8BF7\u5C06\u8BBE\u8BA1\u6587\u6863\u5199\u5165 {planDir}/02-design.md\uFF0C\u5185\u5BB9\u5305\u62EC\uFF1A
204
+ 1. **\u65B9\u6848\u6982\u8FF0** \u2014 \u6574\u4F53\u8BBE\u8BA1\u601D\u8DEF
205
+ 2. **\u6D89\u53CA\u7684\u6587\u4EF6\u548C\u6A21\u5757** \u2014 \u9700\u8981\u65B0\u5EFA/\u4FEE\u6539\u7684\u6587\u4EF6\u5217\u8868
206
+ 3. **\u6570\u636E\u6A21\u578B\u53D8\u66F4** \u2014 \u6570\u636E\u5E93\u6216\u6A21\u578B\u5C42\u7684\u53D8\u66F4
207
+ 4. **\u63A5\u53E3\u8BBE\u8BA1** \u2014 API \u63A5\u53E3\u5B9A\u4E49
208
+ 5. **\u8BE6\u7EC6\u5B9E\u65BD\u6B65\u9AA4** \u2014 \u6309\u987A\u5E8F\u5217\u51FA\u5B9E\u65BD\u6B65\u9AA4
209
+
210
+ \u8BF7\u5C06\u5B9E\u65BD Todolist \u5199\u5165 {planDir}/03-todolist.md\uFF0C\u683C\u5F0F\uFF1A
211
+ - [ ] \u6B65\u9AA41: \u5177\u4F53\u63CF\u8FF0
212
+ - [ ] \u6B65\u9AA42: \u5177\u4F53\u63CF\u8FF0
213
+ ...
214
+
215
+ \u8BF7\u786E\u4FDD Todolist \u8DB3\u591F\u8BE6\u7EC6\uFF0C\u6BCF\u4E2A\u6B65\u9AA4\u53EF\u72EC\u7ACB\u6267\u884C\u548C\u9A8C\u8BC1\u3002`,
216
+ "prompt.implement": `\u4F60\u662F\u5F00\u53D1\u5DE5\u7A0B\u5E08\u3002\u8BF7\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u548C Todolist \u5B9E\u65BD\u4EE3\u7801\u53D8\u66F4\u3002
217
+
218
+ ## Issue \u4FE1\u606F
219
+ - IID: #{iid}
220
+ - \u6807\u9898: {title}
221
+
222
+ \u8BF7\u5148\u9605\u8BFB:
223
+ - {planDir}/01-analysis.md (\u9700\u6C42\u5206\u6790)
224
+ - {planDir}/02-design.md (\u7CFB\u7EDF\u8BBE\u8BA1)
225
+ - {planDir}/03-todolist.md (\u5B9E\u65BD\u6B65\u9AA4)
226
+ - CLAUDE.md (\u9879\u76EE\u67B6\u6784\u548C\u4EE3\u7801\u89C4\u8303)
227
+
228
+ ## \u5B9E\u65BD\u8981\u6C42
229
+ 1. \u9010\u9879\u5B8C\u6210 03-todolist.md \u4E2D\u7684\u4EFB\u52A1
230
+ 2. \u6BCF\u5B8C\u6210\u4E00\u9879\uFF0C\u66F4\u65B0 03-todolist.md \u4E2D\u5BF9\u5E94\u7684\u52FE\u9009\u72B6\u6001 (- [ ] \u2192 - [x])
231
+ 3. \u4E25\u683C\u9075\u5FAA CLAUDE.md \u4E2D\u7684\u4EE3\u7801\u89C4\u8303\uFF082\u7A7A\u683C\u7F29\u8FDB\u3001120\u5B57\u7B26\u884C\u5BBD\u3001\u547D\u540D\u89C4\u8303\u7B49\uFF09
232
+ 4. \u4E0D\u8981\u8FC7\u5EA6\u5DE5\u7A0B\u5316\uFF0C\u53EA\u5B9E\u73B0\u8BBE\u8BA1\u6587\u6863\u4E2D\u8981\u6C42\u7684\u5185\u5BB9
233
+ 5. \u786E\u4FDD\u4EE3\u7801\u5B89\u5168\uFF0C\u907F\u514D OWASP Top 10 \u6F0F\u6D1E`,
234
+ "prompt.verify": `\u4F60\u662F\u6D4B\u8BD5\u5DE5\u7A0B\u5E08\u3002\u9A8C\u8BC1\u4EE3\u7801\u53D8\u66F4\u7684\u6B63\u786E\u6027\u3002
235
+
236
+ ## Issue \u4FE1\u606F
237
+ - IID: #{iid}
238
+ - \u6807\u9898: {title}
239
+
240
+ ## \u524D\u7F6E\u68C0\u67E5
241
+ \u5728\u6267\u884C\u9A8C\u8BC1\u524D\uFF0C\u5148\u786E\u8BA4\u4F9D\u8D56\u73AF\u5883:
242
+ 1. \u68C0\u67E5 node_modules/.bin/eslint \u662F\u5426\u5B58\u5728
243
+ 2. \u5982\u4E0D\u5B58\u5728\uFF0C\u8FD0\u884C pnpm install\uFF1B\u5982\u679C\u5931\u8D25\uFF0C\u5C1D\u8BD5 pnpm install --ignore-scripts
244
+ 3. \u5982\u679C\u4F9D\u8D56\u59CB\u7EC8\u65E0\u6CD5\u5B89\u88C5\u5B8C\u6574\uFF0C\u5728\u62A5\u544A\u4E2D\u6807\u6CE8\u4E3A"\u73AF\u5883\u95EE\u9898"\u5E76\u7EE7\u7EED\u540E\u7EED\u68C0\u67E5
245
+
246
+ ## \u9A8C\u8BC1\u6B65\u9AA4
247
+ 1. \u8FD0\u884C pnpm run lint \u68C0\u67E5\u4EE3\u7801\u98CE\u683C
248
+ 2. \u8FD0\u884C pnpm run build \u68C0\u67E5\u7F16\u8BD1
249
+ 3. \u8FD0\u884C pnpm test4vscode --files <\u6D89\u53CA\u53D8\u66F4\u7684\u6D4B\u8BD5\u6587\u4EF6> \u8FD0\u884C\u76F8\u5173\u6D4B\u8BD5
250
+ 4. \u68C0\u67E5\u4EE3\u7801\u53D8\u66F4\u4E0E {planDir}/02-design.md \u8BBE\u8BA1\u6587\u6863\u7684\u4E00\u81F4\u6027
251
+ 5. \u68C0\u67E5 {planDir}/03-todolist.md \u662F\u5426\u6240\u6709\u9879\u90FD\u5DF2\u5B8C\u6210
252
+
253
+ ## \u5DF2\u77E5\u7684\u9884\u5B58\u95EE\u9898\uFF08\u5FFD\u7565\u5373\u53EF\uFF09
254
+ - build \u9636\u6BB5 tests/ \u76EE\u5F55\u53EF\u80FD\u51FA\u73B0 TS2307: Cannot find module 'japa' \u6216 'sinon'\uFF0C\u8FD9\u662F\u6D4B\u8BD5\u6846\u67B6\u7C7B\u578B\u58F0\u660E\u7684\u5DF2\u77E5\u95EE\u9898
255
+ - \u5982\u679C\u67D0\u4E2A lint/build/test \u7684\u5931\u8D25**\u4E0D\u6D89\u53CA\u672C\u6B21\u53D8\u66F4\u7684\u6587\u4EF6**\uFF0C\u6807\u6CE8\u4E3A"\u9884\u5B58\u95EE\u9898"
256
+
257
+ \u5C06\u9A8C\u8BC1\u7ED3\u679C\u5199\u5165 {planDir}/04-verify-report.md\uFF0C\u5305\u62EC\uFF1A
258
+ - **Lint \u7ED3\u679C**: \u901A\u8FC7/\u5931\u8D25\u53CA\u8BE6\u60C5\uFF08\u533A\u5206\u672C\u6B21\u53D8\u66F4 vs \u9884\u5B58\u95EE\u9898\uFF09
259
+ - **Build \u7ED3\u679C**: \u901A\u8FC7/\u5931\u8D25\u53CA\u8BE6\u60C5\uFF08\u533A\u5206\u672C\u6B21\u53D8\u66F4 vs \u9884\u5B58\u95EE\u9898\uFF09
260
+ - **Test \u7ED3\u679C**: \u901A\u8FC7/\u5931\u8D25\u53CA\u8BE6\u60C5
261
+ - **\u8BBE\u8BA1\u4E00\u81F4\u6027\u68C0\u67E5**: \u662F\u5426\u7B26\u5408\u8BBE\u8BA1
262
+ - **\u603B\u7ED3**: \u6574\u4F53\u8BC4\u4F30\u548C\u5EFA\u8BAE`,
263
+ "prompt.planModeVerify": `\u4F60\u662F\u6D4B\u8BD5\u5DE5\u7A0B\u5E08\u3002\u9A8C\u8BC1\u4EE3\u7801\u53D8\u66F4\u7684\u6B63\u786E\u6027\u3002
264
+
265
+ ## Issue \u4FE1\u606F
266
+ - IID: #{iid}
267
+ - \u6807\u9898: {title}
268
+
269
+ ## \u524D\u7F6E\u68C0\u67E5
270
+ \u5728\u6267\u884C\u9A8C\u8BC1\u524D\uFF0C\u5148\u786E\u8BA4\u4F9D\u8D56\u73AF\u5883:
271
+ 1. \u68C0\u67E5 node_modules/.bin/eslint \u662F\u5426\u5B58\u5728
272
+ 2. \u5982\u4E0D\u5B58\u5728\uFF0C\u8FD0\u884C pnpm install\uFF1B\u5982\u679C\u5931\u8D25\uFF0C\u5C1D\u8BD5 pnpm install --ignore-scripts
273
+ 3. \u5982\u679C\u4F9D\u8D56\u59CB\u7EC8\u65E0\u6CD5\u5B89\u88C5\u5B8C\u6574\uFF0C\u5728\u62A5\u544A\u4E2D\u6807\u6CE8\u4E3A"\u73AF\u5883\u95EE\u9898"\u5E76\u7EE7\u7EED\u540E\u7EED\u68C0\u67E5
274
+
275
+ ## \u9A8C\u8BC1\u6B65\u9AA4
276
+ 1. \u8FD0\u884C pnpm run lint \u68C0\u67E5\u4EE3\u7801\u98CE\u683C
277
+ 2. \u8FD0\u884C pnpm run build \u68C0\u67E5\u7F16\u8BD1
278
+ 3. \u8FD0\u884C pnpm test4vscode --files <\u6D89\u53CA\u53D8\u66F4\u7684\u6D4B\u8BD5\u6587\u4EF6> \u8FD0\u884C\u76F8\u5173\u6D4B\u8BD5
279
+ 4. \u68C0\u67E5\u4EE3\u7801\u53D8\u66F4\u4E0E {planDir}/01-plan.md \u5B9E\u65BD\u8BA1\u5212\u7684\u4E00\u81F4\u6027
280
+ 5. \u68C0\u67E5 {planDir}/01-plan.md \u4E2D Todolist \u662F\u5426\u6240\u6709\u9879\u90FD\u5DF2\u5B8C\u6210
281
+
282
+ ## \u5DF2\u77E5\u7684\u9884\u5B58\u95EE\u9898\uFF08\u5FFD\u7565\u5373\u53EF\uFF09
283
+ - build \u9636\u6BB5 tests/ \u76EE\u5F55\u53EF\u80FD\u51FA\u73B0 TS2307: Cannot find module 'japa' \u6216 'sinon'\uFF0C\u8FD9\u662F\u6D4B\u8BD5\u6846\u67B6\u7C7B\u578B\u58F0\u660E\u7684\u5DF2\u77E5\u95EE\u9898
284
+ - \u5982\u679C\u67D0\u4E2A lint/build/test \u7684\u5931\u8D25**\u4E0D\u6D89\u53CA\u672C\u6B21\u53D8\u66F4\u7684\u6587\u4EF6**\uFF0C\u6807\u6CE8\u4E3A"\u9884\u5B58\u95EE\u9898"
285
+
286
+ \u5C06\u9A8C\u8BC1\u7ED3\u679C\u5199\u5165 {planDir}/02-verify-report.md\uFF0C\u5305\u62EC\uFF1A
287
+ - **Lint \u7ED3\u679C**: \u901A\u8FC7/\u5931\u8D25\u53CA\u8BE6\u60C5\uFF08\u533A\u5206\u672C\u6B21\u53D8\u66F4 vs \u9884\u5B58\u95EE\u9898\uFF09
288
+ - **Build \u7ED3\u679C**: \u901A\u8FC7/\u5931\u8D25\u53CA\u8BE6\u60C5\uFF08\u533A\u5206\u672C\u6B21\u53D8\u66F4 vs \u9884\u5B58\u95EE\u9898\uFF09
289
+ - **Test \u7ED3\u679C**: \u901A\u8FC7/\u5931\u8D25\u53CA\u8BE6\u60C5
290
+ - **\u8BA1\u5212\u4E00\u81F4\u6027\u68C0\u67E5**: \u662F\u5426\u7B26\u5408\u5B9E\u65BD\u8BA1\u5212
291
+ - **\u603B\u7ED3**: \u6574\u4F53\u8BC4\u4F30\u548C\u5EFA\u8BAE`,
292
+ "prompt.plan": `\u4F60\u662F\u8D44\u6DF1\u6280\u672F\u8D1F\u8D23\u4EBA\u3002\u8BF7\u4E00\u6B21\u6027\u5B8C\u6210\u9700\u6C42\u5206\u6790\u548C\u65B9\u6848\u8BBE\u8BA1\u3002
293
+
294
+ ## Issue \u4FE1\u606F
295
+ - IID: #{iid}
296
+ - \u6807\u9898: {title}
297
+ - \u63CF\u8FF0:
298
+ {description}{supplement}
299
+
300
+ ## \u8F93\u51FA\u8981\u6C42
301
+ \u8BF7\u5148\u9605\u8BFB\u9879\u76EE\u6839\u76EE\u5F55\u7684 CLAUDE.md \u4E86\u89E3\u9879\u76EE\u67B6\u6784\uFF0C\u518D\u8FDB\u884C\u5206\u6790\u548C\u8BBE\u8BA1\u3002
302
+
303
+ \u8BF7\u5C06\u5B8C\u6574\u7684\u5B9E\u65BD\u8BA1\u5212\u5199\u5165 {planDir}/01-plan.md\uFF0C\u5185\u5BB9\u5305\u62EC\uFF1A
304
+
305
+ ### \u7B2C\u4E00\u90E8\u5206\uFF1A\u9700\u6C42\u5206\u6790
306
+ 1. **\u9700\u6C42\u6982\u8FF0** \u2014 \u7528\u7B80\u6D01\u7684\u8BED\u8A00\u603B\u7ED3\u9700\u6C42\u76EE\u6807
307
+ 2. **\u529F\u80FD\u70B9\u62C6\u89E3** \u2014 \u5217\u51FA\u9700\u8981\u5B9E\u73B0\u7684\u5177\u4F53\u529F\u80FD\u70B9
308
+ 3. **\u5F71\u54CD\u8303\u56F4\u5206\u6790** \u2014 \u54EA\u4E9B\u6A21\u5757/\u6587\u4EF6\u53EF\u80FD\u53D7\u5230\u5F71\u54CD
309
+ 4. **\u975E\u529F\u80FD\u9700\u6C42** \u2014 \u6027\u80FD\u3001\u5B89\u5168\u3001\u517C\u5BB9\u6027\u7B49\u65B9\u9762\u7684\u8003\u91CF
310
+ 5. **\u98CE\u9669\u548C\u4F9D\u8D56** \u2014 \u6F5C\u5728\u98CE\u9669\u548C\u5916\u90E8\u4F9D\u8D56
311
+
312
+ ### \u7B2C\u4E8C\u90E8\u5206\uFF1A\u7CFB\u7EDF\u8BBE\u8BA1
313
+ 1. **\u65B9\u6848\u6982\u8FF0** \u2014 \u6574\u4F53\u8BBE\u8BA1\u601D\u8DEF
314
+ 2. **\u6D89\u53CA\u7684\u6587\u4EF6\u548C\u6A21\u5757** \u2014 \u9700\u8981\u65B0\u5EFA/\u4FEE\u6539\u7684\u6587\u4EF6\u5217\u8868
315
+ 3. **\u6570\u636E\u6A21\u578B\u53D8\u66F4** \u2014 \u6570\u636E\u5E93\u6216\u6A21\u578B\u5C42\u7684\u53D8\u66F4
316
+ 4. **\u63A5\u53E3\u8BBE\u8BA1** \u2014 API \u63A5\u53E3\u5B9A\u4E49
317
+ 5. **\u8BE6\u7EC6\u5B9E\u65BD\u6B65\u9AA4** \u2014 \u6309\u987A\u5E8F\u5217\u51FA\u5B9E\u65BD\u6B65\u9AA4
318
+
319
+ ### \u7B2C\u4E09\u90E8\u5206\uFF1A\u5B9E\u65BD Todolist
320
+ - [ ] \u6B65\u9AA41: \u5177\u4F53\u63CF\u8FF0
321
+ - [ ] \u6B65\u9AA42: \u5177\u4F53\u63CF\u8FF0
322
+ ...
323
+
324
+ \u8BF7\u786E\u4FDD Todolist \u8DB3\u591F\u8BE6\u7EC6\uFF0C\u6BCF\u4E2A\u6B65\u9AA4\u53EF\u72EC\u7ACB\u6267\u884C\u548C\u9A8C\u8BC1\u3002
325
+ \u53EA\u8F93\u51FA\u6587\u6863\u5185\u5BB9\uFF0C\u4E0D\u8981\u8F93\u51FA\u5176\u4ED6\u8BF4\u660E\u3002\u4E0D\u8981\u4FEE\u6539\u4EFB\u4F55\u4EE3\u7801\u6587\u4EF6\u3002`,
326
+ "prompt.build": `\u4F60\u662F\u5F00\u53D1\u5DE5\u7A0B\u5E08\u3002\u8BF7\u6309\u7167\u5B9E\u65BD\u8BA1\u5212\u5B8C\u6210\u4EE3\u7801\u53D8\u66F4\u3002
327
+
328
+ ## Issue \u4FE1\u606F
329
+ - IID: #{iid}
330
+ - \u6807\u9898: {title}
331
+
332
+ \u8BF7\u5148\u9605\u8BFB:
333
+ - {planDir}/01-plan.md (\u5B8C\u6574\u5B9E\u65BD\u8BA1\u5212\uFF0C\u5305\u542B\u9700\u6C42\u5206\u6790\u3001\u7CFB\u7EDF\u8BBE\u8BA1\u548C Todolist)
334
+ - CLAUDE.md (\u9879\u76EE\u67B6\u6784\u548C\u4EE3\u7801\u89C4\u8303)
335
+
336
+ ## \u5B9E\u65BD\u8981\u6C42
337
+ 1. \u4E25\u683C\u6309\u7167 01-plan.md \u4E2D\u7684 Todolist \u9010\u9879\u5B8C\u6210
338
+ 2. \u6BCF\u5B8C\u6210\u4E00\u9879\uFF0C\u66F4\u65B0 01-plan.md \u4E2D\u5BF9\u5E94\u7684\u52FE\u9009\u72B6\u6001 (- [ ] \u2192 - [x])
339
+ 3. \u4E25\u683C\u9075\u5FAA CLAUDE.md \u4E2D\u7684\u4EE3\u7801\u89C4\u8303\uFF082\u7A7A\u683C\u7F29\u8FDB\u3001120\u5B57\u7B26\u884C\u5BBD\u3001\u547D\u540D\u89C4\u8303\u7B49\uFF09
340
+ 4. \u4E0D\u8981\u8FC7\u5EA6\u5DE5\u7A0B\u5316\uFF0C\u53EA\u5B9E\u73B0\u8BA1\u5212\u4E2D\u8981\u6C42\u7684\u5185\u5BB9
341
+ 5. \u786E\u4FDD\u4EE3\u7801\u5B89\u5168\uFF0C\u907F\u514D OWASP Top 10 \u6F0F\u6D1E`,
342
+ "prompt.rePlan": `\u4F60\u662F\u8D44\u6DF1\u6280\u672F\u8D1F\u8D23\u4EBA\u3002\u4E4B\u524D\u7684\u5B9E\u65BD\u8BA1\u5212\u672A\u901A\u8FC7\u5BA1\u6838\uFF0C\u8BF7\u6839\u636E\u5BA1\u6838\u53CD\u9988\u4FEE\u6539\u8BA1\u5212\u3002
343
+
344
+ ## Issue \u4FE1\u606F
345
+ - IID: #{iid}
346
+ - \u6807\u9898: {title}
347
+ - \u63CF\u8FF0:
348
+ {description}{supplement}
349
+
350
+ ## \u5BA1\u6838\u53CD\u9988\u5386\u53F2\uFF08\u5171 {historyCount} \u8F6E\uFF09
351
+ {feedbackLines}
352
+
353
+ \u8BF7\u5148\u9605\u8BFB:
354
+ - {planDir}/01-plan.md (\u5F53\u524D\u5B9E\u65BD\u8BA1\u5212)
355
+ - {planDir}/review-feedback.md (\u5BA1\u6838\u53CD\u9988\u5B8C\u6574\u5386\u53F2)
356
+ - CLAUDE.md (\u9879\u76EE\u67B6\u6784)
357
+
358
+ ## \u8F93\u51FA\u8981\u6C42
359
+ \u8BF7\u7EFC\u5408\u6240\u6709\u8F6E\u6B21\u7684\u5BA1\u6838\u53CD\u9988\u4FEE\u6539 {planDir}/01-plan.md\uFF0C\u4FDD\u6301\u76F8\u540C\u7684\u6587\u6863\u7ED3\u6784\u3002
360
+ \u91CD\u70B9\u5173\u6CE8\u6700\u65B0\u4E00\u8F6E\u7684\u53CD\u9988\uFF0C\u540C\u65F6\u786E\u4FDD\u4E4B\u524D\u8F6E\u6B21\u63D0\u51FA\u7684\u95EE\u9898\u4E5F\u5DF2\u5F97\u5230\u89E3\u51B3\u3002
361
+ \u53EA\u8F93\u51FA\u6587\u6863\u5185\u5BB9\uFF0C\u4E0D\u8981\u8F93\u51FA\u5176\u4ED6\u8BF4\u660E\u3002\u4E0D\u8981\u4FEE\u6539\u4EFB\u4F55\u4EE3\u7801\u6587\u4EF6\u3002`,
362
+ "prompt.rePlanRound": "### \u7B2C {round} \u8F6E ({timestamp})\n{feedback}",
363
+ "prompt.e2eSuffix.title": "## E2E UI \u9A8C\u8BC1\uFF08\u5DF2\u542F\u7528\uFF09",
364
+ "prompt.e2eSuffix.intro": "\u672C\u6B21\u53D8\u66F4\u5DF2\u5F00\u542F E2E UI \u81EA\u52A8\u9A8C\u6536\uFF0C\u8BF7\u989D\u5916\u6267\u884C\u4EE5\u4E0B\u6B65\u9AA4\uFF1A",
365
+ "prompt.e2eSuffix.previewNote": "**Preview \u73AF\u5883\u5DF2\u542F\u52A8\uFF08\u7531\u7CFB\u7EDF\u7BA1\u7406\uFF0C\u65E0\u9700\u624B\u52A8\u542F\u52A8\uFF09\uFF1A**",
366
+ "prompt.e2eSuffix.backend": "\u540E\u7AEF",
367
+ "prompt.e2eSuffix.frontend": "\u524D\u7AEF"
368
+ };
369
+
370
+ // src/i18n/locales/en.ts
371
+ var en = {
372
+ // Phase labels
373
+ "phase.analysis": "Analysis",
374
+ "phase.design": "Design",
375
+ "phase.implement": "Implementation",
376
+ "phase.verify": "Verification",
377
+ "phase.plan": "Planning",
378
+ "phase.build": "Build",
379
+ "phase.review": "Review",
380
+ // Pipeline phase labels
381
+ "pipeline.phase.analysis": "Analysis",
382
+ "pipeline.phase.design": "Design",
383
+ "pipeline.phase.implement": "Implementation",
384
+ "pipeline.phase.verify": "Verification",
385
+ "pipeline.phase.plan": "Planning",
386
+ "pipeline.phase.review": "Review",
387
+ "pipeline.phase.build": "Build",
388
+ // Plan file labels
389
+ "planFile.01-analysis.md": "Requirements Analysis",
390
+ "planFile.02-design.md": "System Design",
391
+ "planFile.03-todolist.md": "Implementation Checklist",
392
+ "planFile.04-verify-report.md": "Verification Report",
393
+ "planFile.01-plan.md": "Implementation Plan",
394
+ "planFile.02-verify-report.md": "Verification Report",
395
+ "planFile.review-feedback.md": "Review Feedback",
396
+ "planFile.review-history.json": "Review History",
397
+ // State labels
398
+ "state.pending": "Pending",
399
+ "state.branchCreated": "Branch Created",
400
+ "state.completed": "Completed",
401
+ "state.failed": "Failed",
402
+ "state.phaseDoing": "{label} In Progress",
403
+ "state.phaseDone": "{label} Done",
404
+ "state.phaseApproved": "{label} Approved",
405
+ // Orchestrator messages
406
+ "orchestrator.retryComment": "\u{1F504} **Auto-processing Retry**\n\nPrevious processing failed, retrying...",
407
+ "orchestrator.startComment": "\u{1F680} **Auto-processing Started**\n\nDetected `auto-finish` label, starting automated analysis and implementation.",
408
+ "orchestrator.fetchProgress": "Fetching latest code...",
409
+ "orchestrator.worktreeProgress": "Preparing working directory...",
410
+ "orchestrator.installProgress": "Installing project dependencies (pnpm install)...",
411
+ "orchestrator.initPlanProgress": "Initializing plan directory...",
412
+ "orchestrator.phaseStartProgress": "Ready, starting phases (from {phase})...",
413
+ "orchestrator.autoApproveComment": "\u26A1 **Review Auto-approved**\n\nDetected label matching `autoApproveLabels` configuration, automatically skipping review and proceeding to implementation.",
414
+ "orchestrator.createMrProgress": "Creating merge request...",
415
+ "orchestrator.uploadScreenshotsProgress": "Uploading E2E screenshots...",
416
+ "orchestrator.mrSection": "\n\n\u{1F517} Merge Request: {mrUrl}",
417
+ "orchestrator.mrFailSection": "\n\n\u26A0\uFE0F Failed to create merge request, please create manually.",
418
+ "orchestrator.completedComment": "\u2705 **Auto-processing Completed**\n\nAll phases completed. Branch: `{branch}`{mrSection}{previewSection}",
419
+ "orchestrator.failedComment": "\u274C **Auto-processing Failed**\n\n{error}\n\nWill retry on next poll cycle (if max retries not exceeded).",
420
+ "orchestrator.deployProgress": "Starting Preview environment...",
421
+ "orchestrator.deployDoneProgress": "Preview environment ready: {url}",
422
+ "orchestrator.previewComment.title": "\u{1F310} **Preview Environment Ready**",
423
+ "orchestrator.previewComment.tableHeader": "| Component | Address |",
424
+ "orchestrator.previewComment.tableSep": "|-----------|---------|",
425
+ "orchestrator.previewComment.frontend": "Frontend",
426
+ "orchestrator.previewComment.backendApi": "Backend API",
427
+ "orchestrator.previewComment.hint": "Visit the frontend link to experience the changes.",
428
+ "orchestrator.previewComment.expiry": "Preview will be cleaned up after MR merge, or expires in {hours}h.",
429
+ // BasePhase messages
430
+ "basePhase.aiStarting": "Starting AI Agent ({label})...",
431
+ "basePhase.rulesSection": "## Project Development Guidelines\nThe following are development guidelines related to this task. Please strictly follow them when coding:\n\n{rules}",
432
+ "basePhase.error": "Error: {message}",
433
+ // IssuePoller messages
434
+ "poller.autoApproveComment": "\u26A1 **Review Auto-approved**\n\nDetected label matching `autoApproveLabels` configuration (matched: {labels}), automatically skipping review and proceeding to implementation.",
435
+ // Progress comment
436
+ "progress.completed": "Completed",
437
+ "progress.failed": "Failed",
438
+ "progress.inProgress": "In Progress",
439
+ "progress.comment": "{icon} **Auto-processing Progress Update**\n\nPhase: **{phase}** \u2014 {status}",
440
+ // NoteSync messages
441
+ "notesync.phaseCompleted": "{icon} **{label} Phase Completed**",
442
+ "notesync.viewDoc": "\u{1F4C4} [View full {label} document]({url})",
443
+ "notesync.viewDashboard": "\u{1F4CA} [View details in dashboard]({url})",
444
+ // MergeRequest messages
445
+ "mr.relatedIssue": "## Related Issue",
446
+ "mr.title": "Title",
447
+ "mr.branch": "Branch",
448
+ "mr.issueDescription": "## Issue Description",
449
+ "mr.noDescription": "(No description)",
450
+ "mr.summaryFiles.01-analysis.md": "Requirements Analysis",
451
+ "mr.summaryFiles.01-plan.md": "Implementation Plan",
452
+ "mr.summaryFiles.02-design.md": "System Design",
453
+ "mr.summaryFiles.04-verify-report.md": "Verification Report",
454
+ "mr.summaryFiles.02-verify-report.md": "Verification Report",
455
+ "mr.aiSummary": "## AI Artifacts Summary",
456
+ "mr.autoCreated": "*This MR was automatically created by Issue Auto-Finish system*",
457
+ "mr.truncated": "...(truncated)",
458
+ // Screenshot messages
459
+ "screenshot.title": "\u{1F4F8} **E2E Test Screenshots**",
460
+ "screenshot.truncated": "> \u26A0\uFE0F Too many screenshots, showing only the first 20.",
461
+ // Webhook handler
462
+ "webhook.helpText": [
463
+ "Unrecognized command. Available commands:",
464
+ "",
465
+ "| Command | Description |",
466
+ "| --- | --- |",
467
+ "| `@issue-auto status` | Check current processing status |",
468
+ "| `@issue-auto retry` | Retry from failure point |",
469
+ "| `@issue-auto retry-from <phase>` | Retry from specific phase |",
470
+ "| `@issue-auto restart` | Start over from scratch |",
471
+ "| `@issue-auto approve` | Approve current plan |",
472
+ "| `@issue-auto reject <reason>` | Reject plan with feedback |",
473
+ "| `@issue-auto supplement <content>` | Add supplementary context |",
474
+ "| `@issue-auto clean-notes` | Delete agent history notes |"
475
+ ].join("\n"),
476
+ // Command executor
477
+ "cmd.previewNotStarted": "Issue #{iid} does not have a Preview environment yet.\nPreview starts automatically after code implementation is complete (requires E2E or Preview to be enabled).",
478
+ "cmd.previewStopped": "\u23F9 Stopped",
479
+ "cmd.previewRunning": "\u2705 Running",
480
+ "cmd.previewTable.component": "Component",
481
+ "cmd.previewTable.address": "Address",
482
+ "cmd.previewTable.frontend": "Frontend",
483
+ "cmd.previewTable.backendApi": "Backend API",
484
+ "cmd.previewTable.status": "Status",
485
+ "cmd.previewTable.startedAt": "Started at",
486
+ "cmd.noPreview": "Issue #{iid} does not have a running Preview environment.",
487
+ "cmd.previewStoppedMsg": "Preview environment for Issue #{iid} has been stopped.",
488
+ "cmd.cleanNotesSuccess": "\u{1F9F9} Cleaned up {count} agent note(s).",
489
+ // Intent recognizer
490
+ "intent.systemPrompt": `You are a command parsing assistant. Users will describe in natural language what they want the automation system to do in Gongfeng (GitLab) Issue comments.
491
+ You need to extract structured commands from user comments.
492
+
493
+ Available intents:
494
+ - retry: Retry failed task (continue from last failure point)
495
+ - retry-from: Restart from a specific phase (need to extract phase)
496
+ - supplement: Add additional requirement info or context
497
+ - approve: Approve/pass the current design plan
498
+ - reject: Reject current plan (need to extract feedback)
499
+ - status: Query current processing status
500
+ - restart: Start from scratch, redo everything
501
+
502
+ Available phases (only needed for retry-from):
503
+ - analysis: Requirements analysis phase
504
+ - design: System design phase
505
+ - implement: Code implementation phase
506
+ - verify: Verification testing phase
507
+ - plan: Planning phase
508
+ - build: Build phase
509
+
510
+ Rules:
511
+ 1. If user expresses both "retry" and "supplement info", prioritize retry-from or retry as intent, put supplement info in context field
512
+ 2. If user is only supplementing/providing additional info, use supplement
513
+ 3. feedback field is only for reject intent
514
+ 4. If unable to determine user intent, return null
515
+
516
+ Strictly return in the following JSON format, do not add any other text:
517
+ {"intent":"...","phase":"...or null","context":"...or null","feedback":"...or null"}`,
518
+ // API routes
519
+ "api.invalidFilename": "Invalid filename",
520
+ "api.docNotGenerated": "Document not yet generated",
521
+ "api.viewInDashboard": "View in dashboard",
522
+ "api.reviewFeedback": "\u{1F440} **Plan Review Feedback (Round {round})**",
523
+ "api.viewPlan": "\u{1F4C4} [View implementation plan]({url})",
524
+ "api.viewDetail": "\u{1F4CA} [View details in dashboard]({url})",
525
+ // Doc labels for api routes
526
+ "docLabel.01-analysis.md": "Requirements Analysis",
527
+ "docLabel.02-design.md": "System Design",
528
+ "docLabel.03-todolist.md": "Implementation Checklist",
529
+ "docLabel.04-verify-report.md": "Verification Report",
530
+ "docLabel.01-plan.md": "Implementation Plan",
531
+ "docLabel.02-verify-report.md": "Verification Report",
532
+ "docLabel.review-feedback.md": "Review Feedback",
533
+ // CLI DependencyChecker
534
+ "cli.nodeInstallHint": "Install via nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && nvm install 20",
535
+ "cli.cursorInstallHint": "Install Cursor IDE, CLI will be available automatically: https://www.cursor.com/",
536
+ "cli.unknownDep": "Unknown dependency: {name}",
537
+ "cli.alreadyInstalled": "{name} already installed ({version})",
538
+ "cli.manualInstall": "{name} requires manual installation: {hint}",
539
+ "cli.installing": "Installing {name}...",
540
+ "cli.installSuccess": "{name} installed successfully",
541
+ "cli.installFailed": "{name} installation failed (exit code: {code})",
542
+ // Prompt templates
543
+ "prompt.analysis": `You are a requirements analyst. Please analyze the following Gongfeng Issue and output a requirements analysis document.
544
+
545
+ ## Issue Information
546
+ - IID: #{iid}
547
+ - Title: {title}
548
+ - Description:
549
+ {description}{supplement}
550
+
551
+ ## Output Requirements
552
+ Please write the analysis results to {planDir}/01-analysis.md, including:
553
+ 1. **Requirements Overview** \u2014 Summarize the requirements goal concisely
554
+ 2. **Feature Breakdown** \u2014 List specific features to implement
555
+ 3. **Impact Analysis** \u2014 Which modules/files may be affected
556
+ 4. **Non-functional Requirements** \u2014 Performance, security, compatibility considerations
557
+ 5. **Risks and Dependencies** \u2014 Potential risks and external dependencies
558
+
559
+ Please read the project's CLAUDE.md first to understand the architecture, then proceed with analysis.
560
+ Only output document content, no other explanations.`,
561
+ "prompt.design": `You are a system designer. Design the system based on the requirements analysis document.
562
+
563
+ ## Issue Information
564
+ - IID: #{iid}
565
+ - Title: {title}{supplement}
566
+
567
+ Please read first:
568
+ - {planDir}/01-analysis.md (Requirements Analysis)
569
+ - CLAUDE.md (Project Architecture)
570
+
571
+ ## Output Requirements
572
+ Please write the design document to {planDir}/02-design.md, including:
573
+ 1. **Solution Overview** \u2014 Overall design approach
574
+ 2. **Files and Modules Involved** \u2014 List of files to create/modify
575
+ 3. **Data Model Changes** \u2014 Database or model layer changes
576
+ 4. **API Design** \u2014 API interface definitions
577
+ 5. **Detailed Implementation Steps** \u2014 Step-by-step implementation plan
578
+
579
+ Please write the implementation Todolist to {planDir}/03-todolist.md, format:
580
+ - [ ] Step 1: Specific description
581
+ - [ ] Step 2: Specific description
582
+ ...
583
+
584
+ Ensure the Todolist is detailed enough that each step can be independently executed and verified.`,
585
+ "prompt.implement": `You are a software engineer. Please implement code changes according to the design document and Todolist.
586
+
587
+ ## Issue Information
588
+ - IID: #{iid}
589
+ - Title: {title}
590
+
591
+ Please read first:
592
+ - {planDir}/01-analysis.md (Requirements Analysis)
593
+ - {planDir}/02-design.md (System Design)
594
+ - {planDir}/03-todolist.md (Implementation Steps)
595
+ - CLAUDE.md (Project Architecture and Code Standards)
596
+
597
+ ## Implementation Requirements
598
+ 1. Complete tasks in 03-todolist.md one by one
599
+ 2. After completing each item, update its checkbox status in 03-todolist.md (- [ ] \u2192 - [x])
600
+ 3. Strictly follow code standards in CLAUDE.md (2-space indent, 120-char line width, naming conventions, etc.)
601
+ 4. Don't over-engineer, only implement what's required in the design document
602
+ 5. Ensure code security, avoid OWASP Top 10 vulnerabilities`,
603
+ "prompt.verify": `You are a test engineer. Verify the correctness of code changes.
604
+
605
+ ## Issue Information
606
+ - IID: #{iid}
607
+ - Title: {title}
608
+
609
+ ## Pre-checks
610
+ Before running verification, confirm the dependency environment:
611
+ 1. Check if node_modules/.bin/eslint exists
612
+ 2. If not, run pnpm install; if that fails, try pnpm install --ignore-scripts
613
+ 3. If dependencies cannot be fully installed, mark as "environment issue" in the report and continue
614
+
615
+ ## Verification Steps
616
+ 1. Run pnpm run lint to check code style
617
+ 2. Run pnpm run build to check compilation
618
+ 3. Run pnpm test4vscode --files <test files related to changes> to run relevant tests
619
+ 4. Check code changes against {planDir}/02-design.md design document consistency
620
+ 5. Check if all items in {planDir}/03-todolist.md are completed
621
+
622
+ ## Known Pre-existing Issues (can be ignored)
623
+ - During build, tests/ directory may show TS2307: Cannot find module 'japa' or 'sinon', these are known test framework type declaration issues
624
+ - If a lint/build/test failure **does not involve files changed in this PR**, mark as "pre-existing issue"
625
+
626
+ Write verification results to {planDir}/04-verify-report.md, including:
627
+ - **Lint Results**: Pass/fail with details (distinguish current changes vs pre-existing issues)
628
+ - **Build Results**: Pass/fail with details (distinguish current changes vs pre-existing issues)
629
+ - **Test Results**: Pass/fail with details
630
+ - **Design Consistency Check**: Whether it matches the design
631
+ - **Summary**: Overall assessment and recommendations`,
632
+ "prompt.planModeVerify": `You are a test engineer. Verify the correctness of code changes.
633
+
634
+ ## Issue Information
635
+ - IID: #{iid}
636
+ - Title: {title}
637
+
638
+ ## Pre-checks
639
+ Before running verification, confirm the dependency environment:
640
+ 1. Check if node_modules/.bin/eslint exists
641
+ 2. If not, run pnpm install; if that fails, try pnpm install --ignore-scripts
642
+ 3. If dependencies cannot be fully installed, mark as "environment issue" in the report and continue
643
+
644
+ ## Verification Steps
645
+ 1. Run pnpm run lint to check code style
646
+ 2. Run pnpm run build to check compilation
647
+ 3. Run pnpm test4vscode --files <test files related to changes> to run relevant tests
648
+ 4. Check code changes against {planDir}/01-plan.md implementation plan consistency
649
+ 5. Check if all items in {planDir}/01-plan.md Todolist are completed
650
+
651
+ ## Known Pre-existing Issues (can be ignored)
652
+ - During build, tests/ directory may show TS2307: Cannot find module 'japa' or 'sinon', these are known test framework type declaration issues
653
+ - If a lint/build/test failure **does not involve files changed in this PR**, mark as "pre-existing issue"
654
+
655
+ Write verification results to {planDir}/02-verify-report.md, including:
656
+ - **Lint Results**: Pass/fail with details (distinguish current changes vs pre-existing issues)
657
+ - **Build Results**: Pass/fail with details (distinguish current changes vs pre-existing issues)
658
+ - **Test Results**: Pass/fail with details
659
+ - **Plan Consistency Check**: Whether it matches the implementation plan
660
+ - **Summary**: Overall assessment and recommendations`,
661
+ "prompt.plan": `You are a senior technical lead. Please complete requirements analysis and solution design in one go.
662
+
663
+ ## Issue Information
664
+ - IID: #{iid}
665
+ - Title: {title}
666
+ - Description:
667
+ {description}{supplement}
668
+
669
+ ## Output Requirements
670
+ Please read the project's CLAUDE.md first to understand the architecture, then proceed with analysis and design.
671
+
672
+ Please write the complete implementation plan to {planDir}/01-plan.md, including:
673
+
674
+ ### Part 1: Requirements Analysis
675
+ 1. **Requirements Overview** \u2014 Summarize the requirements goal concisely
676
+ 2. **Feature Breakdown** \u2014 List specific features to implement
677
+ 3. **Impact Analysis** \u2014 Which modules/files may be affected
678
+ 4. **Non-functional Requirements** \u2014 Performance, security, compatibility considerations
679
+ 5. **Risks and Dependencies** \u2014 Potential risks and external dependencies
680
+
681
+ ### Part 2: System Design
682
+ 1. **Solution Overview** \u2014 Overall design approach
683
+ 2. **Files and Modules Involved** \u2014 List of files to create/modify
684
+ 3. **Data Model Changes** \u2014 Database or model layer changes
685
+ 4. **API Design** \u2014 API interface definitions
686
+ 5. **Detailed Implementation Steps** \u2014 Step-by-step implementation plan
687
+
688
+ ### Part 3: Implementation Todolist
689
+ - [ ] Step 1: Specific description
690
+ - [ ] Step 2: Specific description
691
+ ...
692
+
693
+ Ensure the Todolist is detailed enough that each step can be independently executed and verified.
694
+ Only output document content, no other explanations. Do not modify any code files.`,
695
+ "prompt.build": `You are a software engineer. Please complete code changes according to the implementation plan.
696
+
697
+ ## Issue Information
698
+ - IID: #{iid}
699
+ - Title: {title}
700
+
701
+ Please read first:
702
+ - {planDir}/01-plan.md (Complete implementation plan including requirements analysis, system design and Todolist)
703
+ - CLAUDE.md (Project Architecture and Code Standards)
704
+
705
+ ## Implementation Requirements
706
+ 1. Strictly follow the Todolist in 01-plan.md, completing items one by one
707
+ 2. After completing each item, update its checkbox status in 01-plan.md (- [ ] \u2192 - [x])
708
+ 3. Strictly follow code standards in CLAUDE.md (2-space indent, 120-char line width, naming conventions, etc.)
709
+ 4. Don't over-engineer, only implement what's required in the plan
710
+ 5. Ensure code security, avoid OWASP Top 10 vulnerabilities`,
711
+ "prompt.rePlan": `You are a senior technical lead. The previous implementation plan was not approved. Please modify the plan based on review feedback.
712
+
713
+ ## Issue Information
714
+ - IID: #{iid}
715
+ - Title: {title}
716
+ - Description:
717
+ {description}{supplement}
718
+
719
+ ## Review Feedback History ({historyCount} rounds)
720
+ {feedbackLines}
721
+
722
+ Please read first:
723
+ - {planDir}/01-plan.md (Current implementation plan)
724
+ - {planDir}/review-feedback.md (Complete review feedback history)
725
+ - CLAUDE.md (Project Architecture)
726
+
727
+ ## Output Requirements
728
+ Please modify {planDir}/01-plan.md incorporating all rounds of review feedback, maintaining the same document structure.
729
+ Focus on the latest round of feedback while ensuring issues raised in previous rounds are also resolved.
730
+ Only output document content, no other explanations. Do not modify any code files.`,
731
+ "prompt.rePlanRound": "### Round {round} ({timestamp})\n{feedback}",
732
+ "prompt.e2eSuffix.title": "## E2E UI Verification (Enabled)",
733
+ "prompt.e2eSuffix.intro": "E2E UI auto-verification is enabled for this change. Please perform the following additional steps:",
734
+ "prompt.e2eSuffix.previewNote": "**Preview environment is running (managed by the system, no manual startup needed):**",
735
+ "prompt.e2eSuffix.backend": "Backend",
736
+ "prompt.e2eSuffix.frontend": "Frontend"
737
+ };
738
+
739
+ // src/i18n/index.ts
740
+ var locales = /* @__PURE__ */ new Map();
741
+ var currentLocale = "zh-CN";
742
+ function setLocale(locale) {
743
+ currentLocale = locale;
744
+ }
745
+ function registerLocale(locale, messages) {
746
+ locales.set(locale, messages);
747
+ }
748
+ function t(key, params) {
749
+ const messages = locales.get(currentLocale) ?? locales.get("zh-CN");
750
+ if (!messages) return key;
751
+ let text = messages[key];
752
+ if (text === void 0) {
753
+ const fallback = locales.get("zh-CN");
754
+ text = fallback?.[key] ?? key;
755
+ }
756
+ if (params) {
757
+ for (const [k, v] of Object.entries(params)) {
758
+ text = text.replaceAll(`{${k}}`, String(v));
759
+ }
760
+ }
761
+ return text;
762
+ }
763
+ registerLocale("zh-CN", zhCN);
764
+ registerLocale("en", en);
765
+
766
+ export {
767
+ setLocale,
768
+ t
769
+ };
770
+ //# sourceMappingURL=chunk-OWVT3Z34.js.map