@desplega.ai/agent-swarm 2.6.0 → 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 (213) hide show
  1. package/README.md +2 -0
  2. package/dist/{acp-adapter-dgfakfpw.js → acp-adapter-ma1js5n7.js} +6 -6
  3. package/dist/{actions-fbqma8aa.js → actions-1vhmtvg9.js} +18 -18
  4. package/dist/{amp-adapter-en0jy6hs.js → amp-adapter-sxqqvmdk.js} +3 -3
  5. package/dist/{app-k8a5cgpp.js → app-mwx1d5a9.js} +3 -3
  6. package/dist/{assistant-a16433gr.js → assistant-yx1p6g82.js} +20 -20
  7. package/dist/{boot-reembed-f4nn561n.js → boot-reembed-5h37a2c2.js} +1 -1
  8. package/dist/{boot-reembed-6c1sjfnr.js → boot-reembed-7h78vmvv.js} +2 -1
  9. package/dist/{boot-scrub-sweep-d4w9gajf.js → boot-scrub-sweep-8mawd4gw.js} +3 -3
  10. package/dist/{boot-seeds-9bmkspyw.js → boot-seeds-ca84dhnn.js} +4 -4
  11. package/dist/{claude-adapter-nys1kjxa.js → claude-adapter-wqt4hfkq.js} +7 -7
  12. package/dist/{claude-managed-adapter-55207973.js → claude-managed-adapter-6fjqtr2z.js} +2 -2
  13. package/dist/{claude-managed-setup-3cm35gey.js → claude-managed-setup-rqv98sea.js} +2 -2
  14. package/dist/{claude-sdk-session-nw5yd8cp.js → claude-sdk-session-f29f3b2x.js} +7 -7
  15. package/dist/{cli-sxgtf5fw.js → cli-07q03xm2.js} +1 -1
  16. package/dist/{cli-k21gx5ht.js → cli-1hhbzkbb.js} +6 -6
  17. package/dist/{cli-v49fkghp.js → cli-1m9x8dr5.js} +1 -1
  18. package/dist/{cli-24j1jeeb.js → cli-2pvzmas1.js} +3 -3
  19. package/dist/{cli-w2656ka1.js → cli-2y7v133v.js} +7 -7
  20. package/dist/{cli-g8ka5j4j.js → cli-48gxjmcz.js} +94 -36
  21. package/dist/{cli-2sjhpsns.js → cli-54sj64fc.js} +1 -1
  22. package/dist/{cli-aj8djyqt.js → cli-60sty27p.js} +2 -2
  23. package/dist/{cli-4hxrf0p4.js → cli-6a9qfa8b.js} +308 -47
  24. package/dist/{cli-n7asmce6.js → cli-6mgdba42.js} +3 -3
  25. package/dist/{cli-gf95q3bm.js → cli-6srv653c.js} +3 -3
  26. package/dist/{cli-9abdgn5t.js → cli-86ehn4s5.js} +3 -3
  27. package/dist/{cli-bqztfyve.js → cli-8mbc9za9.js} +1 -1
  28. package/dist/{cli-a2rr0fmg.js → cli-8wmj18cz.js} +1 -1
  29. package/dist/{cli-c2habvsf.js → cli-9gsm2rzp.js} +8 -8
  30. package/dist/{cli-4rf0f5vg.js → cli-9pshx6rd.js} +4 -2
  31. package/dist/{cli-abkm71vr.js → cli-a6ds2epe.js} +1 -1
  32. package/dist/{cli-esakngh8.js → cli-a89zdqz9.js} +1 -1
  33. package/dist/{cli-3ndmpxxv.js → cli-ay40dnj3.js} +2 -2
  34. package/dist/{cli-kf4jree9.js → cli-aypd09nf.js} +1 -1
  35. package/dist/{cli-6y51ryva.js → cli-b3yzyc57.js} +1 -1
  36. package/dist/{cli-ag2yrnt5.js → cli-c668vvcf.js} +2 -2
  37. package/dist/{cli-5sckpqcx.js → cli-d20qvpr2.js} +1 -1
  38. package/dist/{cli-a34pr3w1.js → cli-e1595bgx.js} +2 -2
  39. package/dist/{cli-m70bajzr.js → cli-f12mr20z.js} +1 -1
  40. package/dist/{cli-dqygeeh5.js → cli-f1e0ptjj.js} +10 -1
  41. package/dist/{cli-mvjz5an3.js → cli-f4dbh7a5.js} +7 -7
  42. package/dist/{cli-az25fn5f.js → cli-gsfk58nw.js} +2 -2
  43. package/dist/{cli-1tem6ns9.js → cli-gt4h8cxw.js} +3 -2
  44. package/dist/{cli-cz37jqss.js → cli-h5jeg46p.js} +2 -2
  45. package/dist/{cli-emhjcj2y.js → cli-he9gbdx0.js} +60 -10
  46. package/dist/{cli-3fwqy71j.js → cli-j0ppywdr.js} +38 -31
  47. package/dist/{cli-5rj83bam.js → cli-j3y0x2n4.js} +34 -33
  48. package/dist/{cli-3gfvmzht.js → cli-j9bpmykh.js} +73 -25
  49. package/dist/{cli-m5a9m0ak.js → cli-kv7sbc2c.js} +3 -3
  50. package/dist/{cli-g20jjwt4.js → cli-m30k9777.js} +12 -12
  51. package/dist/{cli-683y0b3a.js → cli-m5e802r7.js} +2 -2
  52. package/dist/{cli-nn6vx2mq.js → cli-ptfq202x.js} +5 -3
  53. package/dist/{cli-d2dpf95n.js → cli-qj442fws.js} +1 -1
  54. package/dist/{cli-03gg9pd1.js → cli-rd5m70gj.js} +4 -4
  55. package/dist/{cli-gnsb1zxa.js → cli-s09j9vp5.js} +1 -1
  56. package/dist/{cli-zqne1qcj.js → cli-s0mgx214.js} +2 -2
  57. package/dist/{cli-sqma6vw1.js → cli-sgqm2582.js} +5 -5
  58. package/dist/{cli-nq677csy.js → cli-sjctjr48.js} +1 -1
  59. package/dist/{cli-3aqd4jaa.js → cli-twctnkng.js} +3 -3
  60. package/dist/{cli-j6rktc91.js → cli-v6shg7na.js} +1 -1
  61. package/dist/{cli-7enjwya9.js → cli-vz78s5wm.js} +1 -1
  62. package/dist/{cli-art7c1zh.js → cli-wqr7cea4.js} +4 -4
  63. package/dist/{cli-hfeb68z4.js → cli-x37r7qwf.js} +11 -3
  64. package/dist/{cli-ffvsj2qw.js → cli-yd2nreqw.js} +2 -2
  65. package/dist/{cli-ca6banwz.js → cli-ymjpkxgn.js} +6 -6
  66. package/dist/{cli-mtnj4fwa.js → cli-yxbsmx56.js} +5 -5
  67. package/dist/cli.js +18 -16
  68. package/dist/{codex-adapter-d95q4qsn.js → codex-adapter-zk59x2zh.js} +5 -5
  69. package/dist/{codex-hook-brpnycn5.js → codex-hook-xyjhvxwd.js} +1 -1
  70. package/dist/{codex-session-runner-gdwd8h0c.js → codex-session-runner-kh6s4j3n.js} +5 -5
  71. package/dist/{commands-jqmgk54b.js → commands-68et1qv2.js} +2 -2
  72. package/dist/{controller-z3jq589f.js → controller-fyrbnzg4.js} +2 -2
  73. package/dist/{controllers-connect-r2za39ef.js → controllers-connect-nep9h2xv.js} +19 -19
  74. package/dist/{cursor-adapter-4mr4jgkw.js → cursor-adapter-yss3pg7t.js} +1 -1
  75. package/dist/{db-w36wwb5g.js → db-28gjyvxj.js} +2 -2
  76. package/dist/{db-ppv2tze7.js → db-8ftwvzba.js} +3 -3
  77. package/dist/{dispatcher-pv5h77vf.js → dispatcher-hayexmkr.js} +17 -17
  78. package/dist/{dsh-adapter-d4pdpb3r.js → dsh-adapter-46wawff9.js} +1 -1
  79. package/dist/{easter-egg-3d-4sp4dvmc.js → easter-egg-3d-8d1e0h4m.js} +1 -1
  80. package/dist/{execute-jev839y1.js → execute-cjrfxfnm.js} +1 -1
  81. package/dist/{external-channel-y6nkzhnn.js → external-channel-xbmxcg09.js} +2 -2
  82. package/dist/{grok-adapter-t08b9ntm.js → grok-adapter-ag4wks2a.js} +7 -7
  83. package/dist/handlers-tzmevqb5.js +41 -0
  84. package/dist/{heartbeat-vn31xwdk.js → heartbeat-psfvcgwp.js} +20 -20
  85. package/dist/{hook-6d0zbvvt.js → hook-8pz04697.js} +5 -5
  86. package/dist/{hook-cpjs8q51.js → hook-cyq4mryn.js} +6 -6
  87. package/dist/{http-9c6medda.js → http-haj1nd6k.js} +109 -114
  88. package/dist/{index-qhjf2htm.js → index-jwt2bj6f.js} +261 -96
  89. package/dist/{index-g6k9tctj.js → index-q52f47pe.js} +1 -1
  90. package/dist/{index-pkma1yf8.js → index-syvhnvtw.js} +1 -1
  91. package/dist/{index-yqgbfgaj.js → index-y1ajx04a.js} +20 -20
  92. package/dist/{index-k0yt1tvq.js → index-z5h22pes.js} +17 -17
  93. package/dist/{index-38t35h0n.js → index-zyq8ct52.js} +17 -17
  94. package/dist/{keepalive-em0117bp.js → keepalive-xdvsamvj.js} +3 -3
  95. package/dist/{lead-23e7z59t.js → lead-hqg57kdp.js} +35 -35
  96. package/dist/{maintenance-kbme3qy9.js → maintenance-4y2xzh3a.js} +1 -1
  97. package/dist/{oauth-refresh-sweep-xysj4yse.js → oauth-refresh-sweep-jd4r7zbs.js} +8 -3
  98. package/dist/{onboard-p6q0vz97.js → onboard-18447q9q.js} +5 -5
  99. package/dist/{opencode-adapter-esv3k9yn.js → opencode-adapter-26b2frdf.js} +5 -5
  100. package/dist/{otel-impl-54qhqh1z.js → otel-impl-f9tgr8yw.js} +1 -1
  101. package/dist/{pi-mono-adapter-mymbwhj0.js → pi-mono-adapter-qn6qbga1.js} +33 -12
  102. package/dist/{pricing-refresh-yb75wv33.js → pricing-refresh-dw2tgb53.js} +3 -3
  103. package/dist/{rbac-roles-1vp2mw4p.js → rbac-roles-aygm2760.js} +2 -2
  104. package/dist/{rbac-roles-dexhc9x8.js → rbac-roles-s4nwj2m3.js} +1 -1
  105. package/dist/{render-v2-tjay5hhf.js → render-v2-yfvdfr0x.js} +3 -3
  106. package/dist/{resume-8ayf37g5.js → resume-1bmvjbf3.js} +7 -7
  107. package/dist/{runtime-hqe5cqcd.js → runtime-f7tpzedy.js} +1 -1
  108. package/dist/{session-access-fdhp987s.js → session-access-r5garej6.js} +4 -4
  109. package/dist/{session-source-backfill-qgtc86z1.js → session-source-backfill-424wzv0r.js} +2 -2
  110. package/dist/{setup-4rrmqcq3.js → setup-8tygvxkq.js} +1 -1
  111. package/dist/{virtual-modules-52km00d6.js → virtual-modules-xsw323b3.js} +2 -2
  112. package/dist/{work-objects-p28fgd70.js → work-objects-ggnghpgf.js} +20 -20
  113. package/dist/{worker-e3w7vye1.js → worker-sqjd1nqf.js} +35 -35
  114. package/openapi.json +69 -1
  115. package/package.json +5 -3
  116. package/src/be/automation-preflight.ts +2 -0
  117. package/src/be/db/api-keys.ts +9 -0
  118. package/src/be/db/workflow-runs.ts +36 -5
  119. package/src/be/db.ts +80 -22
  120. package/src/be/memory/task-learning.ts +155 -0
  121. package/src/be/migrations/245_script_executor.sql +3 -0
  122. package/src/be/oauth-refresh-sweep.ts +2 -1
  123. package/src/be/scripts/boot-reembed.ts +2 -0
  124. package/src/be/scripts/db.ts +14 -4
  125. package/src/be/scripts/embeddings.ts +2 -0
  126. package/src/be/scripts/run-saved.ts +1 -0
  127. package/src/be/scripts/typecheck.ts +9 -3
  128. package/src/be/seed-skills/index.ts +7 -0
  129. package/src/commands/onboard/compose-generator.ts +5 -3
  130. package/src/commands/provider-credentials.ts +2 -1
  131. package/src/heartbeat/heartbeat.ts +14 -1
  132. package/src/heartbeat/script-runner-probe.ts +47 -0
  133. package/src/http/api-keys.ts +24 -9
  134. package/src/http/idempotency-key.ts +1 -1
  135. package/src/http/index.ts +3 -3
  136. package/src/http/pages-public.ts +38 -5
  137. package/src/http/scripts.ts +27 -0
  138. package/src/http/workflows.ts +10 -0
  139. package/src/http/x.ts +5 -0
  140. package/src/prompts/base-prompt.ts +21 -1
  141. package/src/prompts/session-templates.ts +17 -3
  142. package/src/providers/amp-adapter.ts +1 -1
  143. package/src/providers/dsh-adapter.ts +1 -1
  144. package/src/providers/pi-mono-adapter.ts +41 -11
  145. package/src/scheduler/scheduler.ts +2 -1
  146. package/src/scripts-runtime/eval-harness.ts +8 -1
  147. package/src/scripts-runtime/executors/native.ts +22 -16
  148. package/src/scripts-runtime/executors/quickjs-prelude.ts +103 -1
  149. package/src/scripts-runtime/executors/quickjs-runner.ts +2 -1
  150. package/src/scripts-runtime/executors/quickjs.ts +7 -0
  151. package/src/scripts-runtime/executors/registry.ts +32 -0
  152. package/src/scripts-runtime/executors/types.ts +7 -0
  153. package/src/scripts-runtime/host-validated-args.ts +133 -0
  154. package/src/scripts-runtime/loader.ts +30 -3
  155. package/src/scripts-runtime/swarm-sdk.ts +9 -2
  156. package/src/scripts-runtime/types/stdlib.d.ts +9 -1
  157. package/src/scripts-runtime/types/swarm-sdk.d.ts +9 -1
  158. package/src/tests/api-key-status-by-suffix.test.ts +242 -0
  159. package/src/tests/base-prompt.test.ts +70 -2
  160. package/src/tests/community-linear-delivery-loop.test.ts +2099 -0
  161. package/src/tests/credential-check.test.ts +4 -2
  162. package/src/tests/docs-index.test.ts +135 -0
  163. package/src/tests/dsh-adapter.test.ts +1 -1
  164. package/src/tests/fetch-resolved-env.test.ts +16 -2
  165. package/src/tests/heartbeat-checklist.test.ts +89 -0
  166. package/src/tests/heartbeat-script-runner-probe.test.ts +83 -0
  167. package/src/tests/oauth-refresh-sweep.test.ts +34 -1
  168. package/src/tests/onboard-compose.test.ts +20 -0
  169. package/src/tests/opencode-adapter.test.ts +2 -1
  170. package/src/tests/pages-frame-ancestors.test.ts +162 -0
  171. package/src/tests/pi-codemode.test.ts +2 -1
  172. package/src/tests/pi-mono-adapter.test.ts +54 -0
  173. package/src/tests/pi-native-mcp.test.ts +13 -1
  174. package/src/tests/pi-tool-exposure.test.ts +8 -8
  175. package/src/tests/probe-tool-schema-tokens.test.ts +144 -0
  176. package/src/tests/prompt-template-session.test.ts +4 -3
  177. package/src/tests/request-composition-derive.test.ts +329 -0
  178. package/src/tests/script-connections.test.ts +2 -0
  179. package/src/tests/script-executor-conformance.test.ts +36 -1
  180. package/src/tests/script-executor-quickjs-pool.test.ts +50 -0
  181. package/src/tests/script-executor-quickjs.test.ts +140 -0
  182. package/src/tests/script-host-validated-args-native.test.ts +196 -0
  183. package/src/tests/script-per-script-executor.test.ts +415 -0
  184. package/src/tests/scripts-external-api.test.ts +45 -0
  185. package/src/tests/sdk-allowlist.test.ts +3 -2
  186. package/src/tests/self-improvement.test.ts +4 -4
  187. package/src/tests/store-progress-learning.test.ts +288 -0
  188. package/src/tests/ui-logs-parser.test.ts +180 -0
  189. package/src/tests/workflow-engine-v2.test.ts +116 -1
  190. package/src/tests/workflow-mcp-trigger-schema.test.ts +209 -0
  191. package/src/tests/workflow-run-finished-event.test.ts +263 -0
  192. package/src/tests/workflow-swarm-script.test.ts +34 -0
  193. package/src/tools/script-common.ts +1 -0
  194. package/src/tools/script-run.ts +7 -0
  195. package/src/tools/script-upsert.ts +7 -0
  196. package/src/tools/store-progress.ts +67 -1
  197. package/src/tools/workflows/trigger-workflow.ts +104 -10
  198. package/src/types.ts +12 -1
  199. package/src/utils/credentials.ts +5 -2
  200. package/src/workflows/engine.ts +18 -16
  201. package/src/workflows/executors/swarm-script.ts +5 -0
  202. package/src/workflows/foreach-driver.ts +5 -11
  203. package/src/workflows/node-timeout.ts +30 -0
  204. package/templates/community/linear-delivery-loop/PLAYBOOK.md +323 -0
  205. package/templates/community/linear-delivery-loop/README.md +38 -0
  206. package/templates/community/linear-delivery-loop/config.example.json +31 -0
  207. package/templates/community/linear-delivery-loop/lead-prompt.md +34 -0
  208. package/templates/community/linear-delivery-loop/schedule.json +10 -0
  209. package/templates/community/linear-delivery-loop/scripts/linear-delivery-setup.ts +148 -0
  210. package/templates/community/linear-delivery-loop/scripts/linear-delivery-tick.ts +1781 -0
  211. package/templates/skills/swarm-docs/config.json +14 -0
  212. package/templates/skills/swarm-docs/content.md +144 -0
  213. package/dist/handlers-eqsnmv95.js +0 -41
