@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
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "Agent Swarm API",
5
- "version": "1.173.0",
5
+ "version": "2.1.0",
6
6
  "description": "Multi-agent orchestration API for Claude Code, Codex, and Gemini CLI. Enables task distribution, agent communication, and service discovery.\n\nMCP tools are documented separately in [MCP.md](./MCP.md)."
7
7
  },
8
8
  "servers": [
@@ -172,7 +172,8 @@
172
172
  "workflow",
173
173
  "linear",
174
174
  "jira",
175
- "comb"
175
+ "comb",
176
+ "chat"
176
177
  ],
177
178
  "default": "mcp"
178
179
  },
@@ -375,6 +376,23 @@
375
376
  "modelAlias": {
376
377
  "type": "string"
377
378
  },
379
+ "resolvedEffort": {
380
+ "type": "string",
381
+ "enum": [
382
+ "off",
383
+ "low",
384
+ "medium",
385
+ "high",
386
+ "xhigh",
387
+ "max"
388
+ ]
389
+ },
390
+ "profile": {
391
+ "type": "string"
392
+ },
393
+ "resolvedProfile": {
394
+ "type": "string"
395
+ },
378
396
  "scheduleId": {
379
397
  "type": "string"
380
398
  },
@@ -1399,6 +1417,9 @@
1399
1417
  },
1400
1418
  "encrypted": {
1401
1419
  "type": "boolean"
1420
+ },
1421
+ "exportToEnv": {
1422
+ "type": "boolean"
1402
1423
  }
1403
1424
  },
1404
1425
  "required": [
@@ -1412,7 +1433,8 @@
1412
1433
  "description",
1413
1434
  "createdAt",
1414
1435
  "lastUpdatedAt",
1415
- "encrypted"
1436
+ "encrypted",
1437
+ "exportToEnv"
1416
1438
  ]
1417
1439
  },
1418
1440
  "ContextSnapshot": {
@@ -2923,7 +2945,8 @@
2923
2945
  "mcp",
2924
2946
  "script",
2925
2947
  "slack",
2926
- "api"
2948
+ "api",
2949
+ "chat"
2927
2950
  ]
2928
2951
  },
2929
2952
  "senderLabel": {
@@ -3044,6 +3067,20 @@
3044
3067
  "createdAt"
3045
3068
  ]
3046
3069
  },
3070
+ "UserCommsPrefs": {
3071
+ "type": "object",
3072
+ "properties": {
3073
+ "tone": {
3074
+ "type": "string"
3075
+ },
3076
+ "language": {
3077
+ "type": "string"
3078
+ },
3079
+ "verbosity": {
3080
+ "type": "string"
3081
+ }
3082
+ }
3083
+ },
3047
3084
  "Page": {
3048
3085
  "type": "object",
3049
3086
  "properties": {
@@ -3330,20 +3367,6 @@
3330
3367
  "changeReason"
3331
3368
  ]
3332
3369
  },
3333
- "UserCommsPrefs": {
3334
- "type": "object",
3335
- "properties": {
3336
- "tone": {
3337
- "type": "string"
3338
- },
3339
- "language": {
3340
- "type": "string"
3341
- },
3342
- "verbosity": {
3343
- "type": "string"
3344
- }
3345
- }
3346
- },
3347
3370
  "BudgetRefusedTrigger": {
3348
3371
  "type": "object",
3349
3372
  "properties": {
@@ -4415,93 +4438,6 @@
4415
4438
  "installedAt"
4416
4439
  ]
4417
4440
  },
4418
- "Service": {
4419
- "type": "object",
4420
- "properties": {
4421
- "id": {
4422
- "type": "string",
4423
- "format": "uuid"
4424
- },
4425
- "agentId": {
4426
- "type": "string"
4427
- },
4428
- "name": {
4429
- "type": "string",
4430
- "minLength": 1,
4431
- "maxLength": 50
4432
- },
4433
- "port": {
4434
- "type": "integer",
4435
- "minimum": 1,
4436
- "maximum": 65535,
4437
- "default": 3000
4438
- },
4439
- "description": {
4440
- "type": "string"
4441
- },
4442
- "url": {
4443
- "type": "string",
4444
- "format": "uri"
4445
- },
4446
- "healthCheckPath": {
4447
- "type": "string",
4448
- "default": "/health"
4449
- },
4450
- "status": {
4451
- "type": "string",
4452
- "enum": [
4453
- "starting",
4454
- "healthy",
4455
- "unhealthy",
4456
- "stopped"
4457
- ],
4458
- "default": "starting"
4459
- },
4460
- "script": {
4461
- "type": "string",
4462
- "minLength": 1
4463
- },
4464
- "cwd": {
4465
- "type": "string"
4466
- },
4467
- "interpreter": {
4468
- "type": "string"
4469
- },
4470
- "args": {
4471
- "type": "array",
4472
- "items": {
4473
- "type": "string"
4474
- }
4475
- },
4476
- "env": {
4477
- "type": "object",
4478
- "additionalProperties": {
4479
- "type": "string"
4480
- }
4481
- },
4482
- "metadata": {
4483
- "type": "object",
4484
- "additionalProperties": {},
4485
- "default": {}
4486
- },
4487
- "createdAt": {
4488
- "type": "string",
4489
- "format": "date-time"
4490
- },
4491
- "lastUpdatedAt": {
4492
- "type": "string",
4493
- "format": "date-time"
4494
- }
4495
- },
4496
- "required": [
4497
- "id",
4498
- "agentId",
4499
- "name",
4500
- "script",
4501
- "createdAt",
4502
- "lastUpdatedAt"
4503
- ]
4504
- },
4505
4441
  "TaskTemplate": {
4506
4442
  "type": "object",
4507
4443
  "properties": {
@@ -4950,7 +4886,9 @@
4950
4886
  "eventName": {
4951
4887
  "type": "string",
4952
4888
  "enum": [
4953
- "slack.message"
4889
+ "slack.message",
4890
+ "azure-devops.work_item.assigned",
4891
+ "azure-devops.work_item.commented"
4954
4892
  ]
4955
4893
  }
4956
4894
  },
@@ -5627,7 +5565,9 @@
5627
5565
  "eventName": {
5628
5566
  "type": "string",
5629
5567
  "enum": [
5630
- "slack.message"
5568
+ "slack.message",
5569
+ "azure-devops.work_item.assigned",
5570
+ "azure-devops.work_item.commented"
5631
5571
  ]
5632
5572
  }
5633
5573
  },
@@ -7241,6 +7181,13 @@
7241
7181
  "createdAt",
7242
7182
  "updatedAt"
7243
7183
  ]
7184
+ },
7185
+ "warnings": {
7186
+ "type": "array",
7187
+ "items": {
7188
+ "type": "string"
7189
+ },
7190
+ "description": "Advisory quickjs-executor compatibility findings for the app's scripts."
7244
7191
  }
7245
7192
  },
