soloforge 1.0.0 → 1.1.1
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/README.md +4 -1
- package/dist/adapters/claude_code/claude_md.d.ts +1 -2
- package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
- package/dist/adapters/claude_code/claude_md.js +2 -76
- package/dist/adapters/claude_code/claude_md.js.map +1 -1
- package/dist/adapters/claude_code/server.d.ts +16 -0
- package/dist/adapters/claude_code/server.d.ts.map +1 -1
- package/dist/adapters/claude_code/server.js +17 -1
- package/dist/adapters/claude_code/server.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts +32 -1
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +65 -30
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/codex/codex_config.d.ts +3 -0
- package/dist/adapters/codex/codex_config.d.ts.map +1 -0
- package/dist/adapters/codex/codex_config.js +51 -0
- package/dist/adapters/codex/codex_config.js.map +1 -0
- package/dist/adapters/codex/codex_rules.d.ts +2 -0
- package/dist/adapters/codex/codex_rules.d.ts.map +1 -0
- package/dist/adapters/codex/codex_rules.js +5 -0
- package/dist/adapters/codex/codex_rules.js.map +1 -0
- package/dist/adapters/shared/workflow_template.d.ts +3 -0
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -0
- package/dist/adapters/shared/workflow_template.js +78 -0
- package/dist/adapters/shared/workflow_template.js.map +1 -0
- package/dist/adapters/trae/trae_rules.d.ts +1 -2
- package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
- package/dist/adapters/trae/trae_rules.js +2 -75
- package/dist/adapters/trae/trae_rules.js.map +1 -1
- package/dist/bin/soloforge.js +171 -22
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/change_coordinator.d.ts +20 -5
- package/dist/engine/change_coordinator.d.ts.map +1 -1
- package/dist/engine/change_coordinator.js +36 -22
- package/dist/engine/change_coordinator.js.map +1 -1
- package/dist/engine/classifier.d.ts +7 -0
- package/dist/engine/classifier.d.ts.map +1 -1
- package/dist/engine/classifier.js +75 -3
- package/dist/engine/classifier.js.map +1 -1
- package/dist/engine/code_reviewer.d.ts +37 -1
- package/dist/engine/code_reviewer.d.ts.map +1 -1
- package/dist/engine/code_reviewer.js +126 -24
- package/dist/engine/code_reviewer.js.map +1 -1
- package/dist/engine/confidence_scorer.d.ts +21 -0
- package/dist/engine/confidence_scorer.d.ts.map +1 -1
- package/dist/engine/confidence_scorer.js +19 -6
- package/dist/engine/confidence_scorer.js.map +1 -1
- package/dist/engine/contract_guard.d.ts +23 -0
- package/dist/engine/contract_guard.d.ts.map +1 -1
- package/dist/engine/contract_guard.js +152 -43
- package/dist/engine/contract_guard.js.map +1 -1
- package/dist/engine/convention_detector.d.ts +20 -0
- package/dist/engine/convention_detector.d.ts.map +1 -1
- package/dist/engine/convention_detector.js +19 -1
- package/dist/engine/convention_detector.js.map +1 -1
- package/dist/engine/debt_reporter.d.ts +5 -0
- package/dist/engine/debt_reporter.d.ts.map +1 -1
- package/dist/engine/debt_reporter.js +30 -6
- package/dist/engine/debt_reporter.js.map +1 -1
- package/dist/engine/debt_tracker.d.ts +52 -0
- package/dist/engine/debt_tracker.d.ts.map +1 -1
- package/dist/engine/debt_tracker.js +66 -1
- package/dist/engine/debt_tracker.js.map +1 -1
- package/dist/engine/debugger.d.ts +9 -0
- package/dist/engine/debugger.d.ts.map +1 -1
- package/dist/engine/debugger.js +112 -20
- package/dist/engine/debugger.js.map +1 -1
- package/dist/engine/delivery.d.ts +27 -0
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +67 -13
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/dependency_scanner.d.ts +5 -8
- package/dist/engine/dependency_scanner.d.ts.map +1 -1
- package/dist/engine/dependency_scanner.js +46 -29
- package/dist/engine/dependency_scanner.js.map +1 -1
- package/dist/engine/evolver.d.ts +54 -0
- package/dist/engine/evolver.d.ts.map +1 -1
- package/dist/engine/evolver.js +159 -6
- package/dist/engine/evolver.js.map +1 -1
- package/dist/engine/exploration.d.ts +114 -0
- package/dist/engine/exploration.d.ts.map +1 -0
- package/dist/engine/exploration.js +414 -0
- package/dist/engine/exploration.js.map +1 -0
- package/dist/engine/failure_classifier.d.ts +28 -0
- package/dist/engine/failure_classifier.d.ts.map +1 -1
- package/dist/engine/failure_classifier.js +51 -5
- package/dist/engine/failure_classifier.js.map +1 -1
- package/dist/engine/git_deps.d.ts +29 -0
- package/dist/engine/git_deps.d.ts.map +1 -1
- package/dist/engine/git_deps.js +1 -0
- package/dist/engine/git_deps.js.map +1 -1
- package/dist/engine/impact_analyzer.d.ts +17 -0
- package/dist/engine/impact_analyzer.d.ts.map +1 -1
- package/dist/engine/impact_analyzer.js +76 -4
- package/dist/engine/impact_analyzer.js.map +1 -1
- package/dist/engine/intent_expander.d.ts +58 -0
- package/dist/engine/intent_expander.d.ts.map +1 -1
- package/dist/engine/intent_expander.js +173 -1
- package/dist/engine/intent_expander.js.map +1 -1
- package/dist/engine/migration_guard.d.ts +6 -0
- package/dist/engine/migration_guard.d.ts.map +1 -1
- package/dist/engine/migration_guard.js +26 -7
- package/dist/engine/migration_guard.js.map +1 -1
- package/dist/engine/observability.d.ts +31 -7
- package/dist/engine/observability.d.ts.map +1 -1
- package/dist/engine/observability.js +88 -28
- package/dist/engine/observability.js.map +1 -1
- package/dist/engine/onboarding.d.ts +41 -1
- package/dist/engine/onboarding.d.ts.map +1 -1
- package/dist/engine/onboarding.js +83 -8
- package/dist/engine/onboarding.js.map +1 -1
- package/dist/engine/scaffolder.d.ts +10 -0
- package/dist/engine/scaffolder.d.ts.map +1 -1
- package/dist/engine/scaffolder.js +55 -10
- package/dist/engine/scaffolder.js.map +1 -1
- package/dist/engine/scope_controller.d.ts +13 -0
- package/dist/engine/scope_controller.d.ts.map +1 -1
- package/dist/engine/scope_controller.js +76 -12
- package/dist/engine/scope_controller.js.map +1 -1
- package/dist/engine/task_context.d.ts +124 -0
- package/dist/engine/task_context.d.ts.map +1 -1
- package/dist/engine/task_context.js +155 -7
- package/dist/engine/task_context.js.map +1 -1
- package/dist/engine/task_planner.d.ts +17 -0
- package/dist/engine/task_planner.d.ts.map +1 -1
- package/dist/engine/task_planner.js +51 -4
- package/dist/engine/task_planner.js.map +1 -1
- package/dist/engine/team_awareness.d.ts +17 -0
- package/dist/engine/team_awareness.d.ts.map +1 -1
- package/dist/engine/team_awareness.js +29 -11
- package/dist/engine/team_awareness.js.map +1 -1
- package/dist/engine/test_generator.d.ts +5 -4
- package/dist/engine/test_generator.d.ts.map +1 -1
- package/dist/engine/test_generator.js +22 -5
- package/dist/engine/test_generator.js.map +1 -1
- package/dist/engine/test_quality.d.ts +11 -4
- package/dist/engine/test_quality.d.ts.map +1 -1
- package/dist/engine/test_quality.js +171 -14
- package/dist/engine/test_quality.js.map +1 -1
- package/dist/engine/verifier.d.ts +41 -0
- package/dist/engine/verifier.d.ts.map +1 -1
- package/dist/engine/verifier.js +110 -1
- package/dist/engine/verifier.js.map +1 -1
- package/dist/git/operations.d.ts +1 -0
- package/dist/git/operations.d.ts.map +1 -1
- package/dist/git/operations.js +3 -0
- package/dist/git/operations.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/knowledge/index_manager.d.ts +7 -1
- package/dist/knowledge/index_manager.d.ts.map +1 -1
- package/dist/knowledge/index_manager.js +112 -37
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/knowledge/loader.d.ts +31 -0
- package/dist/knowledge/loader.d.ts.map +1 -1
- package/dist/knowledge/loader.js +102 -8
- package/dist/knowledge/loader.js.map +1 -1
- package/dist/types.d.ts +608 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- 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
- 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
- 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
- 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
- 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
- package/templates/scaffolds/react/Form.tsx.hbs +9 -1
- package/templates/scaffolds/react/List.tsx.hbs +10 -1
- package/templates/scaffolds/react/Page.tsx.hbs +4 -1
- package/templates/scaffolds/react/service.ts.hbs +29 -0
- package/templates/scaffolds/react/types.ts.hbs +7 -1
- package/templates/scaffolds/react/use{{ModuleName}}.ts.hbs +34 -2
- package/templates/scaffolds/spring-boot/Controller.java.hbs +27 -0
- package/templates/scaffolds/spring-boot/DTO.java.hbs +7 -1
- package/templates/scaffolds/spring-boot/Entity.java.hbs +11 -1
- package/templates/scaffolds/spring-boot/ErrorCode.java.hbs +13 -1
- package/templates/scaffolds/spring-boot/Mapper.java.hbs +4 -1
- package/templates/scaffolds/spring-boot/PageResponse.java.hbs +24 -1
- package/templates/scaffolds/spring-boot/Service.java.hbs +32 -0
- package/templates/scaffolds/spring-boot/ServiceImpl.java.hbs +23 -5
- package/templates/scaffolds/spring-boot/ServiceTest.java.hbs +7 -1
package/dist/engine/debugger.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
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
|
-
// ──
|
|
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
|
-
//
|
|
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
|
-
// ──
|
|
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
|
-
// ──
|
|
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:
|
|
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
|
-
// ──
|
|
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
|
-
// ──
|
|
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":"AAWA
|
|
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;
|
|
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"}
|
package/dist/engine/delivery.js
CHANGED
|
@@ -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.
|
|
18
|
+
// 1. 从产品配置文件加载交付行为配置
|
|
13
19
|
const deliveryConfig = resolveDeliveryConfig(knowledgeIndex, config.product_profile);
|
|
14
|
-
// 2.
|
|
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.
|
|
28
|
+
// 3. 根据任务信息构建变更日志条目和提交消息
|
|
23
29
|
const entry = generateChangelogEntry(taskContext);
|
|
24
30
|
result.commit_message = formatCommitMessage(entry);
|
|
25
|
-
// 4.
|
|
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
|
-
//
|
|
44
|
+
// 从提交输出中提取 commit hash,回退到 git rev-parse
|
|
37
45
|
const hashMatch = commitOutput.match(/\[[^\s]+ ([0-9a-f]{7,})\]/);
|
|
38
|
-
|
|
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.
|
|
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
|
|
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.
|
|
134
|
+
// 7. 生成变更日志
|
|
116
135
|
result.changelog = formatChangelog(entry);
|
|
117
136
|
result.actions_performed.push("changelog");
|
|
118
137
|
return result;
|
|
119
138
|
}
|
|
120
|
-
// ──
|
|
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
|
-
// ──
|
|
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":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/engine/delivery.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAwCxB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAoB;IAChD,MAAM,EACJ,WAAW,EACX,MAAM,EACN,cAAc,EACd,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,GACP,GAAG,KAAK,CAAC;IAEV,MAAM,MAAM,GAAmB;QAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,iBAAiB,EAAE,EAAE;QACrB,cAAc,EAAE,EAAE;QAClB,MAAM,EAAE,EAAE;QACV,eAAe,EAAE,EAAE;QACnB,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,qBAAqB;IACrB,MAAM,cAAc,GAAG,qBAAqB,CAC1C,cAAc,EACd,MAAM,CAAC,eAAe,CACvB,CAAC;IAEF,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,CAAC,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,aAAa,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC1D,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yBAAyB;IACzB,MAAM,KAAK,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,CAAC,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAEnD,+BAA+B;IAC/B,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,EAAE,aAAa,IAAI,EAAE,CAAC;YAChE,sBAAsB;YACtB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CACtC,WAAW,EACX,MAAM,CAAC,cAAc,CACtB,CAAC;YACF,yCAAyC;YACzC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAClE,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,MAAM,CAAC,WAAW,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBACnE,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtD,CAAC;YACF,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,QAA0B;gBAClC,MAAM,EAAE,eAAe;aACxB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,QAA0B;YAClC,MAAM,EAAE,oCAAoC;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,IAAI,cAAc,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACzD,iBAAiB;YACjB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;oBAC1B,MAAM,EAAE,MAAwB;oBAChC,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtD,CAAC;YACF,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,MAAwB;gBAChC,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,MAAwB;YAChC,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,MAAwB;YAChC,MAAM,EAAE,kCAAkC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,IAAI,cAAc,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,MAAM;aAC3B,YAAY,CAAC,WAAW,CAAC;aACzB,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GACV,cAAc,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACjC,CAAC,CAAC,YAAY,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAClD,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,CAAC,MAAM,GAAG,yBAAyB,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,WAAW,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC;YACnL,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,IAAsB;gBAC9B,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,IAAsB;YAC9B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gCAAgC;SAC3D,CAAC,CAAC;IACL,CAAC;IAED,YAAY;IACZ,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qBAAqB;AAErB;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,iBAAiB;AAEjB;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAwB;IAC7D,oCAAoC;IACpC,MAAM,OAAO,GAA2C;QACtD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,OAAO;KAClB,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,EAAE,SAAS,IAAI,SAAS,CAAC;IACpE,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO;QAClC,KAAK,EAAE,WAAW,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,MAAM;QAC9D,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,gBAAgB;QAC9D,OAAO,EAAE,WAAW,CAAC,OAAO;KAC7B,CAAC;AACJ,CAAC;AAED,eAAe;AAEf;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAqB;IAChD,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,WAAW,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC;AACzF,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAqB;IAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,OAAO,IAAI,YAAY,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC;AACxG,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAC5B,cAAqC,EACrC,cAAsB;IAEtB,0BAA0B;IAC1B,MAAM,QAAQ,GAAmB;QAC/B,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,KAAK;KACxB,CAAC;IAEF,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC;QAC1C,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,cAAc,CAAC;QAC1B,KAAK,EAAE,CAAC;KACT,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,SAAS;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACrB,OAAO;oBACL,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;oBAChE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;oBAC1D,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;oBACpD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;oBAC1D,gBAAgB,EACd,MAAM,CAAC,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB;iBAChE,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import type { DependencyScanResult } from "../types.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
7
|
-
*
|
|
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;
|
|
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"}
|