@desplega.ai/agent-swarm 2.5.4 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/README.md +4 -2
  2. package/dist/{acp-adapter-ek38cwsv.js → acp-adapter-ma1js5n7.js} +9 -9
  3. package/dist/{actions-92mepq03.js → actions-1vhmtvg9.js} +21 -21
  4. package/dist/{amp-adapter-9gaxg015.js → amp-adapter-sxqqvmdk.js} +4 -4
  5. package/dist/{app-ctn8gsgx.js → app-mwx1d5a9.js} +3 -3
  6. package/dist/{assistant-zyr5kz47.js → assistant-yx1p6g82.js} +30 -26
  7. package/dist/{boot-reembed-w75maga2.js → boot-reembed-5h37a2c2.js} +1 -1
  8. package/dist/{boot-reembed-dwzfttdr.js → boot-reembed-7h78vmvv.js} +2 -1
  9. package/dist/{boot-scrub-sweep-e9kq43kf.js → boot-scrub-sweep-8mawd4gw.js} +4 -4
  10. package/dist/{boot-seeds-x28v3fhb.js → boot-seeds-ca84dhnn.js} +4 -4
  11. package/dist/{claude-adapter-f0afqnne.js → claude-adapter-wqt4hfkq.js} +9 -9
  12. package/dist/{claude-managed-adapter-x81a7r65.js → claude-managed-adapter-6fjqtr2z.js} +2 -2
  13. package/dist/{claude-managed-setup-bqzwjd9x.js → claude-managed-setup-rqv98sea.js} +10 -3
  14. package/dist/{claude-sdk-session-7b7whkaq.js → claude-sdk-session-f29f3b2x.js} +11 -11
  15. package/dist/{cli-sxgtf5fw.js → cli-07q03xm2.js} +1 -1
  16. package/dist/{cli-kxpfx2xr.js → cli-0z1xjzwa.js} +2 -2
  17. package/dist/{cli-g9vd9ece.js → cli-1hhbzkbb.js} +14 -16
  18. package/dist/{cli-qqzmjxkf.js → cli-1m9x8dr5.js} +11 -6
  19. package/dist/{cli-jbnn4vxb.js → cli-2pvzmas1.js} +3 -3
  20. package/dist/{cli-x77gen2p.js → cli-2y7v133v.js} +7 -7
  21. package/dist/{cli-dew6x255.js → cli-39aet655.js} +2 -2
  22. package/dist/{cli-g1cw7xtt.js → cli-39rrw8yp.js} +1 -1
  23. package/dist/{cli-jb30dzvk.js → cli-48gxjmcz.js} +530 -190
  24. package/dist/{cli-pzatvw94.js → cli-54sj64fc.js} +2 -2
  25. package/dist/{cli-bvpgr9ny.js → cli-60sty27p.js} +5 -5
  26. package/dist/{cli-asq5ydm4.js → cli-6a9qfa8b.js} +411 -69
  27. package/dist/{cli-277c31dw.js → cli-6mgdba42.js} +225 -3
  28. package/dist/{cli-19202kew.js → cli-6srv653c.js} +5 -5
  29. package/dist/{cli-n4c8e3s5.js → cli-708wdy32.js} +1 -1
  30. package/dist/{cli-pasyvjmm.js → cli-737pyqxr.js} +1 -1
  31. package/dist/{cli-6x9ma5w5.js → cli-803188pb.js} +1 -1
  32. package/dist/{cli-hh5we352.js → cli-86ehn4s5.js} +7 -7
  33. package/dist/{cli-9s05422w.js → cli-8mbc9za9.js} +1 -1
  34. package/dist/{cli-ff1tm9n9.js → cli-8wmj18cz.js} +1 -1
  35. package/dist/{cli-1r5ad7j5.js → cli-9gsm2rzp.js} +12 -12
  36. package/dist/{cli-mz9afxxf.js → cli-9pshx6rd.js} +17 -3
  37. package/dist/{cli-s682zgqz.js → cli-a6ds2epe.js} +1 -1
  38. package/dist/{cli-6a1xg1p7.js → cli-a89zdqz9.js} +2 -2
  39. package/dist/{cli-03vpq45j.js → cli-ay40dnj3.js} +2 -2
  40. package/dist/{cli-tsma7p8v.js → cli-aypd09nf.js} +2 -2
  41. package/dist/{cli-ethgy7ha.js → cli-b3yzyc57.js} +2 -2
  42. package/dist/{cli-bn0rewsy.js → cli-c081bj3b.js} +2 -2
  43. package/dist/{cli-mmhj8vd7.js → cli-c668vvcf.js} +11 -2
  44. package/dist/{cli-sbwsxvtd.js → cli-d20qvpr2.js} +2 -2
  45. package/dist/{cli-c952c7ac.js → cli-e1595bgx.js} +3 -3
  46. package/dist/{cli-621ce7kw.js → cli-f12mr20z.js} +3 -3
  47. package/dist/{cli-dqygeeh5.js → cli-f1e0ptjj.js} +10 -1
  48. package/dist/{cli-xzfq4at3.js → cli-f4dbh7a5.js} +16 -12
  49. package/dist/{cli-ha9rmwgq.js → cli-fb8m699c.js} +2 -2
  50. package/dist/{cli-5bnsc0e1.js → cli-gsfk58nw.js} +5 -5
  51. package/dist/cli-gt4h8cxw.js +895 -0
  52. package/dist/{cli-nwyw3zhg.js → cli-gxee0bqa.js} +1 -1
  53. package/dist/{cli-25n3mv5d.js → cli-h5jeg46p.js} +6 -6
  54. package/dist/{cli-gn5af0x5.js → cli-he9gbdx0.js} +62 -12
  55. package/dist/{cli-gbfxp48k.js → cli-j0ppywdr.js} +42 -35
  56. package/dist/{cli-k4tjsdx9.js → cli-j3y0x2n4.js} +277 -199
  57. package/dist/{cli-7p4jxgtt.js → cli-j9bpmykh.js} +75 -27
  58. package/dist/{cli-dabehxhp.js → cli-kt907da6.js} +1 -1
  59. package/dist/{cli-wx2nj19m.js → cli-kv7sbc2c.js} +6 -6
  60. package/dist/{cli-abs8ndtr.js → cli-m30k9777.js} +26 -26
  61. package/dist/{cli-cz5nmdxt.js → cli-m5e802r7.js} +2 -2
  62. package/dist/{cli-0shx9j93.js → cli-pfk92eqz.js} +2 -2
  63. package/dist/{cli-xtrz6bzs.js → cli-ptfq202x.js} +5 -3
  64. package/dist/{cli-6n8axjv1.js → cli-qj442fws.js} +2 -2
  65. package/dist/{cli-c61mbdds.js → cli-rd5m70gj.js} +4 -4
  66. package/dist/{cli-eftzyh9y.js → cli-s09j9vp5.js} +2 -2
  67. package/dist/{cli-m4ecdxvz.js → cli-s0mgx214.js} +7 -7
  68. package/dist/{cli-wghjkr0e.js → cli-sgqm2582.js} +10 -7
  69. package/dist/{cli-2655k16q.js → cli-sjctjr48.js} +2 -2
  70. package/dist/{cli-nzfnt2gs.js → cli-tf1n0r0b.js} +1 -1
  71. package/dist/{cli-x0f2v69c.js → cli-twctnkng.js} +12 -7
  72. package/dist/{cli-j6rktc91.js → cli-v6shg7na.js} +1 -1
  73. package/dist/{cli-gx4rm0qx.js → cli-vz78s5wm.js} +1 -1
  74. package/dist/{cli-gwhjmh8g.js → cli-wqr7cea4.js} +5 -5
  75. package/dist/{cli-e42vss7b.js → cli-x37r7qwf.js} +16 -8
  76. package/dist/{cli-4b2z6n0m.js → cli-yd2nreqw.js} +17 -8
  77. package/dist/{cli-64mh9mf3.js → cli-ymjpkxgn.js} +69 -17
  78. package/dist/{cli-5kqnemen.js → cli-yvy48785.js} +1 -1
  79. package/dist/{cli-9j129brq.js → cli-yxbsmx56.js} +6 -6
  80. package/dist/cli.js +22 -20
  81. package/dist/{codex-adapter-wch12q99.js → codex-adapter-zk59x2zh.js} +7 -7
  82. package/dist/{codex-hook-brpnycn5.js → codex-hook-xyjhvxwd.js} +1 -1
  83. package/dist/{codex-login-rn7c5gxt.js → codex-login-8cg0vhf2.js} +1 -1
  84. package/dist/{codex-session-runner-41pfcr95.js → codex-session-runner-kh6s4j3n.js} +8 -8
  85. package/dist/{commands-9849dkj6.js → commands-68et1qv2.js} +2 -2
  86. package/dist/{controller-ja0sd95p.js → controller-fyrbnzg4.js} +4 -4
  87. package/dist/{controllers-connect-xp05dj6x.js → controllers-connect-nep9h2xv.js} +23 -23
  88. package/dist/{cursor-adapter-623qxqew.js → cursor-adapter-yss3pg7t.js} +2 -2
  89. package/dist/{db-w759qmx0.js → db-28gjyvxj.js} +4 -2
  90. package/dist/{db-47vj40dy.js → db-8ftwvzba.js} +3 -3
  91. package/dist/{devin-adapter-4ycy4vrf.js → devin-adapter-byen2cxt.js} +1 -1
  92. package/dist/{dispatcher-7b8e4z2j.js → dispatcher-hayexmkr.js} +20 -20
  93. package/dist/{docker-s84hjs91.js → docker-fdzyewpz.js} +2 -2
  94. package/dist/{dsh-adapter-2ezw3xea.js → dsh-adapter-46wawff9.js} +2 -2
  95. package/dist/{e2b-9gkdhm3c.js → e2b-222hsajc.js} +2 -2
  96. package/dist/{e2b-cjtf8k1z.js → e2b-fn3zacvt.js} +2 -2
  97. package/dist/{easter-egg-3d-e4qv8dxj.js → easter-egg-3d-8d1e0h4m.js} +1 -1
  98. package/dist/{event-bus-3z78ep5n.js → event-bus-pghg8hqy.js} +1 -1
  99. package/dist/{execute-0xpz8950.js → execute-cjrfxfnm.js} +1 -1
  100. package/dist/{external-channel-e2s028da.js → external-channel-xbmxcg09.js} +2 -2
  101. package/dist/{grok-adapter-ys7gaqee.js → grok-adapter-ag4wks2a.js} +10 -10
  102. package/dist/handlers-tzmevqb5.js +41 -0
  103. package/dist/{heartbeat-w3mntghj.js → heartbeat-psfvcgwp.js} +23 -23
  104. package/dist/{hook-g7kvv6x9.js → hook-8pz04697.js} +6 -6
  105. package/dist/{hook-3jjywnpb.js → hook-cyq4mryn.js} +8 -8
  106. package/dist/{http-tkp7d4kb.js → http-haj1nd6k.js} +921 -169
  107. package/dist/{index-q7m26kvs.js → index-jwt2bj6f.js} +265 -97
  108. package/dist/{index-3n8m9ea2.js → index-q52f47pe.js} +1 -1
  109. package/dist/{index-31ceyf42.js → index-syvhnvtw.js} +1 -1
  110. package/dist/index-y1ajx04a.js +43 -0
  111. package/dist/{index-1ef1myq2.js → index-z5h22pes.js} +20 -20
  112. package/dist/{index-xdaahthb.js → index-zyq8ct52.js} +20 -20
  113. package/dist/{keepalive-v4ta8wgg.js → keepalive-xdvsamvj.js} +4 -4
  114. package/dist/lead-hqg57kdp.js +79 -0
  115. package/dist/{maintenance-84n1ex21.js → maintenance-4y2xzh3a.js} +1 -1
  116. package/dist/{oauth-refresh-sweep-vjnnandw.js → oauth-refresh-sweep-jd4r7zbs.js} +9 -4
  117. package/dist/{onboard-sfmpe4np.js → onboard-18447q9q.js} +6 -6
  118. package/dist/{opencode-adapter-jmpst4q4.js → opencode-adapter-26b2frdf.js} +7 -7
  119. package/dist/{otel-impl-v6cc0zve.js → otel-impl-f9tgr8yw.js} +2 -2
  120. package/dist/{pi-mono-adapter-fk8fkcf6.js → pi-mono-adapter-qn6qbga1.js} +38 -17
  121. package/dist/{pricing-refresh-fsk1e1zc.js → pricing-refresh-dw2tgb53.js} +3 -3
  122. package/dist/{rbac-roles-prmkdnkw.js → rbac-roles-aygm2760.js} +2 -2
  123. package/dist/{rbac-roles-zxmxqa39.js → rbac-roles-s4nwj2m3.js} +1 -1
  124. package/dist/render-v2-yfvdfr0x.js +16 -0
  125. package/dist/{resume-frdtgfa0.js → resume-1bmvjbf3.js} +9 -9
  126. package/dist/{runtime-bt5pkpm1.js → runtime-f7tpzedy.js} +1 -1
  127. package/dist/{session-access-fpez4y5q.js → session-access-r5garej6.js} +4 -4
  128. package/dist/session-source-backfill-424wzv0r.js +110 -0
  129. package/dist/{setup-mq6m3m8q.js → setup-8tygvxkq.js} +1 -1
  130. package/dist/{virtual-modules-mnfbh5mr.js → virtual-modules-xsw323b3.js} +2 -2
  131. package/dist/{work-objects-kfahhjsq.js → work-objects-ggnghpgf.js} +23 -23
  132. package/dist/worker-sqjd1nqf.js +79 -0
  133. package/dist/{x-pbpezr0s.js → x-wxrzvzx8.js} +2 -2
  134. package/openapi.json +1324 -14
  135. package/package.json +5 -3
  136. package/src/assets/source-key.ts +95 -0
  137. package/src/be/automation-preflight.ts +2 -0
  138. package/src/be/db/api-keys.ts +89 -0
  139. package/src/be/db/session-labels.ts +28 -0
  140. package/src/be/db/session-moves.ts +5 -6
  141. package/src/be/db/session-tree.ts +153 -14
  142. package/src/be/db/tasks/read.ts +11 -0
  143. package/src/be/db/tasks/write.ts +6 -1
  144. package/src/be/db/workflow-runs.ts +219 -6
  145. package/src/be/db-retention.ts +61 -6
  146. package/src/be/db.ts +135 -132
  147. package/src/be/memory/providers/openai-embedding.ts +5 -1
  148. package/src/be/memory/task-learning.ts +155 -0
  149. package/src/be/migrations/244_api_key_validation.sql +4 -0
  150. package/src/be/migrations/245_script_executor.sql +3 -0
  151. package/src/be/oauth-refresh-sweep.ts +2 -1
  152. package/src/be/onboarding.ts +4 -0
  153. package/src/be/scripts/boot-reembed.ts +2 -0
  154. package/src/be/scripts/db.ts +14 -4
  155. package/src/be/scripts/embeddings.ts +2 -0
  156. package/src/be/scripts/run-saved.ts +1 -0
  157. package/src/be/scripts/typecheck.ts +10 -4
  158. package/src/be/seed-skills/index.ts +7 -0
  159. package/src/be/session-source-backfill.ts +163 -0
  160. package/src/be/swarm-config-guard.ts +1 -0
  161. package/src/comb/review-batch.ts +28 -1
  162. package/src/comb/templates.ts +7 -2
  163. package/src/commands/claude-managed-setup.ts +7 -1
  164. package/src/commands/credential-refresh.ts +76 -1
  165. package/src/commands/credential-wait.ts +2 -2
  166. package/src/commands/onboard/compose-generator.ts +5 -3
  167. package/src/commands/provider-credentials.ts +212 -171
  168. package/src/commands/runner.ts +25 -4
  169. package/src/extensions/apply-task-create.ts +8 -1
  170. package/src/extensions/contract-types.generated.ts +1 -1
  171. package/src/extensions/contract.ts +5 -0
  172. package/src/heartbeat/heartbeat.ts +14 -1
  173. package/src/heartbeat/script-runner-probe.ts +47 -0
  174. package/src/http/all-routes.ts +2 -0
  175. package/src/http/api-keys.ts +77 -9
  176. package/src/http/assets.ts +15 -0
  177. package/src/http/codex-oauth-accounts.ts +191 -0
  178. package/src/http/comb.ts +15 -2
  179. package/src/http/config.ts +1 -1
  180. package/src/http/core.ts +6 -0
  181. package/src/http/fleet-benchmark.ts +5 -2
  182. package/src/http/idempotency-key.ts +1 -1
  183. package/src/http/index.ts +14 -3
  184. package/src/http/integrations.ts +5 -1
  185. package/src/http/kv.ts +8 -3
  186. package/src/http/onboarding.ts +6 -1
  187. package/src/http/pages-public.ts +38 -5
  188. package/src/http/pool-keys.ts +354 -0
  189. package/src/http/scripts.ts +27 -0
  190. package/src/http/sessions.ts +37 -12
  191. package/src/http/stats.ts +1 -0
  192. package/src/http/status.ts +26 -12
  193. package/src/http/tasks.ts +3 -0
  194. package/src/http/used-by.ts +7 -2
  195. package/src/http/workflows.ts +88 -9
  196. package/src/http/x.ts +5 -0
  197. package/src/integrations/chat-sdk/inbound.ts +27 -0
  198. package/src/kv-reserved-namespaces.ts +19 -0
  199. package/src/prompts/base-prompt.ts +21 -1
  200. package/src/prompts/session-templates.ts +17 -3
  201. package/src/providers/acp-targets.ts +1 -1
  202. package/src/providers/amp-adapter.ts +1 -1
  203. package/src/providers/claude-adapter.ts +5 -1
  204. package/src/providers/claude-managed-adapter.ts +16 -9
  205. package/src/providers/codex-adapter.ts +71 -11
  206. package/src/providers/dsh-adapter.ts +1 -1
  207. package/src/providers/pi-mono-adapter.ts +41 -11
  208. package/src/scheduler/scheduler.ts +5 -3
  209. package/src/scripts-runtime/eval-harness.ts +8 -1
  210. package/src/scripts-runtime/executors/native.ts +22 -16
  211. package/src/scripts-runtime/executors/quickjs-prelude.ts +103 -1
  212. package/src/scripts-runtime/executors/quickjs-runner.ts +2 -1
  213. package/src/scripts-runtime/executors/quickjs.ts +7 -0
  214. package/src/scripts-runtime/executors/registry.ts +32 -0
  215. package/src/scripts-runtime/executors/types.ts +7 -0
  216. package/src/scripts-runtime/host-validated-args.ts +133 -0
  217. package/src/scripts-runtime/loader.ts +30 -3
  218. package/src/scripts-runtime/swarm-sdk.ts +16 -3
  219. package/src/scripts-runtime/types/stdlib.d.ts +10 -2
  220. package/src/scripts-runtime/types/swarm-extension.d.ts +17 -8
  221. package/src/scripts-runtime/types/swarm-sdk.d.ts +10 -2
  222. package/src/slack/assistant.ts +7 -0
  223. package/src/slack/channel-labels.ts +74 -0
  224. package/src/slack/handlers.ts +8 -0
  225. package/src/slack/inbound-files.ts +5 -2
  226. package/src/slack/thread-buffer.ts +4 -0
  227. package/src/tasks/sibling-awareness.ts +12 -3
  228. package/src/telemetry-context.ts +5 -6
  229. package/src/telemetry-identity.ts +3 -3
  230. package/src/tests/api-key-status-by-suffix.test.ts +242 -0
  231. package/src/tests/api-keys-validation.test.ts +170 -0
  232. package/src/tests/base-prompt.test.ts +70 -2
  233. package/src/tests/claude-managed-adapter.test.ts +46 -0
  234. package/src/tests/claude-routes-e2e.test.ts +7 -2
  235. package/src/tests/codex-credential-pools.test.ts +120 -0
  236. package/src/tests/codex-gateway-route.test.ts +165 -0
  237. package/src/tests/codex-oauth-accounts.test.ts +357 -0
  238. package/src/tests/comb-review-batch.test.ts +63 -2
  239. package/src/tests/community-linear-delivery-loop.test.ts +2099 -0
  240. package/src/tests/config-pool-keys.test.ts +533 -0
  241. package/src/tests/credential-check.test.ts +294 -4
  242. package/src/tests/credential-refresh.test.ts +172 -1
  243. package/src/tests/db-retention.test.ts +9 -3
  244. package/src/tests/db-task-read-contract.test.ts +1 -0
  245. package/src/tests/db-task-write-contract.test.ts +1 -3
  246. package/src/tests/docs-index-footprint.test.js +3 -3
  247. package/src/tests/docs-index.test.ts +135 -0
  248. package/src/tests/dsh-adapter.test.ts +1 -1
  249. package/src/tests/extensions-pre-task.test.ts +53 -1
  250. package/src/tests/fetch-resolved-env.test.ts +16 -2
  251. package/src/tests/fixtures/extensions/record-task-create/hooks.ts +9 -0
  252. package/src/tests/fixtures/extensions/record-task-create/manifest.json +7 -0
  253. package/src/tests/fleet-benchmark.test.ts +8 -0
  254. package/src/tests/get-workflow-run-tool.test.ts +98 -0
  255. package/src/tests/heartbeat-checklist.test.ts +89 -0
  256. package/src/tests/heartbeat-script-runner-probe.test.ts +83 -0
  257. package/src/tests/integrations-http.test.ts +32 -2
  258. package/src/tests/internal-ai/complete-structured.test.ts +37 -1
  259. package/src/tests/internal-ai/credentials.test.ts +23 -0
  260. package/src/tests/kv-http.test.ts +32 -0
  261. package/src/tests/kv-tool.test.ts +25 -0
  262. package/src/tests/multi-runtime-registration.test.ts +12 -12
  263. package/src/tests/oauth-refresh-sweep.test.ts +34 -1
  264. package/src/tests/onboard-compose.test.ts +20 -0
  265. package/src/tests/onboarding.test.ts +108 -1
  266. package/src/tests/openai-embedding-credentials.test.ts +35 -0
  267. package/src/tests/opencode-adapter.test.ts +2 -1
  268. package/src/tests/openrouter-attribution-call-sites.test.ts +2 -2
  269. package/src/tests/org-website.test.ts +36 -0
  270. package/src/tests/pages-frame-ancestors.test.ts +162 -0
  271. package/src/tests/pi-codemode.test.ts +2 -1
  272. package/src/tests/pi-mono-adapter.test.ts +54 -0
  273. package/src/tests/pi-native-mcp.test.ts +13 -1
  274. package/src/tests/pi-tool-exposure.test.ts +8 -8
  275. package/src/tests/probe-tool-schema-tokens.test.ts +144 -0
  276. package/src/tests/prompt-template-session.test.ts +4 -3
  277. package/src/tests/provider-key-probes.test.ts +181 -0
  278. package/src/tests/rbac-e2e-helpers.test.ts +88 -1
  279. package/src/tests/rbac-e2e-helpers.ts +36 -11
  280. package/src/tests/request-composition-derive.test.ts +329 -0
  281. package/src/tests/script-connections.test.ts +4 -0
  282. package/src/tests/script-executor-conformance.test.ts +36 -1
  283. package/src/tests/script-executor-quickjs-pool.test.ts +50 -0
  284. package/src/tests/script-executor-quickjs.test.ts +140 -0
  285. package/src/tests/script-host-validated-args-native.test.ts +196 -0
  286. package/src/tests/script-per-script-executor.test.ts +415 -0
  287. package/src/tests/script-runs-retention.test.ts +212 -0
  288. package/src/tests/scripts-external-api.test.ts +45 -0
  289. package/src/tests/sdk-allowlist.test.ts +42 -2
  290. package/src/tests/self-improvement.test.ts +4 -4
  291. package/src/tests/session-source-backfill.test.ts +429 -0
  292. package/src/tests/session-source-keys.test.ts +236 -0
  293. package/src/tests/session-source-labels.test.ts +419 -0
  294. package/src/tests/sessions-detail-batch.test.ts +2 -0
  295. package/src/tests/sessions-move.test.ts +131 -0
  296. package/src/tests/sessions-tree.test.ts +299 -2
  297. package/src/tests/slack-inbound-files.test.ts +103 -23
  298. package/src/tests/status.test.ts +101 -18
  299. package/src/tests/store-progress-learning.test.ts +288 -0
  300. package/src/tests/tasks-workflow-run-filter.test.ts +146 -0
  301. package/src/tests/test-net.ts +31 -0
  302. package/src/tests/transcription.test.ts +8 -0
  303. package/src/tests/ui-logs-parser.test.ts +180 -0
  304. package/src/tests/used-by-route.test.ts +11 -0
  305. package/src/tests/workflow-cascade-cancel.test.ts +172 -0
  306. package/src/tests/workflow-engine-v2.test.ts +116 -1
  307. package/src/tests/workflow-http-v2.test.ts +131 -0
  308. package/src/tests/workflow-mcp-trigger-schema.test.ts +209 -0
  309. package/src/tests/workflow-run-finished-event.test.ts +263 -0
  310. package/src/tests/workflow-step-order.test.ts +92 -0
  311. package/src/tests/workflow-sub-workflow.test.ts +30 -0
  312. package/src/tests/workflow-swarm-script.test.ts +34 -0
  313. package/src/tools/get-tasks.ts +8 -0
  314. package/src/tools/kv/kv-read-auth.ts +4 -2
  315. package/src/tools/script-common.ts +1 -0
  316. package/src/tools/script-run.ts +7 -0
  317. package/src/tools/script-upsert.ts +7 -0
  318. package/src/tools/store-progress.ts +67 -1
  319. package/src/tools/task-action.ts +1 -1
  320. package/src/tools/workflows/get-workflow-run.ts +14 -4
  321. package/src/tools/workflows/trigger-workflow.ts +104 -10
  322. package/src/types.ts +36 -1
  323. package/src/utils/company-profile.ts +51 -1
  324. package/src/utils/credentials.ts +10 -4
  325. package/src/utils/internal-ai/complete-structured.ts +5 -0
  326. package/src/utils/internal-ai/credentials.ts +4 -3
  327. package/src/utils/provider-key-probes.ts +328 -0
  328. package/src/utils/transcription.ts +4 -1
  329. package/src/workflows/engine.ts +18 -16
  330. package/src/workflows/executors/sub-workflow.ts +8 -1
  331. package/src/workflows/executors/swarm-script.ts +5 -0
  332. package/src/workflows/foreach-driver.ts +5 -11
  333. package/src/workflows/node-timeout.ts +30 -0
  334. package/templates/ai-toolbox.manifest.json +2 -2
  335. package/templates/community/linear-delivery-loop/PLAYBOOK.md +323 -0
  336. package/templates/community/linear-delivery-loop/README.md +38 -0
  337. package/templates/community/linear-delivery-loop/config.example.json +31 -0
  338. package/templates/community/linear-delivery-loop/lead-prompt.md +34 -0
  339. package/templates/community/linear-delivery-loop/schedule.json +10 -0
  340. package/templates/community/linear-delivery-loop/scripts/linear-delivery-setup.ts +148 -0
  341. package/templates/community/linear-delivery-loop/scripts/linear-delivery-tick.ts +1781 -0
  342. package/templates/skills/researching/content.md +2 -0
  343. package/templates/skills/swarm-docs/config.json +14 -0
  344. package/templates/skills/swarm-docs/content.md +144 -0
  345. package/templates/skills/swarm-scripts/SKILL.md +1 -0
  346. package/templates/skills/swarm-scripts/content.md +1 -0
  347. package/dist/cli-7421jzsw.js +0 -84
  348. package/dist/cli-e45e4m6b.js +0 -413
  349. package/dist/cli-zw88zjba.js +0 -307
  350. package/dist/handlers-wy1dr6ja.js +0 -41
  351. package/dist/index-nmm79qgr.js +0 -43
  352. package/dist/lead-sawnyqxk.js +0 -79
  353. package/dist/render-v2-pjwxvnkw.js +0 -12
  354. package/dist/worker-v5e5rxj3.js +0 -79
