@soleri/core 2.10.0 → 2.12.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 (511) 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 +24 -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/loader.d.ts.map +1 -1
  168. package/dist/intelligence/loader.js +51 -5
  169. package/dist/intelligence/loader.js.map +1 -1
  170. package/dist/intelligence/types.d.ts +1 -0
  171. package/dist/intelligence/types.d.ts.map +1 -1
  172. package/dist/migrations/index.d.ts +6 -0
  173. package/dist/migrations/index.d.ts.map +1 -0
  174. package/dist/migrations/index.js +5 -0
  175. package/dist/migrations/index.js.map +1 -0
  176. package/dist/migrations/migration-runner.d.ts +51 -0
  177. package/dist/migrations/migration-runner.d.ts.map +1 -0
  178. package/dist/migrations/migration-runner.js +141 -0
  179. package/dist/migrations/migration-runner.js.map +1 -0
  180. package/dist/packs/index.d.ts +10 -0
  181. package/dist/packs/index.d.ts.map +1 -0
  182. package/dist/packs/index.js +8 -0
  183. package/dist/packs/index.js.map +1 -0
  184. package/dist/packs/lockfile.d.ts +97 -0
  185. package/dist/packs/lockfile.d.ts.map +1 -0
  186. package/dist/packs/lockfile.js +129 -0
  187. package/dist/packs/lockfile.js.map +1 -0
  188. package/dist/packs/pack-installer.d.ts +41 -0
  189. package/dist/packs/pack-installer.d.ts.map +1 -0
  190. package/dist/packs/pack-installer.js +253 -0
  191. package/dist/packs/pack-installer.js.map +1 -0
  192. package/dist/packs/resolver.d.ts +51 -0
  193. package/dist/packs/resolver.d.ts.map +1 -0
  194. package/dist/packs/resolver.js +195 -0
  195. package/dist/packs/resolver.js.map +1 -0
  196. package/dist/packs/types.d.ts +186 -0
  197. package/dist/packs/types.d.ts.map +1 -0
  198. package/dist/packs/types.js +69 -0
  199. package/dist/packs/types.js.map +1 -0
  200. package/dist/persistence/postgres-provider.d.ts +42 -7
  201. package/dist/persistence/postgres-provider.d.ts.map +1 -1
  202. package/dist/persistence/postgres-provider.js +187 -46
  203. package/dist/persistence/postgres-provider.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/domain-ops.d.ts.map +1 -1
  239. package/dist/runtime/domain-ops.js +21 -2
  240. package/dist/runtime/domain-ops.js.map +1 -1
  241. package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
  242. package/dist/runtime/facades/admin-facade.js +12 -1
  243. package/dist/runtime/facades/admin-facade.js.map +1 -1
  244. package/dist/runtime/facades/agency-facade.d.ts +7 -0
  245. package/dist/runtime/facades/agency-facade.d.ts.map +1 -0
  246. package/dist/runtime/facades/agency-facade.js +103 -0
  247. package/dist/runtime/facades/agency-facade.js.map +1 -0
  248. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  249. package/dist/runtime/facades/brain-facade.js +58 -0
  250. package/dist/runtime/facades/brain-facade.js.map +1 -1
  251. package/dist/runtime/facades/chat-facade.d.ts +7 -0
  252. package/dist/runtime/facades/chat-facade.d.ts.map +1 -0
  253. package/dist/runtime/facades/chat-facade.js +808 -0
  254. package/dist/runtime/facades/chat-facade.js.map +1 -0
  255. package/dist/runtime/facades/context-facade.d.ts +7 -0
  256. package/dist/runtime/facades/context-facade.d.ts.map +1 -0
  257. package/dist/runtime/facades/context-facade.js +45 -0
  258. package/dist/runtime/facades/context-facade.js.map +1 -0
  259. package/dist/runtime/facades/index.d.ts.map +1 -1
  260. package/dist/runtime/facades/index.js +18 -0
  261. package/dist/runtime/facades/index.js.map +1 -1
  262. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  263. package/dist/runtime/facades/vault-facade.js +247 -1
  264. package/dist/runtime/facades/vault-facade.js.map +1 -1
  265. package/dist/runtime/feature-flags.d.ts +18 -0
  266. package/dist/runtime/feature-flags.d.ts.map +1 -0
  267. package/dist/runtime/feature-flags.js +90 -0
  268. package/dist/runtime/feature-flags.js.map +1 -0
  269. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  270. package/dist/runtime/orchestrate-ops.js +13 -0
  271. package/dist/runtime/orchestrate-ops.js.map +1 -1
  272. package/dist/runtime/pack-ops.d.ts +9 -0
  273. package/dist/runtime/pack-ops.d.ts.map +1 -0
  274. package/dist/runtime/pack-ops.js +76 -0
  275. package/dist/runtime/pack-ops.js.map +1 -0
  276. package/dist/runtime/playbook-ops.d.ts +3 -7
  277. package/dist/runtime/playbook-ops.d.ts.map +1 -1
  278. package/dist/runtime/playbook-ops.js +101 -10
  279. package/dist/runtime/playbook-ops.js.map +1 -1
  280. package/dist/runtime/plugin-ops.d.ts +9 -0
  281. package/dist/runtime/plugin-ops.d.ts.map +1 -0
  282. package/dist/runtime/plugin-ops.js +235 -0
  283. package/dist/runtime/plugin-ops.js.map +1 -0
  284. package/dist/runtime/runtime.d.ts.map +1 -1
  285. package/dist/runtime/runtime.js +72 -5
  286. package/dist/runtime/runtime.js.map +1 -1
  287. package/dist/runtime/telemetry-ops.d.ts +10 -0
  288. package/dist/runtime/telemetry-ops.d.ts.map +1 -0
  289. package/dist/runtime/telemetry-ops.js +53 -0
  290. package/dist/runtime/telemetry-ops.js.map +1 -0
  291. package/dist/runtime/types.d.ts +35 -0
  292. package/dist/runtime/types.d.ts.map +1 -1
  293. package/dist/runtime/vault-sharing-ops.d.ts +13 -0
  294. package/dist/runtime/vault-sharing-ops.d.ts.map +1 -0
  295. package/dist/runtime/vault-sharing-ops.js +345 -0
  296. package/dist/runtime/vault-sharing-ops.js.map +1 -0
  297. package/dist/streams/index.d.ts +1 -1
  298. package/dist/streams/index.d.ts.map +1 -1
  299. package/dist/streams/index.js +1 -1
  300. package/dist/streams/index.js.map +1 -1
  301. package/dist/streams/replayable-stream.d.ts +13 -1
  302. package/dist/streams/replayable-stream.d.ts.map +1 -1
  303. package/dist/streams/replayable-stream.js +27 -3
  304. package/dist/streams/replayable-stream.js.map +1 -1
  305. package/dist/text/similarity.d.ts +0 -1
  306. package/dist/text/similarity.d.ts.map +1 -1
  307. package/dist/text/similarity.js +1 -1
  308. package/dist/text/similarity.js.map +1 -1
  309. package/dist/transport/http-server.d.ts +56 -0
  310. package/dist/transport/http-server.d.ts.map +1 -0
  311. package/dist/transport/http-server.js +210 -0
  312. package/dist/transport/http-server.js.map +1 -0
  313. package/dist/transport/index.d.ts +11 -0
  314. package/dist/transport/index.d.ts.map +1 -0
  315. package/dist/transport/index.js +10 -0
  316. package/dist/transport/index.js.map +1 -0
  317. package/dist/transport/lsp-server.d.ts +140 -0
  318. package/dist/transport/lsp-server.d.ts.map +1 -0
  319. package/dist/transport/lsp-server.js +239 -0
  320. package/dist/transport/lsp-server.js.map +1 -0
  321. package/dist/transport/rate-limiter.d.ts +35 -0
  322. package/dist/transport/rate-limiter.d.ts.map +1 -0
  323. package/dist/transport/rate-limiter.js +72 -0
  324. package/dist/transport/rate-limiter.js.map +1 -0
  325. package/dist/transport/session-manager.d.ts +49 -0
  326. package/dist/transport/session-manager.d.ts.map +1 -0
  327. package/dist/transport/session-manager.js +83 -0
  328. package/dist/transport/session-manager.js.map +1 -0
  329. package/dist/transport/token-auth.d.ts +29 -0
  330. package/dist/transport/token-auth.d.ts.map +1 -0
  331. package/dist/transport/token-auth.js +84 -0
  332. package/dist/transport/token-auth.js.map +1 -0
  333. package/dist/transport/types.d.ts +61 -0
  334. package/dist/transport/types.d.ts.map +1 -0
  335. package/dist/transport/types.js +5 -0
  336. package/dist/transport/types.js.map +1 -0
  337. package/dist/transport/ws-server.d.ts +78 -0
  338. package/dist/transport/ws-server.d.ts.map +1 -0
  339. package/dist/transport/ws-server.js +342 -0
  340. package/dist/transport/ws-server.js.map +1 -0
  341. package/dist/vault/git-vault-sync.d.ts +107 -0
  342. package/dist/vault/git-vault-sync.d.ts.map +1 -0
  343. package/dist/vault/git-vault-sync.js +251 -0
  344. package/dist/vault/git-vault-sync.js.map +1 -0
  345. package/dist/vault/knowledge-review.d.ts +67 -0
  346. package/dist/vault/knowledge-review.d.ts.map +1 -0
  347. package/dist/vault/knowledge-review.js +133 -0
  348. package/dist/vault/knowledge-review.js.map +1 -0
  349. package/dist/vault/obsidian-sync.d.ts +94 -0
  350. package/dist/vault/obsidian-sync.d.ts.map +1 -0
  351. package/dist/vault/obsidian-sync.js +247 -0
  352. package/dist/vault/obsidian-sync.js.map +1 -0
  353. package/dist/vault/scope-detector.d.ts +31 -0
  354. package/dist/vault/scope-detector.d.ts.map +1 -0
  355. package/dist/vault/scope-detector.js +182 -0
  356. package/dist/vault/scope-detector.js.map +1 -0
  357. package/dist/vault/vault-branching.d.ts +71 -0
  358. package/dist/vault/vault-branching.d.ts.map +1 -0
  359. package/dist/vault/vault-branching.js +180 -0
  360. package/dist/vault/vault-branching.js.map +1 -0
  361. package/dist/vault/vault-manager.d.ts +89 -0
  362. package/dist/vault/vault-manager.d.ts.map +1 -0
  363. package/dist/vault/vault-manager.js +199 -0
  364. package/dist/vault/vault-manager.js.map +1 -0
  365. package/dist/vault/vault-types.d.ts +30 -0
  366. package/dist/vault/vault-types.d.ts.map +1 -0
  367. package/dist/vault/vault-types.js +10 -0
  368. package/dist/vault/vault-types.js.map +1 -0
  369. package/dist/vault/vault.d.ts +10 -0
  370. package/dist/vault/vault.d.ts.map +1 -1
  371. package/dist/vault/vault.js +36 -3
  372. package/dist/vault/vault.js.map +1 -1
  373. package/package.json +1 -1
  374. package/src/__tests__/admin-extra-ops.test.ts +31 -11
  375. package/src/__tests__/agency-manager.test.ts +374 -0
  376. package/src/__tests__/agent-loop.test.ts +256 -0
  377. package/src/__tests__/capture-ops.test.ts +275 -0
  378. package/src/__tests__/chat-differentiators.test.ts +251 -0
  379. package/src/__tests__/chat-enhanced.test.ts +390 -0
  380. package/src/__tests__/chat-transport.test.ts +665 -0
  381. package/src/__tests__/claudemd.test.ts +282 -0
  382. package/src/__tests__/context-engine.test.ts +256 -0
  383. package/src/__tests__/core-ops.test.ts +97 -5
  384. package/src/__tests__/deprecation.test.ts +78 -0
  385. package/src/__tests__/enforcement.test.ts +153 -0
  386. package/src/__tests__/facade-factory.test.ts +271 -0
  387. package/src/__tests__/feature-flags.test.ts +138 -0
  388. package/src/__tests__/git-vault-sync.test.ts +230 -0
  389. package/src/__tests__/health-registry.test.ts +173 -0
  390. package/src/__tests__/knowledge-review.test.ts +104 -0
  391. package/src/__tests__/lsp-transport.test.ts +442 -0
  392. package/src/__tests__/migration-runner.test.ts +170 -0
  393. package/src/__tests__/normalize.test.ts +10 -0
  394. package/src/__tests__/obsidian-sync.test.ts +354 -0
  395. package/src/__tests__/pack-lockfile.test.ts +261 -0
  396. package/src/__tests__/pack-ops.test.ts +146 -0
  397. package/src/__tests__/pack-system.test.ts +423 -0
  398. package/src/__tests__/playbook-executor.test.ts +249 -0
  399. package/src/__tests__/playbook-ops-execution.test.ts +189 -0
  400. package/src/__tests__/plugin-ops.test.ts +411 -0
  401. package/src/__tests__/plugin-system.test.ts +509 -0
  402. package/src/__tests__/postgres-provider.test.ts +64 -6
  403. package/src/__tests__/replayable-stream.test.ts +112 -1
  404. package/src/__tests__/scope-detector.test.ts +121 -0
  405. package/src/__tests__/session-lifecycle.test.ts +259 -0
  406. package/src/__tests__/transport.test.ts +758 -0
  407. package/src/__tests__/vault-branching.test.ts +274 -0
  408. package/src/__tests__/vault-connect.test.ts +179 -0
  409. package/src/__tests__/vault-integrity.test.ts +71 -0
  410. package/src/__tests__/vault-manager.test.ts +238 -0
  411. package/src/__tests__/vault-scaling.test.ts +281 -0
  412. package/src/__tests__/vault-sharing.test.ts +270 -0
  413. package/src/__tests__/ws-transport.test.ts +479 -0
  414. package/src/agency/agency-manager.ts +326 -0
  415. package/src/agency/index.ts +13 -0
  416. package/src/agency/types.ts +88 -0
  417. package/src/brain/brain.ts +27 -11
  418. package/src/brain/intelligence.ts +103 -0
  419. package/src/brain/types.ts +26 -0
  420. package/src/chat/agent-loop-types.ts +99 -0
  421. package/src/chat/agent-loop.ts +357 -0
  422. package/src/chat/auth-manager.ts +171 -0
  423. package/src/chat/browser-session.ts +188 -0
  424. package/src/chat/cancellation.ts +99 -0
  425. package/src/chat/chat-session.ts +283 -0
  426. package/src/chat/file-handler.ts +230 -0
  427. package/src/chat/fragment-buffer.ts +160 -0
  428. package/src/chat/index.ts +72 -0
  429. package/src/chat/mcp-bridge.ts +135 -0
  430. package/src/chat/notifications.ts +164 -0
  431. package/src/chat/output-compressor.ts +116 -0
  432. package/src/chat/queue.ts +208 -0
  433. package/src/chat/response-chunker.ts +200 -0
  434. package/src/chat/self-update.ts +117 -0
  435. package/src/chat/types.ts +126 -0
  436. package/src/chat/voice.ts +134 -0
  437. package/src/claudemd/compose.ts +142 -0
  438. package/src/claudemd/index.ts +17 -0
  439. package/src/claudemd/inject.ts +170 -0
  440. package/src/claudemd/types.ts +45 -0
  441. package/src/context/context-engine.ts +302 -0
  442. package/src/context/index.ts +11 -0
  443. package/src/context/types.ts +69 -0
  444. package/src/enforcement/adapters/claude-code.ts +135 -0
  445. package/src/enforcement/adapters/index.ts +1 -0
  446. package/src/enforcement/index.ts +10 -0
  447. package/src/enforcement/registry.ts +82 -0
  448. package/src/enforcement/types.ts +56 -0
  449. package/src/facades/facade-factory.ts +138 -5
  450. package/src/facades/types.ts +21 -0
  451. package/src/health/health-registry.ts +165 -0
  452. package/src/health/index.ts +11 -0
  453. package/src/health/vault-integrity.ts +66 -0
  454. package/src/index.ts +294 -2
  455. package/src/intake/intake-pipeline.ts +1 -1
  456. package/src/intelligence/loader.ts +58 -5
  457. package/src/intelligence/types.ts +1 -0
  458. package/src/migrations/index.ts +6 -0
  459. package/src/migrations/migration-runner.ts +185 -0
  460. package/src/packs/index.ts +20 -0
  461. package/src/packs/lockfile.ts +180 -0
  462. package/src/packs/pack-installer.ts +289 -0
  463. package/src/packs/resolver.ts +237 -0
  464. package/src/packs/types.ts +125 -0
  465. package/src/persistence/postgres-provider.ts +211 -58
  466. package/src/playbooks/index.ts +11 -0
  467. package/src/playbooks/playbook-executor.ts +301 -0
  468. package/src/plugins/index.ts +19 -0
  469. package/src/plugins/plugin-loader.ts +183 -0
  470. package/src/plugins/plugin-registry.ts +187 -0
  471. package/src/plugins/types.ts +119 -0
  472. package/src/runtime/admin-extra-ops.ts +193 -8
  473. package/src/runtime/capture-ops.ts +113 -8
  474. package/src/runtime/deprecation.ts +58 -0
  475. package/src/runtime/domain-ops.ts +21 -2
  476. package/src/runtime/facades/admin-facade.ts +16 -1
  477. package/src/runtime/facades/agency-facade.ts +111 -0
  478. package/src/runtime/facades/brain-facade.ts +60 -0
  479. package/src/runtime/facades/chat-facade.ts +918 -0
  480. package/src/runtime/facades/context-facade.ts +55 -0
  481. package/src/runtime/facades/index.ts +22 -1
  482. package/src/runtime/facades/vault-facade.ts +261 -1
  483. package/src/runtime/feature-flags.ts +101 -0
  484. package/src/runtime/orchestrate-ops.ts +13 -0
  485. package/src/runtime/pack-ops.ts +85 -0
  486. package/src/runtime/playbook-ops.ts +113 -9
  487. package/src/runtime/plugin-ops.ts +258 -0
  488. package/src/runtime/runtime.ts +84 -5
  489. package/src/runtime/telemetry-ops.ts +57 -0
  490. package/src/runtime/types.ts +35 -0
  491. package/src/runtime/vault-sharing-ops.ts +372 -0
  492. package/src/streams/index.ts +1 -1
  493. package/src/streams/replayable-stream.ts +34 -3
  494. package/src/text/similarity.ts +1 -1
  495. package/src/transport/http-server.ts +269 -0
  496. package/src/transport/index.ts +48 -0
  497. package/src/transport/lsp-server.ts +401 -0
  498. package/src/transport/rate-limiter.ts +97 -0
  499. package/src/transport/session-manager.ts +120 -0
  500. package/src/transport/token-auth.ts +96 -0
  501. package/src/transport/types.ts +66 -0
  502. package/src/transport/ws-server.ts +415 -0
  503. package/src/vault/git-vault-sync.ts +318 -0
  504. package/src/vault/knowledge-review.ts +221 -0
  505. package/src/vault/obsidian-sync.ts +346 -0
  506. package/src/vault/scope-detector.ts +219 -0
  507. package/src/vault/vault-branching.ts +264 -0
  508. package/src/vault/vault-manager.ts +237 -0
  509. package/src/vault/vault-types.ts +50 -0
  510. package/src/vault/vault.ts +41 -3
  511. package/src/governance/index.ts +0 -18