@@ -10,10 +10,10 @@ import {
10
10
  pathSessionDenial2,
11
11
  bodySessionDenial2,
12
12
  userAgentIdentityDenial2
13
- } from "./cli-art7c1zh.js";
14
- import"./cli-esakngh8.js";
15
- import"./cli-a2rr0fmg.js";
16
- import"./cli-g8ka5j4j.js";
13
+ } from "./cli-wqr7cea4.js";
14
+ import"./cli-a89zdqz9.js";
15
+ import"./cli-8wmj18cz.js";
16
+ import"./cli-48gxjmcz.js";
17
17
  export {
18
18
  SESSION_READ_DENIED2 as SESSION_READ_DENIED,
19
19
  SESSION_WRITE_DENIED2 as SESSION_WRITE_DENIED,
@@ -7,12 +7,12 @@ import {
7
7
  moveTaskChainKeyInTx2,
8
8
  init_session_moves,
9
9
  init_db3
10
- } from "./cli-g8ka5j4j.js";
10
+ } from "./cli-48gxjmcz.js";
11
11
  import {
12
12
  normalizeAssetKey,
13
13
  defaultAssetKey,
14
14
  init_key
15
- } from "./cli-4rf0f5vg.js";
15
+ } from "./cli-9pshx6rd.js";
16
16
  import {
17
17
  scrubSecrets,
18
18
  init_secret_scrubber
@@ -15,7 +15,7 @@ import {
15
15
  createDefaultSettingsLocal,
16
16
  createDefaultMcpJson,
17
17
  createHooksConfig
18
- } from "./cli-abkm71vr.js";
18
+ } from "./cli-a6ds2epe.js";
19
19
  import {
20
20
  getApiKey,
21
21
  init_api_key
@@ -4,7 +4,7 @@ import {
4
4
  exports_compile,
5
5
  exports_all,
6
6
  exports_compat
7
- } from "./cli-v49fkghp.js";
7
+ } from "./cli-1m9x8dr5.js";
8
8
  import {
9
9
  exports_models
10
10
  } from "./cli-2nf3b08t.js";
