@desplega.ai/agent-swarm 2.7.4 → 2.7.5

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 (253) hide show
  1. package/README.md +1 -1
  2. package/dist/acp-adapter-g3ads55s.js +15 -0
  3. package/dist/{actions-gfrr9vb7.js → actions-zwfykqqk.js} +18 -18
  4. package/dist/{amp-adapter-0s58gm46.js → amp-adapter-z3s0ssdt.js} +3 -3
  5. package/dist/{app-stvq692g.js → app-vmp4fgep.js} +3 -3
  6. package/dist/{assistant-5s37fr9n.js → assistant-vwde653f.js} +28 -21
  7. package/dist/{boot-reembed-yzy1841n.js → boot-reembed-375t7tbk.js} +1 -1
  8. package/dist/{boot-reembed-cv82gz7y.js → boot-reembed-gq9rcpnj.js} +1 -1
  9. package/dist/{boot-scrub-sweep-8k4q95ap.js → boot-scrub-sweep-nd938kyf.js} +4 -4
  10. package/dist/{boot-seeds-ftt9htah.js → boot-seeds-aykx51v3.js} +4 -4
  11. package/dist/{boxd-515v1t8z.js → boxd-k1j26g3h.js} +1 -1
  12. package/dist/{claude-adapter-t00wrzeh.js → claude-adapter-8j4hm099.js} +7 -7
  13. package/dist/{claude-managed-adapter-g6vmjccb.js → claude-managed-adapter-dvs2xw5n.js} +2 -2
  14. package/dist/{claude-managed-setup-afpa82f7.js → claude-managed-setup-0wyynpn1.js} +3 -3
  15. package/dist/{claude-sdk-session-vj0c2azx.js → claude-sdk-session-q6wj5hmy.js} +9 -9
  16. package/dist/{cli-wndv9p7g.js → cli-0731hvbw.js} +6 -6
  17. package/dist/{cli-d2pzqej1.js → cli-0bxqnvq9.js} +719 -7
  18. package/dist/{cli-jkt52mgt.js → cli-0gey5fzy.js} +2 -2
  19. package/dist/{cli-1yekbyqm.js → cli-1338796d.js} +205 -48
  20. package/dist/{cli-1s1dqn1j.js → cli-1ayk1eas.js} +171 -123
  21. package/dist/{cli-a4btqqft.js → cli-1b7btd38.js} +1 -1
  22. package/dist/{cli-a2jw6ee5.js → cli-1p89xny0.js} +1 -1
  23. package/dist/{cli-v726afdm.js → cli-2pnswgh8.js} +1 -1
  24. package/dist/{cli-kvtc7aez.js → cli-3h4nhjn8.js} +42 -14
  25. package/dist/{cli-655xm9ms.js → cli-583frbyr.js} +1 -1
  26. package/dist/{cli-4r12t6w6.js → cli-5c4hjzne.js} +101 -4
  27. package/dist/{cli-az0bpf8p.js → cli-5pag6rmn.js} +3 -3
  28. package/dist/{cli-36g23z21.js → cli-6s7vdcta.js} +4 -4
  29. package/dist/{cli-rtk9g7av.js → cli-73jzwksr.js} +6 -2
  30. package/dist/{cli-jg0nfda6.js → cli-75gkpjvw.js} +52 -21
  31. package/dist/{cli-a81qevyg.js → cli-7a42nfy0.js} +20 -36
  32. package/dist/{cli-0sbkss7h.js → cli-7wcyk2s5.js} +2 -2
  33. package/dist/{cli-41z8xwj0.js → cli-7wspm5gm.js} +14 -4
  34. package/dist/{cli-byqfbnjw.js → cli-82ae98pz.js} +9 -9
  35. package/dist/{cli-bq2pcphn.js → cli-8hs41zy2.js} +1 -1
  36. package/dist/{cli-vqgnyh76.js → cli-98rw5dt5.js} +15 -3
  37. package/dist/{cli-9cctx1tn.js → cli-a22h291q.js} +1 -1
  38. package/dist/{cli-j4kt1mpb.js → cli-a47xy8eq.js} +3 -3
  39. package/dist/{cli-ycm6180s.js → cli-a7v854rf.js} +5 -3
  40. package/dist/{cli-98pke4vk.js → cli-ae7mrdf9.js} +2 -2
  41. package/dist/{cli-ahd90bwt.js → cli-afrrppsw.js} +6 -6
  42. package/dist/{cli-8yy525ad.js → cli-bhjt02p8.js} +2 -2
  43. package/dist/{cli-v1yw3wha.js → cli-bnz7a7qf.js} +4 -4
  44. package/dist/{cli-j4kw3rsx.js → cli-cm5yqn35.js} +18 -0
  45. package/dist/{cli-h55y2bjc.js → cli-dhar9qay.js} +2 -2
  46. package/dist/{cli-5gr1g711.js → cli-fqzx7gwa.js} +2 -2
  47. package/dist/{cli-tzrpv5sc.js → cli-ftyxyspd.js} +1 -1
  48. package/dist/cli-fw2w0kva.js +47 -0
  49. package/dist/{cli-2dfbv8qr.js → cli-fy6x31ps.js} +1 -0
  50. package/dist/{cli-mvckssyq.js → cli-g61qxmge.js} +5 -5
  51. package/dist/{cli-aq58fk5m.js → cli-g83s9ewh.js} +7 -1
  52. package/dist/{cli-224epwwf.js → cli-hn9hxmz9.js} +3 -3
  53. package/dist/{cli-5hjced2v.js → cli-j3jvnpe8.js} +6 -6
  54. package/dist/{cli-dae4sbgy.js → cli-jm2vfpfd.js} +2 -2
  55. package/dist/{cli-zn15c46z.js → cli-mjzynrse.js} +1 -1
  56. package/dist/{cli-a1fhj4n9.js → cli-mmwm7zbf.js} +2 -2
  57. package/dist/{cli-cq1pf336.js → cli-mry0qzym.js} +5 -5
  58. package/dist/{cli-bwty35gx.js → cli-mthwvjre.js} +1 -1
  59. package/dist/{cli-s0exq74r.js → cli-nmbmy64z.js} +3 -3
  60. package/dist/{cli-wcmnan2g.js → cli-nn4d8dne.js} +5 -5
  61. package/dist/{cli-jg4p5t36.js → cli-nzxr556s.js} +121 -51
  62. package/dist/{cli-bcz074zx.js → cli-p599f1qm.js} +1 -1
  63. package/dist/{cli-k76tgq03.js → cli-pywf3eh5.js} +2 -2
  64. package/dist/{cli-wk9md5px.js → cli-qxnf8z2z.js} +2 -2
  65. package/dist/{cli-je8yeyc5.js → cli-rhw40jgb.js} +5 -5
  66. package/dist/{cli-avgcz4ra.js → cli-rm6hqj3z.js} +406 -35
  67. package/dist/{cli-0fgr1w9b.js → cli-rpm2sgv0.js} +2 -2
  68. package/dist/{cli-t282jgab.js → cli-rqkxrmgw.js} +12 -12
  69. package/dist/{cli-2qpvmmkw.js → cli-s0qnd4wv.js} +1 -1
  70. package/dist/{cli-pwyevs29.js → cli-spknvxbq.js} +22 -21
  71. package/dist/{cli-9y354g3j.js → cli-srye3vdt.js} +1 -1
  72. package/dist/{cli-pe09p6dv.js → cli-tqgg40ek.js} +1 -1
  73. package/dist/{cli-f255yaqn.js → cli-vbyfwh92.js} +3 -3
  74. package/dist/{cli-gcbdjt47.js → cli-vfym7wmz.js} +6 -6
  75. package/dist/{cli-edmm9d9y.js → cli-vqypxzh4.js} +7 -7
  76. package/dist/{cli-1gm8jcyr.js → cli-wvaawacd.js} +13 -13
  77. package/dist/{cli-eny54typ.js → cli-wx3rhnm0.js} +1 -1
  78. package/dist/{cli-b1afgtj3.js → cli-xbkdm710.js} +3 -3
  79. package/dist/{cli-mc97xy2s.js → cli-xtjhfmpc.js} +16 -4
  80. package/dist/{cli-eqx6k993.js → cli-y24sc29k.js} +25 -13
  81. package/dist/{cli-ktmvb20s.js → cli-z6jkx23q.js} +12 -12
  82. package/dist/{cli-7n5sbw0z.js → cli-z8eh3ex8.js} +5 -5
  83. package/dist/cli-zh3fp8v2.js +151 -0
  84. package/dist/{cli-13jvmew3.js → cli-zppwg9p9.js} +7 -7
  85. package/dist/cli.js +18 -18
  86. package/dist/{codex-adapter-g0gctw29.js → codex-adapter-q6k3gnyg.js} +5 -5
  87. package/dist/{codex-hook-vrzz2xhr.js → codex-hook-9efm2x1m.js} +1 -1
  88. package/dist/{codex-login-0gg46ygn.js → codex-login-y0pmff1c.js} +1 -1
  89. package/dist/{codex-session-runner-dr2cxe1c.js → codex-session-runner-3mwmk3d9.js} +6 -6
  90. package/dist/{commands-1p07cvff.js → commands-evrenjn9.js} +2 -2
  91. package/dist/{controller-z0s7sv6r.js → controller-xjp8vswh.js} +4 -4
  92. package/dist/{controllers-connect-x9kvvhyk.js → controllers-connect-pp5jnxvc.js} +20 -20
  93. package/dist/{cursor-adapter-m5b98pvk.js → cursor-adapter-yf47w4t0.js} +2 -2
  94. package/dist/{db-rsh04kh3.js → db-rgfsh91f.js} +2 -2
  95. package/dist/{db-capk2raj.js → db-zxpw6aht.js} +3 -3
  96. package/dist/{devin-adapter-yxm87fe9.js → devin-adapter-r9phbnc9.js} +1 -1
  97. package/dist/{dispatcher-304q6fwa.js → dispatcher-smasgws7.js} +17 -17
  98. package/dist/{docker-7rxt0rry.js → docker-rrjhaqt9.js} +2 -2
  99. package/dist/{dsh-adapter-btewem0y.js → dsh-adapter-ftyy8dnp.js} +2 -2
  100. package/dist/{e2b-renc0k8q.js → e2b-qcaj675y.js} +2 -2
  101. package/dist/{e2b-7fc9b9bd.js → e2b-w1p0bnpm.js} +2 -2
  102. package/dist/{easter-egg-3d-fm1p3n4d.js → easter-egg-3d-yyts7p16.js} +1 -1
  103. package/dist/{embedding-space-s68v49ct.js → embedding-space-1z0mbg95.js} +6 -6
  104. package/dist/{embeddings-4ms3604w.js → embeddings-ygeg7tm7.js} +1 -1
  105. package/dist/{event-bus-dfjx2qdh.js → event-bus-g0ka3pbw.js} +1 -1
  106. package/dist/{execute-mcdgccjs.js → execute-14qhqp4d.js} +1 -1
  107. package/dist/{external-channel-9dxwfztn.js → external-channel-ttgrs3sx.js} +2 -2
  108. package/dist/fx-adapter-gt6pncj2.js +18 -0
  109. package/dist/{grok-adapter-05ecv4h0.js → grok-adapter-sm4m5k4g.js} +8 -8
  110. package/dist/handlers-vwmba1m2.js +31 -0
  111. package/dist/{heartbeat-3n94heh3.js → heartbeat-qahz4p62.js} +20 -20
  112. package/dist/{hook-zxwje86c.js → hook-4fd5wq5w.js} +4 -4
  113. package/dist/{hook-aadrn69x.js → hook-kj3d398m.js} +6 -6
  114. package/dist/{http-xzxk9mst.js → http-1ted0j1k.js} +100 -64
  115. package/dist/index-5r71rf98.js +32 -0
  116. package/dist/{index-d34f6r87.js → index-6rq3r5zb.js} +1 -1
  117. package/dist/{index-9j4zwcht.js → index-7v51awbn.js} +158 -672
  118. package/dist/index-anmwxs87.js +29 -0
  119. package/dist/{index-qeb82z37.js → index-q4b917zs.js} +1 -1
  120. package/dist/index-spp0ra5c.js +36 -0
  121. package/dist/{keepalive-w4aakbyk.js → keepalive-6cf311t5.js} +4 -4
  122. package/dist/lead-fjy418cw.js +69 -0
  123. package/dist/{maintenance-hbptpk6p.js → maintenance-a4bm1bmt.js} +1 -1
  124. package/dist/{oauth-refresh-sweep-217semrv.js → oauth-refresh-sweep-3h0dfw1k.js} +3 -3
  125. package/dist/{onboard-vz2s5df3.js → onboard-myn5hraa.js} +3 -3
  126. package/dist/{opencode-adapter-gtfd7d7v.js → opencode-adapter-p2nkb5am.js} +5 -5
  127. package/dist/{otel-impl-aefave37.js → otel-impl-a1a0ef6b.js} +2 -2
  128. package/dist/{pi-mono-adapter-f8h5yseh.js → pi-mono-adapter-rzmpb72a.js} +117 -23
  129. package/dist/{pricing-refresh-m1yhh9ya.js → pricing-refresh-83drrnxj.js} +3 -3
  130. package/dist/{rbac-roles-svj72cdf.js → rbac-roles-0fb6e7pj.js} +2 -2
  131. package/dist/{rbac-roles-rrw8twdz.js → rbac-roles-s8y6ecb5.js} +1 -1
  132. package/dist/{render-v2-amwbnfxh.js → render-v2-twmbgrz4.js} +3 -3
  133. package/dist/{resume-9cd6wf6z.js → resume-zfqc36xj.js} +7 -7
  134. package/dist/{runtime-fp4vrx7m.js → runtime-qwggdpqr.js} +1 -1
  135. package/dist/{session-access-21t6yjyg.js → session-access-sc9pn9da.js} +4 -4
  136. package/dist/{session-source-backfill-pxbzcsc6.js → session-source-backfill-qh07xr8g.js} +3 -3
  137. package/dist/{setup-4592tqz4.js → setup-4fr0m7a1.js} +1 -1
  138. package/dist/{virtual-modules-gzfnpmnz.js → virtual-modules-fh4ha15b.js} +2 -2
  139. package/dist/{work-objects-t9tcf174.js → work-objects-0wr8zxct.js} +20 -20
  140. package/dist/worker-0c5tyzqe.js +69 -0
  141. package/dist/{worker-follow-up-q32jh4yk.js → worker-follow-up-ktyyazyp.js} +17 -17
  142. package/dist/{x-b6wxntdt.js → x-vmmye1kb.js} +2 -2
  143. package/openapi.json +97 -32
  144. package/package.json +1 -1
  145. package/src/be/db/session-summaries.ts +8 -2
  146. package/src/be/db/session-tree.ts +174 -61
  147. package/src/be/db/session-visibility.ts +5 -4
  148. package/src/be/db.ts +8 -4
  149. package/src/be/migrations/259_session_summaries_open_tasks.sql +111 -0
  150. package/src/be/model-validation.ts +5 -1
  151. package/src/be/pricing-normalize.ts +7 -2
  152. package/src/be/scripts/typecheck.ts +1 -0
  153. package/src/be/seed/schedules-seeder.ts +135 -9
  154. package/src/be/seed/workflows-seeder.ts +65 -1
  155. package/src/be/seed-pricing.ts +23 -0
  156. package/src/be/steering.ts +50 -3
  157. package/src/be/swarm-config-guard.ts +1 -0
  158. package/src/commands/provider-credentials.ts +29 -2
  159. package/src/commands/runner.ts +86 -5
  160. package/src/extensions/contract-types.generated.ts +1 -1
  161. package/src/extensions/contract.ts +27 -1
  162. package/src/extensions/dispatcher.ts +4 -0
  163. package/src/http/agents.ts +1 -0
  164. package/src/http/mcp-bridge.ts +4 -0
  165. package/src/integrations/chat-sdk/inbound.ts +15 -5
  166. package/src/integrations/chat-sdk/steering.ts +3 -1
  167. package/src/kv-reserved-namespaces.ts +2 -0
  168. package/src/prompts/base-prompt.ts +4 -1
  169. package/src/prompts/session-templates.ts +26 -0
  170. package/src/providers/acp-adapter.ts +190 -26
  171. package/src/providers/acp-targets.ts +306 -6
  172. package/src/providers/amp-adapter.ts +1 -1
  173. package/src/providers/codex-adapter.ts +9 -44
  174. package/src/providers/codex-oauth/flow.ts +24 -3
  175. package/src/providers/codex-oauth/storage.ts +56 -17
  176. package/src/providers/codex-oauth/subscription.ts +67 -0
  177. package/src/providers/fx-adapter.ts +211 -0
  178. package/src/providers/index.ts +5 -1
  179. package/src/providers/mcp-loopback-proxy.ts +94 -0
  180. package/src/providers/pi-mono-adapter.ts +98 -13
  181. package/src/providers/pricing-sources.md +8 -0
  182. package/src/providers/reasoning-effort.ts +17 -1
  183. package/src/providers/types.ts +2 -1
  184. package/src/scheduler/scheduler.ts +36 -3
  185. package/src/scripts-runtime/sdk-allowlist.ts +1 -0
  186. package/src/scripts-runtime/types/stdlib.d.ts +5 -0
  187. package/src/scripts-runtime/types/swarm-extension.d.ts +33 -0
  188. package/src/scripts-runtime/types/swarm-sdk.d.ts +5 -0
  189. package/src/server.ts +7 -0
  190. package/src/slack/assistant.ts +17 -1
  191. package/src/slack/handlers.ts +18 -5
  192. package/src/slack/left-threads.ts +65 -0
  193. package/src/slack/steering.ts +3 -0
  194. package/src/slack/thread-buffer.ts +40 -16
  195. package/src/tests/acp-adapter.test.ts +79 -0
  196. package/src/tests/base-prompt.test.ts +12 -0
  197. package/src/tests/chat-sdk-inbound.test.ts +30 -0
  198. package/src/tests/chatgpt-subscription-model-groups.test.ts +62 -0
  199. package/src/tests/chatgpt-subscription-pi.test.ts +170 -0
  200. package/src/tests/chatgpt-subscription-session-bench.test.ts +198 -0
  201. package/src/tests/codex-oauth-credential-info.test.ts +40 -0
  202. package/src/tests/codex-oauth-refresh-egress.test.ts +194 -0
  203. package/src/tests/context-window.test.ts +7 -0
  204. package/src/tests/explicit-model-validation.test.ts +99 -0
  205. package/src/tests/extensions-run-context.test.ts +11 -0
  206. package/src/tests/extensions-steering.test.ts +353 -0
  207. package/src/tests/extensions-validate.test.ts +5 -0
  208. package/src/tests/fixtures/extensions/steering-policy/hooks.ts +39 -0
  209. package/src/tests/fixtures/extensions/steering-policy/manifest.json +7 -0
  210. package/src/tests/fixtures/fake-fx.ts +167 -0
  211. package/src/tests/fixtures/fx/acp-responses-recorded.json +157 -0
  212. package/src/tests/fixtures/fx/acp-updates-recorded.jsonl +15 -0
  213. package/src/tests/fx-adapter.test.ts +771 -0
  214. package/src/tests/grok-adapter.test.ts +36 -0
  215. package/src/tests/mcp-loopback-proxy.test.ts +193 -0
  216. package/src/tests/model-tier-resolution.test.ts +3 -3
  217. package/src/tests/pricing-refresh.test.ts +5 -5
  218. package/src/tests/prompt-template-session.test.ts +5 -3
  219. package/src/tests/provider-registration.test.ts +2 -1
  220. package/src/tests/query-audit-plans.test.ts +3 -2
  221. package/src/tests/script-connections.test.ts +2 -0
  222. package/src/tests/seed-model-profiles.test.ts +2 -2
  223. package/src/tests/seed-schedules.test.ts +138 -0
  224. package/src/tests/session-cost-recompute-unit.test.ts +39 -0
  225. package/src/tests/session-costs-golden.test.ts +26 -0
  226. package/src/tests/session-summaries-plans.test.ts +120 -0
  227. package/src/tests/session-summaries.test.ts +72 -12
  228. package/src/tests/sessions-tree.test.ts +11 -3
  229. package/src/tests/slack-leave-thread.test.ts +431 -0
  230. package/src/tests/tool-annotations.test.ts +2 -1
  231. package/src/tests/workflow-engine-v2.test.ts +42 -0
  232. package/src/tests/workflow-script-principal.test.ts +207 -7
  233. package/src/tools/slack-leave-thread.ts +104 -0
  234. package/src/tools/steer-task.ts +3 -2
  235. package/src/tools/tool-config.ts +2 -1
  236. package/src/types.ts +19 -0
  237. package/src/utils/codex-auth-failure.ts +30 -0
  238. package/src/utils/context-window.ts +4 -1
  239. package/src/utils/credentials.ts +7 -0
  240. package/src/utils/fx-models.ts +43 -0
  241. package/src/workflows/cooldown.ts +3 -2
  242. package/src/workflows/engine.ts +24 -9
  243. package/templates/schedules/dreaming-daily/config.json +1 -1
  244. package/templates/schedules/dreaming-daily/content.md +6 -14
  245. package/templates/skills/swarm-docs/content.md +1 -0
  246. package/templates/workflows/dreaming/content.md +5 -1
  247. package/dist/acp-adapter-96dc64m2.js +0 -15
  248. package/dist/handlers-jg7v74ty.js +0 -31
  249. package/dist/index-8c1zbz59.js +0 -29
  250. package/dist/index-8k8tmfxd.js +0 -32
  251. package/dist/index-hq617xdj.js +0 -36
  252. package/dist/lead-567kw7x3.js +0 -68
  253. package/dist/worker-fjdqra6q.js +0 -68