@@ -76,21 +76,32 @@ export function createAdminExtraOps(runtime: AgentRuntime): OpDefinition[] {
76
76
  // ─── Permissions ────────────────────────────────────────────────
77
77
  {
78
78
  name: 'admin_permissions',
79
- description: 'Get or set auth enforcement policy (strict, moderate, permissive).',
80
- auth: 'write',
79
+ description:
80
+ 'Get or set auth enforcement policy. Modes: permissive (no checks), warn (log violations), enforce (block violations).',
81
+ auth: 'admin',
81
82
  schema: z.object({
82
83
  action: z.enum(['get', 'set']),
83
- level: z.enum(['strict', 'moderate', 'permissive']).optional(),
84
+ mode: z.enum(['permissive', 'warn', 'enforce']).optional(),
85
+ callerLevel: z.enum(['read', 'write', 'admin']).optional(),
84
86
  }),
85
87
  handler: async (params) => {
86
88
  const action = params.action as string;
87
89
  if (action === 'set') {
88
- const level = params.level as PermissionLevel | undefined;
89
- if (level) {
90
- permissionLevel = level;
91
- }
90
+ const mode = params.mode as 'permissive' | 'warn' | 'enforce' | undefined;
91
+ const callerLevel = params.callerLevel as 'read' | 'write' | 'admin' | undefined;
92
+ if (mode) runtime.authPolicy.mode = mode;
93
+ if (callerLevel) runtime.authPolicy.callerLevel = callerLevel;
94
+ // Keep legacy field in sync
95
+ permissionLevel =
96
+ mode === 'enforce' ? 'strict' : mode === 'warn' ? 'moderate' : 'permissive';
92
97
  }
93
- return { level: permissionLevel };
98
+ return {
99
+ level: permissionLevel,
100
+ authPolicy: {
101
+ mode: runtime.authPolicy.mode,
102
+ callerLevel: runtime.authPolicy.callerLevel,
103
+ },
104
+ };
94
105
  },
95
106
  },
96
107
 
@@ -649,6 +660,79 @@ export function createAdminExtraOps(runtime: AgentRuntime): OpDefinition[] {
649
660
  },
650
661
  },
