@desplega.ai/agent-swarm 1.131.1 → 1.134.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 (360) hide show
  1. package/README.md +3 -3
  2. package/dist/{actions-jgcy477k.js → actions-7kast243.js} +20 -18
  3. package/dist/{anthropic-messages-rjmd2e7n.js → anthropic-messages-706yad38.js} +33 -17
  4. package/dist/app-0g84t8wf.js +28 -0
  5. package/dist/{artifact-jysj3wrg.js → artifact-dje5ke4h.js} +37 -131
  6. package/dist/{assistant-f2vkk1hj.js → assistant-ac4htcky.js} +25 -22
  7. package/dist/{azure-openai-responses-c0yjmbfd.js → azure-openai-responses-be59fbsz.js} +13 -13
  8. package/dist/{boot-reembed-q7mp8hcr.js → boot-reembed-b1rcqn85.js} +13 -11
  9. package/dist/{boot-reembed-xmw8wcx6.js → boot-reembed-kw2541c4.js} +14 -12
  10. package/dist/{boot-scrub-logs-dsqrv79n.js → boot-scrub-logs-ja29t92g.js} +11 -9
  11. package/dist/{claude-adapter-q6x7yspx.js → claude-adapter-5cg1fv8s.js} +33 -29
  12. package/dist/{claude-managed-adapter-wsg37bt8.js → claude-managed-adapter-9z9sdytx.js} +9 -9
  13. package/dist/{claude-managed-setup-52z4mq9w.js → claude-managed-setup-3zqp51cr.js} +5 -5
  14. package/dist/{claude-1ex232fc.js → claude-wqn3dtca.js} +1 -1
  15. package/dist/{cli-4wgngmwv.js → cli-00w4hbam.js} +1 -1
  16. package/dist/{cli-er3a4bb0.js → cli-15429qdw.js} +6 -1
  17. package/dist/{cli-e5dabkx0.js → cli-1cwhyvta.js} +4 -4
  18. package/dist/{cli-zsspvvm2.js → cli-1ybr6vw2.js} +237 -237
  19. package/dist/{cli-xpxde7rm.js → cli-2wv4kj0e.js} +60 -31
  20. package/dist/cli-34w2584r.js +530 -0
  21. package/dist/{cli-se2p6rkb.js → cli-38taxznr.js} +6 -6
  22. package/dist/{cli-9sbhdpvb.js → cli-3cgfyfzm.js} +14 -14
  23. package/dist/{cli-5n6e5yfn.js → cli-3zmdzfjf.js} +79 -74
  24. package/dist/{cli-3ty0t082.js → cli-43x36mty.js} +197 -8
  25. package/dist/{cli-ycrnynpw.js → cli-480nehnh.js} +29 -22
  26. package/dist/{cli-0258203w.js → cli-492e7ap5.js} +140 -20
  27. package/dist/{cli-3fj60etf.js → cli-497b685t.js} +3 -3
  28. package/dist/{cli-pxfxkx5m.js → cli-4bap00k0.js} +1 -1
  29. package/dist/{cli-w2wxd56v.js → cli-4bc8vmhm.js} +848 -770
  30. package/dist/{cli-aca5pz9f.js → cli-589599p9.js} +1 -1
  31. package/dist/{cli-t930g0xh.js → cli-5tnr64pm.js} +1 -1
  32. package/dist/{cli-jxg3s9ey.js → cli-65d93ves.js} +7 -7
  33. package/dist/{cli-6dpytdr2.js → cli-6x363v1z.js} +2 -2
  34. package/dist/{cli-dxak0fqd.js → cli-787ph852.js} +11 -11
  35. package/dist/{cli-793jvbsh.js → cli-7bv8nckk.js} +16 -11
  36. package/dist/{cli-zyxs93y9.js → cli-7jcc9y1r.js} +3 -3
  37. package/dist/{cli-f1am9szv.js → cli-87t2gstf.js} +1 -1
  38. package/dist/{cli-9aryf9tv.js → cli-95m51ztz.js} +1 -1
  39. package/dist/{cli-4w4fmq9x.js → cli-9w49enmh.js} +2 -2
  40. package/dist/{cli-v69vk5h0.js → cli-9y5b02vr.js} +13 -13
  41. package/dist/{cli-x23me2mg.js → cli-a1rrkrb4.js} +1 -1
  42. package/dist/{cli-psrqtw2m.js → cli-a3pkfpqs.js} +2 -2
  43. package/dist/{cli-h0rgxd24.js → cli-a4ajmfvp.js} +6 -6
  44. package/dist/{cli-ygrbmjja.js → cli-aw8bb6sf.js} +6 -6
  45. package/dist/{cli-g74vpjp2.js → cli-brm3et47.js} +55 -22
  46. package/dist/{cli-czkae1fp.js → cli-c5ddbdfj.js} +9 -9
  47. package/dist/{cli-114fvtmj.js → cli-c79a9zrc.js} +1 -1
  48. package/dist/{cli-49n9f49x.js → cli-dx3dz0ms.js} +3 -3
  49. package/dist/{cli-6dp3ydxa.js → cli-e07exmsb.js} +18 -14
  50. package/dist/cli-et1bbwqf.js +13 -0
  51. package/dist/{cli-yazx6hap.js → cli-f3s9dry0.js} +14 -14
  52. package/dist/{cli-t8d349cy.js → cli-f4wj0s3m.js} +3 -3
  53. package/dist/{cli-d6n0thxw.js → cli-f64gdfxc.js} +1 -1
  54. package/dist/{cli-pwfsqc2x.js → cli-fyd58xgb.js} +55 -55
  55. package/dist/{cli-7dm2zqy2.js → cli-g0j14czv.js} +2 -2
  56. package/dist/{cli-b0p7rfnd.js → cli-g2p9bd1z.js} +14 -14
  57. package/dist/{cli-z905tvmm.js → cli-g814jbst.js} +2 -2
  58. package/dist/{cli-5dsbcjjw.js → cli-ghexzd2d.js} +970 -970
  59. package/dist/{cli-jvv0g8bh.js → cli-gpt9kf01.js} +15 -15
  60. package/dist/{cli-rgrfzg8z.js → cli-grt6qv91.js} +380 -380
  61. package/dist/{cli-wz9115x0.js → cli-gtafvdy0.js} +8 -8
  62. package/dist/{cli-q5dzzak0.js → cli-gy07xk4s.js} +2 -2
  63. package/dist/{cli-sy7jk3tx.js → cli-h0djenzm.js} +2 -2
  64. package/dist/{cli-nrkkknat.js → cli-h37gbjbf.js} +2 -281
  65. package/dist/{cli-jevgrb4w.js → cli-h39xxnq6.js} +1200 -491
  66. package/dist/{cli-gz9sbyk3.js → cli-jepmgn7r.js} +1 -1
  67. package/dist/{cli-ccf9vy7q.js → cli-jmvk6et8.js} +7 -7
  68. package/dist/{cli-2rk0cx7s.js → cli-jxj92gkt.js} +51 -41
  69. package/dist/{cli-bqw0mt1n.js → cli-k46t4664.js} +18 -3
  70. package/dist/{cli-50vbt00w.js → cli-m07313tr.js} +1153 -696
  71. package/dist/{cli-4j2mrzag.js → cli-mkq1rk7b.js} +1 -1
  72. package/dist/{cli-1z7048dy.js → cli-mnm7w46e.js} +1 -1
  73. package/dist/{cli-kd1ck4rx.js → cli-mp9sg4cg.js} +14 -8
  74. package/dist/{cli-jbcva0xj.js → cli-mrammd8c.js} +60 -35
  75. package/dist/cli-nanaxrz6.js +27 -0
  76. package/dist/{cli-p9swy5t3.js → cli-pq2ee5ja.js} +8 -6
  77. package/dist/{cli-2wadx7p2.js → cli-pt43pdp1.js} +2 -2
  78. package/dist/{cli-7sgrxg9a.js → cli-q6d0vvey.js} +4 -4
  79. package/dist/{cli-k9qkf1hw.js → cli-qf9kpsve.js} +9 -9
  80. package/dist/cli-qh4sqfws.js +15 -0
  81. package/dist/{cli-e15jhafb.js → cli-qntkxysp.js} +14 -14
  82. package/dist/{cli-sajgpkqg.js → cli-qs9hhsvb.js} +1723 -325
  83. package/dist/{cli-z2zcxes1.js → cli-qt5bt3vk.js} +1 -1
  84. package/dist/{cli-wx82tw1k.js → cli-qtekrty1.js} +3 -3
  85. package/dist/{cli-g1re8r05.js → cli-rh6f3s9n.js} +3 -3
  86. package/dist/{cli-n0krnc6d.js → cli-rzhcrw2p.js} +2 -2
  87. package/dist/{cli-gecy3z2s.js → cli-snw62ze5.js} +4 -4
  88. package/dist/{cli-n6h8qt8n.js → cli-snz3p4yf.js} +15 -10
  89. package/dist/{cli-r6kqqbj0.js → cli-tkf8n6cw.js} +11 -11
  90. package/dist/{cli-4rkfg1wx.js → cli-tkrr24mz.js} +14 -9
  91. package/dist/{cli-9dr5qzc0.js → cli-tv9f1kyb.js} +54 -43
  92. package/dist/{cli-gm9cbhbq.js → cli-vtz6yj3v.js} +28 -9
  93. package/dist/{cli-2f07m0xr.js → cli-wf86d5t7.js} +1 -1
  94. package/dist/{cli-7zd05xb4.js → cli-whrvct19.js} +45 -45
  95. package/dist/{cli-ap1czx8f.js → cli-wrrea8xm.js} +3 -3
  96. package/dist/{cli-57khth04.js → cli-xmyqv00z.js} +120 -4
  97. package/dist/{cli-cwy5hqbq.js → cli-yjmk7tzc.js} +1 -1
  98. package/dist/{cli-6pcz9h15.js → cli-zykjrwcx.js} +180 -394
  99. package/dist/cli.js +45 -45
  100. package/dist/{codex-adapter-htjkn22b.js → codex-adapter-hsq6mz3m.js} +21 -19
  101. package/dist/{codex-hook-hq54t9ft.js → codex-hook-8c500gq8.js} +8 -7
  102. package/dist/{codex-login-z6yhbkmk.js → codex-login-x7603481.js} +3 -3
  103. package/dist/{codex-session-runner-wjfc7smz.js → codex-session-runner-c1x3x143.js} +15 -13
  104. package/dist/{commands-xhrfwqsk.js → commands-rwtddtst.js} +11 -9
  105. package/dist/{db-anvwb22f.js → db-j2b355vz.js} +458 -444
  106. package/dist/{devin-adapter-v1sarqtw.js → devin-adapter-8qmhqpy3.js} +3 -3
  107. package/dist/{devtools-2y1r7yqk.js → devtools-j2rnj8w7.js} +4 -4
  108. package/dist/{e2b-jdkwemv2.js → e2b-znpx78eg.js} +16 -16
  109. package/dist/{es5-vjgtkgp6.js → es5-fmqrjzy3.js} +2 -2
  110. package/dist/{event-bus-axn823e9.js → event-bus-n8sb35pw.js} +4 -4
  111. package/dist/{getMachineId-bsd-6tc9wxdj.js → getMachineId-bsd-wpzbhkm6.js} +4 -4
  112. package/dist/{getMachineId-darwin-sjt9sgnc.js → getMachineId-darwin-45zabjy0.js} +4 -4
  113. package/dist/{getMachineId-linux-v5n18y9p.js → getMachineId-linux-warnp5pd.js} +3 -3
  114. package/dist/{getMachineId-unsupported-yrjyqw3d.js → getMachineId-unsupported-5spent2a.js} +3 -3
  115. package/dist/{getMachineId-win-w3r8063c.js → getMachineId-win-v4bvcw7a.js} +4 -4
  116. package/dist/{google-generative-ai-hysrd8qx.js → google-generative-ai-b0wzss55.js} +17 -14
  117. package/dist/{google-vertex-p5arrga0.js → google-vertex-e8q4dpya.js} +18 -15
  118. package/dist/{handlers-b9kbc621.js → handlers-hchgrxkh.js} +32 -29
  119. package/dist/{hook-xkvn6c5h.js → hook-p49egqc0.js} +66 -52
  120. package/dist/hook-spb00w76.js +34 -0
  121. package/dist/{http-9xh6ta4r.js → http-nh14kkms.js} +663 -181
  122. package/dist/index-1qthq7vc.js +6 -0
  123. package/dist/{index-0g68f0p6.js → index-20xqmn3v.js} +3 -3
  124. package/dist/{index-vdkr5z2w.js → index-3e03k6e4.js} +114 -114
  125. package/dist/{index-ywds4812.js → index-4cbyhq2g.js} +43 -41
  126. package/dist/index-67pzqfrb.js +36 -0
  127. package/dist/{index-bccrkdkn.js → index-7m8yxkw5.js} +16 -16
  128. package/dist/{index-eaxyqcmj.js → index-dvsk64sm.js} +163 -83
  129. package/dist/{index-dqkpnmqm.js → index-e19s2m8k.js} +18 -18
  130. package/dist/{index-j30k5zxn.js → index-emvxcy98.js} +16 -16
  131. package/dist/{index-7ndw6ecy.js → index-gqnmr60d.js} +9 -9
  132. package/dist/{index-9znhar3x.js → index-j02xvjtd.js} +184 -185
  133. package/dist/{index-1s2442yw.js → index-ns5kksc1.js} +7 -7
  134. package/dist/{index-dpy2hth8.js → index-pdxc8kfh.js} +71 -71
  135. package/dist/{index-z1m7pw0v.js → index-ptcqm8bc.js} +107 -107
  136. package/dist/{index-070v4eyb.js → index-pyp7rexm.js} +5 -6
  137. package/dist/{index-86znjz1p.js → index-shne41sd.js} +13 -13
  138. package/dist/{index-2qn2qndv.js → index-t36q2v4t.js} +183 -183
  139. package/dist/index-tcnvv8w6.js +7 -0
  140. package/dist/index-w91qbfv1.js +7 -0
  141. package/dist/{index-fzc0mwvj.js → index-yqweff5n.js} +32 -32
  142. package/dist/index-yrfphye1.js +39 -0
  143. package/dist/{keepalive-vc7s2aa6.js → keepalive-9k51nqhc.js} +21 -15
  144. package/dist/lead-2xq3dxbz.js +88 -0
  145. package/dist/maintenance-0c0g6nym.js +28 -0
  146. package/dist/mistral-conversations-2njwdwhj.js +717 -0
  147. package/dist/{multipart-parser-qaktc7p8.js → multipart-parser-6gftesw0.js} +2 -2
  148. package/dist/{oauth-refresh-sweep-yecgjpk4.js → oauth-refresh-sweep-273a64r2.js} +14 -12
  149. package/dist/{onboard-xj0f73f9.js → onboard-tsv9wwhz.js} +12 -12
  150. package/dist/{openai-codex-responses-5g27pd6f.js → openai-codex-responses-kt84eq86.js} +26 -26
  151. package/dist/{openai-completions-3vkmfz2a.js → openai-completions-mrypq7qp.js} +17 -16
  152. package/dist/{openai-responses-dg4t7j7a.js → openai-responses-qhrk21ez.js} +20 -17
  153. package/dist/{opencode-adapter-1gm38aba.js → opencode-adapter-rar9676j.js} +13 -11
  154. package/dist/{openrouter-images-g3gm8931.js → openrouter-images-684fysx9.js} +5 -5
  155. package/dist/{otel-impl-nxg0n0b3.js → otel-impl-wp1mfzd2.js} +752 -537
  156. package/dist/{photon_rs-ky7dj5qw.js → photon_rs-8dwt2pzy.js} +581 -581
  157. package/dist/{pi-messages-tqj8q6b9.js → pi-messages-txp9f97r.js} +7 -7
  158. package/dist/{pi-mono-adapter-4g5kby31.js → pi-mono-adapter-yz47kk8e.js} +1910 -1180
  159. package/dist/pricing-refresh-jw1yw2fn.js +22 -0
  160. package/dist/rbac-roles-dg964c8p.js +32 -0
  161. package/dist/{rbac-roles-1hcxdtg7.js → rbac-roles-p53cg5cv.js} +19 -17
  162. package/dist/{registry-02cy9z5z.js → registry-mh12y17v.js} +4 -4
  163. package/dist/render-v2-56vn2rk9.js +36 -0
  164. package/dist/seed-pricing-52xx6z63.js +19 -0
  165. package/dist/{setup-46xtgq3c.js → setup-e8gp79sy.js} +7 -7
  166. package/dist/token-util-zy908s1a.js +6 -0
  167. package/dist/{token-fxkn2zf2.js → token-xg5711x5.js} +4 -4
  168. package/dist/worker-s17f1g46.js +88 -0
  169. package/dist/{x-6mg4kfpe.js → x-xkfh0w0v.js} +5 -5
  170. package/openapi.json +566 -22
  171. package/package.json +6 -6
  172. package/src/be/budget-refusal-notify.ts +14 -7
  173. package/src/be/db-queries/task-artifacts.ts +182 -0
  174. package/src/be/db.ts +834 -171
  175. package/src/be/events.ts +5 -0
  176. package/src/be/migrations/131_session_logs_created_at_index.sql +2 -0
  177. package/src/be/migrations/132_multi_runtime_instances.sql +44 -0
  178. package/src/be/migrations/133_workflow_run_trigger_type.sql +12 -0
  179. package/src/be/migrations/135_backfill_task_pull_request_attachments.sql +228 -0
  180. package/src/be/migrations/136_task_requester_provenance.sql +37 -0
  181. package/src/be/migrations/137_memory_retrieval_composite_index.sql +1 -0
  182. package/src/be/migrations/runner.ts +17 -11
  183. package/src/be/multi-runtime.ts +430 -0
  184. package/src/be/scripts/extract-schema.ts +3 -1
  185. package/src/be/scripts/typecheck.ts +6 -2
  186. package/src/be/seed-prompt-templates.ts +25 -2
  187. package/src/be/seed-skills/index.ts +7 -0
  188. package/src/be/steering.ts +1 -1
  189. package/src/be/swarm-config-guard.ts +18 -0
  190. package/src/commands/credential-wait.ts +54 -0
  191. package/src/commands/onboard/steps/core-credentials.tsx +1 -1
  192. package/src/commands/onboard/steps/custom-templates.tsx +1 -1
  193. package/src/commands/onboard/steps/harness-credentials.tsx +1 -1
  194. package/src/commands/onboard/steps/health-check.tsx +1 -1
  195. package/src/commands/onboard/steps/start.tsx +1 -1
  196. package/src/commands/profile-sync-audit.ts +56 -0
  197. package/src/commands/profile-sync.ts +287 -15
  198. package/src/commands/provider-credentials.ts +46 -19
  199. package/src/commands/runner.ts +199 -33
  200. package/src/commands/templates.ts +22 -0
  201. package/src/github/handlers.ts +55 -9
  202. package/src/heartbeat/heartbeat.ts +109 -17
  203. package/src/hooks/hook.ts +49 -33
  204. package/src/http/active-sessions.ts +11 -1
  205. package/src/http/agents.ts +261 -30
  206. package/src/http/all-routes.ts +1 -0
  207. package/src/http/config.ts +13 -2
  208. package/src/http/core.ts +102 -4
  209. package/src/http/db-query-bounded.ts +313 -0
  210. package/src/http/db-query-shared.ts +249 -0
  211. package/src/http/db-query.ts +54 -42
  212. package/src/http/events.ts +2 -0
  213. package/src/http/index.ts +23 -2
  214. package/src/http/mcp-bridge.ts +37 -3
  215. package/src/http/mcp.ts +12 -0
  216. package/src/http/memory.ts +13 -2
  217. package/src/http/openapi.ts +1 -0
  218. package/src/http/poll.ts +70 -27
  219. package/src/http/prompt-templates.ts +36 -13
  220. package/src/http/route-def.ts +43 -9
  221. package/src/http/schedules.ts +2 -2
  222. package/src/http/scripts.ts +10 -1
  223. package/src/http/session-data.ts +44 -0
  224. package/src/http/tasks.ts +2 -2
  225. package/src/http/users.ts +74 -52
  226. package/src/http/webhooks.ts +5 -2
  227. package/src/http/workflows.ts +1 -4
  228. package/src/integrations/kapso/inbound.ts +1 -1
  229. package/src/jira/outbound.ts +39 -8
  230. package/src/jira/webhook-lifecycle.ts +13 -2
  231. package/src/linear/outbound.ts +43 -10
  232. package/src/oauth/keepalive.ts +13 -2
  233. package/src/prompts/base-prompt.ts +1 -1
  234. package/src/prompts/default-drift.ts +21 -0
  235. package/src/prompts/session-templates.ts +56 -7
  236. package/src/providers/claude-adapter.ts +6 -0
  237. package/src/providers/codex-adapter.ts +6 -0
  238. package/src/providers/opencode-adapter.ts +6 -0
  239. package/src/providers/pi-mono-adapter.ts +8 -0
  240. package/src/providers/pricing-sources.md +24 -0
  241. package/src/queue-stall-alarm.ts +216 -0
  242. package/src/rbac/legacy-policy.ts +3 -0
  243. package/src/rbac/permissions.ts +12 -0
  244. package/src/scheduler/scheduler.ts +7 -0
  245. package/src/script-workflows/executor.ts +2 -1
  246. package/src/scripts-runtime/executors/native.ts +2 -1
  247. package/src/scripts-runtime/executors/types.ts +5 -0
  248. package/src/scripts-runtime/loader.ts +5 -0
  249. package/src/scripts-runtime/sdk-allowlist.ts +3 -0
  250. package/src/scripts-runtime/swarm-config.ts +8 -0
  251. package/src/scripts-runtime/swarm-sdk.ts +7 -0
  252. package/src/scripts-runtime/types/stdlib.d.ts +4 -0
  253. package/src/scripts-runtime/types/swarm-sdk.d.ts +4 -0
  254. package/src/server.ts +6 -0
  255. package/src/slack/channel-join.ts +22 -3
  256. package/src/slack/channel-lifecycle.ts +114 -0
  257. package/src/tests/budget-claim-gate.test.ts +20 -0
  258. package/src/tests/claude-adapter.test.ts +32 -0
  259. package/src/tests/codex-adapter.test.ts +30 -0
  260. package/src/tests/create-task-validation.test.ts +128 -0
  261. package/src/tests/credential-wait.test.ts +67 -1
  262. package/src/tests/db-query.test.ts +711 -2
  263. package/src/tests/heartbeat-checklist.test.ts +28 -0
  264. package/src/tests/http-api-integration.test.ts +81 -0
  265. package/src/tests/http-users.test.ts +166 -1
  266. package/src/tests/identity-field-budget.test.ts +176 -0
  267. package/src/tests/mcp-tools-user.test.ts +34 -0
  268. package/src/tests/mcp-user-route.test.ts +17 -0
  269. package/src/tests/metrics-http.test.ts +44 -0
  270. package/src/tests/migration-failure.test.ts +86 -0
  271. package/src/tests/multi-runtime-registration.test.ts +2810 -0
  272. package/src/tests/openapi-response-contract.test.ts +24 -0
  273. package/src/tests/openapi-route-headers.test.ts +83 -0
  274. package/src/tests/opencode-adapter.test.ts +40 -0
  275. package/src/tests/outbound-listener-rejection.test.ts +138 -0
  276. package/src/tests/pi-mono-adapter.test.ts +98 -0
  277. package/src/tests/preload.ts +2 -0
  278. package/src/tests/profile-sync-warning.test.ts +277 -0
  279. package/src/tests/profile-sync.test.ts +232 -6
  280. package/src/tests/prompt-template-resolver.test.ts +177 -6
  281. package/src/tests/prompt-template-session.test.ts +39 -3
  282. package/src/tests/queue-stall-alarm.test.ts +226 -0
  283. package/src/tests/rbac-charact-slack.test.ts +29 -0
  284. package/src/tests/rbac-engine.test.ts +3 -0
  285. package/src/tests/requester-comms.test.ts +32 -0
  286. package/src/tests/runner-requester-profile.test.ts +38 -0
  287. package/src/tests/schedule-target-type.test.ts +38 -0
  288. package/src/tests/script-connections.test.ts +13 -1
  289. package/src/tests/scripts-runtime-identity.test.ts +375 -0
  290. package/src/tests/scripts-runtime.test.ts +4 -3
  291. package/src/tests/sdk-allowlist.test.ts +47 -0
  292. package/src/tests/send-task-requested-by.test.ts +9 -0
  293. package/src/tests/session-costs.test.ts +506 -1
  294. package/src/tests/shutdown-error-scrubbing.test.ts +92 -0
  295. package/src/tests/slack-channel-lifecycle.test.ts +241 -0
  296. package/src/tests/slack-render-v2.test.ts +43 -0
  297. package/src/tests/steering-core.test.ts +28 -0
  298. package/src/tests/swarm-config-reserved-keys.test.ts +22 -0
  299. package/src/tests/task-artifacts.test.ts +386 -0
  300. package/src/tests/task-attachments-schema.test.ts +17 -1
  301. package/src/tests/task-completion-idempotency.test.ts +57 -0
  302. package/src/tests/task-pull-request-backfill-migration.test.ts +321 -0
  303. package/src/tests/tool-annotations.test.ts +4 -0
  304. package/src/tests/update-profile-api.test.ts +67 -39
  305. package/src/tests/update-profile-auth.test.ts +48 -4
  306. package/src/tests/user-attribution-migration.test.ts +54 -0
  307. package/src/tests/user-identity.test.ts +72 -0
  308. package/src/tests/workflow-async-v2.test.ts +39 -1
  309. package/src/tests/workflow-http-v2.test.ts +3 -2
  310. package/src/tests/workflow-mcp-trigger-schema.test.ts +52 -3
  311. package/src/tests/workflow-retry-v2.test.ts +45 -1
  312. package/src/tools/db-query.ts +18 -8
  313. package/src/tools/get-task-details.ts +24 -3
  314. package/src/tools/manage-user.ts +36 -3
  315. package/src/tools/poll-task.ts +93 -14
  316. package/src/tools/script-common.ts +5 -0
  317. package/src/tools/send-task.ts +1 -4
  318. package/src/tools/slack-archive-channel.ts +70 -0
  319. package/src/tools/slack-create-channel.ts +74 -0
  320. package/src/tools/slack-invite-to-channel.ts +78 -0
  321. package/src/tools/store-progress.ts +13 -2
  322. package/src/tools/swarm-config/delete-config.ts +9 -0
  323. package/src/tools/swarm-config/set-config.ts +3 -2
  324. package/src/tools/task-action.ts +30 -0
  325. package/src/tools/task-tool-ctx.ts +8 -1
  326. package/src/tools/tool-config.ts +4 -1
  327. package/src/tools/update-profile.ts +16 -21
  328. package/src/tools/utils.ts +5 -0
  329. package/src/tools/workflows/trigger-workflow.ts +7 -1
  330. package/src/types.ts +165 -1
  331. package/src/utils/github-pull-request.ts +76 -0
  332. package/src/utils/identity-field-budget.ts +73 -0
  333. package/src/utils/multi-runtime.ts +20 -0
  334. package/src/utils/requester-comms.ts +24 -0
  335. package/src/workflows/engine.ts +22 -2
  336. package/src/workflows/resume.ts +19 -11
  337. package/src/workflows/retry-poller.ts +1 -0
  338. package/src/workflows/triggers.ts +4 -0
  339. package/templates/skills/db-query-guidance/config.json +14 -0
  340. package/templates/skills/db-query-guidance/content.md +57 -0
  341. package/dist/app-5da78bd4.js +0 -26
  342. package/dist/cli-3te4jdkm.js +0 -225
  343. package/dist/cli-bmze986d.js +0 -7
  344. package/dist/cli-kh3ba2zf.js +0 -607
  345. package/dist/hook-cgk4wxmx.js +0 -31
  346. package/dist/index-25wjsdv2.js +0 -34
  347. package/dist/index-76at2ymp.js +0 -7
  348. package/dist/index-hase6zbe.js +0 -6
  349. package/dist/index-vg4snay4.js +0 -36
  350. package/dist/index-vy8edt27.js +0 -7
  351. package/dist/lead-r2yqfmx7.js +0 -85
  352. package/dist/maintenance-mw70k468.js +0 -26
  353. package/dist/mistral-conversations-81fwav0j.js +0 -30578
  354. package/dist/otel-nqa12wf3.js +0 -3149
  355. package/dist/pricing-refresh-2cn6effr.js +0 -20
  356. package/dist/rbac-roles-vynday5g.js +0 -30
  357. package/dist/render-v2-tc0bh8kk.js +0 -34
  358. package/dist/seed-pricing-8kceb43f.js +0 -17
  359. package/dist/token-util-pqyc8kng.js +0 -6
  360. package/dist/worker-qrbz6hmv.js +0 -85