@@ -4,7 +4,7 @@ import {
4
4
  CONTROLLER_COMMAND_TIMEOUT_MS,
5
5
  RuntimeHandleSchema,
6
6
  ControllerStatusResultSchema
7
- } from "./cli-0fgr1w9b.js";
7
+ } from "./cli-rpm2sgv0.js";
8
8
  import {
9
9
  getDbClient2,
10
10
  isRuntimePoolsEnabled,
@@ -21,7 +21,7 @@ import {
21
21
  upsertSwarmConfig2,
22
22
  getResolvedConfig2,
23
23
  init_db4
24
- } from "./cli-1s1dqn1j.js";
24
+ } from "./cli-1ayk1eas.js";
25
25
  import {
26
26
  getRuntimeController2,
27
27
  getRuntimeControllerTarget2,
@@ -32,17 +32,17 @@ import {
32
32
  getPoolForAgent2,
33
33
  resolvePoolDelivery2,
34
34
  init_db2
35
- } from "./cli-cq1pf336.js";
35
+ } from "./cli-mry0qzym.js";
36
36
  import {
37
37
  workflowEventBus2,
38
38
  init_event_bus
39
- } from "./cli-eny54typ.js";
39
+ } from "./cli-wx3rhnm0.js";
40
40
  import {
41
41
  createWorkerTaskFollowUp2,
42
42
  init_worker_follow_up,
43
43
  canClaim,
44
44
  init_budget_admission
45
- } from "./cli-1yekbyqm.js";
45
+ } from "./cli-1338796d.js";
46
46
  import {
47
47
  runtimeStaleThresholdMinutes,
48
48
  getRuntimeInstanceById,
@@ -51,7 +51,7 @@ import {
51
51
  listRuntimeInstancesForAgent,
52
52
  listRuntimeInstancesForPool,
53
53
  init_multi_runtime
54
- } from "./cli-pwyevs29.js";
54
+ } from "./cli-spknvxbq.js";
55
55
  import {
56
56
  isMultiRuntimeEnabled,
57
57
  init_multi_runtime2
@@ -60,11 +60,11 @@ import {
60
60
  canProvisionKind,
61
61
  createRuntimeProvider,
62
62
  init_runtime_providers
63
- } from "./cli-b1afgtj3.js";
63
+ } from "./cli-xbkdm710.js";
64
64
  import {
65
65
  mintRuntimeToken,
66
66
  init_users
67
- } from "./cli-8yy525ad.js";
67
+ } from "./cli-bhjt02p8.js";
68
68
  import {
69
69
  import_websocket,
70
70
  init_wrapper2
@@ -73,7 +73,7 @@ import {
73
73
  TERMINAL_TASK_STATUSES,
74
74
  isTerminalTaskStatus,
75
75
  init_types4
76
- } from "./cli-41z8xwj0.js";
76
+ } from "./cli-7wspm5gm.js";
77
77
  import {
78
78
  init_zod
79
79
  } from "./cli-k5671be5.js";
