@xdevops/issue-auto-finish 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/KnowledgeAnalyzer-EZSJT2MJ.js +13 -0
- package/dist/KnowledgeAnalyzer-EZSJT2MJ.js.map +1 -0
- package/dist/KnowledgeStore-4ROC6F56.js +10 -0
- package/dist/KnowledgeStore-4ROC6F56.js.map +1 -0
- package/dist/ai-runner/AIRunner.d.ts +2 -0
- package/dist/ai-runner/AIRunner.d.ts.map +1 -1
- package/dist/ai-runner/BaseAIRunner.d.ts +9 -0
- package/dist/ai-runner/BaseAIRunner.d.ts.map +1 -1
- package/dist/ai-runner-RGAJPOOW.js +16 -0
- package/dist/ai-runner-RGAJPOOW.js.map +1 -0
- package/dist/analyze-I7UOJB4F.js +72 -0
- package/dist/analyze-I7UOJB4F.js.map +1 -0
- package/dist/chunk-3JUHZGX5.js +171 -0
- package/dist/chunk-3JUHZGX5.js.map +1 -0
- package/dist/chunk-5JYCGAU3.js +318 -0
- package/dist/chunk-5JYCGAU3.js.map +1 -0
- package/dist/chunk-5VUB3UUK.js +643 -0
- package/dist/chunk-5VUB3UUK.js.map +1 -0
- package/dist/{chunk-IDUKWCC2.js → chunk-C6ZJVIPZ.js} +1151 -80
- package/dist/chunk-C6ZJVIPZ.js.map +1 -0
- package/dist/{chunk-OWVT3Z34.js → chunk-JFYAXNNS.js} +121 -31
- package/dist/chunk-JFYAXNNS.js.map +1 -0
- package/dist/chunk-KISVPNSV.js +188 -0
- package/dist/chunk-KISVPNSV.js.map +1 -0
- package/dist/{chunk-I3T573SU.js → chunk-LEQYGOMJ.js} +65 -2
- package/dist/chunk-LEQYGOMJ.js.map +1 -0
- package/dist/{chunk-TBIEB3JY.js → chunk-N5YK6YVI.js} +592 -767
- package/dist/chunk-N5YK6YVI.js.map +1 -0
- package/dist/{chunk-RIUI4ROA.js → chunk-PECYMYAK.js} +2 -2
- package/dist/chunk-SWG2Y7YX.js +410 -0
- package/dist/chunk-SWG2Y7YX.js.map +1 -0
- package/dist/chunk-TZ6C7HL5.js +59 -0
- package/dist/chunk-TZ6C7HL5.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +8 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli.js +67 -3
- package/dist/cli.js.map +1 -1
- package/dist/clients/GongfengClient.d.ts +5 -0
- package/dist/clients/GongfengClient.d.ts.map +1 -1
- package/dist/config-RI7NLDXI.js +7 -0
- package/dist/config-RI7NLDXI.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/{doctor-B26Q6JWI.js → doctor-ZPGIBA5N.js} +3 -3
- package/dist/events/EventBus.d.ts +1 -1
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/git/GitOperations.d.ts +12 -0
- package/dist/git/GitOperations.d.ts.map +1 -1
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -5
- package/dist/{init-L3VIWCOV.js → init-LZGCIHE7.js} +8 -4
- package/dist/{init-L3VIWCOV.js.map → init-LZGCIHE7.js.map} +1 -1
- package/dist/knowledge/KnowledgeAnalyzer.d.ts +31 -0
- package/dist/knowledge/KnowledgeAnalyzer.d.ts.map +1 -0
- package/dist/knowledge/KnowledgeDefaults.d.ts +7 -0
- package/dist/knowledge/KnowledgeDefaults.d.ts.map +1 -0
- package/dist/knowledge/KnowledgeEntry.d.ts +30 -0
- package/dist/knowledge/KnowledgeEntry.d.ts.map +1 -0
- package/dist/knowledge/KnowledgeLoader.d.ts +18 -0
- package/dist/knowledge/KnowledgeLoader.d.ts.map +1 -0
- package/dist/knowledge/KnowledgeStore.d.ts +35 -0
- package/dist/knowledge/KnowledgeStore.d.ts.map +1 -0
- package/dist/knowledge/ProjectKnowledge.d.ts +79 -0
- package/dist/knowledge/ProjectKnowledge.d.ts.map +1 -0
- package/dist/knowledge/analyze-prompt.d.ts +2 -0
- package/dist/knowledge/analyze-prompt.d.ts.map +1 -0
- package/dist/knowledge/importers/GongfengExtractor.d.ts +27 -0
- package/dist/knowledge/importers/GongfengExtractor.d.ts.map +1 -0
- package/dist/knowledge/importers/IwikiImporter.d.ts +21 -0
- package/dist/knowledge/importers/IwikiImporter.d.ts.map +1 -0
- package/dist/knowledge/index.d.ts +12 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/lib.js +19 -10
- package/dist/orchestrator/PipelineOrchestrator.d.ts +5 -1
- package/dist/orchestrator/PipelineOrchestrator.d.ts.map +1 -1
- package/dist/phases/BasePhase.d.ts.map +1 -1
- package/dist/poller/IssuePoller.d.ts +5 -0
- package/dist/poller/IssuePoller.d.ts.map +1 -1
- package/dist/prompts/chat-templates.d.ts +4 -0
- package/dist/prompts/chat-templates.d.ts.map +1 -0
- package/dist/prompts/templates.d.ts +11 -0
- package/dist/prompts/templates.d.ts.map +1 -1
- package/dist/rules/RuleResolver.d.ts +4 -0
- package/dist/rules/RuleResolver.d.ts.map +1 -1
- package/dist/run.js +11 -5
- package/dist/run.js.map +1 -1
- package/dist/services/ChatService.d.ts +39 -0
- package/dist/services/ChatService.d.ts.map +1 -0
- package/dist/shutdown/ShutdownSignal.d.ts +3 -0
- package/dist/shutdown/ShutdownSignal.d.ts.map +1 -0
- package/dist/{start-TVN4SS6E.js → start-NMQHUKGF.js} +1 -1
- package/dist/tracker/IssueState.d.ts +1 -0
- package/dist/tracker/IssueState.d.ts.map +1 -1
- package/dist/tracker/IssueTracker.d.ts +2 -0
- package/dist/tracker/IssueTracker.d.ts.map +1 -1
- package/dist/updater/AutoUpdater.d.ts +33 -0
- package/dist/updater/AutoUpdater.d.ts.map +1 -0
- package/dist/updater/UpdateExecutor.d.ts +7 -0
- package/dist/updater/UpdateExecutor.d.ts.map +1 -0
- package/dist/updater/VersionChecker.d.ts +22 -0
- package/dist/updater/VersionChecker.d.ts.map +1 -0
- package/dist/web/WebServer.d.ts +4 -0
- package/dist/web/WebServer.d.ts.map +1 -1
- package/dist/web/routes/api.d.ts +4 -0
- package/dist/web/routes/api.d.ts.map +1 -1
- package/dist/web/routes/chat.d.ts +7 -0
- package/dist/web/routes/chat.d.ts.map +1 -0
- package/dist/web/routes/knowledge.d.ts +13 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/setup.d.ts.map +1 -1
- package/dist/webhook/CommandExecutor.d.ts +4 -0
- package/dist/webhook/CommandExecutor.d.ts.map +1 -1
- package/dist/webhook/CommandParser.d.ts +2 -2
- package/dist/webhook/CommandParser.d.ts.map +1 -1
- package/dist/webhook/WebhookHandler.d.ts +8 -0
- package/dist/webhook/WebhookHandler.d.ts.map +1 -1
- package/dist/webhook/WebhookServer.d.ts +2 -0
- package/dist/webhook/WebhookServer.d.ts.map +1 -1
- package/package.json +4 -2
- package/src/web/frontend/dist/assets/index-AcJ0lPIv.js +67 -0
- package/src/web/frontend/dist/assets/index-BbRt5BAr.css +1 -0
- package/src/web/frontend/dist/index.html +2 -2
- package/dist/chunk-I3T573SU.js.map +0 -1
- package/dist/chunk-IDUKWCC2.js.map +0 -1
- package/dist/chunk-OWVT3Z34.js.map +0 -1
- package/dist/chunk-TBIEB3JY.js.map +0 -1
- package/src/web/frontend/dist/assets/index-CQdlU9PE.js +0 -65
- package/src/web/frontend/dist/assets/index-CgMEkyZJ.css +0 -1
- /package/dist/{chunk-RIUI4ROA.js.map → chunk-PECYMYAK.js.map} +0 -0
- /package/dist/{doctor-B26Q6JWI.js.map → doctor-ZPGIBA5N.js.map} +0 -0
- /package/dist/{start-TVN4SS6E.js.map → start-NMQHUKGF.js.map} +0 -0
|
@@ -30,6 +30,7 @@ var zhCN = {
|
|
|
30
30
|
"state.branchCreated": "\u5206\u652F\u5DF2\u521B\u5EFA",
|
|
31
31
|
"state.completed": "\u5DF2\u5B8C\u6210",
|
|
32
32
|
"state.failed": "\u5931\u8D25",
|
|
33
|
+
"state.resolvingConflict": "\u51B2\u7A81\u4FEE\u590D\u4E2D",
|
|
33
34
|
"state.phaseDoing": "{label}\u4E2D",
|
|
34
35
|
"state.phaseDone": "{label}\u5B8C\u6210",
|
|
35
36
|
"state.phaseApproved": "{label}\u901A\u8FC7",
|
|
@@ -102,6 +103,7 @@ var zhCN = {
|
|
|
102
103
|
"| `@issue-auto approve` / `\u901A\u8FC7` | \u6279\u51C6\u5F53\u524D\u65B9\u6848 |",
|
|
103
104
|
"| `@issue-auto reject <\u539F\u56E0>` / `\u9A73\u56DE\uFF1A<\u539F\u56E0>` | \u9A73\u56DE\u65B9\u6848 |",
|
|
104
105
|
"| `@issue-auto supplement <\u5185\u5BB9>` / `\u8865\u5145\uFF1A<\u5185\u5BB9>` | \u8865\u5145\u4E0A\u4E0B\u6587 |",
|
|
106
|
+
"| `@issue-auto fix-conflict` / `\u4FEE\u590D\u51B2\u7A81` | \u81EA\u52A8\u4FEE\u590D MR \u5408\u5E76\u51B2\u7A81 |",
|
|
105
107
|
"| `@issue-auto clean-notes` / `\u6E05\u7406\u8BC4\u8BBA` | \u5220\u9664 Agent \u5386\u53F2\u8BC4\u8BBA |"
|
|
106
108
|
].join("\n"),
|
|
107
109
|
// Command executor
|
|
@@ -228,7 +230,7 @@ var zhCN = {
|
|
|
228
230
|
## \u5B9E\u65BD\u8981\u6C42
|
|
229
231
|
1. \u9010\u9879\u5B8C\u6210 03-todolist.md \u4E2D\u7684\u4EFB\u52A1
|
|
230
232
|
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\
|
|
233
|
+
3. \u4E25\u683C\u9075\u5FAA CLAUDE.md \u4E2D\u7684\u4EE3\u7801\u89C4\u8303\uFF08{codeStyleDescription}\uFF09
|
|
232
234
|
4. \u4E0D\u8981\u8FC7\u5EA6\u5DE5\u7A0B\u5316\uFF0C\u53EA\u5B9E\u73B0\u8BBE\u8BA1\u6587\u6863\u4E2D\u8981\u6C42\u7684\u5185\u5BB9
|
|
233
235
|
5. \u786E\u4FDD\u4EE3\u7801\u5B89\u5168\uFF0C\u907F\u514D OWASP Top 10 \u6F0F\u6D1E`,
|
|
234
236
|
"prompt.verify": `\u4F60\u662F\u6D4B\u8BD5\u5DE5\u7A0B\u5E08\u3002\u9A8C\u8BC1\u4EE3\u7801\u53D8\u66F4\u7684\u6B63\u786E\u6027\u3002
|
|
@@ -239,19 +241,19 @@ var zhCN = {
|
|
|
239
241
|
|
|
240
242
|
## \u524D\u7F6E\u68C0\u67E5
|
|
241
243
|
\u5728\u6267\u884C\u9A8C\u8BC1\u524D\uFF0C\u5148\u786E\u8BA4\u4F9D\u8D56\u73AF\u5883:
|
|
242
|
-
1. \u68C0\u67E5
|
|
243
|
-
2. \u5982\u4E0D\u5B58\u5728\uFF0C\u8FD0\u884C
|
|
244
|
+
1. \u68C0\u67E5 {dependencyCheckPath} \u662F\u5426\u5B58\u5728
|
|
245
|
+
2. \u5982\u4E0D\u5B58\u5728\uFF0C\u8FD0\u884C {installCommand}\uFF1B\u5982\u679C\u5931\u8D25\uFF0C\u5C1D\u8BD5 {installFallbackCommand}
|
|
244
246
|
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
247
|
|
|
246
248
|
## \u9A8C\u8BC1\u6B65\u9AA4
|
|
247
|
-
1. \u8FD0\u884C
|
|
248
|
-
2. \u8FD0\u884C
|
|
249
|
-
3. \u8FD0\u884C
|
|
249
|
+
1. \u8FD0\u884C {lintCommand} \u68C0\u67E5\u4EE3\u7801\u98CE\u683C
|
|
250
|
+
2. \u8FD0\u884C {buildCommand} \u68C0\u67E5\u7F16\u8BD1
|
|
251
|
+
3. \u8FD0\u884C {testFilesCommand} \u8FD0\u884C\u76F8\u5173\u6D4B\u8BD5
|
|
250
252
|
4. \u68C0\u67E5\u4EE3\u7801\u53D8\u66F4\u4E0E {planDir}/02-design.md \u8BBE\u8BA1\u6587\u6863\u7684\u4E00\u81F4\u6027
|
|
251
253
|
5. \u68C0\u67E5 {planDir}/03-todolist.md \u662F\u5426\u6240\u6709\u9879\u90FD\u5DF2\u5B8C\u6210
|
|
252
254
|
|
|
253
255
|
## \u5DF2\u77E5\u7684\u9884\u5B58\u95EE\u9898\uFF08\u5FFD\u7565\u5373\u53EF\uFF09
|
|
254
|
-
|
|
256
|
+
{knownIssuesSection}
|
|
255
257
|
- \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
258
|
|
|
257
259
|
\u5C06\u9A8C\u8BC1\u7ED3\u679C\u5199\u5165 {planDir}/04-verify-report.md\uFF0C\u5305\u62EC\uFF1A
|
|
@@ -268,19 +270,19 @@ var zhCN = {
|
|
|
268
270
|
|
|
269
271
|
## \u524D\u7F6E\u68C0\u67E5
|
|
270
272
|
\u5728\u6267\u884C\u9A8C\u8BC1\u524D\uFF0C\u5148\u786E\u8BA4\u4F9D\u8D56\u73AF\u5883:
|
|
271
|
-
1. \u68C0\u67E5
|
|
272
|
-
2. \u5982\u4E0D\u5B58\u5728\uFF0C\u8FD0\u884C
|
|
273
|
+
1. \u68C0\u67E5 {dependencyCheckPath} \u662F\u5426\u5B58\u5728
|
|
274
|
+
2. \u5982\u4E0D\u5B58\u5728\uFF0C\u8FD0\u884C {installCommand}\uFF1B\u5982\u679C\u5931\u8D25\uFF0C\u5C1D\u8BD5 {installFallbackCommand}
|
|
273
275
|
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
276
|
|
|
275
277
|
## \u9A8C\u8BC1\u6B65\u9AA4
|
|
276
|
-
1. \u8FD0\u884C
|
|
277
|
-
2. \u8FD0\u884C
|
|
278
|
-
3. \u8FD0\u884C
|
|
278
|
+
1. \u8FD0\u884C {lintCommand} \u68C0\u67E5\u4EE3\u7801\u98CE\u683C
|
|
279
|
+
2. \u8FD0\u884C {buildCommand} \u68C0\u67E5\u7F16\u8BD1
|
|
280
|
+
3. \u8FD0\u884C {testFilesCommand} \u8FD0\u884C\u76F8\u5173\u6D4B\u8BD5
|
|
279
281
|
4. \u68C0\u67E5\u4EE3\u7801\u53D8\u66F4\u4E0E {planDir}/01-plan.md \u5B9E\u65BD\u8BA1\u5212\u7684\u4E00\u81F4\u6027
|
|
280
282
|
5. \u68C0\u67E5 {planDir}/01-plan.md \u4E2D Todolist \u662F\u5426\u6240\u6709\u9879\u90FD\u5DF2\u5B8C\u6210
|
|
281
283
|
|
|
282
284
|
## \u5DF2\u77E5\u7684\u9884\u5B58\u95EE\u9898\uFF08\u5FFD\u7565\u5373\u53EF\uFF09
|
|
283
|
-
|
|
285
|
+
{knownIssuesSection}
|
|
284
286
|
- \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
287
|
|
|
286
288
|
\u5C06\u9A8C\u8BC1\u7ED3\u679C\u5199\u5165 {planDir}/02-verify-report.md\uFF0C\u5305\u62EC\uFF1A
|
|
@@ -336,7 +338,7 @@ var zhCN = {
|
|
|
336
338
|
## \u5B9E\u65BD\u8981\u6C42
|
|
337
339
|
1. \u4E25\u683C\u6309\u7167 01-plan.md \u4E2D\u7684 Todolist \u9010\u9879\u5B8C\u6210
|
|
338
340
|
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\
|
|
341
|
+
3. \u4E25\u683C\u9075\u5FAA CLAUDE.md \u4E2D\u7684\u4EE3\u7801\u89C4\u8303\uFF08{codeStyleDescription}\uFF09
|
|
340
342
|
4. \u4E0D\u8981\u8FC7\u5EA6\u5DE5\u7A0B\u5316\uFF0C\u53EA\u5B9E\u73B0\u8BA1\u5212\u4E2D\u8981\u6C42\u7684\u5185\u5BB9
|
|
341
343
|
5. \u786E\u4FDD\u4EE3\u7801\u5B89\u5168\uFF0C\u907F\u514D OWASP Top 10 \u6F0F\u6D1E`,
|
|
342
344
|
"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
|
|
@@ -364,7 +366,50 @@ var zhCN = {
|
|
|
364
366
|
"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
367
|
"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
368
|
"prompt.e2eSuffix.backend": "\u540E\u7AEF",
|
|
367
|
-
"prompt.e2eSuffix.frontend": "\u524D\u7AEF"
|
|
369
|
+
"prompt.e2eSuffix.frontend": "\u524D\u7AEF",
|
|
370
|
+
// Conflict resolution
|
|
371
|
+
"conflict.startComment": "\u{1F527} **\u5408\u5E76\u51B2\u7A81\u4FEE\u590D\u5F00\u59CB**\n\n\u6B63\u5728\u5C1D\u8BD5\u5C06\u5206\u652F `{branch}` rebase \u5230\u6700\u65B0\u7684 `{baseBranch}`...",
|
|
372
|
+
"conflict.noConflictComment": "\u2705 **Rebase \u6210\u529F\uFF0C\u6CA1\u6709\u51B2\u7A81**\n\n\u5206\u652F `{branch}` \u5DF2\u6210\u529F rebase \u5230\u6700\u65B0\u7684 `{baseBranch}`\uFF0C\u65E0\u9700\u51B2\u7A81\u4FEE\u590D\u3002",
|
|
373
|
+
"conflict.resolvedComment": "\u2705 **\u5408\u5E76\u51B2\u7A81\u4FEE\u590D\u5B8C\u6210**\n\n\u5206\u652F `{branch}` \u5DF2\u6210\u529F rebase \u5230\u6700\u65B0\u7684 `{baseBranch}`\uFF0C\u6240\u6709\u51B2\u7A81\u5DF2\u81EA\u52A8\u89E3\u51B3\u5E76\u901A\u8FC7\u9A8C\u8BC1\u3002",
|
|
374
|
+
"conflict.failedComment": "\u274C **\u5408\u5E76\u51B2\u7A81\u4FEE\u590D\u5931\u8D25**\n\n{error}\n\n\u53EF\u901A\u8FC7 `@issue-auto fix-conflict` \u91CD\u8BD5\u3002",
|
|
375
|
+
"conflict.mrResolvedComment": "\u2705 **\u5408\u5E76\u51B2\u7A81\u5DF2\u81EA\u52A8\u4FEE\u590D**\n\n\u6B64 MR \u7684\u6E90\u5206\u652F\u5DF2\u6210\u529F rebase \u5230\u6700\u65B0\u7684\u76EE\u6807\u5206\u652F\uFF0C\u51B2\u7A81\u5DF2\u81EA\u52A8\u89E3\u51B3\u3002\u8BF7\u91CD\u65B0\u5BA1\u67E5\u53D8\u66F4\u3002",
|
|
376
|
+
"conflict.startedMsg": "\u{1F527} \u51B2\u7A81\u4FEE\u590D\u5DF2\u542F\u52A8\uFF0C\u5904\u7406\u4E2D\u8BF7\u7A0D\u5019...",
|
|
377
|
+
"conflict.invalidState": "\u5F53\u524D\u72B6\u6001\u4E0D\u5141\u8BB8\u51B2\u7A81\u4FEE\u590D\uFF08\u5F53\u524D: {state}\uFF09\u3002\u4EC5\u5728 Completed \u6216\u51B2\u7A81\u4FEE\u590D\u5931\u8D25\u540E\u53EF\u89E6\u53D1\u3002",
|
|
378
|
+
"conflict.noMr": "Issue #{iid} \u6CA1\u6709\u5173\u8054\u7684 MR\uFF0C\u65E0\u6CD5\u6267\u884C\u51B2\u7A81\u4FEE\u590D\u3002",
|
|
379
|
+
// Auto-update messages
|
|
380
|
+
"update.checking": "\u6B63\u5728\u68C0\u67E5\u66F4\u65B0...",
|
|
381
|
+
"update.available": "\u53D1\u73B0\u65B0\u7248\u672C: v{latestVersion} (\u5F53\u524D: v{currentVersion})",
|
|
382
|
+
"update.upToDate": "\u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\u672C (v{currentVersion})",
|
|
383
|
+
"update.draining": "\u6B63\u5728\u7B49\u5F85\u6D3B\u8DC3 Issue \u5B8C\u6210...",
|
|
384
|
+
"update.updating": "\u6B63\u5728\u66F4\u65B0\u5230 v{version}...",
|
|
385
|
+
"update.completed": "\u66F4\u65B0\u5B8C\u6210\uFF0C\u670D\u52A1\u5C06\u81EA\u52A8\u91CD\u542F",
|
|
386
|
+
"update.failed": "\u66F4\u65B0\u5931\u8D25: {error}",
|
|
387
|
+
"prompt.conflictResolve": `\u4F60\u662F\u4E00\u540D\u8D44\u6DF1\u5F00\u53D1\u5DE5\u7A0B\u5E08\uFF0C\u6B63\u5728\u5904\u7406 Git rebase \u8FC7\u7A0B\u4E2D\u4EA7\u751F\u7684\u5408\u5E76\u51B2\u7A81\u3002
|
|
388
|
+
|
|
389
|
+
## \u80CC\u666F
|
|
390
|
+
- Issue IID: #{iid}
|
|
391
|
+
- \u5206\u652F: \`{branch}\` \u6B63\u5728 rebase \u5230 \`{baseBranch}\`
|
|
392
|
+
- \u51B2\u7A81\u6587\u4EF6\u5217\u8868:
|
|
393
|
+
{conflictFilesList}
|
|
394
|
+
|
|
395
|
+
## \u4EFB\u52A1
|
|
396
|
+
\u8BF7\u9010\u4E00\u89E3\u51B3\u4E0A\u8FF0\u51B2\u7A81\u6587\u4EF6\uFF1A
|
|
397
|
+
|
|
398
|
+
1. \u6253\u5F00\u6BCF\u4E2A\u51B2\u7A81\u6587\u4EF6\uFF0C\u4ED4\u7EC6\u9605\u8BFB\u51B2\u7A81\u6807\u8BB0\uFF08<<<<<<< HEAD / ======= / >>>>>>> ...\uFF09
|
|
399
|
+
2. \u7406\u89E3\u53CC\u65B9\u4FEE\u6539\u7684\u610F\u56FE\uFF1A
|
|
400
|
+
- HEAD\uFF08\u5F53\u524D\u5206\u652F\uFF09\u7684\u4FEE\u6539\u76EE\u7684
|
|
401
|
+
- \u5BF9\u65B9\u5206\u652F\u7684\u4FEE\u6539\u76EE\u7684
|
|
402
|
+
3. \u6B63\u786E\u5408\u5E76\u4EE3\u7801\uFF0C\u786E\u4FDD\uFF1A
|
|
403
|
+
- \u4FDD\u7559\u53CC\u65B9\u6709\u610F\u4E49\u7684\u4FEE\u6539
|
|
404
|
+
- \u5B8C\u5168\u79FB\u9664\u6240\u6709\u51B2\u7A81\u6807\u8BB0\uFF08<<<<<<<, =======, >>>>>>>\uFF09
|
|
405
|
+
- \u5408\u5E76\u540E\u7684\u4EE3\u7801\u903B\u8F91\u5B8C\u6574\u3001\u53EF\u7F16\u8BD1\u3001\u53EF\u8FD0\u884C
|
|
406
|
+
4. \u5982\u679C\u67D0\u4E2A\u6587\u4EF6\u7684\u51B2\u7A81\u6D89\u53CA\u7ED3\u6784\u6027\u53D8\u66F4\uFF08\u5982\u51FD\u6570\u7B7E\u540D\u53D8\u5316\uFF09\uFF0C\u786E\u4FDD\u6240\u6709\u5F15\u7528\u5904\u4E5F\u540C\u6B65\u66F4\u65B0
|
|
407
|
+
|
|
408
|
+
## \u6CE8\u610F\u4E8B\u9879
|
|
409
|
+
- \u4E0D\u8981\u9057\u6F0F\u4EFB\u4F55\u51B2\u7A81\u6807\u8BB0
|
|
410
|
+
- \u4E0D\u8981\u5F15\u5165\u65B0\u7684 bug
|
|
411
|
+
- \u4FDD\u6301\u4EE3\u7801\u98CE\u683C\u4E00\u81F4
|
|
412
|
+
- \u53EA\u4FEE\u6539\u51B2\u7A81\u6587\u4EF6\uFF0C\u4E0D\u8981\u505A\u989D\u5916\u7684\u4EE3\u7801\u6539\u52A8`
|
|
368
413
|
};
|
|
369
414
|
|
|
370
415
|
// src/i18n/locales/en.ts
|
|
@@ -399,6 +444,7 @@ var en = {
|
|
|
399
444
|
"state.branchCreated": "Branch Created",
|
|
400
445
|
"state.completed": "Completed",
|
|
401
446
|
"state.failed": "Failed",
|
|
447
|
+
"state.resolvingConflict": "Resolving Conflict",
|
|
402
448
|
"state.phaseDoing": "{label} In Progress",
|
|
403
449
|
"state.phaseDone": "{label} Done",
|
|
404
450
|
"state.phaseApproved": "{label} Approved",
|
|
@@ -471,6 +517,7 @@ var en = {
|
|
|
471
517
|
"| `@issue-auto approve` | Approve current plan |",
|
|
472
518
|
"| `@issue-auto reject <reason>` | Reject plan with feedback |",
|
|
473
519
|
"| `@issue-auto supplement <content>` | Add supplementary context |",
|
|
520
|
+
"| `@issue-auto fix-conflict` | Auto-resolve MR merge conflicts |",
|
|
474
521
|
"| `@issue-auto clean-notes` | Delete agent history notes |"
|
|
475
522
|
].join("\n"),
|
|
476
523
|
// Command executor
|
|
@@ -597,7 +644,7 @@ Please read first:
|
|
|
597
644
|
## Implementation Requirements
|
|
598
645
|
1. Complete tasks in 03-todolist.md one by one
|
|
599
646
|
2. After completing each item, update its checkbox status in 03-todolist.md (- [ ] \u2192 - [x])
|
|
600
|
-
3. Strictly follow code standards in CLAUDE.md (
|
|
647
|
+
3. Strictly follow code standards in CLAUDE.md ({codeStyleDescription})
|
|
601
648
|
4. Don't over-engineer, only implement what's required in the design document
|
|
602
649
|
5. Ensure code security, avoid OWASP Top 10 vulnerabilities`,
|
|
603
650
|
"prompt.verify": `You are a test engineer. Verify the correctness of code changes.
|
|
@@ -608,19 +655,19 @@ Please read first:
|
|
|
608
655
|
|
|
609
656
|
## Pre-checks
|
|
610
657
|
Before running verification, confirm the dependency environment:
|
|
611
|
-
1. Check if
|
|
612
|
-
2. If not, run
|
|
658
|
+
1. Check if {dependencyCheckPath} exists
|
|
659
|
+
2. If not, run {installCommand}; if that fails, try {installFallbackCommand}
|
|
613
660
|
3. If dependencies cannot be fully installed, mark as "environment issue" in the report and continue
|
|
614
661
|
|
|
615
662
|
## Verification Steps
|
|
616
|
-
1. Run
|
|
617
|
-
2. Run
|
|
618
|
-
3. Run
|
|
663
|
+
1. Run {lintCommand} to check code style
|
|
664
|
+
2. Run {buildCommand} to check compilation
|
|
665
|
+
3. Run {testFilesCommand} to run relevant tests
|
|
619
666
|
4. Check code changes against {planDir}/02-design.md design document consistency
|
|
620
667
|
5. Check if all items in {planDir}/03-todolist.md are completed
|
|
621
668
|
|
|
622
669
|
## Known Pre-existing Issues (can be ignored)
|
|
623
|
-
|
|
670
|
+
{knownIssuesSection}
|
|
624
671
|
- If a lint/build/test failure **does not involve files changed in this PR**, mark as "pre-existing issue"
|
|
625
672
|
|
|
626
673
|
Write verification results to {planDir}/04-verify-report.md, including:
|
|
@@ -637,19 +684,19 @@ Write verification results to {planDir}/04-verify-report.md, including:
|
|
|
637
684
|
|
|
638
685
|
## Pre-checks
|
|
639
686
|
Before running verification, confirm the dependency environment:
|
|
640
|
-
1. Check if
|
|
641
|
-
2. If not, run
|
|
687
|
+
1. Check if {dependencyCheckPath} exists
|
|
688
|
+
2. If not, run {installCommand}; if that fails, try {installFallbackCommand}
|
|
642
689
|
3. If dependencies cannot be fully installed, mark as "environment issue" in the report and continue
|
|
643
690
|
|
|
644
691
|
## Verification Steps
|
|
645
|
-
1. Run
|
|
646
|
-
2. Run
|
|
647
|
-
3. Run
|
|
692
|
+
1. Run {lintCommand} to check code style
|
|
693
|
+
2. Run {buildCommand} to check compilation
|
|
694
|
+
3. Run {testFilesCommand} to run relevant tests
|
|
648
695
|
4. Check code changes against {planDir}/01-plan.md implementation plan consistency
|
|
649
696
|
5. Check if all items in {planDir}/01-plan.md Todolist are completed
|
|
650
697
|
|
|
651
698
|
## Known Pre-existing Issues (can be ignored)
|
|
652
|
-
|
|
699
|
+
{knownIssuesSection}
|
|
653
700
|
- If a lint/build/test failure **does not involve files changed in this PR**, mark as "pre-existing issue"
|
|
654
701
|
|
|
655
702
|
Write verification results to {planDir}/02-verify-report.md, including:
|
|
@@ -705,7 +752,7 @@ Please read first:
|
|
|
705
752
|
## Implementation Requirements
|
|
706
753
|
1. Strictly follow the Todolist in 01-plan.md, completing items one by one
|
|
707
754
|
2. After completing each item, update its checkbox status in 01-plan.md (- [ ] \u2192 - [x])
|
|
708
|
-
3. Strictly follow code standards in CLAUDE.md (
|
|
755
|
+
3. Strictly follow code standards in CLAUDE.md ({codeStyleDescription})
|
|
709
756
|
4. Don't over-engineer, only implement what's required in the plan
|
|
710
757
|
5. Ensure code security, avoid OWASP Top 10 vulnerabilities`,
|
|
711
758
|
"prompt.rePlan": `You are a senior technical lead. The previous implementation plan was not approved. Please modify the plan based on review feedback.
|
|
@@ -733,7 +780,50 @@ Only output document content, no other explanations. Do not modify any code file
|
|
|
733
780
|
"prompt.e2eSuffix.intro": "E2E UI auto-verification is enabled for this change. Please perform the following additional steps:",
|
|
734
781
|
"prompt.e2eSuffix.previewNote": "**Preview environment is running (managed by the system, no manual startup needed):**",
|
|
735
782
|
"prompt.e2eSuffix.backend": "Backend",
|
|
736
|
-
"prompt.e2eSuffix.frontend": "Frontend"
|
|
783
|
+
"prompt.e2eSuffix.frontend": "Frontend",
|
|
784
|
+
// Conflict resolution
|
|
785
|
+
"conflict.startComment": "\u{1F527} **Merge Conflict Resolution Started**\n\nAttempting to rebase branch `{branch}` onto latest `{baseBranch}`...",
|
|
786
|
+
"conflict.noConflictComment": "\u2705 **Rebase Successful, No Conflicts**\n\nBranch `{branch}` has been successfully rebased onto latest `{baseBranch}`, no conflict resolution needed.",
|
|
787
|
+
"conflict.resolvedComment": "\u2705 **Merge Conflict Resolution Completed**\n\nBranch `{branch}` has been successfully rebased onto latest `{baseBranch}`, all conflicts have been automatically resolved and verified.",
|
|
788
|
+
"conflict.failedComment": "\u274C **Merge Conflict Resolution Failed**\n\n{error}\n\nYou can retry with `@issue-auto fix-conflict`.",
|
|
789
|
+
"conflict.mrResolvedComment": "\u2705 **Merge conflicts have been automatically resolved**\n\nThe source branch of this MR has been successfully rebased onto the latest target branch, conflicts have been automatically resolved. Please re-review the changes.",
|
|
790
|
+
"conflict.startedMsg": "\u{1F527} Conflict resolution started, please wait...",
|
|
791
|
+
"conflict.invalidState": "Current state does not allow conflict resolution (current: {state}). Only allowed when Completed or after conflict resolution failure.",
|
|
792
|
+
"conflict.noMr": "Issue #{iid} has no associated MR, cannot perform conflict resolution.",
|
|
793
|
+
// Auto-update messages
|
|
794
|
+
"update.checking": "Checking for updates...",
|
|
795
|
+
"update.available": "New version available: v{latestVersion} (current: v{currentVersion})",
|
|
796
|
+
"update.upToDate": "Already up to date (v{currentVersion})",
|
|
797
|
+
"update.draining": "Waiting for active issues to complete...",
|
|
798
|
+
"update.updating": "Updating to v{version}...",
|
|
799
|
+
"update.completed": "Update completed, service will restart automatically",
|
|
800
|
+
"update.failed": "Update failed: {error}",
|
|
801
|
+
"prompt.conflictResolve": `You are a senior software engineer handling merge conflicts during a Git rebase operation.
|
|
802
|
+
|
|
803
|
+
## Context
|
|
804
|
+
- Issue IID: #{iid}
|
|
805
|
+
- Branch: \`{branch}\` is being rebased onto \`{baseBranch}\`
|
|
806
|
+
- Conflicting files:
|
|
807
|
+
{conflictFilesList}
|
|
808
|
+
|
|
809
|
+
## Task
|
|
810
|
+
Please resolve the conflicts in each file listed above:
|
|
811
|
+
|
|
812
|
+
1. Open each conflicting file and carefully read the conflict markers (<<<<<<< HEAD / ======= / >>>>>>> ...)
|
|
813
|
+
2. Understand the intent of both sides:
|
|
814
|
+
- HEAD (current branch) changes
|
|
815
|
+
- Incoming branch changes
|
|
816
|
+
3. Correctly merge the code, ensuring:
|
|
817
|
+
- Meaningful changes from both sides are preserved
|
|
818
|
+
- All conflict markers are completely removed (<<<<<<<, =======, >>>>>>>)
|
|
819
|
+
- The merged code is logically complete, compilable, and runnable
|
|
820
|
+
4. If a conflict involves structural changes (e.g., function signature changes), ensure all references are updated accordingly
|
|
821
|
+
|
|
822
|
+
## Important
|
|
823
|
+
- Do not leave any conflict markers
|
|
824
|
+
- Do not introduce new bugs
|
|
825
|
+
- Maintain consistent code style
|
|
826
|
+
- Only modify conflicting files, do not make additional code changes`
|
|
737
827
|
};
|
|
738
828
|
|
|
739
829
|
// src/i18n/index.ts
|
|
@@ -767,4 +857,4 @@ export {
|
|
|
767
857
|
setLocale,
|
|
768
858
|
t
|
|
769
859
|
};
|
|
770
|
-
//# sourceMappingURL=chunk-
|
|
860
|
+
//# sourceMappingURL=chunk-JFYAXNNS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/locales/zh-CN.ts","../src/i18n/locales/en.ts","../src/i18n/index.ts"],"sourcesContent":["export const zhCN: Record<string, string> = {\n // Phase labels\n 'phase.analysis': '分析',\n 'phase.design': '设计',\n 'phase.implement': '实现',\n 'phase.verify': '验证',\n 'phase.plan': '规划',\n 'phase.build': '实施',\n 'phase.review': '审核',\n\n // Pipeline phase labels (used in PipelineDefinition)\n 'pipeline.phase.analysis': '分析',\n 'pipeline.phase.design': '设计',\n 'pipeline.phase.implement': '实施',\n 'pipeline.phase.verify': '验证',\n 'pipeline.phase.plan': '规划',\n 'pipeline.phase.review': '审核',\n 'pipeline.phase.build': '实施',\n\n // Plan file labels\n 'planFile.01-analysis.md': '需求分析',\n 'planFile.02-design.md': '系统设计',\n 'planFile.03-todolist.md': '实施清单',\n 'planFile.04-verify-report.md': '验证报告',\n 'planFile.01-plan.md': '实施计划',\n 'planFile.02-verify-report.md': '验证报告',\n 'planFile.review-feedback.md': '审核反馈',\n 'planFile.review-history.json': '审核历史',\n\n // State labels (from collectStateLabels)\n 'state.pending': '待处理',\n 'state.branchCreated': '分支已创建',\n 'state.completed': '已完成',\n 'state.failed': '失败',\n 'state.resolvingConflict': '冲突修复中',\n 'state.phaseDoing': '{label}中',\n 'state.phaseDone': '{label}完成',\n 'state.phaseApproved': '{label}通过',\n\n // Orchestrator messages\n 'orchestrator.retryComment': '🔄 **自动处理重试中**\\n\\n检测到之前处理失败,正在重试...',\n 'orchestrator.startComment': '🚀 **自动处理开始**\\n\\n已检测到 `auto-finish` 标签,开始自动分析和实施。',\n 'orchestrator.fetchProgress': '正在拉取最新代码...',\n 'orchestrator.worktreeProgress': '正在准备工作目录...',\n 'orchestrator.installProgress': '正在安装项目依赖 (pnpm install)...',\n 'orchestrator.initPlanProgress': '正在初始化计划目录...',\n 'orchestrator.phaseStartProgress': '准备就绪,开始执行阶段 (从 {phase} 开始)...',\n 'orchestrator.autoApproveComment': '⚡ **审核自动通过**\\n\\n检测到标签匹配 `autoApproveLabels` 配置,已自动跳过审核进入实施阶段。',\n 'orchestrator.createMrProgress': '正在创建合并请求...',\n 'orchestrator.uploadScreenshotsProgress': '正在上传 E2E 截图...',\n 'orchestrator.mrSection': '\\n\\n🔗 合并请求: {mrUrl}',\n 'orchestrator.mrFailSection': '\\n\\n⚠️ 合并请求创建失败,请手动创建。',\n 'orchestrator.completedComment': '✅ **自动处理完成**\\n\\n所有阶段已完成。分支: `{branch}`{mrSection}{previewSection}',\n 'orchestrator.failedComment': '❌ **自动处理失败**\\n\\n{error}\\n\\n将在下次轮询时重试(如果未超过最大重试次数)。',\n 'orchestrator.deployProgress': '正在启动 Preview 环境...',\n 'orchestrator.deployDoneProgress': 'Preview 环境已就绪: {url}',\n 'orchestrator.previewComment.title': '🌐 **Preview Environment 已就绪**',\n 'orchestrator.previewComment.tableHeader': '| 组件 | 地址 |',\n 'orchestrator.previewComment.tableSep': '|------|------|',\n 'orchestrator.previewComment.frontend': '前端',\n 'orchestrator.previewComment.backendApi': '后端 API',\n 'orchestrator.previewComment.hint': '可直接访问前端链接体验本次变更。',\n 'orchestrator.previewComment.expiry': 'Preview 将在 MR 合并后自动清理,或 {hours}h 后过期。',\n\n // BasePhase messages\n 'basePhase.aiStarting': '正在启动 AI Agent ({label})...',\n 'basePhase.rulesSection': '## 项目开发规范参考\\n以下是与本次任务相关的开发规范,请在编码时严格遵循:\\n\\n{rules}',\n 'basePhase.error': '错误: {message}',\n\n // IssuePoller messages\n 'poller.autoApproveComment': '⚡ **审核自动通过**\\n\\n检测到标签匹配 `autoApproveLabels` 配置(匹配: {labels}),已自动跳过审核进入实施阶段。',\n\n // Progress comment\n 'progress.completed': '已完成',\n 'progress.failed': '失败',\n 'progress.inProgress': '进行中',\n 'progress.comment': '{icon} **自动处理进度更新**\\n\\n阶段: **{phase}** — {status}',\n\n // NoteSync messages\n 'notesync.phaseCompleted': '{icon} **{label}阶段完成**',\n 'notesync.viewDoc': '📄 [查看完整{label}文档]({url})',\n 'notesync.viewDashboard': '📊 [在管理面板中查看详情]({url})',\n\n // MergeRequest messages\n 'mr.relatedIssue': '## 关联 Issue',\n 'mr.title': '标题',\n 'mr.branch': '分支',\n 'mr.issueDescription': '## Issue 描述',\n 'mr.noDescription': '(无描述)',\n 'mr.summaryFiles.01-analysis.md': '需求分析',\n 'mr.summaryFiles.01-plan.md': '实施计划',\n 'mr.summaryFiles.02-design.md': '系统设计',\n 'mr.summaryFiles.04-verify-report.md': '验证报告',\n 'mr.summaryFiles.02-verify-report.md': '验证报告',\n 'mr.aiSummary': '## AI 产物摘要',\n 'mr.autoCreated': '*此 MR 由 Issue Auto-Finish 系统自动创建*',\n 'mr.truncated': '...(已截断)',\n\n // Screenshot messages\n 'screenshot.title': '📸 **E2E 测试截图**',\n 'screenshot.truncated': '> ⚠️ 截图数量过多,仅展示前 20 张。',\n\n // Webhook handler\n 'webhook.helpText': [\n '无法识别指令,支持以下命令:',\n '',\n '| 命令 | 说明 |',\n '| --- | --- |',\n '| `@issue-auto status` / `状态` | 查询当前处理状态 |',\n '| `@issue-auto retry` / `重试` | 从失败处重试 |',\n '| `@issue-auto retry-from <阶段>` | 从指定阶段重试 |',\n '| `@issue-auto restart` / `重新开始` | 完全重做 |',\n '| `@issue-auto approve` / `通过` | 批准当前方案 |',\n '| `@issue-auto reject <原因>` / `驳回:<原因>` | 驳回方案 |',\n '| `@issue-auto supplement <内容>` / `补充:<内容>` | 补充上下文 |',\n '| `@issue-auto fix-conflict` / `修复冲突` | 自动修复 MR 合并冲突 |',\n '| `@issue-auto clean-notes` / `清理评论` | 删除 Agent 历史评论 |',\n ].join('\\n'),\n\n // Command executor\n 'cmd.previewNotStarted': 'Issue #{iid} 尚未启动 Preview 环境。\\nPreview 会在代码实现完成后自动启动(需启用 E2E 或 Preview 配置)。',\n 'cmd.previewStopped': '⏹ 已停止',\n 'cmd.previewRunning': '✅ 运行中',\n 'cmd.previewTable.component': '组件',\n 'cmd.previewTable.address': '地址',\n 'cmd.previewTable.frontend': '前端',\n 'cmd.previewTable.backendApi': '后端 API',\n 'cmd.previewTable.status': '状态',\n 'cmd.previewTable.startedAt': '启动于',\n 'cmd.noPreview': 'Issue #{iid} 没有正在运行的 Preview 环境。',\n 'cmd.previewStoppedMsg': 'Issue #{iid} 的 Preview 环境已停止。',\n 'cmd.cleanNotesSuccess': '🧹 已清理 {count} 条 Agent 评论。',\n\n // Intent recognizer\n 'intent.systemPrompt': `你是一个指令解析助手。用户会在工蜂(GitLab) Issue 评论中用自然语言描述他们想让自动化系统做什么。\n你需要从用户的评论中提取出结构化的指令。\n\n可用的 intent:\n- retry: 重试失败的任务(从上次失败的地方继续)\n- retry-from: 从指定阶段重新开始(需要提取 phase)\n- supplement: 补充额外的需求信息或上下文\n- approve: 批准/通过当前的设计方案\n- reject: 驳回当前方案(需要提取 feedback)\n- status: 查询当前处理状态\n- restart: 从头开始,完全重做\n\n可用的 phase(仅 retry-from 时需要):\n- analysis: 需求分析阶段\n- design: 系统设计阶段\n- implement: 代码实施阶段\n- verify: 验证测试阶段\n- plan: 规划阶段\n- build: 构建阶段\n\n规则:\n1. 如果用户同时表达了\"重试\"和\"补充信息\",优先使用 retry-from 或 retry 作为 intent,把补充信息放在 context 字段\n2. 如果用户只是在补充说明、提供额外信息,使用 supplement\n3. feedback 字段仅用于 reject 意图\n4. 如果无法判断用户意图,返回 null\n\n严格按以下 JSON 格式返回,不要添加任何其他文字:\n{\"intent\":\"...\",\"phase\":\"...或null\",\"context\":\"...或null\",\"feedback\":\"...或null\"}`,\n\n // API routes\n 'api.invalidFilename': '无效的文件名',\n 'api.docNotGenerated': '文档尚未生成',\n 'api.viewInDashboard': '在管理面板中查看',\n 'api.reviewFeedback': '👀 **方案审核反馈(第 {round} 轮)**',\n 'api.viewPlan': '📄 [查看实施计划]({url})',\n 'api.viewDetail': '📊 [在管理面板中查看详情]({url})',\n\n // Doc labels for api routes\n 'docLabel.01-analysis.md': '需求分析',\n 'docLabel.02-design.md': '系统设计',\n 'docLabel.03-todolist.md': '实施清单',\n 'docLabel.04-verify-report.md': '验证报告',\n 'docLabel.01-plan.md': '实施计划',\n 'docLabel.02-verify-report.md': '验证报告',\n 'docLabel.review-feedback.md': '审核反馈',\n\n // CLI DependencyChecker\n 'cli.nodeInstallHint': '通过 nvm 安装: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && nvm install 20',\n 'cli.cursorInstallHint': '安装 Cursor IDE 后,CLI 自动可用: https://www.cursor.com/',\n 'cli.unknownDep': '未知依赖: {name}',\n 'cli.alreadyInstalled': '{name} 已安装 ({version})',\n 'cli.manualInstall': '{name} 需要手动安装: {hint}',\n 'cli.installing': '正在安装 {name}...',\n 'cli.installSuccess': '{name} 安装成功',\n 'cli.installFailed': '{name} 安装失败 (exit code: {code})',\n\n // Prompt templates\n 'prompt.analysis': `你是需求分析师。请分析以下工蜂 Issue 并输出需求分析文档。\n\n## Issue 信息\n- IID: #{iid}\n- 标题: {title}\n- 描述:\n{description}{supplement}\n\n## 输出要求\n请将分析结果写入 {planDir}/01-analysis.md,内容包括:\n1. **需求概述** — 用简洁的语言总结需求目标\n2. **功能点拆解** — 列出需要实现的具体功能点\n3. **影响范围分析** — 哪些模块/文件可能受到影响\n4. **非功能需求** — 性能、安全、兼容性等方面的考量\n5. **风险和依赖** — 潜在风险和外部依赖\n\n请先阅读项目根目录的 CLAUDE.md 了解项目架构,再进行分析。\n只输出文档内容,不要输出其他说明。`,\n\n 'prompt.design': `你是系统设计师。基于需求分析文档进行系统设计。\n\n## Issue 信息\n- IID: #{iid}\n- 标题: {title}{supplement}\n\n请先阅读:\n- {planDir}/01-analysis.md (需求分析)\n- CLAUDE.md (项目架构)\n\n## 输出要求\n请将设计文档写入 {planDir}/02-design.md,内容包括:\n1. **方案概述** — 整体设计思路\n2. **涉及的文件和模块** — 需要新建/修改的文件列表\n3. **数据模型变更** — 数据库或模型层的变更\n4. **接口设计** — API 接口定义\n5. **详细实施步骤** — 按顺序列出实施步骤\n\n请将实施 Todolist 写入 {planDir}/03-todolist.md,格式:\n- [ ] 步骤1: 具体描述\n- [ ] 步骤2: 具体描述\n...\n\n请确保 Todolist 足够详细,每个步骤可独立执行和验证。`,\n\n 'prompt.implement': `你是开发工程师。请按照设计文档和 Todolist 实施代码变更。\n\n## Issue 信息\n- IID: #{iid}\n- 标题: {title}\n\n请先阅读:\n- {planDir}/01-analysis.md (需求分析)\n- {planDir}/02-design.md (系统设计)\n- {planDir}/03-todolist.md (实施步骤)\n- CLAUDE.md (项目架构和代码规范)\n\n## 实施要求\n1. 逐项完成 03-todolist.md 中的任务\n2. 每完成一项,更新 03-todolist.md 中对应的勾选状态 (- [ ] → - [x])\n3. 严格遵循 CLAUDE.md 中的代码规范({codeStyleDescription})\n4. 不要过度工程化,只实现设计文档中要求的内容\n5. 确保代码安全,避免 OWASP Top 10 漏洞`,\n\n 'prompt.verify': `你是测试工程师。验证代码变更的正确性。\n\n## Issue 信息\n- IID: #{iid}\n- 标题: {title}\n\n## 前置检查\n在执行验证前,先确认依赖环境:\n1. 检查 {dependencyCheckPath} 是否存在\n2. 如不存在,运行 {installCommand};如果失败,尝试 {installFallbackCommand}\n3. 如果依赖始终无法安装完整,在报告中标注为\"环境问题\"并继续后续检查\n\n## 验证步骤\n1. 运行 {lintCommand} 检查代码风格\n2. 运行 {buildCommand} 检查编译\n3. 运行 {testFilesCommand} 运行相关测试\n4. 检查代码变更与 {planDir}/02-design.md 设计文档的一致性\n5. 检查 {planDir}/03-todolist.md 是否所有项都已完成\n\n## 已知的预存问题(忽略即可)\n{knownIssuesSection}\n- 如果某个 lint/build/test 的失败**不涉及本次变更的文件**,标注为\"预存问题\"\n\n将验证结果写入 {planDir}/04-verify-report.md,包括:\n- **Lint 结果**: 通过/失败及详情(区分本次变更 vs 预存问题)\n- **Build 结果**: 通过/失败及详情(区分本次变更 vs 预存问题)\n- **Test 结果**: 通过/失败及详情\n- **设计一致性检查**: 是否符合设计\n- **总结**: 整体评估和建议`,\n\n 'prompt.planModeVerify': `你是测试工程师。验证代码变更的正确性。\n\n## Issue 信息\n- IID: #{iid}\n- 标题: {title}\n\n## 前置检查\n在执行验证前,先确认依赖环境:\n1. 检查 {dependencyCheckPath} 是否存在\n2. 如不存在,运行 {installCommand};如果失败,尝试 {installFallbackCommand}\n3. 如果依赖始终无法安装完整,在报告中标注为\"环境问题\"并继续后续检查\n\n## 验证步骤\n1. 运行 {lintCommand} 检查代码风格\n2. 运行 {buildCommand} 检查编译\n3. 运行 {testFilesCommand} 运行相关测试\n4. 检查代码变更与 {planDir}/01-plan.md 实施计划的一致性\n5. 检查 {planDir}/01-plan.md 中 Todolist 是否所有项都已完成\n\n## 已知的预存问题(忽略即可)\n{knownIssuesSection}\n- 如果某个 lint/build/test 的失败**不涉及本次变更的文件**,标注为\"预存问题\"\n\n将验证结果写入 {planDir}/02-verify-report.md,包括:\n- **Lint 结果**: 通过/失败及详情(区分本次变更 vs 预存问题)\n- **Build 结果**: 通过/失败及详情(区分本次变更 vs 预存问题)\n- **Test 结果**: 通过/失败及详情\n- **计划一致性检查**: 是否符合实施计划\n- **总结**: 整体评估和建议`,\n\n 'prompt.plan': `你是资深技术负责人。请一次性完成需求分析和方案设计。\n\n## Issue 信息\n- IID: #{iid}\n- 标题: {title}\n- 描述:\n{description}{supplement}\n\n## 输出要求\n请先阅读项目根目录的 CLAUDE.md 了解项目架构,再进行分析和设计。\n\n请将完整的实施计划写入 {planDir}/01-plan.md,内容包括:\n\n### 第一部分:需求分析\n1. **需求概述** — 用简洁的语言总结需求目标\n2. **功能点拆解** — 列出需要实现的具体功能点\n3. **影响范围分析** — 哪些模块/文件可能受到影响\n4. **非功能需求** — 性能、安全、兼容性等方面的考量\n5. **风险和依赖** — 潜在风险和外部依赖\n\n### 第二部分:系统设计\n1. **方案概述** — 整体设计思路\n2. **涉及的文件和模块** — 需要新建/修改的文件列表\n3. **数据模型变更** — 数据库或模型层的变更\n4. **接口设计** — API 接口定义\n5. **详细实施步骤** — 按顺序列出实施步骤\n\n### 第三部分:实施 Todolist\n- [ ] 步骤1: 具体描述\n- [ ] 步骤2: 具体描述\n...\n\n请确保 Todolist 足够详细,每个步骤可独立执行和验证。\n只输出文档内容,不要输出其他说明。不要修改任何代码文件。`,\n\n 'prompt.build': `你是开发工程师。请按照实施计划完成代码变更。\n\n## Issue 信息\n- IID: #{iid}\n- 标题: {title}\n\n请先阅读:\n- {planDir}/01-plan.md (完整实施计划,包含需求分析、系统设计和 Todolist)\n- CLAUDE.md (项目架构和代码规范)\n\n## 实施要求\n1. 严格按照 01-plan.md 中的 Todolist 逐项完成\n2. 每完成一项,更新 01-plan.md 中对应的勾选状态 (- [ ] → - [x])\n3. 严格遵循 CLAUDE.md 中的代码规范({codeStyleDescription})\n4. 不要过度工程化,只实现计划中要求的内容\n5. 确保代码安全,避免 OWASP Top 10 漏洞`,\n\n 'prompt.rePlan': `你是资深技术负责人。之前的实施计划未通过审核,请根据审核反馈修改计划。\n\n## Issue 信息\n- IID: #{iid}\n- 标题: {title}\n- 描述:\n{description}{supplement}\n\n## 审核反馈历史(共 {historyCount} 轮)\n{feedbackLines}\n\n请先阅读:\n- {planDir}/01-plan.md (当前实施计划)\n- {planDir}/review-feedback.md (审核反馈完整历史)\n- CLAUDE.md (项目架构)\n\n## 输出要求\n请综合所有轮次的审核反馈修改 {planDir}/01-plan.md,保持相同的文档结构。\n重点关注最新一轮的反馈,同时确保之前轮次提出的问题也已得到解决。\n只输出文档内容,不要输出其他说明。不要修改任何代码文件。`,\n\n 'prompt.rePlanRound': '### 第 {round} 轮 ({timestamp})\\n{feedback}',\n\n 'prompt.e2eSuffix.title': '## E2E UI 验证(已启用)',\n 'prompt.e2eSuffix.intro': '本次变更已开启 E2E UI 自动验收,请额外执行以下步骤:',\n 'prompt.e2eSuffix.previewNote': '**Preview 环境已启动(由系统管理,无需手动启动):**',\n 'prompt.e2eSuffix.backend': '后端',\n 'prompt.e2eSuffix.frontend': '前端',\n\n // Conflict resolution\n 'conflict.startComment': '🔧 **合并冲突修复开始**\\n\\n正在尝试将分支 `{branch}` rebase 到最新的 `{baseBranch}`...',\n 'conflict.noConflictComment': '✅ **Rebase 成功,没有冲突**\\n\\n分支 `{branch}` 已成功 rebase 到最新的 `{baseBranch}`,无需冲突修复。',\n 'conflict.resolvedComment': '✅ **合并冲突修复完成**\\n\\n分支 `{branch}` 已成功 rebase 到最新的 `{baseBranch}`,所有冲突已自动解决并通过验证。',\n 'conflict.failedComment': '❌ **合并冲突修复失败**\\n\\n{error}\\n\\n可通过 `@issue-auto fix-conflict` 重试。',\n 'conflict.mrResolvedComment': '✅ **合并冲突已自动修复**\\n\\n此 MR 的源分支已成功 rebase 到最新的目标分支,冲突已自动解决。请重新审查变更。',\n 'conflict.startedMsg': '🔧 冲突修复已启动,处理中请稍候...',\n 'conflict.invalidState': '当前状态不允许冲突修复(当前: {state})。仅在 Completed 或冲突修复失败后可触发。',\n 'conflict.noMr': 'Issue #{iid} 没有关联的 MR,无法执行冲突修复。',\n\n // Auto-update messages\n 'update.checking': '正在检查更新...',\n 'update.available': '发现新版本: v{latestVersion} (当前: v{currentVersion})',\n 'update.upToDate': '当前已是最新版本 (v{currentVersion})',\n 'update.draining': '正在等待活跃 Issue 完成...',\n 'update.updating': '正在更新到 v{version}...',\n 'update.completed': '更新完成,服务将自动重启',\n 'update.failed': '更新失败: {error}',\n\n 'prompt.conflictResolve': `你是一名资深开发工程师,正在处理 Git rebase 过程中产生的合并冲突。\n\n## 背景\n- Issue IID: #{iid}\n- 分支: \\`{branch}\\` 正在 rebase 到 \\`{baseBranch}\\`\n- 冲突文件列表:\n{conflictFilesList}\n\n## 任务\n请逐一解决上述冲突文件:\n\n1. 打开每个冲突文件,仔细阅读冲突标记(<<<<<<< HEAD / ======= / >>>>>>> ...)\n2. 理解双方修改的意图:\n - HEAD(当前分支)的修改目的\n - 对方分支的修改目的\n3. 正确合并代码,确保:\n - 保留双方有意义的修改\n - 完全移除所有冲突标记(<<<<<<<, =======, >>>>>>>)\n - 合并后的代码逻辑完整、可编译、可运行\n4. 如果某个文件的冲突涉及结构性变更(如函数签名变化),确保所有引用处也同步更新\n\n## 注意事项\n- 不要遗漏任何冲突标记\n- 不要引入新的 bug\n- 保持代码风格一致\n- 只修改冲突文件,不要做额外的代码改动`,\n};\n","export const en: Record<string, string> = {\n // Phase labels\n 'phase.analysis': 'Analysis',\n 'phase.design': 'Design',\n 'phase.implement': 'Implementation',\n 'phase.verify': 'Verification',\n 'phase.plan': 'Planning',\n 'phase.build': 'Build',\n 'phase.review': 'Review',\n\n // Pipeline phase labels\n 'pipeline.phase.analysis': 'Analysis',\n 'pipeline.phase.design': 'Design',\n 'pipeline.phase.implement': 'Implementation',\n 'pipeline.phase.verify': 'Verification',\n 'pipeline.phase.plan': 'Planning',\n 'pipeline.phase.review': 'Review',\n 'pipeline.phase.build': 'Build',\n\n // Plan file labels\n 'planFile.01-analysis.md': 'Requirements Analysis',\n 'planFile.02-design.md': 'System Design',\n 'planFile.03-todolist.md': 'Implementation Checklist',\n 'planFile.04-verify-report.md': 'Verification Report',\n 'planFile.01-plan.md': 'Implementation Plan',\n 'planFile.02-verify-report.md': 'Verification Report',\n 'planFile.review-feedback.md': 'Review Feedback',\n 'planFile.review-history.json': 'Review History',\n\n // State labels\n 'state.pending': 'Pending',\n 'state.branchCreated': 'Branch Created',\n 'state.completed': 'Completed',\n 'state.failed': 'Failed',\n 'state.resolvingConflict': 'Resolving Conflict',\n 'state.phaseDoing': '{label} In Progress',\n 'state.phaseDone': '{label} Done',\n 'state.phaseApproved': '{label} Approved',\n\n // Orchestrator messages\n 'orchestrator.retryComment': '🔄 **Auto-processing Retry**\\n\\nPrevious processing failed, retrying...',\n 'orchestrator.startComment': '🚀 **Auto-processing Started**\\n\\nDetected `auto-finish` label, starting automated analysis and implementation.',\n 'orchestrator.fetchProgress': 'Fetching latest code...',\n 'orchestrator.worktreeProgress': 'Preparing working directory...',\n 'orchestrator.installProgress': 'Installing project dependencies (pnpm install)...',\n 'orchestrator.initPlanProgress': 'Initializing plan directory...',\n 'orchestrator.phaseStartProgress': 'Ready, starting phases (from {phase})...',\n 'orchestrator.autoApproveComment': '⚡ **Review Auto-approved**\\n\\nDetected label matching `autoApproveLabels` configuration, automatically skipping review and proceeding to implementation.',\n 'orchestrator.createMrProgress': 'Creating merge request...',\n 'orchestrator.uploadScreenshotsProgress': 'Uploading E2E screenshots...',\n 'orchestrator.mrSection': '\\n\\n🔗 Merge Request: {mrUrl}',\n 'orchestrator.mrFailSection': '\\n\\n⚠️ Failed to create merge request, please create manually.',\n 'orchestrator.completedComment': '✅ **Auto-processing Completed**\\n\\nAll phases completed. Branch: `{branch}`{mrSection}{previewSection}',\n 'orchestrator.failedComment': '❌ **Auto-processing Failed**\\n\\n{error}\\n\\nWill retry on next poll cycle (if max retries not exceeded).',\n 'orchestrator.deployProgress': 'Starting Preview environment...',\n 'orchestrator.deployDoneProgress': 'Preview environment ready: {url}',\n 'orchestrator.previewComment.title': '🌐 **Preview Environment Ready**',\n 'orchestrator.previewComment.tableHeader': '| Component | Address |',\n 'orchestrator.previewComment.tableSep': '|-----------|---------|',\n 'orchestrator.previewComment.frontend': 'Frontend',\n 'orchestrator.previewComment.backendApi': 'Backend API',\n 'orchestrator.previewComment.hint': 'Visit the frontend link to experience the changes.',\n 'orchestrator.previewComment.expiry': 'Preview will be cleaned up after MR merge, or expires in {hours}h.',\n\n // BasePhase messages\n 'basePhase.aiStarting': 'Starting AI Agent ({label})...',\n 'basePhase.rulesSection': '## Project Development Guidelines\\nThe following are development guidelines related to this task. Please strictly follow them when coding:\\n\\n{rules}',\n 'basePhase.error': 'Error: {message}',\n\n // IssuePoller messages\n 'poller.autoApproveComment': '⚡ **Review Auto-approved**\\n\\nDetected label matching `autoApproveLabels` configuration (matched: {labels}), automatically skipping review and proceeding to implementation.',\n\n // Progress comment\n 'progress.completed': 'Completed',\n 'progress.failed': 'Failed',\n 'progress.inProgress': 'In Progress',\n 'progress.comment': '{icon} **Auto-processing Progress Update**\\n\\nPhase: **{phase}** — {status}',\n\n // NoteSync messages\n 'notesync.phaseCompleted': '{icon} **{label} Phase Completed**',\n 'notesync.viewDoc': '📄 [View full {label} document]({url})',\n 'notesync.viewDashboard': '📊 [View details in dashboard]({url})',\n\n // MergeRequest messages\n 'mr.relatedIssue': '## Related Issue',\n 'mr.title': 'Title',\n 'mr.branch': 'Branch',\n 'mr.issueDescription': '## Issue Description',\n 'mr.noDescription': '(No description)',\n 'mr.summaryFiles.01-analysis.md': 'Requirements Analysis',\n 'mr.summaryFiles.01-plan.md': 'Implementation Plan',\n 'mr.summaryFiles.02-design.md': 'System Design',\n 'mr.summaryFiles.04-verify-report.md': 'Verification Report',\n 'mr.summaryFiles.02-verify-report.md': 'Verification Report',\n 'mr.aiSummary': '## AI Artifacts Summary',\n 'mr.autoCreated': '*This MR was automatically created by Issue Auto-Finish system*',\n 'mr.truncated': '...(truncated)',\n\n // Screenshot messages\n 'screenshot.title': '📸 **E2E Test Screenshots**',\n 'screenshot.truncated': '> ⚠️ Too many screenshots, showing only the first 20.',\n\n // Webhook handler\n 'webhook.helpText': [\n 'Unrecognized command. Available commands:',\n '',\n '| Command | Description |',\n '| --- | --- |',\n '| `@issue-auto status` | Check current processing status |',\n '| `@issue-auto retry` | Retry from failure point |',\n '| `@issue-auto retry-from <phase>` | Retry from specific phase |',\n '| `@issue-auto restart` | Start over from scratch |',\n '| `@issue-auto approve` | Approve current plan |',\n '| `@issue-auto reject <reason>` | Reject plan with feedback |',\n '| `@issue-auto supplement <content>` | Add supplementary context |',\n '| `@issue-auto fix-conflict` | Auto-resolve MR merge conflicts |',\n '| `@issue-auto clean-notes` | Delete agent history notes |',\n ].join('\\n'),\n\n // Command executor\n '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).',\n 'cmd.previewStopped': '⏹ Stopped',\n 'cmd.previewRunning': '✅ Running',\n 'cmd.previewTable.component': 'Component',\n 'cmd.previewTable.address': 'Address',\n 'cmd.previewTable.frontend': 'Frontend',\n 'cmd.previewTable.backendApi': 'Backend API',\n 'cmd.previewTable.status': 'Status',\n 'cmd.previewTable.startedAt': 'Started at',\n 'cmd.noPreview': 'Issue #{iid} does not have a running Preview environment.',\n 'cmd.previewStoppedMsg': 'Preview environment for Issue #{iid} has been stopped.',\n 'cmd.cleanNotesSuccess': '🧹 Cleaned up {count} agent note(s).',\n\n // Intent recognizer\n '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.\nYou need to extract structured commands from user comments.\n\nAvailable intents:\n- retry: Retry failed task (continue from last failure point)\n- retry-from: Restart from a specific phase (need to extract phase)\n- supplement: Add additional requirement info or context\n- approve: Approve/pass the current design plan\n- reject: Reject current plan (need to extract feedback)\n- status: Query current processing status\n- restart: Start from scratch, redo everything\n\nAvailable phases (only needed for retry-from):\n- analysis: Requirements analysis phase\n- design: System design phase\n- implement: Code implementation phase\n- verify: Verification testing phase\n- plan: Planning phase\n- build: Build phase\n\nRules:\n1. If user expresses both \"retry\" and \"supplement info\", prioritize retry-from or retry as intent, put supplement info in context field\n2. If user is only supplementing/providing additional info, use supplement\n3. feedback field is only for reject intent\n4. If unable to determine user intent, return null\n\nStrictly return in the following JSON format, do not add any other text:\n{\"intent\":\"...\",\"phase\":\"...or null\",\"context\":\"...or null\",\"feedback\":\"...or null\"}`,\n\n // API routes\n 'api.invalidFilename': 'Invalid filename',\n 'api.docNotGenerated': 'Document not yet generated',\n 'api.viewInDashboard': 'View in dashboard',\n 'api.reviewFeedback': '👀 **Plan Review Feedback (Round {round})**',\n 'api.viewPlan': '📄 [View implementation plan]({url})',\n 'api.viewDetail': '📊 [View details in dashboard]({url})',\n\n // Doc labels for api routes\n 'docLabel.01-analysis.md': 'Requirements Analysis',\n 'docLabel.02-design.md': 'System Design',\n 'docLabel.03-todolist.md': 'Implementation Checklist',\n 'docLabel.04-verify-report.md': 'Verification Report',\n 'docLabel.01-plan.md': 'Implementation Plan',\n 'docLabel.02-verify-report.md': 'Verification Report',\n 'docLabel.review-feedback.md': 'Review Feedback',\n\n // CLI DependencyChecker\n 'cli.nodeInstallHint': 'Install via nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && nvm install 20',\n 'cli.cursorInstallHint': 'Install Cursor IDE, CLI will be available automatically: https://www.cursor.com/',\n 'cli.unknownDep': 'Unknown dependency: {name}',\n 'cli.alreadyInstalled': '{name} already installed ({version})',\n 'cli.manualInstall': '{name} requires manual installation: {hint}',\n 'cli.installing': 'Installing {name}...',\n 'cli.installSuccess': '{name} installed successfully',\n 'cli.installFailed': '{name} installation failed (exit code: {code})',\n\n // Prompt templates\n 'prompt.analysis': `You are a requirements analyst. Please analyze the following Gongfeng Issue and output a requirements analysis document.\n\n## Issue Information\n- IID: #{iid}\n- Title: {title}\n- Description:\n{description}{supplement}\n\n## Output Requirements\nPlease write the analysis results to {planDir}/01-analysis.md, including:\n1. **Requirements Overview** — Summarize the requirements goal concisely\n2. **Feature Breakdown** — List specific features to implement\n3. **Impact Analysis** — Which modules/files may be affected\n4. **Non-functional Requirements** — Performance, security, compatibility considerations\n5. **Risks and Dependencies** — Potential risks and external dependencies\n\nPlease read the project's CLAUDE.md first to understand the architecture, then proceed with analysis.\nOnly output document content, no other explanations.`,\n\n 'prompt.design': `You are a system designer. Design the system based on the requirements analysis document.\n\n## Issue Information\n- IID: #{iid}\n- Title: {title}{supplement}\n\nPlease read first:\n- {planDir}/01-analysis.md (Requirements Analysis)\n- CLAUDE.md (Project Architecture)\n\n## Output Requirements\nPlease write the design document to {planDir}/02-design.md, including:\n1. **Solution Overview** — Overall design approach\n2. **Files and Modules Involved** — List of files to create/modify\n3. **Data Model Changes** — Database or model layer changes\n4. **API Design** — API interface definitions\n5. **Detailed Implementation Steps** — Step-by-step implementation plan\n\nPlease write the implementation Todolist to {planDir}/03-todolist.md, format:\n- [ ] Step 1: Specific description\n- [ ] Step 2: Specific description\n...\n\nEnsure the Todolist is detailed enough that each step can be independently executed and verified.`,\n\n 'prompt.implement': `You are a software engineer. Please implement code changes according to the design document and Todolist.\n\n## Issue Information\n- IID: #{iid}\n- Title: {title}\n\nPlease read first:\n- {planDir}/01-analysis.md (Requirements Analysis)\n- {planDir}/02-design.md (System Design)\n- {planDir}/03-todolist.md (Implementation Steps)\n- CLAUDE.md (Project Architecture and Code Standards)\n\n## Implementation Requirements\n1. Complete tasks in 03-todolist.md one by one\n2. After completing each item, update its checkbox status in 03-todolist.md (- [ ] → - [x])\n3. Strictly follow code standards in CLAUDE.md ({codeStyleDescription})\n4. Don't over-engineer, only implement what's required in the design document\n5. Ensure code security, avoid OWASP Top 10 vulnerabilities`,\n\n 'prompt.verify': `You are a test engineer. Verify the correctness of code changes.\n\n## Issue Information\n- IID: #{iid}\n- Title: {title}\n\n## Pre-checks\nBefore running verification, confirm the dependency environment:\n1. Check if {dependencyCheckPath} exists\n2. If not, run {installCommand}; if that fails, try {installFallbackCommand}\n3. If dependencies cannot be fully installed, mark as \"environment issue\" in the report and continue\n\n## Verification Steps\n1. Run {lintCommand} to check code style\n2. Run {buildCommand} to check compilation\n3. Run {testFilesCommand} to run relevant tests\n4. Check code changes against {planDir}/02-design.md design document consistency\n5. Check if all items in {planDir}/03-todolist.md are completed\n\n## Known Pre-existing Issues (can be ignored)\n{knownIssuesSection}\n- If a lint/build/test failure **does not involve files changed in this PR**, mark as \"pre-existing issue\"\n\nWrite verification results to {planDir}/04-verify-report.md, including:\n- **Lint Results**: Pass/fail with details (distinguish current changes vs pre-existing issues)\n- **Build Results**: Pass/fail with details (distinguish current changes vs pre-existing issues)\n- **Test Results**: Pass/fail with details\n- **Design Consistency Check**: Whether it matches the design\n- **Summary**: Overall assessment and recommendations`,\n\n 'prompt.planModeVerify': `You are a test engineer. Verify the correctness of code changes.\n\n## Issue Information\n- IID: #{iid}\n- Title: {title}\n\n## Pre-checks\nBefore running verification, confirm the dependency environment:\n1. Check if {dependencyCheckPath} exists\n2. If not, run {installCommand}; if that fails, try {installFallbackCommand}\n3. If dependencies cannot be fully installed, mark as \"environment issue\" in the report and continue\n\n## Verification Steps\n1. Run {lintCommand} to check code style\n2. Run {buildCommand} to check compilation\n3. Run {testFilesCommand} to run relevant tests\n4. Check code changes against {planDir}/01-plan.md implementation plan consistency\n5. Check if all items in {planDir}/01-plan.md Todolist are completed\n\n## Known Pre-existing Issues (can be ignored)\n{knownIssuesSection}\n- If a lint/build/test failure **does not involve files changed in this PR**, mark as \"pre-existing issue\"\n\nWrite verification results to {planDir}/02-verify-report.md, including:\n- **Lint Results**: Pass/fail with details (distinguish current changes vs pre-existing issues)\n- **Build Results**: Pass/fail with details (distinguish current changes vs pre-existing issues)\n- **Test Results**: Pass/fail with details\n- **Plan Consistency Check**: Whether it matches the implementation plan\n- **Summary**: Overall assessment and recommendations`,\n\n 'prompt.plan': `You are a senior technical lead. Please complete requirements analysis and solution design in one go.\n\n## Issue Information\n- IID: #{iid}\n- Title: {title}\n- Description:\n{description}{supplement}\n\n## Output Requirements\nPlease read the project's CLAUDE.md first to understand the architecture, then proceed with analysis and design.\n\nPlease write the complete implementation plan to {planDir}/01-plan.md, including:\n\n### Part 1: Requirements Analysis\n1. **Requirements Overview** — Summarize the requirements goal concisely\n2. **Feature Breakdown** — List specific features to implement\n3. **Impact Analysis** — Which modules/files may be affected\n4. **Non-functional Requirements** — Performance, security, compatibility considerations\n5. **Risks and Dependencies** — Potential risks and external dependencies\n\n### Part 2: System Design\n1. **Solution Overview** — Overall design approach\n2. **Files and Modules Involved** — List of files to create/modify\n3. **Data Model Changes** — Database or model layer changes\n4. **API Design** — API interface definitions\n5. **Detailed Implementation Steps** — Step-by-step implementation plan\n\n### Part 3: Implementation Todolist\n- [ ] Step 1: Specific description\n- [ ] Step 2: Specific description\n...\n\nEnsure the Todolist is detailed enough that each step can be independently executed and verified.\nOnly output document content, no other explanations. Do not modify any code files.`,\n\n 'prompt.build': `You are a software engineer. Please complete code changes according to the implementation plan.\n\n## Issue Information\n- IID: #{iid}\n- Title: {title}\n\nPlease read first:\n- {planDir}/01-plan.md (Complete implementation plan including requirements analysis, system design and Todolist)\n- CLAUDE.md (Project Architecture and Code Standards)\n\n## Implementation Requirements\n1. Strictly follow the Todolist in 01-plan.md, completing items one by one\n2. After completing each item, update its checkbox status in 01-plan.md (- [ ] → - [x])\n3. Strictly follow code standards in CLAUDE.md ({codeStyleDescription})\n4. Don't over-engineer, only implement what's required in the plan\n5. Ensure code security, avoid OWASP Top 10 vulnerabilities`,\n\n 'prompt.rePlan': `You are a senior technical lead. The previous implementation plan was not approved. Please modify the plan based on review feedback.\n\n## Issue Information\n- IID: #{iid}\n- Title: {title}\n- Description:\n{description}{supplement}\n\n## Review Feedback History ({historyCount} rounds)\n{feedbackLines}\n\nPlease read first:\n- {planDir}/01-plan.md (Current implementation plan)\n- {planDir}/review-feedback.md (Complete review feedback history)\n- CLAUDE.md (Project Architecture)\n\n## Output Requirements\nPlease modify {planDir}/01-plan.md incorporating all rounds of review feedback, maintaining the same document structure.\nFocus on the latest round of feedback while ensuring issues raised in previous rounds are also resolved.\nOnly output document content, no other explanations. Do not modify any code files.`,\n\n 'prompt.rePlanRound': '### Round {round} ({timestamp})\\n{feedback}',\n\n 'prompt.e2eSuffix.title': '## E2E UI Verification (Enabled)',\n 'prompt.e2eSuffix.intro': 'E2E UI auto-verification is enabled for this change. Please perform the following additional steps:',\n 'prompt.e2eSuffix.previewNote': '**Preview environment is running (managed by the system, no manual startup needed):**',\n 'prompt.e2eSuffix.backend': 'Backend',\n 'prompt.e2eSuffix.frontend': 'Frontend',\n\n // Conflict resolution\n 'conflict.startComment': '🔧 **Merge Conflict Resolution Started**\\n\\nAttempting to rebase branch `{branch}` onto latest `{baseBranch}`...',\n 'conflict.noConflictComment': '✅ **Rebase Successful, No Conflicts**\\n\\nBranch `{branch}` has been successfully rebased onto latest `{baseBranch}`, no conflict resolution needed.',\n 'conflict.resolvedComment': '✅ **Merge Conflict Resolution Completed**\\n\\nBranch `{branch}` has been successfully rebased onto latest `{baseBranch}`, all conflicts have been automatically resolved and verified.',\n 'conflict.failedComment': '❌ **Merge Conflict Resolution Failed**\\n\\n{error}\\n\\nYou can retry with `@issue-auto fix-conflict`.',\n 'conflict.mrResolvedComment': '✅ **Merge conflicts have been automatically resolved**\\n\\nThe source branch of this MR has been successfully rebased onto the latest target branch, conflicts have been automatically resolved. Please re-review the changes.',\n 'conflict.startedMsg': '🔧 Conflict resolution started, please wait...',\n 'conflict.invalidState': 'Current state does not allow conflict resolution (current: {state}). Only allowed when Completed or after conflict resolution failure.',\n 'conflict.noMr': 'Issue #{iid} has no associated MR, cannot perform conflict resolution.',\n\n // Auto-update messages\n 'update.checking': 'Checking for updates...',\n 'update.available': 'New version available: v{latestVersion} (current: v{currentVersion})',\n 'update.upToDate': 'Already up to date (v{currentVersion})',\n 'update.draining': 'Waiting for active issues to complete...',\n 'update.updating': 'Updating to v{version}...',\n 'update.completed': 'Update completed, service will restart automatically',\n 'update.failed': 'Update failed: {error}',\n\n 'prompt.conflictResolve': `You are a senior software engineer handling merge conflicts during a Git rebase operation.\n\n## Context\n- Issue IID: #{iid}\n- Branch: \\`{branch}\\` is being rebased onto \\`{baseBranch}\\`\n- Conflicting files:\n{conflictFilesList}\n\n## Task\nPlease resolve the conflicts in each file listed above:\n\n1. Open each conflicting file and carefully read the conflict markers (<<<<<<< HEAD / ======= / >>>>>>> ...)\n2. Understand the intent of both sides:\n - HEAD (current branch) changes\n - Incoming branch changes\n3. Correctly merge the code, ensuring:\n - Meaningful changes from both sides are preserved\n - All conflict markers are completely removed (<<<<<<<, =======, >>>>>>>)\n - The merged code is logically complete, compilable, and runnable\n4. If a conflict involves structural changes (e.g., function signature changes), ensure all references are updated accordingly\n\n## Important\n- Do not leave any conflict markers\n- Do not introduce new bugs\n- Maintain consistent code style\n- Only modify conflicting files, do not make additional code changes`,\n};\n","export type Locale = 'zh-CN' | 'en';\n\ntype MessageMap = Record<string, string>;\n\nconst locales = new Map<Locale, MessageMap>();\nlet currentLocale: Locale = 'zh-CN';\n\nexport function setLocale(locale: Locale): void {\n currentLocale = locale;\n}\n\nexport function getLocale(): Locale {\n return currentLocale;\n}\n\nexport function registerLocale(locale: Locale, messages: MessageMap): void {\n locales.set(locale, messages);\n}\n\nexport function t(key: string, params?: Record<string, string | number>): string {\n const messages = locales.get(currentLocale) ?? locales.get('zh-CN');\n if (!messages) return key;\n let text = messages[key];\n if (text === undefined) {\n const fallback = locales.get('zh-CN');\n text = fallback?.[key] ?? key;\n }\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n text = text.replaceAll(`{${k}}`, String(v));\n }\n }\n return text;\n}\n\nimport { zhCN } from './locales/zh-CN.js';\nimport { en } from './locales/en.js';\n\nregisterLocale('zh-CN', zhCN);\nregisterLocale('en', en);\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
// src/config.ts
|
|
2
|
+
import { config as loadDotenv } from "dotenv";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import os from "os";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
var __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
function resolveEnvPath() {
|
|
9
|
+
if (process.env.IAF_CONFIG_PATH) return process.env.IAF_CONFIG_PATH;
|
|
10
|
+
const localEnv = path.resolve(__dirname, "../.env");
|
|
11
|
+
if (fs.existsSync(localEnv)) return localEnv;
|
|
12
|
+
const cwdEnv = path.resolve(process.cwd(), ".env");
|
|
13
|
+
if (fs.existsSync(cwdEnv)) return cwdEnv;
|
|
14
|
+
const globalEnv = path.join(os.homedir(), ".issue-auto-finish", ".env");
|
|
15
|
+
if (fs.existsSync(globalEnv)) return globalEnv;
|
|
16
|
+
return localEnv;
|
|
17
|
+
}
|
|
18
|
+
var _dotenvLoaded = false;
|
|
19
|
+
function ensureDotenvLoaded() {
|
|
20
|
+
if (_dotenvLoaded) return;
|
|
21
|
+
_dotenvLoaded = true;
|
|
22
|
+
loadDotenv({ path: resolveEnvPath() });
|
|
23
|
+
}
|
|
24
|
+
var DEFAULT_AI_MODEL = "Claude-4.6-Opus";
|
|
25
|
+
function requireEnv(key) {
|
|
26
|
+
const val = process.env[key];
|
|
27
|
+
if (!val) {
|
|
28
|
+
throw new Error(`Missing required environment variable: ${key}`);
|
|
29
|
+
}
|
|
30
|
+
return val;
|
|
31
|
+
}
|
|
32
|
+
function optionalEnv(key, defaultValue) {
|
|
33
|
+
return process.env[key] || defaultValue;
|
|
34
|
+
}
|
|
35
|
+
function loadConfig() {
|
|
36
|
+
ensureDotenvLoaded();
|
|
37
|
+
return {
|
|
38
|
+
gongfeng: {
|
|
39
|
+
apiUrl: requireEnv("GONGFENG_API_URL"),
|
|
40
|
+
privateToken: requireEnv("GONGFENG_PRIVATE_TOKEN"),
|
|
41
|
+
projectPath: requireEnv("GONGFENG_PROJECT_PATH")
|
|
42
|
+
},
|
|
43
|
+
project: {
|
|
44
|
+
workDir: requireEnv("PROJECT_WORK_DIR"),
|
|
45
|
+
gitRootDir: optionalEnv("GIT_ROOT_DIR", requireEnv("PROJECT_WORK_DIR")),
|
|
46
|
+
baseBranch: optionalEnv("BASE_BRANCH", "master"),
|
|
47
|
+
branchPrefix: optionalEnv("BRANCH_PREFIX", "feat/issue"),
|
|
48
|
+
worktreeBaseDir: optionalEnv("WORKTREE_BASE_DIR", ""),
|
|
49
|
+
projectSubDir: optionalEnv("PROJECT_SUBDIR", "")
|
|
50
|
+
},
|
|
51
|
+
claude: {
|
|
52
|
+
binary: optionalEnv("CLAUDE_BINARY", "claude-internal"),
|
|
53
|
+
phaseTimeoutMs: parseInt(optionalEnv("CLAUDE_PHASE_TIMEOUT_MS", "1800000"), 10),
|
|
54
|
+
nvmNodeVersion: optionalEnv("NVM_NODE_VERSION", "20")
|
|
55
|
+
},
|
|
56
|
+
ai: buildAIConfig(),
|
|
57
|
+
poll: {
|
|
58
|
+
intervalMs: parseInt(optionalEnv("POLL_INTERVAL_MS", "60000"), 10),
|
|
59
|
+
discoveryIntervalMs: parseInt(
|
|
60
|
+
optionalEnv("POLL_DISCOVERY_INTERVAL_MS", optionalEnv("POLL_INTERVAL_MS", "60000")),
|
|
61
|
+
10
|
|
62
|
+
),
|
|
63
|
+
driveIntervalMs: parseInt(optionalEnv("POLL_DRIVE_INTERVAL_MS", "15000"), 10),
|
|
64
|
+
maxRetries: parseInt(optionalEnv("MAX_RETRIES", "3"), 10),
|
|
65
|
+
maxConcurrent: parseInt(optionalEnv("MAX_CONCURRENT_ISSUES", "3"), 10)
|
|
66
|
+
},
|
|
67
|
+
pipeline: {
|
|
68
|
+
mode: optionalEnv("PIPELINE_MODE", "auto")
|
|
69
|
+
},
|
|
70
|
+
review: {
|
|
71
|
+
enabled: optionalEnv("REVIEW_ENABLED", "true") === "true",
|
|
72
|
+
autoApproveLabels: optionalEnv("REVIEW_AUTO_APPROVE_LABELS", "").split(",").map((s) => s.trim()).filter(Boolean)
|
|
73
|
+
},
|
|
74
|
+
web: {
|
|
75
|
+
enabled: optionalEnv("WEB_ENABLED", "true") === "true",
|
|
76
|
+
port: parseInt(optionalEnv("WEB_PORT", "3000"), 10),
|
|
77
|
+
frontendDistDir: optionalEnv(
|
|
78
|
+
"FRONTEND_DIST_DIR",
|
|
79
|
+
path.resolve(process.cwd(), "src/web/frontend/dist")
|
|
80
|
+
)
|
|
81
|
+
},
|
|
82
|
+
issueNoteSync: {
|
|
83
|
+
enabled: optionalEnv("ISSUE_NOTE_SYNC_ENABLED", "true") === "true",
|
|
84
|
+
webBaseUrl: optionalEnv(
|
|
85
|
+
"WEB_BASE_URL",
|
|
86
|
+
`http://localhost:${optionalEnv("WEB_PORT", "3000")}`
|
|
87
|
+
)
|
|
88
|
+
},
|
|
89
|
+
webhook: {
|
|
90
|
+
enabled: optionalEnv("WEBHOOK_ENABLED", "false") === "true",
|
|
91
|
+
port: parseInt(optionalEnv("WEBHOOK_PORT", "8081"), 10),
|
|
92
|
+
secret: optionalEnv("WEBHOOK_SECRET", ""),
|
|
93
|
+
llmFallback: optionalEnv("WEBHOOK_LLM_FALLBACK", "true") === "true",
|
|
94
|
+
llmBinary: optionalEnv("WEBHOOK_LLM_BINARY", "claude-internal")
|
|
95
|
+
},
|
|
96
|
+
e2e: {
|
|
97
|
+
enabled: optionalEnv("E2E_UI_ENABLED", "false") === "true",
|
|
98
|
+
baseUrl: optionalEnv("E2E_BASE_URL", "https://localhost:8890"),
|
|
99
|
+
backendUrl: optionalEnv("E2E_BACKEND_URL", "http://127.0.0.1:3000"),
|
|
100
|
+
authCookies: optionalEnv("E2E_AUTH_COOKIES", "[]"),
|
|
101
|
+
backendPortBase: parseInt(optionalEnv("E2E_BACKEND_PORT_BASE", "4000"), 10),
|
|
102
|
+
frontendPortBase: parseInt(optionalEnv("E2E_FRONTEND_PORT_BASE", "9000"), 10)
|
|
103
|
+
},
|
|
104
|
+
preview: {
|
|
105
|
+
enabled: optionalEnv("PREVIEW_ENABLED", "false") === "true",
|
|
106
|
+
host: optionalEnv("PREVIEW_HOST", ""),
|
|
107
|
+
ttlMs: parseInt(optionalEnv("PREVIEW_TTL_MS", String(24 * 60 * 60 * 1e3)), 10),
|
|
108
|
+
keepAfterComplete: optionalEnv("PREVIEW_KEEP_AFTER_COMPLETE", "true") === "true"
|
|
109
|
+
},
|
|
110
|
+
brainstorm: {
|
|
111
|
+
enabled: optionalEnv("BRAINSTORM_ENABLED", "true") === "true",
|
|
112
|
+
maxRefinementRounds: parseInt(optionalEnv("BRAINSTORM_MAX_ROUNDS", "5"), 10),
|
|
113
|
+
timeoutMs: parseInt(optionalEnv("BRAINSTORM_TIMEOUT_MS", "600000"), 10),
|
|
114
|
+
generator: buildBrainstormAgentConfig("GENERATOR"),
|
|
115
|
+
reviewer: buildBrainstormAgentConfig("REVIEWER")
|
|
116
|
+
},
|
|
117
|
+
chat: {
|
|
118
|
+
enabled: optionalEnv("CHAT_ENABLED", "true") === "true",
|
|
119
|
+
timeoutMs: parseInt(optionalEnv("CHAT_TIMEOUT_MS", "300000"), 10),
|
|
120
|
+
maxSessionMessages: parseInt(optionalEnv("CHAT_MAX_SESSION_MESSAGES", "100"), 10),
|
|
121
|
+
agent: buildChatAgentConfig()
|
|
122
|
+
},
|
|
123
|
+
autoUpdate: {
|
|
124
|
+
enabled: optionalEnv("AUTO_UPDATE_ENABLED", "true") === "true",
|
|
125
|
+
intervalMs: parseInt(optionalEnv("AUTO_UPDATE_INTERVAL_MS", "600000"), 10),
|
|
126
|
+
registry: optionalEnv("AUTO_UPDATE_REGISTRY", "https://registry.npmjs.org"),
|
|
127
|
+
drainTimeoutMs: parseInt(optionalEnv("AUTO_UPDATE_DRAIN_TIMEOUT_MS", "300000"), 10)
|
|
128
|
+
},
|
|
129
|
+
iwiki: {
|
|
130
|
+
authCookie: process.env.IWIKI_AUTH_COOKIE || void 0,
|
|
131
|
+
authToken: process.env.IWIKI_AUTH_TOKEN || void 0,
|
|
132
|
+
baseUrl: process.env.IWIKI_BASE_URL || void 0
|
|
133
|
+
},
|
|
134
|
+
locale: optionalEnv("LOCALE", "zh-CN") === "en" ? "en" : "zh-CN",
|
|
135
|
+
knowledgePath: process.env.KNOWLEDGE_PATH || void 0
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function resolveAIRunnerMode(raw) {
|
|
139
|
+
if (raw === "cursor-agent") return "cursor-agent";
|
|
140
|
+
if (raw === "codebuddy") return "codebuddy";
|
|
141
|
+
return "claude-internal";
|
|
142
|
+
}
|
|
143
|
+
function resolveAIBinary(mode) {
|
|
144
|
+
switch (mode) {
|
|
145
|
+
case "cursor-agent":
|
|
146
|
+
return optionalEnv("CURSOR_BINARY", "cursor");
|
|
147
|
+
case "codebuddy":
|
|
148
|
+
return optionalEnv("CODEBUDDY_BINARY", "codebuddy");
|
|
149
|
+
default:
|
|
150
|
+
return optionalEnv("CLAUDE_BINARY", "claude-internal");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function buildAIConfig() {
|
|
154
|
+
const mode = resolveAIRunnerMode(optionalEnv("AI_RUNNER_MODE", "claude-internal"));
|
|
155
|
+
return {
|
|
156
|
+
mode,
|
|
157
|
+
binary: resolveAIBinary(mode),
|
|
158
|
+
phaseTimeoutMs: parseInt(optionalEnv("CLAUDE_PHASE_TIMEOUT_MS", "1800000"), 10),
|
|
159
|
+
nvmNodeVersion: optionalEnv("NVM_NODE_VERSION", "20"),
|
|
160
|
+
model: optionalEnv("AI_MODEL", DEFAULT_AI_MODEL)
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function buildBrainstormAgentConfig(role) {
|
|
164
|
+
const globalMode = optionalEnv("AI_RUNNER_MODE", "claude-internal");
|
|
165
|
+
const roleMode = optionalEnv(`BRAINSTORM_${role}_MODE`, globalMode);
|
|
166
|
+
const mode = resolveAIRunnerMode(roleMode);
|
|
167
|
+
return {
|
|
168
|
+
mode,
|
|
169
|
+
binary: optionalEnv(`BRAINSTORM_${role}_BINARY`, resolveAIBinary(mode)),
|
|
170
|
+
nvmNodeVersion: optionalEnv("NVM_NODE_VERSION", "20"),
|
|
171
|
+
model: process.env[`BRAINSTORM_${role}_MODEL`] || optionalEnv("AI_MODEL", DEFAULT_AI_MODEL)
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function buildChatAgentConfig() {
|
|
175
|
+
const chatMode = optionalEnv("CHAT_AGENT_MODE", "claude-internal");
|
|
176
|
+
const mode = resolveAIRunnerMode(chatMode);
|
|
177
|
+
return {
|
|
178
|
+
mode,
|
|
179
|
+
binary: optionalEnv("CHAT_AGENT_BINARY", resolveAIBinary(mode)),
|
|
180
|
+
nvmNodeVersion: optionalEnv("NVM_NODE_VERSION", "20"),
|
|
181
|
+
model: process.env.CHAT_AGENT_MODEL || optionalEnv("AI_MODEL", DEFAULT_AI_MODEL)
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export {
|
|
186
|
+
loadConfig
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=chunk-KISVPNSV.js.map
|