@desplega.ai/agent-swarm 1.173.0 → 2.1.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 (511) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-ccm9xrep.js → acp-adapter-kr4abrsk.js} +17 -16
  3. package/dist/{actions-sgeyv08k.js → actions-eh4g6w2r.js} +39 -34
  4. package/dist/{amp-adapter-gpxp3kc9.js → amp-adapter-7h7wdt8q.js} +8 -7
  5. package/dist/{app-km9qnv2f.js → app-7k8s9w5p.js} +18 -14
  6. package/dist/{assistant-5r8tcvvd.js → assistant-wswt2y7p.js} +40 -35
  7. package/dist/{boot-reembed-16rv9843.js → boot-reembed-9apm9qw6.js} +10 -9
  8. package/dist/{boot-reembed-swwzdgd7.js → boot-reembed-whzbdthj.js} +10 -9
  9. package/dist/{boot-scrub-sweep-zkr6vkqb.js → boot-scrub-sweep-ndzmvmgt.js} +11 -10
  10. package/dist/{boot-seeds-d8sp49t2.js → boot-seeds-e9sta0yt.js} +16 -13
  11. package/dist/{claude-adapter-yzzzh8jp.js → claude-adapter-4mqd3r6r.js} +19 -18
  12. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-9wswb52m.js} +7 -5
  13. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-tpe1effx.js} +6 -4
  14. package/dist/{claude-sdk-session-4whxere4.js → claude-sdk-session-q49ghmh9.js} +12402 -11850
  15. package/dist/{cli-ne7smj1b.js → cli-01xvj1rq.js} +10 -10
  16. package/dist/{cli-nwrdx840.js → cli-035vekcw.js} +3 -3
  17. package/dist/{cli-9xf7fdtp.js → cli-0pd8hzhc.js} +29 -6
  18. package/dist/{cli-tmhsxhb8.js → cli-0veb92a3.js} +28 -6
  19. package/dist/{cli-c3rk1v0x.js → cli-10jesr25.js} +3 -3
  20. package/dist/{cli-6thk4jz3.js → cli-1y7yywmj.js} +6 -6
  21. package/dist/{cli-6r2f7edk.js → cli-20krdhz5.js} +47 -19
  22. package/dist/{cli-rfs4vddv.js → cli-29rja109.js} +39 -20
  23. package/dist/cli-2m1ktfzz.js +17795 -0
  24. package/dist/{cli-na2pxe4f.js → cli-2pwa0q4d.js} +15 -4
  25. package/dist/{cli-7a93cv8c.js → cli-4mengw46.js} +441 -43
  26. package/dist/{cli-94b48jhk.js → cli-5twdke5x.js} +16 -14
  27. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  28. package/dist/cli-6cvfxs8r.js +47 -0
  29. package/dist/{cli-w1apjecb.js → cli-711vwbxn.js} +2 -2
  30. package/dist/{cli-r4fqfpwf.js → cli-78vv7446.js} +50 -27
  31. package/dist/{cli-srqq3gc5.js → cli-7n6s5man.js} +5 -5
  32. package/dist/{cli-m89t9jdf.js → cli-7x0g4sn1.js} +15416 -16024
  33. package/dist/{cli-2bw3w47j.js → cli-8wwxw8a3.js} +1 -1
  34. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  35. package/dist/{cli-ywm1azg9.js → cli-9jzdj90z.js} +8 -4
  36. package/dist/cli-9traj3dn.js +638 -0
  37. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  38. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  39. package/dist/cli-cvv9k0hh.js +10143 -0
  40. package/dist/{cli-anzdk0z4.js → cli-d9286m9h.js} +2 -2
  41. package/dist/cli-e3g5mbkz.js +776 -0
  42. package/dist/cli-f527ce74.js +781 -0
  43. package/dist/{cli-gmdajfw5.js → cli-gxzkg1de.js} +5020 -1729
  44. package/dist/{cli-451ks6aw.js → cli-h1arqn31.js} +1 -1
  45. package/dist/cli-hjwmhcg1.js +10622 -0
  46. package/dist/{cli-jpc4r224.js → cli-hqr88ew6.js} +19 -3
  47. package/dist/{cli-h7k0xtry.js → cli-hvqbtna4.js} +4 -1256
  48. package/dist/{cli-cd0hv9nh.js → cli-j67mh2vg.js} +2 -2
  49. package/dist/cli-jta2eyzc.js +619 -0
  50. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  51. package/dist/cli-kceah1eh.js +92 -0
  52. package/dist/{cli-d603qf86.js → cli-ksphgh48.js} +10 -8
  53. package/dist/{cli-3nxdmjrc.js → cli-mgz4nbgg.js} +4 -4
  54. package/dist/{cli-saqyage0.js → cli-mz5as5ha.js} +179 -27
  55. package/dist/cli-n2wq4j7m.js +6985 -0
  56. package/dist/{cli-ppy4nnnh.js → cli-n8ndw8j7.js} +2 -2
  57. package/dist/{cli-1w0vj3gw.js → cli-naqzr17j.js} +7 -7
  58. package/dist/{cli-0a7mm3zp.js → cli-nm1p8jfr.js} +25 -21
  59. package/dist/{cli-wrh08zjd.js → cli-p3zbc1rw.js} +5 -18
  60. package/dist/{cli-hsem16hb.js → cli-pe05f8yk.js} +29 -6
  61. package/dist/{cli-5wpw4rab.js → cli-qmzsbkvy.js} +5 -5
  62. package/dist/{cli-bv2etw2y.js → cli-qnm4e9e4.js} +99 -590
  63. package/dist/{cli-1x7da0de.js → cli-qqy4q48b.js} +8 -8
  64. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  65. package/dist/{cli-5er5gjbm.js → cli-r35rw5de.js} +15 -15
  66. package/dist/{cli-v3zhnxsb.js → cli-r610p9bs.js} +2 -2
  67. package/dist/{cli-7jykv7ef.js → cli-rc6pf5kv.js} +1 -1
  68. package/dist/{cli-x119kdba.js → cli-rdxm77k3.js} +1 -1
  69. package/dist/cli-rhs9pz33.js +294 -0
  70. package/dist/{cli-0p3enk35.js → cli-s69nfyeh.js} +9 -1
  71. package/dist/{cli-0kxf81jj.js → cli-sawv63e8.js} +2 -2
  72. package/dist/{cli-e3pmyt39.js → cli-sg19gbf0.js} +1 -1
  73. package/dist/{cli-d161g69q.js → cli-shk7r5cs.js} +57 -6
  74. package/dist/{cli-7pz3b7x5.js → cli-sksetb2q.js} +36 -1
  75. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  76. package/dist/{cli-db3m6zdt.js → cli-t02z59f2.js} +1 -1
  77. package/dist/{cli-b07hr3bt.js → cli-txqb9s38.js} +2 -2
  78. package/dist/{cli-s8z6x4b4.js → cli-v7g551te.js} +225 -113
  79. package/dist/{cli-rfz2ve55.js → cli-vgqzp4em.js} +3341 -955
  80. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  81. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  82. package/dist/cli-wfnemr1t.js +86 -0
  83. package/dist/cli-wmgrkscj.js +23254 -0
  84. package/dist/{cli-qm1448f9.js → cli-wms6x9db.js} +8 -8
  85. package/dist/{cli-tadfgd0t.js → cli-x1r545x8.js} +33 -4
  86. package/dist/{cli-xc7p7s3g.js → cli-xczsgshn.js} +6 -6
  87. package/dist/{cli-fmhj1ehj.js → cli-y3167wt1.js} +882 -271
  88. package/dist/{cli-r0byd61h.js → cli-yjmqpxt3.js} +17 -16
  89. package/dist/{cli-81r1wjyv.js → cli-z780ec7c.js} +1 -1
  90. package/dist/{cli-phcqp1b9.js → cli-zm9t2vde.js} +2 -2
  91. package/dist/cli.js +34 -49
  92. package/dist/{codex-adapter-r3dn4fp5.js → codex-adapter-4z16v9n0.js} +15 -14
  93. package/dist/{codex-login-841kv5fk.js → codex-login-pkepy2j1.js} +3 -2
  94. package/dist/{codex-session-runner-fwt793h4.js → codex-session-runner-rvms9y2x.js} +15 -14
  95. package/dist/{commands-z8fq9qna.js → commands-2a9rtyat.js} +11 -10
  96. package/dist/{controller-hq5ggpcp.js → controller-3k3madbn.js} +5 -4
  97. package/dist/{controllers-connect-3mf2btyj.js → controllers-connect-v9yn8zb9.js} +42 -37
  98. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-98gbhyzn.js} +7 -6
  99. package/dist/{db-qfpq4bt7.js → db-eywwsnjw.js} +30 -9
  100. package/dist/{db-yyhqqrbf.js → db-ncypk9np.js} +12 -11
  101. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-zeq8b9gz.js} +3 -2
  102. package/dist/{dispatcher-x0x7qfcq.js → dispatcher-w94kc575.js} +38 -33
  103. package/dist/{docker-f503k9p0.js → docker-b1e4cqab.js} +3 -2
  104. package/dist/{dsh-adapter-34etvb5m.js → dsh-adapter-47ztej36.js} +7 -6
  105. package/dist/{e2b-66xra4az.js → e2b-bbt8ey45.js} +4 -3
  106. package/dist/{e2b-xwhyj8cw.js → e2b-dp804sen.js} +4 -3
  107. package/dist/{event-bus-vjtv82gm.js → event-bus-j2jdg3qb.js} +3 -2
  108. package/dist/{external-channel-h1fjecwe.js → external-channel-zrkg8ar9.js} +11 -10
  109. package/dist/{google-generative-ai-szdxbpqg.js → google-generative-ai-g8db7x0f.js} +4 -2
  110. package/dist/{google-vertex-qzw3p36d.js → google-vertex-r2692q0r.js} +4 -2
  111. package/dist/{grok-adapter-e7mr287e.js → grok-adapter-s9ncp9vy.js} +18 -17
  112. package/dist/{handlers-znb9n7d4.js → handlers-kqftvjgw.js} +41 -36
  113. package/dist/{heartbeat-bm4qkn8d.js → heartbeat-9q96p8v9.js} +43 -38
  114. package/dist/{hook-254r4mza.js → hook-56qe10dp.js} +11 -23
  115. package/dist/{hook-xaa3q80s.js → hook-yy6rw42k.js} +12 -11
  116. package/dist/{http-3dgrgp8y.js → http-r2dnb8f8.js} +2411 -275
  117. package/dist/{index-fx3jqq1e.js → index-3gtmkhc6.js} +38 -33
  118. package/dist/{index-bdsqa799.js → index-3k5hkz7r.js} +43 -38
  119. package/dist/index-52j1aja4.js +3465 -0
  120. package/dist/{index-g2byveez.js → index-5e101240.js} +38 -33
  121. package/dist/{index-2ybk7khy.js → index-5wyfjc2c.js} +845 -683
  122. package/dist/index-9gw58n4k.js +193 -0
  123. package/dist/index-9j87mcm8.js +56305 -0
  124. package/dist/index-bsmcresk.js +79424 -0
  125. package/dist/index-mh85qhec.js +475 -0
  126. package/dist/{index-jd7sejm2.js → index-vxvhxxbn.js} +10 -9
  127. package/dist/index-we27kd31.js +12810 -0
  128. package/dist/{keepalive-6ywhpja1.js → keepalive-psj6j54c.js} +12 -11
  129. package/dist/{lead-cw45n21s.js → lead-hajz4688.js} +61 -56
  130. package/dist/{maintenance-ss1a1ge9.js → maintenance-ps02sb5m.js} +10 -9
  131. package/dist/{node-fkajaq96.js → node-mwb5r697.js} +2 -1
  132. package/dist/{oauth-refresh-sweep-3c6f8vyy.js → oauth-refresh-sweep-0284h93b.js} +11 -10
  133. package/dist/{onboard-8hzdhc1k.js → onboard-rbf6bg01.js} +11 -3
  134. package/dist/{opencode-adapter-qbchbcfz.js → opencode-adapter-13dcatgq.js} +18 -13
  135. package/dist/{otel-impl-e6mnvc4v.js → otel-impl-zvqcbhp7.js} +242 -868
  136. package/dist/{pi-mono-adapter-3c9g9snh.js → pi-mono-adapter-xxy47q4v.js} +244 -106
  137. package/dist/{pricing-refresh-gedkjdw0.js → pricing-refresh-kefx9v3t.js} +12 -11
  138. package/dist/{rbac-roles-dt4vh1yy.js → rbac-roles-3m36rxm2.js} +11 -10
  139. package/dist/{rbac-roles-eszdg6pm.js → rbac-roles-z76xv0hq.js} +12 -11
  140. package/dist/{render-v2-907cy6sa.js → render-v2-wz73bs25.js} +18 -14
  141. package/dist/{resume-42stcaz0.js → resume-k4wzge8w.js} +25 -21
  142. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  143. package/dist/{setup-adbc1c10.js → setup-2fp2pypp.js} +2 -2
  144. package/dist/{virtual-modules-rtmt494q.js → virtual-modules-9gkxqrap.js} +6 -5
  145. package/dist/{work-objects-wpj8ck95.js → work-objects-6k0ywz3m.js} +41 -36
  146. package/dist/{worker-bzdra9rf.js → worker-5v3rxsdh.js} +61 -56
  147. package/dist/{x-qfmygqqv.js → x-4mtdeym1.js} +3 -2
  148. package/openapi.json +1279 -329
  149. package/package.json +15 -15
  150. package/src/agentmail/handlers.ts +21 -11
  151. package/src/apps/definition.ts +16 -0
  152. package/src/azure-devops/api.ts +52 -2
  153. package/src/azure-devops/boards-sync.ts +50 -20
  154. package/src/azure-devops/index.ts +1 -0
  155. package/src/azure-devops/outbound.ts +95 -0
  156. package/src/be/boot-seeds.ts +11 -0
  157. package/src/be/config-refs.ts +60 -0
  158. package/src/be/db/model-profiles.ts +315 -0
  159. package/src/be/db/page-versions.ts +15 -0
  160. package/src/be/db/runtime.ts +35 -8
  161. package/src/be/db/skill-name-resolution.ts +36 -0
  162. package/src/be/db/tasks/read.ts +237 -0
  163. package/src/be/db/tasks/write.ts +7 -0
  164. package/src/be/db.ts +87 -36
  165. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  166. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  167. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  168. package/src/be/migrations/219_relabel_pi_context_compactions.sql +22 -0
  169. package/src/be/migrations/220_model_profiles.sql +137 -0
  170. package/src/be/model-catalog-store.ts +5 -1
  171. package/src/be/model-tier-resolution.ts +155 -10
  172. package/src/be/model-validation.ts +12 -2
  173. package/src/be/models-catalog.ts +26 -1
  174. package/src/be/modelsdev-cache.json +198 -63
  175. package/src/be/modelsdev-cache.ts +9 -1
  176. package/src/be/script-credential-broker.ts +39 -2
  177. package/src/be/scripts/run-saved.ts +1 -0
  178. package/src/be/scripts/typecheck.ts +22 -8
  179. package/src/be/secret-registry.ts +6 -2
  180. package/src/be/seed/runner.ts +13 -1
  181. package/src/be/seed/state-db.ts +5 -0
  182. package/src/be/seed/types.ts +6 -0
  183. package/src/be/seed-model-profiles.ts +41 -0
  184. package/src/be/seed-pricing.ts +19 -2
  185. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +368 -0
  186. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  187. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  188. package/src/be/seed-scripts/index.ts +9 -0
  189. package/src/be/seed-skills/bundled-files.generated.json +0 -18
  190. package/src/be/seed-skills/index.ts +104 -3
  191. package/src/be/swarm-config-guard.ts +53 -0
  192. package/src/cli.tsx +0 -16
  193. package/src/commands/onboard/non-interactive.ts +4 -2
  194. package/src/commands/provider-credentials.ts +52 -6
  195. package/src/commands/runner.ts +193 -71
  196. package/src/e2b/env.ts +5 -0
  197. package/src/extensions/catalog.generated.json +17 -0
  198. package/src/extensions/contract-types.generated.ts +1 -1
  199. package/src/extensions/contract.ts +45 -0
  200. package/src/extensions/dispatcher.ts +7 -0
  201. package/src/extensions/loader.ts +10 -5
  202. package/src/extensions/post-bridge.ts +40 -0
  203. package/src/github/handlers.ts +11 -4
  204. package/src/heartbeat/heartbeat.ts +2 -1
  205. package/src/heartbeat/templates.ts +8 -5
  206. package/src/hooks/hook.ts +0 -26
  207. package/src/http/agents.ts +49 -2
  208. package/src/http/all-routes.ts +1 -1
  209. package/src/http/apps.ts +30 -3
  210. package/src/http/config.ts +62 -19
  211. package/src/http/core.ts +8 -0
  212. package/src/http/index.ts +25 -3
  213. package/src/http/integrations.ts +88 -1
  214. package/src/http/mcp.ts +15 -5
  215. package/src/http/model-profiles.ts +303 -0
  216. package/src/http/page-proxy.ts +2 -4
  217. package/src/http/pages-public.ts +13 -7
  218. package/src/http/pages.ts +3 -13
  219. package/src/http/poll.ts +42 -71
  220. package/src/http/requested-by.ts +54 -0
  221. package/src/http/script-runs.ts +1 -1
  222. package/src/http/scripts.ts +26 -2
  223. package/src/http/stats.ts +1 -30
  224. package/src/http/tasks.ts +79 -5
  225. package/src/http/utils.ts +14 -0
  226. package/src/http/webhooks.ts +160 -3
  227. package/src/http/x.ts +1 -0
  228. package/src/integrations/chat-sdk/adapters.ts +129 -0
  229. package/src/integrations/chat-sdk/attachments.ts +232 -0
  230. package/src/integrations/chat-sdk/background.ts +36 -0
  231. package/src/integrations/chat-sdk/commands.ts +194 -0
  232. package/src/integrations/chat-sdk/config.ts +198 -0
  233. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  234. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  235. package/src/integrations/chat-sdk/handlers.ts +28 -0
  236. package/src/integrations/chat-sdk/inbound.ts +426 -0
  237. package/src/integrations/chat-sdk/limits.ts +48 -0
  238. package/src/integrations/chat-sdk/logger.ts +81 -0
  239. package/src/integrations/chat-sdk/outbound.ts +123 -0
  240. package/src/integrations/chat-sdk/relay.ts +172 -0
  241. package/src/integrations/chat-sdk/router.ts +169 -0
  242. package/src/integrations/chat-sdk/runtime.ts +351 -0
  243. package/src/integrations/chat-sdk/schema.ts +245 -0
  244. package/src/integrations/chat-sdk/state.ts +243 -0
  245. package/src/integrations/chat-sdk/status.ts +244 -0
  246. package/src/integrations/chat-sdk/steering.ts +58 -0
  247. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  248. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  249. package/src/integrations/chat-sdk/templates.ts +16 -0
  250. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  251. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  252. package/src/integrations/chat-sdk/typing.ts +65 -0
  253. package/src/{artifact-sdk → pages}/feedback-overlay.ts +65 -6
  254. package/src/pages/version.ts +4 -5
  255. package/src/prompts/base-prompt.ts +111 -45
  256. package/src/providers/acp-target-catalog.ts +6 -0
  257. package/src/providers/acp-targets.ts +56 -3
  258. package/src/providers/amp-adapter.ts +1 -1
  259. package/src/providers/claude-adapter.ts +1 -1
  260. package/src/providers/claude-flag-settings.ts +17 -5
  261. package/src/providers/claude-managed-adapter.ts +1 -1
  262. package/src/providers/claude-session-events.ts +6 -1
  263. package/src/providers/dsh-adapter.ts +1 -1
  264. package/src/providers/opencode-adapter.ts +243 -26
  265. package/src/providers/opencode-swarm-plugin.ts +31 -0
  266. package/src/providers/pi-mono-adapter.ts +398 -153
  267. package/src/providers/pi-mono-extension.ts +17 -3
  268. package/src/providers/pricing-sources.md +33 -2
  269. package/src/providers/reasoning-effort.ts +37 -0
  270. package/src/providers/types.ts +6 -2
  271. package/src/rbac/legacy-policy.ts +16 -2
  272. package/src/rbac/permissions.ts +26 -0
  273. package/src/scheduler/deferred-task-waits.ts +18 -5
  274. package/src/scheduler/scheduler.ts +11 -3
  275. package/src/scripts-runtime/executors/quickjs-prelude.ts +75 -6
  276. package/src/scripts-runtime/executors/quickjs-runner.ts +85 -8
  277. package/src/scripts-runtime/executors/quickjs-web-shims.ts +1041 -0
  278. package/src/scripts-runtime/extract-args-schema.ts +9 -8
  279. package/src/scripts-runtime/loader.ts +19 -7
  280. package/src/scripts-runtime/quickjs-compat.ts +464 -0
  281. package/src/scripts-runtime/sdk-allowlist.ts +12 -6
  282. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  283. package/src/scripts-runtime/types/stdlib.d.ts +39 -15
  284. package/src/scripts-runtime/types/swarm-extension.d.ts +66 -1
  285. package/src/scripts-runtime/types/swarm-sdk.d.ts +39 -15
  286. package/src/server.ts +62 -19
  287. package/src/slack/blocks.ts +4 -2
  288. package/src/slack/event-dedup.ts +1 -1
  289. package/src/slack/reaction-shortcode.ts +14 -0
  290. package/src/slack/render-v2.ts +12 -7
  291. package/src/slack/responses.ts +5 -4
  292. package/src/slack/thread-buffer.ts +41 -22
  293. package/src/tasks/additive-buffer.ts +4 -2
  294. package/src/tasks/context-key.ts +60 -1
  295. package/src/tasks/model-pin.ts +67 -0
  296. package/src/tasks/worker-follow-up.ts +15 -33
  297. package/src/tests/acp-adapter.test.ts +42 -0
  298. package/src/tests/agentmail-filters.test.ts +47 -0
  299. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  300. package/src/tests/apps-spike2.test.ts +35 -0
  301. package/src/tests/azure-devops-outbound.test.ts +420 -0
  302. package/src/tests/base-prompt.test.ts +58 -54
  303. package/src/tests/chat-sdk-commands.test.ts +191 -0
  304. package/src/tests/chat-sdk-config.test.ts +334 -0
  305. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  306. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  307. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  308. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  309. package/src/tests/chat-sdk-harness.ts +146 -0
  310. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  311. package/src/tests/chat-sdk-relay.test.ts +470 -0
  312. package/src/tests/chat-sdk-reload.test.ts +128 -0
  313. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  314. package/src/tests/chat-sdk-slack.test.ts +268 -0
  315. package/src/tests/chat-sdk-state.test.ts +163 -0
  316. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  317. package/src/tests/chat-sdk-teams.test.ts +277 -0
  318. package/src/tests/chat-sdk-tools.test.ts +520 -0
  319. package/src/tests/chat-sdk-typing.test.ts +120 -0
  320. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  321. package/src/tests/claude-adapter-binary.test.ts +9 -4
  322. package/src/tests/claude-flag-settings.test.ts +11 -3
  323. package/src/tests/claude-managed-adapter.test.ts +1 -1
  324. package/src/tests/claude-sdk-lifecycle.test.ts +9 -3
  325. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  326. package/src/tests/claude-worker-parity.test.ts +2 -7
  327. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  328. package/src/tests/config-refs.test.ts +66 -0
  329. package/src/tests/context-key.test.ts +19 -0
  330. package/src/tests/cors-allowlist.test.ts +25 -0
  331. package/src/tests/create-page-tool.test.ts +18 -0
  332. package/src/tests/credential-check.test.ts +139 -0
  333. package/src/tests/credentials.test.ts +21 -0
  334. package/src/tests/db-runtime.test.ts +61 -0
  335. package/src/tests/db-task-read-contract.test.ts +22 -0
  336. package/src/tests/db-task-write-contract.test.ts +11 -0
  337. package/src/tests/deferred-task-wake.test.ts +78 -1
  338. package/src/tests/docs-index-footprint.test.js +3 -3
  339. package/src/tests/dsh-adapter.test.ts +1 -1
  340. package/src/tests/enabled-capabilities.test.ts +20 -0
  341. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  342. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  343. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  344. package/src/tests/env-flag.test.ts +1 -0
  345. package/src/tests/explicit-model-validation.test.ts +105 -1
  346. package/src/tests/extensions-catalog.test.ts +1 -0
  347. package/src/tests/extensions-example-comms-adherence-gate.test.ts +413 -0
  348. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  349. package/src/tests/extensions-loader.test.ts +15 -0
  350. package/src/tests/extensions-post-bridge.test.ts +51 -0
  351. package/src/tests/fetch-resolved-env.test.ts +128 -0
  352. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  353. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  354. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  355. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  356. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  357. package/src/tests/github-handlers.test.ts +35 -0
  358. package/src/tests/harness-provider-resolution.test.ts +12 -0
  359. package/src/tests/heartbeat-checklist.test.ts +3 -2
  360. package/src/tests/heartbeat-jev-gate-credentials.test.ts +168 -0
  361. package/src/tests/heartbeat-jev-gate.test.ts +385 -0
  362. package/src/tests/hook-runtime-close.test.ts +0 -2
  363. package/src/tests/http-api-integration.test.ts +0 -25
  364. package/src/tests/migration-046-budgets.test.ts +17 -16
  365. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  366. package/src/tests/model-profile-backcompat.test.ts +327 -0
  367. package/src/tests/model-profile-providers.test.ts +302 -0
  368. package/src/tests/model-profile-runtime-secrets.test.ts +223 -0
  369. package/src/tests/model-profiles-api.test.ts +614 -0
  370. package/src/tests/model-tier-resolution.test.ts +93 -0
  371. package/src/tests/models-catalog.test.ts +42 -1
  372. package/src/tests/openai-compatible-providers.test.ts +134 -0
  373. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  374. package/src/tests/opencode-adapter.test.ts +216 -2
  375. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  376. package/src/tests/opencode-shell-env.test.ts +145 -0
  377. package/src/tests/openrouter-base-url.test.ts +101 -151
  378. package/src/tests/page-proxy.test.ts +1 -1
  379. package/src/tests/pages-browser-sdk.test.ts +76 -0
  380. package/src/tests/pages-feedback-keys.test.ts +121 -0
  381. package/src/tests/pages-feedback.test.ts +4 -1
  382. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  383. package/src/tests/pi-context-compaction.test.ts +193 -0
  384. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  385. package/src/tests/pi-mono-adapter.test.ts +385 -5
  386. package/src/tests/pi-shell-env.test.ts +170 -0
  387. package/src/tests/profile-claim.test.ts +269 -0
  388. package/src/tests/prompt-template-remaining.test.ts +35 -0
  389. package/src/tests/quickjs-compat.test.ts +213 -0
  390. package/src/tests/rbac-engine.test.ts +32 -3
  391. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  392. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  393. package/src/tests/script-connections.test.ts +6 -0
  394. package/src/tests/script-executor-conformance.test.ts +252 -1
  395. package/src/tests/script-executor-quickjs.test.ts +96 -0
  396. package/src/tests/script-runs-http.test.ts +89 -0
  397. package/src/tests/scripts-http.test.ts +217 -1
  398. package/src/tests/scripts-only-gating.test.ts +2 -3
  399. package/src/tests/scripts-runtime.test.ts +58 -40
  400. package/src/tests/secret-scrubber.test.ts +96 -0
  401. package/src/tests/seed-model-profiles.test.ts +174 -0
  402. package/src/tests/seed-scripts.test.ts +2 -2
  403. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  404. package/src/tests/seed-skills-retire.test.ts +182 -0
  405. package/src/tests/send-task-requester-gate.test.ts +58 -0
  406. package/src/tests/session-cost-recompute-unit.test.ts +46 -0
  407. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  408. package/src/tests/skill-invocations.test.ts +4 -2
  409. package/src/tests/slack-blocks.test.ts +36 -0
  410. package/src/tests/slack-inline-output.test.ts +14 -0
  411. package/src/tests/slack-reaction-config.test.ts +20 -0
  412. package/src/tests/slack-render-v2.test.ts +37 -0
  413. package/src/tests/slack-thread-buffer.test.ts +98 -1
  414. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  415. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  416. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  417. package/src/tests/swarm-diff.test.ts +1 -1
  418. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  419. package/src/tests/task-session-prompts.test.ts +132 -0
  420. package/src/tests/task-tool-manifest.test.ts +14 -0
  421. package/src/tests/task-tools-ctx.test.ts +2 -0
  422. package/src/tests/tool-annotations.test.ts +6 -6
  423. package/src/tests/ui-logs-parser.test.ts +43 -0
  424. package/src/tests/used-by-route.test.ts +6 -0
  425. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  426. package/src/tests/workflow-llm.test.ts +61 -0
  427. package/src/tests/workflow-swarm-script.test.ts +38 -0
  428. package/src/tests/workflow-wait-filter.test.ts +5 -3
  429. package/src/tools/chat-access.ts +41 -0
  430. package/src/tools/chat-open-dm.ts +59 -0
  431. package/src/tools/chat-post.ts +74 -0
  432. package/src/tools/chat-read-thread.ts +100 -0
  433. package/src/tools/chat-reply.ts +75 -0
  434. package/src/tools/create-page.ts +3 -13
  435. package/src/tools/model-catalog/index.ts +2 -1
  436. package/src/tools/model-profiles/list-model-profiles.ts +54 -0
  437. package/src/tools/register-chat-channel.ts +139 -0
  438. package/src/tools/request-human-input.ts +11 -3
  439. package/src/tools/script-apis.ts +5 -1
  440. package/src/tools/script-upsert.ts +4 -1
  441. package/src/tools/send-task.ts +48 -1
  442. package/src/tools/skills/skill-get.ts +17 -9
  443. package/src/tools/swarm-config/get-config.ts +2 -1
  444. package/src/tools/swarm-config/list-config.ts +2 -1
  445. package/src/tools/swarm-config/set-config.ts +16 -3
  446. package/src/tools/system-one-decide.ts +104 -0
  447. package/src/tools/task-action.ts +22 -1
  448. package/src/tools/tool-config.ts +14 -6
  449. package/src/types.ts +48 -3
  450. package/src/utils/config-env-export.ts +74 -0
  451. package/src/utils/credentials.test.ts +92 -0
  452. package/src/utils/credentials.ts +52 -4
  453. package/src/utils/harness-provider.ts +15 -6
  454. package/src/utils/runtime-model-catalog.ts +11 -1
  455. package/src/utils/secret-scrubber.ts +86 -10
  456. package/src/utils/task-tool-manifest.ts +19 -2
  457. package/src/utils/vcs-repo-match.ts +29 -0
  458. package/src/workflows/executors/raw-llm.ts +8 -3
  459. package/src/workflows/executors/swarm-script.ts +1 -0
  460. package/src/workflows/executors/system-one-decision.ts +21 -11
  461. package/src/workflows/executors/workflow-llm.ts +22 -0
  462. package/src/workflows/index.ts +21 -12
  463. package/templates/extensions/README.md +1 -0
  464. package/templates/extensions/comms-adherence-gate/README.md +88 -0
  465. package/templates/extensions/comms-adherence-gate/hooks.ts +489 -0
  466. package/templates/extensions/comms-adherence-gate/manifest.json +8 -0
  467. package/templates/skills/agent-browser/SKILL.md +1 -1
  468. package/templates/skills/agent-browser/content.md +1 -1
  469. package/templates/skills/apps/SKILL.md +8 -1
  470. package/templates/skills/apps/content.md +8 -1
  471. package/templates/skills/chat-sdk/config.json +14 -0
  472. package/templates/skills/chat-sdk/content.md +84 -0
  473. package/templates/skills/composio-gmail/content.md +7 -0
  474. package/templates/skills/composio-google-docs/content.md +1 -1
  475. package/templates/skills/email-domain-health/config.json +14 -0
  476. package/templates/skills/email-domain-health/content.md +131 -0
  477. package/templates/skills/kv-storage/content.md +2 -2
  478. package/templates/skills/pages/content.md +8 -10
  479. package/templates/skills/swarm-extensions/content.md +2 -0
  480. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  481. package/templates/skills/swarm-scripts/config.json +1 -1
  482. package/templates/skills/swarm-scripts/content.md +4 -2
  483. package/templates/skills/workflow-iterate/content.md +38 -0
  484. package/dist/artifact-eczsknc3.js +0 -3843
  485. package/dist/cli-42qhyvwx.js +0 -33
  486. package/dist/cli-bd957dgb.js +0 -153
  487. package/dist/cli-q51yprfq.js +0 -1104
  488. package/dist/cli-t1ze64h3.js +0 -811
  489. package/dist/cli-tcc4wd5d.js +0 -56471
  490. package/dist/index-9ch1n761.js +0 -1102
  491. package/src/artifact-sdk/index.ts +0 -2
  492. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  493. package/src/artifact-sdk/port.ts +0 -12
  494. package/src/artifact-sdk/server.ts +0 -183
  495. package/src/artifact-sdk/tunnel.ts +0 -19
  496. package/src/commands/artifact.ts +0 -249
  497. package/src/http/ecosystem.ts +0 -77
  498. package/src/tests/artifact-commands.test.ts +0 -92
  499. package/src/tests/artifact-sdk.test.ts +0 -793
  500. package/src/tests/register-service-security.test.ts +0 -194
  501. package/src/tools/list-services.ts +0 -107
  502. package/src/tools/register-service.ts +0 -177
  503. package/src/tools/unregister-service.ts +0 -73
  504. package/src/tools/update-service-status.ts +0 -96
  505. package/templates/skills/artifacts/config.json +0 -14
  506. package/templates/skills/artifacts/content.md +0 -344
  507. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  508. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  509. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  510. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  511. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
