@desplega.ai/agent-swarm 2.7.4 → 2.7.6

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 (326) hide show
  1. package/README.md +1 -1
  2. package/dist/acp-adapter-bp91d37f.js +15 -0
  3. package/dist/{actions-gfrr9vb7.js → actions-yj0eeaqh.js} +19 -18
  4. package/dist/{amp-adapter-0s58gm46.js → amp-adapter-4pg9h34q.js} +3 -3
  5. package/dist/{app-stvq692g.js → app-909e97cr.js} +3 -3
  6. package/dist/{assistant-5s37fr9n.js → assistant-qdyb5fyy.js} +32 -23
  7. package/dist/{boot-reembed-yzy1841n.js → boot-reembed-fk0s9z18.js} +1 -1
  8. package/dist/{boot-reembed-cv82gz7y.js → boot-reembed-gs1rzrnh.js} +1 -1
  9. package/dist/{boot-scrub-sweep-8k4q95ap.js → boot-scrub-sweep-4qfd4kfx.js} +4 -4
  10. package/dist/{boot-seeds-ftt9htah.js → boot-seeds-yr00k13d.js} +4 -4
  11. package/dist/{boxd-515v1t8z.js → boxd-vdmfssd9.js} +5 -5
  12. package/dist/{claude-adapter-t00wrzeh.js → claude-adapter-qta1f1xn.js} +7 -7
  13. package/dist/{claude-managed-adapter-g6vmjccb.js → claude-managed-adapter-dvs2xw5n.js} +2 -2
  14. package/dist/{claude-managed-setup-afpa82f7.js → claude-managed-setup-sc6j4dm0.js} +3 -3
  15. package/dist/{claude-sdk-session-vj0c2azx.js → claude-sdk-session-zgrz6yvc.js} +9175 -9076
  16. package/dist/{cli-gjr2y2xk.js → cli-0agcv1v5.js} +4 -1
  17. package/dist/{cli-edmm9d9y.js → cli-0at8w34w.js} +7 -7
  18. package/dist/{cli-a81qevyg.js → cli-0qatpy8q.js} +20 -36
  19. package/dist/{cli-bcz074zx.js → cli-0yv5z2pg.js} +1 -1
  20. package/dist/{cli-a4btqqft.js → cli-1b7btd38.js} +1 -1
  21. package/dist/{cli-a2jw6ee5.js → cli-1p89xny0.js} +1 -1
  22. package/dist/{cli-v726afdm.js → cli-2pnswgh8.js} +1 -1
  23. package/dist/{cli-jkt52mgt.js → cli-386tyxxg.js} +2 -2
  24. package/dist/{cli-az0bpf8p.js → cli-3ypk9vk1.js} +3 -3
  25. package/dist/{cli-wk9md5px.js → cli-436532ck.js} +4 -4
  26. package/dist/{cli-7n5sbw0z.js → cli-4necwtsv.js} +5 -5
  27. package/dist/cli-54t00gt8.js +151 -0
  28. package/dist/{cli-655xm9ms.js → cli-583frbyr.js} +1 -1
  29. package/dist/{cli-4r12t6w6.js → cli-5c4hjzne.js} +101 -4
  30. package/dist/{cli-hf6zt5m6.js → cli-69szn7w7.js} +17 -1
  31. package/dist/{cli-rtk9g7av.js → cli-73jzwksr.js} +6 -2
  32. package/dist/{cli-jg0nfda6.js → cli-75gkpjvw.js} +52 -21
  33. package/dist/{cli-wcmnan2g.js → cli-89knwags.js} +5 -5
  34. package/dist/{cli-pwyevs29.js → cli-8bc1w0tw.js} +22 -21
  35. package/dist/{cli-t282jgab.js → cli-8snvgs5r.js} +41 -16
  36. package/dist/{cli-vqgnyh76.js → cli-98rw5dt5.js} +15 -3
  37. package/dist/{cli-9cctx1tn.js → cli-a22h291q.js} +1 -1
  38. package/dist/{cli-ycm6180s.js → cli-a7v854rf.js} +5 -3
  39. package/dist/{cli-98pke4vk.js → cli-ae7mrdf9.js} +2 -2
  40. package/dist/{cli-je8yeyc5.js → cli-bjb3z51z.js} +5 -5
  41. package/dist/{cli-mc97xy2s.js → cli-c60vetmm.js} +16 -4
  42. package/dist/{cli-j4kw3rsx.js → cli-cm5yqn35.js} +18 -0
  43. package/dist/{cli-wndv9p7g.js → cli-decfb6v8.js} +6 -6
  44. package/dist/{cli-h55y2bjc.js → cli-dhar9qay.js} +2 -2
  45. package/dist/{cli-8yy525ad.js → cli-drr5v6av.js} +2 -2
  46. package/dist/{cli-5gr1g711.js → cli-dxae2yg7.js} +2 -2
  47. package/dist/{cli-pe09p6dv.js → cli-e3r2neck.js} +8 -7
  48. package/dist/{cli-13jvmew3.js → cli-ekwks2vs.js} +7 -7
  49. package/dist/{cli-jg4p5t36.js → cli-es6va8jk.js} +121 -51
  50. package/dist/{cli-j4kt1mpb.js → cli-faxe6thg.js} +3 -3
  51. package/dist/{cli-tzrpv5sc.js → cli-ftyxyspd.js} +1 -1
  52. package/dist/cli-fw2w0kva.js +47 -0
  53. package/dist/{cli-2dfbv8qr.js → cli-fy6x31ps.js} +1 -0
  54. package/dist/{cli-aq58fk5m.js → cli-g83s9ewh.js} +7 -1
  55. package/dist/cli-gdhpcbhf.js +55 -0
  56. package/dist/{cli-82jg7fp9.js → cli-he5nxaa8.js} +1 -1
  57. package/dist/{cli-8veytvbh.js → cli-he9wchme.js} +1 -1
  58. package/dist/{cli-k76tgq03.js → cli-hgaazk69.js} +2 -2
  59. package/dist/{cli-d2pzqej1.js → cli-hr2e2fft.js} +741 -7
  60. package/dist/{cli-dae4sbgy.js → cli-jm2vfpfd.js} +2 -2
  61. package/dist/{cli-1s1dqn1j.js → cli-k2gzwsj2.js} +297 -140
  62. package/dist/{cli-b1afgtj3.js → cli-kqdg1bsb.js} +3 -3
  63. package/dist/cli-m2z8jagn.js +12078 -0
  64. package/dist/{cli-mvckssyq.js → cli-m48g6p95.js} +5 -5
  65. package/dist/{cli-bwty35gx.js → cli-mthwvjre.js} +1 -1
  66. package/dist/{cli-41z8xwj0.js → cli-nhrvpaj7.js} +34 -8
  67. package/dist/{cli-ahd90bwt.js → cli-nwj0ee2w.js} +6 -6
  68. package/dist/{cli-kvtc7aez.js → cli-p5gp8pcx.js} +44 -14
  69. package/dist/{cli-avgcz4ra.js → cli-pd7vagab.js} +436 -171
  70. package/dist/{cli-zn15c46z.js → cli-q0k1w5zd.js} +1 -1
  71. package/dist/{cli-bq2pcphn.js → cli-rmmmrjkd.js} +1 -1
  72. package/dist/{cli-2qpvmmkw.js → cli-s0qnd4wv.js} +1 -1
  73. package/dist/{cli-kg8hchyg.js → cli-sa02jsqt.js} +1 -1
  74. package/dist/{cli-1yekbyqm.js → cli-shpbx5ee.js} +283 -82
  75. package/dist/{cli-9y354g3j.js → cli-srye3vdt.js} +1 -1
  76. package/dist/{cli-byqfbnjw.js → cli-svj5090z.js} +9 -9
  77. package/dist/{cli-gcbdjt47.js → cli-vfym7wmz.js} +6 -6
  78. package/dist/{cli-v1yw3wha.js → cli-vvpx3gsx.js} +4 -4
  79. package/dist/{cli-a1fhj4n9.js → cli-w6dt9ged.js} +2 -2
  80. package/dist/{cli-1gm8jcyr.js → cli-waqbxg08.js} +5232 -68
  81. package/dist/{cli-5hjced2v.js → cli-wp9sp1qb.js} +6 -6
  82. package/dist/{cli-eny54typ.js → cli-wx3rhnm0.js} +1 -1
  83. package/dist/{cli-s0exq74r.js → cli-xbbndvjy.js} +3 -3
  84. package/dist/{cli-f255yaqn.js → cli-xds5f77d.js} +3 -3
  85. package/dist/{cli-0sbkss7h.js → cli-xnqgpshy.js} +2 -2
  86. package/dist/{cli-0fgr1w9b.js → cli-xnrwazav.js} +20 -3
  87. package/dist/{cli-gf5hbmdr.js → cli-yjdgea32.js} +3 -3
  88. package/dist/{cli-cq1pf336.js → cli-yn4kxs06.js} +124 -11
  89. package/dist/{cli-224epwwf.js → cli-yx4kfngt.js} +3 -3
  90. package/dist/{cli-eqx6k993.js → cli-yy3rhsdw.js} +47 -13
  91. package/dist/{cli-36g23z21.js → cli-zbbwez0r.js} +4 -4
  92. package/dist/{cli-ktmvb20s.js → cli-zm72anhg.js} +12 -12
  93. package/dist/cli.js +26 -25
  94. package/dist/{codex-adapter-g0gctw29.js → codex-adapter-ayd1fb6h.js} +5 -5
  95. package/dist/{codex-hook-vrzz2xhr.js → codex-hook-9efm2x1m.js} +1 -1
  96. package/dist/{codex-login-0gg46ygn.js → codex-login-y0pmff1c.js} +1 -1
  97. package/dist/{codex-session-runner-dr2cxe1c.js → codex-session-runner-jesa32xc.js} +6 -6
  98. package/dist/{commands-1p07cvff.js → commands-hanewgf2.js} +9 -3
  99. package/dist/{controller-z0s7sv6r.js → controller-dt1n3c1q.js} +9 -4
  100. package/dist/{controllers-connect-x9kvvhyk.js → controllers-connect-xx8x64n5.js} +22 -21
  101. package/dist/{cursor-adapter-m5b98pvk.js → cursor-adapter-9s4dwwdw.js} +2 -2
  102. package/dist/{db-capk2raj.js → db-3vttcbv4.js} +3 -3
  103. package/dist/{db-rsh04kh3.js → db-9dv0g1ab.js} +12 -4
  104. package/dist/{devin-adapter-yxm87fe9.js → devin-adapter-r9phbnc9.js} +1 -1
  105. package/dist/{devtools-82fzqra8.js → devtools-qxfgbsqz.js} +1 -1
  106. package/dist/{dispatcher-304q6fwa.js → dispatcher-tx9hd1sv.js} +18 -17
  107. package/dist/{docker-7rxt0rry.js → docker-c1a3gqmf.js} +91 -24
  108. package/dist/{dsh-adapter-btewem0y.js → dsh-adapter-007y4ejs.js} +2 -2
  109. package/dist/{e2b-renc0k8q.js → e2b-a19d28rz.js} +4 -4
  110. package/dist/{e2b-7fc9b9bd.js → e2b-we6hs6q5.js} +6 -6
  111. package/dist/{easter-egg-3d-fm1p3n4d.js → easter-egg-3d-rgbrqb8s.js} +1 -1
  112. package/dist/{embedding-space-s68v49ct.js → embedding-space-ny1e2940.js} +6 -6
  113. package/dist/{embeddings-4ms3604w.js → embeddings-2t386t13.js} +1 -1
  114. package/dist/{event-bus-dfjx2qdh.js → event-bus-g0ka3pbw.js} +1 -1
  115. package/dist/{execute-mcdgccjs.js → execute-pksh0ceh.js} +1 -1
  116. package/dist/{external-channel-9dxwfztn.js → external-channel-phgmhmd7.js} +2 -2
  117. package/dist/fx-adapter-fy8rr921.js +18 -0
  118. package/dist/{google-generative-ai-yvmdxyxa.js → google-generative-ai-8y3m3k4b.js} +1 -1
  119. package/dist/{google-vertex-jrtdh9gs.js → google-vertex-w3v98n7b.js} +1 -1
  120. package/dist/{grok-adapter-05ecv4h0.js → grok-adapter-q0abvpaj.js} +8 -8
  121. package/dist/handlers-by3sfxyx.js +32 -0
  122. package/dist/{heartbeat-3n94heh3.js → heartbeat-kadyek8p.js} +21 -20
  123. package/dist/{hook-aadrn69x.js → hook-5zs3msf6.js} +6 -6
  124. package/dist/{hook-zxwje86c.js → hook-9k551xnj.js} +4 -4
  125. package/dist/{http-xzxk9mst.js → http-mhz9vw1f.js} +272 -103
  126. package/dist/index-4f2pvxae.js +37 -0
  127. package/dist/index-98gz7tmp.js +30 -0
  128. package/dist/{index-5rk6rfzr.js → index-fvzke5kx.js} +1 -1
  129. package/dist/index-k08z2cak.js +33 -0
  130. package/dist/{index-yqhz88yy.js → index-pxn30mse.js} +8 -8
  131. package/dist/{index-d34f6r87.js → index-q361cg2f.js} +1 -1
  132. package/dist/{index-9j4zwcht.js → index-rvr00sg7.js} +168 -675
  133. package/dist/{index-qeb82z37.js → index-vdygbq10.js} +1 -1
  134. package/dist/{keepalive-w4aakbyk.js → keepalive-w56f32cg.js} +4 -4
  135. package/dist/lead-enq35nqp.js +70 -0
  136. package/dist/{maintenance-hbptpk6p.js → maintenance-7mdgxcea.js} +1 -1
  137. package/dist/{oauth-refresh-sweep-217semrv.js → oauth-refresh-sweep-29txy9vk.js} +3 -3
  138. package/dist/{onboard-vz2s5df3.js → onboard-kpsrkarj.js} +5 -5
  139. package/dist/{opencode-adapter-gtfd7d7v.js → opencode-adapter-j25vm3rr.js} +5 -5
  140. package/dist/{otel-impl-aefave37.js → otel-impl-6kkct7a8.js} +2 -2
  141. package/dist/{pi-mono-adapter-f8h5yseh.js → pi-mono-adapter-exhkzhn2.js} +117 -23
  142. package/dist/{pricing-refresh-m1yhh9ya.js → pricing-refresh-n2x7jh6k.js} +3 -3
  143. package/dist/{rbac-roles-rrw8twdz.js → rbac-roles-81ypx6es.js} +1 -1
  144. package/dist/{rbac-roles-svj72cdf.js → rbac-roles-b5htkjby.js} +2 -2
  145. package/dist/{render-v2-amwbnfxh.js → render-v2-qn6jmpk4.js} +3 -3
  146. package/dist/{resume-9cd6wf6z.js → resume-wd30wx23.js} +7 -7
  147. package/dist/{runtime-fp4vrx7m.js → runtime-4hsg7h60.js} +1 -1
  148. package/dist/{session-access-21t6yjyg.js → session-access-5qvfevhk.js} +4 -4
  149. package/dist/{session-source-backfill-pxbzcsc6.js → session-source-backfill-n1czavbr.js} +3 -3
  150. package/dist/{setup-4592tqz4.js → setup-dnb56qy5.js} +3 -3
  151. package/dist/{virtual-modules-gzfnpmnz.js → virtual-modules-76xxv9fs.js} +2 -2
  152. package/dist/{work-objects-t9tcf174.js → work-objects-4n21tfkm.js} +21 -20
  153. package/dist/{worker-follow-up-q32jh4yk.js → worker-follow-up-77hvzxww.js} +18 -17
  154. package/dist/worker-gg1576j3.js +70 -0
  155. package/dist/{x-b6wxntdt.js → x-vmmye1kb.js} +2 -2
  156. package/openapi.json +189 -32
  157. package/package.json +8 -7
  158. package/src/be/db/script-runs.ts +23 -0
  159. package/src/be/db/session-summaries.ts +8 -2
  160. package/src/be/db/session-tree.ts +174 -61
  161. package/src/be/db/session-visibility.ts +5 -4
  162. package/src/be/db/tasks/read.ts +122 -3
  163. package/src/be/db-client.ts +8 -5
  164. package/src/be/db.ts +23 -8
  165. package/src/be/memory/providers/sqlite-store.ts +49 -12
  166. package/src/be/migrations/259_session_summaries_open_tasks.sql +111 -0
  167. package/src/be/migrations/260_runtime_pool_cache.sql +20 -0
  168. package/src/be/migrations/262_session_visibility_indexes.sql +18 -0
  169. package/src/be/migrations/263_task_list_filter_index.sql +11 -0
  170. package/src/be/migrations/264_slack_thread_cover_index.sql +9 -0
  171. package/src/be/migrations/266_script_runs_source_task.sql +11 -0
  172. package/src/be/model-validation.ts +5 -1
  173. package/src/be/pricing-normalize.ts +7 -2
  174. package/src/be/runtime-pools/cache-cleanup.ts +109 -0
  175. package/src/be/runtime-pools/db.ts +65 -6
  176. package/src/be/runtime-pools/remote-controller.ts +5 -0
  177. package/src/be/runtime-pools/supervisor.ts +33 -2
  178. package/src/be/scripts/typecheck.ts +23 -0
  179. package/src/be/seed/schedules-seeder.ts +135 -9
  180. package/src/be/seed/workflows-seeder.ts +65 -1
  181. package/src/be/seed-pricing.ts +23 -0
  182. package/src/be/seed-scripts/catalog/task-failure-audit.ts +5 -1
  183. package/src/be/steering.ts +50 -3
  184. package/src/be/swarm-config-guard.ts +1 -0
  185. package/src/commands/controller.ts +4 -0
  186. package/src/commands/entrypoint-api-readiness.ts +74 -0
  187. package/src/commands/provider-credentials.ts +29 -2
  188. package/src/commands/runner.ts +86 -5
  189. package/src/extensions/contract-types.generated.ts +1 -1
  190. package/src/extensions/contract.ts +27 -1
  191. package/src/extensions/dispatcher.ts +4 -0
  192. package/src/http/agents.ts +1 -0
  193. package/src/http/index.ts +1 -1
  194. package/src/http/list-total-cache.ts +14 -7
  195. package/src/http/mcp-bridge.ts +4 -0
  196. package/src/http/memory.ts +38 -9
  197. package/src/http/script-runs.ts +174 -5
  198. package/src/http/status.ts +10 -2
  199. package/src/http/tasks.ts +4 -2
  200. package/src/integrations/chat-sdk/inbound.ts +15 -5
  201. package/src/integrations/chat-sdk/steering.ts +3 -1
  202. package/src/kv-reserved-namespaces.ts +2 -0
  203. package/src/prompts/base-prompt.ts +4 -1
  204. package/src/prompts/session-templates.ts +26 -0
  205. package/src/providers/acp-adapter.ts +190 -26
  206. package/src/providers/acp-targets.ts +306 -6
  207. package/src/providers/amp-adapter.ts +1 -1
  208. package/src/providers/codex-adapter.ts +9 -44
  209. package/src/providers/codex-oauth/flow.ts +24 -3
  210. package/src/providers/codex-oauth/storage.ts +56 -17
  211. package/src/providers/codex-oauth/subscription.ts +67 -0
  212. package/src/providers/fx-adapter.ts +211 -0
  213. package/src/providers/index.ts +5 -1
  214. package/src/providers/mcp-loopback-proxy.ts +94 -0
  215. package/src/providers/pi-mono-adapter.ts +98 -13
  216. package/src/providers/pricing-sources.md +8 -0
  217. package/src/providers/reasoning-effort.ts +17 -1
  218. package/src/providers/types.ts +2 -1
  219. package/src/runtime-providers/controller-protocol.ts +14 -1
  220. package/src/runtime-providers/controller.ts +5 -0
  221. package/src/runtime-providers/docker.ts +108 -23
  222. package/src/runtime-providers/types.ts +16 -0
  223. package/src/scheduler/scheduler.ts +36 -3
  224. package/src/script-workflows/workflow-ctx.ts +8 -0
  225. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  226. package/src/scripts-runtime/types/stdlib.d.ts +27 -0
  227. package/src/scripts-runtime/types/swarm-extension.d.ts +33 -0
  228. package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -0
  229. package/src/server-user.ts +1 -0
  230. package/src/server.ts +7 -0
  231. package/src/slack/assistant.ts +17 -1
  232. package/src/slack/commands.ts +5 -1
  233. package/src/slack/handlers.ts +53 -5
  234. package/src/slack/left-threads.ts +88 -0
  235. package/src/slack/steering.ts +3 -0
  236. package/src/slack/thread-buffer.ts +40 -16
  237. package/src/tasks/follow-up-redelegation-guard.ts +155 -0
  238. package/src/tests/acp-adapter.test.ts +79 -0
  239. package/src/tests/base-prompt.test.ts +12 -0
  240. package/src/tests/chat-sdk-inbound.test.ts +30 -0
  241. package/src/tests/chatgpt-subscription-model-groups.test.ts +62 -0
  242. package/src/tests/chatgpt-subscription-pi.test.ts +170 -0
  243. package/src/tests/chatgpt-subscription-session-bench.test.ts +198 -0
  244. package/src/tests/claude-artifacts-read-script.test.ts +209 -0
  245. package/src/tests/codex-oauth-credential-info.test.ts +40 -0
  246. package/src/tests/codex-oauth-refresh-egress.test.ts +194 -0
  247. package/src/tests/context-window.test.ts +7 -0
  248. package/src/tests/db-client.test.ts +21 -0
  249. package/src/tests/db-task-read-contract.test.ts +8 -2
  250. package/src/tests/db-task-write-contract.test.ts +5 -1
  251. package/src/tests/entrypoint-api-readiness.test.ts +416 -210
  252. package/src/tests/explicit-model-validation.test.ts +113 -8
  253. package/src/tests/extensions-run-context.test.ts +11 -0
  254. package/src/tests/extensions-steering.test.ts +353 -0
  255. package/src/tests/extensions-validate.test.ts +5 -0
  256. package/src/tests/fixtures/extensions/steering-policy/hooks.ts +39 -0
  257. package/src/tests/fixtures/extensions/steering-policy/manifest.json +7 -0
  258. package/src/tests/fixtures/fake-fx.ts +167 -0
  259. package/src/tests/fixtures/fx/acp-responses-recorded.json +157 -0
  260. package/src/tests/fixtures/fx/acp-updates-recorded.jsonl +15 -0
  261. package/src/tests/follow-up-redelivery-guard.test.ts +432 -202
  262. package/src/tests/fx-adapter.test.ts +771 -0
  263. package/src/tests/grok-adapter.test.ts +36 -0
  264. package/src/tests/list-total-cache.test.ts +27 -2
  265. package/src/tests/mcp-loopback-proxy.test.ts +193 -0
  266. package/src/tests/memory-fts-populate.test.ts +11 -9
  267. package/src/tests/memory-retrieval-purge.test.ts +80 -0
  268. package/src/tests/migration-260-runtime-pool-cache.test.ts +118 -0
  269. package/src/tests/model-tier-resolution.test.ts +3 -3
  270. package/src/tests/pricing-refresh.test.ts +5 -5
  271. package/src/tests/prompt-template-session.test.ts +5 -3
  272. package/src/tests/provider-registration.test.ts +2 -1
  273. package/src/tests/query-audit-plans.test.ts +30 -2
  274. package/src/tests/runtime-cache-cleanup.test.ts +367 -0
  275. package/src/tests/runtime-e2b-pools.test.ts +41 -0
  276. package/src/tests/runtime-pools-db.test.ts +98 -0
  277. package/src/tests/runtime-pools-http.test.ts +29 -0
  278. package/src/tests/runtime-providers-docker.test.ts +253 -0
  279. package/src/tests/runtime-remote-controller.test.ts +66 -2
  280. package/src/tests/runtime-supervisor.test.ts +66 -2
  281. package/src/tests/script-connections.test.ts +13 -0
  282. package/src/tests/script-runs-http.test.ts +684 -2
  283. package/src/tests/seed-model-profiles.test.ts +2 -2
  284. package/src/tests/seed-schedules.test.ts +138 -0
  285. package/src/tests/seed-scripts.test.ts +26 -0
  286. package/src/tests/session-cost-recompute-unit.test.ts +39 -0
  287. package/src/tests/session-costs-golden.test.ts +26 -0
  288. package/src/tests/session-summaries-plans.test.ts +120 -0
  289. package/src/tests/session-summaries.test.ts +72 -12
  290. package/src/tests/sessions-tree.test.ts +11 -3
  291. package/src/tests/slack-leave-thread.test.ts +571 -0
  292. package/src/tests/slack-render-v2-query-plans.test.ts +24 -2
  293. package/src/tests/status.test.ts +11 -0
  294. package/src/tests/tasks-readable-row.test.ts +155 -0
  295. package/src/tests/tool-annotations.test.ts +2 -1
  296. package/src/tests/workflow-engine-v2.test.ts +42 -0
  297. package/src/tests/workflow-script-principal.test.ts +207 -7
  298. package/src/tools/send-task.ts +35 -47
  299. package/src/tools/slack-leave-thread.ts +104 -0
  300. package/src/tools/steer-task.ts +3 -2
  301. package/src/tools/task-dedup.ts +45 -21
  302. package/src/tools/tool-config.ts +2 -1
  303. package/src/types.ts +57 -0
  304. package/src/utils/codex-auth-failure.ts +30 -0
  305. package/src/utils/context-window.ts +4 -1
  306. package/src/utils/credentials.ts +7 -0
  307. package/src/utils/fx-models.ts +43 -0
  308. package/src/workflows/cooldown.ts +3 -2
  309. package/src/workflows/engine.ts +24 -9
  310. package/templates/schedules/dreaming-daily/config.json +1 -1
  311. package/templates/schedules/dreaming-daily/content.md +6 -14
  312. package/templates/skills/composio-google-docs/content.md +10 -0
  313. package/templates/skills/script-workflows/content.md +19 -1
  314. package/templates/skills/swarm-docs/content.md +2 -0
  315. package/templates/skills/swarm-scripts/SKILL.md +2 -0
  316. package/templates/skills/swarm-scripts/content.md +2 -0
  317. package/templates/workflows/dreaming/content.md +5 -1
  318. package/dist/acp-adapter-96dc64m2.js +0 -15
  319. package/dist/cli-dznrgaep.js +0 -30
  320. package/dist/cli-w3hcrxht.js +0 -6985
  321. package/dist/handlers-jg7v74ty.js +0 -31
  322. package/dist/index-8c1zbz59.js +0 -29
  323. package/dist/index-8k8tmfxd.js +0 -32
  324. package/dist/index-hq617xdj.js +0 -36
  325. package/dist/lead-567kw7x3.js +0 -68
  326. package/dist/worker-fjdqra6q.js +0 -68
