soloforge 1.1.40 → 1.1.42

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 (156) hide show
  1. package/README.md +57 -0
  2. package/dist/adapters/shared/workflow_template.js +1 -1
  3. package/dist/bin/commands/check_write.d.ts +1 -1
  4. package/dist/bin/commands/check_write.d.ts.map +1 -1
  5. package/dist/bin/commands/check_write.js +13 -34
  6. package/dist/bin/commands/check_write.js.map +1 -1
  7. package/dist/bin/commands/modify.d.ts +2 -1
  8. package/dist/bin/commands/modify.d.ts.map +1 -1
  9. package/dist/bin/commands/modify.js +29 -15
  10. package/dist/bin/commands/modify.js.map +1 -1
  11. package/dist/bin/commands/review.d.ts +3 -2
  12. package/dist/bin/commands/review.d.ts.map +1 -1
  13. package/dist/bin/commands/review.js +179 -46
  14. package/dist/bin/commands/review.js.map +1 -1
  15. package/dist/bin/soloforge.js +0 -18
  16. package/dist/bin/soloforge.js.map +1 -1
  17. package/dist/engine/context_engine/companion_injector.d.ts +16 -3
  18. package/dist/engine/context_engine/companion_injector.d.ts.map +1 -1
  19. package/dist/engine/context_engine/companion_injector.js +228 -35
  20. package/dist/engine/context_engine/companion_injector.js.map +1 -1
  21. package/dist/engine/contracts/artifact_contract_registry.d.ts +1 -43
  22. package/dist/engine/contracts/artifact_contract_registry.d.ts.map +1 -1
  23. package/dist/engine/contracts/artifact_contract_registry.js +24 -100
  24. package/dist/engine/contracts/artifact_contract_registry.js.map +1 -1
  25. package/dist/engine/contracts/artifact_process_rules.d.ts.map +1 -1
  26. package/dist/engine/contracts/artifact_process_rules.js +0 -12
  27. package/dist/engine/contracts/artifact_process_rules.js.map +1 -1
  28. package/dist/engine/contracts/artifact_schema_registry.d.ts.map +1 -1
  29. package/dist/engine/contracts/artifact_schema_registry.js +0 -24
  30. package/dist/engine/contracts/artifact_schema_registry.js.map +1 -1
  31. package/dist/engine/contracts/tool_invocation_contract_registry.d.ts +29 -0
  32. package/dist/engine/contracts/tool_invocation_contract_registry.d.ts.map +1 -1
  33. package/dist/engine/contracts/tool_invocation_contract_registry.js +32 -21
  34. package/dist/engine/contracts/tool_invocation_contract_registry.js.map +1 -1
  35. package/dist/engine/core/paths.d.ts +0 -2
  36. package/dist/engine/core/paths.d.ts.map +1 -1
  37. package/dist/engine/core/paths.js +0 -2
  38. package/dist/engine/core/paths.js.map +1 -1
  39. package/dist/engine/knowledge/knowledge_writer.js +1 -1
  40. package/dist/engine/pipeline/artifact_aliases.d.ts +56 -3
  41. package/dist/engine/pipeline/artifact_aliases.d.ts.map +1 -1
  42. package/dist/engine/pipeline/artifact_aliases.js +377 -24
  43. package/dist/engine/pipeline/artifact_aliases.js.map +1 -1
  44. package/dist/engine/pipeline/artifact_resolver.d.ts +82 -0
  45. package/dist/engine/pipeline/artifact_resolver.d.ts.map +1 -0
  46. package/dist/engine/pipeline/artifact_resolver.js +458 -0
  47. package/dist/engine/pipeline/artifact_resolver.js.map +1 -0
  48. package/dist/engine/pipeline/intent_expander/knowledge_resolution.d.ts +2 -2
  49. package/dist/engine/pipeline/intent_expander/knowledge_resolution.d.ts.map +1 -1
  50. package/dist/engine/pipeline/intent_expander/knowledge_resolution.js.map +1 -1
  51. package/dist/engine/pipeline/orchestrate_single_artifact.d.ts +185 -0
  52. package/dist/engine/pipeline/orchestrate_single_artifact.d.ts.map +1 -0
  53. package/dist/engine/pipeline/orchestrate_single_artifact.js +772 -0
  54. package/dist/engine/pipeline/orchestrate_single_artifact.js.map +1 -0
  55. package/dist/engine/pipeline/scope_resolver.js +1 -1
  56. package/dist/engine/pipeline/scope_resolver.js.map +1 -1
  57. package/dist/engine/pipeline/state_machine/certainty_gate.d.ts.map +1 -1
  58. package/dist/engine/pipeline/state_machine/certainty_gate.js +122 -9
  59. package/dist/engine/pipeline/state_machine/certainty_gate.js.map +1 -1
  60. package/dist/engine/pipeline/state_machine/pipeline_state_machine.d.ts +1 -13
  61. package/dist/engine/pipeline/state_machine/pipeline_state_machine.d.ts.map +1 -1
  62. package/dist/engine/pipeline/state_machine/pipeline_state_machine.js +65 -73
  63. package/dist/engine/pipeline/state_machine/pipeline_state_machine.js.map +1 -1
  64. package/dist/engine/pipeline/state_machine/sf_command_parser.d.ts.map +1 -1
  65. package/dist/engine/pipeline/state_machine/sf_command_parser.js +24 -19
  66. package/dist/engine/pipeline/state_machine/sf_command_parser.js.map +1 -1
  67. package/dist/engine/pipeline/state_machine/stage_command_registry.d.ts.map +1 -1
  68. package/dist/engine/pipeline/state_machine/stage_command_registry.js +7 -0
  69. package/dist/engine/pipeline/state_machine/stage_command_registry.js.map +1 -1
  70. package/dist/engine/pipeline/state_machine/stage_executor.d.ts.map +1 -1
  71. package/dist/engine/pipeline/state_machine/stage_executor.js +5 -11
  72. package/dist/engine/pipeline/state_machine/stage_executor.js.map +1 -1
  73. package/dist/engine/pipeline/state_machine/static_route_table.d.ts +2 -0
  74. package/dist/engine/pipeline/state_machine/static_route_table.d.ts.map +1 -1
  75. package/dist/engine/pipeline/state_machine/static_route_table.js +2 -0
  76. package/dist/engine/pipeline/state_machine/static_route_table.js.map +1 -1
  77. package/dist/engine/pipeline/state_machine/uncertainty_bridge.d.ts +25 -0
  78. package/dist/engine/pipeline/state_machine/uncertainty_bridge.d.ts.map +1 -1
  79. package/dist/engine/pipeline/state_machine/uncertainty_bridge.js +18 -0
  80. package/dist/engine/pipeline/state_machine/uncertainty_bridge.js.map +1 -1
  81. package/dist/engine/pipeline/target_classifier.d.ts +48 -0
  82. package/dist/engine/pipeline/target_classifier.d.ts.map +1 -0
  83. package/dist/engine/pipeline/target_classifier.js +129 -0
  84. package/dist/engine/pipeline/target_classifier.js.map +1 -0
  85. package/dist/engine/pipeline/task_planner.js +1 -1
  86. package/dist/engine/pipeline/task_planner.js.map +1 -1
  87. package/dist/engine/release/foundation_scenario_registry.js +1 -1
  88. package/dist/engine/release/foundation_scenario_registry.js.map +1 -1
  89. package/dist/engine/templates/asset_manifest.d.ts.map +1 -1
  90. package/dist/engine/templates/asset_manifest.js +1 -0
  91. package/dist/engine/templates/asset_manifest.js.map +1 -1
  92. package/dist/engine/templates/explicit_asset_registry/rules_shared.d.ts.map +1 -1
  93. package/dist/engine/templates/explicit_asset_registry/rules_shared.js +22 -0
  94. package/dist/engine/templates/explicit_asset_registry/rules_shared.js.map +1 -1
  95. package/dist/server/tools/cep_assessment.d.ts +6 -0
  96. package/dist/server/tools/cep_assessment.d.ts.map +1 -1
  97. package/dist/server/tools/cep_assessment.js +23 -0
  98. package/dist/server/tools/cep_assessment.js.map +1 -1
  99. package/dist/server/tools/middleware.d.ts.map +1 -1
  100. package/dist/server/tools/middleware.js +78 -1
  101. package/dist/server/tools/middleware.js.map +1 -1
  102. package/dist/server/tools/tool_groups/product_operations.d.ts +5 -3
  103. package/dist/server/tools/tool_groups/product_operations.d.ts.map +1 -1
  104. package/dist/server/tools/tool_groups/product_operations.js +5 -105
  105. package/dist/server/tools/tool_groups/product_operations.js.map +1 -1
  106. package/dist/server/tools/tool_groups/state_machine.d.ts +34 -3
  107. package/dist/server/tools/tool_groups/state_machine.d.ts.map +1 -1
  108. package/dist/server/tools/tool_groups/state_machine.js +454 -236
  109. package/dist/server/tools/tool_groups/state_machine.js.map +1 -1
  110. package/dist/server/tools/tool_names.d.ts +0 -3
  111. package/dist/server/tools/tool_names.d.ts.map +1 -1
  112. package/dist/server/tools/tool_names.js +1 -4
  113. package/dist/server/tools/tool_names.js.map +1 -1
  114. package/dist/types/state_machine.d.ts +28 -1
  115. package/dist/types/state_machine.d.ts.map +1 -1
  116. package/dist/types/state_machine.js +1 -1
  117. package/dist/types/state_machine.js.map +1 -1
  118. package/package.json +1 -1
  119. package/templates/artifacts/existing-system//344/270/200/351/224/256/345/274/200/345/205/263/351/205/215/347/275/256/346/250/241/347/211/210.json +2 -1
  120. package/templates/artifacts/existing-system//345/216/206/345/217/262/346/225/260/346/215/256/346/270/205/346/264/227/350/204/232/346/234/254/346/250/241/347/211/210.md +1 -0
  121. package/templates/artifacts/existing-system//345/216/206/345/217/262/351/201/227/347/225/231/351/233/267/345/214/272/346/270/205/345/215/225/346/250/241/347/211/210.md +3 -1
  122. package/templates/artifacts/existing-system//345/220/221/345/220/216/345/205/274/345/256/271/346/200/247/345/220/210/350/247/204/346/212/245/345/221/212/346/250/241/347/211/210.md +1 -0
  123. package/templates/artifacts/existing-system//345/242/236/351/207/217/350/276/271/347/225/214/347/225/214/345/256/232/346/226/207/346/241/243/346/250/241/347/211/210.md +1 -0
  124. package/templates/artifacts/existing-system//346/224/271/351/200/240/345/275/261/345/223/215/350/214/203/345/233/264/350/257/204/344/274/260/346/250/241/347/211/210.md +1 -0
  125. package/templates/artifacts/existing-system//346/225/260/346/215/256/350/241/200/347/274/230/345/233/276/346/250/241/347/211/210.md +3 -2
  126. package/templates/artifacts/existing-system//346/226/260/350/200/201/351/200/273/350/276/221/346/257/224/345/257/271/346/227/245/345/277/227/346/250/241/347/211/210.md +3 -1
  127. package/templates/artifacts/existing-system//347/264/247/346/200/245/345/233/236/346/273/232/346/211/213/345/206/214/346/250/241/347/211/210.md +3 -2
  128. package/templates/artifacts/existing-system//351/232/224/347/246/273/351/200/202/351/205/215/345/231/250/346/226/271/346/241/210/346/250/241/347/211/210.md +1 -0
  129. package/templates/artifacts/shared/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243/346/250/241/347/211/210.md +3 -3
  130. package/templates/artifacts/shared//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212/346/250/241/347/211/210.md +1 -1
  131. package/templates/artifacts/shared//345/210/207/347/211/207/350/256/241/345/210/222/346/250/241/347/211/210.md +6 -2
  132. package/templates/artifacts/shared//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +5 -3
  133. package/templates/artifacts/shared//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210/346/250/241/347/211/210.md +2 -2
  134. package/templates/artifacts/shared//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210/346/250/241/347/211/210.md +2 -2
  135. package/templates/artifacts/shared//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243/346/250/241/347/211/210.md +2 -2
  136. package/templates/artifacts/shared//346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/347/211/210.md +6 -3
  137. package/templates/artifacts/shared//350/256/276/350/256/241/344/270/200/350/207/264/346/200/247/351/252/214/346/224/266/346/212/245/345/221/212/346/250/241/347/211/210.md +5 -5
  138. package/templates/artifacts/shared//350/257/246/347/273/206/350/256/276/350/256/241/346/250/241/347/211/210.md +3 -3
  139. package/templates/artifacts/shared//351/234/200/346/261/202/345/216/237/345/236/213/350/256/276/350/256/241/345/256/236/347/216/260/350/277/275/350/270/252/347/237/251/351/230/265/346/250/241/347/211/210.md +7 -6
  140. package/templates/checklists//344/274/232/350/257/235/346/201/242/345/244/215.md +1 -1
  141. package/templates/gates/shared/gate-/344/273/243/347/240/201/345/256/241/346/237/245.yaml +7 -0
  142. package/templates/gates/shared/gate-/345/210/207/347/211/207/345/256/241/346/237/245.yaml +14 -2
  143. package/templates/gates/shared/gate-/347/274/226/347/240/201/345/256/236/347/216/260.yaml +12 -0
  144. package/templates/internal/patterns/Hook/345/261/202/344/272/247/347/211/251/347/273/223/346/236/204/346/240/241/351/252/214.md +1 -1
  145. package/templates/procedures/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +2 -2
  146. package/templates/procedures//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +2 -2
  147. package/templates/procedures//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +2 -2
  148. package/templates/procedures//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +1 -1
  149. package/templates/procedures//346/236/266/346/236/204/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +1 -2
  150. package/templates/procedures//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +2 -2
  151. package/templates/procedures//346/272/220/347/240/201/345/216/237/345/236/213/344/272/244/344/273/230/346/265/201/347/250/213.md +2 -2
  152. package/templates/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +2 -2
  153. package/templates/procedures//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +2 -2
  154. package/templates/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +2 -2
  155. package/templates/rules/shared//344/273/243/347/240/201/345/217/257/347/273/264/346/212/244/346/200/247/344/270/216/345/217/257/350/247/202/346/265/213/346/200/247/345/256/241/346/237/245.md +21 -3
  156. package/templates/rules/shared//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/345/245/221/347/272/246/350/247/204/345/210/231.md +122 -0
