soloforge 1.1.2 → 1.2.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.
Files changed (62) hide show
  1. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  2. package/dist/adapters/claude_code/tools.js +8 -0
  3. package/dist/adapters/claude_code/tools.js.map +1 -1
  4. package/dist/bin/soloforge.js +7 -2
  5. package/dist/bin/soloforge.js.map +1 -1
  6. package/dist/engine/audit_verifier.d.ts +52 -0
  7. package/dist/engine/audit_verifier.d.ts.map +1 -0
  8. package/dist/engine/audit_verifier.js +96 -0
  9. package/dist/engine/audit_verifier.js.map +1 -0
  10. package/dist/engine/code_reviewer.d.ts +6 -0
  11. package/dist/engine/code_reviewer.d.ts.map +1 -1
  12. package/dist/engine/code_reviewer.js +73 -3
  13. package/dist/engine/code_reviewer.js.map +1 -1
  14. package/dist/engine/evolver.d.ts +9 -0
  15. package/dist/engine/evolver.d.ts.map +1 -1
  16. package/dist/engine/evolver.js +47 -1
  17. package/dist/engine/evolver.js.map +1 -1
  18. package/dist/engine/exploration.d.ts +13 -0
  19. package/dist/engine/exploration.d.ts.map +1 -1
  20. package/dist/engine/exploration.js +59 -1
  21. package/dist/engine/exploration.js.map +1 -1
  22. package/dist/engine/intent_expander.d.ts.map +1 -1
  23. package/dist/engine/intent_expander.js +10 -5
  24. package/dist/engine/intent_expander.js.map +1 -1
  25. package/dist/engine/io_controller.d.ts +87 -0
  26. package/dist/engine/io_controller.d.ts.map +1 -0
  27. package/dist/engine/io_controller.js +190 -0
  28. package/dist/engine/io_controller.js.map +1 -0
  29. package/dist/engine/knowledge_config_loader.d.ts +28 -0
  30. package/dist/engine/knowledge_config_loader.d.ts.map +1 -0
  31. package/dist/engine/knowledge_config_loader.js +72 -0
  32. package/dist/engine/knowledge_config_loader.js.map +1 -0
  33. package/dist/engine/knowledge_manager.d.ts.map +1 -1
  34. package/dist/engine/knowledge_manager.js +11 -1
  35. package/dist/engine/knowledge_manager.js.map +1 -1
  36. package/dist/engine/llm_gateway.d.ts +96 -0
  37. package/dist/engine/llm_gateway.d.ts.map +1 -0
  38. package/dist/engine/llm_gateway.js +220 -0
  39. package/dist/engine/llm_gateway.js.map +1 -0
  40. package/dist/engine/test_quality.d.ts +15 -1
  41. package/dist/engine/test_quality.d.ts.map +1 -1
  42. package/dist/engine/test_quality.js +235 -23
  43. package/dist/engine/test_quality.js.map +1 -1
  44. package/dist/engine/workspace_resumer.d.ts +37 -0
  45. package/dist/engine/workspace_resumer.d.ts.map +1 -0
  46. package/dist/engine/workspace_resumer.js +82 -0
  47. package/dist/engine/workspace_resumer.js.map +1 -0
  48. package/dist/knowledge/writer.d.ts +2 -0
  49. package/dist/knowledge/writer.d.ts.map +1 -1
  50. package/dist/knowledge/writer.js +12 -4
  51. package/dist/knowledge/writer.js.map +1 -1
  52. package/dist/types.d.ts +2 -0
  53. package/dist/types.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/templates/knowledge/checklists/session_recovery.md +37 -0
  56. package/templates/knowledge/patterns/core/authority.md +38 -0
  57. package/templates/knowledge/patterns/core/concurrency_lock.md +36 -0
  58. package/templates/knowledge/patterns/core/decision_gateway.md +33 -0
  59. package/templates/knowledge/patterns/core/developer_constitution.md +39 -0
  60. package/templates/knowledge/patterns/core/mutation_audit.md +30 -0
  61. package/templates/knowledge/patterns/core/streaming_protocol.md +36 -0
  62. package/templates/knowledge/templates/review_summary.md +46 -0
