@soleri/core 2.9.0 → 2.11.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 (503) hide show
  1. package/dist/agency/agency-manager.d.ts +47 -0
  2. package/dist/agency/agency-manager.d.ts.map +1 -0
  3. package/dist/agency/agency-manager.js +281 -0
  4. package/dist/agency/agency-manager.js.map +1 -0
  5. package/dist/agency/index.d.ts +3 -0
  6. package/dist/agency/index.d.ts.map +1 -0
  7. package/dist/agency/index.js +2 -0
  8. package/dist/agency/index.js.map +1 -0
  9. package/dist/agency/types.d.ts +69 -0
  10. package/dist/agency/types.d.ts.map +1 -0
  11. package/dist/agency/types.js +5 -0
  12. package/dist/agency/types.js.map +1 -0
  13. package/dist/brain/brain.d.ts +0 -1
  14. package/dist/brain/brain.d.ts.map +1 -1
  15. package/dist/brain/brain.js +14 -0
  16. package/dist/brain/brain.js.map +1 -1
  17. package/dist/brain/intelligence.d.ts +5 -1
  18. package/dist/brain/intelligence.d.ts.map +1 -1
  19. package/dist/brain/intelligence.js +83 -0
  20. package/dist/brain/intelligence.js.map +1 -1
  21. package/dist/brain/types.d.ts +21 -0
  22. package/dist/brain/types.d.ts.map +1 -1
  23. package/dist/chat/agent-loop-types.d.ts +82 -0
  24. package/dist/chat/agent-loop-types.d.ts.map +1 -0
  25. package/dist/chat/agent-loop-types.js +8 -0
  26. package/dist/chat/agent-loop-types.js.map +1 -0
  27. package/dist/chat/agent-loop.d.ts +19 -0
  28. package/dist/chat/agent-loop.d.ts.map +1 -0
  29. package/dist/chat/agent-loop.js +261 -0
  30. package/dist/chat/agent-loop.js.map +1 -0
  31. package/dist/chat/auth-manager.d.ts +49 -0
  32. package/dist/chat/auth-manager.d.ts.map +1 -0
  33. package/dist/chat/auth-manager.js +152 -0
  34. package/dist/chat/auth-manager.js.map +1 -0
  35. package/dist/chat/browser-session.d.ts +86 -0
  36. package/dist/chat/browser-session.d.ts.map +1 -0
  37. package/dist/chat/browser-session.js +143 -0
  38. package/dist/chat/browser-session.js.map +1 -0
  39. package/dist/chat/cancellation.d.ts +54 -0
  40. package/dist/chat/cancellation.d.ts.map +1 -0
  41. package/dist/chat/cancellation.js +80 -0
  42. package/dist/chat/cancellation.js.map +1 -0
  43. package/dist/chat/chat-session.d.ts +86 -0
  44. package/dist/chat/chat-session.d.ts.map +1 -0
  45. package/dist/chat/chat-session.js +252 -0
  46. package/dist/chat/chat-session.js.map +1 -0
  47. package/dist/chat/file-handler.d.ts +63 -0
  48. package/dist/chat/file-handler.d.ts.map +1 -0
  49. package/dist/chat/file-handler.js +182 -0
  50. package/dist/chat/file-handler.js.map +1 -0
  51. package/dist/chat/fragment-buffer.d.ts +49 -0
  52. package/dist/chat/fragment-buffer.d.ts.map +1 -0
  53. package/dist/chat/fragment-buffer.js +130 -0
  54. package/dist/chat/fragment-buffer.js.map +1 -0
  55. package/dist/chat/index.d.ts +24 -0
  56. package/dist/chat/index.d.ts.map +1 -0
  57. package/dist/chat/index.js +15 -0
  58. package/dist/chat/index.js.map +1 -0
  59. package/dist/chat/mcp-bridge.d.ts +60 -0
  60. package/dist/chat/mcp-bridge.d.ts.map +1 -0
  61. package/dist/chat/mcp-bridge.js +111 -0
  62. package/dist/chat/mcp-bridge.js.map +1 -0
  63. package/dist/chat/notifications.d.ts +82 -0
  64. package/dist/chat/notifications.d.ts.map +1 -0
  65. package/dist/chat/notifications.js +119 -0
  66. package/dist/chat/notifications.js.map +1 -0
  67. package/dist/chat/output-compressor.d.ts +30 -0
  68. package/dist/chat/output-compressor.d.ts.map +1 -0
  69. package/dist/chat/output-compressor.js +95 -0
  70. package/dist/chat/output-compressor.js.map +1 -0
  71. package/dist/chat/queue.d.ts +91 -0
  72. package/dist/chat/queue.d.ts.map +1 -0
  73. package/dist/chat/queue.js +146 -0
  74. package/dist/chat/queue.js.map +1 -0
  75. package/dist/chat/response-chunker.d.ts +29 -0
  76. package/dist/chat/response-chunker.d.ts.map +1 -0
  77. package/dist/chat/response-chunker.js +163 -0
  78. package/dist/chat/response-chunker.js.map +1 -0
  79. package/dist/chat/self-update.d.ts +62 -0
  80. package/dist/chat/self-update.d.ts.map +1 -0
  81. package/dist/chat/self-update.js +90 -0
  82. package/dist/chat/self-update.js.map +1 -0
  83. package/dist/chat/types.d.ts +105 -0
  84. package/dist/chat/types.d.ts.map +1 -0
  85. package/dist/chat/types.js +8 -0
  86. package/dist/chat/types.js.map +1 -0
  87. package/dist/chat/voice.d.ts +39 -0
  88. package/dist/chat/voice.d.ts.map +1 -0
  89. package/dist/chat/voice.js +80 -0
  90. package/dist/chat/voice.js.map +1 -0
  91. package/dist/claudemd/compose.d.ts +31 -0
  92. package/dist/claudemd/compose.d.ts.map +1 -0
  93. package/dist/claudemd/compose.js +105 -0
  94. package/dist/claudemd/compose.js.map +1 -0
  95. package/dist/claudemd/index.d.ts +5 -0
  96. package/dist/claudemd/index.d.ts.map +1 -0
  97. package/dist/claudemd/index.js +3 -0
  98. package/dist/claudemd/index.js.map +1 -0
  99. package/dist/claudemd/inject.d.ts +31 -0
  100. package/dist/claudemd/inject.d.ts.map +1 -0
  101. package/dist/claudemd/inject.js +157 -0
  102. package/dist/claudemd/inject.js.map +1 -0
  103. package/dist/claudemd/types.d.ts +41 -0
  104. package/dist/claudemd/types.d.ts.map +1 -0
  105. package/dist/claudemd/types.js +5 -0
  106. package/dist/claudemd/types.js.map +1 -0
  107. package/dist/context/context-engine.d.ts +31 -0
  108. package/dist/context/context-engine.d.ts.map +1 -0
  109. package/dist/context/context-engine.js +245 -0
  110. package/dist/context/context-engine.js.map +1 -0
  111. package/dist/context/index.d.ts +3 -0
  112. package/dist/context/index.d.ts.map +1 -0
  113. package/dist/context/index.js +2 -0
  114. package/dist/context/index.js.map +1 -0
  115. package/dist/context/types.d.ts +54 -0
  116. package/dist/context/types.d.ts.map +1 -0
  117. package/dist/context/types.js +5 -0
  118. package/dist/context/types.js.map +1 -0
  119. package/dist/enforcement/adapters/claude-code.d.ts +18 -0
  120. package/dist/enforcement/adapters/claude-code.d.ts.map +1 -0
  121. package/dist/enforcement/adapters/claude-code.js +106 -0
  122. package/dist/enforcement/adapters/claude-code.js.map +1 -0
  123. package/dist/enforcement/adapters/index.d.ts +2 -0
  124. package/dist/enforcement/adapters/index.d.ts.map +1 -0
  125. package/dist/enforcement/adapters/index.js +2 -0
  126. package/dist/enforcement/adapters/index.js.map +1 -0
  127. package/dist/enforcement/index.d.ts +4 -0
  128. package/dist/enforcement/index.d.ts.map +1 -0
  129. package/dist/enforcement/index.js +3 -0
  130. package/dist/enforcement/index.js.map +1 -0
  131. package/dist/enforcement/registry.d.ts +23 -0
  132. package/dist/enforcement/registry.d.ts.map +1 -0
  133. package/dist/enforcement/registry.js +63 -0
  134. package/dist/enforcement/registry.js.map +1 -0
  135. package/dist/enforcement/types.d.ts +51 -0
  136. package/dist/enforcement/types.d.ts.map +1 -0
  137. package/dist/enforcement/types.js +8 -0
  138. package/dist/enforcement/types.js.map +1 -0
  139. package/dist/facades/facade-factory.d.ts +10 -3
  140. package/dist/facades/facade-factory.d.ts.map +1 -1
  141. package/dist/facades/facade-factory.js +94 -5
  142. package/dist/facades/facade-factory.js.map +1 -1
  143. package/dist/facades/types.d.ts +15 -1
  144. package/dist/facades/types.d.ts.map +1 -1
  145. package/dist/facades/types.js +6 -0
  146. package/dist/facades/types.js.map +1 -1
  147. package/dist/health/health-registry.d.ts +40 -0
  148. package/dist/health/health-registry.d.ts.map +1 -0
  149. package/dist/health/health-registry.js +134 -0
  150. package/dist/health/health-registry.js.map +1 -0
  151. package/dist/health/index.d.ts +5 -0
  152. package/dist/health/index.d.ts.map +1 -0
  153. package/dist/health/index.js +3 -0
  154. package/dist/health/index.js.map +1 -0
  155. package/dist/health/vault-integrity.d.ts +13 -0
  156. package/dist/health/vault-integrity.d.ts.map +1 -0
  157. package/dist/health/vault-integrity.js +49 -0
  158. package/dist/health/vault-integrity.js.map +1 -0
  159. package/dist/index.d.ts +67 -6
  160. package/dist/index.d.ts.map +1 -1
  161. package/dist/index.js +51 -3
  162. package/dist/index.js.map +1 -1
  163. package/dist/intake/intake-pipeline.d.ts +0 -7
  164. package/dist/intake/intake-pipeline.d.ts.map +1 -1
  165. package/dist/intake/intake-pipeline.js +1 -1
  166. package/dist/intake/intake-pipeline.js.map +1 -1
  167. package/dist/intelligence/types.d.ts +1 -0
  168. package/dist/intelligence/types.d.ts.map +1 -1
  169. package/dist/migrations/index.d.ts +6 -0
  170. package/dist/migrations/index.d.ts.map +1 -0
  171. package/dist/migrations/index.js +5 -0
  172. package/dist/migrations/index.js.map +1 -0
  173. package/dist/migrations/migration-runner.d.ts +51 -0
  174. package/dist/migrations/migration-runner.d.ts.map +1 -0
  175. package/dist/migrations/migration-runner.js +141 -0
  176. package/dist/migrations/migration-runner.js.map +1 -0
  177. package/dist/packs/index.d.ts +10 -0
  178. package/dist/packs/index.d.ts.map +1 -0
  179. package/dist/packs/index.js +8 -0
  180. package/dist/packs/index.js.map +1 -0
  181. package/dist/packs/lockfile.d.ts +97 -0
  182. package/dist/packs/lockfile.d.ts.map +1 -0
  183. package/dist/packs/lockfile.js +129 -0
  184. package/dist/packs/lockfile.js.map +1 -0
  185. package/dist/packs/pack-installer.d.ts +41 -0
  186. package/dist/packs/pack-installer.d.ts.map +1 -0
  187. package/dist/packs/pack-installer.js +253 -0
  188. package/dist/packs/pack-installer.js.map +1 -0
  189. package/dist/packs/resolver.d.ts +51 -0
  190. package/dist/packs/resolver.d.ts.map +1 -0
  191. package/dist/packs/resolver.js +195 -0
  192. package/dist/packs/resolver.js.map +1 -0
  193. package/dist/packs/types.d.ts +186 -0
  194. package/dist/packs/types.d.ts.map +1 -0
  195. package/dist/packs/types.js +69 -0
  196. package/dist/packs/types.js.map +1 -0
  197. package/dist/persistence/postgres-provider.d.ts +42 -7
  198. package/dist/persistence/postgres-provider.d.ts.map +1 -1
  199. package/dist/persistence/postgres-provider.js +187 -46
  200. package/dist/persistence/postgres-provider.js.map +1 -1
  201. package/dist/planning/gap-analysis.d.ts.map +1 -1
  202. package/dist/planning/gap-analysis.js +3 -1
  203. package/dist/planning/gap-analysis.js.map +1 -1
  204. package/dist/playbooks/index.d.ts +2 -0
  205. package/dist/playbooks/index.d.ts.map +1 -1
  206. package/dist/playbooks/index.js +2 -0
  207. package/dist/playbooks/index.js.map +1 -1
  208. package/dist/playbooks/playbook-executor.d.ts +100 -0
  209. package/dist/playbooks/playbook-executor.d.ts.map +1 -0
  210. package/dist/playbooks/playbook-executor.js +207 -0
  211. package/dist/playbooks/playbook-executor.js.map +1 -0
  212. package/dist/plugins/index.d.ts +7 -0
  213. package/dist/plugins/index.d.ts.map +1 -0
  214. package/dist/plugins/index.js +7 -0
  215. package/dist/plugins/index.js.map +1 -0
  216. package/dist/plugins/plugin-loader.d.ts +28 -0
  217. package/dist/plugins/plugin-loader.d.ts.map +1 -0
  218. package/dist/plugins/plugin-loader.js +150 -0
  219. package/dist/plugins/plugin-loader.js.map +1 -0
  220. package/dist/plugins/plugin-registry.d.ts +58 -0
  221. package/dist/plugins/plugin-registry.d.ts.map +1 -0
  222. package/dist/plugins/plugin-registry.js +157 -0
  223. package/dist/plugins/plugin-registry.js.map +1 -0
  224. package/dist/plugins/types.d.ts +180 -0
  225. package/dist/plugins/types.d.ts.map +1 -0
  226. package/dist/plugins/types.js +48 -0
  227. package/dist/plugins/types.js.map +1 -0
  228. package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
  229. package/dist/runtime/admin-extra-ops.js +181 -8
  230. package/dist/runtime/admin-extra-ops.js.map +1 -1
  231. package/dist/runtime/capture-ops.d.ts.map +1 -1
  232. package/dist/runtime/capture-ops.js +106 -7
  233. package/dist/runtime/capture-ops.js.map +1 -1
  234. package/dist/runtime/deprecation.d.ts +33 -0
  235. package/dist/runtime/deprecation.d.ts.map +1 -0
  236. package/dist/runtime/deprecation.js +41 -0
  237. package/dist/runtime/deprecation.js.map +1 -0
  238. package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
  239. package/dist/runtime/facades/admin-facade.js +12 -1
  240. package/dist/runtime/facades/admin-facade.js.map +1 -1
  241. package/dist/runtime/facades/agency-facade.d.ts +7 -0
  242. package/dist/runtime/facades/agency-facade.d.ts.map +1 -0
  243. package/dist/runtime/facades/agency-facade.js +103 -0
  244. package/dist/runtime/facades/agency-facade.js.map +1 -0
  245. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  246. package/dist/runtime/facades/brain-facade.js +58 -0
  247. package/dist/runtime/facades/brain-facade.js.map +1 -1
  248. package/dist/runtime/facades/chat-facade.d.ts +7 -0
  249. package/dist/runtime/facades/chat-facade.d.ts.map +1 -0
  250. package/dist/runtime/facades/chat-facade.js +808 -0
  251. package/dist/runtime/facades/chat-facade.js.map +1 -0
  252. package/dist/runtime/facades/context-facade.d.ts +7 -0
  253. package/dist/runtime/facades/context-facade.d.ts.map +1 -0
  254. package/dist/runtime/facades/context-facade.js +45 -0
  255. package/dist/runtime/facades/context-facade.js.map +1 -0
  256. package/dist/runtime/facades/index.d.ts.map +1 -1
  257. package/dist/runtime/facades/index.js +18 -0
  258. package/dist/runtime/facades/index.js.map +1 -1
  259. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  260. package/dist/runtime/facades/vault-facade.js +247 -1
  261. package/dist/runtime/facades/vault-facade.js.map +1 -1
  262. package/dist/runtime/feature-flags.d.ts +18 -0
  263. package/dist/runtime/feature-flags.d.ts.map +1 -0
  264. package/dist/runtime/feature-flags.js +90 -0
  265. package/dist/runtime/feature-flags.js.map +1 -0
  266. package/dist/runtime/pack-ops.d.ts +9 -0
  267. package/dist/runtime/pack-ops.d.ts.map +1 -0
  268. package/dist/runtime/pack-ops.js +76 -0
  269. package/dist/runtime/pack-ops.js.map +1 -0
  270. package/dist/runtime/playbook-ops.d.ts +3 -7
  271. package/dist/runtime/playbook-ops.d.ts.map +1 -1
  272. package/dist/runtime/playbook-ops.js +101 -10
  273. package/dist/runtime/playbook-ops.js.map +1 -1
  274. package/dist/runtime/plugin-ops.d.ts +9 -0
  275. package/dist/runtime/plugin-ops.d.ts.map +1 -0
  276. package/dist/runtime/plugin-ops.js +235 -0
  277. package/dist/runtime/plugin-ops.js.map +1 -0
  278. package/dist/runtime/runtime.d.ts.map +1 -1
  279. package/dist/runtime/runtime.js +72 -5
  280. package/dist/runtime/runtime.js.map +1 -1
  281. package/dist/runtime/telemetry-ops.d.ts +10 -0
  282. package/dist/runtime/telemetry-ops.d.ts.map +1 -0
  283. package/dist/runtime/telemetry-ops.js +53 -0
  284. package/dist/runtime/telemetry-ops.js.map +1 -0
  285. package/dist/runtime/types.d.ts +35 -0
  286. package/dist/runtime/types.d.ts.map +1 -1
  287. package/dist/runtime/vault-sharing-ops.d.ts +13 -0
  288. package/dist/runtime/vault-sharing-ops.d.ts.map +1 -0
  289. package/dist/runtime/vault-sharing-ops.js +345 -0
  290. package/dist/runtime/vault-sharing-ops.js.map +1 -0
  291. package/dist/streams/index.d.ts +1 -1
  292. package/dist/streams/index.d.ts.map +1 -1
  293. package/dist/streams/index.js +1 -1
  294. package/dist/streams/index.js.map +1 -1
  295. package/dist/streams/replayable-stream.d.ts +13 -1
  296. package/dist/streams/replayable-stream.d.ts.map +1 -1
  297. package/dist/streams/replayable-stream.js +27 -3
  298. package/dist/streams/replayable-stream.js.map +1 -1
  299. package/dist/text/similarity.d.ts +0 -1
  300. package/dist/text/similarity.d.ts.map +1 -1
  301. package/dist/text/similarity.js +1 -1
  302. package/dist/text/similarity.js.map +1 -1
  303. package/dist/transport/http-server.d.ts +56 -0
  304. package/dist/transport/http-server.d.ts.map +1 -0
  305. package/dist/transport/http-server.js +210 -0
  306. package/dist/transport/http-server.js.map +1 -0
  307. package/dist/transport/index.d.ts +11 -0
  308. package/dist/transport/index.d.ts.map +1 -0
  309. package/dist/transport/index.js +10 -0
  310. package/dist/transport/index.js.map +1 -0
  311. package/dist/transport/lsp-server.d.ts +140 -0
  312. package/dist/transport/lsp-server.d.ts.map +1 -0
  313. package/dist/transport/lsp-server.js +239 -0
  314. package/dist/transport/lsp-server.js.map +1 -0
  315. package/dist/transport/rate-limiter.d.ts +35 -0
  316. package/dist/transport/rate-limiter.d.ts.map +1 -0
  317. package/dist/transport/rate-limiter.js +72 -0
  318. package/dist/transport/rate-limiter.js.map +1 -0
  319. package/dist/transport/session-manager.d.ts +49 -0
  320. package/dist/transport/session-manager.d.ts.map +1 -0
  321. package/dist/transport/session-manager.js +83 -0
  322. package/dist/transport/session-manager.js.map +1 -0
  323. package/dist/transport/token-auth.d.ts +29 -0
  324. package/dist/transport/token-auth.d.ts.map +1 -0
  325. package/dist/transport/token-auth.js +84 -0
  326. package/dist/transport/token-auth.js.map +1 -0
  327. package/dist/transport/types.d.ts +61 -0
  328. package/dist/transport/types.d.ts.map +1 -0
  329. package/dist/transport/types.js +5 -0
  330. package/dist/transport/types.js.map +1 -0
  331. package/dist/transport/ws-server.d.ts +78 -0
  332. package/dist/transport/ws-server.d.ts.map +1 -0
  333. package/dist/transport/ws-server.js +342 -0
  334. package/dist/transport/ws-server.js.map +1 -0
  335. package/dist/vault/git-vault-sync.d.ts +107 -0
  336. package/dist/vault/git-vault-sync.d.ts.map +1 -0
  337. package/dist/vault/git-vault-sync.js +251 -0
  338. package/dist/vault/git-vault-sync.js.map +1 -0
  339. package/dist/vault/knowledge-review.d.ts +67 -0
  340. package/dist/vault/knowledge-review.d.ts.map +1 -0
  341. package/dist/vault/knowledge-review.js +133 -0
  342. package/dist/vault/knowledge-review.js.map +1 -0
  343. package/dist/vault/obsidian-sync.d.ts +94 -0
  344. package/dist/vault/obsidian-sync.d.ts.map +1 -0
  345. package/dist/vault/obsidian-sync.js +247 -0
  346. package/dist/vault/obsidian-sync.js.map +1 -0
  347. package/dist/vault/scope-detector.d.ts +31 -0
  348. package/dist/vault/scope-detector.d.ts.map +1 -0
  349. package/dist/vault/scope-detector.js +182 -0
  350. package/dist/vault/scope-detector.js.map +1 -0
  351. package/dist/vault/vault-branching.d.ts +71 -0
  352. package/dist/vault/vault-branching.d.ts.map +1 -0
  353. package/dist/vault/vault-branching.js +180 -0
  354. package/dist/vault/vault-branching.js.map +1 -0
  355. package/dist/vault/vault-manager.d.ts +89 -0
  356. package/dist/vault/vault-manager.d.ts.map +1 -0
  357. package/dist/vault/vault-manager.js +199 -0
  358. package/dist/vault/vault-manager.js.map +1 -0
  359. package/dist/vault/vault-types.d.ts +30 -0
  360. package/dist/vault/vault-types.d.ts.map +1 -0
  361. package/dist/vault/vault-types.js +10 -0
  362. package/dist/vault/vault-types.js.map +1 -0
  363. package/dist/vault/vault.d.ts +10 -0
  364. package/dist/vault/vault.d.ts.map +1 -1
  365. package/dist/vault/vault.js +36 -3
  366. package/dist/vault/vault.js.map +1 -1
  367. package/package.json +1 -1
  368. package/src/__tests__/admin-extra-ops.test.ts +31 -11
  369. package/src/__tests__/agency-manager.test.ts +374 -0
  370. package/src/__tests__/agent-loop.test.ts +256 -0
  371. package/src/__tests__/capture-ops.test.ts +275 -0
  372. package/src/__tests__/chat-differentiators.test.ts +251 -0
  373. package/src/__tests__/chat-enhanced.test.ts +390 -0
  374. package/src/__tests__/chat-transport.test.ts +665 -0
  375. package/src/__tests__/claudemd.test.ts +282 -0
  376. package/src/__tests__/context-engine.test.ts +256 -0
  377. package/src/__tests__/core-ops.test.ts +97 -5
  378. package/src/__tests__/deprecation.test.ts +78 -0
  379. package/src/__tests__/enforcement.test.ts +153 -0
  380. package/src/__tests__/facade-factory.test.ts +271 -0
  381. package/src/__tests__/feature-flags.test.ts +138 -0
  382. package/src/__tests__/git-vault-sync.test.ts +230 -0
  383. package/src/__tests__/health-registry.test.ts +173 -0
  384. package/src/__tests__/knowledge-review.test.ts +104 -0
  385. package/src/__tests__/lsp-transport.test.ts +442 -0
  386. package/src/__tests__/migration-runner.test.ts +170 -0
  387. package/src/__tests__/normalize.test.ts +10 -0
  388. package/src/__tests__/obsidian-sync.test.ts +354 -0
  389. package/src/__tests__/pack-lockfile.test.ts +261 -0
  390. package/src/__tests__/pack-ops.test.ts +146 -0
  391. package/src/__tests__/pack-system.test.ts +423 -0
  392. package/src/__tests__/playbook-executor.test.ts +249 -0
  393. package/src/__tests__/playbook-ops-execution.test.ts +189 -0
  394. package/src/__tests__/plugin-ops.test.ts +411 -0
  395. package/src/__tests__/plugin-system.test.ts +509 -0
  396. package/src/__tests__/postgres-provider.test.ts +64 -6
  397. package/src/__tests__/replayable-stream.test.ts +112 -1
  398. package/src/__tests__/scope-detector.test.ts +121 -0
  399. package/src/__tests__/session-lifecycle.test.ts +259 -0
  400. package/src/__tests__/transport.test.ts +758 -0
  401. package/src/__tests__/vault-branching.test.ts +274 -0
  402. package/src/__tests__/vault-connect.test.ts +179 -0
  403. package/src/__tests__/vault-integrity.test.ts +71 -0
  404. package/src/__tests__/vault-manager.test.ts +238 -0
  405. package/src/__tests__/vault-scaling.test.ts +281 -0
  406. package/src/__tests__/vault-sharing.test.ts +270 -0
  407. package/src/__tests__/ws-transport.test.ts +479 -0
  408. package/src/agency/agency-manager.ts +326 -0
  409. package/src/agency/index.ts +13 -0
  410. package/src/agency/types.ts +88 -0
  411. package/src/brain/brain.ts +15 -11
  412. package/src/brain/intelligence.ts +103 -0
  413. package/src/brain/types.ts +26 -0
  414. package/src/chat/agent-loop-types.ts +99 -0
  415. package/src/chat/agent-loop.ts +357 -0
  416. package/src/chat/auth-manager.ts +171 -0
  417. package/src/chat/browser-session.ts +188 -0
  418. package/src/chat/cancellation.ts +99 -0
  419. package/src/chat/chat-session.ts +283 -0
  420. package/src/chat/file-handler.ts +230 -0
  421. package/src/chat/fragment-buffer.ts +160 -0
  422. package/src/chat/index.ts +72 -0
  423. package/src/chat/mcp-bridge.ts +135 -0
  424. package/src/chat/notifications.ts +164 -0
  425. package/src/chat/output-compressor.ts +116 -0
  426. package/src/chat/queue.ts +208 -0
  427. package/src/chat/response-chunker.ts +200 -0
  428. package/src/chat/self-update.ts +117 -0
  429. package/src/chat/types.ts +126 -0
  430. package/src/chat/voice.ts +134 -0
  431. package/src/claudemd/compose.ts +142 -0
  432. package/src/claudemd/index.ts +17 -0
  433. package/src/claudemd/inject.ts +170 -0
  434. package/src/claudemd/types.ts +45 -0
  435. package/src/context/context-engine.ts +302 -0
  436. package/src/context/index.ts +11 -0
  437. package/src/context/types.ts +69 -0
  438. package/src/enforcement/adapters/claude-code.ts +135 -0
  439. package/src/enforcement/adapters/index.ts +1 -0
  440. package/src/enforcement/index.ts +10 -0
  441. package/src/enforcement/registry.ts +82 -0
  442. package/src/enforcement/types.ts +56 -0
  443. package/src/facades/facade-factory.ts +138 -5
  444. package/src/facades/types.ts +21 -0
  445. package/src/health/health-registry.ts +165 -0
  446. package/src/health/index.ts +11 -0
  447. package/src/health/vault-integrity.ts +66 -0
  448. package/src/index.ts +294 -2
  449. package/src/intake/intake-pipeline.ts +1 -1
  450. package/src/intelligence/types.ts +1 -0
  451. package/src/migrations/index.ts +6 -0
  452. package/src/migrations/migration-runner.ts +185 -0
  453. package/src/packs/index.ts +20 -0
  454. package/src/packs/lockfile.ts +180 -0
  455. package/src/packs/pack-installer.ts +289 -0
  456. package/src/packs/resolver.ts +237 -0
  457. package/src/packs/types.ts +125 -0
  458. package/src/persistence/postgres-provider.ts +211 -58
  459. package/src/planning/gap-analysis.ts +52 -7
  460. package/src/playbooks/index.ts +11 -0
  461. package/src/playbooks/playbook-executor.ts +301 -0
  462. package/src/plugins/index.ts +19 -0
  463. package/src/plugins/plugin-loader.ts +183 -0
  464. package/src/plugins/plugin-registry.ts +187 -0
  465. package/src/plugins/types.ts +119 -0
  466. package/src/runtime/admin-extra-ops.ts +193 -8
  467. package/src/runtime/capture-ops.ts +113 -8
  468. package/src/runtime/deprecation.ts +58 -0
  469. package/src/runtime/facades/admin-facade.ts +16 -1
  470. package/src/runtime/facades/agency-facade.ts +111 -0
  471. package/src/runtime/facades/brain-facade.ts +60 -0
  472. package/src/runtime/facades/chat-facade.ts +918 -0
  473. package/src/runtime/facades/context-facade.ts +55 -0
  474. package/src/runtime/facades/index.ts +22 -1
  475. package/src/runtime/facades/vault-facade.ts +261 -1
  476. package/src/runtime/feature-flags.ts +101 -0
  477. package/src/runtime/pack-ops.ts +85 -0
  478. package/src/runtime/playbook-ops.ts +113 -9
  479. package/src/runtime/plugin-ops.ts +258 -0
  480. package/src/runtime/runtime.ts +84 -5
  481. package/src/runtime/telemetry-ops.ts +57 -0
  482. package/src/runtime/types.ts +35 -0
  483. package/src/runtime/vault-sharing-ops.ts +372 -0
  484. package/src/streams/index.ts +1 -1
  485. package/src/streams/replayable-stream.ts +34 -3
  486. package/src/text/similarity.ts +1 -1
  487. package/src/transport/http-server.ts +269 -0
  488. package/src/transport/index.ts +48 -0
  489. package/src/transport/lsp-server.ts +401 -0
  490. package/src/transport/rate-limiter.ts +97 -0
  491. package/src/transport/session-manager.ts +120 -0
  492. package/src/transport/token-auth.ts +96 -0
  493. package/src/transport/types.ts +66 -0
  494. package/src/transport/ws-server.ts +415 -0
  495. package/src/vault/git-vault-sync.ts +318 -0
  496. package/src/vault/knowledge-review.ts +221 -0
  497. package/src/vault/obsidian-sync.ts +346 -0
  498. package/src/vault/scope-detector.ts +219 -0
  499. package/src/vault/vault-branching.ts +264 -0
  500. package/src/vault/vault-manager.ts +237 -0
  501. package/src/vault/vault-types.ts +50 -0
  502. package/src/vault/vault.ts +41 -3
  503. package/src/governance/index.ts +0 -18