@@ -1,39 +1,392 @@
1
1
  /**
2
- * 产物别名表 — 从 intent_signal_extractor.ts 提取的独立数据模块。
2
+ * 产物别名表 — 产物注册中心。
3
3
  *
4
- * Phase 4: ARTIFACT_ALIASES 被 check_write.ts 等模块使用,
5
- * 在 intent_signal_extractor.ts 删除后仍需保留。
4
+ * 每个产物有三种标识:
5
+ * 1. kind — 内部唯一标识(artifact kind)
6
+ * 2. patterns — 用户意图识别正则
7
+ * 3. canonical_paths — 固定产物路径
8
+ *
9
+ * canonical_paths 支持简易通配符:
10
+ * 单星号匹配单层目录,双星号匹配任意层,无通配符为精确路径。
11
+ * 详见 artifact_resolver.ts 的 expandGlob 函数。
6
12
  */
7
13
  // ── 产物别名表 ──
14
+ //
15
+ // 路径规范(docs/ 目录下按职责分子目录):
16
+ // docs/context/ → 输入材料(需求文档、源码包)
17
+ // docs/analyze/ → 分析产物(原型说明)
18
+ // docs/architecture/ → 设计产物(架构、数据库、API、切片计划)
19
+ // docs/traceability/ → 追踪产物(追踪矩阵)
20
+ // docs/api/ → API 定义(openapi.yaml)
21
+ // docs/review/ → 审查报告
8
22
  export const ARTIFACT_ALIASES = [
9
- { kind: "prototype_spec", patterns: [/原型(?:说明|规约|描述|文档|报告|spec)/, /prototype\s*spec/i, /prototype\s*doc/i, /页面说明/, /页面流程/, /交互说明/], defaultName: "原型说明", template: "原型说明模版.md" },
10
- // P2-A: api_spec vs api_design 区分 — api_spec 是接口契约规格(OpenAPI 风格),api_design 是对接方案(高阶集成设计)
11
- // 用户说"接口设计/接口文档"时优先匹配 api_spec(更常见);
12
- // api_design 仅通过显式产物模板"接口对接方案模版.md"触发,避免冲突
13
- { kind: "api_spec", patterns: [/接口(?:设计|清单|文档|spec)/, /\bapi\s*spec(?:ification)?\b/i, /\bopenapi\b/i], defaultName: "接口设计", template: "API接口规格文档模版.md" },
14
- { kind: "design_doc", patterns: [/架构设计/, /架构(?:方案|文档)/, /\barchitecture\s*design\b/i], defaultName: "架构设计文档", template: "架构设计模版.md" },
15
- { kind: "detailed_design", patterns: [/详细设计/, /详细(?:方案|文档)/, /\bdetail(?:ed)?\s*design\b/i], defaultName: "详细设计文档", template: "详细设计模版.md" },
16
- { kind: "requirement_analysis", patterns: [/需求(?:分析|文档|规格|说明|梳理)/, /requirements?\s*(?:analysis|doc)/i], defaultName: "需求分析", template: "需求分析模版.md" },
17
- { kind: "verification_report", patterns: [/验证(?:报告|结果)|联调(?:报告|结果)/, /verification\s*report/i], defaultName: "验证报告", template: "联调验证报告模版.md" },
18
- { kind: "tech_decision_record", patterns: [/(?:技术)?决策(?:记录|报告)/, /\b(?:adr|decision\s*record)\b/i], defaultName: "技术决策记录", template: "技术决策记录模版.md" },
19
- { kind: "task_plan", patterns: [/(?:任务)?切片(?:计划|方案|清单)?/, /开发(?:任务)?(?:计划|拆解|清单)/, /task\s*(?:plan|breakdown)/i], defaultName: "任务切片计划", template: "切片计划模版.md" },
20
- { kind: "knowledge_rule", patterns: [/知识(?:规则|条目)/, /knowledge\s*rule/i], defaultName: "知识规则", template: "知识规则模版.md" },
21
- { kind: "test_plan", patterns: [/测试计划/], defaultName: "测试计划", template: "测试计划模版.md" },
22
- { kind: "migration_plan", patterns: [/迁移(?:方案|评估|计划)/], defaultName: "迁移方案", template: "迁移评估模版.md" },
23
- { kind: "review_report", patterns: [/审查报告|代码审查/], defaultName: "审查报告", template: "代码审查报告模版.md" },
24
- { kind: "task_breakdown", patterns: [/(?:任务拆解|开发任务|拆.*任务)/], defaultName: "任务拆解", template: "切片计划模版.md" },
25
- { kind: "root_cause", patterns: [/根因(?:分析|报告)/], defaultName: "根因分析", template: "Bug分析模版.md" },
26
- { kind: "incident_review", patterns: [/故障复盘|故障分析|复盘报告/], defaultName: "故障复盘", template: "故障复盘模版.md" },
27
- { kind: "acceptance_checklist", patterns: [/验收(?:清单|标准|checklist)/], defaultName: "验收清单", template: "通用质量验收清单.md" },
28
- { kind: "interaction_spec", patterns: [/交互(?:规约|规范|说明)/], defaultName: "交互规约", template: "原型说明模版.md" },
29
- { kind: "domain_model", patterns: [/领域(?:模型|图)/], defaultName: "领域模型", template: "OOD设计摘要模版.md" },
23
+ // ── 输入材料(docs/context/) ──
24
+ {
25
+ kind: "requirement_analysis",
26
+ patterns: [/需求(?:分析|文档|规格|说明|梳理)/, /requirements?\s*(?:analysis|doc)/i],
27
+ defaultName: "需求分析",
28
+ template: "需求分析模版.md",
29
+ canonical_paths: ["docs/context/需求文档.md"],
30
+ stages: ["需求分析"],
31
+ },
32
+ {
33
+ kind: "source_code_package",
34
+ patterns: [/源码包/, /source.?code.?package/i, /原型源码/, /figma.?make/i],
35
+ defaultName: "原型源码包",
36
+ // 无模板 输入型产物,非产出
37
+ canonical_paths: ["docs/context/原型源码包"],
38
+ stages: [],
39
+ },
40
+ // ── 分析产物(docs/analyze/) ──
41
+ {
42
+ kind: "prototype_spec",
43
+ patterns: [/原型(?:说明|规约|描述|文档|报告|spec)/, /prototype\s*spec/i, /prototype\s*doc/i, /页面说明/, /页面流程/, /交互(?:说明|规约|规范)/],
44
+ defaultName: "原型说明",
45
+ template: "原型说明模版.md",
46
+ canonical_paths: ["docs/analyze/*/01-原型说明.md"],
47
+ stages: ["需求分析"],
48
+ },
49
+ // ── 设计产物(docs/architecture/) ──
50
+ {
51
+ kind: "tech_decision_record",
52
+ patterns: [/(?:技术)?决策(?:记录|报告)/, /\b(?:adr|decision\s*record)\b/i],
53
+ defaultName: "技术决策记录",
54
+ template: "ADR模版.md",
55
+ canonical_paths: ["docs/architecture/00-架构决策记录.md"],
56
+ stages: ["架构设计"],
57
+ },
58
+ {
59
+ kind: "design_doc",
60
+ patterns: [/架构设计/, /架构(?:方案|文档)/, /\barchitecture\s*design\b/i],
61
+ defaultName: "架构设计文档",
62
+ template: "架构设计模版.md",
63
+ canonical_paths: ["docs/architecture/01-架构设计文档.md"],
64
+ stages: ["架构设计"],
65
+ },
66
+ {
67
+ kind: "database_design",
68
+ patterns: [/数据库(?:设计|文档|方案)/, /database\s*design/i, /db\s*design/i],
69
+ defaultName: "数据库设计文档",
70
+ template: "数据库设计文档模版.md",
71
+ canonical_paths: ["docs/architecture/02-数据库设计文档.md", "db/migrations", "db/schema"],
72
+ stages: ["详细设计"],
73
+ },
74
+ {
75
+ kind: "api_spec",
76
+ // P2-A: api_spec vs api_design 区分 — api_spec 是接口契约规格(OpenAPI 风格)
77
+ patterns: [/接口(?:设计|清单|文档|spec)/, /\bapi\s*spec(?:ification)?\b/i, /\bopenapi\b/i],
78
+ defaultName: "接口设计",
79
+ template: "API接口规格文档模版.md",
80
+ canonical_paths: ["docs/architecture/03-API接口规格文档.md", "docs/api/openapi.yaml"],
81
+ stages: ["详细设计"],
82
+ },
83
+ {
84
+ kind: "task_plan",
85
+ patterns: [/(?:任务)?切片(?:计划|方案|清单)?/, /开发(?:任务)?(?:计划|拆解|清单)/, /任务(?:规划|计划)/, /task\s*(?:plan|breakdown)/i],
86
+ defaultName: "任务切片计划",
87
+ template: "切片计划模版.md",
88
+ canonical_paths: ["docs/architecture/04-开发切片计划.md"],
89
+ stages: ["任务规划"],
90
+ },
91
+ {
92
+ kind: "detailed_design",
93
+ patterns: [/详细设计/, /详细(?:方案|文档)/, /\bdetail(?:ed)?\s*design\b/i],
94
+ defaultName: "详细设计文档",
95
+ template: "详细设计模版.md",
96
+ canonical_paths: ["docs/architecture/05-详细设计文档.md"],
97
+ stages: ["详细设计"],
98
+ },
99
+ {
100
+ kind: "domain_model",
101
+ patterns: [/领域(?:模型|图)/],
102
+ defaultName: "领域模型",
103
+ template: "OOD设计摘要模版.md",
104
+ canonical_paths: ["docs/architecture/*领域*.md"],
105
+ stages: ["详细设计", "编码与单元测试"],
106
+ },
107
+ // ── 追踪产物(docs/traceability/) ──
108
+ {
109
+ kind: "traceability_matrix",
110
+ patterns: [/追踪(?:矩阵|表|关系)/, /traceability\s*matrix/i, /需求.*(?:追踪|映射)/],
111
+ defaultName: "追踪矩阵",
112
+ template: "需求原型设计实现追踪矩阵模版.md",
113
+ canonical_paths: ["docs/traceability/01-需求原型设计实现追踪矩阵.md"],
114
+ stages: ["架构设计"],
115
+ },
116
+ // ── 审查/报告产物(docs/review/) ──
117
+ {
118
+ kind: "review_report",
119
+ patterns: [/审查报告|代码审查/],
120
+ defaultName: "审查报告",
121
+ template: "代码审查报告模版.md",
122
+ canonical_paths: ["docs/review/**/*审查*.md"],
123
+ stages: ["代码审查"],
124
+ },
125
+ {
126
+ kind: "verification_report",
127
+ patterns: [/验证(?:报告|结果)|联调(?:报告|结果)/, /verification\s*report/i],
128
+ defaultName: "验证报告",
129
+ template: "设计一致性验收报告模版.md",
130
+ canonical_paths: ["docs/architecture/99-设计一致性验收报告.md"],
131
+ stages: ["详细设计"],
132
+ },
133
+ {
134
+ kind: "acceptance_checklist",
135
+ patterns: [/验收(?:清单|标准|checklist)/],
136
+ defaultName: "验收清单",
137
+ template: "通用质量验收清单.md",
138
+ canonical_paths: ["docs/review/**/*验收*.md"],
139
+ stages: ["联调验证"],
140
+ },
141
+ {
142
+ kind: "root_cause",
143
+ patterns: [/根因(?:分析|报告)/],
144
+ defaultName: "根因分析",
145
+ template: "Bug分析模版.md",
146
+ canonical_paths: ["docs/review/**/*根因*.md"],
147
+ stages: ["编码与单元测试", "联调验证"],
148
+ },
149
+ {
150
+ kind: "incident_review",
151
+ patterns: [/故障复盘|故障分析|复盘报告/],
152
+ defaultName: "故障复盘",
153
+ template: "故障复盘模版.md",
154
+ canonical_paths: ["docs/review/**/*复盘*.md"],
155
+ stages: ["联调验证"],
156
+ },
157
+ // ── 其他产物(无固定路径) ──
158
+ {
159
+ kind: "api_design",
160
+ patterns: [/接口对接|接口方案|接口集成/],
161
+ defaultName: "接口对接方案",
162
+ template: "接口对接方案模版.md",
163
+ canonical_paths: ["docs/architecture/06-接口对接方案.md"],
164
+ stages: ["架构设计", "详细设计", "联调验证"],
165
+ },
166
+ {
167
+ kind: "test_plan",
168
+ patterns: [/测试计划/],
169
+ defaultName: "测试计划",
170
+ template: "测试计划模版.md",
171
+ canonical_paths: ["docs/architecture/07-测试计划.md"],
172
+ stages: ["编码与单元测试", "联调验证"],
173
+ },
174
+ {
175
+ kind: "migration_plan",
176
+ patterns: [/迁移(?:方案|评估|计划)/],
177
+ defaultName: "迁移方案",
178
+ template: "迁移评估模版.md",
179
+ canonical_paths: ["docs/architecture/08-迁移方案.md"],
180
+ stages: ["需求分析"],
181
+ },
182
+ {
183
+ kind: "task_breakdown",
184
+ patterns: [/(?:任务拆解|开发任务|拆.*任务)/],
185
+ defaultName: "任务拆解",
186
+ template: "切片计划模版.md",
187
+ canonical_paths: ["docs/architecture/09-任务拆解.md"],
188
+ stages: ["任务规划"],
189
+ },
190
+ {
191
+ kind: "knowledge_rule",
192
+ patterns: [/知识(?:规则|条目)/, /knowledge\s*rule/i],
193
+ defaultName: "知识规则",
194
+ // 无模板 — 知识规则不遵循文档模板结构
195
+ canonical_paths: [],
196
+ stages: [],
197
+ },
198
+ // ═══════════════════════════════════════════════════
199
+ // 老系统专属产物(system_scope: ["老系统"])
200
+ // 路径规范:docs/existing-system/ → 老系统增量改造专属产物
201
+ // ═══════════════════════════════════════════════════
202
+ {
203
+ kind: "incremental_boundary_doc",
204
+ patterns: [/增量(?:边界|范围|界定)/, /incremental\s*boundary/i],
205
+ defaultName: "增量边界界定文档",
206
+ template: "增量边界界定文档模版.md",
207
+ canonical_paths: ["docs/existing-system/增量边界界定文档.md"],
208
+ stages: ["需求分析", "架构设计", "详细设计"],
209
+ system_scope: ["老系统"],
210
+ },
211
+ {
212
+ kind: "data_lineage_diagram",
213
+ patterns: [/数据血缘|血缘图|数据流向/, /data\s*lineage/i],
214
+ defaultName: "数据血缘图",
215
+ template: "数据血缘图模版.md",
216
+ canonical_paths: ["docs/existing-system/数据血缘图.md"],
217
+ stages: ["现有系统分析", "架构设计", "详细设计"],
218
+ system_scope: ["老系统"],
219
+ },
220
+ {
221
+ kind: "legacy_minefield_checklist",
222
+ patterns: [/雷区(?:清单|列表)|历史遗留|反模式清单/, /minefield/i],
223
+ defaultName: "历史遗留雷区清单",
224
+ template: "历史遗留雷区清单模版.md",
225
+ canonical_paths: ["docs/existing-system/历史遗留雷区清单.md"],
226
+ stages: ["现有系统分析", "编码与单元测试"],
227
+ system_scope: ["老系统"],
228
+ },
229
+ {
230
+ kind: "refactoring_impact_assessment",
231
+ patterns: [/改造影响|影响范围评估|refactoring\s*impact/i],
232
+ defaultName: "改造影响范围评估",
233
+ template: "改造影响范围评估模版.md",
234
+ canonical_paths: ["docs/existing-system/改造影响范围评估.md"],
235
+ stages: ["架构设计", "详细设计"],
236
+ system_scope: ["老系统"],
237
+ },
238
+ {
239
+ kind: "isolation_adapter_plan",
240
+ patterns: [/隔离适配器|适配器方案|isolation\s*adapter/i],
241
+ defaultName: "隔离适配器方案",
242
+ template: "隔离适配器方案模版.md",
243
+ canonical_paths: ["docs/existing-system/隔离适配器方案.md"],
244
+ stages: ["架构设计", "详细设计"],
245
+ system_scope: ["老系统"],
246
+ },
247
+ {
248
+ kind: "backward_compat_report",
249
+ patterns: [/向后兼容|兼容性合规|backward\s*compat/i],
250
+ defaultName: "向后兼容性合规报告",
251
+ template: "向后兼容性合规报告模版.md",
252
+ canonical_paths: ["docs/existing-system/向后兼容性合规报告.md"],
253
+ stages: ["详细设计", "代码审查"],
254
+ system_scope: ["老系统"],
255
+ },
256
+ {
257
+ kind: "emergency_rollback_manual",
258
+ patterns: [/紧急回滚|回滚手册|emergency\s*rollback/i],
259
+ defaultName: "紧急回滚手册",
260
+ template: "紧急回滚手册模版.md",
261
+ canonical_paths: ["docs/existing-system/紧急回滚手册.md"],
262
+ stages: ["详细设计", "联调验证"],
263
+ system_scope: ["老系统"],
264
+ },
265
+ {
266
+ kind: "new_old_logic_comparison",
267
+ patterns: [/新老逻辑比对|新旧比对|logic\s*comparison/i],
268
+ defaultName: "新老逻辑比对日志",
269
+ template: "新老逻辑比对日志模版.md",
270
+ canonical_paths: ["docs/existing-system/新老逻辑比对日志.md"],
271
+ stages: ["编码与单元测试"],
272
+ system_scope: ["老系统"],
273
+ },
274
+ {
275
+ kind: "historical_data_cleanup",
276
+ patterns: [/历史数据清洗|数据清洗脚本|data\s*cleanup/i],
277
+ defaultName: "历史数据清洗脚本",
278
+ template: "历史数据清洗脚本模版.md",
279
+ canonical_paths: ["docs/existing-system/历史数据清洗脚本.md"],
280
+ stages: ["联调验证"],
281
+ system_scope: ["老系统"],
282
+ },
283
+ {
284
+ kind: "feature_toggle_config",
285
+ patterns: [/一键开关|功能开关|feature\s*toggle/i],
286
+ defaultName: "一键开关配置",
287
+ template: "一键开关配置模版.json",
288
+ canonical_paths: ["docs/existing-system/一键开关配置.json"],
289
+ stages: ["详细设计", "联调验证"],
290
+ system_scope: ["老系统"],
291
+ },
30
292
  ];
