soloforge 1.2.7 → 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 (406) 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/acceptance_templates//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +30 -2
  376. 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
  377. 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
  378. 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
  379. 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
  380. 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
  381. 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
  382. package/templates/knowledge/patterns/core//345/206/263/347/255/226/347/275/221/345/205/263.md +1 -0
  383. 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
  384. 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
  385. 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
  386. 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
  387. package/templates/knowledge/procedures/{Figma → /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 +5 -5
  388. 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
  389. 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
  390. 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
  391. 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
  392. 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
  393. 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
  394. 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
  395. 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
  396. 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
  397. 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
  398. 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
  399. 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
  400. 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
  401. 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
  402. 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
  403. 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
  404. 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
  405. package/templates/knowledge/templates/{review_summary.md → /345/256/241/346/237/245/346/221/230/350/246/201.md} +1 -1
  406. package/templates/config.yaml +0 -53
@@ -3,6 +3,15 @@ import fss from "node:fs";
3
3
  import path from "node:path";
4
4
  import matter from "gray-matter";
5
5
  import YAML from "yaml";
6
+ /**
7
+ * 检查知识条目的健康状态。
8
+ * @description 遍历所有知识条目,检测两类健康问题:
9
+ * 1. 90 天未使用的活跃条目自动标记为 pending_review
10
+ * 2. 创建 7 天后仍零使用的活跃条目自动标记为 pending_review
11
+ * 直接修改条目的 status 字段并返回问题列表。
12
+ * @param entries - 待检查的知识条目列表
13
+ * @returns 包含健康问题信息的数组,每项包含问题条目和问题类型(stale_90d 或 zero_usage)
14
+ */
6
15
  export function checkKnowledgeHealth(entries) {
7
16
  const issues = [];
8
17
  const now = Date.now();
@@ -25,10 +34,22 @@ export function checkKnowledgeHealth(entries) {
25
34
  }
26
35
  }
27
36
  }
37
+ if (issues.length > 0) {
38
+ console.error(`[soloForge] 健康检查: 发现 ${issues.length} 个健康问题。`);
39
+ }
28
40
  return issues;
29
41
  }
30
- // 将健康检查导致的状态变更持久化到磁盘
42
+ /**
43
+ * 将健康检查导致的状态变更持久化到磁盘。
44
+ * @description 遍历所有健康检查发现的问题条目,将其 status 和 updated_at 写回对应的文件。
45
+ * 支持 Markdown(frontmatter)和 YAML 两种格式。使用原子写入(先写 .tmp 再 rename)。
46
+ * 单文件写入失败不影响其他文件的处理。
47
+ * @param issues - 健康检查返回的问题列表
48
+ */
31
49
  export async function persistHealthChanges(issues) {
50
+ if (issues.length === 0)
51
+ return;
52
+ console.error(`[soloForge] 健康检查: 持久化 ${issues.length} 条状态变更...`);
32
53
  for (const { entry } of issues) {
33
54
  if (!entry.file_path || !fss.existsSync(entry.file_path))
34
55
  continue;
@@ -55,7 +76,9 @@ export async function persistHealthChanges(issues) {
55
76
  }
56
77
  catch {
57
78
  // 单文件写入失败不影响其他文件
79
+ console.error(`[soloForge] 健康检查: 写入文件失败 — ${entry.file_path}`);
58
80
  }
59
81
  }
82
+ console.error("[soloForge] 健康检查: 状态变更持久化完成。");
60
83
  }
61
84
  //# sourceMappingURL=health_checker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"health_checker.js","sourceRoot":"","sources":["../../src/knowledge/health_checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health_checker.js","sourceRoot":"","sources":["../../src/knowledge/health_checker.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,80 @@
1
1
  import type { ProjectConfig, KnowledgeEntry } from "../types.js";