package/src/be/events.ts CHANGED
@@ -266,6 +266,7 @@ export function getEventsFiltered(filters: {
266
266
  agentId?: string;
267
267
  taskId?: string;
268
268
  sessionId?: string;
269
+ dataField?: string;
269
270
  since?: string;
270
271
  until?: string;
271
272
  limit?: number;
@@ -301,6 +302,10 @@ export function getEventsFiltered(filters: {
301
302
  conditions.push("sessionId = ?");
302
303
  params.push(filters.sessionId);
303
304
  }
305
+ if (filters.dataField) {
306
+ conditions.push("json_extract(data, '$.field') = ?");
307
+ params.push(filters.dataField);
308
+ }
304
309
  if (filters.since) {
305
310
  conditions.push("createdAt >= ?");
306
311
  params.push(filters.since);
@@ -0,0 +1,2 @@
1
+ -- Support chronological session log scans without walking the full table.
2
+ CREATE INDEX IF NOT EXISTS idx_session_logs_createdAt ON session_logs(createdAt);
@@ -0,0 +1,44 @@
1
+ -- Multi-runtime support: one logical agent may be served by several worker
2
+ -- processes at once.
3
+ --
4
+ -- `runtime_instances` holds one row per worker process serving an agent. The
5
+ -- `agents` row stays the durable identity; these rows carry only
6
+ -- process-scoped state (self-reported capacity and liveness) and are written
7
+ -- exclusively while MULTI_RUNTIME_ENABLED is set, so the table stays empty in
8
+ -- the default configuration. Rows are retired and pruned through the runtime
9
+ -- lifecycle rather than kept as history.
10
+ --
11
+ -- `status` values live in Zod (RuntimeInstanceStatusSchema, src/types.ts)
12
+ -- rather than a SQL CHECK, so adding a lifecycle state later needs no table
13
+ -- rebuild — the convention agent_tasks.source adopted in migration 056.
14
+ --
15
+ -- No FK from agent_tasks: task history must survive the disappearance of
16
+ -- whatever ran it.
17
+ CREATE TABLE runtime_instances (
18
+ id TEXT PRIMARY KEY,
19
+ agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
20
+ status TEXT NOT NULL DEFAULT 'active',
21
+ -- This runtime's own concurrent task capacity, self-reported at
22
+ -- registration. Composes with, but is never an alias for, agents.maxTasks.
23
+ reported_slots INTEGER NOT NULL DEFAULT 1,
24
+ -- Credential readiness is process-local: one runtime waiting on credentials
25
+ -- must not disable a ready sibling. NULL means "never reported" (e.g.
26
+ -- CRED_CHECK_DISABLE), which counts as ready so those workers stay usable.
27
+ credential_ready INTEGER,
28
+ metadata TEXT,
29
+ last_seen_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
30
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
31
+ updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
32
+ created_by TEXT,
33
+ updated_by TEXT
34
+ );
35
+
36
+ CREATE INDEX idx_runtime_instances_agent ON runtime_instances(agent_id);
37
+
38
+ -- Record which runtime owns each session so a starting worker clears only its
39
+ -- own leftovers instead of deleting a sibling's live session (which would
40
+ -- requeue a task another process is still executing). Nullable: pre-existing
41
+ -- rows and single-runtime deployments keep the agent-wide semantics.
42
+ ALTER TABLE active_sessions ADD COLUMN runtimeInstanceId TEXT;
43
+
44
+ CREATE INDEX idx_active_sessions_runtime ON active_sessions(runtimeInstanceId);
@@ -0,0 +1,12 @@
1
+ -- Persist workflow trigger provenance outside caller-controlled triggerData.
2
+ -- `created_by` already snapshots the human requester; together these columns
3
+ -- distinguish a creatorless scheduled run from a requester-less manual run.
4
+ ALTER TABLE workflow_runs
5
+ ADD COLUMN triggerType TEXT NOT NULL DEFAULT 'manual'
6
+ CHECK(triggerType IN ('schedule', 'manual', 'event', 'api'));
7
+
8
+ -- Historical triggerData is caller-controlled for manual/API runs, so it
9
+ -- cannot be promoted into trusted provenance. Existing rows keep the safe
10
+ -- `manual` default; all future engine writes populate the server-owned value.
11
+
12
+ CREATE INDEX idx_workflow_runs_trigger_type ON workflow_runs(triggerType);
@@ -0,0 +1,228 @@
1
+ -- Migration 135: backfill canonical GitHub pull-request attachments from historical task output.
2
+ --
3
+ -- Runtime task completion and VCS detection now write these rows directly. This
4
+ -- migration repairs the legacy history without deleting or rewriting any
5
+ -- caller-authored attachment. Re-running is safe: the NOT EXISTS guard treats
6
+ -- task + canonical URL as the identity regardless of display name.
7
+
8
+ WITH RECURSIVE
9
+ candidate_sources(task_id, agent_id, source_text) AS (
10
+ SELECT id, agentId, output
11
+ FROM agent_tasks
12
+ WHERE output IS NOT NULL
13
+ AND instr(lower(output), 'github.com/') > 0
14
+
15
+ UNION ALL
16
+
17
+ SELECT id, agentId, vcsUrl
18
+ FROM agent_tasks
19
+ WHERE lower(vcsProvider) = 'github'
20
+ AND vcsUrl IS NOT NULL
21
+ AND instr(lower(vcsUrl), 'github.com/') > 0
22
+ ),
23
+ whitespace_delimiters(position, code_point) AS (
24
+ VALUES
25
+ (1, 9), (2, 10), (3, 11), (4, 12), (5, 13), (6, 32), (7, 160), (8, 5760),
26
+ (9, 8192), (10, 8193), (11, 8194), (12, 8195), (13, 8196), (14, 8197),
27
+ (15, 8198), (16, 8199), (17, 8200), (18, 8201), (19, 8202), (20, 8232),
28
+ (21, 8233), (22, 8239), (23, 8287), (24, 12288), (25, 65279)
29
+ ),
30
+ token_delimiters(position, code_point) AS (
31
+ SELECT position, code_point FROM whitespace_delimiters
32
+ UNION ALL SELECT 26, 40
33
+ UNION ALL SELECT 27, 41
34
+ UNION ALL SELECT 28, 91
35
+ UNION ALL SELECT 29, 93
36
+ UNION ALL SELECT 30, 123
37
+ UNION ALL SELECT 31, 125
38
+ UNION ALL SELECT 32, 60
39
+ UNION ALL SELECT 33, 62
40
+ UNION ALL SELECT 34, 34
41
+ UNION ALL SELECT 35, 39
42
+ UNION ALL SELECT 36, 96
43
+ ),
44
+ whitespace_characters(value, position) AS (
45
+ SELECT '', 0
46
+
47
+ UNION ALL
48
+
49
+ SELECT value || char(code_point), whitespace_characters.position + 1
50
+ FROM whitespace_characters
51
+ JOIN whitespace_delimiters
52
+ ON whitespace_delimiters.position = whitespace_characters.position + 1
53
+ ),
54
+ normalized(task_id, agent_id, value, position) AS (
55
+ SELECT
56
+ task_id,
57
+ agent_id,
58
+ source_text,
59
+ 0
60
+ FROM candidate_sources
61
+
62
+ UNION ALL
63
+
64
+ SELECT
65
+ task_id,
66
+ agent_id,
67
+ replace(value, char(code_point), ' '),
68
+ normalized.position + 1
69
+ FROM normalized
70
+ JOIN token_delimiters ON token_delimiters.position = normalized.position + 1
71
+ ),
72
+ tokens(task_id, agent_id, remaining, token) AS (
73
+ SELECT
74
+ task_id,
75
+ agent_id,
76
+ trim(value) || ' ',
77
+ NULL
78
+ FROM normalized
79
+ WHERE position = (SELECT max(position) FROM token_delimiters)
80
+
81
+ UNION ALL
82
+
83
+ SELECT
84
+ task_id,
85
+ agent_id,
86
+ ltrim(substr(remaining, instr(remaining, ' ') + 1)),
87
+ substr(remaining, 1, instr(remaining, ' ') - 1)
88
+ FROM tokens
89
+ WHERE remaining <> ''
90
+ ),
91
+ token_paths(task_id, agent_id, token, path) AS (
92
+ SELECT
93
+ task_id,
94
+ agent_id,
95
+ token,
96
+ CASE
97
+ WHEN lower(token) GLOB 'https://github.com/*'
98
+ THEN substr(token, length('https://github.com/') + 1)
99
+ WHEN lower(token) GLOB 'http://github.com/*'
100
+ THEN substr(token, length('http://github.com/') + 1)
101
+ ELSE substr(token, length('github.com/') + 1)
102
+ END
103
+ FROM tokens
104
+ WHERE lower(token) GLOB 'https://github.com/*'
105
+ OR lower(token) GLOB 'http://github.com/*'
106
+ OR lower(token) GLOB 'github.com/*'
107
+ ),
108
+ token_segments(task_id, agent_id, token, owner, repo, remainder) AS (
109
+ SELECT
110
+ task_id,
111
+ agent_id,
112
+ token,
113
+ substr(path, 1, instr(path, '/') - 1),
114
+ substr(
115
+ substr(path, instr(path, '/') + 1),
116
+ 1,
117
+ instr(substr(path, instr(path, '/') + 1), '/') - 1
118
+ ),
119
+ substr(
120
+ substr(path, instr(path, '/') + 1),
121
+ instr(substr(path, instr(path, '/') + 1), '/') + 1
122
+ )
123
+ FROM token_paths
124
+ WHERE instr(path, '/') > 1
125
+ AND instr(substr(path, instr(path, '/') + 1), '/') > 1
126
+ ),
127
+ digit_scan(task_id, agent_id, token, position) AS (
128
+ SELECT
129
+ task_id,
130
+ agent_id,
131
+ 'https://github.com/' || owner || '/' || repo || '/' || remainder,
132
+ instr(
133
+ lower('https://github.com/' || owner || '/' || repo || '/' || remainder),
134
+ '/pull/'
135
+ ) + length('/pull/')
136
+ FROM token_segments
137
+ WHERE owner NOT GLOB '*[^A-Za-z0-9._-]*'
138
+ AND repo NOT GLOB '*[^A-Za-z0-9._-]*'
139
+ AND owner NOT IN ('.', '..')
140
+ AND repo NOT IN ('.', '..')
141
+ AND lower(remainder) GLOB 'pull/[0-9]*'
142
+
143
+ UNION ALL
144
+
145
+ SELECT task_id, agent_id, token, position + 1
146
+ FROM digit_scan
147
+ WHERE substr(token, position, 1) GLOB '[0-9]'
148
+ ),
149
+ canonical_pull_requests(task_id, agent_id, url) AS (
150
+ SELECT
151
+ task_id,
152
+ agent_id,
153
+ substr(token, 1, max(position) - 1)
154
+ FROM digit_scan
155
+ GROUP BY task_id, agent_id, token
156
+ HAVING substr(token, max(position), 1) = ''
157
+ OR substr(token, max(position), 1) IN ('/', '?', '#')
158
+ OR trim(substr(token, max(position)), ')]},.;:!') = ''
159
+ )
160
+ INSERT INTO task_attachments (
161
+ id,
162
+ task_id,
163
+ agent_id,
164
+ name,
165
+ kind,
166
+ url,
167
+ provider_id,
168
+ provider_key,
169
+ capabilities,
170
+ intent,
171
+ description,
172
+ is_primary
173
+ )
174
+ SELECT
175
+ lower(hex(randomblob(4))) || '-' ||
176
+ lower(hex(randomblob(2))) || '-4' ||
177
+ substr(lower(hex(randomblob(2))), 2) || '-' ||
178
+ substr('89ab', abs(random()) % 4 + 1, 1) ||
179
+ substr(lower(hex(randomblob(2))), 2) || '-' ||
180
+ lower(hex(randomblob(6))),
181
+ candidate.task_id,
182
+ candidate.agent_id,
183
+ 'GitHub pull request #' || substr(candidate.url, instr(lower(candidate.url), '/pull/') + 6),
184
+ 'url',
185
+ candidate.url,
186
+ 'github',
187
+ candidate.url,
188
+ json_object('_agentSwarmGeneratedBy', 'task-pull-request-recorder'),
189
+ 'task-deliverable',
190
+ 'Pull request shipped by this task',
191
+ 0
192
+ FROM canonical_pull_requests candidate
193
+ WHERE NOT EXISTS (
194
+ SELECT 1
195
+ FROM task_attachments existing
196
+ WHERE existing.task_id = candidate.task_id
197
+ AND existing.kind = 'url'
198
+ AND EXISTS (
199
+ SELECT 1
200
+ FROM (
201
+ SELECT substr(lower(candidate.url), 9) AS base_url
202
+ UNION ALL
203
+ SELECT lower(candidate.url)
204
+ UNION ALL
205
+ SELECT 'http://' || substr(lower(candidate.url), 9)
206
+ ) forms
207
+ WHERE lower(trim(
208
+ existing.url,
209
+ (SELECT value FROM whitespace_characters
210
+ WHERE position = (SELECT max(position) FROM whitespace_delimiters))
211
+ )) = forms.base_url
212
+ OR (
213
+ substr(lower(trim(
214
+ existing.url,
215
+ (SELECT value FROM whitespace_characters
216
+ WHERE position = (SELECT max(position) FROM whitespace_delimiters))
217
+ )), 1, length(forms.base_url)) = forms.base_url
218
+ AND unicode(substr(lower(trim(
219
+ existing.url,
220
+ (SELECT value FROM whitespace_characters
221
+ WHERE position = (SELECT max(position) FROM whitespace_delimiters))
222
+ )), length(forms.base_url) + 1, 1)) IN (
223
+ 9, 10, 13, 32, 33, 34, 35, 39, 41, 44, 46, 47, 58, 59, 62, 63, 93, 96, 125
224
+ )
225
+ )
226
+ )
227
+ )
228
+ GROUP BY candidate.task_id, lower(candidate.url);
@@ -0,0 +1,37 @@
1
+ -- Record whether requester attribution was copied from a parent task. This is
2
+ -- server-owned provenance: callers may set requestedByUserId, but never this
3
+ -- marker.
4
+ ALTER TABLE agent_tasks
5
+ ADD COLUMN requestedByUserIdInherited INTEGER NOT NULL DEFAULT 0
6
+ CHECK (requestedByUserIdInherited IN (0, 1));
7
+
8
+ -- Migration 127 copied requester ids through task trees before provenance was
9
+ -- stored. Reconstruct only the historical case that affects human-free
10
+ -- attribution: stale requesters propagated below heartbeat roots. An audited
11
+ -- `created_by` is durable evidence of an original human handoff and stops the
12
+ -- reconstruction. Legacy unaudited same-user handoffs are indistinguishable,
13
+ -- so this deliberately avoids guessing across ordinary human task trees.
14
+ WITH RECURSIVE inherited_from_heartbeat(id, requester, depth) AS (
15
+ SELECT id, requestedByUserId, 0
16
+ FROM agent_tasks
17
+ WHERE requestedByUserId IS NOT NULL
18
+ AND (
19
+ IFNULL(taskType, '') IN ('heartbeat', 'heartbeat-checklist', 'boot-triage')
20
+ OR IFNULL(tags, '[]') LIKE '%"heartbeat"%'
21
+ )
22
+
23
+ UNION ALL
24
+
25
+ SELECT child.id, lineage.requester, lineage.depth + 1
26
+ FROM agent_tasks AS child
27
+ JOIN inherited_from_heartbeat AS lineage ON child.parentTaskId = lineage.id
28
+ WHERE child.requestedByUserId = lineage.requester
29
+ AND child.created_by IS NULL
30
+ )
31
+ UPDATE agent_tasks
32
+ SET requestedByUserIdInherited = 1
33
+ WHERE id IN (
34
+ SELECT id
35
+ FROM inherited_from_heartbeat
36
+ WHERE depth > 0
37
+ );
@@ -0,0 +1 @@
1
+ CREATE INDEX IF NOT EXISTS idx_memret_memory_agent_retrieved_at ON memory_retrieval(memoryId, agentId, retrievedAt);
@@ -226,21 +226,27 @@ export function runMigrations(db: Database): void {
226
226
  }
227
227
 
228
228
  // Apply migration in a transaction
229
- console.debug(`[migrations] Applying: ${migration.name}`);
229
+ console.log(`[migrations] Applying: ${migration.name}`);
230
230
  const start = performance.now();
231
231
 
232
- db.transaction(() => {
233
- db.exec(migration.sql);
234
- db.run("INSERT INTO _migrations (version, name, applied_at, checksum) VALUES (?, ?, ?, ?)", [
235
- migration.version,
236
- migration.name,
237
- new Date().toISOString(),
238
- migration.checksum,
239
- ]);
240
- })();
232
+ try {
233
+ db.transaction(() => {
234
+ db.exec(migration.sql);
235
+ db.run(
236
+ "INSERT INTO _migrations (version, name, applied_at, checksum) VALUES (?, ?, ?, ?)",
237
+ [migration.version, migration.name, new Date().toISOString(), migration.checksum],
238
+ );
239
+ })();
240
+ } catch (error) {
241
+ const detail = error instanceof Error ? error.message : String(error);
242
+ throw new Error(
243
+ `[migrations] Migration ${migration.version} (${migration.name}) failed: ${detail}`,
244
+ { cause: error },
245
+ );
246
+ }
241
247
 
242
248
  const elapsed = (performance.now() - start).toFixed(1);
243
- console.debug(`[migrations] Applied: ${migration.name} (${elapsed}ms)`);
249
+ console.log(`[migrations] Applied: ${migration.name} (${elapsed}ms)`);
244
250
  }
245
251
 
246
252
  db.run("PRAGMA foreign_keys = ON");