31
293
  /** 产物别名表查找 */
32
294
  export function findArtifactAlias(kind) {
33
295
  return ARTIFACT_ALIASES.find((a) => a.kind === kind);
34
296
  }
297
+ /**
298
+ * 获取指定阶段下的全部可审查产物(有模板的)。
299
+ *
300
+ * 用于阶段级审查:`[sf]审查详细设计` → 查出该阶段全部产物 kind。
301
+ * @param stage 阶段名称
302
+ * @param systemType 管线类型过滤:
303
+ * - 不传 → 返回无 system_scope 的产物(新系统通用产物,向后兼容)
304
+ * - "新系统" → 无 system_scope + system_scope 含 "新系统"
305
+ * - "老系统" → system_scope 含 "老系统" 的产物
306
+ */
307
+ export function getArtifactsByStage(stage, systemType) {
308
+ return ARTIFACT_ALIASES.filter((a) => {
309
+ // 阶段匹配 + 有模板
310
+ if (!a.stages.includes(stage) || !a.template)
311
+ return false;
312
+ // 管线过滤
313
+ if (a.system_scope && a.system_scope.length > 0) {
314
+ // 有 system_scope 的产物:只有明确传了匹配的 systemType 才返回
315
+ if (!systemType || !a.system_scope.includes(systemType))
316
+ return false;
317
+ }
318
+ // 无 system_scope 的产物(新系统通用):默认返回(向后兼容)
319
+ return true;
320
+ });
321
+ }
35
322
  /** 获取所有产物别名表 */
