soloforge 1.2.8 → 1.2.9

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 (405) hide show
  1. package/README.md +105 -321
  2. package/dist/adapters/claude_code/claude_md.d.ts +5 -0
  3. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
  4. package/dist/adapters/claude_code/claude_md.js +6 -0
  5. package/dist/adapters/claude_code/claude_md.js.map +1 -1
  6. package/dist/adapters/claude_code/hooks.d.ts +4 -0
  7. package/dist/adapters/claude_code/hooks.d.ts.map +1 -1
  8. package/dist/adapters/claude_code/hooks.js +5 -0
  9. package/dist/adapters/claude_code/hooks.js.map +1 -1
  10. package/dist/adapters/claude_code/server.d.ts.map +1 -1
  11. package/dist/adapters/claude_code/server.js +9 -21
  12. package/dist/adapters/claude_code/server.js.map +1 -1
  13. package/dist/adapters/claude_code/tools.d.ts +5 -0
  14. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  15. package/dist/adapters/claude_code/tools.js +619 -205
  16. package/dist/adapters/claude_code/tools.js.map +1 -1
  17. package/dist/adapters/codex/codex_config.d.ts +9 -0
  18. package/dist/adapters/codex/codex_config.d.ts.map +1 -1
  19. package/dist/adapters/codex/codex_config.js +11 -3
  20. package/dist/adapters/codex/codex_config.js.map +1 -1
  21. package/dist/adapters/codex/codex_rules.d.ts +5 -0
  22. package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
  23. package/dist/adapters/codex/codex_rules.js +8 -1
  24. package/dist/adapters/codex/codex_rules.js.map +1 -1
  25. package/dist/adapters/shared/workflow_template.d.ts +5 -0
  26. package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
  27. package/dist/adapters/shared/workflow_template.js +32 -79
  28. package/dist/adapters/shared/workflow_template.js.map +1 -1
  29. package/dist/adapters/trae/trae_config.d.ts +4 -0
  30. package/dist/adapters/trae/trae_config.d.ts.map +1 -1
  31. package/dist/adapters/trae/trae_config.js +5 -7
  32. package/dist/adapters/trae/trae_config.js.map +1 -1
  33. package/dist/adapters/trae/trae_rules.d.ts +5 -0
  34. package/dist/adapters/trae/trae_rules.d.ts.map +1 -1
  35. package/dist/adapters/trae/trae_rules.js +7 -1
  36. package/dist/adapters/trae/trae_rules.js.map +1 -1
  37. package/dist/bin/config_commands.d.ts +33 -0
  38. package/dist/bin/config_commands.d.ts.map +1 -0
  39. package/dist/bin/config_commands.js +222 -0
  40. package/dist/bin/config_commands.js.map +1 -0
  41. package/dist/bin/soloforge.js +609 -119
  42. package/dist/bin/soloforge.js.map +1 -1
  43. package/dist/engine/artifact_contract_registry.d.ts +138 -0
  44. package/dist/engine/artifact_contract_registry.d.ts.map +1 -0
  45. package/dist/engine/artifact_contract_registry.js +427 -0
  46. package/dist/engine/artifact_contract_registry.js.map +1 -0
  47. package/dist/engine/audit_pool.d.ts +40 -0
  48. package/dist/engine/audit_pool.d.ts.map +1 -1
  49. package/dist/engine/audit_pool.js +37 -1
  50. package/dist/engine/audit_pool.js.map +1 -1
  51. package/dist/engine/audit_sampler.d.ts +5 -0
  52. package/dist/engine/audit_sampler.d.ts.map +1 -1
  53. package/dist/engine/audit_sampler.js +6 -0
  54. package/dist/engine/audit_sampler.js.map +1 -1
  55. package/dist/engine/audit_verifier.d.ts.map +1 -1
  56. package/dist/engine/audit_verifier.js +5 -1
  57. package/dist/engine/audit_verifier.js.map +1 -1
  58. package/dist/engine/batch1_manifest.d.ts +61 -0
  59. package/dist/engine/batch1_manifest.d.ts.map +1 -0
  60. package/dist/engine/batch1_manifest.js +220 -0
  61. package/dist/engine/batch1_manifest.js.map +1 -0
  62. package/dist/engine/batch1_reality_gate.d.ts +40 -0
  63. package/dist/engine/batch1_reality_gate.d.ts.map +1 -0
  64. package/dist/engine/batch1_reality_gate.js +290 -0
  65. package/dist/engine/batch1_reality_gate.js.map +1 -0
  66. package/dist/engine/batch1_scenario_registry.d.ts +62 -0
  67. package/dist/engine/batch1_scenario_registry.d.ts.map +1 -0
  68. package/dist/engine/batch1_scenario_registry.js +392 -0
  69. package/dist/engine/batch1_scenario_registry.js.map +1 -0
  70. package/dist/engine/batch1_scenario_runners.d.ts +42 -0
  71. package/dist/engine/batch1_scenario_runners.d.ts.map +1 -0
  72. package/dist/engine/batch1_scenario_runners.js +292 -0
  73. package/dist/engine/batch1_scenario_runners.js.map +1 -0
  74. package/dist/engine/capability_action_advisor.d.ts +3 -0
  75. package/dist/engine/capability_action_advisor.d.ts.map +1 -1
  76. package/dist/engine/capability_action_advisor.js +10 -0
  77. package/dist/engine/capability_action_advisor.js.map +1 -1
  78. package/dist/engine/capability_registry.d.ts +21 -0
  79. package/dist/engine/capability_registry.d.ts.map +1 -1
  80. package/dist/engine/capability_registry.js +113 -0
  81. package/dist/engine/capability_registry.js.map +1 -1
  82. package/dist/engine/capability_state_store.d.ts +63 -0
  83. package/dist/engine/capability_state_store.d.ts.map +1 -1
  84. package/dist/engine/capability_state_store.js +49 -1
  85. package/dist/engine/capability_state_store.js.map +1 -1
  86. package/dist/engine/change_coordinator.d.ts.map +1 -1
  87. package/dist/engine/change_coordinator.js +5 -4
  88. package/dist/engine/change_coordinator.js.map +1 -1
  89. package/dist/engine/classifier.d.ts +15 -5
  90. package/dist/engine/classifier.d.ts.map +1 -1
  91. package/dist/engine/classifier.js +70 -69
  92. package/dist/engine/classifier.js.map +1 -1
  93. package/dist/engine/code_reviewer.d.ts +14 -0
  94. package/dist/engine/code_reviewer.d.ts.map +1 -1
  95. package/dist/engine/code_reviewer.js +109 -10
  96. package/dist/engine/code_reviewer.js.map +1 -1
  97. package/dist/engine/cognitive_anchor.d.ts +14 -0
  98. package/dist/engine/cognitive_anchor.d.ts.map +1 -1
  99. package/dist/engine/cognitive_anchor.js +26 -2
  100. package/dist/engine/cognitive_anchor.js.map +1 -1
  101. package/dist/engine/command_execution_contract.d.ts +226 -0
  102. package/dist/engine/command_execution_contract.d.ts.map +1 -0
  103. package/dist/engine/command_execution_contract.js +571 -0
  104. package/dist/engine/command_execution_contract.js.map +1 -0
  105. package/dist/engine/confidence_scorer.d.ts.map +1 -1
  106. package/dist/engine/confidence_scorer.js +1 -0
  107. package/dist/engine/confidence_scorer.js.map +1 -1
  108. package/dist/engine/config_precedence_contract.d.ts +269 -0
  109. package/dist/engine/config_precedence_contract.d.ts.map +1 -0
  110. package/dist/engine/config_precedence_contract.js +948 -0
  111. package/dist/engine/config_precedence_contract.js.map +1 -0
  112. package/dist/engine/conflict_gate.d.ts +13 -0
  113. package/dist/engine/conflict_gate.d.ts.map +1 -1
  114. package/dist/engine/conflict_gate.js +20 -2
  115. package/dist/engine/conflict_gate.js.map +1 -1
  116. package/dist/engine/consumable_asset_registry.d.ts +46 -0
  117. package/dist/engine/consumable_asset_registry.d.ts.map +1 -0
  118. package/dist/engine/consumable_asset_registry.js +758 -0
  119. package/dist/engine/consumable_asset_registry.js.map +1 -0
  120. package/dist/engine/contract_guard.d.ts +4 -0
  121. package/dist/engine/contract_guard.d.ts.map +1 -1
  122. package/dist/engine/contract_guard.js +15 -7
  123. package/dist/engine/contract_guard.js.map +1 -1
  124. package/dist/engine/convention_detector.d.ts.map +1 -1
  125. package/dist/engine/convention_detector.js +5 -2
  126. package/dist/engine/convention_detector.js.map +1 -1
  127. package/dist/engine/core_engineering_principles.d.ts +155 -0
  128. package/dist/engine/core_engineering_principles.d.ts.map +1 -0
  129. package/dist/engine/core_engineering_principles.js +426 -0
  130. package/dist/engine/core_engineering_principles.js.map +1 -0
  131. package/dist/engine/debt_reporter.d.ts.map +1 -1
  132. package/dist/engine/debt_reporter.js +3 -1
  133. package/dist/engine/debt_reporter.js.map +1 -1
  134. package/dist/engine/debt_tracker.d.ts.map +1 -1
  135. package/dist/engine/debt_tracker.js +9 -3
  136. package/dist/engine/debt_tracker.js.map +1 -1
  137. package/dist/engine/debugger.d.ts.map +1 -1
  138. package/dist/engine/debugger.js +2 -0
  139. package/dist/engine/debugger.js.map +1 -1
  140. package/dist/engine/decision_contract.d.ts +11 -2
  141. package/dist/engine/decision_contract.d.ts.map +1 -1
  142. package/dist/engine/decision_contract.js +17 -2
  143. package/dist/engine/decision_contract.js.map +1 -1
  144. package/dist/engine/delivery.d.ts +7 -0
  145. package/dist/engine/delivery.d.ts.map +1 -1
  146. package/dist/engine/delivery.js +89 -36
  147. package/dist/engine/delivery.js.map +1 -1
  148. package/dist/engine/dependency_scanner.d.ts.map +1 -1
  149. package/dist/engine/dependency_scanner.js +14 -9
  150. package/dist/engine/dependency_scanner.js.map +1 -1
  151. package/dist/engine/developer_sovereignty.d.ts.map +1 -1
  152. package/dist/engine/developer_sovereignty.js +8 -2
  153. package/dist/engine/developer_sovereignty.js.map +1 -1
  154. package/dist/engine/diff_ownership.d.ts.map +1 -1
  155. package/dist/engine/diff_ownership.js +8 -0
  156. package/dist/engine/diff_ownership.js.map +1 -1
  157. package/dist/engine/diff_ownership_store.d.ts +26 -10
  158. package/dist/engine/diff_ownership_store.d.ts.map +1 -1
  159. package/dist/engine/diff_ownership_store.js +47 -20
  160. package/dist/engine/diff_ownership_store.js.map +1 -1
  161. package/dist/engine/dual_layer_mechanism_registry.d.ts +66 -0
  162. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -0
  163. package/dist/engine/dual_layer_mechanism_registry.js +1077 -0
  164. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -0
  165. package/dist/engine/escape_report.d.ts +50 -0
  166. package/dist/engine/escape_report.d.ts.map +1 -1
  167. package/dist/engine/escape_report.js +38 -0
  168. package/dist/engine/escape_report.js.map +1 -1
  169. package/dist/engine/evolver.d.ts.map +1 -1
  170. package/dist/engine/evolver.js +12 -2
  171. package/dist/engine/evolver.js.map +1 -1
  172. package/dist/engine/exploration.d.ts.map +1 -1
  173. package/dist/engine/exploration.js +87 -0
  174. package/dist/engine/exploration.js.map +1 -1
  175. package/dist/engine/failure_classifier.d.ts.map +1 -1
  176. package/dist/engine/failure_classifier.js +8 -0
  177. package/dist/engine/failure_classifier.js.map +1 -1
  178. package/dist/engine/feasibility_checker.d.ts +8 -0
  179. package/dist/engine/feasibility_checker.d.ts.map +1 -1
  180. package/dist/engine/feasibility_checker.js +12 -0
  181. package/dist/engine/feasibility_checker.js.map +1 -1
  182. package/dist/engine/git_deps.d.ts +4 -1
  183. package/dist/engine/git_deps.d.ts.map +1 -1
  184. package/dist/engine/git_deps.js +5 -1
  185. package/dist/engine/git_deps.js.map +1 -1
  186. package/dist/engine/governance_report.d.ts +57 -1
  187. package/dist/engine/governance_report.d.ts.map +1 -1
  188. package/dist/engine/governance_report.js +91 -1
  189. package/dist/engine/governance_report.js.map +1 -1
  190. package/dist/engine/impact_analyzer.d.ts.map +1 -1
  191. package/dist/engine/impact_analyzer.js +5 -1
  192. package/dist/engine/impact_analyzer.js.map +1 -1
  193. package/dist/engine/implementation_roadmap_registry.d.ts +105 -0
  194. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -0
  195. package/dist/engine/implementation_roadmap_registry.js +813 -0
  196. package/dist/engine/implementation_roadmap_registry.js.map +1 -0
  197. package/dist/engine/input_material_contract_registry.d.ts +185 -0
  198. package/dist/engine/input_material_contract_registry.d.ts.map +1 -0
  199. package/dist/engine/input_material_contract_registry.js +563 -0
  200. package/dist/engine/input_material_contract_registry.js.map +1 -0
  201. package/dist/engine/intent_expander.d.ts +8 -27
  202. package/dist/engine/intent_expander.d.ts.map +1 -1
  203. package/dist/engine/intent_expander.js +1170 -139
  204. package/dist/engine/intent_expander.js.map +1 -1
  205. package/dist/engine/intent_router.d.ts +82 -0
  206. package/dist/engine/intent_router.d.ts.map +1 -0
  207. package/dist/engine/intent_router.js +458 -0
  208. package/dist/engine/intent_router.js.map +1 -0
  209. package/dist/engine/io_controller.d.ts.map +1 -1
  210. package/dist/engine/io_controller.js +25 -13
  211. package/dist/engine/io_controller.js.map +1 -1
  212. package/dist/engine/java_quality_guard.d.ts.map +1 -1
  213. package/dist/engine/java_quality_guard.js +8 -4
  214. package/dist/engine/java_quality_guard.js.map +1 -1
  215. package/dist/engine/job_manager.d.ts +35 -0
  216. package/dist/engine/job_manager.d.ts.map +1 -1
  217. package/dist/engine/job_manager.js +53 -9
  218. package/dist/engine/job_manager.js.map +1 -1
  219. package/dist/engine/knowledge_config_loader.d.ts +12 -1
  220. package/dist/engine/knowledge_config_loader.d.ts.map +1 -1
  221. package/dist/engine/knowledge_config_loader.js +50 -10
  222. package/dist/engine/knowledge_config_loader.js.map +1 -1
  223. package/dist/engine/knowledge_injection_boundary.d.ts +56 -0
  224. package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -0
  225. package/dist/engine/knowledge_injection_boundary.js +561 -0
  226. package/dist/engine/knowledge_injection_boundary.js.map +1 -0
  227. package/dist/engine/knowledge_manager.d.ts +73 -0
  228. package/dist/engine/knowledge_manager.d.ts.map +1 -1
  229. package/dist/engine/knowledge_manager.js +163 -21
  230. package/dist/engine/knowledge_manager.js.map +1 -1
  231. package/dist/engine/knowledge_sovereignty.d.ts +1 -0
  232. package/dist/engine/knowledge_sovereignty.d.ts.map +1 -1
  233. package/dist/engine/knowledge_sovereignty.js +8 -3
  234. package/dist/engine/knowledge_sovereignty.js.map +1 -1
  235. package/dist/engine/llm_gateway.d.ts +74 -3
  236. package/dist/engine/llm_gateway.d.ts.map +1 -1
  237. package/dist/engine/llm_gateway.js +75 -4
  238. package/dist/engine/llm_gateway.js.map +1 -1
  239. package/dist/engine/main_path_integration_contract.d.ts +383 -0
  240. package/dist/engine/main_path_integration_contract.d.ts.map +1 -0
  241. package/dist/engine/main_path_integration_contract.js +1581 -0
  242. package/dist/engine/main_path_integration_contract.js.map +1 -0
  243. package/dist/engine/mechanism_contract_registry.d.ts +59 -0
  244. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -0
  245. package/dist/engine/mechanism_contract_registry.js +484 -0
  246. package/dist/engine/mechanism_contract_registry.js.map +1 -0
  247. package/dist/engine/migration_guard.d.ts.map +1 -1
  248. package/dist/engine/migration_guard.js +24 -15
  249. package/dist/engine/migration_guard.js.map +1 -1
  250. package/dist/engine/mutation_audit.d.ts +10 -0
  251. package/dist/engine/mutation_audit.d.ts.map +1 -1
  252. package/dist/engine/mutation_audit.js +19 -2
  253. package/dist/engine/mutation_audit.js.map +1 -1
  254. package/dist/engine/observability.d.ts.map +1 -1
  255. package/dist/engine/observability.js +17 -6
  256. package/dist/engine/observability.js.map +1 -1
  257. package/dist/engine/onboarding.d.ts.map +1 -1
  258. package/dist/engine/onboarding.js +20 -4
  259. package/dist/engine/onboarding.js.map +1 -1
  260. package/dist/engine/policy_drift_detector.d.ts +6 -0
  261. package/dist/engine/policy_drift_detector.d.ts.map +1 -1
  262. package/dist/engine/policy_drift_detector.js +16 -0
  263. package/dist/engine/policy_drift_detector.js.map +1 -1
  264. package/dist/engine/privacy_secret_contract.d.ts +320 -0
  265. package/dist/engine/privacy_secret_contract.d.ts.map +1 -0
  266. package/dist/engine/privacy_secret_contract.js +874 -0
  267. package/dist/engine/privacy_secret_contract.js.map +1 -0
  268. package/dist/engine/regression_matrix.d.ts +21 -8
  269. package/dist/engine/regression_matrix.d.ts.map +1 -1
  270. package/dist/engine/regression_matrix.js +37 -8
  271. package/dist/engine/regression_matrix.js.map +1 -1
  272. package/dist/engine/risk_sampler.d.ts +6 -0
  273. package/dist/engine/risk_sampler.d.ts.map +1 -1
  274. package/dist/engine/risk_sampler.js +9 -0
  275. package/dist/engine/risk_sampler.js.map +1 -1
  276. package/dist/engine/runtime_safety.d.ts.map +1 -1
  277. package/dist/engine/runtime_safety.js +7 -3
  278. package/dist/engine/runtime_safety.js.map +1 -1
  279. package/dist/engine/scaffolder.d.ts.map +1 -1
  280. package/dist/engine/scaffolder.js +7 -1
  281. package/dist/engine/scaffolder.js.map +1 -1
  282. package/dist/engine/scope_controller.d.ts.map +1 -1
  283. package/dist/engine/scope_controller.js +12 -1
  284. package/dist/engine/scope_controller.js.map +1 -1
  285. package/dist/engine/scope_lease.d.ts +43 -0
  286. package/dist/engine/scope_lease.d.ts.map +1 -1
  287. package/dist/engine/scope_lease.js +44 -0
  288. package/dist/engine/scope_lease.js.map +1 -1
  289. package/dist/engine/semantic_evidence.d.ts +6 -0
  290. package/dist/engine/semantic_evidence.d.ts.map +1 -1
  291. package/dist/engine/semantic_evidence.js +9 -0
  292. package/dist/engine/semantic_evidence.js.map +1 -1
  293. package/dist/engine/task_context.d.ts +36 -1
  294. package/dist/engine/task_context.d.ts.map +1 -1
  295. package/dist/engine/task_context.js +252 -13
  296. package/dist/engine/task_context.js.map +1 -1
  297. package/dist/engine/task_planner.d.ts.map +1 -1
  298. package/dist/engine/task_planner.js +13 -3
  299. package/dist/engine/task_planner.js.map +1 -1
  300. package/dist/engine/team_awareness.d.ts.map +1 -1
  301. package/dist/engine/team_awareness.js +8 -7
  302. package/dist/engine/team_awareness.js.map +1 -1
  303. package/dist/engine/template_mechanism_auditor.d.ts +93 -0
  304. package/dist/engine/template_mechanism_auditor.d.ts.map +1 -0
  305. package/dist/engine/template_mechanism_auditor.js +622 -0
  306. package/dist/engine/template_mechanism_auditor.js.map +1 -0
  307. package/dist/engine/test_generator.d.ts.map +1 -1
  308. package/dist/engine/test_generator.js +6 -0
  309. package/dist/engine/test_generator.js.map +1 -1
  310. package/dist/engine/test_quality.d.ts +6 -0
  311. package/dist/engine/test_quality.d.ts.map +1 -1
  312. package/dist/engine/test_quality.js +26 -10
  313. package/dist/engine/test_quality.js.map +1 -1
  314. package/dist/engine/tool_invocation_contract_registry.d.ts +136 -0
  315. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -0
  316. package/dist/engine/tool_invocation_contract_registry.js +731 -0
  317. package/dist/engine/tool_invocation_contract_registry.js.map +1 -0
  318. package/dist/engine/traceability.d.ts +3 -0
  319. package/dist/engine/traceability.d.ts.map +1 -1
  320. package/dist/engine/traceability.js +12 -4
  321. package/dist/engine/traceability.js.map +1 -1
  322. package/dist/engine/user_feedback_contract.d.ts +162 -0
  323. package/dist/engine/user_feedback_contract.d.ts.map +1 -0
  324. package/dist/engine/user_feedback_contract.js +356 -0
  325. package/dist/engine/user_feedback_contract.js.map +1 -0
  326. package/dist/engine/verifier.d.ts +6 -1
  327. package/dist/engine/verifier.d.ts.map +1 -1
  328. package/dist/engine/verifier.js +114 -1
  329. package/dist/engine/verifier.js.map +1 -1
  330. package/dist/engine/workflow_contract_registry.d.ts +70 -0
  331. package/dist/engine/workflow_contract_registry.d.ts.map +1 -0
  332. package/dist/engine/workflow_contract_registry.js +501 -0
  333. package/dist/engine/workflow_contract_registry.js.map +1 -0
  334. package/dist/engine/workspace_resumer.d.ts.map +1 -1
  335. package/dist/engine/workspace_resumer.js +8 -0
  336. package/dist/engine/workspace_resumer.js.map +1 -1
  337. package/dist/engine/zero_config_init.d.ts +67 -2
  338. package/dist/engine/zero_config_init.d.ts.map +1 -1
  339. package/dist/engine/zero_config_init.js +410 -28
  340. package/dist/engine/zero_config_init.js.map +1 -1
  341. package/dist/git/operations.d.ts +101 -0
  342. package/dist/git/operations.d.ts.map +1 -1
  343. package/dist/git/operations.js +125 -9
  344. package/dist/git/operations.js.map +1 -1
  345. package/dist/index.d.ts +1 -1
  346. package/dist/index.js +16 -5
  347. package/dist/index.js.map +1 -1
  348. package/dist/knowledge/conflict_detector.d.ts +6 -0
  349. package/dist/knowledge/conflict_detector.d.ts.map +1 -1
  350. package/dist/knowledge/conflict_detector.js +7 -0
  351. package/dist/knowledge/conflict_detector.js.map +1 -1
  352. package/dist/knowledge/health_checker.d.ts +16 -0
  353. package/dist/knowledge/health_checker.d.ts.map +1 -1
  354. package/dist/knowledge/health_checker.js +24 -1
  355. package/dist/knowledge/health_checker.js.map +1 -1
  356. package/dist/knowledge/index_manager.d.ts +140 -2
  357. package/dist/knowledge/index_manager.d.ts.map +1 -1
  358. package/dist/knowledge/index_manager.js +186 -26
  359. package/dist/knowledge/index_manager.js.map +1 -1
  360. package/dist/knowledge/loader.d.ts +8 -1
  361. package/dist/knowledge/loader.d.ts.map +1 -1
  362. package/dist/knowledge/loader.js +56 -2
  363. package/dist/knowledge/loader.js.map +1 -1
  364. package/dist/knowledge/writer.d.ts +49 -1
  365. package/dist/knowledge/writer.d.ts.map +1 -1
  366. package/dist/knowledge/writer.js +55 -1
  367. package/dist/knowledge/writer.js.map +1 -1
  368. package/dist/types.d.ts +255 -1
  369. package/dist/types.d.ts.map +1 -1
  370. package/dist/utils/logger.d.ts +3 -0
  371. package/dist/utils/logger.d.ts.map +1 -0
  372. package/dist/utils/logger.js +29 -0
  373. package/dist/utils/logger.js.map +1 -0
  374. package/package.json +7 -7
  375. package/templates/knowledge/checklists//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +16 -0
  376. package/templates/knowledge/checklists//345/267/245/344/275/234/346/265/201/351/252/214/346/224/266/346/270/205/345/215/225.md +17 -0
  377. package/templates/knowledge/checklists//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/351/252/214/346/224/266/346/270/205/345/215/225.md +43 -0
  378. package/templates/knowledge/checklists//347/237/245/350/257/206/346/263/250/345/205/245/351/252/214/346/224/266/346/270/205/345/215/225.md +17 -0
  379. package/templates/knowledge/checklists//351/232/220/347/247/201/345/256/241/346/237/245/346/270/205/345/215/225.md +15 -0
  380. package/templates/knowledge/checklists//351/252/214/350/257/201/351/252/214/346/224/266/346/270/205/345/215/225.md +16 -0
  381. package/templates/knowledge/patterns/core//345/206/263/347/255/226/347/275/221/345/205/263.md +1 -0
  382. package/templates/knowledge/procedures//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/350/257/201/346/265/201/347/250/213.md +23 -0
  383. package/templates/knowledge/procedures//345/221/275/344/273/244/346/211/247/350/241/214/346/265/201/347/250/213.md +19 -0
  384. package/templates/knowledge/procedures//345/267/245/345/205/267/350/260/203/347/224/250/346/265/201/347/250/213.md +15 -0
  385. package/templates/knowledge/procedures//346/204/217/345/233/276/350/267/257/347/224/261/346/265/201/347/250/213.md +15 -0
  386. package/templates/knowledge/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 +1 -1
  387. package/templates/knowledge/procedures//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205/346/265/201/347/250/213.md +53 -0
  388. package/templates/knowledge/rules//344/272/247/347/211/251/345/245/221/347/272/246/350/247/204/345/210/231.md +21 -0
  389. package/templates/knowledge/rules//345/221/275/344/273/244/346/211/247/350/241/214/350/247/204/345/210/231.md +25 -0
  390. package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246/350/247/204/345/210/231.md +20 -0
  391. package/templates/knowledge/rules//345/267/245/345/205/267/350/260/203/347/224/250/350/247/204/345/210/231.md +25 -0
  392. package/templates/knowledge/rules//346/204/217/345/233/276/350/267/257/347/224/261/350/247/204/345/210/231.md +26 -0
  393. package/templates/knowledge/rules//346/211/247/350/241/214/345/256/210/345/215/253/350/257/204/344/274/260/350/247/204/345/210/231.md +24 -0
  394. package/templates/knowledge/rules//346/225/217/346/204/237/344/277/241/346/201/257/345/244/204/347/220/206/350/247/204/345/210/231.md +20 -0
  395. package/templates/knowledge/rules//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +125 -0
  396. package/templates/knowledge/rules//346/263/250/345/206/214/350/241/250/345/237/272/347/241/200/350/256/276/346/226/275/350/247/204/345/210/231.md +26 -0
  397. package/templates/knowledge/rules//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246/350/247/204/345/210/231.md +22 -0
  398. package/templates/knowledge/rules//347/237/245/350/257/206/346/263/250/345/205/245/350/276/271/347/225/214/350/247/204/345/210/231.md +25 -0
  399. package/templates/knowledge/rules//350/276/223/345/205/245/346/235/220/346/226/231/345/245/221/347/272/246/350/247/204/345/210/231.md +27 -0
  400. package/templates/knowledge/rules//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247/350/247/204/345/210/231.md +22 -0
  401. package/templates/knowledge/rules//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260/350/247/204/345/210/231.md +24 -0
  402. package/templates/knowledge/rules//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226/350/247/204/345/210/231.md +28 -0
  403. package/templates/knowledge/rules//351/252/214/350/257/201/345/245/221/347/272/246/350/247/204/345/210/231.md +25 -0
  404. package/templates/knowledge/templates/{review_summary.md → /345/256/241/346/237/245/346/221/230/350/246/201.md} +1 -1
  405. package/templates/config.yaml +0 -53
