@desplega.ai/agent-swarm 1.172.0 → 2.0.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 (525) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-fpecx1g1.js → acp-adapter-sj2g0m84.js} +18 -17
  3. package/dist/{actions-pw87a1a8.js → actions-fegk44gr.js} +65 -35
  4. package/dist/{amp-adapter-8jem2bc0.js → amp-adapter-ad8ft89x.js} +8 -7
  5. package/dist/{anthropic-messages-8ee2f22q.js → anthropic-messages-r6czkjv1.js} +7 -7
  6. package/dist/{app-wmf0m843.js → app-kfvgbvzy.js} +19 -13
  7. package/dist/{assistant-emp1e108.js → assistant-z7zdy9ja.js} +65 -38
  8. package/dist/{boot-reembed-1de4f4aj.js → boot-reembed-5c2z0mbe.js} +11 -9
  9. package/dist/{boot-reembed-4ymn9atn.js → boot-reembed-j8xa181e.js} +11 -9
  10. package/dist/{boot-scrub-sweep-adhk1s8c.js → boot-scrub-sweep-hnkn3rgt.js} +12 -10
  11. package/dist/{boot-seeds-8q637aew.js → boot-seeds-kwjq4d2z.js} +15 -13
  12. package/dist/{claude-adapter-t26cv8a4.js → claude-adapter-9vmvpvgd.js} +20 -19
  13. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-k9qae05j.js} +7 -5
  14. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-q54zx5q2.js} +6 -4
  15. package/dist/{claude-sdk-session-gsfsh662.js → claude-sdk-session-9jye6cxr.js} +12698 -11995
  16. package/dist/{cli-k46r9hmk.js → cli-03gedhng.js} +16 -14
  17. package/dist/{cli-kb4ehzx5.js → cli-1e4b6bzh.js} +7 -7
  18. package/dist/{cli-d603qf86.js → cli-29jc5q7w.js} +10 -8
  19. package/dist/cli-2m1ktfzz.js +17795 -0
  20. package/dist/{cli-8vs9trd4.js → cli-3dj8k4vy.js} +1 -1
  21. package/dist/{cli-zxm9p3x4.js → cli-3fbmmawm.js} +5 -5
  22. package/dist/{cli-gmdajfw5.js → cli-4jxm2qtz.js} +4987 -1708
  23. package/dist/{cli-tadfgd0t.js → cli-5hkm7whv.js} +33 -4
  24. package/dist/{cli-6jb2rf77.js → cli-5t4f29ez.js} +3 -3
  25. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  26. package/dist/cli-6cvfxs8r.js +47 -0
  27. package/dist/{cli-pj6x9qce.js → cli-6jyj59nb.js} +2 -2
  28. package/dist/{cli-388egyf6.js → cli-6razj6t4.js} +2 -2
  29. package/dist/{cli-qsztpfry.js → cli-74ahz61x.js} +2 -2
  30. package/dist/{cli-4nz8p1p5.js → cli-7x0g4sn1.js} +15474 -16082
  31. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  32. package/dist/{cli-81r1wjyv.js → cli-9nfx44eh.js} +1 -1
  33. package/dist/cli-9traj3dn.js +638 -0
  34. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  35. package/dist/{cli-bf7485pm.js → cli-apx87jne.js} +2 -2
  36. package/dist/{cli-ztrv9y21.js → cli-bzszjf2p.js} +3689 -1081
  37. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  38. package/dist/{cli-hsem16hb.js → cli-cgtksawx.js} +7 -4
  39. package/dist/{cli-db3m6zdt.js → cli-d2qr7aj4.js} +1 -1
  40. package/dist/{cli-1hgat6pa.js → cli-d5f9ed5c.js} +5 -5
  41. package/dist/cli-e3g5mbkz.js +776 -0
  42. package/dist/{cli-7jykv7ef.js → cli-e6mpjhed.js} +1 -1
  43. package/dist/{cli-j6kpj9az.js → cli-ee9gtz70.js} +1553 -68
  44. package/dist/{cli-e0a9sk00.js → cli-eejsgvm4.js} +4 -4
  45. package/dist/{cli-tgpfnm6r.js → cli-ef1hg1wv.js} +518 -59
  46. package/dist/cli-f527ce74.js +781 -0
  47. package/dist/{cli-ppy4nnnh.js → cli-f7kr7svz.js} +2 -2
  48. package/dist/cli-hjwmhcg1.js +10622 -0
  49. package/dist/{cli-2bw3w47j.js → cli-hnhtk6cj.js} +1 -1
  50. package/dist/{cli-ywm1azg9.js → cli-hnmhtzvh.js} +6 -4
  51. package/dist/{cli-4fnb6884.js → cli-hvqbtna4.js} +7 -1259
  52. package/dist/{cli-pstq9888.js → cli-j0pfptdp.js} +220 -103
  53. package/dist/cli-jta2eyzc.js +619 -0
  54. package/dist/{cli-esnpehf5.js → cli-k382tshb.js} +12 -13
  55. package/dist/cli-k3dp5tpf.js +263 -0
  56. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  57. package/dist/cli-kceah1eh.js +92 -0
  58. package/dist/{cli-prrt9fa0.js → cli-ke896fcf.js} +10 -10
  59. package/dist/{cli-nv4zd0b9.js → cli-kt6zqg0e.js} +6 -6
  60. package/dist/{cli-g6t9texm.js → cli-m50t4309.js} +5 -18
  61. package/dist/cli-n2wq4j7m.js +6985 -0
  62. package/dist/{cli-c2pq2rjb.js → cli-n3hzg89b.js} +46 -15
  63. package/dist/{cli-tmhsxhb8.js → cli-n5vwg842.js} +23 -6
  64. package/dist/{cli-5rv1j9ga.js → cli-ne236afy.js} +53 -7
  65. package/dist/cli-p0sg24zp.js +16 -0
  66. package/dist/{cli-d161g69q.js → cli-p1x85d2t.js} +50 -2
  67. package/dist/{cli-7pz3b7x5.js → cli-przpmdgr.js} +25 -0
  68. package/dist/{cli-g4f5pj26.js → cli-q0ke1yww.js} +111 -25
  69. package/dist/{cli-e3pmyt39.js → cli-q50942rs.js} +1 -1
  70. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  71. package/dist/{cli-gj81e47t.js → cli-r2pnvj8g.js} +2 -2
  72. package/dist/{cli-r8smj8b8.js → cli-r62a35ea.js} +19 -3
  73. package/dist/{cli-cd0hv9nh.js → cli-ra0xzggj.js} +2 -2
  74. package/dist/cli-rhs9pz33.js +294 -0
  75. package/dist/{cli-nyhb1r6x.js → cli-s2sp957d.js} +52 -29
  76. package/dist/{cli-1x7da0de.js → cli-s4setq91.js} +8 -8
  77. package/dist/{cli-xczpdp9e.js → cli-se8w6wny.js} +6 -6
  78. package/dist/cli-skxvvpap.js +10140 -0
  79. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  80. package/dist/{cli-0p3enk35.js → cli-tqaazemc.js} +9 -1
  81. package/dist/{cli-cf69s3ew.js → cli-tr4sxp68.js} +3 -3
  82. package/dist/{cli-8hzfb6xz.js → cli-tsde1hdr.js} +15 -15
  83. package/dist/{cli-cceskcvt.js → cli-txqb9s38.js} +8 -8
  84. package/dist/{cli-aspcaef3.js → cli-v1yb0rqb.js} +6 -6
  85. package/dist/{cli-j1pmc07z.js → cli-vatyhshy.js} +268 -40
  86. package/dist/{cli-04emfe2q.js → cli-vdach5a9.js} +5 -5
  87. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  88. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  89. package/dist/{cli-hwwvy36w.js → cli-wayw93nt.js} +3 -3
  90. package/dist/cli-wmgrkscj.js +23254 -0
  91. package/dist/{cli-gp1rtyvk.js → cli-z5jjpaxw.js} +29 -6
  92. package/dist/{cli-451ks6aw.js → cli-zkpks3r3.js} +1 -1
  93. package/dist/cli.js +32 -48
  94. package/dist/{codex-adapter-m4tgdysy.js → codex-adapter-y81sssk0.js} +16 -15
  95. package/dist/{codex-login-841kv5fk.js → codex-login-f2rcfpp9.js} +3 -2
  96. package/dist/{codex-session-runner-ymwzm6ea.js → codex-session-runner-8vx4j6a9.js} +16 -15
  97. package/dist/{commands-n0hshcvs.js → commands-kcpvpcrr.js} +21 -10
  98. package/dist/{controller-hq5ggpcp.js → controller-ywrmt6yd.js} +5 -4
  99. package/dist/{controllers-connect-y07cqcvy.js → controllers-connect-kwpvj3rf.js} +45 -38
  100. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-cehv1qns.js} +7 -6
  101. package/dist/{db-hkqvrdcb.js → db-k8ankj20.js} +13 -11
  102. package/dist/{db-4w7tmt1g.js → db-ww5d7jq3.js} +29 -9
  103. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-x1022qb1.js} +3 -2
  104. package/dist/{dispatcher-5sd69y14.js → dispatcher-e8gq5m68.js} +41 -34
  105. package/dist/{docker-f503k9p0.js → docker-ff6y1190.js} +3 -2
  106. package/dist/{dsh-adapter-2h8m4cab.js → dsh-adapter-3epjm3af.js} +7 -6
  107. package/dist/{e2b-66xra4az.js → e2b-8ygwhg0f.js} +4 -3
  108. package/dist/{e2b-xwhyj8cw.js → e2b-swhnpw3n.js} +4 -3
  109. package/dist/{event-bus-vjtv82gm.js → event-bus-6axnngdj.js} +3 -2
  110. package/dist/external-channel-h3359cwn.js +52 -0
  111. package/dist/{google-generative-ai-7pavrbv7.js → google-generative-ai-g8db7x0f.js} +5 -3
  112. package/dist/{google-vertex-3f1jk41f.js → google-vertex-r2692q0r.js} +5 -3
  113. package/dist/{grok-adapter-8m9yqzbq.js → grok-adapter-0d4x7gkx.js} +19 -18
  114. package/dist/{handlers-s20xr10r.js → handlers-an1gzv21.js} +44 -37
  115. package/dist/{heartbeat-3k31q4g2.js → heartbeat-6dakeb61.js} +46 -39
  116. package/dist/{hook-gdn6a2fn.js → hook-6v6cv6d5.js} +12 -24
  117. package/dist/{hook-ygwerrdh.js → hook-sa5xye4y.js} +13 -12
  118. package/dist/{http-jdteeg81.js → http-r7f3eky0.js} +1598 -279
  119. package/dist/index-52j1aja4.js +3465 -0
  120. package/dist/{index-e0snym4t.js → index-7ep4gzdk.js} +41 -34
  121. package/dist/index-9gw58n4k.js +193 -0
  122. package/dist/index-9j87mcm8.js +56305 -0
  123. package/dist/index-bsmcresk.js +79424 -0
  124. package/dist/index-mh85qhec.js +475 -0
  125. package/dist/{index-vm3bm9t7.js → index-rmpw9a8q.js} +41 -34
  126. package/dist/{index-6ksewd5y.js → index-s2wxgzr0.js} +1015 -732
  127. package/dist/{index-tsszt7g9.js → index-v1v6n7hg.js} +46 -39
  128. package/dist/index-we27kd31.js +12810 -0
  129. package/dist/{index-ffqzqgwb.js → index-zk96aq1k.js} +11 -9
  130. package/dist/{keepalive-jekc896t.js → keepalive-be9vwy5h.js} +13 -11
  131. package/dist/{lead-4k9s9szx.js → lead-0861cwrf.js} +64 -57
  132. package/dist/{maintenance-shazch4n.js → maintenance-mzzgc8bn.js} +11 -9
  133. package/dist/node-c9we95xf.js +1 -1
  134. package/dist/{node-fkajaq96.js → node-mn1zs7an.js} +2 -1
  135. package/dist/{oauth-refresh-sweep-5gb36kn8.js → oauth-refresh-sweep-cpdnfwdj.js} +12 -10
  136. package/dist/{onboard-ydrbnvww.js → onboard-fh8qs4r3.js} +11 -3
  137. package/dist/{opencode-adapter-5zh0he20.js → opencode-adapter-nm42wwj8.js} +19 -14
  138. package/dist/{otel-impl-6pf5cv86.js → otel-impl-x6c1c9g4.js} +248 -869
  139. package/dist/{pi-mono-adapter-ef9wwx9m.js → pi-mono-adapter-9n2ya240.js} +245 -107
  140. package/dist/{pricing-refresh-s52nsa5q.js → pricing-refresh-qb0rv0ap.js} +13 -11
  141. package/dist/{rbac-roles-aq3msh4e.js → rbac-roles-1gzdwbh1.js} +12 -10
  142. package/dist/{rbac-roles-q5gb5e8v.js → rbac-roles-3mraey52.js} +13 -11
  143. package/dist/{render-v2-pd1rg54q.js → render-v2-agpa45zz.js} +19 -13
  144. package/dist/{resume-gw4a2c6v.js → resume-x0ydy9s9.js} +27 -21
  145. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  146. package/dist/{setup-jda1ksdh.js → setup-as9ga0d6.js} +2 -2
  147. package/dist/{virtual-modules-b3ga2m65.js → virtual-modules-9gkxqrap.js} +7 -6
  148. package/dist/{work-objects-tb7ycye8.js → work-objects-y5g1y7ev.js} +49 -37
  149. package/dist/{worker-njjccz5d.js → worker-860c3e38.js} +64 -57
  150. package/dist/{x-qfmygqqv.js → x-m477fr0h.js} +3 -2
  151. package/openapi.json +951 -356
  152. package/package.json +12 -13
  153. package/src/apps/catalog.generated.json +1309 -53
  154. package/src/apps/page-validator.ts +93 -31
  155. package/src/azure-devops/api.ts +94 -18
  156. package/src/azure-devops/auth.ts +32 -0
  157. package/src/azure-devops/boards-sync.ts +708 -0
  158. package/src/azure-devops/handlers.ts +52 -8
  159. package/src/azure-devops/html.ts +26 -0
  160. package/src/azure-devops/index.ts +15 -0
  161. package/src/azure-devops/templates.ts +86 -0
  162. package/src/azure-devops/types.ts +65 -1
  163. package/src/be/config-refs.ts +60 -0
  164. package/src/be/db/page-versions.ts +15 -0
  165. package/src/be/db/runtime.ts +35 -8
  166. package/src/be/db/skill-name-resolution.ts +36 -0
  167. package/src/be/db/tasks/read.ts +230 -0
  168. package/src/be/db/tasks/write.ts +7 -0
  169. package/src/be/db.ts +74 -13
  170. package/src/be/migrations/213_script_connections_sql.sql +79 -0
  171. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  172. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  173. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  174. package/src/be/model-catalog-store.ts +5 -1
  175. package/src/be/model-tier-resolution.ts +12 -1
  176. package/src/be/model-validation.ts +5 -2
  177. package/src/be/models-catalog.ts +26 -1
  178. package/src/be/modelsdev-cache.json +198 -63
  179. package/src/be/modelsdev-cache.ts +9 -1
  180. package/src/be/script-connections.ts +47 -8
  181. package/src/be/script-credential-broker.ts +39 -2
  182. package/src/be/scripts/run-saved.ts +1 -0
  183. package/src/be/scripts/typecheck.ts +10 -8
  184. package/src/be/seed/runner.ts +13 -1
  185. package/src/be/seed/state-db.ts +5 -0
  186. package/src/be/seed/types.ts +6 -0
  187. package/src/be/seed-pricing.ts +19 -2
  188. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  189. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  190. package/src/be/seed-skills/bundled-files.generated.json +10 -18
  191. package/src/be/seed-skills/index.ts +107 -3
  192. package/src/be/sql-connections.ts +118 -0
  193. package/src/be/swarm-config-guard.ts +53 -0
  194. package/src/cli.tsx +0 -16
  195. package/src/commands/onboard/non-interactive.ts +4 -2
  196. package/src/commands/profile-sync.ts +5 -3
  197. package/src/commands/provider-credentials.ts +52 -6
  198. package/src/commands/runner.ts +196 -56
  199. package/src/e2b/env.ts +5 -0
  200. package/src/extensions/contract-types.generated.ts +1 -1
  201. package/src/extensions/contract.ts +45 -0
  202. package/src/extensions/dispatcher.ts +7 -0
  203. package/src/extensions/post-bridge.ts +40 -0
  204. package/src/github/handlers.ts +11 -4
  205. package/src/heartbeat/templates.ts +8 -5
  206. package/src/hooks/hook.ts +0 -26
  207. package/src/http/all-routes.ts +0 -1
  208. package/src/http/config.ts +36 -17
  209. package/src/http/core.ts +4 -0
  210. package/src/http/index.ts +14 -2
  211. package/src/http/integrations.ts +88 -1
  212. package/src/http/mcp-oauth.ts +6 -13
  213. package/src/http/mcp.ts +15 -5
  214. package/src/http/page-proxy.ts +2 -4
  215. package/src/http/pages-public.ts +6 -5
  216. package/src/http/pages.ts +5 -14
  217. package/src/http/poll.ts +28 -68
  218. package/src/http/requested-by.ts +54 -0
  219. package/src/http/route-def.ts +7 -6
  220. package/src/http/script-connection-proxy.ts +51 -4
  221. package/src/http/script-connections.ts +5 -2
  222. package/src/http/scripts.ts +1 -0
  223. package/src/http/session-cost-recompute.ts +12 -2
  224. package/src/http/session-data.ts +4 -0
  225. package/src/http/stats.ts +1 -30
  226. package/src/http/tasks.ts +61 -5
  227. package/src/http/utils.ts +14 -0
  228. package/src/http/webhooks.ts +183 -2
  229. package/src/http/x.ts +1 -0
  230. package/src/integrations/chat-sdk/adapters.ts +129 -0
  231. package/src/integrations/chat-sdk/attachments.ts +232 -0
  232. package/src/integrations/chat-sdk/background.ts +36 -0
  233. package/src/integrations/chat-sdk/commands.ts +194 -0
  234. package/src/integrations/chat-sdk/config.ts +198 -0
  235. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  236. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  237. package/src/integrations/chat-sdk/handlers.ts +28 -0
  238. package/src/integrations/chat-sdk/inbound.ts +426 -0
  239. package/src/integrations/chat-sdk/limits.ts +48 -0
  240. package/src/integrations/chat-sdk/logger.ts +81 -0
  241. package/src/integrations/chat-sdk/outbound.ts +123 -0
  242. package/src/integrations/chat-sdk/relay.ts +172 -0
  243. package/src/integrations/chat-sdk/router.ts +169 -0
  244. package/src/integrations/chat-sdk/runtime.ts +351 -0
  245. package/src/integrations/chat-sdk/schema.ts +245 -0
  246. package/src/integrations/chat-sdk/state.ts +243 -0
  247. package/src/integrations/chat-sdk/status.ts +244 -0
  248. package/src/integrations/chat-sdk/steering.ts +58 -0
  249. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  250. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  251. package/src/integrations/chat-sdk/templates.ts +16 -0
  252. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  253. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  254. package/src/integrations/chat-sdk/typing.ts +65 -0
  255. package/src/jira/adf.ts +3 -1
  256. package/src/kv-reserved-namespaces.ts +2 -0
  257. package/src/oauth/mcp-wrapper.ts +10 -6
  258. package/src/otel-impl.ts +2 -1
  259. package/src/pages/version.ts +4 -5
  260. package/src/prompts/base-prompt.ts +111 -45
  261. package/src/providers/acp-target-catalog.ts +6 -0
  262. package/src/providers/acp-targets.ts +56 -3
  263. package/src/providers/amp-adapter.ts +1 -1
  264. package/src/providers/claude-adapter.ts +27 -2
  265. package/src/providers/claude-flag-settings.ts +133 -0
  266. package/src/providers/claude-managed-adapter.ts +1 -1
  267. package/src/providers/claude-sdk-session.ts +7 -0
  268. package/src/providers/claude-session-events.ts +6 -1
  269. package/src/providers/dsh-adapter.ts +1 -1
  270. package/src/providers/opencode-adapter.ts +268 -37
  271. package/src/providers/opencode-billing.ts +86 -0
  272. package/src/providers/opencode-swarm-plugin.ts +51 -0
  273. package/src/providers/pi-mono-adapter.ts +398 -153
  274. package/src/providers/pricing-sources.md +37 -3
  275. package/src/providers/reasoning-effort.ts +27 -0
  276. package/src/providers/types.ts +11 -2
  277. package/src/rbac/legacy-policy.ts +8 -2
  278. package/src/rbac/permissions.ts +21 -0
  279. package/src/scheduler/scheduler.ts +4 -2
  280. package/src/scripts-runtime/api-client.ts +15 -1
  281. package/src/scripts-runtime/api-types.ts +9 -1
  282. package/src/scripts-runtime/ctx.ts +1 -1
  283. package/src/scripts-runtime/loader.ts +19 -7
  284. package/src/scripts-runtime/mcp-client.ts +30 -19
  285. package/src/scripts-runtime/sdk-allowlist.ts +8 -6
  286. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  287. package/src/scripts-runtime/types/stdlib.d.ts +27 -15
  288. package/src/scripts-runtime/types/swarm-extension.d.ts +63 -1
  289. package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -15
  290. package/src/server.ts +52 -18
  291. package/src/slack/actions.ts +29 -1
  292. package/src/slack/app.ts +14 -2
  293. package/src/slack/assistant.ts +36 -2
  294. package/src/slack/channel-join.ts +3 -16
  295. package/src/slack/commands.ts +9 -1
  296. package/src/slack/event-dedup.ts +1 -1
  297. package/src/slack/external-channel-egress.ts +113 -0
  298. package/src/slack/external-channel.ts +309 -0
  299. package/src/slack/handlers.ts +61 -0
  300. package/src/slack/render-v2.ts +40 -47
  301. package/src/slack/work-objects.ts +5 -0
  302. package/src/tasks/additive-buffer.ts +4 -2
  303. package/src/tasks/context-key.ts +94 -2
  304. package/src/tasks/model-pin.ts +67 -0
  305. package/src/tasks/worker-follow-up.ts +4 -31
  306. package/src/telemetry.ts +2 -1
  307. package/src/tests/acp-adapter.test.ts +42 -0
  308. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  309. package/src/tests/apps-catalog-feedback.test.ts +310 -0
  310. package/src/tests/apps-catalog-inputs.test.ts +70 -0
  311. package/src/tests/apps-catalog-table.test.ts +113 -0
  312. package/src/tests/azure-devops-boards-sync.test.ts +584 -0
  313. package/src/tests/azure-devops-html.test.ts +13 -0
  314. package/src/tests/azure-devops-webhook-malformed.test.ts +4 -0
  315. package/src/tests/base-prompt.test.ts +58 -54
  316. package/src/tests/chat-sdk-commands.test.ts +191 -0
  317. package/src/tests/chat-sdk-config.test.ts +334 -0
  318. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  319. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  320. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  321. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  322. package/src/tests/chat-sdk-harness.ts +146 -0
  323. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  324. package/src/tests/chat-sdk-relay.test.ts +470 -0
  325. package/src/tests/chat-sdk-reload.test.ts +128 -0
  326. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  327. package/src/tests/chat-sdk-slack.test.ts +268 -0
  328. package/src/tests/chat-sdk-state.test.ts +163 -0
  329. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  330. package/src/tests/chat-sdk-teams.test.ts +277 -0
  331. package/src/tests/chat-sdk-tools.test.ts +520 -0
  332. package/src/tests/chat-sdk-typing.test.ts +120 -0
  333. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  334. package/src/tests/claude-adapter-binary.test.ts +144 -0
  335. package/src/tests/claude-flag-settings.test.ts +114 -0
  336. package/src/tests/claude-managed-adapter.test.ts +1 -1
  337. package/src/tests/claude-sdk-lifecycle.test.ts +148 -1
  338. package/src/tests/claude-sdk-process.fixture.ts +7 -0
  339. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  340. package/src/tests/claude-worker-parity.test.ts +2 -7
  341. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  342. package/src/tests/config-refs.test.ts +66 -0
  343. package/src/tests/context-key.test.ts +51 -0
  344. package/src/tests/cors-allowlist.test.ts +25 -0
  345. package/src/tests/create-page-tool.test.ts +18 -0
  346. package/src/tests/credential-check.test.ts +139 -0
  347. package/src/tests/credentials.test.ts +21 -0
  348. package/src/tests/db-runtime.test.ts +61 -0
  349. package/src/tests/db-task-read-contract.test.ts +20 -0
  350. package/src/tests/db-task-write-contract.test.ts +10 -0
  351. package/src/tests/deferred-task-wake.test.ts +52 -4
  352. package/src/tests/docs-index-footprint.test.js +3 -3
  353. package/src/tests/dsh-adapter.test.ts +1 -1
  354. package/src/tests/enabled-capabilities.test.ts +20 -0
  355. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  356. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  357. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  358. package/src/tests/explicit-model-validation.test.ts +105 -1
  359. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  360. package/src/tests/extensions-post-bridge.test.ts +51 -0
  361. package/src/tests/fetch-resolved-env.test.ts +128 -0
  362. package/src/tests/fixtures/azure-boards/workitem.commented.json +89 -0
  363. package/src/tests/fixtures/azure-boards/workitem.created.json +81 -0
  364. package/src/tests/fixtures/azure-boards/workitem.deleted.json +70 -0
  365. package/src/tests/fixtures/azure-boards/workitem.restored.json +82 -0
  366. package/src/tests/fixtures/azure-boards/workitem.updated.json +130 -0
  367. package/src/tests/fixtures/catalog-feedback-definition.json.txt +860 -0
  368. package/src/tests/fixtures/catalog-inputs-definition.json.txt +910 -0
  369. package/src/tests/fixtures/catalog-table-definition.json.txt +468 -0
  370. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  371. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  372. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  373. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  374. package/src/tests/fixtures/runner-identity-refresh.ts +3 -0
  375. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  376. package/src/tests/github-handlers.test.ts +35 -0
  377. package/src/tests/harness-provider-resolution.test.ts +12 -0
  378. package/src/tests/heartbeat-checklist.test.ts +3 -2
  379. package/src/tests/hook-runtime-close.test.ts +0 -2
  380. package/src/tests/http-api-integration.test.ts +0 -25
  381. package/src/tests/migration-046-budgets.test.ts +17 -16
  382. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  383. package/src/tests/model-tier-resolution.test.ts +93 -0
  384. package/src/tests/models-catalog.test.ts +42 -1
  385. package/src/tests/node-env-runtime.test.ts +98 -0
  386. package/src/tests/openai-compatible-providers.test.ts +134 -0
  387. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  388. package/src/tests/opencode-adapter.test.ts +348 -3
  389. package/src/tests/opencode-billing.test.ts +28 -0
  390. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  391. package/src/tests/opencode-shell-env.test.ts +145 -0
  392. package/src/tests/openrouter-base-url.test.ts +101 -151
  393. package/src/tests/page-proxy.test.ts +1 -1
  394. package/src/tests/pages-browser-sdk.test.ts +76 -0
  395. package/src/tests/pages-feedback.test.ts +1 -1
  396. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  397. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  398. package/src/tests/pi-mono-adapter.test.ts +385 -5
  399. package/src/tests/pi-shell-env.test.ts +170 -0
  400. package/src/tests/prompt-template-remaining.test.ts +35 -0
  401. package/src/tests/rbac-engine.test.ts +11 -3
  402. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  403. package/src/tests/runner-identity-refresh.test.ts +3 -0
  404. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  405. package/src/tests/script-connections-sql.test.ts +675 -0
  406. package/src/tests/script-connections.test.ts +7 -1
  407. package/src/tests/scripts-http.test.ts +201 -1
  408. package/src/tests/scripts-only-gating.test.ts +2 -3
  409. package/src/tests/scripts-runtime.test.ts +58 -40
  410. package/src/tests/secret-scrubber.test.ts +86 -0
  411. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  412. package/src/tests/seed-skills-retire.test.ts +182 -0
  413. package/src/tests/send-task-requester-gate.test.ts +58 -0
  414. package/src/tests/session-cost-recompute-unit.test.ts +94 -0
  415. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  416. package/src/tests/slack-channel-join.test.ts +4 -1
  417. package/src/tests/slack-external-channel-config.test.ts +65 -0
  418. package/src/tests/slack-external-channel-egress.test.ts +237 -0
  419. package/src/tests/slack-external-channel-guard.test.ts +280 -0
  420. package/src/tests/slack-external-channel-tools.test.ts +173 -0
  421. package/src/tests/slack-external-channel.test.ts +370 -0
  422. package/src/tests/slack-render-v2.test.ts +86 -10
  423. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  424. package/src/tests/spec-base-url.test.ts +16 -1
  425. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  426. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  427. package/src/tests/swarm-diff.test.ts +1 -1
  428. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  429. package/src/tests/task-session-prompts.test.ts +132 -0
  430. package/src/tests/task-tool-manifest.test.ts +14 -0
  431. package/src/tests/task-tools-ctx.test.ts +2 -0
  432. package/src/tests/tool-annotations.test.ts +6 -6
  433. package/src/tests/ui-logs-parser.test.ts +43 -0
  434. package/src/tests/used-by-route.test.ts +6 -0
  435. package/src/tests/vendored-openapi.test.ts +16 -1
  436. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  437. package/src/tests/workflow-swarm-script.test.ts +38 -0
  438. package/src/tests/workflow-wait-filter.test.ts +5 -3
  439. package/src/tools/chat-access.ts +41 -0
  440. package/src/tools/chat-open-dm.ts +59 -0
  441. package/src/tools/chat-post.ts +74 -0
  442. package/src/tools/chat-read-thread.ts +100 -0
  443. package/src/tools/chat-reply.ts +75 -0
  444. package/src/tools/create-page.ts +3 -13
  445. package/src/tools/defer-task.ts +17 -0
  446. package/src/tools/model-catalog/index.ts +2 -1
  447. package/src/tools/register-chat-channel.ts +139 -0
  448. package/src/tools/send-task.ts +24 -0
  449. package/src/tools/skills/skill-get.ts +17 -9
  450. package/src/tools/slack-post.ts +6 -0
  451. package/src/tools/slack-read.ts +8 -0
  452. package/src/tools/slack-reply.ts +6 -0
  453. package/src/tools/slack-start-thread.ts +6 -0
  454. package/src/tools/slack-update.ts +6 -0
  455. package/src/tools/slack-upload-file.ts +6 -0
  456. package/src/tools/swarm-config/get-config.ts +2 -1
  457. package/src/tools/swarm-config/list-config.ts +2 -1
  458. package/src/tools/swarm-config/set-config.ts +16 -3
  459. package/src/tools/tool-config.ts +8 -6
  460. package/src/types.ts +12 -2
  461. package/src/utils/config-env-export.ts +74 -0
  462. package/src/utils/credentials.test.ts +92 -0
  463. package/src/utils/credentials.ts +52 -4
  464. package/src/utils/harness-provider.ts +15 -6
  465. package/src/utils/node-env.ts +24 -0
  466. package/src/utils/runtime-model-catalog.ts +11 -1
  467. package/src/utils/secret-scrubber.ts +71 -2
  468. package/src/utils/task-tool-manifest.ts +19 -2
  469. package/src/workflows/executors/swarm-script.ts +1 -0
  470. package/templates/skills/agent-browser/SKILL.md +1 -1
  471. package/templates/skills/agent-browser/content.md +1 -1
  472. package/templates/skills/apps/SKILL.md +749 -0
  473. package/templates/skills/apps/content.md +60 -22
  474. package/templates/skills/chat-sdk/config.json +14 -0
  475. package/templates/skills/chat-sdk/content.md +84 -0
  476. package/templates/skills/composio-gmail/content.md +7 -0
  477. package/templates/skills/composio-google-docs/content.md +1 -1
  478. package/templates/skills/email-domain-health/config.json +14 -0
  479. package/templates/skills/email-domain-health/content.md +131 -0
  480. package/templates/skills/kv-storage/content.md +2 -2
  481. package/templates/skills/pages/content.md +8 -10
  482. package/templates/skills/qa-loom/config.json +14 -0
  483. package/templates/skills/qa-loom/content.md +187 -0
  484. package/templates/skills/qa-loom/files/build-loom.mjs +221 -0
  485. package/templates/skills/qa-loom/files/run-qa.sh +57 -0
  486. package/templates/skills/slack-interaction/content.md +4 -0
  487. package/templates/skills/swarm-extensions/content.md +2 -0
  488. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  489. package/templates/skills/swarm-scripts/config.json +1 -1
  490. package/templates/skills/swarm-scripts/content.md +4 -2
  491. package/templates/skills/workflow-iterate/content.md +38 -0
  492. package/dist/artifact-eczsknc3.js +0 -3843
  493. package/dist/cli-9xsmdpdt.js +0 -56377
  494. package/dist/cli-bd957dgb.js +0 -153
  495. package/dist/cli-q51yprfq.js +0 -1104
  496. package/dist/cli-t1ze64h3.js +0 -811
  497. package/dist/index-9ch1n761.js +0 -1102
  498. package/src/artifact-sdk/index.ts +0 -2
  499. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  500. package/src/artifact-sdk/port.ts +0 -12
  501. package/src/artifact-sdk/server.ts +0 -183
  502. package/src/artifact-sdk/tunnel.ts +0 -19
  503. package/src/commands/artifact.ts +0 -249
  504. package/src/http/ecosystem.ts +0 -77
  505. package/src/tests/artifact-commands.test.ts +0 -92
  506. package/src/tests/artifact-sdk.test.ts +0 -793
  507. package/src/tests/register-service-security.test.ts +0 -194
  508. package/src/tools/list-services.ts +0 -107
  509. package/src/tools/register-service.ts +0 -177
  510. package/src/tools/unregister-service.ts +0 -73
  511. package/src/tools/update-service-status.ts +0 -96
  512. package/templates/skills/artifacts/config.json +0 -14
  513. package/templates/skills/artifacts/content.md +0 -344
  514. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  515. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  516. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  517. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  518. package/dist/{azure-openai-responses-ap1gwxgr.js → azure-openai-responses-ygfreq4t.js} +5 -5
  519. package/dist/{cli-5rqrj7q0.js → cli-pw7ebjdt.js} +0 -0
  520. package/dist/{openai-codex-responses-33qhkkdy.js → openai-codex-responses-3bk0grnr.js} +4 -4
  521. package/dist/{openai-completions-s88xm3ns.js → openai-completions-5d4jpakc.js} +9 -9
  522. package/dist/{openai-responses-7xd2f2e2.js → openai-responses-krb51f59.js} +5 -5
  523. package/dist/{pi-messages-xszk613n.js → pi-messages-x9gzynm1.js} +3 -3
  524. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
  525. /package/src/{artifact-sdk → pages}/feedback-overlay.ts +0 -0
