soloforge 1.0.0 → 1.1.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 (182) hide show
  1. package/README.md +4 -1
  2. package/dist/adapters/claude_code/claude_md.d.ts +1 -2
  3. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
  4. package/dist/adapters/claude_code/claude_md.js +2 -76
  5. package/dist/adapters/claude_code/claude_md.js.map +1 -1
  6. package/dist/adapters/claude_code/server.d.ts +16 -0
  7. package/dist/adapters/claude_code/server.d.ts.map +1 -1
  8. package/dist/adapters/claude_code/server.js +17 -1
  9. package/dist/adapters/claude_code/server.js.map +1 -1
  10. package/dist/adapters/claude_code/tools.d.ts +32 -1
  11. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  12. package/dist/adapters/claude_code/tools.js +65 -30
  13. package/dist/adapters/claude_code/tools.js.map +1 -1
  14. package/dist/adapters/codex/codex_config.d.ts +3 -0
  15. package/dist/adapters/codex/codex_config.d.ts.map +1 -0
  16. package/dist/adapters/codex/codex_config.js +51 -0
  17. package/dist/adapters/codex/codex_config.js.map +1 -0
  18. package/dist/adapters/codex/codex_rules.d.ts +2 -0
  19. package/dist/adapters/codex/codex_rules.d.ts.map +1 -0
  20. package/dist/adapters/codex/codex_rules.js +5 -0
  21. package/dist/adapters/codex/codex_rules.js.map +1 -0
  22. package/dist/adapters/shared/workflow_template.d.ts +3 -0
  23. package/dist/adapters/shared/workflow_template.d.ts.map +1 -0
  24. package/dist/adapters/shared/workflow_template.js +78 -0
  25. package/dist/adapters/shared/workflow_template.js.map +1 -0
  26. package/dist/adapters/trae/trae_rules.d.ts +1 -2
  27. package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
  28. package/dist/adapters/trae/trae_rules.js +2 -75
  29. package/dist/adapters/trae/trae_rules.js.map +1 -1
  30. package/dist/bin/soloforge.js +146 -22
  31. package/dist/bin/soloforge.js.map +1 -1
  32. package/dist/engine/change_coordinator.d.ts +20 -5
  33. package/dist/engine/change_coordinator.d.ts.map +1 -1
  34. package/dist/engine/change_coordinator.js +36 -22
  35. package/dist/engine/change_coordinator.js.map +1 -1
  36. package/dist/engine/classifier.d.ts +7 -0
  37. package/dist/engine/classifier.d.ts.map +1 -1
  38. package/dist/engine/classifier.js +75 -3
  39. package/dist/engine/classifier.js.map +1 -1
  40. package/dist/engine/code_reviewer.d.ts +37 -1
  41. package/dist/engine/code_reviewer.d.ts.map +1 -1
  42. package/dist/engine/code_reviewer.js +126 -24
  43. package/dist/engine/code_reviewer.js.map +1 -1
  44. package/dist/engine/confidence_scorer.d.ts +21 -0
  45. package/dist/engine/confidence_scorer.d.ts.map +1 -1
  46. package/dist/engine/confidence_scorer.js +19 -6
  47. package/dist/engine/confidence_scorer.js.map +1 -1
  48. package/dist/engine/contract_guard.d.ts +23 -0
  49. package/dist/engine/contract_guard.d.ts.map +1 -1
  50. package/dist/engine/contract_guard.js +152 -43
  51. package/dist/engine/contract_guard.js.map +1 -1
  52. package/dist/engine/convention_detector.d.ts +20 -0
  53. package/dist/engine/convention_detector.d.ts.map +1 -1
  54. package/dist/engine/convention_detector.js +19 -1
  55. package/dist/engine/convention_detector.js.map +1 -1
  56. package/dist/engine/debt_reporter.d.ts +5 -0
  57. package/dist/engine/debt_reporter.d.ts.map +1 -1
  58. package/dist/engine/debt_reporter.js +30 -6
  59. package/dist/engine/debt_reporter.js.map +1 -1
  60. package/dist/engine/debt_tracker.d.ts +52 -0
  61. package/dist/engine/debt_tracker.d.ts.map +1 -1
  62. package/dist/engine/debt_tracker.js +66 -1
  63. package/dist/engine/debt_tracker.js.map +1 -1
  64. package/dist/engine/debugger.d.ts +9 -0
  65. package/dist/engine/debugger.d.ts.map +1 -1
  66. package/dist/engine/debugger.js +112 -20
  67. package/dist/engine/debugger.js.map +1 -1
  68. package/dist/engine/delivery.d.ts +27 -0
  69. package/dist/engine/delivery.d.ts.map +1 -1
  70. package/dist/engine/delivery.js +67 -13
  71. package/dist/engine/delivery.js.map +1 -1
  72. package/dist/engine/dependency_scanner.d.ts +5 -8
  73. package/dist/engine/dependency_scanner.d.ts.map +1 -1
  74. package/dist/engine/dependency_scanner.js +46 -29
  75. package/dist/engine/dependency_scanner.js.map +1 -1
  76. package/dist/engine/evolver.d.ts +54 -0
  77. package/dist/engine/evolver.d.ts.map +1 -1
  78. package/dist/engine/evolver.js +159 -6
  79. package/dist/engine/evolver.js.map +1 -1
  80. package/dist/engine/exploration.d.ts +114 -0
  81. package/dist/engine/exploration.d.ts.map +1 -0
  82. package/dist/engine/exploration.js +414 -0
  83. package/dist/engine/exploration.js.map +1 -0
  84. package/dist/engine/failure_classifier.d.ts +28 -0
  85. package/dist/engine/failure_classifier.d.ts.map +1 -1
  86. package/dist/engine/failure_classifier.js +51 -5
  87. package/dist/engine/failure_classifier.js.map +1 -1
  88. package/dist/engine/git_deps.d.ts +29 -0
  89. package/dist/engine/git_deps.d.ts.map +1 -1
  90. package/dist/engine/git_deps.js +1 -0
  91. package/dist/engine/git_deps.js.map +1 -1
  92. package/dist/engine/impact_analyzer.d.ts +17 -0
  93. package/dist/engine/impact_analyzer.d.ts.map +1 -1
  94. package/dist/engine/impact_analyzer.js +76 -4
  95. package/dist/engine/impact_analyzer.js.map +1 -1
  96. package/dist/engine/intent_expander.d.ts +58 -0
  97. package/dist/engine/intent_expander.d.ts.map +1 -1
  98. package/dist/engine/intent_expander.js +173 -1
  99. package/dist/engine/intent_expander.js.map +1 -1
  100. package/dist/engine/migration_guard.d.ts +6 -0
  101. package/dist/engine/migration_guard.d.ts.map +1 -1
  102. package/dist/engine/migration_guard.js +26 -7
  103. package/dist/engine/migration_guard.js.map +1 -1
  104. package/dist/engine/observability.d.ts +31 -7
  105. package/dist/engine/observability.d.ts.map +1 -1
  106. package/dist/engine/observability.js +88 -28
  107. package/dist/engine/observability.js.map +1 -1
  108. package/dist/engine/onboarding.d.ts +41 -1
  109. package/dist/engine/onboarding.d.ts.map +1 -1
  110. package/dist/engine/onboarding.js +83 -8
  111. package/dist/engine/onboarding.js.map +1 -1
  112. package/dist/engine/scaffolder.d.ts +10 -0
  113. package/dist/engine/scaffolder.d.ts.map +1 -1
  114. package/dist/engine/scaffolder.js +55 -10
  115. package/dist/engine/scaffolder.js.map +1 -1
  116. package/dist/engine/scope_controller.d.ts +13 -0
  117. package/dist/engine/scope_controller.d.ts.map +1 -1
  118. package/dist/engine/scope_controller.js +76 -12
  119. package/dist/engine/scope_controller.js.map +1 -1
  120. package/dist/engine/task_context.d.ts +124 -0
  121. package/dist/engine/task_context.d.ts.map +1 -1
  122. package/dist/engine/task_context.js +155 -7
  123. package/dist/engine/task_context.js.map +1 -1
  124. package/dist/engine/task_planner.d.ts +17 -0
  125. package/dist/engine/task_planner.d.ts.map +1 -1
  126. package/dist/engine/task_planner.js +51 -4
  127. package/dist/engine/task_planner.js.map +1 -1
  128. package/dist/engine/team_awareness.d.ts +17 -0
  129. package/dist/engine/team_awareness.d.ts.map +1 -1
  130. package/dist/engine/team_awareness.js +29 -11
  131. package/dist/engine/team_awareness.js.map +1 -1
  132. package/dist/engine/test_generator.d.ts +5 -4
  133. package/dist/engine/test_generator.d.ts.map +1 -1
  134. package/dist/engine/test_generator.js +22 -5
  135. package/dist/engine/test_generator.js.map +1 -1
  136. package/dist/engine/test_quality.d.ts +11 -4
  137. package/dist/engine/test_quality.d.ts.map +1 -1
  138. package/dist/engine/test_quality.js +171 -14
  139. package/dist/engine/test_quality.js.map +1 -1
  140. package/dist/engine/verifier.d.ts +41 -0
  141. package/dist/engine/verifier.d.ts.map +1 -1
  142. package/dist/engine/verifier.js +110 -1
  143. package/dist/engine/verifier.js.map +1 -1
  144. package/dist/git/operations.d.ts +1 -0
  145. package/dist/git/operations.d.ts.map +1 -1
  146. package/dist/git/operations.js +3 -0
  147. package/dist/git/operations.js.map +1 -1
  148. package/dist/index.d.ts +9 -0
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +14 -0
  151. package/dist/index.js.map +1 -1
  152. package/dist/knowledge/index_manager.d.ts +7 -1
  153. package/dist/knowledge/index_manager.d.ts.map +1 -1
  154. package/dist/knowledge/index_manager.js +112 -37
  155. package/dist/knowledge/index_manager.js.map +1 -1
  156. package/dist/knowledge/loader.d.ts +31 -0
  157. package/dist/knowledge/loader.d.ts.map +1 -1
  158. package/dist/knowledge/loader.js +102 -8
  159. package/dist/knowledge/loader.js.map +1 -1
  160. package/dist/types.d.ts +608 -0
  161. package/dist/types.d.ts.map +1 -1
  162. package/package.json +1 -1
  163. package/templates/knowledge/acceptance_templates//346/212/200/346/234/257/351/200/211/345/236/213/351/252/214/346/224/266/346/270/205/345/215/225.md +19 -0
  164. package/templates/knowledge/acceptance_templates//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md +4 -0
  165. package/templates/knowledge/procedures//345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213.md +4 -1
  166. package/templates/knowledge/procedures//350/207/252/344/270/273/351/200/211/345/236/213/346/265/201/347/250/213.md +34 -0
  167. package/templates/knowledge/review_rules//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245/350/247/204/345/210/231.md +66 -0
  168. package/templates/scaffolds/react/Form.tsx.hbs +9 -1
  169. package/templates/scaffolds/react/List.tsx.hbs +10 -1
  170. package/templates/scaffolds/react/Page.tsx.hbs +4 -1
  171. package/templates/scaffolds/react/service.ts.hbs +29 -0
  172. package/templates/scaffolds/react/types.ts.hbs +7 -1
  173. package/templates/scaffolds/react/use{{ModuleName}}.ts.hbs +34 -2
  174. package/templates/scaffolds/spring-boot/Controller.java.hbs +27 -0
  175. package/templates/scaffolds/spring-boot/DTO.java.hbs +7 -1
  176. package/templates/scaffolds/spring-boot/Entity.java.hbs +11 -1
  177. package/templates/scaffolds/spring-boot/ErrorCode.java.hbs +13 -1
  178. package/templates/scaffolds/spring-boot/Mapper.java.hbs +4 -1
  179. package/templates/scaffolds/spring-boot/PageResponse.java.hbs +24 -1
  180. package/templates/scaffolds/spring-boot/Service.java.hbs +32 -0
  181. package/templates/scaffolds/spring-boot/ServiceImpl.java.hbs +23 -5
  182. package/templates/scaffolds/spring-boot/ServiceTest.java.hbs +7 -1
