@cleocode/core 2026.6.13 → 2026.6.14

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 (392) hide show
  1. package/dist/admin/ops.d.ts +4 -0
  2. package/dist/admin/ops.d.ts.map +1 -1
  3. package/dist/check/index.d.ts +12 -0
  4. package/dist/check/index.d.ts.map +1 -0
  5. package/dist/check/index.js +12 -0
  6. package/dist/check/index.js.map +1 -0
  7. package/dist/check/pr-gate.d.ts +179 -0
  8. package/dist/check/pr-gate.d.ts.map +1 -0
  9. package/dist/check/pr-gate.js +366 -0
  10. package/dist/check/pr-gate.js.map +1 -0
  11. package/dist/conduit/delivery-router.d.ts +134 -0
  12. package/dist/conduit/delivery-router.d.ts.map +1 -0
  13. package/dist/conduit/delivery-router.js +0 -0
  14. package/dist/conduit/delivery-router.js.map +1 -0
  15. package/dist/conduit/index.d.ts +5 -2
  16. package/dist/conduit/index.d.ts.map +1 -1
  17. package/dist/conduit/index.js +5 -2
  18. package/dist/conduit/index.js.map +1 -1
  19. package/dist/conduit/local-tui-adapter.d.ts +89 -0
  20. package/dist/conduit/local-tui-adapter.d.ts.map +1 -0
  21. package/dist/conduit/local-tui-adapter.js +225 -0
  22. package/dist/conduit/local-tui-adapter.js.map +1 -0
  23. package/dist/config/registry.d.ts +54 -0
  24. package/dist/config/registry.d.ts.map +1 -1
  25. package/dist/config/registry.js +94 -2
  26. package/dist/config/registry.js.map +1 -1
  27. package/dist/deriver/queue-manager.d.ts +30 -2
  28. package/dist/deriver/queue-manager.d.ts.map +1 -1
  29. package/dist/deriver/queue-manager.js +54 -9
  30. package/dist/deriver/queue-manager.js.map +1 -1
  31. package/dist/dispatch/config-domain-handler.d.ts +125 -0
  32. package/dist/dispatch/config-domain-handler.d.ts.map +1 -0
  33. package/dist/dispatch/config-domain-handler.js +160 -0
  34. package/dist/dispatch/config-domain-handler.js.map +1 -0
  35. package/dist/dispatch/contracts/input-contracts.d.ts.map +1 -1
  36. package/dist/dispatch/contracts/input-contracts.js +19 -1
  37. package/dist/dispatch/contracts/input-contracts.js.map +1 -1
  38. package/dist/docs/export-document.js +3704 -680
  39. package/dist/docs/export-document.js.map +3 -3
  40. package/dist/gateway-client/client.d.ts +123 -0
  41. package/dist/gateway-client/client.d.ts.map +1 -0
  42. package/dist/gateway-client/client.js +93 -0
  43. package/dist/gateway-client/client.js.map +1 -0
  44. package/dist/gateway-client/generated/client/client.gen.d.ts +3 -0
  45. package/dist/gateway-client/generated/client/client.gen.d.ts.map +1 -0
  46. package/dist/gateway-client/generated/client/client.gen.js +217 -0
  47. package/dist/gateway-client/generated/client/client.gen.js.map +1 -0
  48. package/dist/gateway-client/generated/client/index.d.ts +11 -0
  49. package/dist/gateway-client/generated/client/index.d.ts.map +1 -0
  50. package/dist/gateway-client/generated/client/index.js +7 -0
  51. package/dist/gateway-client/generated/client/index.js.map +1 -0
  52. package/dist/gateway-client/generated/client/types.gen.d.ts +121 -0
  53. package/dist/gateway-client/generated/client/types.gen.d.ts.map +1 -0
  54. package/dist/gateway-client/generated/client/types.gen.js +3 -0
  55. package/dist/gateway-client/generated/client/types.gen.js.map +1 -0
  56. package/dist/gateway-client/generated/client/utils.gen.d.ts +38 -0
  57. package/dist/gateway-client/generated/client/utils.gen.d.ts.map +1 -0
  58. package/dist/gateway-client/generated/client/utils.gen.js +229 -0
  59. package/dist/gateway-client/generated/client/utils.gen.js.map +1 -0
  60. package/dist/gateway-client/generated/client.gen.d.ts +13 -0
  61. package/dist/gateway-client/generated/client.gen.d.ts.map +1 -0
  62. package/dist/gateway-client/generated/client.gen.js +4 -0
  63. package/dist/gateway-client/generated/client.gen.js.map +1 -0
  64. package/dist/gateway-client/generated/core/auth.gen.d.ts +26 -0
  65. package/dist/gateway-client/generated/core/auth.gen.d.ts.map +1 -0
  66. package/dist/gateway-client/generated/core/auth.gen.js +15 -0
  67. package/dist/gateway-client/generated/core/auth.gen.js.map +1 -0
  68. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts +26 -0
  69. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts.map +1 -0
  70. package/dist/gateway-client/generated/core/bodySerializer.gen.js +58 -0
  71. package/dist/gateway-client/generated/core/bodySerializer.gen.js.map +1 -0
  72. package/dist/gateway-client/generated/core/params.gen.d.ts +44 -0
  73. package/dist/gateway-client/generated/core/params.gen.d.ts.map +1 -0
  74. package/dist/gateway-client/generated/core/params.gen.js +101 -0
  75. package/dist/gateway-client/generated/core/params.gen.js.map +1 -0
  76. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts +34 -0
  77. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts.map +1 -0
  78. package/dist/gateway-client/generated/core/pathSerializer.gen.js +107 -0
  79. package/dist/gateway-client/generated/core/pathSerializer.gen.js.map +1 -0
  80. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts +19 -0
  81. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  82. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js +93 -0
  83. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js.map +1 -0
  84. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts +72 -0
  85. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  86. package/dist/gateway-client/generated/core/serverSentEvents.gen.js +133 -0
  87. package/dist/gateway-client/generated/core/serverSentEvents.gen.js.map +1 -0
  88. package/dist/gateway-client/generated/core/types.gen.d.ts +84 -0
  89. package/dist/gateway-client/generated/core/types.gen.d.ts.map +1 -0
  90. package/dist/gateway-client/generated/core/types.gen.js +3 -0
  91. package/dist/gateway-client/generated/core/types.gen.js.map +1 -0
  92. package/dist/gateway-client/generated/core/utils.gen.d.ts +20 -0
  93. package/dist/gateway-client/generated/core/utils.gen.d.ts.map +1 -0
  94. package/dist/gateway-client/generated/core/utils.gen.js +88 -0
  95. package/dist/gateway-client/generated/core/utils.gen.js.map +1 -0
  96. package/dist/gateway-client/generated/index.d.ts +3 -0
  97. package/dist/gateway-client/generated/index.d.ts.map +1 -0
  98. package/dist/gateway-client/generated/index.js +3 -0
  99. package/dist/gateway-client/generated/index.js.map +1 -0
  100. package/dist/gateway-client/generated/namespaces.gen.d.ts +512 -0
  101. package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -0
  102. package/dist/gateway-client/generated/namespaces.gen.js +521 -0
  103. package/dist/gateway-client/generated/namespaces.gen.js.map +1 -0
  104. package/dist/gateway-client/generated/sdk.gen.d.ts +1780 -0
  105. package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -0
  106. package/dist/gateway-client/generated/sdk.gen.js +3811 -0
  107. package/dist/gateway-client/generated/sdk.gen.js.map +1 -0
  108. package/dist/gateway-client/generated/types.gen.d.ts +14681 -0
  109. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -0
  110. package/dist/gateway-client/generated/types.gen.js +3 -0
  111. package/dist/gateway-client/generated/types.gen.js.map +1 -0
  112. package/dist/gateway-client/index.d.ts +27 -0
  113. package/dist/gateway-client/index.d.ts.map +1 -0
  114. package/dist/gateway-client/index.js +25 -0
  115. package/dist/gateway-client/index.js.map +1 -0
  116. package/dist/index.d.ts +10 -0
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +20 -0
  119. package/dist/index.js.map +1 -1
  120. package/dist/init.d.ts.map +1 -1
  121. package/dist/init.js +28 -0
  122. package/dist/init.js.map +1 -1
  123. package/dist/internal.d.ts +10 -1
  124. package/dist/internal.d.ts.map +1 -1
  125. package/dist/internal.js +18 -1
  126. package/dist/internal.js.map +1 -1
  127. package/dist/llm/catalog-model-resolver.d.ts +19 -0
  128. package/dist/llm/catalog-model-resolver.d.ts.map +1 -1
  129. package/dist/llm/catalog-model-resolver.js +36 -0
  130. package/dist/llm/catalog-model-resolver.js.map +1 -1
  131. package/dist/llm/catalog-resolver.d.ts +112 -0
  132. package/dist/llm/catalog-resolver.d.ts.map +1 -0
  133. package/dist/llm/catalog-resolver.js +207 -0
  134. package/dist/llm/catalog-resolver.js.map +1 -0
  135. package/dist/llm/catalog-seeder.d.ts +96 -0
  136. package/dist/llm/catalog-seeder.d.ts.map +1 -0
  137. package/dist/llm/catalog-seeder.js +189 -0
  138. package/dist/llm/catalog-seeder.js.map +1 -0
  139. package/dist/llm/cli-ops.js +5 -5
  140. package/dist/llm/cli-ops.js.map +1 -1
  141. package/dist/llm/complexity-classifier.d.ts +208 -0
  142. package/dist/llm/complexity-classifier.d.ts.map +1 -0
  143. package/dist/llm/complexity-classifier.js +359 -0
  144. package/dist/llm/complexity-classifier.js.map +1 -0
  145. package/dist/llm/credential-pool.d.ts +2 -0
  146. package/dist/llm/credential-pool.d.ts.map +1 -1
  147. package/dist/llm/credential-pool.js +5 -2
  148. package/dist/llm/credential-pool.js.map +1 -1
  149. package/dist/llm/credentials-store.d.ts +10 -14
  150. package/dist/llm/credentials-store.d.ts.map +1 -1
  151. package/dist/llm/credentials-store.js.map +1 -1
  152. package/dist/llm/entity-ops.d.ts +299 -0
  153. package/dist/llm/entity-ops.d.ts.map +1 -0
  154. package/dist/llm/entity-ops.js +441 -0
  155. package/dist/llm/entity-ops.js.map +1 -0
  156. package/dist/llm/index.d.ts +15 -0
  157. package/dist/llm/index.d.ts.map +1 -1
  158. package/dist/llm/index.js +8 -0
  159. package/dist/llm/index.js.map +1 -1
  160. package/dist/llm/llm-queue-admit.d.ts +118 -0
  161. package/dist/llm/llm-queue-admit.d.ts.map +1 -0
  162. package/dist/llm/llm-queue-admit.js +275 -0
  163. package/dist/llm/llm-queue-admit.js.map +1 -0
  164. package/dist/llm/oauth/device-code.d.ts.map +1 -1
  165. package/dist/llm/oauth/device-code.js +2 -8
  166. package/dist/llm/oauth/device-code.js.map +1 -1
  167. package/dist/llm/oauth/google-pkce.d.ts.map +1 -1
  168. package/dist/llm/oauth/google-pkce.js +2 -18
  169. package/dist/llm/oauth/google-pkce.js.map +1 -1
  170. package/dist/llm/oauth/pkce.d.ts +70 -0
  171. package/dist/llm/oauth/pkce.d.ts.map +1 -1
  172. package/dist/llm/oauth/pkce.js +106 -29
  173. package/dist/llm/oauth/pkce.js.map +1 -1
  174. package/dist/llm/onboarding/front-door.d.ts +146 -0
  175. package/dist/llm/onboarding/front-door.d.ts.map +1 -0
  176. package/dist/llm/onboarding/front-door.js +153 -0
  177. package/dist/llm/onboarding/front-door.js.map +1 -0
  178. package/dist/llm/onboarding/login-engine.d.ts +175 -0
  179. package/dist/llm/onboarding/login-engine.d.ts.map +1 -0
  180. package/dist/llm/onboarding/login-engine.js +286 -0
  181. package/dist/llm/onboarding/login-engine.js.map +1 -0
  182. package/dist/llm/pi/pi-gondolin-env.d.ts +23 -0
  183. package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -1
  184. package/dist/llm/pi/pi-gondolin-env.js +2 -2
  185. package/dist/llm/pi/pi-gondolin-env.js.map +1 -1
  186. package/dist/llm/plugin-facade.js +3853 -814
  187. package/dist/llm/plugin-facade.js.map +3 -3
  188. package/dist/llm/provider-registry/builtin/anthropic.d.ts.map +1 -1
  189. package/dist/llm/provider-registry/builtin/anthropic.js +23 -10
  190. package/dist/llm/provider-registry/builtin/anthropic.js.map +1 -1
  191. package/dist/llm/provider-registry/provider-alias.d.ts +62 -0
  192. package/dist/llm/provider-registry/provider-alias.d.ts.map +1 -0
  193. package/dist/llm/provider-registry/provider-alias.js +85 -0
  194. package/dist/llm/provider-registry/provider-alias.js.map +1 -0
  195. package/dist/llm/provider-registry/provider-defs.d.ts +45 -0
  196. package/dist/llm/provider-registry/provider-defs.d.ts.map +1 -0
  197. package/dist/llm/provider-registry/provider-defs.js +145 -0
  198. package/dist/llm/provider-registry/provider-defs.js.map +1 -0
  199. package/dist/llm/provider-registry/provider-seed.d.ts +78 -0
  200. package/dist/llm/provider-registry/provider-seed.d.ts.map +1 -0
  201. package/dist/llm/provider-registry/provider-seed.js +113 -0
  202. package/dist/llm/provider-registry/provider-seed.js.map +1 -0
  203. package/dist/llm/role-executor.d.ts.map +1 -1
  204. package/dist/llm/role-executor.js +36 -0
  205. package/dist/llm/role-executor.js.map +1 -1
  206. package/dist/llm/role-resolver.d.ts.map +1 -1
  207. package/dist/llm/role-resolver.js +9 -2
  208. package/dist/llm/role-resolver.js.map +1 -1
  209. package/dist/llm/system-resolver.d.ts.map +1 -1
  210. package/dist/llm/system-resolver.js +73 -22
  211. package/dist/llm/system-resolver.js.map +1 -1
  212. package/dist/memory/learnings.d.ts +4 -0
  213. package/dist/memory/learnings.d.ts.map +1 -1
  214. package/dist/memory/patterns.d.ts +4 -0
  215. package/dist/memory/patterns.d.ts.map +1 -1
  216. package/dist/metrics/index.d.ts +2 -0
  217. package/dist/metrics/index.d.ts.map +1 -1
  218. package/dist/metrics/index.js +1 -0
  219. package/dist/metrics/index.js.map +1 -1
  220. package/dist/orchestration/spawn.d.ts +89 -0
  221. package/dist/orchestration/spawn.d.ts.map +1 -1
  222. package/dist/orchestration/spawn.js +68 -0
  223. package/dist/orchestration/spawn.js.map +1 -1
  224. package/dist/playbooks/cantbook-profile.d.ts +96 -0
  225. package/dist/playbooks/cantbook-profile.d.ts.map +1 -0
  226. package/dist/playbooks/cantbook-profile.js +97 -0
  227. package/dist/playbooks/cantbook-profile.js.map +1 -0
  228. package/dist/playbooks/guarded-deterministic-runner.d.ts +153 -0
  229. package/dist/playbooks/guarded-deterministic-runner.d.ts.map +1 -0
  230. package/dist/playbooks/guarded-deterministic-runner.js +155 -0
  231. package/dist/playbooks/guarded-deterministic-runner.js.map +1 -0
  232. package/dist/playbooks/index.d.ts +2 -0
  233. package/dist/playbooks/index.d.ts.map +1 -1
  234. package/dist/playbooks/index.js +10 -0
  235. package/dist/playbooks/index.js.map +1 -1
  236. package/dist/playbooks/pi-runner-wiring.d.ts +75 -0
  237. package/dist/playbooks/pi-runner-wiring.d.ts.map +1 -0
  238. package/dist/playbooks/pi-runner-wiring.js +82 -0
  239. package/dist/playbooks/pi-runner-wiring.js.map +1 -0
  240. package/dist/runtime/openapi/generate-openapi.d.ts +211 -0
  241. package/dist/runtime/openapi/generate-openapi.d.ts.map +1 -0
  242. package/dist/runtime/openapi/generate-openapi.js +300 -0
  243. package/dist/runtime/openapi/generate-openapi.js.map +1 -0
  244. package/dist/runtime/openapi/index.d.ts +16 -0
  245. package/dist/runtime/openapi/index.d.ts.map +1 -0
  246. package/dist/runtime/openapi/index.js +16 -0
  247. package/dist/runtime/openapi/index.js.map +1 -0
  248. package/dist/selfimprove/scenarios/dhq-replay-find/golden.json +32 -0
  249. package/dist/selfimprove/scenarios/dhq-replay-find/scenario.json +18 -0
  250. package/dist/setup/config-json-merge.d.ts.map +1 -1
  251. package/dist/setup/config-json-merge.js +14 -0
  252. package/dist/setup/config-json-merge.js.map +1 -1
  253. package/dist/setup/index.d.ts +23 -11
  254. package/dist/setup/index.d.ts.map +1 -1
  255. package/dist/setup/index.js +25 -12
  256. package/dist/setup/index.js.map +1 -1
  257. package/dist/setup/sections/llm.d.ts +28 -1
  258. package/dist/setup/sections/llm.d.ts.map +1 -1
  259. package/dist/setup/sections/llm.js +27 -6
  260. package/dist/setup/sections/llm.js.map +1 -1
  261. package/dist/setup/sections/models-roles.d.ts +40 -0
  262. package/dist/setup/sections/models-roles.d.ts.map +1 -0
  263. package/dist/setup/sections/models-roles.js +219 -0
  264. package/dist/setup/sections/models-roles.js.map +1 -0
  265. package/dist/setup/wizard.d.ts +19 -1
  266. package/dist/setup/wizard.d.ts.map +1 -1
  267. package/dist/setup/wizard.js.map +1 -1
  268. package/dist/store/schedule-schema.d.ts +195 -0
  269. package/dist/store/schedule-schema.d.ts.map +1 -0
  270. package/dist/store/schedule-schema.js +84 -0
  271. package/dist/store/schedule-schema.js.map +1 -0
  272. package/dist/store/schedule-store.d.ts +144 -0
  273. package/dist/store/schedule-store.d.ts.map +1 -0
  274. package/dist/store/schedule-store.js +162 -0
  275. package/dist/store/schedule-store.js.map +1 -0
  276. package/dist/store/schema/attachments.d.ts +1 -1
  277. package/dist/store/schema/cleo-global/index.d.ts +3 -0
  278. package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
  279. package/dist/store/schema/cleo-global/index.js +5 -0
  280. package/dist/store/schema/cleo-global/index.js.map +1 -1
  281. package/dist/store/schema/cleo-global/models-catalog.d.ts +359 -0
  282. package/dist/store/schema/cleo-global/models-catalog.d.ts.map +1 -0
  283. package/dist/store/schema/cleo-global/models-catalog.js +114 -0
  284. package/dist/store/schema/cleo-global/models-catalog.js.map +1 -0
  285. package/dist/store/schema/cleo-global/providers.d.ts +279 -0
  286. package/dist/store/schema/cleo-global/providers.d.ts.map +1 -0
  287. package/dist/store/schema/cleo-global/providers.js +94 -0
  288. package/dist/store/schema/cleo-global/providers.js.map +1 -0
  289. package/dist/store/schema/cleo-global/services.d.ts +493 -0
  290. package/dist/store/schema/cleo-global/services.d.ts.map +1 -0
  291. package/dist/store/schema/cleo-global/services.js +200 -0
  292. package/dist/store/schema/cleo-global/services.js.map +1 -0
  293. package/dist/store/schema/cleo-project/docs.d.ts +1 -1
  294. package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
  295. package/dist/store/schema/cleo-shared/brain.d.ts +2 -2
  296. package/dist/store/schema/memory-schema.d.ts +182 -2
  297. package/dist/store/schema/memory-schema.d.ts.map +1 -1
  298. package/dist/store/schema/memory-schema.js +111 -2
  299. package/dist/store/schema/memory-schema.js.map +1 -1
  300. package/dist/store/schema/provenance/releases.d.ts +1 -1
  301. package/dist/store/service-connections-accessor.d.ts +313 -0
  302. package/dist/store/service-connections-accessor.d.ts.map +1 -0
  303. package/dist/store/service-connections-accessor.js +464 -0
  304. package/dist/store/service-connections-accessor.js.map +1 -0
  305. package/dist/store/service-host-matcher.d.ts +70 -0
  306. package/dist/store/service-host-matcher.d.ts.map +1 -0
  307. package/dist/store/service-host-matcher.js +127 -0
  308. package/dist/store/service-host-matcher.js.map +1 -0
  309. package/dist/store/service-injection.d.ts +152 -0
  310. package/dist/store/service-injection.d.ts.map +1 -0
  311. package/dist/store/service-injection.js +225 -0
  312. package/dist/store/service-injection.js.map +1 -0
  313. package/dist/store/service-oauth.d.ts +287 -0
  314. package/dist/store/service-oauth.d.ts.map +1 -0
  315. package/dist/store/service-oauth.js +524 -0
  316. package/dist/store/service-oauth.js.map +1 -0
  317. package/dist/store/service-trust-gate.d.ts +164 -0
  318. package/dist/store/service-trust-gate.d.ts.map +1 -0
  319. package/dist/store/service-trust-gate.js +122 -0
  320. package/dist/store/service-trust-gate.js.map +1 -0
  321. package/dist/store/validation-schemas.d.ts +4 -4
  322. package/dist/tasks/agent-lifecycle-lane.d.ts +175 -0
  323. package/dist/tasks/agent-lifecycle-lane.d.ts.map +1 -0
  324. package/dist/tasks/agent-lifecycle-lane.js +176 -0
  325. package/dist/tasks/agent-lifecycle-lane.js.map +1 -0
  326. package/dist/tasks/complete.d.ts +17 -0
  327. package/dist/tasks/complete.d.ts.map +1 -1
  328. package/dist/tasks/complete.js +53 -10
  329. package/dist/tasks/complete.js.map +1 -1
  330. package/dist/tasks/depends-waiver-audit.d.ts +52 -0
  331. package/dist/tasks/depends-waiver-audit.d.ts.map +1 -0
  332. package/dist/tasks/depends-waiver-audit.js +36 -0
  333. package/dist/tasks/depends-waiver-audit.js.map +1 -0
  334. package/dist/tasks/engine-wrap.d.ts +36 -2
  335. package/dist/tasks/engine-wrap.d.ts.map +1 -1
  336. package/dist/tasks/engine-wrap.js +44 -2
  337. package/dist/tasks/engine-wrap.js.map +1 -1
  338. package/dist/tasks/index.d.ts +1 -0
  339. package/dist/tasks/index.d.ts.map +1 -1
  340. package/dist/tasks/index.js +1 -0
  341. package/dist/tasks/index.js.map +1 -1
  342. package/dist/tasks/ops.d.ts +3 -0
  343. package/dist/tasks/ops.d.ts.map +1 -1
  344. package/dist/tasks/task-ops.d.ts +1 -1
  345. package/dist/tasks/task-ops.d.ts.map +1 -1
  346. package/dist/tasks/task-ops.js +3 -1
  347. package/dist/tasks/task-ops.js.map +1 -1
  348. package/dist/tasks/task-reparent.d.ts +90 -0
  349. package/dist/tasks/task-reparent.d.ts.map +1 -1
  350. package/dist/tasks/task-reparent.js +171 -0
  351. package/dist/tasks/task-reparent.js.map +1 -1
  352. package/dist/tools/builtin-agent-tools.d.ts.map +1 -1
  353. package/dist/tools/builtin-agent-tools.js +41 -0
  354. package/dist/tools/builtin-agent-tools.js.map +1 -1
  355. package/dist/tools/exec-code-agent-tool.d.ts +179 -0
  356. package/dist/tools/exec-code-agent-tool.d.ts.map +1 -0
  357. package/dist/tools/exec-code-agent-tool.js +239 -0
  358. package/dist/tools/exec-code-agent-tool.js.map +1 -0
  359. package/dist/tools/index.d.ts +6 -0
  360. package/dist/tools/index.d.ts.map +1 -1
  361. package/dist/tools/index.js +15 -0
  362. package/dist/tools/index.js.map +1 -1
  363. package/dist/tools/mcp-agent-tool.d.ts +189 -0
  364. package/dist/tools/mcp-agent-tool.d.ts.map +1 -0
  365. package/dist/tools/mcp-agent-tool.js +243 -0
  366. package/dist/tools/mcp-agent-tool.js.map +1 -0
  367. package/dist/tools/media-agent-tools.d.ts +105 -0
  368. package/dist/tools/media-agent-tools.d.ts.map +1 -0
  369. package/dist/tools/media-agent-tools.js +255 -0
  370. package/dist/tools/media-agent-tools.js.map +1 -0
  371. package/dist/tools/memory-agent-tools.d.ts +99 -0
  372. package/dist/tools/memory-agent-tools.d.ts.map +1 -0
  373. package/dist/tools/memory-agent-tools.js +190 -0
  374. package/dist/tools/memory-agent-tools.js.map +1 -0
  375. package/dist/tools/schedule-agent-tools.d.ts +151 -0
  376. package/dist/tools/schedule-agent-tools.d.ts.map +1 -0
  377. package/dist/tools/schedule-agent-tools.js +238 -0
  378. package/dist/tools/schedule-agent-tools.js.map +1 -0
  379. package/dist/tools/skill-agent-tool.d.ts +108 -0
  380. package/dist/tools/skill-agent-tool.d.ts.map +1 -0
  381. package/dist/tools/skill-agent-tool.js +135 -0
  382. package/dist/tools/skill-agent-tool.js.map +1 -0
  383. package/dist/validation/engine-ops.d.ts.map +1 -1
  384. package/dist/validation/engine-ops.js +17 -1
  385. package/dist/validation/engine-ops.js.map +1 -1
  386. package/migrations/drizzle-brain/20260610000001_t10405-bitemporal-network-columns/migration.sql +71 -0
  387. package/migrations/drizzle-cleo-global/20260609000000_t11937-service-vault/migration.sql +93 -0
  388. package/migrations/drizzle-cleo-global/20260609010000_t11733-models-catalog/migration.sql +65 -0
  389. package/migrations/drizzle-cleo-global/20260609020000_t11703-providers/migration.sql +52 -0
  390. package/migrations/drizzle-cleo-global/20260610000000_t11962-schedules/migration.sql +48 -0
  391. package/migrations/drizzle-cleo-project/20260610000000_t11962-schedules/migration.sql +48 -0
  392. package/package.json +23 -13
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Vision / media agent-tool family — `vision_analyze` / `image_generate` /
3
+ * `text_to_speech` (T11951 · M7 · epic T11456 · SG-TOOLS).
4
+ *
5
+ * The FIRST occupants of the previously-empty `media` toolset. Every model /
6
+ * multimodal call routes THROUGH the single E9 chokepoint
7
+ * ({@link import('../llm/system-resolver.js')}'s `resolveLLMForSystem` →
8
+ * {@link import('../llm/model-runner.js')}'s `ModelRunner`), EXACTLY like
9
+ * `browser_vision` ({@link ./web-agent-tools.js}). There is NO raw provider client,
10
+ * NO new transport, NO API-key read at this call-site — the plaintext credential is
11
+ * materialized from the sealed handle ONLY at the wire inside `ModelRunner.build`
12
+ * (Gate-13 stays green).
13
+ *
14
+ * - **`vision_analyze`** — read a local image + a prompt, send them as a single
15
+ * multimodal user turn through the chokepoint, return the model's analysis.
16
+ * - **`image_generate`** — send an image prompt through the chokepoint; returns
17
+ * the model's response (text/asset-ref it emits). When the resolved model
18
+ * cannot generate an image the chokepoint degrades — the tool surfaces an
19
+ * `unsupported` flag rather than constructing a bespoke image client.
20
+ * - **`text_to_speech`** — send text through the chokepoint for narration intent;
21
+ * same degradation contract when the modality is unsupported.
22
+ *
23
+ * ## Availability (AC3 — mirrors `browser_vision`)
24
+ *
25
+ * Hidden unless outbound egress is permitted AND the host advertises a multimodal
26
+ * model (`networkEgressAllowed !== false && capabilities.multimodal === true`).
27
+ * Registered-but-hidden so core runs credential-OFF / egress-OFF and the catalog
28
+ * stays stable. (The capability flag is the host's "a multimodal model is
29
+ * resolvable" promise — availability is a SYNC predicate, so the actual resolution
30
+ * happens at `execute` time with graceful degradation when no credential resolves.)
31
+ *
32
+ * @epic T11456
33
+ * @task T11951
34
+ * @see ./web-agent-tools.js — `browser_vision`, the E9-routed multimodal pattern mirrored here
35
+ * @see ../llm/system-resolver.js — `resolveLLMForSystem` (the E9 chokepoint)
36
+ * @see ../llm/model-runner.js — `ModelRunner` (the single SSoT wire builder)
37
+ */
38
+ import { readFile } from 'node:fs/promises';
39
+ import { extname } from 'node:path';
40
+ import { z } from 'zod';
41
+ import { getLogger } from '../logger.js';
42
+ const log = getLogger('tool-media-agent');
43
+ /**
44
+ * Available only when outbound egress is permitted AND the host advertises a
45
+ * multimodal model. Mirrors `browser_vision`'s availability: registered-but-hidden
46
+ * (so the `media` catalog is stable) until a context advertises both
47
+ * `networkEgressAllowed !== false` and `capabilities.multimodal === true`.
48
+ */
49
+ export const multimodalAvailable = (ctx) => ctx.networkEgressAllowed !== false && ctx.capabilities?.multimodal === true;
50
+ /** Default {@link ImageReader} — a local `fs` read + extension-based MIME sniff. */
51
+ const defaultImageReader = async (path) => {
52
+ const bytes = await readFile(path);
53
+ return { base64: bytes.toString('base64'), mediaType: mediaTypeForPath(path) };
54
+ };
55
+ /** Map a file extension to its image MIME type (defaults to `image/png`). */
56
+ function mediaTypeForPath(path) {
57
+ switch (extname(path).toLowerCase()) {
58
+ case '.jpg':
59
+ case '.jpeg':
60
+ return 'image/jpeg';
61
+ case '.webp':
62
+ return 'image/webp';
63
+ case '.gif':
64
+ return 'image/gif';
65
+ default:
66
+ return 'image/png';
67
+ }
68
+ }
69
+ /**
70
+ * Resolve an LLM through the SINGLE E9 chokepoint and send `messages` as one turn
71
+ * via the SSoT {@link ModelRunner}. The sealed credential is materialized ONLY at
72
+ * the wire (inside `ModelRunner.build`); there is NO raw provider/transport
73
+ * construction here (Gate-13). Returns `aiUnavailable: true` when no credential
74
+ * resolves — graceful degradation, not an error (mirrors `runBrowserVision`).
75
+ *
76
+ * @param messages - The provider-neutral turn (text and/or image blocks).
77
+ * @param projectRoot - Project root for the resolver.
78
+ * @returns The {@link MediaModelResult}.
79
+ */
80
+ async function runChokepointModel(messages, projectRoot) {
81
+ // E9 resolution chokepoint — the ONLY route to an LLM credential. Never throws.
82
+ const { resolveLLMForSystem } = await import('../llm/system-resolver.js');
83
+ const resolved = await resolveLLMForSystem('task-executor', {
84
+ ...(projectRoot !== undefined ? { projectRoot } : {}),
85
+ });
86
+ if (!resolved.sealedCredential) {
87
+ return { ok: false, aiUnavailable: true };
88
+ }
89
+ try {
90
+ // Build the wire surfaces via the single SSoT ModelRunner (Gate-13: no raw
91
+ // transport / provider construction here). The token is materialized from the
92
+ // sealed handle inside ModelRunner only.
93
+ const { ModelRunner } = await import('../llm/model-runner.js');
94
+ const apiKey = (await resolved.sealedCredential.fetch()).value;
95
+ const built = await ModelRunner.build({
96
+ provider: resolved.provider,
97
+ model: resolved.model,
98
+ credential: resolved.credential
99
+ ? {
100
+ provider: resolved.credential.provider,
101
+ apiKey,
102
+ source: resolved.credential.source,
103
+ authType: resolved.credential.authType,
104
+ }
105
+ : null,
106
+ source: resolved.source,
107
+ ...(resolved.credentialLabel !== undefined
108
+ ? { credentialLabel: resolved.credentialLabel }
109
+ : {}),
110
+ apiMode: resolved.apiMode,
111
+ baseUrl: resolved.baseUrl,
112
+ authType: resolved.authType,
113
+ ...(resolved.capabilities !== undefined ? { capabilities: resolved.capabilities } : {}),
114
+ });
115
+ const response = await built.session.send(messages);
116
+ return { ok: true, content: response.content ?? undefined, model: resolved.model };
117
+ }
118
+ catch (err) {
119
+ log.warn({ err }, 'media tool: chokepoint model call failed — returning unavailable');
120
+ return { ok: false, model: resolved.model, aiUnavailable: true };
121
+ }
122
+ }
123
+ /**
124
+ * Register the vision / media agent-tool family into `registry`. Pure
125
+ * registration — no model is resolved, no credential is read, no file is opened
126
+ * here; all of that happens later inside each tool's `execute` through the E9
127
+ * chokepoint (and the injected image reader). Import-time side-effect-free.
128
+ *
129
+ * @param registry - The registry to populate.
130
+ * @param options - Injectable image reader / project root (for testing).
131
+ */
132
+ export function registerMediaAgentTools(registry, options = {}) {
133
+ const readImage = options.readImage ?? defaultImageReader;
134
+ const projectRoot = options.projectRoot;
135
+ // --- vision_analyze (image + prompt → analysis, via the E9 chokepoint) ----
136
+ registry.register({
137
+ name: 'vision_analyze',
138
+ // 'shell' — the call captures an external model response (its strongest surface).
139
+ class: 'shell',
140
+ description: 'Analyse a local image with a vision model: reads the image and sends it plus a ' +
141
+ 'prompt as a multimodal turn through the resolveLLMForSystem chokepoint. Returns ' +
142
+ 'the model analysis, or aiUnavailable when no credential resolves.',
143
+ toolset: 'media',
144
+ stateless: true,
145
+ available: multimodalAvailable,
146
+ parameters: z.object({
147
+ imagePath: z.string().describe('Absolute path to the image file to analyse.'),
148
+ prompt: z.string().describe('Question / instruction for the vision model about the image.'),
149
+ }),
150
+ execute: async (rawArgs) => {
151
+ const imagePath = String(rawArgs.imagePath);
152
+ const prompt = String(rawArgs.prompt);
153
+ let image;
154
+ try {
155
+ image = await readImage(imagePath);
156
+ }
157
+ catch (err) {
158
+ return {
159
+ ok: false,
160
+ error: {
161
+ code: 'E_IMAGE_READ_FAILED',
162
+ message: `could not read image at "${imagePath}": ${err instanceof Error ? err.message : String(err)}`,
163
+ },
164
+ };
165
+ }
166
+ const messages = [
167
+ {
168
+ role: 'user',
169
+ content: [
170
+ { type: 'text', text: prompt },
171
+ {
172
+ type: 'image',
173
+ source: { type: 'base64', data: image.base64, mediaType: image.mediaType },
174
+ },
175
+ ],
176
+ },
177
+ ];
178
+ return runChokepointModel(messages, projectRoot);
179
+ },
180
+ });
181
+ // --- image_generate (prompt → image, via the E9 chokepoint) --------------
182
+ registry.register({
183
+ name: 'image_generate',
184
+ class: 'shell',
185
+ description: 'Generate an image from a text prompt by routing the request through the ' +
186
+ 'resolveLLMForSystem chokepoint. When the resolved model cannot synthesize an image, ' +
187
+ 'reports unsupported rather than constructing a bespoke image client.',
188
+ toolset: 'media',
189
+ stateless: true,
190
+ available: multimodalAvailable,
191
+ parameters: z.object({
192
+ prompt: z.string().describe('A text description of the image to generate.'),
193
+ }),
194
+ execute: async (rawArgs) => {
195
+ const prompt = String(rawArgs.prompt);
196
+ const messages = [
197
+ {
198
+ role: 'user',
199
+ content: [
200
+ {
201
+ type: 'text',
202
+ text: `Generate an image for the following description. If you cannot produce an image, say so explicitly.\n\n${prompt}`,
203
+ },
204
+ ],
205
+ },
206
+ ];
207
+ const result = await runChokepointModel(messages, projectRoot);
208
+ // The chat chokepoint does not emit raw image bytes; surface the model's
209
+ // response and flag that true synthesis is not served by this path.
210
+ return { ...result, unsupported: result.ok ? true : result.unsupported };
211
+ },
212
+ });
213
+ // --- text_to_speech (text → narration intent, via the E9 chokepoint) -----
214
+ registry.register({
215
+ name: 'text_to_speech',
216
+ class: 'shell',
217
+ description: 'Convert text to speech by routing the request through the resolveLLMForSystem ' +
218
+ 'chokepoint. When the resolved model cannot synthesize audio, reports unsupported ' +
219
+ 'rather than constructing a bespoke TTS client.',
220
+ toolset: 'media',
221
+ stateless: true,
222
+ available: multimodalAvailable,
223
+ parameters: z.object({
224
+ text: z.string().describe('The text to narrate as speech.'),
225
+ }),
226
+ execute: async (rawArgs) => {
227
+ const text = String(rawArgs.text);
228
+ const messages = [
229
+ {
230
+ role: 'user',
231
+ content: [
232
+ {
233
+ type: 'text',
234
+ text: `Produce speech audio for the following text. If you cannot produce audio, say so explicitly.\n\n${text}`,
235
+ },
236
+ ],
237
+ },
238
+ ];
239
+ const result = await runChokepointModel(messages, projectRoot);
240
+ return { ...result, unsupported: result.ok ? true : result.unsupported };
241
+ },
242
+ });
243
+ }
244
+ /**
245
+ * Self-registration marker (AC1) — the identifier the
246
+ * {@link AgentToolRegistry.discover} bounded source scan greps for. Aliases
247
+ * {@link registerMediaAgentTools} so a future scan-dir discovery (or the built-in
248
+ * aggregator) can call it uniformly with the other agent-tool modules.
249
+ *
250
+ * @param registry - The registry to populate.
251
+ */
252
+ export function registerAgentTools(registry) {
253
+ registerMediaAgentTools(registry);
254
+ }
255
+ //# sourceMappingURL=media-agent-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-agent-tools.js","sourceRoot":"","sources":["../../src/tools/media-agent-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Memory (BRAIN) agent-tool family — `memory_search` / `memory_observe` /
3
+ * `memory_fetch` / `memory_timeline` (T11947 · M7 · epic T11456 · SG-TOOLS).
4
+ *
5
+ * Surfaces the EXISTING BRAIN cognitive-memory operations to the agent loop as
6
+ * `agent`-toolset tools, mirroring the `cleo memory find|observe|fetch|timeline`
7
+ * CLI verbs. It adds NO new store, NO new SQL, and NO new schema: each tool
8
+ * DELEGATES to the established memory ops in
9
+ * {@link import('../memory/engine-compat.js')}
10
+ * ({@link memoryFind} / {@link memoryObserve} / {@link memoryFetch} /
11
+ * {@link memoryTimeline}), which themselves route through the BRAIN retrieval
12
+ * accessors + the store chokepoint. The agent loop never re-implements brain
13
+ * retrieval — it reuses the SAME path the CLI and the orchestrator use.
14
+ *
15
+ * ## Why a seam, not a hardcoded import (AC5 + Gate-11)
16
+ *
17
+ * The four memory ops are injected through the {@link MemoryOps} seam, defaulting
18
+ * to the real `engine-compat` functions. This lets the unit test inject a FAKE
19
+ * Brain surface and assert delegation + schema validation WITHOUT opening a real
20
+ * `brain.db`. Production binds the real ops. The tools are DEFINED here under
21
+ * `packages/core/src/tools` and CONSUME the memory subsystem — they construct no
22
+ * new atomic primitive (Gate-11).
23
+ *
24
+ * ## Availability (AC4)
25
+ *
26
+ * BRAIN read/write is a LOCAL SQLite operation through the store chokepoint — no
27
+ * credential, no network, no daemon. Every memory tool is therefore
28
+ * {@link ALWAYS_AVAILABLE}: it works daemon-OFF and credential-OFF.
29
+ *
30
+ * ## Gate-13
31
+ *
32
+ * No model/transport/provider client is constructed here — BRAIN search is a
33
+ * local FTS/SQLite query, not an LLM call. There is no chokepoint concern.
34
+ *
35
+ * @epic T11456
36
+ * @task T11947
37
+ * @see ../memory/engine-compat.js — the memory ops this family delegates to
38
+ * @see ./exec-code-agent-tool.js — the injectable-seam + self-registering-marker pattern mirrored here
39
+ */
40
+ import type { EngineResult } from '../engine-result.js';
41
+ import { type AgentToolRegistry } from './agent-registry.js';
42
+ /**
43
+ * The BRAIN memory operations the family delegates to. Each member has the SAME
44
+ * signature as the corresponding `engine-compat` function — `(params, root?) →
45
+ * Promise<EngineResult>`. Injectable so the unit test can supply a fake Brain
46
+ * surface; defaults to the real ops in production.
47
+ */
48
+ export interface MemoryOps {
49
+ /** Token-efficient compact search (→ `cleo memory find`). */
50
+ readonly find: (params: {
51
+ query: string;
52
+ limit?: number;
53
+ }, projectRoot?: string) => Promise<EngineResult>;
54
+ /** Append an observation (→ `cleo memory observe`). */
55
+ readonly observe: (params: {
56
+ text: string;
57
+ title?: string;
58
+ }, projectRoot?: string) => Promise<EngineResult>;
59
+ /** Batch fetch entries by ID (→ `cleo memory fetch`). */
60
+ readonly fetch: (params: {
61
+ ids: string[];
62
+ }, projectRoot?: string) => Promise<EngineResult>;
63
+ /** Chronological context around an anchor (→ `cleo memory timeline`). */
64
+ readonly timeline: (params: {
65
+ anchor: string;
66
+ depthBefore?: number;
67
+ depthAfter?: number;
68
+ }, projectRoot?: string) => Promise<EngineResult>;
69
+ }
70
+ /** Options for {@link registerMemoryAgentTools} — all injectable for testing. */
71
+ export interface MemoryAgentToolOptions {
72
+ /** The memory ops seam. Defaults to the real `engine-compat` functions. */
73
+ readonly memory?: MemoryOps;
74
+ /**
75
+ * The project root threaded into every op (defaults to the resolved project
76
+ * root via {@link resolveOrCwd} — never a bare `process.cwd()` in core, T9584).
77
+ */
78
+ readonly projectRoot?: string;
79
+ }
80
+ /**
81
+ * Register the memory (BRAIN) agent-tool family into `registry`. Pure
82
+ * registration — no `brain.db` is opened, no query runs here; all of that happens
83
+ * later inside each tool's `execute` through the injected (or default) ops.
84
+ * Import-time side-effect-free.
85
+ *
86
+ * @param registry - The registry to populate.
87
+ * @param options - Injectable memory ops / project root (for testing).
88
+ */
89
+ export declare function registerMemoryAgentTools(registry: AgentToolRegistry, options?: MemoryAgentToolOptions): void;
90
+ /**
91
+ * Self-registration marker (AC1) — the identifier the
92
+ * {@link AgentToolRegistry.discover} bounded source scan greps for. Aliases
93
+ * {@link registerMemoryAgentTools} so a future scan-dir discovery (or the
94
+ * built-in aggregator) can call it uniformly with the other agent-tool modules.
95
+ *
96
+ * @param registry - The registry to populate.
97
+ */
98
+ export declare function registerAgentTools(registry: AgentToolRegistry): void;
99
+ //# sourceMappingURL=memory-agent-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-agent-tools.d.ts","sourceRoot":"","sources":["../../src/tools/memory-agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,OAAO,EAAE,KAAK,iBAAiB,EAAoB,MAAM,qBAAqB,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,CACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACzC,WAAW,CAAC,EAAE,MAAM,KACjB,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,CAChB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACxC,WAAW,CAAC,EAAE,MAAM,KACjB,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3F,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,CACjB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EACrE,WAAW,CAAC,EAAE,MAAM,KACjB,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5B;AAUD,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAgBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,sBAA2B,GACnC,IAAI,CAgHN;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAEpE"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Memory (BRAIN) agent-tool family — `memory_search` / `memory_observe` /
3
+ * `memory_fetch` / `memory_timeline` (T11947 · M7 · epic T11456 · SG-TOOLS).
4
+ *
5
+ * Surfaces the EXISTING BRAIN cognitive-memory operations to the agent loop as
6
+ * `agent`-toolset tools, mirroring the `cleo memory find|observe|fetch|timeline`
7
+ * CLI verbs. It adds NO new store, NO new SQL, and NO new schema: each tool
8
+ * DELEGATES to the established memory ops in
9
+ * {@link import('../memory/engine-compat.js')}
10
+ * ({@link memoryFind} / {@link memoryObserve} / {@link memoryFetch} /
11
+ * {@link memoryTimeline}), which themselves route through the BRAIN retrieval
12
+ * accessors + the store chokepoint. The agent loop never re-implements brain
13
+ * retrieval — it reuses the SAME path the CLI and the orchestrator use.
14
+ *
15
+ * ## Why a seam, not a hardcoded import (AC5 + Gate-11)
16
+ *
17
+ * The four memory ops are injected through the {@link MemoryOps} seam, defaulting
18
+ * to the real `engine-compat` functions. This lets the unit test inject a FAKE
19
+ * Brain surface and assert delegation + schema validation WITHOUT opening a real
20
+ * `brain.db`. Production binds the real ops. The tools are DEFINED here under
21
+ * `packages/core/src/tools` and CONSUME the memory subsystem — they construct no
22
+ * new atomic primitive (Gate-11).
23
+ *
24
+ * ## Availability (AC4)
25
+ *
26
+ * BRAIN read/write is a LOCAL SQLite operation through the store chokepoint — no
27
+ * credential, no network, no daemon. Every memory tool is therefore
28
+ * {@link ALWAYS_AVAILABLE}: it works daemon-OFF and credential-OFF.
29
+ *
30
+ * ## Gate-13
31
+ *
32
+ * No model/transport/provider client is constructed here — BRAIN search is a
33
+ * local FTS/SQLite query, not an LLM call. There is no chokepoint concern.
34
+ *
35
+ * @epic T11456
36
+ * @task T11947
37
+ * @see ../memory/engine-compat.js — the memory ops this family delegates to
38
+ * @see ./exec-code-agent-tool.js — the injectable-seam + self-registering-marker pattern mirrored here
39
+ */
40
+ import { z } from 'zod';
41
+ import { memoryFetch as realMemoryFetch, memoryFind as realMemoryFind, memoryObserve as realMemoryObserve, memoryTimeline as realMemoryTimeline, } from '../memory/engine-compat.js';
42
+ import { resolveOrCwd } from '../paths.js';
43
+ import { ALWAYS_AVAILABLE } from './agent-registry.js';
44
+ /** The real BRAIN memory ops — the production default for {@link MemoryOps}. */
45
+ const REAL_MEMORY_OPS = {
46
+ find: realMemoryFind,
47
+ observe: realMemoryObserve,
48
+ fetch: realMemoryFetch,
49
+ timeline: realMemoryTimeline,
50
+ };
51
+ /**
52
+ * Coerce an {@link EngineResult} into the opaque value the loop serialises back
53
+ * to the model. On success the `data` payload is returned as-is; on failure a
54
+ * stable `{ ok: false, error }` shape is returned (the op never throws for an
55
+ * expected failure — it returns a typed `EngineFailure`).
56
+ *
57
+ * @param result - The op's EngineResult.
58
+ * @returns The success data, or a typed failure object.
59
+ */
60
+ function unwrapEngineResult(result) {
61
+ if (result.success)
62
+ return result.data;
63
+ return { ok: false, error: result.error };
64
+ }
65
+ /**
66
+ * Register the memory (BRAIN) agent-tool family into `registry`. Pure
67
+ * registration — no `brain.db` is opened, no query runs here; all of that happens
68
+ * later inside each tool's `execute` through the injected (or default) ops.
69
+ * Import-time side-effect-free.
70
+ *
71
+ * @param registry - The registry to populate.
72
+ * @param options - Injectable memory ops / project root (for testing).
73
+ */
74
+ export function registerMemoryAgentTools(registry, options = {}) {
75
+ const memory = options.memory ?? REAL_MEMORY_OPS;
76
+ const projectRoot = resolveOrCwd(options.projectRoot);
77
+ // --- memory_search (→ memoryFind) ----------------------------------------
78
+ registry.register({
79
+ name: 'memory_search',
80
+ // 'search' — a local read-query of the BRAIN store (no side effect beyond reading).
81
+ class: 'search',
82
+ description: 'Search BRAIN cognitive memory (decisions / patterns / learnings / observations) ' +
83
+ 'for entries matching a query, returning compact hits (IDs + titles). Use memory_fetch ' +
84
+ 'to retrieve full details for a hit.',
85
+ toolset: 'agent',
86
+ stateless: true,
87
+ available: ALWAYS_AVAILABLE,
88
+ parameters: z.object({
89
+ query: z.string().describe('Free-text search query.'),
90
+ limit: z
91
+ .number()
92
+ .int()
93
+ .positive()
94
+ .optional()
95
+ .describe('Maximum number of compact hits to return.'),
96
+ }),
97
+ execute: async (rawArgs) => {
98
+ const query = String(rawArgs.query);
99
+ const limit = typeof rawArgs.limit === 'number' ? rawArgs.limit : undefined;
100
+ const result = await memory.find({ query, limit }, projectRoot);
101
+ return unwrapEngineResult(result);
102
+ },
103
+ });
104
+ // --- memory_observe (→ memoryObserve) ------------------------------------
105
+ registry.register({
106
+ name: 'memory_observe',
107
+ // 'fs' — persists a row to the local BRAIN store (its strongest side-effect surface).
108
+ class: 'fs',
109
+ description: 'Append a new observation to BRAIN memory (an O-prefixed entry). Use after a ' +
110
+ 'non-trivial step to record a learning or decision for future sessions.',
111
+ toolset: 'agent',
112
+ stateless: false,
113
+ available: ALWAYS_AVAILABLE,
114
+ parameters: z.object({
115
+ text: z.string().describe('The observation body to store.'),
116
+ title: z.string().optional().describe('A short title for the observation.'),
117
+ }),
118
+ execute: async (rawArgs) => {
119
+ const text = String(rawArgs.text);
120
+ const title = rawArgs.title === undefined ? undefined : String(rawArgs.title);
121
+ const result = await memory.observe({ text, title }, projectRoot);
122
+ return unwrapEngineResult(result);
123
+ },
124
+ });
125
+ // --- memory_fetch (→ memoryFetch) ----------------------------------------
126
+ registry.register({
127
+ name: 'memory_fetch',
128
+ class: 'search',
129
+ description: 'Fetch full details for one or more BRAIN entries by ID (e.g. O-abc123, D-def456). ' +
130
+ 'Use after memory_search to expand a compact hit.',
131
+ toolset: 'agent',
132
+ stateless: true,
133
+ available: ALWAYS_AVAILABLE,
134
+ parameters: z.object({
135
+ ids: z
136
+ .array(z.string())
137
+ .min(1)
138
+ .describe('One or more BRAIN entry IDs to fetch (e.g. ["O-abc123"]).'),
139
+ }),
140
+ execute: async (rawArgs) => {
141
+ const ids = Array.isArray(rawArgs.ids) ? rawArgs.ids.map(String) : [];
142
+ const result = await memory.fetch({ ids }, projectRoot);
143
+ return unwrapEngineResult(result);
144
+ },
145
+ });
146
+ // --- memory_timeline (→ memoryTimeline) ----------------------------------
147
+ registry.register({
148
+ name: 'memory_timeline',
149
+ class: 'search',
150
+ description: 'Retrieve chronological context around a BRAIN entry — the entries recorded before ' +
151
+ 'and after a given anchor ID — to understand the sequence of observations and decisions.',
152
+ toolset: 'agent',
153
+ stateless: true,
154
+ available: ALWAYS_AVAILABLE,
155
+ parameters: z.object({
156
+ anchor: z.string().describe('The BRAIN entry ID to anchor the timeline window on.'),
157
+ depthBefore: z
158
+ .number()
159
+ .int()
160
+ .nonnegative()
161
+ .optional()
162
+ .describe('How many entries before the anchor to include.'),
163
+ depthAfter: z
164
+ .number()
165
+ .int()
166
+ .nonnegative()
167
+ .optional()
168
+ .describe('How many entries after the anchor to include.'),
169
+ }),
170
+ execute: async (rawArgs) => {
171
+ const anchor = String(rawArgs.anchor);
172
+ const depthBefore = typeof rawArgs.depthBefore === 'number' ? rawArgs.depthBefore : undefined;
173
+ const depthAfter = typeof rawArgs.depthAfter === 'number' ? rawArgs.depthAfter : undefined;
174
+ const result = await memory.timeline({ anchor, depthBefore, depthAfter }, projectRoot);
175
+ return unwrapEngineResult(result);
176
+ },
177
+ });
178
+ }
179
+ /**
180
+ * Self-registration marker (AC1) — the identifier the
181
+ * {@link AgentToolRegistry.discover} bounded source scan greps for. Aliases
182
+ * {@link registerMemoryAgentTools} so a future scan-dir discovery (or the
183
+ * built-in aggregator) can call it uniformly with the other agent-tool modules.
184
+ *
185
+ * @param registry - The registry to populate.
186
+ */
187
+ export function registerAgentTools(registry) {
188
+ registerMemoryAgentTools(registry);
189
+ }
190
+ //# sourceMappingURL=memory-agent-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-agent-tools.js","sourceRoot":"","sources":["../../src/tools/memory-agent-tools.ts"],"names":[],"mappings":"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"}