soloforge 1.1.53 → 1.1.54

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 (242) hide show
  1. package/dist/cli/adapter_writers.d.ts +2 -6
  2. package/dist/cli/adapter_writers.d.ts.map +1 -1
  3. package/dist/cli/adapter_writers.js +2 -18
  4. package/dist/cli/adapter_writers.js.map +1 -1
  5. package/dist/cli/init.d.ts +2 -2
  6. package/dist/cli/init.d.ts.map +1 -1
  7. package/dist/cli/init.js +16 -37
  8. package/dist/cli/init.js.map +1 -1
  9. package/dist/context/adapter_prompt_contract.d.ts +0 -14
  10. package/dist/context/adapter_prompt_contract.d.ts.map +1 -1
  11. package/dist/context/adapter_prompt_contract.js +0 -46
  12. package/dist/context/adapter_prompt_contract.js.map +1 -1
  13. package/dist/context/adapters/shared/integration_guide.d.ts +5 -5
  14. package/dist/context/adapters/shared/integration_guide.d.ts.map +1 -1
  15. package/dist/context/adapters/shared/integration_guide.js +29 -14
  16. package/dist/context/adapters/shared/integration_guide.js.map +1 -1
  17. package/dist/context/adapters/shared/workflow_template.d.ts +12 -29
  18. package/dist/context/adapters/shared/workflow_template.d.ts.map +1 -1
  19. package/dist/context/adapters/shared/workflow_template.js +13 -96
  20. package/dist/context/adapters/shared/workflow_template.js.map +1 -1
  21. package/dist/context/config/resolver.d.ts +0 -6
  22. package/dist/context/config/resolver.d.ts.map +1 -1
  23. package/dist/context/config/resolver.js +12 -0
  24. package/dist/context/config/resolver.js.map +1 -1
  25. package/dist/context/knowledge/index_manager.d.ts +3 -0
  26. package/dist/context/knowledge/index_manager.d.ts.map +1 -1
  27. package/dist/context/knowledge/index_manager.js +16 -0
  28. package/dist/context/knowledge/index_manager.js.map +1 -1
  29. package/dist/context/knowledge/knowledge_template_contracts.d.ts +1 -1
  30. package/dist/context/knowledge/knowledge_template_contracts.d.ts.map +1 -1
  31. package/dist/context/templates/standard_asset_contract.d.ts +1 -1
  32. package/dist/context/templates/standard_asset_contract.js +3 -3
  33. package/dist/context/templates/standard_asset_contract.js.map +1 -1
  34. package/dist/context/templates/standard_asset_coverage.js +2 -2
  35. package/dist/context/templates/standard_asset_coverage.js.map +1 -1
  36. package/dist/context/templates/workflow_rule_generator.d.ts +1 -9
  37. package/dist/context/templates/workflow_rule_generator.d.ts.map +1 -1
  38. package/dist/context/templates/workflow_rule_generator.js +2 -12
  39. package/dist/context/templates/workflow_rule_generator.js.map +1 -1
  40. package/dist/core/adversarial_review_store.d.ts +6 -0
  41. package/dist/core/adversarial_review_store.d.ts.map +1 -1
  42. package/dist/core/adversarial_review_store.js +29 -0
  43. package/dist/core/adversarial_review_store.js.map +1 -1
  44. package/dist/core/condition_evaluators.d.ts +37 -10
  45. package/dist/core/condition_evaluators.d.ts.map +1 -1
  46. package/dist/core/condition_evaluators.js +27 -70
  47. package/dist/core/condition_evaluators.js.map +1 -1
  48. package/dist/core/domain_transition.js +1 -1
  49. package/dist/core/domain_transition.js.map +1 -1
  50. package/dist/core/gate_record_store.d.ts +6 -0
  51. package/dist/core/gate_record_store.d.ts.map +1 -1
  52. package/dist/core/gate_record_store.js +27 -0
  53. package/dist/core/gate_record_store.js.map +1 -1
  54. package/dist/core/git_utils.d.ts +1 -1
  55. package/dist/core/git_utils.js +1 -1
  56. package/dist/core/intent_router.js +1 -1
  57. package/dist/core/intent_router.js.map +1 -1
  58. package/dist/core/observer.d.ts.map +1 -1
  59. package/dist/core/observer.js +24 -18
  60. package/dist/core/observer.js.map +1 -1
  61. package/dist/core/task_context/manager.d.ts +5 -4
  62. package/dist/core/task_context/manager.d.ts.map +1 -1
  63. package/dist/core/task_context/manager.js +18 -8
  64. package/dist/core/task_context/manager.js.map +1 -1
  65. package/dist/core/task_context/manager_setters.d.ts +2 -2
  66. package/dist/core/task_context/manager_setters.d.ts.map +1 -1
  67. package/dist/core/task_context/manager_setters.js +18 -48
  68. package/dist/core/task_context/manager_setters.js.map +1 -1
  69. package/dist/core/task_context/status_transitions.js +2 -2
  70. package/dist/core/task_context/status_transitions.js.map +1 -1
  71. package/dist/core/types.d.ts +16 -7
  72. package/dist/core/types.d.ts.map +1 -1
  73. package/dist/domain/asset_registry/derived_registry.d.ts +0 -1
  74. package/dist/domain/asset_registry/derived_registry.d.ts.map +1 -1
  75. package/dist/domain/asset_registry/derived_registry.js.map +1 -1
  76. package/dist/domain/asset_registry/derived_types.d.ts +5 -2
  77. package/dist/domain/asset_registry/derived_types.d.ts.map +1 -1
  78. package/dist/domain/build/contract.d.ts.map +1 -1
  79. package/dist/domain/build/contract.js +11 -1
  80. package/dist/domain/build/contract.js.map +1 -1
  81. package/dist/domain/build/engine.d.ts.map +1 -1
  82. package/dist/domain/build/engine.js +23 -2
  83. package/dist/domain/build/engine.js.map +1 -1
  84. package/dist/domain/contracts/artifact_contract_registry.d.ts +1 -1
  85. package/dist/domain/contracts/artifact_contract_registry.d.ts.map +1 -1
  86. package/dist/domain/contracts/artifact_contract_registry.js +19 -4
  87. package/dist/domain/contracts/artifact_contract_registry.js.map +1 -1
  88. package/dist/domain/contracts/artifact_schema_registry.d.ts +1 -1
  89. package/dist/domain/contracts/artifact_schema_registry.d.ts.map +1 -1
  90. package/dist/domain/contracts/artifact_schema_registry.js +56 -31
  91. package/dist/domain/contracts/artifact_schema_registry.js.map +1 -1
  92. package/dist/domain/contracts/design_lifecycle_contract.js +2 -2
  93. package/dist/domain/contracts/design_lifecycle_contract.js.map +1 -1
  94. package/dist/domain/delivery_readiness.d.ts +0 -26
  95. package/dist/domain/delivery_readiness.d.ts.map +1 -1
  96. package/dist/domain/delivery_readiness.js +0 -41
  97. package/dist/domain/delivery_readiness.js.map +1 -1
  98. package/dist/domain/design/contract.d.ts.map +1 -1
  99. package/dist/domain/design/contract.js +9 -8
  100. package/dist/domain/design/contract.js.map +1 -1
  101. package/dist/domain/design/engine.d.ts.map +1 -1
  102. package/dist/domain/design/engine.js +31 -10
  103. package/dist/domain/design/engine.js.map +1 -1
  104. package/dist/domain/engine_helpers.d.ts +14 -5
  105. package/dist/domain/engine_helpers.d.ts.map +1 -1
  106. package/dist/domain/engine_helpers.js +73 -4
  107. package/dist/domain/engine_helpers.js.map +1 -1
  108. package/dist/domain/input_material_contract_registry.d.ts +1 -1
  109. package/dist/domain/input_material_contract_registry.js +1 -1
  110. package/dist/domain/operate/contract.d.ts.map +1 -1
  111. package/dist/domain/operate/contract.js +8 -2
  112. package/dist/domain/operate/contract.js.map +1 -1
  113. package/dist/domain/verify/contract.d.ts.map +1 -1
  114. package/dist/domain/verify/contract.js +6 -1
  115. package/dist/domain/verify/contract.js.map +1 -1
  116. package/dist/gate/cep_assessment.d.ts +0 -6
  117. package/dist/gate/cep_assessment.d.ts.map +1 -1
  118. package/dist/gate/cep_assessment.js +0 -23
  119. package/dist/gate/cep_assessment.js.map +1 -1
  120. package/dist/gate/contracts/capability_registry.js +3 -3
  121. package/dist/gate/contracts/capability_registry.js.map +1 -1
  122. package/dist/gate/contracts/control_plane_contract.d.ts.map +1 -1
  123. package/dist/gate/contracts/control_plane_contract.js +1 -2
  124. package/dist/gate/contracts/control_plane_contract.js.map +1 -1
  125. package/dist/gate/contracts/tool_invocation_contract_registry.js +3 -3
  126. package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
  127. package/dist/gate/diff_ownership.d.ts +0 -8
  128. package/dist/gate/diff_ownership.d.ts.map +1 -1
  129. package/dist/gate/diff_ownership.js.map +1 -1
  130. package/dist/gate/executors/executors_annotation.d.ts.map +1 -1
  131. package/dist/gate/executors/executors_annotation.js +26 -5
  132. package/dist/gate/executors/executors_annotation.js.map +1 -1
  133. package/dist/gate/executors/executors_artifact.d.ts +5 -0
  134. package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
  135. package/dist/gate/executors/executors_artifact.js +174 -60
  136. package/dist/gate/executors/executors_artifact.js.map +1 -1
  137. package/dist/gate/executors/executors_prerequisite.d.ts.map +1 -1
  138. package/dist/gate/executors/executors_prerequisite.js +10 -5
  139. package/dist/gate/executors/executors_prerequisite.js.map +1 -1
  140. package/dist/gate/executors/executors_regex_scan.d.ts.map +1 -1
  141. package/dist/gate/executors/executors_regex_scan.js +12 -2
  142. package/dist/gate/executors/executors_regex_scan.js.map +1 -1
  143. package/dist/gate/executors/executors_trace.d.ts.map +1 -1
  144. package/dist/gate/executors/executors_trace.js +37 -29
  145. package/dist/gate/executors/executors_trace.js.map +1 -1
  146. package/dist/gate/gate_engine.d.ts +5 -0
  147. package/dist/gate/gate_engine.d.ts.map +1 -1
  148. package/dist/gate/gate_engine.js +7 -3
  149. package/dist/gate/gate_engine.js.map +1 -1
  150. package/dist/gate/gate_registry_bridge.d.ts +1 -1
  151. package/dist/gate/gate_registry_bridge.d.ts.map +1 -1
  152. package/dist/gate/gate_registry_bridge.js +8 -0
  153. package/dist/gate/gate_registry_bridge.js.map +1 -1
  154. package/dist/gate/plan_proposal_gate.d.ts +0 -18
  155. package/dist/gate/plan_proposal_gate.d.ts.map +1 -1
  156. package/dist/gate/plan_proposal_gate.js +0 -51
  157. package/dist/gate/plan_proposal_gate.js.map +1 -1
  158. package/dist/index.js +2 -2
  159. package/dist/server/tools/middleware.d.ts +1 -1
  160. package/dist/server/tools/middleware.d.ts.map +1 -1
  161. package/dist/server/tools/sf_gate.d.ts.map +1 -1
  162. package/dist/server/tools/sf_gate.js +19 -10
  163. package/dist/server/tools/sf_gate.js.map +1 -1
  164. package/dist/server/tools/sf_task.d.ts +2 -1
  165. package/dist/server/tools/sf_task.d.ts.map +1 -1
  166. package/dist/server/tools/sf_task.js +27 -15
  167. package/dist/server/tools/sf_task.js.map +1 -1
  168. package/dist/server/tools/sf_work.d.ts +86 -0
  169. package/dist/server/tools/sf_work.d.ts.map +1 -1
  170. package/dist/server/tools/sf_work.js +115 -53
  171. package/dist/server/tools/sf_work.js.map +1 -1
  172. package/dist/shared/diagnostic_registry.d.ts +0 -44
  173. package/dist/shared/diagnostic_registry.d.ts.map +1 -1
  174. package/dist/shared/diagnostic_registry.js +1 -254
  175. package/dist/shared/diagnostic_registry.js.map +1 -1
  176. package/dist/shared/glob_path.d.ts +3 -3
  177. package/dist/shared/glob_path.d.ts.map +1 -1
  178. package/dist/shared/glob_path.js +9 -5
  179. package/dist/shared/glob_path.js.map +1 -1
  180. package/dist/shared/helpers.d.ts +5 -3
  181. package/dist/shared/helpers.d.ts.map +1 -1
  182. package/dist/shared/helpers.js +11 -9
  183. package/dist/shared/helpers.js.map +1 -1
  184. package/dist/shared/knowledge_config_loader.d.ts +0 -12
  185. package/dist/shared/knowledge_config_loader.d.ts.map +1 -1
  186. package/dist/shared/knowledge_config_loader.js +0 -28
  187. package/dist/shared/knowledge_config_loader.js.map +1 -1
  188. package/dist/shared/write_file_atomic.d.ts +6 -0
  189. package/dist/shared/write_file_atomic.d.ts.map +1 -1
  190. package/dist/shared/write_file_atomic.js +8 -2
  191. package/dist/shared/write_file_atomic.js.map +1 -1
  192. package/dist/types/pipeline_types.d.ts +18 -19
  193. package/dist/types/pipeline_types.d.ts.map +1 -1
  194. package/dist/verify/audit/evolver.d.ts +1 -2
  195. package/dist/verify/audit/evolver.d.ts.map +1 -1
  196. package/dist/verify/audit/evolver.js +1 -2
  197. package/dist/verify/audit/evolver.js.map +1 -1
  198. package/dist/verify/audit/main_path_integration_contract/constants.d.ts +2 -8
  199. package/dist/verify/audit/main_path_integration_contract/constants.d.ts.map +1 -1
  200. package/dist/verify/audit/main_path_integration_contract/constants.js +1 -15
  201. package/dist/verify/audit/main_path_integration_contract/constants.js.map +1 -1
  202. package/dist/verify/audit/probe_rule.d.ts +0 -6
  203. package/dist/verify/audit/probe_rule.d.ts.map +1 -1
  204. package/dist/verify/audit/probe_rule.js +11 -0
  205. package/dist/verify/audit/probe_rule.js.map +1 -1
  206. package/dist/verify/index.d.ts +0 -1
  207. package/dist/verify/index.d.ts.map +1 -1
  208. package/dist/verify/index.js +1 -2
  209. package/dist/verify/index.js.map +1 -1
  210. package/dist/verify/types.d.ts +1 -1
  211. package/dist/verify/types.d.ts.map +1 -1
  212. package/package.json +2 -3
  213. package/templates/build/enforced.md +2 -0
  214. package/templates/build//347/274/226/347/240/201/347/272/252/345/276/213.md +2 -2
  215. package/templates/design/enforced.md +19 -6
  216. package/templates/design//345/216/237/345/236/213/350/257/264/346/230/216.md +2 -2
  217. package/templates/design//345/274/200/345/217/221/345/210/207/347/211/207/350/256/241/345/210/222.md +3 -3
  218. package/templates/design//346/236/266/346/236/204/350/256/276/350/256/{241.md → 241/346/226/207/346/241/243.md} +1 -4
  219. package/templates/operate/enforced.md +1 -0
  220. package/templates/shared/deterministic_executors.json +2 -1
  221. package/templates/shared//345/267/245/344/275/234/346/265/201/347/241/254/350/247/204/345/210/231/345/245/221/347/272/246.md +1 -25
  222. package/templates/verify/enforced.md +1 -0
  223. package/dist/context/adapters/trae/trae_config.d.ts +0 -31
  224. package/dist/context/adapters/trae/trae_config.d.ts.map +0 -1
  225. package/dist/context/adapters/trae/trae_config.js +0 -35
  226. package/dist/context/adapters/trae/trae_config.js.map +0 -1
  227. package/dist/context/adapters/trae/trae_rules.d.ts +0 -21
  228. package/dist/context/adapters/trae/trae_rules.d.ts.map +0 -1
  229. package/dist/context/adapters/trae/trae_rules.js +0 -56
  230. package/dist/context/adapters/trae/trae_rules.js.map +0 -1
  231. package/dist/gate/uncertainty_bridge.d.ts +0 -87
  232. package/dist/gate/uncertainty_bridge.d.ts.map +0 -1
  233. package/dist/gate/uncertainty_bridge.js +0 -73
  234. package/dist/gate/uncertainty_bridge.js.map +0 -1
  235. package/dist/verify/audit/failure_classifier.d.ts +0 -52
  236. package/dist/verify/audit/failure_classifier.d.ts.map +0 -1
  237. package/dist/verify/audit/failure_classifier.js +0 -188
  238. package/dist/verify/audit/failure_classifier.js.map +0 -1
  239. package/dist/verify/oda/controller.d.ts +0 -38
  240. package/dist/verify/oda/controller.d.ts.map +0 -1
  241. package/dist/verify/oda/controller.js +0 -209
  242. package/dist/verify/oda/controller.js.map +0 -1