7246
7193
  "required": [
@@ -7747,6 +7694,13 @@
7747
7694
  "orphanFields",
7748
7695
  "userConfigChanged"
7749
7696
  ]
7697
+ },
7698
+ "warnings": {
7699
+ "type": "array",
7700
+ "items": {
7701
+ "type": "string"
7702
+ },
7703
+ "description": "Advisory quickjs-executor compatibility findings for the app's scripts."
7750
7704
  }
7751
7705
  },
7752
7706
  "required": [
@@ -8265,6 +8219,13 @@
8265
8219
  "orphanFields",
8266
8220
  "userConfigChanged"
8267
8221
  ]
8222
+ },
8223
+ "warnings": {
8224
+ "type": "array",
8225
+ "items": {
8226
+ "type": "string"
8227
+ },
8228
+ "description": "Advisory quickjs-executor compatibility findings for the app's scripts."
8268
8229
  }
8269
8230
  },
8270
8231
  "required": [
@@ -8619,6 +8580,13 @@
8619
8580
  "orphanFields",
8620
8581
  "userConfigChanged"
8621
8582
  ]
8583
+ },
8584
+ "warnings": {
8585
+ "type": "array",
8586
+ "items": {
8587
+ "type": "string"
8588
+ },
8589
+ "description": "Advisory quickjs-executor compatibility findings for the app's scripts."
8622
8590
  }
8623
8591
  },
8624
8592
  "required": [
@@ -10255,7 +10223,6 @@
10255
10223
  "prompt-templates",
10256
10224
  "mcp",
10257
10225
  "profiles",
10258
- "services",
10259
10226
  "scheduling",
10260
10227
  "memory",
10261
10228
  "workflows",
@@ -10269,6 +10236,7 @@
10269
10236
  "repo",
10270
10237
  "agentmail",
10271
10238
  "kapso",
10239
+ "chat-sdk",
10272
10240
  "swarm-x"
10273
10241
  ]
10274
10242
  }
@@ -10318,7 +10286,6 @@
10318
10286
  "prompt-templates",
10319
10287
  "mcp",
10320
10288
  "profiles",
10321
- "services",
10322
10289
  "scheduling",
10323
10290
  "memory",
10324
10291
  "workflows",
@@ -10332,6 +10299,7 @@
10332
10299
  "repo",
10333
10300
  "agentmail",
10334
10301
  "kapso",
10302
+ "chat-sdk",
10335
10303
  "swarm-x"
10336
10304
  ]
10337
10305
  }
@@ -10691,7 +10659,7 @@
10691
10659
  },
10692
10660
  "patch": {
10693
10661
  "summary": "Update an agent's runtime harness and default model",
10694
- "description": "Updates `agents.harness_provider` and agent-scoped runtime config. The settings apply to future provider sessions. For `model`, `reasoning_effort`, and `claude.transport`: omit the field to leave it unchanged, send `null` to clear the corresponding override, or send a value to set it. A `model` the model catalog does not list is a 400 unless `allow_custom_model` is true. A `latest:` alias is not accepted here (aliases resolve for a task's model and for `MODEL_TIER_*` values); `reasoning_effort` must be one the harness and model support.",
10662
+ "description": "Updates `agents.harness_provider` and agent-scoped runtime config. The settings apply to future provider sessions. For `model`, `reasoning_effort`, and `claude.transport`: omit the field to leave it unchanged, send `null` to clear the corresponding override, or send a value to set it. A `model` the model catalog does not list is a 400 unless `allow_custom_model` is true. A `latest:` alias is not accepted here (aliases resolve for a task's model and for `MODEL_TIER_*` values); `reasoning_effort` must be one the harness and model support. `profile` sets the agent's default model profile (same tri-state): it must exist and run on `harness_provider`, and it cannot be sent with `model`. Sending `model`, or changing the model or effort override by any path, clears the default profile.",
10695
10663
  "tags": [
10696
10664
  "Agents"
10697
10665
  ],
@@ -10764,6 +10732,13 @@
10764
10732
  null
10765
10733
  ]
10766
10734
  },
10735
+ "profile": {
10736
+ "type": [
10737
+ "string",
10738
+ "null"
10739
+ ],
10740
+ "minLength": 1
10741
+ },
10767
10742
  "acp": {
10768
10743
  "type": "object",
10769
10744
  "properties": {
@@ -15734,6 +15709,10 @@
15734
15709
  "string",
15735
15710
  "null"
15736
15711
  ]
15712
+ },
15713
+ "exportToEnv": {
15714
+ "type": "boolean",
15715
+ "description": "Export this row into agent process env (default true on create, false for a few server-side secrets; omitted on update keeps the stored flag). Rejected as true for keys only the API server reads."
15737
15716
  }
15738
15717
  },
15739
15718
  "required": [
@@ -16674,71 +16653,97 @@
16674
16653
  }
16675
16654
  }
16676
16655
  },
