@soleri/core 2.12.0 → 8.0.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 (430) hide show
  1. package/data/flows/build.flow.yaml +128 -0
  2. package/data/flows/deliver.flow.yaml +110 -0
  3. package/data/flows/design.flow.yaml +108 -0
  4. package/data/flows/enhance.flow.yaml +90 -0
  5. package/data/flows/explore.flow.yaml +84 -0
  6. package/data/flows/fix.flow.yaml +90 -0
  7. package/data/flows/plan.flow.yaml +87 -0
  8. package/data/flows/review.flow.yaml +90 -0
  9. package/dist/agency/agency-manager.d.ts +27 -1
  10. package/dist/agency/agency-manager.d.ts.map +1 -1
  11. package/dist/agency/agency-manager.js +180 -9
  12. package/dist/agency/agency-manager.js.map +1 -1
  13. package/dist/agency/default-rules.d.ts +7 -0
  14. package/dist/agency/default-rules.d.ts.map +1 -0
  15. package/dist/agency/default-rules.js +79 -0
  16. package/dist/agency/default-rules.js.map +1 -0
  17. package/dist/agency/types.d.ts +48 -0
  18. package/dist/agency/types.d.ts.map +1 -1
  19. package/dist/brain/brain.d.ts +17 -2
  20. package/dist/brain/brain.d.ts.map +1 -1
  21. package/dist/brain/brain.js +118 -8
  22. package/dist/brain/brain.js.map +1 -1
  23. package/dist/brain/intelligence.d.ts.map +1 -1
  24. package/dist/brain/intelligence.js +16 -2
  25. package/dist/brain/intelligence.js.map +1 -1
  26. package/dist/brain/knowledge-synthesizer.d.ts +37 -0
  27. package/dist/brain/knowledge-synthesizer.d.ts.map +1 -0
  28. package/dist/brain/knowledge-synthesizer.js +161 -0
  29. package/dist/brain/knowledge-synthesizer.js.map +1 -0
  30. package/dist/brain/learning-radar.d.ts +96 -0
  31. package/dist/brain/learning-radar.d.ts.map +1 -0
  32. package/dist/brain/learning-radar.js +202 -0
  33. package/dist/brain/learning-radar.js.map +1 -0
  34. package/dist/brain/types.d.ts +15 -0
  35. package/dist/brain/types.d.ts.map +1 -1
  36. package/dist/capabilities/chain-mapping.d.ts +21 -0
  37. package/dist/capabilities/chain-mapping.d.ts.map +1 -0
  38. package/dist/capabilities/chain-mapping.js +86 -0
  39. package/dist/capabilities/chain-mapping.js.map +1 -0
  40. package/dist/capabilities/index.d.ts +10 -0
  41. package/dist/capabilities/index.d.ts.map +1 -0
  42. package/dist/capabilities/index.js +8 -0
  43. package/dist/capabilities/index.js.map +1 -0
  44. package/dist/capabilities/registry.d.ts +95 -0
  45. package/dist/capabilities/registry.d.ts.map +1 -0
  46. package/dist/capabilities/registry.js +227 -0
  47. package/dist/capabilities/registry.js.map +1 -0
  48. package/dist/capabilities/types.d.ts +106 -0
  49. package/dist/capabilities/types.d.ts.map +1 -0
  50. package/dist/capabilities/types.js +12 -0
  51. package/dist/capabilities/types.js.map +1 -0
  52. package/dist/context/context-engine.d.ts.map +1 -1
  53. package/dist/context/context-engine.js +82 -17
  54. package/dist/context/context-engine.js.map +1 -1
  55. package/dist/context/types.d.ts +5 -0
  56. package/dist/context/types.d.ts.map +1 -1
  57. package/dist/control/intent-router.d.ts +12 -1
  58. package/dist/control/intent-router.d.ts.map +1 -1
  59. package/dist/control/intent-router.js +126 -2
  60. package/dist/control/intent-router.js.map +1 -1
  61. package/dist/control/types.d.ts +17 -0
  62. package/dist/control/types.d.ts.map +1 -1
  63. package/dist/curator/classifier.d.ts +18 -0
  64. package/dist/curator/classifier.d.ts.map +1 -0
  65. package/dist/curator/classifier.js +61 -0
  66. package/dist/curator/classifier.js.map +1 -0
  67. package/dist/curator/quality-gate.d.ts +29 -0
  68. package/dist/curator/quality-gate.d.ts.map +1 -0
  69. package/dist/curator/quality-gate.js +88 -0
  70. package/dist/curator/quality-gate.js.map +1 -0
  71. package/dist/domain-packs/index.d.ts +8 -0
  72. package/dist/domain-packs/index.d.ts.map +1 -0
  73. package/dist/domain-packs/index.js +8 -0
  74. package/dist/domain-packs/index.js.map +1 -0
  75. package/dist/domain-packs/inject-rules.d.ts +24 -0
  76. package/dist/domain-packs/inject-rules.d.ts.map +1 -0
  77. package/dist/domain-packs/inject-rules.js +65 -0
  78. package/dist/domain-packs/inject-rules.js.map +1 -0
  79. package/dist/domain-packs/knowledge-installer.d.ts +27 -0
  80. package/dist/domain-packs/knowledge-installer.d.ts.map +1 -0
  81. package/dist/domain-packs/knowledge-installer.js +89 -0
  82. package/dist/domain-packs/knowledge-installer.js.map +1 -0
  83. package/dist/domain-packs/loader.d.ts +28 -0
  84. package/dist/domain-packs/loader.d.ts.map +1 -0
  85. package/dist/domain-packs/loader.js +105 -0
  86. package/dist/domain-packs/loader.js.map +1 -0
  87. package/dist/domain-packs/pack-runtime.d.ts +80 -0
  88. package/dist/domain-packs/pack-runtime.d.ts.map +1 -0
  89. package/dist/domain-packs/pack-runtime.js +36 -0
  90. package/dist/domain-packs/pack-runtime.js.map +1 -0
  91. package/dist/domain-packs/skills-installer.d.ts +21 -0
  92. package/dist/domain-packs/skills-installer.d.ts.map +1 -0
  93. package/dist/domain-packs/skills-installer.js +38 -0
  94. package/dist/domain-packs/skills-installer.js.map +1 -0
  95. package/dist/domain-packs/token-resolver.d.ts +37 -0
  96. package/dist/domain-packs/token-resolver.d.ts.map +1 -0
  97. package/dist/domain-packs/token-resolver.js +109 -0
  98. package/dist/domain-packs/token-resolver.js.map +1 -0
  99. package/dist/domain-packs/types.d.ts +91 -0
  100. package/dist/domain-packs/types.d.ts.map +1 -0
  101. package/dist/domain-packs/types.js +122 -0
  102. package/dist/domain-packs/types.js.map +1 -0
  103. package/dist/engine/bin/soleri-engine.d.ts +12 -0
  104. package/dist/engine/bin/soleri-engine.d.ts.map +1 -0
  105. package/dist/engine/bin/soleri-engine.js +184 -0
  106. package/dist/engine/bin/soleri-engine.js.map +1 -0
  107. package/dist/engine/core-ops.d.ts +27 -0
  108. package/dist/engine/core-ops.d.ts.map +1 -0
  109. package/dist/engine/core-ops.js +159 -0
  110. package/dist/engine/core-ops.js.map +1 -0
  111. package/dist/engine/index.d.ts +19 -0
  112. package/dist/engine/index.d.ts.map +1 -0
  113. package/dist/engine/index.js +17 -0
  114. package/dist/engine/index.js.map +1 -0
  115. package/dist/engine/register-engine.d.ts +54 -0
  116. package/dist/engine/register-engine.d.ts.map +1 -0
  117. package/dist/engine/register-engine.js +270 -0
  118. package/dist/engine/register-engine.js.map +1 -0
  119. package/dist/engine/test-helpers.d.ts +30 -0
  120. package/dist/engine/test-helpers.d.ts.map +1 -0
  121. package/dist/engine/test-helpers.js +59 -0
  122. package/dist/engine/test-helpers.js.map +1 -0
  123. package/dist/events/event-bus.d.ts +30 -0
  124. package/dist/events/event-bus.d.ts.map +1 -0
  125. package/dist/events/event-bus.js +51 -0
  126. package/dist/events/event-bus.js.map +1 -0
  127. package/dist/flows/chain-runner.d.ts +46 -0
  128. package/dist/flows/chain-runner.d.ts.map +1 -0
  129. package/dist/flows/chain-runner.js +271 -0
  130. package/dist/flows/chain-runner.js.map +1 -0
  131. package/dist/flows/chain-types.d.ts +103 -0
  132. package/dist/flows/chain-types.d.ts.map +1 -0
  133. package/dist/flows/chain-types.js +23 -0
  134. package/dist/flows/chain-types.js.map +1 -0
  135. package/dist/flows/context-router.d.ts +39 -0
  136. package/dist/flows/context-router.d.ts.map +1 -0
  137. package/dist/flows/context-router.js +206 -0
  138. package/dist/flows/context-router.js.map +1 -0
  139. package/dist/flows/dispatch-registry.d.ts +24 -0
  140. package/dist/flows/dispatch-registry.d.ts.map +1 -0
  141. package/dist/flows/dispatch-registry.js +70 -0
  142. package/dist/flows/dispatch-registry.js.map +1 -0
  143. package/dist/flows/epilogue.d.ts +24 -0
  144. package/dist/flows/epilogue.d.ts.map +1 -0
  145. package/dist/flows/epilogue.js +52 -0
  146. package/dist/flows/epilogue.js.map +1 -0
  147. package/dist/flows/executor.d.ts +25 -0
  148. package/dist/flows/executor.d.ts.map +1 -0
  149. package/dist/flows/executor.js +153 -0
  150. package/dist/flows/executor.js.map +1 -0
  151. package/dist/flows/gate-evaluator.d.ts +26 -0
  152. package/dist/flows/gate-evaluator.d.ts.map +1 -0
  153. package/dist/flows/gate-evaluator.js +162 -0
  154. package/dist/flows/gate-evaluator.js.map +1 -0
  155. package/dist/flows/index.d.ts +14 -0
  156. package/dist/flows/index.d.ts.map +1 -0
  157. package/dist/flows/index.js +20 -0
  158. package/dist/flows/index.js.map +1 -0
  159. package/dist/flows/loader.d.ts +17 -0
  160. package/dist/flows/loader.d.ts.map +1 -0
  161. package/dist/flows/loader.js +61 -0
  162. package/dist/flows/loader.js.map +1 -0
  163. package/dist/flows/plan-builder.d.ts +40 -0
  164. package/dist/flows/plan-builder.d.ts.map +1 -0
  165. package/dist/flows/plan-builder.js +213 -0
  166. package/dist/flows/plan-builder.js.map +1 -0
  167. package/dist/flows/probes.d.ts +11 -0
  168. package/dist/flows/probes.d.ts.map +1 -0
  169. package/dist/flows/probes.js +62 -0
  170. package/dist/flows/probes.js.map +1 -0
  171. package/dist/flows/types.d.ts +950 -0
  172. package/dist/flows/types.d.ts.map +1 -0
  173. package/dist/flows/types.js +105 -0
  174. package/dist/flows/types.js.map +1 -0
  175. package/dist/health/doctor-checks.d.ts +15 -0
  176. package/dist/health/doctor-checks.d.ts.map +1 -0
  177. package/dist/health/doctor-checks.js +98 -0
  178. package/dist/health/doctor-checks.js.map +1 -0
  179. package/dist/index.d.ts +11 -1
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +10 -1
  182. package/dist/index.js.map +1 -1
  183. package/dist/intake/text-ingester.d.ts +52 -0
  184. package/dist/intake/text-ingester.d.ts.map +1 -0
  185. package/dist/intake/text-ingester.js +181 -0
  186. package/dist/intake/text-ingester.js.map +1 -0
  187. package/dist/intelligence/loader.d.ts +19 -0
  188. package/dist/intelligence/loader.d.ts.map +1 -1
  189. package/dist/intelligence/loader.js +35 -0
  190. package/dist/intelligence/loader.js.map +1 -1
  191. package/dist/intelligence/types.d.ts +1 -0
  192. package/dist/intelligence/types.d.ts.map +1 -1
  193. package/dist/llm/llm-client.d.ts.map +1 -1
  194. package/dist/llm/llm-client.js +37 -1
  195. package/dist/llm/llm-client.js.map +1 -1
  196. package/dist/llm/oauth-discovery.d.ts +26 -0
  197. package/dist/llm/oauth-discovery.d.ts.map +1 -0
  198. package/dist/llm/oauth-discovery.js +149 -0
  199. package/dist/llm/oauth-discovery.js.map +1 -0
  200. package/dist/packs/types.d.ts +58 -19
  201. package/dist/packs/types.d.ts.map +1 -1
  202. package/dist/packs/types.js +14 -0
  203. package/dist/packs/types.js.map +1 -1
  204. package/dist/planning/evidence-collector.d.ts +41 -0
  205. package/dist/planning/evidence-collector.d.ts.map +1 -0
  206. package/dist/planning/evidence-collector.js +194 -0
  207. package/dist/planning/evidence-collector.js.map +1 -0
  208. package/dist/planning/planner.d.ts +4 -0
  209. package/dist/planning/planner.d.ts.map +1 -1
  210. package/dist/planning/planner.js +11 -0
  211. package/dist/planning/planner.js.map +1 -1
  212. package/dist/playbooks/generic/onboarding.d.ts +9 -0
  213. package/dist/playbooks/generic/onboarding.d.ts.map +1 -0
  214. package/dist/playbooks/generic/onboarding.js +74 -0
  215. package/dist/playbooks/generic/onboarding.js.map +1 -0
  216. package/dist/playbooks/playbook-registry.d.ts.map +1 -1
  217. package/dist/playbooks/playbook-registry.js +2 -0
  218. package/dist/playbooks/playbook-registry.js.map +1 -1
  219. package/dist/queue/job-queue.d.ts +92 -0
  220. package/dist/queue/job-queue.d.ts.map +1 -0
  221. package/dist/queue/job-queue.js +180 -0
  222. package/dist/queue/job-queue.js.map +1 -0
  223. package/dist/queue/pipeline-runner.d.ts +62 -0
  224. package/dist/queue/pipeline-runner.d.ts.map +1 -0
  225. package/dist/queue/pipeline-runner.js +126 -0
  226. package/dist/queue/pipeline-runner.js.map +1 -0
  227. package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
  228. package/dist/runtime/admin-extra-ops.js +15 -9
  229. package/dist/runtime/admin-extra-ops.js.map +1 -1
  230. package/dist/runtime/admin-ops.js +4 -4
  231. package/dist/runtime/admin-ops.js.map +1 -1
  232. package/dist/runtime/admin-setup-ops.d.ts +20 -0
  233. package/dist/runtime/admin-setup-ops.d.ts.map +1 -0
  234. package/dist/runtime/admin-setup-ops.js +583 -0
  235. package/dist/runtime/admin-setup-ops.js.map +1 -0
  236. package/dist/runtime/capture-ops.d.ts.map +1 -1
  237. package/dist/runtime/capture-ops.js +33 -1
  238. package/dist/runtime/capture-ops.js.map +1 -1
  239. package/dist/runtime/chain-ops.d.ts +9 -0
  240. package/dist/runtime/chain-ops.d.ts.map +1 -0
  241. package/dist/runtime/chain-ops.js +107 -0
  242. package/dist/runtime/chain-ops.js.map +1 -0
  243. package/dist/runtime/claude-md-helpers.d.ts +65 -0
  244. package/dist/runtime/claude-md-helpers.d.ts.map +1 -0
  245. package/dist/runtime/claude-md-helpers.js +173 -0
  246. package/dist/runtime/claude-md-helpers.js.map +1 -0
  247. package/dist/runtime/curator-extra-ops.d.ts +3 -2
  248. package/dist/runtime/curator-extra-ops.d.ts.map +1 -1
  249. package/dist/runtime/curator-extra-ops.js +81 -3
  250. package/dist/runtime/curator-extra-ops.js.map +1 -1
  251. package/dist/runtime/domain-ops.d.ts +21 -5
  252. package/dist/runtime/domain-ops.d.ts.map +1 -1
  253. package/dist/runtime/domain-ops.js +64 -6
  254. package/dist/runtime/domain-ops.js.map +1 -1
  255. package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
  256. package/dist/runtime/facades/admin-facade.js +4 -0
  257. package/dist/runtime/facades/admin-facade.js.map +1 -1
  258. package/dist/runtime/facades/agency-facade.d.ts.map +1 -1
  259. package/dist/runtime/facades/agency-facade.js +64 -0
  260. package/dist/runtime/facades/agency-facade.js.map +1 -1
  261. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  262. package/dist/runtime/facades/brain-facade.js +122 -1
  263. package/dist/runtime/facades/brain-facade.js.map +1 -1
  264. package/dist/runtime/facades/cognee-facade.d.ts.map +1 -1
  265. package/dist/runtime/facades/cognee-facade.js +3 -1
  266. package/dist/runtime/facades/cognee-facade.js.map +1 -1
  267. package/dist/runtime/facades/control-facade.d.ts.map +1 -1
  268. package/dist/runtime/facades/control-facade.js +42 -0
  269. package/dist/runtime/facades/control-facade.js.map +1 -1
  270. package/dist/runtime/facades/index.d.ts.map +1 -1
  271. package/dist/runtime/facades/index.js +10 -6
  272. package/dist/runtime/facades/index.js.map +1 -1
  273. package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
  274. package/dist/runtime/facades/memory-facade.js +20 -2
  275. package/dist/runtime/facades/memory-facade.js.map +1 -1
  276. package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
  277. package/dist/runtime/facades/plan-facade.js +2 -0
  278. package/dist/runtime/facades/plan-facade.js.map +1 -1
  279. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  280. package/dist/runtime/facades/vault-facade.js +27 -5
  281. package/dist/runtime/facades/vault-facade.js.map +1 -1
  282. package/dist/runtime/intake-ops.d.ts +7 -5
  283. package/dist/runtime/intake-ops.d.ts.map +1 -1
  284. package/dist/runtime/intake-ops.js +98 -5
  285. package/dist/runtime/intake-ops.js.map +1 -1
  286. package/dist/runtime/memory-extra-ops.d.ts +6 -3
  287. package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
  288. package/dist/runtime/memory-extra-ops.js +292 -4
  289. package/dist/runtime/memory-extra-ops.js.map +1 -1
  290. package/dist/runtime/orchestrate-ops.d.ts +8 -7
  291. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  292. package/dist/runtime/orchestrate-ops.js +217 -61
  293. package/dist/runtime/orchestrate-ops.js.map +1 -1
  294. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  295. package/dist/runtime/planning-extra-ops.js +85 -0
  296. package/dist/runtime/planning-extra-ops.js.map +1 -1
  297. package/dist/runtime/playbook-ops.js +1 -1
  298. package/dist/runtime/playbook-ops.js.map +1 -1
  299. package/dist/runtime/runtime.d.ts.map +1 -1
  300. package/dist/runtime/runtime.js +165 -18
  301. package/dist/runtime/runtime.js.map +1 -1
  302. package/dist/runtime/session-briefing.d.ts +23 -0
  303. package/dist/runtime/session-briefing.d.ts.map +1 -0
  304. package/dist/runtime/session-briefing.js +140 -0
  305. package/dist/runtime/session-briefing.js.map +1 -0
  306. package/dist/runtime/types.d.ts +29 -2
  307. package/dist/runtime/types.d.ts.map +1 -1
  308. package/dist/runtime/vault-linking-ops.d.ts +13 -0
  309. package/dist/runtime/vault-linking-ops.d.ts.map +1 -0
  310. package/dist/runtime/vault-linking-ops.js +365 -0
  311. package/dist/runtime/vault-linking-ops.js.map +1 -0
  312. package/dist/vault/linking.d.ts +46 -0
  313. package/dist/vault/linking.d.ts.map +1 -0
  314. package/dist/vault/linking.js +275 -0
  315. package/dist/vault/linking.js.map +1 -0
  316. package/dist/vault/vault-types.d.ts +37 -0
  317. package/dist/vault/vault-types.d.ts.map +1 -1
  318. package/dist/vault/vault.d.ts +37 -0
  319. package/dist/vault/vault.d.ts.map +1 -1
  320. package/dist/vault/vault.js +152 -9
  321. package/dist/vault/vault.js.map +1 -1
  322. package/package.json +4 -1
  323. package/src/__tests__/admin-extra-ops.test.ts +1 -1
  324. package/src/__tests__/admin-ops.test.ts +2 -1
  325. package/src/__tests__/admin-setup-ops.test.ts +355 -0
  326. package/src/__tests__/async-infrastructure.test.ts +307 -0
  327. package/src/__tests__/cognee-client-gaps.test.ts +474 -0
  328. package/src/__tests__/cognee-hybrid-search.test.ts +492 -0
  329. package/src/__tests__/cognee-sync-manager-deep.test.ts +654 -0
  330. package/src/__tests__/cognee-sync-manager.test.ts +1 -0
  331. package/src/__tests__/core-ops.test.ts +9 -61
  332. package/src/__tests__/curator-extra-ops.test.ts +6 -2
  333. package/src/__tests__/curator-pipeline-e2e.test.ts +358 -0
  334. package/src/__tests__/domain-packs.test.ts +421 -0
  335. package/src/__tests__/flows.test.ts +604 -0
  336. package/src/__tests__/memory-extra-ops.test.ts +2 -2
  337. package/src/__tests__/planning-extra-ops.test.ts +2 -2
  338. package/src/__tests__/playbook-registry.test.ts +2 -2
  339. package/src/__tests__/playbook-seeder.test.ts +8 -8
  340. package/src/__tests__/playbook.test.ts +5 -5
  341. package/src/__tests__/second-brain-features.test.ts +583 -0
  342. package/src/__tests__/token-resolver.test.ts +79 -0
  343. package/src/agency/agency-manager.ts +217 -9
  344. package/src/agency/default-rules.ts +83 -0
  345. package/src/agency/types.ts +61 -0
  346. package/src/brain/brain.ts +110 -8
  347. package/src/brain/intelligence.ts +21 -2
  348. package/src/brain/knowledge-synthesizer.ts +218 -0
  349. package/src/brain/learning-radar.ts +340 -0
  350. package/src/brain/types.ts +16 -0
  351. package/src/capabilities/chain-mapping.ts +93 -0
  352. package/src/capabilities/index.ts +21 -0
  353. package/src/capabilities/registry.ts +290 -0
  354. package/src/capabilities/types.ts +143 -0
  355. package/src/context/context-engine.ts +114 -15
  356. package/src/context/types.ts +5 -0
  357. package/src/control/intent-router.ts +153 -2
  358. package/src/control/types.ts +10 -0
  359. package/src/curator/classifier.ts +88 -0
  360. package/src/curator/quality-gate.ts +129 -0
  361. package/src/domain-packs/index.ts +27 -0
  362. package/src/domain-packs/inject-rules.ts +74 -0
  363. package/src/domain-packs/knowledge-installer.ts +116 -0
  364. package/src/domain-packs/loader.ts +124 -0
  365. package/src/domain-packs/pack-runtime.ts +99 -0
  366. package/src/domain-packs/skills-installer.ts +56 -0
  367. package/src/domain-packs/token-resolver.ts +126 -0
  368. package/src/domain-packs/types.ts +229 -0
  369. package/src/engine/__tests__/register-engine.test.ts +104 -0
  370. package/src/engine/bin/soleri-engine.ts +218 -0
  371. package/src/engine/core-ops.ts +178 -0
  372. package/src/engine/index.ts +19 -0
  373. package/src/engine/register-engine.ts +385 -0
  374. package/src/engine/test-helpers.ts +83 -0
  375. package/src/events/event-bus.ts +58 -0
  376. package/src/flows/chain-runner.ts +369 -0
  377. package/src/flows/chain-types.ts +57 -0
  378. package/src/flows/context-router.ts +257 -0
  379. package/src/flows/dispatch-registry.ts +80 -0
  380. package/src/flows/epilogue.ts +65 -0
  381. package/src/flows/executor.ts +182 -0
  382. package/src/flows/gate-evaluator.ts +171 -0
  383. package/src/flows/index.ts +52 -0
  384. package/src/flows/loader.ts +63 -0
  385. package/src/flows/plan-builder.ts +250 -0
  386. package/src/flows/probes.ts +70 -0
  387. package/src/flows/types.ts +217 -0
  388. package/src/health/doctor-checks.ts +115 -0
  389. package/src/index.ts +68 -1
  390. package/src/intake/text-ingester.ts +234 -0
  391. package/src/intelligence/loader.ts +38 -0
  392. package/src/intelligence/types.ts +1 -0
  393. package/src/llm/llm-client.ts +38 -1
  394. package/src/llm/oauth-discovery.ts +169 -0
  395. package/src/packs/types.ts +19 -0
  396. package/src/planning/evidence-collector.ts +247 -0
  397. package/src/planning/planner.ts +11 -0
  398. package/src/playbooks/generic/onboarding.ts +79 -0
  399. package/src/playbooks/playbook-registry.ts +2 -0
  400. package/src/queue/job-queue.ts +281 -0
  401. package/src/queue/pipeline-runner.ts +149 -0
  402. package/src/runtime/admin-extra-ops.ts +14 -8
  403. package/src/runtime/admin-ops.ts +4 -4
  404. package/src/runtime/admin-setup-ops.ts +664 -0
  405. package/src/runtime/capture-ops.ts +40 -1
  406. package/src/runtime/chain-ops.ts +121 -0
  407. package/src/runtime/claude-md-helpers.ts +236 -0
  408. package/src/runtime/curator-extra-ops.ts +86 -3
  409. package/src/runtime/domain-ops.ts +71 -5
  410. package/src/runtime/facades/admin-facade.ts +4 -0
  411. package/src/runtime/facades/agency-facade.ts +68 -0
  412. package/src/runtime/facades/brain-facade.ts +142 -1
  413. package/src/runtime/facades/cognee-facade.ts +3 -1
  414. package/src/runtime/facades/control-facade.ts +45 -0
  415. package/src/runtime/facades/index.ts +12 -6
  416. package/src/runtime/facades/memory-facade.ts +20 -2
  417. package/src/runtime/facades/plan-facade.ts +2 -0
  418. package/src/runtime/facades/vault-facade.ts +30 -5
  419. package/src/runtime/intake-ops.ts +107 -5
  420. package/src/runtime/memory-extra-ops.ts +312 -4
  421. package/src/runtime/orchestrate-ops.ts +261 -65
  422. package/src/runtime/planning-extra-ops.ts +94 -0
  423. package/src/runtime/playbook-ops.ts +1 -1
  424. package/src/runtime/runtime.ts +164 -19
  425. package/src/runtime/session-briefing.ts +161 -0
  426. package/src/runtime/types.ts +29 -2
  427. package/src/runtime/vault-linking-ops.ts +452 -0
  428. package/src/vault/linking.ts +333 -0
  429. package/src/vault/vault-types.ts +46 -0
  430. package/src/vault/vault.ts +173 -11