@@ -14,7 +14,7 @@ import {
14
14
  exports_dist,
15
15
  exports_dist2,
16
16
  exports_dist3
17
- } from "./cli-w2656ka1.js";
17
+ } from "./cli-2y7v133v.js";
18
18
  import"./cli-13p25grh.js";
19
19
  import"./cli-0adyhvq2.js";
20
20
  import"./cli-rycdaj0a.js";
@@ -2,46 +2,46 @@ import {
2
2
  getAgentById2,
3
3
  getTaskById2,
4
4
  init_db3
5
- } from "./cli-g8ka5j4j.js";
5
+ } from "./cli-48gxjmcz.js";
6
6
  import {
7
7
  slackTaskOutput,
8
8
  getTaskUrl
9
- } from "./cli-g20jjwt4.js";
9
+ } from "./cli-m30k9777.js";
10
10
  import {
11
11
  shouldBlockChannel2
12
- } from "./cli-gnsb1zxa.js";
13
- import"./cli-4hxrf0p4.js";
14
- import"./cli-3fwqy71j.js";
15
- import"./cli-3gfvmzht.js";
16
- import"./cli-kf4jree9.js";
12
+ } from "./cli-s09j9vp5.js";
13
+ import"./cli-6a9qfa8b.js";
14
+ import"./cli-j0ppywdr.js";
15
+ import"./cli-j9bpmykh.js";
16
+ import"./cli-aypd09nf.js";
17
17
  import"./cli-3ggwdtb0.js";
