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
@@ -1,16 +1,27 @@
1
1
  import type { KnowledgeIndexManager } from "../knowledge/index_manager.js";
2
2
  import type { ProjectConfig, KnowledgeEntry } from "../types.js";
3
+ /** 审计发现项 */
3
4
  export interface AuditFinding {
5
+ /** 发现项 ID */
4
6
  id: string;
7
+ /** 严重程度 */
5
8
  severity: "info" | "warning" | "critical";
9
+ /** 问题类别: stale=陈旧, duplicate=重复, format=格式, coverage=覆盖, completeness=完整度, design_drift=设计漂移 */
6
10
  category: "stale" | "duplicate" | "format" | "coverage" | "completeness" | "design_drift";
11
+ /** 关联的知识条目名称 */
7
12
  entry_name: string;
13
+ /** 问题描述 */
8
14
  message: string;
15
+ /** 修复建议 */
9
16
  suggestion: string;
10
17
  }
18
+ /** 审计结果 */
11
19
  export interface AuditResult {
20
+ /** 非废弃状态的条目总数 */
12
21
  total_entries: number;
22
+ /** 审计发现列表 */
13
23
  findings: AuditFinding[];
24
+ /** 各类别发现数量统计 */
14
25
  summary: {
15
26
  stale: number;
16
27
  duplicate: number;
@@ -19,58 +30,120 @@ export interface AuditResult {
19
30
  completeness: number;
20
31
  design_drift: number;
21
32
  };
33
+ /** 审计时间 */
22
34
  audited_at: string;
23
35
  }
36
+ /**
37
+ * 审计知识库健康度。
38
+ * 检查五个维度: 陈旧条目、重复触发词、格式规范、类型覆盖、内容完整度。
39
+ * @param knowledgeIndex - 知识索引管理器
40
+ * @param config - 项目配置
41
+ * @returns 审计结果,包含发现项和统计摘要
42
+ */
24
43
  export declare function auditKnowledge(knowledgeIndex: KnowledgeIndexManager, config: ProjectConfig): Promise<AuditResult>;
44
+ /** 新增知识条目的输入参数 */
25
45
  export interface AddKnowledgeInput {
46
+ /** 知识条目标题 */
26
47
  title: string;
48
+ /** 知识条目类型 */
27
49
  type: KnowledgeEntry["type"];
50
+ /** 作用域列表 */
28
51
  scope: string[];
52
+ /** 触发条件描述 */
29
53
  when_triggers: string;
54
+ /** 决策规则(可选) */
30
55
  decision_rules?: string;
56
+ /** 是否保存为草稿(默认 true) */
31
57
  save_to_drafts?: boolean;
58
+ /** 是否自动丰富内容(默认 true) */
32
59
  auto_enrich?: boolean;
33
60
  }
61
+ /** 自动丰富指南的步骤 */
34
62
  export interface EnrichmentStep {
63
+ /** 步骤编号 */
35
64
  step_number: number;
65
+ /** 步骤描述 */
36
66
  action: string;
67
+ /** 搜索查询关键词 */
37
68
  search_queries?: string[];
69
+ /** 关注领域 */
38
70
  focus_areas: string[];
39
71
  }
72
+ /** 自动丰富指南 */
40
73
  export interface EnrichmentGuide {
74
+ /** 关联的知识条目名称 */
41
75
  entry_name: string;
76
+ /** 知识类型 */
42
77
  type: KnowledgeEntry["type"];
78
+ /** 概述 */
43
79
  overview: string;
80
+ /** 丰富步骤列表 */
44
81
  steps: EnrichmentStep[];
82
+ /** 权威来源列表 */
45
83
  authoritative_sources: string[];
84
+ /** 完整度阈值要求 */
46
85
  completeness_thresholds: Array<{
47
86
  field: string;
48
87
  minimum: number;
49
88
  }>;
89
+ /** 更新调用模板 */
50
90
  update_call_template: string;
51
91
  }
92
+ /** 新增知识条目的结果 */
52
93
  export interface AddKnowledgeResult {
94
+ /** 是否成功 */
53
95
  success: boolean;
96
+ /** 文件路径 */
54
97
  file_path: string;
98
+ /** 是否为草稿 */
55
99
  is_draft: boolean;
100
+ /** 结果消息 */
56
101
  message: string;
102
+ /** 自动丰富指南(可选) */
57
103
  enrichment_guide?: EnrichmentGuide;
58
104
  }
105
+ /**
106
+ * 新增知识条目。
107
+ * 根据类型生成对应的模板内容,保存到草稿目录或正式目录。
108
+ * @param input - 新增知识条目输入
109
+ * @param config - 项目配置
110
+ * @returns 新增结果,包含文件路径和消息
111
+ */
59
112
  export declare function addKnowledge(input: AddKnowledgeInput, config: ProjectConfig): Promise<AddKnowledgeResult>;
113
+ /** 更新知识条目的输入参数 */
60
114
  export interface UpdateKnowledgeInput {
115
+ /** 知识条目名称 */
61
116
  entry_name: string;
117
+ /** 更新内容 */
62
118
  updates: {
119
+ /** 更新触发条件 */
63
120
  when_triggers?: string;
121
+ /** 新增决策规则 */
64
122
  add_decision_rules?: string[];
123
+ /** 新增验收标准 */
65
124
  add_acceptance_criteria?: string[];
125
+ /** 更新状态 */
66
126
  status?: KnowledgeEntry["status"];
67
127
  };
68
128
  }
129
+ /** 更新知识条目的结果 */
69
130
  export interface UpdateKnowledgeResult {
131
+ /** 是否成功 */
70
132
  success: boolean;
133
+ /** 文件路径 */
71
134
  file_path: string;
135
+ /** 备份路径 */
72
136
  backup_path: string;
137
+ /** 结果消息 */
73
138
  message: string;
74
139
  }
140
+ /**
141
+ * 更新已有的知识条目。
142
+ * 更新前自动创建备份,支持修改触发条件、状态、决策规则和验收标准。
143
+ * @param input - 更新输入参数
144
+ * @param knowledgeIndex - 知识索引管理器
145
+ * @param config - 项目配置
146
+ * @returns 更新结果,包含文件路径和备份路径
147
+ */
75
148
  export declare function updateKnowledge(input: UpdateKnowledgeInput, knowledgeIndex: KnowledgeIndexManager, config: ProjectConfig): Promise<UpdateKnowledgeResult>;
76
149
  //# sourceMappingURL=knowledge_manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge_manager.d.ts","sourceRoot":"","sources":["../../src/engine/knowledge_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knowledge_manager.d.ts","sourceRoot":"","sources":["../../src/engine/knowledge_manager.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,21 @@ import fss from "node:fs";
3
3
  import path from "node:path";
4
4
  import matter from "gray-matter";
5
5
  import { KnowledgeWriter } from "../knowledge/writer.js";
6
+ /**
7
+ * 审计知识库健康度。
8
+ * 检查五个维度: 陈旧条目、重复触发词、格式规范、类型覆盖、内容完整度。
9
+ * @param knowledgeIndex - 知识索引管理器
10
+ * @param config - 项目配置
11
+ * @returns 审计结果,包含发现项和统计摘要
12
+ */
6
13
  export async function auditKnowledge(knowledgeIndex, config) {
14
+ console.error("[soloForge] 知识审计: 开始审计知识库健康度");
7
15
  const { global: globalEntries, project: projectEntries } = knowledgeIndex.getAllEntries();
8
16
  const all = [...globalEntries, ...projectEntries];
9
17
  const findings = [];
10
18
  const now = Date.now();
11
19
  let findingId = 0;
12
- // 1. Stale entries: last_used_at > 90 days or usage_count === 0
20
+ // 1. 陈旧条目: 超过 90 天未使用或从未被匹配
13
21
  for (const entry of all) {
14
22
  if (entry.status === "deprecated")
15
23
  continue;
@@ -37,7 +45,7 @@ export async function auditKnowledge(knowledgeIndex, config) {
37
45
  }
38
46
  }
39
47
  }
40
- // 2. Duplicate: similar when triggers
48
+ // 2. 重复检查: 相似触发词
41
49
  for (let i = 0; i < all.length; i++) {
42
50
  for (let j = i + 1; j < all.length; j++) {
43
51
  if (all[i].type !== all[j].type)
@@ -55,7 +63,7 @@ export async function auditKnowledge(knowledgeIndex, config) {
55
63
  }
56
64
  }
57
65
  }
58
- // 3. Format: missing required frontmatter fields + schema validation
66
+ // 3. 格式检查: 缺失必需的 frontmatter 字段 + Schema 验证
59
67
  for (const entry of all) {
60
68
  if (entry.status === "deprecated")
61
69
  continue;
@@ -76,7 +84,7 @@ export async function auditKnowledge(knowledgeIndex, config) {
76
84
  suggestion: `补充 ${issues.join("、")} 字段`,
77
85
  });
78
86
  }
