@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
@@ -2,14 +2,14 @@ import {
2
2
  ACP_TARGET_IDS,
3
3
  isAcpTarget,
4
4
  getAcpTargetCatalogEntry
5
- } from "./cli-9cctx1tn.js";
5
+ } from "./cli-a22h291q.js";
6
6
  import {
7
7
  applyReasoningEffort
8
- } from "./cli-vqgnyh76.js";
8
+ } from "./cli-98rw5dt5.js";
9
9
  import {
10
10
  applyOpenRouterBaseUrlOverride2,
11
11
  buildOpenAICompatibleProviderBlock2
12
- } from "./cli-13jvmew3.js";
12
+ } from "./cli-zppwg9p9.js";
13
13
  import {
14
14
  fetchInstalledMcpServers
15
15
  } from "./cli-bst1vp7e.js";
@@ -17,7 +17,7 @@ import {
17
17
  getContextWindowSize,
18
18
  clampContextPercent,
19
19
  init_context_window
20
- } from "./cli-rtk9g7av.js";
20
+ } from "./cli-73jzwksr.js";
21
21
  import {
22
22
  detachedProcessGroup,
23
23
  registerProcessGroup,
@@ -27,6 +27,16 @@ import {
27
27
  import {
28
28
  init_v4
29
29
  } from "./cli-5xaqj21p.js";
30
+ import {
31
+ DEFAULT_MODEL_TIER_MAP,
32
+ init_types4
33
+ } from "./cli-7wspm5gm.js";
34
+ import {
35
+ resolveTemplateFromCode,
36
+ resolveTemplateAsync,
37
+ init_resolver,
38
+ init_session_templates
39
+ } from "./cli-cm5yqn35.js";
30
40
  import {
31
41
  NEVER,
32
42
  string2,
@@ -48,18 +58,39 @@ import {
48
58
  import {
49
59
  init_package,
50
60
  package_default
51
- } from "./cli-pe09p6dv.js";
61
+ } from "./cli-tqgg40ek.js";
52
62
  import {
53
63
  scrubSecrets,
54
64
  init_secret_scrubber
55
- } from "./cli-a4btqqft.js";
65
+ } from "./cli-1b7btd38.js";
56
66
  import {
67
+ fxModelRoute,
57
68
  normalizeGrokModel,
58
69
  baseUrlOverride,
59
70
  providerBaseUrl,
60
71
  providerForModel,
61
72
  init_src2
62
- } from "./cli-4r12t6w6.js";
73
+ } from "./cli-5c4hjzne.js";
74
+
75
+ // src/utils/fx-models.ts
76
+ init_src2();
77
+ init_types4();
78
+ var FX_ROUTE_KEY_VARS = [
79
+ "OPENROUTER_API_KEY",
80
+ "OPENAI_API_KEY",
81
+ "AI_GATEWAY_API_KEY"
82
+ ];
83
+ function resolveFxRoute(model) {
84
+ const value = model?.trim() || DEFAULT_MODEL_TIER_MAP.fx.regular;
85
+ const route = fxModelRoute(value);
86
+ return "error" in route ? route : { ...route, model: value };
87
+ }
88
+ function requireFxRoute(model) {
89
+ const route = resolveFxRoute(model);
90
+ if ("error" in route)
91
+ throw new Error(route.error);
92
+ return route;
93
+ }
63
94
 
64
95
  // node_modules/@agentclientprotocol/sdk/dist/v1/unstable/schema/index.js
65
96
  var AGENT_METHODS = {
@@ -4180,10 +4211,13 @@ function translateAcpSessionNotification(notification) {
4180
4211
 
4181
4212
  // src/providers/acp-targets.ts
4182
4213
  init_src2();
4214
+ init_resolver();
4215
+ init_session_templates();
4183
4216
  init_context_window();
4184
- import { mkdir, mkdtemp, rm } from "node:fs/promises";
4217
+ import { chmod, mkdir, mkdtemp, rm } from "node:fs/promises";
4185
4218
  import { tmpdir } from "node:os";
4186
4219
  import { join } from "node:path";
4220
+ init_secret_scrubber();
4187
4221
  class AcpTargetResolutionError extends Error {
4188
4222
  constructor(message) {
4189
4223
  super(message);
@@ -4678,6 +4712,171 @@ var grokTargetProfile = {
4678
4712
  return `Grok rejected the credentials (XAI_API_KEY or OPENROUTER_API_KEY invalid or missing): ${message}`;
4679
4713
  }
4680
4714
  };
4715
+ var FX_SYSTEM_PROMPT_INLINE_MAX_BYTES = 60 * 1024;
4716
+ var FX_SYSTEM_PROMPT_HEAD_BYTES = 56 * 1024;
4717
+ var FX_SYSTEM_PROMPT_FILE_TEMPLATE = "system.agent.fx.system_prompt_file";
4718
+ var FX_CONTEXT_NOTICE_PREFIX = "[context] ";
4719
+ var FX_AUTH_ERROR_RE = /authentication is unavailable|credential is unavailable|MissingApiKey|unauthorized|\b401\b/i;
4720
+ function fxRunDir(config) {
4721
+ const safe = config.taskId.replace(/[^A-Za-z0-9._-]/g, "_") || "session";
4722
+ return join(tmpdir(), `fx-${safe}`);
4723
+ }
4724
+ function utf8Head(bytes, max) {
4725
+ let end = Math.min(max, bytes.length);
4726
+ while (end > 0 && end < bytes.length && ((bytes[end] ?? 0) & 192) === 128)
4727
+ end -= 1;
4728
+ return new TextDecoder().decode(bytes.subarray(0, end));
4729
+ }
4730
+ async function fxSystemPromptPointer(path) {
4731
+ try {
4732
+ const result = await resolveTemplateAsync(FX_SYSTEM_PROMPT_FILE_TEMPLATE, { path });
4733
+ if (!result.skipped && result.text.trim())
4734
+ return result.text;
4735
+ } catch {}
4736
+ return resolveTemplateFromCode(FX_SYSTEM_PROMPT_FILE_TEMPLATE, { path }).text;
4737
+ }
4738
+ async function fxSystemPrompt(systemPrompt, dir) {
4739
+ if (!systemPrompt.trim())
4740
+ return;
4741
+ const bytes = new TextEncoder().encode(systemPrompt);
4742
+ if (bytes.length <= FX_SYSTEM_PROMPT_INLINE_MAX_BYTES) {
4743
+ return { blocks: [{ type: "text", text: systemPrompt }] };
4744
+ }
4745
+ const artifactPath = join(dir, "SYSTEM.md");
4746
+ await mkdir(dir, { recursive: true });
4747
+ await Bun.write(artifactPath, systemPrompt);
4748
+ await chmod(artifactPath, 384);
4749
+ const head = utf8Head(bytes, FX_SYSTEM_PROMPT_HEAD_BYTES);
4750
+ const pointer = await fxSystemPromptPointer(artifactPath);
4751
+ return { blocks: [{ type: "text", text: `${head}
4752
+
4753
+ ${pointer}` }], artifactPath };
4754
+ }
4755
+ async function fxSessionExists(sessionId, home) {
4756
+ if (!home || !/^[A-Za-z0-9_-]+$/.test(sessionId))
4757
+ return false;
4758
+ return Bun.file(join(home, ".fx", "sessions", "v2", sessionId, "log.jsonl")).exists();
4759
+ }
4760
+ function rewriteFxEvent(event, update) {
4761
+ if (event.type === "message" && event.role === "assistant" && event.content.startsWith(FX_CONTEXT_NOTICE_PREFIX)) {
4762
+ return {
4763
+ type: "custom",
4764
+ name: "fx_context_notice",
4765
+ data: { text: event.content, messageId: event.messageId ?? null }
4766
+ };
4767
+ }
4768
+ if (event.type === "tool_start" && update?.sessionUpdate === "tool_call") {
4769
+ const mcp = update._meta?.fx?.toolCall?.mcp;
4770
+ if (typeof mcp?.server === "string" && typeof mcp.tool === "string" && mcp.server && mcp.tool) {
4771
+ return { ...event, toolName: `mcp__${mcp.server}__${mcp.tool}` };
4772
+ }
4773
+ const name = update.name;
4774
+ if (typeof name === "string" && name.trim())
4775
+ return { ...event, toolName: name.trim() };
4776
+ }
4777
+ return event;
4778
+ }
4779
+ async function steerFx({
4780
+ sessionId,
4781
+ delivery,
4782
+ initResult,
4783
+ prompt,
4784
+ onUpdate
4785
+ }) {
4786
+ if (delivery.mode !== "steer") {
4787
+ return { delivered: false, reason: `fx supports steer only, not ${delivery.mode}` };
4788
+ }
4789
+ const meta = initResult.agentCapabilities?._meta;
4790
+ if (meta?.fx?.steering !== true) {
4791
+ return { delivered: false, reason: "fx did not advertise _meta.fx.steering" };
4792
+ }
4793
+ return new Promise((resolve) => {
4794
+ let settled = false;
4795
+ let stopListening = () => {};
4796
+ const settle = (result) => {
4797
+ if (settled)
4798
+ return;
4799
+ settled = true;
4800
+ stopListening();
4801
+ resolve(result);
4802
+ };
4803
+ stopListening = onUpdate((update) => {
4804
+ if (update.sessionUpdate !== "user_message_chunk")
4805
+ return;
4806
+ const steering = update._meta?.fx?.steering;
4807
+ if (!steering || update.content.type !== "text" || update.content.text !== delivery.text) {
4808
+ return;
4809
+ }
4810
+ settle({ delivered: true, mode: "steer" });
4811
+ });
4812
+ prompt({
4813
+ sessionId,
4814
+ prompt: [{ type: "text", text: delivery.text }],
4815
+ _meta: { fx: { steer: true } }
4816
+ }).then((response) => {
4817
+ const state = response._meta?.fx?.steering;
4818
+ settle(state === "absorbed" ? { delivered: true, mode: "steer" } : {
4819
+ delivered: false,
4820
+ reason: `fx did not absorb the steer (stopReason ${response.stopReason}, steering ${JSON.stringify(state ?? null)})`
4821
+ });
4822
+ }, (err) => {
4823
+ const message = err instanceof Error ? err.message : String(err);
4824
+ settle({ delivered: false, reason: scrubSecrets(`fx steer failed: ${message}`) });
4825
+ });
4826
+ });
4827
+ }
4828
+ var fxTargetProfile = {
4829
+ target: "fx",
4830
+ command(config) {
4831
+ const binary = readEnv(config, "FX_BINARY")?.trim() || "fx";
4832
+ const route = requireFxRoute(config.model);
4833
+ return [
4834
+ binary,
4835
+ "acp",
4836
+ "--model",
4837
+ route.fxModel,
4838
+ "--log-file",
4839
+ join(fxRunDir(config), "acp.log")
4840
+ ];
4841
+ },
4842
+ env(config) {
4843
+ const route = requireFxRoute(config.model);
4844
+ const env = baseTargetEnv(config);
4845
+ copyEnvKeys(config, env, [route.keyVar]);
4846
+ env.FX_PROVIDER = route.fxProvider;
4847
+ env.FX_PERMISSION_MODE = "full-access";
4848
+ env.FX_AUTO_UPGRADE = "0";
4849
+ env.FX_NO_OPEN_BROWSER = "1";
4850
+ return env;
4851
+ },
4852
+ configuredOptions(config) {
4853
+ if (!config.reasoningEffort)
4854
+ return {};
4855
+ const effort = applyReasoningEffort("fx", config.model.trim(), config.reasoningEffort);
4856
+ return effort.kind === "fx-effort" ? { effort: effort.reasoningEffort } : {};
4857
+ },
4858
+ async writeSystemPromptArtifact(config) {
4859
+ await mkdir(fxRunDir(config), { recursive: true, mode: 448 });
4860
+ },
4861
+ async cleanupSystemPromptArtifact(config) {
4862
+ await rm(fxRunDir(config), { recursive: true, force: true });
4863
+ },
4864
+ sessionSystemPrompt(config) {
4865
+ return fxSystemPrompt(config.systemPrompt ?? "", fxRunDir(config));
4866
+ },
4867
+ requiresSecureMcpUrl: true,
4868
+ steer: steerFx,
4869
+ resume: {
4870
+ method: "session/resume",
4871
+ canResume: (sessionId) => fxSessionExists(sessionId, process.env.HOME)
4872
+ },
4873
+ rewriteEvent: rewriteFxEvent,
4874
+ describeError(message) {
4875
+ if (!FX_AUTH_ERROR_RE.test(message))
4876
+ return;
4877
+ return `fx could not authenticate the model route (OPENROUTER_API_KEY, OPENAI_API_KEY or AI_GATEWAY_API_KEY invalid or missing): ${message}`;
4878
+ }
4879
+ };
4681
4880
  function resolveAcpTarget(config) {
4682
4881
  const target = readEnv(config, "ACP_TARGET") ?? "custom";
4683
4882
  if (!isAcpTarget(target)) {
@@ -4701,6 +4900,69 @@ function resolveAcpTarget(config) {
4701
4900
  }
4702
4901
  }
4703
4902
 
4903
+ // src/providers/mcp-loopback-proxy.ts
4904
+ init_secret_scrubber();
4905
+ var DROPPED_REQUEST_HEADERS = [
4906
+ "host",
4907
+ "connection",
4908
+ "keep-alive",
4909
+ "proxy-connection",
4910
+ "transfer-encoding",
4911
+ "upgrade"
4912
+ ];
4913
+ var LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]", "::1"]);
4914
+ function needsLoopbackProxy(url) {
4915
+ let parsed;
4916
+ try {
4917
+ parsed = new URL(url);
4918
+ } catch {
4919
+ return false;
4920
+ }
4921
+ return parsed.protocol === "http:" && !LOOPBACK_HOSTS.has(parsed.hostname.toLowerCase());
4922
+ }
4923
+ async function startMcpLoopbackProxy(upstream) {
4924
+ const base = new URL(upstream);
4925
+ const prefix = base.pathname.replace(/\/+$/, "");
4926
+ const server = Bun.serve({
4927
+ hostname: "127.0.0.1",
4928
+ port: 0,
4929
+ idleTimeout: 0,
4930
+ async fetch(req) {
4931
+ const incoming = new URL(req.url);
4932
+ const target = new URL(base);
4933
+ target.pathname = `${prefix}${incoming.pathname}`;
4934
+ target.search = incoming.search;
4935
+ const headers = new Headers(req.headers);
4936
+ for (const name of DROPPED_REQUEST_HEADERS)
4937
+ headers.delete(name);
4938
+ try {
4939
+ const hasBody = req.method !== "GET" && req.method !== "HEAD";
4940
+ return await fetch(target, {
4941
+ method: req.method,
4942
+ headers,
4943
+ body: hasBody ? req.body : undefined,
4944
+ redirect: "manual",
4945
+ signal: req.signal,
4946
+ decompress: false
4947
+ });
4948
+ } catch (err) {
4949
+ const message = err instanceof Error ? err.message : String(err);
4950
+ return new Response(JSON.stringify({
4951
+ error: scrubSecrets(`MCP loopback proxy: upstream failed: ${message}`)
4952
+ }), { status: 502, headers: { "Content-Type": "application/json" } });
4953
+ }
4954
+ }
4955
+ });
4956
+ let stopped = null;
4957
+ return {
4958
+ url: `http://127.0.0.1:${server.port}`,
4959
+ stop() {
4960
+ stopped ??= server.stop(true);
4961
+ return stopped;
4962
+ }
4963
+ };
4964
+ }
4965
+
4704
4966
  // src/providers/acp-adapter.ts
4705
4967
  var ACP_LOG_MAX_CHARS = 30000;
4706
4968
  var ACP_CANCEL_SETTLE_MS = 3000;
@@ -4802,6 +5064,7 @@ class SwarmAcpClient {
4802
5064
  emit;
4803
5065
  target;
4804
5066
  reportedCostUsd = null;
5067
+ updateListeners = new Set;
4805
5068
  constructor(emit, target) {
4806
5069
  this.emit = emit;
4807
5070
  this.target = target;
@@ -4818,8 +5081,16 @@ class SwarmAcpClient {
4818
5081
  if (costUsd !== null)
4819
5082
  this.reportedCostUsd = costUsd;
4820
5083
  for (const event of translateAcpSessionNotification(params)) {
4821
- this.emit(this.target?.rewriteEvent?.(event) ?? event);
5084
+ this.emit(this.target?.rewriteEvent?.(event, params.update) ?? event);
4822
5085
  }
5086
+ for (const listener of this.updateListeners)
5087
+ listener(params.update);
5088
+ }
5089
+ onUpdate(listener) {
5090
+ this.updateListeners.add(listener);
5091
+ return () => {
5092
+ this.updateListeners.delete(listener);
5093
+ };
4823
5094
  }
4824
5095
  }
4825
5096
 
@@ -4830,6 +5101,7 @@ class ACPSession {
4830
5101
  config;
4831
5102
  providerName;
4832
5103
  target;
5104
+ extras;
4833
5105
  sessionId;
4834
5106
  listeners = new Set;
4835
5107
  pendingEvents = [];
@@ -4840,20 +5112,44 @@ class ACPSession {
4840
5112
  completionPromise;
4841
5113
  completionResolve;
4842
5114
  ephemeralTokenId = null;
4843
- constructor(agent, client, process2, config, sessionId, providerName, target, providerMeta, ephemeralTokenId) {
5115
+ deliverSteering;
5116
+ constructor(agent, client, process2, config, sessionId, providerName, target, providerMeta, ephemeralTokenId, extras) {
4844
5117
  this.agent = agent;
4845
5118
  this.client = client;
4846
5119
  this.process = process2;
4847
5120
  this.config = config;
4848
5121
  this.providerName = providerName;
4849
5122
  this.target = target;
5123
+ this.extras = extras;
4850
5124
  this.sessionId = sessionId;
4851
5125
  this.ephemeralTokenId = ephemeralTokenId ?? null;
4852
5126
  this.completionPromise = new Promise((resolve) => {
4853
5127
  this.completionResolve = resolve;
4854
5128
  });
5129
+ const steer = target.steer;
5130
+ if (steer && extras) {
5131
+ const initResult = extras.initResult;
5132
+ this.deliverSteering = async (delivery) => {
5133
+ if (this.completed || this.aborted) {
5134
+ return { delivered: false, reason: "The ACP session has already finished" };
5135
+ }
5136
+ return steer({
5137
+ sessionId,
5138
+ delivery,
5139
+ initResult,
5140
+ prompt: (params) => this.agent.request(methods.agent.session.prompt, params),
5141
+ onUpdate: (listener) => this.client.onUpdate(listener)
5142
+ });
5143
+ };
5144
+ }
4855
5145
  this.consumeStderr();
4856
- this.emit({ type: "session_init", sessionId, provider: providerName, providerMeta });
5146
+ this.emit({
5147
+ type: "session_init",
5148
+ sessionId,
5149
+ provider: providerName,
5150
+ providerMeta,
5151
+ ...extras?.harnessVariantMeta ? { harnessVariantMeta: extras.harnessVariantMeta } : {}
5152
+ });
4857
5153
  this.runPrompt();
4858
5154
  }
4859
5155
  onEvent(listener) {
@@ -5003,6 +5299,7 @@ class ACPSession {
5003
5299
  return;
5004
5300
  this.completed = true;
5005
5301
  this.completionResolve(result);
5302
+ stopProxies(this.extras?.proxies ?? []);
5006
5303
  if (this.ephemeralTokenId) {
5007
5304
  revokeAcpSessionToken(this.config.apiUrl, this.config.apiKey, this.ephemeralTokenId);
5008
5305
  }
@@ -5056,39 +5353,71 @@ class ACPAdapter2 {
5056
5353
  const stream = ndJsonStream2(fileSinkWritableStream(proc.stdin), proc.stdout);
5057
5354
  const agent = client().onRequest(methods.client.session.requestPermission, ({ params }) => client2.requestPermission(params)).onNotification(methods.client.session.update, ({ params }) => client2.sessionUpdate(params)).connect(stream).agent;
5058
5355
  let ephemeralToken = null;
5356
+ const proxies = [];
5059
5357
  try {
5060
- await agent.request(methods.agent.initialize, {
5358
+ const initResult = await agent.request(methods.agent.initialize, {
5061
5359
  protocolVersion: PROTOCOL_VERSION,
5062
5360
  clientInfo: { name: "agent-swarm", version: package_default.version },
5063
5361
  clientCapabilities: { session: { configOptions: { boolean: {} } } }
5064
5362
  });
5065
5363
  ephemeralToken = await mintAcpSessionToken(config.apiUrl, config.apiKey, config.agentId, config.taskId);
5066
5364
  const installedServers = await fetchInstalledMcpServers(config.apiUrl, config.apiKey, config.agentId, "claude");
5365
+ let mcpServers = [
5366
+ {
5367
+ type: "http",
5368
+ name: "swarm",
5369
+ url: `${config.apiUrl.replace(/\/+$/, "")}/mcp`,
5370
+ headers: [
5371
+ { name: "Authorization", value: `Bearer ${ephemeralToken.plaintext}` },
5372
+ { name: "X-Agent-ID", value: config.agentId },
5373
+ { name: "X-Source-Task-Id", value: config.taskId }
5374
+ ]
5375
+ },
5376
+ ...toAcpMcpServers(installedServers)
5377
+ ];
5378
+ if (target.requiresSecureMcpUrl) {
5379
+ mcpServers = await secureMcpServers(mcpServers, initResult.agentCapabilities?.mcpCapabilities?.sse === true, proxies);
5380
+ }
5067
5381
  const sessionMeta = target.sessionMeta?.(config);
5068
- const newSession = await agent.request(methods.agent.session.new, {
5069
- ...sessionMeta ? { _meta: sessionMeta } : {},
5070
- cwd: config.cwd,
5071
- mcpServers: [
5072
- {
5073
- type: "http",
5074
- name: "swarm",
5075
- url: `${config.apiUrl.replace(/\/+$/, "")}/mcp`,
5076
- headers: [
5077
- { name: "Authorization", value: `Bearer ${ephemeralToken.plaintext}` },
5078
- { name: "X-Agent-ID", value: config.agentId },
5079
- { name: "X-Source-Task-Id", value: config.taskId }
5080
- ]
5081
- },
5082
- ...toAcpMcpServers(installedServers)
5083
- ]
5084
- });
5382
+ const resumeId = target.resume ? config.resumeSessionId?.trim() : undefined;
5383
+ let sessionId;
5384
+ let advertisedOptions;
5385
+ if (resumeId && initResult.agentCapabilities?.sessionCapabilities?.resume) {
5386
+ const resumed = await agent.request(methods.agent.session.resume, {
5387
+ ...sessionMeta ? { _meta: sessionMeta } : {},
5388
+ sessionId: resumeId,
5389
+ cwd: config.cwd,
5390
+ mcpServers
5391
+ });
5392
+ sessionId = resumeId;
5393
+ advertisedOptions = resumed.configOptions ?? [];
5394
+ } else {
5395
+ if (resumeId) {
5396
+ console.warn("\x1B[33m[acp]\x1B[0m Target does not advertise session/resume; starting a new session");
5397
+ }
5398
+ const systemPrompt = await sessionSystemPromptBlocks(target, config, initResult);
5399
+ const newSessionParams = {
5400
+ ...sessionMeta ? { _meta: sessionMeta } : {},
5401
+ cwd: config.cwd,
5402
+ mcpServers,
5403
+ ...systemPrompt ? { systemPrompt } : {}
5404
+ };
5405
+ const newSession = await agent.request(methods.agent.session.new, newSessionParams);
5406
+ sessionId = newSession.sessionId;
5407
+ advertisedOptions = newSession.configOptions ?? [];
5408
+ }
5085
5409
  const configOptions = await applyConfiguredOptions({
5086
5410
  setSessionConfigOption: (params) => agent.request(methods.agent.session.setConfigOption, params)
5087
- }, newSession.sessionId, newSession.configOptions ?? [], target.configuredOptions(config));
5088
- session = new ACPSession(agent, client2, proc, config, newSession.sessionId, this.name, target, {
5411
+ }, sessionId, advertisedOptions, target.configuredOptions(config));
5412
+ const agentVersion = initResult.agentInfo?.version?.trim();
5413
+ session = new ACPSession(agent, client2, proc, config, sessionId, this.name, target, {
5089
5414
  target: target.target,
5090
5415
  configOptions: sanitizeAcpConfigOptions(configOptions)
5091
- }, ephemeralToken.tokenId);
5416
+ }, ephemeralToken.tokenId, {
5417
+ initResult,
5418
+ ...agentVersion ? { harnessVariantMeta: { version: scrubSecrets(agentVersion) } } : {},
5419
+ proxies
5420
+ });
5092
5421
  for (const event of preSessionEvents)
5093
5422
  session.emitFromAcp(event);
5094
5423
  session.waitForCompletion().finally(cleanupArtifact);
@@ -5098,12 +5427,14 @@ class ACPAdapter2 {
5098
5427
  revokeAcpSessionToken(config.apiUrl, config.apiKey, ephemeralToken.tokenId);
5099
5428
  }
5100
5429
  await terminateProcessGroup(proc.pid);
5430
+ await stopProxies(proxies);
5101
5431
  await cleanupArtifact();
5102
5432
  throw new Error(`ACP target failed during startup: ${describeTargetError(target, scrubSecrets(formatError(err)))}`);
5103
5433
  }
5104
5434
  }
5105
- async canResume(_sessionId) {
5106
- return false;
5435
+ async canResume(sessionId) {
5436
+ const resume = this.options.target?.resume;
5437
+ return resume ? resume.canResume(sessionId) : false;
5107
5438
  }
5108
5439
  formatCommand(commandName) {
5109
5440
  return `/${commandName}`;
@@ -5199,6 +5530,46 @@ function toAcpMcpServers(installed) {
5199
5530
  }
5200
5531
  return servers;
5201
5532
  }
5533
+ async function sessionSystemPromptBlocks(target, config, initResult) {
5534
+ if (!target.sessionSystemPrompt)
5535
+ return;
5536
+ if (!initResult.agentCapabilities?.sessionCapabilities?.systemPrompt) {
5537
+ console.warn("\x1B[33m[acp]\x1B[0m Target does not advertise sessionCapabilities.systemPrompt; the swarm system prompt is not sent");
5538
+ return;
5539
+ }
5540
+ const plan = await target.sessionSystemPrompt(config);
5541
+ return plan?.blocks.length ? plan.blocks : undefined;
5542
+ }
5543
+ async function secureMcpServers(servers, sseSupported, proxies) {
5544
+ const byOrigin = new Map;
5545
+ const result = [];
5546
+ for (const server of servers) {
5547
+ if (!("url" in server)) {
5548
+ result.push(server);
5549
+ continue;
5550
+ }
5551
+ if (server.type === "sse" && !sseSupported) {
5552
+ console.warn(`\x1B[33m[acp]\x1B[0m Skipping installed MCP server "${server.name}": the target does not support SSE MCP servers`);
5553
+ continue;
5554
+ }
5555
+ if (!needsLoopbackProxy(server.url)) {
5556
+ result.push(server);
5557
+ continue;
5558
+ }
5559
+ const url = new URL(server.url);
5560
+ let proxy = byOrigin.get(url.origin);
5561
+ if (!proxy) {
5562
+ proxy = await startMcpLoopbackProxy(url.origin);
5563
+ byOrigin.set(url.origin, proxy);
5564
+ proxies.push(proxy);
5565
+ }
5566
+ result.push({ ...server, url: `${proxy.url}${url.pathname}${url.search}` });
5567
+ }
5568
+ return result;
5569
+ }
5570
+ async function stopProxies(proxies) {
5571
+ await Promise.all(proxies.splice(0).map((proxy) => proxy.stop().catch(() => {})));
5572
+ }
5202
5573
  function describeTargetError(target, message) {
5203
5574
  return target.describeError?.(message) ?? message;
5204
5575
  }
@@ -5220,4 +5591,4 @@ function fileSinkWritableStream(sink) {
5220
5591
  });
5221
5592
  }
5222
5593
 
5223
- export { isGrokOpenRouterModel, grokTargetProfile, ACPAdapter2 };
5594
+ export { FX_ROUTE_KEY_VARS, requireFxRoute, isGrokOpenRouterModel, grokTargetProfile, fxSessionExists, fxTargetProfile, ACPAdapter2 };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RuntimeProviderKindSchema,
3
3
  init_types4
4
- } from "./cli-41z8xwj0.js";
4
+ } from "./cli-7wspm5gm.js";
5
5
  import {
6
6
  init_zod
7
7
  } from "./cli-k5671be5.js";
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  scrubSecrets,
23
23
  init_secret_scrubber
24
- } from "./cli-a4btqqft.js";
24
+ } from "./cli-1b7btd38.js";
25
25
 
26
26
  // src/runtime-providers/controller.ts
27
27
  init_secret_scrubber();