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.
Files changed (182) hide show
  1. package/README.md +4 -1
  2. package/dist/adapters/claude_code/claude_md.d.ts +1 -2
  3. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
  4. package/dist/adapters/claude_code/claude_md.js +2 -76
  5. package/dist/adapters/claude_code/claude_md.js.map +1 -1
  6. package/dist/adapters/claude_code/server.d.ts +16 -0
  7. package/dist/adapters/claude_code/server.d.ts.map +1 -1
  8. package/dist/adapters/claude_code/server.js +17 -1
  9. package/dist/adapters/claude_code/server.js.map +1 -1
  10. package/dist/adapters/claude_code/tools.d.ts +32 -1
  11. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  12. package/dist/adapters/claude_code/tools.js +65 -30
  13. package/dist/adapters/claude_code/tools.js.map +1 -1
  14. package/dist/adapters/codex/codex_config.d.ts +3 -0
  15. package/dist/adapters/codex/codex_config.d.ts.map +1 -0
  16. package/dist/adapters/codex/codex_config.js +51 -0
  17. package/dist/adapters/codex/codex_config.js.map +1 -0
  18. package/dist/adapters/codex/codex_rules.d.ts +2 -0
  19. package/dist/adapters/codex/codex_rules.d.ts.map +1 -0
  20. package/dist/adapters/codex/codex_rules.js +5 -0
  21. package/dist/adapters/codex/codex_rules.js.map +1 -0
  22. package/dist/adapters/shared/workflow_template.d.ts +3 -0
  23. package/dist/adapters/shared/workflow_template.d.ts.map +1 -0
  24. package/dist/adapters/shared/workflow_template.js +78 -0
  25. package/dist/adapters/shared/workflow_template.js.map +1 -0
  26. package/dist/adapters/trae/trae_rules.d.ts +1 -2
  27. package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
  28. package/dist/adapters/trae/trae_rules.js +2 -75
  29. package/dist/adapters/trae/trae_rules.js.map +1 -1
  30. package/dist/bin/soloforge.js +171 -22
  31. package/dist/bin/soloforge.js.map +1 -1
  32. package/dist/engine/change_coordinator.d.ts +20 -5
  33. package/dist/engine/change_coordinator.d.ts.map +1 -1
  34. package/dist/engine/change_coordinator.js +36 -22
  35. package/dist/engine/change_coordinator.js.map +1 -1
  36. package/dist/engine/classifier.d.ts +7 -0
  37. package/dist/engine/classifier.d.ts.map +1 -1
  38. package/dist/engine/classifier.js +75 -3
  39. package/dist/engine/classifier.js.map +1 -1
  40. package/dist/engine/code_reviewer.d.ts +37 -1
  41. package/dist/engine/code_reviewer.d.ts.map +1 -1
  42. package/dist/engine/code_reviewer.js +126 -24
  43. package/dist/engine/code_reviewer.js.map +1 -1
  44. package/dist/engine/confidence_scorer.d.ts +21 -0
  45. package/dist/engine/confidence_scorer.d.ts.map +1 -1
  46. package/dist/engine/confidence_scorer.js +19 -6
  47. package/dist/engine/confidence_scorer.js.map +1 -1
  48. package/dist/engine/contract_guard.d.ts +23 -0
  49. package/dist/engine/contract_guard.d.ts.map +1 -1
  50. package/dist/engine/contract_guard.js +152 -43
  51. package/dist/engine/contract_guard.js.map +1 -1
  52. package/dist/engine/convention_detector.d.ts +20 -0
  53. package/dist/engine/convention_detector.d.ts.map +1 -1
  54. package/dist/engine/convention_detector.js +19 -1
  55. package/dist/engine/convention_detector.js.map +1 -1
  56. package/dist/engine/debt_reporter.d.ts +5 -0
  57. package/dist/engine/debt_reporter.d.ts.map +1 -1
  58. package/dist/engine/debt_reporter.js +30 -6
  59. package/dist/engine/debt_reporter.js.map +1 -1
  60. package/dist/engine/debt_tracker.d.ts +52 -0
  61. package/dist/engine/debt_tracker.d.ts.map +1 -1
  62. package/dist/engine/debt_tracker.js +66 -1
  63. package/dist/engine/debt_tracker.js.map +1 -1
  64. package/dist/engine/debugger.d.ts +9 -0
  65. package/dist/engine/debugger.d.ts.map +1 -1
  66. package/dist/engine/debugger.js +112 -20
  67. package/dist/engine/debugger.js.map +1 -1
  68. package/dist/engine/delivery.d.ts +27 -0
  69. package/dist/engine/delivery.d.ts.map +1 -1
  70. package/dist/engine/delivery.js +67 -13
  71. package/dist/engine/delivery.js.map +1 -1
  72. package/dist/engine/dependency_scanner.d.ts +5 -8
  73. package/dist/engine/dependency_scanner.d.ts.map +1 -1
  74. package/dist/engine/dependency_scanner.js +46 -29
  75. package/dist/engine/dependency_scanner.js.map +1 -1
  76. package/dist/engine/evolver.d.ts +54 -0
  77. package/dist/engine/evolver.d.ts.map +1 -1
  78. package/dist/engine/evolver.js +159 -6
  79. package/dist/engine/evolver.js.map +1 -1
  80. package/dist/engine/exploration.d.ts +114 -0
  81. package/dist/engine/exploration.d.ts.map +1 -0
  82. package/dist/engine/exploration.js +414 -0
  83. package/dist/engine/exploration.js.map +1 -0
  84. package/dist/engine/failure_classifier.d.ts +28 -0
  85. package/dist/engine/failure_classifier.d.ts.map +1 -1
  86. package/dist/engine/failure_classifier.js +51 -5
  87. package/dist/engine/failure_classifier.js.map +1 -1
  88. package/dist/engine/git_deps.d.ts +29 -0
  89. package/dist/engine/git_deps.d.ts.map +1 -1
  90. package/dist/engine/git_deps.js +1 -0
  91. package/dist/engine/git_deps.js.map +1 -1
  92. package/dist/engine/impact_analyzer.d.ts +17 -0
  93. package/dist/engine/impact_analyzer.d.ts.map +1 -1
  94. package/dist/engine/impact_analyzer.js +76 -4
  95. package/dist/engine/impact_analyzer.js.map +1 -1
  96. package/dist/engine/intent_expander.d.ts +58 -0
  97. package/dist/engine/intent_expander.d.ts.map +1 -1
  98. package/dist/engine/intent_expander.js +173 -1
  99. package/dist/engine/intent_expander.js.map +1 -1
  100. package/dist/engine/migration_guard.d.ts +6 -0
  101. package/dist/engine/migration_guard.d.ts.map +1 -1
  102. package/dist/engine/migration_guard.js +26 -7
  103. package/dist/engine/migration_guard.js.map +1 -1
  104. package/dist/engine/observability.d.ts +31 -7
  105. package/dist/engine/observability.d.ts.map +1 -1
  106. package/dist/engine/observability.js +88 -28
  107. package/dist/engine/observability.js.map +1 -1
  108. package/dist/engine/onboarding.d.ts +41 -1
  109. package/dist/engine/onboarding.d.ts.map +1 -1
  110. package/dist/engine/onboarding.js +83 -8
  111. package/dist/engine/onboarding.js.map +1 -1
  112. package/dist/engine/scaffolder.d.ts +10 -0
  113. package/dist/engine/scaffolder.d.ts.map +1 -1
  114. package/dist/engine/scaffolder.js +55 -10
  115. package/dist/engine/scaffolder.js.map +1 -1
  116. package/dist/engine/scope_controller.d.ts +13 -0
  117. package/dist/engine/scope_controller.d.ts.map +1 -1
  118. package/dist/engine/scope_controller.js +76 -12
  119. package/dist/engine/scope_controller.js.map +1 -1
  120. package/dist/engine/task_context.d.ts +124 -0
  121. package/dist/engine/task_context.d.ts.map +1 -1
  122. package/dist/engine/task_context.js +155 -7
  123. package/dist/engine/task_context.js.map +1 -1
  124. package/dist/engine/task_planner.d.ts +17 -0
  125. package/dist/engine/task_planner.d.ts.map +1 -1
  126. package/dist/engine/task_planner.js +51 -4
  127. package/dist/engine/task_planner.js.map +1 -1
  128. package/dist/engine/team_awareness.d.ts +17 -0
  129. package/dist/engine/team_awareness.d.ts.map +1 -1
  130. package/dist/engine/team_awareness.js +29 -11
  131. package/dist/engine/team_awareness.js.map +1 -1
  132. package/dist/engine/test_generator.d.ts +5 -4
  133. package/dist/engine/test_generator.d.ts.map +1 -1
  134. package/dist/engine/test_generator.js +22 -5
  135. package/dist/engine/test_generator.js.map +1 -1
  136. package/dist/engine/test_quality.d.ts +11 -4
  137. package/dist/engine/test_quality.d.ts.map +1 -1
  138. package/dist/engine/test_quality.js +171 -14
  139. package/dist/engine/test_quality.js.map +1 -1
  140. package/dist/engine/verifier.d.ts +41 -0
  141. package/dist/engine/verifier.d.ts.map +1 -1
  142. package/dist/engine/verifier.js +110 -1
  143. package/dist/engine/verifier.js.map +1 -1
  144. package/dist/git/operations.d.ts +1 -0
  145. package/dist/git/operations.d.ts.map +1 -1
  146. package/dist/git/operations.js +3 -0
  147. package/dist/git/operations.js.map +1 -1
  148. package/dist/index.d.ts +9 -0
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +14 -0
  151. package/dist/index.js.map +1 -1
  152. package/dist/knowledge/index_manager.d.ts +7 -1
  153. package/dist/knowledge/index_manager.d.ts.map +1 -1
  154. package/dist/knowledge/index_manager.js +112 -37
  155. package/dist/knowledge/index_manager.js.map +1 -1
  156. package/dist/knowledge/loader.d.ts +31 -0
  157. package/dist/knowledge/loader.d.ts.map +1 -1
  158. package/dist/knowledge/loader.js +102 -8
  159. package/dist/knowledge/loader.js.map +1 -1
  160. package/dist/types.d.ts +608 -0
  161. package/dist/types.d.ts.map +1 -1
  162. package/package.json +1 -1
  163. package/templates/knowledge/acceptance_templates//346/212/200/346/234/257/351/200/211/345/236/213/351/252/214/346/224/266/346/270/205/345/215/225.md +19 -0
  164. package/templates/knowledge/acceptance_templates//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md +4 -0
  165. package/templates/knowledge/procedures//345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213.md +4 -1
  166. package/templates/knowledge/procedures//350/207/252/344/270/273/351/200/211/345/236/213/346/265/201/347/250/213.md +34 -0
  167. package/templates/knowledge/review_rules//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245/350/247/204/345/210/231.md +66 -0
  168. package/templates/scaffolds/react/Form.tsx.hbs +9 -1
  169. package/templates/scaffolds/react/List.tsx.hbs +10 -1
  170. package/templates/scaffolds/react/Page.tsx.hbs +4 -1
  171. package/templates/scaffolds/react/service.ts.hbs +29 -0
  172. package/templates/scaffolds/react/types.ts.hbs +7 -1
  173. package/templates/scaffolds/react/use{{ModuleName}}.ts.hbs +34 -2
  174. package/templates/scaffolds/spring-boot/Controller.java.hbs +27 -0
  175. package/templates/scaffolds/spring-boot/DTO.java.hbs +7 -1
  176. package/templates/scaffolds/spring-boot/Entity.java.hbs +11 -1
  177. package/templates/scaffolds/spring-boot/ErrorCode.java.hbs +13 -1
  178. package/templates/scaffolds/spring-boot/Mapper.java.hbs +4 -1
  179. package/templates/scaffolds/spring-boot/PageResponse.java.hbs +24 -1
  180. package/templates/scaffolds/spring-boot/Service.java.hbs +32 -0
  181. package/templates/scaffolds/spring-boot/ServiceImpl.java.hbs +23 -5
  182. package/templates/scaffolds/spring-boot/ServiceTest.java.hbs +7 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exploration.d.ts","sourceRoot":"","sources":["../../src/engine/exploration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E;;;;;;;;;;GAUG;AAIH,aAAa;AACb,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;IAC/C,YAAY;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,WAAW;AACX,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,WAAW;AACX,MAAM,WAAW,mBAAmB;IAClC,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa;IACb,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,aAAa;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY;IACZ,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAe;AACf,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS;IACT,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,WAAW;AACX,MAAM,WAAW,iBAAiB;IAChC,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,aAAa;IACb,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,YAAY;IACZ,wBAAwB,EAAE,uBAAuB,CAAC;IAClD,WAAW;IACX,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,eAAe;IACf,gBAAgB,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IACnD,eAAe;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,WAAW;AACX,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB;IACjB,IAAI,EAAE,KAAK,CAAC;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,YAAY;AACZ,MAAM,WAAW,uBAAuB;IACtC,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,yBAAyB,EAAE,MAAM,CAAC;IAClC,sBAAsB;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAqOD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC,GAAG,iBAAiB,CAgCpB"}
