@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
@@ -147258,7 +147258,7 @@
147258
147258
  "cost": {
147259
147259
  "input": 2,
147260
147260
  "output": 10,
147261
- "cache_read": 0.2,
147261
+ "cache_read": 0.1,
147262
147262
  "cache_write": 2.5
147263
147263
  },
147264
147264
  "limit": {
@@ -314158,23 +314158,59 @@
314158
314158
  "name": "NaN",
314159
314159
  "doc": "https://nan.builders/docs/models",
314160
314160
  "models": {
314161
- "qwen3.6": {
314162
- "id": "qwen3.6",
314163
- "name": "Qwen3.6 35B-A3B",
314164
- "description": "Open multimodal Qwen MoE for local agents that need vision, audio, and code",
314161
+ "qwen-image-2.1": {
314162
+ "id": "qwen-image-2.1",
314163
+ "name": "Qwen-Image-2.1",
314164
+ "description": "Unified text-to-image generation and image editing model with native RGBA transparency and reference-image editing",
314165
314165
  "family": "qwen",
314166
+ "attachment": false,
314167
+ "reasoning": false,
314168
+ "tool_call": false,
314169
+ "temperature": true,
314170
+ "release_date": "2026-09-14",
314171
+ "last_updated": "2026-09-21",
314172
+ "modalities": {
314173
+ "input": [
314174
+ "text"
314175
+ ],
314176
+ "output": [
314177
+ "image"
314178
+ ]
314179
+ },
314180
+ "open_weights": true,
314181
+ "limit": {
314182
+ "context": 8192,
314183
+ "output": 0
314184
+ },
314185
+ "cost": {
314186
+ "input": 0,
314187
+ "output": 0
314188
+ },
314189
+ "canonical_model_id": "alibaba/qwen-image-2.1"
314190
+ },
314191
+ "glm5.3-flash": {
314192
+ "id": "glm5.3-flash",
314193
+ "name": "GLM-5.3-Flash",
314194
+ "description": "Native multimodal GLM model for efficient coding and long-horizon agent tasks",
314195
+ "family": "glm-flash",
314166
314196
  "attachment": true,
314167
314197
  "reasoning": true,
314168
314198
  "reasoning_options": [
314169
314199
  {
314170
- "type": "toggle"
314200
+ "type": "effort",
314201
+ "values": [
314202
+ "low",
314203
+ "medium",
314204
+ "high",
314205
+ "max"
314206
+ ]
314171
314207
  }
314172
314208
  ],
314173
314209
  "tool_call": true,
314174
314210
  "structured_output": true,
314175
314211
  "temperature": true,
314176
- "release_date": "2026-04-17",
314177
- "last_updated": "2026-04-17",
314212
+ "release_date": "2026-08-26",
314213
+ "last_updated": "2026-08-26",
314178
314214
  "modalities": {
314179
314215
  "input": [
314180
314216
  "text",
@@ -314186,31 +314222,43 @@
314186
314222
  },
314187
314223
  "open_weights": true,
314188
314224
  "limit": {
314189
- "context": 262144,
314190
- "output": 65536
314225
+ "context": 1000000,
314226
+ "output": 131072
314191
314227
  },
314192
314228
  "cost": {
314193
314229
  "input": 0,
314194
314230
  "output": 0
314195
- }
314231
+ },
314232
+ "canonical_model_id": "zhipuai/glm-5.3-flash"
314196
314233
  },
314197
- "deepseek-v4-flash": {
314198
- "id": "deepseek-v4-flash",
314199
- "name": "DeepSeek V4 Flash",
314200
- "description": "Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work",
314201
- "family": "deepseek-flash",
314202
- "attachment": false,
314234
+ "gemma4": {
314235
+ "id": "gemma4",
314236
+ "name": "Gemma 4 26B A4B IT",
314237
+ "description": "Open Gemma instruction model for efficient chat and self-hosted deployments",
314238
+ "family": "gemma",
314239
+ "attachment": true,
314203
314240
  "reasoning": true,
314204
- "reasoning_options": [],
314241
+ "reasoning_options": [
314242
+ {
314243
+ "type": "effort",
314244
+ "values": [
314245
+ "none",
314246
+ "low",
314247
+ "medium",
314248
+ "high",
314249
+ "max"
314250
+ ]
314251
+ }
314252
+ ],
314205
314253
  "tool_call": true,
314206
314254
  "structured_output": true,
314207
314255
  "temperature": true,
314208
- "knowledge": "2025-05",
314209
- "release_date": "2026-04-24",
314210
- "last_updated": "2026-04-24",
314256
+ "release_date": "2026-04-02",
314257
+ "last_updated": "2026-04-02",
314211
314258
  "modalities": {
314212
314259
  "input": [
314213
- "text"
314260
+ "text",
314261
+ "image"
314214
314262
  ],
314215
314263
  "output": [
314216
314264
  "text"
@@ -314218,30 +314266,43 @@
314218
314266
  },
314219
314267
  "open_weights": true,
314220
314268
  "limit": {
314221
- "context": 1000000,
314222
- "output": 384000
314269
+ "context": 262144,
314270
+ "output": 32768
314223
314271
  },
314224
314272
  "cost": {
314225
314273
  "input": 0,
314226
314274
  "output": 0
314227
- }
314275
+ },
314276
+ "canonical_model_id": "google/gemma-4-26b-a4b-it"
314228
314277
  },
314229
- "glm5.2": {
314230
- "id": "glm5.2",
314231
- "name": "GLM-5.2",
314232
- "description": "Open flagship GLM for long-horizon coding agents, served at 500K context on the NaN premium tier",
314233
- "family": "glm",
314234
- "attachment": false,
314278
+ "qwen3.6": {
314279
+ "id": "qwen3.6",
314280
+ "name": "Qwen3.6 35B-A3B",
314281
+ "description": "Open multimodal Qwen MoE for local agents that need vision, audio, and code",
314282
+ "family": "qwen",
314283
+ "attachment": true,
314235
314284
  "reasoning": true,
314236
- "reasoning_options": [],
314285
+ "reasoning_options": [
314286
+ {
314287
+ "type": "effort",
314288
+ "values": [
314289
+ "none",
314290
+ "low",
314291
+ "medium",
314292
+ "high",
314293
+ "max"
314294
+ ]
314295
+ }
314296
+ ],
314237
314297
  "tool_call": true,
314238
314298
  "structured_output": true,
314239
314299
  "temperature": true,
314240
- "release_date": "2026-06-13",
314241
- "last_updated": "2026-06-13",
314300
+ "release_date": "2026-04-17",
314301
+ "last_updated": "2026-04-17",
314242
314302
  "modalities": {
314243
314303
  "input": [
314244
- "text"
314304
+ "text",
314305
+ "image"
314245
314306
  ],
314246
314307
  "output": [
314247
314308
  "text"
@@ -314249,35 +314310,32 @@
314249
314310
  },
314250
314311
  "open_weights": true,
314251
314312
  "limit": {
314252
- "context": 500000,
314253
- "output": 131072
314313
+ "context": 262144,
314314
+ "output": 65536
314254
314315
  },
314255
314316
  "cost": {
314256
314317
  "input": 0,
314257
314318
  "output": 0
314258
- }
314319
+ },
314320
+ "canonical_model_id": "alibaba/qwen3.6-35b-a3b"
314259
314321
  },
314260
- "gemma4": {
314261
- "id": "gemma4",
314262
- "name": "Gemma 4 26B A4B IT",
314263
- "description": "Open Gemma instruction model for efficient chat and self-hosted deployments",
314264
- "family": "gemma",
314322
+ "mimo-v2.6-flash": {
314323
+ "id": "mimo-v2.6-flash",
314324
+ "name": "MiMo-V2.6-Flash",
314325
+ "description": "MiMo Flash model for multimodal coding agents and long-context automation",
314326
+ "family": "mimo",
314265
314327
  "attachment": true,
314266
314328
  "reasoning": true,
314267
- "reasoning_options": [
314268
- {
314269
- "type": "toggle"
314270
- }
314271
- ],
314329
+ "reasoning_options": [],
314272
314330
  "tool_call": true,
314273
- "structured_output": true,
314274
314331
  "temperature": true,
314275
- "release_date": "2026-04-02",
314276
- "last_updated": "2026-04-02",
314332
+ "release_date": "2026-09-22",
314333
+ "last_updated": "2026-09-22",
314277
314334
  "modalities": {
314278
314335
  "input": [
314279
314336
  "text",
314280
- "image"
314337
+ "image",
314338
+ "audio"
314281
314339
  ],
314282
314340
  "output": [
314283
314341
  "text"
@@ -314285,13 +314343,14 @@
314285
314343
  },
314286
314344
  "open_weights": true,
314287
314345
  "limit": {
314288
- "context": 262144,
314289
- "output": 32768
314346
+ "context": 1048576,
314347
+ "output": 131072
314290
314348
  },
314291
314349
  "cost": {
314292
314350
  "input": 0,
314293
314351
  "output": 0
314294
- }
314352
+ },
314353
+ "canonical_model_id": "xiaomi/mimo-v2.6-flash"
314295
314354
  },
314296
314355
  "qwen3.8-flash": {
314297
314356
  "id": "qwen3.8-flash",
@@ -314322,21 +314381,65 @@
314322
314381
  "cost": {
314323
314382
  "input": 0,
314324
314383
  "output": 0
314325
- }
314384
+ },
314385
+ "canonical_model_id": "alibaba/qwen3.8-flash"
314326
314386
  },
314327
- "glm5.3-flash": {
314328
- "id": "glm5.3-flash",
314329
- "name": "GLM-5.3-Flash",
314330
- "description": "Native multimodal GLM model for efficient coding and long-horizon agent tasks",
314387
+ "glm5.3": {
314388
+ "id": "glm5.3",
314389
+ "name": "GLM-5.3",
314390
+ "description": "Flagship GLM model for long-horizon coding, agents, and complex project delivery",
314331
314391
  "family": "glm",
314392
+ "attachment": false,
314393
+ "reasoning": true,
314394
+ "reasoning_options": [
314395
+ {
314396
+ "type": "effort",
314397
+ "values": [
314398
+ "low",
314399
+ "medium",
314400
+ "high",
314401
+ "max"
314402
+ ]
314403
+ }
314404
+ ],
314405
+ "tool_call": true,
314406
+ "structured_output": true,
314407
+ "temperature": true,
314408
+ "release_date": "2026-08-14",
314409
+ "last_updated": "2026-08-14",
314410
+ "modalities": {
314411
+ "input": [
314412
+ "text"
314413
+ ],
314414
+ "output": [
314415
+ "text"
314416
+ ]
314417
+ },
314418
+ "open_weights": true,
314419
+ "limit": {
314420
+ "context": 1000000,
314421
+ "output": 131072
314422
+ },
314423
+ "cost": {
314424
+ "input": 0,
314425
+ "output": 0
314426
+ },
314427
+ "canonical_model_id": "zhipuai/glm-5.3"
314428
+ },
314429
+ "deepseek-v4-flash": {
314430
+ "id": "deepseek-v4-flash",
314431
+ "name": "DeepSeek V4.1 Flash",
314432
+ "description": "DeepSeek V4.1 Flash model for reasoning and agentic coding",
314433
+ "family": "deepseek-flash",
314332
314434
  "attachment": true,
314333
314435
  "reasoning": true,
314334
314436
  "reasoning_options": [],
314335
314437
  "tool_call": true,
314336
314438
  "structured_output": true,
314337
314439
  "temperature": true,
314338
- "release_date": "2026-08-26",
314339
- "last_updated": "2026-08-26",
314440
+ "knowledge": "2025-05",
314441
+ "release_date": "2026-09-10",
314442
+ "last_updated": "2026-09-10",
314340
314443
  "modalities": {
314341
314444
  "input": [
314342
314445
  "text",
@@ -314346,9 +314449,41 @@
314346
314449
  "text"
314347
314450
  ]
314348
314451
  },
314349
- "open_weights": false,
314452
+ "open_weights": true,
314350
314453
  "limit": {
314351
314454
  "context": 1000000,
314455
+ "output": 384000
314456
+ },
314457
+ "cost": {
314458
+ "input": 0,
314459
+ "output": 0
314460
+ },
314461
+ "canonical_model_id": "deepseek/deepseek-v4.1-flash"
314462
+ },
314463
+ "glm5.2": {
314464
+ "id": "glm5.2",
314465
+ "name": "GLM-5.2",
314466
+ "description": "Open flagship GLM for long-horizon coding agents, served at 500K context on the NaN premium tier",
314467
+ "family": "glm",
314468
+ "attachment": false,
314469
+ "reasoning": true,
314470
+ "reasoning_options": [],
314471
+ "tool_call": true,
314472
+ "structured_output": true,
314473
+ "temperature": true,
314474
+ "release_date": "2026-06-13",
314475
+ "last_updated": "2026-06-13",
314476
+ "modalities": {
314477
+ "input": [
314478
+ "text"
314479
+ ],
314480
+ "output": [
314481
+ "text"
314482
+ ]
314483
+ },
314484
+ "open_weights": true,
314485
+ "limit": {
314486
+ "context": 500000,
314352
314487
  "output": 131072
314353
314488
  },
314354
314489
  "cost": {
@@ -1,5 +1,6 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import path from "node:path";
3
+ import { withRegistryCatalogSections } from "@desplega/model-catalog";
3
4
 
4
5
  export interface ModelsDevCostBlock {
5
6
  input?: number;
@@ -53,6 +54,11 @@ const parsedCaches = new Map<string, WeakRef<ModelsDevCache>>();
53
54
  * fetches the live catalog from `GET /api/models-catalog`
54
55
  * (`src/be/models-catalog.ts`) and only falls back to its bundled copy of
55
56
  * this snapshot when that request hasn't resolved.
57
+ *
58
+ * The result also carries the sections of the OpenAI-compatible registry
59
+ * providers models.dev does not list (`helmcode`), synthesized from the
60
+ * registry (`withRegistryCatalogSections`), so every snapshot consumer
61
+ * (catalog, pricing seed, tier resolution) sees them like any other section.
56
62
  */
57
63
  export function loadModelsDevCache(): ModelsDevCache | null {
58
64
  const explicitPath = process.env.MODELSDEV_CACHE_PATH;
@@ -67,7 +73,9 @@ export function loadModelsDevCache(): ModelsDevCache | null {
67
73
  const memoized = parsedCaches.get(candidate)?.deref();
68
74
  if (memoized) return memoized;
69
75
  try {
70
- const parsed = JSON.parse(readFileSync(candidate, "utf-8")) as ModelsDevCache;
76
+ const parsed = withRegistryCatalogSections(
77
+ JSON.parse(readFileSync(candidate, "utf-8")) as ModelsDevCache,
78
+ );
71
79
  parsedCaches.set(candidate, new WeakRef(parsed));
72
80
  return parsed;
73
81
  } catch {
@@ -11,6 +11,7 @@ import { registerVolatileSecret } from "@/utils/secret-scrubber";
11
11
  import { getResolvedConfig } from "./db";
12
12
  import { resolveOAuthBindingToken } from "./oauth-credential-bindings";
13
13
  import { listRelationalCredentialBindings } from "./script-connections";
14
+ import { isApiOnlyConfigKey, isInternalConfigKey } from "./swarm-config-guard";
14
15
 
15
16
  // Relational-only credential binding store. The legacy SCRIPT_CREDENTIAL_BINDINGS
16
17
  // swarm-config JSON blob is retired (migrated to relational rows at boot), so
@@ -22,6 +23,32 @@ class RelationalCredentialBindingStore implements CredentialBindingStore {
22
23
  }
23
24
  }
24
25
 
26
+ export type ScriptUserConfig = Record<string, { value: string; isSecret: boolean }>;
27
+
28
+ /**
29
+ * The values behind `ctx.swarm.config.get(KEY)`: the invoking agent's resolved
30
+ * config (agent over global, plus repo when given), minus the keys the
31
+ * `/api/config/resolved` route never hands out. A script's own SDK bearer
32
+ * already reads every one of these through `ctx.swarm.config_get`, so this
33
+ * widens nothing; it only makes the documented accessor return them. Secret
34
+ * values are registered with the scrubber so they never leave in run output.
35
+ */
36
+ function toScriptUserConfig(configs: Awaited<ReturnType<typeof getResolvedConfig>>) {
37
+ const exposed = configs.filter(
38
+ (config) => !isApiOnlyConfigKey(config.key) && !isInternalConfigKey(config.key),
39
+ );
40
+ for (const config of exposed) {
41
+ if (config.isSecret && config.value) {
42
+ registerVolatileSecret(config.value, `config:${config.key}`);
43
+ }
44
+ }
45
+ // fromEntries defines own properties, so a `__proto__` key survives
46
+ // (assigning it into `{}` would hit the prototype setter instead).
47
+ return Object.fromEntries(
48
+ exposed.map((config) => [config.key, { value: config.value, isSecret: config.isSecret }]),
49
+ ) as ScriptUserConfig;
50
+ }
51
+
25
52
  /**
26
53
  * Resolve credential bindings for a script run, partitioning OAuth bindings
27
54
  * whose refresh failed into `failedBindings` (surfaced to the sandbox so the
@@ -32,8 +59,14 @@ class RelationalCredentialBindingStore implements CredentialBindingStore {
32
59
  export async function buildScriptCredentialBindingsWithFailures(input: {
33
60
  agentId?: string;
34
61
  repoId?: string;
35
- }): Promise<{ egressSecrets: EgressSecretEntry[]; failedBindings: FailedCredentialBinding[] }> {
62
+ }): Promise<{
63
+ egressSecrets: EgressSecretEntry[];
64
+ failedBindings: FailedCredentialBinding[];
65
+ userConfig: ScriptUserConfig;
66
+ }> {
36
67
  const resolvedConfigs = await getResolvedConfig(input.agentId, input.repoId);
68
+ // Before the binding loop below, so a binding's own scrubber label wins.
69
+ const userConfig = toScriptUserConfig(resolvedConfigs);
37
70
  const configMap = new Map(resolvedConfigs.map((config) => [config.key, config.value]));
38
71
  const broker = new CredentialBroker(
39
72
  new RelationalCredentialBindingStore(),
@@ -49,7 +82,11 @@ export async function buildScriptCredentialBindingsWithFailures(input: {
49
82
  for (const binding of resolved) {
50
83
  registerVolatileSecret(binding.value, binding.configKey);
51
84
  }
52
- return { egressSecrets: resolved, failedBindings: failed };
85
+ return {
86
+ egressSecrets: resolved,
87
+ failedBindings: failed,
88
+ userConfig,
89
+ };
53
90
  }
54
91
 
55
92
  export async function buildScriptCredentialBindings(input: {
@@ -52,6 +52,7 @@ export async function runSavedScriptAsAgent(
52
52
  agentId: args.agentId,
53
53
  egressSecrets: credentials.egressSecrets,
54
54
  failedBindings: credentials.failedBindings,
55
+ userConfig: credentials.userConfig,
55
56
  apiConnections: getScriptApiConnectionDescriptors({ agentId: args.agentId }),
56
57
  mcpConnections: getScriptMcpConnectionDescriptors({ agentId: args.agentId }),
57
58
  ...(args.timeoutMs ? { timeoutMs: args.timeoutMs } : {}),
@@ -232,13 +232,15 @@ export interface SwarmSdk {
232
232
  // --- config ---
233
233
  config_get(args?: { agentId?: string; repoId?: string; key?: string; includeSecrets?: boolean }): Promise<unknown>;
234
234
  config_list(args?: { scope?: "global" | "agent" | "repo"; scopeId?: string; key?: string; includeSecrets?: boolean }): Promise<unknown>;
235
+ // --- model profiles ---
236
+ modelProfile_list(args?: { harness?: string }): Promise<unknown>;
235
237
  // --- slack ---
236
238
  slack_read(args?: { inboxMessageId?: string; taskId?: string; channelId?: string; threadTs?: string; limit?: number; includeFiles?: boolean }): Promise<unknown>;
237
239
  slack_listChannels(args?: { types?: Array<"public" | "private" | "dm" | "mpim">; limit?: number }): Promise<unknown>;
240
+ // --- chat sdk ---
241
+ chat_readThread(args: { threadId: string; limit?: number }): Promise<unknown>;
238
242
  // --- messaging ---
239
243
  message_read(args?: { channel?: string; limit?: number; since?: string; unreadOnly?: boolean; mentionsOnly?: boolean; markAsRead?: boolean }): Promise<unknown>;
240
- // --- services ---
241
- service_list(args?: { agentId?: string; name?: string; status?: "starting" | "healthy" | "unhealthy" | "stopped"; includeOwn?: boolean }): Promise<unknown>;
242
244
  // --- context / profiles ---
243
245
  context_history(args?: { agentId?: string; field?: "soulMd" | "identityMd" | "toolsMd" | "claudeMd" | "setupScript"; limit?: number }): Promise<unknown>;
244
246
  context_diff(args: { versionId: string; compareToVersionId?: string }): Promise<unknown>;
@@ -281,7 +283,7 @@ export interface SwarmSdk {
281
283
  task_action(args: Record<string, unknown>): Promise<unknown>;
282
284
 
283
285
  // --- write: config ---
284
- config_set(args: { key: string; value: unknown; scope?: "global" | "agent" | "repo"; scopeId?: string; isSecret?: boolean }): Promise<unknown>;
286
+ config_set(args: { key: string; value: unknown; scope?: "global" | "agent" | "repo"; scopeId?: string; isSecret?: boolean; exportToEnv?: boolean }): Promise<unknown>;
285
287
  config_delete(args: { id: string }): Promise<unknown>;
286
288
 
287
289
  // --- write: model catalog ---
@@ -311,17 +313,19 @@ export interface SwarmSdk {
311
313
  slack_delete(args: { channelId: string; messageTs: string }): Promise<unknown>;
312
314
  slack_update(args: { channelId: string; messageTs: string; message: string }): Promise<unknown>;
313
315
 
316
+ // --- write: chat sdk ---
317
+ chat_reply(args: { text: string }): Promise<unknown>;
318
+ chat_post(args: { adapter: "telegram" | "slack" | "discord" | "teams"; threadId?: string; channelId?: string; text: string }): Promise<unknown>;
319
+ chat_openDm(args: { adapter: "telegram" | "slack" | "discord" | "teams"; userId: string }): Promise<unknown>;
320
+ chat_registerChannel(args: { adapter: "telegram" | "slack" | "discord" | "teams"; channelId: string; agentId?: string; workflowId?: string; name?: string }): Promise<unknown>;
321
+ chat_unregisterChannel(args: { adapter: "telegram" | "slack" | "discord" | "teams"; channelId: string }): Promise<unknown>;
322
+
314
323
  // --- write: messaging (internal) ---
315
324
  message_post(args: { channel?: string; content: string; to?: string }): Promise<unknown>;
316
325
 
317
326
  // --- write: profiles ---
318
327
  profile_update(args: Record<string, unknown>): Promise<unknown>;
319
328
 
320
- // --- write: services ---
321
- service_register(args: Record<string, unknown>): Promise<unknown>;
322
- service_unregister(args: { name: string }): Promise<unknown>;
323
- service_updateStatus(args: { name: string; status: "starting" | "healthy" | "unhealthy" | "stopped" }): Promise<unknown>;
324
-
325
329
  // --- write: schedules ---
326
330
  schedule_create(args: Record<string, unknown>): Promise<unknown>;
327
331
  schedule_update(args: Record<string, unknown>): Promise<unknown>;
@@ -437,6 +441,16 @@ export interface SwarmSdk {
437
441
  // --- human input ---
438
442
  request_humanInput(args: Record<string, unknown>): Promise<unknown>;
439
443
  approval_cancel(args: { requestId: string; reason?: string }): Promise<unknown>;
444
+
445
+ // --- decisions ---
446
+ systemOne_decide(args: {
447
+ provider?: "typesafe" | "openrouter" | "laya" | "openai" | "cloudflare";
448
+ model?: string;
449
+ state: string | string[] | Record<string, unknown>;
450
+ questions: Record<string, Record<string, unknown>>;
451
+ timeoutMs?: number;
452
+ maxRetries?: number;
453
+ }): Promise<unknown>;
440
454
  }
441
455
 
442
456
  export interface ScriptStdlib {
@@ -77,8 +77,12 @@ export function encodedForms(value: string): string[] {
77
77
  /** Register a stored secret value, plus its encoded forms, with the scrubber. */
78
78
  export function registerStoredSecret(value: string | null | undefined, name: string): void {
79
79
  if (!value) return;
80
- registerVolatileSecret(value, name);
81
- for (const form of encodedForms(value)) registerVolatileSecret(form, name);
80
+ // Config values are hydrated verbatim but consumed trimmed.
81
+ for (const candidate of new Set([value, value.trim()])) {
82
+ if (!candidate) continue;
83
+ registerVolatileSecret(candidate, name);
84
+ for (const form of encodedForms(candidate)) registerVolatileSecret(form, name);
85
+ }
82
86
  }
83
87
 
84
88
  export interface SecretRegistryLoadResult {
@@ -22,6 +22,7 @@ export async function runSeeder(seeder: Seeder, opts?: SeederRunOptions): Promis
22
22
  updated: 0,
23
23
  skippedUnchanged: 0,
24
24
  skippedUserModified: 0,
25
+ retired: 0,
25
26
  failed: [],
26
27
  };
27
28
 
@@ -77,11 +78,22 @@ export async function runSeeder(seeder: Seeder, opts?: SeederRunOptions): Promis
77
78
  }
78
79
  }
79
80
 
81
+ if (seeder.retire) {
82
+ try {
83
+ result.retired = (await seeder.retire()).length;
84
+ } catch (err) {
85
+ result.failed.push({
86
+ key: "(retire)",
87
+ error: err instanceof Error ? err.message : String(err),
88
+ });
89
+ }
90
+ }
91
+
80
92
  if (!opts?.quiet) {
81
93
  console.log(
82
94
  `[seed:${result.kind}] created=${result.created} updated=${result.updated} ` +
83
95
  `unchanged=${result.skippedUnchanged} preserved=${result.skippedUserModified} ` +
84
- `failed=${result.failed.length}`,
96
+ `retired=${result.retired} failed=${result.failed.length}`,
85
97
  );
86
98
  for (const f of result.failed) {
87
99
  console.error(`[seed:${result.kind}] FAILED ${f.key}: ${f.error}`);
@@ -36,3 +36,8 @@ export async function recordSeedState(
36
36
  [kind, key, seededHash, new Date().toISOString()],
37
37
  );
38
38
  }
39
+
40
+ /** Forget `(kind, key)`, e.g. after the seeder retires the entity it seeded. */
41
+ export async function deleteSeedState(kind: string, key: string): Promise<void> {
42
+ await getDbClient().run("DELETE FROM seed_state WHERE kind = ? AND key = ?", [kind, key]);
43
+ }
@@ -53,6 +53,11 @@ export interface Seeder<TItem extends SeedItem = SeedItem> {
53
53
  upstreamHash(item: TItem): string | null | Promise<string | null>;
54
54
  /** Create or update the upstream entity so it matches the source definition. */
55
55
  apply(item: TItem, action: "create" | "update", opts?: SeederRunOptions): void | Promise<void>;
56
+ /**
57
+ * Optional: remove upstream entities for keys the source no longer ships.
58
+ * Must leave user-modified entities in place. Returns the removed keys.
59
+ */
60
+ retire?(): Promise<string[]>;
56
61
  }
57
62
 
58
63
  export type SeederResult = {
@@ -61,5 +66,6 @@ export type SeederResult = {
61
66
  updated: number;
62
67
  skippedUnchanged: number;
63
68
  skippedUserModified: number;
69
+ retired: number;
64
70
  failed: Array<{ key: string; error: string }>;
65
71
  };