@@ -11,258 +11,5 @@
11
11
  * 数据流:审计输入(代码/配置) → 检查 → 评分/报告
12
12
  * 持久化:无持久化(纯计算/内存态)
13
13
  */
14
- export const TOOL_DIAGNOSTIC_CODES = {
15
- planGate: "SF-PLAN-5001",
16
- instructionContract: "SF-INSTR-5801",
17
- oodMissingSummary: "SF-OOD-6601",
18
- oodDeliveryBlock: "SF-OOD-6602",
19
- backendMissingSummary: "SF-BACKEND-6701",
20
- backendDeliveryBlock: "SF-BACKEND-6702",
21
- codeObservabilityWorkPackage: "SF-OBS-6801",
22
- codeObservabilityFinding: "SF-OBS-6802",
23
- projectKnowledgeBlocked: "SF-PK-6901",
24
- contractDraft: "SF-CONTRACT-0003",
25
- verifyPlanMismatch: "SF-VERIFY-5002",
26
- };
27
- const BUILTIN_DIAGNOSTICS = [
28
- // STATE 领域
29
- { code: "SF-STATE-0001", area: "STATE", severity: "blocking", status: "active",
30
- title_zh: "非法状态转移: failed → completed",
31
- user_message_zh: "任务已失败,不能直接标记完成。需要人工确认恢复后重新验证。",
32
- recovery_hint_zh: "检查失败原因,修复后重新执行验证流程。",
33
- owner_component: "engine/task_context", evidence_refs: ["task_context状态机"] },
34
- { code: "SF-STATE-0002", area: "STATE", severity: "blocking", status: "active",
35
- title_zh: "非法状态转移: blocked → completed",
36
- user_message_zh: "任务被阻断,不能直接标记完成。需要解除阻断条件。",
37
- recovery_hint_zh: "检查阻断原因,解决阻断条件后重试。",
38
- owner_component: "engine/task_context", evidence_refs: ["task_context状态机"] },
39
- { code: "SF-STATE-0003", area: "STATE", severity: "blocking", status: "active",
40
- title_zh: "非法状态转移: requires_human → completed",
41
- user_message_zh: "任务需要人工确认,不能自动标记完成。",
42
- recovery_hint_zh: "等待人工确认后继续。",
43
- owner_component: "engine/task_context", evidence_refs: ["task_context状态机"] },
44
- // GUARD 领域
45
- { code: "SF-GUARD-0001", area: "GUARD", severity: "blocking", status: "active",
46
- title_zh: "只读工作流写入业务源码",
47
- user_message_zh: "当前工作流不允许写入业务源码,操作已阻断。",
48
- recovery_hint_zh: "检查路由是否正确,或切换到允许写入的工作流。",
49
- owner_component: "engine/enforcement_guard", evidence_refs: ["enforcement_guard写入护栏"] },
50
- { code: "SF-GUARD-0002", area: "GUARD", severity: "blocking", status: "active",
51
- title_zh: "超出 output artifact 范围写入",
52
- user_message_zh: "source_extraction 工作流只能写入指定的 output artifact 路径。",
53
- recovery_hint_zh: "确认输出路径是否在允许范围内。",
54
- owner_component: "engine/enforcement_guard", evidence_refs: ["enforcement_guard范围护栏"] },
55
- { code: "SF-GUARD-0003", area: "GUARD", severity: "blocking", status: "active",
56
- title_zh: "破坏性命令未经人工确认",
57
- user_message_zh: "检测到破坏性命令(如删除、覆盖)但缺少人工确认。操作已阻止。",
58
- recovery_hint_zh: "请通过 sf_task confirm 确认执行,或调整命令为非破坏性操作。",
59
- owner_component: "engine/enforcement_guard", evidence_refs: ["enforcement_guard执行护栏"] },
60
- { code: "SF-GUARD-0004", area: "GUARD", severity: "blocking", status: "active",
61
- title_zh: "不可注入知识条目被注入到 prompt",
62
- user_message_zh: "知识条目的 status 或 scope 不允许注入,但被尝试注入。操作已阻止。",
63
- recovery_hint_zh: "检查知识条目的 lifecycle status 和 injection 权限。",
64
- owner_component: "engine/enforcement_guard", evidence_refs: ["enforcement_guard知识护栏"] },
65
- { code: "SF-GUARD-0005", area: "GUARD", severity: "blocking", status: "active",
66
- title_zh: "prompt 超出工作流契约权限",
67
- user_message_zh: "当前工作流不允许此 prompt 内容或权限级别。操作已阻止。",
68
- recovery_hint_zh: "检查工作流契约的 prompt 权限配置。",
69
- owner_component: "engine/enforcement_guard", evidence_refs: ["enforcement_guard prompt护栏"] },
70
- { code: "SF-GUARD-0006", area: "GUARD", severity: "blocking", status: "active",
71
- title_zh: "外部副作用无 evidence 记录",
72
- user_message_zh: "检测到外部副作用操作(push/PR/deploy)但缺少 evidence 记录。",
73
- recovery_hint_zh: "确保所有外部副作用操作有完整的 evidence chain。",
74
- owner_component: "engine/enforcement_guard", evidence_refs: ["enforcement_guard副作用护栏"] },
75
- // VERIFY 领域
76
- { code: "SF-VERIFY-0001", area: "VERIFY", severity: "critical", status: "active",
77
- title_zh: "验证计划被当作验证证据",
78
- user_message_zh: "检测到只有验证计划没有验证结果。计划不得替代真实执行。",
79
- recovery_hint_zh: "执行验证命令获取真实结果。",
80
- owner_component: "engine/verification_contract", evidence_refs: ["verification_contract分离"] },
81
- { code: "SF-VERIFY-0002", area: "VERIFY", severity: "blocking", status: "active",
82
- title_zh: "未验证但尝试交付",
83
- user_message_zh: "任务未通过验证,不允许交付。",
84
- recovery_hint_zh: "先完成验证流程,确保所有检查通过。",
85
- owner_component: "engine/delivery_readiness", evidence_refs: ["delivery_readiness门控"] },
86
- // FAILURE 领域
87
- { code: "SF-FAILURE-0001", area: "FAILURE", severity: "critical", status: "active",
88
- title_zh: "重试预算耗尽",
89
- user_message_zh: "失败重试次数已达上限,需要人工介入。",
90
- recovery_hint_zh: "检查错误根因,手动修复后重新执行。",
91
- owner_component: "engine/recovery_policy", evidence_refs: ["recovery_policy预算"] },
92
- { code: "SF-FAILURE-0002", area: "FAILURE", severity: "warning", status: "active",
93
- title_zh: "外部副作用部分执行",
94
- user_message_zh: "检测到外部副作用部分执行,已记录已发生动作。",
95
- recovery_hint_zh: "检查已执行副作用,确认是否需要回滚。",
96
- owner_component: "engine/recovery_policy", evidence_refs: ["recovery_policy副作用"] },
97
- // DEGRADE 领域
98
- { code: "SF-DEGRADE-0001", area: "DEGRADE", severity: "warning", status: "active",
99
- title_zh: "验证器不可用,降级运行",
100
- user_message_zh: "验证器不可用,当前为降级模式。结果未经验证。",
101
- recovery_hint_zh: "等待验证器恢复后重新验证,或人工确认。",
102
- owner_component: "engine/degradation", evidence_refs: ["degradation降级"] },
103
- // WORKSPACE 领域
104
- { code: "SF-WORKSPACE-0001", area: "WORKSPACE", severity: "blocking", status: "active",
105
- title_zh: "并发写入冲突",
106
- user_message_zh: "检测到其他任务正在写入相同文件范围,操作已阻断。",
107
- recovery_hint_zh: "等待其他任务完成或人工协调写入顺序。",
108
- owner_component: "engine/workspace_lease", evidence_refs: ["workspace_lease冲突"] },
109
- // OBSERVE 领域
110
- { code: "SF-OBSERVE-0001", area: "OBSERVE", severity: "warning", status: "active",
111
- title_zh: "TaskContext 尝试存储敏感原文",
112
- user_message_zh: "检测到尝试将敏感信息存入 TaskContext,已自动脱敏。",
113
- recovery_hint_zh: "确认脱敏后的内容是否满足需求。",
114
- owner_component: "engine/task_context", evidence_refs: ["task_context边界"] },
115
- // CONTRACT 领域
116
- { code: "SF-CONTRACT-0001", area: "CONTRACT", severity: "blocking", status: "active",
117
- title_zh: "引用已废弃/已移除的契约",
118
- user_message_zh: "工作流引用了已废弃或已移除的契约,操作已阻断。",
119
- recovery_hint_zh: "迁移到替代契约或更新工作流配置。",
120
- owner_component: "engine/contract_registry", evidence_refs: ["contract_registry门控"] },
121
- // PRIVACY 领域
122
- { code: "SF-PRIVACY-0001", area: "PRIVACY", severity: "blocking", status: "active",
123
- title_zh: "命令输出包含敏感信息",
124
- user_message_zh: "命令执行输出检测到敏感信息,已自动脱敏存储。",
125
- recovery_hint_zh: "检查脱敏后内容,确认是否需要重新执行。",
126
- owner_component: "engine/privacy_secret_contract", evidence_refs: ["privacy脱敏"] },
127
- { code: TOOL_DIAGNOSTIC_CODES.planGate, area: "GUARD", severity: "blocking", status: "active",
128
- title_zh: "写工具缺少计划前置门",
129
- user_message_zh: "写入类工具执行前缺少已确认的计划。",
130
- recovery_hint_zh: "先完成 sf_task → sf_work,并确认执行计划。",
131
- owner_component: "server/tools", evidence_refs: ["PlanProposalFirstGate"] },
132
- { code: TOOL_DIAGNOSTIC_CODES.instructionContract, area: "CONTRACT", severity: "blocking", status: "active",
133
- title_zh: "施工指令契约未就绪",
134
- user_message_zh: "施工指令缺少目标、范围、验收或禁止绕过项。",
135
- recovery_hint_zh: "补齐施工指令后再执行写入。",
136
- owner_component: "engine/instruction_contract", evidence_refs: ["InstructionContract"] },
137
- { code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary, area: "CONTRACT", severity: "blocking", status: "active",
138
- title_zh: "OOD/SOLID 摘要缺失",
139
- user_message_zh: "复杂实现任务缺少面向对象与 SOLID 设计摘要。",
140
- recovery_hint_zh: "先补齐职责、依赖方向、扩展点和边界说明。",
141
- owner_component: "engine/ood_solid_contract", evidence_refs: ["OOD/SOLID契约"] },
142
- { code: TOOL_DIAGNOSTIC_CODES.oodDeliveryBlock, area: "DELIVER", severity: "blocking", status: "active",
143
- title_zh: "OOD/SOLID 问题未闭合",
144
- user_message_zh: "实现仍存在职责、依赖或扩展性硬失败,不能交付。",
145
- recovery_hint_zh: "修复 OOD/SOLID finding 后重新验证。",
146
- owner_component: "engine/ood_solid_contract", evidence_refs: ["OOD/SOLID交付门"] },
147
- { code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary, area: "CONTRACT", severity: "blocking", status: "active",
148
- title_zh: "后端工程契约摘要缺失",
149
- user_message_zh: "后端实现缺少参数、事务、权限、幂等或审计等工程契约。",
150
- recovery_hint_zh: "补齐后端实现工作包后再编码。",
151
- owner_component: "engine/backend_implementation_contract", evidence_refs: ["后端工程契约"] },
152
- { code: TOOL_DIAGNOSTIC_CODES.backendDeliveryBlock, area: "DELIVER", severity: "blocking", status: "active",
153
- title_zh: "后端工程契约未闭合",
154
- user_message_zh: "后端实现仍存在参数校验、事务、安全或审计硬失败,不能交付。",
155
- recovery_hint_zh: "修复后端工程 finding 后重新验证。",
156
- owner_component: "engine/backend_implementation_contract", evidence_refs: ["后端工程交付门"] },
157
- { code: TOOL_DIAGNOSTIC_CODES.codeObservabilityWorkPackage, area: "OBSERVE", severity: "blocking", status: "active",
158
- title_zh: "代码可维护性与可观测性工作包缺失",
159
- user_message_zh: "业务编码前缺少必要注释、日志和脱敏约束。",
160
- recovery_hint_zh: "先生成并确认代码可维护性与可观测性工作包。",
161
- owner_component: "engine/code_maintainability_observability_contract", evidence_refs: ["问题六十八"] },
162
- { code: TOOL_DIAGNOSTIC_CODES.codeObservabilityFinding, area: "OBSERVE", severity: "blocking", status: "active",
163
- title_zh: "代码可维护性与可观测性 finding 未闭合",
164
- user_message_zh: "代码存在敏感日志、不可定位日志、吞异常或关键操作缺日志,不能交付。",
165
- recovery_hint_zh: "修复注释/日志 finding 后重新验证。",
166
- owner_component: "engine/code_maintainability_observability_contract", evidence_refs: ["问题六十八"] },
167
- { code: TOOL_DIAGNOSTIC_CODES.projectKnowledgeBlocked, area: "CONTRACT", severity: "blocking", status: "active",
168
- title_zh: "用户项目知识规则不可消费",
169
- user_message_zh: "项目 .soloforge/knowledge 中存在 hard rule 路由、触发条件或身份冲突,不能进入执行、审查、验证或交付。",
170
- recovery_hint_zh: "运行 sf_knowledge action=audit,修复规则 frontmatter、routes、triggers 或冲突后重试。",
171
- owner_component: "context/contracts/project_knowledge_contract", evidence_refs: ["用户项目知识消费体系"] },
172
- { code: TOOL_DIAGNOSTIC_CODES.contractDraft, area: "CONTRACT", severity: "blocking", status: "active",
173
- title_zh: "设计产物仍为草稿",
174
- user_message_zh: "设计产物未通过契约验证或仍是草稿,不能交付。",
175
- recovery_hint_zh: "修复设计产物后重新执行阶段工具,确定性门禁自动复验。",
176
- owner_component: "engine/standard_asset_contract", evidence_refs: ["标准资产契约"] },
177
- { code: TOOL_DIAGNOSTIC_CODES.verifyPlanMismatch, area: "VERIFY", severity: "blocking", status: "active",
178
- title_zh: "验证计划不匹配",
179
- user_message_zh: "请求的验证计划与当前任务计划不一致。",
180
- recovery_hint_zh: "使用当前任务的 plan_id 重新执行验证。",
181
- owner_component: "server/tools", evidence_refs: ["VerificationPlan"] },
182
- ];
183
- let runtimeDiagnostics = null;
184
- function getRegistry() {
185
- if (!runtimeDiagnostics) {
186
- runtimeDiagnostics = new Map();
187
- for (const entry of BUILTIN_DIAGNOSTICS) {
188
- runtimeDiagnostics.set(entry.code, { ...entry });
189
- }
190
- }
191
- return runtimeDiagnostics;
192
- }
193
- /** 按 code 获取诊断码 */
194
- export function getDiagnosticByCode(code) {
195
- return getRegistry().get(code);
196
- }
197
- /** 列出所有诊断码 */
198
- export function listAllDiagnostics() {
199
- return [...getRegistry().values()];
200
- }
201
- /** 按领域列出诊断码 */
202
- export function listDiagnosticsByArea(area) {
203
- return [...getRegistry().values()].filter((d) => d.area === area);
204
- }
205
- /** 按 severity 列出诊断码 */
206
- export function listDiagnosticsBySeverity(severity) {
207
- return [...getRegistry().values()].filter((d) => d.severity === severity);
208
- }
209
- /** 注册新诊断码(运行时) */
210
- export function registerDiagnostic(entry) {
211
- const registry = getRegistry();
212
- if (registry.has(entry.code)) {
213
- return { success: false, error: `诊断码 ${entry.code} 已存在` };
214
- }
215
- if (!/^SF-[A-Z]+-\d{4}$/.test(entry.code)) {
216
- return { success: false, error: `诊断码格式错误: ${entry.code},必须为 SF-{AREA}-{NNNN}` };
217
- }
218
- if (!entry.title_zh || !entry.user_message_zh || !entry.recovery_hint_zh) {
219
- return { success: false, error: "诊断码必须有 title_zh、user_message_zh、recovery_hint_zh" };
220
- }
221
- registry.set(entry.code, { ...entry });
222
- return { success: true };
223
- }
224
- /** 创建诊断事件 */
225
- export function createDiagnosticEvent(code, context, contractId, taskId) {
226
- const entry = getRegistry().get(code);
227
- if (!entry)
228
- return null;
229
- if (entry.status === "deprecated" || entry.status === "removed")
230
- return null;
231
- return {
232
- code,
233
- occurred_at: new Date().toISOString(),
234
- context: context ?? {},
235
- user_visible_message: entry.user_message_zh,
236
- contract_id: contractId,
237
- task_id: taskId,
238
- };
239
- }
240
- /** 验证所有 blocking/critical 事件必须有诊断码 */
241
- export function validateDiagnosticCoverage(eventSeverities) {
242
- const errors = [];
243
- for (const event of eventSeverities) {
244
- if ((event.severity === "blocking" || event.severity === "critical") && !event.has_code) {
245
- errors.push({
246
- severity: event.severity,
247
- error: `${event.severity} 事件缺少诊断码`,
248
- });
249
- }
250
- }
251
- return errors;
252
- }
253
- /** 重置注册表(测试用) */
254
- export function resetDiagnosticRegistry() {
255
- runtimeDiagnostics = null;
256
- }
257
- /** 获取诊断码统计 */
258
- export function getDiagnosticStats() {
259
- const entries = [...getRegistry().values()];
260
- const by_area = {};
261
- const by_severity = {};
262
- for (const e of entries) {
263
- by_area[e.area] = (by_area[e.area] ?? 0) + 1;
264
- by_severity[e.severity] = (by_severity[e.severity] ?? 0) + 1;
265
- }
266
- return { total: entries.length, by_area, by_severity };
267
- }
14
+ export {};
268
15
  //# sourceMappingURL=diagnostic_registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostic_registry.js","sourceRoot":"","sources":["../../src/shared/diagnostic_registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostic_registry.js","sourceRoot":"","sources":["../../src/shared/diagnostic_registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -2,16 +2,16 @@
