@desplega.ai/agent-swarm 1.172.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-fpecx1g1.js → acp-adapter-sj2g0m84.js} +18 -17
  3. package/dist/{actions-pw87a1a8.js → actions-fegk44gr.js} +65 -35
  4. package/dist/{amp-adapter-8jem2bc0.js → amp-adapter-ad8ft89x.js} +8 -7
  5. package/dist/{anthropic-messages-8ee2f22q.js → anthropic-messages-r6czkjv1.js} +7 -7
  6. package/dist/{app-wmf0m843.js → app-kfvgbvzy.js} +19 -13
  7. package/dist/{assistant-emp1e108.js → assistant-z7zdy9ja.js} +65 -38
  8. package/dist/{boot-reembed-1de4f4aj.js → boot-reembed-5c2z0mbe.js} +11 -9
  9. package/dist/{boot-reembed-4ymn9atn.js → boot-reembed-j8xa181e.js} +11 -9
  10. package/dist/{boot-scrub-sweep-adhk1s8c.js → boot-scrub-sweep-hnkn3rgt.js} +12 -10
  11. package/dist/{boot-seeds-8q637aew.js → boot-seeds-kwjq4d2z.js} +15 -13
  12. package/dist/{claude-adapter-t26cv8a4.js → claude-adapter-9vmvpvgd.js} +20 -19
  13. package/dist/{claude-managed-adapter-xgxhqrt2.js → claude-managed-adapter-k9qae05j.js} +7 -5
  14. package/dist/{claude-managed-setup-bnmjarjc.js → claude-managed-setup-q54zx5q2.js} +6 -4
  15. package/dist/{claude-sdk-session-gsfsh662.js → claude-sdk-session-9jye6cxr.js} +12698 -11995
  16. package/dist/{cli-k46r9hmk.js → cli-03gedhng.js} +16 -14
  17. package/dist/{cli-kb4ehzx5.js → cli-1e4b6bzh.js} +7 -7
  18. package/dist/{cli-d603qf86.js → cli-29jc5q7w.js} +10 -8
  19. package/dist/cli-2m1ktfzz.js +17795 -0
  20. package/dist/{cli-8vs9trd4.js → cli-3dj8k4vy.js} +1 -1
  21. package/dist/{cli-zxm9p3x4.js → cli-3fbmmawm.js} +5 -5
  22. package/dist/{cli-gmdajfw5.js → cli-4jxm2qtz.js} +4987 -1708
  23. package/dist/{cli-tadfgd0t.js → cli-5hkm7whv.js} +33 -4
  24. package/dist/{cli-6jb2rf77.js → cli-5t4f29ez.js} +3 -3
  25. package/dist/{cli-7a0sde2x.js → cli-6cagzc96.js} +9 -0
  26. package/dist/cli-6cvfxs8r.js +47 -0
  27. package/dist/{cli-pj6x9qce.js → cli-6jyj59nb.js} +2 -2
  28. package/dist/{cli-388egyf6.js → cli-6razj6t4.js} +2 -2
  29. package/dist/{cli-qsztpfry.js → cli-74ahz61x.js} +2 -2
  30. package/dist/{cli-4nz8p1p5.js → cli-7x0g4sn1.js} +15474 -16082
  31. package/dist/{cli-yatxqynm.js → cli-9ha6hs2d.js} +1 -290
  32. package/dist/{cli-81r1wjyv.js → cli-9nfx44eh.js} +1 -1
  33. package/dist/cli-9traj3dn.js +638 -0
  34. package/dist/{cli-smcrrmhy.js → cli-agzebbd5.js} +9 -9
  35. package/dist/{cli-bf7485pm.js → cli-apx87jne.js} +2 -2
  36. package/dist/{cli-ztrv9y21.js → cli-bzszjf2p.js} +3689 -1081
  37. package/dist/{cli-c5km5znr.js → cli-c8r3kzzb.js} +1 -1
  38. package/dist/{cli-hsem16hb.js → cli-cgtksawx.js} +7 -4
  39. package/dist/{cli-db3m6zdt.js → cli-d2qr7aj4.js} +1 -1
  40. package/dist/{cli-1hgat6pa.js → cli-d5f9ed5c.js} +5 -5
  41. package/dist/cli-e3g5mbkz.js +776 -0
  42. package/dist/{cli-7jykv7ef.js → cli-e6mpjhed.js} +1 -1
  43. package/dist/{cli-j6kpj9az.js → cli-ee9gtz70.js} +1553 -68
  44. package/dist/{cli-e0a9sk00.js → cli-eejsgvm4.js} +4 -4
  45. package/dist/{cli-tgpfnm6r.js → cli-ef1hg1wv.js} +518 -59
  46. package/dist/cli-f527ce74.js +781 -0
  47. package/dist/{cli-ppy4nnnh.js → cli-f7kr7svz.js} +2 -2
  48. package/dist/cli-hjwmhcg1.js +10622 -0
  49. package/dist/{cli-2bw3w47j.js → cli-hnhtk6cj.js} +1 -1
  50. package/dist/{cli-ywm1azg9.js → cli-hnmhtzvh.js} +6 -4
  51. package/dist/{cli-4fnb6884.js → cli-hvqbtna4.js} +7 -1259
  52. package/dist/{cli-pstq9888.js → cli-j0pfptdp.js} +220 -103
  53. package/dist/cli-jta2eyzc.js +619 -0
  54. package/dist/{cli-esnpehf5.js → cli-k382tshb.js} +12 -13
  55. package/dist/cli-k3dp5tpf.js +263 -0
  56. package/dist/{cli-wd0hz6ah.js → cli-kbrt8gqa.js} +9 -91
  57. package/dist/cli-kceah1eh.js +92 -0
  58. package/dist/{cli-prrt9fa0.js → cli-ke896fcf.js} +10 -10
  59. package/dist/{cli-nv4zd0b9.js → cli-kt6zqg0e.js} +6 -6
  60. package/dist/{cli-g6t9texm.js → cli-m50t4309.js} +5 -18
  61. package/dist/cli-n2wq4j7m.js +6985 -0
  62. package/dist/{cli-c2pq2rjb.js → cli-n3hzg89b.js} +46 -15
  63. package/dist/{cli-tmhsxhb8.js → cli-n5vwg842.js} +23 -6
  64. package/dist/{cli-5rv1j9ga.js → cli-ne236afy.js} +53 -7
  65. package/dist/cli-p0sg24zp.js +16 -0
  66. package/dist/{cli-d161g69q.js → cli-p1x85d2t.js} +50 -2
  67. package/dist/{cli-7pz3b7x5.js → cli-przpmdgr.js} +25 -0
  68. package/dist/{cli-g4f5pj26.js → cli-q0ke1yww.js} +111 -25
  69. package/dist/{cli-e3pmyt39.js → cli-q50942rs.js} +1 -1
  70. package/dist/{cli-r44t9wqc.js → cli-r106725k.js} +2 -2
  71. package/dist/{cli-gj81e47t.js → cli-r2pnvj8g.js} +2 -2
  72. package/dist/{cli-r8smj8b8.js → cli-r62a35ea.js} +19 -3
  73. package/dist/{cli-cd0hv9nh.js → cli-ra0xzggj.js} +2 -2
  74. package/dist/cli-rhs9pz33.js +294 -0
  75. package/dist/{cli-nyhb1r6x.js → cli-s2sp957d.js} +52 -29
  76. package/dist/{cli-1x7da0de.js → cli-s4setq91.js} +8 -8
  77. package/dist/{cli-xczpdp9e.js → cli-se8w6wny.js} +6 -6
  78. package/dist/cli-skxvvpap.js +10140 -0
  79. package/dist/{cli-014vns2y.js → cli-stfs0k5s.js} +208 -525
  80. package/dist/{cli-0p3enk35.js → cli-tqaazemc.js} +9 -1
  81. package/dist/{cli-cf69s3ew.js → cli-tr4sxp68.js} +3 -3
  82. package/dist/{cli-8hzfb6xz.js → cli-tsde1hdr.js} +15 -15
  83. package/dist/{cli-cceskcvt.js → cli-txqb9s38.js} +8 -8
  84. package/dist/{cli-aspcaef3.js → cli-v1yb0rqb.js} +6 -6
  85. package/dist/{cli-j1pmc07z.js → cli-vatyhshy.js} +268 -40
  86. package/dist/{cli-04emfe2q.js → cli-vdach5a9.js} +5 -5
  87. package/dist/{cli-7avy4v8w.js → cli-w1q7h2r2.js} +5 -3
  88. package/dist/{cli-rcp5aqdw.js → cli-w7m81tb7.js} +1 -1
  89. package/dist/{cli-hwwvy36w.js → cli-wayw93nt.js} +3 -3
  90. package/dist/cli-wmgrkscj.js +23254 -0
  91. package/dist/{cli-gp1rtyvk.js → cli-z5jjpaxw.js} +29 -6
  92. package/dist/{cli-451ks6aw.js → cli-zkpks3r3.js} +1 -1
  93. package/dist/cli.js +32 -48
  94. package/dist/{codex-adapter-m4tgdysy.js → codex-adapter-y81sssk0.js} +16 -15
  95. package/dist/{codex-login-841kv5fk.js → codex-login-f2rcfpp9.js} +3 -2
  96. package/dist/{codex-session-runner-ymwzm6ea.js → codex-session-runner-8vx4j6a9.js} +16 -15
  97. package/dist/{commands-n0hshcvs.js → commands-kcpvpcrr.js} +21 -10
  98. package/dist/{controller-hq5ggpcp.js → controller-ywrmt6yd.js} +5 -4
  99. package/dist/{controllers-connect-y07cqcvy.js → controllers-connect-kwpvj3rf.js} +45 -38
  100. package/dist/{cursor-adapter-q8pgv5qa.js → cursor-adapter-cehv1qns.js} +7 -6
  101. package/dist/{db-hkqvrdcb.js → db-k8ankj20.js} +13 -11
  102. package/dist/{db-4w7tmt1g.js → db-ww5d7jq3.js} +29 -9
  103. package/dist/{devin-adapter-xgtj680j.js → devin-adapter-x1022qb1.js} +3 -2
  104. package/dist/{dispatcher-5sd69y14.js → dispatcher-e8gq5m68.js} +41 -34
  105. package/dist/{docker-f503k9p0.js → docker-ff6y1190.js} +3 -2
  106. package/dist/{dsh-adapter-2h8m4cab.js → dsh-adapter-3epjm3af.js} +7 -6
  107. package/dist/{e2b-66xra4az.js → e2b-8ygwhg0f.js} +4 -3
  108. package/dist/{e2b-xwhyj8cw.js → e2b-swhnpw3n.js} +4 -3
  109. package/dist/{event-bus-vjtv82gm.js → event-bus-6axnngdj.js} +3 -2
  110. package/dist/external-channel-h3359cwn.js +52 -0
  111. package/dist/{google-generative-ai-7pavrbv7.js → google-generative-ai-g8db7x0f.js} +5 -3
  112. package/dist/{google-vertex-3f1jk41f.js → google-vertex-r2692q0r.js} +5 -3
  113. package/dist/{grok-adapter-8m9yqzbq.js → grok-adapter-0d4x7gkx.js} +19 -18
  114. package/dist/{handlers-s20xr10r.js → handlers-an1gzv21.js} +44 -37
  115. package/dist/{heartbeat-3k31q4g2.js → heartbeat-6dakeb61.js} +46 -39
  116. package/dist/{hook-gdn6a2fn.js → hook-6v6cv6d5.js} +12 -24
  117. package/dist/{hook-ygwerrdh.js → hook-sa5xye4y.js} +13 -12
  118. package/dist/{http-jdteeg81.js → http-r7f3eky0.js} +1598 -279
  119. package/dist/index-52j1aja4.js +3465 -0
  120. package/dist/{index-e0snym4t.js → index-7ep4gzdk.js} +41 -34
  121. package/dist/index-9gw58n4k.js +193 -0
  122. package/dist/index-9j87mcm8.js +56305 -0
  123. package/dist/index-bsmcresk.js +79424 -0
  124. package/dist/index-mh85qhec.js +475 -0
  125. package/dist/{index-vm3bm9t7.js → index-rmpw9a8q.js} +41 -34
  126. package/dist/{index-6ksewd5y.js → index-s2wxgzr0.js} +1015 -732
  127. package/dist/{index-tsszt7g9.js → index-v1v6n7hg.js} +46 -39
  128. package/dist/index-we27kd31.js +12810 -0
  129. package/dist/{index-ffqzqgwb.js → index-zk96aq1k.js} +11 -9
  130. package/dist/{keepalive-jekc896t.js → keepalive-be9vwy5h.js} +13 -11
  131. package/dist/{lead-4k9s9szx.js → lead-0861cwrf.js} +64 -57
  132. package/dist/{maintenance-shazch4n.js → maintenance-mzzgc8bn.js} +11 -9
  133. package/dist/node-c9we95xf.js +1 -1
  134. package/dist/{node-fkajaq96.js → node-mn1zs7an.js} +2 -1
  135. package/dist/{oauth-refresh-sweep-5gb36kn8.js → oauth-refresh-sweep-cpdnfwdj.js} +12 -10
  136. package/dist/{onboard-ydrbnvww.js → onboard-fh8qs4r3.js} +11 -3
  137. package/dist/{opencode-adapter-5zh0he20.js → opencode-adapter-nm42wwj8.js} +19 -14
  138. package/dist/{otel-impl-6pf5cv86.js → otel-impl-x6c1c9g4.js} +248 -869
  139. package/dist/{pi-mono-adapter-ef9wwx9m.js → pi-mono-adapter-9n2ya240.js} +245 -107
  140. package/dist/{pricing-refresh-s52nsa5q.js → pricing-refresh-qb0rv0ap.js} +13 -11
  141. package/dist/{rbac-roles-aq3msh4e.js → rbac-roles-1gzdwbh1.js} +12 -10
  142. package/dist/{rbac-roles-q5gb5e8v.js → rbac-roles-3mraey52.js} +13 -11
  143. package/dist/{render-v2-pd1rg54q.js → render-v2-agpa45zz.js} +19 -13
  144. package/dist/{resume-gw4a2c6v.js → resume-x0ydy9s9.js} +27 -21
  145. package/dist/{runtime-qfry88v2.js → runtime-sa2vr16g.js} +2 -2
  146. package/dist/{setup-jda1ksdh.js → setup-as9ga0d6.js} +2 -2
  147. package/dist/{virtual-modules-b3ga2m65.js → virtual-modules-9gkxqrap.js} +7 -6
  148. package/dist/{work-objects-tb7ycye8.js → work-objects-y5g1y7ev.js} +49 -37
  149. package/dist/{worker-njjccz5d.js → worker-860c3e38.js} +64 -57
  150. package/dist/{x-qfmygqqv.js → x-m477fr0h.js} +3 -2
  151. package/openapi.json +951 -356
  152. package/package.json +12 -13
  153. package/src/apps/catalog.generated.json +1309 -53
  154. package/src/apps/page-validator.ts +93 -31
  155. package/src/azure-devops/api.ts +94 -18
  156. package/src/azure-devops/auth.ts +32 -0
  157. package/src/azure-devops/boards-sync.ts +708 -0
  158. package/src/azure-devops/handlers.ts +52 -8
  159. package/src/azure-devops/html.ts +26 -0
  160. package/src/azure-devops/index.ts +15 -0
  161. package/src/azure-devops/templates.ts +86 -0
  162. package/src/azure-devops/types.ts +65 -1
  163. package/src/be/config-refs.ts +60 -0
  164. package/src/be/db/page-versions.ts +15 -0
  165. package/src/be/db/runtime.ts +35 -8
  166. package/src/be/db/skill-name-resolution.ts +36 -0
  167. package/src/be/db/tasks/read.ts +230 -0
  168. package/src/be/db/tasks/write.ts +7 -0
  169. package/src/be/db.ts +74 -13
  170. package/src/be/migrations/213_script_connections_sql.sql +79 -0
  171. package/src/be/migrations/215_swarm_config_export_to_env.sql +34 -0
  172. package/src/be/migrations/216_task_resolved_effort.sql +5 -0
  173. package/src/be/migrations/217_chat_sdk_state.sql +104 -0
  174. package/src/be/model-catalog-store.ts +5 -1
  175. package/src/be/model-tier-resolution.ts +12 -1
  176. package/src/be/model-validation.ts +5 -2
  177. package/src/be/models-catalog.ts +26 -1
  178. package/src/be/modelsdev-cache.json +198 -63
  179. package/src/be/modelsdev-cache.ts +9 -1
  180. package/src/be/script-connections.ts +47 -8
  181. package/src/be/script-credential-broker.ts +39 -2
  182. package/src/be/scripts/run-saved.ts +1 -0
  183. package/src/be/scripts/typecheck.ts +10 -8
  184. package/src/be/seed/runner.ts +13 -1
  185. package/src/be/seed/state-db.ts +5 -0
  186. package/src/be/seed/types.ts +6 -0
  187. package/src/be/seed-pricing.ts +19 -2
  188. package/src/be/seed-scripts/catalog/ops-catalog-audit.inline.ts +1 -1
  189. package/src/be/seed-scripts/catalog/ops-catalog-audit.ts +1 -1
  190. package/src/be/seed-skills/bundled-files.generated.json +10 -18
  191. package/src/be/seed-skills/index.ts +107 -3
  192. package/src/be/sql-connections.ts +118 -0
  193. package/src/be/swarm-config-guard.ts +53 -0
  194. package/src/cli.tsx +0 -16
  195. package/src/commands/onboard/non-interactive.ts +4 -2
  196. package/src/commands/profile-sync.ts +5 -3
  197. package/src/commands/provider-credentials.ts +52 -6
  198. package/src/commands/runner.ts +196 -56
  199. package/src/e2b/env.ts +5 -0
  200. package/src/extensions/contract-types.generated.ts +1 -1
  201. package/src/extensions/contract.ts +45 -0
  202. package/src/extensions/dispatcher.ts +7 -0
  203. package/src/extensions/post-bridge.ts +40 -0
  204. package/src/github/handlers.ts +11 -4
  205. package/src/heartbeat/templates.ts +8 -5
  206. package/src/hooks/hook.ts +0 -26
  207. package/src/http/all-routes.ts +0 -1
  208. package/src/http/config.ts +36 -17
  209. package/src/http/core.ts +4 -0
  210. package/src/http/index.ts +14 -2
  211. package/src/http/integrations.ts +88 -1
  212. package/src/http/mcp-oauth.ts +6 -13
  213. package/src/http/mcp.ts +15 -5
  214. package/src/http/page-proxy.ts +2 -4
  215. package/src/http/pages-public.ts +6 -5
  216. package/src/http/pages.ts +5 -14
  217. package/src/http/poll.ts +28 -68
  218. package/src/http/requested-by.ts +54 -0
  219. package/src/http/route-def.ts +7 -6
  220. package/src/http/script-connection-proxy.ts +51 -4
  221. package/src/http/script-connections.ts +5 -2
  222. package/src/http/scripts.ts +1 -0
  223. package/src/http/session-cost-recompute.ts +12 -2
  224. package/src/http/session-data.ts +4 -0
  225. package/src/http/stats.ts +1 -30
  226. package/src/http/tasks.ts +61 -5
  227. package/src/http/utils.ts +14 -0
  228. package/src/http/webhooks.ts +183 -2
  229. package/src/http/x.ts +1 -0
  230. package/src/integrations/chat-sdk/adapters.ts +129 -0
  231. package/src/integrations/chat-sdk/attachments.ts +232 -0
  232. package/src/integrations/chat-sdk/background.ts +36 -0
  233. package/src/integrations/chat-sdk/commands.ts +194 -0
  234. package/src/integrations/chat-sdk/config.ts +198 -0
  235. package/src/integrations/chat-sdk/discord-api.ts +63 -0
  236. package/src/integrations/chat-sdk/discord-gateway.ts +185 -0
  237. package/src/integrations/chat-sdk/handlers.ts +28 -0
  238. package/src/integrations/chat-sdk/inbound.ts +426 -0
  239. package/src/integrations/chat-sdk/limits.ts +48 -0
  240. package/src/integrations/chat-sdk/logger.ts +81 -0
  241. package/src/integrations/chat-sdk/outbound.ts +123 -0
  242. package/src/integrations/chat-sdk/relay.ts +172 -0
  243. package/src/integrations/chat-sdk/router.ts +169 -0
  244. package/src/integrations/chat-sdk/runtime.ts +351 -0
  245. package/src/integrations/chat-sdk/schema.ts +245 -0
  246. package/src/integrations/chat-sdk/state.ts +243 -0
  247. package/src/integrations/chat-sdk/status.ts +244 -0
  248. package/src/integrations/chat-sdk/steering.ts +58 -0
  249. package/src/integrations/chat-sdk/teams-origin.ts +77 -0
  250. package/src/integrations/chat-sdk/telegram-api.ts +56 -0
  251. package/src/integrations/chat-sdk/templates.ts +16 -0
  252. package/src/integrations/chat-sdk/test-hooks.ts +37 -0
  253. package/src/integrations/chat-sdk/thread-buffer.ts +100 -0
  254. package/src/integrations/chat-sdk/typing.ts +65 -0
  255. package/src/jira/adf.ts +3 -1
  256. package/src/kv-reserved-namespaces.ts +2 -0
  257. package/src/oauth/mcp-wrapper.ts +10 -6
  258. package/src/otel-impl.ts +2 -1
  259. package/src/pages/version.ts +4 -5
  260. package/src/prompts/base-prompt.ts +111 -45
  261. package/src/providers/acp-target-catalog.ts +6 -0
  262. package/src/providers/acp-targets.ts +56 -3
  263. package/src/providers/amp-adapter.ts +1 -1
  264. package/src/providers/claude-adapter.ts +27 -2
  265. package/src/providers/claude-flag-settings.ts +133 -0
  266. package/src/providers/claude-managed-adapter.ts +1 -1
  267. package/src/providers/claude-sdk-session.ts +7 -0
  268. package/src/providers/claude-session-events.ts +6 -1
  269. package/src/providers/dsh-adapter.ts +1 -1
  270. package/src/providers/opencode-adapter.ts +268 -37
  271. package/src/providers/opencode-billing.ts +86 -0
  272. package/src/providers/opencode-swarm-plugin.ts +51 -0
  273. package/src/providers/pi-mono-adapter.ts +398 -153
  274. package/src/providers/pricing-sources.md +37 -3
  275. package/src/providers/reasoning-effort.ts +27 -0
  276. package/src/providers/types.ts +11 -2
  277. package/src/rbac/legacy-policy.ts +8 -2
  278. package/src/rbac/permissions.ts +21 -0
  279. package/src/scheduler/scheduler.ts +4 -2
  280. package/src/scripts-runtime/api-client.ts +15 -1
  281. package/src/scripts-runtime/api-types.ts +9 -1
  282. package/src/scripts-runtime/ctx.ts +1 -1
  283. package/src/scripts-runtime/loader.ts +19 -7
  284. package/src/scripts-runtime/mcp-client.ts +30 -19
  285. package/src/scripts-runtime/sdk-allowlist.ts +8 -6
  286. package/src/scripts-runtime/swarm-sdk.ts +0 -11
  287. package/src/scripts-runtime/types/stdlib.d.ts +27 -15
  288. package/src/scripts-runtime/types/swarm-extension.d.ts +63 -1
  289. package/src/scripts-runtime/types/swarm-sdk.d.ts +27 -15
  290. package/src/server.ts +52 -18
  291. package/src/slack/actions.ts +29 -1
  292. package/src/slack/app.ts +14 -2
  293. package/src/slack/assistant.ts +36 -2
  294. package/src/slack/channel-join.ts +3 -16
  295. package/src/slack/commands.ts +9 -1
  296. package/src/slack/event-dedup.ts +1 -1
  297. package/src/slack/external-channel-egress.ts +113 -0
  298. package/src/slack/external-channel.ts +309 -0
  299. package/src/slack/handlers.ts +61 -0
  300. package/src/slack/render-v2.ts +40 -47
  301. package/src/slack/work-objects.ts +5 -0
  302. package/src/tasks/additive-buffer.ts +4 -2
  303. package/src/tasks/context-key.ts +94 -2
  304. package/src/tasks/model-pin.ts +67 -0
  305. package/src/tasks/worker-follow-up.ts +4 -31
  306. package/src/telemetry.ts +2 -1
  307. package/src/tests/acp-adapter.test.ts +42 -0
  308. package/src/tests/api-drain-worker-e2e.test.ts +1 -6
  309. package/src/tests/apps-catalog-feedback.test.ts +310 -0
  310. package/src/tests/apps-catalog-inputs.test.ts +70 -0
  311. package/src/tests/apps-catalog-table.test.ts +113 -0
  312. package/src/tests/azure-devops-boards-sync.test.ts +584 -0
  313. package/src/tests/azure-devops-html.test.ts +13 -0
  314. package/src/tests/azure-devops-webhook-malformed.test.ts +4 -0
  315. package/src/tests/base-prompt.test.ts +58 -54
  316. package/src/tests/chat-sdk-commands.test.ts +191 -0
  317. package/src/tests/chat-sdk-config.test.ts +334 -0
  318. package/src/tests/chat-sdk-discord-api.test.ts +68 -0
  319. package/src/tests/chat-sdk-discord-gateway.test.ts +252 -0
  320. package/src/tests/chat-sdk-discord-webhook.test.ts +126 -0
  321. package/src/tests/chat-sdk-fields-sync.test.ts +50 -0
  322. package/src/tests/chat-sdk-harness.ts +146 -0
  323. package/src/tests/chat-sdk-inbound.test.ts +363 -0
  324. package/src/tests/chat-sdk-relay.test.ts +470 -0
  325. package/src/tests/chat-sdk-reload.test.ts +128 -0
  326. package/src/tests/chat-sdk-shutdown.test.ts +220 -0
  327. package/src/tests/chat-sdk-slack.test.ts +268 -0
  328. package/src/tests/chat-sdk-state.test.ts +163 -0
  329. package/src/tests/chat-sdk-status-route.test.ts +382 -0
  330. package/src/tests/chat-sdk-teams.test.ts +277 -0
  331. package/src/tests/chat-sdk-tools.test.ts +520 -0
  332. package/src/tests/chat-sdk-typing.test.ts +120 -0
  333. package/src/tests/chat-sdk-webhook-telegram.test.ts +200 -0
  334. package/src/tests/claude-adapter-binary.test.ts +144 -0
  335. package/src/tests/claude-flag-settings.test.ts +114 -0
  336. package/src/tests/claude-managed-adapter.test.ts +1 -1
  337. package/src/tests/claude-sdk-lifecycle.test.ts +148 -1
  338. package/src/tests/claude-sdk-process.fixture.ts +7 -0
  339. package/src/tests/claude-thinking-tokens.test.ts +57 -0
  340. package/src/tests/claude-worker-parity.test.ts +2 -7
  341. package/src/tests/config-env-export-chat-sdk.test.ts +11 -0
  342. package/src/tests/config-refs.test.ts +66 -0
  343. package/src/tests/context-key.test.ts +51 -0
  344. package/src/tests/cors-allowlist.test.ts +25 -0
  345. package/src/tests/create-page-tool.test.ts +18 -0
  346. package/src/tests/credential-check.test.ts +139 -0
  347. package/src/tests/credentials.test.ts +21 -0
  348. package/src/tests/db-runtime.test.ts +61 -0
  349. package/src/tests/db-task-read-contract.test.ts +20 -0
  350. package/src/tests/db-task-write-contract.test.ts +10 -0
  351. package/src/tests/deferred-task-wake.test.ts +52 -4
  352. package/src/tests/docs-index-footprint.test.js +3 -3
  353. package/src/tests/dsh-adapter.test.ts +1 -1
  354. package/src/tests/enabled-capabilities.test.ts +20 -0
  355. package/src/tests/entrypoint-api-readiness.test.ts +14 -8
  356. package/src/tests/entrypoint-config-env-export.test.ts +5 -2
  357. package/src/tests/entrypoint-export-to-env.test.ts +78 -0
  358. package/src/tests/explicit-model-validation.test.ts +105 -1
  359. package/src/tests/extensions-example-route-chat-channel.test.ts +154 -0
  360. package/src/tests/extensions-post-bridge.test.ts +51 -0
  361. package/src/tests/fetch-resolved-env.test.ts +128 -0
  362. package/src/tests/fixtures/azure-boards/workitem.commented.json +89 -0
  363. package/src/tests/fixtures/azure-boards/workitem.created.json +81 -0
  364. package/src/tests/fixtures/azure-boards/workitem.deleted.json +70 -0
  365. package/src/tests/fixtures/azure-boards/workitem.restored.json +82 -0
  366. package/src/tests/fixtures/azure-boards/workitem.updated.json +130 -0
  367. package/src/tests/fixtures/catalog-feedback-definition.json.txt +860 -0
  368. package/src/tests/fixtures/catalog-inputs-definition.json.txt +910 -0
  369. package/src/tests/fixtures/catalog-table-definition.json.txt +468 -0
  370. package/src/tests/fixtures/chat-sdk/telegram-private-text.json +10 -0
  371. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/hooks.ts +27 -0
  372. package/src/tests/fixtures/extensions/route-chat-channel-to-agent/manifest.json +9 -0
  373. package/src/tests/fixtures/openai-compatible-registry-extension.child.ts +146 -0
  374. package/src/tests/fixtures/runner-identity-refresh.ts +3 -0
  375. package/src/tests/fixtures/runner-legacy-resume-prompt.ts +122 -0
  376. package/src/tests/github-handlers.test.ts +35 -0
  377. package/src/tests/harness-provider-resolution.test.ts +12 -0
  378. package/src/tests/heartbeat-checklist.test.ts +3 -2
  379. package/src/tests/hook-runtime-close.test.ts +0 -2
  380. package/src/tests/http-api-integration.test.ts +0 -25
  381. package/src/tests/migration-046-budgets.test.ts +17 -16
  382. package/src/tests/migration-217-chat-sdk-state.test.ts +113 -0
  383. package/src/tests/model-tier-resolution.test.ts +93 -0
  384. package/src/tests/models-catalog.test.ts +42 -1
  385. package/src/tests/node-env-runtime.test.ts +98 -0
  386. package/src/tests/openai-compatible-providers.test.ts +134 -0
  387. package/src/tests/openai-compatible-registry-extension.test.ts +42 -0
  388. package/src/tests/opencode-adapter.test.ts +348 -3
  389. package/src/tests/opencode-billing.test.ts +28 -0
  390. package/src/tests/opencode-helmcode-sdk.test.ts +201 -0
  391. package/src/tests/opencode-shell-env.test.ts +145 -0
  392. package/src/tests/openrouter-base-url.test.ts +101 -151
  393. package/src/tests/page-proxy.test.ts +1 -1
  394. package/src/tests/pages-browser-sdk.test.ts +76 -0
  395. package/src/tests/pages-feedback.test.ts +1 -1
  396. package/src/tests/paused-tasks-requested-by.test.ts +102 -0
  397. package/src/tests/pi-custom-provider-fake-server.test.ts +442 -0
  398. package/src/tests/pi-mono-adapter.test.ts +385 -5
  399. package/src/tests/pi-shell-env.test.ts +170 -0
  400. package/src/tests/prompt-template-remaining.test.ts +35 -0
  401. package/src/tests/rbac-engine.test.ts +11 -3
  402. package/src/tests/runner-exit-after-tasks.test.ts +0 -4
  403. package/src/tests/runner-identity-refresh.test.ts +3 -0
  404. package/src/tests/runner-legacy-resume-prompt.test.ts +64 -0
  405. package/src/tests/script-connections-sql.test.ts +675 -0
  406. package/src/tests/script-connections.test.ts +7 -1
  407. package/src/tests/scripts-http.test.ts +201 -1
  408. package/src/tests/scripts-only-gating.test.ts +2 -3
  409. package/src/tests/scripts-runtime.test.ts +58 -40
  410. package/src/tests/secret-scrubber.test.ts +86 -0
  411. package/src/tests/seed-skills-bundled-files.test.ts +45 -53
  412. package/src/tests/seed-skills-retire.test.ts +182 -0
  413. package/src/tests/send-task-requester-gate.test.ts +58 -0
  414. package/src/tests/session-cost-recompute-unit.test.ts +94 -0
  415. package/src/tests/skill-get-name-resolution.test.ts +137 -0
  416. package/src/tests/slack-channel-join.test.ts +4 -1
  417. package/src/tests/slack-external-channel-config.test.ts +65 -0
  418. package/src/tests/slack-external-channel-egress.test.ts +237 -0
  419. package/src/tests/slack-external-channel-guard.test.ts +280 -0
  420. package/src/tests/slack-external-channel-tools.test.ts +173 -0
  421. package/src/tests/slack-external-channel.test.ts +370 -0
  422. package/src/tests/slack-render-v2.test.ts +86 -10
  423. package/src/tests/sonnet-5-5-registry.test.ts +9 -1
  424. package/src/tests/spec-base-url.test.ts +16 -1
  425. package/src/tests/swarm-config-export-to-env.test.ts +267 -0
  426. package/src/tests/swarm-config-reserved-keys.test.ts +16 -0
  427. package/src/tests/swarm-diff.test.ts +1 -1
  428. package/src/tests/task-model-effort-rerun.test.ts +164 -0
  429. package/src/tests/task-session-prompts.test.ts +132 -0
  430. package/src/tests/task-tool-manifest.test.ts +14 -0
  431. package/src/tests/task-tools-ctx.test.ts +2 -0
  432. package/src/tests/tool-annotations.test.ts +6 -6
  433. package/src/tests/ui-logs-parser.test.ts +43 -0
  434. package/src/tests/used-by-route.test.ts +6 -0
  435. package/src/tests/vendored-openapi.test.ts +16 -1
  436. package/src/tests/vercel-ai-gateway.test.ts +149 -0
  437. package/src/tests/workflow-swarm-script.test.ts +38 -0
  438. package/src/tests/workflow-wait-filter.test.ts +5 -3
  439. package/src/tools/chat-access.ts +41 -0
  440. package/src/tools/chat-open-dm.ts +59 -0
  441. package/src/tools/chat-post.ts +74 -0
  442. package/src/tools/chat-read-thread.ts +100 -0
  443. package/src/tools/chat-reply.ts +75 -0
  444. package/src/tools/create-page.ts +3 -13
  445. package/src/tools/defer-task.ts +17 -0
  446. package/src/tools/model-catalog/index.ts +2 -1
  447. package/src/tools/register-chat-channel.ts +139 -0
  448. package/src/tools/send-task.ts +24 -0
  449. package/src/tools/skills/skill-get.ts +17 -9
  450. package/src/tools/slack-post.ts +6 -0
  451. package/src/tools/slack-read.ts +8 -0
  452. package/src/tools/slack-reply.ts +6 -0
  453. package/src/tools/slack-start-thread.ts +6 -0
  454. package/src/tools/slack-update.ts +6 -0
  455. package/src/tools/slack-upload-file.ts +6 -0
  456. package/src/tools/swarm-config/get-config.ts +2 -1
  457. package/src/tools/swarm-config/list-config.ts +2 -1
  458. package/src/tools/swarm-config/set-config.ts +16 -3
  459. package/src/tools/tool-config.ts +8 -6
  460. package/src/types.ts +12 -2
  461. package/src/utils/config-env-export.ts +74 -0
  462. package/src/utils/credentials.test.ts +92 -0
  463. package/src/utils/credentials.ts +52 -4
  464. package/src/utils/harness-provider.ts +15 -6
  465. package/src/utils/node-env.ts +24 -0
  466. package/src/utils/runtime-model-catalog.ts +11 -1
  467. package/src/utils/secret-scrubber.ts +71 -2
  468. package/src/utils/task-tool-manifest.ts +19 -2
  469. package/src/workflows/executors/swarm-script.ts +1 -0
  470. package/templates/skills/agent-browser/SKILL.md +1 -1
  471. package/templates/skills/agent-browser/content.md +1 -1
  472. package/templates/skills/apps/SKILL.md +749 -0
  473. package/templates/skills/apps/content.md +60 -22
  474. package/templates/skills/chat-sdk/config.json +14 -0
  475. package/templates/skills/chat-sdk/content.md +84 -0
  476. package/templates/skills/composio-gmail/content.md +7 -0
  477. package/templates/skills/composio-google-docs/content.md +1 -1
  478. package/templates/skills/email-domain-health/config.json +14 -0
  479. package/templates/skills/email-domain-health/content.md +131 -0
  480. package/templates/skills/kv-storage/content.md +2 -2
  481. package/templates/skills/pages/content.md +8 -10
  482. package/templates/skills/qa-loom/config.json +14 -0
  483. package/templates/skills/qa-loom/content.md +187 -0
  484. package/templates/skills/qa-loom/files/build-loom.mjs +221 -0
  485. package/templates/skills/qa-loom/files/run-qa.sh +57 -0
  486. package/templates/skills/slack-interaction/content.md +4 -0
  487. package/templates/skills/swarm-extensions/content.md +2 -0
  488. package/templates/skills/swarm-scripts/SKILL.md +4 -2
  489. package/templates/skills/swarm-scripts/config.json +1 -1
  490. package/templates/skills/swarm-scripts/content.md +4 -2
  491. package/templates/skills/workflow-iterate/content.md +38 -0
  492. package/dist/artifact-eczsknc3.js +0 -3843
  493. package/dist/cli-9xsmdpdt.js +0 -56377
  494. package/dist/cli-bd957dgb.js +0 -153
  495. package/dist/cli-q51yprfq.js +0 -1104
  496. package/dist/cli-t1ze64h3.js +0 -811
  497. package/dist/index-9ch1n761.js +0 -1102
  498. package/src/artifact-sdk/index.ts +0 -2
  499. package/src/artifact-sdk/localtunnel.d.ts +0 -20
  500. package/src/artifact-sdk/port.ts +0 -12
  501. package/src/artifact-sdk/server.ts +0 -183
  502. package/src/artifact-sdk/tunnel.ts +0 -19
  503. package/src/commands/artifact.ts +0 -249
  504. package/src/http/ecosystem.ts +0 -77
  505. package/src/tests/artifact-commands.test.ts +0 -92
  506. package/src/tests/artifact-sdk.test.ts +0 -793
  507. package/src/tests/register-service-security.test.ts +0 -194
  508. package/src/tools/list-services.ts +0 -107
  509. package/src/tools/register-service.ts +0 -177
  510. package/src/tools/unregister-service.ts +0 -73
  511. package/src/tools/update-service-status.ts +0 -96
  512. package/templates/skills/artifacts/config.json +0 -14
  513. package/templates/skills/artifacts/content.md +0 -344
  514. package/templates/skills/artifacts/files/examples/approval-flow.ts +0 -34
  515. package/templates/skills/artifacts/files/examples/hono-dashboard.ts +0 -31
  516. package/templates/skills/artifacts/files/examples/multi-artifact.ts +0 -20
  517. package/templates/skills/artifacts/files/examples/static-report.sh +0 -17
  518. package/dist/{azure-openai-responses-ap1gwxgr.js → azure-openai-responses-ygfreq4t.js} +5 -5
  519. package/dist/{cli-5rqrj7q0.js → cli-pw7ebjdt.js} +0 -0
  520. package/dist/{openai-codex-responses-33qhkkdy.js → openai-codex-responses-3bk0grnr.js} +4 -4
  521. package/dist/{openai-completions-s88xm3ns.js → openai-completions-5d4jpakc.js} +9 -9
  522. package/dist/{openai-responses-7xd2f2e2.js → openai-responses-krb51f59.js} +5 -5
  523. package/dist/{pi-messages-xszk613n.js → pi-messages-x9gzynm1.js} +3 -3
  524. /package/src/{artifact-sdk → pages}/browser-sdk.ts +0 -0
  525. /package/src/{artifact-sdk → pages}/feedback-overlay.ts +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  runStopHookSessionSummarySubprocess