651
662
 
663
+ // ─── Health Registry (#176) ─────────────────────────────────────
664
+ {
665
+ name: 'admin_health_snapshot',
666
+ description:
667
+ 'Full health snapshot — overall status plus per-subsystem health (status, failure count, last error).',
668
+ auth: 'read',
669
+ handler: async () => {
670
+ return runtime.health.snapshot();
671
+ },
672
+ },
673
+ {
674
+ name: 'admin_subsystem_health',
675
+ description: 'Get health status of a specific subsystem.',
676
+ auth: 'read',
677
+ schema: z.object({
678
+ subsystem: z.string().describe('Subsystem name (e.g. "vault", "cognee", "llm")'),
679
+ }),
680
+ handler: async (params) => {
681
+ const sub = runtime.health.get(params.subsystem as string);
682
+ if (!sub) {
683
+ const snapshot = runtime.health.snapshot();
684
+ return {
685
+ error: `Unknown subsystem: ${params.subsystem}`,
686
+ available: Object.keys(snapshot.subsystems),
687
+ };
688
+ }
689
+ return sub;
690
+ },
691
+ },
692
+
693
+ // ─── Feature Flags (#173) ───────────────────────────────────────
694
+ {
695
+ name: 'admin_list_flags',
696
+ description:
697
+ 'List all feature flags with current state, description, and source (default/env/runtime).',
698
+ auth: 'read',
699
+ handler: async () => {
700
+ return runtime.flags.getAll();
701
+ },
702
+ },
703
+ {
704
+ name: 'admin_get_flag',
705
+ description: 'Get the current value of a specific feature flag.',
706
+ auth: 'read',
707
+ schema: z.object({
708
+ flag: z.string().describe('Flag name (e.g. "auth-enforcement", "cognee-sync")'),
709
+ }),
710
+ handler: async (params) => {
711
+ const flag = params.flag as string;
712
+ const all = runtime.flags.getAll();
713
+ const info = all[flag];
714
+ if (!info) {
715
+ return { error: `Unknown flag: ${flag}`, availableFlags: Object.keys(all) };
716
+ }
717
+ return { flag, ...info };
718
+ },
719
+ },
720
+ {
721
+ name: 'admin_set_flag',
722
+ description: 'Set a feature flag at runtime. Persists to flags.json.',
723
+ auth: 'admin',
724
+ schema: z.object({
725
+ flag: z.string().describe('Flag name'),
726
+ enabled: z.boolean().describe('Enable (true) or disable (false)'),
727
+ }),
728
+ handler: async (params) => {
729
+ const flag = params.flag as string;
730
+ const enabled = params.enabled as boolean;
731
+ runtime.flags.set(flag, enabled);
732
+ return { flag, enabled, persisted: true };
733
+ },
734
+ },
735
+
652
736
  // ─── Persistence ────────────────────────────────────────────────
