@soleri/core 9.0.4 → 9.2.0

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 (701) hide show
  1. package/dist/brain/intelligence.d.ts +27 -0
  2. package/dist/brain/intelligence.d.ts.map +1 -1
  3. package/dist/brain/intelligence.js +160 -14
  4. package/dist/brain/intelligence.js.map +1 -1
  5. package/dist/brain/learning-radar.d.ts +4 -0
  6. package/dist/brain/learning-radar.d.ts.map +1 -1
  7. package/dist/brain/learning-radar.js +20 -1
  8. package/dist/brain/learning-radar.js.map +1 -1
  9. package/dist/brain/strength-scorer.d.ts +31 -0
  10. package/dist/brain/strength-scorer.d.ts.map +1 -0
  11. package/dist/brain/strength-scorer.js +264 -0
  12. package/dist/brain/strength-scorer.js.map +1 -0
  13. package/dist/chat/agent-loop.d.ts.map +1 -1
  14. package/dist/chat/agent-loop.js +2 -0
  15. package/dist/chat/agent-loop.js.map +1 -1
  16. package/dist/chat/notifications.d.ts.map +1 -1
  17. package/dist/chat/notifications.js +2 -0
  18. package/dist/chat/notifications.js.map +1 -1
  19. package/dist/claudemd/compose.js +1 -1
  20. package/dist/claudemd/compose.js.map +1 -1
  21. package/dist/control/intent-router.d.ts.map +1 -1
  22. package/dist/control/intent-router.js +12 -4
  23. package/dist/control/intent-router.js.map +1 -1
  24. package/dist/curator/contradiction-detector.d.ts +27 -0
  25. package/dist/curator/contradiction-detector.d.ts.map +1 -0
  26. package/dist/curator/contradiction-detector.js +62 -0
  27. package/dist/curator/contradiction-detector.js.map +1 -0
  28. package/dist/curator/curator.d.ts +3 -4
  29. package/dist/curator/curator.d.ts.map +1 -1
  30. package/dist/curator/curator.js +90 -525
  31. package/dist/curator/curator.js.map +1 -1
  32. package/dist/curator/duplicate-detector.d.ts +14 -0
  33. package/dist/curator/duplicate-detector.d.ts.map +1 -0
  34. package/dist/curator/duplicate-detector.js +77 -0
  35. package/dist/curator/duplicate-detector.js.map +1 -0
  36. package/dist/curator/health-audit.d.ts +15 -0
  37. package/dist/curator/health-audit.d.ts.map +1 -0
  38. package/dist/curator/health-audit.js +97 -0
  39. package/dist/curator/health-audit.js.map +1 -0
  40. package/dist/curator/metadata-enricher.d.ts +17 -0
  41. package/dist/curator/metadata-enricher.d.ts.map +1 -0
  42. package/dist/curator/metadata-enricher.js +60 -0
  43. package/dist/curator/metadata-enricher.js.map +1 -0
  44. package/dist/curator/schema.d.ts +7 -0
  45. package/dist/curator/schema.d.ts.map +1 -0
  46. package/dist/curator/schema.js +62 -0
  47. package/dist/curator/schema.js.map +1 -0
  48. package/dist/curator/tag-manager.d.ts +36 -0
  49. package/dist/curator/tag-manager.d.ts.map +1 -0
  50. package/dist/curator/tag-manager.js +78 -0
  51. package/dist/curator/tag-manager.js.map +1 -0
  52. package/dist/engine/bin/soleri-engine.js +24 -3
  53. package/dist/engine/bin/soleri-engine.js.map +1 -1
  54. package/dist/engine/core-ops.d.ts.map +1 -1
  55. package/dist/engine/core-ops.js +23 -8
  56. package/dist/engine/core-ops.js.map +1 -1
  57. package/dist/engine/module-manifest.d.ts.map +1 -1
  58. package/dist/engine/module-manifest.js +22 -2
  59. package/dist/engine/module-manifest.js.map +1 -1
  60. package/dist/engine/register-engine.d.ts.map +1 -1
  61. package/dist/engine/register-engine.js +26 -2
  62. package/dist/engine/register-engine.js.map +1 -1
  63. package/dist/errors/retry.d.ts.map +1 -1
  64. package/dist/errors/retry.js +2 -0
  65. package/dist/errors/retry.js.map +1 -1
  66. package/dist/facades/types.d.ts +1 -1
  67. package/dist/flows/chain-types.d.ts +18 -18
  68. package/dist/flows/gate-evaluator.d.ts.map +1 -1
  69. package/dist/flows/gate-evaluator.js +22 -0
  70. package/dist/flows/gate-evaluator.js.map +1 -1
  71. package/dist/flows/types.d.ts +157 -28
  72. package/dist/flows/types.d.ts.map +1 -1
  73. package/dist/flows/types.js +4 -0
  74. package/dist/flows/types.js.map +1 -1
  75. package/dist/index.d.ts +10 -2
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +9 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/intake/intake-pipeline.d.ts.map +1 -1
  80. package/dist/intake/intake-pipeline.js +1 -0
  81. package/dist/intake/intake-pipeline.js.map +1 -1
  82. package/dist/intake/text-ingester.d.ts.map +1 -1
  83. package/dist/intake/text-ingester.js +2 -0
  84. package/dist/intake/text-ingester.js.map +1 -1
  85. package/dist/llm/key-pool.d.ts +1 -1
  86. package/dist/llm/key-pool.d.ts.map +1 -1
  87. package/dist/llm/key-pool.js +3 -4
  88. package/dist/llm/key-pool.js.map +1 -1
  89. package/dist/llm/utils.d.ts.map +1 -1
  90. package/dist/llm/utils.js +2 -0
  91. package/dist/llm/utils.js.map +1 -1
  92. package/dist/migrations/migration-runner.test-helpers.d.ts +13 -0
  93. package/dist/migrations/migration-runner.test-helpers.d.ts.map +1 -0
  94. package/dist/migrations/migration-runner.test-helpers.js +47 -0
  95. package/dist/migrations/migration-runner.test-helpers.js.map +1 -0
  96. package/dist/operator/operator-profile.d.ts +44 -0
  97. package/dist/operator/operator-profile.d.ts.map +1 -0
  98. package/dist/operator/operator-profile.js +377 -0
  99. package/dist/operator/operator-profile.js.map +1 -0
  100. package/dist/operator/operator-signals.d.ts +45 -0
  101. package/dist/operator/operator-signals.d.ts.map +1 -0
  102. package/dist/operator/operator-signals.js +228 -0
  103. package/dist/operator/operator-signals.js.map +1 -0
  104. package/dist/operator/operator-types.d.ts +360 -0
  105. package/dist/operator/operator-types.d.ts.map +1 -0
  106. package/dist/operator/operator-types.js +24 -0
  107. package/dist/operator/operator-types.js.map +1 -0
  108. package/dist/packs/types.d.ts +27 -27
  109. package/dist/paths.d.ts +40 -0
  110. package/dist/paths.d.ts.map +1 -0
  111. package/dist/paths.js +98 -0
  112. package/dist/paths.js.map +1 -0
  113. package/dist/persistence/index.d.ts +1 -1
  114. package/dist/persistence/index.d.ts.map +1 -1
  115. package/dist/persistence/index.js +1 -1
  116. package/dist/persistence/index.js.map +1 -1
  117. package/dist/persistence/sqlite-provider.d.ts +2 -0
  118. package/dist/persistence/sqlite-provider.d.ts.map +1 -1
  119. package/dist/persistence/sqlite-provider.js +8 -5
  120. package/dist/persistence/sqlite-provider.js.map +1 -1
  121. package/dist/planning/evidence-collector.d.ts +13 -1
  122. package/dist/planning/evidence-collector.d.ts.map +1 -1
  123. package/dist/planning/evidence-collector.js +33 -0
  124. package/dist/planning/evidence-collector.js.map +1 -1
  125. package/dist/planning/gap-analysis.d.ts +5 -4
  126. package/dist/planning/gap-analysis.d.ts.map +1 -1
  127. package/dist/planning/gap-analysis.js +7 -341
  128. package/dist/planning/gap-analysis.js.map +1 -1
  129. package/dist/planning/gap-passes.d.ts +19 -0
  130. package/dist/planning/gap-passes.d.ts.map +1 -0
  131. package/dist/planning/gap-passes.js +157 -0
  132. package/dist/planning/gap-passes.js.map +1 -0
  133. package/dist/planning/gap-patterns.d.ts +29 -0
  134. package/dist/planning/gap-patterns.d.ts.map +1 -0
  135. package/dist/planning/gap-patterns.js +129 -0
  136. package/dist/planning/gap-patterns.js.map +1 -0
  137. package/dist/planning/gap-types.d.ts +1 -1
  138. package/dist/planning/gap-types.d.ts.map +1 -1
  139. package/dist/planning/gap-types.js +1 -0
  140. package/dist/planning/gap-types.js.map +1 -1
  141. package/dist/planning/github-projection.d.ts +122 -0
  142. package/dist/planning/github-projection.d.ts.map +1 -0
  143. package/dist/planning/github-projection.js +294 -0
  144. package/dist/planning/github-projection.js.map +1 -0
  145. package/dist/planning/impact-analyzer.d.ts +26 -0
  146. package/dist/planning/impact-analyzer.d.ts.map +1 -0
  147. package/dist/planning/impact-analyzer.js +199 -0
  148. package/dist/planning/impact-analyzer.js.map +1 -0
  149. package/dist/planning/plan-lifecycle.d.ts +136 -0
  150. package/dist/planning/plan-lifecycle.d.ts.map +1 -0
  151. package/dist/planning/plan-lifecycle.js +296 -0
  152. package/dist/planning/plan-lifecycle.js.map +1 -0
  153. package/dist/planning/planner-types.d.ts +202 -0
  154. package/dist/planning/planner-types.d.ts.map +1 -0
  155. package/dist/planning/planner-types.js +6 -0
  156. package/dist/planning/planner-types.js.map +1 -0
  157. package/dist/planning/planner.d.ts +31 -383
  158. package/dist/planning/planner.d.ts.map +1 -1
  159. package/dist/planning/planner.js +154 -878
  160. package/dist/planning/planner.js.map +1 -1
  161. package/dist/planning/rationalization-detector.d.ts +32 -0
  162. package/dist/planning/rationalization-detector.d.ts.map +1 -0
  163. package/dist/planning/rationalization-detector.js +89 -0
  164. package/dist/planning/rationalization-detector.js.map +1 -0
  165. package/dist/planning/reconciliation-engine.d.ts +47 -0
  166. package/dist/planning/reconciliation-engine.d.ts.map +1 -0
  167. package/dist/planning/reconciliation-engine.js +128 -0
  168. package/dist/planning/reconciliation-engine.js.map +1 -0
  169. package/dist/planning/task-verifier.d.ts +85 -0
  170. package/dist/planning/task-verifier.d.ts.map +1 -0
  171. package/dist/planning/task-verifier.js +227 -0
  172. package/dist/planning/task-verifier.js.map +1 -0
  173. package/dist/plugins/types.d.ts +4 -4
  174. package/dist/runtime/admin-ops.d.ts +2 -2
  175. package/dist/runtime/admin-ops.d.ts.map +1 -1
  176. package/dist/runtime/admin-ops.js +44 -17
  177. package/dist/runtime/admin-ops.js.map +1 -1
  178. package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
  179. package/dist/runtime/admin-setup-ops.js +21 -46
  180. package/dist/runtime/admin-setup-ops.js.map +1 -1
  181. package/dist/runtime/archive-ops.d.ts +10 -0
  182. package/dist/runtime/archive-ops.d.ts.map +1 -0
  183. package/dist/runtime/archive-ops.js +310 -0
  184. package/dist/runtime/archive-ops.js.map +1 -0
  185. package/dist/runtime/capture-ops.d.ts.map +1 -1
  186. package/dist/runtime/capture-ops.js +42 -7
  187. package/dist/runtime/capture-ops.js.map +1 -1
  188. package/dist/runtime/claude-md-helpers.js +1 -1
  189. package/dist/runtime/claude-md-helpers.js.map +1 -1
  190. package/dist/runtime/context-health.d.ts +31 -0
  191. package/dist/runtime/context-health.d.ts.map +1 -0
  192. package/dist/runtime/context-health.js +57 -0
  193. package/dist/runtime/context-health.js.map +1 -0
  194. package/dist/runtime/facades/archive-facade.d.ts +10 -0
  195. package/dist/runtime/facades/archive-facade.d.ts.map +1 -0
  196. package/dist/runtime/facades/archive-facade.js +11 -0
  197. package/dist/runtime/facades/archive-facade.js.map +1 -0
  198. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  199. package/dist/runtime/facades/brain-facade.js +2 -0
  200. package/dist/runtime/facades/brain-facade.js.map +1 -1
  201. package/dist/runtime/facades/chat-facade.d.ts +7 -0
  202. package/dist/runtime/facades/chat-facade.d.ts.map +1 -1
  203. package/dist/runtime/facades/chat-facade.js +15 -800
  204. package/dist/runtime/facades/chat-facade.js.map +1 -1
  205. package/dist/runtime/facades/chat-service-ops.d.ts +9 -0
  206. package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -0
  207. package/dist/runtime/facades/chat-service-ops.js +330 -0
  208. package/dist/runtime/facades/chat-service-ops.js.map +1 -0
  209. package/dist/runtime/facades/chat-session-ops.d.ts +8 -0
  210. package/dist/runtime/facades/chat-session-ops.d.ts.map +1 -0
  211. package/dist/runtime/facades/chat-session-ops.js +136 -0
  212. package/dist/runtime/facades/chat-session-ops.js.map +1 -0
  213. package/dist/runtime/facades/chat-state.d.ts +31 -0
  214. package/dist/runtime/facades/chat-state.d.ts.map +1 -0
  215. package/dist/runtime/facades/chat-state.js +32 -0
  216. package/dist/runtime/facades/chat-state.js.map +1 -0
  217. package/dist/runtime/facades/chat-transport-ops.d.ts +9 -0
  218. package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -0
  219. package/dist/runtime/facades/chat-transport-ops.js +337 -0
  220. package/dist/runtime/facades/chat-transport-ops.js.map +1 -0
  221. package/dist/runtime/facades/control-facade.d.ts.map +1 -1
  222. package/dist/runtime/facades/control-facade.js +4 -1
  223. package/dist/runtime/facades/control-facade.js.map +1 -1
  224. package/dist/runtime/facades/index.d.ts.map +1 -1
  225. package/dist/runtime/facades/index.js +6 -0
  226. package/dist/runtime/facades/index.js.map +1 -1
  227. package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
  228. package/dist/runtime/facades/memory-facade.js +75 -6
  229. package/dist/runtime/facades/memory-facade.js.map +1 -1
  230. package/dist/runtime/facades/operator-facade.d.ts +8 -0
  231. package/dist/runtime/facades/operator-facade.d.ts.map +1 -0
  232. package/dist/runtime/facades/operator-facade.js +220 -0
  233. package/dist/runtime/facades/operator-facade.js.map +1 -0
  234. package/dist/runtime/facades/orchestrate-facade.js +3 -3
  235. package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
  236. package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
  237. package/dist/runtime/facades/plan-facade.js +39 -6
  238. package/dist/runtime/facades/plan-facade.js.map +1 -1
  239. package/dist/runtime/facades/review-facade.d.ts +7 -0
  240. package/dist/runtime/facades/review-facade.d.ts.map +1 -0
  241. package/dist/runtime/facades/review-facade.js +8 -0
  242. package/dist/runtime/facades/review-facade.js.map +1 -0
  243. package/dist/runtime/facades/sync-facade.d.ts +7 -0
  244. package/dist/runtime/facades/sync-facade.d.ts.map +1 -0
  245. package/dist/runtime/facades/sync-facade.js +8 -0
  246. package/dist/runtime/facades/sync-facade.js.map +1 -0
  247. package/dist/runtime/facades/vault-facade.d.ts +4 -1
  248. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  249. package/dist/runtime/facades/vault-facade.js +13 -66
  250. package/dist/runtime/facades/vault-facade.js.map +1 -1
  251. package/dist/runtime/github-integration.d.ts +49 -0
  252. package/dist/runtime/github-integration.d.ts.map +1 -0
  253. package/dist/runtime/github-integration.js +113 -0
  254. package/dist/runtime/github-integration.js.map +1 -0
  255. package/dist/runtime/grading-ops.js +1 -1
  256. package/dist/runtime/grading-ops.js.map +1 -1
  257. package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
  258. package/dist/runtime/memory-extra-ops.js +6 -2
  259. package/dist/runtime/memory-extra-ops.js.map +1 -1
  260. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  261. package/dist/runtime/orchestrate-ops.js +367 -40
  262. package/dist/runtime/orchestrate-ops.js.map +1 -1
  263. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  264. package/dist/runtime/planning-extra-ops.js +69 -4
  265. package/dist/runtime/planning-extra-ops.js.map +1 -1
  266. package/dist/runtime/review-ops.d.ts +10 -0
  267. package/dist/runtime/review-ops.d.ts.map +1 -0
  268. package/dist/runtime/review-ops.js +97 -0
  269. package/dist/runtime/review-ops.js.map +1 -0
  270. package/dist/runtime/runtime.d.ts.map +1 -1
  271. package/dist/runtime/runtime.js +27 -12
  272. package/dist/runtime/runtime.js.map +1 -1
  273. package/dist/runtime/session-briefing.d.ts +3 -0
  274. package/dist/runtime/session-briefing.d.ts.map +1 -1
  275. package/dist/runtime/session-briefing.js +68 -1
  276. package/dist/runtime/session-briefing.js.map +1 -1
  277. package/dist/runtime/sync-ops.d.ts +12 -0
  278. package/dist/runtime/sync-ops.d.ts.map +1 -0
  279. package/dist/runtime/sync-ops.js +288 -0
  280. package/dist/runtime/sync-ops.js.map +1 -0
  281. package/dist/runtime/types.d.ts +10 -4
  282. package/dist/runtime/types.d.ts.map +1 -1
  283. package/dist/runtime/vault-extra-ops.d.ts +5 -4
  284. package/dist/runtime/vault-extra-ops.d.ts.map +1 -1
  285. package/dist/runtime/vault-extra-ops.js +5 -300
  286. package/dist/runtime/vault-extra-ops.js.map +1 -1
  287. package/dist/runtime/vault-sharing-ops.d.ts +4 -4
  288. package/dist/runtime/vault-sharing-ops.d.ts.map +1 -1
  289. package/dist/runtime/vault-sharing-ops.js +5 -300
  290. package/dist/runtime/vault-sharing-ops.js.map +1 -1
  291. package/dist/skills/sync-skills.d.ts +27 -0
  292. package/dist/skills/sync-skills.d.ts.map +1 -0
  293. package/dist/skills/sync-skills.js +81 -0
  294. package/dist/skills/sync-skills.js.map +1 -0
  295. package/dist/update-check.d.ts +14 -0
  296. package/dist/update-check.d.ts.map +1 -0
  297. package/dist/update-check.js +96 -0
  298. package/dist/update-check.js.map +1 -0
  299. package/dist/vault/linking.d.ts +10 -12
  300. package/dist/vault/linking.d.ts.map +1 -1
  301. package/dist/vault/linking.js +104 -161
  302. package/dist/vault/linking.js.map +1 -1
  303. package/dist/vault/vault-entries.d.ts +69 -0
  304. package/dist/vault/vault-entries.d.ts.map +1 -0
  305. package/dist/vault/vault-entries.js +257 -0
  306. package/dist/vault/vault-entries.js.map +1 -0
  307. package/dist/vault/vault-interfaces.d.ts +153 -0
  308. package/dist/vault/vault-interfaces.d.ts.map +1 -0
  309. package/dist/vault/vault-interfaces.js +2 -0
  310. package/dist/vault/vault-interfaces.js.map +1 -0
  311. package/dist/vault/vault-maintenance.d.ts +40 -0
  312. package/dist/vault/vault-maintenance.d.ts.map +1 -0
  313. package/dist/vault/vault-maintenance.js +142 -0
  314. package/dist/vault/vault-maintenance.js.map +1 -0
  315. package/dist/vault/vault-markdown-sync.d.ts +22 -0
  316. package/dist/vault/vault-markdown-sync.d.ts.map +1 -0
  317. package/dist/vault/vault-markdown-sync.js +143 -0
  318. package/dist/vault/vault-markdown-sync.js.map +1 -0
  319. package/dist/vault/vault-memories.d.ts +61 -0
  320. package/dist/vault/vault-memories.d.ts.map +1 -0
  321. package/dist/vault/vault-memories.js +240 -0
  322. package/dist/vault/vault-memories.js.map +1 -0
  323. package/dist/vault/vault-schema.d.ts +9 -0
  324. package/dist/vault/vault-schema.d.ts.map +1 -0
  325. package/dist/vault/vault-schema.js +179 -0
  326. package/dist/vault/vault-schema.js.map +1 -0
  327. package/dist/vault/vault.d.ts +29 -81
  328. package/dist/vault/vault.d.ts.map +1 -1
  329. package/dist/vault/vault.js +78 -931
  330. package/dist/vault/vault.js.map +1 -1
  331. package/package.json +1 -1
  332. package/src/agency/agency-manager.test.ts +600 -0
  333. package/src/agency/default-rules.test.ts +228 -0
  334. package/src/{__tests__ → brain}/brain-intelligence.test.ts +37 -14
  335. package/src/{__tests__ → brain}/brain.test.ts +1 -1
  336. package/src/brain/intelligence.ts +196 -15
  337. package/src/brain/learning-radar.ts +22 -1
  338. package/src/{__tests__ → brain}/second-brain-features.test.ts +4 -4
  339. package/src/{__tests__ → brain}/session-lifecycle.test.ts +2 -2
  340. package/src/brain/strength-scorer.ts +404 -0
  341. package/src/capabilities/chain-mapping.test.ts +66 -0
  342. package/src/capabilities/registry.test.ts +369 -0
  343. package/src/chat/agent-loop.test.ts +394 -0
  344. package/src/chat/agent-loop.ts +2 -0
  345. package/src/{__tests__ → chat}/chat-differentiators.test.ts +3 -3
  346. package/src/{__tests__ → chat}/chat-enhanced.test.ts +4 -4
  347. package/src/{__tests__ → chat}/chat-transport.test.ts +6 -6
  348. package/src/chat/mcp-bridge.test.ts +173 -0
  349. package/src/chat/notifications.ts +2 -0
  350. package/src/chat/output-compressor.test.ts +164 -0
  351. package/src/claudemd/compose.test.ts +178 -0
  352. package/src/claudemd/compose.ts +1 -1
  353. package/src/claudemd/inject.test.ts +211 -0
  354. package/src/context/context-engine.test.ts +461 -0
  355. package/src/control/identity-manager.test.ts +305 -0
  356. package/src/control/intent-router.test.ts +360 -0
  357. package/src/control/intent-router.ts +13 -4
  358. package/src/curator/classifier.test.ts +104 -0
  359. package/src/curator/contradiction-detector.test.ts +180 -0
  360. package/src/curator/contradiction-detector.ts +87 -0
  361. package/src/{__tests__ → curator}/curator-pipeline-e2e.test.ts +10 -10
  362. package/src/{__tests__ → curator}/curator.test.ts +77 -1
  363. package/src/curator/curator.ts +115 -777
  364. package/src/curator/duplicate-detector.test.ts +183 -0
  365. package/src/curator/duplicate-detector.ts +103 -0
  366. package/src/curator/health-audit.ts +126 -0
  367. package/src/curator/metadata-enricher.ts +84 -0
  368. package/src/curator/quality-gate.test.ts +135 -0
  369. package/src/curator/schema.ts +65 -0
  370. package/src/curator/tag-manager.test.ts +165 -0
  371. package/src/curator/tag-manager.ts +109 -0
  372. package/src/domain-packs/inject-rules.test.ts +117 -0
  373. package/src/domain-packs/knowledge-installer.test.ts +171 -0
  374. package/src/domain-packs/loader.test.ts +86 -0
  375. package/src/domain-packs/pack-runtime.test.ts +140 -0
  376. package/src/domain-packs/skills-installer.test.ts +135 -0
  377. package/src/domain-packs/token-resolver.test.ts +150 -0
  378. package/src/domain-packs/types.test.ts +130 -0
  379. package/src/enforcement/adapters/claude-code.test.ts +216 -0
  380. package/src/enforcement/registry.test.ts +264 -0
  381. package/src/engine/bin/soleri-engine.ts +28 -4
  382. package/src/engine/core-ops.test.ts +254 -0
  383. package/src/engine/core-ops.ts +25 -8
  384. package/src/engine/module-manifest.test.ts +124 -0
  385. package/src/engine/module-manifest.ts +22 -2
  386. package/src/engine/register-engine.test.ts +230 -0
  387. package/src/engine/register-engine.ts +26 -2
  388. package/src/errors/classify.test.ts +199 -0
  389. package/src/errors/retry.test.ts +156 -0
  390. package/src/errors/retry.ts +2 -0
  391. package/src/errors/types.test.ts +108 -0
  392. package/src/events/event-bus.test.ts +149 -0
  393. package/src/extensions/middleware.test.ts +234 -0
  394. package/src/facades/facade-factory.test.ts +424 -0
  395. package/src/flows/chain-runner.test.ts +273 -0
  396. package/src/flows/context-router.test.ts +52 -0
  397. package/src/flows/dispatch-registry.test.ts +128 -0
  398. package/src/flows/epilogue.test.ts +107 -0
  399. package/src/flows/executor.test.ts +263 -0
  400. package/src/flows/gate-evaluator.test.ts +194 -0
  401. package/src/flows/gate-evaluator.ts +25 -0
  402. package/src/flows/types.ts +4 -0
  403. package/src/governance/governance.test.ts +726 -0
  404. package/src/health/health-registry.test.ts +186 -0
  405. package/src/health/vault-integrity.test.ts +110 -0
  406. package/src/index.ts +92 -0
  407. package/src/intake/content-classifier.test.ts +209 -0
  408. package/src/intake/dedup-gate.test.ts +131 -0
  409. package/src/intake/intake-pipeline.test.ts +506 -0
  410. package/src/intake/intake-pipeline.ts +1 -0
  411. package/src/intake/text-ingester.test.ts +194 -0
  412. package/src/intake/text-ingester.ts +2 -0
  413. package/src/llm/key-pool.test.ts +236 -0
  414. package/src/llm/key-pool.ts +3 -4
  415. package/src/llm/llm-client.test.ts +345 -0
  416. package/src/llm/oauth-discovery.test.ts +180 -0
  417. package/src/llm/utils.test.ts +327 -0
  418. package/src/llm/utils.ts +2 -0
  419. package/src/{__tests__ → logging}/logger.test.ts +41 -62
  420. package/src/loop/loop-manager.test.ts +519 -0
  421. package/src/migrations/migration-runner.edge-cases.test.ts +319 -0
  422. package/src/migrations/migration-runner.test-helpers.ts +64 -0
  423. package/src/migrations/migration-runner.test.ts +385 -0
  424. package/src/operator/auto-signal-pipeline.test.ts +207 -0
  425. package/src/operator/operator-profile-extended.test.ts +320 -0
  426. package/src/operator/operator-profile.test.ts +314 -0
  427. package/src/operator/operator-profile.ts +469 -0
  428. package/src/operator/operator-signals-extended.test.ts +245 -0
  429. package/src/operator/operator-signals.test.ts +281 -0
  430. package/src/operator/operator-signals.ts +261 -0
  431. package/src/operator/operator-types.ts +444 -0
  432. package/src/operator/prompts/hook-precompact-operator-dispatch.md +94 -0
  433. package/src/operator/prompts/subagent-soft-signal-extractor.md +125 -0
  434. package/src/operator/prompts/subagent-synthesis-cognition.md +181 -0
  435. package/src/operator/prompts/subagent-synthesis-communication.md +140 -0
  436. package/src/operator/prompts/subagent-synthesis-technical.md +160 -0
  437. package/src/operator/prompts/subagent-synthesis-trust.md +143 -0
  438. package/src/{__tests__ → packs}/pack-lockfile.test.ts +3 -3
  439. package/src/{__tests__ → packs}/pack-system.test.ts +2 -2
  440. package/src/paths.ts +115 -0
  441. package/src/persistence/index.ts +1 -1
  442. package/src/persistence/sqlite-provider.test.ts +540 -0
  443. package/src/persistence/sqlite-provider.ts +8 -5
  444. package/src/persona/defaults.test.ts +59 -0
  445. package/src/persona/loader.test.ts +67 -0
  446. package/src/persona/prompt-generator.test.ts +127 -0
  447. package/src/planning/evidence-collector.test.ts +406 -0
  448. package/src/planning/evidence-collector.ts +50 -0
  449. package/src/planning/gap-analysis-alternatives.test.ts +169 -0
  450. package/src/planning/gap-analysis.ts +21 -636
  451. package/src/planning/gap-passes.test.ts +372 -0
  452. package/src/planning/gap-passes.ts +298 -0
  453. package/src/planning/gap-patterns.test.ts +320 -0
  454. package/src/planning/gap-patterns.ts +234 -0
  455. package/src/planning/gap-types.ts +4 -1
  456. package/src/planning/github-projection.test.ts +177 -0
  457. package/src/planning/github-projection.ts +425 -0
  458. package/src/planning/impact-analyzer.test.ts +180 -0
  459. package/src/planning/impact-analyzer.ts +264 -0
  460. package/src/planning/plan-lifecycle.test.ts +312 -0
  461. package/src/planning/plan-lifecycle.ts +346 -0
  462. package/src/planning/planner-types.ts +215 -0
  463. package/src/{__tests__ → planning}/planner.test.ts +169 -15
  464. package/src/planning/planner.ts +197 -1228
  465. package/src/planning/rationalization-detector.test.ts +171 -0
  466. package/src/planning/rationalization-detector.ts +138 -0
  467. package/src/planning/reconciliation-engine.test.ts +141 -0
  468. package/src/planning/reconciliation-engine.ts +162 -0
  469. package/src/planning/task-verifier.test.ts +235 -0
  470. package/src/planning/task-verifier.ts +303 -0
  471. package/src/planning/verification-protocol.test.ts +201 -0
  472. package/src/playbooks/generic/generic-playbooks.test.ts +438 -0
  473. package/src/playbooks/index.test.ts +77 -0
  474. package/src/playbooks/playbook-executor.test.ts +255 -0
  475. package/src/playbooks/playbook-registry.test.ts +232 -0
  476. package/src/playbooks/playbook-seeder.test.ts +153 -0
  477. package/src/plugins/plugin-loader.test.ts +212 -0
  478. package/src/plugins/plugin-registry.test.ts +272 -0
  479. package/src/project/project-registry.test.ts +428 -0
  480. package/src/prompts/parser.test.ts +100 -0
  481. package/src/prompts/template-manager.test.ts +109 -0
  482. package/src/{__tests__ → queue}/async-infrastructure.test.ts +3 -3
  483. package/src/queue/job-queue.test.ts +331 -0
  484. package/src/queue/pipeline-runner.test.ts +209 -0
  485. package/src/runtime/admin-extra-ops.test.ts +527 -0
  486. package/src/runtime/admin-ops.test.ts +257 -0
  487. package/src/runtime/admin-ops.ts +45 -17
  488. package/src/runtime/admin-setup-ops.test.ts +328 -0
  489. package/src/runtime/admin-setup-ops.ts +20 -43
  490. package/src/runtime/archive-ops.test.ts +269 -0
  491. package/src/runtime/archive-ops.ts +347 -0
  492. package/src/runtime/capture-ops.test.ts +433 -0
  493. package/src/runtime/capture-ops.ts +50 -8
  494. package/src/runtime/chain-ops.test.ts +149 -0
  495. package/src/runtime/claude-md-helpers.test.ts +191 -0
  496. package/src/runtime/claude-md-helpers.ts +1 -1
  497. package/src/runtime/context-health.test.ts +78 -0
  498. package/src/runtime/context-health.ts +85 -0
  499. package/src/runtime/curator-extra-ops.test.ts +202 -0
  500. package/src/runtime/deprecation.test.ts +98 -0
  501. package/src/runtime/domain-ops.test.ts +268 -0
  502. package/src/runtime/facades/admin-facade.test.ts +333 -0
  503. package/src/runtime/facades/agency-facade.test.ts +278 -0
  504. package/src/runtime/facades/archive-facade.test.ts +294 -0
  505. package/src/runtime/facades/archive-facade.ts +14 -0
  506. package/src/runtime/facades/brain-facade.test.ts +714 -0
  507. package/src/runtime/facades/brain-facade.ts +2 -0
  508. package/src/runtime/facades/chat-facade.test.ts +166 -0
  509. package/src/runtime/facades/chat-facade.ts +15 -906
  510. package/src/runtime/facades/chat-service-ops.test.ts +276 -0
  511. package/src/runtime/facades/chat-service-ops.ts +374 -0
  512. package/src/runtime/facades/chat-session-ops.test.ts +197 -0
  513. package/src/runtime/facades/chat-session-ops.ts +146 -0
  514. package/src/runtime/facades/chat-state.ts +60 -0
  515. package/src/runtime/facades/chat-transport-ops.test.ts +269 -0
  516. package/src/runtime/facades/chat-transport-ops.ts +380 -0
  517. package/src/runtime/facades/context-facade.test.ts +108 -0
  518. package/src/runtime/facades/control-facade.test.ts +436 -0
  519. package/src/runtime/facades/control-facade.ts +6 -1
  520. package/src/runtime/facades/curator-facade.test.ts +303 -0
  521. package/src/runtime/facades/index.ts +6 -0
  522. package/src/runtime/facades/loop-facade.test.ts +245 -0
  523. package/src/runtime/facades/memory-facade.test.ts +269 -0
  524. package/src/runtime/facades/memory-facade.ts +78 -6
  525. package/src/runtime/facades/operator-facade.test.ts +208 -0
  526. package/src/runtime/facades/operator-facade.ts +236 -0
  527. package/src/runtime/facades/orchestrate-facade.test.ts +185 -0
  528. package/src/runtime/facades/orchestrate-facade.ts +3 -3
  529. package/src/runtime/facades/plan-facade.test.ts +266 -0
  530. package/src/runtime/facades/plan-facade.ts +42 -6
  531. package/src/runtime/facades/review-facade.test.ts +82 -0
  532. package/src/runtime/facades/review-facade.ts +11 -0
  533. package/src/runtime/facades/sync-facade.test.ts +113 -0
  534. package/src/runtime/facades/sync-facade.ts +11 -0
  535. package/src/runtime/facades/vault-facade.test.ts +631 -0
  536. package/src/runtime/facades/vault-facade.ts +15 -70
  537. package/src/runtime/feature-flags.test.ts +140 -0
  538. package/src/runtime/github-integration.test.ts +89 -0
  539. package/src/runtime/github-integration.ts +159 -0
  540. package/src/runtime/grading-ops.test.ts +141 -0
  541. package/src/runtime/grading-ops.ts +1 -1
  542. package/src/runtime/intake-ops.test.ts +208 -0
  543. package/src/runtime/loop-ops.test.ts +238 -0
  544. package/src/runtime/memory-cross-project-ops.test.ts +177 -0
  545. package/src/runtime/memory-extra-ops.test.ts +453 -0
  546. package/src/runtime/memory-extra-ops.ts +6 -2
  547. package/src/runtime/orchestrate-ops.test.ts +302 -0
  548. package/src/runtime/orchestrate-ops.ts +435 -46
  549. package/src/runtime/pack-ops.test.ts +158 -0
  550. package/src/runtime/planning-extra-ops.test.ts +583 -0
  551. package/src/runtime/planning-extra-ops.ts +72 -4
  552. package/src/{__tests__ → runtime}/playbook-ops-execution.test.ts +3 -3
  553. package/src/runtime/playbook-ops.test.ts +262 -0
  554. package/src/runtime/plugin-ops.test.ts +201 -0
  555. package/src/runtime/project-ops.test.ts +235 -0
  556. package/src/runtime/review-ops.test.ts +142 -0
  557. package/src/runtime/review-ops.ts +99 -0
  558. package/src/runtime/runtime.test.ts +363 -0
  559. package/src/runtime/runtime.ts +39 -12
  560. package/src/runtime/session-briefing.test.ts +302 -0
  561. package/src/runtime/session-briefing.ts +80 -1
  562. package/src/runtime/sync-ops.test.ts +221 -0
  563. package/src/runtime/sync-ops.ts +325 -0
  564. package/src/runtime/telemetry-ops.test.ts +132 -0
  565. package/src/runtime/types.ts +10 -4
  566. package/src/runtime/vault-extra-ops.test.ts +246 -0
  567. package/src/runtime/vault-extra-ops.ts +5 -332
  568. package/src/runtime/vault-linking-ops.test.ts +237 -0
  569. package/src/runtime/vault-sharing-ops.test.ts +130 -0
  570. package/src/runtime/vault-sharing-ops.ts +5 -329
  571. package/src/skills/sync-skills.ts +108 -0
  572. package/src/streams/normalize.test.ts +95 -0
  573. package/src/streams/replayable-stream.test.ts +166 -0
  574. package/src/telemetry/telemetry.test.ts +143 -0
  575. package/src/transport/http-server.test.ts +394 -0
  576. package/src/transport/lsp-server.test.ts +458 -0
  577. package/src/transport/rate-limiter.test.ts +126 -0
  578. package/src/transport/session-manager.test.ts +133 -0
  579. package/src/transport/token-auth.test.ts +136 -0
  580. package/src/transport/ws-server.test.ts +294 -0
  581. package/src/update-check.ts +111 -0
  582. package/src/vault/__tests__/vault-characterization.test.ts +168 -0
  583. package/src/vault/content-hash.test.ts +78 -0
  584. package/src/vault/git-vault-sync.test.ts +234 -0
  585. package/src/vault/knowledge-review.test.ts +269 -0
  586. package/src/vault/linking.test.ts +358 -0
  587. package/src/vault/linking.ts +149 -183
  588. package/src/vault/obsidian-sync.test.ts +342 -0
  589. package/src/vault/playbook.test.ts +152 -0
  590. package/src/vault/scope-detector.test.ts +187 -0
  591. package/src/vault/vault-branching.test.ts +250 -0
  592. package/src/{__tests__ → vault}/vault-connect.test.ts +1 -1
  593. package/src/vault/vault-entries.ts +282 -0
  594. package/src/vault/vault-interfaces.ts +56 -0
  595. package/src/vault/vault-maintenance.ts +205 -0
  596. package/src/vault/vault-manager.test.ts +206 -0
  597. package/src/vault/vault-markdown-sync.test.ts +203 -0
  598. package/src/vault/vault-markdown-sync.ts +160 -0
  599. package/src/vault/vault-memories.ts +339 -0
  600. package/src/{__tests__ → vault}/vault-scaling.test.ts +1 -1
  601. package/src/vault/vault-schema.ts +181 -0
  602. package/src/{__tests__ → vault}/vault-sharing.test.ts +4 -4
  603. package/src/{__tests__ → vault}/vault.test.ts +2 -2
  604. package/src/vault/vault.ts +89 -1171
  605. package/dist/cognee/client.d.ts +0 -43
  606. package/dist/cognee/client.d.ts.map +0 -1
  607. package/dist/cognee/client.js +0 -375
  608. package/dist/cognee/client.js.map +0 -1
  609. package/dist/cognee/sync-manager.d.ts +0 -153
  610. package/dist/cognee/sync-manager.d.ts.map +0 -1
  611. package/dist/cognee/sync-manager.js +0 -390
  612. package/dist/cognee/sync-manager.js.map +0 -1
  613. package/dist/cognee/types.d.ts +0 -62
  614. package/dist/cognee/types.d.ts.map +0 -1
  615. package/dist/cognee/types.js +0 -3
  616. package/dist/cognee/types.js.map +0 -1
  617. package/dist/governance/index.d.ts +0 -3
  618. package/dist/governance/index.d.ts.map +0 -1
  619. package/dist/governance/index.js +0 -2
  620. package/dist/governance/index.js.map +0 -1
  621. package/dist/health/doctor-checks.d.ts +0 -15
  622. package/dist/health/doctor-checks.d.ts.map +0 -1
  623. package/dist/health/doctor-checks.js +0 -98
  624. package/dist/health/doctor-checks.js.map +0 -1
  625. package/dist/persistence/postgres-provider.d.ts +0 -81
  626. package/dist/persistence/postgres-provider.d.ts.map +0 -1
  627. package/dist/persistence/postgres-provider.js +0 -256
  628. package/dist/persistence/postgres-provider.js.map +0 -1
  629. package/dist/runtime/cognee-sync-ops.d.ts +0 -12
  630. package/dist/runtime/cognee-sync-ops.d.ts.map +0 -1
  631. package/dist/runtime/cognee-sync-ops.js +0 -93
  632. package/dist/runtime/cognee-sync-ops.js.map +0 -1
  633. package/dist/runtime/core-ops.d.ts +0 -23
  634. package/dist/runtime/core-ops.d.ts.map +0 -1
  635. package/dist/runtime/core-ops.js +0 -1296
  636. package/dist/runtime/core-ops.js.map +0 -1
  637. package/dist/runtime/facades/cognee-facade.d.ts +0 -8
  638. package/dist/runtime/facades/cognee-facade.d.ts.map +0 -1
  639. package/dist/runtime/facades/cognee-facade.js +0 -156
  640. package/dist/runtime/facades/cognee-facade.js.map +0 -1
  641. package/src/__tests__/admin-extra-ops.test.ts +0 -484
  642. package/src/__tests__/admin-ops.test.ts +0 -268
  643. package/src/__tests__/admin-setup-ops.test.ts +0 -355
  644. package/src/__tests__/agency-manager.test.ts +0 -374
  645. package/src/__tests__/agent-loop.test.ts +0 -256
  646. package/src/__tests__/capture-ops.test.ts +0 -784
  647. package/src/__tests__/claudemd.test.ts +0 -282
  648. package/src/__tests__/content-hash.test.ts +0 -60
  649. package/src/__tests__/context-engine.test.ts +0 -251
  650. package/src/__tests__/core-ops.test.ts +0 -550
  651. package/src/__tests__/curator-extra-ops.test.ts +0 -383
  652. package/src/__tests__/deprecation.test.ts +0 -78
  653. package/src/__tests__/domain-ops.test.ts +0 -226
  654. package/src/__tests__/domain-packs.test.ts +0 -421
  655. package/src/__tests__/enforcement.test.ts +0 -153
  656. package/src/__tests__/errors.test.ts +0 -388
  657. package/src/__tests__/extensions.test.ts +0 -233
  658. package/src/__tests__/facade-factory.test.ts +0 -271
  659. package/src/__tests__/feature-flags.test.ts +0 -137
  660. package/src/__tests__/flows.test.ts +0 -604
  661. package/src/__tests__/git-vault-sync.test.ts +0 -230
  662. package/src/__tests__/governance.test.ts +0 -522
  663. package/src/__tests__/grading-ops.test.ts +0 -361
  664. package/src/__tests__/health-registry.test.ts +0 -173
  665. package/src/__tests__/identity-manager.test.ts +0 -243
  666. package/src/__tests__/intake-pipeline.test.ts +0 -162
  667. package/src/__tests__/intent-router.test.ts +0 -222
  668. package/src/__tests__/knowledge-review.test.ts +0 -104
  669. package/src/__tests__/llm-client.test.ts +0 -69
  670. package/src/__tests__/llm.test.ts +0 -556
  671. package/src/__tests__/loader.test.ts +0 -176
  672. package/src/__tests__/loop-ops.test.ts +0 -469
  673. package/src/__tests__/lsp-transport.test.ts +0 -442
  674. package/src/__tests__/memory-cross-project-ops.test.ts +0 -248
  675. package/src/__tests__/memory-extra-ops.test.ts +0 -352
  676. package/src/__tests__/migration-runner.test.ts +0 -170
  677. package/src/__tests__/module-manifest-drift.test.ts +0 -59
  678. package/src/__tests__/normalize.test.ts +0 -85
  679. package/src/__tests__/obsidian-sync.test.ts +0 -354
  680. package/src/__tests__/orchestrate-ops.test.ts +0 -289
  681. package/src/__tests__/pack-ops.test.ts +0 -146
  682. package/src/__tests__/persistence.test.ts +0 -291
  683. package/src/__tests__/planning-extra-ops.test.ts +0 -706
  684. package/src/__tests__/playbook-executor.test.ts +0 -249
  685. package/src/__tests__/playbook-registry.test.ts +0 -326
  686. package/src/__tests__/playbook-seeder.test.ts +0 -163
  687. package/src/__tests__/playbook.test.ts +0 -389
  688. package/src/__tests__/plugin-ops.test.ts +0 -411
  689. package/src/__tests__/plugin-system.test.ts +0 -509
  690. package/src/__tests__/project-ops.test.ts +0 -381
  691. package/src/__tests__/replayable-stream.test.ts +0 -177
  692. package/src/__tests__/runtime.test.ts +0 -95
  693. package/src/__tests__/scope-detector.test.ts +0 -121
  694. package/src/__tests__/template-manager.test.ts +0 -222
  695. package/src/__tests__/token-resolver.test.ts +0 -79
  696. package/src/__tests__/transport.test.ts +0 -758
  697. package/src/__tests__/vault-branching.test.ts +0 -274
  698. package/src/__tests__/vault-extra-ops.test.ts +0 -482
  699. package/src/__tests__/vault-integrity.test.ts +0 -71
  700. package/src/__tests__/vault-manager.test.ts +0 -238
  701. package/src/__tests__/ws-transport.test.ts +0 -479