3
- } from "./cli-g6t9texm.js";
3
+ } from "./cli-m50t4309.js";
4
+ import {
5
+ fetchInstalledMcpServers
6
+ } from "./cli-tng3131n.js";
4
7
  import {
5
8
  buildOtelTraceparentEnv,
6
9
  isHarnessOtelEnabled
7
10
  } from "./cli-q2j38vre.js";
8
- import {
9
- fetchInstalledMcpServers
10
- } from "./cli-tng3131n.js";
11
11
  import {
12
12
  CTX_MODE_NUDGE_EVERY
13
13
  } from "./cli-zm7njwzd.js";
@@ -19,7 +19,7 @@ import {
19
19
  clampContextPercent,
20
20
  computeContextUsedUnified,
21
21
  getContextWindowSize
22
- } from "./cli-7avy4v8w.js";
22
+ } from "./cli-w1q7h2r2.js";
23
23
  import {
24
24
  isClaudeBridgeEffective,
25
25
  resolveClaudeTransport
@@ -32,7 +32,7 @@ import {
32
32
  } from "./cli-2pdaysab.js";
33
33
  import {
34
34
  applyReasoningEffort
35
- } from "./cli-tmhsxhb8.js";
35
+ } from "./cli-n5vwg842.js";
36
36
  import {
37
37
  require_src
38
38
  } from "./cli-knd276ed.js";