16677
- "/ecosystem": {
16678
- "get": {
16679
- "summary": "Get PM2 ecosystem config for agent services",
16656
+ "/api/keys/report-usage": {
16657
+ "post": {
16658
+ "summary": "Record which API key was used for a task",
16680
16659
  "tags": [
16681
- "Ecosystem"
16660
+ "API Keys"
16682
16661
  ],
16683
16662
  "security": [
16684
16663
  {
16685
16664
  "bearerAuth": []
16686
16665
  }
16687
16666
  ],
16667
+ "requestBody": {
16668
+ "content": {
16669
+ "application/json": {
16670
+ "schema": {
16671
+ "type": "object",
16672
+ "properties": {
16673
+ "keyType": {
16674
+ "type": "string"
16675
+ },
16676
+ "keySuffix": {
16677
+ "type": "string",
16678
+ "minLength": 1,
16679
+ "maxLength": 10
16680
+ },
16681
+ "keyIndex": {
16682
+ "type": "integer",
16683
+ "minimum": 0
16684
+ },
16685
+ "taskId": {
16686
+ "type": "string",
16687
+ "format": "uuid"
16688
+ },
16689
+ "scope": {
16690
+ "type": "string"
16691
+ },
16692
+ "scopeId": {
16693
+ "type": "string"
16694
+ },
16695
+ "plan": {
16696
+ "type": "string",
16697
+ "maxLength": 40
16698
+ }
16699
+ },
16700
+ "required": [
16701
+ "keyType",
16702
+ "keySuffix",
16703
+ "keyIndex"
16704
+ ]
16705
+ }
16706
+ }
16707
+ }
16708
+ },
16688
16709
  "responses": {
16689
16710
  "200": {
16690
- "description": "PM2 ecosystem config",
16711
+ "description": "Usage recorded",
16691
16712
  "content": {
16692
16713
  "application/json": {
16693
16714
  "schema": {
16694
16715
  "type": "object",
16695
16716
  "properties": {
16696
- "apps": {
16697
- "type": "array",
16698
- "items": {
16699
- "type": "object",
16700
- "properties": {
16701
- "name": {
16702
- "type": "string"
16703
- },
16704
- "script": {
16705
- "type": "string"
16706
- },
16707
- "cwd": {
16708
- "type": "string"
16709
- },
16710
- "interpreter": {
16711
- "type": "string"
16712
- },
16713
- "args": {
16714
- "type": "array",
16715
- "items": {
16716
- "type": "string"
16717
- }
16718
- },
16719
- "env": {
16720
- "type": "object",
16721
- "additionalProperties": {
16722
- "type": "string"
16723
- }
16724
- }
16725
- },
16726
- "required": [
16727
- "name",
16728
- "script"
16729
- ]
16730
- }
16717
+ "success": {
16718
+ "type": "boolean",
16719
+ "enum": [
16720
+ true
16721
+ ]
16722
+ },
16723
+ "message": {
16724
+ "type": "string"
16731
16725
  }
16732
16726
  },
16733
16727
  "required": [
16734
- "apps"
16728
+ "success",
16729
+ "message"
16735
16730
  ]
16736
16731
  }
16737
16732
  }
16738
16733
  }
16739
16734
  },
16740
16735
  "400": {
16741
- "description": "Missing X-Agent-ID",
16736
+ "description": "Validation error",
16737
+ "content": {
16738
+ "application/json": {
16739
+ "schema": {
16740
+ "$ref": "#/components/schemas/ErrorResponse"
16741
+ }
16742
+ }
16743
+ }
16744
+ },
16745
+ "401": {
16746
+ "description": "Unauthorized",
16742
16747
  "content": {
16743
16748
  "application/json": {
16744
16749
  "schema": {
@@ -16750,9 +16755,9 @@
16750
16755
  }
16751
16756
  }
16752
16757
  },
16753
- "/api/keys/report-usage": {
16758
+ "/api/keys/report-rate-limit": {
16754
16759
  "post": {
16755
- "summary": "Record which API key was used for a task",
16760
+ "summary": "Mark an API key as rate-limited",
16756
16761
  "tags": [
16757
16762
  "API Keys"
16758
16763
  ],
@@ -16779,25 +16784,22 @@
16779
16784
  "type": "integer",
16780
16785
  "minimum": 0
16781
16786
  },
16782
- "taskId": {
16787
+ "rateLimitedUntil": {
16783
16788
  "type": "string",
16784
- "format": "uuid"
16789
+ "format": "date-time"
16785
16790
  },
16786
16791
  "scope": {
16787
16792
  "type": "string"
16788
16793
  },
16789
16794
  "scopeId": {
16790
16795
  "type": "string"
16791
- },
16792
- "plan": {
16793
- "type": "string",
16794
- "maxLength": 40
16795
16796
  }
16796
16797
  },
16797
16798
  "required": [
16798
16799
  "keyType",
16799
16800
  "keySuffix",
16800
- "keyIndex"
16801
+ "keyIndex",
16802
+ "rateLimitedUntil"
16801
16803
  ]
16802
16804
  }
16803
16805
  }
@@ -16805,106 +16807,7 @@
16805
16807
  },
16806
16808
  "responses": {
16807
16809
  "200": {
16808
- "description": "Usage recorded",
16809
- "content": {
16810
- "application/json": {
16811
- "schema": {
16812
- "type": "object",
16813
- "properties": {
16814
- "success": {
16815
- "type": "boolean",
16816
- "enum": [
16817
- true
16818
- ]
16819
- },
16820
- "message": {
16821
- "type": "string"
16822
- }
16823
- },
16824
- "required": [
16825
- "success",
16826
- "message"
16827
- ]
16828
- }
16829
- }
16830
- }
16831
- },
16832
- "400": {
16833
- "description": "Validation error",
16834
- "content": {
16835
- "application/json": {
16836
- "schema": {
16837
- "$ref": "#/components/schemas/ErrorResponse"
16838
- }
16839
- }
16840
- }
16841
- },
16842
- "401": {
16843
- "description": "Unauthorized",
16844
- "content": {
16845
- "application/json": {
16846
- "schema": {
16847
- "$ref": "#/components/schemas/ErrorResponse"
16848
- }
16849
- }
16850
- }
16851
- }
16852
- }
16853
- }
16854
- },
16855
- "/api/keys/report-rate-limit": {
16856
- "post": {
16857
- "summary": "Mark an API key as rate-limited",
16858
- "tags": [
16859
- "API Keys"
16860
- ],
16861
- "security": [
16862
- {
16863
- "bearerAuth": []
16864
- }
16865
- ],
16866
- "requestBody": {
16867
- "content": {
16868
- "application/json": {
16869
- "schema": {
16870
- "type": "object",
16871
- "properties": {
16872
- "keyType": {
16873
- "type": "string"
16874
- },
16875
- "keySuffix": {
16876
- "type": "string",
16877
- "minLength": 1,
16878
- "maxLength": 10
16879
- },
16880
- "keyIndex": {
16881
- "type": "integer",
16882
- "minimum": 0
16883
- },
16884
- "rateLimitedUntil": {
16885
- "type": "string",
16886
- "format": "date-time"
16887
- },
16888
- "scope": {
16889
- "type": "string"
16890
- },
16891
- "scopeId": {
16892
- "type": "string"
16893
- }
16894
- },
16895
- "required": [
16896
- "keyType",
16897
- "keySuffix",
16898
- "keyIndex",
16899
- "rateLimitedUntil"
16900
- ]
16901
- }
16902
- }
16903
- }
16904
- },
16905
- "responses": {
16906
- "200": {
16907
- "description": "Key marked as rate-limited",
16810
+ "description": "Key marked as rate-limited",
16908
16811
  "content": {
16909
16812
  "application/json": {
16910
16813
  "schema": {
@@ -21106,6 +21009,247 @@
21106
21009
  }
21107
21010
  }
21108
21011
  },
21012
+ "/api/integrations/chat/status": {
21013
+ "get": {
21014
+ "summary": "Chat SDK channel status: enabled flag, Slack clash, per-adapter health and webhook URL.",
21015
+ "tags": [
21016
+ "Integrations"
21017
+ ],
21018
+ "security": [
21019
+ {
21020
+ "bearerAuth": []
21021
+ }
21022
+ ],
21023
+ "responses": {
21024
+ "200": {
21025
+ "description": "Per-adapter status. `health` is `disabled` for an adapter that is not running. Never contains secret values.",
21026
+ "content": {
21027
+ "application/json": {
21028
+ "schema": {
21029
+ "type": "object",
21030
+ "properties": {
21031
+ "enabled": {
21032
+ "type": "boolean"
21033
+ },
21034
+ "slackClash": {
21035
+ "type": "boolean"
21036
+ },
21037
+ "error": {
21038
+ "type": "string"
21039
+ },
21040
+ "adapters": {
21041
+ "type": "array",
21042
+ "items": {
21043
+ "type": "object",
21044
+ "properties": {
21045
+ "name": {
21046
+ "type": "string",
21047
+ "enum": [
21048
+ "telegram",
21049
+ "slack",
21050
+ "discord",
21051
+ "teams"
21052
+ ]
21053
+ },
21054
+ "configured": {
21055
+ "type": "boolean"
21056
+ },
21057
+ "enabled": {
21058
+ "type": "boolean"
21059
+ },
21060
+ "health": {
21061
+ "type": "string",
21062
+ "enum": [
21063
+ "ok",
21064
+ "error",
21065
+ "disabled",
21066
+ "incomplete"
21067
+ ]
21068
+ },
21069
+ "error": {
21070
+ "type": "string"
21071
+ },
21072
+ "webhookUrl": {
21073
+ "type": "string"
21074
+ },
21075
+ "mode": {
21076
+ "type": "string"
21077
+ },
21078
+ "gateway": {
21079
+ "type": "object",
21080
+ "properties": {
21081
+ "state": {
21082
+ "type": "string",
21083
+ "enum": [
21084
+ "running",
21085
+ "backoff",
21086
+ "stopped"
21087
+ ]
21088
+ },
21089
+ "since": {
21090
+ "type": "string"
21091
+ },
21092
+ "restarts": {
21093
+ "type": "number"
21094
+ }
21095
+ },
21096
+ "required": [
21097
+ "state",
21098
+ "since",
21099
+ "restarts"
21100
+ ]
21101
+ },
21102
+ "guilds": {
21103
+ "type": "object",
21104
+ "properties": {
21105
+ "count": {
21106
+ "type": "number"
21107
+ },
21108
+ "names": {
21109
+ "type": "array",
21110
+ "items": {
21111
+ "type": "string"
21112
+ }
21113
+ }
21114
+ },
21115
+ "required": [
21116
+ "count",
21117
+ "names"
21118
+ ]
21119
+ }
21120
+ },
21121
+ "required": [
21122
+ "name",
21123
+ "configured",
21124
+ "enabled",
21125
+ "health",
21126
+ "webhookUrl"
21127
+ ]
21128
+ }
21129
+ }
21130
+ },
21131
+ "required": [
21132
+ "enabled",
21133
+ "slackClash",
21134
+ "adapters"
21135
+ ]
21136
+ }
21137
+ }
21138
+ }
21139
+ }
21140
+ }
21141
+ }
21142
+ },
21143
+ "/api/integrations/chat/telegram/register-webhook": {
21144
+ "post": {
21145
+ "summary": "Register this swarm's public Telegram webhook URL and secret token with the Bot API (setWebhook), then return getWebhookInfo.",
21146
+ "tags": [
21147
+ "Integrations"
21148
+ ],
21149
+ "security": [
21150
+ {
21151
+ "bearerAuth": []
21152
+ }
21153
+ ],
21154
+ "requestBody": {
21155
+ "content": {
21156
+ "application/json": {
21157
+ "schema": {
21158
+ "type": "object",
21159
+ "properties": {}
21160
+ }
21161
+ }
21162
+ }
21163
+ },
21164
+ "responses": {
21165
+ "200": {
21166
+ "description": "Webhook registered",
21167
+ "content": {
21168
+ "application/json": {
21169
+ "schema": {
21170
+ "type": "object",
21171
+ "properties": {
21172
+ "webhookUrl": {
21173
+ "type": "string"
21174
+ },
21175
+ "webhookInfo": {
21176
+ "type": "object",
21177
+ "properties": {
21178
+ "url": {
21179
+ "type": "string"
21180
+ },
21181
+ "has_custom_certificate": {
21182
+ "type": "boolean"
21183
+ },
21184
+ "pending_update_count": {
21185
+ "type": "number"
21186
+ },
21187
+ "last_error_date": {
21188
+ "type": "number"
21189
+ },
21190
+ "last_error_message": {
21191
+ "type": "string"
21192
+ },
21193
+ "max_connections": {
21194
+ "type": "number"
21195
+ },
21196
+ "ip_address": {
21197
+ "type": "string"
21198
+ },
21199
+ "allowed_updates": {
21200
+ "type": "array",
21201
+ "items": {
21202
+ "type": "string"
21203
+ }
21204
+ }
21205
+ },
21206
+ "required": [
21207
+ "url"
21208
+ ],
21209
+ "additionalProperties": {}
21210
+ }
21211
+ },
21212
+ "required": [
21213
+ "webhookUrl",
21214
+ "webhookInfo"
21215
+ ]
21216
+ }
21217
+ }
21218
+ }
21219
+ },
21220
+ "400": {
21221
+ "description": "Telegram is not configured for webhook mode",
21222
+ "content": {
21223
+ "application/json": {
21224
+ "schema": {
21225
+ "$ref": "#/components/schemas/ErrorResponse"
21226
+ }
21227
+ }
21228
+ }
21229
+ },
21230
+ "403": {
21231
+ "description": "Only the lead agent or a dashboard user can register the webhook",
21232
+ "content": {
21233
+ "application/json": {
21234
+ "schema": {
21235
+ "$ref": "#/components/schemas/ErrorResponse"
21236
+ }
21237
+ }
21238
+ }
21239
+ },
21240
+ "502": {
21241
+ "description": "The Telegram Bot API rejected the call",
21242
+ "content": {
21243
+ "application/json": {
21244
+ "schema": {
21245
+ "$ref": "#/components/schemas/ErrorResponse"
21246
+ }
21247
+ }
21248
+ }
21249
+ }
21250
+ }
21251
+ }
21252
+ },
21109
21253
  "/api/kv/{key}": {
21110
21254
  "get": {
21111
21255
  "summary": "Get a KV entry by key (namespace resolved from request headers)",
@@ -25129,6 +25273,710 @@
25129
25273
  }
25130
25274
  }
25131
25275
  },
25276
+ "/api/model-profiles": {
25277
+ "get": {
25278
+ "summary": "List model profiles",
25279
+ "description": "Every model profile, ordered by harness then name. Filter by `harness` to see what an agent on that harness can run.",
25280
+ "tags": [
25281
+ "Models"
25282
+ ],
25283
+ "security": [
25284
+ {
25285
+ "bearerAuth": []
25286
+ }
25287
+ ],
25288
+ "parameters": [
25289
+ {
25290
+ "schema": {
25291
+ "type": "string",
25292
+ "enum": [
25293
+ "claude",
25294
+ "codex",
25295
+ "pi",
25296
+ "devin",
25297
+ "claude-managed",
25298
+ "opencode",
25299
+ "acp",
25300
+ "dsh",
25301
+ "amp",
25302
+ "cursor",
25303
+ "grok"
25304
+ ]
25305
+ },
25306
+ "required": false,
25307
+ "name": "harness",
25308
+ "in": "query"
25309
+ }
25310
+ ],
25311
+ "responses": {
25312
+ "200": {
25313
+ "description": "Model profiles",
25314
+ "content": {
25315
+ "application/json": {
25316
+ "schema": {
25317
+ "type": "object",
25318
+ "properties": {
25319
+ "profiles": {
25320
+ "type": "array",
25321
+ "items": {
25322
+ "type": "object",
25323
+ "properties": {
25324
+ "id": {
25325
+ "type": "string"
25326
+ },
25327
+ "name": {
25328
+ "type": "string"
25329
+ },
25330
+ "harness": {
25331
+ "type": "string",
25332
+ "enum": [
25333
+ "claude",
25334
+ "codex",
25335
+ "pi",
25336
+ "devin",
25337
+ "claude-managed",
25338
+ "opencode",
25339
+ "acp",
25340
+ "dsh",
25341
+ "amp",
25342
+ "cursor",
25343
+ "grok"
25344
+ ]
25345
+ },
25346
+ "model": {
25347
+ "type": "string"
25348
+ },
25349
+ "effort": {
25350
+ "type": [
25351
+ "string",
25352
+ "null"
25353
+ ],
25354
+ "enum": [
25355
+ "off",
25356
+ "low",
25357
+ "medium",
25358
+ "high",
25359
+ "xhigh",
25360
+ "max",
25361
+ null
25362
+ ]
25363
+ },
25364
+ "allowCustomModel": {
25365
+ "type": "boolean"
25366
+ },
25367
+ "description": {
25368
+ "type": [
25369
+ "string",
25370
+ "null"
25371
+ ]
25372
+ },
25373
+ "seededFrom": {
25374
+ "type": [
25375
+ "string",
25376
+ "null"
25377
+ ]
25378
+ },
25379
+ "createdAt": {
25380
+ "type": "string"
25381
+ },
25382
+ "lastUpdatedAt": {
25383
+ "type": "string"
25384
+ }
25385
+ },
25386
+ "required": [
25387
+ "id",
25388
+ "name",
25389
+ "harness",
25390
+ "model",
25391
+ "effort",
25392
+ "allowCustomModel",
25393
+ "description",
25394
+ "seededFrom",
25395
+ "createdAt",
25396
+ "lastUpdatedAt"
25397
+ ]
25398
+ }
25399
+ }
25400
+ },
25401
+ "required": [
25402
+ "profiles"
25403
+ ]
25404
+ }
25405
+ }
25406
+ }
25407
+ }
25408
+ }
25409
+ },
25410
+ "post": {
25411
+ "summary": "Create a model profile",
25412
+ "description": "A profile runs on one harness. `model` must run on that harness and be in the model catalog unless `allowCustomModel` is true (a gateway id, a fresh launch); a `latest:` alias is accepted and resolves at claim. `effort` must be a level the harness and model support. Operator only (the shared API key).",
25413
+ "tags": [
25414
+ "Models"
25415
+ ],
25416
+ "security": [
25417
+ {
25418
+ "bearerAuth": []
25419
+ }
25420
+ ],
25421
+ "requestBody": {
25422
+ "content": {
25423
+ "application/json": {
25424
+ "schema": {
25425
+ "type": "object",
25426
+ "properties": {
25427
+ "name": {
25428
+ "type": "string",
25429
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,99}$"
25430
+ },
25431
+ "harness": {
25432
+ "type": "string",
25433
+ "enum": [
25434
+ "claude",
25435
+ "codex",
25436
+ "pi",
25437
+ "devin",
25438
+ "claude-managed",
25439
+ "opencode",
25440
+ "acp",
25441
+ "dsh",
25442
+ "amp",
25443
+ "cursor",
25444
+ "grok"
25445
+ ]
25446
+ },
25447
+ "model": {
25448
+ "type": "string",
25449
+ "minLength": 1
25450
+ },
25451
+ "effort": {
25452
+ "type": [
25453
+ "string",
25454
+ "null"
25455
+ ],
25456
+ "enum": [
25457
+ "off",
25458
+ "low",
25459
+ "medium",
25460
+ "high",
25461
+ "xhigh",
25462
+ "max",
25463
+ null
25464
+ ]
25465
+ },
25466
+ "allowCustomModel": {
25467
+ "type": "boolean",
25468
+ "default": false
25469
+ },
25470
+ "description": {
25471
+ "type": [
25472
+ "string",
25473
+ "null"
25474
+ ],
25475
+ "maxLength": 500
25476
+ }
25477
+ },
25478
+ "required": [
25479
+ "name",
25480
+ "harness",
25481
+ "model"
25482
+ ]
25483
+ }
25484
+ }
25485
+ }
25486
+ },
25487
+ "responses": {
25488
+ "201": {
25489
+ "description": "Profile created",
25490
+ "content": {
25491
+ "application/json": {
25492
+ "schema": {
25493
+ "type": "object",
25494
+ "properties": {
25495
+ "id": {
25496
+ "type": "string"
25497
+ },
25498
+ "name": {
25499
+ "type": "string"
25500
+ },
25501
+ "harness": {
25502
+ "type": "string",
25503
+ "enum": [
25504
+ "claude",
25505
+ "codex",
25506
+ "pi",
25507
+ "devin",
25508
+ "claude-managed",
25509
+ "opencode",
25510
+ "acp",
25511
+ "dsh",
25512
+ "amp",
25513
+ "cursor",
25514
+ "grok"
25515
+ ]
25516
+ },
25517
+ "model": {
25518
+ "type": "string"
25519
+ },
25520
+ "effort": {
25521
+ "type": [
25522
+ "string",
25523
+ "null"
25524
+ ],
25525
+ "enum": [
25526
+ "off",
25527
+ "low",
25528
+ "medium",
25529
+ "high",
25530
+ "xhigh",
25531
+ "max",
25532
+ null
25533
+ ]
25534
+ },
25535
+ "allowCustomModel": {
25536
+ "type": "boolean"
25537
+ },
25538
+ "description": {
25539
+ "type": [
25540
+ "string",
25541
+ "null"
25542
+ ]
25543
+ },
25544
+ "seededFrom": {
25545
+ "type": [
25546
+ "string",
25547
+ "null"
25548
+ ]
25549
+ },
25550
+ "createdAt": {
25551
+ "type": "string"
25552
+ },
25553
+ "lastUpdatedAt": {
25554
+ "type": "string"
25555
+ }
25556
+ },
25557
+ "required": [
25558
+ "id",
25559
+ "name",
25560
+ "harness",
25561
+ "model",
25562
+ "effort",
25563
+ "allowCustomModel",
25564
+ "description",
25565
+ "seededFrom",
25566
+ "createdAt",
25567
+ "lastUpdatedAt"
25568
+ ]
25569
+ }
25570
+ }
25571
+ }
25572
+ },
25573
+ "400": {
25574
+ "description": "Validation error",
25575
+ "content": {
25576
+ "application/json": {
25577
+ "schema": {
25578
+ "$ref": "#/components/schemas/ErrorResponse"
25579
+ }
25580
+ }
25581
+ }
25582
+ },
25583
+ "403": {
25584
+ "description": "Forbidden",
25585
+ "content": {
25586
+ "application/json": {
25587
+ "schema": {
25588
+ "$ref": "#/components/schemas/ErrorResponse"
25589
+ }
25590
+ }
25591
+ }
25592
+ },
25593
+ "409": {
25594
+ "description": "A profile with that name exists",
25595
+ "content": {
25596
+ "application/json": {
25597
+ "schema": {
25598
+ "$ref": "#/components/schemas/ErrorResponse"
25599
+ }
25600
+ }
25601
+ }
25602
+ }
25603
+ }
25604
+ }
25605
+ },
25606
+ "/api/model-profiles/{name}": {
25607
+ "get": {
25608
+ "summary": "Get one model profile",
25609
+ "tags": [
25610
+ "Models"
25611
+ ],
25612
+ "security": [
25613
+ {
25614
+ "bearerAuth": []
25615
+ }
25616
+ ],
25617
+ "parameters": [
25618
+ {
25619
+ "schema": {
25620
+ "type": "string"
25621
+ },
25622
+ "required": true,
25623
+ "name": "name",
25624
+ "in": "path"
25625
+ }
25626
+ ],
25627
+ "responses": {
25628
+ "200": {
25629
+ "description": "The model profile",
25630
+ "content": {
25631
+ "application/json": {
25632
+ "schema": {
25633
+ "type": "object",
25634
+ "properties": {
25635
+ "id": {
25636
+ "type": "string"
25637
+ },
25638
+ "name": {
25639
+ "type": "string"
25640
+ },
25641
+ "harness": {
25642
+ "type": "string",
25643
+ "enum": [
25644
+ "claude",
25645
+ "codex",
25646
+ "pi",
25647
+ "devin",
25648
+ "claude-managed",
25649
+ "opencode",
25650
+ "acp",
25651
+ "dsh",
25652
+ "amp",
25653
+ "cursor",
25654
+ "grok"
25655
+ ]
25656
+ },
25657
+ "model": {
25658
+ "type": "string"
25659
+ },
25660
+ "effort": {
25661
+ "type": [
25662
+ "string",
25663
+ "null"
25664
+ ],
25665
+ "enum": [
25666
+ "off",
25667
+ "low",
25668
+ "medium",
25669
+ "high",
25670
+ "xhigh",
25671
+ "max",
25672
+ null
25673
+ ]
25674
+ },
25675
+ "allowCustomModel": {
25676
+ "type": "boolean"
25677
+ },
25678
+ "description": {
25679
+ "type": [
25680
+ "string",
25681
+ "null"
25682
+ ]
25683
+ },
25684
+ "seededFrom": {
25685
+ "type": [
25686
+ "string",
25687
+ "null"
25688
+ ]
25689
+ },
25690
+ "createdAt": {
25691
+ "type": "string"
25692
+ },
25693
+ "lastUpdatedAt": {
25694
+ "type": "string"
25695
+ }
25696
+ },
25697
+ "required": [
25698
+ "id",
25699
+ "name",
25700
+ "harness",
25701
+ "model",
25702
+ "effort",
25703
+ "allowCustomModel",
25704
+ "description",
25705
+ "seededFrom",
25706
+ "createdAt",
25707
+ "lastUpdatedAt"
25708
+ ]
25709
+ }
25710
+ }
25711
+ }
25712
+ },
25713
+ "404": {
25714
+ "description": "No profile with that name",
25715
+ "content": {
25716
+ "application/json": {
25717
+ "schema": {
25718
+ "$ref": "#/components/schemas/ErrorResponse"
25719
+ }
25720
+ }
25721
+ }
25722
+ }
25723
+ }
25724
+ },
25725
+ "patch": {
25726
+ "summary": "Update a model profile",
25727
+ "description": "Changes the model, effort, custom-model flag or description; the name and harness are fixed. Omit a field to keep it; `effort: null` clears it. Applies to tasks claimed after the change. Operator only (the shared API key).",
25728
+ "tags": [
25729
+ "Models"
25730
+ ],
25731
+ "security": [
25732
+ {
25733
+ "bearerAuth": []
25734
+ }
25735
+ ],
25736
+ "parameters": [
25737
+ {
25738
+ "schema": {
25739
+ "type": "string"
25740
+ },
25741
+ "required": true,
25742
+ "name": "name",
25743
+ "in": "path"
25744
+ }
25745
+ ],
25746
+ "requestBody": {
25747
+ "content": {
25748
+ "application/json": {
25749
+ "schema": {
25750
+ "type": "object",
25751
+ "properties": {
25752
+ "model": {
25753
+ "type": "string",
25754
+ "minLength": 1
25755
+ },
25756
+ "effort": {
25757
+ "type": [
25758
+ "string",
25759
+ "null"
25760
+ ],
25761
+ "enum": [
25762
+ "off",
25763
+ "low",
25764
+ "medium",
25765
+ "high",
25766
+ "xhigh",
25767
+ "max",
25768
+ null
25769
+ ]
25770
+ },
25771
+ "allowCustomModel": {
25772
+ "type": "boolean"
25773
+ },
25774
+ "description": {
25775
+ "type": [
25776
+ "string",
25777
+ "null"
25778
+ ],
25779
+ "maxLength": 500
25780
+ }
25781
+ }
25782
+ }
25783
+ }
25784
+ }
25785
+ },
25786
+ "responses": {
25787
+ "200": {
25788
+ "description": "Profile updated",
25789
+ "content": {
25790
+ "application/json": {
25791
+ "schema": {
25792
+ "type": "object",
25793
+ "properties": {
25794
+ "id": {
25795
+ "type": "string"
25796
+ },
25797
+ "name": {
25798
+ "type": "string"
25799
+ },
25800
+ "harness": {
25801
+ "type": "string",
25802
+ "enum": [
25803
+ "claude",
25804
+ "codex",
25805
+ "pi",
25806
+ "devin",
25807
+ "claude-managed",
25808
+ "opencode",
25809
+ "acp",
25810
+ "dsh",
25811
+ "amp",
25812
+ "cursor",
25813
+ "grok"
25814
+ ]
25815
+ },
25816
+ "model": {
25817
+ "type": "string"
25818
+ },
25819
+ "effort": {
25820
+ "type": [
25821
+ "string",
25822
+ "null"
25823
+ ],
25824
+ "enum": [
25825
+ "off",
25826
+ "low",
25827
+ "medium",
25828
+ "high",
25829
+ "xhigh",
25830
+ "max",
25831
+ null
25832
+ ]
25833
+ },
25834
+ "allowCustomModel": {
25835
+ "type": "boolean"
25836
+ },
25837
+ "description": {
25838
+ "type": [
25839
+ "string",
25840
+ "null"
25841
+ ]
25842
+ },
25843
+ "seededFrom": {
25844
+ "type": [
25845
+ "string",
25846
+ "null"
25847
+ ]
25848
+ },
25849
+ "createdAt": {
25850
+ "type": "string"
25851
+ },
25852
+ "lastUpdatedAt": {
25853
+ "type": "string"
25854
+ }
25855
+ },
25856
+ "required": [
25857
+ "id",
25858
+ "name",
25859
+ "harness",
25860
+ "model",
25861
+ "effort",
25862
+ "allowCustomModel",
25863
+ "description",
25864
+ "seededFrom",
25865
+ "createdAt",
25866
+ "lastUpdatedAt"
25867
+ ]
25868
+ }
25869
+ }
25870
+ }
25871
+ },
25872
+ "400": {
25873
+ "description": "Validation error",
25874
+ "content": {
25875
+ "application/json": {
25876
+ "schema": {
25877
+ "$ref": "#/components/schemas/ErrorResponse"
25878
+ }
25879
+ }
25880
+ }
25881
+ },
25882
+ "403": {
25883
+ "description": "Forbidden",
25884
+ "content": {
25885
+ "application/json": {
25886
+ "schema": {
25887
+ "$ref": "#/components/schemas/ErrorResponse"
25888
+ }
25889
+ }
25890
+ }
25891
+ },
25892
+ "404": {
25893
+ "description": "No profile with that name",
25894
+ "content": {
25895
+ "application/json": {
25896
+ "schema": {
25897
+ "$ref": "#/components/schemas/ErrorResponse"
25898
+ }
25899
+ }
25900
+ }
25901
+ }
25902
+ }
25903
+ },
25904
+ "delete": {
25905
+ "summary": "Delete a model profile",
25906
+ "description": "Refused (409) for a shipped `<harness>-<tier>` seed (edit it instead; it would come back at the next boot), and while an agent has the profile as its default or a task holds it (unfinished, or superseded and still owed its resume). Operator only (the shared API key).",
25907
+ "tags": [
25908
+ "Models"
25909
+ ],
25910
+ "security": [
25911
+ {
25912
+ "bearerAuth": []
25913
+ }
25914
+ ],
25915
+ "parameters": [
25916
+ {
25917
+ "schema": {
25918
+ "type": "string"
25919
+ },
25920
+ "required": true,
25921
+ "name": "name",
25922
+ "in": "path"
25923
+ }
25924
+ ],
25925
+ "responses": {
25926
+ "200": {
25927
+ "description": "Profile deleted",
25928
+ "content": {
25929
+ "application/json": {
25930
+ "schema": {
25931
+ "type": "object",
25932
+ "properties": {
25933
+ "deleted": {
25934
+ "type": "boolean",
25935
+ "enum": [
25936
+ true
25937
+ ]
25938
+ }
25939
+ },
25940
+ "required": [
25941
+ "deleted"
25942
+ ]
25943
+ }
25944
+ }
25945
+ }
25946
+ },
25947
+ "403": {
25948
+ "description": "Forbidden",
25949
+ "content": {
25950
+ "application/json": {
25951
+ "schema": {
25952
+ "$ref": "#/components/schemas/ErrorResponse"
25953
+ }
25954
+ }
25955
+ }
25956
+ },
25957
+ "404": {
25958
+ "description": "No profile with that name",
25959
+ "content": {
25960
+ "application/json": {
25961
+ "schema": {
25962
+ "$ref": "#/components/schemas/ErrorResponse"
25963
+ }
25964
+ }
25965
+ }
25966
+ },
25967
+ "409": {
25968
+ "description": "The profile is a seed or still in use",
25969
+ "content": {
25970
+ "application/json": {
25971
+ "schema": {
25972
+ "$ref": "#/components/schemas/ErrorResponse"
25973
+ }
25974
+ }
25975
+ }
25976
+ }
25977
+ }
25978
+ }
25979
+ },
25132
25980
  "/api/models-catalog": {
25133
25981
  "get": {
25134
25982
  "summary": "Get the live model catalog for the picker-reachable providers",
@@ -29856,7 +30704,8 @@
29856
30704
  "workflow",
29857
30705
  "linear",
29858
30706
  "jira",
29859
- "comb"
30707
+ "comb",
30708
+ "chat"
29860
30709
  ],
29861
30710
  "default": "mcp"
29862
30711
  },
@@ -29929,6 +30778,17 @@
29929
30778
  "max"
29930
30779
  ]
29931
30780
  },
30781
+ "resolvedEffort": {
30782
+ "type": "string",
30783
+ "enum": [
30784
+ "off",
30785
+ "low",
30786
+ "medium",
30787
+ "high",
30788
+ "xhigh",
30789
+ "max"
30790
+ ]
30791
+ },
29932
30792
  "provider": {
29933
30793
  "type": "string",
29934
30794
  "enum": [
@@ -30170,7 +31030,8 @@
30170
31030
  "workflow",
30171
31031
  "linear",
30172
31032
  "jira",
30173
- "comb"
31033
+ "comb",
31034
+ "chat"
30174
31035
  ]
30175
31036
  },
30176
31037
  "outputSchema": {
@@ -30210,6 +31071,10 @@
30210
31071
  "max"
30211
31072
  ]
30212
31073
  },
31074
+ "profile": {
31075
+ "type": "string",
31076
+ "minLength": 1
31077
+ },
30213
31078
  "draft": {
30214
31079
  "type": "boolean"
30215
31080
  }
@@ -30242,6 +31107,16 @@
30242
31107
  }
30243
31108
  }
30244
31109
  },