18
18
  import"./cli-e8xyjvfc.js";
19
- import"./cli-v49fkghp.js";
19
+ import"./cli-1m9x8dr5.js";
20
20
  import"./cli-2nf3b08t.js";
21
21
  import"./cli-kvzgak7c.js";
22
22
  import"./cli-445c1vp7.js";
23
23
  import"./cli-0z1xjzwa.js";
24
24
  import"./cli-kt907da6.js";
25
- import"./cli-3aqd4jaa.js";
26
- import"./cli-bqztfyve.js";
27
- import"./cli-5sckpqcx.js";
28
- import"./cli-aj8djyqt.js";
25
+ import"./cli-twctnkng.js";
26
+ import"./cli-8mbc9za9.js";
27
+ import"./cli-d20qvpr2.js";
28
+ import"./cli-60sty27p.js";
29
29
  import"./cli-qz93y3x5.js";
30
- import"./cli-a2rr0fmg.js";
31
- import"./cli-03gg9pd1.js";
30
+ import"./cli-8wmj18cz.js";
31
+ import"./cli-rd5m70gj.js";
32
32
  import"./cli-g9ypd5en.js";
33
- import"./cli-gf95q3bm.js";
34
- import"./cli-art7c1zh.js";
33
+ import"./cli-6srv653c.js";
34
+ import"./cli-wqr7cea4.js";
35
35
  import"./cli-3h26v7yj.js";