@@ -47,12 +47,12 @@ import {
47
47
  import {
48
48
  init_file_lock,
49
49
  withFileLock
50
- } from "./cli-nyhb1r6x.js";
50
+ } from "./cli-s2sp957d.js";
51
51
  import {
52
52
  CLAUDE_CREDENTIALS_HINT,
53
53
  init_credentials,
54
54
  validateClaudeCredentials
55
- } from "./cli-tadfgd0t.js";
55
+ } from "./cli-5hkm7whv.js";
56
56
  import {
57
57
  deriveDefaultRoute,
58
58
  init_src,
@@ -70,7 +70,7 @@ import {
70
70
  import {
71
71
  init_secret_scrubber,
72
72
  scrubSecrets
73
- } from "./cli-d161g69q.js";
73
+ } from "./cli-p1x85d2t.js";
74
74
  import {
75
75
  __require,
76
76
  __toESM
@@ -93,8 +93,8 @@ import {
93
93
  utimes,
94
94
  writeFile
95
95
  } from "node:fs/promises";
96
- import { homedir } from "node:os";
97
- import { dirname, join, resolve } from "node:path";
96
+ import { homedir as homedir2 } from "node:os";
97
+ import { dirname, join as join2, resolve as resolve2 } from "node:path";
98
98
  import { promisify } from "node:util";
99
99
  init_credentials();
100
100
  init_env_flag();
@@ -167,6 +167,80 @@ class ClaudeBackgroundKeepalive {
167
167
  }
168
168
  }
169
169
 
170
+ // src/providers/claude-flag-settings.ts
171
+ init_secret_scrubber();
172
+ import { readFileSync } from "node:fs";
173
+ import { homedir } from "node:os";
174
+ import { join, resolve } from "node:path";
175
+ var WORKSPACE_CLAUDE_MD_EXCLUDE = "/workspace/CLAUDE.md";
176
+ function userClaudeMdExclude(home = process.env.HOME ?? homedir()) {
177
+ return join(home, ".claude", "CLAUDE.md");
178
+ }
179
+ function claudeFlagSettings() {
180
+ return { claudeMdExcludes: [WORKSPACE_CLAUDE_MD_EXCLUDE, userClaudeMdExclude()] };
181
+ }
182
+ var SETTINGS_FLAG = "--settings";
183
+
184
+ class ClaudeSettingsConfigError extends Error {
185
+ constructor(detail) {
186
+ super(scrubSecrets(`Invalid caller --settings: ${detail}. Refusing to start Claude without the caller's settings.`));
187
+ this.name = "ClaudeSettingsConfigError";
188
+ }
189
+ }
190
+ function isPlainObject(value) {
191
+ return typeof value === "object" && value !== null && !Array.isArray(value);
192
+ }
193
+ function parseCallerSettings(value, cwd) {
194
+ const inline = value.trimStart().startsWith("{");
195
+ const source = inline ? "inline JSON" : `file ${resolve(cwd, value)}`;
196
+ let parsed;
197
+ try {
198
+ parsed = JSON.parse(inline ? value : readFileSync(resolve(cwd, value), "utf8"));
199
+ } catch (err) {
200
+ const code = err.code;
201
+ throw new ClaudeSettingsConfigError(`${source} ${inline || !code ? "is not valid JSON" : `cannot be read (${code})`}`);
202
+ }
203
+ if (!isPlainObject(parsed)) {
204
+ throw new ClaudeSettingsConfigError(`${source} is not a JSON object`);
205
+ }
206
+ return parsed;
207
+ }
208
+ function mergeClaudeSettingsArgs(argLists, cwd) {
209
+ const merged = {};
210
+ const excludes = new Set;
211
+ const absorb = (value) => {
212
+ if (!value)
213
+ throw new ClaudeSettingsConfigError("--settings has no value");
214
+ const parsed = parseCallerSettings(value, cwd);
215
+ Object.assign(merged, parsed);
216
+ if (Array.isArray(parsed.claudeMdExcludes)) {
217
+ for (const entry of parsed.claudeMdExcludes) {
218
+ if (typeof entry === "string")
219
+ excludes.add(entry);
220
+ }
221
+ }
222
+ };
223
+ const stripped = argLists.map((args) => {
224
+ const passthrough = [];
225
+ for (let i = 0;i < args.length; i++) {
226
+ const arg = args[i] ?? "";
227
+ if (arg === SETTINGS_FLAG) {
228
+ const value = args[i + 1];
229
+ absorb(value?.startsWith("-") ? undefined : value);
230
+ i++;
231
+ } else if (arg.startsWith(`${SETTINGS_FLAG}=`)) {
232
+ absorb(arg.slice(SETTINGS_FLAG.length + 1));
233
+ } else {
234
+ passthrough.push(arg);
235
+ }
236
+ }
237
+ return passthrough;
238
+ });
239
+ for (const entry of claudeFlagSettings().claudeMdExcludes)
240
+ excludes.add(entry);
241
+ return { argLists: stripped, settings: { ...merged, claudeMdExcludes: [...excludes] } };
242
+ }
243
+
170
244
  // src/providers/claude-session-events.ts
171
245
  init_secret_scrubber();
172
246
  function finiteNumber(value) {
@@ -216,7 +290,7 @@ function costFromResult(json, state) {
216
290
  cacheWriteTokens: usage?.cache_creation_input_tokens ?? 0,
217
291
  cacheWrite5mTokens: finiteNumber(cacheCreation?.ephemeral_5m_input_tokens),
218
292
  cacheWrite1hTokens: finiteNumber(cacheCreation?.ephemeral_1h_input_tokens),
219
- thinkingTokens: usage?.thinking_input_tokens ?? 0,
293
+ thinkingTokens: tokenCount(usage?.output_tokens_details?.thinking_tokens) ?? tokenCount(usage?.thinking_input_tokens) ?? 0,
220
294
  models,
221
295
  durationMs: json.duration_ms || 0,
222
296
  numTurns: json.num_turns ?? null,
@@ -450,8 +524,8 @@ function withClaudeBridgeAuthArgs(argv, sourceEnv) {
450
524
  return [...argv];
451
525
  }
452
526
  var execFileAsync = promisify(execFile);
453
- async function preseedClaudeTrustDialog(dirs, homeDir = process.env.HOME ?? homedir()) {
454
- const claudeJsonPath = join(homeDir, ".claude.json");
527
+ async function preseedClaudeTrustDialog(dirs, homeDir = process.env.HOME ?? homedir2()) {
528
+ const claudeJsonPath = join2(homeDir, ".claude.json");
455
529
  const seed = async () => {
456
530
  for (let attempt = 1;; attempt++) {
457
531
  await withClaudeJsonLock(claudeJsonPath, () => seedTrustLocked(claudeJsonPath, dirs));
@@ -593,9 +667,9 @@ async function resolveClaudeTrustDirs(cwd) {
593
667
  "core.worktree"
594
668
  ]).then((r) => r.stdout.trim(), () => "");
595
669
  if (configured)
596
- main = resolve(path, configured);
670
+ main = resolve2(path, configured);
597
671
  main = await realpath(main);
598
- if (await stat(join(main, ".git")).then(() => true, () => false)) {
672
+ if (await stat(join2(main, ".git")).then(() => true, () => false)) {
599
673
  if (!dirs.includes(main))
600
674
  dirs.push(main);
601
675
  }
@@ -631,7 +705,7 @@ async function createSessionMcpConfig(cwd, taskId, installedServers, contextKey)
631
705
  const mcpJsonPaths = [];
632
706
  let searchDir = cwd;
633
707
  while (true) {
634
- const candidate = join(searchDir, ".mcp.json");
708
+ const candidate = join2(searchDir, ".mcp.json");
635
709
  if (await Bun.file(candidate).exists()) {
636
710
  mcpJsonPaths.push(candidate);
637
711
  }
@@ -762,7 +836,7 @@ function getSystemPromptFilePath(taskId) {
762
836
  async function resolveClaudePrompt(prompt, home, onInline) {
763
837
  const resolved = await resolveSlashSkillPrompt(prompt, {
764
838
  providerLabel: "claude",
765
- skillsDir: join(home, ".claude", "skills"),
839
+ skillsDir: join2(home, ".claude", "skills"),
766
840
  stripFrontmatter: true,
767
841
  emit: (event) => {
768
842
  if (event.type === "raw_stderr")
@@ -782,6 +856,7 @@ class ClaudeSession {
782
856
  harnessVariantMeta;
783
857
  queueSteeringSupported;
784
858
  runSessionSummary;
859
+ flagSettings;
785
860
  proc;
786
861
  stdinWriter;
787
862
  listeners = [];
@@ -797,7 +872,7 @@ class ClaudeSession {
797
872
  transcript;
798
873
  backgroundKeepalive;
799
874
  deliverSteering;
800
- constructor(config, model, taskFilePath, taskFileKey, sessionMcpConfig = null, claudeBinaryArgv = ["claude"], systemPromptFile = null, harnessVariant, harnessVariantMeta, queueSteeringSupported = false, runSessionSummary = runStopHookSessionSummarySubprocess) {
875
+ constructor(config, model, taskFilePath, taskFileKey, sessionMcpConfig = null, claudeBinaryArgv = ["claude"], systemPromptFile = null, harnessVariant, harnessVariantMeta, queueSteeringSupported = false, runSessionSummary = runStopHookSessionSummarySubprocess, flagSettings = claudeFlagSettings()) {
801
876
  this.config = config;
802
877
  this.model = model;
803
878
  this.sessionMcpConfig = sessionMcpConfig;
@@ -806,6 +881,7 @@ class ClaudeSession {
806
881
  this.harnessVariantMeta = harnessVariantMeta;
807
882
  this.queueSteeringSupported = queueSteeringSupported;
808
883
  this.runSessionSummary = runSessionSummary;
884
+ this.flagSettings = flagSettings;
809
885
  this.taskFileKey = taskFileKey;
810
886
  this.contextWindowSize = getContextWindowSize(model);
811
887
  this.systemPromptFile = systemPromptFile;
@@ -885,7 +961,9 @@ class ClaudeSession {
885
961
  "--dangerously-skip-permissions",
886
962
  "--allow-dangerously-skip-permissions",
887
963
  "--permission-mode",
888
- "bypassPermissions"
964
+ "bypassPermissions",
965
+ "--settings",
966
+ JSON.stringify(this.flagSettings)
889
967
  ];
890
968
  if (this.queueSteeringSupported) {
891
969
  cmd.push("--input-format", "stream-json");
@@ -1102,7 +1180,7 @@ class ClaudeAdapter {
1102
1180
  const sourceEnv = withClaudeRouteEnv(config.env || process.env);
1103
1181
  const sessionConfig = {
1104
1182
  ...config,
1105
- prompt: await resolveClaudePrompt(config.prompt, process.env.HOME ?? homedir(), config.onPromptSkill)
1183
+ prompt: await resolveClaudePrompt(config.prompt, process.env.HOME ?? homedir2(), config.onPromptSkill)
1106
1184
  };
1107
1185
  const transport = resolveClaudeTransport(sourceEnv);
1108
1186
  const credType = validateClaudeCredentials(sourceEnv);
@@ -1116,7 +1194,7 @@ class ClaudeAdapter {
1116
1194
  if (transport === "sdk" && isClaudeBridgeEffective(sourceEnv)) {
1117
1195
  throw new Error("CLAUDE_TRANSPORT=sdk cannot run with an effective Claude Bridge configuration. Select CLI transport or disable the bridge.");
1118
1196
  }
1119
- const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-gsfsh662.js") : undefined;
1197
+ const claudeSdk = transport === "sdk" ? await import("./claude-sdk-session-9jye6cxr.js") : undefined;
1120
1198
  claudeSdk?.validateClaudeSdkAdditionalArgs([
1121
1199
  ...claudeBinaryArgv.slice(1),
1122
1200
  ...config.additionalArgs ?? []
@@ -1125,7 +1203,14 @@ class ClaudeAdapter {
1125
1203
  console.warn(`\x1B[33m[claude]\x1B[0m SWARM_USE_CLAUDE_BRIDGE is set but no CLAUDE_CODE_OAUTH_TOKEN is present — falling back to stock 'claude'. claude-bridge requires a subscription/OAuth token (it forwards only the OAuth token to claude and strips ANTHROPIC_*); API-key billing is identical headless vs interactive, so the bridge isn't needed.`);
1126
1204
  }
1127
1205
  const isLegacyBridgeCompat = isLegacyClaudeBridgeCompatBinary(claudeBinaryRaw);
1128
- const effectiveClaudeBinaryArgv = useClaudeBridge ? withClaudeBridgeAuthArgs(claudeBinaryArgv, sourceEnv) : claudeBinaryArgv;
1206
+ const [claudeExecutable = "claude", ...claudePrefixArgs] = useClaudeBridge ? withClaudeBridgeAuthArgs(claudeBinaryArgv, sourceEnv) : claudeBinaryArgv;
1207
+ const {
1208
+ argLists: [prefixArgs = [], additionalArgs = []],
1209
+ settings: flagSettings
1210
+ } = mergeClaudeSettingsArgs([claudePrefixArgs, config.additionalArgs ?? []], config.cwd);
1211
+ const effectiveClaudeBinaryArgv = [claudeExecutable, ...prefixArgs];
1212
+ sessionConfig.additionalArgs = additionalArgs;
1213
+ const flagSettingsArgs = ["--settings", JSON.stringify(flagSettings)];
1129
1214
  const isInteractiveTmuxClaude = isLegacyBridgeCompat || useClaudeBridge;
1130
1215
  const configuredClaudeBinaryRaw = resolveClaudeBinary(sourceEnv);
1131
1216
  if (isLegacyClaudeBridgeCompatBinary(configuredClaudeBinaryRaw)) {
@@ -1170,7 +1255,7 @@ class ClaudeAdapter {
1170
1255
  const queueSteeringOverride = resolveClaudeQueueSteeringOverride(sourceEnv);
1171
1256
  let harnessVersion;
1172
1257
  try {
1173
- const probe = registerProcessGroup(Bun.spawn([...effectiveClaudeBinaryArgv, "--version"], {
1258
+ const probe = registerProcessGroup(Bun.spawn([...effectiveClaudeBinaryArgv, ...flagSettingsArgs, "--version"], {
1174
1259
  detached: detachedProcessGroup,
1175
1260
  env: sourceEnv,
1176
1261
  stdin: "ignore",
@@ -1206,6 +1291,7 @@ ${stderr}`.trim();
1206
1291
  taskFileKey,
1207
1292
  sessionMcpConfig,
1208
1293
  claudeBinaryArgv: effectiveClaudeBinaryArgv,
1294
+ settings: flagSettings,
1209
1295
  systemPromptFile,
1210
1296
  harnessVariant,
1211
1297
  harnessVariantMeta,
@@ -1213,7 +1299,7 @@ ${stderr}`.trim();
1213
1299
  runSessionSummary: this.runSessionSummary
1214
1300
  });
1215
1301
  }
1216
- return new ClaudeSession(sessionConfig, model, taskFilePath, taskFileKey, sessionMcpConfig, effectiveClaudeBinaryArgv, systemPromptFile, harnessVariant, harnessVariantMeta, queueSteeringSupported, this.runSessionSummary);
1302
+ return new ClaudeSession(sessionConfig, model, taskFilePath, taskFileKey, sessionMcpConfig, effectiveClaudeBinaryArgv, systemPromptFile, harnessVariant, harnessVariantMeta, queueSteeringSupported, this.runSessionSummary, flagSettings);
1217
1303
  }
1218
1304
  async canResume(_sessionId) {
1219
1305
  return true;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_secret_scrubber,
3
3
  scrubSecrets
4
- } from "./cli-d161g69q.js";
4
+ } from "./cli-p1x85d2t.js";
5
5
 
6
6
  // src/providers/devin-adapter.ts
7
7
  init_secret_scrubber();
@@ -795,7 +795,7 @@ GFS4: `);
795
795
  }
796
796
  });
797
797
 
798
- // node_modules/retry/lib/retry_operation.js
798
+ // node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js
799
799
  var require_retry_operation = __commonJS(function(exports, module) {
800
800
  function RetryOperation(timeouts, options) {
801
801
  if (typeof options === "boolean") {
@@ -924,7 +924,7 @@ var require_retry_operation = __commonJS(function(exports, module) {
924
924
  };
925
925
  });
926
926
 
927
- // node_modules/retry/lib/retry.js
927
+ // node_modules/proper-lockfile/node_modules/retry/lib/retry.js
928
928
  var require_retry = __commonJS(function(exports) {
929
929
  var RetryOperation = require_retry_operation();
930
930
  exports.operation = function(options) {
@@ -6,11 +6,11 @@ import {
6
6
  getSwarmConfigs,
7
7
  init_db1 as init_db,
8
8
  upsertSwarmConfig
9
- } from "./cli-tgpfnm6r.js";
9
+ } from "./cli-ef1hg1wv.js";
10
10
  import {
11
11
  init_secret_scrubber,
12
12
  scrubSecrets
13
- } from "./cli-d161g69q.js";
13
+ } from "./cli-p1x85d2t.js";
14
14
  import {
15
15
  __require
16
16
  } from "./cli-bc05qbss.js";
@@ -1,12 +1,19 @@
1
1
  import {
2
2
  getDb,
3
3
  init_db1 as init_db
4
- } from "./cli-tgpfnm6r.js";
4
+ } from "./cli-ef1hg1wv.js";
5
+ import {
6
+ init_src,
7
+ openAICompatibleProviderIds,
8
+ withRegistryCatalogSections
9
+ } from "./cli-e3g5mbkz.js";
5
10
 
6
11
  // src/be/seed-pricing.ts
12
+ init_src();
7
13
  init_db();
8
14
 
9
15
  // src/be/modelsdev-cache.ts
16
+ init_src();
10
17
  import { readFileSync } from "node:fs";
11
18
  import path from "node:path";
12
19
  var MODELSDEV_CACHE_PATH = path.join("src", "be", "modelsdev-cache.json");
@@ -24,7 +31,7 @@ function loadModelsDevCache() {
24
31
  if (memoized)
25
32
  return memoized;
26
33
  try {
27
- const parsed = JSON.parse(readFileSync(candidate, "utf-8"));
34
+ const parsed = withRegistryCatalogSections(JSON.parse(readFileSync(candidate, "utf-8")));
28
35
  parsedCaches.set(candidate, new WeakRef(parsed));
29
36
  return parsed;
30
37
  } catch {}
@@ -108,7 +115,7 @@ var ANTHROPIC_SHORTNAME_TO_MODELSDEV = {
108
115
  };
109
116
  var ANTHROPIC_SHORTNAME_PRICING_FALLBACKS = {
110
117
  "claude-opus-5-5": { input: 4, output: 20, cache_read: 0.2, cache_write: 5 },
111
- "claude-sonnet-5-5": { input: 2, output: 10, cache_read: 0.2, cache_write: 2.5 },
118
+ "claude-sonnet-5-5": { input: 2, output: 10, cache_read: 0.1, cache_write: 2.5 },
112
119
  "claude-fable-5-1": { input: 10, output: 50, cache_read: 0.25, cache_write: 12.5 },
113
120
  "claude-mythos-5-1": { input: 10, output: 50, cache_read: 0.25, cache_write: 12.5 }
114
121
  };
@@ -261,6 +268,15 @@ function buildModelsDevSeedRows(cache) {
261
268
  add(id, projectCostBlock("gemini", id, model.cost));
262
269
  }
263
270
  }
271
+ for (const provider of openAICompatibleProviderIds()) {
272
+ for (const [id, model] of Object.entries(cache[provider]?.models ?? {})) {
273
+ if (!model?.cost)
274
+ continue;
275
+ const key = `${provider}/${id}`;
276
+ add(key, projectCostBlock("pi", key, model.cost));
277
+ add(key, projectCostBlock("opencode", key, model.cost));
278
+ }
279
+ }
264
280
  return collapseNormalizedIds(sourced);
265
281
  }
266
282
  function buildPricingSeedRows(cache) {
@@ -14,11 +14,11 @@ async function createRuntimeProvider(kind, target = {}) {
14
14
  return new StaticRuntimeProvider;
15
15
  }
16
16
  case "docker": {
17
- const { DockerRuntimeProvider } = await import("./docker-f503k9p0.js");
17
+ const { DockerRuntimeProvider } = await import("./docker-ff6y1190.js");
18
18
  return new DockerRuntimeProvider;
19
19
  }
20
20
  case "e2b": {
21
- const { E2BRuntimeProvider } = await import("./e2b-66xra4az.js");
21
+ const { E2BRuntimeProvider } = await import("./e2b-8ygwhg0f.js");
22
22
  return new E2BRuntimeProvider(target);
23
23
  }
24
24
  case "k8s":
@@ -0,0 +1,294 @@
1
+ import {
2
+ __commonJS
3
+ } from "./cli-bc05qbss.js";
4
+
5
+ // node_modules/retry/lib/retry_operation.js
6
+ var require_retry_operation = __commonJS(function(exports, module) {
7
+ function RetryOperation(timeouts, options) {
8
+ if (typeof options === "boolean") {
9
+ options = { forever: options };
10
+ }
11
+ this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));
12
+ this._timeouts = timeouts;
13
+ this._options = options || {};
14
+ this._maxRetryTime = options && options.maxRetryTime || Infinity;
15
+ this._fn = null;
16
+ this._errors = [];
17
+ this._attempts = 1;
18
+ this._operationTimeout = null;
19
+ this._operationTimeoutCb = null;
20
+ this._timeout = null;
21
+ this._operationStart = null;
22
+ this._timer = null;
23
+ if (this._options.forever) {
24
+ this._cachedTimeouts = this._timeouts.slice(0);
25
+ }
26
+ }
27
+ module.exports = RetryOperation;
28
+ RetryOperation.prototype.reset = function() {
29
+ this._attempts = 1;
30
+ this._timeouts = this._originalTimeouts.slice(0);
31
+ };
32
+ RetryOperation.prototype.stop = function() {
33
+ if (this._timeout) {
34
+ clearTimeout(this._timeout);
35
+ }
36
+ if (this._timer) {
37
+ clearTimeout(this._timer);
38
+ }
39
+ this._timeouts = [];
40
+ this._cachedTimeouts = null;
41
+ };
42
+ RetryOperation.prototype.retry = function(err) {
43
+ if (this._timeout) {
44
+ clearTimeout(this._timeout);
45
+ }
46
+ if (!err) {
47
+ return false;
48
+ }
49
+ var currentTime = new Date().getTime();
50
+ if (err && currentTime - this._operationStart >= this._maxRetryTime) {
51
+ this._errors.push(err);
52
+ this._errors.unshift(new Error("RetryOperation timeout occurred"));
53
+ return false;
54
+ }
55
+ this._errors.push(err);
56
+ var timeout = this._timeouts.shift();
57
+ if (timeout === undefined) {
58
+ if (this._cachedTimeouts) {
59
+ this._errors.splice(0, this._errors.length - 1);
60
+ timeout = this._cachedTimeouts.slice(-1);
61
+ } else {
62
+ return false;
63
+ }
64
+ }
65
+ var self = this;
66
+ this._timer = setTimeout(function() {
67
+ self._attempts++;
68
+ if (self._operationTimeoutCb) {
69
+ self._timeout = setTimeout(function() {
70
+ self._operationTimeoutCb(self._attempts);
71
+ }, self._operationTimeout);
72
+ if (self._options.unref) {
73
+ self._timeout.unref();
74
+ }
75
+ }
76
+ self._fn(self._attempts);
77
+ }, timeout);
78
+ if (this._options.unref) {
79
+ this._timer.unref();
80
+ }
81
+ return true;
82
+ };
83
+ RetryOperation.prototype.attempt = function(fn, timeoutOps) {
84
+ this._fn = fn;
85
+ if (timeoutOps) {
86
+ if (timeoutOps.timeout) {
87
+ this._operationTimeout = timeoutOps.timeout;
88
+ }
89
+ if (timeoutOps.cb) {
90
+ this._operationTimeoutCb = timeoutOps.cb;
91
+ }
92
+ }
93
+ var self = this;
94
+ if (this._operationTimeoutCb) {
95
+ this._timeout = setTimeout(function() {
96
+ self._operationTimeoutCb();
97
+ }, self._operationTimeout);
98
+ }
99
+ this._operationStart = new Date().getTime();
100
+ this._fn(this._attempts);
101
+ };
102
+ RetryOperation.prototype.try = function(fn) {
103
+ console.log("Using RetryOperation.try() is deprecated");
104
+ this.attempt(fn);
105
+ };
106
+ RetryOperation.prototype.start = function(fn) {
107
+ console.log("Using RetryOperation.start() is deprecated");
108
+ this.attempt(fn);
109
+ };
110
+ RetryOperation.prototype.start = RetryOperation.prototype.try;
111
+ RetryOperation.prototype.errors = function() {
112
+ return this._errors;
113
+ };
114
+ RetryOperation.prototype.attempts = function() {
115
+ return this._attempts;
116
+ };
117
+ RetryOperation.prototype.mainError = function() {
118
+ if (this._errors.length === 0) {
119
+ return null;
120
+ }
121
+ var counts = {};
122
+ var mainError = null;
123
+ var mainErrorCount = 0;
124
+ for (var i = 0;i < this._errors.length; i++) {
125
+ var error = this._errors[i];
126
+ var message = error.message;
127
+ var count = (counts[message] || 0) + 1;
128
+ counts[message] = count;
129
+ if (count >= mainErrorCount) {
130
+ mainError = error;
131
+ mainErrorCount = count;
132
+ }
133
+ }
134
+ return mainError;
135
+ };
136
+ });
137
+
138
+ // node_modules/retry/lib/retry.js
139
+ var require_retry = __commonJS(function(exports) {
140
+ var RetryOperation = require_retry_operation();
141
+ exports.operation = function(options) {
142
+ var timeouts = exports.timeouts(options);
143
+ return new RetryOperation(timeouts, {
144
+ forever: options && (options.forever || options.retries === Infinity),
145
+ unref: options && options.unref,
146
+ maxRetryTime: options && options.maxRetryTime
147
+ });
148
+ };
149
+ exports.timeouts = function(options) {
150
+ if (options instanceof Array) {
151
+ return [].concat(options);
152
+ }
153
+ var opts = {
154
+ retries: 10,
155
+ factor: 2,
156
+ minTimeout: 1 * 1000,
157
+ maxTimeout: Infinity,
158
+ randomize: false
159
+ };
160
+ for (var key in options) {
161
+ opts[key] = options[key];
162
+ }
163
+ if (opts.minTimeout > opts.maxTimeout) {
164
+ throw new Error("minTimeout is greater than maxTimeout");
165
+ }
166
+ var timeouts = [];
167
+ for (var i = 0;i < opts.retries; i++) {
168
+ timeouts.push(this.createTimeout(i, opts));
169
+ }
170
+ if (options && options.forever && !timeouts.length) {
171
+ timeouts.push(this.createTimeout(i, opts));
172
+ }
173
+ timeouts.sort(function(a, b) {
174
+ return a - b;
175
+ });
176
+ return timeouts;
177
+ };
178
+ exports.createTimeout = function(attempt, opts) {
179
+ var random = opts.randomize ? Math.random() + 1 : 1;
180
+ var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));
181
+ timeout = Math.min(timeout, opts.maxTimeout);
182
+ return timeout;
183
+ };
184
+ exports.wrap = function(obj, options, methods) {
185
+ if (options instanceof Array) {
186
+ methods = options;
187
+ options = null;
188
+ }
189
+ if (!methods) {
190
+ methods = [];
191
+ for (var key in obj) {
192
+ if (typeof obj[key] === "function") {
193
+ methods.push(key);
194
+ }
195
+ }
196
+ }
197
+ for (var i = 0;i < methods.length; i++) {
198
+ var method = methods[i];
199
+ var original = obj[method];
200
+ obj[method] = function retryWrapper(original2) {
201
+ var op = exports.operation(options);
202
+ var args = Array.prototype.slice.call(arguments, 1);
203
+ var callback = args.pop();
204
+ args.push(function(err) {
205
+ if (op.retry(err)) {
206
+ return;
207
+ }
208
+ if (err) {
209
+ arguments[0] = op.mainError();
210
+ }
211
+ callback.apply(this, arguments);
212
+ });
213
+ op.attempt(function() {
214
+ original2.apply(obj, args);
215
+ });
216
+ }.bind(obj, original);
217
+ obj[method].options = options;
218
+ }
219
+ };
220
+ });
221
+
222
+ // node_modules/p-retry/index.js
223
+ var require_p_retry = __commonJS(function(exports, module) {
224
+ var retry = require_retry();
225
+ var networkErrorMsgs = [
226
+ "Failed to fetch",
227
+ "NetworkError when attempting to fetch resource.",
228
+ "The Internet connection appears to be offline.",
229
+ "Network request failed"
230
+ ];
231
+
232
+ class AbortError extends Error {
233
+ constructor(message) {
234
+ super();
235
+ if (message instanceof Error) {
236
+ this.originalError = message;
237
+ ({ message } = message);
238
+ } else {
239
+ this.originalError = new Error(message);
240
+ this.originalError.stack = this.stack;
241
+ }
242
+ this.name = "AbortError";
243
+ this.message = message;
244
+ }
245
+ }
246
+ var decorateErrorWithCounts = (error, attemptNumber, options) => {
247
+ const retriesLeft = options.retries - (attemptNumber - 1);
248
+ error.attemptNumber = attemptNumber;
249
+ error.retriesLeft = retriesLeft;
250
+ return error;
251
+ };
252
+ var isNetworkError = (errorMessage) => networkErrorMsgs.includes(errorMessage);
253
+ var pRetry = (input, options) => new Promise((resolve, reject) => {
254
+ options = {
255
+ onFailedAttempt: () => {},
256
+ retries: 10,
257
+ ...options
258
+ };
259
+ const operation = retry.operation(options);
260
+ operation.attempt(async (attemptNumber) => {
261
+ try {
262
+ resolve(await input(attemptNumber));
263
+ } catch (error) {
264
+ if (!(error instanceof Error)) {
265
+ reject(new TypeError(`Non-error was thrown: "${error}". You should only throw errors.`));
266
+ return;
267
+ }
268
+ if (error instanceof AbortError) {
269
+ operation.stop();
270
+ reject(error.originalError);
271
+ } else if (error instanceof TypeError && !isNetworkError(error.message)) {
272
+ operation.stop();
273
+ reject(error);
274
+ } else {
275
+ decorateErrorWithCounts(error, attemptNumber, options);
276
+ try {
277
+ await options.onFailedAttempt(error);
278
+ } catch (error2) {
279
+ reject(error2);
280
+ return;
281
+ }
282
+ if (!operation.retry(error)) {
283
+ reject(operation.mainError());
284
+ }
285
+ }
286
+ }
287
+ });
288
+ });
289
+ module.exports = pRetry;
290
+ module.exports.default = pRetry;
291
+ module.exports.AbortError = AbortError;
292
+ });
293
+
294
+ export { require_p_retry };