36
323
  export function getArtifactAliases() {
37
324
  return ARTIFACT_ALIASES;
38
325
  }
326
+ /**
327
+ * 校验 ARTIFACT_ALIASES 注册表的完整性。
328
+ *
329
+ * 防回归守卫:
330
+ * - canonical_paths 文件名无重复(跨 kind)
331
+ * - 具体路径编号无重复(如两个 kind 都用 01-xxx.md)
332
+ * - kind 唯一
333
+ *
334
+ * @returns 校验发现列表(空表示通过)
335
+ */
336
+ export function validateArtifactAliases() {
337
+ const findings = [];
338
+ // 规则 1: kind 唯一
339
+ const seenKinds = new Map();
340
+ for (const alias of ARTIFACT_ALIASES) {
341
+ const prev = seenKinds.get(alias.kind);
342
+ if (prev) {
343
+ findings.push({ rule: "duplicate-kind", detail: `kind "${alias.kind}" 重复注册(${prev} vs ${alias.defaultName})` });
344
+ }
345
+ else {
346
+ seenKinds.set(alias.kind, alias.defaultName);
347
+ }
348
+ }
349
+ // 规则 2: canonical_paths 具体路径的文件名无跨 kind 重复
350
+ const fileNameToKind = new Map();
351
+ for (const alias of ARTIFACT_ALIASES) {
352
+ for (const cp of alias.canonical_paths) {
353
+ if (cp.includes("*") || cp.includes("**"))
354
+ continue; // 跳过通配符
355
+ const fileName = cp.split("/").pop(); // 取最后一段
356
+ if (!fileName)
357
+ continue;
358
+ const prev = fileNameToKind.get(fileName);
359
+ if (prev) {
360
+ findings.push({ rule: "duplicate-canonical-file", detail: `文件名 "${fileName}" 在 ${prev} 和 ${alias.kind} 中重复` });
361
+ }
362
+ else {
363
+ fileNameToKind.set(fileName, alias.kind);
364
+ }
365
+ }
366
+ }
367
+ // 规则 3: 同子目录下编号无重复(如两个 01-xxx.md 在 docs/architecture/)
368
+ const dirNumberToKind = new Map();
369
+ for (const alias of ARTIFACT_ALIASES) {
370
+ for (const cp of alias.canonical_paths) {
371
+ if (cp.includes("*") || cp.includes("**"))
372
+ continue;
373
+ const parts = cp.split("/");
374
+ const fileName = parts[parts.length - 1];
375
+ const dir = parts.slice(0, -1).join("/");
376
+ // 提取编号前缀(如 "01-" 从 "01-架构设计文档.md")
377
+ const numMatch = fileName.match(/^(\d+)-/);
378
+ if (!numMatch)
379
+ continue;
380
+ const key = `${dir}::${numMatch[1]}`;
381
+ const prev = dirNumberToKind.get(key);
382
+ if (prev) {
383
+ findings.push({ rule: "duplicate-number", detail: `编号 ${numMatch[1]} 在 ${dir}/ 下重复(${prev} vs ${alias.kind})` });
384
+ }
385
+ else {
386
+ dirNumberToKind.set(key, alias.kind);
387
+ }
388
+ }
389
+ }
390
+ return findings;
391
+ }
39
392
  //# sourceMappingURL=artifact_aliases.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifact_aliases.js","sourceRoot":"","sources":["../../../src/engine/pipeline/artifact_aliases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifact_aliases.js","sourceRoot":"","sources":["../../../src/engine/pipeline/artifact_aliases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * 产物解析器 — 基于 canonical_paths 的固定路径查找。