@@ -68,10 +68,6 @@ import {
68
68
  resolveTriggerSurface,
69
69
  emitTaskTelemetry,
70
70
  init_telemetry_trigger,
71
- CODEX_AUTH_FAILURE_BENCH_THRESHOLD,
72
- CODEX_AUTH_WATCH_NAMESPACE,
73
- codexAuthBenchMarkerKey,
74
- init_codex_auth_failure,
75
71
  HeartbeatExpiryError,
76
72
  init_heartbeat_expiry,
77
73
  isRuntimePoolsEnabled,
@@ -231,14 +227,6 @@ import {
231
227
  init_db3,
232
228
  loadSecretRegistry,
233
229
  init_secret_registry,
234
- STEERING_MOVED_ERROR,
235
- SteeringRequestError,
236
- isSteeringEnabled,
237
- getTaskSteeringFields,
238
- getTaskSteeringFieldsForTasks,
239
- markSteeringUndeliverable,
240
- requestSteering,
241
- init_steering2,
242
230
  getWorkflowRunSummary,
243
231
  getWorkflowRunStepsSlimByRunId,
244
232
  WORKFLOW_RUN_TREE_MAX_DEPTH,
@@ -247,6 +235,14 @@ import {
247
235
  getWorkflowRunParent,
248
236
  init_workflow_runs,
249
237
  refreshActiveSessionOnActivity2,
238
+ STEERING_MOVED_ERROR,
239
+ SteeringRequestError,
240
+ isSteeringEnabled,
241
+ getTaskSteeringFields,
242
+ getTaskSteeringFieldsForTasks,
243
+ markSteeringUndeliverable,
244
+ requestSteering,
245
+ init_steering2,
250
246
  getPendingTaskForAgent2,
251
247
  startTask2,
252
248
  updateTaskClaudeSessionId2,
@@ -273,6 +269,8 @@ import {
273
269
  retirePoolKeyStatus,
274
270
  init_api_keys,
275
271
  getScriptRunExecutionArgs2,
272
+ getScriptRunFollowUpGuard2,
273
+ setScriptRunFollowUpGuard2,
276
274
  updateTaskVcs2,
277
275
  upsertAssetKeyMapping2,
278
276
  listAssetSummaries2,
@@ -479,7 +477,7 @@ import {
479
477
  countScriptRunJournalSteps2,
480
478
  countScriptRunJournalAgentTaskSteps2,
481
479
  init_db4
482
- } from "./cli-1s1dqn1j.js";
480
+ } from "./cli-k2gzwsj2.js";
483
481
  import {
484
482
  PRIMARY_ROLE_NAMES2,
485
483
  getUserGrant2,
@@ -490,8 +488,8 @@ import {
490
488
  assertNotLastAdmin2,
491
489
  setUserRoles2,
492
490
  init_rbac_roles
493
- } from "./cli-bq2pcphn.js";
494
- import"./cli-36g23z21.js";
491
+ } from "./cli-rmmmrjkd.js";
492
+ import"./cli-zbbwez0r.js";
495
493
  import {
496
494
  upsertModelCatalogOverlay,
497
495
  deleteModelCatalogOverlay,
@@ -499,13 +497,14 @@ import {
499
497
  init_model_catalog_store,
500
498
  requestModelCatalogRefresh2,
501
499
  init_pricing_refresh
502
- } from "./cli-wcmnan2g.js";
500
+ } from "./cli-89knwags.js";
503
501
  import {
504
502
  workflowEventBus2,
505
503
  init_event_bus
506
- } from "./cli-eny54typ.js";
507
- import"./cli-a1fhj4n9.js";
504
+ } from "./cli-wx3rhnm0.js";
505
+ import"./cli-w6dt9ged.js";
508
506
  import {
507
+ require_dist4,
509
508
  getSlackConnectionState,
510
509
  init_connection_state,
511
510
  getSlackInboundDiagnostics,
@@ -534,12 +533,12 @@ import {
534
533
  startSlackApp2,
535
534
  stopSlackApp2,
536
535
  init_app3
537
- } from "./cli-1gm8jcyr.js";
536
+ } from "./cli-waqbxg08.js";
538
537
  import {
539
538
  retryFailedRun2,
540
539
  cancelWorkflowRun2,
541
540
  init_resume
542
- } from "./cli-mvckssyq.js";
541
+ } from "./cli-m48g6p95.js";
543
542
  import {
544
543
  DEFAULT_NEGOTIATED_PROTOCOL_VERSION,
545
544
  SUPPORTED_PROTOCOL_VERSIONS,
@@ -918,6 +917,9 @@ import {
918
917
  mergeScheduleTiming,
919
918
  validateRecurringTiming,
920
919
  init_validate,
920
+ followUpThreadForSourceTask,
921
+ evaluateFollowUpRedelegation,
922
+ init_follow_up_redelegation_guard,
921
923
  checkOutputSchemaShape,
922
924
  sendTaskOutputSchema,
923
925
  sendTaskHandler,
@@ -945,7 +947,7 @@ import {
945
947
  getEnabledCapabilities,
946
948
  createServer,
947
949
  init_server
948
- } from "./cli-1yekbyqm.js";
950
+ } from "./cli-shpbx5ee.js";
949
951
  import {
950
952
  FilesError,
951
953
  normalizeFilesError,
@@ -977,7 +979,7 @@ import {
977
979
  resolvePoolDelivery2,
978
980
  createPoolAgent2,
979
981
  init_db2
980
- } from "./cli-cq1pf336.js";
982
+ } from "./cli-yn4kxs06.js";
981
983
  import {
982
984
  duplicateGuardedQueryKey,
983
985
  warnIfCorsAllowsAnyOrigin,
@@ -1031,7 +1033,7 @@ import {
1031
1033
  describeRequestRoute,
1032
1034
  route,
1033
1035
  init_route_def
1034
- } from "./cli-7n5sbw0z.js";
1036
+ } from "./cli-4necwtsv.js";
1035
1037
  import {
1036
1038
  startPoolRouting,
1037
1039
  stopPoolRouting,
@@ -1044,24 +1046,24 @@ import {
1044
1046
  checkHeartbeatChecklist2,
1045
1047
  runHeartbeatSweep2,
1046
1048
  stopHeartbeat2
1047
- } from "./cli-ktmvb20s.js";
1048
- import"./cli-0fgr1w9b.js";
1049
+ } from "./cli-zm72anhg.js";
1050
+ import"./cli-xnrwazav.js";
1049
1051
  import {
1050
1052
  runtimeSupervisorStatus,
1051
1053
  startRuntimeSupervisor,
1052
1054
  stopRuntimeSupervisor
1053
- } from "./cli-t282jgab.js";
1055
+ } from "./cli-8snvgs5r.js";
1054
1056
  import"./cli-ns59dc6r.js";
1055
1057
  import {
1056
1058
  ACP_TARGET_IDS
1057
- } from "./cli-9cctx1tn.js";
1059
+ } from "./cli-a22h291q.js";
1058
1060
  import {
1059
1061
  reasoningCapability,
1060
1062
  supportedReasoningLevels
1061
- } from "./cli-vqgnyh76.js";
1063
+ } from "./cli-98rw5dt5.js";
1062
1064
  import {
1063
1065
  MAX_RATE_LIMIT_RESET_MS
1064
- } from "./cli-bwty35gx.js";
1066
+ } from "./cli-mthwvjre.js";
1065
1067
  import {
1066
1068
  isLeadChannelMonitoringEnabled,
1067
1069
  ORG_IDENTITY_KEYS,
@@ -1071,11 +1073,11 @@ import {
1071
1073
  isUnknownModelError,
1072
1074
  checkProviderPoolKey,
1073
1075
  writeSkillsToFilesystem
1074
- } from "./cli-je8yeyc5.js";
1076
+ } from "./cli-bjb3z51z.js";
1075
1077
  import {
1076
1078
  inviteEmailToSharedOrg,
1077
1079
  ensureAgentFsCredentialsForAgent
1078
- } from "./cli-f255yaqn.js";
1080
+ } from "./cli-xds5f77d.js";
1079
1081
  import {
1080
1082
  Anthropic
1081
1083
  } from "./cli-318r69gq.js";