36
36
  import"./cli-737pyqxr.js";
37
- import"./cli-24j1jeeb.js";
38
- import"./cli-sqma6vw1.js";
37
+ import"./cli-2pvzmas1.js";
38
+ import"./cli-sgqm2582.js";
39
39
  import {
40
40
  isUserAllowed2
41
- } from "./cli-mvjz5an3.js";
41
+ } from "./cli-f4dbh7a5.js";
42
42
  import"./cli-13p25grh.js";
43
43
  import"./cli-0adyhvq2.js";
44
- import"./cli-esakngh8.js";
44
+ import"./cli-a89zdqz9.js";
45
45
  import"./cli-rycdaj0a.js";
46
46
  import {
47
47
  isEnvFlagEnabled,
@@ -1,67 +1,67 @@
1
1
  import"./cli-qz93y3x5.js";
2
2
  import {
3
3
  getEnabledCapabilities
4
- } from "./cli-4hxrf0p4.js";
5
- import"./cli-g8ka5j4j.js";
6
- import"./cli-a2rr0fmg.js";
7
- import"./cli-03gg9pd1.js";
8
- import"./cli-5sckpqcx.js";
9
- import"./cli-aj8djyqt.js";
10
- import"./cli-bqztfyve.js";
4
+ } from "./cli-6a9qfa8b.js";
5
+ import"./cli-48gxjmcz.js";
6
+ import"./cli-8wmj18cz.js";
7
+ import"./cli-rd5m70gj.js";
8
+ import"./cli-d20qvpr2.js";
9
+ import"./cli-60sty27p.js";
10
+ import"./cli-8mbc9za9.js";
11
11
  import"./cli-kt907da6.js";