653
737
  {
654
738
  name: 'admin_persistence_info',
@@ -681,5 +765,106 @@ export function createAdminExtraOps(runtime: AgentRuntime): OpDefinition[] {
681
765
  return { backend, tables };
682
766
  },
683
767
  },
768
+
769
+ // ─── Setup Wizard (#182) ─────────────────────────────────────────
770
+ {
771
+ name: 'admin_setup_check',
772
+ description:
773
+ 'Check agent setup status — vault health, brain vocabulary, cognee connection, LLM keys, templates.',
774
+ auth: 'read',
775
+ handler: async () => {
776
+ const checks: Record<string, { ok: boolean; detail: string }> = {};
777
+
778
+ // Vault
779
+ try {
780
+ const stats = vault.stats();
781
+ checks.vault = {
782
+ ok: true,
783
+ detail: `${stats.totalEntries} entries, ${Object.keys(stats.byDomain).length} domains`,
784
+ };
785
+ } catch (err) {
786
+ checks.vault = { ok: false, detail: err instanceof Error ? err.message : 'Failed' };
787
+ }
788
+
789
+ // Brain vocabulary
790
+ try {
791
+ const brainStats = brain.getStats();
792
+ checks.brain = {
793
+ ok: brainStats.vocabularySize > 0,
794
+ detail: `${brainStats.vocabularySize} terms`,
795
+ };
796
+ } catch {
797
+ checks.brain = { ok: false, detail: 'Brain not initialized' };
798
+ }
799
+
800
+ // Cognee
801
+ const cogneeStatus = cognee.getStatus();
802
+ checks.cognee = {
803
+ ok: cogneeStatus?.available ?? false,
804
+ detail: cogneeStatus?.available ? 'Connected' : 'Not available (optional)',
805
+ };
806
+
807
+ // LLM keys
808
+ const llmAvail = runtime.llmClient.isAvailable();
809
+ checks.llm = {
810
+ ok: llmAvail.openai || llmAvail.anthropic,
811
+ detail: `OpenAI: ${llmAvail.openai ? 'yes' : 'no'}, Anthropic: ${llmAvail.anthropic ? 'yes' : 'no'}`,
812
+ };
813
+
814
+ // Health registry
815
+ const healthSnap = runtime.health.snapshot();
816
+ checks.health = {
817
+ ok: healthSnap.overall !== 'down',
818
+ detail: `Overall: ${healthSnap.overall}`,
819
+ };
820
+
821
+ const allOk = Object.values(checks).every((c) => c.ok);
822
+
823
+ return {
824
+ ready: allOk,
825
+ checks,
826
+ agentId: runtime.config.agentId,
827
+ };
828
+ },
829
+ },
830
+ {
831
+ name: 'admin_setup_run',
832
+ description:
833
+ 'Run first-time agent setup — rebuild brain vocabulary, validate vault schema, seed defaults if empty.',
834
+ auth: 'admin',
835
+ handler: async () => {
836
+ const actions: string[] = [];
837
+
838
+ // Rebuild brain vocabulary
839
+ try {
840
+ brain.rebuildVocabulary();
841
+ actions.push('brain_vocabulary_rebuilt');
842
+ } catch {
843
+ // Non-fatal
844
+ }
845
+
846
+ // Rebuild FTS index
847
+ try {
848
+ vault.rebuildFtsIndex();
849
+ actions.push('fts_index_rebuilt');
850
+ } catch {
851
+ // Non-fatal
852
+ }
853
+
854
+ // Reload templates
855
+ try {
856
+ runtime.templateManager.load();
857
+ actions.push('templates_reloaded');
858
+ } catch {
859
+ // Non-fatal
860
+ }
861
+
862
+ return {
863
+ setup: true,
864
+ actions,
865
+ agentId: runtime.config.agentId,
866
+ };
867
+ },
868
+ },
684
869
  ];