@@ -89,7 +89,7 @@ import {
89
89
  import {
90
90
  buildImageTemplate,
91
91
  init_dispatch
92
- } from "./cli-655xm9ms.js";
92
+ } from "./cli-583frbyr.js";
93
93
  import {
94
94
  resolveWorkerApiUrl,
95
95
  init_worker_api_url
@@ -102,7 +102,7 @@ import {
102
102
  scrubSecrets,
103
103
  registerVolatileSecret,
104
104
  init_secret_scrubber
105
- } from "./cli-a4btqqft.js";
105
+ } from "./cli-1b7btd38.js";
106
106
 
107
107
  // src/be/runtime-pools/supervisor.ts
108
108
  init_runtime_providers();
@@ -537,7 +537,7 @@ async function recoverSessions(runtimeId, reason) {
537
537
  }
538
538
  if (!sessions.length)
539
539
  return;
540
- const { remediateTaskForDeadRuntime } = await import("./heartbeat-3n94heh3.js");
540
+ const { remediateTaskForDeadRuntime } = await import("./heartbeat-qahz4p62.js");
541
541
  for (const session of sessions) {
542
542
  try {
543
543
  const task = await getTaskById2(session.taskId);
@@ -3,7 +3,7 @@ import {
3
3
  scrubObject,
4
4
  registerVolatileSecret,
5
5
  init_secret_scrubber
6
- } from "./cli-a4btqqft.js";
6
+ } from "./cli-1b7btd38.js";
7
7
  import {
8
8
  __esm
9
9
  } from "./cli-242037k3.js";
@@ -56,22 +56,22 @@ import {
56
56
  releaseApprovalCancellationNotificationClaim2,
57
57
  updateApprovalRequestNotifications2,
58
58
  init_db4
59
- } from "./cli-1s1dqn1j.js";
59
+ } from "./cli-1ayk1eas.js";
60
60
  import {
61
61
  externalChannelToolError2,
62
62
  isBlockExternalEnabled2,
63
63
  getChannelBlockReason2,
64
64
  init_external_channel
65
- } from "./cli-a1fhj4n9.js";
65
+ } from "./cli-mmwm7zbf.js";
66
66
  import {
67
67
  getSlackApp2,
68
68
  init_app3
69
- } from "./cli-1gm8jcyr.js";
69
+ } from "./cli-wvaawacd.js";
70
70
  import {
71
71
  DEFAULT_MODEL,
72
72
  resolveCredential,
73
73
  init_credentials
74
- } from "./cli-wk9md5px.js";
74
+ } from "./cli-qxnf8z2z.js";
75
75
  import {
76
76
  isMultiRuntimeEnabled,
77
77
  init_multi_runtime2
@@ -79,11 +79,11 @@ import {
79
79
  import {
80
80
  revokeRuntimeTokensForRuntime,
81
81
  init_users
82
- } from "./cli-8yy525ad.js";
82
+ } from "./cli-bhjt02p8.js";
83
83
  import {
84
84
  TERMINAL_TASK_STATUSES,
85
85
  init_types4
86
- } from "./cli-41z8xwj0.js";
86
+ } from "./cli-7wspm5gm.js";
87
87
  import {
88
88
  getSlackConfiguration,
89
89
  isSlackConfigured,
@@ -98,13 +98,13 @@ import {
98
98
  import {
99
99
  selectCredential,
100
100
  init_credentials2
101
- } from "./cli-aq58fk5m.js";
101
+ } from "./cli-g83s9ewh.js";
102
102
  import {
103
103
  deepInterpolate,
104
104
  init_template2,
105
105
  resolveTemplate,
106
106
  init_resolver
107
- } from "./cli-j4kw3rsx.js";
107
+ } from "./cli-cm5yqn35.js";
108
108
  import {
109
109
  init_zod
110
110
  } from "./cli-k5671be5.js";