12
- import"./cli-3fwqy71j.js";
13
- import"./cli-3gfvmzht.js";
14
- import"./cli-kf4jree9.js";
12
+ import"./cli-j0ppywdr.js";
13
+ import"./cli-j9bpmykh.js";
14
+ import"./cli-aypd09nf.js";
15
15
  import"./cli-3ggwdtb0.js";
16
16
  import"./cli-e8xyjvfc.js";
17
- import"./cli-g20jjwt4.js";
18
- import"./cli-gnsb1zxa.js";
19
- import"./cli-v49fkghp.js";
17
+ import"./cli-m30k9777.js";
18
+ import"./cli-s09j9vp5.js";
19
+ import"./cli-1m9x8dr5.js";
20
20
  import"./cli-2nf3b08t.js";
21
21
  import"./cli-kvzgak7c.js";
22
22
  import"./cli-445c1vp7.js";
23
23
  import"./cli-0z1xjzwa.js";
24
- import"./cli-3aqd4jaa.js";
25
- import"./cli-art7c1zh.js";
24
+ import"./cli-twctnkng.js";
25
+ import"./cli-wqr7cea4.js";
26
26
  import"./cli-g9ypd5en.js";
27
- import"./cli-gf95q3bm.js";
27
+ import"./cli-6srv653c.js";
28
28
  import"./cli-3h26v7yj.js";
29
29
  import"./cli-737pyqxr.js";
30
- import"./cli-sxgtf5fw.js";
30
+ import"./cli-07q03xm2.js";
31
31
  import"./cli-c081bj3b.js";
32
32
  import"./cli-77cd6gy8.js";
33
- import"./cli-n7asmce6.js";
33
+ import"./cli-6mgdba42.js";
34
34
  import {
35
35
  runAgent
36
- } from "./cli-5rj83bam.js";
37
- import"./cli-7enjwya9.js";
36
+ } from "./cli-j3y0x2n4.js";
37
+ import"./cli-vz78s5wm.js";
38
38
  import"./cli-yvy48785.js";
39
- import"./cli-nq677csy.js";
39
+ import"./cli-sjctjr48.js";
40
40
  import"./cli-jc1g9ndz.js";
41
- import"./cli-m5a9m0ak.js";
42
- import"./cli-2sjhpsns.js";
43
- import"./cli-ag2yrnt5.js";
41
+ import"./cli-kv7sbc2c.js";
42
+ import"./cli-54sj64fc.js";
43
+ import"./cli-c668vvcf.js";
44
44
  import"./cli-d82btycs.js";
45
45
  import"./cli-0726awxw.js";
46
- import"./cli-mtnj4fwa.js";
47
- import"./cli-k21gx5ht.js";
46
+ import"./cli-yxbsmx56.js";
47
+ import"./cli-1hhbzkbb.js";
48
48
  import"./cli-4bd1rck6.js";
49
49
  import"./cli-vbhgkw9h.js";
50
50
  import"./cli-rr7zx19j.js";
51
- import"./cli-ffvsj2qw.js";
51
+ import"./cli-yd2nreqw.js";
52
52
  import"./cli-kr5tjjtz.js";
53
- import"./cli-ca6banwz.js";
54
- import"./cli-cz37jqss.js";
53
+ import"./cli-ymjpkxgn.js";
54
+ import"./cli-h5jeg46p.js";
55
55
  import"./cli-39rrw8yp.js";
56
- import"./cli-az25fn5f.js";
57
- import"./cli-zqne1qcj.js";
58
- import"./cli-a34pr3w1.js";
59
- import"./cli-9abdgn5t.js";
60
- import"./cli-m70bajzr.js";
56
+ import"./cli-gsfk58nw.js";
57
+ import"./cli-s0mgx214.js";
58
+ import"./cli-e1595bgx.js";
59
+ import"./cli-86ehn4s5.js";
60
+ import"./cli-f12mr20z.js";
61
61
  import"./cli-4zsenjhy.js";
62
62
  import"./cli-13p25grh.js";
63
63
  import"./cli-0adyhvq2.js";
64
- import"./cli-esakngh8.js";
64
+ import"./cli-a89zdqz9.js";
65
65
  import"./cli-rycdaj0a.js";
66
66
 
67
67
  // src/commands/worker.ts
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "Agent Swarm API",
5
- "version": "2.6.0",
5
+ "version": "2.7.0",
6
6
  "description": "Multi-agent orchestration API for Claude Code, Codex, and Gemini CLI. Enables task distribution, agent communication, and service discovery.\n\nMCP tools are documented separately in [MCP.md](./MCP.md)."
7
7
  },
8
8
  "servers": [
@@ -19601,6 +19601,14 @@
19601
19601
  "required": false,
19602
19602
  "name": "model",
19603
19603
  "in": "query"
19604
+ },
19605
+ {
19606
+ "schema": {
19607
+ "type": "string"
19608
+ },
19609
+ "required": false,
19610
+ "name": "keySuffixes",
19611
+ "in": "query"
19604
19612
  }
19605
19613
  ],
19606
19614
  "responses": {
@@ -54036,6 +54044,17 @@
54036
54044
  "workspace-rw"
54037
54045
  ],
