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
|
@@ -1,24 +1,43 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 任务分类器 — 根据用户意图文本分类任务类型、风险等级和执行策略。
|
|
3
|
+
* 零 AI 依赖,纯关键词 + 规则匹配。
|
|
4
|
+
*
|
|
5
|
+
* 职责:
|
|
6
|
+
* - 识别任务类型(feature / bugfix / refactor 等 12 种)
|
|
7
|
+
* - 评估歧义度(low / medium / high),高歧义时生成澄清问题
|
|
8
|
+
* - 评估风险等级(low / medium / high)
|
|
9
|
+
* - 推断复杂度和执行策略(skip_soloForge / quick_fix / full_pipeline)
|
|
10
|
+
* - 猜测涉及的仓库(backend / frontend)
|
|
11
|
+
*/
|
|
12
|
+
// ── 分类规则表: 按优先级排列,每个规则包含匹配关键词和对应的任务类型 ──
|
|
2
13
|
const TYPE_RULES = [
|
|
3
14
|
{ keywords: ["新建", "新建模块", "初始化", "脚手架", "scaffold"], type: "scaffold" },
|
|
4
15
|
{ keywords: ["紧急修复", "线上问题", "生产环境", "hotfix"], type: "hotfix" },
|
|
5
16
|
{ keywords: ["修复", "fix", "bug", "错误", "异常", "NPE", "空指针", "报错"], type: "bugfix" },
|
|
6
17
|
{ keywords: ["review", "审查", "看看", "检查代码", "代码质量"], type: "review" },
|
|
7
18
|
{ keywords: ["解释", "说明", "什么意思", "怎么理解"], type: "explain" },
|
|
8
|
-
{ keywords: ["优化", "性能", "加速", "慢", "提高性能"], type: "optimize" },
|
|
19
|
+
{ keywords: ["优化", "性能", "加速", "慢", "提高性能", "加快"], type: "optimize" },
|
|
9
20
|
{ keywords: ["文档", "注释", "README"], type: "document" },
|
|
10
21
|
{ keywords: ["测试", "test", "补测试", "写测试", "单元测试"], type: "test" },
|
|
11
22
|
{ keywords: ["调试", "排障", "为什么报错", "排查"], type: "debug" },
|
|
12
23
|
{ keywords: ["重构", "优化结构", "提取", "抽象", "拆分"], type: "refactor" },
|
|
13
|
-
{ keywords: ["加功能", "新增", "新功能", "创建", "实现", "开发", "添加"], type: "feature" },
|
|
24
|
+
{ keywords: ["加功能", "新增", "新功能", "创建", "实现", "开发", "添加", "加一个", "加个", "加上", "增加", "做一个", "写一个", "写个", "做个"], type: "feature" },
|
|
14
25
|
];
|
|
26
|
+
// 高歧义动词: 缺乏明确操作目标的模糊动作词
|
|
15
27
|
const HIGH_AMBIGUITY_VERBS = ["优化", "重构", "改进", "提升", "调整", "完善", "梳理"];
|
|
28
|
+
// 明确动词: 指向具体操作的可执行动作词
|
|
16
29
|
const CLEAR_VERBS = ["加", "修", "删", "改", "新建", "创建", "实现"];
|
|
30
|
+
// 明确对象模式: 匹配类名、文件路径、API 路径等具体技术实体
|
|
17
31
|
const CLEAR_OBJECTS_PATTERNS = [
|
|
18
32
|
/^[A-Z]\w*(Service|Controller|Mapper|Repository|Component|Module)/,
|
|
19
33
|
/\.(ts|tsx|java|py|yaml|json)$/,
|
|
20
34
|
/api\/|\/v\d\//,
|
|
21
35
|
];
|
|
36
|
+
/**
|
|
37
|
+
* 对用户意图进行分类,返回任务类型、风险、复杂度等决策信息。
|
|
38
|
+
* @param input - 分类输入,包含意图文本和可选的项目路径
|
|
39
|
+
* @returns 分类结果,包含 task_type / risk / complexity / strategy / ambiguity 等
|
|
40
|
+
*/
|
|
22
41
|
export function classify(input) {
|
|
23
42
|
const { intent } = input;
|
|
24
43
|
const normalized = intent.toLowerCase();
|
|
@@ -27,6 +46,7 @@ export function classify(input) {
|
|
|
27
46
|
const risk = assessRisk(taskType, normalized);
|
|
28
47
|
const complexity = assessComplexity(normalized);
|
|
29
48
|
const strategy = selectStrategy(taskType);
|
|
49
|
+
// 执行模式: skip 策略直通,高风险需人工监督,其余自动执行
|
|
30
50
|
const mode = strategy === "skip_soloForge" ? "passthrough" : risk === "high" ? "supervised" : "autonomous";
|
|
31
51
|
const result = {
|
|
32
52
|
task_type: taskType,
|
|
@@ -50,8 +70,18 @@ export function classify(input) {
|
|
|
50
70
|
}
|
|
51
71
|
return result;
|
|
52
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* 匹配任务类型,按优先级依次检查特殊组合模式和关键词规则。
|
|
75
|
+
* @param normalized - 小写化后的意图文本
|
|
76
|
+
* @returns 匹配到的任务类型,默认返回 "passthrough"
|
|
77
|
+
*/
|
|
53
78
|
function matchType(normalized) {
|
|
79
|
+
// "加 + 名词短语"模式:加批量删除、加权限、加字段 等(排除加快/加密/加载/加剧等非功能词汇)
|
|
80
|
+
// 负向前瞻 (?!快|密|载|...) 排除动词前缀,后跟 1-8 个字符的对象名 + 功能后缀词
|
|
81
|
+
if (/加(?!快|密|载|剧|速|深|重)[^\s]{1,8}(接口|功能|模块|页面|字段|按钮|服务|权限|配置|能力|校验|逻辑|规则|支持|特性)/.test(normalized))
|
|
82
|
+
return "feature";
|
|
54
83
|
// 优先检查需要区分的组合关键词(如"优化结构" → refactor,而非 optimize)
|
|
84
|
+
// 必须在 TYPE_RULES 遍历之前,否则"优化"会被错误匹配为 optimize
|
|
55
85
|
if (/优化.*(结构|架构|代码|组织|设计)/i.test(normalized))
|
|
56
86
|
return "refactor";
|
|
57
87
|
if (normalized.includes("新建模块") || normalized.includes("脚手架") || normalized.includes("scaffold"))
|
|
@@ -65,6 +95,12 @@ function matchType(normalized) {
|
|
|
65
95
|
}
|
|
66
96
|
return "passthrough";
|
|
67
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* 评估意图歧义度,基于动词明确性和对象具体性综合判断。
|
|
100
|
+
* @param intent - 原始意图文本(保留大小写用于模式匹配)
|
|
101
|
+
* @param normalized - 小写化后的意图文本
|
|
102
|
+
* @returns 歧义等级: "low" / "medium" / "high"
|
|
103
|
+
*/
|
|
68
104
|
function assessAmbiguity(intent, normalized) {
|
|
69
105
|
const hasClearVerb = CLEAR_VERBS.some((v) => normalized.includes(v));
|
|
70
106
|
const hasClearObject = CLEAR_OBJECTS_PATTERNS.some((p) => p.test(intent));
|
|
@@ -77,6 +113,12 @@ function assessAmbiguity(intent, normalized) {
|
|
|
77
113
|
return "low";
|
|
78
114
|
return "medium";
|
|
79
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* 评估任务风险等级,hotfix 和涉及数据库变更的 bugfix/refactor 为高风险。
|
|
118
|
+
* @param type - 已识别的任务类型
|
|
119
|
+
* @param normalized - 小写化后的意图文本,用于检测数据库相关关键词
|
|
120
|
+
* @returns 风险等级: "low" / "medium" / "high"
|
|
121
|
+
*/
|
|
80
122
|
function assessRisk(type, normalized) {
|
|
81
123
|
if (type === "hotfix")
|
|
82
124
|
return "high";
|
|
@@ -88,6 +130,11 @@ function assessRisk(type, normalized) {
|
|
|
88
130
|
return "low";
|
|
89
131
|
return "medium";
|
|
90
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* 评估任务复杂度,基于意图中的范围关键词(多个、批量、跨等)和操作粒度判断。
|
|
135
|
+
* @param normalized - 小写化后的意图文本
|
|
136
|
+
* @returns 复杂度: "low" / "medium" / "high"
|
|
137
|
+
*/
|
|
91
138
|
function assessComplexity(normalized) {
|
|
92
139
|
const complexHints = ["多个", "批量", "跨", "联调", "前后端", "多仓库", "全链路"];
|
|
93
140
|
if (complexHints.some((h) => normalized.includes(h)))
|
|
@@ -96,6 +143,13 @@ function assessComplexity(normalized) {
|
|
|
96
143
|
return "low";
|
|
97
144
|
return "medium";
|
|
98
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* 根据任务类型选择执行策略。
|
|
148
|
+
* review/explain/document 等只读类型跳过 SoloForge 流程,
|
|
149
|
+
* bugfix/hotfix/test 走快速修复路径,其余走完整流水线。
|
|
150
|
+
* @param type - 已识别的任务类型
|
|
151
|
+
* @returns 执行策略: "skip_soloForge" / "quick_fix" / "full_pipeline"
|
|
152
|
+
*/
|
|
99
153
|
function selectStrategy(type) {
|
|
100
154
|
if (["review", "explain", "document", "passthrough"].includes(type))
|
|
101
155
|
return "skip_soloForge";
|
|
@@ -103,6 +157,12 @@ function selectStrategy(type) {
|
|
|
103
157
|
return "quick_fix";
|
|
104
158
|
return "full_pipeline";
|
|
105
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* 根据意图文本中的技术关键词推测涉及的仓库。
|
|
162
|
+
* 无法判断时默认同时涉及 backend 和 frontend。
|
|
163
|
+
* @param normalized - 小写化后的意图文本
|
|
164
|
+
* @returns 仓库名称数组,如 ["backend"] 或 ["backend", "frontend"]
|
|
165
|
+
*/
|
|
106
166
|
function guessRepos(normalized) {
|
|
107
167
|
const repos = [];
|
|
108
168
|
if (/后端|backend|java|spring|service|controller|mapper|api/i.test(normalized))
|
|
@@ -113,9 +173,21 @@ function guessRepos(normalized) {
|
|
|
113
173
|
repos.push("backend", "frontend");
|
|
114
174
|
return repos;
|
|
115
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* 构建分类摘要文本。
|
|
178
|
+
* @param intent - 原始意图
|
|
179
|
+
* @param type - 识别到的任务类型
|
|
180
|
+
* @returns 摘要字符串
|
|
181
|
+
*/
|
|
116
182
|
function buildSummary(intent, type) {
|
|
117
183
|
return `意图分析: ${type} 类型 — "${intent}"`;
|
|
118
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* 为高歧义意图生成澄清问题列表。
|
|
187
|
+
* @param intent - 原始意图文本
|
|
188
|
+
* @param _type - 任务类型(预留参数,当前未使用)
|
|
189
|
+
* @returns 澄清问题数组
|
|
190
|
+
*/
|
|
119
191
|
function generateQuestions(intent, _type) {
|
|
120
192
|
const questions = [];
|
|
121
193
|
if (/优化/.test(intent)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/engine/classifier.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/engine/classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,36 @@
|
|
|
1
|
-
import type { ClassifyResult, CodeReviewResult, ProjectConfig, ReviewRole, UncertaintyTrigger } from "../types.js";
|
|
1
|
+
import type { ClassifyResult, ReviewFinding, CodeReviewResult, ProjectConfig, ReviewRole, UncertaintyTrigger } from "../types.js";
|
|
2
2
|
import { DebtTracker } from "./debt_tracker.js";
|
|
3
3
|
import type { KnowledgeIndexManager } from "../knowledge/index_manager.js";
|
|
4
|
+
/**
|
|
5
|
+
* 代码审查引擎 — 对变更文件执行多维度静态审查,包括质量、安全、性能、技术债务和知识驱动规则检查。
|
|
6
|
+
* 纯规则驱动,零 AI 依赖。支持自审/同行审查角色切换、风险调整审查和不确定性触发条件检测。
|
|
7
|
+
*
|
|
8
|
+
* 机制 3: 认知减负路由 — 按信任分级过滤审查发现,减少决策疲劳:
|
|
9
|
+
* - 白盒/建议跳过: 完全符合 Pattern 且测试全绿的 CRUD 逻辑
|
|
10
|
+
* - 灰盒/建议审查: 涉及核心算法、安全边界或熔断决策后的实现
|
|
11
|
+
* - 黑盒/强制审查: 自创的、无知识库支撑的非标逻辑
|
|
12
|
+
*/
|
|
13
|
+
/** 审查信任分级 */
|
|
14
|
+
export type ReviewTrustLevel = "white_box" | "gray_box" | "black_box";
|
|
15
|
+
/** 分级审查结果 */
|
|
16
|
+
export interface TrustClassifiedFinding extends ReviewFinding {
|
|
17
|
+
/** 信任级别 */
|
|
18
|
+
trust_level: ReviewTrustLevel;
|
|
19
|
+
/** 分级理由 */
|
|
20
|
+
trust_reason: string;
|
|
21
|
+
}
|
|
22
|
+
/** 分级审查汇总 */
|
|
23
|
+
export interface TrustClassificationSummary {
|
|
24
|
+
/** 白盒发现数(建议跳过) */
|
|
25
|
+
white_box_count: number;
|
|
26
|
+
/** 灰盒发现数(建议审查) */
|
|
27
|
+
gray_box_count: number;
|
|
28
|
+
/** 黑盒发现数(强制审查) */
|
|
29
|
+
black_box_count: number;
|
|
30
|
+
/** 审查建议 */
|
|
31
|
+
recommendation: string;
|
|
32
|
+
}
|
|
33
|
+
/** 代码审查输入参数 */
|
|
4
34
|
export interface ReviewInput {
|
|
5
35
|
changedFiles: string[];
|
|
6
36
|
projectPath: string;
|
|
@@ -11,5 +41,11 @@ export interface ReviewInput {
|
|
|
11
41
|
review_role?: ReviewRole;
|
|
12
42
|
uncertainty_triggers?: UncertaintyTrigger[];
|
|
13
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* 执行代码审查 — 对变更文件逐一进行质量、安全、性能、技术债务和知识规则检查。
|
|
46
|
+
* @param input - 审查输入参数,包含变更文件列表、项目路径、配置和分类结果等
|
|
47
|
+
* @param tracker - 可选的技术债务追踪器,审查中发现的技术债务会自动记录
|
|
48
|
+
* @returns 代码审查结果,包含发现列表、严重度统计和总体评估
|
|
49
|
+
*/
|
|
14
50
|
export declare function reviewCode(input: ReviewInput, tracker?: DebtTracker): Promise<CodeReviewResult>;
|
|
15
51
|
//# sourceMappingURL=code_reviewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code_reviewer.d.ts","sourceRoot":"","sources":["../../src/engine/code_reviewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"code_reviewer.d.ts","sourceRoot":"","sources":["../../src/engine/code_reviewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAmC,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACnK,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E;;;;;;;;GAQG;AAEH,aAAa;AACb,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AAEtE,aAAa;AACb,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,WAAW;IACX,WAAW,EAAE,gBAAgB,CAAC;IAC9B,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,aAAa;AACb,MAAM,WAAW,0BAA0B;IACzC,kBAAkB;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW;IACX,cAAc,EAAE,MAAM,CAAC;CACxB;AAyFD,eAAe;AACf,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,oBAAoB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAoH3B"}
|
|
@@ -1,13 +1,88 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* 机制 3: 对审查发现进行信任分级路由。
|
|
5
|
+
* 白盒 → 建议跳过(CRUD/符合模式),灰盒 → 建议审查(核心算法/安全),黑盒 → 强制审查(非标逻辑)
|
|
6
|
+
*/
|
|
7
|
+
function classifyFindingsByTrust(findings, knowledgeIndex, changedFiles, fileContents) {
|
|
8
|
+
// 获取知识库中的 review_rule 条目用于匹配
|
|
9
|
+
const knowledgeRules = knowledgeIndex
|
|
10
|
+
? knowledgeIndex.query({ type: "review_rule", limit: 50 })
|
|
11
|
+
: [];
|
|
12
|
+
let whiteCount = 0;
|
|
13
|
+
let grayCount = 0;
|
|
14
|
+
let blackCount = 0;
|
|
15
|
+
const classified = findings.map((f) => {
|
|
16
|
+
const { level, reason } = determineTrustLevel(f, knowledgeRules, fileContents);
|
|
17
|
+
if (level === "white_box")
|
|
18
|
+
whiteCount++;
|
|
19
|
+
else if (level === "gray_box")
|
|
20
|
+
grayCount++;
|
|
21
|
+
else
|
|
22
|
+
blackCount++;
|
|
23
|
+
return { ...f, trust_level: level, trust_reason: reason };
|
|
24
|
+
});
|
|
25
|
+
const recommendation = blackCount > 0
|
|
26
|
+
? `强制审查 ${blackCount} 项黑盒发现(无知识库支撑的非标逻辑)`
|
|
27
|
+
: grayCount > 0
|
|
28
|
+
? `建议审查 ${grayCount} 项灰盒发现(核心算法/安全边界相关)`
|
|
29
|
+
: `全部为白盒发现,建议跳过详细审查`;
|
|
30
|
+
return {
|
|
31
|
+
classified,
|
|
32
|
+
summary: {
|
|
33
|
+
white_box_count: whiteCount,
|
|
34
|
+
gray_box_count: grayCount,
|
|
35
|
+
black_box_count: blackCount,
|
|
36
|
+
recommendation,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** 判断单条发现的信任级别 */
|
|
41
|
+
function determineTrustLevel(finding, knowledgeRules, _fileContents) {
|
|
42
|
+
// 黑盒判定: 无知识库支撑的 critical 发现
|
|
43
|
+
if (finding.severity === "critical") {
|
|
44
|
+
const hasKnowledgeSupport = knowledgeRules.some((rule) => rule.body && rule.body.includes(finding.title));
|
|
45
|
+
if (!hasKnowledgeSupport) {
|
|
46
|
+
return {
|
|
47
|
+
level: "black_box",
|
|
48
|
+
reason: "严重问题且无知识库规则支撑,属于非标逻辑",
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 灰盒判定: 安全维度 或 architecture 维度
|
|
53
|
+
if (finding.dimension === "security" || finding.dimension === "architecture") {
|
|
54
|
+
return {
|
|
55
|
+
level: "gray_box",
|
|
56
|
+
reason: `涉及${finding.dimension === "security" ? "安全边界" : "架构"},建议审查`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// 灰盒判定: 严重度为 warning 的性能问题
|
|
60
|
+
if (finding.dimension === "performance" && finding.severity === "warning") {
|
|
61
|
+
return {
|
|
62
|
+
level: "gray_box",
|
|
63
|
+
reason: "性能警告,涉及核心逻辑效率",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// 白盒判定: 其余所有(quality/info/debt 等)
|
|
67
|
+
return {
|
|
68
|
+
level: "white_box",
|
|
69
|
+
reason: "常规质量/技术债务检查项,符合已知模式",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 执行代码审查 — 对变更文件逐一进行质量、安全、性能、技术债务和知识规则检查。
|
|
74
|
+
* @param input - 审查输入参数,包含变更文件列表、项目路径、配置和分类结果等
|
|
75
|
+
* @param tracker - 可选的技术债务追踪器,审查中发现的技术债务会自动记录
|
|
76
|
+
* @returns 代码审查结果,包含发现列表、严重度统计和总体评估
|
|
77
|
+
*/
|
|
3
78
|
export async function reviewCode(input, tracker) {
|
|
4
79
|
const { changedFiles, projectPath, config, classification, fileContents, knowledgeIndex, review_role, uncertainty_triggers } = input;
|
|
5
|
-
// 能力 5: 角色检测 —
|
|
80
|
+
// 能力 5: 角色检测 — 默认自审,自审模式下置信度降低 0.2
|
|
6
81
|
const role = review_role ?? "self_review";
|
|
7
82
|
const selfReviewConfidencePenalty = role === "self_review" ? -0.2 : 0;
|
|
8
|
-
// 能力 1: 风险调整审查
|
|
83
|
+
// 能力 1: 风险调整审查 — 高/中风险任务启用加强审查
|
|
9
84
|
const riskAdjusted = classification?.risk === "high" || classification?.risk === "medium";
|
|
10
|
-
//
|
|
85
|
+
// 跳过逻辑: hotfix 类型自动跳过审查以加速修复
|
|
11
86
|
if (classification?.task_type === "hotfix") {
|
|
12
87
|
return {
|
|
13
88
|
task_id: "",
|
|
@@ -80,9 +155,11 @@ export async function reviewCode(input, tracker) {
|
|
|
80
155
|
uncertaintyViolations.push(`${trigger.trigger_type}: ${trigger.description} — 未确认`);
|
|
81
156
|
}
|
|
82
157
|
}
|
|
158
|
+
// 机制 3: 认知减负路由 — 按信任分级过滤审查发现
|
|
159
|
+
const { classified: trustClassified, summary: trustSummary } = classifyFindingsByTrust(findings, knowledgeIndex, changedFiles, fileContents);
|
|
83
160
|
return {
|
|
84
161
|
task_id: "",
|
|
85
|
-
findings,
|
|
162
|
+
findings: trustClassified,
|
|
86
163
|
summary: { total: findings.length, by_dimension: byDimension, by_severity: bySeverity, debt_items: debtCount },
|
|
87
164
|
overall_assessment: formatAssessment(findings.length, bySeverity, role, riskAdjusted),
|
|
88
165
|
review_role: role,
|
|
@@ -90,13 +167,14 @@ export async function reviewCode(input, tracker) {
|
|
|
90
167
|
disputes: [],
|
|
91
168
|
uncertainty_violations: uncertaintyViolations.length > 0 ? uncertaintyViolations : undefined,
|
|
92
169
|
risk_adjusted: riskAdjusted,
|
|
170
|
+
trust_classification: trustSummary,
|
|
93
171
|
};
|
|
94
172
|
}
|
|
95
|
-
|
|
173
|
+
/** 质量维度检查 — 检测 console.log 和 TypeScript any 类型使用 */
|
|
96
174
|
function checkQuality(filePath, content, lines, ext, startIdx) {
|
|
97
175
|
const findings = [];
|
|
98
176
|
let idx = startIdx;
|
|
99
|
-
// console.log
|
|
177
|
+
// console.log 检测(跳过测试文件,测试中 console.log 可接受)
|
|
100
178
|
if (!/\.test\.|\.spec\./.test(filePath)) {
|
|
101
179
|
lines.forEach((line, i) => {
|
|
102
180
|
if (/console\.log\(/.test(line)) {
|
|
@@ -104,7 +182,7 @@ function checkQuality(filePath, content, lines, ext, startIdx) {
|
|
|
104
182
|
}
|
|
105
183
|
});
|
|
106
184
|
}
|
|
107
|
-
// TypeScript any
|
|
185
|
+
// TypeScript any 类型检测 — 三种 any 用法: 类型注解(: any)、断言(as any)、泛型(<any>)
|
|
108
186
|
if (ext === ".ts" || ext === ".tsx") {
|
|
109
187
|
lines.forEach((line, i) => {
|
|
110
188
|
if (/: any\b/.test(line) || /as any/.test(line) || /<any>/.test(line)) {
|
|
@@ -114,11 +192,11 @@ function checkQuality(filePath, content, lines, ext, startIdx) {
|
|
|
114
192
|
}
|
|
115
193
|
return findings;
|
|
116
194
|
}
|
|
117
|
-
|
|
195
|
+
/** 安全维度检查 — 检测 SQL 拼接、eval/Function 构造器和 innerHTML 赋值 */
|
|
118
196
|
function checkSecurity(filePath, content, lines, ext, startIdx) {
|
|
119
197
|
const findings = [];
|
|
120
198
|
let idx = startIdx;
|
|
121
|
-
// SQL
|
|
199
|
+
// SQL 拼接检测 — 匹配含 SQL 关键字且使用字符串拼接(+/${}/%s)的行,仅检查 Java/TS 文件
|
|
122
200
|
if (ext === ".java" || ext === ".ts") {
|
|
123
201
|
lines.forEach((line, i) => {
|
|
124
202
|
if (/["'`]SELECT|INSERT|UPDATE|DELETE/i.test(line) && (/\+/.test(line) || /\$\{/.test(line) || /%s/.test(line))) {
|
|
@@ -126,13 +204,13 @@ function checkSecurity(filePath, content, lines, ext, startIdx) {
|
|
|
126
204
|
}
|
|
127
205
|
});
|
|
128
206
|
}
|
|
129
|
-
// eval
|
|
207
|
+
// eval/Function 构造器检测 — 动态代码执行,任意文件类型均检查
|
|
130
208
|
lines.forEach((line, i) => {
|
|
131
209
|
if (/\beval\s*\(/.test(line) || /\bFunction\s*\(/.test(line)) {
|
|
132
210
|
findings.push(makeFinding(idx++, filePath, i + 1, "security", "critical", "使用了 eval 或 Function 构造器", `第 ${i + 1} 行使用了动态代码执行`, "避免 eval,使用安全的替代方案"));
|
|
133
211
|
}
|
|
134
212
|
});
|
|
135
|
-
// innerHTML 检测
|
|
213
|
+
// innerHTML 检测 — XSS 攻击面,仅检查前端文件 (TSX/JSX/HTML)
|
|
136
214
|
if (ext === ".tsx" || ext === ".jsx" || ext === ".html") {
|
|
137
215
|
lines.forEach((line, i) => {
|
|
138
216
|
if (/\.innerHTML\s*=/.test(line)) {
|
|
@@ -142,11 +220,11 @@ function checkSecurity(filePath, content, lines, ext, startIdx) {
|
|
|
142
220
|
}
|
|
143
221
|
return findings;
|
|
144
222
|
}
|
|
145
|
-
|
|
223
|
+
/** 性能维度检查 — 检测循环内数据库调用(N+1 问题)和 SELECT * 语句 */
|
|
146
224
|
function checkPerformance(filePath, content, lines, ext, startIdx) {
|
|
147
225
|
const findings = [];
|
|
148
226
|
let idx = startIdx;
|
|
149
|
-
//
|
|
227
|
+
// 循环内数据库调用检测 — 通过花括号深度追踪 for/while 循环范围,仅检查 Java 文件
|
|
150
228
|
if (ext === ".java") {
|
|
151
229
|
const loopPattern = /(for|while)\s*\(/;
|
|
152
230
|
const dbPattern = /\.(select|insert|update|delete|save|findBy|query)\s*\(/i;
|
|
@@ -174,7 +252,7 @@ function checkPerformance(filePath, content, lines, ext, startIdx) {
|
|
|
174
252
|
}
|
|
175
253
|
});
|
|
176
254
|
}
|
|
177
|
-
// SELECT * 检测
|
|
255
|
+
// SELECT * 检测 — 返回不必要字段造成资源浪费,任意文件类型均检查
|
|
178
256
|
lines.forEach((line, i) => {
|
|
179
257
|
if (/SELECT\s+\*/i.test(line)) {
|
|
180
258
|
findings.push(makeFinding(idx++, filePath, i + 1, "performance", "info", "使用了 SELECT *", `第 ${i + 1} 行使用了 SELECT *,可能返回不必要的数据`, "明确列出需要的字段"));
|
|
@@ -182,7 +260,7 @@ function checkPerformance(filePath, content, lines, ext, startIdx) {
|
|
|
182
260
|
});
|
|
183
261
|
return findings;
|
|
184
262
|
}
|
|
185
|
-
|
|
263
|
+
/** 技术债务维度检查 — 检测 TODO/FIXME/HACK/XXX 标记和过长文件(>500行) */
|
|
186
264
|
function checkDebt(filePath, content, lines, startIdx) {
|
|
187
265
|
const findings = [];
|
|
188
266
|
let idx = startIdx;
|
|
@@ -205,11 +283,17 @@ function checkDebt(filePath, content, lines, startIdx) {
|
|
|
205
283
|
}
|
|
206
284
|
return findings;
|
|
207
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* 从知识条目正文中解析审查规则 — 支持格式: `- [ID] 描述 | pattern: /regex/flags | severity: level | scope: scope`
|
|
288
|
+
* @param body - 知识条目正文内容
|
|
289
|
+
* @param fileName - 知识条目文件名,用于推断审查维度
|
|
290
|
+
* @returns 解析后的规则数组,无效规则(如非法正则)自动跳过
|
|
291
|
+
*/
|
|
208
292
|
function parseRulesFromEntry(body, fileName) {
|
|
209
293
|
const rules = [];
|
|
210
294
|
if (!body.includes("## 规则"))
|
|
211
295
|
return rules;
|
|
212
|
-
//
|
|
296
|
+
// 从文件名关键字推断审查维度 (security/quality/performance/architecture)
|
|
213
297
|
const dimensionFromName = (fn) => {
|
|
214
298
|
if (fn.includes("security"))
|
|
215
299
|
return "security";
|
|
@@ -231,7 +315,7 @@ function parseRulesFromEntry(body, fileName) {
|
|
|
231
315
|
if (inSection && line.startsWith("## "))
|
|
232
316
|
break;
|
|
233
317
|
if (inSection) {
|
|
234
|
-
//
|
|
318
|
+
// 规则格式: - [ID] 描述 | pattern: regex | severity: level | scope: scope
|
|
235
319
|
const match = line.match(/- \[([A-Z]+-\d+)\]\s*(.+?)(?:\s*\|\s*(.+))?$/);
|
|
236
320
|
if (!match)
|
|
237
321
|
continue;
|
|
@@ -263,11 +347,11 @@ function parseRulesFromEntry(body, fileName) {
|
|
|
263
347
|
function checkKnowledgeRules(filePath, content, lines, ext, knowledgeIndex, startIdx) {
|
|
264
348
|
const findings = [];
|
|
265
349
|
let idx = startIdx;
|
|
266
|
-
//
|
|
350
|
+
// 查询知识库中所有 review_rule 类型的条目(最多 20 条)
|
|
267
351
|
const entries = knowledgeIndex.query({ type: "review_rule", limit: 20 });
|
|
268
352
|
if (entries.length === 0)
|
|
269
353
|
return findings;
|
|
270
|
-
//
|
|
354
|
+
// 根据文件扩展名判断所属端(前端/后端),用于 scope 过滤
|
|
271
355
|
const isFrontend = /\.(tsx?|jsx?|vue|css|scss|html)$/.test(filePath);
|
|
272
356
|
const isTest = /\.test\.|\.spec\./.test(filePath);
|
|
273
357
|
const fileSide = isFrontend ? "frontend" : "backend";
|
|
@@ -286,7 +370,7 @@ function checkKnowledgeRules(filePath, content, lines, ext, knowledgeIndex, star
|
|
|
286
370
|
continue;
|
|
287
371
|
if (rule.scope === "frontend" && !isFrontend)
|
|
288
372
|
continue;
|
|
289
|
-
//
|
|
373
|
+
// 特殊 scope: "check: lines" — 文件行数检查规则,阈值 300 行
|
|
290
374
|
if (rule.scope === "check: lines") {
|
|
291
375
|
if (lines.length > 300) {
|
|
292
376
|
findings.push(makeFinding(idx++, filePath, undefined, inferDimension(entry.file_path), rule.severity, `文件过长(${lines.length} 行)`, `${filePath} 超过 300 行,建议按职责拆分`, "按单一职责拆分为多个组件/模块"));
|
|
@@ -303,9 +387,10 @@ function checkKnowledgeRules(filePath, content, lines, ext, knowledgeIndex, star
|
|
|
303
387
|
});
|
|
304
388
|
}
|
|
305
389
|
}
|
|
306
|
-
//
|
|
390
|
+
// 去重:同一文件+行号+标题末30字符视为重复,保留先出现的发现
|
|
307
391
|
return deduplicateFindings(findings);
|
|
308
392
|
}
|
|
393
|
+
/** 从文件路径推断审查维度 — 根据路径关键字映射到 quality/security/performance/architecture */
|
|
309
394
|
function inferDimension(filePath) {
|
|
310
395
|
if (filePath.includes("security"))
|
|
311
396
|
return "security";
|
|
@@ -317,6 +402,7 @@ function inferDimension(filePath) {
|
|
|
317
402
|
return "architecture";
|
|
318
403
|
return "quality";
|
|
319
404
|
}
|
|
405
|
+
/** 发现去重 — 同一文件+行号+标题末30字符视为重复项,仅保留首次出现 */
|
|
320
406
|
function deduplicateFindings(findings) {
|
|
321
407
|
const seen = new Map();
|
|
322
408
|
for (const f of findings) {
|
|
@@ -327,16 +413,26 @@ function deduplicateFindings(findings) {
|
|
|
327
413
|
}
|
|
328
414
|
return [...seen.values()];
|
|
329
415
|
}
|
|
330
|
-
|
|
416
|
+
/** 构造审查发现对象 — 生成统一格式的 ReviewFinding */
|
|
331
417
|
function makeFinding(idx, file, line, dimension, severity, title, description, suggestion) {
|
|
332
418
|
return { id: `R-${String(idx).padStart(3, "0")}`, file, line, dimension, severity, title, description, suggestion, is_debt: false };
|
|
333
419
|
}
|
|
420
|
+
/** 创建全零的维度计数器 */
|
|
334
421
|
function emptyDimension() {
|
|
335
422
|
return { quality: 0, security: 0, performance: 0, debt: 0, architecture: 0 };
|
|
336
423
|
}
|
|
424
|
+
/** 创建全零的严重度计数器 */
|
|
337
425
|
function emptySeverity() {
|
|
338
426
|
return { info: 0, warning: 0, critical: 0 };
|
|
339
427
|
}
|
|
428
|
+
/**
|
|
429
|
+
* 格式化总体评估文本 — 根据发现问题数量和严重度生成中文摘要。
|
|
430
|
+
* @param total - 发现总数
|
|
431
|
+
* @param bySeverity - 各严重度计数
|
|
432
|
+
* @param role - 审查角色,自审模式附加置信度提示
|
|
433
|
+
* @param riskAdjusted - 是否启用风险调整审查
|
|
434
|
+
* @returns 中文格式的评估摘要字符串
|
|
435
|
+
*/
|
|
340
436
|
function formatAssessment(total, bySeverity, role, riskAdjusted) {
|
|
341
437
|
if (total === 0)
|
|
342
438
|
return "代码审查通过,未发现问题";
|
|
@@ -356,16 +452,22 @@ function formatAssessment(total, bySeverity, role, riskAdjusted) {
|
|
|
356
452
|
}
|
|
357
453
|
return assessment;
|
|
358
454
|
}
|
|
455
|
+
/**
|
|
456
|
+
* 批量读取文件内容 — 无法读取的文件自动跳过(如已被删除)。
|
|
457
|
+
* @param files - 相对于 basePath 的文件路径列表
|
|
458
|
+
* @param basePath - 项目根目录
|
|
459
|
+
* @returns 文件路径到内容的映射
|
|
460
|
+
*/
|
|
359
461
|
async function readFiles(files, basePath) {
|
|
360
462
|
const contents = {};
|
|
361
|
-
|
|
463
|
+
await Promise.all(files.map(async (file) => {
|
|
362
464
|
try {
|
|
363
465
|
contents[file] = await fs.readFile(path.join(basePath, file), "utf-8");
|
|
364
466
|
}
|
|
365
467
|
catch {
|
|
366
468
|
// 文件无法读取时跳过
|
|
367
469
|
}
|
|
368
|
-
}
|
|
470
|
+
}));
|
|
369
471
|
return contents;
|
|
370
472
|
}
|
|
371
473
|
//# sourceMappingURL=code_reviewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code_reviewer.js","sourceRoot":"","sources":["../../src/engine/code_reviewer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"code_reviewer.js","sourceRoot":"","sources":["../../src/engine/code_reviewer.ts"],"names":[],"mappings":"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"}
|