@@ -773,4 +773,4 @@ var init_src2 = __esm(() => {
773
773
  init_resolve_alias();
774
774
  });
775
775
 
776
- export { isAlias, parseAlias, resolveAlias, harnessCatalogSection, isHarnessModelJudged, normalizeGrokModel, harnessModelIds, modelFamilyKey, buildClaudeShortnameMap, harnessModelMismatch, openAICompatibleProviders, openAICompatibleProviderIds, providerKeyVars, openAICompatibleKeyVars, openAICompatibleBaseUrlVars, baseUrlOverride, ignoredBaseUrlVar, providerBaseUrl, openAICompatibleProvider, providerForModel, providerForKeyVar, providerKeyFromEnv, providerHarnessModels, withAgentChatRegistrySections, registryCatalogSections, withRegistryCatalogSections, dshCatalogRef, grokCatalogRef, cursorCatalogRef, reasoningLevelsFor, claudeCatalogModelId, init_src2 };
776
+ export { isAlias, parseAlias, resolveAlias, harnessCatalogSection, isHarnessModelJudged, normalizeGrokModel, harnessModelIds, modelFamilyKey, buildClaudeShortnameMap, harnessModelMismatch, openAICompatibleProviders, openAICompatibleProviderIds, providerKeyVars, openAICompatibleKeyVars, baseUrlEnvVar, openAICompatibleBaseUrlVars, baseUrlOverride, ignoredBaseUrlVar, providerBaseUrl, openAICompatibleProvider, providerForModel, providerForKeyVar, providerKeyFromEnv, providerHarnessModels, withAgentChatRegistrySections, registryCatalogSections, withRegistryCatalogSections, dshCatalogRef, grokCatalogRef, cursorCatalogRef, reasoningLevelsFor, claudeCatalogModelId, init_src2 };
@@ -6,22 +6,22 @@ import {
6
6
  } from "./cli-jc1g9ndz.js";
