soloforge 1.1.68 → 1.1.69

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 (48) hide show
  1. package/dist/context/adapters/shared/integration_guide.js +1 -1
  2. package/dist/context/templates/observed_consumption.d.ts.map +1 -1
  3. package/dist/context/templates/observed_consumption.js +0 -1
  4. package/dist/context/templates/observed_consumption.js.map +1 -1
  5. package/dist/context/templates/scaffolder.js +6 -7
  6. package/dist/context/templates/scaffolder.js.map +1 -1
  7. package/dist/context/templates/standard_asset_coverage.js +2 -2
  8. package/dist/context/templates/standard_asset_coverage.js.map +1 -1
  9. package/dist/core/adversarial_review_store.d.ts +3 -0
  10. package/dist/core/adversarial_review_store.d.ts.map +1 -1
  11. package/dist/core/adversarial_review_store.js.map +1 -1
  12. package/dist/domain/asset_registry/template_asset_contract_registry.js +5 -5
  13. package/dist/domain/asset_registry/template_asset_contract_registry.js.map +1 -1
  14. package/dist/gate/release/gate_checks/checkMainlineConsumption.d.ts.map +1 -1
  15. package/dist/gate/release/gate_checks/checkMainlineConsumption.js +3 -2
  16. package/dist/gate/release/gate_checks/checkMainlineConsumption.js.map +1 -1
  17. package/dist/gate/scope_controller.d.ts.map +1 -1
  18. package/dist/gate/scope_controller.js +3 -4
  19. package/dist/gate/scope_controller.js.map +1 -1
  20. package/dist/server/tools/sf_doctor.d.ts +7 -0
  21. package/dist/server/tools/sf_doctor.d.ts.map +1 -1
  22. package/dist/server/tools/sf_doctor.js +43 -1
  23. package/dist/server/tools/sf_doctor.js.map +1 -1
  24. package/dist/server/tools/sf_work.d.ts +4 -0
  25. package/dist/server/tools/sf_work.d.ts.map +1 -1
  26. package/dist/server/tools/sf_work.js +15 -2
  27. package/dist/server/tools/sf_work.js.map +1 -1
  28. package/dist/verify/index.d.ts +0 -4
  29. package/dist/verify/index.d.ts.map +1 -1
  30. package/dist/verify/index.js +0 -2
  31. package/dist/verify/index.js.map +1 -1
  32. package/package.json +1 -1
  33. package/dist/verify/audit/code_reviewer.d.ts +0 -78
  34. package/dist/verify/audit/code_reviewer.d.ts.map +0 -1
  35. package/dist/verify/audit/code_reviewer.js +0 -647
  36. package/dist/verify/audit/code_reviewer.js.map +0 -1
  37. package/dist/verify/audit/confidence_scorer.d.ts +0 -65
  38. package/dist/verify/audit/confidence_scorer.d.ts.map +0 -1
  39. package/dist/verify/audit/confidence_scorer.js +0 -73
  40. package/dist/verify/audit/confidence_scorer.js.map +0 -1
  41. package/dist/verify/audit/debt_tracker.d.ts +0 -85
  42. package/dist/verify/audit/debt_tracker.d.ts.map +0 -1
  43. package/dist/verify/audit/debt_tracker.js +0 -244
  44. package/dist/verify/audit/debt_tracker.js.map +0 -1
  45. package/dist/verify/audit/evolver.d.ts +0 -103
  46. package/dist/verify/audit/evolver.d.ts.map +0 -1
  47. package/dist/verify/audit/evolver.js +0 -420
  48. package/dist/verify/audit/evolver.js.map +0 -1