2
2
  * glob_path — 核心基础层模块。
3
3
  *
4
4
  * 职责边界:
5
- * - 负责:轻量 glob 路径匹配(仅支持单段 `*`,不跨目录)与产物路径存在性判定
5
+ * - 负责:轻量 glob 路径匹配(支持多段 `*`,每段不跨目录)与产物路径存在性判定
6
6
  * - 不负责:完整 glob 引擎(`**` / `?` / `[]` 不支持),那些场景应引入专用库
7
7
  *
8
- * 被谁调用:原型说明多端路径(`docs/analyze/{端}/01-原型说明.md`)等带通配符的产物路径检查
8
+ * 被谁调用:原型说明多端路径(`docs/analyze/{端}/pages/{页}-原型说明.md`)等带通配符的产物路径检查
9
9
  * 调用谁:node:fs、node:path
10
10
  *
11
11
  * 数据流:glob 模式 → 字符串匹配 / 文件系统遍历 → 命中结果
12
12
  * 持久化:无持久化(纯计算 / 只读文件系统)
13
13
  *
14
- * 设计说明:原型说明等多端产物的 glob 模式是固定单层(`*` 不跨目录),
14
+ * 设计说明:原型说明等多端产物的 glob 模式可含多段 `*`(每段不跨目录,如 docs/analyze/{端}/pages/{页}-原型说明.md),
15
15
  * 不需要完整 glob 引擎。本模块采用自研的递归遍历思路,
