@desplega.ai/agent-swarm 2.7.5 → 2.7.7

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 (319) hide show
  1. package/dist/{acp-adapter-g3ads55s.js → acp-adapter-7b4vk3h5.js} +5 -4
  2. package/dist/{actions-zwfykqqk.js → actions-3tt153af.js} +18 -17
  3. package/dist/{amp-adapter-z3s0ssdt.js → amp-adapter-njpts0yr.js} +1 -1
  4. package/dist/{anthropic-messages-x4q6rfq5.js → anthropic-messages-xey2skwx.js} +7 -7
  5. package/dist/{app-vmp4fgep.js → app-nky4378f.js} +3 -3
  6. package/dist/{assistant-vwde653f.js → assistant-jnb669pa.js} +24 -22
  7. package/dist/{azure-openai-responses-s1w5n70z.js → azure-openai-responses-26t7j9ra.js} +5 -5
  8. package/dist/{boot-reembed-375t7tbk.js → boot-reembed-9mgvaztt.js} +1 -1
  9. package/dist/{boot-reembed-gq9rcpnj.js → boot-reembed-qs2djdej.js} +1 -1
  10. package/dist/{boot-scrub-sweep-nd938kyf.js → boot-scrub-sweep-yjpdj7s1.js} +3 -3
  11. package/dist/{boot-seeds-aykx51v3.js → boot-seeds-5cm6ambd.js} +4 -4
  12. package/dist/{boxd-k1j26g3h.js → boxd-nv507va8.js} +5 -5
  13. package/dist/{claude-adapter-8j4hm099.js → claude-adapter-fn287zmm.js} +5 -4
  14. package/dist/{claude-managed-setup-0wyynpn1.js → claude-managed-setup-wtdz2mj2.js} +1 -1
  15. package/dist/{claude-sdk-session-q6wj5hmy.js → claude-sdk-session-x91kqyhm.js} +9677 -9514
  16. package/dist/{cli-j3jvnpe8.js → cli-08bmz9z9.js} +1 -1
  17. package/dist/{cli-gjr2y2xk.js → cli-0agcv1v5.js} +4 -1
  18. package/dist/{cli-y24sc29k.js → cli-1c6tzt8g.js} +30 -8
  19. package/dist/{cli-mjzynrse.js → cli-35rsp8ye.js} +1 -1
  20. package/dist/{cli-rpm2sgv0.js → cli-3fg0bdcv.js} +19 -2
  21. package/dist/{cli-nn4d8dne.js → cli-5b456bpf.js} +2 -2
  22. package/dist/{cli-bhjt02p8.js → cli-5jnhv72d.js} +1 -1
  23. package/dist/{cli-fqzx7gwa.js → cli-5zx699j9.js} +2 -2
  24. package/dist/{cli-hf6zt5m6.js → cli-69szn7w7.js} +17 -1
  25. package/dist/{cli-vqypxzh4.js → cli-6g0hb4cp.js} +8 -8
  26. package/dist/{cli-tqgg40ek.js → cli-6pfd54vx.js} +9 -8
  27. package/dist/{cli-bsn8nhrq.js → cli-6vcp76qk.js} +3 -3
  28. package/dist/{cli-zppwg9p9.js → cli-72v799xn.js} +1 -1
  29. package/dist/cli-82j36f2m.js +45 -0
  30. package/dist/{cli-hn9hxmz9.js → cli-8305gbq0.js} +29 -16
  31. package/dist/{cli-z8eh3ex8.js → cli-8sckt74b.js} +8 -8
  32. package/dist/{cli-bnz7a7qf.js → cli-95jzxcp3.js} +1 -1
  33. package/dist/{cli-0bxqnvq9.js → cli-adeegh7d.js} +29 -7
  34. package/dist/{cli-g61qxmge.js → cli-afkqkrtw.js} +3 -3
  35. package/dist/{cli-7a42nfy0.js → cli-ayayvfg4.js} +24 -4
  36. package/dist/{cli-bqt1mptt.js → cli-az48n0nr.js} +4 -4
  37. package/dist/{cli-z6jkx23q.js → cli-bfv7vdg6.js} +9 -9
  38. package/dist/{cli-pywf3eh5.js → cli-caj33vcq.js} +5 -5
  39. package/dist/{cli-5pag6rmn.js → cli-cb2a8pna.js} +1 -1
  40. package/dist/{cli-wvaawacd.js → cli-cppkf404.js} +5236 -72
  41. package/dist/{cli-mry0qzym.js → cli-ddaanqkd.js} +123 -10
  42. package/dist/{cli-0gey5fzy.js → cli-e0kmphd6.js} +2 -2
  43. package/dist/{cli-zh3fp8v2.js → cli-e46hg0xw.js} +1 -1
  44. package/dist/{cli-jm2vfpfd.js → cli-e5bzrn01.js} +1 -1
  45. package/dist/{cli-qxnf8z2z.js → cli-excnnjg2.js} +165 -153
  46. package/dist/{cli-71ptav7x.js → cli-ferkkrg9.js} +1 -1
  47. package/dist/{cli-vpf89f34.js → cli-fmjd0t1y.js} +3 -3
  48. package/dist/{cli-rm6hqj3z.js → cli-fyt2g4wd.js} +33 -139
  49. package/dist/cli-g08zdaec.js +55 -0
  50. package/dist/{cli-ehq736cn.js → cli-g7s47cc5.js} +4 -4
  51. package/dist/{cli-82ae98pz.js → cli-gz6q4eve.js} +3 -3
  52. package/dist/{cli-82jg7fp9.js → cli-he5nxaa8.js} +1 -1
  53. package/dist/{cli-rqkxrmgw.js → cli-je518txm.js} +39 -14
  54. package/dist/{cli-8hs41zy2.js → cli-jtjtabxe.js} +1 -1
  55. package/dist/{cli-611a1294.js → cli-k0wwfqbg.js} +18 -1
  56. package/dist/{cli-nzxr556s.js → cli-k1nje3v3.js} +38 -43
  57. package/dist/{cli-3h4nhjn8.js → cli-k8196sh2.js} +9 -7
  58. package/dist/{cli-afrrppsw.js → cli-k899ehvh.js} +2 -2
  59. package/dist/{cli-0731hvbw.js → cli-m0da8j35.js} +23 -9
  60. package/dist/cli-m2z8jagn.js +12078 -0
  61. package/dist/{cli-8veytvbh.js → cli-mkk9rnzz.js} +5 -5
  62. package/dist/{cli-7wspm5gm.js → cli-n6bv12jn.js} +528 -6
  63. package/dist/{cli-spknvxbq.js → cli-nmzhp1b5.js} +14 -12
  64. package/dist/{cli-p599f1qm.js → cli-p82cnnjq.js} +1 -1
  65. package/dist/{cli-xtjhfmpc.js → cli-pc6n7fre.js} +1 -1
  66. package/dist/{cli-vbyfwh92.js → cli-pjctyea3.js} +2 -2
  67. package/dist/{cli-nmbmy64z.js → cli-pq73h5mz.js} +3 -3
  68. package/dist/{cli-aa6yxc7m.js → cli-pz4rk021.js} +1 -1
  69. package/dist/{cli-7wcyk2s5.js → cli-q3tkegby.js} +1 -1
  70. package/dist/cli-qghe0h66.js +67 -0
  71. package/dist/{cli-6s7vdcta.js → cli-qh4d4tvk.js} +4 -4
  72. package/dist/{cli-mmwm7zbf.js → cli-rtt8g4v9.js} +1 -1
  73. package/dist/{cli-kg8hchyg.js → cli-sa02jsqt.js} +1 -1
  74. package/dist/{cli-1h3wcpbw.js → cli-snpj5zbj.js} +2 -2
  75. package/dist/{cli-a7v854rf.js → cli-tgrv9cjx.js} +263 -12
  76. package/dist/{cli-a47xy8eq.js → cli-vz22fyqv.js} +186 -54
  77. package/dist/{cli-1ayk1eas.js → cli-wk5yrfwd.js} +285 -42
  78. package/dist/{cli-1338796d.js → cli-ws19768n.js} +1755 -119
  79. package/dist/{cli-70r77n04.js → cli-xae4g51r.js} +1 -1
  80. package/dist/{cli-gf5hbmdr.js → cli-yjdgea32.js} +3 -3
  81. package/dist/{cli-xbkdm710.js → cli-yndmfxb3.js} +3 -3
  82. package/dist/{cli-rhw40jgb.js → cli-yyj3j5m4.js} +2 -2
  83. package/dist/cli.js +26 -25
  84. package/dist/{cloudflare-workers-ai-system-one-bm60fjm0.js → cloudflare-workers-ai-system-one-ef2a980q.js} +2 -2
  85. package/dist/{codex-adapter-q6k3gnyg.js → codex-adapter-cf2yxe9m.js} +3 -2
  86. package/dist/{codex-hook-9efm2x1m.js → codex-hook-a0c6g6t6.js} +1 -1
  87. package/dist/{codex-session-runner-3mwmk3d9.js → codex-session-runner-6vfzdgbd.js} +3 -2
  88. package/dist/{commands-evrenjn9.js → commands-t3mfy7vn.js} +9 -3
  89. package/dist/{controller-xjp8vswh.js → controller-q7xrbaz0.js} +8 -3
  90. package/dist/{controllers-connect-pp5jnxvc.js → controllers-connect-c6nm70kg.js} +20 -19
  91. package/dist/{cursor-adapter-yf47w4t0.js → cursor-adapter-ftd81ga8.js} +1 -1
  92. package/dist/{db-zxpw6aht.js → db-dk572x25.js} +3 -3
  93. package/dist/{db-rgfsh91f.js → db-vemtpmcc.js} +14 -4
  94. package/dist/{devtools-82fzqra8.js → devtools-qxfgbsqz.js} +1 -1
  95. package/dist/{dispatcher-smasgws7.js → dispatcher-kh7ecxh9.js} +17 -16
  96. package/dist/{docker-rrjhaqt9.js → docker-c1a3gqmf.js} +89 -22
  97. package/dist/{dsh-adapter-ftyy8dnp.js → dsh-adapter-v8628r89.js} +1 -1
  98. package/dist/{e2b-w1p0bnpm.js → e2b-fr12yccx.js} +5 -5
  99. package/dist/{e2b-qcaj675y.js → e2b-x6ywzak3.js} +3 -3
  100. package/dist/{easter-egg-3d-yyts7p16.js → easter-egg-3d-nenw4x63.js} +1 -1
  101. package/dist/{embedding-space-1z0mbg95.js → embedding-space-0jepb239.js} +6 -6
  102. package/dist/{embeddings-ygeg7tm7.js → embeddings-xxt49yxg.js} +1 -1
  103. package/dist/{execute-14qhqp4d.js → execute-1mhw6e4x.js} +1 -1
  104. package/dist/{external-channel-ttgrs3sx.js → external-channel-55v12e60.js} +2 -2
  105. package/dist/{fx-adapter-gt6pncj2.js → fx-adapter-bs8wqrk5.js} +6 -5
  106. package/dist/{google-generative-ai-yvmdxyxa.js → google-generative-ai-v94hr7h0.js} +5 -5
  107. package/dist/{google-vertex-jrtdh9gs.js → google-vertex-g7vr6cf8.js} +5 -5
  108. package/dist/{grok-adapter-sm4m5k4g.js → grok-adapter-gpjqmkcq.js} +6 -5
  109. package/dist/handlers-zxmp1ta4.js +32 -0
  110. package/dist/{heartbeat-qahz4p62.js → heartbeat-k42svnr0.js} +20 -19
  111. package/dist/{hook-4fd5wq5w.js → hook-114m7hap.js} +4 -3
  112. package/dist/{hook-kj3d398m.js → hook-6nphweh0.js} +24 -9
  113. package/dist/{http-1ted0j1k.js → http-r8cc4wz7.js} +1196 -211
  114. package/dist/index-a8phxqnk.js +37 -0
  115. package/dist/{index-q4b917zs.js → index-e3s8wmxy.js} +1 -1
  116. package/dist/{index-6rq3r5zb.js → index-fpk4bcd9.js} +1 -1
  117. package/dist/{index-5rk6rfzr.js → index-fvzke5kx.js} +1 -1
  118. package/dist/index-k6h00t4c.js +30 -0
  119. package/dist/{index-7v51awbn.js → index-nh3wyqdt.js} +1027 -577
  120. package/dist/{index-yqhz88yy.js → index-pxn30mse.js} +8 -8
  121. package/dist/index-xrz7te8h.js +33 -0
  122. package/dist/{keepalive-6cf311t5.js → keepalive-x060nt9p.js} +3 -3
  123. package/dist/lead-956sd2yc.js +71 -0
  124. package/dist/{maintenance-a4bm1bmt.js → maintenance-2xxfexhf.js} +1 -1
  125. package/dist/{mistral-conversations-4pmwj1c0.js → mistral-conversations-3gjpdb4b.js} +4 -4
  126. package/dist/{oauth-refresh-sweep-3h0dfw1k.js → oauth-refresh-sweep-fckc4ar5.js} +2 -2
  127. package/dist/{onboard-myn5hraa.js → onboard-zc48j237.js} +5 -5
  128. package/dist/{openai-codex-responses-44j573nm.js → openai-codex-responses-8pbxq9h5.js} +5 -5
  129. package/dist/{openai-completions-a4gee2a8.js → openai-completions-rm00s912.js} +4 -4
  130. package/dist/{openai-decisions-w4qkrcar.js → openai-decisions-8v957r2r.js} +1 -1
  131. package/dist/{openai-responses-rbp6h5kr.js → openai-responses-agxpf96k.js} +5 -5
  132. package/dist/{opencode-adapter-p2nkb5am.js → opencode-adapter-r690h1cr.js} +4 -3
  133. package/dist/{otel-impl-a1a0ef6b.js → otel-impl-r5xbh81q.js} +4 -4
  134. package/dist/{pi-mono-adapter-rzmpb72a.js → pi-mono-adapter-c7v8sdec.js} +7 -6
  135. package/dist/{pricing-refresh-83drrnxj.js → pricing-refresh-3pmre11v.js} +3 -3
  136. package/dist/{rbac-roles-s8y6ecb5.js → rbac-roles-3vbshwsb.js} +1 -1
  137. package/dist/{rbac-roles-0fb6e7pj.js → rbac-roles-910mmkgz.js} +2 -2
  138. package/dist/{render-v2-twmbgrz4.js → render-v2-pxykkbab.js} +3 -3
  139. package/dist/{resume-zfqc36xj.js → resume-adda0bwy.js} +6 -6
  140. package/dist/{runtime-qwggdpqr.js → runtime-fnbm7stk.js} +1 -1
  141. package/dist/{session-access-sc9pn9da.js → session-access-2fvamrdc.js} +4 -4
  142. package/dist/{session-source-backfill-qh07xr8g.js → session-source-backfill-08xvv0sm.js} +2 -2
  143. package/dist/{setup-4fr0m7a1.js → setup-1aqmvmh1.js} +3 -3
  144. package/dist/{typesafe-system-one-5mavm259.js → typesafe-system-one-0bmqcxfg.js} +2 -2
  145. package/dist/{virtual-modules-fh4ha15b.js → virtual-modules-d2pjk9j1.js} +5 -5
  146. package/dist/{work-objects-0wr8zxct.js → work-objects-9s0yrm5j.js} +20 -19
  147. package/dist/{worker-follow-up-ktyyazyp.js → worker-follow-up-3q78fqmr.js} +17 -16
  148. package/dist/worker-y15hy08h.js +71 -0
  149. package/openapi.json +289 -4
  150. package/package.json +9 -8
  151. package/src/apps/definition.ts +6 -5
  152. package/src/be/db/page-theme-tokens.ts +12 -0
  153. package/src/be/db/script-runs.ts +23 -0
  154. package/src/be/db/tasks/read.ts +131 -4
  155. package/src/be/db/tasks/write.ts +19 -0
  156. package/src/be/db-client.ts +114 -11
  157. package/src/be/db.ts +49 -6
  158. package/src/be/memory/providers/sqlite-store.ts +49 -12
  159. package/src/be/migrations/260_runtime_pool_cache.sql +20 -0
  160. package/src/be/migrations/262_session_visibility_indexes.sql +18 -0
  161. package/src/be/migrations/263_task_list_filter_index.sql +11 -0
  162. package/src/be/migrations/264_slack_thread_cover_index.sql +9 -0
  163. package/src/be/migrations/266_script_runs_source_task.sql +11 -0
  164. package/src/be/migrations/269_pages_design_system.sql +23 -0
  165. package/src/be/runtime-pools/cache-cleanup.ts +109 -0
  166. package/src/be/runtime-pools/db.ts +65 -6
  167. package/src/be/runtime-pools/remote-controller.ts +5 -0
  168. package/src/be/runtime-pools/supervisor.ts +33 -2
  169. package/src/be/scripts/typecheck.ts +22 -0
  170. package/src/be/seed/schedules-seeder.ts +0 -10
  171. package/src/be/seed-scripts/catalog/catalog-report.inline.ts +2 -0
  172. package/src/be/seed-scripts/catalog/catalog-report.ts +2 -0
  173. package/src/be/seed-scripts/catalog/memory-eval.ts +2 -0
  174. package/src/be/seed-scripts/catalog/swarm-update-check.ts +150 -0
  175. package/src/be/seed-scripts/catalog/task-failure-audit.ts +5 -1
  176. package/src/be/seed-scripts/index.ts +9 -0
  177. package/src/be/seed-skills/bundled-files.generated.json +3 -3
  178. package/src/be/swarm-config-guard.ts +32 -0
  179. package/src/be/task-auto-title-listener.ts +127 -0
  180. package/src/commands/controller.ts +4 -0
  181. package/src/commands/entrypoint-api-readiness.ts +74 -0
  182. package/src/commands/onboard/agent-fs-version.ts +1 -1
  183. package/src/commands/profile-sync.ts +151 -16
  184. package/src/commands/runner.ts +15 -7
  185. package/src/hooks/hook.ts +20 -9
  186. package/src/http/index.ts +4 -1
  187. package/src/http/list-total-cache.ts +14 -7
  188. package/src/http/memory.ts +38 -9
  189. package/src/http/pages-public.ts +93 -129
  190. package/src/http/pages.ts +94 -21
  191. package/src/http/script-runs.ts +174 -5
  192. package/src/http/status.ts +10 -2
  193. package/src/http/tasks.ts +4 -2
  194. package/src/pages/browser-sdk.ts +48 -21
  195. package/src/pages/color-literals.ts +115 -0
  196. package/src/pages/page-head.ts +766 -0
  197. package/src/pages/version.ts +3 -0
  198. package/src/providers/amp-adapter.ts +1 -1
  199. package/src/providers/codex-adapter.ts +1 -0
  200. package/src/providers/codex-app-server.ts +27 -1
  201. package/src/providers/fx-adapter.ts +1 -1
  202. package/src/providers/pi-mono-extension.ts +30 -15
  203. package/src/runtime-providers/controller-protocol.ts +14 -1
  204. package/src/runtime-providers/controller.ts +5 -0
  205. package/src/runtime-providers/docker.ts +108 -23
  206. package/src/runtime-providers/types.ts +16 -0
  207. package/src/script-workflows/workflow-ctx.ts +8 -0
  208. package/src/scripts-runtime/types/stdlib.d.ts +22 -0
  209. package/src/scripts-runtime/types/swarm-sdk.d.ts +22 -0
  210. package/src/server-user.ts +1 -0
  211. package/src/slack/commands.ts +5 -1
  212. package/src/slack/handlers.ts +37 -2
  213. package/src/slack/left-threads.ts +27 -4
  214. package/src/tasks/follow-up-gate.ts +318 -0
  215. package/src/tasks/follow-up-redelegation-guard.ts +155 -0
  216. package/src/tasks/worker-follow-up.ts +21 -1
  217. package/src/tests/claude-artifacts-read-script.test.ts +209 -0
  218. package/src/tests/codex-app-server.test.ts +59 -0
  219. package/src/tests/codex-gateway-route.test.ts +50 -1
  220. package/src/tests/create-page-tool.test.ts +501 -0
  221. package/src/tests/db-client-busy-retry.test.ts +81 -0
  222. package/src/tests/db-client.test.ts +21 -0
  223. package/src/tests/db-task-read-contract.test.ts +9 -2
  224. package/src/tests/db-task-write-contract.test.ts +7 -1
  225. package/src/tests/db-tasks-read.test.ts +21 -0
  226. package/src/tests/entrypoint-api-readiness.test.ts +416 -210
  227. package/src/tests/explicit-model-validation.test.ts +14 -8
  228. package/src/tests/fixtures/pages/head-v1.html +56 -0
  229. package/src/tests/follow-up-gate-shadow.test.ts +513 -0
  230. package/src/tests/follow-up-redelivery-guard.test.ts +432 -202
  231. package/src/tests/identity-field-budget.test.ts +1 -1
  232. package/src/tests/internal-ai/credentials.test.ts +62 -0
  233. package/src/tests/internal-ai/task-title.test.ts +283 -0
  234. package/src/tests/list-total-cache.test.ts +27 -2
  235. package/src/tests/memory-fts-populate.test.ts +11 -9
  236. package/src/tests/memory-retrieval-purge.test.ts +80 -0
  237. package/src/tests/merge-gate-detect-changes.test.ts +145 -0
  238. package/src/tests/migration-260-runtime-pool-cache.test.ts +118 -0
  239. package/src/tests/page-proxy.test.ts +1 -1
  240. package/src/tests/page-session-dev-cookie.test.ts +188 -0
  241. package/src/tests/pages-frame-ancestors.test.ts +28 -1
  242. package/src/tests/pages-head-v2.test.ts +534 -0
  243. package/src/tests/pages-http.test.ts +330 -0
  244. package/src/tests/pages-public-html.test.ts +43 -0
  245. package/src/tests/pages-storage.test.ts +182 -0
  246. package/src/tests/pages-versioning.test.ts +72 -0
  247. package/src/tests/profile-sync-stale-writeback.test.ts +334 -0
  248. package/src/tests/profile-sync.test.ts +11 -15
  249. package/src/tests/query-audit-plans.test.ts +27 -0
  250. package/src/tests/runtime-cache-cleanup.test.ts +367 -0
  251. package/src/tests/runtime-e2b-pools.test.ts +41 -0
  252. package/src/tests/runtime-pools-db.test.ts +98 -0
  253. package/src/tests/runtime-pools-http.test.ts +29 -0
  254. package/src/tests/runtime-providers-docker.test.ts +253 -0
  255. package/src/tests/runtime-remote-controller.test.ts +66 -2
  256. package/src/tests/runtime-supervisor.test.ts +66 -2
  257. package/src/tests/scheduled-task-required-params-migration.test.ts +3 -1
  258. package/src/tests/script-connections.test.ts +13 -0
  259. package/src/tests/script-runs-http.test.ts +684 -2
  260. package/src/tests/seed-registry.test.ts +28 -6
  261. package/src/tests/seed-schedules.test.ts +61 -8
  262. package/src/tests/seed-scripts.test.ts +168 -2
  263. package/src/tests/slack-leave-thread.test.ts +145 -5
  264. package/src/tests/slack-render-v2-query-plans.test.ts +24 -2
  265. package/src/tests/status.test.ts +11 -0
  266. package/src/tests/swarm-diff.test.ts +121 -2
  267. package/src/tests/task-auto-title-config-guard.test.ts +37 -0
  268. package/src/tests/task-auto-title-listener.test.ts +165 -0
  269. package/src/tests/tasks-readable-row.test.ts +155 -0
  270. package/src/tests/theme-import.test.ts +758 -0
  271. package/src/tests/themes-page-theme.test.ts +155 -0
  272. package/src/tests/themes-presets.test.ts +172 -0
  273. package/src/tests/workflow-script-principal.test.ts +2 -1
  274. package/src/themes/classics.ts +949 -0
  275. package/src/themes/import.ts +420 -0
  276. package/src/themes/page-fields.ts +40 -0
  277. package/src/themes/page-theme.ts +102 -0
  278. package/src/themes/presets.ts +561 -0
  279. package/src/themes/tokens.ts +218 -0
  280. package/src/tools/app-upsert.ts +1 -1
  281. package/src/tools/create-page.ts +118 -12
  282. package/src/tools/send-task.ts +35 -47
  283. package/src/tools/slack-leave-thread.ts +1 -1
  284. package/src/tools/task-dedup.ts +45 -21
  285. package/src/tools/utils.ts +33 -0
  286. package/src/types.ts +83 -3
  287. package/src/utils/constants.ts +19 -0
  288. package/src/utils/follow-up-gate-schedule-ids.ts +13 -0
  289. package/src/utils/internal-ai/credentials.ts +146 -93
  290. package/src/utils/internal-ai/index.ts +10 -0
  291. package/src/utils/internal-ai/models.ts +18 -0
  292. package/src/utils/internal-ai/task-title.ts +282 -0
  293. package/src/utils/page-session.ts +37 -0
  294. package/templates/schedules/daily-status-report/content.md +88 -2
  295. package/templates/schedules/daily-swarm-update-check/content.md +16 -40
  296. package/templates/skills/apps/SKILL.md +1 -1
  297. package/templates/skills/apps/content.md +1 -1
  298. package/templates/skills/composio-google-docs/content.md +10 -0
  299. package/templates/skills/heartbeat-runbook/content.md +1 -1
  300. package/templates/skills/pages/config.json +1 -1
  301. package/templates/skills/pages/content.md +539 -86
  302. package/templates/skills/pages/files/examples/annotated-pr.html +21 -12
  303. package/templates/skills/pages/files/examples/multiplayer-board.html +41 -41
  304. package/templates/skills/pages/files/examples/report-page.html +125 -124
  305. package/templates/skills/script-workflows/content.md +19 -1
  306. package/templates/skills/swarm-docs/content.md +1 -0
  307. package/templates/skills/swarm-scripts/SKILL.md +2 -0
  308. package/templates/skills/swarm-scripts/content.md +2 -0
  309. package/dist/cli-2pnswgh8.js +0 -189
  310. package/dist/cli-dznrgaep.js +0 -30
  311. package/dist/cli-w3hcrxht.js +0 -6985
  312. package/dist/handlers-vwmba1m2.js +0 -31
  313. package/dist/index-5r71rf98.js +0 -32
  314. package/dist/index-anmwxs87.js +0 -29
  315. package/dist/index-spp0ra5c.js +0 -36
  316. package/dist/lead-fjy418cw.js +0 -69
  317. package/dist/worker-0c5tyzqe.js +0 -69
  318. package/templates/schedules/daily-workflow-health-audit/config.json +0 -19
  319. package/templates/schedules/daily-workflow-health-audit/content.md +0 -191