@@ -1,420 +0,0 @@
1
- /**
2
- * Evolver — 审计层模块。
3
- *
4
- * 职责边界:
5
- * - 负责:DriftDetectionResult 等 审计层职责
6
- * - 不负责:不属于本模块的职责由对应模块承担
7
- *
8
- * 被谁调用:发布门禁、质量检查
9
- * 调用谁:index、confidence_scorer、writer、logger
10
- *
11
- * 数据流:审计输入(代码/配置) → 检查 → 评分/报告
12
- * 持久化:无持久化(纯计算/内存态)
13
- */
14
- import { scoreConfidence } from "./confidence_scorer.js";
15
- import { KnowledgeWriter } from "../../context/knowledge/writer.js";
16
- import { debugLog } from "../../shared/logger.js";
17
- /**
18
- * 模式漂移检测 — 对比代码实现与知识库模式规则,检测偏离度。
19
- * 使用静态规则匹配扫描代码库,不依赖 AI。
20
- * @param patterns - 知识库中的模式条目
21
- * @param codeFiles - 代码文件内容映射(文件路径 → 文件内容)
22
- * @returns 漂移检测结果
23
- * @deprecated 无运行时消费者,保留备用
24
- */
25
- export function detectPatternDrift(patterns, codeFiles) {
26
- debugLog("漂移检测: 开始检测模式漂移");
27
- const driftDetails = [];
28
- for (const pattern of patterns) {
29
- if (!pattern.body)
30
- continue;
31
- // 从模式正文中提取"禁止"规则
32
- const prohibitRules = extractProhibitRules(pattern.body);
33
- for (const rule of prohibitRules) {
34
- let violated = false;
35
- let violationFile = "";
36
- for (const [filePath, content] of Object.entries(codeFiles)) {
37
- // 跳过测试文件和非源码文件
38
- if (/\.test\.|\.spec\.|\.d\.ts/.test(filePath))
39
- continue;
40
- if (/node_modules|\.soloforge|dist/.test(filePath))
41
- continue;
42
- if (rule.pattern.test(content)) {
43
- violated = true;
44
- violationFile = filePath;
45
- break;
46
- }
47
- }
48
- if (violated) {
49
- driftDetails.push({
50
- pattern_name: pattern.name,
51
- expected_rule: rule.description,
52
- detected_violation: violationFile,
53
- severity: rule.severity,
54
- });
55
- }
56
- }
57
- }
58
- const totalPatterns = patterns.filter((p) => p.body).length;
59
- const driftedPatterns = new Set(driftDetails.map((d) => d.pattern_name)).size;
60
- const driftRatio = totalPatterns > 0 ? driftedPatterns / totalPatterns : 0;
61
- const syncRequired = driftRatio >= 0.3;
62
- // 根因分析: 防止"循环修正"死锁
63
- let rootCause;
64
- if (syncRequired && driftDetails.length > 0) {
65
- rootCause = analyzeDriftRootCause(driftDetails, codeFiles);
66
- debugLog(`漂移检测: 偏离率 ${(driftRatio * 100).toFixed(0)}%,触发同步任务,正在分析根因`);
67
- }
68
- let recommendation;
69
- if (syncRequired) {
70
- const rca = rootCause;
71
- if (rca?.conclusion === "business_evolution") {
72
- recommendation = `⚠ 偏离率 ${(driftRatio * 100).toFixed(0)}% 超过阈值 30%。根因: 业务进化(${rca.evidence})。允许更新知识库规则`;
73
- }
74
- else if (rca?.conclusion === "code_degradation") {
75
- recommendation = `⚠ 偏离率 ${(driftRatio * 100).toFixed(0)}% 超过阈值 30%。根因: 代码退化(${rca.evidence})。禁止更新知识库,应重构代码以符合规范`;
76
- }
77
- else {
78
- recommendation = `⚠ 偏离率 ${(driftRatio * 100).toFixed(0)}% 超过阈值 30%。根因不确定。必须人工判定后再决定更新知识库还是重构代码`;
79
- }
80
- debugLog(`漂移检测: ${recommendation}`);
81
- }
82
- else if (driftRatio > 0) {
83
- recommendation = `偏离率 ${(driftRatio * 100).toFixed(0)}%,在可接受范围内。建议关注 ${driftDetails.filter((d) => d.severity === "critical").length} 个严重偏离`;
84
- }
85
- else {
86
- recommendation = "代码实现与知识库规范一致,无漂移";
87
- }
88
- debugLog(`漂移检测: 完成,检测 ${totalPatterns} 个模式,${driftedPatterns} 个偏离`);
89
- return {
90
- total_patterns: totalPatterns,
91
- drifted_patterns: driftedPatterns,
92
- drift_ratio: driftRatio,
93
- sync_required: syncRequired,
94
- drift_details: driftDetails,
95
- recommendation,
96
- root_cause_analysis: rootCause,
97
- };
98
- }
99
- /** 从模式正文中提取"禁止"类规则,转为可检测的正则模式 */
100
- function extractProhibitRules(body) {
101
- const rules = [];
102
- if (!body.includes("## 决策规则"))
103
- return rules;
104
- const lines = body.split("\n");
105
- let inSection = false;
106
- for (const line of lines) {
107
- if (line.startsWith("## 决策规则")) {
108
- inSection = true;
109
- continue;
110
- }
111
- if (inSection && line.startsWith("## "))
112
- break;
113
- if (inSection) {
114
- // 提取"禁止"规则
115
- const prohibitMatch = line.match(/-\s*禁止(.+)/);
116
- if (prohibitMatch) {
117
- const description = `禁止${prohibitMatch[1].trim()}`;
118
- // 从禁止规则生成检测正则
119
- const pattern = buildProhibitPattern(prohibitMatch[1]);
120
- if (pattern) {
121
- rules.push({ description, pattern, severity: "warning" });
122
- }
123
- }
124
- }
125
- }
126
- return rules;
127
- }
128
- /** 从禁止规则描述生成检测正则 */
129
- function buildProhibitPattern(ruleText) {
130
- // 常见禁止模式的正则映射
131
- if (/console\.log/.test(ruleText))
132
- return /console\.log\s*\(/;
133
- if (/eval/.test(ruleText))
134
- return /\beval\s*\(/;
135
- if (/innerHTML/.test(ruleText))
136
- return /\.innerHTML\s*=/;
137
- if (/SQL.*拼接|字符串拼接/.test(ruleText))
138
- return /(SELECT|INSERT|UPDATE|DELETE).*[+${]/;
139
- if (/同步导出/.test(ruleText))
140
- return /export\s*\(.*res\.write/;
141
- if (/Controller.*导出|Controller.*业务/.test(ruleText))
142
- return /Controller/;
143
- if (/硬编码/.test(ruleText))
144
- return /(?:password|secret|api[_-]?key)\s*[:=]\s*["'][^"']+["']/i;
145
- return null;
146
- }
147
- /**
148
- * 漂移根因分析 — 判断偏离是"代码退化"还是"业务进化",防止循环修正死锁。
149
- * 启发式规则:
150
- * - 安全/数据完整性相关规则违反 → 倾向代码退化
151
- * - 多文件同时违反同一规则 → 可能规范过时(业务进化)
152
- * - 其余 → 需人工审核
153
- */
154
- function analyzeDriftRootCause(details, _codeFiles) {
155
- const totalViolations = details.length;
156
- const uniqueFiles = new Set(details.map((d) => d.detected_violation)).size;
157
- const securityRelated = details.filter((d) => /eval|innerHTML|password|secret|SQL|注入|加密|脱敏|权限/i.test(d.expected_rule)).length;
158
- if (securityRelated > totalViolations * 0.3) {
159
- return {
160
- conclusion: "code_degradation",
161
- evidence: `${securityRelated}/${totalViolations} 项偏离涉及安全/数据完整性规则,不应通过更新规范来"合法化"`,
162
- allow_pattern_update: false,
163
- };
164
- }
165
- if (uniqueFiles >= 3 && totalViolations >= 3) {
166
- return {
167
- conclusion: "business_evolution",
168
- evidence: `${totalViolations} 项偏离分布在 ${uniqueFiles} 个文件中,可能反映合理的技术演进`,
169
- allow_pattern_update: true,
170
- };
171
- }
172
- return {
173
- conclusion: "unknown",
174
- evidence: `偏离分布在 ${uniqueFiles} 个文件中,无法自动判定根因,需人工审核`,
175
- allow_pattern_update: false,
176
- };
177
- }
178
- // 跟踪重复模式学习以提升置信度(限制大小防止内存泄漏)
179
- const MAX_PATTERN_TRACK_SIZE = 1000;
180
- const patternLearnCount = new Map();
181
- /**
182
- * 从任务执行结果中提取知识并写入知识库。
183
- * @param input - 进化输入,包含任务上下文、执行结果和验证输出
184
- * @param projectPath - 项目路径,用于知识文件写入
185
- * @returns 学习结果,包含是否采纳、置信度、暂存路径等
186
- */
187
- export async function evolve(input, projectPath) {
188
- const { taskContext, result, failureType, retryCount } = input;
189
- debugLog(`演进器: 开始处理任务 ${taskContext.task_id},结果: ${result}`);
190
- // 跳过 passthrough 任务的学习
191
- if (taskContext.classification?.strategy === "skip_soloForge") {
192
- debugLog(`演进器: 任务 ${taskContext.task_id} 为 passthrough 任务,跳过学习`);
193
- return { task_id: taskContext.task_id, learned: false, confidence: 0, status: "skipped" };
194
- }
195
- // 提取知识候选
196
- const candidate = extractKnowledge(input);
197
- if (!candidate) {
198
- debugLog(`演进器: 任务 ${taskContext.task_id} 无法提取知识候选,跳过`);
199
- return { task_id: taskContext.task_id, learned: false, confidence: 0, status: "skipped" };
200
- }
201
- // 评估置信度
202
- const isDegraded = taskContext.expansion?.degraded ?? false;
203
- let confidence = scoreConfidence({
204
- result,
205
- retryCount: retryCount ?? 0,
206
- failureType,
207
- matchedPatternsCount: taskContext.expansion?.matched_patterns?.length ?? 0,
208
- hasClearRootCause: failureType !== undefined,
209
- isDegraded,
210
- });
211
- // 持续同模式置信度提升: 每 3 次同一类型+范围的组合加 0.1,上限 1.0
212
- const patternKey = `${candidate.type}:${candidate.scope.join(",")}`;
213
- const count = (patternLearnCount.get(patternKey) ?? 0) + 1;
214
- patternLearnCount.set(patternKey, count);
215
- // 防止内存泄漏:超过上限时清理计数最低的条目(近似 LRU)
216
- if (patternLearnCount.size > MAX_PATTERN_TRACK_SIZE) {
217
- let minKey = null;
218
- let minCount = Infinity;
219
- for (const [k, v] of patternLearnCount) {
220
- if (v < minCount) {
221
- minCount = v;
222
- minKey = k;
223
- }
224
- }
225
- if (minKey)
226
- patternLearnCount.delete(minKey);
227
- }
228
- if (count > 0 && count % 3 === 0) {
229
- confidence = Math.min(confidence + 0.1, 1.0);
230
- }
231
- // 置信度决策: < 0.3 跳过,>= 0.8 直接采纳,其余暂存等待审核
232
- // KL-003 补充: 当前 0.3/0.8 为硬编码常量,不可通过配置文件或环境变量调整。
233
- // 如需可配置化,建议在 config.knowledge.evolution 中添加:
234
- // skip_threshold: number (默认 0.3)
235
- // adopt_threshold: number (默认 0.8)
236
- // 并在此处从 resolveProjectConfig() 读取,保持向后兼容(缺失时 fallback 到当前值)。
237
- if (confidence < 0.3) {
238
- debugLog(`演进器: 任务 ${taskContext.task_id} 置信度 ${confidence.toFixed(2)} 不足,跳过`);
239
- return { task_id: taskContext.task_id, learned: false, new_knowledge: candidate, confidence, status: "skipped" };
240
- }
241
- if (confidence >= 0.8) {
242
- // P1-B1: 高置信度知识直接持久化到 active 目录,避免学习成果丢失
243
- debugLog(`演进器: 任务 ${taskContext.task_id} 置信度 ${confidence.toFixed(2)},直接采纳并持久化知识 [${candidate.type}]`);
244
- try {
245
- const { resolveProjectConfig, getProjectKnowledgeDir } = await import("../../context/knowledge/loader.js");
246
- const { config } = await resolveProjectConfig(projectPath);
247
- const knowledgeDir = getProjectKnowledgeDir(config);
248
- const writer = new KnowledgeWriter(projectPath);
249
- const activeEntry = {
250
- id: `learned-${Date.now()}`,
251
- file_path: "",
252
- name: candidate.content.slice(0, 50),
253
- type: mapToKnowledgeType(candidate.type),
254
- scope: candidate.scope,
255
- products: candidate.products,
256
- created_at: new Date().toISOString().split("T")[0],
257
- updated_at: new Date().toISOString().split("T")[0],
258
- usage_count: 0,
259
- confidence,
260
- status: "active",
261
- };
262
- const activePath = await writer.writeToActive(activeEntry, candidate.content, knowledgeDir);
263
- return { task_id: taskContext.task_id, learned: true, new_knowledge: candidate, confidence, status: "accepted", staged_path: activePath };
264
- }
265
- catch (e) {
266
- // 持久化失败时降级为只标记 accepted(保持向后兼容)
267
- debugLog(`演进器: 高置信度知识持久化失败,降级为内存 accepted — ${e}`);
268
- return { task_id: taskContext.task_id, learned: true, new_knowledge: candidate, confidence, status: "accepted" };
269
- }
270
- }
271
- // 暂存等待审核 — 写入文件
272
- debugLog(`演进器: 任务 ${taskContext.task_id} 置信度 ${confidence.toFixed(2)},暂存等待人工审核`);
273
- const writer = new KnowledgeWriter(projectPath);
274
- const entry = {
275
- id: `learned-${Date.now()}`,
276
- file_path: "",
277
- name: candidate.content.slice(0, 50),
278
- type: mapToKnowledgeType(candidate.type),
279
- scope: candidate.scope,
280
- products: candidate.products,
281
- created_at: new Date().toISOString().split("T")[0],
282
- updated_at: new Date().toISOString().split("T")[0],
283
- usage_count: 0,
284
- confidence,
285
- status: "staged",
286
- };
287
- const stagedPath = await writer.writeToStaged(entry, candidate.content);
288
- return { task_id: taskContext.task_id, learned: true, new_knowledge: candidate, confidence, status: "staged", staged_path: stagedPath };
289
- }
290
- /**
291
- * 将进化学习类型映射到知识库条目类型。
292
- * rule_upgrade 和 prompt_optimization 归类为 pattern,acceptance_supplement 归类为 acceptance_template。
293
- * @param t - 进化学习类型
294
- * @returns 知识库条目类型
295
- */
296
- function mapToKnowledgeType(t) {
297
- if (t === "rule_upgrade" || t === "prompt_optimization")
298
- return "pattern";
299
- if (t === "acceptance_supplement")
300
- return "acceptance_template";
301
- return t;
302
- }
303
- /**
304
- * 从任务执行结果中提取知识候选。
305
- * 失败时按失败类型生成不同知识: 验收遗漏 / 确定性规则升级 / 范围模式 / prompt 优化。
306
- * 成功时从匹配的知识模式中提取重复模式。
307
- * @param input - 进化输入
308
- * @returns 知识候选对象,无法提取时返回 undefined
309
- */
310
- function extractKnowledge(input) {
311
- const { taskContext, result, verifyOutput, failureType } = input;
312
- const scope = taskContext.classification?.affected_repos ?? ["shared"];
313
- const products = [taskContext.product_profile];
314
- if (result === "failure") {
315
- if (!failureType)
316
- return undefined;
317
- // 优先检查验收遗漏
318
- if (verifyOutput?.acceptance_results) {
319
- const failedChecks = Object.entries(verifyOutput.acceptance_results)
320
- .filter(([, passed]) => !passed)
321
- .map(([id]) => id);
322
- if (failedChecks.length > 0) {
323
- return {
324
- type: "acceptance_supplement",
325
- content: `## 决策规则\n- ${taskContext.intent} 时必须确保 ${failedChecks.join("、")} 通过\n\n## 验收项\n${failedChecks.map((id, i) => `- [AC-${String(i + 1).padStart(2, "0")}] ${id} 检查通过`).join("\n")}`,
326
- scope,
327
- products,
328
- };
329
- }
330
- }
331
- const errorMsg = taskContext.execution?.failure_history[0]?.message || "unknown";
332
- switch (failureType) {
333
- case "deterministic": {
334
- const correctAction = inferCorrectAction(taskContext.intent, errorMsg);
335
- return {
336
- type: "rule_upgrade",
337
- content: `## 决策规则\n- ${taskContext.intent} 时必须 ${correctAction}\n\n## 验收项\n- [AC-01] ${correctAction}`,
338
- scope,
339
- products,
340
- };
341
- }
342
- case "scope_insufficient": {
343
- const missingFiles = inferMissingScope(taskContext.intent, errorMsg);
344
- return {
345
- type: "pattern",
346
- content: `## 决策规则\n- ${taskContext.intent} 需要同时修改 ${missingFiles}\n\n## 验收项\n- [AC-01] 变更文件包含 ${missingFiles}`,
347
- scope,
348
- products,
349
- };
350
- }
351
- case "fixable": {
352
- const errorPattern = inferErrorPattern(errorMsg);
353
- return {
354
- type: "prompt_optimization",
355
- content: `## 决策规则\n- ${taskContext.intent} 时注意 ${errorPattern}\n\n## 验收项\n- [AC-01] 编译/测试无 ${errorPattern} 错误`,
356
- scope,
357
- products,
358
- };
359
- }
360
- default:
361
- return undefined;
362
- }
363
- }
364
- // 成功: 从匹配的知识中提取模式
365
- if (taskContext.expansion?.matched_patterns?.length) {
366
- const usedPatterns = taskContext.expansion.matched_patterns.join("、");
367
- return {
368
- type: "pattern",
369
- content: `## 决策规则\n- ${taskContext.intent} 遵循 ${usedPatterns}\n\n## 验收项\n- [AC-01] 符合 ${usedPatterns} 模式`,
370
- scope,
371
- products,
372
- };
373
- }
374
- return undefined;
375
- }
376
- /**
377
- * 根据错误消息推断正确的操作建议。
378
- * @param intent - 任务意图(未使用,预留参数)
379
- * @param errorMsg - 错误消息
380
- * @returns 正确操作描述
381
- */
382
- function inferCorrectAction(_intent, errorMsg) {
383
- if (errorMsg.includes("编译") || errorMsg.includes("compile"))
384
- return "确保编译通过";
385
- if (errorMsg.includes("类型") || errorMsg.includes("type"))
386
- return "确保类型正确";
387
- if (errorMsg.includes("权限") || errorMsg.includes("permission"))
388
- return "检查权限配置";
389
- return "避免相同错误重试";
390
- }
391
- /**
392
- * 根据错误消息推断缺失的修改范围。
393
- * @param intent - 任务意图(未使用,预留参数)
394
- * @param errorMsg - 错误消息
395
- * @returns 缺失范围描述
396
- */
397
- function inferMissingScope(_intent, errorMsg) {
398
- if (errorMsg.includes("import") || errorMsg.includes("引用"))
399
- return "被引用的相关模块";
400
- if (errorMsg.includes("config") || errorMsg.includes("配置"))
401
- return "相关配置文件";
402
- return "关联文件";
403
- }
404
- /**
405
- * 根据错误消息推断错误类型关键词。
406
- * @param errorMsg - 错误消息
407
- * @returns 错误类型关键词,如 "类型" / "引用" / "语法" / "空值"
408
- */
409
- function inferErrorPattern(errorMsg) {
410
- if (errorMsg.includes("TypeError") || errorMsg.includes("类型错误"))
411
- return "类型";
412
- if (errorMsg.includes("ReferenceError") || errorMsg.includes("引用"))
413
- return "引用";
414
- if (errorMsg.includes("SyntaxError") || errorMsg.includes("语法"))
415
- return "语法";
416
- if (errorMsg.includes("null") || errorMsg.includes("undefined"))
417
- return "空值";
418
- return "常见";
419
- }
420
- //# sourceMappingURL=evolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evolver.js","sourceRoot":"","sources":["../../../src/verify/audit/evolver.ts"],"names":[],"mappings":"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"}