@@ -0,0 +1,414 @@
1
+ const INDUSTRY_BENCHMARKS = [
2
+ {
3
+ keywords: ["分布式锁", "锁", "并发控制", "distributed lock", "互斥"],
4
+ domain: "分布式锁",
5
+ solutions: [
6
+ {
7
+ name: "Redis SETNX + 过期",
8
+ description: "基于 Redis 单节点的分布式锁实现,SET key NX EX timeout",
9
+ ratings: { dev_cost: 4, performance: 5, scalability: 3, maintainability: 4 },
10
+ fatal_weakness: "Redis 主从切换时锁可能丢失,非严格互斥",
11
+ best_for: "低争用场景,容忍极短暂时竞态(如幂等操作)",
12
+ worst_for: "金融级严格互斥、强一致性要求的场景",
13
+ },
14
+ {
15
+ name: "Redisson 看门狗",
16
+ description: "Redisson 框架提供的可重入锁 + 自动续期看门狗",
17
+ ratings: { dev_cost: 5, performance: 4, scalability: 3, maintainability: 3 },
18
+ fatal_weakness: "依赖单 Redis 节点,主从切换仍有丢失风险",
19
+ best_for: "Java 项目中快速集成,需要可重入和自动续期",
20
+ worst_for: "跨数据中心、Redis 集群模式下的严格互斥",
21
+ },
22
+ {
23
+ name: "ZooKeeper 临时节点",
24
+ description: "基于 ZooKeeper 临时顺序节点实现的分布式锁",
25
+ ratings: { dev_cost: 2, performance: 2, scalability: 5, maintainability: 2 },
26
+ fatal_weakness: "性能差(每次加锁需多次网络通信),运维复杂度高",
27
+ best_for: "强一致性要求、已有 ZK 基础设施",
28
+ worst_for: "高频加锁场景(TPS > 1000)",
29
+ },
30
+ ],
31
+ },
32
+ {
33
+ keywords: ["流式处理", "流处理", "stream", "实时计算", "消息流", "事件流"],
34
+ domain: "流式处理",
35
+ solutions: [
36
+ {
37
+ name: "Spring WebFlux / Reactor",
38
+ description: "基于 Reactor 的响应式流处理,JVM 内置背压支持",
39
+ ratings: { dev_cost: 3, performance: 4, scalability: 4, maintainability: 3 },
40
+ fatal_weakness: "调试困难,错误栈难以追踪,团队学习曲线陡峭",
41
+ best_for: "高并发 I/O 密集型微服务,已有 Spring 生态",
42
+ worst_for: "CPU 密集型计算、团队无响应式编程经验",
43
+ },
44
+ {
45
+ name: "Kafka Streams",
46
+ description: "Apache Kafka 内置的流处理库,Exactly-Once 语义",
47
+ ratings: { dev_cost: 3, performance: 5, scalability: 5, maintainability: 3 },
48
+ fatal_weakness: "强依赖 Kafka 生态,状态存储需 Kafka 内部 topic",
49
+ best_for: "大规模事件驱动架构,需要 Exactly-Once 语义",
50
+ worst_for: "小规模项目、非 Kafka 消息队列",
51
+ },
52
+ {
53
+ name: "分页查询 + 轮询",
54
+ description: "传统 RDBMS 分页查询 + 定时轮询,简单直接",
55
+ ratings: { dev_cost: 5, performance: 1, scalability: 1, maintainability: 5 },
56
+ fatal_weakness: "实时性差(延迟 = 轮询间隔),大数据量下性能崩溃",
57
+ best_for: "低频数据同步(分钟级可接受),极小规模",
58
+ worst_for: "实时监控、秒级告警、大数据量流处理",
59
+ },
60
+ ],
61
+ },
62
+ {
63
+ keywords: ["表单", "复杂表单", "表单状态", "动态表单", "form", "表单验证"],
64
+ domain: "复杂表单状态管理",
65
+ solutions: [
66
+ {
67
+ name: "React Hook Form",
68
+ description: "非受控表单库,基于 ref 的轻量级表单管理",
69
+ ratings: { dev_cost: 5, performance: 5, scalability: 3, maintainability: 4 },
70
+ fatal_weakness: "深度嵌套动态表单场景下性能退化,自定义校验逻辑分散",
71
+ best_for: "标准 CRUD 表单,中低复杂度,追求性能",
72
+ worst_for: "高度动态表单(字段联动、条件显隐、跨表单依赖)",
73
+ },
74
+ {
75
+ name: "Formily (Alibaba)",
76
+ description: "阿里巴巴出品的 JSON Schema 驱动表单方案",
77
+ ratings: { dev_cost: 2, performance: 4, scalability: 5, maintainability: 2 },
78
+ fatal_weakness: "学习曲线陡峭,概念密度高(JSON Schema + Path 系统 + 响应式)",
79
+ best_for: "企业级低代码平台、高度动态的复杂表单",
80
+ worst_for: "快速迭代的中小项目、团队无 Formily 经验",
81
+ },
82
+ {
83
+ name: "Zustand + 手动状态机",
84
+ description: "Zustand 做全局状态 + 手写状态机管理表单联动",
85
+ ratings: { dev_cost: 3, performance: 4, scalability: 4, maintainability: 3 },
86
+ fatal_weakness: "无内置表单校验和异步校验,需自行封装",
87
+ best_for: "需要完全控制表单行为、团队有状态机经验",
88
+ worst_for: "标准表单场景(杀鸡用牛刀)、快速原型",
89
+ },
90
+ ],
91
+ },
92
+ {
93
+ keywords: ["缓存", "cache", "本地缓存", "分布式缓存", "缓存策略", "缓存穿透"],
94
+ domain: "缓存策略",
95
+ solutions: [
96
+ {
97
+ name: "Spring Cache + Redis",
98
+ description: "Spring Cache 抽象 + Redis 作为分布式缓存",
99
+ ratings: { dev_cost: 5, performance: 4, scalability: 4, maintainability: 4 },
100
+ fatal_weakness: "默认无本地缓存层,每次请求都走网络,缓存雪崩无防护",
101
+ best_for: "标准 CRUD 读取缓存,Spring Boot 项目",
102
+ worst_for: "超高 QPS(>10 万)、需要多级缓存的场景",
103
+ },
104
+ {
105
+ name: "Caffeine + Redis 二级缓存",
106
+ description: "L1 本地缓存 (Caffeine) + L2 分布式缓存 (Redis)",
107
+ ratings: { dev_cost: 3, performance: 5, scalability: 4, maintainability: 3 },
108
+ fatal_weakness: "L1/L2 一致性维护复杂,需处理缓存失效广播",
109
+ best_for: "超高 QPS 读场景(>5 万),数据变化频率低",
110
+ worst_for: "数据频繁变更、一致性要求严格的场景",
111
+ },
112
+ {
113
+ name: "手动缓存 + TTL + 布隆过滤器",
114
+ description: "手动管理缓存键/值/TTL,布隆过滤器防穿透",
115
+ ratings: { dev_cost: 2, performance: 4, scalability: 3, maintainability: 2 },
116
+ fatal_weakness: "大量样板代码,缓存键管理容易出 bug,无统一失效策略",
117
+ best_for: "特殊缓存需求(复杂过期策略、多键联动)",
118
+ worst_for: "团队规模小、缓存键种类多、追求可维护性",
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ keywords: ["定时任务", "调度", "scheduled", "cron", "分布式调度", "任务调度"],
124
+ domain: "分布式任务调度",
125
+ solutions: [
126
+ {
127
+ name: "Spring @Scheduled",
128
+ description: "Spring 内置的 @Scheduled 注解,单机调度",
129
+ ratings: { dev_cost: 5, performance: 3, scalability: 1, maintainability: 5 },
130
+ fatal_weakness: "单机执行,多实例会重复执行,无分片能力",
131
+ best_for: "单实例部署、低频简单任务(如每天统计)",
132
+ worst_for: "多实例部署、需要分片/失败重试/依赖任务链",
133
+ },
134
+ {
135
+ name: "XXL-Job",
136
+ description: "大众点评开源的分布式任务调度平台",
137
+ ratings: { dev_cost: 3, performance: 4, scalability: 5, maintainability: 4 },
138
+ fatal_weakness: "需要独立部署调度中心,增加运维负担",
139
+ best_for: "中大规模项目,需要可视化管理、分片、失败重试",
140
+ worst_for: "极小项目、不想额外部署服务",
141
+ },
142
+ {
143
+ name: "Quartz 集群",
144
+ description: "Quartz 调度器 + 数据库锁实现集群调度",
145
+ ratings: { dev_cost: 3, performance: 3, scalability: 3, maintainability: 3 },
146
+ fatal_weakness: "数据库行锁争用,高并发调度性能差,无分片能力",
147
+ best_for: "已有 Quartz 经验、中小规模集群",
148
+ worst_for: "大规模分片任务(>100 分片)",
149
+ },
150
+ ],
151
+ },
152
+ {
153
+ keywords: ["文件存储", "对象存储", "文件上传", "oss", "s3", "minio", "文件管理"],
154
+ domain: "文件存储",
155
+ solutions: [
156
+ {
157
+ name: "MinIO / S3 对象存储",
158
+ description: "S3 兼容的对象存储服务,统一管理文件",
159
+ ratings: { dev_cost: 4, performance: 5, scalability: 5, maintainability: 4 },
160
+ fatal_weakness: "大文件上传需要分片逻辑,跨区域同步需额外方案",
161
+ best_for: "标准文件上传/下载,需要可扩展存储",
162
+ worst_for: "需要文件实时协作编辑、文件系统语义",
163
+ },
164
+ {
165
+ name: "本地文件系统 + Nginx",
166
+ description: "本地磁盘存储 + Nginx 静态文件服务",
167
+ ratings: { dev_cost: 5, performance: 4, scalability: 1, maintainability: 3 },
168
+ fatal_weakness: "无法水平扩展,磁盘满即服务不可用",
169
+ best_for: "单机部署、小规模文件存储",
170
+ worst_for: "多实例部署、大文件量、需要高可用",
171
+ },
172
+ {
173
+ name: "数据库 BLOB 存储",
174
+ description: "将文件内容直接存入数据库 BLOB 字段",
175
+ ratings: { dev_cost: 5, performance: 1, scalability: 1, maintainability: 2 },
176
+ fatal_weakness: "数据库膨胀、备份恢复慢、无法 CDN 加速",
177
+ best_for: "极小文件(<100KB)且需要事务一致性",
178
+ worst_for: "任何超过 1MB 的文件、高频读写场景",
179
+ },
180
+ ],
181
+ },
182
+ {
183
+ keywords: ["认证", "鉴权", "登录", "权限", "auth", "JWT", "OAuth", "SSO"],
184
+ domain: "认证鉴权",
185
+ solutions: [
186
+ {
187
+ name: "Spring Security + JWT",
188
+ description: "Spring Security 框架 + 无状态 JWT Token",
189
+ ratings: { dev_cost: 3, performance: 5, scalability: 5, maintainability: 3 },
190
+ fatal_weakness: "JWT 无法主动失效(除非引入黑名单),Token 泄露窗口期风险",
191
+ best_for: "无状态微服务、前后端分离、不需要即时踢人",
192
+ worst_for: "需要即时会话管理、Token 细粒度控制",
193
+ },
194
+ {
195
+ name: "Spring Security + Redis Session",
196
+ description: "Spring Security + Redis 集中式 Session 管理",
197
+ ratings: { dev_cost: 3, performance: 3, scalability: 3, maintainability: 4 },
198
+ fatal_weakness: "每次请求都查 Redis,Redis 故障 = 全局无法登录",
199
+ best_for: "需要即时会话管理、踢人、并发登录控制",
200
+ worst_for: "超高 QPS(Redis 成为瓶颈)、纯无状态架构",
201
+ },
202
+ {
203
+ name: "OAuth 2.0 + OIDC (Keycloak)",
204
+ description: "标准 OAuth 2.0 / OIDC 协议 + Keycloak 作为 IdP",
205
+ ratings: { dev_cost: 2, performance: 3, scalability: 4, maintainability: 3 },
206
+ fatal_weakness: "Keycloak 学习曲线陡峭,定制化困难,部署复杂",
207
+ best_for: "多系统 SSO、第三方登录、企业级 IAM",
208
+ worst_for: "单系统简单登录、快速上线需求",
209
+ },
210
+ ],
211
+ },
212
+ ];
213
+ // ── 核心逻辑 ──
214
+ /**
215
+ * 执行自主技术选型与方案证伪。
216
+ * @param params - 输入参数
217
+ * @returns 探索结果,包含行业基准、对比矩阵、推荐方案、证伪报告和 A/B 决策
218
+ */
219
+ export function exploreSolutions(params) {
220
+ const { domain_query, projectConfig, knowledgeIndex } = params;
221
+ // 1. 检索行业基准 + 知识库匹配
222
+ const benchmarks = retrieveBenchmarks(domain_query, knowledgeIndex);
223
+ // 2. 构建对比矩阵
224
+ const matrix = buildComparisonMatrix(benchmarks);
225
+ // 3. 最优解宣誓
226
+ const recommendation = declareArchitectRecommendation(benchmarks, projectConfig);
227
+ // 4. 证伪循环
228
+ const falsifications = benchmarks.map((b) => performFalsification(b));
229
+ // 5. A/B 决策诱导
230
+ const decisionOptions = generateDecisionOptions(benchmarks, recommendation);
231
+ // 6. 方案边界声明汇总
232
+ const boundarySummary = falsifications
233
+ .map((f) => `【${f.solution_name}】${f.boundary_declaration}`)
234
+ .join("\n");
235
+ return {
236
+ domain: benchmarks[0]?.name || domain_query,
237
+ benchmarks,
238
+ comparison_matrix: matrix,
239
+ architect_recommendation: recommendation,
240
+ falsification_report: falsifications,
241
+ decision_options: decisionOptions,
242
+ boundary_summary: boundarySummary,
243
+ };
244
+ }
245
+ // ── 行业基准检索 ──
246
+ /**
247
+ * 检索行业基准方案。优先匹配内置行业库,辅以知识库查询。
248
+ * 禁止凭空捏造 — 必须返回至少 1 个有据可查的标准方案。
249
+ */
250
+ function retrieveBenchmarks(domainQuery, knowledgeIndex) {
251
+ const solutions = [];
252
+ // 1. 匹配内置行业基准库
253
+ const queryLower = domainQuery.toLowerCase();
254
+ for (const benchmark of INDUSTRY_BENCHMARKS) {
255
+ const matched = benchmark.keywords.some((kw) => queryLower.includes(kw.toLowerCase()) || kw.toLowerCase().includes(queryLower));
256
+ if (matched) {
257
+ for (const sol of benchmark.solutions) {
258
+ solutions.push({ ...sol, source: "industry" });
259
+ }
260
+ break; // 匹配到第一个领域就停止
261
+ }
262
+ }
263
+ // 2. 补充知识库匹配
264
+ if (knowledgeIndex && solutions.length === 0) {
265
+ const entries = knowledgeIndex.query({
266
+ keywords: domainQuery.split(/[\s,,、]+/).filter((w) => w.length >= 2),
267
+ limit: 3,
268
+ });
269
+ for (const entry of entries) {
270
+ if (entry.body) {
271
+ solutions.push({
272
+ name: entry.name,
273
+ source: "knowledge",
274
+ description: entry.when,
275
+ ratings: { dev_cost: 3, performance: 3, scalability: 3, maintainability: 3 },
276
+ fatal_weakness: "从知识库匹配,需人工确认致命缺点",
277
+ best_for: entry.scope.join(", "),
278
+ worst_for: "超出知识库记录范围",
279
+ });
280
+ }
281
+ }
282
+ }
283
+ // 3. 兜底: 启发式通用方案框架
284
+ if (solutions.length === 0) {
285
+ solutions.push({
286
+ name: "轻量级方案(最小实现)",
287
+ source: "heuristic",
288
+ description: "最小可行实现,优先开发速度",
289
+ ratings: { dev_cost: 5, performance: 2, scalability: 2, maintainability: 3 },
290
+ fatal_weakness: "扩展性差,数据量/用户量增长后需重构",
291
+ best_for: "MVP 阶段、快速验证",
292
+ worst_for: "生产环境高负载场景",
293
+ }, {
294
+ name: "行业标准方案(推荐调研方向)",
295
+ source: "heuristic",
296
+ description: "该领域的标准解决方案,需进一步调研具体技术选型",
297
+ ratings: { dev_cost: 3, performance: 4, scalability: 4, maintainability: 4 },
298
+ fatal_weakness: "需要领域知识确认具体方案,当前为通用模板",
299
+ best_for: "大多数标准场景",
300
+ worst_for: "极端特殊需求",
301
+ }, {
302
+ name: "重量级方案(企业级)",
303
+ source: "heuristic",
304
+ description: "企业级全功能方案,含完整监控、容错、扩展能力",
305
+ ratings: { dev_cost: 1, performance: 5, scalability: 5, maintainability: 2 },
306
+ fatal_weakness: "开发周期长,初期投入大,过度工程风险",
307
+ best_for: "明确的高并发/高可用需求",
308
+ worst_for: "时间紧迫、需求不确定",
309
+ });
310
+ }
311
+ return solutions;
312
+ }
313
+ // ── 对比矩阵 ──
314
+ const DIMENSIONS = ["开发成本", "运行性能", "扩展上限", "维护性"];
315
+ const RATING_KEYS = ["dev_cost", "performance", "scalability", "maintainability"];
316
+ function buildComparisonMatrix(solutions) {
317
+ return {
318
+ dimensions: DIMENSIONS,
319
+ rows: solutions.map((sol) => ({
320
+ solution_name: sol.name,
321
+ scores: RATING_KEYS.map((key) => sol.ratings[key]),
322
+ total: RATING_KEYS.reduce((sum, key) => sum + sol.ratings[key], 0),
323
+ })),
324
+ };
325
+ }
326
+ // ── 最优解宣誓 ──
327
+ function declareArchitectRecommendation(solutions, config) {
328
+ // 按总分排序
329
+ const sorted = [...solutions].sort((a, b) => RATING_KEYS.reduce((s, k) => s + b.ratings[k], 0) -
330
+ RATING_KEYS.reduce((s, k) => s + a.ratings[k], 0));
331
+ const recommended = sorted[0];
332
+ const others = sorted.slice(1);
333
+ // 基于项目上下文调整推荐理由
334
+ const techContext = `${config.tech_stack.backend.framework} ${config.tech_stack.backend.version} + ${config.tech_stack.frontend.framework} ${config.tech_stack.frontend.version}`;
335
+ const mitigation = others
336
+ .map((o) => `规避了「${o.name}」的致命缺点: ${o.fatal_weakness}`)
337
+ .join(";");
338
+ return {
339
+ recommended: recommended.name,
340
+ reason: `基于 ${techContext} 技术栈,综合评分最高(${RATING_KEYS.reduce((s, k) => s + recommended.ratings[k], 0)}/20)`,
341
+ fatal_weakness_mitigation: mitigation,
342
+ prerequisites: [
343
+ `团队已具备 ${recommended.name.split(/[/(]/)[0].trim()} 的基本使用能力`,
344
+ `项目部署环境满足 ${recommended.best_for.split("、")[0]} 的基础设施要求`,
345
+ ],
346
+ };
347
+ }
348
+ // ── 方案证伪 ──
349
+ const SELF_DESTRUCT_PATTERNS = [
350
+ { condition: "网络分区", template: "网络分区发生时,{solution} 的锁/状态可能分裂,导致数据不一致" },
351
+ { condition: "高并发热点", template: "单点 QPS 超过 10 万时,{solution} 可能成为瓶颈" },
352
+ { condition: "数据量级激增", template: "数据量从 GB 级跃迁到 TB 级时,{solution} 的性能可能断崖式下降" },
353
+ { condition: "依赖服务宕机", template: "{solution} 依赖的核心服务(如 Redis/DB)宕机时,整个功能不可用" },
354
+ { condition: "多活部署", template: "跨数据中心/多活部署时,{solution} 的一致性保障可能失效" },
355
+ ];
356
+ function performFalsification(solution) {
357
+ // 根据方案特性筛选相关的自毁场景
358
+ const scenarios = [];
359
+ // 基于评分推断脆弱点
360
+ if (solution.ratings.scalability <= 2) {
361
+ scenarios.push(`数据量级激增: ${solution.name} 在数据量从 GB 跃迁到 TB 级时性能断崖式下降(扩展性评分: ${solution.ratings.scalability}/5)`);
362
+ scenarios.push(`高并发热点: 并发量超过设计上限时,${solution.name} 成为系统瓶颈`);
363
+ }
364
+ if (solution.ratings.performance <= 2) {
365
+ scenarios.push(`响应延迟: ${solution.name} 在高频调用场景下延迟不可接受(性能评分: ${solution.ratings.performance}/5)`);
366
+ }
367
+ if (solution.ratings.maintainability <= 2) {
368
+ scenarios.push(`运维灾难: ${solution.name} 故障排查时间 > 2 小时,SRE 团队难以维护(维护性评分: ${solution.ratings.maintainability}/5)`);
369
+ }
370
+ // 基于致命缺点推导额外场景
371
+ if (/Redis|缓存/.test(solution.fatal_weakness)) {
372
+ scenarios.push("依赖服务宕机: Redis 故障时缓存全部失效,数据库被流量打穿");
373
+ }
374
+ if (/单机|单实例|单点/.test(solution.fatal_weakness)) {
375
+ scenarios.push("多活部署: 多实例部署时功能冲突或重复执行");
376
+ }
377
+ if (/数据库|DB|BLOB/.test(solution.fatal_weakness)) {
378
+ scenarios.push("存储膨胀: 文件/数据持续增长导致数据库备份恢复超时");
379
+ }
380
+ // 兜底: 至少保证 1 个场景
381
+ if (scenarios.length === 0) {
382
+ scenarios.push(`极端负载: 在 10 倍于设计容量的负载下,${solution.name} 的行为未经验证`);
383
+ }
384
+ const ceiling = solution.worst_for;
385
+ return {
386
+ solution_name: solution.name,
387
+ self_destruct_scenarios: scenarios,
388
+ boundary_declaration: `【${solution.name}】天花板: ${ceiling}。超出此范围必须切换方案。`,
389
+ ceiling_description: ceiling,
390
+ };
391
+ }
392
+ // ── A/B 决策诱导 ──
393
+ function generateDecisionOptions(solutions, recommendation) {
394
+ // 方案 A: 架构师推荐(平衡性最优)
395
+ const recommended = solutions.find((s) => s.name === recommendation.recommended) || solutions[0];
396
+ // 方案 B: 另选一个有差异化优势的方案
397
+ const alternative = solutions.find((s) => s.name !== recommended.name &&
398
+ s.ratings.performance > recommended.ratings.performance) || solutions.find((s) => s.name !== recommended.name) || solutions[0];
399
+ return [
400
+ {
401
+ label: "方案 A(最优选型)",
402
+ solution_name: recommended.name,
403
+ reason: `平衡性最好,综合评分 ${RATING_KEYS.reduce((s, k) => s + recommended.ratings[k], 0)}/20`,
404
+ suitable_for: recommended.best_for,
405
+ },
406
+ {
407
+ label: "方案 B(极致性能)",
408
+ solution_name: alternative.name,
409
+ reason: `性能评分 ${alternative.ratings.performance}/5,适合未来高负载演进`,
410
+ suitable_for: alternative.best_for,
411
+ },
412
+ ];
413
+ }
414
+ //# sourceMappingURL=exploration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exploration.js","sourceRoot":"","sources":["../../src/engine/exploration.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,39 @@
1
1
  import type { FailureClassifyResult } from "../types.js";
2
+ /**
3
+ * 失败分类器。
4
+ * @description 通过分析错误输出内容,结合重试计数和复发历史,给出失败类型和处理建议。
5
+ */
2
6
  export declare class FailureClassifier {
7
+ /** 上一次错误信息(用于判断是否为相同错误) */
3
8
  private lastError;
9
+ /** 历史错误列表(用于复发检测) */
4
10
  private errorHistory;
11
+ /** 最大重试次数 */
5
12
  private maxRetries;
13
+ /** 最大自动修复次数(防无限循环) */
6
14
  private maxAutoRepair;
15
+ /**
16
+ * 创建失败分类器实例。
17
+ * @param maxRetries - 最大重试次数,默认 3
18
+ * @param maxAutoRepair - 最大自动修复循环次数,默认 3
19
+ */
7
20
  constructor(maxRetries?: number, maxAutoRepair?: number);
21
+ /**
22
+ * 分类错误输出,返回失败分类结果。
23
+ * @description 分类优先级:上游阶段检测 > 修复循环上限 > 复发检测(>=4次) >
24
+ * 相同错误检测 > 范围不足检测 > 可修复错误 > 默认可重试。
25
+ * @param errorOutput - 错误输出文本
26
+ * @param retryCount - 当前重试次数
27
+ * @param repairLoopCount - 当前修复循环次数
28
+ * @returns 失败分类结果,包含失败类型、处理动作、是否可自动修复等信息
29
+ */
8
30
  classify(errorOutput: string, retryCount?: number, repairLoopCount?: number): FailureClassifyResult;
31
+ /**
32
+ * 统计指定错误输出在历史中的出现次数。
33
+ * @description 用于复发检测,统计同一错误信息的累计出现频次。
34
+ * @param errorOutput - 待统计的错误输出文本
35
+ * @returns 该错误在历史记录中的出现次数
36
+ */
9
37
  private countRecurrence;
10
38
  }
11
39
  //# sourceMappingURL=failure_classifier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"failure_classifier.d.ts","sourceRoot":"","sources":["../../src/engine/failure_classifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAWtE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;gBAElB,UAAU,SAAI,EAAE,aAAa,SAAI;IAK7C,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,EAAE,eAAe,SAAI,GAAG,qBAAqB;IAoGzF,OAAO,CAAC,eAAe;CAIxB"}
1
+ {"version":3,"file":"failure_classifier.d.ts","sourceRoot":"","sources":["../../src/engine/failure_classifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAqBtE;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,2BAA2B;IAC3B,OAAO,CAAC,SAAS,CAAc;IAC/B,qBAAqB;IACrB,OAAO,CAAC,YAAY,CAAgB;IACpC,aAAa;IACb,OAAO,CAAC,UAAU,CAAS;IAC3B,sBAAsB;IACtB,OAAO,CAAC,aAAa,CAAS;IAE9B;;;;OAIG;gBACS,UAAU,SAAI,EAAE,aAAa,SAAI;IAK7C;;;;;;;;OAQG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,EAAE,eAAe,SAAI,GAAG,qBAAqB;IAuGzF;;;;;OAKG;IACH,OAAO,CAAC,eAAe;CAIxB"}
@@ -1,4 +1,13 @@
1
- // 不可自动修复的上游阶段关键词
1
+ /**
2
+ * 失败分类模块。
3
+ * @description 对任务执行过程中的失败进行智能分类,判断失败类型(确定性/可修复/范围不足)、
4
+ * 是否可以自动修复、是否需要升级到人工处理。内置复发检测和修复循环上限机制,
5
+ * 防止无限重试。同时检测上游阶段(需求/设计/权限/DDL/契约)问题,禁止自动修复。
6
+ */
7
+ /**
8
+ * 不可自动修复的上游阶段关键词映射。
9
+ * @description 当错误输出中包含这些关键词时,判定根因在上游阶段,强制升级到人工处理。
10
+ */
2
11
  const UPSTREAM_PHASE_PATTERNS = [
3
12
  { pattern: /requirement|需求|spec/i, phase: "requirement" },
4
13
  { pattern: /design|架构|设计|DDL|表结构|接口定义/i, phase: "design" },
@@ -6,24 +15,46 @@ const UPSTREAM_PHASE_PATTERNS = [
6
15
  { pattern: /migration|数据库变更|schema/i, phase: "ddl" },
7
16
  { pattern: /api.*contract|接口契约|swagger/i, phase: "api_contract" },
8
17
  ];
18
+ /**
19
+ * 失败分类器。
20
+ * @description 通过分析错误输出内容,结合重试计数和复发历史,给出失败类型和处理建议。
21
+ */
9
22
  export class FailureClassifier {
23
+ /** 上一次错误信息(用于判断是否为相同错误) */
10
24
  lastError = "";
25
+ /** 历史错误列表(用于复发检测) */
11
26
  errorHistory = [];
27
+ /** 最大重试次数 */
12
28
  maxRetries;
29
+ /** 最大自动修复次数(防无限循环) */
13
30
  maxAutoRepair;
31
+ /**
32
+ * 创建失败分类器实例。
33
+ * @param maxRetries - 最大重试次数,默认 3
34
+ * @param maxAutoRepair - 最大自动修复循环次数,默认 3
35
+ */
14
36
  constructor(maxRetries = 3, maxAutoRepair = 3) {
15
37
  this.maxRetries = maxRetries;
16
38
  this.maxAutoRepair = maxAutoRepair;
17
39
  }
40
+ /**
41
+ * 分类错误输出,返回失败分类结果。
42
+ * @description 分类优先级:上游阶段检测 > 修复循环上限 > 复发检测(>=4次) >
43
+ * 相同错误检测 > 范围不足检测 > 可修复错误 > 默认可重试。
44
+ * @param errorOutput - 错误输出文本
45
+ * @param retryCount - 当前重试次数
46
+ * @param repairLoopCount - 当前修复循环次数
47
+ * @returns 失败分类结果,包含失败类型、处理动作、是否可自动修复等信息
48
+ */
18
49
  classify(errorOutput, retryCount = 0, repairLoopCount = 0) {
19
50
  const isSameError = errorOutput.trim() === this.lastError.trim();
20
51
  this.lastError = errorOutput.trim();
21
52
  this.errorHistory.push(errorOutput.trim());
22
53
  const retryRemaining = Math.max(0, this.maxRetries - retryCount);
23
54
  const recurrenceCount = this.countRecurrence(errorOutput);
24
- // 检测根因阶段
55
+ // 检测根因是否在上游阶段
25
56
  const upstreamPhase = detectUpstreamPhase(errorOutput);
26
- // 上游阶段问题 → 不可自动修复,强制升级
57
+ // 上游阶段问题不可自动修复,强制升级到人工处理
27
58
  if (upstreamPhase) {
28
59
  return {
29
60
  failure_type: "deterministic",
@@ -36,7 +67,7 @@ export class FailureClassifier {
36
67
  recurrence_count: recurrenceCount,
37
68
  };
38
69
  }
39
- // 修复循环上限 → 升级
70
+ // 修复循环已达上限,停止自动修复并升级
40
71
  if (repairLoopCount >= this.maxAutoRepair) {
41
72
  return {
42
73
  failure_type: "deterministic",
@@ -49,7 +80,7 @@ export class FailureClassifier {
49
80
  recurrence_count: recurrenceCount,
50
81
  };
51
82
  }
52
- // 复发检测:同一错误 4 次 → 复发缺陷
83
+ // 复发检测:同一错误出现 4 次及以上,判定为复发缺陷
53
84
  if (recurrenceCount >= 4) {
54
85
  return {
55
86
  failure_type: "deterministic",
@@ -73,6 +104,7 @@ export class FailureClassifier {
73
104
  recurrence_count: recurrenceCount,
74
105
  };
75
106
  }
107
+ // 文件/模块找不到 → 范围不足,需要扩大作用域
76
108
  if (/cannot find|not found|no such file|import.*not resolved/i.test(errorOutput)) {
77
109
  return {
78
110
  failure_type: "scope_insufficient",
@@ -84,6 +116,7 @@ export class FailureClassifier {
84
116
  recurrence_count: recurrenceCount,
85
117
  };
86
118
  }
119
+ // 编译/语法错误 → 可自动修复
87
120
  if (/error TS|compilation error|syntax error/i.test(errorOutput)) {
88
121
  return {
89
122
  failure_type: "fixable",
@@ -95,6 +128,7 @@ export class FailureClassifier {
95
128
  recurrence_count: recurrenceCount,
96
129
  };
97
130
  }
131
+ // 默认情况:视为可修复的可重试错误
98
132
  return {
99
133
  failure_type: "fixable",
100
134
  is_same_error: false,
@@ -105,11 +139,23 @@ export class FailureClassifier {
105
139
  recurrence_count: recurrenceCount,
106
140
  };
107
141
  }
142
+ /**
143
+ * 统计指定错误输出在历史中的出现次数。
144
+ * @description 用于复发检测,统计同一错误信息的累计出现频次。
145
+ * @param errorOutput - 待统计的错误输出文本
146
+ * @returns 该错误在历史记录中的出现次数
147
+ */
108
148
  countRecurrence(errorOutput) {
109
149
  const normalized = errorOutput.trim();
110
150
  return this.errorHistory.filter((e) => e === normalized).length;
111
151
  }
112
152
  }
153
+ /**
154
+ * 检测错误输出是否涉及不可自动修复的上游阶段。
155
+ * @description 遍历上游阶段关键词模式,匹配成功则返回对应的阶段名称。
156
+ * @param errorOutput - 错误输出文本
157
+ * @returns 匹配到的上游阶段名称,若未匹配到则返回 undefined
158
+ */
113
159
  function detectUpstreamPhase(errorOutput) {
114
160
  for (const { pattern, phase } of UPSTREAM_PHASE_PATTERNS) {
115
161
  if (pattern.test(errorOutput))
@@ -1 +1 @@
1
- {"version":3,"file":"failure_classifier.js","sourceRoot":"","sources":["../../src/engine/failure_classifier.ts"],"names":[],"mappings":"AAEA,iBAAiB;AACjB,MAAM,uBAAuB,GAA8C;IACzE,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE;IACzD,EAAE,OAAO,EAAE,4BAA4B,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC1D,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,YAAY,EAAE;IACxD,EAAE,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE;IACpD,EAAE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,cAAc,EAAE;CAClE,CAAC;AAEF,MAAM,OAAO,iBAAiB;IACpB,SAAS,GAAW,EAAE,CAAC;IACvB,YAAY,GAAa,EAAE,CAAC;IAC5B,UAAU,CAAS;IACnB,aAAa,CAAS;IAE9B,YAAY,UAAU,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,WAAmB,EAAE,UAAU,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC;QAC/D,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;QACjE,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAE1D,SAAS;QACT,MAAM,aAAa,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAEvD,uBAAuB;QACvB,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO;gBACL,YAAY,EAAE,eAAe;gBAC7B,aAAa,EAAE,WAAW;gBAC1B,eAAe,EAAE,cAAc;gBAC/B,MAAM,EAAE,UAAU;gBAClB,YAAY,EAAE,aAAa;gBAC3B,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,OAAO,aAAa,YAAY;gBACnD,gBAAgB,EAAE,eAAe;aAClC,CAAC;QACJ,CAAC;QAED,cAAc;QACd,IAAI,eAAe,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1C,OAAO;gBACL,YAAY,EAAE,eAAe;gBAC7B,aAAa,EAAE,WAAW;gBAC1B,eAAe,EAAE,cAAc;gBAC/B,MAAM,EAAE,UAAU;gBAClB,YAAY,EAAE,gBAAgB;gBAC9B,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,YAAY,eAAe,IAAI,IAAI,CAAC,aAAa,KAAK;gBACzE,gBAAgB,EAAE,eAAe;aAClC,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,YAAY,EAAE,eAAe;gBAC7B,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,cAAc;gBAC/B,MAAM,EAAE,UAAU;gBAClB,YAAY,EAAE,gBAAgB;gBAC9B,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,UAAU,eAAe,YAAY;gBACxD,gBAAgB,EAAE,eAAe;aAClC,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;gBACL,YAAY,EAAE,eAAe;gBAC7B,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,cAAc;gBAC/B,MAAM,EAAE,UAAU;gBAClB,YAAY,EAAE,gBAAgB;gBAC9B,eAAe,EAAE,eAAe,GAAG,CAAC;gBACpC,gBAAgB,EAAE,eAAe;aAClC,CAAC;QACJ,CAAC;QAED,IAAI,0DAA0D,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjF,OAAO;gBACL,YAAY,EAAE,oBAAoB;gBAClC,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,cAAc;gBAC/B,MAAM,EAAE,cAAc;gBACtB,YAAY,EAAE,gBAAgB;gBAC9B,eAAe,EAAE,IAAI;gBACrB,gBAAgB,EAAE,eAAe;aAClC,CAAC;QACJ,CAAC;QAED,IAAI,0CAA0C,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjE,OAAO;gBACL,YAAY,EAAE,SAAS;gBACvB,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,cAAc;gBAC/B,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,gBAAgB;gBAC9B,eAAe,EAAE,IAAI;gBACrB,gBAAgB,EAAE,eAAe;aAClC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,YAAY,EAAE,SAAS;YACvB,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,cAAc;YAC/B,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,gBAAgB;YAC9B,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,eAAe;SAClC,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,WAAmB;QACzC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IAClE,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,uBAAuB,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"failure_classifier.js","sourceRoot":"","sources":["../../src/engine/failure_classifier.ts"],"names":[],"mappings":"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"}