@@ -1091,7 +1093,7 @@ import {
1091
1093
  ampBillsCacheWrites,
1092
1094
  resolveAmpModel,
1093
1095
  init_amp_models
1094
- } from "./cli-zn15c46z.js";
1096
+ } from "./cli-q0k1w5zd.js";
1095
1097
  import {
1096
1098
  RATING_MODEL_MAX_LENGTH,
1097
1099
  REFERENCES_SOURCE_MAX_LENGTH,
@@ -1101,7 +1103,7 @@ import {
1101
1103
  import {
1102
1104
  normalizeModelKey,
1103
1105
  init_pricing_normalize
1104
- } from "./cli-mc97xy2s.js";
1106
+ } from "./cli-c60vetmm.js";
1105
1107
  import {
1106
1108
  require_dist2,
1107
1109
  getMcpOAuthToken,
@@ -1190,7 +1192,7 @@ import {
1190
1192
  init_typecheck,
1191
1193
  parseSkillContent,
1192
1194
  init_skill_parser
1193
- } from "./cli-d2pzqej1.js";
1195
+ } from "./cli-hr2e2fft.js";
1194
1196
  import {
1195
1197
  signalProcessGroup,
1196
1198
  detachedProcessGroup,
@@ -1207,7 +1209,7 @@ import {
1207
1209
  forceRefreshAuthorizationOrThrow,
1208
1210
  forceRefreshTokenOrThrow,
1209
1211
  init_ensure_token
1210
- } from "./cli-0sbkss7h.js";
1212
+ } from "./cli-xnqgpshy.js";
1211
1213
  import {
1212
1214
  automationIntegrationFixUrl,
1213
1215
  preflightAutomation,
@@ -1251,7 +1253,7 @@ import {
1251
1253
  definitionNodeIds,
1252
1254
  validateDefinition,
1253
1255
  init_definition2
1254
- } from "./cli-pwyevs29.js";
1256
+ } from "./cli-8bc1w0tw.js";
1255
1257
  import {
1256
1258
  _fetchHolder,
1257
1259
  CLIENT_ID,
@@ -1267,17 +1269,15 @@ import {
1267
1269
  loadAllCodexOAuthSlots,
1268
1270
  getValidCodexOAuth,
1269
1271
  init_storage
1270
- } from "./cli-jg0nfda6.js";
1272
+ } from "./cli-75gkpjvw.js";
1271
1273
  import {
1272
1274
  isMultiRuntimeEnabled,
1273
1275
  init_multi_runtime2
1274
1276
  } from "./cli-mdb054w3.js";
1275
1277
  import {
1276
1278
  require_content_type
1277
- } from "./cli-gf5hbmdr.js";
1278
- import {
1279
- require_dist9
1280
- } from "./cli-w3hcrxht.js";
1279
+ } from "./cli-yjdgea32.js";
1280
+ import"./cli-gdhpcbhf.js";
1281
1281
  import {
1282
1282
  isInvalidClientError,
1283
1283
  publicEndpointSsrfOptions,
@@ -1295,11 +1295,11 @@ import {
1295
1295
  revokeMcpToken,
1296
1296
  computeExpiresAt,
1297
1297
  init_mcp_wrapper
1298
- } from "./cli-k76tgq03.js";
1298
+ } from "./cli-hgaazk69.js";
1299
1299
  import {
1300
1300
  createRuntimeProvider,
1301
1301
  init_runtime_providers
1302
- } from "./cli-b1afgtj3.js";
1302
+ } from "./cli-kqdg1bsb.js";
1303
1303
  import {
1304
1304
  registerSessionTokenConnection,
1305
1305
  init_session_token_connections,
@@ -1326,7 +1326,7 @@ import {
1326
1326
  revokeAgentTokens,
1327
1327
  fingerprintApiKey,
1328
1328
  init_users
1329
- } from "./cli-8yy525ad.js";
1329
+ } from "./cli-drr5v6av.js";
1330
1330
  import"./cli-v41kn3cd.js";