@@ -329,6 +329,8 @@ declare module "swarm-sdk" {
329
329
  key?: string;
330
330
  includeSecrets?: boolean;
331
331
  }): Promise<unknown>;
332
+ // --- model profiles ---
333
+ modelProfile_list(args?: { harness?: string }): Promise<unknown>;
332
334
  // --- slack ---
333
335
  slack_read(args?: {
334
336
  inboxMessageId?: string;
@@ -342,6 +344,8 @@ declare module "swarm-sdk" {
342
344
  types?: Array<"public" | "private" | "dm" | "mpim">;
343
345
  limit?: number;
344
346
  }): Promise<unknown>;
347
+ // --- chat sdk ---
348
+ chat_readThread(args: { threadId: string; limit?: number }): Promise<unknown>;
345
349
  // --- messaging ---
346
350
  message_read(args?: {
347
351
  channel?: string;
@@ -351,13 +355,6 @@ declare module "swarm-sdk" {
351
355
  mentionsOnly?: boolean;
352
356
  markAsRead?: boolean;
353
357
  }): Promise<unknown>;
354
- // --- services ---
355
- service_list(args?: {
356
- agentId?: string;
357
- name?: string;
358
- status?: "starting" | "healthy" | "unhealthy" | "stopped";
359
- includeOwn?: boolean;
360
- }): Promise<unknown>;
361
358
  // --- context / profiles ---
362
359
  context_history(args?: {
363
360
  agentId?: string;
@@ -452,6 +449,7 @@ declare module "swarm-sdk" {
452
449
  scope?: "global" | "agent" | "repo";
453
450
  scopeId?: string;
454
451
  isSecret?: boolean;
452
+ exportToEnv?: boolean;
455
453
  }): Promise<unknown>;
456
454
  config_delete(args: { id: string }): Promise<unknown>;
457
455
 
@@ -492,20 +490,36 @@ declare module "swarm-sdk" {
492
490
  slack_delete(args: { channelId: string; messageTs: string }): Promise<unknown>;
493
491
  slack_update(args: { channelId: string; messageTs: string; message: string }): Promise<unknown>;
494
492
 
493
+ // --- write: chat sdk ---
494
+ chat_reply(args: { text: string }): Promise<unknown>;
495
+ chat_post(args: {
496
+ adapter: "telegram" | "slack" | "discord" | "teams";
497
+ threadId?: string;
498
+ channelId?: string;
499
+ text: string;
500
+ }): Promise<unknown>;
501
+ chat_openDm(args: {
502
+ adapter: "telegram" | "slack" | "discord" | "teams";
503
+ userId: string;
504
+ }): Promise<unknown>;
505
+ chat_registerChannel(args: {
506
+ adapter: "telegram" | "slack" | "discord" | "teams";
507
+ channelId: string;
508
+ agentId?: string;
509
+ workflowId?: string;
510
+ name?: string;
511
+ }): Promise<unknown>;
512
+ chat_unregisterChannel(args: {
513
+ adapter: "telegram" | "slack" | "discord" | "teams";
514
+ channelId: string;
515
+ }): Promise<unknown>;
516
+
495
517
  // --- write: messaging (internal) ---
496
518
  message_post(args: { channel?: string; content: string; to?: string }): Promise<unknown>;
497
519
 
498
520
  // --- write: profiles ---
499
521
  profile_update(args: Record<string, unknown>): Promise<unknown>;
500
522
 
501
- // --- write: services ---
502
- service_register(args: Record<string, unknown>): Promise<unknown>;
503
- service_unregister(args: { name: string }): Promise<unknown>;
504
- service_updateStatus(args: {
505
- name: string;
506
- status: "starting" | "healthy" | "unhealthy" | "stopped";
507
- }): Promise<unknown>;
508
-
509
523
  // --- write: schedules ---
510
524
  schedule_create(args: Record<string, unknown>): Promise<unknown>;
511
525
  schedule_update(args: Record<string, unknown>): Promise<unknown>;
@@ -666,6 +680,16 @@ declare module "swarm-sdk" {
666
680
  // --- human input ---
667
681
  request_humanInput(args: Record<string, unknown>): Promise<unknown>;
668
682
  approval_cancel(args: { requestId: string; reason?: string }): Promise<unknown>;
683
+
684
+ // --- decisions ---
685
+ systemOne_decide(args: {
686
+ provider?: "typesafe" | "openrouter" | "laya" | "openai" | "cloudflare";
687
+ model?: string;
688
+ state: string | string[] | Record<string, unknown>;
689
+ questions: Record<string, Record<string, unknown>>;
690
+ timeoutMs?: number;
691
+ maxRetries?: number;
692
+ }): Promise<unknown>;
669
693
  }
670
694
 
671
695
  export interface ScriptStdlib {
@@ -19,6 +19,7 @@ declare module "swarm-extension" {
19
19
  | "linear"
20
20
  | "jira"
21
21
  | "comb"
22
+ | "chat"
22
23
  | undefined;
23
24
  routingReason?:
24
25
  | "skill"
@@ -59,6 +60,7 @@ declare module "swarm-extension" {
59
60
  model?: string | undefined;
60
61
  modelTier?: "smol" | "regular" | "smart" | "ultra" | undefined;
61
62
  effort?: "off" | "low" | "medium" | "high" | "xhigh" | "max" | undefined;
63
+ profile?: string | undefined;
62
64
  scheduleId?: string | undefined;
63
65
  workflowRunId?: string | undefined;
64
66
  workflowRunStepId?: string | undefined;
@@ -132,7 +134,8 @@ declare module "swarm-extension" {
132
134
  | "system"
133
135
  | "linear"
134
136
  | "jira"
135
- | "comb";
137
+ | "comb"
138
+ | "chat";
136
139
  tags: string[];
137
140
  priority: number;
138
141
  dependsOn: string[];
@@ -191,6 +194,9 @@ declare module "swarm-extension" {
191
194
  resolvedModel?: string | undefined;
192
195
  modelSource?: string | undefined;
193
196
  modelAlias?: string | undefined;
197
+ resolvedEffort?: "off" | "low" | "medium" | "high" | "xhigh" | "max" | undefined;
198
+ profile?: string | undefined;
199
+ resolvedProfile?: string | undefined;
194
200
  scheduleId?: string | undefined;
195
201
  workflowRunId?: string | null | undefined;
196
202
  workflowRunStepId?: string | null | undefined;
@@ -467,6 +473,43 @@ declare module "swarm-extension" {
467
473
  kind: "broadcast";
468
474
  };
469
475
  }
476
+ /** A Chat SDK message after its thread buffer flushed, before routing. */
477
+ export interface ChatRouteEvent {
478
+ /** Adapter name, such as `telegram` or `slack`. */
479
+ adapter: string;
480
+ channelId: string;
481
+ /** The Chat SDK thread id, prefixed with the adapter name. */
482
+ threadId: string;
483
+ /** The first buffered sender. */
484
+ userId: string;
485
+ userName?: string;
486
+ /** The buffered messages, joined. */
487
+ text: string;
488
+ botMentioned: boolean;
489
+ isDirectMessage: boolean;
490
+ /** Set when earlier swarm tasks exist in this thread. */
491
+ threadContext?: {
492
+ adapter: string;
493
+ threadId: string;
494
+ };
495
+ }
496
+ export interface ChatRouteModify {
497
+ target:
498
+ | {
499
+ kind: "agent";
500
+ agentId: string;
501
+ }
502
+ | {
503
+ kind: "lead";
504
+ }
505
+ | {
506
+ kind: "broadcast";
507
+ }
508
+ | {
509
+ kind: "workflow";
510
+ workflowId: string;
511
+ };
512
+ }
470
513
  export type HeartbeatClassification = "no-session" | "stale-session" | "fresh-stalled";
471
514
  export type HeartbeatAction = "supersede-resume" | "fail" | "record";
472
515
  export interface HeartbeatRemediateEvent {
@@ -511,6 +554,18 @@ declare module "swarm-extension" {
511
554
  threadTs?: string;
512
555
  taskId?: string;
513
556
  }
557
+ /** A Chat SDK message the swarm received or sent. */
558
+ export interface ChatMessageEvent {
559
+ adapter: string;
560
+ channelId: string;
561
+ threadId: string;
562
+ /** The sender, for an inbound message. */
563
+ userId?: string;
564
+ text: string;
565
+ direction: "inbound" | "outbound";
566
+ taskId?: string;
567
+ messageId?: string;
568
+ }
514
569
  /**
515
570
  * A person answered an approval request. Fires for workflow and standalone
516
571
  * requests. Timeouts and cancellations do not emit it today.
@@ -619,6 +674,11 @@ declare module "swarm-extension" {
619
674
  modify: SlackRouteModify;
620
675
  result: PreResult<SlackRouteModify>;
621
676
  };
677
+ "pre.chat.route": {
678
+ event: ChatRouteEvent;
679
+ modify: ChatRouteModify;
680
+ result: PreResult<ChatRouteModify>;
681
+ };
622
682
  "pre.heartbeat.remediate": {
623
683
  event: HeartbeatRemediateEvent;
624
684
  modify: HeartbeatRemediateModify;
@@ -664,6 +724,11 @@ declare module "swarm-extension" {
664
724
  modify: never;
665
725
  result: void;
666
726
  };
727
+ "post.chat.message": {
728
+ event: ChatMessageEvent;
729
+ modify: never;
730
+ result: void;
731
+ };
667
732
  "post.approval.resolved": {
668
733
  event: ApprovalResolvedEvent;
669
734
  modify: never;
@@ -311,6 +311,8 @@ declare module "swarm-sdk" {
311
311
  key?: string;
312
312
  includeSecrets?: boolean;
313
313
  }): Promise<unknown>;
314
+ // --- model profiles ---
315
+ modelProfile_list(args?: { harness?: string }): Promise<unknown>;
314
316
  // --- slack ---
315
317
  slack_read(args?: {
316
318
  inboxMessageId?: string;
@@ -324,6 +326,8 @@ declare module "swarm-sdk" {
324
326
  types?: Array<"public" | "private" | "dm" | "mpim">;
325
327
  limit?: number;
326
328
  }): Promise<unknown>;
329
+ // --- chat sdk ---
330
+ chat_readThread(args: { threadId: string; limit?: number }): Promise<unknown>;
327
331
  // --- messaging ---
328
332
  message_read(args?: {
329
333
  channel?: string;
@@ -333,13 +337,6 @@ declare module "swarm-sdk" {
333
337
  mentionsOnly?: boolean;
334
338
  markAsRead?: boolean;
335
339
  }): Promise<unknown>;
336
- // --- services ---
337
- service_list(args?: {
338
- agentId?: string;
339
- name?: string;
340
- status?: "starting" | "healthy" | "unhealthy" | "stopped";
341
- includeOwn?: boolean;
342
- }): Promise<unknown>;
343
340
  // --- context / profiles ---
344
341
  context_history(args?: {
345
342
  agentId?: string;
@@ -434,6 +431,7 @@ declare module "swarm-sdk" {
434
431
  scope?: "global" | "agent" | "repo";
435
432
  scopeId?: string;
436
433
  isSecret?: boolean;
434
+ exportToEnv?: boolean;
437
435
  }): Promise<unknown>;
438
436
  config_delete(args: { id: string }): Promise<unknown>;
439
437
 
@@ -474,20 +472,36 @@ declare module "swarm-sdk" {
474
472
  slack_delete(args: { channelId: string; messageTs: string }): Promise<unknown>;
475
473
  slack_update(args: { channelId: string; messageTs: string; message: string }): Promise<unknown>;
476
474
 
475
+ // --- write: chat sdk ---
476
+ chat_reply(args: { text: string }): Promise<unknown>;
477
+ chat_post(args: {
478
+ adapter: "telegram" | "slack" | "discord" | "teams";
479
+ threadId?: string;
480
+ channelId?: string;
481
+ text: string;
482
+ }): Promise<unknown>;
483
+ chat_openDm(args: {
484
+ adapter: "telegram" | "slack" | "discord" | "teams";
485
+ userId: string;
486
+ }): Promise<unknown>;
487
+ chat_registerChannel(args: {
488
+ adapter: "telegram" | "slack" | "discord" | "teams";
489
+ channelId: string;
490
+ agentId?: string;
491
+ workflowId?: string;
492
+ name?: string;
493
+ }): Promise<unknown>;
494
+ chat_unregisterChannel(args: {
495
+ adapter: "telegram" | "slack" | "discord" | "teams";
496
+ channelId: string;
497
+ }): Promise<unknown>;
498
+
477
499
  // --- write: messaging (internal) ---
478
500
  message_post(args: { channel?: string; content: string; to?: string }): Promise<unknown>;
479
501
 
480
502
  // --- write: profiles ---
481
503
  profile_update(args: Record<string, unknown>): Promise<unknown>;
482
504
 
483
- // --- write: services ---
484
- service_register(args: Record<string, unknown>): Promise<unknown>;
485
- service_unregister(args: { name: string }): Promise<unknown>;
486
- service_updateStatus(args: {
487
- name: string;
488
- status: "starting" | "healthy" | "unhealthy" | "stopped";
489
- }): Promise<unknown>;
490
-
491
505
  // --- write: schedules ---
492
506
  schedule_create(args: Record<string, unknown>): Promise<unknown>;
493
507
  schedule_update(args: Record<string, unknown>): Promise<unknown>;
@@ -648,6 +662,16 @@ declare module "swarm-sdk" {
648
662
  // --- human input ---
649
663
  request_humanInput(args: Record<string, unknown>): Promise<unknown>;
650
664
  approval_cancel(args: { requestId: string; reason?: string }): Promise<unknown>;
665
+
666
+ // --- decisions ---
667
+ systemOne_decide(args: {
668
+ provider?: "typesafe" | "openrouter" | "laya" | "openai" | "cloudflare";
669
+ model?: string;
670
+ state: string | string[] | Record<string, unknown>;
671
+ questions: Record<string, Record<string, unknown>>;
672
+ timeoutMs?: number;
673
+ maxRetries?: number;
674
+ }): Promise<unknown>;
651
675
  }
652
676
 
653
677
  export interface ScriptStdlib {
package/src/server.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import pkg from "../package.json";
3
- import { ensurePricingSeeded, ensureRbacSeeded } from "./be/boot-seeds";
3
+ import { ensureModelProfilesSeeded, ensurePricingSeeded, ensureRbacSeeded } from "./be/boot-seeds";
4
4
  import { initDb } from "./be/db";
5
5
  import { startPricingRefreshLoop } from "./be/pricing-refresh";
6
6
  import { isSteeringEnabled } from "./be/steering";
7
7
  import { registerGithubTaskReactions } from "./github/task-reactions";
8
8
  import { loadGlobalConfigsIntoEnv } from "./http/core";
9
+ import { isChatSdkEnabled } from "./integrations/chat-sdk/config";
9
10
  import { resolveTemplate } from "./prompts/resolver";
10
11
  import { isRbacEnabled } from "./rbac";
11
12
  import { getSlackConfiguration } from "./slack/config";
@@ -21,6 +22,10 @@ import { registerAppSyncTool } from "./tools/app-sync";
21
22
  import { registerAppUpsertTool } from "./tools/app-upsert";
22
23
  import { registerCancelApprovalRequestTool } from "./tools/cancel-approval-request";
23
24
  import { registerCancelTaskTool } from "./tools/cancel-task";
25
+ import { registerChatOpenDmTool } from "./tools/chat-open-dm";
26
+ import { registerChatPostTool } from "./tools/chat-post";
27
+ import { registerChatReadThreadTool } from "./tools/chat-read-thread";
28
+ import { registerChatReplyTool } from "./tools/chat-reply";
24
29
  import { registerContextDiffTool } from "./tools/context-diff";
25
30
  import { registerContextHistoryTool } from "./tools/context-history";
26
31
  import { registerCreateChannelTool } from "./tools/create-channel";
@@ -54,7 +59,6 @@ import {
54
59
  } from "./tools/kv";
55
60
  // Messaging capability
56
61
  import { registerListChannelsTool } from "./tools/list-channels";
57
- import { registerListServicesTool } from "./tools/list-services";
58
62
  import { registerManageUserTool } from "./tools/manage-user";
59
63
  // MCP Servers capability
60
64
  import {
@@ -77,6 +81,7 @@ import {
77
81
  registerModelCatalogOverlayUpsertTool,
78
82
  registerModelCatalogRefreshTool,
79
83
  } from "./tools/model-catalog";
84
+ import { registerListModelProfilesTool } from "./tools/model-profiles/list-model-profiles";
80
85
  import { registerMyAgentInfoTool } from "./tools/my-agent-info";
81
86
  import { registerGetOauthAccessTokenTool } from "./tools/oauth-access-token";
82
87
  import { registerPollTaskTool } from "./tools/poll-task";
@@ -91,12 +96,15 @@ import {
91
96
  } from "./tools/prompt-templates";
92
97
  import { registerReadMessagesTool } from "./tools/read-messages";
93
98
  import { registerRegisterAgentmailInboxTool } from "./tools/register-agentmail-inbox";
99
+ import {
100
+ registerRegisterChatChannelTool,
101
+ registerUnregisterChatChannelTool,
102
+ } from "./tools/register-chat-channel";
94
103
  import {
95
104
  registerRegisterKapsoNumberTool,
96
105
  registerUnregisterKapsoNumberTool,
97
106
  } from "./tools/register-kapso-number";
98
107
  // Services capability
99
- import { registerRegisterServiceTool } from "./tools/register-service";
100
108
  // Repo management tools
101
109
  import { registerGetReposTool, registerUpdateRepoTool } from "./tools/repos";
102
110
  import { registerRequestHumanInputTool } from "./tools/request-human-input";
@@ -169,6 +177,7 @@ import {
169
177
  } from "./tools/swarm-config";
170
178
  import { registerSwarmXTool } from "./tools/swarm-x";
171
179
  // Task pool capability
180
+ import { registerSystemOneDecideTool } from "./tools/system-one-decide";
172
181
  import { registerTaskActionTool } from "./tools/task-action";
173
182
  // Tracker capability
174
183
  import {
@@ -178,10 +187,8 @@ import {
178
187
  registerTrackerSyncStatusTool,
179
188
  registerTrackerUnlinkTool,
180
189
  } from "./tools/tracker";
181
- import { registerUnregisterServiceTool } from "./tools/unregister-service";
182
190
  // Profiles capability
183
191
  import { registerUpdateProfileTool } from "./tools/update-profile";
184
- import { registerUpdateServiceStatusTool } from "./tools/update-service-status";
185
192
  import { setPreloadedTools } from "./tools/utils";
186
193
  import {
187
194
  registerReplyWhatsappMessageTool,
@@ -216,7 +223,6 @@ export const ALL_CAPABILITIES = [
216
223
  "prompt-templates",
217
224
  "mcp",
218
225
  "profiles",
219
- "services",
220
226
  "scheduling",
221
227
  "memory",
222
228
  "workflows",
@@ -230,6 +236,7 @@ export const ALL_CAPABILITIES = [
230
236
  "repo",
231
237
  "agentmail",
232
238
  "kapso",
239
+ "chat-sdk",
233
240
  "swarm-x",
234
241
  ] as const;
235
242
 
@@ -256,12 +263,12 @@ const DEFAULT_CAPABILITIES: string = [
256
263
  //
257
264
  // Disabled by default
258
265
  //
259
- // "services",
260
266
  // "prompt-templates",
261
267
  // "messaging",
262
268
  // "swarm-x",
263
269
  // "agentmail",
264
270
  // "kapso",
271
+ // "chat-sdk", (added by getEnabledCapabilities when CHAT_SDK_ENABLED is true)
265
272
  ].join(",");
266
273
 
267
274
  // Note: unknown names are kept (they never match hasCapability); workers
@@ -280,11 +287,22 @@ export function hasCapability(cap: CAPABILITIES_T): boolean {
280
287
  return getCapabilities().has(cap);
281
288
  }
282
289
 
290
+ const KNOWN_CAPABILITIES: ReadonlySet<string> = new Set(ALL_CAPABILITIES);
291
+
283
292
  export function getEnabledCapabilities(): CAPABILITIES_T[] {
284
- const capabilities = Array.from(getCapabilities());
293
+ // Only known flags: the register response validates against ALL_CAPABILITIES,
294
+ // so a retired name still listed in CAPABILITIES (e.g. `services`) would
295
+ // otherwise turn every agent registration into a 500.
296
+ const capabilities: CAPABILITIES_T[] = Array.from(getCapabilities()).filter(
297
+ (capability) => KNOWN_CAPABILITIES.has(capability) && capability !== "chat-sdk",
298
+ );
299
+ // The Chat SDK channel follows CHAT_SDK_ENABLED, not the CAPABILITIES list.
300
+ if (isChatSdkEnabled()) capabilities.push("chat-sdk");
285
301
  // Phase 1 has no HTTP receiver. Do not advertise usable Slack tools to
286
- // workers when HTTP (or an invalid transport) was selected.
287
- return getSlackConfiguration().mode === "socket"
302
+ // workers when HTTP (or an invalid transport) was selected, or when the
303
+ // built-in Slack app is off (SLACK_DISABLE, required by the Chat SDK Slack adapter).
304
+ const slack = getSlackConfiguration();
305
+ return slack.mode === "socket" && !slack.disabled
288
306
  ? capabilities
289
307
  : capabilities.filter((capability) => capability !== "slack");
290
308
  }
@@ -344,6 +362,13 @@ function applyToolAllowlist(server: McpServer, allowlist: readonly string[]): vo
344
362
  }
345
363
  }
346
364
 
365
+ function removeTools(server: McpServer, names: readonly string[]): void {
366
+ // oxlint-disable-next-line anti-slop/no-chained-type-assertions -- the MCP SDK keeps its tool registry private.
367
+ const tools = (server as unknown as { _registeredTools: Record<string, { remove(): void }> })
368
+ ._registeredTools;
369
+ for (const name of names) tools[name]?.remove();
370
+ }
371
+
347
372
  export async function createServer(
348
373
  opts: {
349
374
  scriptsOnly?: boolean;
@@ -351,6 +376,8 @@ export async function createServer(
351
376
  preloadedTools?: readonly string[];
352
377
  /** Raw SWARM_ENABLED_TOOLS value for this session; defaults to the env. */
353
378
  enabledTools?: string;
379
+ /** Tool names removed from this session after registration (task-context filters). */
380
+ excludedTools?: readonly string[];
354
381
  } = {},
355
382
  ) {
356
383
  // Reload env
@@ -368,8 +395,12 @@ export async function createServer(
368
395
  // fullSurface to register every tool group regardless of CAPABILITIES.
369
396
  // An allowlist also registers every group, then prunes to the listed names.
370
397
  // This shadows the module-level hasCapability for the registrations below.
398
+ // `chat-sdk` follows CHAT_SDK_ENABLED (as in getEnabledCapabilities), not
399
+ // the CAPABILITIES list.
371
400
  const hasCapability = (cap: CAPABILITIES_T): boolean =>
372
- opts.fullSurface === true || toolAllowlist !== undefined || getCapabilities().has(cap);
401
+ opts.fullSurface === true ||
402
+ toolAllowlist !== undefined ||
403
+ (cap === "chat-sdk" ? isChatSdkEnabled() : getCapabilities().has(cap));
373
404
 
374
405
  // Initialize database with WAL mode
375
406
  // Uses DATABASE_PATH env var for Docker volume compatibility (WAL needs .sqlite, .sqlite-wal, .sqlite-shm on same filesystem)
@@ -385,6 +416,11 @@ export async function createServer(
385
416
  // manual-override constants for runtime-fee / ACU pricing.
386
417
  ensurePricingSeeded();
387
418
  startPricingRefreshLoop();
419
+ try {
420
+ await ensureModelProfilesSeeded();
421
+ } catch (err) {
422
+ console.error("[server] Failed to seed model profiles:", err);
423
+ }
388
424
 
389
425
  try {
390
426
  ensureRbacSeeded();
@@ -448,6 +484,7 @@ export async function createServer(
448
484
  registerGetTasksTool(server);
449
485
  registerGetMetricsTool(server);
450
486
  registerSendTaskTool(server);
487
+ registerListModelProfilesTool(server);
451
488
  registerGetTaskDetailsTool(server);
452
489
  registerStoreProgressTool(server);
453
490
  registerMyAgentInfoTool(server);
@@ -582,6 +619,7 @@ export async function createServer(
582
619
  registerGetWorkflowRunTool(server);
583
620
  registerRetryWorkflowRunTool(server);
584
621
  registerCancelWorkflowRunTool(server);
622
+ registerSystemOneDecideTool(server);
585
623
  registerRequestHumanInputTool(server);
586
624
  registerCancelApprovalRequestTool(server);
587
625
  }
@@ -677,6 +715,16 @@ export async function createServer(
677
715
  registerReplyWhatsappMessageTool(server);
678
716
  }
679
717
 
718
+ // Chat SDK capability - Telegram/Slack/Discord/Teams through the Chat SDK channel (reply, post, DM, read, channel routes)
719
+ if (hasCapability("chat-sdk")) {
720
+ registerChatReplyTool(server);
721
+ registerChatPostTool(server);
722
+ registerChatOpenDmTool(server);
723
+ registerChatReadThreadTool(server);
724
+ registerRegisterChatChannelTool(server);
725
+ registerUnregisterChatChannelTool(server);
726
+ }
727
+
680
728
  // Swarm-x capability - external command routes mirroring the `agent-swarm x ...` CLI surface
681
729
  if (hasCapability("swarm-x")) {
682
730
  registerSwarmXTool(server);
@@ -693,15 +741,10 @@ export async function createServer(
693
741
  registerDeleteChannelTool(server);
694
742
  }
695
743
 
696
- // Services capability - PM2/background service registry
697
- if (hasCapability("services")) {
698
- registerRegisterServiceTool(server);
699
- registerUnregisterServiceTool(server);
700
- registerListServicesTool(server);
701
- registerUpdateServiceStatusTool(server);
702
- }
703
-
704
744
  if (toolAllowlist) applyToolAllowlist(server, toolAllowlist);
745
+ if (opts.fullSurface !== true && opts.excludedTools?.length) {
746
+ removeTools(server, opts.excludedTools);
747
+ }
705
748
 
706
749
  return server;
707
750
  }
@@ -8,6 +8,7 @@
8
8
  import type { AgentTaskStatus, TaskAttachment } from "../types";
9
9
  import { getAppUrl } from "../utils/constants";
10
10
  import { taskAttachmentDisplayUrl } from "../utils/task-attachment-links";
11
+ import { completedStatusIcon } from "./reaction-shortcode";
11
12
 
12
13
  // Slack limits section text to 3000 chars; we use 2900 for safety.
13
14
  export const MAX_SECTION_LENGTH = 2900;
@@ -294,7 +295,7 @@ export function buildCompletedBlocks(opts: {
294
295
  trailer?: string;
295
296
  }): SlackBlock[] {
296
297
  const taskLink = getTaskLink(opts.taskId);
297
- let line = `✅ *${opts.agentName}* (${taskLink})`;
298
+ let line = `${completedStatusIcon()} *${opts.agentName}* (${taskLink})`;
298
299
  if (opts.duration) line += ` · ${opts.duration}`;
299
300
 
300
301
  const blocks: SlackBlock[] = [sectionBlock(line)];
@@ -479,7 +480,8 @@ export function isTreeOutputTruncated(text: string): boolean {
479
480
  * Render a single node line: icon + bold name + task link + optional duration.
480
481
  */
481
482
  function renderNodeLine(node: TreeNode): string {
482
- const icon = STATUS_ICON[node.status] ?? "•";
483
+ const icon =
484
+ node.status === "completed" ? completedStatusIcon() : (STATUS_ICON[node.status] ?? "•");
483
485
  const taskLink = getTaskLink(node.taskId);
484
486
  let line = `${icon} *${node.agentName}* (${taskLink})`;
485
487
  if (node.duration) line += ` · ${node.duration}`;
@@ -18,7 +18,7 @@
18
18
  * safe-but-tight bound.
19
19
  *
20
20
  * Single-pod-only. The API server (which owns the Slack socket) runs as a
21
- * single PM2 process; if that ever changes, swap this for a DB-backed table.
21
+ * single API process; if that ever changes, swap this for a DB-backed table.
22
22
  */
23
23
 
24
24
  const DEFAULT_TTL_MS = 300_000; // 5 minutes
@@ -43,3 +43,17 @@ export function reactionName(event: SlackReactionEvent): string {
43
43
  const normalized = normalizeSlackReactionShortcode(raw);
44
44
  return normalized ?? SLACK_REACTION_DEFAULTS[event];
45
45
  }
46
+
47
+ export const SLACK_STATUS_ICON_COMPLETED_KEY = "SLACK_STATUS_ICON_COMPLETED";
48
+ export const SLACK_STATUS_ICON_COMPLETED_DEFAULT = "✅";
49
+
50
+ /**
51
+ * The "done" glyph in thread text (task tree, thread header, outcome cards).
52
+ * Read per call so a global config write, which reloads `process.env`, takes
53
+ * effect without a restart. Unlike a reaction there is no `invalid_name`
54
+ * fallback in text: a name the workspace lacks renders as literal `:name:`.
55
+ */
56
+ export function completedStatusIcon(): string {
57
+ const normalized = normalizeSlackReactionShortcode(process.env[SLACK_STATUS_ICON_COMPLETED_KEY]);
58
+ return normalized ? `:${normalized}:` : SLACK_STATUS_ICON_COMPLETED_DEFAULT;
59
+ }
@@ -51,7 +51,7 @@ import {
51
51
  splitSlackSectionText,
52
52
  } from "./blocks";
53
53
  import { buildAskClosure, type ClosureState, closureState } from "./closure";
54
- import { reactionName, type SlackReactionEvent } from "./reaction-shortcode";
54
+ import { completedStatusIcon, reactionName, type SlackReactionEvent } from "./reaction-shortcode";
55
55
  import { getAgentDisplayName, getAgentEmoji } from "./responses";
56
56
  import {
57
57
  _resetSlackSessionStatusForTests,
@@ -346,7 +346,7 @@ async function taskStateGlyph(
346
346
  case "paused":
347
347
  return "⏸️";
348
348
  case "completed":
349
- return "✅";
349
+ return completedStatusIcon();
350
350
  case "failed":
351
351
  return "❌";
352
352
  case "cancelled":
@@ -496,7 +496,9 @@ function threadHeaderText(tasks: AgentTask[], now: Date, duration: string): stri
496
496
  // A parked deferral is stored `completed`, but the ask is not answered yet.
497
497
  if (tasks.some((task) => isAwaitingWake(task, tasks))) return `🧵 ⏳ waiting — ${duration}`;
498
498
  const hasFailure = tasks.some((task) => task.status === "failed");
499
- return hasFailure ? `🧵 ❌ done with failures — ${duration}` : `🧵 ✅ done — ${duration}`;
499
+ return hasFailure
500
+ ? `🧵 ❌ done with failures — ${duration}`
501
+ : `🧵 ${completedStatusIcon()} done — ${duration}`;
500
502
  }
501
503
 
502
504
  export async function renderThreadTree(
@@ -909,7 +911,7 @@ async function outcomeContent(task: AgentTask, slackReplySent: boolean): Promise
909
911
  const agentName = task.agentId
910
912
  ? ((await getAgentById(task.agentId))?.name ?? "Agent")
911
913
  : "Agent";
912
- return `✅ ${agentName} completed`;
914
+ return `${completedStatusIcon()} ${agentName} completed`;
913
915
  }
914
916
  // A deferral is `completed` in the database but unfinished to a human: the
915
917
  // work resumes in a wake-up task. Rendering it ✅ told the thread the ask
@@ -917,7 +919,10 @@ async function outcomeContent(task: AgentTask, slackReplySent: boolean): Promise
917
919
  if (isDeferred) {
918
920
  return withStatusLead("⏳", outcomeText(slackTaskOutput(task), "Deferred."));
919
921
  }
920
- return withStatusLead("✅", outcomeText(slackTaskOutput(task), "Task completed."));
922
+ return withStatusLead(
923
+ completedStatusIcon(),
924
+ outcomeText(slackTaskOutput(task), "Task completed."),
925
+ );
921
926
  }
922
927
 
923
928
  async function agentDisplayNameFor(task: AgentTask): Promise<string> {
@@ -947,7 +952,7 @@ export async function childOutcomeContent(
947
952
  );
948
953
  }
949
954
  if (slackReplySent && !isDeferredTask(task)) {
950
- return `↳ ✅ ${agentName} completed`;
955
+ return `↳ ${completedStatusIcon()} ${agentName} completed`;
951
956
  }
952
957
  if (isDeferredTask(task)) {
953
958
  return withStatusLead(
@@ -956,7 +961,7 @@ export async function childOutcomeContent(
956
961
  );
957
962
  }
958
963
  return withStatusLead(
959
- `↳ ✅ ${agentName} — result:`,
964
+ `↳ ${completedStatusIcon()} ${agentName} — result:`,
960
965
  outcomeText(slackTaskOutput(task), "Task completed."),
961
966
  );
962
967
  }