@@ -136,13 +136,13 @@ import {
136
136
  isSensitiveKey,
137
137
  scrubSecrets,
138
138
  init_secret_scrubber
139
- } from "./cli-a4btqqft.js";
139
+ } from "./cli-1b7btd38.js";
140
140
  import {
141
141
  providerKeyVars,
142
142
  providerBaseUrl,
143
143
  providerForModel,
144
144
  init_src2
145
- } from "./cli-4r12t6w6.js";
145
+ } from "./cli-5c4hjzne.js";
146
146
  import {
147
147
  __esm
148
148
  } from "./cli-242037k3.js";
@@ -155,7 +155,7 @@ async function notifyAutomationPreflightFailure(preflight) {
155
155
  return;
156
156
  }
157
157
  try {
158
- const { getSlackApp } = await import("./app-stvq692g.js");
158
+ const { getSlackApp } = await import("./app-vmp4fgep.js");
159
159
  const app = getSlackApp();
160
160
  if (!app) {
161
161
  console.warn("[Automation Preflight] Slack not available, cannot send notification");
@@ -3608,7 +3608,7 @@ function cooldownToMs(cooldown) {
3608
3608
  async function shouldSkipCooldown(workflowId, cooldown) {
3609
3609
  const cooldownMs = cooldownToMs(cooldown);
3610
3610
  const now = Date.now();
3611
- const lastSuccess = await getLastSuccessfulRun2(workflowId);
3611
+ const lastSuccess = cooldown.from === "start" ? null : await getLastSuccessfulRun2(workflowId);
3612
3612
  if (lastSuccess?.finishedAt) {
3613
3613
  const lastFinished = new Date(lastSuccess.finishedAt).getTime();
3614
3614
  if (now - lastFinished < cooldownMs)
@@ -4014,7 +4014,7 @@ async function startWorkflowExecution2(workflow, triggerData, registry, options
4014
4014
  const newRunId = crypto.randomUUID();
4015
4015
  const release = holdWorkflowRun(newRunId);
4016
4016
  try {
4017
- const { runId, created, preflightAlert } = await createRunWithInitialState(workflow, triggerData, options, initial, newRunId);
4017
+ const { runId, created, preflightAlert, status } = await createRunWithInitialState(workflow, triggerData, options, initial, newRunId);
4018
4018
  if (!created)
4019
4019
  return runId;
4020
4020
  if (initial.status === "failed" && initial.preflight) {
@@ -4022,7 +4022,7 @@ async function startWorkflowExecution2(workflow, triggerData, registry, options
4022
4022
  await notifyAutomationPreflightFailure(preflight);
4023
4023
  return runId;
4024
4024
  }
4025
- if (initial.status === "skipped")
4025
+ if (status === "skipped")
4026
4026
  return runId;
4027
4027
  telemetry.workflow("started", {
4028
4028
  workflowId: workflow.id,
@@ -4085,6 +4085,7 @@ async function createRunWithInitialState(workflow, triggerData, options, initial
4085
4085
  if (existingId)
4086
4086
  return { runId: existingId, created: false };
4087
4087
  }
4088
+ const state = !initial.status && workflow.cooldown && await shouldSkipCooldown(workflow.id, workflow.cooldown) ? { status: "skipped", error: "cooldown", finishedAt: new Date().toISOString() } : initial;
4088
4089
  await createWorkflowRun2({
4089
4090
  id: runId,
4090
4091
  workflowId: workflow.id,
@@ -4095,10 +4096,10 @@ async function createRunWithInitialState(workflow, triggerData, options, initial
4095
4096
  parentStepAttempt: parentStepId ? attempt : undefined,
4096
4097
  triggeredByAgentId: options.triggeredByAgentId
4097
4098
  });
4098
- await updateWorkflowRun2(runId, initial.status ? { status: initial.status, error: initial.error, finishedAt: initial.finishedAt } : { context: initial.context });
4099
- const preflightAlert = initial.status === "failed" && initial.preflight ? await isFirstWorkflowPreflightFailureToday(workflow.id, runId) : undefined;
4100
- await options.accept?.({ runId, skipped: initial.status === "skipped" });
4101
- return { runId, created: true, preflightAlert };
4099
+ await updateWorkflowRun2(runId, state.status ? { status: state.status, error: state.error, finishedAt: state.finishedAt } : { context: state.context });
4100
+ const preflightAlert = state.status === "failed" && state.preflight ? await isFirstWorkflowPreflightFailureToday(workflow.id, runId) : undefined;
4101
+ await options.accept?.({ runId, skipped: state.status === "skipped" });
4102
+ return { runId, created: true, preflightAlert, status: state.status };
4102
4103
  });
4103
4104
  }
4104
4105
  async function failRunOnUnreadableReplay(runId, err, stepId) {
@@ -4550,7 +4551,7 @@ async function runClaimedStep(def, runId, ctx, node, registry, existingStep, ste
4550
4551
  }
4551
4552
  const waiting = await checkpointStepWaiting(runId, stepId, ctx);
4552
4553
  if (waiting && result.waitFor === "workflow.child.finished") {
4553
- const { resumeFromChildRun } = await import("./resume-9cd6wf6z.js");
4554
+ const { resumeFromChildRun } = await import("./resume-zfqc36xj.js");
4554
4555
  await resumeFromChildRun(stepId, registry);
4555
4556
  }
4556
4557
  return { outcome: waiting ? "waiting" : "completed", successors: [] };
@@ -5055,7 +5056,7 @@ async function runForeachDrive(runId, parentNodeId, registry) {
5055
5056
  if (drive.successors.length > 0) {
5056
5057
  await walkGraph(workflow.definition, runId, ctx, drive.successors, registry, workflow.id, getSecretInputKeys(workflow.input));
5057
5058
  } else {
5058
- const { finalizeOrWait } = await import("./resume-9cd6wf6z.js");
5059
+ const { finalizeOrWait } = await import("./resume-zfqc36xj.js");
5059
5060
  await finalizeOrWait(runId);
5060
5061
  }
5061
5062
  return drive;
@@ -5198,7 +5199,7 @@ async function startChild(input) {
5198
5199
  const parked = await getDbClient2().get("UPDATE workflow_run_steps SET status = 'waiting' WHERE id = ? AND status = 'running' RETURNING id", [child.id]);
5199
5200
  if (parked && result.waitFor === "workflow.child.finished") {
5200
5201
  ownedChildren.delete(child.id);
5201
- const { resumeFromChildRun } = await import("./resume-9cd6wf6z.js");
5202
+ const { resumeFromChildRun } = await import("./resume-zfqc36xj.js");
5202
5203
  await resumeFromChildRun(child.id, registry);
5203
5204
  }
5204
5205
  return null;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  scrubSecrets,
3
3
  init_secret_scrubber
4
- } from "./cli-a4btqqft.js";
4
+ } from "./cli-1b7btd38.js";
5
5
 
6
6
  // src/providers/devin-adapter.ts
7
7
  init_secret_scrubber();
@@ -7,7 +7,7 @@ var package_default;
7
7
  var init_package = __esm(() => {
8
8
  package_default = {
9
9
  name: "@desplega.ai/agent-swarm",
10
- version: "2.7.4",
10
+ version: "2.7.5",
11
11
  description: "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
12
12
  keywords: [
13
13
  "agent-swarm.dev",
@@ -6,15 +6,15 @@ import {
6
6
  getResolvedConfig2,
7
7
  getAllUsers2,
8
8
  init_db4
9
- } from "./cli-1s1dqn1j.js";
9
+ } from "./cli-1ayk1eas.js";
10
10
  import {
11
11
  getUserGrant2,
12
12
  init_rbac_roles
13
- } from "./cli-bq2pcphn.js";
13
+ } from "./cli-8hs41zy2.js";
14
14
  import {
15
15
  scrubSecrets,
16
16
  init_secret_scrubber
17
- } from "./cli-a4btqqft.js";
17
+ } from "./cli-1b7btd38.js";
18
18
 
19
19
  // src/be/seed/agent-fs-provision.ts
20
20
  init_secret_scrubber();
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  contextBoundNoteThreshold,
6
6
  createContextBoundNote
7
- } from "./cli-h55y2bjc.js";
7
+ } from "./cli-dhar9qay.js";
8
8
  import {
9
9
  checkToolLoop
10
10
  } from "./cli-0726awxw.js";
@@ -20,22 +20,22 @@ import {
20
20
  computeContextUsedUnified,
21
21
  clampContextPercent,
22
22
  init_context_window
23
- } from "./cli-rtk9g7av.js";
23
+ } from "./cli-73jzwksr.js";
24
24
  import {
25
25
  selectCredential,
26
26
  init_credentials2
27
- } from "./cli-aq58fk5m.js";
27
+ } from "./cli-g83s9ewh.js";
28
28
  import {
29
29
  runtimeCatalogModel,
30
30
  init_runtime_model_catalog
31
- } from "./cli-a2jw6ee5.js";
31
+ } from "./cli-1p89xny0.js";
32
32
  import {
33
33
  scrubSecrets,
34
34
  init_secret_scrubber
35
- } from "./cli-a4btqqft.js";
35
+ } from "./cli-1b7btd38.js";
36
36
  import {
37
37
  init_src2
38
- } from "./cli-4r12t6w6.js";
38
+ } from "./cli-5c4hjzne.js";
39
39
 
40
40
  // src/providers/claude-managed-adapter.ts
41
41
  init_context_window();
@@ -49,7 +49,7 @@ import {
49
49
  streamSimple2,
50
50
  completeSimple,
51
51
  init_compat
52
- } from "./cli-wk9md5px.js";
52
+ } from "./cli-qxnf8z2z.js";
53
53
  import {
54
54
  cleanupSessionResources,
55
55
  uuidv7
@@ -55322,7 +55322,7 @@ function loadAllHighlightLanguages() {
55322
55322
  if (!allLanguagesPromise) {
55323
55323
  allLanguagesPromise = new Promise((resolve) => {
55324
55324
  setImmediate(() => {
55325
- import("./index-d34f6r87.js").then((m)=>__toESM(m.default,1)).then(() => resolve(), () => {
55325
+ import("./index-6rq3r5zb.js").then((m)=>__toESM(m.default,1)).then(() => resolve(), () => {
55326
55326
  resolve();
55327
55327
  });
55328
55328
  });
@@ -61474,7 +61474,7 @@ function getCreateJiti() {
61474
61474
  }
61475
61475
  var virtualModulesPromise;
61476
61476
  function getVirtualModules() {
61477
- virtualModulesPromise ??= import("./virtual-modules-gzfnpmnz.js").then((module) => module.VIRTUAL_MODULES);
61477
+ virtualModulesPromise ??= import("./virtual-modules-fh4ha15b.js").then((module) => module.VIRTUAL_MODULES);
61478
61478
  return virtualModulesPromise;
61479
61479
  }
61480
61480
  var _aliases = null;
@@ -80380,7 +80380,7 @@ function parseCodemodeSource(input) {
80380
80380
  init_build();
80381
80381
 
80382
80382
  // node_modules/@earendil-works/pi-coding-agent/dist/extensions/codemode/execute.lazy.js
80383
- var loadCodemodeExecutor = () => import("./execute-mcdgccjs.js");
80383
+ var loadCodemodeExecutor = () => import("./execute-14qhqp4d.js");
80384
80384
 
80385
80385
  // node_modules/@earendil-works/pi-coding-agent/dist/extensions/codemode/renderer.js
80386
80386
  var CODE_PREVIEW_LINES = 10;
@@ -81537,7 +81537,7 @@ function createMcpResourceToolDefinitions(options) {
81537
81537
  }
81538
81538
 
81539
81539
  // node_modules/@earendil-works/pi-coding-agent/dist/extensions/mcp/runtime.lazy.js
81540
- var loadMcpRuntime = () => import("./runtime-fp4vrx7m.js");
81540
+ var loadMcpRuntime = () => import("./runtime-qwggdpqr.js");
81541
81541
 
81542
81542
  // node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard.js
81543
81543
  import { randomUUID as randomUUID3 } from "node:crypto";
@@ -86666,7 +86666,7 @@ var builtInExtensions = [
86666
86666
  ];
86667
86667
 
86668
86668
  // node_modules/@earendil-works/pi-coding-agent/dist/extensions/mcp/cli.lazy.js
86669
- var loadMcpCommand = () => import("./cli-jkt52mgt.js");
86669
+ var loadMcpCommand = () => import("./cli-0gey5fzy.js");
86670
86670
 
86671
86671
  // node_modules/@earendil-works/pi-coding-agent/dist/migrations.js
86672
86672
  import { existsSync as existsSync22, mkdirSync as mkdirSync11, readdirSync as readdirSync10, readFileSync as readFileSync17, renameSync as renameSync2, rmSync as rmSync3, writeFileSync as writeFileSync11 } from "fs";
@@ -89196,7 +89196,7 @@ function playEasterEgg3d(tui, egg) {
89196
89196
  if (tui.hasOverlay())
89197
89197
  return true;
89198
89198
  const screen = tui.getScreenLines();
89199
- import("./easter-egg-3d-fm1p3n4d.js").then((module) => module.playEasterEgg3d(tui, screen, egg), () => {});
89199
+ import("./easter-egg-3d-yyts7p16.js").then((module) => module.playEasterEgg3d(tui, screen, egg), () => {});
89200
89200
  return true;
89201
89201
  }
89202
89202
  function playPiLogo3d(tui, column, row) {
@@ -50,11 +50,11 @@ import {
50
50
  checkDependencies2,
51
51
  emitBuiltInIntegrationConnectedOnce2,
52
52
  init_db4
53
- } from "./cli-1s1dqn1j.js";
53
+ } from "./cli-1ayk1eas.js";
54
54
  import {
55
55
  getChannelBlockReason2,
56
56
  init_external_channel
57
- } from "./cli-a1fhj4n9.js";
57
+ } from "./cli-mmwm7zbf.js";
58
58
  import {
59
59
  require_jsonwebtoken,
60
60
  require_dist5,
@@ -71,11 +71,11 @@ import {
71
71
  import {
72
72
  isTerminalTaskStatus,
73
73
  init_types4
74
- } from "./cli-41z8xwj0.js";
74
+ } from "./cli-7wspm5gm.js";
75
75
  import {
76
76
  taskAttachmentDisplayUrl,
77
77
  init_task_attachment_links
78
- } from "./cli-ycm6180s.js";
78
+ } from "./cli-a7v854rf.js";
79
79
  import {
80
80
  getSlackConfiguration,
81
81
  init_config4
@@ -106,7 +106,7 @@ import {
106
106
  scrubSecrets,
107
107
  scrubObject,
108
108
  init_secret_scrubber
109
- } from "./cli-a4btqqft.js";
109
+ } from "./cli-1b7btd38.js";
110
110
  import {
111
111
  __toESM,
112
112
  __commonJS,
@@ -6722,7 +6722,7 @@ async function initOtel(serviceRole = process.env.AGENT_ROLE || "api") {
6722
6722
  return;
6723
6723
  initialized = true;
6724
6724
  try {
6725
- const impl = await import("./otel-impl-aefave37.js");
6725
+ const impl = await import("./otel-impl-a1a0ef6b.js");
6726
6726
  await impl.boot(serviceRole, {
6727
6727
  exportConsoleLogs: serviceRole === "api" && isApiLogExportEnabled()
6728
6728
  });
@@ -10589,17 +10589,17 @@ async function initSlackApp2() {
10589
10589
  inboundDrain = installSocketAckRecovery(receiver.client, app);
10590
10590
  initialized2 = true;
10591
10591
  app.use(slackInboundOutcomeMiddleware());
10592
- const { registerMessageHandler } = await import("./handlers-jg7v74ty.js");
10593
- const { registerCommandHandler } = await import("./commands-1p07cvff.js");
10594
- const { registerActionHandlers } = await import("./actions-gfrr9vb7.js");
10595
- const { registerWorkObjectHandlers } = await import("./work-objects-t9tcf174.js");
10592
+ const { registerMessageHandler } = await import("./handlers-vwmba1m2.js");
10593
+ const { registerCommandHandler } = await import("./commands-evrenjn9.js");
10594
+ const { registerActionHandlers } = await import("./actions-zwfykqqk.js");
10595
+ const { registerWorkObjectHandlers } = await import("./work-objects-0wr8zxct.js");
10596
10596
  registerMessageHandler(app);
10597
10597
  registerCommandHandler(app);
10598
10598
  registerActionHandlers(app);
10599
10599
  registerWorkObjectHandlers(app);
10600
- const { createAssistant } = await import("./assistant-5s37fr9n.js");
10600
+ const { createAssistant } = await import("./assistant-vwde653f.js");
10601
10601
  app.assistant(createAssistant());
10602
- const { isBlockExternalEnabled, scanExternalChannelsOnBoot } = await import("./external-channel-9dxwfztn.js");
10602
+ const { isBlockExternalEnabled, scanExternalChannelsOnBoot } = await import("./external-channel-ttgrs3sx.js");
10603
10603
  if (isBlockExternalEnabled()) {
10604
10604
  scanExternalChannelsOnBoot(app.client).catch((error) => {
10605
10605
  console.error("[Slack] External channel boot scan failed:", error);
@@ -10612,7 +10612,7 @@ async function startSlackApp2() {
10612
10612
  await initSlackApp2();
10613
10613
  }
10614
10614
  if (app) {
10615
- const { isSlackRenderV2Enabled } = await import("./render-v2-amwbnfxh.js");
10615
+ const { isSlackRenderV2Enabled } = await import("./render-v2-twmbgrz4.js");
10616
10616
  if (isSlackRenderV2Enabled())
10617
10617
  await ensureSlackRenderV2Activation2();
10618
10618
  await recoverSlackInboundAfterRestart();
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  scrubSecrets,
8
8
  init_secret_scrubber
9
- } from "./cli-a4btqqft.js";
9
+ } from "./cli-1b7btd38.js";
10
10
  import {
11
11
  __esm
12
12
  } from "./cli-242037k3.js";
@@ -13,15 +13,15 @@ async function createRuntimeProvider(kind, target = {}) {
13
13
  return new StaticRuntimeProvider;
14
14
  }
15
15
  case "docker": {
16
- const { DockerRuntimeProvider } = await import("./docker-7rxt0rry.js");
16
+ const { DockerRuntimeProvider } = await import("./docker-rrjhaqt9.js");
17
17
  return new DockerRuntimeProvider;
18
18
  }
19
19
  case "e2b": {
20
- const { E2BRuntimeProvider } = await import("./e2b-7fc9b9bd.js");
20
+ const { E2BRuntimeProvider } = await import("./e2b-w1p0bnpm.js");
21
21
  return new E2BRuntimeProvider(target);
22
22
  }
23
23
  case "boxd": {
24
- const { BoxdRuntimeProvider } = await import("./boxd-515v1t8z.js");
24
+ const { BoxdRuntimeProvider } = await import("./boxd-k1j26g3h.js");
25
25
  return new BoxdRuntimeProvider;
26
26
  }
27
27
  case "k8s":
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getDb2,
3
3
  init_db4
4
- } from "./cli-1s1dqn1j.js";
4
+ } from "./cli-1ayk1eas.js";
5
5
  import {
6
6
  openAICompatibleProviderIds,
7
7
  withRegistryCatalogSections,
8
8
  init_src2
9
- } from "./cli-4r12t6w6.js";
9
+ } from "./cli-5c4hjzne.js";
10
10
  import {
11
11
  __esm
12
12
  } from "./cli-242037k3.js";
@@ -61,7 +61,7 @@ var ROUTING_PREFIXES_BY_PROVIDER, AMP_DATED_SUFFIX;
61
61
  var init_pricing_normalize = __esm(() => {
62
62
  ROUTING_PREFIXES_BY_PROVIDER = {
63
63
  opencode: ["openrouter/", "github-copilot/"],
64
- pi: ["openrouter/", "github-copilot/"],
64
+ pi: ["openrouter/", "github-copilot/", "openai-codex/"],
65
65
  codex: ["openai/", "github-copilot/"],
66
66
  claude: [],
67
67
  "claude-managed": [],
@@ -71,7 +71,8 @@ var init_pricing_normalize = __esm(() => {
71
71
  dsh: ["openrouter/"],
72
72
  amp: ["anthropic/", "openai/", "google-vertex/", "google/"],
73
73
  cursor: [],
74
- grok: ["openrouter/", "xai/"]
74
+ grok: ["openrouter/", "xai/"],
75
+ fx: ["openrouter/", "vercel/"]
75
76
  };
76
77
  AMP_DATED_SUFFIX = /-\d{4}-\d{2}-\d{2}$/;
77
78
  });
@@ -183,6 +184,7 @@ function buildModelsDevSeedRows(cache) {
183
184
  continue;
184
185
  add(id, projectCostBlock("codex", id, model.cost));
185
186
  add(id, projectCostBlock("pi", id, model.cost));
187
+ add(id, projectCostBlock("fx", id, model.cost));
186
188
  }
187
189
  for (const vendor of ["openai", "anthropic", "google", "xai"]) {
188
190
  for (const [id, model] of Object.entries(cache[vendor]?.models ?? {})) {
@@ -216,12 +218,22 @@ function buildModelsDevSeedRows(cache) {
216
218
  add(id, projectCostBlock("grok", id, model.cost, {
217
219
  anthropicBilled: id.startsWith("anthropic/")
218
220
  }));
221
+ add(id, projectCostBlock("fx", id, model.cost, {
222
+ anthropicBilled: id.startsWith("anthropic/")
223
+ }));
219
224
  if (id.startsWith("google/")) {
220
225
  const geminiKey = id.replace(/^google\//, "");
221
226
  add(geminiKey, projectCostBlock("gemini", geminiKey, model.cost));
222
227
  add(id, projectCostBlock("gemini", id, model.cost));
223
228
  }
224
229
  }
230
+ for (const [id, model] of Object.entries(cache.vercel?.models ?? {})) {
231
+ if (!model?.cost || openrouter[id]?.cost)
232
+ continue;
233
+ add(id, projectCostBlock("fx", id, model.cost, {
234
+ anthropicBilled: id.startsWith("anthropic/")
235
+ }));
236
+ }
225
237
  for (const provider of openAICompatibleProviderIds()) {
226
238
  for (const [id, model] of Object.entries(cache[provider]?.models ?? {})) {
227
239
  if (!model?.cost)