685
870
  }
@@ -8,6 +8,8 @@
8
8
  import { z } from 'zod';
9
9
  import type { OpDefinition } from '../facades/types.js';
10
10
  import type { AgentRuntime } from './types.js';
11
+ import { detectScope } from '../vault/scope-detector.js';
12
+ import type { ScopeTier, ScopeDetectionResult } from '../vault/scope-detector.js';
11
13
 
12
14
  /**
13
15
  * Create the 4 intelligent capture operations for an agent runtime.
@@ -26,6 +28,10 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
26
28
  auth: 'write',
27
29
  schema: z.object({
28
30
  projectPath: z.string().optional().default('.'),
31
+ tier: z
32
+ .enum(['agent', 'project', 'team'])
33
+ .optional()
34
+ .describe('Manual tier override. If omitted, tier is auto-detected from content.'),
29
35
  entries: z.array(
30
36
  z.object({
31
37
  id: z.string().optional(),
@@ -49,11 +55,16 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
49
55
  example: z.string().optional(),
50
56
  counterExample: z.string().optional(),
51
57
  why: z.string().optional(),
58
+ tier: z
59
+ .enum(['agent', 'project', 'team'])
60
+ .optional()
61
+ .describe('Per-entry tier override. Falls back to top-level tier, then auto-detect.'),
52
62
  }),
53
63
  ),
54
64
  }),
55
65
  handler: async (params) => {
56
66
  const projectPath = (params.projectPath as string | undefined) ?? '.';
67
+ const topTier = params.tier as ScopeTier | undefined;
57
68
  const entries = params.entries as Array<{
58
69
  id?: string;
59
70
  type: string;
@@ -66,12 +77,19 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
66
77
  example?: string;
67
78
  counterExample?: string;
68
79
  why?: string;
80
+ tier?: ScopeTier;
69
81
  }>;
70
82
 
71
83
  let captured = 0;
72
84
  let proposed = 0;
73
85
  let rejected = 0;
74
- const results: Array<{ id: string; action: string; reason?: string }> = [];
86
+ let duplicated = 0;
87
+ const results: Array<{
88
+ id: string;
89
+ action: string;
90
+ reason?: string;
91
+ scope?: { tier: ScopeTier; confidence: string; reason: string };
92
+ }> = [];
75
93
 
76
94
  for (const entry of entries) {
77
95
  const entryId =
@@ -79,6 +97,22 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
79
97
  const mappedSeverity = mapSeverity(entry.severity);
80
98
  const mappedType = mapType(entry.type);
81
99
 
100
+ // Scope detection: per-entry tier > top-level tier > auto-detect
101
+ const resolvedTier = entry.tier ?? topTier;
102
+ let scopeResult: ScopeDetectionResult | undefined;
103
+ let finalTier: ScopeTier;
104
+ if (resolvedTier) {
105
+ finalTier = resolvedTier;
106
+ } else {
107
+ scopeResult = detectScope({
108
+ title: entry.title,
109
+ description: entry.description,
110
+ category: entry.domain,
111
+ tags: entry.tags,
112
+ });
113
+ finalTier = scopeResult.tier;
114
+ }
115
+
82
116
  try {
83
117
  const decision = governance.evaluateCapture(projectPath, {
84
118
  type: mappedType,
@@ -89,7 +123,7 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
89
123
  switch (decision.action) {
90
124
  case 'capture': {
91
125
  try {
92
- brain.enrichAndCapture({
126
+ const captureResult = brain.enrichAndCapture({
93
127
  id: entryId,
94
128
  type: mappedType as 'pattern' | 'anti-pattern' | 'rule' | 'playbook',
95
129
  domain: entry.domain,
@@ -101,9 +135,39 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
101
135
  example: entry.example,
102
136
  counterExample: entry.counterExample,
103
137
  why: entry.why,
138
+ tier: finalTier,
104
139
  });
105
- captured++;
106
- results.push({ id: entryId, action: 'capture' });
140
+ const scopeMeta = scopeResult
141
+ ? {
142
+ tier: scopeResult.tier,
143
+ confidence: scopeResult.confidence,
144
+ reason: scopeResult.reason,
145
+ }
146
+ : {
147
+ tier: finalTier,
148
+ confidence: 'MANUAL' as const,
149
+ reason: 'explicit override',
150
+ };
151
+ if (captureResult.blocked) {
152
+ duplicated++;
153
+ results.push({
154
+ id: captureResult.duplicate?.id ?? entryId,
155
+ action: 'duplicate',
156
+ scope: scopeMeta,
157
+ });
158
+ } else {
159
+ captured++;
160
+ const result: (typeof results)[number] = {
161
+ id: entryId,
162
+ action: 'capture',
163
+ scope: scopeMeta,
164
+ };
165
+ if (scopeResult?.confidence === 'LOW') {
166
+ result.reason =
167
+ 'Low confidence scope detection — consider reviewing tier assignment';
168
+ }
169
+ results.push(result);
170
+ }
107
171
  } catch (err) {
108
172
  rejected++;
109
173
  results.push({
@@ -163,7 +227,7 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
163
227
  }
164
228
  }
165
229
 
166
- return { captured, proposed, rejected, results };
230
+ return { captured, proposed, rejected, duplicated, results };
167
231
  },
168
232
  },
169
233
 
@@ -189,6 +253,10 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
189
253
  title: z.string(),
190
254
  description: z.string(),
191
255
  tags: z.array(z.string()).optional().default([]),
256
+ tier: z
257
+ .enum(['agent', 'project', 'team'])
258
+ .optional()
259
+ .describe('Manual tier override. If omitted, tier is auto-detected from content.'),
192
260
  }),
193
261
  handler: async (params) => {
194
262
  const projectPath = (params.projectPath as string | undefined) ?? '.';
@@ -197,11 +265,29 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
197
265
  const title = params.title as string;
198
266
  const description = params.description as string;
199
267
  const tags = (params.tags as string[] | undefined) ?? [];
268
+ const manualTier = params.tier as ScopeTier | undefined;
200
269
 
201
- const id = `${domain}-${Date.now()}`;
270
+ const id = `${domain}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
202
271
  const mappedSeverity = 'info' as const;
203
272
  const mappedType = mapType(entryType);
204
273
 
274
+ // Scope detection
275
+ let scopeResult: ScopeDetectionResult | undefined;
276
+ let finalTier: ScopeTier;
277
+ if (manualTier) {
278
+ finalTier = manualTier;
279
+ } else {
280
+ scopeResult = detectScope({ title, description, category: domain, tags });
281
+ finalTier = scopeResult.tier;
282
+ }
283
+ const scopeMeta = scopeResult
284
+ ? {
285
+ tier: scopeResult.tier,
286
+ confidence: scopeResult.confidence,
287
+ reason: scopeResult.reason,
288
+ }
289
+ : { tier: finalTier, confidence: 'MANUAL' as const, reason: 'explicit override' };
290
+
205
291
  try {
206
292
  const decision = governance.evaluateCapture(projectPath, {
207
293
  type: mappedType,
@@ -212,7 +298,7 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
212
298
  switch (decision.action) {
213
299
  case 'capture': {
214
300
  try {
215
- brain.enrichAndCapture({
301
+ const captureResult = brain.enrichAndCapture({
216
302
  id,
217
303
  type: mappedType as 'pattern' | 'anti-pattern' | 'rule' | 'playbook',
218
304
  domain,
@@ -220,8 +306,27 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
220
306
  severity: mapSeverity(mappedSeverity),
221
307
  description,
222
308
  tags,
309
+ tier: finalTier,
223
310
  });
224
- return { captured: true, id, governance: { action: 'capture' as const } };
311
+ if (captureResult.blocked) {
312
+ return {
313
+ captured: false,
314
+ id: captureResult.duplicate?.id ?? id,
315
+ governance: { action: 'duplicate' as const },
316
+ scope: scopeMeta,
317
+ };
318
+ }
319
+ const result: Record<string, unknown> = {
320
+ captured: true,
321
+ id,
322
+ governance: { action: 'capture' as const },
323
+ scope: scopeMeta,
324
+ };
325
+ if (scopeResult?.confidence === 'LOW') {
326
+ result.reviewNote =
327
+ 'Low confidence scope detection — consider reviewing tier assignment';
328
+ }
329
+ return result;
225
330
  } catch (err) {
226
331
  return {
227
332
  captured: false,
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Deprecation utilities — log warnings for deprecated ops with migration paths.
3
+ *
4
+ * Follows Soleri's semver policy:
5
+ * 1. Op marked deprecated → logs warning (minor version)
6
+ * 2. Warning persists for 2+ minor versions
7
+ * 3. Op removed (next major version)
8
+ */
9
+
10
+ const warned = new Set<string>();
11
+
12
+ export interface DeprecationInfo {
13
+ /** The deprecated op/function name */
14
+ name: string;
15
+ /** Version when it was deprecated */
16
+ since: string;
17
+ /** Version when it will be removed */
18
+ removeIn?: string;
19
+ /** What to use instead */
20
+ replacement?: string;
21
+ /** Additional migration guidance */
22
+ message?: string;
23
+ }
24
+
25
+ /**
26
+ * Log a deprecation warning (once per op per process lifetime).
27
+ */
28
+ export function deprecationWarning(info: DeprecationInfo): void {
29
+ if (warned.has(info.name)) return;
30
+ warned.add(info.name);
31
+
32
+ const parts = [`[DEPRECATED] "${info.name}" is deprecated since v${info.since}.`];
33
+ if (info.replacement) parts.push(`Use "${info.replacement}" instead.`);
34
+ if (info.removeIn) parts.push(`Will be removed in v${info.removeIn}.`);
35
+ if (info.message) parts.push(info.message);
36
+
37
+ console.warn(parts.join(' '));
38
+ }
39
+
40
+ /**
41
+ * Create a deprecated op handler that wraps the real handler with a warning.
42
+ */
43
+ export function wrapDeprecated<T extends (...args: unknown[]) => unknown>(
44
+ fn: T,
45
+ info: DeprecationInfo,
46
+ ): T {
47
+ return ((...args: unknown[]) => {
48
+ deprecationWarning(info);
49
+ return fn(...args);
50
+ }) as T;
51
+ }
52
+
53
+ /**
54
+ * Clear warned set (for testing).
55
+ */
56
+ export function resetDeprecationWarnings(): void {
57
+ warned.clear();
58
+ }
@@ -59,11 +59,30 @@ export function createDomainFacade(
59
59
  limit: z.number().optional(),
60
60
  }),