@@ -1,344 +0,0 @@
1
- # Artifacts
2
-
3
- An artifact is any output that should outlive the session — a report,
4
- screenshot, recording, log, data export, dashboard. There are two things you
5
- can do with one, and this skill covers both:
6
-
7
- - **Store it** — write it to agent-fs or the shared workspace so humans and
8
- other agents can find it later. This is the common case.
9
- - **Serve it** — run a real web server behind a public, auth-protected URL so a
10
- human can *interact* with it (custom routes, form posts, live data).
11
-
12
- | You need… | Use |
13
- |---|---|
14
- | A file, report, screenshot, or export someone will read later | **Store** (agent-fs) |
15
- | A file another agent needs during *this* session | **Store** (`/workspace/shared/`) |
16
- | A static HTML/JSON report shared by URL | The **`pages`** skill — cheaper, no process to babysit |
17
- | Custom routes, websockets, file uploads, per-request computation | **Serve** (below) |
18
-
19
- Rule of thumb: if the content is a *snapshot*, store it or make a page. If it's
20
- a *running program*, serve it.
21
-
22
- ---
23
-
24
- # Part 1 — Storing artifacts
25
-
26
- Two stores: **agent-fs** (structured, searchable, shareable, survives restarts)
27
- and the **shared workspace filesystem** (`/workspace/shared/`, fast, same-session).
28
-
29
- ## When to create one
30
-
31
- - Your task produces a deliverable humans should review.
32
- - Another agent or future session needs to pick up where you left off.
33
- - You want to attach evidence to a PR, Linear ticket, or Slack message.
34
- - The output is too large for `store-progress.output`.
35
-
36
- ## agent-fs (preferred for anything human-shareable)
37
-
38
- ```bash
39
- # Write to your personal drive
40
- agent-fs write thoughts/research/2026-05-28-topic.md --content "..." -m "description"
41
-
42
- # Write to the shared drive (humans + other agents can see it)
43
- agent-fs --org <org-id> write \
44
- thoughts/<agent-id>/research/2026-05-28-topic.md \
45
- --content "..." -m "research findings"
46
- ```
47
-
48
- Your org and drive context is already configured — you only need `--org` when
49
- writing somewhere other than your default. Read the id from
50
- `agent-fs stat <path> --json` rather than hardcoding one you saw in an example.
51
-
52
- Always verify the write landed — agent-fs writes can fail silently with an
53
- empty payload:
54
-
55
- ```bash
56
- agent-fs stat <path> --json | jq '.size'
57
- # If size < 200 bytes on a non-trivial artifact, the write FAILED — re-do it.
58
- ```
59
-
60
- ### Sharing agent-fs files with humans
61
-
62
- The deployment configures the live viewer host through `AGENT_FS_LIVE_URL`; the
63
- documented fallback is `https://live.agent-fs.dev`. Resolve it in the shell and
64
- combine it with the `orgId` and `driveId` returned by `agent-fs stat`:
65
-
66
- ```bash
67
- FILE_PATH='thoughts/<agent-id>/research/<file>.md'
68
- AGENT_FS_HOST=${AGENT_FS_LIVE_URL:-https://live.agent-fs.dev}
69
- FILE_STAT=$(agent-fs stat "$FILE_PATH" --json)
70
- ORG_ID=$(printf '%s' "$FILE_STAT" | jq -r '.orgId')
71
- DRIVE_ID=$(printf '%s' "$FILE_STAT" | jq -r '.driveId')
72
- SHARE_URL="${AGENT_FS_HOST%/}/file/~/$ORG_ID/$DRIVE_ID/$FILE_PATH"
73
- printf '%s\n' "$SHARE_URL"
74
- ```
75
-
76
- Paste the printed concrete URL into Markdown or a message. Markdown does not
77
- expand environment variables.
78
-
79
- ## Shared filesystem
80
-
81
- For non-text artifacts or files other agents need during the same session:
82
-
83
- - `/workspace/shared/downloads/<agent-id>/` — downloaded files
84
- - `/workspace/shared/misc/<agent-id>/` — other shared files
85
-
86
- It does **not** survive container restarts. Anything that must outlive the
87
- session goes to agent-fs.
88
-
89
- ## Binary artifacts (PNG, MP4)
90
-
91
- `agent-fs write --content` is text-only and mangles binaries. Upload binaries
92
- with `--file` (or piped stdin), which uses the binary-safe raw route
93
- (agent-fs CLI >= 0.7.1):
94
-
95
- ```bash
96
- agent-fs write thoughts/<agent-id>/qa/<topic>-screenshots/login.png \
97
- --file /tmp/login.png -m "login page after fix"
98
- agent-fs stat thoughts/<agent-id>/qa/<topic>-screenshots/login.png --json | jq '.size'
99
- ```
100
-
101
- Capture with `agent-browser screenshot <path>` when it is installed, otherwise
102
- Playwright, ffmpeg, or a system screenshot tool. The agent-fs copy is the
103
- durable original. Where each kind of content goes:
104
-
105
- | Content | Use | Why |
106
- |---|---|---|
107
- | Image or GIF in GitHub | GitHub user attachment (`github-attach` skill) | Permanent, renders inline, short URL |
108
- | Video (mp4) in GitHub | GitHub user attachment, else an `agent-fs share-create` link | GitHub plays it inline. A presigned link downloads it |
109
- | Doc (plan, research, report) | `agent-fs share-create <path> --expires-in 604800` | Preview page, no download |
110
- | Durable pointer | `live.agent-fs.dev` path, in a PR only under `## Swarm provenance` | Share links die after 7 days, this one does not (needs login) |
111
- | Presigned `signed-url` | Image fallback only, with `--inline` | Downloads and expires after 7 days. Never for docs or mp4s |
112
-
113
- ```bash
114
- agent-fs signed-url thoughts/<agent-id>/qa/<topic>-screenshots/login.png --inline --json # fallback only; 24h default, --expires-in up to 7d
115
- ```
116
-
117
- ## Naming conventions
118
-
119
- Name paths predictably by task, date, and artifact type:
120
-
121
- ```
122
- thoughts/<agent-id>/research/YYYY-MM-DD-<topic>.md
123
- thoughts/<agent-id>/plans/YYYY-MM-DD-<topic>.md
124
- thoughts/<agent-id>/qa/<topic>-screenshots/<filename>.png
125
- misc/<agent-id>/<task-id>-<description>.ext
126
- ```
127
-
128
- ## Attaching artifacts
129
-
130
- - **PR body** — embed images and mp4s as GitHub user attachments
131
- (`![caption](https://github.com/user-attachments/assets/<uuid>)`), and link docs
132
- with `share-create`. Never embed a `share-create` link as an image: it is an
133
- HTML preview page. Swarm task links and durable agent-fs paths go only under
134
- `## Swarm provenance`.
135
- - **Slack** — link the agent-fs URL (team members only, the live viewer needs a login). Use a `share-create` link (up to 7 days) for anyone else.
136
- - **`store-progress`** — use the `attachments` field with `kind: "agent-fs"` and the path.
137
- - **Linear comments** — paste the live URL in the comment body.
138
-
139
- ## What NOT to store
140
-
141
- - Secrets, API keys, OAuth tokens
142
- - Raw customer data without approval
143
- - Oversized files without approval (check size before uploading)
144
- - Ephemeral progress notes — those go in `store-progress.progress`
145
-
146
- ## Trade-offs
147
-
148
- **agent-fs vs shared filesystem** — agent-fs is persistent, versioned, and
149
- searchable across sessions. The shared filesystem is faster for same-session
150
- handoffs but doesn't survive container restarts. Use agent-fs for anything that
151
- needs to outlive the current session or be reviewed by a human.
152
-
153
- ---
154
-
155
- # Part 2 — Serving interactive web content
156
-
157
- Serve a directory or a Hono app to a public, auth-protected URL via
158
- localtunnel. Use this when a static page won't do: custom routes, form posts,
159
- uploads, per-request computation.
160
-
161
- The CLI is a subcommand of `agent-swarm`. Always invoke it as
162
- **`agent-swarm artifact <subcommand>`** — there is no top-level `artifact`
163
- binary.
164
-
165
- ## Quick start
166
-
167
- ### Static content
168
-
169
- ```bash
170
- # Create your content in a persisted directory
171
- mkdir -p /workspace/personal/artifacts/my-report
172
- echo '<h1>My Report</h1>' > /workspace/personal/artifacts/my-report/index.html
173
-
174
- # Serve it (auto-assigns a free port, creates tunnel, registers in service registry)
175
- agent-swarm artifact serve /workspace/personal/artifacts/my-report --name my-report
176
- # -> Copy the deployment URL printed by the command; it is authoritative.
177
- ```
178
-
179
- ### Programmatic (custom Hono server)
180
-
181
- ```typescript
182
- import { createArtifactServer } from '../artifact-sdk';
183
- import { Hono } from 'hono';
184
-
185
- const app = new Hono();
186
- app.get('/', (c) => c.html('<h1>Dashboard</h1>'));
187
-
188
- const server = createArtifactServer({ name: 'dashboard', app });
189
- await server.start();
190
- console.log(`Live at: ${server.url}`);
191
- ```
192
-
193
- You can also run `agent-swarm artifact serve ./server.ts --name dashboard` if
194
- `server.ts` exports a Hono instance as its default export.
195
-
196
- See the bundled `examples/` directory for complete working examples
197
- (`static-report.sh`, `hono-dashboard.ts`, `approval-flow.ts`,
198
- `multi-artifact.ts`).
199
-
200
- ## CLI commands
201
-
202
- | Command | Description |
203
- |---|---|
204
- | `agent-swarm artifact serve <path> --name <name> [--port <port>] [--no-auth] [--subdomain <sub>]` | Start serving content. `<path>` is a directory (static) or a `.ts`/`.js` file exporting a default Hono app. |
205
- | `agent-swarm artifact list` | List active artifacts (name, agent, port, URL, status) from the service registry. |
206
- | `agent-swarm artifact stop <name>` | Stop an artifact: deletes the matching PM2 process and unregisters it from the service registry. See "Known limitation" below. |
207
-
208
- Flags accepted by `serve`:
209
-
210
- - `--name <name>` — defaults to the basename of `<path>`. Used for the subdomain and PM2 process name.
211
- - `--port <port>` — pin to a specific port. Default: auto-assigned ephemeral port.
212
- - `--no-auth` — disable HTTP Basic auth on the tunnel (DANGEROUS — anyone with the URL can access).
213
- - `--subdomain <sub>` — override the default `${agentId}-${name}` subdomain.
214
-
215
- ## Auth & URL pattern
216
-
217
- Tunnels are protected by **HTTP Basic auth** by default:
218
-
219
- - **Username:** `hi` (hardcoded MVP default in `src/artifact-sdk/tunnel.ts`)
220
- - **Password:** the agent's `API_KEY`
221
-
222
- > **Never put the API key in the URL.** The Basic-auth password *is* the swarm
223
- > `API_KEY` — it authenticates against the whole swarm API, not just this
224
- > artifact. A `https://user:key@host` URL leaks that credential into shell
225
- > history, browser history, proxy and tunnel access logs, referrer headers, and
226
- > anything you paste it into. Treat a credential-bearing URL as a leaked key.
227
-
228
- The installed `@desplega.ai/localtunnel` package currently defaults to
229
- `lt.desplega.ai`, but deployments may configure another tunnel host. The URL
230
- printed by `agent-swarm artifact serve` (or exposed as `server.url`) is
231
- authoritative. Save that plain URL as `ARTIFACT_URL`; a browser will prompt for
232
- the credentials.
233
-
234
- For scripts and `curl`, pass the credential out-of-band instead of inlining it,
235
- and read it from the environment so it never appears as a literal:
236
-
237
- ```bash
238
- # -u keeps the credential out of the URL; --netrc-file keeps it out of argv too.
239
- curl -u "hi:$API_KEY" "$ARTIFACT_URL"
240
-
241
- # Better for anything long-lived or logged — argv is visible to other processes:
242
- ARTIFACT_HOST=${ARTIFACT_URL#*://}
243
- ARTIFACT_HOST=${ARTIFACT_HOST%%/*}
244
- printf 'machine %s login hi password %s\n' \
245
- "$ARTIFACT_HOST" "$API_KEY" > /tmp/artifact-netrc
246
- chmod 600 /tmp/artifact-netrc
247
- curl --netrc-file /tmp/artifact-netrc "$ARTIFACT_URL"
248
- ```
249
-
250
- Do not echo the assembled command, and do not paste the credential into a task
251
- report, Slack message, PR body, or page — those are all persisted.
252
-
253
- Use `--no-auth` only for genuinely public content. Anyone who learns the
254
- subdomain can read it.
255
-
256
- ## Running it as a daemon
257
-
258
- `agent-swarm artifact serve` blocks on a never-resolving promise to stay alive —
259
- you cannot inline it in a script that needs to do other work. Pick one:
260
-
261
- ### Option A — `nohup` (quick, throwaway)
262
-
263
- ```bash
264
- mkdir -p /workspace/personal/logs
265
- nohup agent-swarm artifact serve /workspace/personal/artifacts/my-report \
266
- --name my-report \
267
- > /workspace/personal/logs/my-report.out 2>&1 &
268
- echo $! > /workspace/personal/logs/my-report.pid
269
-
270
- # Later, kill it manually:
271
- kill "$(cat /workspace/personal/logs/my-report.pid)"
272
- ```
273
-
274
- ### Option B — PM2 (recommended for anything you'll come back to)
275
-
276
- PM2 gives you auto-restart on crash, a process name, log management, and —
277
- crucially — lets `agent-swarm artifact stop <name>` actually kill it.
278
-
279
- ```bash
280
- pm2 start agent-swarm \
281
- --name artifact-my-report \
282
- -- artifact serve /workspace/personal/artifacts/my-report --name my-report
283
-
284
- # Stop it cleanly later:
285
- agent-swarm artifact stop my-report
286
- ```
287
-
288
- The PM2 process name **must** be `artifact-<name>` (matching `--name`) — that's
289
- exactly what `artifact stop` looks for.
290
-
291
- ### Known limitation — `artifact stop` only kills PM2-started processes
292
-
293
- `agent-swarm artifact stop <name>` runs `pm2 delete artifact-<name>` and then
294
- unregisters the entry from the service registry. If you started the artifact
295
- with `nohup` (or `&`, or any non-PM2 launcher), `pm2 delete` silently fails and
296
- the server keeps running and serving — even though the command prints
297
- `Artifact '<name>' stopped.` Until that's fixed:
298
-
299
- - Use **PM2** if you want `artifact stop` to do its job.
300
- - For `nohup`/foreground processes, kill the PID yourself
301
- (`kill <pid>` or `pkill -f 'artifact serve.*<name>'`) **and then** run
302
- `agent-swarm artifact stop <name>` to clear the registry row.
303
-
304
- ## Multiple artifacts
305
-
306
- Each artifact gets its own port (auto-assigned) and subdomain
307
- (`<agentId>-<name>`). You can run several simultaneously — see
308
- `examples/multi-artifact.ts`.
309
-
310
- ## Browser SDK
311
-
312
- Served HTML gets the same injected browser SDK that pages get. Load it and use
313
- the ready-made singleton:
314
-
315
- ```html
316
- <script src="/@swarm/sdk.js"></script>
317
- <script>
318
- // `window.swarmSdk` is constructed for you — no `new SwarmSDK()` needed.
319
- const tasks = await window.swarmSdk.tasks.list({ status: 'in_progress' });
320
- const agents = await window.swarmSdk.agents.list();
321
- </script>
322
- ```
323
-
324
- The SDK is **domain-grouped** (`swarmSdk.tasks`, `.agents`, `.events`,
325
- `.memory`, `.repos`, `.schedules`, `.approvalRequests`, `.assets`), each domain
326
- mapping 1:1 onto the public REST API. The **`pages`** skill documents the full
327
- method surface — it's the same object, so don't duplicate it here.
328
-
329
- Calls route through the `/@swarm/api/*` proxy, which injects auth server-side.
330
- Browser code never sees the API key.
331
-
332
- ## Storage
333
-
334
- Always store served content in persisted directories — the working dir is wiped
335
- between sessions:
336
-
337
- - `/workspace/personal/artifacts/` — per-agent, persists across sessions (default)
338
- - `/workspace/shared/artifacts/` — shared across the swarm
339
-
340
- ## See also
341
-
342
- - The **`pages`** skill — DB-backed static HTML/JSON, no process to run. Prefer
343
- it whenever the content is a snapshot.
344
- - The **`kv-storage`** skill — for the small state a served page needs.
@@ -1,34 +0,0 @@
1
- import { createArtifactServer } from "../../src/artifact-sdk";
2
- import { Hono } from "hono";
3
-
4
- const app = new Hono();
5
- app.get("/", (c) =>
6
- c.html(`
7
- <!DOCTYPE html>
8
- <html>
9
- <head><title>Approval Required</title></head>
10
- <body>
11
- <h1>PR #42 — Review Required</h1>
12
- <p>Agent wants to merge this PR. Please review.</p>
13
- <button id="approve">Approve</button>
14
- <button id="reject">Reject</button>
15
- <script src="/@swarm/sdk.js"></script>
16
- <script>
17
- const swarm = new SwarmSDK();
18
- document.getElementById('approve').onclick = async () => {
19
- await swarm.createTask({ task: 'Merge PR #42 — human approved' });
20
- document.body.innerHTML = '<h1>Approved! Task created.</h1>';
21
- };
22
- document.getElementById('reject').onclick = async () => {
23
- await swarm.createTask({ task: 'PR #42 rejected by human — needs changes' });
24
- document.body.innerHTML = '<h1>Rejected. Agent notified.</h1>';
25
- };
26
- </script>
27
- </body>
28
- </html>
29
- `),
30
- );
31
-
32
- const server = createArtifactServer({ name: "approval-pr-42", app });
33
- await server.start();
34
- console.log(`Approval artifact at: ${server.url}`);
@@ -1,31 +0,0 @@
1
- import { createArtifactServer } from "../../src/artifact-sdk";
2
- import { Hono } from "hono";
3
-
4
- const app = new Hono();
5
-
6
- app.get("/", (c) =>
7
- c.html(`
8
- <!DOCTYPE html>
9
- <html>
10
- <head><title>Dashboard</title></head>
11
- <body>
12
- <h1>Agent Dashboard</h1>
13
- <div id="agents"></div>
14
- <script src="/@swarm/sdk.js"></script>
15
- <script>
16
- const swarm = new SwarmSDK();
17
- swarm.getSwarm().then(agents => {
18
- document.getElementById('agents').innerHTML =
19
- '<ul>' + agents.map(a => '<li>' + a.name + ' (' + a.status + ')</li>').join('') + '</ul>';
20
- });
21
- </script>
22
- </body>
23
- </html>
24
- `),
25
- );
26
-
27
- app.get("/api/status", (c) => c.json({ status: "ok", timestamp: Date.now() }));
28
-
29
- const server = createArtifactServer({ name: "dashboard", app });
30
- await server.start();
31
- console.log(`Dashboard live at: ${server.url}`);
@@ -1,20 +0,0 @@
1
- import { createArtifactServer } from "../../src/artifact-sdk";
2
- import { Hono } from "hono";
3
-
4
- // Artifact 1: Status page
5
- const statusApp = new Hono();
6
- statusApp.get("/", (c) => c.html("<h1>Status: All systems operational</h1>"));
7
-
8
- // Artifact 2: Data viewer
9
- const dataApp = new Hono();
10
- dataApp.get("/", (c) => c.json({ items: [1, 2, 3], generated: new Date().toISOString() }));
11
-
12
- const status = createArtifactServer({ name: "status", app: statusApp });
13
- const data = createArtifactServer({ name: "data", app: dataApp });
14
-
15
- await status.start();
16
- await data.start();
17
-
18
- console.log(`Status page: ${status.url}`);
19
- console.log(`Data viewer: ${data.url}`);
20
- console.log(`Both artifacts running on different ports (${status.port}, ${data.port})`);
@@ -1,17 +0,0 @@
1
- #!/bin/bash
2
- # Serve a static HTML report as an artifact
3
- ARTIFACT_DIR="/workspace/personal/artifacts/my-report"
4
- mkdir -p "$ARTIFACT_DIR"
5
-
6
- cat > "$ARTIFACT_DIR/index.html" << 'HTML'
7
- <!DOCTYPE html>
8
- <html>
9
- <head><title>Agent Report</title></head>
10
- <body>
11
- <h1>Analysis Report</h1>
12
- <p>Generated by agent</p>
13
- </body>
14
- </html>
15
- HTML
16
-
17
- agent-swarm artifact serve "$ARTIFACT_DIR" --name "my-report"
@@ -6,16 +6,16 @@ import {
6
6
  import {
7
7
  clampOpenAIPromptCacheKey
8
8
  } from "./cli-mrptpp86.js";
9
+ import"./cli-5m9j2spm.js";
9
10
  import {
10
11
  AzureOpenAI
11
12
  } from "./cli-7cxw8b60.js";
12
- import {
13
- retryProviderRequest
14
- } from "./cli-zy39d433.js";
15
- import"./cli-5m9j2spm.js";
16
13
  import {
17
14
  getPiUserAgent
18
15
  } from "./cli-et1bbwqf.js";
16
+ import {
17
+ retryProviderRequest
18
+ } from "./cli-zy39d433.js";
19
19
  import {
20
20
  resolveAzureConfig,
21
21
  resolveDeploymentName
@@ -33,8 +33,8 @@ import"./cli-y2apkfe2.js";
33
33
  import {
34
34
  headersToRecord
35
35
  } from "./cli-7kyk9jr3.js";
36
- import"./cli-btbzvq95.js";
37
36
  import"./cli-1m2e086m.js";
37
+ import"./cli-btbzvq95.js";
38
38
  import {
39
39
  clampThinkingLevel,
40
40
  getDeclaredTools,
File without changes
@@ -1,3 +1,6 @@
1
+ import {
2
+ combineAbortSignals
3
+ } from "./cli-z1kd834t.js";
1
4
  import {
2
5
  convertResponsesMessages,
3
6
  convertResponsesTools,
@@ -6,9 +9,6 @@ import {
6
9
  import {
7
10
  clampOpenAIPromptCacheKey
8
11
  } from "./cli-mrptpp86.js";
9
- import {
10
- combineAbortSignals
11
- } from "./cli-z1kd834t.js";
12
12
  import"./cli-5m9j2spm.js";
13
13
  import {
14
14
  getPiUserAgent
@@ -32,8 +32,8 @@ import"./cli-y2apkfe2.js";
32
32
  import {
33
33
  headersToRecord
34
34
  } from "./cli-7kyk9jr3.js";
35
- import"./cli-btbzvq95.js";
36
35
  import"./cli-1m2e086m.js";
36
+ import"./cli-btbzvq95.js";
37
37
  import {
38
38
  clampThinkingLevel,
39
39
  getDeclaredTools,
@@ -5,18 +5,18 @@ import {
5
5
  import {
6
6
  clampOpenAIPromptCacheKey
7
7
  } from "./cli-mrptpp86.js";
8
- import {
9
- OpenAI
10
- } from "./cli-7cxw8b60.js";
11
- import {
12
- retryProviderRequest
13
- } from "./cli-zy39d433.js";
14
8
  import {
15
9
  shortHash
16
10
  } from "./cli-5m9j2spm.js";
11
+ import {
12
+ OpenAI
13
+ } from "./cli-7cxw8b60.js";
17
14
  import {
18
15
  getPiUserAgent
19
16
  } from "./cli-et1bbwqf.js";
17
+ import {
18
+ retryProviderRequest
19
+ } from "./cli-zy39d433.js";
20
20
  import {
21
21
  formatProviderError,
22
22
  normalizeProviderError
@@ -40,12 +40,12 @@ import {
40
40
  import {
41
41
  headersToRecord
42
42
  } from "./cli-7kyk9jr3.js";
43
- import {
44
- getProviderEnvValue
45
- } from "./cli-btbzvq95.js";
46
43
  import {
47
44
  parseStreamingJson
48
45
  } from "./cli-1m2e086m.js";
46
+ import {
47
+ getProviderEnvValue
48
+ } from "./cli-btbzvq95.js";
49
49
  import {
50
50
  calculateCost,
51
51
  clampThinkingLevel,
@@ -10,16 +10,16 @@ import {
10
10
  import {
11
11
  clampOpenAIPromptCacheKey
12
12
  } from "./cli-mrptpp86.js";
13
+ import"./cli-5m9j2spm.js";
13
14
  import {
14
15
  OpenAI
15
16
  } from "./cli-7cxw8b60.js";
16
- import {
17
- retryProviderRequest
18
- } from "./cli-zy39d433.js";
19
- import"./cli-5m9j2spm.js";
20
17
  import {
21
18
  getPiUserAgent
22
19
  } from "./cli-et1bbwqf.js";
20
+ import {
21
+ retryProviderRequest
22
+ } from "./cli-zy39d433.js";
23
23
  import {
24
24
  formatProviderError,
25
25
  normalizeProviderError
@@ -33,10 +33,10 @@ import"./cli-y2apkfe2.js";
33
33
  import {
34
34
  headersToRecord
35
35
  } from "./cli-7kyk9jr3.js";
36
+ import"./cli-1m2e086m.js";
36
37
  import {
37
38
  getProviderEnvValue
38
39
  } from "./cli-btbzvq95.js";
39
- import"./cli-1m2e086m.js";
40
40
  import {
41
41
  clampThinkingLevel,
42
42
  getDeclaredTools,
@@ -2,12 +2,12 @@ import {
2
2
  headersToRecord,
3
3
  providerHeadersToRecord
4
4
  } from "./cli-7kyk9jr3.js";
5
- import {
6
- getProviderEnvValue
7
- } from "./cli-btbzvq95.js";
8
5
  import {
9
6
  parseStreamingJson
10
7
  } from "./cli-1m2e086m.js";
8
+ import {
9
+ getProviderEnvValue
10
+ } from "./cli-btbzvq95.js";
11
11
  import {
12
12
  AssistantMessageEventStream,
13
13
  appendAssistantMessageDiagnostic,
File without changes
File without changes