31110
+ "403": {
31111
+ "description": "An agent caller names a parentTaskId it neither owns nor created, or a non-lead agent binds the task to a chat thread",
31112
+ "content": {
31113
+ "application/json": {
31114
+ "schema": {
31115
+ "$ref": "#/components/schemas/ErrorResponse"
31116
+ }
31117
+ }
31118
+ }
31119
+ },
30245
31120
  "422": {
30246
31121
  "description": "Task creation blocked by an extension",
30247
31122
  "content": {
@@ -30426,6 +31301,21 @@
30426
31301
  "model": {
30427
31302
  "type": "string"
30428
31303
  },
31304
+ "effort": {
31305
+ "type": [
31306
+ "string",
31307
+ "null"
31308
+ ],
31309
+ "enum": [
31310
+ "off",
31311
+ "low",
31312
+ "medium",
31313
+ "high",
31314
+ "xhigh",
31315
+ "max",
31316
+ null
31317
+ ]
31318
+ },
30429
31319
  "providerMeta": {
30430
31320
  "type": "object",
30431
31321
  "properties": {
@@ -30613,7 +31503,8 @@
30613
31503
  "mcp",
30614
31504
  "script",
30615
31505
  "slack",
30616
- "api"
31506
+ "api",
31507
+ "chat"
30617
31508
  ]
30618
31509
  },
30619
31510
  "requestedByUserId": {
@@ -31530,6 +32421,33 @@
31530
32421
  "items": {
31531
32422
  "$ref": "#/components/schemas/TaskAttachment"
31532
32423
  }
32424
+ },
32425
+ "requestedBy": {
32426
+ "type": "object",
32427
+ "properties": {
32428
+ "id": {
32429
+ "type": "string"
32430
+ },
32431
+ "name": {
32432
+ "type": "string",
32433
+ "minLength": 1
32434
+ },
32435
+ "email": {
32436
+ "type": "string"
32437
+ },
32438
+ "role": {
32439
+ "type": "string"
32440
+ },
32441
+ "notes": {
32442
+ "type": "string"
32443
+ },
32444
+ "comms": {
32445
+ "$ref": "#/components/schemas/UserCommsPrefs"
32446
+ }
32447
+ },
32448
+ "required": [
32449
+ "name"
32450
+ ]
31533
32451
  }
31534
32452
  },
31535
32453
  "required": [
@@ -46110,7 +47028,8 @@
46110
47028
  "workflow",
46111
47029
  "linear",
46112
47030
  "jira",
46113
- "comb"
47031
+ "comb",
47032
+ "chat"
46114
47033
  ],
46115
47034
  "default": "mcp"
46116
47035
  },