1331
1331
  import {
1332
1332
  setBedrockProviderModule,
@@ -1336,7 +1336,7 @@ import {
1336
1336
  import_websocket,
1337
1337
  import_websocket_server,
1338
1338
  init_wrapper2
1339
- } from "./cli-dznrgaep.js";
1339
+ } from "./cli-69szn7w7.js";
1340
1340
  import {
1341
1341
  isRbacEnabled,
1342
1342
  decideToolAdmission,
@@ -1498,12 +1498,18 @@ import {
1498
1498
  KvKeySchema,
1499
1499
  KvEntrySchema,
1500
1500
  init_types4
1501
- } from "./cli-41z8xwj0.js";
1501
+ } from "./cli-nhrvpaj7.js";
1502
+ import {
1503
+ CODEX_AUTH_FAILURE_BENCH_THRESHOLD,
1504
+ CODEX_AUTH_WATCH_NAMESPACE,
1505
+ codexAuthBenchMarkerKey,
1506
+ init_codex_auth_failure
1507
+ } from "./cli-fw2w0kva.js";
1502
1508
  import {
1503
1509
  IDENTITY_FIELD_BUDGETS,
1504
1510
  IdentityFieldBudgetError,
1505
1511
  init_identity_field_budget
1506
- } from "./cli-ycm6180s.js";
1512
+ } from "./cli-a7v854rf.js";
1507
1513
  import {
1508
1514
  getSlackConfiguration,
1509
1515
  init_config4
@@ -1530,7 +1536,7 @@ import {
1530
1536
  splitCredentialPool,
1531
1537
  selectCredential,
1532
1538
  init_credentials2
1533
- } from "./cli-aq58fk5m.js";
1539
+ } from "./cli-g83s9ewh.js";
1534
1540
  import {
1535
1541
  interpolate,
1536
1542
  init_template2,
@@ -1540,7 +1546,7 @@ import {
1540
1546
  resolveTemplate,
1541
1547
  init_resolver,
1542
1548
  init_session_templates
1543
- } from "./cli-j4kw3rsx.js";
1549
+ } from "./cli-cm5yqn35.js";
1544
1550
  import {
1545
1551
  init_zod
1546
1552
  } from "./cli-k5671be5.js";