@@ -1,27 +1,20 @@
1
1
  /**
2
- * Vault Sharing Ops — knowledge scoping, export, sync, and review ops.
2
+ * Vault Sharing Ops — knowledge scoping operations.
3
3
  *
4
4
  * Covers:
5
5
  * - #105: Knowledge scoping (detect_scope, set_scope, scope-aware filtering)
6
- * - #104: Vault export to shareable packs
7
- * - #67: Vault push/pull git sync with conflict resolution
8
- * - #65: Team review workflows (submit/approve/reject)
6
+ *
7
+ * Git/Obsidian/pack sync ops sync-ops.ts (sync facade)
8
+ * Review workflow ops review-ops.ts (review facade)
9
9
  */
10
10
 
11
11
  import { z } from 'zod';
12
12
  import type { OpDefinition } from '../facades/types.js';
13
13
  import type { AgentRuntime } from './types.js';
14
14
  import { detectScope, type ScopeInput } from '../vault/scope-detector.js';
15
- import { GitVaultSync, type GitVaultSyncConfig } from '../vault/git-vault-sync.js';
16
- import type {
17
- IntelligenceEntry,
18
- IntelligenceBundle,
19
- IntelligenceBundleLink,
20
- } from '../intelligence/types.js';
21
- import { LinkManager } from '../vault/linking.js';
22
15
 