54038
54046
  "default": "none"
54047
+ },
54048
+ "executor": {
54049
+ "type": [
54050
+ "string",
54051
+ "null"
54052
+ ],
54053
+ "enum": [
54054
+ "native",
54055
+ "quickjs",
54056
+ null
54057
+ ]
54039
54058
  }
54040
54059
  },
54041
54060
  "required": [
@@ -54163,6 +54182,17 @@
54163
54182
  ],
54164
54183
  "default": "none"
54165
54184
  },
54185
+ "executor": {
54186
+ "type": [
54187
+ "string",
54188
+ "null"
54189
+ ],
54190
+ "enum": [
54191
+ "native",
54192
+ "quickjs",
54193
+ null
54194
+ ]
54195
+ },
54166
54196
  "idempotencyKey": {
54167
54197
  "type": "string",
54168
54198
  "maxLength": 200
@@ -54749,6 +54779,18 @@
54749
54779
  "workspace-rw"
54750
54780
  ]
54751
54781
  },
54782
+ "executor": {
54783
+ "type": [
54784
+ "string",
54785
+ "null"
54786
+ ],
54787
+ "enum": [
54788
+ "native",
54789
+ "quickjs",
54790
+ null
54791
+ ],
54792
+ "default": null
54793
+ },
54752
54794
  "createdByAgentId": {
54753
54795
  "type": [
54754
54796
  "string",
@@ -54924,6 +54966,18 @@
54924
54966
  "workspace-rw"
54925
54967
  ]
54926
54968
  },