@@ -1,4 +1,19 @@
1
- // ── 上游阶段检测模式(复用 failure_classifier.ts 的规则) ──
1
+ /**
2
+ * 调试器 — 对错误输出执行六步调试流水线分析。
3
+ *
4
+ * 流水线步骤:
5
+ * 1. 错误解析(parseError):将原始错误输出分类为编译错误、测试失败、运行时异常或未知类型
6
+ * 2. 调用链提取(extractCallChain):从堆栈跟踪中提取项目范围内的调用链
7
+ * 3. 根因分析(analyzeRootCause):基于规则引擎判定错误类型和来源阶段
8
+ * 4. 修复建议(proposeFix):根据错误类型提供定向修复策略
9
+ * 5. 测试补充建议(suggestTests):推荐与错误类型匹配的测试场景
10
+ * 6. 结果汇总(debugError):将以上步骤的结果组装为完整的调试会话
11
+ */
12
+ /**
13
+ * 上游阶段检测模式。
14
+ * 用于判断错误是否源自需求、设计、权限、DDL 或 API 契约阶段,
15
+ * 这类错误通常禁止自动修复,需人工介入。
16
+ */
2
17
  const PHASE_ORIGIN_PATTERNS = [
3
18
  { pattern: /requirement|需求|spec/i, phase: "requirement" },
4
19
  { pattern: /design|架构|设计|DDL|表结构|接口定义/i, phase: "design" },
@@ -6,17 +21,20 @@ const PHASE_ORIGIN_PATTERNS = [
6
21
  { pattern: /migration|数据库变更|schema/i, phase: "ddl" },
7
22
  { pattern: /api.*contract|接口契约|swagger/i, phase: "api_contract" },
8
23
  ];
9
- // ── Step 1: 错误解析 ──
24
+ // ── 第一步:错误解析(分类阶段) ──
25
+ /** 编译错误匹配模式 — 匹配 TypeScript 编译错误、类型不匹配、模块找不到等 */
10
26
  const COMPILATION_PATTERNS = [
11
27
  /error TS\d+/,
12
28
  /error:/,
13
29
  /Cannot find/,
14
30
  /Type '.*' is not assignable/,
15
31
  ];
32
+ /** 测试失败匹配模式 — 匹配测试框架输出的失败标记和断言错误 */
16
33
  const TEST_FAILURE_PATTERNS = [
17
34
  /FAIL|✕|×|AssertionError|expect\(/,
18
35
  /Test suite failed/,
19
36
  ];
37
+ /** 运行时异常匹配模式 — 匹配 JavaScript/TypeScript 常见的运行时错误类型 */
20
38
  const RUNTIME_PATTERNS = [
21
39
  /Error:/,
22
40
  /Exception:/,
@@ -24,16 +42,24 @@ const RUNTIME_PATTERNS = [
24
42
  /ReferenceError:/,
25
43
  /throw new/,
26
44
  ];
45
+ /** 源文件行号提取正则 — 从错误输出中提取 src/ 或 ./ 开头的源文件路径和行号 */
27
46
  const FILE_LINE_PATTERN = /(?:src\/[^\s:(]+|\.\/[^\s:(]+)\.(?:ts|tsx|js|jsx)[\s(]*(\d+)/;
47
+ /**
48
+ * 解析错误输出,将其分类为编译错误、测试失败、运行时异常或未知类型。
49
+ * 同时提取文件路径、行号、错误消息和堆栈帧信息。
50
+ * @param errorOutput - 原始错误输出文本
51
+ * @returns 解析后的错误信息
52
+ */
28
53
  function parseError(errorOutput) {
29
54
  const lines = errorOutput.split("\n");
30
55
  const stack_frames = [];
56
+ // 提取堆栈帧(格式为 "at functionName (file:line:column)")
31
57
  for (const line of lines) {
32
58
  if (/^\s*at\s+/.test(line)) {
33
59
  stack_frames.push(line.trim());
34
60
  }
35
61
  }
36
- // 编译错误
62
+ // 优先级 1: 编译错误(类型定义、导入路径问题等)
37
63
  for (const pattern of COMPILATION_PATTERNS) {
38
64
  if (pattern.test(errorOutput)) {
39
65
  const fileLineMatch = FILE_LINE_PATTERN.exec(errorOutput);
@@ -47,7 +73,7 @@ function parseError(errorOutput) {
47
73
  };
48
74
  }
49
75
  }
50
- // 测试失败
76
+ // 优先级 2: 测试失败(断言不通过、测试套件失败等)
51
77
  for (const pattern of TEST_FAILURE_PATTERNS) {
52
78
  if (pattern.test(errorOutput)) {
53
79
  const testNameMatch = /✕\s+(.+)/.exec(errorOutput) || /FAIL\s+(.+)/.exec(errorOutput);
@@ -63,7 +89,7 @@ function parseError(errorOutput) {
63
89
  };
64
90
  }
65
91
  }
66
- // 运行时异常
92
+ // 优先级 3: 运行时异常(TypeError、ReferenceError 等)
67
93
  for (const pattern of RUNTIME_PATTERNS) {
68
94
  if (pattern.test(errorOutput)) {
69
95
  const exceptionMatch = /(TypeError|ReferenceError|Error|Exception|RangeError|SyntaxError):\s*(.+)/.exec(errorOutput);
@@ -76,29 +102,44 @@ function parseError(errorOutput) {
76
102
  };
77
103
  }
78
104
  }
79
- // 未知错误
105
+ // 兜底: 无法归类的未知错误
80
106
  return {
81
107
  error_type: "unknown",
82
108
  message: extractErrorMessage(errorOutput),
83
109
  stack_frames,
84
110
  };
85
111
  }
112
+ /**
113
+ * 从错误输出中提取有意义的错误消息。
114
+ * 优先提取包含 error/Error/FAIL/throw 等关键词的行,回退到第一行非空内容。
115
+ * 截取最大 300 字符,避免过长消息。
116
+ * @param errorOutput - 原始错误输出
117
+ * @returns 提取到的错误消息文本
118
+ */
86
119
  function extractErrorMessage(errorOutput) {
87
- // 尝试提取错误行(通常包含 "error" 或 "Error" 关键词)
120
+ // 尝试提取包含错误关键词的行
88
121
  const lines = errorOutput.split("\n").filter((l) => l.trim().length > 0);
89
122
  for (const line of lines) {
90
123
  const trimmed = line.trim();
91
124
  if (/error|Error|FAIL|fail|throw|panic/i.test(trimmed)) {
92
- // 截取合理长度
125
+ // 截取合理长度,防止消息过长
93
126
  return trimmed.length > 300 ? trimmed.substring(0, 300) + "..." : trimmed;
94
127
  }
95
128
  }
96
- // 回退到第一行非空内容
129
+ // 回退:无关键词命中时,取第一行非空内容
97
130
  const first = lines[0]?.trim() ?? "";
98
131
  return first.length > 300 ? first.substring(0, 300) + "..." : first;
99
132
  }
100
- // ── Step 2: 调用链提取 ──
133
+ // ── 第二步:调用链提取 ──
134
+ /** 堆栈帧正则 — 匹配格式 "at functionName (filePath:line:column)" */
101
135
  const STACK_FRAME_PATTERN = /at\s+(.+?)\s+\((.+?):(\d+):(\d+)\)/;
136
+ /**
137
+ * 从错误输出中提取调用链。
138
+ * 解析标准格式的堆栈帧,可选地过滤到项目范围内的帧。
139
+ * @param errorOutput - 原始错误输出
140
+ * @param projectScope - 可选的项目路径范围,仅保留路径包含这些前缀的帧
141
+ * @returns 调用链项列表(按调用顺序排列)
142
+ */
102
143
  function extractCallChain(errorOutput, projectScope) {
103
144
  const chain = [];
104
145
  const scope = projectScope ?? [];
@@ -123,9 +164,23 @@ function extractCallChain(errorOutput, projectScope) {
123
164
  }
124
165
  return chain;
125
166
  }
126
- // ── Step 4: 根因分析 ──
167
+ // ── 第四步:根因分析 ──
168
+ /**
169
+ * 基于规则引擎分析错误的根因。
170
+ *
171
+ * 判定规则(按优先级):
172
+ * 1. 上游阶段关键词匹配 → 确定性缺陷,禁止自动修复
173
+ * 2. 编译错误 → 可修复(类型/导入问题)
174
+ * 3. 测试失败 → 可修复(断言/数据问题)
175
+ * 4. 同一错误重复 3 次以上 → 确定性缺陷
176
+ * 5. 默认 → 可修复(通用错误)
177
+ *
178
+ * @param errorOutput - 原始错误输出
179
+ * @param parsedError - 已解析的错误信息
180
+ * @returns 根因分析结果(含失败类型、置信度和摘要)
181
+ */
127
182
  function analyzeRootCause(errorOutput, parsedError) {
128
- // 规则 1: 检测上游阶段关键词
183
+ // 规则 1: 检测上游阶段关键词(需求、设计、权限、DDL、接口契约)
129
184
  for (const { pattern, phase } of PHASE_ORIGIN_PATTERNS) {
130
185
  if (pattern.test(errorOutput)) {
131
186
  return {
@@ -136,7 +191,7 @@ function analyzeRootCause(errorOutput, parsedError) {
136
191
  };
137
192
  }
138
193
  }
139
- // 规则 2: 编译错误 → 可修复
194
+ // 规则 2: 编译错误 → 通常可修复(类型定义或导入路径问题)
140
195
  if (parsedError.error_type === "compilation") {
141
196
  return {
142
197
  failure_type: "fixable",
@@ -144,7 +199,7 @@ function analyzeRootCause(errorOutput, parsedError) {
144
199
  confidence: 0.7,
145
200
  };
146
201
  }
147
- // 规则 3: 测试失败 → 可修复
202
+ // 规则 3: 测试失败 → 通常可修复(断言条件或测试数据问题)
148
203
  if (parsedError.error_type === "test_failure") {
149
204
  return {
150
205
  failure_type: "fixable",
@@ -152,7 +207,7 @@ function analyzeRootCause(errorOutput, parsedError) {
152
207
  confidence: 0.6,
153
208
  };
154
209
  }
155
- // 规则 4: 错误重复 3+ 次(仅对非编译/非测试类型)确定性缺陷
210
+ // 规则 4: 同一错误重复出现 3 次及以上确定性缺陷(可能是逻辑死循环或配置错误)
156
211
  const errorLines = errorOutput.split("\n").filter((l) => l.trim().length > 0);
157
212
  const firstErrorLine = errorLines[0]?.trim() ?? "";
158
213
  const repeatCount = errorLines.filter((l) => l.trim() === firstErrorLine).length;
@@ -163,17 +218,32 @@ function analyzeRootCause(errorOutput, parsedError) {
163
218
  confidence: 0.9,
164
219
  };
165
220
  }
166
- // 规则 5: 默认
221
+ // 规则 5: 默认兜底 — 通用可修复错误
167
222
  return {
168
223
  failure_type: "fixable",
169
224
  summary: "通用可修复错误,需要进一步上下文分析",
170
225
  confidence: 0.5,
171
226
  };
172
227
  }
173
- // ── Step 5: 修复建议 ──
228
+ // ── 第五步:修复建议 ──
229
+ /**
230
+ * 根据错误类型生成定向修复建议。
231
+ *
232
+ * 策略映射:
233
+ * - compilation → 检查类型定义和导入路径(低风险)
234
+ * - test_failure → 对比预期与实际输出(中风险)
235
+ * - runtime → 添加空值检查和异常处理(中风险)
236
+ * - unknown → 增加日志收集更多信息(高风险)
237
+ *
238
+ * @param parsedError - 已解析的错误信息
239
+ * @param callChain - 调用链(用于定位相关文件)
240
+ * @param _rootCause - 根因分析结果(当前版本未直接使用)
241
+ * @returns 修复建议(包含描述、待检查文件、方法和风险等级)
242
+ */
174
243
  function proposeFix(parsedError, callChain, _rootCause) {
175
244
  switch (parsedError.error_type) {
176
245
  case "compilation": {
246
+ // 编译错误:定位到出错文件,从顶层依赖逐步修复
177
247
  const filesToCheck = [];
178
248
  if (parsedError.file) {
179
249
  filesToCheck.push(parsedError.file);
@@ -186,9 +256,10 @@ function proposeFix(parsedError, callChain, _rootCause) {
186
256
  };
187
257
  }
188
258
  case "test_failure": {
259
+ // 测试失败:从调用链中提取涉及的文件,对比预期和实际输出
189
260
  const filesToCheck = callChain
190
261
  .map((item) => item.file)
191
- .filter((f, i, arr) => arr.indexOf(f) === i);
262
+ .filter((f, i, arr) => arr.indexOf(f) === i); // 去重
192
263
  return {
193
264
  description: "检查断言条件和测试数据",
194
265
  files_to_check: filesToCheck,
@@ -197,9 +268,10 @@ function proposeFix(parsedError, callChain, _rootCause) {
197
268
  };
198
269
  }
199
270
  case "runtime": {
271
+ // 运行时异常:从调用链定位异常位置,添加防御性代码
200
272
  const filesToCheck = callChain
201
273
  .map((item) => item.file)
202
- .filter((f, i, arr) => arr.indexOf(f) === i);
274
+ .filter((f, i, arr) => arr.indexOf(f) === i); // 去重
203
275
  return {
204
276
  description: "定位异常抛出位置,检查边界条件",
205
277
  files_to_check: filesToCheck,
@@ -209,6 +281,7 @@ function proposeFix(parsedError, callChain, _rootCause) {
209
281
  }
210
282
  case "unknown":
211
283
  default: {
284
+ // 未知错误:建议先收集更多上下文信息
212
285
  return {
213
286
  description: "收集更多错误上下文信息",
214
287
  files_to_check: [],
@@ -218,7 +291,17 @@ function proposeFix(parsedError, callChain, _rootCause) {
218
291
  }
219
292
  }
220
293
  }
221
- // ── Step 6: 测试补充建议 ──
294
+ // ── 第六步:测试补充建议 ──
295
+ /**
296
+ * 根据错误类型推荐补充测试场景。
297
+ * 每种错误类型对应不同的测试重点:
298
+ * - compilation → 类型安全测试、编译时边界检查
299
+ * - test_failure → 回归测试、等价类划分
300
+ * - runtime → 空值/边界条件测试、异常处理路径
301
+ * - unknown → 探索性测试
302
+ * @param errorType - 已解析的错误类型
303
+ * @returns 测试建议列表(含场景、覆盖范围和优先级)
304
+ */
222
305
  function suggestTests(errorType) {
223
306
  switch (errorType) {
224
307
  case "compilation":
@@ -272,6 +355,15 @@ function suggestTests(errorType) {
272
355
  }
273
356
  }
274
357
  // ── 主入口:六步调试流水线 ──
358
+ /**
359
+ * 执行完整的六步调试流水线。
360
+ * 依次执行错误解析、调用链提取、根因分析、修复建议和测试补充,
361
+ * 将结果组装为完整的调试会话对象。
362
+ * @param errorOutput - 原始错误输出文本
363
+ * @param taskId - 关联的任务 ID
364
+ * @param projectScope - 可选的项目路径范围(用于过滤调用链帧)
365
+ * @returns 完整的调试会话对象
366
+ */
275
367
  export function debugError(errorOutput, taskId, projectScope) {
276
368
  const parsed_error = parseError(errorOutput);
277
369
  const call_chain = extractCallChain(errorOutput, projectScope);
@@ -1 +1 @@
1
- {"version":3,"file":"debugger.js","sourceRoot":"","sources":["../../src/engine/debugger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debugger.js","sourceRoot":"","sources":["../../src/engine/debugger.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,21 @@
1
1
  import type { TaskContext, ProjectConfig, DeliveryResult, ChangelogEntry } from "../types.js";
2
2
  import type { KnowledgeIndexManager } from "../knowledge/index_manager.js";
3
3
  import type { GitOperations } from "./git_deps.js";
4
+ /**
5
+ * 自动交付模块 — 完成代码提交、推送、PR 创建和变更日志生成。
6
+ * 交付行为由产品配置文件(KnowledgeIndex 中的 domain 类型条目)控制,
7
+ * 支持按需跳过推送和 PR 步骤。
8
+ */
9
+ /**
10
+ * 交付流程的输入参数。
11
+ * @property taskContext - 当前任务的上下文
12
+ * @property config - 项目配置
13
+ * @property knowledgeIndex - 知识索引管理器,用于读取交付配置
14
+ * @property projectPath - 项目根目录路径
15
+ * @property gitOps - Git 操作封装
16
+ * @property skipPush - 是否跳过推送步骤
17
+ * @property skipPr - 是否跳过 PR 创建步骤
18
+ */
4
19
  export interface DeliveryInput {
5
20
  taskContext: TaskContext;
6
21
  config: ProjectConfig;
@@ -10,6 +25,18 @@ export interface DeliveryInput {
10
25
  skipPush?: boolean;
11
26
  skipPr?: boolean;
12
27
  }
28
+ /**
29
+ * 执行完整的交付流程:提交代码、推送到远程、生成 PR 命令和变更日志。
30
+ * 流程按顺序执行,每一步失败后记录错误并继续后续步骤。
31
+ * @param input - 交付输入参数
32
+ * @returns 交付结果,包含已执行操作、跳过操作、错误信息和 commit hash
33
+ */
13
34
  export declare function deliver(input: DeliveryInput): Promise<DeliveryResult>;
35
+ /**
36
+ * 根据任务上下文生成 Conventional Commits 格式的变更日志条目。
37
+ * 任务类型映射:feature→feat, bugfix/hotfix→fix, refactor→refactor, test→test 等。
38
+ * @param taskContext - 当前任务的上下文
39
+ * @returns 变更日志条目,包含类型、作用域、描述和任务 ID
40
+ */
14
41
  export declare function generateChangelogEntry(taskContext: TaskContext): ChangelogEntry;
15
42
  //# sourceMappingURL=delivery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/engine/delivery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EAEb,cAAc,EAEd,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,qBAAqB,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAyI3E;AAID,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,cAAc,CAkB/E"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/engine/delivery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EAEb,cAAc,EAEd,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;GAIG;AAIH;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,qBAAqB,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAoJ3E;AAcD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,cAAc,CAmB/E"}
@@ -1,4 +1,10 @@
1
1
  import YAML from "yaml";
2
+ /**
3
+ * 执行完整的交付流程:提交代码、推送到远程、生成 PR 命令和变更日志。
4
+ * 流程按顺序执行,每一步失败后记录错误并继续后续步骤。
5
+ * @param input - 交付输入参数
6
+ * @returns 交付结果,包含已执行操作、跳过操作、错误信息和 commit hash
7
+ */
2
8
  export async function deliver(input) {
3
9
  const { taskContext, config, knowledgeIndex, projectPath, gitOps, skipPush, skipPr, } = input;
4
10
  const result = {
@@ -9,9 +15,9 @@ export async function deliver(input) {
9
15
  skipped_actions: [],
10
16
  errors: [],
11
17
  };
12
- // 1. Load delivery config from product profile
18
+ // 1. 从产品配置文件加载交付行为配置
13
19
  const deliveryConfig = resolveDeliveryConfig(knowledgeIndex, config.product_profile);
14
- // 2. Get current branch
20
+ // 2. 获取当前分支名称(作为后续推送和 PR 的目标分支)
15
21
  try {
16
22
  result.branch = await gitOps.getCurrentBranch(projectPath);
17
23
  }
@@ -19,23 +25,35 @@ export async function deliver(input) {
19
25
  result.errors.push(`无法获取当前分支: ${e instanceof Error ? e.message : String(e)}`);
20
26
  return result;
21
27
  }
22
- // 3. Build commit message
28
+ // 3. 根据任务信息构建变更日志条目和提交消息
23
29
  const entry = generateChangelogEntry(taskContext);
24
30
  result.commit_message = formatCommitMessage(entry);
25
- // 4. Commit
31
+ // 4. 执行 git commit(如果配置允许自动提交)
26
32
  if (deliveryConfig.auto_commit) {
27
33
  try {
28
34
  const changedFiles = taskContext.execution?.changed_files ?? [];
35
+ // 优先使用任务上下文中记录的变更文件列表
29
36
  if (changedFiles.length > 0) {
30
37
  await gitOps.add(projectPath, changedFiles);
31
38
  }
32
39
  else {
40
+ // 无明确变更记录时,暂存所有改动
33
41
  await gitOps.add(projectPath, ["."]);
34
42
  }
35
43
  const commitOutput = await gitOps.commit(projectPath, result.commit_message);
36
- // Extract commit hash from output like [feature/test abc1234] ...
44
+ // 从提交输出中提取 commit hash,回退到 git rev-parse
37
45
  const hashMatch = commitOutput.match(/\[[^\s]+ ([0-9a-f]{7,})\]/);
38
- result.commit_hash = hashMatch ? hashMatch[1] : undefined;
46
+ if (hashMatch) {
47
+ result.commit_hash = hashMatch[1];
48
+ }
49
+ else {
50
+ try {
51
+ result.commit_hash = await gitOps.getHeadCommitHash(projectPath);
52
+ }
53
+ catch {
54
+ result.commit_hash = undefined;
55
+ }
56
+ }
39
57
  result.actions_performed.push("commit");
40
58
  }
41
59
  catch (e) {
@@ -52,10 +70,11 @@ export async function deliver(input) {
52
70
  reason: "DeliveryConfig.auto_commit = false",
53
71
  });
54
72
  }
55
- // 5. Push
73
+ // 5. 推送到远程仓库(需要配置了自动推送且用户未跳过)
56
74
  if (deliveryConfig.auto_push && !skipPush) {
57
75
  try {
58
76
  const remoteUrl = await gitOps.getRemoteUrl(projectPath);
77
+ // 仅当存在远程仓库时才执行推送
59
78
  if (remoteUrl) {
60
79
  await gitOps.push(projectPath, "origin", result.branch);
61
80
  result.actions_performed.push("push");
@@ -87,7 +106,7 @@ export async function deliver(input) {
87
106
  reason: "DeliveryConfig.auto_push = false",
88
107
  });
89
108
  }
90
- // 6. PR hint (never auto-create PR, just return command)
109
+ // 6. 生成 PR 创建命令(不自动执行 PR 创建,仅返回命令供用户手动执行)
91
110
  if (deliveryConfig.auto_pr && !skipPr) {
92
111
  const remoteUrl = await gitOps
93
112
  .getRemoteUrl(projectPath)
@@ -96,7 +115,7 @@ export async function deliver(input) {
96
115
  const labels = deliveryConfig.pr_labels.length > 0
97
116
  ? ` --label ${deliveryConfig.pr_labels.join(",")}`
98
117
  : "";
99
- result.pr_url = `gh pr create --title "${entry.type}(${entry.scope}): ${entry.description}" --body "Task: ${taskContext.task_id}"${labels}`;
118
+ result.pr_url = `gh pr create --title "${shellEscape(entry.type)}(${shellEscape(entry.scope)}): ${shellEscape(entry.description)}" --body "Task: ${taskContext.task_id}"${labels}`;
100
119
  result.actions_performed.push("pr");
101
120
  }
102
121
  else {
@@ -112,13 +131,28 @@ export async function deliver(input) {
112
131
  reason: skipPr ? "用户跳过" : "DeliveryConfig.auto_pr = false",
113
132
  });
114
133
  }
115
- // 7. Changelog
134
+ // 7. 生成变更日志
116
135
  result.changelog = formatChangelog(entry);
117
136
  result.actions_performed.push("changelog");
118
137
  return result;
119
138
  }
120
- // ── Changelog helpers ──
139
+ // ── Shell 转义辅助函数 ──
140
+ /**
141
+ * 对字符串进行 shell 安全转义,防止双引号内注入。
142
+ * 转义双引号、反引号、美元符号和反斜杠。
143
+ */
144
+ function shellEscape(str) {
145
+ return str.replace(/["$`\\]/g, "\\$&");
146
+ }
147
+ // ── 变更日志辅助函数 ──
148
+ /**
149
+ * 根据任务上下文生成 Conventional Commits 格式的变更日志条目。
150
+ * 任务类型映射:feature→feat, bugfix/hotfix→fix, refactor→refactor, test→test 等。
151
+ * @param taskContext - 当前任务的上下文
152
+ * @returns 变更日志条目,包含类型、作用域、描述和任务 ID
153
+ */
121
154
  export function generateChangelogEntry(taskContext) {
155
+ // 任务类型到 Conventional Commits 类型的映射表
122
156
  const typeMap = {
123
157
  feature: "feat",
124
158
  bugfix: "fix",
@@ -133,19 +167,39 @@ export function generateChangelogEntry(taskContext) {
133
167
  return {
134
168
  type: typeMap[taskType] ?? "chore",
135
169
  scope: taskContext.classification?.affected_repos[0] ?? "core",
136
- description: taskContext.intent.slice(0, 80),
170
+ description: taskContext.intent.slice(0, 80), // 意图描述截断为 80 字符
137
171
  task_id: taskContext.task_id,
138
172
  };
139
173
  }
140
- // ── Internal helpers ──
174
+ // ── 内部辅助函数 ──
175
+ /**
176
+ * 将变更日志条目格式化为 Git 提交消息。
177
+ * 格式: `type(scope): description\n\nTask: taskId`
178
+ * @param entry - 变更日志条目
179
+ * @returns 格式化的提交消息字符串
180
+ */
141
181
  function formatCommitMessage(entry) {
142
182
  return `${entry.type}(${entry.scope}): ${entry.description}\n\nTask: ${entry.task_id}`;
143
183
  }
184
+ /**
185
+ * 将变更日志条目格式化为 Markdown 格式的变更日志行。
186
+ * @param entry - 变更日志条目
187
+ * @returns Markdown 格式的变更日志字符串
188
+ */
144
189
  function formatChangelog(entry) {
145
190
  const date = new Date().toISOString().split("T")[0];
146
191
  return `## [${date}]\n\n- **${entry.type}(${entry.scope})**: ${entry.description} (${entry.task_id})`;
147
192
  }
193
+ /**
194
+ * 从知识索引中解析交付配置。
195
+ * 在产品配置文件(domain 类型知识条目)中查找 delivery 配置块。
196
+ * 找到则使用配置值,否则返回默认配置(仅自动提交,不自动推送/PR)。
197
+ * @param knowledgeIndex - 知识索引管理器
198
+ * @param productProfile - 产品配置文件名
199
+ * @returns 交付行为配置
200
+ */
148
201
  function resolveDeliveryConfig(knowledgeIndex, productProfile) {
202
+ // 默认配置:仅自动提交,推送和 PR 需手动触发
149
203
  const defaults = {
150
204
  auto_commit: true,
151
205
  auto_push: false,
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/engine/delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/engine/delivery.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,10 @@
1
1
  import type { DependencyScanResult } from "../types.js";
2
2
  /**
3
- * Scan a dependency file for known vulnerabilities.
4
- *
5
- * Supports:
6
- * - package.json (Node.js)
7
- * - pom.xml (Java / Maven)
8
- * - build.gradle (Java / Gradle)
9
- *
10
- * Pure rule-based engine — zero AI dependencies, no external API calls.
3
+ * 扫描依赖文件中的已知漏洞 根据文件名自动选择解析器。
4
+ * 支持格式: package.json (Node.js)、pom.xml (Java/Maven)、build.gradle (Java/Gradle)。
5
+ * @param content - 依赖文件内容
6
+ * @param filename - 文件名(用于判断解析器类型)
7
+ * @returns 扫描结果,包含漏洞列表、未锁定版本和中文摘要
11
8
  */
12
9
  export declare function scanDependencies(content: string, filename: string): DependencyScanResult;
13
10
  //# sourceMappingURL=dependency_scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependency_scanner.d.ts","sourceRoot":"","sources":["../../src/engine/dependency_scanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAgP3E;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CA0FxF"}
1
+ {"version":3,"file":"dependency_scanner.d.ts","sourceRoot":"","sources":["../../src/engine/dependency_scanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAwQ3E;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CA0FxF"}