61
61
  handler: async (params) => {
62
- return brain.intelligentSearch(params.query as string, {
62
+ const limit = (params.limit as number) ?? 10;
63
+ const results = await brain.intelligentSearch(params.query as string, {
63
64
  domain,
64
65
  tags: params.tags as string[] | undefined,
65
- limit: (params.limit as number) ?? 10,
66
+ limit,
66
67
  });
68
+ // Fallback: when brain returns empty, try vault FTS directly
69
+ if (results.length === 0) {
70
+ const ftsResults = vault.search(params.query as string, { domain, limit });
71
+ return ftsResults.map((r) => ({
72
+ entry: r.entry,
73
+ score: 0,
74
+ breakdown: {
75
+ semantic: 0,
76
+ vector: 0,
77
+ severity: 0,
78
+ temporalDecay: 0,
79
+ tagOverlap: 0,
80
+ domainMatch: 0,
81
+ total: 0,
82
+ },
83
+ }));
84
+ }
85
+ return results;
67
86
  },
68
87
  },
69
88
  {
@@ -8,11 +8,14 @@ import type { OpDefinition } from '../../facades/types.js';
8
8
  import type { AgentRuntime } from '../types.js';
9
9
  import { createAdminOps } from '../admin-ops.js';
10
10
  import { createAdminExtraOps } from '../admin-extra-ops.js';
11
+ import { createPluginOps } from '../plugin-ops.js';
12
+ import { createPackOps } from '../pack-ops.js';
13
+ import { createTelemetryOps } from '../telemetry-ops.js';
11
14
 
12
15
  export function createAdminFacadeOps(runtime: AgentRuntime): OpDefinition[] {
13
16
  const { llmClient, keyPool } = runtime;
14
17
 
15
- return [
18
+ const ops: OpDefinition[] = [
16
19
  // ─── LLM (inline from core-ops.ts) ──────────────────────────
17
20
  {
18
21
  name: 'llm_rotate',
@@ -98,4 +101,16 @@ export function createAdminFacadeOps(runtime: AgentRuntime): OpDefinition[] {
98
101
  ...createAdminOps(runtime),
99
102
  ...createAdminExtraOps(runtime),
100
103
  ];
104
+
105
+ // Plugin ops must mutate the same live op array that MCP dispatch reads.
106
+ const pluginOps = createPluginOps(runtime, ops);
107
+ ops.push(...pluginOps);
108
+
109
+ // Pack ops
110
+ ops.push(...createPackOps(runtime));
111
+
112
+ // Telemetry ops
113
+ ops.push(...createTelemetryOps(runtime));
114
+
115
+ return ops;
101
116
  }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Agency facade — proactive file watching, pattern surfacing, warning detection.
3
+ */
4
+
5
+ import { z } from 'zod';
6
+ import type { OpDefinition } from '../../facades/types.js';
7
+ import type { AgentRuntime } from '../types.js';
8
+
9
+ export function createAgencyFacadeOps(runtime: AgentRuntime): OpDefinition[] {
10
+ const { agencyManager } = runtime;
11
+
12
+ return [
13
+ {
14
+ name: 'agency_enable',
15
+ description:
16
+ 'Enable agency mode — starts proactive file watching, pattern surfacing, and warning detection.',
17
+ auth: 'write',
18
+ schema: z.object({
19
+ projectPath: z.string().optional().describe('Project root to watch. Default: "."'),
20
+ }),
21
+ handler: async (params) => {
22
+ const projectPath = (params.projectPath as string) ?? '.';
23
+ agencyManager.enable(projectPath);
24
+ return agencyManager.getStatus();
25
+ },
26
+ },
27
+ {
28
+ name: 'agency_disable',
29
+ description: 'Disable agency mode — stops file watching and clears pending state.',
30
+ auth: 'write',
31
+ handler: async () => {
32
+ agencyManager.disable();
33
+ return agencyManager.getStatus();
34
+ },
35
+ },
36
+ {
37
+ name: 'agency_status',
38
+ description: 'Get agency mode status — enabled, watching, detectors, pending warnings.',
39
+ auth: 'read',
40
+ handler: async () => {
41
+ return agencyManager.getStatus();
42
+ },
43
+ },
44
+ {
45
+ name: 'agency_config',
46
+ description: 'Update agency configuration — watch paths, extensions, debounce, thresholds.',
47
+ auth: 'write',
48
+ schema: z.object({
49
+ watchPaths: z.array(z.string()).optional(),
50
+ ignorePatterns: z.array(z.string()).optional(),
51
+ extensions: z.array(z.string()).optional(),
52
+ debounceMs: z.number().optional(),
53
+ minPatternConfidence: z.number().optional(),
54
+ cooldownMs: z.number().optional(),
55
+ }),
56
+ handler: async (params) => {
57
+ agencyManager.updateConfig(params as Record<string, unknown>);
58
+ return agencyManager.getStatus();
59
+ },
60
+ },
61
+ {
62
+ name: 'agency_scan_file',
63
+ description: 'Manually scan a file for warnings using registered detectors.',
64
+ auth: 'read',
65
+ schema: z.object({
66
+ filePath: z.string().describe('Path to file to scan.'),
67
+ }),
68
+ handler: async (params) => {
69
+ const warnings = agencyManager.scanFile(params.filePath as string);
70
+ return { warnings, count: warnings.length };
71
+ },
72
+ },
73
+ {
74
+ name: 'agency_warnings',
75
+ description: 'Get all pending warnings from recent file scans.',
76
+ auth: 'read',
77
+ handler: async () => {
78
+ const warnings = agencyManager.getPendingWarnings();
79
+ return { warnings, count: warnings.length };
80
+ },
81
+ },
82
+ {
83
+ name: 'agency_surface_patterns',
84
+ description: 'Surface vault patterns relevant to a file change.',
85
+ auth: 'read',
86
+ schema: z.object({
87
+ filePath: z.string().describe('File path that changed.'),
88
+ }),
89
+ handler: async (params) => {
90
+ const patterns = agencyManager.surfacePatterns(params.filePath as string);
91
+ return { patterns, count: patterns.length };
92
+ },
93
+ },
94
+ {
95
+ name: 'agency_clarify',
96
+ description: 'Generate a clarification question when intent is ambiguous (low confidence).',
97
+ auth: 'read',
98
+ schema: z.object({
99
+ prompt: z.string().describe('The user prompt to analyze.'),
100
+ confidence: z.number().describe('Current intent classification confidence (0-1).'),
101
+ }),
102
+ handler: async (params) => {
103
+ const question = agencyManager.generateClarification(
104
+ params.prompt as string,
105
+ params.confidence as number,
106
+ );
107
+ return question ?? { clarificationNeeded: false };
108
+ },
109
+ },
110
+ ];
111
+ }