23
16
  export function createVaultSharingOps(runtime: AgentRuntime): OpDefinition[] {
24
- const { vault, knowledgeReview } = runtime;
17
+ const { vault } = runtime;
25
18
 
26
19
  return [
27
20
  // ─── Scoping (#105) ───────────────────────────────────────────
@@ -110,322 +103,5 @@ export function createVaultSharingOps(runtime: AgentRuntime): OpDefinition[] {
110
103
  return { entries, count: entries.length, tier };
111
104
  },
112
105
  },
113
-
114
- // ─── Export to Pack (#104) ─────────────────────────────────────
115
- {
116
- name: 'vault_export_pack',
117
- description:
118
- 'Export vault entries as a shareable intelligence pack. Filters by tier, domain, or tags. Returns IntelligenceBundle format.',
119
- auth: 'read' as const,
120
- schema: z.object({
121
- name: z.string().optional().describe('Pack name (default: agent ID)'),
122
- version: z.string().optional().describe('Pack version (default: 1.0.0)'),
123
- tier: z.enum(['agent', 'project', 'team']).optional().describe('Filter by scope tier'),
124
- domain: z.string().optional().describe('Filter by domain'),
125
- tags: z.array(z.string()).optional().describe('Filter by tags (OR match)'),
126
- excludeIds: z.array(z.string()).optional().describe('Entry IDs to exclude'),
127
- }),
128
- handler: async (params) => {
129
- const tier = params.tier as string | undefined;
130
- const domain = params.domain as string | undefined;
131
- const tags = params.tags as string[] | undefined;
132
- const excludeIds = new Set((params.excludeIds as string[] | undefined) ?? []);
133
-
134
- // Get all matching entries
135
- let entries = vault.list({ domain, tags, limit: 10000 });
136
-
137
- // Filter by tier if specified
138
- if (tier) {
139
- entries = entries.filter((e) => e.tier === tier);
140
- }
141
-
142
- // Exclude specified IDs
143
- if (excludeIds.size > 0) {
144
- entries = entries.filter((e) => !excludeIds.has(e.id));
145
- }
146
-
147
- // Group by domain into bundles
148
- const byDomain = new Map<string, IntelligenceEntry[]>();
149
- for (const entry of entries) {
150
- const d = entry.domain;
151
- if (!byDomain.has(d)) byDomain.set(d, []);
152
- byDomain.get(d)!.push(entry);
153
- }
154
-
155
- // Collect links for exported entries (Zettelkasten edge export)
156
- const entryIds = new Set(entries.map((e) => e.id));
157
- const linkManager = new LinkManager(vault.getProvider());
158
- const allLinks = linkManager.getAllLinksForEntries([...entryIds]);
159
- // Only include links where BOTH endpoints are in the export set
160
- const exportLinks = allLinks.filter(
161
- (l) => entryIds.has(l.sourceId) && entryIds.has(l.targetId),
162
- );
163
-
164
- // Build a domain→links map (group by source entry's domain)
165
- const entryDomainMap = new Map(entries.map((e) => [e.id, e.domain]));
166
- const linksByDomain = new Map<string, IntelligenceBundleLink[]>();
167
- for (const link of exportLinks) {
168
- const linkDomain = entryDomainMap.get(link.sourceId) ?? 'unknown';
169
- if (!linksByDomain.has(linkDomain)) linksByDomain.set(linkDomain, []);
170
- linksByDomain.get(linkDomain)!.push({
171
- sourceId: link.sourceId,
172
- targetId: link.targetId,
173
- linkType: link.linkType,
174
- note: link.note,
175
- });
176
- }
177
-
178
- const version = (params.version as string) ?? '1.0.0';
179
- const bundles: IntelligenceBundle[] = [];
180
- for (const [d, domainEntries] of byDomain) {
181
- bundles.push({
182
- domain: d,
183
- version,
184
- entries: domainEntries,
185
- links: linksByDomain.get(d) ?? [],
186
- });
187
- }
188
-
189
- return {
190
- name: (params.name as string) ?? runtime.config.agentId,
191
- version,
192
- bundles,
193
- totalEntries: entries.length,
194
- totalLinks: exportLinks.length,
195
- domains: [...byDomain.keys()],
196
- };
197
- },
198
- },
199
- {
200
- name: 'vault_import_pack',
201
- description:
202
- 'Import an intelligence pack into the vault with content-hash dedup. Entries with duplicate content are skipped.',
203
- auth: 'write' as const,
204
- schema: z.object({
205
- bundles: z
206
- .array(
207
- z.object({
208
- domain: z.string(),
209
- version: z.string(),
210
- entries: z.array(z.record(z.unknown())),
211
- }),
212
- )
213
- .describe('Array of IntelligenceBundle objects to import'),
214
- tier: z
215
- .enum(['agent', 'project', 'team'])
216
- .optional()
217
- .describe('Force all imported entries to this tier'),
218
- }),
219
- handler: async (params) => {
220
- const bundles = params.bundles as Array<{
221
- domain: string;
222
- version: string;
223
- entries: IntelligenceEntry[];
224
- links?: IntelligenceBundleLink[];
225
- }>;
226
- const forceTier = params.tier as 'agent' | 'project' | 'team' | undefined;
227
- let imported = 0;
228
- let duplicates = 0;
229
- let linksCreated = 0;
230
- let linksSkipped = 0;
231
-
232
- // Track ID remapping: bundle entry ID → actual vault entry ID
233
- const idRemap = new Map<string, string>();
234
- const linkManager = new LinkManager(vault.getProvider());
235
-
236
- for (const bundle of bundles) {
237
- const entries = bundle.entries.map((e) => ({
238
- ...e,
239
- tier: forceTier ?? e.tier ?? 'project',
240
- }));
241
- const results = vault.seedDedup(entries);
242
- for (let i = 0; i < results.length; i++) {
243
- const r = results[i];
244
- const originalId = bundle.entries[i].id;
245
- // For duplicates, map to the existing vault entry; for inserts, keep original ID
246
- idRemap.set(originalId, r.existingId ?? r.id);
247
- if (r.action === 'inserted') imported++;
248
- else duplicates++;
249
- }
250
-
251
- // Import links if present
252
- if (bundle.links && bundle.links.length > 0) {
253
- for (const link of bundle.links) {
254
- const sourceId = idRemap.get(link.sourceId);
255
- const targetId = idRemap.get(link.targetId);
256
- if (sourceId && targetId) {
257
- linkManager.addLink(sourceId, targetId, link.linkType, link.note);
258
- linksCreated++;
259
- } else {
260
- linksSkipped++;
261
- }
262
- }
263
- }
264
- }
265
-
266
- return { imported, duplicates, linksCreated, linksSkipped, total: imported + duplicates };
267
- },
268
- },
269
-
270
- // ─── Git Sync (#67) ───────────────────────────────────────────
271
- {
272
- name: 'vault_git_push',
273
- description:
274
- 'Push all vault entries to a git-tracked directory. Each entry becomes a JSON file under domain subdirectories.',
275
- auth: 'write' as const,
276
- schema: z.object({
277
- repoDir: z.string().describe('Path to git-tracked vault directory'),
278
- authorName: z.string().optional().describe('Git author name'),
279
- authorEmail: z.string().optional().describe('Git author email'),
280
- }),
281
- handler: async (params) => {
282
- const config: GitVaultSyncConfig = {
283
- repoDir: params.repoDir as string,
284
- authorName: params.authorName as string | undefined,
285
- authorEmail: params.authorEmail as string | undefined,
286
- };
287
- const sync = new GitVaultSync(config);
288
- await sync.init();
289
- const { entries } = vault.exportAll();
290
- return sync.syncAll(entries);
291
- },
292
- },
293
- {
294
- name: 'vault_git_pull',
295
- description:
296
- 'Pull entries from a git-tracked directory into the vault. Reads JSON files and imports with conflict resolution.',
297
- auth: 'write' as const,
298
- schema: z.object({
299
- repoDir: z.string().describe('Path to git-tracked vault directory'),
300
- onConflict: z
301
- .enum(['git', 'vault'])
302
- .optional()
303
- .describe(
304
- 'Conflict resolution: "git" (default) overwrites vault, "vault" keeps existing',
305
- ),
306
- }),
307
- handler: async (params) => {
308
- const config: GitVaultSyncConfig = {
309
- repoDir: params.repoDir as string,
310
- autoCommit: false,
311
- };
312
- const sync = new GitVaultSync(config);
313
- await sync.init();
314
- return sync.pull(vault, {
315
- onConflict: params.onConflict as 'git' | 'vault' | undefined,
316
- });
317
- },
318
- },
319
- {
320
- name: 'vault_git_sync',
321
- description:
322
- 'Bidirectional sync between vault and git directory. Pushes vault entries to git and pulls git-only entries into vault.',
323
- auth: 'write' as const,
324
- schema: z.object({
325
- repoDir: z.string().describe('Path to git-tracked vault directory'),
326
- onConflict: z
327
- .enum(['git', 'vault'])
328
- .optional()
329
- .describe('Conflict resolution for entries that exist in both'),
330
- authorName: z.string().optional(),
331
- authorEmail: z.string().optional(),
332
- }),
333
- handler: async (params) => {
334
- const config: GitVaultSyncConfig = {
335
- repoDir: params.repoDir as string,
336
- authorName: params.authorName as string | undefined,
337
- authorEmail: params.authorEmail as string | undefined,
338
- };
339
- const sync = new GitVaultSync(config);
340
- await sync.init();
341
- return sync.sync(vault, {
342
- onConflict: params.onConflict as 'git' | 'vault' | undefined,
343
- });
344
- },
345
- },
346
-
347
- // ─── Review Workflows (#65) ───────────────────────────────────
348
- {
349
- name: 'vault_submit_review',
350
- description:
351
- 'Submit a vault entry for team review. Transitions entry from draft → pending_review.',
352
- auth: 'write' as const,
353
- schema: z.object({
354
- entryId: z.string().describe('Entry ID to submit for review'),
355
- submittedBy: z.string().optional().describe('Name/ID of the submitter'),
356
- }),
357
- handler: async (params) => {
358
- try {
359
- return knowledgeReview.submit({
360
- entryId: params.entryId as string,
361
- submittedBy: params.submittedBy as string | undefined,
362
- });
363
- } catch (err) {
364
- return { error: (err as Error).message };
365
- }
366
- },
367
- },
368
- {
369
- name: 'vault_approve',
370
- description: 'Approve a pending vault entry. Transitions from pending_review → approved.',
371
- auth: 'admin' as const,
372
- schema: z.object({
373
- entryId: z.string().describe('Entry ID to approve'),
374
- reviewedBy: z.string().optional().describe('Name/ID of the reviewer'),
375
- comment: z.string().optional().describe('Review comment'),
376
- }),
377
- handler: async (params) => {
378
- try {
379
- return knowledgeReview.approve({
380
- entryId: params.entryId as string,
381
- reviewedBy: params.reviewedBy as string | undefined,
382
- comment: params.comment as string | undefined,
383
- });
384
- } catch (err) {
385
- return { error: (err as Error).message };
386
- }
387
- },
388
- },
389
- {
390
- name: 'vault_reject',
391
- description: 'Reject a pending vault entry. Transitions from pending_review → rejected.',
392
- auth: 'admin' as const,
393
- schema: z.object({
394
- entryId: z.string().describe('Entry ID to reject'),
395
- reviewedBy: z.string().optional().describe('Name/ID of the reviewer'),
396
- comment: z.string().optional().describe('Reason for rejection'),
397
- }),
398
- handler: async (params) => {
399
- try {
400
- return knowledgeReview.reject({
401
- entryId: params.entryId as string,
402
- reviewedBy: params.reviewedBy as string | undefined,
403
- comment: params.comment as string | undefined,
404
- });
405
- } catch (err) {
406
- return { error: (err as Error).message };
407
- }
408
- },
409
- },
410
- {
411
- name: 'vault_pending_reviews',
412
- description: 'List all vault entries pending team review.',
413
- auth: 'read' as const,
414
- schema: z.object({
415
- limit: z.number().optional().describe('Max entries to return'),
416
- }),
417
- handler: async (params) => {
418
- const pending = knowledgeReview.listPending((params.limit as number) ?? 50);
419
- return { pending, count: pending.length };
420
- },
421
- },
422
- {
423
- name: 'vault_review_stats',
424
- description: 'Get review workflow statistics — counts by status.',
425
- auth: 'read' as const,
426
- handler: async () => {
427
- return knowledgeReview.stats();
428
- },
429
- },
430
106
  ];