79
- // 3b. Schema validation: read raw file for deeper checks
87
+ // 3b. Schema 验证: 读取原始文件进行深度检查
80
88
  const schemaIssues = await validateFormatSchema(entry);
81
89
  for (const issue of schemaIssues) {
82
90
  findings.push({
@@ -89,7 +97,7 @@ export async function auditKnowledge(knowledgeIndex, config) {
89
97
  });
90
98
  }
91
99
  }
92
- // 4. Coverage: check knowledge types have entries
100
+ // 4. 覆盖度检查: 确保各知识类型都有条目
93
101
  const requiredTypes = ["pattern", "procedure", "domain", "review_rule"];
94
102
  for (const type of requiredTypes) {
95
103
  const count = all.filter((e) => e.type === type && e.status !== "deprecated").length;
@@ -104,7 +112,7 @@ export async function auditKnowledge(knowledgeIndex, config) {
104
112
  });
105
113
  }
106
114
  }
107
- // 5. Completeness: check rule/AC counts against type thresholds
115
+ // 5. 完整度检查: 检查规则/验收项数量是否达到类型阈值
108
116
  for (const entry of all) {
109
117
  if (entry.status === "deprecated")
110
118
  continue;
@@ -143,6 +151,7 @@ export async function auditKnowledge(knowledgeIndex, config) {
143
151
  completeness: findings.filter((f) => f.category === "completeness").length,
144
152
  design_drift: 0,
145
153
  };
154
+ console.error(`[soloForge] 知识审计: 完成,共 ${findings.length} 项发现`);
146
155
  return {
147
156
  total_entries: all.filter((e) => e.status !== "deprecated").length,
148
157
  findings,
@@ -150,19 +159,27 @@ export async function auditKnowledge(knowledgeIndex, config) {
150
159
  audited_at: new Date().toISOString(),
151
160
  };
152
161
  }
162
+ /**
163
+ * 新增知识条目。
164
+ * 根据类型生成对应的模板内容,保存到草稿目录或正式目录。
165
+ * @param input - 新增知识条目输入
166
+ * @param config - 项目配置
167
+ * @returns 新增结果,包含文件路径和消息
168
+ */
153
169
  export async function addKnowledge(input, config) {
170
+ console.error(`[soloForge] 知识管理: 新增知识条目「${input.title}」[${input.type}]`);
154
171
  const knowledgeDir = getProjectKnowledgeDir(config);
155
- const fileName = `${input.title}.md`;
156
- // Determine save location
172
+ const fileName = `${path.basename(input.title)}.md`; // basename 防止路径穿越
173
+ // 确定保存位置
157
174
  const typeDir = getTypeDirectory(input.type);
158
175
  const draftsDir = path.join(knowledgeDir, "drafts");
159
176
  const targetDir = input.save_to_drafts !== false
160
177
  ? draftsDir
161
178
  : path.join(knowledgeDir, typeDir);
162
- // Ensure directory exists
179
+ // 确保目录存在
163
180
  await fs.mkdir(targetDir, { recursive: true });
164
181
  const filePath = path.join(targetDir, fileName);
165
- // Check if file already exists
182
+ // 检查文件是否已存在
166
183
  if (fss.existsSync(filePath)) {
167
184
  return {
168
185
  success: false,
@@ -171,12 +188,13 @@ export async function addKnowledge(input, config) {
171
188
  message: `文件已存在: ${filePath},请使用 sf_knowledge_update 更新`,
172
189
  };
173
190
  }
174
- // Generate content
191
+ // 生成内容
175
192
  const content = generateKnowledgeContent(input);
176
193
  await fs.writeFile(filePath, content, "utf-8");
177
194
  const enrichment_guide = input.auto_enrich !== false
178
195
  ? buildEnrichmentGuide(input)
179
196
  : undefined;
197
+ console.error(`[soloForge] 知识管理: 知识条目已保存到 ${filePath}`);
180
198
  return {
181
199
  success: true,
182
200
  file_path: filePath,
@@ -187,11 +205,21 @@ export async function addKnowledge(input, config) {
187
205
  enrichment_guide,
188
206
  };
189
207
  }
208
+ /**
209
+ * 更新已有的知识条目。
210
+ * 更新前自动创建备份,支持修改触发条件、状态、决策规则和验收标准。
211
+ * @param input - 更新输入参数
212
+ * @param knowledgeIndex - 知识索引管理器
213
+ * @param config - 项目配置
214
+ * @returns 更新结果,包含文件路径和备份路径
215
+ */
190
216
  export async function updateKnowledge(input, knowledgeIndex, config) {
217
+ console.error(`[soloForge] 知识管理: 更新知识条目「${input.entry_name}」`);
191
218
  const entry = knowledgeIndex.getEntry(input.entry_name)
192
219
  ?? knowledgeIndex.getAllEntries().global.find((e) => e.name === input.entry_name)
193
220
  ?? knowledgeIndex.getAllEntries().project.find((e) => e.name === input.entry_name);
194
221
  if (!entry) {
222
+ console.error(`[soloForge] 知识管理: 未找到知识条目「${input.entry_name}」`);
195
223
  return {
196
224
  success: false,
197
225
  file_path: "",
@@ -202,6 +230,7 @@ export async function updateKnowledge(input, knowledgeIndex, config) {
202
230
  const filePath = entry.file_path;
203
231
  // 维度6: 知识目录隔离 — 禁止更新 core/ 只读目录中的条目
204
232
  if (KnowledgeWriter.isCorePath(filePath)) {
233
+ console.error(`[soloForge] 知识管理: 「${input.entry_name}」位于 core/ 只读目录,禁止自动更新`);
205
234
  return {
206
235
  success: false,
207
236
  file_path: filePath,
@@ -217,15 +246,15 @@ export async function updateKnowledge(input, knowledgeIndex, config) {
217
246
  message: `文件不存在: ${filePath}`,
218
247
  };
219
248
  }
220
- // Read and parse
249
+ // 读取并解析文件
221
250
  const raw = await fs.readFile(filePath, "utf-8");
222
251
  const { data: frontmatter, content: body } = matter(raw);
223
- // Create backup
252
+ // 创建备份
224
253
  const backupDir = path.join(path.dirname(filePath), ".backups");
225
254
  await fs.mkdir(backupDir, { recursive: true });
226
255
  const backupPath = path.join(backupDir, `${entry.name}-${Date.now()}.md`);
227
256
  await fs.writeFile(backupPath, raw, "utf-8");
228
- // Apply updates
257
+ // 应用更新
229
258
  let updated = false;
230
259
  if (input.updates.when_triggers) {
231
260
  frontmatter.when = input.updates.when_triggers;
@@ -268,9 +297,10 @@ export async function updateKnowledge(input, knowledgeIndex, config) {
268
297
  message: "未提供任何更新内容",
269
298
  };
270
299
  }
271
- // Write updated file
300
+ // 写入更新后的文件
272
301
  const output = matter.stringify(newBody, frontmatter);
273
302
  await fs.writeFile(filePath, output, "utf-8");
303
+ console.error(`[soloForge] 知识管理: 知识条目「${input.entry_name}」已更新,备份: ${backupPath}`);
274
304
  return {
275
305
  success: true,
276
306
  file_path: filePath,
@@ -278,8 +308,10 @@ export async function updateKnowledge(input, knowledgeIndex, config) {
278
308
  message: `知识条目已更新: ${filePath}\n备份: ${backupPath}`,
279
309
  };
280
310
  }
281
- // ── Format Schema ──
311
+ // ── 格式 Schema ──
312
+ /** 规范的 frontmatter 字段顺序 */
282
313
  const CANONICAL_FM_ORDER = ["name", "type", "when", "scope", "products"];
314
+ /** 各知识类型的格式规范定义 */
283
315
  const FORMAT_SCHEMA = {
284
316
  pattern: {
285
317
  required_headings: ["## 决策规则", "## 验收项"],
@@ -302,6 +334,7 @@ const FORMAT_SCHEMA = {
302
334
  required_headings: [],
303
335
  },
304
336
  };
337
+ /** 各知识类型的完整度阈值(字段名、匹配正则、最小数量) */
305
338
  const COMPLETENESS_THRESHOLDS = {
306
339
  pattern: [
307
340
  { field: "决策规则", pattern: /^- /gm, minimum: 5 },
@@ -321,9 +354,21 @@ const COMPLETENESS_THRESHOLDS = {
321
354
  { field: "规则", pattern: /^## [A-Z]+-\d+/gm, minimum: 5 },
322
355
  ],
323
356
  };
357
+ /**
358
+ * 统计正则匹配数量。
359
+ * @param body - 文本内容
360
+ * @param pattern - 正则表达式
361
+ * @returns 匹配数量
362
+ */
324
363
  function countPattern(body, pattern) {
325
364
  return (body.match(pattern) ?? []).length;
326
365
  }
366
+ /**
367
+ * 验证知识条目的格式 Schema 规范。
368
+ * 检查 frontmatter 字段顺序、when 字段风格、body 必需标题。
369
+ * @param entry - 知识条目
370
+ * @returns 格式问题列表
371
+ */
327
372
  async function validateFormatSchema(entry) {
328
373
  const results = [];
329
374
  if (!entry.file_path || !fss.existsSync(entry.file_path))
@@ -336,7 +381,7 @@ async function validateFormatSchema(entry) {
336
381
  return results;
337
382
  }
338
383
  const { data: fm, content: body } = matter(raw);
339
- // Check frontmatter field order
384
+ // 检查 frontmatter 字段顺序
340
385
  const fmKeys = Object.keys(fm);
341
386
  const orderIssues = [];
342
387
  for (let i = 0; i < CANONICAL_FM_ORDER.length; i++) {
@@ -352,7 +397,7 @@ async function validateFormatSchema(entry) {
352
397
  suggestion: `标准顺序: ${CANONICAL_FM_ORDER.join(" → ")}`,
353
398
  });
354
399
  }
355
- // Check when style: first comma-separated segment should be ≤ 10 Chinese chars
400
+ // 检查 when 字段风格: 第一个逗号分隔段应 ≤ 10 个中文字符
356
401
  const whenStr = fm.when ?? "";
357
402
  const firstSegment = whenStr.split(/[,\s,]/)[0] ?? "";
358
403
  const chineseCharCount = (firstSegment.match(/[一-鿿]/g) ?? []).length;
@@ -362,7 +407,7 @@ async function validateFormatSchema(entry) {
362
407
  suggestion: "when 应为纯关键词逗号分隔,如: 数据导出, CSV, Excel, 批量导出",
363
408
  });
364
409
  }
365
- // Check body headings
410
+ // 检查 body 标题
366
411
  const schema = FORMAT_SCHEMA[entry.type];
367
412
  if (schema) {
368
413
  for (const heading of schema.required_headings) {
@@ -386,7 +431,13 @@ async function validateFormatSchema(entry) {
386
431
  }
387
432
  return results;
388
433
  }
389
- // ── Helpers ──
434
+ // ── 辅助函数 ──
435
+ /**
436
+ * 计算两个关键词字符串的重叠度。
437
+ * @param a - 第一个关键词字符串
438
+ * @param b - 第二个关键词字符串
439
+ * @returns 重叠度(0-1),1 表示完全重叠
440
+ */
390
441
  function keywordOverlap(a, b) {
391
442
  const wordsA = new Set(a.toLowerCase().split(/[,\s,]+/).filter(Boolean));
392
443
  const wordsB = new Set(b.toLowerCase().split(/[,\s,]+/).filter(Boolean));
@@ -399,6 +450,11 @@ function keywordOverlap(a, b) {
399
450
  }
400
451
  return overlap / Math.min(wordsA.size, wordsB.size);
401
452
  }
453
+ /**
454
+ * 根据知识类型获取存储目录名。
455
+ * @param type - 知识条目类型
456
+ * @returns 目录名
457
+ */
402
458
  function getTypeDirectory(type) {
403
459
  const map = {
404
460
  pattern: "patterns/temp",
@@ -410,6 +466,11 @@ function getTypeDirectory(type) {
410
466
  };
411
467
  return map[type] ?? "procedures";
412
468
  }
469
+ /**
470
+ * 生成知识条目的 frontmatter 文本。
471
+ * @param input - 新增知识条目输入
472
+ * @returns frontmatter 文本
473
+ */
413
474
  function generateFrontmatter(input) {
414
475
  return `---
415
476
  name: ${input.title}
@@ -419,6 +480,12 @@ scope: [${input.scope.join(", ")}]
419
480
  products: ["*"]
420
481
  ---`;
421
482
  }
483
+ /**
484
+ * 生成知识条目的完整内容(frontmatter + body)。
485
+ * 根据类型选择对应的 body 生成器。
486
+ * @param input - 新增知识条目输入
487
+ * @returns 完整的 Markdown 文件内容
488
+ */
422
489
  function generateKnowledgeContent(input) {
423
490
  const fm = generateFrontmatter(input);
424
491
  const generators = {
@@ -432,6 +499,11 @@ function generateKnowledgeContent(input) {
432
499
  const gen = generators[input.type] ?? generators.pattern;
433
500
  return `${fm}\n\n${gen()}\n`;
434
501
  }
502
+ /**
503
+ * 生成 pattern 类型知识条目的 body 内容。
504
+ * @param input - 新增知识条目输入
505
+ * @returns body 文本
506
+ */
435
507
  function generatePatternBody(input) {
436
508
  const rules = input.decision_rules
437
509
  ? input.decision_rules.split("\n").filter(Boolean).map((r) => `- ${r}`).join("\n")
@@ -442,6 +514,11 @@ ${rules}
442
514
  ## 验收项
443
515
  - [AC-01] (待补充验收标准)`;
444
516
  }
517
+ /**
518
+ * 生成 domain 类型知识条目的 body 内容。
519
+ * @param input - 新增知识条目输入
520
+ * @returns body 文本
521
+ */
445
522
  function generateDomainBody(input) {
446
523
  const rules = input.decision_rules
447
524
  ? input.decision_rules.split("\n").filter(Boolean).map((r) => `${r}`).join("\n\n")
@@ -458,6 +535,11 @@ ${rules}
458
535
  ## 关联模式
459
536
  - (待补充关联模式)`;
460
537
  }
538
+ /**
539
+ * 生成 procedure 类型知识条目的 body 内容。
540
+ * @param input - 新增知识条目输入
541
+ * @returns body 文本
542
+ */
461
543
  function generateProcedureBody(input) {
462
544
  return `## 适用场景
463
545
  (待补充适用场景描述)
@@ -471,6 +553,11 @@ function generateProcedureBody(input) {
471
553
  ## 注意事项
472
554
  - (待补充注意事项)`;
473
555
  }
556
+ /**
557
+ * 生成 pipeline_procedure 类型知识条目的 body 内容。
558
+ * @param input - 新增知识条目输入
559
+ * @returns body 文本
560
+ */
474
561
  function generatePipelineBody(input) {
475
562
  return `# ${input.title}
476
563
 
@@ -483,6 +570,11 @@ function generatePipelineBody(input) {
483
570
  (待补充阶段描述)
484
571
  工具:sf_verify`;
485
572
  }
573
+ /**
574
+ * 生成 review_rule 类型知识条目的 body 内容。
575
+ * @param input - 新增知识条目输入
576
+ * @returns body 文本
577
+ */
486
578
  function generateReviewRuleBody(input) {
487
579
  const code = input.title.toUpperCase().replace(/-/g, "").slice(0, 3);
488
580
  return `## ${code}-01: (待补充规则标题)
@@ -491,6 +583,11 @@ severity: warning
491
583
  scope: ${input.scope.join(", ")}
492
584
  description: (待补充规则描述)`;
493
585
  }
586
+ /**
587
+ * 生成 acceptance_template 类型知识条目的 body 内容。
588
+ * @param input - 新增知识条目输入
589
+ * @returns body 文本
590
+ */
494
591
  function generateAcceptanceBody(input) {
495
592
  return `# ${input.title}
496
593
 
@@ -500,10 +597,20 @@ function generateAcceptanceBody(input) {
500
597
  ## 2. (待补充章节标题)
501
598
  (待补充内容)`;
502
599
  }
503
- // ── Enrichment Guide ──
600
+ // ── 自动丰富指南 ──
601
+ /**
602
+ * 从标题中提取可读的主题名称。
603
+ * @param title - 知识条目标题(含连字符/下划线)
604
+ * @returns 格式化后的主题名称
605
+ */
504
606
  function extractTopicFromTitle(title) {
505
607
  return title.split(/[-_]/).map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
506
608
  }
609
+ /**
610
+ * 根据知识类型构建对应的自动丰富指南。
611
+ * @param input - 新增知识条目输入
612
+ * @returns 自动丰富指南
613
+ */
507
614
  function buildEnrichmentGuide(input) {
508
615
  const builders = {
509
616
  pattern: () => buildPatternGuide(input),
@@ -515,6 +622,11 @@ function buildEnrichmentGuide(input) {
515
622
  };
516
623
  return builders[input.type]();
517
624
  }
625
+ /**
626
+ * 构建 pattern 类型的自动丰富指南。
627
+ * @param input - 新增知识条目输入
628
+ * @returns 丰富指南
629
+ */
518
630
  function buildPatternGuide(input) {
519
631
  const topic = extractTopicFromTitle(input.title);
520
632
  return {
@@ -559,6 +671,11 @@ function buildPatternGuide(input) {
559
671
  update_call_template: `sf_knowledge_update(entry_name="${input.title}", add_decision_rules=[规则1, 规则2, ...], add_acceptance_criteria=[标准1, 标准2, ...])`,
560
672
  };
561
673
  }
674
+ /**
675
+ * 构建 domain 类型的自动丰富指南。
676
+ * @param input - 新增知识条目输入
677
+ * @returns 丰富指南
678
+ */
562
679
  function buildDomainGuide(input) {
563
680
  const topic = extractTopicFromTitle(input.title);
564
681
  return {
@@ -609,6 +726,11 @@ function buildDomainGuide(input) {
609
726
  update_call_template: `sf_knowledge_update(entry_name="${input.title}", add_decision_rules=[业务规则1, 业务规则2, ...])`,
610
727
  };
611
728
  }
729
+ /**
730
+ * 构建 procedure 类型的自动丰富指南。
731
+ * @param input - 新增知识条目输入
732
+ * @returns 丰富指南
733
+ */
612
734
  function buildProcedureGuide(input) {
613
735
  const topic = extractTopicFromTitle(input.title);
614
736
  return {
@@ -657,6 +779,11 @@ function buildProcedureGuide(input) {
657
779
  update_call_template: `sf_knowledge_update(entry_name="${input.title}", add_decision_rules=[步骤内容, 注意事项, ...])`,
658
780
  };
659
781
  }
782
+ /**
783
+ * 构建 pipeline_procedure 类型的自动丰富指南。
784
+ * @param input - 新增知识条目输入
785
+ * @returns 丰富指南
786
+ */
660
787
  function buildPipelineGuide(input) {
661
788
  const topic = extractTopicFromTitle(input.title);
662
789
  return {
@@ -698,6 +825,11 @@ function buildPipelineGuide(input) {
698
825
  update_call_template: `sf_knowledge_update(entry_name="${input.title}", add_decision_rules=[阶段定义1, 阶段定义2, ...])`,
699
826
  };
700
827
  }
828
+ /**
829
+ * 构建 review_rule 类型的自动丰富指南。
830
+ * @param input - 新增知识条目输入
831
+ * @returns 丰富指南
832
+ */
701
833
  function buildReviewRuleGuide(input) {
702
834
  const topic = extractTopicFromTitle(input.title);
703
835
  return {
@@ -741,6 +873,11 @@ function buildReviewRuleGuide(input) {
741
873
  update_call_template: `sf_knowledge_update(entry_name="${input.title}", add_decision_rules=[规则定义1, 规则定义2, ...])`,
742
874
  };
743
875
  }
876
+ /**
877
+ * 构建 acceptance_template 类型的自动丰富指南。
878
+ * @param input - 新增知识条目输入
879
+ * @returns 丰富指南
880
+ */
744
881
  function buildAcceptanceGuide(input) {
745
882
  const topic = extractTopicFromTitle(input.title);
746
883
  return {
@@ -784,6 +921,11 @@ function buildAcceptanceGuide(input) {
784
921
  update_call_template: `sf_knowledge_update(entry_name="${input.title}", add_acceptance_criteria=[验收项1, 验收项2, ...])`,
785
922
  };
786
923
  }
924
+ /**
925
+ * 获取项目知识库目录路径。
926
+ * @param config - 项目配置
927
+ * @returns 知识库目录的绝对路径
928
+ */
787
929
  function getProjectKnowledgeDir(config) {
788
930
  const projectDir = config._projectPath ?? process.cwd();
789
931
  return path.join(projectDir, ".soloforge", "knowledge");