@@ -4,7 +4,7 @@ import {
4
4
  postClassifierRequest,
5
5
  parseClassifierUsage,
6
6
  init_classifier_shared
7
- } from "./cli-vpf89f34.js";
7
+ } from "./cli-fmjd0t1y.js";
8
8
  import {
9
9
  normalizeProviderError,
10
10
  formatProviderError,
@@ -9,8 +9,8 @@ import {
9
9
  } from "./cli-6ecv5wm5.js";
10
10
  import {
11
11
  calculateCost,
12
- init_models2
13
- } from "./cli-1h3wcpbw.js";
12
+ init_models
13
+ } from "./cli-snpj5zbj.js";
14
14
  import {
15
15
  getIdentityHeaders,
16
16
  init_identity2
@@ -103,7 +103,7 @@ function parseClassifierUsage(value, model) {
103
103
  return usage;
104
104
  }
105
105
  var init_classifier_shared = __esm(() => {
106
- init_models2();
106
+ init_models();
107
107
  init_headers();
108
108
  init_identity2();
109
109
  init_provider_retry();
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  applyOpenRouterBaseUrlOverride2,
11
11
  buildOpenAICompatibleProviderBlock2
12
- } from "./cli-zppwg9p9.js";
12
+ } from "./cli-72v799xn.js";
13
13
  import {
14
14
  fetchInstalledMcpServers
15
15
  } from "./cli-bst1vp7e.js";
@@ -30,7 +30,7 @@ import {
30
30
  import {
31
31
  DEFAULT_MODEL_TIER_MAP,
32
32
  init_types4
33
- } from "./cli-7wspm5gm.js";
33
+ } from "./cli-n6bv12jn.js";
34
34
  import {
35
35
  resolveTemplateFromCode,
36
36
  resolveTemplateAsync,
@@ -58,7 +58,7 @@ import {
58
58
  import {
59
59
  init_package,
60
60
  package_default
61
- } from "./cli-tqgg40ek.js";
61
+ } from "./cli-6pfd54vx.js";
62
62
  import {
63
63
  scrubSecrets,
64
64
  init_secret_scrubber
@@ -1592,6 +1592,8 @@ var zSubagentUpdate = object2({
1592
1592
  state: defaultOnError(zStateUpdate.nullish(), () => {
1593
1593
  return;
1594
1594
  }),
1595
+ cwd: string2().nullish(),
1596
+ additionalDirectories: array2(string2()).nullish(),
1595
1597
  _meta: defaultOnError(record2(string2(), unknown()).nullish(), () => {
1596
1598
  return;
1597
1599
  })
@@ -2204,6 +2206,17 @@ var zCancelRequestNotification = object2({
2204
2206
 
2205
2207
  // node_modules/@agentclientprotocol/sdk/dist/core/jsonrpc.js
2206
2208
  var CANCEL_REQUEST_METHOD = "$/cancel_request";
2209
+ function treatSessionNotFoundAsSuccess(method, response, success) {
2210
+ if (method !== "session/close" && method !== "session/delete") {
2211
+ return response;
2212
+ }
2213
+ return response.catch((error) => {
2214
+ if (error instanceof RequestError && error.code === -32002) {
2215
+ return success();
2216
+ }
2217
+ throw error;
2218
+ });
2219
+ }
2207
2220
  function isRequestMessage(value) {
2208
2221
  return isJsonRpcEnvelope(value) && "id" in value && typeof value["method"] === "string" && isJsonRpcId(value["id"]);
2209
2222
  }
@@ -2236,28 +2249,6 @@ function isJsonRpcId(value) {
2236
2249
  function isResponseShapedMessage(value) {
2237
2250
  return isRecord(value) && !("method" in value) && (("id" in value) || ("result" in value) || ("error" in value));
2238
2251
  }
2239
- function isResponseBatch(batch) {
2240
- let hasValidCall = false;
2241
- let hasValidResponse = false;
2242
- let hasCallShape = false;
2243
- let hasResponseShape = false;
2244
- for (const entry of batch) {
2245
- hasValidCall ||= isRequestMessage(entry) || isNotificationMessage(entry);
2246
- hasValidResponse ||= isResponseMessage(entry);
2247
- if (!isRecord(entry)) {
2248
- continue;
2249
- }
2250
- hasCallShape ||= "method" in entry;
2251
- hasResponseShape ||= "result" in entry || "error" in entry;
2252
- }
2253
- if (hasValidCall) {
2254
- return false;
2255
- }
2256
- if (hasValidResponse) {
2257
- return true;
2258
- }
2259
- return hasResponseShape && !hasCallShape;
2260
- }
2261
2252
  function cancelRequestId(params) {
2262
2253
  if (!isRecord(params) || !isJsonRpcId(params["requestId"])) {
2263
2254
  return;
@@ -2371,7 +2362,6 @@ class RequestResponder {
2371
2362
  });
2372
2363
  }
2373
2364
  }
2374
- var requestBatchSizes = new WeakMap;
2375
2365
  var nullIdResponders = new WeakSet;
2376
2366
  class HandlerRegistration {
2377
2367
  disposeHandler;
@@ -2405,9 +2395,6 @@ class ConnectionContext {
2405
2395
  sendNotification(method, params) {
2406
2396
  return this.connection.sendNotification(method, params);
2407
2397
  }
2408
- sendBatch(entries) {
2409
- return this.connection.sendBatch(entries);
2410
- }
2411
2398
  sendCancelRequest(requestId) {
2412
2399
  return this.connection.sendCancelRequest(requestId);
2413
2400
  }
@@ -2436,7 +2423,6 @@ class Connection {
2436
2423
  retryQueue = [];
2437
2424
  context = new ConnectionContext(this);
2438
2425
  receiveReader;
2439
- allowBatches = true;
2440
2426
  constructor(requestHandlerOrStream, notificationHandlerOrHandlers, streamOrOptions, options) {
2441
2427
  if (typeof requestHandlerOrStream === "function") {
2442
2428
  const requestHandler = requestHandlerOrStream;
@@ -2497,55 +2483,13 @@ class Connection {
2497
2483
  return rejectedPromise(this.closedReason());
2498
2484
  }
2499
2485
  const request = this.prepareRequest(method, params, mapResponse, options);
2500
- const requestSent = this.sendWireMessage(request.message);
2486
+ const requestSent = this.sendMessage(request.message);
2501
2487
  requestSent.catch(() => {});
2502
2488
  if (options.cancellationSignal?.aborted) {
2503
2489
  request.cancel();
2504
2490
  }
2505
2491
  return request.response;
2506
2492
  }
2507
- sendBatch(entries) {
2508
- if (this.abortController.signal.aborted) {
2509
- return rejectedPromise(this.closedReason());
2510
- }
2511
- if (!this.allowBatches) {
2512
- return rejectedPromise(new TypeError("JSON-RPC batches are not supported on this connection"));
2513
- }
2514
- if (entries.length === 0) {
2515
- return rejectedPromise(new TypeError("JSON-RPC batch must contain at least one entry"));
2516
- }
2517
- const messages = [];
2518
- const cancellations = [];
2519
- const outputs = [];
2520
- for (const entry of entries) {
2521
- if (entry.kind === "notification") {
2522
- messages.push({
2523
- jsonrpc: "2.0",
2524
- method: entry.method,
2525
- params: entry.params
2526
- });
2527
- outputs.push(Promise.resolve(undefined));
2528
- continue;
2529
- }
2530
- const request = this.prepareRequest(entry.method, entry.params, entry.mapResponse, entry.options);
2531
- messages.push(request.message);
2532
- outputs.push(request.response);
2533
- cancellations.push({
2534
- signal: entry.options?.cancellationSignal,
2535
- cancel: request.cancel
2536
- });
2537
- }
2538
- const batch = messages;
2539
- const batchSent = this.sendWireMessage(batch);
2540
- for (const cancellation of cancellations) {
2541
- if (cancellation.signal?.aborted) {
2542
- cancellation.cancel();
2543
- }
2544
- }
2545
- const response = Promise.all([batchSent, ...outputs]).then(([, ...resolved]) => resolved);
2546
- response.catch(() => {});
2547
- return response;
2548
- }
2549
2493
  sendCancelRequest(requestId) {
2550
2494
  return this.sendNotification(CANCEL_REQUEST_METHOD, { requestId });
2551
2495
  }
@@ -2553,7 +2497,7 @@ class Connection {
2553
2497
  if (this.abortController.signal.aborted) {
2554
2498
  return rejectedPromise(this.closedReason());
2555
2499
  }
2556
- return this.sendWireMessage({ jsonrpc: "2.0", method, params });
2500
+ return this.sendMessage({ jsonrpc: "2.0", method, params });
2557
2501
  }
2558
2502
  prepareRequest(method, params, mapResponse, options = {}) {
2559
2503
  const id = this.nextRequestId++;
@@ -2613,7 +2557,6 @@ class Connection {
2613
2557
  this.stream = stream;
2614
2558
  this.staticHandlers = handlers;
2615
2559
  this.fallbackHandlers = [...options?.fallbackHandlers ?? []];
2616
- this.allowBatches = options?.allowBatches ?? true;
2617
2560
  this.closedPromise = new Promise((resolve) => {
2618
2561
  this.abortController.signal.addEventListener("abort", () => resolve());
2619
2562
  });
@@ -2646,7 +2589,7 @@ class Connection {
2646
2589
  if (done) {
2647
2590
  break;
2648
2591
  }
2649
- this.receiveWireMessage(message);
2592
+ this.receiveUnvalidatedMessage(message);
2650
2593
  }
2651
2594
  } finally {
2652
2595
  if (this.receiveReader === reader) {
@@ -2660,65 +2603,18 @@ class Connection {
2660
2603
  this.close(closeError);
2661
2604
  }
2662
2605
  }
2663
- receiveWireMessage(message) {
2606
+ receiveUnvalidatedMessage(message) {
2664
2607
  if (Array.isArray(message)) {
2665
- if (!this.allowBatches) {
2666
- this.close(new TypeError("JSON-RPC batches are not supported on this connection"));
2667
- return;
2668
- }
2669
- this.receiveBatch(message);
2608
+ this.sendMessage(protocolErrorResponse(RequestError.invalidRequest(undefined, "JSON-RPC batches are not supported"))).catch(() => {});
2670
2609
  return;
2671
2610
  }
2672
2611
  if (!isRequestMessage(message) && !isNotificationMessage(message) && !isResponseShapedMessage(message)) {
2673
- this.sendWireMessage(protocolErrorResponse(RequestError.invalidRequest(message))).catch(() => {});
2612
+ this.sendMessage(protocolErrorResponse(RequestError.invalidRequest(message))).catch(() => {});
2674
2613
  return;
2675
2614
  }
2676
2615
  this.receiveMessage(message);
2677
2616
  }
2678
- receiveBatch(batch) {
2679
- if (batch.length === 0) {
2680
- this.sendWireMessage(protocolErrorResponse(RequestError.invalidRequest(batch))).catch(() => {});
2681
- return;
2682
- }
2683
- const responseBatch = isResponseBatch(batch);
2684
- const responseCount = responseBatch ? 0 : batch.reduce((count, message) => count + (isNotificationMessage(message) ? 0 : 1), 0);
2685
- let remaining = responseCount;
2686
- let remainingNotifications = batch.reduce((count, message) => count + (isNotificationMessage(message) ? 1 : 0), 0);
2687
- let responseSent = false;
2688
- const responses = [];
2689
- const sendResponsesIfReady = async () => {
2690
- if (responseSent || remaining !== 0 || remainingNotifications !== 0 || responses.length === 0) {
2691
- return;
2692
- }
2693
- responseSent = true;
2694
- await this.sendWireMessage(responses);
2695
- };
2696
- const collectResponse = async (response) => {
2697
- responses.push(response);
2698
- remaining -= 1;
2699
- await sendResponsesIfReady();
2700
- };
2701
- for (const message of batch) {
2702
- if (responseBatch) {
2703
- if (isResponseShapedMessage(message)) {
2704
- this.receiveMessage(message);
2705
- }
2706
- continue;
2707
- }
2708
- if (!isRequestMessage(message) && !isNotificationMessage(message)) {
2709
- collectResponse(protocolErrorResponse(RequestError.invalidRequest(message))).catch(() => {});
2710
- continue;
2711
- }
2712
- const processing = this.receiveMessage(message, isRequestMessage(message) ? collectResponse : undefined, batch.length);
2713
- if (isNotificationMessage(message)) {
2714
- processing.finally(() => {
2715
- remainingNotifications -= 1;
2716
- sendResponsesIfReady().catch((error) => this.close(error));
2717
- });
2718
- }
2719
- }
2720
- }
2721
- receiveMessage(message, sendResponse, batchSize) {
2617
+ receiveMessage(message) {
2722
2618
  if (this.abortController.signal.aborted) {
2723
2619
  return Promise.resolve();
2724
2620
  }
@@ -2730,7 +2626,7 @@ class Connection {
2730
2626
  if (!("id" in message)) {
2731
2627
  this.handleProtocolNotification(message);
2732
2628
  }
2733
- return this.processIncomingMessage(this.toIncomingMessage(message, sendResponse, batchSize)).catch((error) => this.close(error));
2629
+ return this.processIncomingMessage(this.toIncomingMessage(message)).catch((error) => this.close(error));
2734
2630
  } else if ("id" in message) {
2735
2631
  this.handleResponse(message);
2736
2632
  } else {
@@ -2785,7 +2681,7 @@ class Connection {
2785
2681
  }
2786
2682
  }
2787
2683
  }
2788
- toIncomingMessage(message, sendResponse, batchSize) {
2684
+ toIncomingMessage(message) {
2789
2685
  if ("id" in message) {
2790
2686
  const abortController = new AbortController;
2791
2687
  this.incomingRequests.set(message.id, abortController);
@@ -2800,11 +2696,8 @@ class Connection {
2800
2696
  id: nullIdResponders.has(responder) ? null : message.id,
2801
2697
  ...result
2802
2698
  };
2803
- return sendResponse ? sendResponse(response) : this.sendWireMessage(response);
2699
+ return this.sendMessage(response);
2804
2700
  }, abortController.signal, finishRequest);
2805
- if (batchSize !== undefined) {
2806
- requestBatchSizes.set(responder, batchSize);
2807
- }
2808
2701
  return {
2809
2702
  kind: "request",
2810
2703
  method: message.method,
@@ -2855,7 +2748,7 @@ class Connection {
2855
2748
  closedReason() {
2856
2749
  return this.abortController.signal.reason ?? new Error("ACP connection closed");
2857
2750
  }
2858
- async sendWireMessage(message) {
2751
+ async sendMessage(message) {
2859
2752
  if (this.abortController.signal.aborted) {
2860
2753
  return rejectedPromise(this.closedReason());
2861
2754
  }
@@ -3185,7 +3078,9 @@ function ndJsonStream(output, input, options = {}) {
3185
3078
  await writeJson(protocolErrorResponse(RequestError.parseError()));
3186
3079
  return;
3187
3080
  }
3188
- if (isRecord(message) || Array.isArray(message)) {
3081
+ if (Array.isArray(message)) {
3082
+ await writeJson(protocolErrorResponse(RequestError.invalidRequest(undefined, "JSON-RPC batches are not supported")));
3083
+ } else if (isRecord(message)) {
3189
3084
  controller.enqueue(message);
3190
3085
  } else {
3191
3086
  await writeJson(protocolErrorResponse(RequestError.invalidRequest(message)));
@@ -3513,7 +3408,7 @@ class ClientContext extends AcpContext {
3513
3408
  }
3514
3409
  request(method, params, options) {
3515
3410
  const spec = agentRequestSpecsByMethod[method];
3516
- return this.sendRequest(method, params, spec?.mapResponse, options);
3411
+ return treatSessionNotFoundAsSuccess(method, this.sendRequest(method, params, spec?.mapResponse, options), () => spec?.mapResponse ? spec.mapResponse({}) : {});
3517
3412
  }
3518
3413
  notify(method, params) {
3519
3414
  return this.sendNotification(method, params);
@@ -3896,7 +3791,6 @@ function runConnectHandlers(connection, handlers) {
3896
3791
  var appBuilder = Symbol("appBuilder");
3897
3792
  var runAgentConnectHandlers = Symbol("runAgentConnectHandlers");
3898
3793
  var runClientConnectHandlers = Symbol("runClientConnectHandlers");
3899
- var stableConnectionOptions = { allowBatches: false };
3900
3794
  function client(options) {
3901
3795
  return new ClientApp(options);
3902
3796
  }
@@ -3982,7 +3876,7 @@ class ClientApp {
3982
3876
  return state;
3983
3877
  }
3984
3878
  const [thisStream, peerStream] = memoryStreamPair();
3985
- const peerRawConnection = target[appBuilder]().connect(peerStream, stableConnectionOptions);
3879
+ const peerRawConnection = target[appBuilder]().connect(peerStream);
3986
3880
  const peerConnection = agentConnection(peerRawConnection);
3987
3881
  const state = this.openStreamConnection(thisStream);
3988
3882
  state.rawConnection.closed.then(() => peerConnection.close());
@@ -3998,7 +3892,7 @@ class ClientApp {
3998
3892
  return state;
3999
3893
  }
4000
3894
  openStreamConnection(stream) {
4001
- const rawConnection = this.builder.connect(stream, stableConnectionOptions);
3895
+ const rawConnection = this.builder.connect(stream);
4002
3896
  return {
4003
3897
  rawConnection,
4004
3898
  connection: clientConnection(rawConnection, this.connectHandlers)
@@ -0,0 +1,55 @@
1
+ import {
2
+ getKv2,
3
+ upsertKv2,
4
+ deleteKv2,
5
+ init_db4
6
+ } from "./cli-wk5yrfwd.js";
7
+ import {
8
+ isEnvFlagEnabled,
9
+ init_env_flag
10
+ } from "./cli-cebvbc9t.js";
11
+ import {
12
+ __esm
13
+ } from "./cli-242037k3.js";
14
+
15
+ // src/slack/left-threads.ts
16
+ function isSlackLeaveThreadDisabled() {
17
+ return isEnvFlagEnabled(SLACK_LEAVE_THREAD_DISABLE, false);
18
+ }
19
+ function isSlackLeaveThreadCommand(text, botUserId) {
20
+ const withoutBotMentions = botUserId ? (text ?? "").replaceAll(`<@${botUserId}>`, "") : text ?? "";
21
+ return withoutBotMentions.trim() === "!leave";
22
+ }
23
+ function threadKey(channelId, threadTs) {
24
+ return `${channelId}:${threadTs}`;
25
+ }
26
+ async function leaveSlackThread(channelId, threadTs, leftBy) {
27
+ await upsertKv2({
28
+ namespace: SLACK_LEFT_THREAD_KV_NAMESPACE,
29
+ key: threadKey(channelId, threadTs),
30
+ value: { ...leftBy, leftAt: new Date().toISOString() },
31
+ valueType: "json"
32
+ });
33
+ }
34
+ async function isSlackThreadLeft(channelId, threadTs) {
35
+ return await getKv2(SLACK_LEFT_THREAD_KV_NAMESPACE, threadKey(channelId, threadTs)) !== null;
36
+ }
37
+ async function shouldSkipLeftSlackThread(channelId, threadTs, botMentioned) {
38
+ if (!threadTs)
39
+ return false;
40
+ const key = threadKey(channelId, threadTs);
41
+ if (botMentioned) {
42
+ if (await deleteKv2(SLACK_LEFT_THREAD_KV_NAMESPACE, key)) {
43
+ console.log(`[Slack] Rejoined left thread ${key}: bot mentioned`);
44
+ }
45
+ return false;
46
+ }
47
+ return isSlackThreadLeft(channelId, threadTs);
48
+ }
49
+ var SLACK_LEFT_THREAD_KV_NAMESPACE = "slack-left-thread", SLACK_LEAVE_THREAD_DISABLE = "SLACK_LEAVE_THREAD_DISABLE", SLACK_LEFT_THREAD_CONFIRMATION = "Left this thread. @mention the swarm to bring it back.";
50
+ var init_left_threads = __esm(() => {
51
+ init_db4();
52
+ init_env_flag();
53
+ });
54
+
55
+ export { SLACK_LEAVE_THREAD_DISABLE, isSlackLeaveThreadDisabled, SLACK_LEFT_THREAD_CONFIRMATION, isSlackLeaveThreadCommand, leaveSlackThread, isSlackThreadLeft, shouldSkipLeftSlackThread, init_left_threads };
@@ -36,7 +36,7 @@ import {
36
36
  splitErrorToolResultImages,
37
37
  transformMessages,
38
38
  init_transform_messages
39
- } from "./cli-bsn8nhrq.js";
39
+ } from "./cli-6vcp76qk.js";
40
40
  import {
41
41
  sanitizeSurrogates,
42
42
  init_sanitize_unicode
@@ -63,8 +63,8 @@ import {
63
63
  collapseSystemMessages,
64
64
  init_transcript,
65
65
  calculateCost,
66
- init_models2
67
- } from "./cli-1h3wcpbw.js";
66
+ init_models
67
+ } from "./cli-snpj5zbj.js";
68
68
  import {
69
69
  AssistantMessageEventStream,
70
70
  init_event_stream,
@@ -4819,7 +4819,7 @@ function omit2(obj, ...keys) {
4819
4819
  }
4820
4820
 
4821
4821
  // node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js
4822
- init_models2();
4822
+ init_models();
4823
4823
  init_diagnostics();
4824
4824
  init_error_body();
4825
4825
  init_event_stream();
@@ -5,7 +5,7 @@ import {
5
5
  } from "./cli-dhar9qay.js";
6
6
  import {
7
7
  runStopHookSessionSummarySubprocess
8
- } from "./cli-0731hvbw.js";
8
+ } from "./cli-m0da8j35.js";
9
9
  import {
10
10
  redactRateLimitEventLine,
11
11
  SessionErrorTracker,
@@ -55,7 +55,7 @@ import {
55
55
  import {
56
56
  withFileLock,
57
57
  init_file_lock
58
- } from "./cli-a7v854rf.js";
58
+ } from "./cli-tgrv9cjx.js";
59
59
  import {
60
60
  getOpenRouterAttributionHeaders,
61
61
  init_openrouter_base_url
@@ -1263,7 +1263,7 @@ class ClaudeAdapter2 {
1263
1263
  if (transport === "sdk" && isClaudeBridgeEffective(sourceEnv)) {
1264
1264
  throw new Error("CLAUDE_TRANSPORT=sdk cannot run with an effective Claude Bridge configuration. Select CLI transport or disable the bridge.");
1265
1265
  }
1266
- const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-q6wj5hmy.js") : undefined;
1266
+ const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-x91kqyhm.js") : undefined;
1267
1267
  claudeSdk?.validateClaudeSdkAdditionalArgs([
1268
1268
  ...claudeBinaryArgv.slice(1),
1269
1269
  ...config.additionalArgs ?? []
@@ -15393,7 +15393,7 @@ var styles_default = styles2;
15393
15393
  // node_modules/ink/build/reconciler.js
15394
15394
  if (process3.env["DEV"] === "true") {
15395
15395
  try {
15396
- await import("./devtools-82fzqra8.js");
15396
+ await import("./devtools-qxfgbsqz.js");
15397
15397
  } catch (error) {
15398
15398
  if (error.code === "ERR_MODULE_NOT_FOUND") {
15399
15399
  console.warn(`
@@ -4,7 +4,7 @@ import {
4
4
  CONTROLLER_COMMAND_TIMEOUT_MS,
5
5
  RuntimeHandleSchema,
6
6
  ControllerStatusResultSchema
7
- } from "./cli-rpm2sgv0.js";
7
+ } from "./cli-3fg0bdcv.js";
8
8
  import {
9
9
  getDbClient2,
10
10
  isRuntimePoolsEnabled,
@@ -21,8 +21,11 @@ import {
21
21
  upsertSwarmConfig2,
22
22
  getResolvedConfig2,
23
23
  init_db4
24
- } from "./cli-1ayk1eas.js";
24
+ } from "./cli-wk5yrfwd.js";
25
25
  import {
26
+ getPoolCache,
27
+ reconcileCacheReleases,
28
+ init_cache_cleanup,
26
29
  getRuntimeController2,
27
30
  getRuntimeControllerTarget2,
28
31
  checkE2bControllerConfig2,
@@ -32,7 +35,7 @@ import {
32
35
  getPoolForAgent2,
33
36
  resolvePoolDelivery2,
34
37
  init_db2
35
- } from "./cli-mry0qzym.js";
38
+ } from "./cli-ddaanqkd.js";
36
39
  import {
37
40
  workflowEventBus2,
38
41
  init_event_bus
@@ -42,7 +45,7 @@ import {
42
45
  init_worker_follow_up,
43
46
  canClaim,
44
47
  init_budget_admission
45
- } from "./cli-1338796d.js";
48
+ } from "./cli-ws19768n.js";
46
49
  import {
47
50
  runtimeStaleThresholdMinutes,
48
51
  getRuntimeInstanceById,
@@ -51,7 +54,7 @@ import {
51
54
  listRuntimeInstancesForAgent,
52
55
  listRuntimeInstancesForPool,
53
56
  init_multi_runtime
54
- } from "./cli-spknvxbq.js";
57
+ } from "./cli-nmzhp1b5.js";
55
58
  import {
56
59
  isMultiRuntimeEnabled,
57
60
  init_multi_runtime2
@@ -60,20 +63,20 @@ import {
60
63
  canProvisionKind,
61
64
  createRuntimeProvider,
62
65
  init_runtime_providers
63
- } from "./cli-xbkdm710.js";
66
+ } from "./cli-yndmfxb3.js";
64
67
  import {
65
68
  mintRuntimeToken,
66
69
  init_users
67
- } from "./cli-bhjt02p8.js";
70
+ } from "./cli-5jnhv72d.js";
68
71
  import {
69
72
  import_websocket,
70
73
  init_wrapper2
71
- } from "./cli-dznrgaep.js";
74
+ } from "./cli-69szn7w7.js";
72
75
  import {
73
76
  TERMINAL_TASK_STATUSES,
74
77
  isTerminalTaskStatus,
75
78
  init_types4
76
- } from "./cli-7wspm5gm.js";
79
+ } from "./cli-n6bv12jn.js";
77
80
  import {
78
81
  init_zod
79
82
  } from "./cli-k5671be5.js";
@@ -93,11 +96,11 @@ import {
93
96
  import {
94
97
  resolveWorkerApiUrl,
95
98
  init_worker_api_url
96
- } from "./cli-70r77n04.js";
99
+ } from "./cli-xae4g51r.js";
97
100
  import {
98
101
  RUNTIME_LABELS,
99
102
  init_types5
100
- } from "./cli-gjr2y2xk.js";
103
+ } from "./cli-0agcv1v5.js";
101
104
  import {
102
105
  scrubSecrets,
103
106
  registerVolatileSecret,
@@ -118,6 +121,7 @@ init_budget_admission();
118
121
  init_db4();
119
122
  init_multi_runtime();
120
123
  init_users();
124
+ init_cache_cleanup();
121
125
 
122
126
  // src/be/runtime-pools/controllers.ts
123
127
  init_runtime_providers();
@@ -162,12 +166,17 @@ class RemoteController {
162
166
  renew;
163
167
  pause;
164
168
  resume;
169
+ releaseCache;
165
170
  constructor(id, ws, traits, workerApiUrl, timeouts = {}) {
166
171
  this.id = id;
167
172
  this.ws = ws;
168
173
  this.traits = traits;
169
174
  this.workerApiUrl = workerApiUrl;
170
175
  this.timeouts = timeouts;
176
+ if (traits.persistentCache)
177
+ this.releaseCache = async (cache) => {
178
+ await this.call({ op: "release-cache", payload: cache });
179
+ };
171
180
  if (traits.maxTtlSec)
172
181
  this.renew = async (handle, ttlSec) => object2({ endAt: string2() }).parse(await this.call({ op: "renew", payload: { handle, ttlSec } }));
173
182
  if (traits.supportsPause) {
@@ -537,7 +546,7 @@ async function recoverSessions(runtimeId, reason) {
537
546
  }
538
547
  if (!sessions.length)
539
548
  return;
540
- const { remediateTaskForDeadRuntime } = await import("./heartbeat-qahz4p62.js");
549
+ const { remediateTaskForDeadRuntime } = await import("./heartbeat-k42svnr0.js");
541
550
  for (const session of sessions) {
542
551
  try {
543
552
  const task = await getTaskById2(session.taskId);
@@ -818,6 +827,9 @@ async function provisionRuntime(pool, agent, controller, ownerId, now = new Date
818
827
  if (templateId)
819
828
  env.TEMPLATE_ID = templateId;
820
829
  const ttlSec = pool.kind === "e2b" ? poolLeaseTtl(pool, controller) : undefined;
830
+ const currentPoolCache = await getPoolCache(pool.id);
831
+ const currentCache = currentPoolCache?.controllerId === pool.placements[0] ? currentPoolCache : null;
832
+ const cache = currentCache && controller.traits.persistentCache ? { key: currentCache.key, mountPath: currentCache.mountPath } : undefined;
821
833
  signal?.throwIfAborted();
822
834
  const handle = await controller.provision({
823
835
  runtimeId,
@@ -828,6 +840,7 @@ async function provisionRuntime(pool, agent, controller, ownerId, now = new Date
828
840
  ...ttlSec === undefined ? {} : { ttlSec },
829
841
  env,
830
842
  resources: pool.resources ?? undefined,
843
+ ...cache ? { cache } : {},
831
844
  labels: {
832
845
  [RUNTIME_LABELS.runtimeId]: runtimeId,
833
846
  [RUNTIME_LABELS.poolId]: pool.id,
@@ -840,6 +853,17 @@ async function provisionRuntime(pool, agent, controller, ownerId, now = new Date
840
853
  await markRuntimeTerminated(runtimeId, "Supervisor stopped during provision");
841
854
  return false;
842
855
  }
856
+ const cacheWarning = currentCache ? !controller.traits.persistentCache ? "Controller does not support persistent caches; runtime started without cache" : handle.meta?.cacheWarning : undefined;
857
+ const cacheErrorPrefix = "Persistent cache: ";
858
+ const cacheError = cacheWarning ? cacheErrorPrefix + scrubSecrets(cacheWarning) : null;
859
+ await getDbClient2().run(`UPDATE runtime_pools SET last_error = ?, last_error_at = ?
860
+ WHERE id = ? AND (last_error IS NULL OR substr(last_error, 1, ?) = ?)`, [
861
+ cacheError,
862
+ cacheError ? new Date().toISOString() : null,
863
+ pool.id,
864
+ cacheErrorPrefix.length,
865
+ cacheErrorPrefix
866
+ ]);
843
867
  await getDbClient2().run("UPDATE runtime_instances SET external_handle = ?, lease_expires_at = ?, created_at = COALESCE(?, created_at), updated_at = ? WHERE id = ?", [
844
868
  JSON.stringify(handle),
845
869
  ttlSec === undefined ? null : handle.meta?.leaseExpiresAt ?? new Date(now.getTime() + ttlSec * 1000).toISOString(),
@@ -1286,8 +1310,9 @@ async function reconcilePools(now, commands, signal) {
1286
1310
  async function reconcileOnce(opts = {}) {
1287
1311
  if (!isRuntimePoolsEnabled() || !isMultiRuntimeEnabled() || inFlight)
1288
1312
  return;
1289
- tickAbort = new AbortController;
1290
- inFlight = reconcilePools(opts.now ?? new Date, opts.getControllerCommands ?? getControllerCommands, tickAbort.signal);
1313
+ const tick = new AbortController;
1314
+ tickAbort = tick;
1315
+ inFlight = reconcilePools(opts.now ?? new Date, opts.getControllerCommands ?? getControllerCommands, tick.signal).then(() => reconcileCacheReleases(opts.getControllerCommands ?? getControllerCommands, tick.signal));
1291
1316
  try {
1292
1317
  await inFlight;
1293
1318
  } catch (error) {
@@ -4,7 +4,7 @@ import {
4
4
  invalidateTelemetryUserRole,
5
5
  init_telemetry_identity,
6
6
  init_db4
7
- } from "./cli-1ayk1eas.js";
7
+ } from "./cli-wk5yrfwd.js";
8
8
  import {
9
9
  PermissionVerbSchema,
10
10
  init_rbac