@@ -1576,7 +1582,7 @@ import {
1576
1582
  import {
1577
1583
  init_package,
1578
1584
  package_default
1579
- } from "./cli-pe09p6dv.js";
1585
+ } from "./cli-e3r2neck.js";
1580
1586
  import {
1581
1587
  realtimeBus,
1582
1588
  init_bus
@@ -1609,13 +1615,13 @@ import {
1609
1615
  registerVolatileSecret,
1610
1616
  registerEnvSecrets,
1611
1617
  init_secret_scrubber
1612
- } from "./cli-a4btqqft.js";
1618
+ } from "./cli-1b7btd38.js";
1613
1619
  import {
1614
1620
  isAlias,
1615
1621
  baseUrlEnvVar,
1616
1622
  providerForKeyVar,
1617
1623
  init_src2
1618
- } from "./cli-4r12t6w6.js";
1624
+ } from "./cli-5c4hjzne.js";
1619
1625
  import {
1620
1626
  __toESM
1621
1627
  } from "./cli-242037k3.js";
@@ -5047,7 +5053,8 @@ var LocalHarnessProviderSchema = _enum2([
5047
5053
  "dsh",
5048
5054
  "amp",
5049
5055
  "cursor",
5050
- "grok"
5056
+ "grok",
5057
+ "fx"
5051
5058
  ]);