16
16
  * 零第三方依赖、保持 engines.node >=18 兼容。
17
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"glob_path.d.ts","sourceRoot":"","sources":["../../src/shared/glob_path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAWH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/C;AAwBD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAIpE;AA2CD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAU5E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAUjF"}
1
+ {"version":3,"file":"glob_path.d.ts","sourceRoot":"","sources":["../../src/shared/glob_path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAWH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/C;AAwBD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAIpE;AA2CD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAW5E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAWjF"}
@@ -2,16 +2,16 @@
2
2
  * glob_path — 核心基础层模块。
3
3
  *
4
4
  * 职责边界:
5
- * - 负责:轻量 glob 路径匹配(仅支持单段 `*`,不跨目录)与产物路径存在性判定
5
+ * - 负责:轻量 glob 路径匹配(支持多段 `*`,每段不跨目录)与产物路径存在性判定
6
6
  * - 不负责:完整 glob 引擎(`**` / `?` / `[]` 不支持),那些场景应引入专用库
7
7
  *
8
- * 被谁调用:原型说明多端路径(`docs/analyze/{端}/01-原型说明.md`)等带通配符的产物路径检查
8
+ * 被谁调用:原型说明多端路径(`docs/analyze/{端}/pages/{页}-原型说明.md`)等带通配符的产物路径检查
9
9
  * 调用谁:node:fs、node:path
10
10
  *
11
11
  * 数据流:glob 模式 → 字符串匹配 / 文件系统遍历 → 命中结果
12
12
  * 持久化:无持久化(纯计算 / 只读文件系统)
13
13
  *
14
- * 设计说明:原型说明等多端产物的 glob 模式是固定单层(`*` 不跨目录),
14
+ * 设计说明:原型说明等多端产物的 glob 模式可含多段 `*`(每段不跨目录,如 docs/analyze/{端}/pages/{页}-原型说明.md),
15
15
  * 不需要完整 glob 引擎。本模块采用自研的递归遍历思路,
16
16
  * 零第三方依赖、保持 engines.node >=18 兼容。
17
17
  */
@@ -44,7 +44,7 @@ function globToRegExpSource(pattern) {
44
44
  if (ch === "*") {
45
45
  src += "[^/]*";
46
46
  }
47
- else if (/[$^()+.\\|{}]/.test(ch)) {
47
+ else if (/[$^()+.\\|{}[\]]/.test(ch)) {
48
48
  src += "\\" + ch;
49
49
  }
50
50
  else {
@@ -66,7 +66,7 @@ export function matchGlob(filePath, pattern) {
66
66
  }
67
67
  /**
68
68
  * 从 glob 模式提取首个 `*` 之前的固定目录前缀(相对 rootDir)。
69
- * 例:`docs/analyze/{端}/01-原型说明.md` → `docs/analyze`(只遍历该子树,避免扫全项目)。
69
+ * 例:`docs/analyze/{端}/pages/{页}-原型说明.md` → `docs/analyze`(只遍历该子树,避免扫全项目)。
70
70
  */
71
71
  function globSearchSubdir(pattern) {
72
72
  const starIdx = pattern.indexOf("*");
@@ -114,6 +114,8 @@ function collectFilesFrom(rootDir, searchSubdir) {
114
114
  * - pattern 含 `?` / `[`:保守按字面 existsSync(不误判)
115
115
  */
116
116
  export function artifactPathExists(rootDir, pattern) {
117
+ if (!pattern || pattern.trim() === "")
118
+ return false; // 空 pattern 防护:path.join(root,"")=root → existsSync 恒 true(假存在,绕过产物门禁)
117
119
  if (!containsGlob(pattern)) {
118
120
  return fs.existsSync(path.join(rootDir, pattern));
119
121
  }
@@ -132,6 +134,8 @@ export function artifactPathExists(rootDir, pattern) {
132
134
  * - pattern 含 `?` / `[`:保守按字面
133
135
  */
134
136
  export function resolveArtifactsByGlob(rootDir, pattern) {
137
+ if (!pattern || pattern.trim() === "")
138
+ return []; // 空 pattern 防护:避免返回 [""] 伪命中(loadUpstreamContent/loadArtifactAggregate 据此读文件)
135
139
  if (!containsGlob(pattern)) {
136
140
  return fs.existsSync(path.join(rootDir, pattern)) ? [pattern] : [];
137
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"glob_path.js","sourceRoot":"","sources":["../../src/shared/glob_path.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glob_path.js","sourceRoot":"","sources":["../../src/shared/glob_path.ts"],"names":[],"mappings":"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"}
@@ -38,8 +38,10 @@ export declare function errorMessage(e: unknown): string;
38
38
  export declare function safeJsonParse<T>(text: string): T | undefined;
39
39
  export declare function safeJsonParse<T>(text: string, fallback: T): T;
40
40
  /**
41
- * 安全的 JSON 序列化 替代裸 `JSON.stringify()`。
42
- * 循环引用或其他错误时返回 fallback(默认 undefined)。
41
+ * 安全截断字符串 避免在 UTF-16 代理对中间截断导致乱码/损坏。
42
+ * JS 字符串是 UTF-16:emoji/扩展 CJK 等占两个码元(高位 0xD800-0xDBFF + 低位 0xDC00-0xDFFF)。
43
+ * str.slice(0,N) 按码元切,若 N 落在代理对中间会把高位孤悬 → 下游 JSON.stringify 抛错 / LLM 乱码。
44
+ * 截断处码元若在高代理位(下一码元是低代理却没配对)→ 退一位再拼 suffix。短于 max 原样返回。
43
45
  */
44
- export declare function safeJsonStringify(obj: unknown, fallback?: string): string | undefined;
46
+ export declare function safeTruncate(str: string, max: number, suffix?: string): string;
45
47
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/shared/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAW/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;AAC9D,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;AAS/D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMrF"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/shared/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAW/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;AAC9D,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;AAS/D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAK1E"}
@@ -46,15 +46,17 @@ export function safeJsonParse(text, fallback) {
46
46
  }
47
47
  }
48
48
  /**
49
- * 安全的 JSON 序列化 替代裸 `JSON.stringify()`。
50
- * 循环引用或其他错误时返回 fallback(默认 undefined)。
49
+ * 安全截断字符串 避免在 UTF-16 代理对中间截断导致乱码/损坏。
50
+ * JS 字符串是 UTF-16:emoji/扩展 CJK 等占两个码元(高位 0xD800-0xDBFF + 低位 0xDC00-0xDFFF)。
51
+ * str.slice(0,N) 按码元切,若 N 落在代理对中间会把高位孤悬 → 下游 JSON.stringify 抛错 / LLM 乱码。
52
+ * 截断处码元若在高代理位(下一码元是低代理却没配对)→ 退一位再拼 suffix。短于 max 原样返回。
51
53
  */
52
- export function safeJsonStringify(obj, fallback) {
53
- try {
54
- return JSON.stringify(obj);
55
- }
56
- catch {
57
- return fallback;
58
- }
54
+ export function safeTruncate(str, max, suffix = "") {
55
+ if (str.length <= max)
56
+ return str;
57
+ let cut = max;
58
+ if (str.charCodeAt(max - 1) >= 0xd800 && str.charCodeAt(max - 1) <= 0xdbff)
59
+ cut = max - 1;
60
+ return str.slice(0, cut) + suffix;
59
61
  }
60
62
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/shared/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,UAAU,cAAc,CAAC,CAAmB;IAChD,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,CAAmB;IACjD,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAA2B,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,+CAA+C;QAC/C,8DAA8D;QAC9D,MAAM,GAAG,GAAG,CAAQ,CAAC;QACrB,IAAI,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,GAAG,CAAC,CAAC,OAAO,WAAW,GAAG,CAAC,QAAQ,GAAG,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAiBD,MAAM,UAAU,aAAa,CAAI,IAAY,EAAE,QAAY;IACzD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY,EAAE,QAAiB;IAC/D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/shared/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,UAAU,cAAc,CAAC,CAAmB;IAChD,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,CAAmB;IACjD,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAA2B,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,+CAA+C;QAC/C,8DAA8D;QAC9D,MAAM,GAAG,GAAG,CAAQ,CAAC;QACrB,IAAI,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,GAAG,CAAC,CAAC,OAAO,WAAW,GAAG,CAAC,QAAQ,GAAG,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAiBD,MAAM,UAAU,aAAa,CAAI,IAAY,EAAE,QAAY;IACzD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW,EAAE,MAAM,GAAG,EAAE;IAChE,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAClC,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,MAAM;QAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAC1F,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AACpC,CAAC"}
@@ -21,16 +21,4 @@ export declare function loadKnowledgeConfig(relativePath: string, projectPath?:
21
21
  data: Record<string, unknown>;
22
22
  body: string;
23
23
  } | null;
24
- /**
25
- * 从知识文件的决策规则中提取指定键的数值。
26
- */
27
- export declare function extractNumberRule(body: string, key: string): number | undefined;
28
- /** 从知识文件的决策规则中提取字符串值。 */
29
- export declare function extractStringRule(body: string, key: string): string | undefined;
30
- /** 从知识文件的决策规则中提取列表值(格式:键 = 值1 / 值2 / 值3)。 */
31
- export declare function extractListRule(body: string, key: string): string[];
32
- /**
33
- * 清除知识配置缓存(测试用)。
34
- */
35
- export declare function clearConfigCache(): void;
36
24
  //# sourceMappingURL=knowledge_config_loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge_config_loader.d.ts","sourceRoot":"","sources":["../../src/shared/knowledge_config_loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAwBH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoCxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/E;AAED,yBAAyB;AACzB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/E;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAInE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
1
+ {"version":3,"file":"knowledge_config_loader.d.ts","sourceRoot":"","sources":["../../src/shared/knowledge_config_loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAwBH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoCxD"}
@@ -72,32 +72,4 @@ export function loadKnowledgeConfig(relativePath, projectPath) {
72
72
  return null;
73
73
  }
74
74
  }
75
- /**
76
- * 从知识文件的决策规则中提取指定键的数值。
77
- */
78
- export function extractNumberRule(body, key) {
79
- const regex = new RegExp(`${key.replace(/_/g, "[_ ]")}\\s*=\\s*([\\d.]+)`, "i");
80
- const match = body.match(regex);
81
- return match ? parseFloat(match[1]) : undefined;
82
- }
83
- /** 从知识文件的决策规则中提取字符串值。 */
84
- export function extractStringRule(body, key) {
85
- const regex = new RegExp(`${key.replace(/_/g, "[_ ]")}\\s*=\\s*([^\\n,]+)`, "i");
86
- const match = body.match(regex);
87
- return match ? match[1].trim() : undefined;
88
- }
89
- /** 从知识文件的决策规则中提取列表值(格式:键 = 值1 / 值2 / 值3)。 */
90
- export function extractListRule(body, key) {
91
- const value = extractStringRule(body, key);
92
- if (!value)
93
- return [];
94
- return value.split(/[/,,、]/).map((v) => v.trim()).filter(Boolean);
95
- }
96
- /**
97
- * 清除知识配置缓存(测试用)。
98
- */
99
- export function clearConfigCache() {
100
- debug("CoreKnowledgeConfigLoader", "清除配置缓存");
101
- configCache.clear();
102
- }
103
75
  //# sourceMappingURL=knowledge_config_loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge_config_loader.js","sourceRoot":"","sources":["../../src/shared/knowledge_config_loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knowledge_config_loader.js","sourceRoot":"","sources":["../../src/shared/knowledge_config_loader.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,12 @@
14
14
  /**
15
15
  * 同步原子写入:先写 .tmp 再 rename。
16
16
  *
17
+ * **并发安全范围**(适用所有 atomicWriteFile* 调用方,含 *_store.ts):
18
+ * - 进程内原子(read 看不到半写文件,单线程运行时串行)
19
+ * - **跨进程不安全**:两进程 read-modify-rename 同文件,后者覆盖前者且无异常([[init_must_not_parallel]] 根害)
20
+ * - 随机 tmp 后缀只防 tmp 碰撞,不序列化最终 rename
21
+ * 跨进程共享文件(init 全局 patterns / 2 个 MCP 服务器同项目)须外部串行。
22
+ *
17
23
  * @param filePath - 目标文件路径
18
24
  * @param content - 要写入的内容
19
25
  * @param encoding - 编码,默认 "utf-8"
@@ -1 +1 @@
1
- {"version":3,"file":"write_file_atomic.d.ts","sourceRoot":"","sources":["../../src/shared/write_file_atomic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiCH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,cAAwB,GACjC,IAAI,CAiBN;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,cAAwB,GACjC,OAAO,CAAC,IAAI,CAAC,CAiBf"}
1
+ {"version":3,"file":"write_file_atomic.d.ts","sourceRoot":"","sources":["../../src/shared/write_file_atomic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiCH;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,cAAwB,GACjC,IAAI,CAiBN;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,cAAwB,GACjC,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -45,6 +45,12 @@ function assertPathNotDenied(filePath, projectPath) {
45
45
  /**
46
46
  * 同步原子写入:先写 .tmp 再 rename。
47
47
  *
48
+ * **并发安全范围**(适用所有 atomicWriteFile* 调用方,含 *_store.ts):
49
+ * - 进程内原子(read 看不到半写文件,单线程运行时串行)
50
+ * - **跨进程不安全**:两进程 read-modify-rename 同文件,后者覆盖前者且无异常([[init_must_not_parallel]] 根害)
51
+ * - 随机 tmp 后缀只防 tmp 碰撞,不序列化最终 rename
52
+ * 跨进程共享文件(init 全局 patterns / 2 个 MCP 服务器同项目)须外部串行。
53
+ *
48
54
  * @param filePath - 目标文件路径
49
55
  * @param content - 要写入的内容
50
56
  * @param encoding - 编码,默认 "utf-8"
@@ -55,7 +61,7 @@ export function atomicWriteFileSync(filePath, content, encoding = "utf-8") {
55
61
  // 确保父目录存在
56
62
  const dir = path.dirname(filePath);
57
63
  fs.mkdirSync(dir, { recursive: true });
58
- // 使用随机 ID 后缀避免并发写入冲突
64
+ // 随机 tmp 后缀只防 tmp 碰撞(两进程同时写不互踩 tmp);最终 rename 不序列化——跨进程 read-modify-rename 同文件仍会后者覆盖前者(见 JSDoc,[init_must_not_parallel] 根害)
59
65
  const tmpPath = `${filePath}.${crypto.randomUUID().slice(0, 8)}.tmp`;
60
66
  try {
61
67
  fs.writeFileSync(tmpPath, content, encoding);
@@ -83,7 +89,7 @@ export async function atomicWriteFile(filePath, content, encoding = "utf-8") {
83
89
  // 确保父目录存在
84
90
  const dir = path.dirname(filePath);
85
91
  await fsp.mkdir(dir, { recursive: true });
86
- // 使用随机 ID 后缀避免并发写入冲突
92
+ // 随机 tmp 后缀只防 tmp 碰撞(两进程同时写不互踩 tmp);最终 rename 不序列化——跨进程 read-modify-rename 同文件仍会后者覆盖前者(见 JSDoc,[init_must_not_parallel] 根害)
87
93
  const tmpPath = `${filePath}.${crypto.randomUUID().slice(0, 8)}.tmp`;
88
94
  try {
89
95
  await fsp.writeFile(tmpPath, content, encoding);
@@ -1 +1 @@
1
- {"version":3,"file":"write_file_atomic.js","sourceRoot":"","sources":["../../src/shared/write_file_atomic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write_file_atomic.js","sourceRoot":"","sources":["../../src/shared/write_file_atomic.ts"],"names":[],"mappings":"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"}