54969
+ "executor": {
54970
+ "type": [
54971
+ "string",
54972
+ "null"
54973
+ ],
54974
+ "enum": [
54975
+ "native",
54976
+ "quickjs",
54977
+ null
54978
+ ],
54979
+ "default": null
54980
+ },
54927
54981
  "createdByAgentId": {
54928
54982
  "type": [
54929
54983
  "string",
@@ -63521,6 +63575,20 @@
63521
63575
  "name": "id",
63522
63576
  "in": "path"
63523
63577
  },
63578
+ {
63579
+ "schema": {
63580
+ "type": "string",
63581
+ "enum": [
63582
+ "true",
63583
+ "false"
63584
+ ],
63585
+ "description": "Default true: respond after the run's instant steps ran, when it finishes or parks at its first async step. false: respond as soon as the run is committed and walk it in the background."
63586
+ },
63587
+ "required": false,
63588
+ "description": "Default true: respond after the run's instant steps ran, when it finishes or parks at its first async step. false: respond as soon as the run is committed and walk it in the background.",
63589
+ "name": "wait",
63590
+ "in": "query"
63591
+ },
63524
63592
  {
63525
63593
  "schema": {
63526
63594
  "type": "string",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@desplega.ai/agent-swarm",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "description": "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
5
5
  "keywords": [
6
6
  "agent-swarm.dev",
@@ -80,6 +80,8 @@
80
80
  "sync:ai-toolbox-skills": "bun scripts/sync-ai-toolbox-skills.ts",
81
81
  "check:ai-toolbox-skills": "bun scripts/sync-ai-toolbox-skills.ts --check",
82
82
  "check:skill-sources": "bun scripts/check-skill-sources.ts",
83
+ "build:docs-index": "bun scripts/build-docs-index.ts",
84
+ "check:docs-index": "bun scripts/build-docs-index.ts --check",
83
85
  "check:operator-skill": "bun scripts/check-operator-skill.ts",
84
86
  "sync:telemetry-contract": "bun scripts/sync-telemetry-contract.ts",
85
87
  "check:telemetry-contract": "bun scripts/sync-telemetry-contract.ts --check",
@@ -185,7 +187,7 @@
185
187
  "@oxlint/plugins": "1.78.0",
186
188
  "@types/bun": "latest",
187
189
  "dependency-cruiser": "^18.0.0",
188
- "happy-dom": "^20.14.5",
190
+ "happy-dom": "^21.0.4",
189
191
  "konsistent": "1.0.0-beta.1",
190
192
  "openapi-typescript": "^7",
191
193
  "oxlint": "1.78.0",
@@ -210,7 +212,7 @@
210
212
  "@chat-adapter/teams": "4.41.1",
211
213
  "@chat-adapter/telegram": "4.41.1",
212
214
  "@cursor/sdk": "1.0.40",
213
- "@desplega.ai/agent-fs-just-bash": "0.18.5",
215
+ "@desplega.ai/agent-fs-just-bash": "0.18.9",
214
216
  "@desplega.ai/business-use": "^0.4.2",
215
217
  "@earendil-works/pi-agent-core": "^1.4.0",
216
218
  "@earendil-works/pi-ai": "^1.4.0",
@@ -3,6 +3,7 @@ import { getSlackConfiguration, isSlackConfigured } from "../slack/config";
3
3
  import { isEnvFlagEnabled } from "../utils/env-flag";
4
4
  import { scrubSecrets } from "../utils/secret-scrubber";
5
5
  import { getDbClient } from "./db";
6
+ import { emitRunFinished } from "./db/workflow-runs";
6
7
  import { getOAuthApp, getOAuthTokens } from "./db-queries/oauth";
7
8
  import { scrubJsonValue } from "./scrub-json";
8
9
 
@@ -446,6 +447,7 @@ export async function recordWorkflowPreflightFailure(input: {
446
447
  timestamp,
447
448
  ],
448
449
  );
450
+ emitRunFinished(runId, input.workflowId, "failed");
449
451
  // Claimed in this transaction, which also sees every child failure run
450
452
  // committed before it: concurrent failures alert exactly once a day.
451
453
  return {
@@ -110,6 +110,15 @@ export async function recordKeyValidation(
110
110
  now,
111
111
  ],
112
112
  );
113
+ // A passing test clears the key's rejection in every scope, since the
114
+ // suffix read in `getAvailableKeyIndices` matches them all.
115
+ if (key.ok) {
116
+ await tx.run(
117
+ `UPDATE api_key_status SET lastValidationError = NULL, lastValidationFailedAt = NULL, updatedAt = ?
118
+ WHERE keyType = ? AND keySuffix = ? AND lastValidationFailedAt IS NOT NULL`,
119
+ [now, keyType, key.keySuffix],
120
+ );
121
+ }
113
122
  }
114
123
  if (options.retireAbsent === false) return;
115
124
  const placeholders = keys.map(() => "?").join(", ");
@@ -465,7 +465,8 @@ export async function disarmWorkflowTreeRetries(
465
465
  /**
466
466
  * Mark the given runs that are still running or waiting `cancelled`, without
467
467
  * the per-run `workflow.child.finished` wake-up: it is for runs whose parent
468
- * step the same cancel closes. A terminal run keeps its status and reason.
468
+ * step the same cancel closes. Each run it cancels still emits
469
+ * `workflow.run.finished`. A terminal run keeps its status and reason.
469
470
  */
470
471
  export async function cancelLiveWorkflowTreeRuns(
471
472
  runIds: string[],
@@ -473,12 +474,14 @@ export async function cancelLiveWorkflowTreeRuns(
473
474
  finishedAt: string,
474
475
  ): Promise<void> {
475
476
  await forEachChunk(runIds, async (chunk, placeholders) => {
476
- await getDbClient().run(
477
+ const cancelled = await getDbClient().query<{ id: string; workflowId: string }>(
477
478
  `UPDATE workflow_runs
478
479
  SET status = 'cancelled', error = ?, finishedAt = ?, lastUpdatedAt = ?
479
- WHERE id IN (${placeholders}) AND status IN ('running', 'waiting')`,
480
+ WHERE id IN (${placeholders}) AND status IN ('running', 'waiting')
481
+ RETURNING id, workflowId`,
480
482
  [scrubSecrets(reason), finishedAt, finishedAt, ...chunk],
481
483
  );
484
+ for (const run of cancelled) emitRunFinished(run.id, run.workflowId, "cancelled");
482
485
  });
483
486
  }
484
487
 
@@ -643,14 +646,42 @@ export function emitChildRunFinished(
643
646
  }
644
647
 
645
648
  function emitAfterCommit(childRunId: string, parentStepId: string): void {
649
+ emitBusEventAfterCommit("workflow.child.finished", { childRunId, parentStepId });
650
+ }
651
+
652
+ /** Bus event every run emits once when it turns terminal. */
653
+ export const WORKFLOW_RUN_FINISHED_EVENT = "workflow.run.finished";
654
+
655
+ export function isTerminalWorkflowRunStatus(status: WorkflowRunStatus): boolean {
656
+ return TERMINAL_STATUSES.has(status);
657
+ }
658
+
659
+ /**
660
+ * Announce after commit that a run turned terminal, top-level and child runs
661
+ * alike, so an event-mode `wait` can resume when any run ends. Callers emit
662
+ * only when a live run (running or waiting) turns terminal, never on a later
663
+ * update of a run that is already terminal. The id is `runId`, never `workflowRunId` or
664
+ * `_runId`: those would put the finished run in the waiting run's own `run`
665
+ * scope, so waiters use scope `global` and filter on `runId`.
666
+ */
667
+ export function emitRunFinished(
668
+ runId: string,
669
+ workflowId: string,
670
+ status: WorkflowRunStatus,
671
+ ): void {
672
+ if (!TERMINAL_STATUSES.has(status)) return;
673
+ emitBusEventAfterCommit(WORKFLOW_RUN_FINISHED_EVENT, { runId, workflowId, status });
674
+ }
675
+
676
+ function emitBusEventAfterCommit(event: string, payload: Record<string, unknown>): void {
646
677
  getDbClient().afterCommit(() => {
647
678
  import("../../workflows/event-bus")
648
679
  .then(({ workflowEventBus }) => {
649
- workflowEventBus.emit("workflow.child.finished", { childRunId, parentStepId });
680
+ workflowEventBus.emit(event, payload);
650
681
  })
651
682
  .catch((err) =>
652
683
  console.error(
653
- "[db] workflow.child.finished event not emitted:",
684
+ `[db] ${event} event not emitted:`,
654
685
  scrubSecrets(err instanceof Error ? err.message : String(err)),
655
686
  ),
656
687
  );