@@ -48822,6 +49741,13 @@
48822
49741
  },
48823
49742
  "contentDeduped": {
48824
49743
  "type": "boolean"
49744
+ },
49745
+ "warnings": {
49746
+ "type": "array",
49747
+ "items": {
49748
+ "type": "string"
49749
+ },
49750
+ "description": "Advisory quickjs-executor compatibility findings. Never blocks the save."
48825
49751
  }
48826
49752
  },
48827
49753
  "required": [
@@ -49918,6 +50844,13 @@
49918
50844
  "string",
49919
50845
  "null"
49920
50846
  ]
50847
+ },
50848
+ "warnings": {
50849
+ "type": "array",
50850
+ "items": {
50851
+ "type": "string"
50852
+ },
50853
+ "description": "Advisory quickjs-executor compatibility findings for the script."
49921
50854
  }
49922
50855
  },
49923
50856
  "required": [
@@ -51429,68 +52362,6 @@
51429
52362
  }
51430
52363
  }
51431
52364
  },
51432
- "/api/services": {
51433
- "get": {
51434
- "summary": "List all registered services",
51435
- "tags": [
51436
- "Stats"
51437
- ],
51438
- "security": [
51439
- {
51440
- "bearerAuth": []
51441
- }
51442
- ],
51443
- "parameters": [
51444
- {
51445
- "schema": {
51446
- "type": "string"
51447
- },
51448
- "required": false,
51449
- "name": "status",
51450
- "in": "query"
51451
- },
51452
- {
51453
- "schema": {
51454
- "type": "string"
51455
- },
51456
- "required": false,
51457
- "name": "agentId",
51458
- "in": "query"
51459
- },
51460
- {
51461
- "schema": {
51462
- "type": "string"
51463
- },
51464
- "required": false,
51465
- "name": "name",
51466
- "in": "query"
51467
- }
51468
- ],
51469
- "responses": {
51470
- "200": {
51471
- "description": "Service list",
51472
- "content": {
51473
- "application/json": {
51474
- "schema": {
51475
- "type": "object",
51476
- "properties": {
51477
- "services": {
51478
- "type": "array",
51479
- "items": {
51480
- "$ref": "#/components/schemas/Service"
51481
- }
51482
- }
51483
- },
51484
- "required": [
51485
- "services"
51486
- ]
51487
- }
51488
- }
51489
- }
51490
- }
51491
- }
51492
- }
51493
- },
51494
52365
  "/api/scheduled-tasks": {
51495
52366
  "get": {
51496
52367
  "summary": "List scheduled tasks",
@@ -56515,6 +57386,81 @@
56515
57386
  }
56516
57387
  }