@@ -0,0 +1,731 @@
1
+ /**
2
+ * Tool Invocation Contract Registry
3
+ *
4
+ * MCP 工具 / 适配器边界受控自由契约。
5
+ * 每个工具声明类别 (strict_controlled / read_only_bypass / normal_controlled)、
6
+ * 副作用、授权要求、允许/禁止后续工具。
7
+ * 适配器必须遵守 Adapter Workflow Policy。
8
+ * 治理检查防止 8 类退化。
9
+ */
10
+ // ── Adapter Workflow Policy ──
11
+ /** 适配器工作流策略规则集 */
12
+ export const ADAPTER_WORKFLOW_POLICY = [
13
+ {
14
+ id: "awp-01",
15
+ rule: "工具返回的 next_allowed_tools 是下一步默认允许集合",
16
+ enforcement: "hard_fail",
17
+ description: "适配器必须使用工具返回的 next_allowed_tools 作为下一步调用的允许集合",
18
+ },
19
+ {
20
+ id: "awp-02",
21
+ rule: "适配器不得隐式调用 strict controlled 工具",
22
+ enforcement: "hard_fail",
23
+ description: "strict controlled 工具必须在 next_allowed_tools 中且显式授权才能调用",
24
+ },
25
+ {
26
+ id: "awp-03",
27
+ rule: "适配器不得把 read-only bypass 结果当成完成态",
28
+ enforcement: "hard_fail",
29
+ description: "read-only bypass 工具的输出只能作为参考,不能作为任务完成标志",
30
+ },
31
+ {
32
+ id: "awp-04",
33
+ rule: "适配器不得把 advisory warning 当成 enforced gate",
34
+ enforcement: "warning",
35
+ description: "advisory warning 不应阻止正常流程,除非用户明确要求",
36
+ },
37
+ {
38
+ id: "awp-05",
39
+ rule: "适配器遇到 ToolInvocationViolation 必须按 severity 处理",
40
+ enforcement: "hard_fail",
41
+ description: "hard_fail 违规必须停止执行,require_human 必须等待用户确认,warning 必须记录",
42
+ },
43
+ {
44
+ id: "awp-06",
45
+ rule: "适配器最终输出必须中文优先,暴露 warning、degraded、manual_required",
46
+ enforcement: "advisory",
47
+ description: "最终输出应暴露必要 warning、degraded、manual_required 信息",
48
+ },
49
+ ];
50
+ // ── 32 Tool Contracts ──
51
+ const TOOL_INVOCATION_CONTRACTS = [
52
+ // ── read_only_bypass (20 tools) ──
53
+ {
54
+ tool_name: "sf_classify",
55
+ category: "read_only_bypass",
56
+ side_effects: ["none"],
57
+ requires_authorization: false,
58
+ requires_workflow: false,
59
+ description: "意图分类,确定任务类型、风险、复杂度和执行策略",
60
+ default_next_tools: ["sf_expand", "sf_plan", "sf_explore", "sf_analyze", "sf_status", "sf_debug", "sf_feasibility_check"],
61
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold", "sf_verify", "sf_learn", "sf_knowledge_add", "sf_knowledge_update", "sf_capability_update"],
62
+ },
63
+ {
64
+ tool_name: "sf_status",
65
+ category: "read_only_bypass",
66
+ side_effects: ["none"],
67
+ requires_authorization: false,
68
+ requires_workflow: false,
69
+ description: "查询任务/系统状态",
70
+ default_next_tools: ["sf_classify", "sf_plan", "sf_explore", "sf_debug", "sf_knowledge_audit", "sf_governance_report", "sf_observability", "sf_team_status"],
71
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
72
+ },
73
+ {
74
+ tool_name: "sf_plan",
75
+ category: "read_only_bypass",
76
+ side_effects: ["none"],
77
+ requires_authorization: false,
78
+ requires_workflow: false,
79
+ description: "任务规划,拆解子任务和执行顺序",
80
+ default_next_tools: ["sf_plan_advance", "sf_expand", "sf_status", "sf_explore", "sf_debug", "sf_classify"],
81
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
82
+ },
83
+ {
84
+ tool_name: "sf_analyze",
85
+ category: "read_only_bypass",
86
+ side_effects: ["none"],
87
+ requires_authorization: false,
88
+ requires_workflow: false,
89
+ description: "影响分析,评估变更范围和风险",
90
+ default_next_tools: ["sf_plan", "sf_expand", "sf_status", "sf_explore", "sf_debug", "sf_classify"],
91
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
92
+ },
93
+ {
94
+ tool_name: "sf_explore",
95
+ category: "read_only_bypass",
96
+ side_effects: ["none"],
97
+ requires_authorization: false,
98
+ requires_workflow: false,
99
+ description: "方案探索,只读分析可选方案",
100
+ default_next_tools: ["sf_plan", "sf_expand", "sf_status", "sf_analyze", "sf_debug", "sf_classify"],
101
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
102
+ },
103
+ {
104
+ tool_name: "sf_feasibility_check",
105
+ category: "read_only_bypass",
106
+ side_effects: ["none"],
107
+ requires_authorization: false,
108
+ requires_workflow: false,
109
+ description: "可行性预判",
110
+ default_next_tools: ["sf_plan", "sf_status", "sf_debug", "sf_classify"],
111
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
112
+ },
113
+ {
114
+ tool_name: "sf_review",
115
+ category: "read_only_bypass",
116
+ side_effects: ["none"],
117
+ requires_authorization: false,
118
+ requires_workflow: false,
119
+ description: "代码审查,只读分析代码质量、安全和风险",
120
+ default_next_tools: ["sf_verify", "sf_status", "sf_debug", "sf_contract_check", "sf_deliver"],
121
+ forbidden_next_tools: ["sf_scaffold"],
122
+ },
123
+ {
124
+ tool_name: "sf_test_guide",
125
+ category: "read_only_bypass",
126
+ side_effects: ["none"],
127
+ requires_authorization: false,
128
+ requires_workflow: false,
129
+ description: "测试生成指南",
130
+ default_next_tools: ["sf_verify", "sf_status", "sf_debug"],
131
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
132
+ },
133
+ {
134
+ tool_name: "sf_test_quality",
135
+ category: "read_only_bypass",
136
+ side_effects: ["none"],
137
+ requires_authorization: false,
138
+ requires_workflow: false,
139
+ description: "测试质量报告",
140
+ default_next_tools: ["sf_status", "sf_debug"],
141
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
142
+ },
143
+ {
144
+ tool_name: "sf_dependency_scan",
145
+ category: "read_only_bypass",
146
+ side_effects: ["none"],
147
+ requires_authorization: false,
148
+ requires_workflow: false,
149
+ description: "依赖漏洞扫描",
150
+ default_next_tools: ["sf_status", "sf_debug"],
151
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
152
+ },
153
+ {
154
+ tool_name: "sf_debt_report",
155
+ category: "read_only_bypass",
156
+ side_effects: ["none"],
157
+ requires_authorization: false,
158
+ requires_workflow: false,
159
+ description: "技术债务报告",
160
+ default_next_tools: ["sf_status", "sf_debug"],
161
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
162
+ },
163
+ {
164
+ tool_name: "sf_coord_check",
165
+ category: "read_only_bypass",
166
+ side_effects: ["none"],
167
+ requires_authorization: false,
168
+ requires_workflow: false,
169
+ description: "变更协调检查,冲突风险和跨仓库关联",
170
+ default_next_tools: ["sf_deliver", "sf_status", "sf_debug", "sf_review", "sf_contract_check"],
171
+ forbidden_next_tools: ["sf_scaffold"],
172
+ },
173
+ {
174
+ tool_name: "sf_contract_check",
175
+ category: "read_only_bypass",
176
+ side_effects: ["none"],
177
+ requires_authorization: false,
178
+ requires_workflow: false,
179
+ description: "契约变更检查",
180
+ default_next_tools: ["sf_deliver", "sf_status", "sf_debug", "sf_review"],
181
+ forbidden_next_tools: ["sf_scaffold"],
182
+ },
183
+ {
184
+ tool_name: "sf_onboard",
185
+ category: "read_only_bypass",
186
+ side_effects: ["none"],
187
+ requires_authorization: false,
188
+ requires_workflow: false,
189
+ description: "新人引导",
190
+ default_next_tools: ["sf_status", "sf_plan", "sf_explore", "sf_debug", "sf_classify"],
191
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
192
+ },
193
+ {
194
+ tool_name: "sf_team_status",
195
+ category: "read_only_bypass",
196
+ side_effects: ["none"],
197
+ requires_authorization: false,
198
+ requires_workflow: false,
199
+ description: "团队状态查询",
200
+ default_next_tools: ["sf_status", "sf_debug"],
201
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
202
+ },
203
+ {
204
+ tool_name: "sf_debug",
205
+ category: "read_only_bypass",
206
+ side_effects: ["none"],
207
+ requires_authorization: false,
208
+ requires_workflow: false,
209
+ description: "智能排障,只读诊断",
210
+ default_next_tools: ["sf_status", "sf_classify", "sf_explore", "sf_analyze", "sf_debug"],
211
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
212
+ },
213
+ {
214
+ tool_name: "sf_observability",
215
+ category: "read_only_bypass",
216
+ side_effects: ["none"],
217
+ requires_authorization: false,
218
+ requires_workflow: false,
219
+ description: "系统可观测性报告",
220
+ default_next_tools: ["sf_status", "sf_debug"],
221
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
222
+ },
223
+ {
224
+ tool_name: "sf_migration_check",
225
+ category: "read_only_bypass",
226
+ side_effects: ["none"],
227
+ requires_authorization: false,
228
+ requires_workflow: false,
229
+ description: "数据库迁移安全检查",
230
+ default_next_tools: ["sf_status", "sf_debug"],
231
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
232
+ },
233
+ {
234
+ tool_name: "sf_knowledge_audit",
235
+ category: "read_only_bypass",
236
+ side_effects: ["none"],
237
+ requires_authorization: false,
238
+ requires_workflow: false,
239
+ description: "知识审计,只读检查知识状态",
240
+ default_next_tools: ["sf_status", "sf_debug", "sf_knowledge_update", "sf_knowledge_add"],
241
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
242
+ },
243
+ {
244
+ tool_name: "sf_governance_report",
245
+ category: "read_only_bypass",
246
+ side_effects: ["none"],
247
+ requires_authorization: false,
248
+ requires_workflow: false,
249
+ description: "治理报告",
250
+ default_next_tools: ["sf_status", "sf_debug"],
251
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
252
+ },
253
+ {
254
+ tool_name: "sf_audit_integration",
255
+ category: "read_only_bypass",
256
+ side_effects: ["none"],
257
+ requires_authorization: false,
258
+ requires_workflow: false,
259
+ description: "主链路集成审计,检测孤岛模块(只读分析)",
260
+ default_next_tools: ["sf_status", "sf_debug", "sf_governance_report"],
261
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
262
+ },
263
+ // ── normal_controlled (2 tools) ──
264
+ {
265
+ tool_name: "sf_expand",
266
+ category: "normal_controlled",
267
+ side_effects: ["task_context_write"],
268
+ requires_authorization: false,
269
+ requires_workflow: true,
270
+ description: "意图扩展,生成执行 prompt、scope、验收条件",
271
+ default_next_tools: ["sf_verify", "sf_review", "sf_deliver", "sf_status", "sf_plan", "sf_debug", "sf_scaffold", "sf_coord_check"],
272
+ forbidden_next_tools: ["sf_classify", "sf_expand"],
273
+ },
274
+ {
275
+ tool_name: "sf_plan_advance",
276
+ category: "normal_controlled",
277
+ side_effects: ["task_context_write"],
278
+ requires_authorization: false,
279
+ requires_workflow: true,
280
+ description: "推进规划到下一步",
281
+ default_next_tools: ["sf_expand", "sf_plan", "sf_status", "sf_debug"],
282
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold", "sf_verify"],
283
+ },
284
+ // ── strict_controlled (10 tools) ──
285
+ {
286
+ tool_name: "sf_verify",
287
+ category: "strict_controlled",
288
+ side_effects: ["command_execution", "task_context_write"],
289
+ requires_authorization: true,
290
+ requires_workflow: true,
291
+ description: "验证,执行构建/测试命令,生成验证报告(含只读计划模式)",
292
+ default_next_tools: ["sf_learn", "sf_review", "sf_status", "sf_debug", "sf_deliver"],
293
+ forbidden_next_tools: ["sf_classify", "sf_expand"],
294
+ },
295
+ {
296
+ tool_name: "sf_learn",
297
+ category: "strict_controlled",
298
+ side_effects: ["knowledge_write", "task_context_write"],
299
+ requires_authorization: true,
300
+ requires_workflow: true,
301
+ description: "学习,从任务结果提取新知识",
302
+ default_next_tools: ["sf_deliver", "sf_verify", "sf_status", "sf_knowledge_audit", "sf_knowledge_update"],
303
+ forbidden_next_tools: ["sf_classify", "sf_expand"],
304
+ },
305
+ {
306
+ tool_name: "sf_deliver",
307
+ category: "strict_controlled",
308
+ side_effects: ["git_commit", "git_push", "pr_create", "task_context_write"],
309
+ requires_authorization: true,
310
+ requires_workflow: true,
311
+ description: "交付,执行 git commit/push/PR,需要显式用户授权",
312
+ default_next_tools: ["sf_status", "sf_knowledge_audit", "sf_knowledge_update", "sf_governance_report"],
313
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold", "sf_classify", "sf_expand", "sf_verify"],
314
+ },
315
+ {
316
+ tool_name: "sf_scaffold",
317
+ category: "strict_controlled",
318
+ side_effects: ["file_write", "task_context_write"],
319
+ requires_authorization: true,
320
+ requires_workflow: true,
321
+ description: "脚手架生成,写入新文件到项目",
322
+ default_next_tools: ["sf_verify", "sf_status", "sf_debug"],
323
+ forbidden_next_tools: ["sf_scaffold", "sf_deliver"],
324
+ },
325
+ {
326
+ tool_name: "sf_knowledge_add",
327
+ category: "strict_controlled",
328
+ side_effects: ["knowledge_write", "task_context_write"],
329
+ requires_authorization: true,
330
+ requires_workflow: true,
331
+ description: "添加知识条目到知识库",
332
+ default_next_tools: ["sf_status", "sf_knowledge_audit", "sf_debug"],
333
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
334
+ },
335
+ {
336
+ tool_name: "sf_knowledge_update",
337
+ category: "strict_controlled",
338
+ side_effects: ["knowledge_write", "task_context_write"],
339
+ requires_authorization: true,
340
+ requires_workflow: true,
341
+ description: "更新知识条目",
342
+ default_next_tools: ["sf_status", "sf_knowledge_audit", "sf_debug"],
343
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
344
+ },
345
+ {
346
+ tool_name: "sf_audit_sample",
347
+ category: "read_only_bypass",
348
+ side_effects: ["none"],
349
+ requires_authorization: false,
350
+ requires_workflow: false,
351
+ description: "审计抽样,从审计池按风险加权抽样生成抽检清单(只读)",
352
+ default_next_tools: ["sf_status", "sf_debug", "sf_governance_report"],
353
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
354
+ },
355
+ {
356
+ tool_name: "sf_escape_report",
357
+ category: "normal_controlled",
358
+ side_effects: ["task_context_write"],
359
+ requires_authorization: false,
360
+ requires_workflow: false,
361
+ description: "逃逸报告,记录逃逸/误伤/工具故障",
362
+ default_next_tools: ["sf_status", "sf_debug", "sf_governance_report"],
363
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
364
+ },
365
+ {
366
+ tool_name: "sf_capability_update",
367
+ category: "normal_controlled",
368
+ side_effects: ["task_context_write", "config_write"],
369
+ requires_authorization: true,
370
+ requires_workflow: false,
371
+ description: "能力状态更新,需要 confirm=true、confirmed_by 非空、evidence_ids 匹配 escape report。支持 dry_run 校验",
372
+ default_next_tools: ["sf_status", "sf_debug", "sf_governance_report"],
373
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold"],
374
+ },
375
+ {
376
+ tool_name: "sf_resume_workspace",
377
+ category: "normal_controlled",
378
+ side_effects: ["task_context_write"],
379
+ requires_authorization: false,
380
+ requires_workflow: false,
381
+ description: "恢复工作区,扫描中断工单并播报当前进度",
382
+ default_next_tools: ["sf_status", "sf_classify", "sf_debug"],
383
+ forbidden_next_tools: ["sf_deliver", "sf_scaffold", "sf_verify", "sf_learn"],
384
+ },
385
+ ];
386
+ // ── Query functions ──
387
+ /** 列出所有已注册的工具调用契约 */
388
+ export function listToolInvocationContracts() {
389
+ console.error("[soloForge] 工具调用契约: 列出所有工具契约");
390
+ return TOOL_INVOCATION_CONTRACTS;
391
+ }
392
+ /** 按工具名称查找对应的调用契约 */
393
+ export function findToolInvocationContractByName(toolName) {
394
+ console.error("[soloForge] 工具调用契约: 按名称查找契约 ", toolName);
395
+ return TOOL_INVOCATION_CONTRACTS.find((c) => c.tool_name === toolName);
396
+ }
397
+ /** 查找所有严格受控工具的契约 */
398
+ export function findStrictControlledTools() {
399
+ console.error("[soloForge] 工具调用契约: 查找严格受控工具");
400
+ return TOOL_INVOCATION_CONTRACTS.filter((c) => c.category === "strict_controlled");
401
+ }
402
+ /** 查找所有只读旁路工具的契约 */
403
+ export function findReadOnlyBypassTools() {
404
+ console.error("[soloForge] 工具调用契约: 查找只读旁路工具");
405
+ return TOOL_INVOCATION_CONTRACTS.filter((c) => c.category === "read_only_bypass");
406
+ }
407
+ /** 按类别查找工具调用契约 */
408
+ export function findByCategory(category) {
409
+ console.error("[soloForge] 工具调用契约: 按类别查找工具 ", category);
410
+ return TOOL_INVOCATION_CONTRACTS.filter((c) => c.category === category);
411
+ }
412
+ // ── Side effect helpers ──
413
+ const WRITE_SIDE_EFFECTS = [
414
+ "file_write",
415
+ "knowledge_write",
416
+ "config_write",
417
+ "command_execution",
418
+ "git_commit",
419
+ "git_push",
420
+ "pr_create",
421
+ "external_write",
422
+ ];
423
+ /** 检查副作用列表是否包含写入类副作用 */
424
+ export function hasWriteSideEffect(effects) {
425
+ console.error("[soloForge] 工具调用契约: 检查写入副作用 ", effects);
426
+ return effects.some((e) => WRITE_SIDE_EFFECTS.includes(e));
427
+ }
428
+ // ── Runtime: createToolTrace ──
429
+ /** 创建工具调用追踪记录 */
430
+ export function createToolTrace(params) {
431
+ console.error("[soloForge] 工具调用契约: 创建工具追踪 ", { tool_name: params.tool_name, invocation_id: params.invocation_id });
432
+ const contract = findToolInvocationContractByName(params.tool_name);
433
+ if (!contract) {
434
+ console.error("[soloForge] 工具调用契约: 未找到契约定义,使用默认值 ", params.tool_name);
435
+ }
436
+ return {
437
+ tool_name: params.tool_name,
438
+ invocation_id: params.invocation_id,
439
+ task_id: params.task_id,
440
+ workflow_id: params.workflow_id,
441
+ route: params.route,
442
+ execution_shape: params.execution_shape,
443
+ contract_ids: params.contract_ids ?? [],
444
+ capability_ids: params.capability_ids ?? [],
445
+ guard_report_id: params.guard_report_id,
446
+ degraded: params.degraded ?? false,
447
+ warnings: params.warnings ?? [],
448
+ side_effects: params.actual_side_effects,
449
+ next_allowed_tools: params.next_allowed_tools ?? contract?.default_next_tools ?? [],
450
+ forbidden_tools: params.forbidden_tools ?? contract?.forbidden_next_tools ?? [],
451
+ authorization: params.authorization,
452
+ bypass: params.bypass,
453
+ };
454
+ }
455
+ // ── Runtime: createViolation ──
456
+ /** 创建工具调用违规记录 */
457
+ export function createViolation(params) {
458
+ console.error("[soloForge] 工具调用契约: 创建违规记录 ", { tool_name: params.tool_name, violation_type: params.violation_type });
459
+ const contract = findToolInvocationContractByName(params.tool_name);
460
+ const severity = classifyViolationSeverity(params.violation_type, contract?.category);
461
+ return {
462
+ invocation_id: params.invocation_id,
463
+ tool_name: params.tool_name,
464
+ violation_type: params.violation_type,
465
+ severity,
466
+ reason: params.reason,
467
+ recovery: params.recovery,
468
+ };
469
+ }
470
+ // ── Runtime: classifyViolationSeverity ──
471
+ /** 根据违规类型和工具类别分类违规严重级别 */
472
+ export function classifyViolationSeverity(violationType, toolCategory) {
473
+ console.error("[soloForge] 工具调用契约: 分类违规严重度 ", { violationType, toolCategory });
474
+ switch (violationType) {
475
+ case "not_allowed_next_tool":
476
+ console.error("[soloForge] 工具调用契约: 不允许的后续工具 ", toolCategory);
477
+ return toolCategory === "strict_controlled"
478
+ ? "hard_fail"
479
+ : toolCategory === "read_only_bypass"
480
+ ? "warning"
481
+ : "require_human";
482
+ case "side_effect_exceeded":
483
+ return "hard_fail";
484
+ case "missing_authorization":
485
+ return toolCategory === "strict_controlled"
486
+ ? "hard_fail"
487
+ : "require_human";
488
+ case "guard_blocked":
489
+ return "hard_fail";
490
+ case "read_only_bypass_write":
491
+ return "hard_fail";
492
+ case "contract_state_mismatch":
493
+ return "hard_fail";
494
+ case "trace_missing":
495
+ return "warning";
496
+ }
497
+ }
498
+ /** 验证工具调用是否符合契约约束,返回违规列表 */
499
+ export function validateToolInvocation(params) {
500
+ console.error("[soloForge] 工具调用契约: 验证工具调用 ", { tool_name: params.tool_name, workflow_id: params.workflow_id });
501
+ const violations = [];
502
+ const iid = `violation-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
503
+ const baseContract = findToolInvocationContractByName(params.tool_name);
504
+ const contract = params._contractOverride ?? baseContract;
505
+ if (params._contractOverride) {
506
+ console.error("[soloForge] 工具调用契约: 使用覆盖契约 ", params.tool_name);
507
+ }
508
+ else if (!baseContract) {
509
+ console.error("[soloForge] 工具调用契约: 未找到契约定义 ", params.tool_name);
510
+ }
511
+ // 1. Check if tool is in next_allowed
512
+ console.error("[soloForge] 工具调用契约: 检查后续工具允许列表");
513
+ if (params.current_next_allowed.length > 0 &&
514
+ !params.current_next_allowed.includes(params.tool_name)) {
515
+ const bypassAllowed = contract?.category === "read_only_bypass" &&
516
+ params.bypass?.allowed === true;
517
+ if (!bypassAllowed) {
518
+ console.error("[soloForge] 工具调用契约: 后续工具不在允许列表且未旁路 ", params.tool_name);
519
+ violations.push(createViolation({
520
+ invocation_id: iid,
521
+ tool_name: params.tool_name,
522
+ violation_type: "not_allowed_next_tool",
523
+ reason: `工具 ${params.tool_name} 不在 next_allowed_tools [${params.current_next_allowed.join(", ")}] 中`,
524
+ recovery: "回到 workflow contract 确认工具调用顺序",
525
+ }));
526
+ }
527
+ }
528
+ // 2. Check forbidden
529
+ console.error("[soloForge] 工具调用契约: 检查禁止工具列表");
530
+ if (params.current_forbidden.includes(params.tool_name)) {
531
+ console.error("[soloForge] 工具调用契约: 工具在禁止列表中 ", params.tool_name);
532
+ violations.push(createViolation({
533
+ invocation_id: iid,
534
+ tool_name: params.tool_name,
535
+ violation_type: "not_allowed_next_tool",
536
+ reason: `工具 ${params.tool_name} 在 forbidden_tools 中`,
537
+ recovery: "确认 workflow 状态,选择允许的工具",
538
+ }));
539
+ }
540
+ // 3. Tools with requires_authorization need authorization
541
+ console.error("[soloForge] 工具调用契约: 检查授权要求");
542
+ if (contract?.requires_authorization) {
543
+ if (!params.authorization || !params.authorization.granted) {
544
+ console.error("[soloForge] 工具调用契约: 缺少必要授权 ", params.tool_name);
545
+ violations.push(createViolation({
546
+ invocation_id: iid,
547
+ tool_name: params.tool_name,
548
+ violation_type: "missing_authorization",
549
+ reason: `工具 ${params.tool_name} 需要授权但缺少授权`,
550
+ recovery: "获取用户显式授权后再调用",
551
+ }));
552
+ }
553
+ }
554
+ // 4. Read-only bypass tools must not have write side effects
555
+ console.error("[soloForge] 工具调用契约: 检查只读旁路工具写入副作用");
556
+ if (contract?.category === "read_only_bypass") {
557
+ if (hasWriteSideEffect(params.actual_side_effects)) {
558
+ console.error("[soloForge] 工具调用契约: 只读旁路工具产生写入副作用 ", params.tool_name);
559
+ violations.push(createViolation({
560
+ invocation_id: iid,
561
+ tool_name: params.tool_name,
562
+ violation_type: "read_only_bypass_write",
563
+ reason: `read-only bypass 工具 ${params.tool_name} 产生了写入副作用: ${params.actual_side_effects.join(", ")}`,
564
+ recovery: "回到 workflow contract,通过 strict controlled 工具执行写入",
565
+ }));
566
+ }
567
+ }
568
+ // 5. Side effects must not exceed contract declaration
569
+ console.error("[soloForge] 工具调用契约: 检查未声明副作用");
570
+ if (contract) {
571
+ const undeclared = params.actual_side_effects.filter((e) => !contract.side_effects.includes(e));
572
+ if (undeclared.length > 0) {
573
+ console.error("[soloForge] 工具调用契约: 发现未声明副作用 ", { tool_name: params.tool_name, undeclared });
574
+ violations.push(createViolation({
575
+ invocation_id: iid,
576
+ tool_name: params.tool_name,
577
+ violation_type: "side_effect_exceeded",
578
+ reason: `工具 ${params.tool_name} 产生未声明的副作用: ${undeclared.join(", ")}`,
579
+ recovery: "检查工具实现是否与契约一致",
580
+ }));
581
+ }
582
+ }
583
+ // 6. Strict controlled must require workflow
584
+ console.error("[soloForge] 工具调用契约: 检查严格受控工具工作流要求");
585
+ if (contract?.category === "strict_controlled" && contract.requires_workflow && !params.workflow_id) {
586
+ console.error("[soloForge] 工具调用契约: 严格受控工具缺少工作流ID ", params.tool_name);
587
+ violations.push(createViolation({
588
+ invocation_id: iid,
589
+ tool_name: params.tool_name,
590
+ violation_type: "contract_state_mismatch",
591
+ reason: `strict controlled 工具 ${params.tool_name} 需要 workflow 但未提供 workflow_id`,
592
+ recovery: "先完成 classify/expand 流程再调用此工具",
593
+ }));
594
+ }
595
+ if (violations.length > 0) {
596
+ console.error("[soloForge] 工具调用契约: 验证发现违规 ", violations.length, "项");
597
+ }
598
+ else {
599
+ console.error("[soloForge] 工具调用契约: 验证通过,无违规");
600
+ }
601
+ return violations;
602
+ }
603
+ // ── Governance validation ──
604
+ /** 治理验证所有工具调用契约的结构完整性 */
605
+ export function validateToolInvocationContracts(contracts = TOOL_INVOCATION_CONTRACTS) {
606
+ console.error("[soloForge] 工具调用契约: 治理验证 ", { contractCount: contracts.length });
607
+ const findings = [];
608
+ const allNames = new Set(contracts.map((c) => c.tool_name));
609
+ for (const tc of contracts) {
610
+ // 规则 1: every tool must have default_next_tools (trace requirement implies this)
611
+ if (tc.default_next_tools.length === 0 && tc.category !== "read_only_bypass") {
612
+ findings.push({
613
+ severity: "hard_fail",
614
+ tool_name: tc.tool_name,
615
+ rule: "gc-next-tools-missing",
616
+ message: `工具 ${tc.tool_name} 没有声明 default_next_tools`,
617
+ });
618
+ }
619
+ // 规则 2: strict controlled must require authorization
620
+ if (tc.category === "strict_controlled" && !tc.requires_authorization) {
621
+ findings.push({
622
+ severity: "hard_fail",
623
+ tool_name: tc.tool_name,
624
+ rule: "gc-strict-no-auth",
625
+ message: `strict controlled 工具 ${tc.tool_name} 未声明 requires_authorization`,
626
+ });
627
+ }
628
+ // 规则 3: read-only bypass must not have write side effects
629
+ if (tc.category === "read_only_bypass" && hasWriteSideEffect(tc.side_effects)) {
630
+ findings.push({
631
+ severity: "hard_fail",
632
+ tool_name: tc.tool_name,
633
+ rule: "gc-readonly-write-effect",
634
+ message: `read-only bypass 工具 ${tc.tool_name} 有写入副作用: ${tc.side_effects.join(", ")}`,
635
+ });
636
+ }
637
+ // 规则 4: strict controlled must require workflow
638
+ if (tc.category === "strict_controlled" && !tc.requires_workflow) {
639
+ findings.push({
640
+ severity: "hard_fail",
641
+ tool_name: tc.tool_name,
642
+ rule: "gc-strict-no-workflow",
643
+ message: `strict controlled 工具 ${tc.tool_name} 未声明 requires_workflow`,
644
+ });
645
+ }
646
+ // 规则 5: side_effects must match category (sf_status exempt: dynamic cancel)
647
+ if (tc.category === "read_only_bypass" &&
648
+ tc.tool_name !== "sf_status" &&
649
+ tc.side_effects.length > 0 &&
650
+ !tc.side_effects.every((e) => e === "none")) {
651
+ findings.push({
652
+ severity: "hard_fail",
653
+ tool_name: tc.tool_name,
654
+ rule: "gc-side-effect-category-mismatch",
655
+ message: `read-only bypass 工具 ${tc.tool_name} 的 side_effects 包含非 none 值`,
656
+ });
657
+ }
658
+ // 规则 6: strict controlled must have forbidden_next_tools
659
+ if (tc.category === "strict_controlled" && tc.forbidden_next_tools.length === 0) {
660
+ findings.push({
661
+ severity: "advisory",
662
+ tool_name: tc.tool_name,
663
+ rule: "gc-strict-no-forbidden",
664
+ message: `strict controlled 工具 ${tc.tool_name} 没有声明 forbidden_next_tools`,
665
+ });
666
+ }
667
+ // 规则 7: description must not be empty
668
+ if (!tc.description) {
669
+ findings.push({
670
+ severity: "hard_fail",
671
+ tool_name: tc.tool_name,
672
+ rule: "gc-no-description",
673
+ message: `工具 ${tc.tool_name} 没有描述`,
674
+ });
675
+ }
676
+ // 规则 8: referenced next tools must exist
677
+ for (const next of tc.default_next_tools) {
678
+ if (!allNames.has(next)) {
679
+ findings.push({
680
+ severity: "hard_fail",
681
+ tool_name: tc.tool_name,
682
+ rule: "gc-invalid-next-tool",
683
+ message: `工具 ${tc.tool_name} 引用了不存在的 next tool: ${next}`,
684
+ });
685
+ }
686
+ }
687
+ for (const forbidden of tc.forbidden_next_tools) {
688
+ if (!allNames.has(forbidden)) {
689
+ findings.push({
690
+ severity: "advisory",
691
+ tool_name: tc.tool_name,
692
+ rule: "gc-invalid-forbidden-tool",
693
+ message: `工具 ${tc.tool_name} 引用了不存在的 forbidden tool: ${forbidden}`,
694
+ });
695
+ }
696
+ }
697
+ // 规则 9: no duplicate tool in default_next_tools
698
+ const uniqueNext = new Set(tc.default_next_tools);
699
+ if (uniqueNext.size !== tc.default_next_tools.length) {
700
+ findings.push({
701
+ severity: "advisory",
702
+ tool_name: tc.tool_name,
703
+ rule: "gc-duplicate-next-tool",
704
+ message: `工具 ${tc.tool_name} 的 default_next_tools 包含重复项`,
705
+ });
706
+ }
707
+ }
708
+ // Cross-registry: check for duplicate tool names
709
+ const nameCounts = new Map();
710
+ for (const tc of contracts) {
711
+ nameCounts.set(tc.tool_name, (nameCounts.get(tc.tool_name) ?? 0) + 1);
712
+ }
713
+ for (const [name, count] of nameCounts) {
714
+ if (count > 1) {
715
+ findings.push({
716
+ severity: "hard_fail",
717
+ tool_name: name,
718
+ rule: "gc-duplicate-tool-name",
719
+ message: `工具名 ${name} 注册了 ${count} 次`,
720
+ });
721
+ }
722
+ }
723
+ if (findings.length > 0) {
724
+ console.error("[soloForge] 工具调用契约: 治理验证发现 ", findings.length, "项问题");
725
+ }
726
+ else {
727
+ console.error("[soloForge] 工具调用契约: 治理验证通过,无问题");
728
+ }
729
+ return findings;
730
+ }
731
+ //# sourceMappingURL=tool_invocation_contract_registry.js.map