7
7
  import {
8
8
  applyReasoningEffort
9
- } from "./cli-bn0rewsy.js";
9
+ } from "./cli-c081bj3b.js";
10
10
  import {
11
11
  getContextWindowSize,
12
12
  clampContextPercent,
13
13
  init_context_window
14
- } from "./cli-0shx9j93.js";
14
+ } from "./cli-pfk92eqz.js";
15
15
  import {
16
16
  DEFAULT_MODEL_TIER_MAP,
17
17
  init_types
18
- } from "./cli-mz9afxxf.js";
18
+ } from "./cli-9pshx6rd.js";
19
19
  import {
20
20
  resolveTemplateFromCode,
21
21
  resolveTemplateAsync,
22
22
  init_resolver,
23
23
  init_session_templates
24
- } from "./cli-dqygeeh5.js";
24
+ } from "./cli-f1e0ptjj.js";
25
25
  import {
26
26
  parseEnvFlag,
27
27
  init_env_flag
@@ -30,11 +30,11 @@ import {
30
30
  scrubSecrets,
31
31
  registerVolatileSecret,
32
32
  init_secret_scrubber
33
- } from "./cli-n4c8e3s5.js";
33
+ } from "./cli-708wdy32.js";
34
34
  import {
35
35
  cursorCatalogRef,
36
36
  init_src2
37
- } from "./cli-nwyw3zhg.js";
37
+ } from "./cli-gxee0bqa.js";
38
38
 