@@ -0,0 +1,170 @@
1
+ /**
2
+ * CLAUDE.md injection — marker-based write with diff detection and user-safe zones.
3
+ *
4
+ * Improvements over Salvador:
5
+ * - Diff-before-write: skips I/O if content unchanged
6
+ * - User-safe zones: `<!-- user:custom -->` blocks inside markers survive regeneration
7
+ * - Versioned markers: `<!-- agent:mode v1 -->` for future migration
8
+ */
9
+
10
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
11
+ import { OPEN_MARKER, CLOSE_MARKER, USER_ZONE_OPEN, USER_ZONE_CLOSE } from './compose.js';
12
+ import type { InjectionResult, RemovalResult } from './types.js';
13
+
14
+ /** Legacy marker patterns to detect and migrate */
15
+ const LEGACY_MARKERS = [
16
+ '<!-- agent:mode -->', // v0 (no version)
17
+ '<!-- salvador:mode -->', // pre-Soleri
18
+ ];
19
+
20
+ /**
21
+ * Extract user-safe zone content from an existing agent block.
22
+ * Returns the content between `<!-- user:custom -->` markers, or null.
23
+ */
24
+ export function extractUserZone(content: string): string | null {
25
+ const openIdx = content.indexOf(USER_ZONE_OPEN);
26
+ const closeIdx = content.indexOf(USER_ZONE_CLOSE);
27
+ if (openIdx === -1 || closeIdx === -1 || closeIdx <= openIdx) return null;
28
+ const inner = content.slice(openIdx + USER_ZONE_OPEN.length, closeIdx).trim();
29
+ return inner || null;
30
+ }
31
+
32
+ /**
33
+ * Preserve user-safe zone content when regenerating.
34
+ * Replaces the empty user zone in `newBlock` with the saved content.
35
+ */
36
+ function preserveUserZone(newBlock: string, savedZone: string | null): string {
37
+ if (!savedZone) return newBlock;
38
+ const emptyZone = `${USER_ZONE_OPEN}\n\n${USER_ZONE_CLOSE}`;
39
+ const filledZone = `${USER_ZONE_OPEN}\n${savedZone}\n${USER_ZONE_CLOSE}`;
40
+ return newBlock.replace(emptyZone, filledZone);
41
+ }
42
+
43
+ /**
44
+ * Find the agent block boundaries in content.
45
+ * Handles current and legacy markers.
46
+ */
47
+ function findBlock(
48
+ content: string,
49
+ ): { openIdx: number; closeIdx: number; closeLen: number } | null {
50
+ // Current markers
51
+ const openIdx = content.indexOf(OPEN_MARKER);
52
+ if (openIdx !== -1) {
53
+ const closeIdx = content.indexOf(CLOSE_MARKER, openIdx);
54
+ if (closeIdx > openIdx) {
55
+ return { openIdx, closeIdx, closeLen: CLOSE_MARKER.length };
56
+ }
57
+ }
58
+
59
+ // Legacy markers
60
+ for (const legacy of LEGACY_MARKERS) {
61
+ const legacyOpen = content.indexOf(legacy);
62
+ if (legacyOpen === -1) continue;
63
+ const legacyCloseTag = legacy.replace('<!-- ', '<!-- /');
64
+ const legacyClose = content.indexOf(legacyCloseTag, legacyOpen);
65
+ if (legacyClose > legacyOpen) {
66
+ return { openIdx: legacyOpen, closeIdx: legacyClose, closeLen: legacyCloseTag.length };
67
+ }
68
+ }
69
+
70
+ return null;
71
+ }
72
+
73
+ /**
74
+ * Inject an agent block into a CLAUDE.md file.
75
+ *
76
+ * - If markers exist: replace (preserving user-safe zones), skip if unchanged
77
+ * - If legacy markers: migrate
78
+ * - If no markers: append
79
+ */
80
+ export function injectCLAUDEmd(filePath: string, block: string): InjectionResult {
81
+ try {
82
+ // New file
83
+ if (!existsSync(filePath)) {
84
+ writeFileSync(filePath, block + '\n', 'utf-8');
85
+ return { success: true, action: 'injected', message: 'Created file with agent block' };
86
+ }
87
+
88
+ const content = readFileSync(filePath, 'utf-8');
89
+ const bounds = findBlock(content);
90
+
91
+ if (bounds) {
92
+ // Extract user zone from existing block before replacing
93
+ const existingBlock = content.slice(bounds.openIdx, bounds.closeIdx + bounds.closeLen);
94
+ const userZone = extractUserZone(existingBlock);
95
+ const finalBlock = preserveUserZone(block, userZone);
96
+
97
+ // Diff check — skip write if identical
98
+ if (existingBlock === finalBlock) {
99
+ return {
100
+ success: true,
101
+ action: 'skipped',
102
+ message: 'Content unchanged — no write needed',
103
+ diffDetected: false,
104
+ };
105
+ }
106
+
107
+ const before = content.slice(0, bounds.openIdx);
108
+ const after = content.slice(bounds.closeIdx + bounds.closeLen);
109
+ writeFileSync(filePath, before + finalBlock + after, 'utf-8');
110
+ return {
111
+ success: true,
112
+ action: 'replaced',
113
+ message: 'Replaced agent block (diff detected)',
114
+ diffDetected: true,
115
+ };
116
+ }
117
+
118
+ // No markers — append
119
+ writeFileSync(filePath, content.trimEnd() + '\n\n' + block + '\n', 'utf-8');
120
+ return { success: true, action: 'injected', message: 'Appended agent block' };
121
+ } catch (err) {
122
+ return {
123
+ success: false,
124
+ action: 'error',
125
+ message: `Injection failed: ${err instanceof Error ? err.message : String(err)}`,
126
+ };
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Remove the agent block from a CLAUDE.md file.
132
+ */
133
+ export function removeCLAUDEmd(filePath: string): RemovalResult {
134
+ try {
135
+ if (!existsSync(filePath)) {
136
+ return { success: true, action: 'not_present', message: 'File does not exist' };
137
+ }
138
+
139
+ const content = readFileSync(filePath, 'utf-8');
140
+ const bounds = findBlock(content);
141
+
142
+ if (!bounds) {
143
+ return { success: true, action: 'not_present', message: 'No agent block found' };
144
+ }
145
+
146
+ const before = content.slice(0, bounds.openIdx).trimEnd();
147
+ const after = content.slice(bounds.closeIdx + bounds.closeLen).trimStart();
148
+ writeFileSync(filePath, after ? before + '\n\n' + after : before + '\n', 'utf-8');
149
+ return { success: true, action: 'removed', message: 'Removed agent block' };
150
+ } catch (err) {
151
+ return {
152
+ success: false,
153
+ action: 'error',
154
+ message: `Removal failed: ${err instanceof Error ? err.message : String(err)}`,
155
+ };
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Check if an agent block is present in a CLAUDE.md file.
161
+ */
162
+ export function hasCLAUDEmdBlock(filePath: string): boolean {
163
+ if (!existsSync(filePath)) return false;
164
+ try {
165
+ const content = readFileSync(filePath, 'utf-8');
166
+ return findBlock(content) !== null;
167
+ } catch {
168
+ return false;
169
+ }
170
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Types for CLAUDE.md auto-composition and injection.
3
+ */
4
+
5
+ /** Agent metadata for CLAUDE.md generation */
6
+ export interface AgentMeta {
7
+ id: string;
8
+ name: string;
9
+ activationPhrase: string;
10
+ deactivationPhrase: string;
11
+ activateCommand: string;
12
+ deactivateCommand: string;
13
+ /** Global instruction sections (priority-sorted, lower = higher) */
14
+ globalInstructions?: GlobalInstruction[];
15
+ }
16
+
17
+ /** A standalone section in CLAUDE.md not tied to a facade */
18
+ export interface GlobalInstruction {
19
+ heading: string;
20
+ content: string;
21
+ priority?: number;
22
+ }
23
+
24
+ /** Facade instructions for CLAUDE.md behavioral rules */
25
+ export interface FacadeInstructions {
26
+ heading: string;
27
+ rules?: string[];
28
+ templates?: Record<string, string>;
29
+ priority?: number;
30
+ keyOps?: string[];
31
+ }
32
+
33
+ /** Result of an injection or removal operation */
34
+ export interface InjectionResult {
35
+ success: boolean;
36
+ action: 'injected' | 'replaced' | 'skipped' | 'error';
37
+ message: string;
38
+ diffDetected?: boolean;
39
+ }
40
+
41
+ export interface RemovalResult {
42
+ success: boolean;
43
+ action: 'removed' | 'not_present' | 'error';
44
+ message: string;
45
+ }
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Context Engine — entity extraction, knowledge retrieval, and confidence scoring.
3
+ *
4
+ * Orchestrates three signals to enrich intent classification:
5
+ * 1. Entity extraction (regex-based, domain-agnostic)
6
+ * 2. Knowledge retrieval (vault FTS + Cognee vector + brain recommendations)
7
+ * 3. Confidence scoring (combines entity + knowledge signals)
8
+ *
9
+ * Graceful degradation: if Cognee is unavailable, vault-only.
10
+ * If vault is empty, keyword confidence from IntentRouter is unchanged.
11
+ */
12
+
13
+ import type { Vault } from '../vault/vault.js';
14
+ import type { Brain } from '../brain/brain.js';
15
+ import type { BrainIntelligence } from '../brain/intelligence.js';
16
+ import type { CogneeClient } from '../cognee/client.js';
17
+ import type {
18
+ EntityType,
19
+ ExtractedEntity,
20
+ EntityExtractionResult,
21
+ KnowledgeItem,
22
+ KnowledgeRetrievalResult,
23
+ ContextAnalysis,
24
+ ConfidenceLevel,
25
+ ContextEngineConfig,
26
+ } from './types.js';
27
+
28
+ // ─── Entity Patterns ────────────────────────────────────────────────
29
+
30
+ const ENTITY_PATTERNS: Array<{ type: EntityType; pattern: RegExp; confidence: number }> = [
31
+ // File paths: src/foo/bar.ts, ./config.json, foo.tsx
32
+ { type: 'file', pattern: /(?:\.\/|src\/|packages\/)?[\w\-./]+\.\w{1,6}/g, confidence: 0.8 },
33
+ // Function/method names: functionName(), ClassName.method()
34
+ { type: 'function', pattern: /\b[a-z]\w*(?:\.\w+)*\(\)/g, confidence: 0.7 },
35
+ // Domains: accessibility, performance, security, etc.
36
+ {
37
+ type: 'domain',
38
+ pattern:
39
+ /\b(?:accessibility|a11y|performance|security|architecture|testing|design|ux|devops|data|analytics|auth|api)\b/gi,
40
+ confidence: 0.9,
41
+ },
42
+ // Actions: create, fix, build, deploy, etc.
43
+ {
44
+ type: 'action',
45
+ pattern:
46
+ /\b(?:create|build|fix|debug|deploy|test|validate|review|improve|refactor|optimize|migrate|add|remove|update)\b/gi,
47
+ confidence: 0.8,
48
+ },
49
+ // Technologies: React, TypeScript, Node.js, etc.
50
+ {
51
+ type: 'technology',
52
+ pattern:
53
+ /\b(?:react|vue|svelte|angular|typescript|javascript|node\.?js|python|rust|go|docker|kubernetes|postgres|sqlite|redis|tailwind|css|html|graphql|rest|grpc)\b/gi,
54
+ confidence: 0.85,
55
+ },
56
+ // Patterns: kebab-case compound terms that look like patterns
57
+ { type: 'pattern', pattern: /\b[a-z]+-[a-z]+(?:-[a-z]+)*\b/g, confidence: 0.5 },
58
+ ];
59
+
60
+ // Words to ignore when extracting patterns
61
+ const STOP_PATTERNS = new Set([
62
+ 'e-mail',
63
+ 'real-time',
64
+ 'built-in',
65
+ 'up-to-date',
66
+ 'well-known',
67
+ 'open-source',
68
+ 'third-party',
69
+ 'cross-platform',
70
+ 'end-to-end',
71
+ 'out-of-the-box',
72
+ ]);
73
+
74
+ // ─── Confidence Thresholds ──────────────────────────────────────────
75
+
76
+ const HIGH_CONFIDENCE = 0.75;
77
+ const MEDIUM_CONFIDENCE = 0.45;
78
+
79
+ // ─── Class ──────────────────────────────────────────────────────────
80
+
81
+ export class ContextEngine {
82
+ private vault: Vault;
83
+ private brain: Brain;
84
+ private brainIntelligence: BrainIntelligence;
85
+ private cognee: CogneeClient | null;
86
+ private config: Required<ContextEngineConfig>;
87
+
88
+ constructor(
89
+ vault: Vault,
90
+ brain: Brain,
91
+ brainIntelligence: BrainIntelligence,
92
+ cognee: CogneeClient | null,
93
+ config?: ContextEngineConfig,
94
+ ) {
95
+ this.vault = vault;
96
+ this.brain = brain;
97
+ this.brainIntelligence = brainIntelligence;
98
+ this.cognee = cognee;
99
+ this.config = {
100
+ vaultSearchLimit: config?.vaultSearchLimit ?? 10,
101
+ cogneeSearchLimit: config?.cogneeSearchLimit ?? 10,
102
+ brainRecommendLimit: config?.brainRecommendLimit ?? 5,
103
+ minScoreThreshold: config?.minScoreThreshold ?? 0.1,
104
+ };
105
+ }
106
+
107
+ // ─── Entity Extraction ──────────────────────────────────────────
108
+
109
+ extractEntities(prompt: string): EntityExtractionResult {
110
+ const seen = new Set<string>();
111
+ const entities: ExtractedEntity[] = [];
112
+
113
+ for (const { type, pattern, confidence } of ENTITY_PATTERNS) {
114
+ // Reset lastIndex for global regex
115
+ pattern.lastIndex = 0;
116
+ let match: RegExpExecArray | null;
117
+ while ((match = pattern.exec(prompt)) !== null) {
118
+ const value = match[0].toLowerCase();
119
+ const key = `${type}:${value}`;
120
+ if (seen.has(key)) continue;
121
+ if (type === 'pattern' && STOP_PATTERNS.has(value)) continue;
122
+ seen.add(key);
123
+ entities.push({ type, value, confidence });
124
+ }
125
+ }
126
+
127
+ // Group by type
128
+ const byType: Partial<Record<EntityType, ExtractedEntity[]>> = {};
129
+ for (const e of entities) {
130
+ (byType[e.type] ??= []).push(e);
131
+ }
132
+
133
+ return { entities, byType };
134
+ }
135
+
136
+ // ─── Knowledge Retrieval ────────────────────────────────────────
137
+
138
+ async retrieveKnowledge(prompt: string, domain?: string): Promise<KnowledgeRetrievalResult> {
139
+ const items: KnowledgeItem[] = [];
140
+ let vaultHits = 0;
141
+ let cogneeHits = 0;
142
+ let brainHits = 0;
143
+
144
+ // 1. Vault FTS search
145
+ try {
146
+ const vaultResults = this.vault.search(prompt, {
147
+ domain,
148
+ limit: this.config.vaultSearchLimit,
149
+ });
150
+ // Normalize FTS5 -rank scores to 0-1 range
151
+ const maxScore = vaultResults.length > 0 ? Math.max(...vaultResults.map((r) => r.score)) : 1;
152
+ for (const r of vaultResults) {
153
+ items.push({
154
+ id: r.entry.id,
155
+ title: r.entry.title,
156
+ score: maxScore > 0 ? r.score / maxScore : 0.5,
157
+ source: 'vault',
158
+ domain: r.entry.domain,
159
+ });
160
+ vaultHits++;
161
+ }
162
+ } catch {
163
+ // Vault search failed — continue with other sources
164
+ }
165
+
166
+ // 2. Cognee vector search (async, graceful degradation)
167
+ if (this.cognee) {
168
+ try {
169
+ const cogneeResults = await this.cognee.search(prompt, {
170
+ limit: this.config.cogneeSearchLimit,
171
+ });
172
+ for (const r of cogneeResults) {
173
+ // Avoid duplicates from vault
174
+ if (items.some((i) => i.id === r.id)) continue;
175
+ items.push({
176
+ id: r.id,
177
+ title: r.text.slice(0, 100),
178
+ score: r.score,
179
+ source: 'cognee',
180
+ });
181
+ cogneeHits++;
182
+ }
183
+ } catch {
184
+ // Cognee unavailable — continue without
185
+ }
186
+ }
187
+
188
+ // 3. Brain recommendations
189
+ try {
190
+ const recommendations = this.brainIntelligence.recommend({
191
+ domain,
192
+ task: prompt,
193
+ limit: this.config.brainRecommendLimit,
194
+ });
195
+ for (const r of recommendations) {
196
+ items.push({
197
+ id: r.pattern,
198
+ title: r.pattern,
199
+ score: r.strength / 100,
200
+ source: 'brain',
201
+ domain: r.domain,
202
+ });
203
+ brainHits++;
204
+ }
205
+ } catch {
206
+ // Brain empty — continue without
207
+ }
208
+
209
+ // Sort by score descending, filter by threshold
210
+ items.sort((a, b) => b.score - a.score);
211
+ const filtered = items.filter((i) => i.score >= this.config.minScoreThreshold);
212
+
213
+ return { items: filtered, vaultHits, cogneeHits, brainHits };
214
+ }
215
+
216
+ // ─── Context Analysis ───────────────────────────────────────────
217
+
218
+ async analyze(prompt: string, domain?: string): Promise<ContextAnalysis> {
219
+ const start = performance.now();
220
+
221
+ // Extract entities
222
+ const entities = this.extractEntities(prompt);
223
+
224
+ // Retrieve knowledge
225
+ const knowledge = await this.retrieveKnowledge(prompt, domain);
226
+
227
+ // Compute confidence from multiple signals
228
+ const confidence = this.computeConfidence(entities, knowledge);
229
+ const confidenceLevel = this.toConfidenceLevel(confidence);
230
+
231
+ // Detect domains from entities + knowledge
232
+ const detectedDomains = this.detectDomains(entities, knowledge);
233
+
234
+ const processingTimeMs = Math.round(performance.now() - start);
235
+
236
+ return {
237
+ prompt,
238
+ entities,
239
+ knowledge,
240
+ confidence,
241
+ confidenceLevel,
242
+ detectedDomains,
243
+ processingTimeMs,
244
+ };
245
+ }
246
+
247
+ // ─── Private Helpers ────────────────────────────────────────────
248
+
249
+ private computeConfidence(
250
+ entities: EntityExtractionResult,
251
+ knowledge: KnowledgeRetrievalResult,
252
+ ): number {
253
+ let score = 0;
254
+
255
+ // Entity signal (0-0.4): more entities = clearer prompt
256
+ const entityCount = entities.entities.length;
257
+ const entitySignal = Math.min(0.4, entityCount * 0.08);
258
+ score += entitySignal;
259
+
260
+ // Action signal (0-0.2): explicit actions boost confidence
261
+ const actions = entities.byType.action ?? [];
262
+ if (actions.length > 0) score += 0.2;
263
+
264
+ // Knowledge signal (0-0.3): relevant knowledge found
265
+ if (knowledge.items.length > 0) {
266
+ const topScore = knowledge.items[0].score;
267
+ score += topScore * 0.3;
268
+ }
269
+
270
+ // Source diversity bonus (0-0.1): multiple sources = more confident
271
+ const sources = new Set(knowledge.items.map((i) => i.source));
272
+ if (sources.size >= 2) score += 0.05;
273
+ if (sources.size >= 3) score += 0.05;
274
+
275
+ return Math.min(1, score);
276
+ }
277
+
278
+ private toConfidenceLevel(confidence: number): ConfidenceLevel {
279
+ if (confidence >= HIGH_CONFIDENCE) return 'high';
280
+ if (confidence >= MEDIUM_CONFIDENCE) return 'medium';
281
+ return 'low';
282
+ }
283
+
284
+ private detectDomains(
285
+ entities: EntityExtractionResult,
286
+ knowledge: KnowledgeRetrievalResult,
287
+ ): string[] {
288
+ const domains = new Set<string>();
289
+
290
+ // From entity extraction
291
+ for (const e of entities.byType.domain ?? []) {
292
+ domains.add(e.value);
293
+ }
294
+
295
+ // From knowledge results
296
+ for (const item of knowledge.items) {
297
+ if (item.domain) domains.add(item.domain);
298
+ }
299
+
300
+ return [...domains];
301
+ }
302
+ }
@@ -0,0 +1,11 @@
1
+ export { ContextEngine } from './context-engine.js';
2
+ export type {
3
+ EntityType,
4
+ ExtractedEntity,
5
+ EntityExtractionResult,
6
+ KnowledgeItem,
7
+ KnowledgeRetrievalResult,
8
+ ConfidenceLevel,
9
+ ContextAnalysis,
10
+ ContextEngineConfig,
11
+ } from './types.js';
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Context Engine types — entity extraction, knowledge retrieval, confidence scoring.
3
+ */
4
+
5
+ // ─── Entity Extraction ─────────────────────────────────────────────
6
+
7
+ export type EntityType = 'file' | 'function' | 'domain' | 'action' | 'pattern' | 'technology';
8
+
9
+ export interface ExtractedEntity {
10
+ type: EntityType;
11
+ value: string;
12
+ confidence: number;
13
+ }
14
+
15
+ export interface EntityExtractionResult {
16
+ entities: ExtractedEntity[];
17
+ byType: Partial<Record<EntityType, ExtractedEntity[]>>;
18
+ }
19
+
20
+ // ─── Knowledge Retrieval ────────────────────────────────────────────
21
+
22
+ export interface KnowledgeItem {
23
+ id: string;
24
+ title: string;
25
+ score: number;
26
+ source: 'vault' | 'cognee' | 'brain';
27
+ domain?: string;
28
+ }
29
+
30
+ export interface KnowledgeRetrievalResult {
31
+ items: KnowledgeItem[];
32
+ vaultHits: number;
33
+ cogneeHits: number;
34
+ brainHits: number;
35
+ }
36
+
37
+ // ─── Context Analysis ───────────────────────────────────────────────
38
+
39
+ export type ConfidenceLevel = 'high' | 'medium' | 'low';
40
+
41
+ export interface ContextAnalysis {
42
+ /** Original prompt that was analyzed */
43
+ prompt: string;
44
+ /** Extracted entities from the prompt */
45
+ entities: EntityExtractionResult;
46
+ /** Retrieved knowledge relevant to the prompt */
47
+ knowledge: KnowledgeRetrievalResult;
48
+ /** Enhanced confidence based on entity + knowledge signals */
49
+ confidence: number;
50
+ /** Discrete confidence level */
51
+ confidenceLevel: ConfidenceLevel;
52
+ /** Domains detected from entities + knowledge */
53
+ detectedDomains: string[];
54
+ /** Processing time in milliseconds */
55
+ processingTimeMs: number;
56
+ }
57
+
58
+ // ─── Configuration ──────────────────────────────────────────────────
59
+
60
+ export interface ContextEngineConfig {
61
+ /** Max vault search results to retrieve. Default: 10. */
62
+ vaultSearchLimit?: number;
63
+ /** Max Cognee search results to retrieve. Default: 10. */
64
+ cogneeSearchLimit?: number;
65
+ /** Max brain recommendations to include. Default: 5. */
66
+ brainRecommendLimit?: number;
67
+ /** Minimum score threshold for knowledge items. Default: 0.1. */
68
+ minScoreThreshold?: number;
69
+ }