2
+ /**
3
+ * 知识索引构建选项。
4
+ */
5
+ export interface KnowledgeIndexOptions {
6
+ /** 是否启用文件监听,默认 true */
7
+ watch?: boolean;
8
+ }
9
+ /**
10
+ * 知识索引管理器。
11
+ * @description 负责扫描、解析、索引知识文件(Markdown 和 YAML),
12
+ * 支持增量更新(文件监听)和按条件查询。
13
+ * 同时提供健康检查和冲突检测功能。
14
+ */
2
15
  export declare class KnowledgeIndexManager {
3
16
  private config;
4
17
  private index;
5
18
  private watcher;
6
19
  private rebuildTimer;
7
20
  private watchingStarted;
21
+ private watchEnabled;
22
+ private closed;
8
23
  private filePathToEntryMap;
9
- constructor(config: ProjectConfig);
24
+ /**
25
+ * 创建知识索引管理器实例。
26
+ * @param config - 项目配置对象
27
+ * @param options - 索引构建选项
28
+ */
29
+ constructor(config: ProjectConfig, options?: KnowledgeIndexOptions);
30
+ /**
31
+ * 构建知识索引。
32
+ * @description 扫描全局和项目知识目录,解析所有知识文件并建立索引。
33
+ * 首次构建时启动文件监听。
34
+ */
10
35
  build(): Promise<void>;
36
+ /**
37
+ * 关闭索引管理器,停止文件监听并清理资源。
38
+ */
11
39
  close(): Promise<void>;
40
+ /**
41
+ * 启动文件监听(内部方法)。
42
+ * @description 使用 chokidar 监听全局和项目知识目录的文件变更,
43
+ * 变更后 300ms 防抖执行增量更新。
44
+ */
12
45
  private startWatching;
46
+ /**
47
+ * 重建文件路径到条目的映射(内部方法)。
48
+ */
13
49
  private rebuildEntryMap;
50
+ /**
51
+ * 应用增量更新(内部方法)。
52
+ * @description 根据文件系统事件对索引进行增量更新:
53
+ * 删除事件移除条目,新增/修改事件重新解析并更新条目。
54
+ * @param event - 文件系统事件类型
55
+ * @param filePath - 变更的文件路径
56
+ */
14
57
  private applyIncrementalUpdate;
58
+ /**
59
+ * 解析单个知识文件(内部方法)。
60
+ * @description 根据文件扩展名选择解析器:Markdown 使用 gray-matter 解析 frontmatter,
61
+ * YAML 使用 YAML.parse 解析。
62
+ * @param filePath - 文件路径
63
+ * @returns 解析后的知识条目数组
64
+ */
15
65
  private parseFile;
66
+ /**
67
+ * 按条件查询知识条目。
68
+ * @description 支持按 scope、products、type 过滤,以及按 keywords 关键词匹配和排序。
69
+ * 只返回 status 为 active 的条目,默认限制返回 5 条。
70
+ * @param filters - 查询过滤条件
71
+ * @param filters.scope - 作用域过滤列表
72
+ * @param filters.products - 产品过滤列表
73
+ * @param filters.type - 条目类型过滤
74
+ * @param filters.keywords - 关键词列表(用于模糊匹配 name 和 when 字段)
75
+ * @param filters.limit - 最大返回条数,默认 5
76
+ * @returns 匹配的知识条目数组
77
+ */
16
78
  query(filters: {
17
79
  scope?: string[];
18
80
  products?: string[];
@@ -20,24 +82,91 @@ export declare class KnowledgeIndexManager {
20
82
  keywords?: string[];
21
83
  limit?: number;
22
84
  }): KnowledgeEntry[];
85
+ /**
86
+ * 标记知识条目为已使用。
87
+ * @description 增加指定条目的 usage_count 并更新 last_used_at 时间戳。
88
+ * @param entryIds - 要标记的条目 ID 列表
89
+ */
23
90
  markUsed(entryIds: string[]): void;
91
+ /**
92
+ * 根据 ID 获取知识条目。
93
+ * @param id - 条目 ID
94
+ * @returns 匹配的知识条目,未找到则返回 undefined
95
+ */
24
96
  getEntry(id: string): KnowledgeEntry | undefined;
97
+ /**
98
+ * 获取所有知识条目(按来源分组)。
99
+ * @returns 包含全局和项目知识条目的对象
100
+ */
25
101
  getAllEntries(): {
26
102
  global: KnowledgeEntry[];
27
103
  project: KnowledgeEntry[];
28
104
  };
105
+ /**
106
+ * 在内存中添加知识条目。
107
+ * @param entry - 要添加的知识条目
108
+ */
29
109
  addEntryInMemory(entry: KnowledgeEntry): Promise<void>;
110
+ /**
111
+ * 重新加载知识索引。
112
+ * @description 完全重建索引,重新扫描所有知识文件。
113
+ */
30
114
  reload(): Promise<void>;
115
+ /**
116
+ * 执行知识健康检查和冲突检测。
117
+ * @description 检查所有知识条目的健康状态(过期、零使用),
118
+ * 对活跃项目条目执行冲突检测,并将状态变更持久化到磁盘。
119
+ * @returns 包含健康问题和冲突的数组
120
+ */
31
121
  checkHealth(): Promise<Array<{
32
122
  entry: KnowledgeEntry;
33
123
  issue: string;
34
124
  }>>;
125
+ /**
126
+ * 计算关键词匹配分数(内部方法)。
127
+ * @description 在条目的 name 和 when 字段中搜索关键词,返回匹配数。
128
+ * @param entry - 知识条目
129
+ * @param keywords - 关键词列表
130
+ * @returns 匹配的关键词数量
131
+ */
35
132
  private keywordScore;
133
+ /**
134
+ * 扫描目录中的知识文件(内部方法)。
135
+ * @description 递归遍历目录,解析所有 .md 和 .yaml/.yml 文件。
136
+ * @param dir - 要扫描的目录路径
137
+ * @returns 解析后的知识条目数组
138
+ */
36
139
  private scanDirectory;
140
+ /**
141
+ * 将原始数据解析为知识条目(内部方法)。
142
+ * @description 从 frontmatter/解析数据中提取字段,缺失字段使用默认值。
143
+ * @param data - 解析后的 frontmatter 或 YAML 数据
144
+ * @param filePath - 文件路径
145
+ * @param body - Markdown 正文内容(可选)
146
+ * @returns 解析后的知识条目
147
+ */
37
148
  private parseEntry;
149
+ /**
150
+ * 根据文件路径推断知识条目类型(内部方法)。
151
+ * @description 根据路径中包含的目录名推断条目类型。
152
+ * @param filePath - 文件路径
153
+ * @returns 推断出的知识条目类型
154
+ */
38
155
  private inferType;
39
156
  /**
40
- * Export capability registry governance rules as review_rule entries for knowledge audit.
157
+ * 导出能力注册表的治理规则为 review_rule 条目,用于知识审计。
158
+ * @description 将能力治理规则转换为可在知识索引中查询的条目格式。
159
+ * @param caps - 能力规则数组
160
+ * @param caps.policy_id - 策略 ID
161
+ * @param caps.name - 策略名称
162
+ * @param caps.state - 策略状态
163
+ * @param caps.owner_module - 所属模块
164
+ * @param caps.evidence - 证据描述
165
+ * @param caps.promotion_conditions - 晋级条件列表
166
+ * @param caps.demotion_conditions - 降级条件列表
167
+ * @param caps.evidence_requirements - 证据要求列表
168
+ * @param caps.reason - 原因说明
169
+ * @returns 格式化后的治理规则条目数组
41
170
  */
42
171
  exportGovernanceRules(caps: Array<{
43
172
  policy_id: string;
@@ -55,6 +184,15 @@ export declare class KnowledgeIndexManager {
55
184
  scope: string;
56
185
  content: string;
57
186
  }>;
187
+ /**
188
+ * 递归遍历目录获取文件列表(内部方法)。
189
+ * @description 递归遍历目录,收集所有 .md 和 .yaml/.yml 文件路径。
190
+ * 自动跳过 SKIP_DIRS 中定义的系统目录。
191
+ * @param dir - 要遍历的目录
192
+ * @param maxDepth - 最大递归深度,默认 10
193
+ * @param currentDepth - 当前递归深度
194
+ * @returns 文件路径数组
195
+ */
58
196
  private walkFiles;
59
197
  }
60
198
  //# sourceMappingURL=index_manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index_manager.d.ts","sourceRoot":"","sources":["../../src/knowledge/index_manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAQjF,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,OAAO,CAA4D;IAC3E,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,kBAAkB,CAA0C;gBAExD,MAAM,EAAE,aAAa;IAK3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,eAAe;YAOT,sBAAsB;YAiCtB,SAAS;IAkBvB,KAAK,CAAC,OAAO,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,cAAc,EAAE;IAoCpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAWlC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAOhD,aAAa,IAAI;QAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE;IAOlE,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAY7E,OAAO,CAAC,YAAY;YAQN,aAAa;IAgB3B,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,SAAS;IAWjB;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,GAAG,KAAK,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,iBAAiB,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;YA2BY,SAAS;CAsBxB"}
1
+ {"version":3,"file":"index_manager.d.ts","sourceRoot":"","sources":["../../src/knowledge/index_manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAWjF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,OAAO,CAA4D;IAC3E,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAA0C;IAEpE;;;;OAIG;gBACS,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,qBAA0B;IAMtE;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;;;OAIG;YACW,aAAa;IAyC3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;;OAMG;YACW,sBAAsB;IAoCpC;;;;;;OAMG;YACW,SAAS;IAkBvB;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,OAAO,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,cAAc,EAAE;IAqCpB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAYlC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAQhD;;;OAGG;IACH,aAAa,IAAI;QAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE;IAQxE;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAc7E;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAQpB;;;;;OAKG;YACW,aAAa;IAgB3B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;IAoBlB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAWjB;;;;;;;;;;;;;;OAcG;IACH,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,GAAG,KAAK,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,iBAAiB,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IA4BF;;;;;;;;OAQG;YACW,SAAS;CAsBxB"}
@@ -6,32 +6,59 @@ import YAML from "yaml";
6
6
  import { getProjectKnowledgeDir, getGlobalPatternsDir } from "./loader.js";
7
7
  import { checkKnowledgeHealth, persistHealthChanges } from "./health_checker.js";
8
8
  import { detectConflicts } from "./conflict_detector.js";
9
+ /** 跳过的目录名集合 */
9
10
  const SKIP_DIRS = new Set(["node_modules", ".git", ".hg", ".svn", "__pycache__", ".DS_Store"]);
11
+ /** 监听的文件系统事件类型集合 */
10
12
  const WATCH_EVENTS = new Set(["add", "change", "unlink", "unlinkDir"]);
13
+ /**
14
+ * 知识索引管理器。
15
+ * @description 负责扫描、解析、索引知识文件(Markdown 和 YAML),
16
+ * 支持增量更新(文件监听)和按条件查询。
17
+ * 同时提供健康检查和冲突检测功能。
18
+ */
11
19
  export class KnowledgeIndexManager {
12
20
  config;
13
21
  index;
14
22
  watcher = null;
15
23
  rebuildTimer = null;
16
24
  watchingStarted = false;
25
+ watchEnabled;
26
+ closed = false;
17
27
  filePathToEntryMap = new Map();
18
- constructor(config) {
28
+ /**
29
+ * 创建知识索引管理器实例。
30
+ * @param config - 项目配置对象
31
+ * @param options - 索引构建选项
32
+ */
33
+ constructor(config, options = {}) {
19
34
  this.config = config;
35
+ this.watchEnabled = options.watch ?? true;
20
36
  this.index = { version: 1, built_at: "", global_entries: [], project_entries: [] };
21
37
  }
38
+ /**
39
+ * 构建知识索引。
40
+ * @description 扫描全局和项目知识目录,解析所有知识文件并建立索引。
41
+ * 首次构建时启动文件监听。
42
+ */
22
43
  async build() {
44
+ console.error("[soloForge] 索引管理器: 开始构建知识索引...");
23
45
  this.index.built_at = new Date().toISOString();
24
46
  const globalEntries = await this.scanDirectory(getGlobalPatternsDir());
25
47
  const projectEntries = await this.scanDirectory(getProjectKnowledgeDir(this.config));
26
48
  this.index.global_entries = globalEntries;
27
49
  this.index.project_entries = projectEntries;
28
50
  this.rebuildEntryMap();
29
- if (!this.watchingStarted) {
30
- this.startWatching();
51
+ if (!this.watchingStarted && this.watchEnabled) {
52
+ await this.startWatching();
31
53
  this.watchingStarted = true;
32
54
  }
55
+ console.error(`[soloForge] 索引管理器: 索引构建完成 — 全局 ${globalEntries.length} 条,项目 ${projectEntries.length} 条。`);
33
56
  }
57
+ /**
58
+ * 关闭索引管理器,停止文件监听并清理资源。
59
+ */
34
60
  async close() {
61
+ this.closed = true;
35
62
  if (this.rebuildTimer) {
36
63
  clearTimeout(this.rebuildTimer);
37
64
  this.rebuildTimer = null;
@@ -40,8 +67,16 @@ export class KnowledgeIndexManager {
40
67
  await this.watcher.close();
41
68
  this.watcher = null;
42
69
  }
70
+ console.error("[soloForge] 索引管理器: 已关闭。");
43
71
  }
44
- startWatching() {
72
+ /**
73
+ * 启动文件监听(内部方法)。
74
+ * @description 使用 chokidar 监听全局和项目知识目录的文件变更,
75
+ * 变更后 300ms 防抖执行增量更新。
76
+ */
77
+ async startWatching() {
78
+ if (!this.watchEnabled || this.closed)
79
+ return;
45
80
  const dirs = [];
46
81
  const globalDir = getGlobalPatternsDir();
47
82
  const projectDir = getProjectKnowledgeDir(this.config);
@@ -51,35 +86,52 @@ export class KnowledgeIndexManager {
51
86
  dirs.push(projectDir);
52
87
  if (dirs.length === 0)
53
88
  return;
54
- import("chokidar").then(async ({ watch }) => {
55
- if (this.watcher) {
56
- await this.watcher.close();
57
- }
58
- this.watcher = watch(dirs, {
59
- ignoreInitial: true,
60
- persistent: true,
61
- awaitWriteFinish: { stabilityThreshold: 500 },
62
- });
63
- this.watcher.on("all", (event, filePath) => {
64
- if (!WATCH_EVENTS.has(event))
65
- return;
66
- if (this.rebuildTimer)
67
- clearTimeout(this.rebuildTimer);
68
- this.rebuildTimer = setTimeout(() => {
69
- this.applyIncrementalUpdate(event, filePath).catch(() => { });
70
- this.rebuildTimer = null;
71
- }, 300);
72
- });
73
- }).catch(() => {
74
- // chokidar 可选 — 热重载已禁用
89
+ let chokidar;
90
+ try {
91
+ chokidar = await import("chokidar");
92
+ }
93
+ catch {
94
+ console.error("[soloForge] 索引管理器: chokidar 未安装,跳过文件监听。");
95
+ return;
96
+ }
97
+ if (this.closed || !this.watchEnabled)
98
+ return;
99
+ if (this.watcher) {
100
+ await this.watcher.close();
101
+ }
102
+ this.watcher = chokidar.watch(dirs, {
103
+ ignoreInitial: true,
104
+ persistent: true,
105
+ awaitWriteFinish: { stabilityThreshold: 500 },
106
+ });
107
+ this.watcher.on("all", (event, filePath) => {
108
+ if (!WATCH_EVENTS.has(event))
109
+ return;
110
+ if (this.rebuildTimer)
111
+ clearTimeout(this.rebuildTimer);
112
+ this.rebuildTimer = setTimeout(() => {
113
+ this.applyIncrementalUpdate(event, filePath).catch(() => { });
114
+ this.rebuildTimer = null;
115
+ }, 300);
75
116
  });
117
+ console.error("[soloForge] 索引管理器: 文件监听已启动。");
76
118
  }
119
+ /**
120
+ * 重建文件路径到条目的映射(内部方法)。
121
+ */
77
122
  rebuildEntryMap() {
78
123
  this.filePathToEntryMap.clear();
79
124
  for (const entry of [...this.index.project_entries, ...this.index.global_entries]) {
80
125
  this.filePathToEntryMap.set(entry.file_path, entry);
81
126
  }
82
127
  }
128
+ /**
129
+ * 应用增量更新(内部方法)。
130
+ * @description 根据文件系统事件对索引进行增量更新:
131
+ * 删除事件移除条目,新增/修改事件重新解析并更新条目。
132
+ * @param event - 文件系统事件类型
133
+ * @param filePath - 变更的文件路径
134
+ */
83
135
  async applyIncrementalUpdate(event, filePath) {
84
136
  if (!/\.(md|ya?ml)$/.test(filePath))
85
137
  return;
@@ -93,6 +145,7 @@ export class KnowledgeIndexManager {
93
145
  if (idx !== -1)
94
146
  entries.splice(idx, 1);
95
147
  this.filePathToEntryMap.delete(filePath);
148
+ console.error(`[soloForge] 索引管理器: 文件已删除,移除索引条目 — ${filePath}`);
96
149
  return;
97
150
  }
98
151
  try {
@@ -107,11 +160,20 @@ export class KnowledgeIndexManager {
107
160
  }
108
161
  this.filePathToEntryMap.set(filePath, newEntry);
109
162
  }
163
+ console.error(`[soloForge] 索引管理器: 文件变更已更新 — ${filePath}`);
110
164
  }
111
165
  catch {
112
166
  // 跳过解析失败的文件
167
+ console.error(`[soloForge] 索引管理器: 解析文件失败 — ${filePath}`);
113
168
  }
114
169
  }
170
+ /**
171
+ * 解析单个知识文件(内部方法)。
172
+ * @description 根据文件扩展名选择解析器:Markdown 使用 gray-matter 解析 frontmatter,
173
+ * YAML 使用 YAML.parse 解析。
174
+ * @param filePath - 文件路径
175
+ * @returns 解析后的知识条目数组
176
+ */
115
177
  async parseFile(filePath) {
116
178
  const entries = [];
117
179
  try {
@@ -131,7 +193,20 @@ export class KnowledgeIndexManager {
131
193
  }
132
194
  return entries;
133
195
  }
196
+ /**
197
+ * 按条件查询知识条目。
198
+ * @description 支持按 scope、products、type 过滤,以及按 keywords 关键词匹配和排序。
199
+ * 只返回 status 为 active 的条目,默认限制返回 5 条。
200
+ * @param filters - 查询过滤条件
201
+ * @param filters.scope - 作用域过滤列表
202
+ * @param filters.products - 产品过滤列表
203
+ * @param filters.type - 条目类型过滤
204
+ * @param filters.keywords - 关键词列表(用于模糊匹配 name 和 when 字段)
205
+ * @param filters.limit - 最大返回条数,默认 5
206
+ * @returns 匹配的知识条目数组
207
+ */
134
208
  query(filters) {
209
+ console.error("[soloForge] 知识索引: 查询知识条目");
135
210
  const all = [...this.index.project_entries, ...this.index.global_entries];
136
211
  const scopeSet = new Set(filters.scope ?? []);
137
212
  const productSet = new Set(filters.products ?? []);
@@ -167,6 +242,11 @@ export class KnowledgeIndexManager {
167
242
  }
168
243
  return results.slice(0, filters.limit ?? 5);
169
244
  }
245
+ /**
246
+ * 标记知识条目为已使用。
247
+ * @description 增加指定条目的 usage_count 并更新 last_used_at 时间戳。
248
+ * @param entryIds - 要标记的条目 ID 列表
249
+ */
170
250
  markUsed(entryIds) {
171
251
  const idSet = new Set(entryIds);
172
252
  const now = new Date().toISOString();
@@ -176,31 +256,69 @@ export class KnowledgeIndexManager {
176
256
  entry.last_used_at = now;
177
257
  }
178
258
  }
259
+ console.error(`[soloForge] 索引管理器: 已标记 ${entryIds.length} 条知识为已使用。`);
179
260
  }
261
+ /**
262
+ * 根据 ID 获取知识条目。
263
+ * @param id - 条目 ID
264
+ * @returns 匹配的知识条目,未找到则返回 undefined
265
+ */
180
266
  getEntry(id) {
267
+ console.error("[soloForge] 知识索引: 获取条目 — " + id);
181
268
  return (this.index.project_entries.find((e) => e.id === id) ||
182
269
  this.index.global_entries.find((e) => e.id === id));
183
270
  }
271
+ /**
272
+ * 获取所有知识条目(按来源分组)。
273
+ * @returns 包含全局和项目知识条目的对象
274
+ */
184
275
  getAllEntries() {
276
+ console.error("[soloForge] 知识索引: 获取所有条目");
185
277
  return {
186
278
  global: this.index.global_entries,
187
279
  project: this.index.project_entries,
188
280
  };
189
281
  }
282
+ /**
283
+ * 在内存中添加知识条目。
284
+ * @param entry - 要添加的知识条目
285
+ */
190
286
  async addEntryInMemory(entry) {
287
+ console.error("[soloForge] 知识索引: 内存添加条目 — " + entry.name);
191
288
  this.index.project_entries.push(entry);
289
+ this.filePathToEntryMap.set(entry.file_path, entry);
192
290
  }
291
+ /**
292
+ * 重新加载知识索引。
293
+ * @description 完全重建索引,重新扫描所有知识文件。
294
+ */
193
295
  async reload() {
296
+ console.error("[soloForge] 索引管理器: 重新加载索引...");
194
297
  await this.build();
195
298
  }
299
+ /**
300
+ * 执行知识健康检查和冲突检测。
301
+ * @description 检查所有知识条目的健康状态(过期、零使用),
302
+ * 对活跃项目条目执行冲突检测,并将状态变更持久化到磁盘。
303
+ * @returns 包含健康问题和冲突的数组
304
+ */
196
305
  async checkHealth() {
306
+ console.error("[soloForge] 索引管理器: 执行健康检查...");
197
307
  const all = [...this.index.project_entries, ...this.index.global_entries];
198
308
  const issues = checkKnowledgeHealth(all);
199
309
  const activeProject = this.index.project_entries.filter((e) => e.status === "active");
200
310
  issues.push(...detectConflicts(activeProject));
201
311
  await persistHealthChanges(issues);
312
+ console.error(`[soloForge] 索引管理器: 健康检查完成 — 发现 ${issues.length} 个问题。`);
202
313
  return issues;
203
314
  }
315
+ /**
316
+ * 计算关键词匹配分数(内部方法)。
317
+ * @description 在条目的 name 和 when 字段中搜索关键词,返回匹配数。
318
+ * @param entry - 知识条目
319
+ * @param keywords - 关键词列表
320
+ * @returns 匹配的关键词数量
321
+ */
204
322
  keywordScore(entry, keywords) {
205
323
  const text = ` ${entry.name} ${entry.when} `.toLowerCase();
206
324
  return keywords.filter((kw) => {
@@ -208,6 +326,12 @@ export class KnowledgeIndexManager {
208
326
  return text.includes(` ${lowerKw} `) || text.startsWith(`${lowerKw} `) || text.endsWith(` ${lowerKw}`);
209
327
  }).length;
210
328
  }
329
+ /**
330
+ * 扫描目录中的知识文件(内部方法)。
331
+ * @description 递归遍历目录,解析所有 .md 和 .yaml/.yml 文件。
332
+ * @param dir - 要扫描的目录路径
333
+ * @returns 解析后的知识条目数组
334
+ */
211
335
  async scanDirectory(dir) {
212
336
  const entries = [];
213
337
  try {
@@ -223,6 +347,14 @@ export class KnowledgeIndexManager {
223
347
  }
224
348
  return entries;
225
349
  }
350
+ /**
351
+ * 将原始数据解析为知识条目(内部方法)。
352
+ * @description 从 frontmatter/解析数据中提取字段,缺失字段使用默认值。
353
+ * @param data - 解析后的 frontmatter 或 YAML 数据
354
+ * @param filePath - 文件路径
355
+ * @param body - Markdown 正文内容(可选)
356
+ * @returns 解析后的知识条目
357
+ */
226
358
  parseEntry(data, filePath, body) {
227
359
  return {
228
360
  id: data.name || path.basename(filePath, path.extname(filePath)),
@@ -242,6 +374,12 @@ export class KnowledgeIndexManager {
242
374
  status: data.status || "active",
243
375
  };
244
376
  }
377
+ /**
378
+ * 根据文件路径推断知识条目类型(内部方法)。
379
+ * @description 根据路径中包含的目录名推断条目类型。
380
+ * @param filePath - 文件路径
381
+ * @returns 推断出的知识条目类型
382
+ */
245
383
  inferType(filePath) {
246
384
  const parts = filePath.split(path.sep);
247
385
  if (parts.includes("patterns"))
@@ -259,9 +397,22 @@ export class KnowledgeIndexManager {
259
397
  return "pattern";
260
398
  }
261
399
  /**
262
- * Export capability registry governance rules as review_rule entries for knowledge audit.
400
+ * 导出能力注册表的治理规则为 review_rule 条目,用于知识审计。
401
+ * @description 将能力治理规则转换为可在知识索引中查询的条目格式。
402
+ * @param caps - 能力规则数组
403
+ * @param caps.policy_id - 策略 ID
404
+ * @param caps.name - 策略名称
405
+ * @param caps.state - 策略状态
406
+ * @param caps.owner_module - 所属模块
407
+ * @param caps.evidence - 证据描述
408
+ * @param caps.promotion_conditions - 晋级条件列表
409
+ * @param caps.demotion_conditions - 降级条件列表
410
+ * @param caps.evidence_requirements - 证据要求列表
411
+ * @param caps.reason - 原因说明
412
+ * @returns 格式化后的治理规则条目数组
263
413
  */
264
414
  exportGovernanceRules(caps) {
415
+ console.error("[soloForge] 知识索引: 导出治理规则 — 条数: " + caps.length);
265
416
  return caps.map((cap) => ({
266
417
  name: `${cap.policy_id}: ${cap.name}`,
267
418
  type: "governance_rule",
@@ -287,6 +438,15 @@ export class KnowledgeIndexManager {
287
438
  ].join("\n"),
288
439
  }));
289
440
  }
441
+ /**
442
+ * 递归遍历目录获取文件列表(内部方法)。
443
+ * @description 递归遍历目录,收集所有 .md 和 .yaml/.yml 文件路径。
444
+ * 自动跳过 SKIP_DIRS 中定义的系统目录。
445
+ * @param dir - 要遍历的目录
446
+ * @param maxDepth - 最大递归深度,默认 10
447
+ * @param currentDepth - 当前递归深度
448
+ * @returns 文件路径数组
449
+ */
290
450
  async walkFiles(dir, maxDepth = 10, currentDepth = 0) {
291
451
  if (currentDepth >= maxDepth)
292
452
  return [];