39
39
  // src/providers/cursor-adapter.ts
40
40
  init_src2();
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  workflowEventBus2,
6
6
  init_event_bus
7
- } from "./cli-dabehxhp.js";
7
+ } from "./cli-kt907da6.js";
8
8
  import {
9
9
  getDbClient2,
10
10
  isRuntimePoolsEnabled,
@@ -66,7 +66,7 @@ import {
66
66
  getStaleApprovalRequests2,
67
67
  upsertKv2,
68
68
  init_db3
69
- } from "./cli-jb30dzvk.js";
69
+ } from "./cli-48gxjmcz.js";
70
70
  import {
71
71
  poolTaskRunsOnHarness,
72
72
  isRuntimePoolWakeable,
@@ -87,33 +87,34 @@ import {
87
87
  createRerouteDecisionTask,
88
88
  createPoolStarvationDecisionTask,
89
89
  canClaim
90
- } from "./cli-asq5ydm4.js";
90
+ } from "./cli-6a9qfa8b.js";
91
91
  import {
92
92
  runtimeStaleThresholdMinutes,
93
93
  countActiveRuntimeInstancesForAgent,
94
94
  agentsWithLiveRuntime,
95
95
  expireStaleRuntimeInstances,
96
96
  createApprovalFollowUpTask
97
- } from "./cli-gbfxp48k.js";
97
+ } from "./cli-j0ppywdr.js";
98
98
  import {
99
99
  listRuntimePools2,
100
100
  init_db
101
- } from "./cli-19202kew.js";
101
+ } from "./cli-6srv653c.js";
102
102
  import {
103
103
  remediateStalledRuntime
104
- } from "./cli-1r5ad7j5.js";
104
+ } from "./cli-9gsm2rzp.js";
105
105
  import {
106
+ runScriptWithRunCredential,
106
107
  runSavedScriptAsAgent
107
- } from "./cli-7p4jxgtt.js";
108
+ } from "./cli-j9bpmykh.js";
108
109
  import {
109
110
  mintToken,
110
111
  init_users
111
- } from "./cli-6a1xg1p7.js";
112
+ } from "./cli-a89zdqz9.js";
112
113
  import {
113
114
  TERMINAL_TASK_STATUSES,
114
115
  SUPERSEDED_WORKFLOW_TASK_REASON,
115
116
  init_types
116
- } from "./cli-mz9afxxf.js";
117
+ } from "./cli-9pshx6rd.js";
117
118
  import {
118
119
  DEFAULT_OPENROUTER_BASE_URL,
119
120
  getOpenRouterBaseUrl,
@@ -124,11 +125,11 @@ import {
124
125
  init_registry,
125
126
  resolveTemplate,
126
127
  init_resolver
127
- } from "./cli-dqygeeh5.js";
128
+ } from "./cli-f1e0ptjj.js";
128
129
  import {
129
130
  init_package,
130
131
  package_default
131
- } from "./cli-xtrz6bzs.js";
132
+ } from "./cli-ptfq202x.js";
132
133
  import {
133
134
  isEnvFlagEnabled,
134
135
  init_env_flag
@@ -136,7 +137,7 @@ import {
136
137
  import {
137
138
  scrubSecrets,
138
139
  init_secret_scrubber
139
- } from "./cli-n4c8e3s5.js";
140
+ } from "./cli-708wdy32.js";
140
141
 
141
142
  // src/be/runtime-pools/routing.ts
142
143
  init_runtime_pools_flag();
@@ -480,6 +481,44 @@ init_env_flag();
480
481
  init_openrouter_base_url();
481
482
  init_secret_scrubber();
482
483
 
484
+ // src/heartbeat/script-runner-probe.ts
485
+ init_secret_scrubber();
486
+ var PROBE_TIMEOUT_MS = 1e4;
487
+ async function probeScriptRunner(agentId, runner = runScriptWithRunCredential) {
488
+ const controller = new AbortController;
489
+ let timer;
490
+ try {
491
+ const deadline = new Promise((_, reject) => {
492
+ timer = setTimeout(() => {
493
+ controller.abort();
494
+ reject(new Error("timeout after 10000ms"));
495
+ }, PROBE_TIMEOUT_MS);
496
+ });
497
+ const output = await Promise.race([
498
+ runner({
499
+ source: "export default async function () { return true; }",
500
+ agentId,
501
+ fsMode: "none",
502
+ timeoutMs: PROBE_TIMEOUT_MS,
503
+ signal: controller.signal
504
+ }),
505
+ deadline
506
+ ]);
507
+ if (output.exitCode !== 0 || output.error || output.runtimeError) {
508
+ throw new Error(output.runtimeError?.message ?? output.error ?? `script exited with code ${output.exitCode}`);
509
+ }
510
+ return null;
511
+ } catch (error) {
512
+ const message = error instanceof Error ? error.message : String(error);
513
+ return {
514
+ quiet: false,
515
+ reason: `script-runner-unhealthy: ${scrubSecrets(message)}`.slice(0, 300)
516
+ };
517
+ } finally {
518
+ clearTimeout(timer);
519
+ }
520
+ }
521
+
483
522
  // src/heartbeat/templates.ts
484
523
  init_registry();
485
524
  registerTemplate({
@@ -1481,6 +1520,17 @@ async function getBootTriageFindings() {
1481
1520
  };
1482
1521
  }
1483
1522
  async function defaultChecklistGateRunner(scriptName, leadAgentId, signal, deps = {}) {
1523
+ try {
1524
+ const unhealthy = await (deps.probe ?? probeScriptRunner)(leadAgentId);
1525
+ if (unhealthy)
1526
+ return unhealthy;
1527
+ } catch (error) {
1528
+ const message = error instanceof Error ? error.message : String(error);
1529
+ return {
1530
+ quiet: false,
1531
+ reason: `script-runner-unhealthy: ${scrubSecrets(message)}`.slice(0, 300)
1532
+ };
1533
+ }
1484
1534
  const script = await getScript({ name: scriptName, scope: "global" });
1485
1535
  if (!script)
1486
1536
  throw new Error(`global script "${scriptName}" not found`);
@@ -11,10 +11,13 @@ import {
11
11
  approvalCancellationNotificationKey,
12
12
  init_approvals,
13
13
  getTaskById2,
14
+ WorkflowReplayStateError,
15
+ init_workflow_replay,
14
16
  getRunLineageBlock,
15
17
  getWorkflowRunStatus,
16
18
  getChildWorkflowRunId,
17
19
  isParentStepAttemptCurrent,
20
+ emitRunFinished,
18
21
  createForeachChildSteps,
19
22
  init_workflow_runs,
20
23
  isApiOnlyConfigKey,
@@ -27,8 +30,6 @@ import {
27
30
  getOAuthApp,
28
31
  getOAuthTokens,
29
32
  init_oauth,
30
- WorkflowReplayStateError,
31
- init_workflow_replay,
32
33
  createTaskExtended2,
33
34
  getSwarmConfigs2,
34
35
  upsertSwarmConfig2,
@@ -55,30 +56,30 @@ import {
55
56
  releaseApprovalCancellationNotificationClaim2,
56
57
  updateApprovalRequestNotifications2,
57
58
  init_db3
58
- } from "./cli-jb30dzvk.js";
59
+ } from "./cli-48gxjmcz.js";
59
60
  import {
60
61
  isMultiRuntimeEnabled
61
62
  } from "./cli-e8xyjvfc.js";
62
63
  import {
63
64
  getSlackApp2
64
- } from "./cli-abs8ndtr.js";
65
+ } from "./cli-m30k9777.js";
65
66
  import {
66
67
  externalChannelToolError2,
67
68
  isBlockExternalEnabled2,
68
69
  getChannelBlockReason2
69
- } from "./cli-eftzyh9y.js";
70
+ } from "./cli-s09j9vp5.js";
70
71
  import {
71
72
  DEFAULT_MODEL,
72
73
  resolveCredential
73
- } from "./cli-qqzmjxkf.js";
74
+ } from "./cli-1m9x8dr5.js";
74
75
  import {
75
76
  revokeRuntimeTokensForRuntime,
76
77
  init_users
77
- } from "./cli-6a1xg1p7.js";
78
+ } from "./cli-a89zdqz9.js";
78
79
  import {
79
80
  TERMINAL_TASK_STATUSES,
80
81
  init_types
81
- } from "./cli-mz9afxxf.js";
82
+ } from "./cli-9pshx6rd.js";
82
83
  import {
83
84
  getSlackConfiguration,
84
85
  isSlackConfigured,
@@ -87,7 +88,7 @@ import {
87
88
  import {
88
89
  selectCredential,
89
90
  init_credentials
90
- } from "./cli-zw88zjba.js";
91
+ } from "./cli-gt4h8cxw.js";
91
92
  import {
92
93
  DEFAULT_OPENROUTER_BASE_URL,
93
94
  getOpenRouterBaseUrl,
@@ -99,7 +100,7 @@ import {
99
100
  init_template,
100
101
  resolveTemplate,
101
102
  init_resolver
102
- } from "./cli-dqygeeh5.js";
103
+ } from "./cli-f1e0ptjj.js";
103
104
  import {
104
105
  init_zod
105
106
  } from "./cli-4chz1hye.js";
@@ -131,13 +132,13 @@ import {
131
132
  isSensitiveKey,
132
133
  scrubSecrets,
133
134
  init_secret_scrubber
134
- } from "./cli-n4c8e3s5.js";
135
+ } from "./cli-708wdy32.js";
135
136
  import {
136
137
  providerKeyVars,
137
138
  providerBaseUrl,
138
139
  providerForModel,
139
140
  init_src2
140
- } from "./cli-nwyw3zhg.js";
141
+ } from "./cli-gxee0bqa.js";
141
142
 