5052
5059
  var AcpRuntimeConfigSchema = object2({
5053
5060
  target: _enum2(ACP_TARGET_IDS),
@@ -11074,6 +11081,7 @@ declare module "swarm-extension" {
11074
11081
  | "amp"
11075
11082
  | "cursor"
11076
11083
  | "grok"
11084
+ | "fx"
11077
11085
  | undefined;
11078
11086
  leadOnly?: boolean | undefined;
11079
11087
  }
@@ -11209,6 +11217,7 @@ declare module "swarm-extension" {
11209
11217
  | "amp"
11210
11218
  | "cursor"
11211
11219
  | "grok"
11220
+ | "fx"
11212
11221
  | undefined;
11213
11222
  providerMeta?: Record<string, unknown> | undefined;
11214
11223
  harnessVariant?: string | undefined;
@@ -11231,6 +11240,7 @@ declare module "swarm-extension" {
11231
11240
  | "amp"
11232
11241
  | "cursor"
11233
11242
  | "grok"
11243
+ | "fx"
11234
11244
  | undefined;
11235
11245
  leadOnly?: boolean | undefined;
11236
11246
  }
@@ -11252,6 +11262,10 @@ declare module "swarm-extension" {
11252
11262
  runtimeInstanceId?: string | null | undefined;
11253
11263
  };
11254
11264
 
11265
+ export type SteerMode = "steer" | "queue";
11266
+
11267
+ export type SteeringSource = "script" | "slack" | "mcp" | "api" | "ui" | "chat";
11268
+
11255
11269
  export type RequestInfo = {
11256
11270
  sessionId: string | undefined;
11257
11271
  agentId: string | undefined;
@@ -11462,6 +11476,27 @@ declare module "swarm-extension" {
11462
11476
  leadAgentId: string;
11463
11477
  summary: string;
11464
11478
  }
11479
+ export interface TaskSteerEvent {
11480
+ task: AgentTask;
11481
+ message: string;
11482
+ mode: SteerMode;
11483
+ source: SteeringSource;
11484
+ sender: {
11485
+ kind: "user" | "agent" | "system";
11486
+ userId?: string;
11487
+ agentId?: string;
11488
+ };
11489
+ messageTimestamps?: string[];
11490
+ /** Slack ingress metadata; not persisted or writable through modify. */
11491
+ slack?: {
11492
+ channelId: string;
11493
+ threadTs: string;
11494
+ userId?: string;
11495
+ };
11496
+ }
11497
+ export interface TaskSteerModify {
11498
+ message: string;
11499
+ }
11465
11500
  export type TaskFollowUpModify = Partial<
11466
11501
  Pick<CreateTaskOptions, "agentId" | "priority" | "followUpConfig">
11467
11502
  > & {
@@ -11694,6 +11729,11 @@ declare module "swarm-extension" {
11694
11729
  modify: TaskFollowUpModify;
11695
11730
  result: PreResult<TaskFollowUpModify>;
11696
11731
  };
11732
+ "pre.task.steer": {
11733
+ event: TaskSteerEvent;
11734
+ modify: TaskSteerModify;
11735
+ result: PreResult<TaskSteerModify>;
11736
+ };
11697
11737
  "pre.slack.route": {
11698
11738
  event: SlackRouteEvent;
11699
11739
  modify: SlackRouteModify;
@@ -15844,7 +15884,7 @@ async function registerTelegramWebhook() {
15844
15884
 
15845
15885
  // src/slack/app-icon.ts
15846
15886
  init_app3();
15847
- var import_web_api = __toESM(require_dist9(), 1);
15887
+ var import_web_api = __toESM(require_dist4(), 1);
15848
15888
  var TTL_MS = 60 * 60 * 1000;
15849
15889
  var REQUEST_TIMEOUT_MS = 2500;
15850
15890
  var cached = null;
@@ -19730,6 +19770,7 @@ function createUserServer(user) {
19730
19770
  offerMode: false,
19731
19771
  leadOnly: false,
19732
19772
  allowDuplicate: false,
19773
+ allowRedelegation: false,
19733
19774
  overrideSlackContext: false
19734
19775
  });
19735
19776
  });
@@ -21339,11 +21380,20 @@ async function handleMemory(req, res, pathSegments, callerAgentId) {
21339
21380
  var MEMORY_GC_INTERVAL_MS = 60 * 60 * 1000;
21340
21381
  var memoryGcTimer = null;
21341
21382
  var SEARCH_RETRIEVAL_TTL_DAYS = 90;
21342
- async function purgeStaleSearchRetrievals() {
21383
+ var SEARCH_RETRIEVAL_PURGE_BATCH = 2000;
21384
+ async function purgeStaleSearchRetrievals(batchSize = SEARCH_RETRIEVAL_PURGE_BATCH) {
21343
21385
  try {
21344
21386
  const cutoff = new Date(Date.now() - SEARCH_RETRIEVAL_TTL_DAYS * 24 * 60 * 60 * 1000).toISOString();
21345
- const result = await getDbClient2().run("DELETE FROM memory_retrieval WHERE eventType = 'search' AND retrievedAt < ?", [cutoff]);
21346
- return result.changes;
21387
+ let purged = 0;
21388
+ for (;; ) {
21389
+ const result = await getDbClient2().run(`DELETE FROM memory_retrieval WHERE rowid IN (
21390
+ SELECT rowid FROM memory_retrieval
21391
+ WHERE +eventType = 'search' AND retrievedAt < ? LIMIT ?)`, [cutoff, batchSize]);
21392
+ purged += result.changes;
21393
+ if (result.changes < batchSize)
21394
+ return purged;
21395
+ await new Promise((resolve) => setImmediate(resolve));
21396
+ }
21347
21397
  } catch (err) {
21348
21398
  console.error("[memory-gc] Search retrieval purge failed:", err.message);
21349
21399
  return 0;
@@ -21363,10 +21413,17 @@ async function runMemoryGcTick(label) {
21363
21413
  console.error(`[memory-gc] ${label} purge failed:`, err);
21364
21414
  }
21365
21415
  }
21366
- async function startMemoryGc(intervalMs = MEMORY_GC_INTERVAL_MS) {
21416
+ var MEMORY_GC_INITIAL_DELAY_MS = 2 * 60 * 1000;
21417
+ var memoryGcInitialTimer = null;
21418
+ async function startMemoryGc(intervalMs = MEMORY_GC_INTERVAL_MS, initialDelayMs = MEMORY_GC_INITIAL_DELAY_MS) {
21367
21419
  if (memoryGcTimer)
21368
21420
  return;
21369
- await runMemoryGcTick("Initial");
21421
+ memoryGcInitialTimer = setTimeout(() => {
21422
+ memoryGcInitialTimer = null;
21423
+ runMemoryGcTick("Initial");
21424
+ }, initialDelayMs);
21425
+ if (typeof memoryGcInitialTimer?.unref === "function")
21426
+ memoryGcInitialTimer.unref();
21370
21427
  memoryGcTimer = setInterval(() => {
21371
21428
  runMemoryGcTick("Periodic");
21372
21429
  }, intervalMs);
@@ -21374,6 +21431,10 @@ async function startMemoryGc(intervalMs = MEMORY_GC_INTERVAL_MS) {
21374
21431
  memoryGcTimer.unref();
21375
21432
  }
21376
21433
  function stopMemoryGc() {
21434
+ if (memoryGcInitialTimer) {
21435
+ clearTimeout(memoryGcInitialTimer);
21436
+ memoryGcInitialTimer = null;
21437
+ }
21377
21438
  if (memoryGcTimer) {
21378
21439
  clearInterval(memoryGcTimer);
21379
21440
  memoryGcTimer = null;
@@ -23020,7 +23081,8 @@ var StatusIdentitySchema = object2({
23020
23081
  is_cloud: boolean(),
23021
23082
  marketing_url: string2().nullable(),
23022
23083
  hide_cloud_promo: boolean(),
23023
- org_id: string2().nullable()
23084
+ org_id: string2().nullable(),
23085
+ dashboard_url: string2().nullable().optional()
23024
23086
  });
23025
23087
  var StatusActivitySchema = object2({
23026
23088
  agents_online: number2().int().nonnegative(),
@@ -23126,7 +23188,7 @@ async function rollupCredStatusForProvider(provider) {
23126
23188
  oldestReportAgeMs
23127
23189
  };
23128
23190
  }
23129
- function buildIdentity() {
23191
+ function buildIdentity(dashboardUrl) {
23130
23192
  const cloudRaw = process.env.SWARM_CLOUD;
23131
23193
  const hideRaw = process.env.SWARM_HIDE_CLOUD_PROMO;
23132
23194
  return {
@@ -23136,7 +23198,8 @@ function buildIdentity() {
23136
23198
  is_cloud: cloudRaw === "true" || cloudRaw === "1",
23137
23199
  marketing_url: process.env.SWARM_MARKETING_URL?.trim() || null,
23138
23200
  hide_cloud_promo: hideRaw === "true" || hideRaw === "1",
23139
- org_id: process.env.SWARM_ORG_ID?.trim() || null
23201
+ org_id: process.env.SWARM_ORG_ID?.trim() || null,
23202
+ dashboard_url: dashboardUrl
23140
23203
  };
23141
23204
  }
23142
23205
  function describeRoll(roll) {
@@ -23438,7 +23501,7 @@ async function buildStatusPayload() {
23438
23501
  const instance = await getInstanceFeedbackSignals();
23439
23502
  return {
23440
23503
  runtime_pools: { enabled: isRuntimePoolsEnabled(), supervisor: runtimeSupervisorStatus() },
23441
- identity: buildIdentity(),
23504
+ identity: buildIdentity(await resolveAppUrl()),
23442
23505
  setup,
23443
23506
  activity: { ...activity, leads_ready: readyLeads },
23444
23507
  agent_fs: {
@@ -24141,19 +24204,20 @@ var MAX_ENTRIES2 = 500;
24141
24204
  function filterKey(value) {
24142
24205
  return JSON.stringify(value, (_key, v) => v && typeof v === "object" && !Array.isArray(v) ? Object.fromEntries(Object.entries(v).sort(([a], [b]) => a.localeCompare(b))) : v);
24143
24206
  }
24144
- function createListTotalCache(ttlMs = LIST_TOTAL_TTL_MS) {
24207
+ function createListTotalCache(ttlMs = LIST_TOTAL_TTL_MS, firstPageTtlMs = 0) {
24145
24208
  const entries = new Map;
24146
24209
  return {
24147
24210
  get(filters, offset, compute) {
24148
24211
  const key = filterKey(filters);
24149
24212
  const now = Date.now();
24150
24213
  const hit = entries.get(key);
24151
- if (hit && hit.expiresAt > now && (offset ?? 0) > 0)
24214
+ const maxAge = (offset ?? 0) > 0 ? ttlMs : Math.min(ttlMs, firstPageTtlMs);
24215
+ if (hit && hit.countedAt + maxAge > now)
24152
24216
  return hit.total;
24153
24217
  if (hit)
24154
24218
  entries.delete(key);
24155
24219
  const total = compute();
24156
- entries.set(key, { expiresAt: now + ttlMs, total });
24220
+ entries.set(key, { countedAt: now, total });
24157
24221
  total.catch(() => {
24158
24222
  if (entries.get(key)?.total === total)
24159
24223
  entries.delete(key);
@@ -24299,7 +24363,7 @@ var SupersedeTaskResponseSchema = object2({
24299
24363
  resumeTaskId: string2().nullable(),
24300
24364
  resumeTaskStatus: AgentTaskStatusSchema.optional()
24301
24365
  });
24302
- var taskTotals = createListTotalCache();
24366
+ var taskTotals = createListTotalCache(LIST_TOTAL_TTL_MS, 15000);
24303
24367
  var listTasks = route({
24304
24368
  method: "get",
24305
24369
  path: "/api/tasks",
@@ -33462,6 +33526,9 @@ function refuseSourceWithSecrets(source) {
33462
33526
  };
33463
33527
  }
33464
33528
 
33529
+ // src/http/script-runs.ts
33530
+ init_rbac();
33531
+
33465
33532
  // src/script-workflows/label-lint.ts
33466
33533
  var import_typescript = __toESM(require_typescript2(), 1);
33467
33534
  var ITERATION_CALLBACK_METHODS = new Set([
@@ -33531,6 +33598,7 @@ function lintWorkflowLabels(source) {
33531
33598
  }
33532
33599
 
33533
33600
  // src/http/script-runs.ts
33601
+ init_follow_up_redelegation_guard();
33534
33602
  init_types4();
33535
33603
  init_constants3();
33536
33604
  init_secret_scrubber();
@@ -33590,7 +33658,8 @@ var agentTaskBodySchema = object2({
33590
33658
  allowCustomModel: boolean().optional(),
33591
33659
  parentTaskId: string2().uuid().optional(),
33592
33660
  requestedByUserId: string2().optional(),
33593
- outputSchema: record2(string2(), unknown()).optional()
33661
+ outputSchema: record2(string2(), unknown()).optional(),
33662
+ allowRedelegation: boolean().optional()
33594
33663
  });
33595
33664
  var scriptRunCreatedSchema = object2({
33596
33665
  id: string2().uuid(),
@@ -33756,9 +33825,41 @@ var agentTaskRoute = route({
33756
33825
  description: "Agent task created or still running",
33757
33826
  schema: object2({ taskId: string2(), status: AgentTaskStatusSchema })
33758
33827
  },
33759
- 404: { description: "Script run not found" }
33828
+ 403: {
33829
+ description: "Script run belongs to another agent, or the run's agent may not create a child task under parentTaskId"
33830
+ },
33831
+ 404: { description: "Script run not found" },
33832
+ 409: { description: "Agent task failed, was cancelled, or was superseded" },
33833
+ 422: { description: "Blocked by the follow-up re-delegation guard" }
33760
33834
  }
33761
33835
  });
33836
+ async function stepParentRefusal(runAgentId, parentTaskId) {
33837
+ const parentTask = await getTaskById2(parentTaskId);
33838
+ if (!parentTask)
33839
+ return null;
33840
+ const runAgent = await getAgentById2(runAgentId);
33841
+ const decision = can({
33842
+ principal: { kind: "agent", agentId: runAgentId, isLead: runAgent?.isLead ?? false },
33843
+ verb: "task.parent.attach",
33844
+ resource: {
33845
+ kind: "task",
33846
+ taskId: parentTask.id,
33847
+ requestedByUserId: parentTask.requestedByUserId,
33848
+ creatorAgentId: parentTask.creatorAgentId,
33849
+ agentId: parentTask.agentId
33850
+ },
33851
+ source: "http"
33852
+ });
33853
+ return decision.allow ? null : `You don't have context for parent task ${parentTaskId}. Only its assignee, its creator, or a lead can create a child task under it.`;
33854
+ }
33855
+ async function resolveRunSourceTaskId(req, agentId) {
33856
+ const raw = req.headers["x-source-task-id"];
33857
+ const sourceTaskId = Array.isArray(raw) ? raw[0] : raw;
33858
+ if (!sourceTaskId)
33859
+ return;
33860
+ const task = await getTaskById2(sourceTaskId);
33861
+ return task?.agentId === agentId ? task.id : undefined;
33862
+ }
33762
33863
  async function requireAgent(res, agentId) {
33763
33864
  if (!agentId) {
33764
33865
  jsonError(res, "X-Agent-ID required for script runs API", 400);
@@ -33836,6 +33937,7 @@ async function handleScriptRuns(req, res, pathSegments, queryParams, agentId) {
33836
33937
  }
33837
33938
  }
33838
33939
  const cap = scriptRunConcurrencyCap();
33940
+ const sourceTaskId = await resolveRunSourceTaskId(req, agent.id);
33839
33941
  const creation = await getDbClient2().transaction(async () => {
33840
33942
  if (await countActiveScriptRuns2() >= cap)
33841
33943
  return null;
@@ -33847,6 +33949,7 @@ async function handleScriptRuns(req, res, pathSegments, queryParams, agentId) {
33847
33949
  scriptName: parsed.body.scriptName,
33848
33950
  idempotencyKey: parsed.body.idempotencyKey,
33849
33951
  requestedByUserId: parsed.body.requestedByUserId,
33952
+ sourceTaskId,
33850
33953
  createdBy: parsed.body.requestedByUserId
33851
33954
  });
33852
33955
  });
@@ -34043,9 +34146,22 @@ async function handleScriptRuns(req, res, pathSegments, queryParams, agentId) {
34043
34146
  jsonError(res, "Script run not found", 404);
34044
34147
  return true;
34045
34148
  }
34149
+ if (agentId !== run.agentId) {
34150
+ jsonError(res, "Script run belongs to another agent", 403);
34151
+ return true;
34152
+ }
34153
+ if (parsed.body.parentTaskId) {
34154
+ const refusal = await stepParentRefusal(run.agentId, parsed.body.parentTaskId);
34155
+ if (refusal) {
34156
+ jsonError(res, refusal, 403);
34157
+ return true;
34158
+ }
34159
+ }
34046
34160
  const contextKey = `script-run:${run.id}:${parsed.body.stepKey}`;
34047
34161
  let task = await getLatestScriptRunStepTaskByContextKey2(contextKey);
34162
+ let dispatchedHere = false;
34048
34163
  if (!task) {
34164
+ const taskDescription = parsed.body.template ?? parsed.body.task ?? parsed.body.stepKey;
34049
34165
  const modelError = await explicitModelErrorForAgent({
34050
34166
  model: parsed.body.model,
34051
34167
  allowCustomModel: parsed.body.allowCustomModel,
@@ -34055,25 +34171,62 @@ async function handleScriptRuns(req, res, pathSegments, queryParams, agentId) {
34055
34171
  jsonError(res, modelError, 400);
34056
34172
  return true;
34057
34173
  }
34174
+ const followUpThread = await followUpThreadForSourceTask(run.sourceTaskId);
34175
+ let dispatched;
34058
34176
  try {
34059
- task = await createTaskExtended2(parsed.body.template ?? parsed.body.task ?? parsed.body.stepKey, {
34060
- agentId: parsed.body.agentId,
34061
- routingReason: parsed.body.routingReason ?? (parsed.body.agentId ? "human_pinned" : undefined),
34062
- routingNote: parsed.body.routingNote,
34063
- routingSource: parsed.body.routingReason ? "declared" : parsed.body.agentId ? "engine_default" : undefined,
34064
- tags: parsed.body.tags,
34065
- priority: parsed.body.priority,
34066
- dependsOn: parsed.body.dependsOn,
34067
- offeredTo: parsed.body.offerMode ? parsed.body.agentId : undefined,
34068
- taskType: "script-run-step",
34069
- source: "mcp",
34070
- dir: parsed.body.dir,
34071
- vcsRepo: parsed.body.vcsRepo,
34072
- model: parsed.body.model,
34073
- parentTaskId: parsed.body.parentTaskId,
34074
- requestedByUserId: parsed.body.requestedByUserId ?? run.requestedByUserId,
34075
- outputSchema: parsed.body.outputSchema,
34076
- contextKey
34177
+ dispatched = await getDbClient2().transaction(async () => {
34178
+ const replayed = await getLatestScriptRunStepTaskByContextKey2(contextKey);
34179
+ if (replayed)
34180
+ return { task: replayed };
34181
+ let override;
34182
+ if (followUpThread) {
34183
+ const decision = await getScriptRunFollowUpGuard2(run.id);
34184
+ if (decision !== "passed") {
34185
+ const blocked = decision === null ? await evaluateFollowUpRedelegation({
34186
+ ...followUpThread,
34187
+ creatorAgentId: run.agentId,
34188
+ taskDescription,
34189
+ targetAgentId: parsed.body.agentId
34190
+ }) : {
34191
+ rule: decision,
34192
+ message: `Blocked by the follow-up re-delegation guard (${decision} rule): an earlier step of this script run was blocked, and a run counts as one dispatch. If it must run, pass allowRedelegation: true.`
34193
+ };
34194
+ if (blocked && !parsed.body.allowRedelegation) {
34195
+ if (decision === null)
34196
+ await setScriptRunFollowUpGuard2(run.id, blocked.rule);
34197
+ return { blocked };
34198
+ }
34199
+ override = blocked?.rule;
34200
+ await setScriptRunFollowUpGuard2(run.id, "passed");
34201
+ }
34202
+ }
34203
+ const created = await createTaskExtended2(taskDescription, {
34204
+ agentId: parsed.body.agentId,
34205
+ routingReason: parsed.body.routingReason ?? (parsed.body.agentId ? "human_pinned" : undefined),
34206
+ routingNote: parsed.body.routingNote,
34207
+ routingSource: parsed.body.routingReason ? "declared" : parsed.body.agentId ? "engine_default" : undefined,
34208
+ tags: parsed.body.tags,
34209
+ priority: parsed.body.priority,
34210
+ dependsOn: parsed.body.dependsOn,
34211
+ offeredTo: parsed.body.offerMode ? parsed.body.agentId : undefined,
34212
+ taskType: "script-run-step",
34213
+ source: "mcp",
34214
+ creatorAgentId: run.agentId,
34215
+ sourceTaskId: run.sourceTaskId,
34216
+ ...followUpThread ? {
34217
+ slackChannelId: followUpThread.channelId,
34218
+ slackThreadTs: followUpThread.threadTs,
34219
+ slackUserId: followUpThread.userId
34220
+ } : {},
34221
+ dir: parsed.body.dir,
34222
+ vcsRepo: parsed.body.vcsRepo,
34223
+ model: parsed.body.model,
34224
+ parentTaskId: parsed.body.parentTaskId,
34225
+ requestedByUserId: parsed.body.requestedByUserId ?? run.requestedByUserId,
34226
+ outputSchema: parsed.body.outputSchema,
34227
+ contextKey
34228
+ });
34229
+ return { task: created, created: true, override };
34077
34230
  });
34078
34231
  } catch (error) {
34079
34232
  if (error instanceof ExtensionAgentAssignmentError2) {
@@ -34082,6 +34235,22 @@ async function handleScriptRuns(req, res, pathSegments, queryParams, agentId) {
34082
34235
  }
34083
34236
  throw error;
34084
34237
  }
34238
+ if (dispatched.override) {
34239
+ console.log(`[script-runs] follow-up re-delegation override: rule=${dispatched.override} runId=${run.id} creatorAgentId=${run.agentId} sourceTaskId=${run.sourceTaskId} thread=${followUpThread?.channelId}/${followUpThread?.threadTs}`);
34240
+ }
34241
+ if (!dispatched.task) {
34242
+ json(res, { error: dispatched.blocked.message, rule: dispatched.blocked.rule }, 422);
34243
+ return true;
34244
+ }
34245
+ task = dispatched.task;
34246
+ dispatchedHere = dispatched.created === true;
34247
+ }
34248
+ if (!dispatchedHere && task.parentTaskId) {
34249
+ const refusal = await stepParentRefusal(run.agentId, task.parentTaskId);
34250
+ if (refusal) {
34251
+ jsonError(res, refusal, 403);
34252
+ return true;
34253
+ }
34085
34254
  }
34086
34255
  const deadline = Date.now() + 30000;
34087
34256
  while (Date.now() < deadline) {
@@ -42876,7 +43045,7 @@ var httpServer = createHttpServer(async (req, res) => {
42876
43045
  });
42877
43046
  });
42878
43047
  var detachRealtime = attachRealtimeTransport(httpServer);
42879
- var { attachControllerTransport } = await import("./controllers-connect-x9kvvhyk.js");
43048
+ var { attachControllerTransport } = await import("./controllers-connect-xx8x64n5.js");
42880
43049
  var detachControllers = attachControllerTransport(httpServer);
42881
43050
  var stopWorkerNudges = startWorkerNudgeListener();
42882
43051
  var stopRoomDeletion = realtimeBus.subscribe("room:namespace-deleted", (namespace) => {
@@ -42905,7 +43074,7 @@ async function shutdown() {
42905
43074
  sessionsProcessed: getServerSessionsProcessed()
42906
43075
  });
42907
43076
  if (hasCapability("scheduling")) {
42908
- const { stopScheduler } = await import("./index-8k8tmfxd.js");
43077
+ const { stopScheduler } = await import("./index-k08z2cak.js");
42909
43078
  stopScheduler();
42910
43079
  }
42911
43080
  stopHeartbeat2();
@@ -42917,7 +43086,7 @@ async function shutdown() {
42917
43086
  await stopSlackApp2();
42918
43087
  await stopChatSdk();
42919
43088
  if (!isEnvFlagEnabled("OAUTH_KEEPALIVE_DISABLE", false)) {
42920
- const { stopOAuthKeepalive } = await import("./keepalive-w4aakbyk.js");
43089
+ const { stopOAuthKeepalive } = await import("./keepalive-w56f32cg.js");
42921
43090
  await stopOAuthKeepalive();
42922
43091
  }
42923
43092
  stopOAuthPendingGc();
@@ -42999,21 +43168,21 @@ try {
42999
43168
  console.warn("[startup] CAPABILITIES upgrade seed failed (non-fatal):", err);
43000
43169
  }
43001
43170
  try {
43002
- const { ensurePricingSeeded } = await import("./boot-seeds-ftt9htah.js");
43171
+ const { ensurePricingSeeded } = await import("./boot-seeds-yr00k13d.js");
43003
43172
  ensurePricingSeeded();
43004
- const { startPricingRefreshLoop } = await import("./pricing-refresh-m1yhh9ya.js");
43173
+ const { startPricingRefreshLoop } = await import("./pricing-refresh-n2x7jh6k.js");
43005
43174
  startPricingRefreshLoop();
43006
43175
  } catch (err) {
43007
43176
  console.error("[startup] Failed to seed pricing rows:", err);
43008
43177
  }
43009
43178
  try {
43010
- const { ensureModelProfilesSeeded } = await import("./boot-seeds-ftt9htah.js");
43179
+ const { ensureModelProfilesSeeded } = await import("./boot-seeds-yr00k13d.js");
43011
43180
  await ensureModelProfilesSeeded();
43012
43181
  } catch (err) {
43013
43182
  console.error("[startup] Failed to seed model profiles:", err);
43014
43183
  }
43015
43184
  try {
43016
- const { ensureRbacSeeded } = await import("./boot-seeds-ftt9htah.js");
43185
+ const { ensureRbacSeeded } = await import("./boot-seeds-yr00k13d.js");
43017
43186
  ensureRbacSeeded();
43018
43187
  } catch (err) {
43019
43188
  console.error("[startup] Failed to sync RBAC seed rows:", err);
@@ -43021,7 +43190,7 @@ try {
43021
43190
  throw err;
43022
43191
  }
43023
43192
  try {
43024
- const { runAllSeeders } = await import("./index-9j4zwcht.js");
43193
+ const { runAllSeeders } = await import("./index-rvr00sg7.js");
43025
43194
  await runAllSeeders({ scriptEmbeddingMode: "skip" });
43026
43195
  } catch (err) {
43027
43196
  console.error("[startup] Failed to seed built-in entities:", err);
@@ -43084,26 +43253,26 @@ httpServer.listen(port, async () => {
43084
43253
  await initWorkflows2();
43085
43254
  await startScriptRunSupervisor(getMcpBaseUrl());
43086
43255
  if (hasCapability("scheduling")) {
43087
- const { startScheduler } = await import("./index-8k8tmfxd.js");
43088
- const { getExecutorRegistry } = await import("./index-hq617xdj.js");
43256
+ const { startScheduler } = await import("./index-k08z2cak.js");
43257
+ const { getExecutorRegistry } = await import("./index-4f2pvxae.js");
43089
43258
  const intervalMs = Number(process.env.SCHEDULER_INTERVAL_MS) || 1e4;
43090
43259
  startScheduler(getExecutorRegistry(), intervalMs, {
43091
43260
  runId: globalState.__runId
43092
43261
  });
43093
43262
  }
43094
43263
  if (!isEnvFlagEnabled("HEARTBEAT_DISABLE", false)) {
43095
- const { startHeartbeat } = await import("./index-8c1zbz59.js");
43264
+ const { startHeartbeat } = await import("./index-98gz7tmp.js");
43096
43265
  const heartbeatMs = Number(process.env.HEARTBEAT_INTERVAL_MS) || 90000;
43097
43266
  startHeartbeat(heartbeatMs);
43098
43267
  }
43099
43268
  startPoolRouting();
43100
43269
  startRuntimeSupervisor();
43101
43270
  if (!isEnvFlagEnabled("OAUTH_KEEPALIVE_DISABLE", false)) {
43102
- const { startOAuthKeepalive } = await import("./keepalive-w4aakbyk.js");
43271
+ const { startOAuthKeepalive } = await import("./keepalive-w56f32cg.js");
43103
43272
  startOAuthKeepalive();
43104
43273
  }
43105
43274
  if (!isEnvFlagEnabled("OAUTH_REFRESH_SWEEP_DISABLE", false)) {
43106
- const { startOAuthRefreshSweep } = await import("./oauth-refresh-sweep-217semrv.js");
43275
+ const { startOAuthRefreshSweep } = await import("./oauth-refresh-sweep-29txy9vk.js");
43107
43276
  startOAuthRefreshSweep();
43108
43277
  }
43109
43278
  startOAuthPendingGc();
@@ -43112,16 +43281,16 @@ httpServer.listen(port, async () => {
43112
43281
  await startDbRetention();
43113
43282
  startHumanFreeDrain();
43114
43283
  startTaskSearchBackfill();
43115
- import("./embedding-space-s68v49ct.js").then(({ runEmbeddingMaintenance, setDeploymentEnvReader }) => {
43284
+ import("./embedding-space-ny1e2940.js").then(({ runEmbeddingMaintenance, setDeploymentEnvReader }) => {
43116
43285
  setDeploymentEnvReader(getDeploymentEnvValue);
43117
43286
  return runEmbeddingMaintenance({ backfill: true });
43118
43287
  }).catch((err) => {
43119
43288
  console.error("[embedding-space] startup maintenance failed (non-fatal):", err);
43120
43289
  });
43121
- import("./boot-scrub-sweep-8k4q95ap.js").then(({ runBootScrubSweep }) => runBootScrubSweep()).catch((err) => {
43290
+ import("./boot-scrub-sweep-4qfd4kfx.js").then(({ runBootScrubSweep }) => runBootScrubSweep()).catch((err) => {
43122
43291
  console.error("[boot-scrub-sweep] startup scrub failed (non-fatal):", err);
43123
43292
  });
43124
- import("./session-source-backfill-pxbzcsc6.js").then(({ runSessionSourceBackfill }) => runSessionSourceBackfill()).catch((err) => {
43293
+ import("./session-source-backfill-n1czavbr.js").then(({ runSessionSourceBackfill }) => runSessionSourceBackfill()).catch((err) => {
43125
43294
  console.error("[session-source-backfill] startup run failed (non-fatal):", err);
43126
43295
  });
43127
43296
  }).on("error", (err) => {