431
107
  }
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Skill sync — discovers SKILL.md files in agent skills directories
3
+ * and copies them to ~/.claude/commands/ for Claude Code discovery.
4
+ *
5
+ * Injects agent branding so users know which agent owns the skill.
6
+ * Called automatically at engine startup and by admin_setup_global.
7
+ */
8
+
9
+ import {
10
+ existsSync,
11
+ readdirSync,
12
+ readFileSync,
13
+ writeFileSync,
14
+ mkdirSync,
15
+ statSync,
16
+ } from 'node:fs';
17
+ import { join } from 'node:path';
18
+ import { homedir } from 'node:os';
19
+
20
+ export interface SkillEntry {
21
+ name: string;
22
+ sourcePath: string;
23
+ }
24
+
25
+ export interface SyncResult {
26
+ installed: string[];
27
+ updated: string[];
28
+ skipped: string[];
29
+ failed: string[];
30
+ }
31
+
32
+ /** Discover skill files (SKILL.md) in skills directories */
33
+ export function discoverSkills(skillsDirs: string[]): SkillEntry[] {
34
+ const skills: SkillEntry[] = [];
35
+
36
+ for (const dir of skillsDirs) {
37
+ if (!existsSync(dir)) continue;
38
+ const entries = readdirSync(dir, { withFileTypes: true });
39
+ for (const entry of entries) {
40
+ if (!entry.isDirectory()) continue;
41
+ const skillPath = join(dir, entry.name, 'SKILL.md');
42
+ if (existsSync(skillPath)) {
43
+ skills.push({ name: entry.name, sourcePath: skillPath });
44
+ }
45
+ }
46
+ }
47
+
48
+ return skills;
49
+ }
50
+
51
+ /** Inject agent branding after YAML frontmatter */
52
+ function brandSkillContent(content: string, agentName: string): string {
53
+ // Find end of frontmatter (second ---)
54
+ const fmEnd = content.indexOf('---', content.indexOf('---') + 3);
55
+ if (fmEnd === -1) return content;
56
+
57
+ const afterFm = fmEnd + 3;
58
+ const before = content.slice(0, afterFm);
59
+ const after = content.slice(afterFm);
60
+
61
+ const brandLine = `\n\n> **${agentName}** skill\n`;
62
+ return before + brandLine + after;
63
+ }
64
+
65
+ /**
66
+ * Sync skills from agent directory to ~/.claude/commands/.
67
+ * - New skills are installed with agent branding
68
+ * - Changed skills are overwritten (compared by mtime)
69
+ * - Missing source skills leave target untouched (other agents may own them)
70
+ */
71
+ export function syncSkillsToClaudeCode(
72
+ skillsDirs: string[],
73
+ agentName?: string,
74
+ ): SyncResult {
75
+ const commandsDir = join(homedir(), '.claude', 'commands');
76
+ const skills = discoverSkills(skillsDirs);
77
+ const result: SyncResult = { installed: [], updated: [], skipped: [], failed: [] };
78
+
79
+ if (skills.length === 0) return result;
80
+
81
+ mkdirSync(commandsDir, { recursive: true });
82
+
83
+ for (const skill of skills) {
84
+ const targetPath = join(commandsDir, `${skill.name}.md`);
85
+ try {
86
+ const sourceContent = readFileSync(skill.sourcePath, 'utf-8');
87
+ const branded = agentName ? brandSkillContent(sourceContent, agentName) : sourceContent;
88
+
89
+ if (!existsSync(targetPath)) {
90
+ writeFileSync(targetPath, branded);
91
+ result.installed.push(skill.name);
92
+ } else {
93
+ const sourceMtime = statSync(skill.sourcePath).mtimeMs;
94
+ const targetMtime = statSync(targetPath).mtimeMs;
95
+ if (sourceMtime > targetMtime) {
96
+ writeFileSync(targetPath, branded);
97
+ result.updated.push(skill.name);
98
+ } else {
99
+ result.skipped.push(skill.name);
100
+ }
101
+ }
102
+ } catch {
103
+ result.failed.push(skill.name);
104
+ }
105
+ }
106
+
107
+ return result;
108
+ }
@@ -0,0 +1,95 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { normalize, collect } from './normalize.js';
3
+
4
+ // ─── normalize ───────────────────────────────────────────────────────
5
+
6
+ describe('normalize', () => {
7
+ it('yields a single value', async () => {
8
+ const result = await collect(normalize(42));
9
+ expect(result).toEqual([42]);
10
+ });
11
+
12
+ it('yields a flat array', async () => {
13
+ const result = await collect(normalize([1, 2, 3]));
14
+ expect(result).toEqual([1, 2, 3]);
15
+ });
16
+
17
+ it('resolves a promise of a single value', async () => {
18
+ const result = await collect(normalize(Promise.resolve('hello')));
19
+ expect(result).toEqual(['hello']);
20
+ });
21
+
22
+ it('resolves a promise of an array', async () => {
23
+ const result = await collect(normalize(Promise.resolve([10, 20])));
24
+ expect(result).toEqual([10, 20]);
25
+ });
26
+
27
+ it('flattens an async iterable', async () => {
28
+ async function* gen(): AsyncIterable<number> {
29
+ yield 1;
30
+ yield 2;
31
+ yield 3;
32
+ }
33
+ const result = await collect(normalize(gen()));
34
+ expect(result).toEqual([1, 2, 3]);
35
+ });
36
+
37
+ it('flattens nested sync iterables', async () => {
38
+ const nested = [[1, 2], [3], [4, 5]];
39
+ const result = await collect(normalize(nested));
40
+ expect(result).toEqual([1, 2, 3, 4, 5]);
41
+ });
42
+
43
+ it('treats strings as leaf values (not iterables)', async () => {
44
+ const result = await collect(normalize('hello'));
45
+ expect(result).toEqual(['hello']);
46
+ });
47
+
48
+ it('treats an array of strings as individual leaves', async () => {
49
+ const result = await collect(normalize(['a', 'b', 'c']));
50
+ expect(result).toEqual(['a', 'b', 'c']);
51
+ });
52
+
53
+ it('handles mixed nested structure', async () => {
54
+ async function* gen(): AsyncIterable<number> {
55
+ yield 100;
56
+ }
57
+ const mixed = [1, [2, 3], Promise.resolve(4), gen()];
58
+ // normalize expects NestableInput<number>, but mixed iterables work
59
+ const result: number[] = [];
60
+ for await (const item of normalize<number>(mixed as never)) {
61
+ result.push(item);
62
+ }
63
+ expect(result).toEqual([1, 2, 3, 4, 100]);
64
+ });
65
+
66
+ it('handles empty array', async () => {
67
+ const result = await collect(normalize([]));
68
+ expect(result).toEqual([]);
69
+ });
70
+
71
+ it('handles deeply nested arrays', async () => {
72
+ const deep = [[[1]], [[2, 3]]];
73
+ const result = await collect(normalize(deep));
74
+ expect(result).toEqual([1, 2, 3]);
75
+ });
76
+ });
77
+
78
+ // ─── collect ─────────────────────────────────────────────────────────
79
+
80
+ describe('collect', () => {
81
+ it('collects async iterable into array', async () => {
82
+ async function* gen(): AsyncIterable<string> {
83
+ yield 'a';
84
+ yield 'b';
85
+ }
86
+ expect(await collect(gen())).toEqual(['a', 'b']);
87
+ });
88
+
89
+ it('returns empty array for empty source', async () => {
90
+ async function* empty(): AsyncIterable<never> {
91
+ // nothing
92
+ }
93
+ expect(await collect(empty())).toEqual([]);
94
+ });
95
+ });