142
143
  // src/automation-preflight-alert.ts
143
144
  init_constants2();
@@ -149,7 +150,7 @@ async function notifyAutomationPreflightFailure(preflight) {
149
150
  return;
150
151
  }
151
152
  try {
152
- const { getSlackApp } = await import("./app-ctn8gsgx.js");
153
+ const { getSlackApp } = await import("./app-mwx1d5a9.js");
153
154
  const app = getSlackApp();
154
155
  if (!app) {
155
156
  console.warn("[Automation Preflight] Slack not available, cannot send notification");
@@ -176,6 +177,7 @@ init_config();
176
177
  init_env_flag();
177
178
  init_secret_scrubber();
178
179
  init_db3();
180
+ init_workflow_runs();
179
181
  init_oauth();
180
182
  init_scrub_json();
181
183
  var NEEDS_SETUP_PREFIX = "needs_setup:";
@@ -438,6 +440,7 @@ async function recordWorkflowPreflightFailure(input) {
438
440
  timestamp,
439
441
  timestamp
440
442
  ]);
443
+ emitRunFinished(runId, input.workflowId, "failed");
441
444
  return {
442
445
  runId,
443
446
  recorded: await isFirstWorkflowPreflightFailureToday(input.workflowId, runId, now)
@@ -3812,6 +3815,18 @@ function resolveNodeTimeoutMs(node) {
3812
3815
  return config.timeout;
3813
3816
  return DEFAULT_NODE_TIMEOUT_MS;
3814
3817
  }
3818
+ function startStepDeadline(timeoutMs) {
3819
+ const controller = new AbortController;
3820
+ let timer;
3821
+ const expired = new Promise((_, reject) => {
3822
+ timer = setTimeout(() => {
3823
+ const error = new Error(`Step timed out after ${timeoutMs}ms`);
3824
+ reject(error);
3825
+ controller.abort(error);
3826
+ }, timeoutMs);
3827
+ });
3828
+ return { signal: controller.signal, expired, clear: () => clearTimeout(timer) };
3829
+ }
3815
3830
 
3816
3831
  // src/workflows/readiness.ts
3817
3832
  async function findWorkflowReadinessProblems(definition, registry) {
@@ -4011,8 +4026,9 @@ async function startWorkflowExecution2(workflow, triggerData, registry, options
4011
4026
  if (initial.status)
4012
4027
  return runId;
4013
4028
  const walk = walkGraph(workflow.definition, runId, initial.context, findEntryNodes(workflow.definition), registry, workflow.id, getSecretInputKeys(workflow.input), options);
4014
- if (options.parentStepId) {
4015
- walk.catch((err) => console.error(`[workflows] Child workflow run ${runId} failed:`, err));
4029
+ if (options.parentStepId || options.detach) {
4030
+ const kind = options.parentStepId ? "Child" : "Detached";
4031
+ walk.catch((err) => console.error(`[workflows] ${kind} workflow run ${runId} failed:`, err));
4016
4032
  return runId;
4017
4033
  }
4018
4034
  await walk;
@@ -4487,17 +4503,17 @@ async function runClaimedStep(def, runId, ctx, node, registry, existingStep, ste
4487
4503
  requestedByUserId: options.requestedByUserId,
4488
4504
  inputCtx: interpolationCtx
4489
4505
  };
4490
- const timeoutMs = resolveNodeTimeoutMs(node);
4506
+ const deadline = startStepDeadline(resolveNodeTimeoutMs(node));
4491
4507
  let result;
4492
4508
  try {
4493
4509
  result = await Promise.race([
4494
4510
  executor.run({
4495
4511
  config: interpolatedConfig,
4496
4512
  context: executionCtx,
4497
- meta
4513
+ meta: { ...meta, signal: deadline.signal }
4498
4514
  }),
4499
- timeoutPromise(timeoutMs)
4500
- ]);
4515
+ deadline.expired
4516
+ ]).finally(deadline.clear);
4501
4517
  } catch (err) {
4502
4518
  const errorMsg = err instanceof Error ? err.message : String(err);
4503
4519
  const retryPolicy = node.retry || executor.retryPolicy;
@@ -4536,7 +4552,7 @@ async function runClaimedStep(def, runId, ctx, node, registry, existingStep, ste
4536
4552
  }
4537
4553
  const waiting = await checkpointStepWaiting(runId, stepId, ctx);
4538
4554
  if (waiting && result.waitFor === "workflow.child.finished") {
4539
- const { resumeFromChildRun } = await import("./resume-frdtgfa0.js");
4555
+ const { resumeFromChildRun } = await import("./resume-1bmvjbf3.js");
4540
4556
  await resumeFromChildRun(stepId, registry);
4541
4557
  }
4542
4558
  return { outcome: waiting ? "waiting" : "completed", successors: [] };
@@ -4741,11 +4757,6 @@ function scriptBodyInterpolationError(nodeId, tokens) {
4741
4757
  const renderedTokens = [...new Set(tokens)].map((token) => `{{${token}}}`).join(", ");
4742
4758
  return `Script body interpolation failed for node "${nodeId}": unresolved or disallowed token(s): ${renderedTokens}. Executable source may interpolate only input, workflow, swarm, or run values. Pass dynamic trigger or upstream values through config.args and read them from argv.`;
4743
4759
  }
4744
- function timeoutPromise(ms) {
4745
- return new Promise((_, reject) => {
4746
- setTimeout(() => reject(new Error(`Step timed out after ${ms}ms`)), ms);
4747
- });
4748
- }
4749
4760
 
4750
4761
  // src/workflows/executors/foreach.ts
4751
4762
  init_zod();
@@ -4998,7 +5009,7 @@ async function runForeachDrive(runId, parentNodeId, registry) {
4998
5009
  if (drive.successors.length > 0) {
4999
5010
  await walkGraph(workflow.definition, runId, ctx, drive.successors, registry, workflow.id, getSecretInputKeys(workflow.input));
5000
5011
  } else {
5001
- const { finalizeOrWait } = await import("./resume-frdtgfa0.js");
5012
+ const { finalizeOrWait } = await import("./resume-1bmvjbf3.js");
5002
5013
  await finalizeOrWait(runId);
5003
5014
  }
5004
5015
  return drive;
@@ -5114,25 +5125,21 @@ async function startChild(input) {
5114
5125
  }
5115
5126
  }
5116
5127
  const executor = registry.get(bodyType);
5117
- const timeoutMs = resolveNodeTimeoutMs({ type: bodyType, config });
5118
- let timer;
5128
+ const deadline = startStepDeadline(resolveNodeTimeoutMs({ type: bodyType, config }));
5119
5129
  let result;
5120
5130
  try {
5121
5131
  result = await Promise.race([
5122
5132
  executor.run({
5123
5133
  config,
5124
5134
  context: { ...ctx, ...bodyCtx },
5125
- meta: { ...meta, stepId: child.id, nodeId: child.nodeId }
5135
+ meta: { ...meta, stepId: child.id, nodeId: child.nodeId, signal: deadline.signal }
5126
5136
  }),
5127
- new Promise((_, reject) => {
5128
- timer = setTimeout(() => reject(new Error(`Step timed out after ${timeoutMs}ms`)), timeoutMs);
5129
- })
5137
+ deadline.expired
5130
5138
  ]);
5131
5139
  } catch (err) {
5132
5140
  return { status: "failed", error: err instanceof Error ? err.message : String(err) };
5133
5141
  } finally {
5134
- if (timer)
5135
- clearTimeout(timer);
5142
+ deadline.clear();
5136
5143
  }
5137
5144
  if (result.status === "failed") {
5138
5145
  return {
@@ -5145,7 +5152,7 @@ async function startChild(input) {
5145
5152
  const parked = await getDbClient2().get("UPDATE workflow_run_steps SET status = 'waiting' WHERE id = ? AND status = 'running' RETURNING id", [child.id]);
5146
5153
  if (parked && result.waitFor === "workflow.child.finished") {
5147
5154
  ownedChildren.delete(child.id);
5148
- const { resumeFromChildRun } = await import("./resume-frdtgfa0.js");
5155
+ const { resumeFromChildRun } = await import("./resume-1bmvjbf3.js");
5149
5156
  await resumeFromChildRun(child.id, registry);
5150
5157
  }
5151
5158
  return null;