56517
57388
  },
57389
+ "/api/integrations/chat/{adapter}/webhook": {
57390
+ "post": {
57391
+ "summary": "Handle Chat SDK platform webhooks (Telegram, Slack, Discord, Teams)",
57392
+ "tags": [
57393
+ "Webhooks"
57394
+ ],
57395
+ "parameters": [
57396
+ {
57397
+ "schema": {
57398
+ "type": "string",
57399
+ "description": "Chat SDK adapter name, e.g. telegram"
57400
+ },
57401
+ "required": true,
57402
+ "description": "Chat SDK adapter name, e.g. telegram",
57403
+ "name": "adapter",
57404
+ "in": "path"
57405
+ }
57406
+ ],
57407
+ "responses": {
57408
+ "200": {
57409
+ "description": "Adapter response"
57410
+ },
57411
+ "401": {
57412
+ "description": "Invalid platform signature or secret token",
57413
+ "content": {
57414
+ "application/json": {
57415
+ "schema": {
57416
+ "$ref": "#/components/schemas/ErrorResponse"
57417
+ }
57418
+ }
57419
+ }
57420
+ },
57421
+ "403": {
57422
+ "description": "Teams activity whose serviceUrl is not a Bot Framework host",
57423
+ "content": {
57424
+ "application/json": {
57425
+ "schema": {
57426
+ "$ref": "#/components/schemas/ErrorResponse"
57427
+ }
57428
+ }
57429
+ }
57430
+ },
57431
+ "404": {
57432
+ "description": "Chat SDK disabled or adapter not configured",
57433
+ "content": {
57434
+ "application/json": {
57435
+ "schema": {
57436
+ "$ref": "#/components/schemas/ErrorResponse"
57437
+ }
57438
+ }
57439
+ }
57440
+ },
57441
+ "413": {
57442
+ "description": "Body exceeds 1 MiB",
57443
+ "content": {
57444
+ "application/json": {
57445
+ "schema": {
57446
+ "$ref": "#/components/schemas/ErrorResponse"
57447
+ }
57448
+ }
57449
+ }
57450
+ },
57451
+ "503": {
57452
+ "description": "Adapter configured but failed to start",
57453
+ "content": {
57454
+ "application/json": {
57455
+ "schema": {
57456
+ "$ref": "#/components/schemas/ErrorResponse"
57457
+ }
57458
+ }
57459
+ }
57460
+ }
57461
+ }
57462
+ }
57463
+ },
56518
57464
  "/api/workflow-runs/{runId}/events": {
56519
57465
  "post": {
56520
57466
  "summary": "Fire a run-scoped event signal",
@@ -57087,7 +58033,9 @@
57087
58033
  "eventName": {
57088
58034
  "type": "string",
57089
58035
  "enum": [
57090
- "slack.message"
58036
+ "slack.message",
58037
+ "azure-devops.work_item.assigned",
58038
+ "azure-devops.work_item.commented"
57091
58039
  ]
57092
58040
  }
57093
58041
  },
@@ -57479,7 +58427,9 @@
57479
58427
  "eventName": {
57480
58428
  "type": "string",
57481
58429
  "enum": [
57482
- "slack.message"
58430
+ "slack.message",
58431
+ "azure-devops.work_item.assigned",
58432
+ "azure-devops.work_item.commented"
57483
58433
  ]
57484
58434
  }
57485
58435
  },