3
+ *
4
+ * 两种能力:
5
+ * 1. description → kind 推断(复用 ARTIFACT_ALIASES 的 patterns)
6
+ * 2. kind → 固定路径查找(查 canonical_paths,glob 展开)
7
+ */
8
+ import type { ArtifactKind } from "../contracts/artifact_contract_registry.js";
9
+ /**
10
+ * 从用户描述文本推断 artifact kind。
11
+ *
12
+ * 复用 ARTIFACT_ALIASES 的 patterns 做正则匹配。
13
+ *
14
+ * @param description - 用户输入描述,如 "原型说明"、"架构设计"
15
+ * @returns 匹配的 ArtifactKind,未匹配返回 undefined
16
+ */
17
+ export declare function inferArtifactKindFromDescription(description: string): ArtifactKind | undefined;
18
+ /**
19
+ * 根据 artifact kind 在项目目录中查找固定产物路径。
20
+ *
21
+ * 搜索 canonical_paths(docs/ 目录树),glob 展开 `*` 和 `**` 通配符,
22
+ * 返回实际存在的路径列表。
23
+ *
24
+ * @param kind - artifact kind,如 "design_doc"
25
+ * @param projectPath - 项目根目录绝对路径
26
+ * @returns 存在的相对路径列表(相对于 projectPath)
27
+ */
28
+ export declare function findArtifactPathsByKind(kind: string, projectPath: string): string[];
29
+ /**
30
+ * 确保产物文件路径与 canonical_paths 一致。
31
+ *
32
+ * 扫描 docs/ 目录中按 defaultName 匹配已有文件,
33
+ * 如果文件名不匹配 canonical_path 则自动更名。
34
+ * 返回更名操作列表。
35
+ *
36
+ * @param kind - artifact kind
37
+ * @param projectPath - 项目根目录绝对路径
38
+ * @returns 更名操作列表(空列表表示无需更名)
39
+ */
40
+ export declare function ensureCanonicalPaths(kind: string, projectPath: string): Array<{
41
+ from: string;
42
+ to: string;
43
+ }>;
44
+ /**
45
+ * 查找模板文件路径(项目级优先,内置兜底)。
46
+ *
47
+ * 搜索顺序:
48
+ * 1. {projectPath}/.soloforge/templates/artifacts/shared/{templateName}
49
+ * 2. {projectPath}/.soloforge/knowledge/artifacts/shared/{templateName}
50
+ * 3. 内置 templates/artifacts/shared/{templateName}
51
+ *
52
+ * @param templateName - 模板文件名,如 "架构设计模版.md"
53
+ * @param projectPath - 项目根目录绝对路径
54
+ * @returns 模板绝对路径,未找到返回 null
55
+ */
56
+ export declare function findTemplatePath(templateName: string, projectPath: string): string | null;
57
+ /**
58
+ * 从产物相对路径反推 artifact kind。
59
+ *
60
+ * 遍历所有 ARTIFACT_ALIASES 的 canonical_paths,
61
+ * 将 glob 模式转为正则进行匹配。
62
+ *
63
+ * @param relPath - 产物相对于项目根的路径,如 "docs/analyze/员工端/01-原型说明.md"
64
+ */
65
+ export declare function inferArtifactKindFromPath(relPath: string): ArtifactKind | undefined;
66
+ /**
67
+ * 判断给定字符串是否为已注册的 artifact kind。
68
+ */
69
+ export declare function hasArtifactAlias(kind: string): boolean;
70
+ /**
71
+ * 从文件路径兜底推断 artifact kind。
72
+ *
73
+ * 当 inferArtifactKindFromPath 因文件名不匹配 canonical_path 而失败时,
74
+ * 用两种兜底策略推断 kind:
75
+ * 1. 文件名关键词匹配 — 检查文件名是否包含某个 alias 的 defaultName
76
+ * 2. 目录路径匹配 — 检查文件所在目录是否匹配某个 alias 的 canonical_path 目录部分
77
+ *
78
+ * @param relPath - 产物相对于项目根的路径
79
+ * @returns 推断的 ArtifactKind,无法推断返回 undefined
80
+ */
81
+ export declare function inferArtifactKindFallback(relPath: string): ArtifactKind | undefined;
82
+ //# sourceMappingURL=artifact_resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact_resolver.d.ts","sourceRoot":"","sources":["../../../src/engine/pipeline/artifact_resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAM/E;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,MAAM,GAClB,YAAY,GAAG,SAAS,CAS1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,MAAM,EAAE,CAYV;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBrC;AA4ID;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAyBf;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GACd,YAAY,GAAG,SAAS,CAY1B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GACd,YAAY,GAAG,SAAS,CAkC1B"}