@@ -0,0 +1,333 @@
1
+ /**
2
+ * LinkManager — Zettelkasten bidirectional linking for vault entries.
3
+ *
4
+ * Provides typed links between entries (supports, contradicts, extends, sequences),
5
+ * backlink traversal, graph walking, orphan detection, and link suggestions via FTS5.
6
+ *
7
+ * Ported from Salvador MCP with improvements:
8
+ * - Uses PersistenceProvider (not raw SQLite) for backend abstraction
9
+ * - Uses FTS5 for suggest_links (Salvador used TF-IDF cosine similarity)
10
+ * - Graceful degradation — all methods return empty on table-not-found
11
+ */
12
+
13
+ import type { PersistenceProvider } from '../persistence/types.js';
14
+ import type {
15
+ VaultLink,
16
+ VaultLinkRow,
17
+ LinkType,
18
+ LinkedEntry,
19
+ LinkSuggestion,
20
+ } from './vault-types.js';
21
+
22
+ export class LinkManager {
23
+ private initialized = false;
24
+
25
+ constructor(private provider: PersistenceProvider) {
26
+ this.ensureTable();
27
+ }
28
+
29
+ // ===========================================================================
30
+ // SCHEMA
31
+ // ===========================================================================
32
+
33
+ private ensureTable(): void {
34
+ if (this.initialized) return;
35
+ try {
36
+ this.provider.execSql(`
37
+ CREATE TABLE IF NOT EXISTS vault_links (
38
+ source_id TEXT NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
39
+ target_id TEXT NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
40
+ link_type TEXT NOT NULL CHECK(link_type IN ('supports', 'contradicts', 'extends', 'sequences')),
41
+ note TEXT,
42
+ created_at INTEGER NOT NULL,
43
+ PRIMARY KEY (source_id, target_id)
44
+ );
45
+ CREATE INDEX IF NOT EXISTS idx_links_target ON vault_links(target_id);
46
+ CREATE INDEX IF NOT EXISTS idx_links_type ON vault_links(link_type);
47
+ `);
48
+ this.initialized = true;
49
+ } catch {
50
+ // Table may already exist or DB may be read-only — degrade gracefully
51
+ }
52
+ }
53
+
54
+ // ===========================================================================
55
+ // CRUD
56
+ // ===========================================================================
57
+
58
+ /** Create a typed link between two entries. */
59
+ addLink(sourceId: string, targetId: string, linkType: LinkType, note?: string): void {
60
+ this.provider.run(
61
+ `INSERT OR REPLACE INTO vault_links (source_id, target_id, link_type, note, created_at)
62
+ VALUES (?, ?, ?, ?, ?)`,
63
+ [sourceId, targetId, linkType, note ?? null, Date.now()],
64
+ );
65
+ }
66
+
67
+ /** Remove a link between two entries. */
68
+ removeLink(sourceId: string, targetId: string): void {
69
+ this.provider.run('DELETE FROM vault_links WHERE source_id = ? AND target_id = ?', [
70
+ sourceId,
71
+ targetId,
72
+ ]);
73
+ }
74
+
75
+ /** Get all outgoing links FROM an entry. */
76
+ getLinks(entryId: string): VaultLink[] {
77
+ try {
78
+ const rows = this.provider.all<VaultLinkRow>(
79
+ 'SELECT * FROM vault_links WHERE source_id = ?',
80
+ [entryId],
81
+ );
82
+ return rows.map(rowToVaultLink);
83
+ } catch {
84
+ return [];
85
+ }
86
+ }
87
+
88
+ /** Get all incoming links TO an entry (backlinks). */
89
+ getBacklinks(entryId: string): VaultLink[] {
90
+ try {
91
+ const rows = this.provider.all<VaultLinkRow>(
92
+ 'SELECT * FROM vault_links WHERE target_id = ?',
93
+ [entryId],
94
+ );
95
+ return rows.map(rowToVaultLink);
96
+ } catch {
97
+ return [];
98
+ }
99
+ }
100
+
101
+ /** Get total link count (outgoing + incoming). */
102
+ getLinkCount(entryId: string): number {
103
+ try {
104
+ const row = this.provider.get<{ count: number }>(
105
+ 'SELECT COUNT(*) as count FROM vault_links WHERE source_id = ? OR target_id = ?',
106
+ [entryId, entryId],
107
+ );
108
+ return row?.count ?? 0;
109
+ } catch {
110
+ return 0;
111
+ }
112
+ }
113
+
114
+ // ===========================================================================
115
+ // GRAPH TRAVERSAL
116
+ // ===========================================================================
117
+
118
+ /**
119
+ * Walk the link graph from a starting entry up to `depth` hops.
120
+ * Returns all connected entries with link metadata.
121
+ * BFS — walks both outgoing and incoming links (undirected).
122
+ */
123
+ traverse(entryId: string, depth: number = 2): LinkedEntry[] {
124
+ const visited = new Set<string>([entryId]);
125
+ const result: LinkedEntry[] = [];
126
+ let frontier = [entryId];
127
+
128
+ for (let d = 0; d < depth && frontier.length > 0; d++) {
129
+ const nextFrontier: string[] = [];
130
+
131
+ for (const currentId of frontier) {
132
+ // Outgoing
133
+ for (const link of this.getLinks(currentId)) {
134
+ if (!visited.has(link.targetId)) {
135
+ visited.add(link.targetId);
136
+ nextFrontier.push(link.targetId);
137
+ const entry = this.getEntryMeta(link.targetId);
138
+ if (entry) {
139
+ result.push({
140
+ ...entry,
141
+ linkType: link.linkType,
142
+ linkDirection: 'outgoing',
143
+ linkNote: link.note,
144
+ });
145
+ }
146
+ }
147
+ }
148
+ // Incoming
149
+ for (const link of this.getBacklinks(currentId)) {
150
+ if (!visited.has(link.sourceId)) {
151
+ visited.add(link.sourceId);
152
+ nextFrontier.push(link.sourceId);
153
+ const entry = this.getEntryMeta(link.sourceId);
154
+ if (entry) {
155
+ result.push({
156
+ ...entry,
157
+ linkType: link.linkType,
158
+ linkDirection: 'incoming',
159
+ linkNote: link.note,
160
+ });
161
+ }
162
+ }
163
+ }
164
+ }
165
+
166
+ frontier = nextFrontier;
167
+ }
168
+
169
+ return result;
170
+ }
171
+
172
+ // ===========================================================================
173
+ // ORPHAN DETECTION
174
+ // ===========================================================================
175
+
176
+ /** Find entries with zero links. */
177
+ getOrphans(
178
+ limit: number = 50,
179
+ ): Array<{ id: string; title: string; type: string; domain: string }> {
180
+ try {
181
+ return this.provider.all<{ id: string; title: string; type: string; domain: string }>(
182
+ `SELECT id, title, type, domain FROM entries
183
+ WHERE id NOT IN (SELECT source_id FROM vault_links)
184
+ AND id NOT IN (SELECT target_id FROM vault_links)
185
+ ORDER BY updated_at DESC LIMIT ?`,
186
+ [limit],
187
+ );
188
+ } catch {
189
+ return [];
190
+ }
191
+ }
192
+
193
+ // ===========================================================================
194
+ // LINK SUGGESTIONS (FTS5-powered — improvement over Salvador's TF-IDF)
195
+ // ===========================================================================
196
+
197
+ /** Find semantically similar entries as link candidates using FTS5. */
198
+ suggestLinks(entryId: string, limit: number = 5): LinkSuggestion[] {
199
+ try {
200
+ // Get the entry to build a search query
201
+ const entry = this.provider.get<{
202
+ title: string;
203
+ description: string;
204
+ type: string;
205
+ tags: string;
206
+ }>('SELECT title, description, type, tags FROM entries WHERE id = ?', [entryId]);
207
+ if (!entry) return [];
208
+
209
+ // Build FTS query from entry content — extract significant keywords only.
210
+ // FTS5 MATCH chokes on long raw text; use top keywords joined with OR.
211
+ const rawWords = `${entry.title} ${entry.description}`
212
+ .replace(/[^\w\s]/g, ' ')
213
+ .toLowerCase()
214
+ .split(/\s+/)
215
+ .filter((w) => w.length > 2);
216
+ // Deduplicate and take top 10 most significant words (skip common stop words)
217
+ const stopWords = new Set([
218
+ 'the',
219
+ 'and',
220
+ 'for',
221
+ 'with',
222
+ 'from',
223
+ 'this',
224
+ 'that',
225
+ 'are',
226
+ 'was',
227
+ 'not',
228
+ 'but',
229
+ 'have',
230
+ 'has',
231
+ 'use',
232
+ 'can',
233
+ 'will',
234
+ 'all',
235
+ 'each',
236
+ 'than',
237
+ 'its',
238
+ 'more',
239
+ 'when',
240
+ 'into',
241
+ 'also',
242
+ 'any',
243
+ 'may',
244
+ 'only',
245
+ 'should',
246
+ 'which',
247
+ ]);
248
+ const unique = [...new Set(rawWords)].filter((w) => !stopWords.has(w));
249
+ const keywords = unique.slice(0, 10);
250
+ if (keywords.length === 0) return [];
251
+ const queryTerms = keywords.join(' OR ');
252
+
253
+ // FTS5 match with BM25 ranking
254
+ const matches = this.provider.all<{
255
+ id: string;
256
+ title: string;
257
+ type: string;
258
+ domain: string;
259
+ rank: number;
260
+ }>(
261
+ `SELECT e.id, e.title, e.type, e.domain, rank
262
+ FROM entries_fts fts
263
+ JOIN entries e ON e.rowid = fts.rowid
264
+ WHERE entries_fts MATCH ?
265
+ ORDER BY rank
266
+ LIMIT ?`,
267
+ [queryTerms, limit + 5],
268
+ );
269
+
270
+ // Filter out self and already-linked entries
271
+ const existingLinks = new Set([
272
+ ...this.getLinks(entryId).map((l) => l.targetId),
273
+ ...this.getBacklinks(entryId).map((l) => l.sourceId),
274
+ ]);
275
+
276
+ return matches
277
+ .filter((m) => m.id !== entryId && !existingLinks.has(m.id))
278
+ .slice(0, limit)
279
+ .map((m) => {
280
+ const suggestedType = inferLinkType(entry.type, m.type);
281
+ return {
282
+ entryId: m.id,
283
+ title: m.title,
284
+ type: m.type,
285
+ score: Math.abs(m.rank), // FTS5 rank is negative (lower = better)
286
+ suggestedType,
287
+ reason: `${m.type} in ${m.domain}`,
288
+ };
289
+ });
290
+ } catch {
291
+ return [];
292
+ }
293
+ }
294
+
295
+ // ===========================================================================
296
+ // PRIVATE
297
+ // ===========================================================================
298
+
299
+ private getEntryMeta(
300
+ entryId: string,
301
+ ): Omit<LinkedEntry, 'linkType' | 'linkDirection' | 'linkNote'> | null {
302
+ try {
303
+ const row = this.provider.get<{ id: string; title: string; type: string; domain: string }>(
304
+ 'SELECT id, title, type, domain FROM entries WHERE id = ?',
305
+ [entryId],
306
+ );
307
+ return row ?? null;
308
+ } catch {
309
+ return null;
310
+ }
311
+ }
312
+ }
313
+
314
+ // =============================================================================
315
+ // HELPERS
316
+ // =============================================================================
317
+
318
+ function rowToVaultLink(row: VaultLinkRow): VaultLink {
319
+ return {
320
+ sourceId: row.source_id,
321
+ targetId: row.target_id,
322
+ linkType: row.link_type as LinkType,
323
+ note: row.note ?? undefined,
324
+ createdAt: row.created_at,
325
+ };
326
+ }
327
+
328
+ function inferLinkType(sourceType: string, targetType: string): LinkType {
329
+ if (sourceType === 'pattern' && targetType === 'anti-pattern') return 'contradicts';
330
+ if (sourceType === 'anti-pattern' && targetType === 'pattern') return 'contradicts';
331
+ if (targetType === 'rule') return 'supports';
332
+ return 'extends';
333
+ }
@@ -48,3 +48,49 @@ export interface VaultTierInfo {
48
48
  connected: boolean;
49
49
  entryCount: number;
50
50
  }