@@ -1,3 +1,4 @@
1
+ import { loadKnowledgeConfig, extractNumberRule, extractListRule } from "./knowledge_config_loader.js";
1
2
  /**
2
3
  * 测试质量分析器 — 对测试文件进行纯规则维度的质量评估,包含断言密度、边界覆盖、
3
4
  * 命名规范性、断言重复和场景覆盖五个检查维度。零 AI 依赖。
@@ -11,7 +12,7 @@
11
12
  * @param sourceContent - 可选的被测源码内容(用于变异测试)
12
13
  * @returns 测试质量报告,包含总分(0-100)、各项检查结果和改进建议列表
13
14
  */
14
- export function analyzeTestQuality(testContent, filename, sourceContent) {
15
+ export function analyzeTestQuality(testContent, filename, sourceContent, coverageMap, sourceFilePath) {
15
16
  const checks = [];
16
17
  const suggestions = [];
17
18
  // ── 1. assertion_density ──
@@ -41,9 +42,9 @@ export function analyzeTestQuality(testContent, filename, sourceContent) {
41
42
  // ── 5. scenario_coverage ──
42
43
  const scenarioCheck = checkScenarioCoverage();
43
44
  checks.push(scenarioCheck);
44
- // ── 6. mutation_audit (机制 4: 变异测试防造假) ──
45
+ // ── 6. mutation_audit (机制 4: 变异测试防造假 + 覆盖率联动) ──
45
46
  if (sourceContent) {
46
- const mutationCheck = checkMutationResistance(testContent, sourceContent);
47
+ const mutationCheck = checkMutationResistanceWithCoverage(testContent, sourceContent, coverageMap, sourceFilePath);
47
48
  checks.push(mutationCheck);
48
49
  if (!mutationCheck.passed) {
49
50
  suggestions.push("测试可能存在'自己证明自己'问题:变异后断言仍能通过。建议增加反向用例和精确断言");
@@ -288,6 +289,19 @@ function checkScenarioCoverage() {
288
289
  detail: "需结合知识模板验收项进行交叉检查",
289
290
  };
290
291
  }
292
+ // ── 机制 4: 变异测试防造假(知识库驱动) ──
293
+ /** 从知识库 mutation_audit.md 读取变异审计配置 */
294
+ function loadMutationConfig() {
295
+ const config = loadKnowledgeConfig("patterns/core/mutation_audit.md");
296
+ const body = config?.body ?? "";
297
+ return {
298
+ precision_threshold: extractNumberRule(body, "Precision_Threshold") ?? 0.5,
299
+ max_sample_lines: 8,
300
+ whitelist_keywords: extractListRule(body, "变异白名单") ?? ["if", "else", "switch", "===", "!=="],
301
+ blacklist_keywords: extractListRule(body, "变异黑名单") ?? ["console.log", "import", "export", "debugger"],
302
+ };
303
+ }
304
+ const MUTATION_CONFIG = loadMutationConfig();
291
305
  /** 预定义变异操作集 */
292
306
  const MUTATION_OPERATORS = [
293
307
  {
@@ -341,32 +355,85 @@ const MUTATION_OPERATORS = [
341
355
  },
342
356
  },
343
357
  ];
358
+ // ── 变异白名单: AST 级别节点过滤 ──
359
+ /**
360
+ * 判断一行代码是否属于可变异的白名单节点。
361
+ * 白名单: 条件分支(if/else/switch)、比较/逻辑操作符、return 语句、算术表达式。
362
+ * 黑名单: console.log、注释、import/export、纯字符串/变量名赋值、类型声明。
363
+ */
364
+ function isMutationCandidate(line) {
365
+ const trimmed = line.trim();
366
+ // 黑名单: 跳过注释
367
+ if (trimmed.startsWith("//") || trimmed.startsWith("*") || trimmed.startsWith("/*"))
368
+ return false;
369
+ // 黑名单: 跳过 import/export 声明
370
+ if (/^(import |export |from )/.test(trimmed))
371
+ return false;
372
+ // 黑名单: 跳过 console.log / console.warn / console.error 等无副作用日志
373
+ if (/console\.(log|warn|error|info|debug)\s*\(/.test(trimmed))
374
+ return false;
375
+ // 黑名单: 跳过纯类型声明(TypeScript interface/type/enum)
376
+ if (/^(interface |type |enum |declare )/.test(trimmed))
377
+ return false;
378
+ // 黑名单: 跳过纯字符串字面量行(无逻辑)
379
+ if (/^['"\`]/.test(trimmed) && trimmed.endsWith(';'))
380
+ return false;
381
+ // 黑名单: 跳过 debugger / breakpoint
382
+ if (/^debugger/.test(trimmed))
383
+ return false;
384
+ // 白名单: 条件分支 (if / else if / switch / case / ternary)
385
+ if (/\b(if|else|switch|case)\b/.test(trimmed) && /[(){}?]/.test(trimmed))
386
+ return true;
387
+ // 白名单: 比较操作符
388
+ if (/(===|!==|==|!=|>=|<=|>|<)/.test(trimmed))
389
+ return true;
390
+ // 白名单: 逻辑操作符 (&& ||)
391
+ if (/(&&|\|\|)/.test(trimmed))
392
+ return true;
393
+ // 白名单: return 语句(非 return void)
394
+ if (/\breturn\b/.test(trimmed) && !/return\s*;\s*$/.test(trimmed))
395
+ return true;
396
+ // 白名单: 布尔字面量在表达式中
397
+ if (/\b(true|false)\b/.test(trimmed) && /[=(){}?]/.test(trimmed))
398
+ return true;
399
+ // 白名单: 算术表达式在赋值/返回中
400
+ if (/[+\-*/%]/.test(trimmed) && /[=()]/.test(trimmed))
401
+ return true;
402
+ return false;
403
+ }
344
404
  /**
345
405
  * 变异测试防造假 — 通过对源码模拟变异,检查测试的断言是否精确到能检测变异。
346
- * 策略: 从源码中提取含关键逻辑的行,执行变异,检查测试中是否有断言针对这些逻辑的精确值。
406
+ * 策略: 从源码中提取白名单关键逻辑行(AST 级别过滤),执行变异,
407
+ * 检查测试中是否有断言针对这些逻辑的精确值。
347
408
  * 若测试只含模糊断言(如 toBeTruthy),判定为可能存在"自己证明自己"问题。
348
409
  */
410
+ /** 伪随机数生成器 (基于种子,确保可复现且不由 AI 控制) */
411
+ function seededRandom(seed) {
412
+ let s = seed;
413
+ return () => {
414
+ s = (s * 1103515245 + 12345) & 0x7fffffff;
415
+ return s / 0x7fffffff;
416
+ };
417
+ }
349
418
  function checkMutationResistance(testContent, sourceContent) {
350
- // 提取源码中的关键逻辑行(含比较运算、返回值、布尔值)
351
- const keyLines = sourceContent.split("\n").filter((line) => {
352
- const trimmed = line.trim();
353
- return trimmed.length > 0
354
- && !trimmed.startsWith("//")
355
- && !trimmed.startsWith("import ")
356
- && !trimmed.startsWith("export ")
357
- && (/===|!==|>=|<=|>|<|return|true|false/.test(trimmed));
358
- });
359
- if (keyLines.length === 0) {
419
+ // 提取白名单关键逻辑行(AST 级别过滤,跳过 console.log 等无副作用代码)
420
+ const allKeyLines = sourceContent.split("\n").filter(isMutationCandidate);
421
+ if (allKeyLines.length === 0) {
360
422
  return {
361
423
  dimension: "scenario_coverage",
362
424
  passed: true,
363
425
  detail: "无可变异的关键逻辑行,跳过变异测试",
364
426
  };
365
427
  }
428
+ // 强制随机抽取: 使用源码哈希作为种子,确保可复现但不由 AI 选择位置
429
+ // 从所有关键行中随机抽取 min(行数, 8) 行进行变异,防止 AI 避开弱点行
430
+ const seed = sourceContent.split("").reduce((acc, ch) => acc + ch.charCodeAt(0), 0);
431
+ const rng = seededRandom(seed);
432
+ const sampleSize = Math.min(allKeyLines.length, 8);
433
+ const keyLines = seededSample(allKeyLines, sampleSize, rng);
366
434
  // 检查测试中的断言精确度
367
435
  const preciseAssertions = testContent.match(/\bexpect\s*\([^)]*\)\s*\.\s*(toBe|toEqual|toStrictEqual|toBeLessThan|toBeGreaterThan|toThrow|toThrowError)/g) ?? [];
368
436
  const looseAssertions = testContent.match(/\bexpect\s*\([^)]*\)\s*\.\s*(toBeTruthy|toBeFalsy|toBeDefined|toBeUndefined|toBeDefined)/g) ?? [];
369
- // 变异可检测性评估: 精确断言/总断言 比率
370
437
  const totalAssertions = preciseAssertions.length + looseAssertions.length;
371
438
  if (totalAssertions === 0) {
372
439
  return {
@@ -376,38 +443,183 @@ function checkMutationResistance(testContent, sourceContent) {
376
443
  };
377
444
  }
378
445
  const precisionRatio = preciseAssertions.length / totalAssertions;
379
- // 抽样执行变异操作,检查是否有对应检测能力
446
+ // 对随机抽取的行执行变异操作,检查是否有对应检测能力
380
447
  let mutationsApplied = 0;
381
448
  let mutationsUndetected = 0;
382
- for (const keyLine of keyLines.slice(0, 5)) {
383
- for (const mut of MUTATION_OPERATORS) {
449
+ for (const keyLine of keyLines) {
450
+ // 每行随机选一个能产生有效变异的操作符(防止 AI 预测哪个操作符会被选中)
451
+ const shuffledOps = seededSample([...MUTATION_OPERATORS], MUTATION_OPERATORS.length, rng);
452
+ for (const mut of shuffledOps) {
384
453
  const mutated = mut.mutate(keyLine);
385
454
  if (mutated !== keyLine) {
386
455
  mutationsApplied++;
387
- // 简化检测: 如果测试中存在针对被变异值的精确断言,认为可检测
388
456
  const mutatedValues = mutated.match(/(!==|===|<=|>=|>|<|\b\d+\b|true|false)/g) ?? [];
389
457
  const hasDetection = mutatedValues.some((v) => testContent.includes(v));
390
458
  if (!hasDetection) {
391
459
  mutationsUndetected++;
392
460
  }
461
+ // 每行最多应用 1 个变异操作符(随机化后无需覆盖全部)
462
+ break;
463
+ }
464
+ }
465
+ }
466
+ const passThreshold = MUTATION_CONFIG.precision_threshold;
467
+ const precisionOk = precisionRatio >= passThreshold;
468
+ const detectionOk = mutationsApplied === 0 || (mutationsUndetected / mutationsApplied) < passThreshold;
469
+ if (precisionOk && detectionOk) {
470
+ return {
471
+ dimension: "scenario_coverage",
472
+ passed: true,
473
+ detail: `变异测试通过(随机抽样 ${keyLines.length} 行)— 精确断言率 ${(precisionRatio * 100).toFixed(0)}%,${mutationsApplied} 次变异中 ${mutationsApplied - mutationsUndetected} 次可检测`,
474
+ };
475
+ }
476
+ return {
477
+ dimension: "scenario_coverage",
478
+ passed: false,
479
+ detail: `变异测试未通过(随机抽样 ${keyLines.length} 行)— 精确断言率 ${(precisionRatio * 100).toFixed(0)}%(阈值 50%),${mutationsApplied} 次变异中 ${mutationsUndetected} 次不可检测。测试可能存在"自己证明自己"问题`,
480
+ };
481
+ }
482
+ /** 基于 RNG 的随机抽样(Fisher-Yates 部分洗牌)*/
483
+ function seededSample(arr, count, rng) {
484
+ const result = [...arr];
485
+ const n = Math.min(count, result.length);
486
+ for (let i = 0; i < n; i++) {
487
+ const j = i + Math.floor(rng() * (result.length - i));
488
+ [result[i], result[j]] = [result[j], result[i]];
489
+ }
490
+ return result.slice(0, n);
491
+ }
492
+ /**
493
+ * 解析 lcov.info 报告,提取每个文件的已覆盖行号。
494
+ * lcov 格式:
495
+ * SF:path/to/file.ts
496
+ * DA:10,1
497
+ * DA:25,0
498
+ * end_of_record
499
+ * DA 行中第二个字段 > 0 表示该行被执行过(已覆盖)。
500
+ * @param lcovContent - lcov.info 文件内容
501
+ * @returns 覆盖率映射(文件路径 → 已覆盖行号集合)
502
+ */
503
+ export function parseLcov(lcovContent) {
504
+ const map = new Map();
505
+ let currentFile = "";
506
+ for (const line of lcovContent.split("\n")) {
507
+ const sfMatch = line.match(/^SF:(.+)$/);
508
+ if (sfMatch) {
509
+ currentFile = sfMatch[1];
510
+ continue;
511
+ }
512
+ const daMatch = line.match(/^DA:(\d+),(\d+)/);
513
+ if (daMatch && currentFile) {
514
+ const lineNum = parseInt(daMatch[1], 10);
515
+ const hitCount = parseInt(daMatch[2], 10);
516
+ if (hitCount > 0) {
517
+ if (!map.has(currentFile))
518
+ map.set(currentFile, new Set());
519
+ map.get(currentFile).add(lineNum);
520
+ }
521
+ }
522
+ if (line === "end_of_record") {
523
+ currentFile = "";
524
+ }
525
+ }
526
+ return map;
527
+ }
528
+ /**
529
+ * 带覆盖率联动的变异测试 — 只变异被测试覆盖的代码行。
530
+ * 若变异了未覆盖行,该变异无法被测试检测到,审计结果无效。
531
+ * @param testContent - 测试文件内容
532
+ * @param sourceContent - 被测源码内容
533
+ * @param coverageMap - 可选的覆盖率映射(文件 → 已覆盖行号),无则退化为全行变异
534
+ * @param sourceFilePath - 源码文件路径,用于在 coverageMap 中查找覆盖行
535
+ */
536
+ function checkMutationResistanceWithCoverage(testContent, sourceContent, coverageMap, sourceFilePath) {
537
+ const sourceLines = sourceContent.split("\n");
538
+ const coveredLineNumbers = (sourceFilePath && coverageMap) ? coverageMap.get(sourceFilePath) : undefined;
539
+ // 提取白名单关键逻辑行,并记录行号
540
+ const candidates = [];
541
+ for (let i = 0; i < sourceLines.length; i++) {
542
+ if (isMutationCandidate(sourceLines[i])) {
543
+ candidates.push({ line: sourceLines[i], lineNum: i + 1 });
544
+ }
545
+ }
546
+ if (candidates.length === 0) {
547
+ return {
548
+ dimension: "scenario_coverage",
549
+ passed: true,
550
+ detail: "无可变异的关键逻辑行,跳过变异测试",
551
+ };
552
+ }
553
+ // 覆盖率过滤: 只保留被测试覆盖的行
554
+ let filteredCandidates = candidates;
555
+ const hasCoverageData = coverageMap !== undefined && sourceFilePath !== undefined;
556
+ if (hasCoverageData) {
557
+ const covered = coveredLineNumbers ?? new Set();
558
+ const beforeCount = candidates.length;
559
+ if (covered.size === 0) {
560
+ return {
561
+ dimension: "scenario_coverage",
562
+ passed: false,
563
+ detail: `变异审计无效: ${beforeCount} 个可变异行均未被测试覆盖(覆盖率联动)`,
564
+ };
565
+ }
566
+ filteredCandidates = candidates.filter((c) => covered.has(c.lineNum));
567
+ if (filteredCandidates.length === 0) {
568
+ return {
569
+ dimension: "scenario_coverage",
570
+ passed: false,
571
+ detail: `变异审计无效: ${beforeCount} 个可变异行均未被测试覆盖(覆盖率联动)`,
572
+ };
573
+ }
574
+ }
575
+ // 随机抽样
576
+ const seed = sourceContent.split("").reduce((acc, ch) => acc + ch.charCodeAt(0), 0);
577
+ const rng = seededRandom(seed);
578
+ const sampleSize = Math.min(filteredCandidates.length, 8);
579
+ const keyLines = seededSample(filteredCandidates, sampleSize, rng);
580
+ // 断言精确度检查 — 使用宽松正则以支持嵌套括号如 expect(fn(a, b))
581
+ const preciseAssertions = testContent.match(/\bexpect\b.*?\.(toBe|toEqual|toStrictEqual|toBeLessThan|toBeGreaterThan|toThrow|toThrowError)\s*\(/g) ?? [];
582
+ const looseAssertions = testContent.match(/\bexpect\b.*?\.(toBeTruthy|toBeFalsy|toBeDefined|toBeUndefined)\s*\(/g) ?? [];
583
+ const totalAssertions = preciseAssertions.length + looseAssertions.length;
584
+ if (totalAssertions === 0) {
585
+ return {
586
+ dimension: "scenario_coverage",
587
+ passed: false,
588
+ detail: "无断言,无法检测源码变异(变异测试防造假失败)",
589
+ };
590
+ }
591
+ const precisionRatio = preciseAssertions.length / totalAssertions;
592
+ let mutationsApplied = 0;
593
+ let mutationsUndetected = 0;
594
+ for (const item of keyLines) {
595
+ const shuffledOps = seededSample([...MUTATION_OPERATORS], MUTATION_OPERATORS.length, rng);
596
+ for (const mut of shuffledOps) {
597
+ const mutated = mut.mutate(item.line);
598
+ if (mutated !== item.line) {
599
+ mutationsApplied++;
600
+ const mutatedValues = mutated.match(/(!==|===|<=|>=|>|<|\b\d+\b|true|false)/g) ?? [];
601
+ const hasDetection = mutatedValues.some((v) => testContent.includes(v));
602
+ if (!hasDetection)
603
+ mutationsUndetected++;
604
+ break;
393
605
  }
394
606
  }
395
607
  }
396
- // 综合评估: 精确断言率 > 50% 且 不可检测变异 < 50%
397
- const passThreshold = 0.5;
608
+ const passThreshold = MUTATION_CONFIG.precision_threshold;
398
609
  const precisionOk = precisionRatio >= passThreshold;
399
610
  const detectionOk = mutationsApplied === 0 || (mutationsUndetected / mutationsApplied) < passThreshold;
611
+ const coverageNote = hasCoverageData ? `(覆盖率联动: ${filteredCandidates.length}/${candidates.length} 可变异行已被覆盖)` : "";
400
612
  if (precisionOk && detectionOk) {
401
613
  return {
402
614
  dimension: "scenario_coverage",
403
615
  passed: true,
404
- detail: `变异测试通过 精确断言率 ${(precisionRatio * 100).toFixed(0)}%,${mutationsApplied} 次变异中 ${mutationsApplied - mutationsUndetected} 次可检测`,
616
+ detail: `变异测试通过(随机抽样 ${keyLines.length} 行${coverageNote})— 精确断言率 ${(precisionRatio * 100).toFixed(0)}%,${mutationsApplied} 次变异中 ${mutationsApplied - mutationsUndetected} 次可检测`,
405
617
  };
406
618
  }
407
619
  return {
408
620
  dimension: "scenario_coverage",
409
621
  passed: false,
410
- detail: `变异测试未通过 精确断言率 ${(precisionRatio * 100).toFixed(0)}%(阈值 50%),${mutationsApplied} 次变异中 ${mutationsUndetected} 次不可检测。测试可能存在"自己证明自己"问题`,
622
+ detail: `变异测试未通过(随机抽样 ${keyLines.length} 行${coverageNote})— 精确断言率 ${(precisionRatio * 100).toFixed(0)}%(阈值 50%),${mutationsApplied} 次变异中 ${mutationsUndetected} 次不可检测。测试可能存在"自己证明自己"问题`,
411
623
  };
412
624
  }
413
625
  //# sourceMappingURL=test_quality.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test_quality.js","sourceRoot":"","sources":["../../src/engine/test_quality.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test_quality.js","sourceRoot":"","sources":["../../src/engine/test_quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { TaskContextManager } from "./task_context.js";
2
+ /**
3
+ * 工作区状态唤醒 — 解决前端对话窗口刷新导致 UUID 内存丢失的问题。
4
+ *
5
+ * 核心能力:
6
+ * 1. 扫描 .soloforge/state/ 目录,找到最后处于 In Progress 的工单
7
+ * 2. 反序列化工单上下文,重新加载到内存
8
+ * 3. 向用户播报当前进度,实现上下文断点续传
9
+ *
10
+ * 强制前置: 系统启动或建立新会话时必须调用 scanAndResume()
11
+ */
12
+ /** 唤醒结果 */
13
+ export interface ResumeResult {
14
+ /** 是否发现可恢复的工单 */
15
+ resumed: boolean;
16
+ /** 恢复的工单信息 */
17
+ task?: {
18
+ task_id: string;
19
+ intent: string;
20
+ status: string;
21
+ created_at: string;
22
+ phase_hint: string;
23
+ };
24
+ /** 播报消息(向用户展示) */
25
+ broadcast: string;
26
+ /** state 目录中的工单总数 */
27
+ total_tasks: number;
28
+ /** 处于活跃状态的工单数 */
29
+ active_tasks: number;
30
+ }
31
+ /**
32
+ * 扫描工作区状态目录,恢复最后活跃的工单。
33
+ * @param taskContext - 任务上下文管理器
34
+ * @returns 唤醒结果
35
+ */
36
+ export declare function scanAndResume(taskContext: TaskContextManager): Promise<ResumeResult>;
37
+ //# sourceMappingURL=workspace_resumer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace_resumer.d.ts","sourceRoot":"","sources":["../../src/engine/workspace_resumer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D;;;;;;;;;GASG;AAEH,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc;IACd,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAYD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,YAAY,CAAC,CA2EvB"}
@@ -0,0 +1,82 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ /** 活跃状态集合 */
4
+ const ACTIVE_STATUSES = [
5
+ "expanding",
6
+ "executing",
7
+ "verifying",
8
+ "retrying",
9
+ "learning",
10
+ "reworking",
11
+ ];
12
+ /**
13
+ * 扫描工作区状态目录,恢复最后活跃的工单。
14
+ * @param taskContext - 任务上下文管理器
15
+ * @returns 唤醒结果
16
+ */
17
+ export async function scanAndResume(taskContext) {
18
+ const recent = await taskContext.listRecent(100);
19
+ const activeTasks = recent.filter((t) => ACTIVE_STATUSES.includes(t.status));
20
+ if (activeTasks.length === 0) {
21
+ return {
22
+ resumed: false,
23
+ broadcast: "工作区干净,无中断工单。可以开始新任务",
24
+ total_tasks: recent.length,
25
+ active_tasks: 0,
26
+ };
27
+ }
28
+ // 找到最近创建的活跃工单
29
+ const latestActive = activeTasks[0];
30
+ const ctx = await taskContext.load(latestActive.task_id);
31
+ if (!ctx) {
32
+ return {
33
+ resumed: false,
34
+ broadcast: `发现 ${activeTasks.length} 个活跃工单,但无法加载 ${latestActive.task_id}`,
35
+ total_tasks: recent.length,
36
+ active_tasks: activeTasks.length,
37
+ };
38
+ }
39
+ // 生成阶段提示
40
+ const phaseHint = taskContext.getResumeHint(ctx);
41
+ // 构造播报消息
42
+ const changedFiles = ctx.execution?.changed_files?.length ?? 0;
43
+ const attemptCount = ctx.execution?.attempt_count ?? 0;
44
+ let progressDetail = "";
45
+ if (ctx.classification) {
46
+ progressDetail += `任务类型: ${ctx.classification.task_type},风险: ${ctx.classification.risk},策略: ${ctx.classification.strategy}`;
47
+ }
48
+ if (changedFiles > 0) {
49
+ progressDetail += ` | 已修改 ${changedFiles} 个文件`;
50
+ }
51
+ if (attemptCount > 0) {
52
+ progressDetail += ` | 第 ${attemptCount} 次尝试`;
53
+ }
54
+ const broadcast = [
55
+ `⚡ 检测到 ${activeTasks.length} 个中断工单,已自动恢复最新的:`,
56
+ ``,
57
+ `工单: ${ctx.intent}`,
58
+ `状态: ${ctx.status} → ${phaseHint}`,
59
+ `创建时间: ${ctx.created_at}`,
60
+ progressDetail ? `进度: ${progressDetail}` : "",
61
+ ``,
62
+ `请继续执行上述操作,或输入 "sf_status action=cancel task_id=${ctx.task_id}" 取消此工单`,
63
+ ].filter(Boolean).join("\n");
64
+ // 将此工单设为当前活跃
65
+ const stateDir = taskContext.getStateDir();
66
+ const pointerPath = path.join(stateDir, "current-task.json");
67
+ await fs.writeFile(pointerPath, JSON.stringify({ task_id: ctx.task_id }));
68
+ return {
69
+ resumed: true,
70
+ task: {
71
+ task_id: ctx.task_id,
72
+ intent: ctx.intent,
73
+ status: ctx.status,
74
+ created_at: ctx.created_at,
75
+ phase_hint: phaseHint,
76
+ },
77
+ broadcast,
78
+ total_tasks: recent.length,
79
+ active_tasks: activeTasks.length,
80
+ };
81
+ }
82
+ //# sourceMappingURL=workspace_resumer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace_resumer.js","sourceRoot":"","sources":["../../src/engine/workspace_resumer.ts"],"names":[],"mappings":"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"}
@@ -11,5 +11,7 @@ export declare class KnowledgeWriter {
11
11
  }>>;
12
12
  rejectStaged(stagedPath: string): Promise<boolean>;
13
13
  private typeToSubdir;
14
+ /** 维度6: 检查文件路径是否在 core/ 只读目录中 */
15
+ static isCorePath(filePath: string): boolean;
14
16
  }
15
17
  //# sourceMappingURL=writer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/knowledge/writer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,MAAM;IAKzB,aAAa,CACjB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IA0BZ,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB1E,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAuBhF,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUxD,OAAO,CAAC,YAAY;CAUrB"}
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/knowledge/writer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,MAAM;IAKzB,aAAa,CACjB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IA0BZ,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B1E,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAuBhF,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUxD,OAAO,CAAC,YAAY;IAYpB,iCAAiC;IACjC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAG7C"}
@@ -34,9 +34,13 @@ export class KnowledgeWriter {
34
34
  async promoteToActive(stagedPath, knowledgeDir) {
35
35
  const content = await fs.readFile(stagedPath, "utf-8");
36
36
  const { data, content: body } = matter(content);
37
- // 根据类型确定目标子目录
37
+ // 维度6: 知识目录隔离 — 禁止将 AI 进化产物写入 core/ 目录
38
38
  const type = data.type || "pattern";
39
- const targetDir = path.join(knowledgeDir, this.typeToSubdir(type));
39
+ const targetSubdir = this.typeToSubdir(type);
40
+ if (targetSubdir.includes("/core") || targetSubdir.endsWith("/core")) {
41
+ throw new Error("知识隔离: 禁止将 AI 进化产物写入 core/ 只读目录。目标: " + targetSubdir);
42
+ }
43
+ const targetDir = path.join(knowledgeDir, targetSubdir);
40
44
  fss.mkdirSync(targetDir, { recursive: true });
41
45
  const filename = path.basename(stagedPath);
42
46
  const targetPath = path.join(targetDir, filename);
@@ -86,13 +90,17 @@ export class KnowledgeWriter {
86
90
  }
87
91
  typeToSubdir(type) {
88
92
  switch (type) {
89
- case "pattern": return "patterns";
93
+ case "pattern": return "patterns/temp";
90
94
  case "procedure": return "procedures";
91
95
  case "domain": return "domain";
92
96
  case "acceptance_template": return "acceptance_templates";
93
97
  case "review_rule": return "review_rules";
94
- default: return "patterns";
98
+ default: return "patterns/temp";
95
99
  }
96
100
  }
101
+ /** 维度6: 检查文件路径是否在 core/ 只读目录中 */
102
+ static isCorePath(filePath) {
103
+ return /patterns[\/]core[\/]/.test(filePath);
104
+ }
97
105
  }
98
106
  //# sourceMappingURL=writer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/knowledge/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,GAAG,MAAM,SAAS,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,MAAM,OAAO,eAAe;IAClB,SAAS,CAAS;IAE1B,YAAY,WAAmB;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAChE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,KAAqB,EACrB,OAAe;QAEf,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;QAC5F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAErD,MAAM,WAAW,GAAwB;YACvC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,IAAI,KAAK,CAAC,UAAU;YAAE,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAEhE,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAC;QAClC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,YAAoB;QAC5D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhD,cAAc;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAElD,gBAAgB;QAChB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,UAAU,MAAM,CAAC;QACpC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAErC,6BAA6B;QAC7B,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE5B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAA8D,EAAE,CAAC;QAC9E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACzE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;oBACjC,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;wBAClC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;wBACpB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;qBACjC,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,UAAU;QACZ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAAY;QAC/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC;YAClC,KAAK,WAAW,CAAC,CAAC,OAAO,YAAY,CAAC;YACtC,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC/B,KAAK,qBAAqB,CAAC,CAAC,OAAO,sBAAsB,CAAC;YAC1D,KAAK,aAAa,CAAC,CAAC,OAAO,cAAc,CAAC;YAC1C,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;QAC7B,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/knowledge/writer.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -645,6 +645,8 @@ export interface CodeReviewResult {
645
645
  black_box_count: number;
646
646
  recommendation: string;
647
647
  };
648
+ /** 维度5: 抽检哨兵回溯摘要流(白盒项的压缩摘要,抽检时渲染) */
649
+ spot_check_backtrace?: string[];
648
650
  }
649
651
  /** 技术债务条目 */
650
652
  export interface DebtItem {