@cleocode/core 2026.6.13 → 2026.6.15

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 (485) 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 +183 -0
  8. package/dist/check/pr-gate.d.ts.map +1 -0
  9. package/dist/check/pr-gate.js +348 -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/config-repair.d.ts +70 -0
  24. package/dist/config/config-repair.d.ts.map +1 -0
  25. package/dist/config/config-repair.js +248 -0
  26. package/dist/config/config-repair.js.map +1 -0
  27. package/dist/config/registry.d.ts +54 -0
  28. package/dist/config/registry.d.ts.map +1 -1
  29. package/dist/config/registry.js +92 -0
  30. package/dist/config/registry.js.map +1 -1
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +11 -10
  33. package/dist/config.js.map +1 -1
  34. package/dist/deriver/queue-manager.d.ts +30 -2
  35. package/dist/deriver/queue-manager.d.ts.map +1 -1
  36. package/dist/deriver/queue-manager.js +54 -9
  37. package/dist/deriver/queue-manager.js.map +1 -1
  38. package/dist/dispatch/config-domain-handler.d.ts +125 -0
  39. package/dist/dispatch/config-domain-handler.d.ts.map +1 -0
  40. package/dist/dispatch/config-domain-handler.js +160 -0
  41. package/dist/dispatch/config-domain-handler.js.map +1 -0
  42. package/dist/dispatch/contracts/input-contracts.d.ts.map +1 -1
  43. package/dist/dispatch/contracts/input-contracts.js +19 -1
  44. package/dist/dispatch/contracts/input-contracts.js.map +1 -1
  45. package/dist/docs/export-document.js +3721 -696
  46. package/dist/docs/export-document.js.map +3 -3
  47. package/dist/gateway-client/client.d.ts +123 -0
  48. package/dist/gateway-client/client.d.ts.map +1 -0
  49. package/dist/gateway-client/client.js +93 -0
  50. package/dist/gateway-client/client.js.map +1 -0
  51. package/dist/gateway-client/generated/client/client.gen.d.ts +3 -0
  52. package/dist/gateway-client/generated/client/client.gen.d.ts.map +1 -0
  53. package/dist/gateway-client/generated/client/client.gen.js +217 -0
  54. package/dist/gateway-client/generated/client/client.gen.js.map +1 -0
  55. package/dist/gateway-client/generated/client/index.d.ts +11 -0
  56. package/dist/gateway-client/generated/client/index.d.ts.map +1 -0
  57. package/dist/gateway-client/generated/client/index.js +7 -0
  58. package/dist/gateway-client/generated/client/index.js.map +1 -0
  59. package/dist/gateway-client/generated/client/types.gen.d.ts +121 -0
  60. package/dist/gateway-client/generated/client/types.gen.d.ts.map +1 -0
  61. package/dist/gateway-client/generated/client/types.gen.js +3 -0
  62. package/dist/gateway-client/generated/client/types.gen.js.map +1 -0
  63. package/dist/gateway-client/generated/client/utils.gen.d.ts +38 -0
  64. package/dist/gateway-client/generated/client/utils.gen.d.ts.map +1 -0
  65. package/dist/gateway-client/generated/client/utils.gen.js +229 -0
  66. package/dist/gateway-client/generated/client/utils.gen.js.map +1 -0
  67. package/dist/gateway-client/generated/client.gen.d.ts +13 -0
  68. package/dist/gateway-client/generated/client.gen.d.ts.map +1 -0
  69. package/dist/gateway-client/generated/client.gen.js +4 -0
  70. package/dist/gateway-client/generated/client.gen.js.map +1 -0
  71. package/dist/gateway-client/generated/core/auth.gen.d.ts +26 -0
  72. package/dist/gateway-client/generated/core/auth.gen.d.ts.map +1 -0
  73. package/dist/gateway-client/generated/core/auth.gen.js +15 -0
  74. package/dist/gateway-client/generated/core/auth.gen.js.map +1 -0
  75. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts +26 -0
  76. package/dist/gateway-client/generated/core/bodySerializer.gen.d.ts.map +1 -0
  77. package/dist/gateway-client/generated/core/bodySerializer.gen.js +58 -0
  78. package/dist/gateway-client/generated/core/bodySerializer.gen.js.map +1 -0
  79. package/dist/gateway-client/generated/core/params.gen.d.ts +44 -0
  80. package/dist/gateway-client/generated/core/params.gen.d.ts.map +1 -0
  81. package/dist/gateway-client/generated/core/params.gen.js +101 -0
  82. package/dist/gateway-client/generated/core/params.gen.js.map +1 -0
  83. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts +34 -0
  84. package/dist/gateway-client/generated/core/pathSerializer.gen.d.ts.map +1 -0
  85. package/dist/gateway-client/generated/core/pathSerializer.gen.js +107 -0
  86. package/dist/gateway-client/generated/core/pathSerializer.gen.js.map +1 -0
  87. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts +19 -0
  88. package/dist/gateway-client/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  89. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js +93 -0
  90. package/dist/gateway-client/generated/core/queryKeySerializer.gen.js.map +1 -0
  91. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts +72 -0
  92. package/dist/gateway-client/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  93. package/dist/gateway-client/generated/core/serverSentEvents.gen.js +133 -0
  94. package/dist/gateway-client/generated/core/serverSentEvents.gen.js.map +1 -0
  95. package/dist/gateway-client/generated/core/types.gen.d.ts +84 -0
  96. package/dist/gateway-client/generated/core/types.gen.d.ts.map +1 -0
  97. package/dist/gateway-client/generated/core/types.gen.js +3 -0
  98. package/dist/gateway-client/generated/core/types.gen.js.map +1 -0
  99. package/dist/gateway-client/generated/core/utils.gen.d.ts +20 -0
  100. package/dist/gateway-client/generated/core/utils.gen.d.ts.map +1 -0
  101. package/dist/gateway-client/generated/core/utils.gen.js +88 -0
  102. package/dist/gateway-client/generated/core/utils.gen.js.map +1 -0
  103. package/dist/gateway-client/generated/index.d.ts +3 -0
  104. package/dist/gateway-client/generated/index.d.ts.map +1 -0
  105. package/dist/gateway-client/generated/index.js +3 -0
  106. package/dist/gateway-client/generated/index.js.map +1 -0
  107. package/dist/gateway-client/generated/namespaces.gen.d.ts +512 -0
  108. package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -0
  109. package/dist/gateway-client/generated/namespaces.gen.js +521 -0
  110. package/dist/gateway-client/generated/namespaces.gen.js.map +1 -0
  111. package/dist/gateway-client/generated/sdk.gen.d.ts +1780 -0
  112. package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -0
  113. package/dist/gateway-client/generated/sdk.gen.js +3811 -0
  114. package/dist/gateway-client/generated/sdk.gen.js.map +1 -0
  115. package/dist/gateway-client/generated/types.gen.d.ts +14681 -0
  116. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -0
  117. package/dist/gateway-client/generated/types.gen.js +3 -0
  118. package/dist/gateway-client/generated/types.gen.js.map +1 -0
  119. package/dist/gateway-client/index.d.ts +27 -0
  120. package/dist/gateway-client/index.d.ts.map +1 -0
  121. package/dist/gateway-client/index.js +25 -0
  122. package/dist/gateway-client/index.js.map +1 -0
  123. package/dist/gc/cleanup.d.ts +23 -8
  124. package/dist/gc/cleanup.d.ts.map +1 -1
  125. package/dist/gc/cleanup.js +287 -22
  126. package/dist/gc/cleanup.js.map +1 -1
  127. package/dist/index.d.ts +10 -0
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +20 -0
  130. package/dist/index.js.map +1 -1
  131. package/dist/init.d.ts.map +1 -1
  132. package/dist/init.js +28 -0
  133. package/dist/init.js.map +1 -1
  134. package/dist/internal.d.ts +10 -1
  135. package/dist/internal.d.ts.map +1 -1
  136. package/dist/internal.js +18 -1
  137. package/dist/internal.js.map +1 -1
  138. package/dist/llm/catalog-model-resolver.d.ts +19 -0
  139. package/dist/llm/catalog-model-resolver.d.ts.map +1 -1
  140. package/dist/llm/catalog-model-resolver.js +36 -0
  141. package/dist/llm/catalog-model-resolver.js.map +1 -1
  142. package/dist/llm/catalog-resolver.d.ts +112 -0
  143. package/dist/llm/catalog-resolver.d.ts.map +1 -0
  144. package/dist/llm/catalog-resolver.js +207 -0
  145. package/dist/llm/catalog-resolver.js.map +1 -0
  146. package/dist/llm/catalog-seeder.d.ts +96 -0
  147. package/dist/llm/catalog-seeder.d.ts.map +1 -0
  148. package/dist/llm/catalog-seeder.js +189 -0
  149. package/dist/llm/catalog-seeder.js.map +1 -0
  150. package/dist/llm/cli-ops.d.ts +16 -0
  151. package/dist/llm/cli-ops.d.ts.map +1 -1
  152. package/dist/llm/cli-ops.js +37 -10
  153. package/dist/llm/cli-ops.js.map +1 -1
  154. package/dist/llm/complexity-classifier.d.ts +208 -0
  155. package/dist/llm/complexity-classifier.d.ts.map +1 -0
  156. package/dist/llm/complexity-classifier.js +359 -0
  157. package/dist/llm/complexity-classifier.js.map +1 -0
  158. package/dist/llm/credential-pool.d.ts +2 -0
  159. package/dist/llm/credential-pool.d.ts.map +1 -1
  160. package/dist/llm/credential-pool.js +5 -2
  161. package/dist/llm/credential-pool.js.map +1 -1
  162. package/dist/llm/credentials-store.d.ts +10 -14
  163. package/dist/llm/credentials-store.d.ts.map +1 -1
  164. package/dist/llm/credentials-store.js.map +1 -1
  165. package/dist/llm/cross-provider-selector.d.ts +249 -0
  166. package/dist/llm/cross-provider-selector.d.ts.map +1 -0
  167. package/dist/llm/cross-provider-selector.js +572 -0
  168. package/dist/llm/cross-provider-selector.js.map +1 -0
  169. package/dist/llm/entity-ops.d.ts +299 -0
  170. package/dist/llm/entity-ops.d.ts.map +1 -0
  171. package/dist/llm/entity-ops.js +441 -0
  172. package/dist/llm/entity-ops.js.map +1 -0
  173. package/dist/llm/index.d.ts +17 -0
  174. package/dist/llm/index.d.ts.map +1 -1
  175. package/dist/llm/index.js +9 -0
  176. package/dist/llm/index.js.map +1 -1
  177. package/dist/llm/llm-queue-admit.d.ts +118 -0
  178. package/dist/llm/llm-queue-admit.d.ts.map +1 -0
  179. package/dist/llm/llm-queue-admit.js +275 -0
  180. package/dist/llm/llm-queue-admit.js.map +1 -0
  181. package/dist/llm/local-model-fit.d.ts +260 -0
  182. package/dist/llm/local-model-fit.d.ts.map +1 -0
  183. package/dist/llm/local-model-fit.js +563 -0
  184. package/dist/llm/local-model-fit.js.map +1 -0
  185. package/dist/llm/oauth/device-code.d.ts.map +1 -1
  186. package/dist/llm/oauth/device-code.js +2 -8
  187. package/dist/llm/oauth/device-code.js.map +1 -1
  188. package/dist/llm/oauth/google-pkce.d.ts.map +1 -1
  189. package/dist/llm/oauth/google-pkce.js +2 -18
  190. package/dist/llm/oauth/google-pkce.js.map +1 -1
  191. package/dist/llm/oauth/pkce.d.ts +70 -0
  192. package/dist/llm/oauth/pkce.d.ts.map +1 -1
  193. package/dist/llm/oauth/pkce.js +106 -29
  194. package/dist/llm/oauth/pkce.js.map +1 -1
  195. package/dist/llm/onboarding/front-door.d.ts +146 -0
  196. package/dist/llm/onboarding/front-door.d.ts.map +1 -0
  197. package/dist/llm/onboarding/front-door.js +153 -0
  198. package/dist/llm/onboarding/front-door.js.map +1 -0
  199. package/dist/llm/onboarding/login-engine.d.ts +175 -0
  200. package/dist/llm/onboarding/login-engine.d.ts.map +1 -0
  201. package/dist/llm/onboarding/login-engine.js +286 -0
  202. package/dist/llm/onboarding/login-engine.js.map +1 -0
  203. package/dist/llm/pi/pi-gondolin-env.d.ts +23 -0
  204. package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -1
  205. package/dist/llm/pi/pi-gondolin-env.js +2 -2
  206. package/dist/llm/pi/pi-gondolin-env.js.map +1 -1
  207. package/dist/llm/plugin-facade.js +4612 -1042
  208. package/dist/llm/plugin-facade.js.map +3 -3
  209. package/dist/llm/provider-registry/builtin/anthropic.d.ts.map +1 -1
  210. package/dist/llm/provider-registry/builtin/anthropic.js +23 -10
  211. package/dist/llm/provider-registry/builtin/anthropic.js.map +1 -1
  212. package/dist/llm/provider-registry/builtin/ollama.d.ts +18 -0
  213. package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
  214. package/dist/llm/provider-registry/builtin/ollama.js +20 -2
  215. package/dist/llm/provider-registry/builtin/ollama.js.map +1 -1
  216. package/dist/llm/provider-registry/provider-alias.d.ts +62 -0
  217. package/dist/llm/provider-registry/provider-alias.d.ts.map +1 -0
  218. package/dist/llm/provider-registry/provider-alias.js +85 -0
  219. package/dist/llm/provider-registry/provider-alias.js.map +1 -0
  220. package/dist/llm/provider-registry/provider-defs.d.ts +45 -0
  221. package/dist/llm/provider-registry/provider-defs.d.ts.map +1 -0
  222. package/dist/llm/provider-registry/provider-defs.js +145 -0
  223. package/dist/llm/provider-registry/provider-defs.js.map +1 -0
  224. package/dist/llm/provider-registry/provider-seed.d.ts +78 -0
  225. package/dist/llm/provider-registry/provider-seed.d.ts.map +1 -0
  226. package/dist/llm/provider-registry/provider-seed.js +113 -0
  227. package/dist/llm/provider-registry/provider-seed.js.map +1 -0
  228. package/dist/llm/role-executor.d.ts.map +1 -1
  229. package/dist/llm/role-executor.js +36 -0
  230. package/dist/llm/role-executor.js.map +1 -1
  231. package/dist/llm/role-resolver.d.ts.map +1 -1
  232. package/dist/llm/role-resolver.js +52 -10
  233. package/dist/llm/role-resolver.js.map +1 -1
  234. package/dist/llm/system-resolver.d.ts.map +1 -1
  235. package/dist/llm/system-resolver.js +73 -22
  236. package/dist/llm/system-resolver.js.map +1 -1
  237. package/dist/llm/transports/codex-responses.d.ts +111 -88
  238. package/dist/llm/transports/codex-responses.d.ts.map +1 -1
  239. package/dist/llm/transports/codex-responses.js +456 -258
  240. package/dist/llm/transports/codex-responses.js.map +1 -1
  241. package/dist/memory/learnings.d.ts +4 -0
  242. package/dist/memory/learnings.d.ts.map +1 -1
  243. package/dist/memory/patterns.d.ts +4 -0
  244. package/dist/memory/patterns.d.ts.map +1 -1
  245. package/dist/metrics/index.d.ts +2 -0
  246. package/dist/metrics/index.d.ts.map +1 -1
  247. package/dist/metrics/index.js +1 -0
  248. package/dist/metrics/index.js.map +1 -1
  249. package/dist/orchestration/spawn.d.ts +89 -0
  250. package/dist/orchestration/spawn.d.ts.map +1 -1
  251. package/dist/orchestration/spawn.js +68 -0
  252. package/dist/orchestration/spawn.js.map +1 -1
  253. package/dist/playbooks/cantbook-profile.d.ts +96 -0
  254. package/dist/playbooks/cantbook-profile.d.ts.map +1 -0
  255. package/dist/playbooks/cantbook-profile.js +97 -0
  256. package/dist/playbooks/cantbook-profile.js.map +1 -0
  257. package/dist/playbooks/guarded-deterministic-runner.d.ts +153 -0
  258. package/dist/playbooks/guarded-deterministic-runner.d.ts.map +1 -0
  259. package/dist/playbooks/guarded-deterministic-runner.js +155 -0
  260. package/dist/playbooks/guarded-deterministic-runner.js.map +1 -0
  261. package/dist/playbooks/index.d.ts +2 -0
  262. package/dist/playbooks/index.d.ts.map +1 -1
  263. package/dist/playbooks/index.js +10 -0
  264. package/dist/playbooks/index.js.map +1 -1
  265. package/dist/playbooks/pi-runner-wiring.d.ts +75 -0
  266. package/dist/playbooks/pi-runner-wiring.d.ts.map +1 -0
  267. package/dist/playbooks/pi-runner-wiring.js +82 -0
  268. package/dist/playbooks/pi-runner-wiring.js.map +1 -0
  269. package/dist/release/index.d.ts +2 -2
  270. package/dist/release/index.d.ts.map +1 -1
  271. package/dist/release/index.js +1 -1
  272. package/dist/release/index.js.map +1 -1
  273. package/dist/release/reconcile.d.ts +97 -0
  274. package/dist/release/reconcile.d.ts.map +1 -1
  275. package/dist/release/reconcile.js +412 -5
  276. package/dist/release/reconcile.js.map +1 -1
  277. package/dist/resources/backend.d.ts +155 -0
  278. package/dist/resources/backend.d.ts.map +1 -0
  279. package/dist/resources/backend.js +23 -0
  280. package/dist/resources/backend.js.map +1 -0
  281. package/dist/resources/linux-backend.d.ts +167 -0
  282. package/dist/resources/linux-backend.d.ts.map +1 -0
  283. package/dist/resources/linux-backend.js +259 -0
  284. package/dist/resources/linux-backend.js.map +1 -0
  285. package/dist/resources/monitor.d.ts +230 -0
  286. package/dist/resources/monitor.d.ts.map +1 -0
  287. package/dist/resources/monitor.js +255 -0
  288. package/dist/resources/monitor.js.map +1 -0
  289. package/dist/resources/spawn-wrapper.d.ts +265 -0
  290. package/dist/resources/spawn-wrapper.d.ts.map +1 -0
  291. package/dist/resources/spawn-wrapper.js +304 -0
  292. package/dist/resources/spawn-wrapper.js.map +1 -0
  293. package/dist/runtime/openapi/generate-openapi.d.ts +211 -0
  294. package/dist/runtime/openapi/generate-openapi.d.ts.map +1 -0
  295. package/dist/runtime/openapi/generate-openapi.js +300 -0
  296. package/dist/runtime/openapi/generate-openapi.js.map +1 -0
  297. package/dist/runtime/openapi/index.d.ts +16 -0
  298. package/dist/runtime/openapi/index.d.ts.map +1 -0
  299. package/dist/runtime/openapi/index.js +16 -0
  300. package/dist/runtime/openapi/index.js.map +1 -0
  301. package/dist/selfimprove/budget.d.ts +11 -2
  302. package/dist/selfimprove/budget.d.ts.map +1 -1
  303. package/dist/selfimprove/budget.js +11 -2
  304. package/dist/selfimprove/budget.js.map +1 -1
  305. package/dist/selfimprove/fix-gen.d.ts +229 -0
  306. package/dist/selfimprove/fix-gen.d.ts.map +1 -0
  307. package/dist/selfimprove/fix-gen.js +266 -0
  308. package/dist/selfimprove/fix-gen.js.map +1 -0
  309. package/dist/selfimprove/run-loop.d.ts +44 -4
  310. package/dist/selfimprove/run-loop.d.ts.map +1 -1
  311. package/dist/selfimprove/run-loop.js +73 -6
  312. package/dist/selfimprove/run-loop.js.map +1 -1
  313. package/dist/selfimprove/scenarios/dhq-replay-find/golden.json +32 -0
  314. package/dist/selfimprove/scenarios/dhq-replay-find/scenario.json +18 -0
  315. package/dist/sentient/cross-project-hygiene.d.ts +11 -2
  316. package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
  317. package/dist/sentient/cross-project-hygiene.js +73 -10
  318. package/dist/sentient/cross-project-hygiene.js.map +1 -1
  319. package/dist/sentient/daemon.d.ts.map +1 -1
  320. package/dist/sentient/daemon.js +7 -2
  321. package/dist/sentient/daemon.js.map +1 -1
  322. package/dist/sentient/worktree-dispatch.d.ts.map +1 -1
  323. package/dist/sentient/worktree-dispatch.js +8 -1
  324. package/dist/sentient/worktree-dispatch.js.map +1 -1
  325. package/dist/setup/config-json-merge.d.ts.map +1 -1
  326. package/dist/setup/config-json-merge.js +14 -0
  327. package/dist/setup/config-json-merge.js.map +1 -1
  328. package/dist/setup/index.d.ts +23 -11
  329. package/dist/setup/index.d.ts.map +1 -1
  330. package/dist/setup/index.js +25 -12
  331. package/dist/setup/index.js.map +1 -1
  332. package/dist/setup/sections/llm.d.ts +28 -1
  333. package/dist/setup/sections/llm.d.ts.map +1 -1
  334. package/dist/setup/sections/llm.js +27 -6
  335. package/dist/setup/sections/llm.js.map +1 -1
  336. package/dist/setup/sections/models-roles.d.ts +40 -0
  337. package/dist/setup/sections/models-roles.d.ts.map +1 -0
  338. package/dist/setup/sections/models-roles.js +219 -0
  339. package/dist/setup/sections/models-roles.js.map +1 -0
  340. package/dist/setup/wizard.d.ts +19 -1
  341. package/dist/setup/wizard.d.ts.map +1 -1
  342. package/dist/setup/wizard.js.map +1 -1
  343. package/dist/spawn/branch-lock.d.ts.map +1 -1
  344. package/dist/spawn/branch-lock.js +7 -1
  345. package/dist/spawn/branch-lock.js.map +1 -1
  346. package/dist/store/attachment-repair.d.ts +110 -0
  347. package/dist/store/attachment-repair.d.ts.map +1 -0
  348. package/dist/store/attachment-repair.js +326 -0
  349. package/dist/store/attachment-repair.js.map +1 -0
  350. package/dist/store/attachment-store.d.ts.map +1 -1
  351. package/dist/store/attachment-store.js +24 -7
  352. package/dist/store/attachment-store.js.map +1 -1
  353. package/dist/store/schedule-schema.d.ts +195 -0
  354. package/dist/store/schedule-schema.d.ts.map +1 -0
  355. package/dist/store/schedule-schema.js +84 -0
  356. package/dist/store/schedule-schema.js.map +1 -0
  357. package/dist/store/schedule-store.d.ts +144 -0
  358. package/dist/store/schedule-store.d.ts.map +1 -0
  359. package/dist/store/schedule-store.js +162 -0
  360. package/dist/store/schedule-store.js.map +1 -0
  361. package/dist/store/schema/attachments.d.ts +1 -1
  362. package/dist/store/schema/cleo-global/index.d.ts +3 -0
  363. package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
  364. package/dist/store/schema/cleo-global/index.js +5 -0
  365. package/dist/store/schema/cleo-global/index.js.map +1 -1
  366. package/dist/store/schema/cleo-global/models-catalog.d.ts +359 -0
  367. package/dist/store/schema/cleo-global/models-catalog.d.ts.map +1 -0
  368. package/dist/store/schema/cleo-global/models-catalog.js +114 -0
  369. package/dist/store/schema/cleo-global/models-catalog.js.map +1 -0
  370. package/dist/store/schema/cleo-global/providers.d.ts +279 -0
  371. package/dist/store/schema/cleo-global/providers.d.ts.map +1 -0
  372. package/dist/store/schema/cleo-global/providers.js +94 -0
  373. package/dist/store/schema/cleo-global/providers.js.map +1 -0
  374. package/dist/store/schema/cleo-global/services.d.ts +493 -0
  375. package/dist/store/schema/cleo-global/services.d.ts.map +1 -0
  376. package/dist/store/schema/cleo-global/services.js +200 -0
  377. package/dist/store/schema/cleo-global/services.js.map +1 -0
  378. package/dist/store/schema/cleo-project/docs.d.ts +1 -1
  379. package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
  380. package/dist/store/schema/cleo-shared/brain.d.ts +2 -2
  381. package/dist/store/schema/memory-schema.d.ts +182 -2
  382. package/dist/store/schema/memory-schema.d.ts.map +1 -1
  383. package/dist/store/schema/memory-schema.js +111 -2
  384. package/dist/store/schema/memory-schema.js.map +1 -1
  385. package/dist/store/schema/provenance/releases.d.ts +1 -1
  386. package/dist/store/service-connections-accessor.d.ts +313 -0
  387. package/dist/store/service-connections-accessor.d.ts.map +1 -0
  388. package/dist/store/service-connections-accessor.js +464 -0
  389. package/dist/store/service-connections-accessor.js.map +1 -0
  390. package/dist/store/service-host-matcher.d.ts +70 -0
  391. package/dist/store/service-host-matcher.d.ts.map +1 -0
  392. package/dist/store/service-host-matcher.js +127 -0
  393. package/dist/store/service-host-matcher.js.map +1 -0
  394. package/dist/store/service-injection.d.ts +152 -0
  395. package/dist/store/service-injection.d.ts.map +1 -0
  396. package/dist/store/service-injection.js +225 -0
  397. package/dist/store/service-injection.js.map +1 -0
  398. package/dist/store/service-oauth.d.ts +287 -0
  399. package/dist/store/service-oauth.d.ts.map +1 -0
  400. package/dist/store/service-oauth.js +524 -0
  401. package/dist/store/service-oauth.js.map +1 -0
  402. package/dist/store/service-trust-gate.d.ts +164 -0
  403. package/dist/store/service-trust-gate.d.ts.map +1 -0
  404. package/dist/store/service-trust-gate.js +122 -0
  405. package/dist/store/service-trust-gate.js.map +1 -0
  406. package/dist/store/validation-schemas.d.ts +4 -4
  407. package/dist/tasks/agent-lifecycle-lane.d.ts +175 -0
  408. package/dist/tasks/agent-lifecycle-lane.d.ts.map +1 -0
  409. package/dist/tasks/agent-lifecycle-lane.js +176 -0
  410. package/dist/tasks/agent-lifecycle-lane.js.map +1 -0
  411. package/dist/tasks/complete.d.ts +17 -0
  412. package/dist/tasks/complete.d.ts.map +1 -1
  413. package/dist/tasks/complete.js +53 -10
  414. package/dist/tasks/complete.js.map +1 -1
  415. package/dist/tasks/depends-waiver-audit.d.ts +52 -0
  416. package/dist/tasks/depends-waiver-audit.d.ts.map +1 -0
  417. package/dist/tasks/depends-waiver-audit.js +36 -0
  418. package/dist/tasks/depends-waiver-audit.js.map +1 -0
  419. package/dist/tasks/engine-wrap.d.ts +36 -2
  420. package/dist/tasks/engine-wrap.d.ts.map +1 -1
  421. package/dist/tasks/engine-wrap.js +44 -2
  422. package/dist/tasks/engine-wrap.js.map +1 -1
  423. package/dist/tasks/evidence.d.ts +34 -2
  424. package/dist/tasks/evidence.d.ts.map +1 -1
  425. package/dist/tasks/evidence.js +293 -35
  426. package/dist/tasks/evidence.js.map +1 -1
  427. package/dist/tasks/index.d.ts +1 -0
  428. package/dist/tasks/index.d.ts.map +1 -1
  429. package/dist/tasks/index.js +1 -0
  430. package/dist/tasks/index.js.map +1 -1
  431. package/dist/tasks/ops.d.ts +3 -0
  432. package/dist/tasks/ops.d.ts.map +1 -1
  433. package/dist/tasks/task-ops.d.ts +1 -1
  434. package/dist/tasks/task-ops.d.ts.map +1 -1
  435. package/dist/tasks/task-ops.js +3 -1
  436. package/dist/tasks/task-ops.js.map +1 -1
  437. package/dist/tasks/task-reparent.d.ts +90 -0
  438. package/dist/tasks/task-reparent.d.ts.map +1 -1
  439. package/dist/tasks/task-reparent.js +171 -0
  440. package/dist/tasks/task-reparent.js.map +1 -1
  441. package/dist/tools/builtin-agent-tools.d.ts.map +1 -1
  442. package/dist/tools/builtin-agent-tools.js +41 -0
  443. package/dist/tools/builtin-agent-tools.js.map +1 -1
  444. package/dist/tools/exec-code-agent-tool.d.ts +179 -0
  445. package/dist/tools/exec-code-agent-tool.d.ts.map +1 -0
  446. package/dist/tools/exec-code-agent-tool.js +239 -0
  447. package/dist/tools/exec-code-agent-tool.js.map +1 -0
  448. package/dist/tools/index.d.ts +6 -0
  449. package/dist/tools/index.d.ts.map +1 -1
  450. package/dist/tools/index.js +15 -0
  451. package/dist/tools/index.js.map +1 -1
  452. package/dist/tools/mcp-agent-tool.d.ts +189 -0
  453. package/dist/tools/mcp-agent-tool.d.ts.map +1 -0
  454. package/dist/tools/mcp-agent-tool.js +243 -0
  455. package/dist/tools/mcp-agent-tool.js.map +1 -0
  456. package/dist/tools/media-agent-tools.d.ts +105 -0
  457. package/dist/tools/media-agent-tools.d.ts.map +1 -0
  458. package/dist/tools/media-agent-tools.js +255 -0
  459. package/dist/tools/media-agent-tools.js.map +1 -0
  460. package/dist/tools/memory-agent-tools.d.ts +99 -0
  461. package/dist/tools/memory-agent-tools.d.ts.map +1 -0
  462. package/dist/tools/memory-agent-tools.js +190 -0
  463. package/dist/tools/memory-agent-tools.js.map +1 -0
  464. package/dist/tools/schedule-agent-tools.d.ts +151 -0
  465. package/dist/tools/schedule-agent-tools.d.ts.map +1 -0
  466. package/dist/tools/schedule-agent-tools.js +238 -0
  467. package/dist/tools/schedule-agent-tools.js.map +1 -0
  468. package/dist/tools/skill-agent-tool.d.ts +108 -0
  469. package/dist/tools/skill-agent-tool.d.ts.map +1 -0
  470. package/dist/tools/skill-agent-tool.js +135 -0
  471. package/dist/tools/skill-agent-tool.js.map +1 -0
  472. package/dist/validation/engine-ops.d.ts.map +1 -1
  473. package/dist/validation/engine-ops.js +17 -1
  474. package/dist/validation/engine-ops.js.map +1 -1
  475. package/dist/verification/verify-tools.d.ts.map +1 -1
  476. package/dist/verification/verify-tools.js +5 -6
  477. package/dist/verification/verify-tools.js.map +1 -1
  478. package/migrations/drizzle-brain/20260610000001_t10405-bitemporal-network-columns/migration.sql +71 -0
  479. package/migrations/drizzle-cleo-global/20260609000000_t11937-service-vault/migration.sql +93 -0
  480. package/migrations/drizzle-cleo-global/20260609010000_t11733-models-catalog/migration.sql +65 -0
  481. package/migrations/drizzle-cleo-global/20260609020000_t11703-providers/migration.sql +52 -0
  482. package/migrations/drizzle-cleo-global/20260610000000_t11962-schedules/migration.sql +48 -0
  483. package/migrations/drizzle-cleo-project/20260610000000_t11962-schedules/migration.sql +48 -0
  484. package/package.json +33 -13
  485. package/templates/workflows/release-prepare.yml.tmpl +48 -2
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Native MCP client (fan-IN) agent tool — connect-time `listTools` → register each
3
+ * remote tool into the {@link ./agent-registry.js | AgentToolRegistry}
4
+ * (T11948 · M7 · epic T11456 · SG-TOOLS · satisfies T11593 EP-MCP-HOST-FANIN + T1746).
5
+ *
6
+ * Where the runtime gateway is the MCP *server* (fan-OUT: it EXPOSES cleo ops as
7
+ * MCP tools), this is the MCP *client* (fan-IN: it CONNECTS to an external MCP
8
+ * server and PULLS its tools into cleo's own agent loop). On connect the client
9
+ * performs the MCP handshake (`initialize` → `tools/list`) and registers EACH
10
+ * remote tool as a proxy {@link AgentToolDescriptor} BEFORE the registry is frozen
11
+ * (init-time fan-in). Each proxy tool's `execute` issues a `tools/call` over the
12
+ * SAME transport and formats the result for the loop; a transport failure becomes a
13
+ * typed result (the executable NEVER throws — the frozen ToolDispatchEngine is
14
+ * unchanged).
15
+ *
16
+ * This REPLACES the external mcp-tool dependency for the host-loop path. It is a
17
+ * deliberately-minimal native client — NO external MCP SDK dependency: the wire is
18
+ * the standard MCP JSON-RPC ({@link McpTransport}), with stdio / SSE / HTTP
19
+ * transports as concrete {@link McpTransport} implementations. Placed in `core` per
20
+ * the package boundary (consumed by the harness, never redefined there — Gate-11).
21
+ *
22
+ * ## Availability (AC — live-connection only)
23
+ *
24
+ * A fan-in tool is available ONLY while its MCP server connection is live. The
25
+ * client exposes an {@link McpConnection.isLive} cell that each proxy tool's
26
+ * {@link AvailabilityCheck} reads; once the connection closes (or its transport
27
+ * errors fatally), the proxy tools report unavailable rather than dispatching into
28
+ * a dead transport.
29
+ *
30
+ * ## Gate-13
31
+ *
32
+ * No model/transport/provider LLM client is constructed here — the MCP transport
33
+ * speaks the tool protocol, not an LLM wire. There is no chokepoint concern.
34
+ *
35
+ * @epic T11456
36
+ * @task T11948
37
+ * @see ../../runtime/src/gateway/mcp/types.ts — the MCP server (fan-out) wire types this mirrors
38
+ * @see ./exec-code-agent-tool.js — the injectable-seam + self-registering-marker pattern mirrored here
39
+ */
40
+ import type { AgentToolDescriptor, AgentToolRegistry } from './agent-registry.js';
41
+ /** JSON Schema property descriptor for a single remote-tool input field. */
42
+ export interface McpInputProperty {
43
+ /** JSON Schema primitive type (`'string'`, `'number'`, …). */
44
+ readonly type: string;
45
+ /** Human-readable description. */
46
+ readonly description?: string;
47
+ /** Allowed values (JSON Schema `enum`). */
48
+ readonly enum?: readonly string[];
49
+ }
50
+ /**
51
+ * MCP remote-tool definition (minimal subset — no external MCP SDK dependency).
52
+ * The shape returned by an MCP server's `tools/list`.
53
+ */
54
+ export interface McpRemoteTool {
55
+ /** Stable remote tool name. */
56
+ readonly name: string;
57
+ /** Human-readable description. */
58
+ readonly description?: string;
59
+ /** JSON Schema for the tool's input parameters. */
60
+ readonly inputSchema?: {
61
+ readonly type?: string;
62
+ readonly properties?: Readonly<Record<string, McpInputProperty>>;
63
+ readonly required?: readonly string[];
64
+ };
65
+ }
66
+ /** A single content block returned by an MCP `tools/call`. */
67
+ export interface McpContent {
68
+ readonly type: string;
69
+ readonly text?: string;
70
+ }
71
+ /** Result returned by an MCP `tools/call`. */
72
+ export interface McpToolCallResult {
73
+ readonly content?: readonly McpContent[];
74
+ readonly isError?: boolean;
75
+ }
76
+ /**
77
+ * The wire seam every MCP transport implements: issue a JSON-RPC `method` with
78
+ * `params` and resolve the typed `result`. The stdio / SSE / HTTP transports are
79
+ * concrete implementations; the unit test injects an in-memory fake. The transport
80
+ * owns framing + correlation — this module only speaks MCP methods over it.
81
+ */
82
+ export interface McpTransport {
83
+ /**
84
+ * Send an MCP JSON-RPC request and resolve its `result`.
85
+ *
86
+ * @param method - The MCP method (`'initialize'`, `'tools/list'`, `'tools/call'`).
87
+ * @param params - The method params.
88
+ * @returns The JSON-RPC `result` payload.
89
+ * @throws When the transport is dead or the server returns a JSON-RPC error.
90
+ */
91
+ request(method: string, params?: Readonly<Record<string, unknown>>): Promise<unknown>;
92
+ /** Close the transport (idempotent). After close, {@link request} rejects. */
93
+ close(): Promise<void>;
94
+ }
95
+ /** Transport kinds a native MCP client connection can speak over. */
96
+ export declare const MCP_TRANSPORT_KINDS: readonly ["stdio", "sse", "http"];
97
+ /** One supported {@link MCP_TRANSPORT_KINDS} value. */
98
+ export type McpTransportKind = (typeof MCP_TRANSPORT_KINDS)[number];
99
+ /**
100
+ * A live MCP client connection: a transport + the liveness cell the proxy tools'
101
+ * availability predicate reads. Produced by {@link connectMcpServer}.
102
+ */
103
+ export interface McpConnection {
104
+ /** A stable server name used to namespace the fan-in tool names. */
105
+ readonly serverName: string;
106
+ /** The underlying transport. */
107
+ readonly transport: McpTransport;
108
+ /** The remote tools discovered at connect (`tools/list`). */
109
+ readonly tools: readonly McpRemoteTool[];
110
+ /** `true` while the connection is live; flips `false` on {@link disconnect}. */
111
+ isLive(): boolean;
112
+ /** Close the transport and flip the liveness cell to `false`. */
113
+ disconnect(): Promise<void>;
114
+ }
115
+ /**
116
+ * Perform the MCP handshake over `transport` and discover its tools: send
117
+ * `initialize`, then `tools/list`. Returns a live {@link McpConnection} whose
118
+ * liveness cell is `true` until {@link McpConnection.disconnect}. The transport is
119
+ * supplied by the caller (so stdio / SSE / HTTP — or an in-memory fake — all flow
120
+ * through the same path).
121
+ *
122
+ * @param serverName - Stable name to namespace this server's fan-in tools.
123
+ * @param transport - The MCP transport to handshake over.
124
+ * @returns The connected {@link McpConnection}.
125
+ * @throws When `initialize` or `tools/list` fails (the connection is not live).
126
+ */
127
+ export declare function connectMcpServer(serverName: string, transport: McpTransport): Promise<McpConnection>;
128
+ /**
129
+ * The namespaced agent-tool name for a remote MCP tool: `mcp_<server>_<tool>`. So
130
+ * two servers exposing a same-named tool never collide in the registry.
131
+ *
132
+ * @param serverName - The MCP server's stable name.
133
+ * @param toolName - The remote tool's name.
134
+ * @returns The namespaced, registry-unique tool name.
135
+ */
136
+ export declare function mcpToolName(serverName: string, toolName: string): string;
137
+ /**
138
+ * Build the proxy {@link AgentToolDescriptor} for ONE remote tool over a live
139
+ * connection. Its `execute` issues `tools/call` over the connection's transport
140
+ * and formats the result; a transport / server error becomes a typed result (never
141
+ * throws). Its availability returns `true` only while the connection is live.
142
+ *
143
+ * @param conn - The live MCP connection.
144
+ * @param tool - The remote tool to proxy.
145
+ * @returns The proxy descriptor to register.
146
+ */
147
+ export declare function buildMcpProxyTool(conn: McpConnection, tool: McpRemoteTool): AgentToolDescriptor;
148
+ /**
149
+ * Register every fan-in proxy tool for a live MCP connection into `registry`. Pure
150
+ * registration over an ALREADY-connected {@link McpConnection} — the connect /
151
+ * `tools/list` happened in {@link connectMcpServer} (which the host calls at
152
+ * init-time, before the registry is frozen). Each remote tool becomes one proxy
153
+ * descriptor (AC1); each is hidden once the connection drops (AC — live-only).
154
+ *
155
+ * @param registry - The registry to populate (must not yet be frozen).
156
+ * @param conn - The live MCP connection whose tools to fan in.
157
+ * @returns The registered proxy tool names.
158
+ */
159
+ export declare function registerMcpConnectionTools(registry: AgentToolRegistry, conn: McpConnection): string[];
160
+ /** Options for {@link registerMcpAgentTools} — the connections to fan in. */
161
+ export interface McpAgentToolOptions {
162
+ /**
163
+ * Already-connected MCP connections whose remote tools to fan in. The host
164
+ * connects each server (via {@link connectMcpServer}) at init-time, BEFORE the
165
+ * registry is frozen, then passes the live connections here. Defaults to none —
166
+ * with no MCP servers configured this is a no-op (core runs MCP-OFF).
167
+ */
168
+ readonly connections?: readonly McpConnection[];
169
+ }
170
+ /**
171
+ * Register the fan-in proxy tools for every supplied MCP connection. Pure
172
+ * registration — no network handshake here (the connections are already live);
173
+ * the connect happens earlier in {@link connectMcpServer}. With no connections
174
+ * this is a no-op (the common no-MCP-configured case).
175
+ *
176
+ * @param registry - The registry to populate.
177
+ * @param options - The live connections to fan in.
178
+ */
179
+ export declare function registerMcpAgentTools(registry: AgentToolRegistry, options?: McpAgentToolOptions): void;
180
+ /**
181
+ * Self-registration marker (AC1) — the identifier the
182
+ * {@link AgentToolRegistry.discover} bounded source scan greps for. With no live
183
+ * connections supplied this registers nothing (a host wires connections via
184
+ * {@link registerMcpAgentTools} directly with its connected servers).
185
+ *
186
+ * @param registry - The registry to populate.
187
+ */
188
+ export declare function registerAgentTools(registry: AgentToolRegistry): void;
189
+ //# sourceMappingURL=mcp-agent-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-agent-tool.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-agent-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Native MCP client (fan-IN) agent tool — connect-time `listTools` → register each
3
+ * remote tool into the {@link ./agent-registry.js | AgentToolRegistry}
4
+ * (T11948 · M7 · epic T11456 · SG-TOOLS · satisfies T11593 EP-MCP-HOST-FANIN + T1746).
5
+ *
6
+ * Where the runtime gateway is the MCP *server* (fan-OUT: it EXPOSES cleo ops as
7
+ * MCP tools), this is the MCP *client* (fan-IN: it CONNECTS to an external MCP
8
+ * server and PULLS its tools into cleo's own agent loop). On connect the client
9
+ * performs the MCP handshake (`initialize` → `tools/list`) and registers EACH
10
+ * remote tool as a proxy {@link AgentToolDescriptor} BEFORE the registry is frozen
11
+ * (init-time fan-in). Each proxy tool's `execute` issues a `tools/call` over the
12
+ * SAME transport and formats the result for the loop; a transport failure becomes a
13
+ * typed result (the executable NEVER throws — the frozen ToolDispatchEngine is
14
+ * unchanged).
15
+ *
16
+ * This REPLACES the external mcp-tool dependency for the host-loop path. It is a
17
+ * deliberately-minimal native client — NO external MCP SDK dependency: the wire is
18
+ * the standard MCP JSON-RPC ({@link McpTransport}), with stdio / SSE / HTTP
19
+ * transports as concrete {@link McpTransport} implementations. Placed in `core` per
20
+ * the package boundary (consumed by the harness, never redefined there — Gate-11).
21
+ *
22
+ * ## Availability (AC — live-connection only)
23
+ *
24
+ * A fan-in tool is available ONLY while its MCP server connection is live. The
25
+ * client exposes an {@link McpConnection.isLive} cell that each proxy tool's
26
+ * {@link AvailabilityCheck} reads; once the connection closes (or its transport
27
+ * errors fatally), the proxy tools report unavailable rather than dispatching into
28
+ * a dead transport.
29
+ *
30
+ * ## Gate-13
31
+ *
32
+ * No model/transport/provider LLM client is constructed here — the MCP transport
33
+ * speaks the tool protocol, not an LLM wire. There is no chokepoint concern.
34
+ *
35
+ * @epic T11456
36
+ * @task T11948
37
+ * @see ../../runtime/src/gateway/mcp/types.ts — the MCP server (fan-out) wire types this mirrors
38
+ * @see ./exec-code-agent-tool.js — the injectable-seam + self-registering-marker pattern mirrored here
39
+ */
40
+ import { z } from 'zod';
41
+ import { getLogger } from '../logger.js';
42
+ const log = getLogger('tool-mcp-client');
43
+ /** Transport kinds a native MCP client connection can speak over. */
44
+ export const MCP_TRANSPORT_KINDS = ['stdio', 'sse', 'http'];
45
+ /**
46
+ * Perform the MCP handshake over `transport` and discover its tools: send
47
+ * `initialize`, then `tools/list`. Returns a live {@link McpConnection} whose
48
+ * liveness cell is `true` until {@link McpConnection.disconnect}. The transport is
49
+ * supplied by the caller (so stdio / SSE / HTTP — or an in-memory fake — all flow
50
+ * through the same path).
51
+ *
52
+ * @param serverName - Stable name to namespace this server's fan-in tools.
53
+ * @param transport - The MCP transport to handshake over.
54
+ * @returns The connected {@link McpConnection}.
55
+ * @throws When `initialize` or `tools/list` fails (the connection is not live).
56
+ */
57
+ export async function connectMcpServer(serverName, transport) {
58
+ await transport.request('initialize', {
59
+ protocolVersion: '2025-06-18',
60
+ capabilities: {},
61
+ clientInfo: { name: 'cleo', version: '0' },
62
+ });
63
+ const listed = await transport.request('tools/list', {});
64
+ const tools = extractRemoteTools(listed);
65
+ let live = true;
66
+ return {
67
+ serverName,
68
+ transport,
69
+ tools,
70
+ isLive: () => live,
71
+ disconnect: async () => {
72
+ live = false;
73
+ try {
74
+ await transport.close();
75
+ }
76
+ catch (err) {
77
+ log.debug({ err, serverName }, 'mcp: transport close failed (ignored)');
78
+ }
79
+ },
80
+ };
81
+ }
82
+ /** Narrow a `tools/list` result into an {@link McpRemoteTool}[] defensively. */
83
+ function extractRemoteTools(listed) {
84
+ if (typeof listed === 'object' &&
85
+ listed !== null &&
86
+ 'tools' in listed &&
87
+ Array.isArray(listed.tools)) {
88
+ return listed.tools.filter((t) => typeof t?.name === 'string');
89
+ }
90
+ return [];
91
+ }
92
+ /**
93
+ * The namespaced agent-tool name for a remote MCP tool: `mcp_<server>_<tool>`. So
94
+ * two servers exposing a same-named tool never collide in the registry.
95
+ *
96
+ * @param serverName - The MCP server's stable name.
97
+ * @param toolName - The remote tool's name.
98
+ * @returns The namespaced, registry-unique tool name.
99
+ */
100
+ export function mcpToolName(serverName, toolName) {
101
+ const safe = (s) => s.replace(/[^a-zA-Z0-9_]/g, '_');
102
+ return `mcp_${safe(serverName)}_${safe(toolName)}`;
103
+ }
104
+ /**
105
+ * Build a Zod parameter schema from a remote tool's JSON Schema. The fan-in proxy
106
+ * accepts an open object (the remote server is the source of truth for its own
107
+ * validation); we surface declared properties as a permissive record so the model
108
+ * sees the shape while the remote performs authoritative validation.
109
+ *
110
+ * @param tool - The remote tool definition.
111
+ * @returns A Zod schema for the proxy's parameters.
112
+ */
113
+ function remoteToolSchema(tool) {
114
+ const props = tool.inputSchema?.properties ?? {};
115
+ const shape = {};
116
+ const required = new Set(tool.inputSchema?.required ?? []);
117
+ for (const [key, prop] of Object.entries(props)) {
118
+ let field;
119
+ switch (prop.type) {
120
+ case 'number':
121
+ case 'integer':
122
+ field = z.number();
123
+ break;
124
+ case 'boolean':
125
+ field = z.boolean();
126
+ break;
127
+ case 'array':
128
+ field = z.array(z.unknown());
129
+ break;
130
+ case 'object':
131
+ field = z.record(z.string(), z.unknown());
132
+ break;
133
+ default:
134
+ field = z.string();
135
+ }
136
+ if (prop.description)
137
+ field = field.describe(prop.description);
138
+ shape[key] = required.has(key) ? field : field.optional();
139
+ }
140
+ return z.object(shape).passthrough();
141
+ }
142
+ /**
143
+ * Build the proxy {@link AgentToolDescriptor} for ONE remote tool over a live
144
+ * connection. Its `execute` issues `tools/call` over the connection's transport
145
+ * and formats the result; a transport / server error becomes a typed result (never
146
+ * throws). Its availability returns `true` only while the connection is live.
147
+ *
148
+ * @param conn - The live MCP connection.
149
+ * @param tool - The remote tool to proxy.
150
+ * @returns The proxy descriptor to register.
151
+ */
152
+ export function buildMcpProxyTool(conn, tool) {
153
+ const liveOnly = () => conn.isLive();
154
+ return {
155
+ name: mcpToolName(conn.serverName, tool.name),
156
+ // 'net' — the proxy reaches an external MCP server over its transport.
157
+ class: 'net',
158
+ description: tool.description ??
159
+ `Proxy for remote MCP tool "${tool.name}" on server "${conn.serverName}".`,
160
+ toolset: 'agent',
161
+ stateless: false,
162
+ available: liveOnly,
163
+ parameters: remoteToolSchema(tool),
164
+ execute: async (rawArgs) => {
165
+ if (!conn.isLive()) {
166
+ return {
167
+ ok: false,
168
+ error: {
169
+ code: 'E_MCP_CONNECTION_DEAD',
170
+ message: `MCP server "${conn.serverName}" connection is no longer live`,
171
+ },
172
+ };
173
+ }
174
+ try {
175
+ const result = (await conn.transport.request('tools/call', {
176
+ name: tool.name,
177
+ arguments: rawArgs,
178
+ }));
179
+ const text = (result.content ?? [])
180
+ .map((c) => c.text ?? '')
181
+ .filter((t) => t.length > 0)
182
+ .join('\n');
183
+ return { ok: result.isError !== true, isError: result.isError === true, content: text };
184
+ }
185
+ catch (err) {
186
+ // A transport / server error is a typed dispatch failure, never a throw.
187
+ return {
188
+ ok: false,
189
+ error: {
190
+ code: 'E_MCP_CALL_FAILED',
191
+ message: err instanceof Error ? err.message : String(err),
192
+ },
193
+ };
194
+ }
195
+ },
196
+ };
197
+ }
198
+ /**
199
+ * Register every fan-in proxy tool for a live MCP connection into `registry`. Pure
200
+ * registration over an ALREADY-connected {@link McpConnection} — the connect /
201
+ * `tools/list` happened in {@link connectMcpServer} (which the host calls at
202
+ * init-time, before the registry is frozen). Each remote tool becomes one proxy
203
+ * descriptor (AC1); each is hidden once the connection drops (AC — live-only).
204
+ *
205
+ * @param registry - The registry to populate (must not yet be frozen).
206
+ * @param conn - The live MCP connection whose tools to fan in.
207
+ * @returns The registered proxy tool names.
208
+ */
209
+ export function registerMcpConnectionTools(registry, conn) {
210
+ const names = [];
211
+ for (const tool of conn.tools) {
212
+ const descriptor = buildMcpProxyTool(conn, tool);
213
+ registry.register(descriptor);
214
+ names.push(descriptor.name);
215
+ }
216
+ return names;
217
+ }
218
+ /**
219
+ * Register the fan-in proxy tools for every supplied MCP connection. Pure
220
+ * registration — no network handshake here (the connections are already live);
221
+ * the connect happens earlier in {@link connectMcpServer}. With no connections
222
+ * this is a no-op (the common no-MCP-configured case).
223
+ *
224
+ * @param registry - The registry to populate.
225
+ * @param options - The live connections to fan in.
226
+ */
227
+ export function registerMcpAgentTools(registry, options = {}) {
228
+ for (const conn of options.connections ?? []) {
229
+ registerMcpConnectionTools(registry, conn);
230
+ }
231
+ }
232
+ /**
233
+ * Self-registration marker (AC1) — the identifier the
234
+ * {@link AgentToolRegistry.discover} bounded source scan greps for. With no live
235
+ * connections supplied this registers nothing (a host wires connections via
236
+ * {@link registerMcpAgentTools} directly with its connected servers).
237
+ *
238
+ * @param registry - The registry to populate.
239
+ */
240
+ export function registerAgentTools(registry) {
241
+ registerMcpAgentTools(registry);
242
+ }
243
+ //# sourceMappingURL=mcp-agent-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-agent-tool.js","sourceRoot":"","sources":["../../src/tools/mcp-agent-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
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 type { AgentToolRegistry, AvailabilityCheck } from './agent-registry.js';
39
+ /**
40
+ * Available only when outbound egress is permitted AND the host advertises a
41
+ * multimodal model. Mirrors `browser_vision`'s availability: registered-but-hidden
42
+ * (so the `media` catalog is stable) until a context advertises both
43
+ * `networkEgressAllowed !== false` and `capabilities.multimodal === true`.
44
+ */
45
+ export declare const multimodalAvailable: AvailabilityCheck;
46
+ /**
47
+ * Read a local image file as base64 + sniff its MIME type from the extension.
48
+ * Injectable so the unit test supplies image bytes without a real file on disk.
49
+ */
50
+ export type ImageReader = (path: string) => Promise<{
51
+ base64: string;
52
+ mediaType: string;
53
+ }>;
54
+ /** The outcome of a chokepoint-routed media call. */
55
+ export interface MediaModelResult {
56
+ /** Whether a model produced a response. */
57
+ readonly ok: boolean;
58
+ /** The model's textual response (analysis / description / refusal). */
59
+ readonly content?: string;
60
+ /** The model that answered (present once a credential resolves). */
61
+ readonly model?: string;
62
+ /**
63
+ * `true` when no credential resolved through the E9 chokepoint — the call
64
+ * degraded gracefully rather than throwing (mirrors `browser_vision`).
65
+ */
66
+ readonly aiUnavailable?: boolean;
67
+ /**
68
+ * `true` when the resolved model cannot serve the requested modality
69
+ * (e.g. true image synthesis / TTS audio). The tool does NOT construct a
70
+ * bespoke client for an unsupported modality (Gate-13) — it reports this.
71
+ */
72
+ readonly unsupported?: boolean;
73
+ /** A stable code + message when the call failed for another reason. */
74
+ readonly error?: {
75
+ readonly code: string;
76
+ readonly message: string;
77
+ };
78
+ }
79
+ /** Options for {@link registerMediaAgentTools} — all injectable for testing. */
80
+ export interface MediaAgentToolOptions {
81
+ /** The local-image reader. Defaults to a real `fs` read + MIME sniff. */
82
+ readonly readImage?: ImageReader;
83
+ /** Project root threaded into the E9 resolver (defaults to the resolver's own fallback). */
84
+ readonly projectRoot?: string;
85
+ }
86
+ /**
87
+ * Register the vision / media agent-tool family into `registry`. Pure
88
+ * registration — no model is resolved, no credential is read, no file is opened
89
+ * here; all of that happens later inside each tool's `execute` through the E9
90
+ * chokepoint (and the injected image reader). Import-time side-effect-free.
91
+ *
92
+ * @param registry - The registry to populate.
93
+ * @param options - Injectable image reader / project root (for testing).
94
+ */
95
+ export declare function registerMediaAgentTools(registry: AgentToolRegistry, options?: MediaAgentToolOptions): void;
96
+ /**
97
+ * Self-registration marker (AC1) — the identifier the
98
+ * {@link AgentToolRegistry.discover} bounded source scan greps for. Aliases
99
+ * {@link registerMediaAgentTools} so a future scan-dir discovery (or the built-in
100
+ * aggregator) can call it uniformly with the other agent-tool modules.
101
+ *
102
+ * @param registry - The registry to populate.
103
+ */
104
+ export declare function registerAgentTools(registry: AgentToolRegistry): void;
105
+ //# sourceMappingURL=media-agent-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-agent-tools.d.ts","sourceRoot":"","sources":["../../src/tools/media-agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAOH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAI7B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,iBAC2C,CAAC;AAE9E;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAuB3F,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED,gFAAgF;AAChF,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;IACjC,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AA4DD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,qBAA0B,GAClC,IAAI,CAsHN;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAEpE"}