51
+
52
+ // =============================================================================
53
+ // ZETTELKASTEN LINKS
54
+ // =============================================================================
55
+
56
+ /** Typed relationship between two vault entries. */
57
+ export type LinkType = 'supports' | 'contradicts' | 'extends' | 'sequences';
58
+
59
+ /** A directional, typed link between two vault entries. */
60
+ export interface VaultLink {
61
+ sourceId: string;
62
+ targetId: string;
63
+ linkType: LinkType;
64
+ note?: string;
65
+ createdAt: number;
66
+ }
67
+
68
+ /** Raw SQLite row from vault_links table. */
69
+ export interface VaultLinkRow {
70
+ source_id: string;
71
+ target_id: string;
72
+ link_type: string;
73
+ note: string | null;
74
+ created_at: number;
75
+ }
76
+
77
+ /** Entry enriched with link context for graph traversal results. */
78
+ export interface LinkedEntry {
79
+ id: string;
80
+ title: string;
81
+ type: string;
82
+ domain: string;
83
+ linkType: LinkType;
84
+ linkDirection: 'outgoing' | 'incoming';
85
+ linkNote?: string;
86
+ }
87
+
88
+ /** Suggested link candidate from semantic/FTS similarity. */
89
+ export interface LinkSuggestion {
90
+ entryId: string;
91
+ title: string;
92
+ type: string;
93
+ score: number;
94
+ suggestedType: LinkType;
95
+ reason: string;
96
+ }