@desplega.ai/agent-swarm 1.165.0 → 1.167.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 (296) hide show
  1. package/dist/acp-adapter-zpvy6321.js +34 -0
  2. package/dist/{actions-jna0b3wm.js → actions-fq2zrwtf.js} +30 -34
  3. package/dist/{amp-adapter-0eve81pz.js → amp-adapter-5gbk7501.js} +7 -7
  4. package/dist/{anthropic-messages-hst62ws9.js → anthropic-messages-13yn502s.js} +4 -4
  5. package/dist/{app-75hm5cfa.js → app-nctetn1e.js} +11 -11
  6. package/dist/{assistant-yzd51j33.js → assistant-0aq8gjvj.js} +31 -35
  7. package/dist/{azure-openai-responses-mh8tvf78.js → azure-openai-responses-9st34pfz.js} +5 -5
  8. package/dist/{boot-reembed-z158xq32.js → boot-reembed-1ze5853n.js} +14 -16
  9. package/dist/{boot-reembed-2ex2mcsh.js → boot-reembed-fmp5ww69.js} +15 -16
  10. package/dist/boot-scrub-sweep-cbp8xd4e.js +212 -0
  11. package/dist/{boot-seeds-2bmnh18p.js → boot-seeds-22tx8a53.js} +13 -12
  12. package/dist/{claude-adapter-jbj1mycz.js → claude-adapter-0jhgeh1d.js} +25 -25
  13. package/dist/{claude-managed-adapter-17ggz09t.js → claude-managed-adapter-tzwxy803.js} +5 -5
  14. package/dist/{claude-managed-setup-ptm1nzm2.js → claude-managed-setup-nrhfx5b0.js} +5 -5
  15. package/dist/{claude-sdk-session-9re1g7r2.js → claude-sdk-session-wh77rh83.js} +2632 -2614
  16. package/dist/{cli-zsh093hk.js → cli-014vns2y.js} +63 -1
  17. package/dist/{cli-qvfk83fy.js → cli-13xwcqvj.js} +2 -2
  18. package/dist/{cli-8gpbwy09.js → cli-1yrcfa5s.js} +5 -5
  19. package/dist/{cli-xtgtyafv.js → cli-577bxkf6.js} +212 -451
  20. package/dist/{cli-ma3zvh39.js → cli-5qkcdv8c.js} +6118 -5874
  21. package/dist/{cli-cwxhbf43.js → cli-5t5my0h8.js} +85 -2
  22. package/dist/{cli-zvckv750.js → cli-69egj654.js} +2 -2
  23. package/dist/{cli-9xb89xca.js → cli-6bpvv8h4.js} +9 -9
  24. package/dist/{cli-90v942q1.js → cli-6qxmjpem.js} +8 -8
  25. package/dist/{cli-9866bd07.js → cli-6vfz44sr.js} +1 -1
  26. package/dist/{cli-32bca7nr.js → cli-7avy4v8w.js} +1 -1
  27. package/dist/{cli-xb3c6aat.js → cli-7mhy3ths.js} +21 -18
  28. package/dist/{cli-q38n4bq0.js → cli-95zs84qw.js} +3 -3
  29. package/dist/cli-a35hzdve.js +33 -0
  30. package/dist/{cli-x3x0qwky.js → cli-bxqez1p0.js} +51 -23
  31. package/dist/{cli-prt9emct.js → cli-c2tpw9ck.js} +3 -3
  32. package/dist/{cli-0n4fasz0.js → cli-c8r99akr.js} +16 -16
  33. package/dist/{cli-5anb0ev3.js → cli-cexctgn5.js} +89 -26
  34. package/dist/{cli-bns5c8k9.js → cli-cf2vgn9d.js} +105 -91
  35. package/dist/{cli-ng97fjq7.js → cli-cmxkbzzs.js} +33 -7
  36. package/dist/{cli-nexwh8zg.js → cli-g7k7zbcz.js} +12 -5
  37. package/dist/{cli-mmzwwptd.js → cli-hf5s9pgf.js} +1 -1
  38. package/dist/{cli-nvvfd8bq.js → cli-jbzbr36n.js} +4091 -3793
  39. package/dist/{cli-zn2v3t8v.js → cli-jvmtxqtc.js} +27 -15
  40. package/dist/{cli-pkke6geq.js → cli-km4x66j0.js} +83 -65
  41. package/dist/cli-kw0jcfje.js +516 -0
  42. package/dist/{cli-28smfvbn.js → cli-m7vmeepg.js} +32 -19
  43. package/dist/{cli-hpryr6em.js → cli-mb75wpxf.js} +1 -1
  44. package/dist/{cli-qdv8kgz7.js → cli-mkdsy1nq.js} +14018 -3333
  45. package/dist/{cli-b0f70z24.js → cli-mn8qkd8v.js} +1 -1
  46. package/dist/{cli-420bdgw0.js → cli-mv2520nm.js} +1 -1
  47. package/dist/{cli-n9ehc28t.js → cli-mxry91sa.js} +31 -10
  48. package/dist/{cli-wfajtmf7.js → cli-mxvnnv5q.js} +596 -13
  49. package/dist/cli-nkqjj42q.js +104 -0
  50. package/dist/{cli-e7t4snpa.js → cli-p8rt8spp.js} +5 -5
  51. package/dist/{cli-gh5yqzpe.js → cli-pkj1w46r.js} +12 -7
  52. package/dist/cli-q1vnz8wv.js +96 -0
  53. package/dist/{cli-fj86xr3c.js → cli-qd97v6z2.js} +2 -2
  54. package/dist/{cli-ba66wyhy.js → cli-qzmzwegq.js} +60 -20
  55. package/dist/{cli-5b2fjjzh.js → cli-r7eeddkq.js} +14 -9
  56. package/dist/{cli-8ssjez7e.js → cli-rhy7z1rp.js} +22 -11
  57. package/dist/{cli-4mevd1hf.js → cli-s9y81s7j.js} +5 -5
  58. package/dist/{cli-59jn5twa.js → cli-tc5zec7v.js} +7 -7
  59. package/dist/{cli-ttbsse3f.js → cli-tmhsxhb8.js} +1 -1
  60. package/dist/{cli-k6xx3pve.js → cli-tx2zvn23.js} +4 -4
  61. package/dist/{cli-pjxnr1jn.js → cli-ty4bzkqr.js} +5 -5
  62. package/dist/{cli-nfygw434.js → cli-v1pwxreq.js} +55 -52
  63. package/dist/{cli-ftry7975.js → cli-v1w7pbd8.js} +3 -2
  64. package/dist/{cli-10zmp1p7.js → cli-vr5avem2.js} +27 -32
  65. package/dist/{cli-bzr0ftht.js → cli-wnb9b2g3.js} +19 -0
  66. package/dist/cli-wt7ccy4r.js +2654 -0
  67. package/dist/{cli-50eg13rj.js → cli-wydz3feg.js} +549 -321
  68. package/dist/{cli-krqm5f11.js → cli-xezn9nkh.js} +16 -13
  69. package/dist/{cli-8kt0bmgx.js → cli-xf713zz0.js} +2 -2
  70. package/dist/{cli-x7afk5wm.js → cli-xvc3q9br.js} +1 -1
  71. package/dist/{cli-9s3h836g.js → cli-xvdgasgy.js} +1 -1
  72. package/dist/{cli-j0pdrmwg.js → cli-y0kjpfm9.js} +3 -3
  73. package/dist/{cli-6zcfw0x7.js → cli-y195hv1a.js} +1 -1
  74. package/dist/{cli-amwhs8h2.js → cli-ykt8f7va.js} +22 -9
  75. package/dist/{cli-1kzfvd1z.js → cli-ymmc1zxg.js} +15 -11
  76. package/dist/{cli-xnzrzets.js → cli-ypgba1a8.js} +2 -2
  77. package/dist/{cli-bdv39kgj.js → cli-z1dqhc9y.js} +31 -20
  78. package/dist/{cli-fw6vdcq5.js → cli-zp67qg5x.js} +34 -1
  79. package/dist/{cli-qbksc292.js → cli-zy39d433.js} +2 -0
  80. package/dist/cli.js +36 -32
  81. package/dist/{cloudflare-workers-ai-system-one-tt484t61.js → cloudflare-workers-ai-system-one-sta45jf9.js} +7 -5
  82. package/dist/{codex-adapter-3qnxshje.js → codex-adapter-cgesnjkr.js} +20 -20
  83. package/dist/{codex-login-brkxhhdg.js → codex-login-g1cyt5zm.js} +2 -2
  84. package/dist/{codex-session-runner-612wnapp.js → codex-session-runner-8kd7ddhr.js} +20 -20
  85. package/dist/{commands-2ybfcxkj.js → commands-h6zaaxym.js} +11 -10
  86. package/dist/{cursor-adapter-p3jgdehv.js → cursor-adapter-v8mm6bp5.js} +7 -7
  87. package/dist/{db-f4ans0jj.js → db-qg3myn53.js} +13 -10
  88. package/dist/{devin-adapter-dhzt01ff.js → devin-adapter-bffjj5n4.js} +2 -2
  89. package/dist/{dispatcher-pk182apd.js → dispatcher-7vnwj9qw.js} +28 -32
  90. package/dist/{dsh-adapter-7twaeps1.js → dsh-adapter-tz6hfp5r.js} +7 -7
  91. package/dist/{e2b-y8t3jzyz.js → e2b-nd50eccg.js} +1 -1
  92. package/dist/{easter-egg-3d-mtpnw06s.js → easter-egg-3d-66zxervv.js} +2 -2
  93. package/dist/{event-bus-w7ac4n3c.js → event-bus-vnfthafg.js} +2 -2
  94. package/dist/{execute-s4ccjq3n.js → execute-h4jgevyw.js} +61 -11
  95. package/dist/{google-generative-ai-d6nphg3q.js → google-generative-ai-b8zxrpax.js} +5 -5
  96. package/dist/{google-vertex-cpshkref.js → google-vertex-nrdd697t.js} +5 -5
  97. package/dist/grok-adapter-jdt2dz2s.js +39 -0
  98. package/dist/{handlers-g2wnr4t9.js → handlers-2qtkpncr.js} +31 -35
  99. package/dist/{hook-f7jt9vnm.js → hook-51yfcgsv.js} +48 -39
  100. package/dist/{hook-bbdpnkb4.js → hook-qnbdgwvd.js} +15 -17
  101. package/dist/{http-w40q4w94.js → http-jsmtag08.js} +536 -231
  102. package/dist/{index-056j5kzn.js → index-2t9kesn1.js} +13 -12
  103. package/dist/{index-cj1r9q83.js → index-bt8wkv1w.js} +29 -33
  104. package/dist/{index-7n70jwbb.js → index-cx1sb9bq.js} +42 -35
  105. package/dist/{index-9bfssf54.js → index-ekywyv2v.js} +28 -32
  106. package/dist/{index-fdk1t4d6.js → index-n0rxa4ca.js} +11962 -9900
  107. package/dist/{index-k8xc083e.js → index-t4g06w93.js} +28 -32
  108. package/dist/{keepalive-1tj10tf4.js → keepalive-4aezx4bj.js} +16 -12
  109. package/dist/{lead-st0bg7v4.js → lead-r44bkpm5.js} +52 -56
  110. package/dist/{llama-cpp-classify-tgj35k8d.js → llama-cpp-classify-6erb7wwv.js} +3 -1
  111. package/dist/{maintenance-nz71zats.js → maintenance-grz5jrzh.js} +12 -13
  112. package/dist/{mistral-conversations-8445ddjn.js → mistral-conversations-059y51zt.js} +4 -4
  113. package/dist/{node-f0ykebbv.js → node-qm9eb6z0.js} +25 -7
  114. package/dist/{oauth-refresh-sweep-aefzwvvq.js → oauth-refresh-sweep-wm4ctjfj.js} +15 -11
  115. package/dist/{onboard-kgpr9mbn.js → onboard-v60zgqf0.js} +2 -2
  116. package/dist/{openai-codex-responses-9ynm88zy.js → openai-codex-responses-jzxkta9b.js} +8 -7
  117. package/dist/{openai-completions-nhqwjmaw.js → openai-completions-663yncfq.js} +4 -4
  118. package/dist/openai-decisions-vj9nkpf8.js +162 -0
  119. package/dist/{openai-responses-xx1c4kgm.js → openai-responses-m3g43rrt.js} +5 -5
  120. package/dist/{opencode-adapter-0c8e70dk.js → opencode-adapter-yjyqynzf.js} +8 -8
  121. package/dist/{openrouter-images-8yx3487g.js → openrouter-images-kr60n6b9.js} +1 -1
  122. package/dist/{otel-impl-x8zp4y5a.js → otel-impl-ghh4dyf8.js} +2 -2
  123. package/dist/{pi-messages-vxdt8v7j.js → pi-messages-xszk613n.js} +1 -1
  124. package/dist/{pi-mono-adapter-t280ah5c.js → pi-mono-adapter-0eg8kw2c.js} +69 -52
  125. package/dist/{pricing-refresh-9e0q7cwk.js → pricing-refresh-mjrqvnvw.js} +12 -11
  126. package/dist/{rbac-roles-790j3ga8.js → rbac-roles-axv4d74x.js} +11 -10
  127. package/dist/{rbac-roles-kcp6zge2.js → rbac-roles-fd5tskj9.js} +11 -10
  128. package/dist/{render-v2-tch4nefj.js → render-v2-k50j33qd.js} +11 -11
  129. package/dist/{runtime-v2t1r79e.js → runtime-h9ha1mq6.js} +4 -4
  130. package/dist/{setup-rcm303ns.js → setup-4syh0pd2.js} +2 -2
  131. package/dist/{typesafe-system-one-datfr82p.js → typesafe-system-one-e988vty7.js} +7 -5
  132. package/dist/{virtual-modules-wm8mxdxx.js → virtual-modules-ftr9kwe8.js} +11 -11
  133. package/dist/{work-objects-ctg7t70w.js → work-objects-jcdbg8rr.js} +32 -36
  134. package/dist/{worker-5dp0xm55.js → worker-x8j8c9sx.js} +52 -56
  135. package/dist/{x-v3yw66zs.js → x-ma4gnfgy.js} +2 -2
  136. package/openapi.json +5 -2
  137. package/package.json +15 -11
  138. package/src/be/automation-preflight.ts +9 -4
  139. package/src/be/boot-scrub-sweep.ts +302 -0
  140. package/src/be/crypto/key-bootstrap.ts +1 -1
  141. package/src/be/db/approvals.ts +15 -1
  142. package/src/be/db/codex-oauth-device-flows.ts +40 -0
  143. package/src/be/db/config-secrets.ts +31 -0
  144. package/src/be/db/runtime.ts +4 -0
  145. package/src/be/db/script-runs.ts +15 -0
  146. package/src/be/db/tasks/write.ts +1 -1
  147. package/src/be/db-queries/mcp-oauth.ts +5 -0
  148. package/src/be/db-queries/oauth.ts +77 -0
  149. package/src/be/db.ts +162 -59
  150. package/src/be/events.ts +17 -1
  151. package/src/be/memory/index-content.ts +2 -2
  152. package/src/be/memory/providers/openai-embedding.ts +7 -2
  153. package/src/be/memory/providers/sqlite-store.ts +63 -11
  154. package/src/be/memory/raters/llm-summarizer.ts +7 -2
  155. package/src/be/memory/types.ts +14 -0
  156. package/src/be/migrations/201_workflow_replay_columns.sql +10 -0
  157. package/src/be/migrations/202_codex_oauth_device_flows.sql +24 -0
  158. package/src/be/modelsdev-cache.json +61 -0
  159. package/src/be/scripts/db.ts +28 -4
  160. package/src/be/scripts/source-secrets.ts +37 -0
  161. package/src/be/scrub-json.ts +32 -0
  162. package/src/be/sealed-json.ts +59 -0
  163. package/src/be/secret-registry.ts +131 -0
  164. package/src/be/seed-pricing.ts +84 -53
  165. package/src/be/swarm-config-guard.ts +13 -0
  166. package/src/be/workflow-replay.ts +77 -0
  167. package/src/commands/provider-credentials.ts +28 -5
  168. package/src/commands/runner.ts +7 -12
  169. package/src/heartbeat/heartbeat.ts +91 -19
  170. package/src/hooks/hook.ts +72 -27
  171. package/src/http/codex-oauth-device.ts +8 -10
  172. package/src/http/db-query-bounded.ts +3 -0
  173. package/src/http/db-query-shared.ts +107 -15
  174. package/src/http/db-query.ts +10 -2
  175. package/src/http/index.ts +23 -6
  176. package/src/http/mcp.ts +5 -0
  177. package/src/http/onboarding.ts +2 -0
  178. package/src/http/script-runs.ts +9 -1
  179. package/src/http/scripts.ts +15 -0
  180. package/src/http/workflows.ts +3 -2
  181. package/src/oauth/mcp-wrapper.ts +1 -1
  182. package/src/providers/acp-adapter.ts +25 -11
  183. package/src/providers/acp-target-catalog.ts +35 -1
  184. package/src/providers/acp-targets.ts +78 -7
  185. package/src/providers/amp-adapter.ts +1 -1
  186. package/src/providers/claude-adapter.ts +26 -0
  187. package/src/providers/codex-adapter.ts +30 -3
  188. package/src/providers/codex-oauth/auth-json.ts +21 -4
  189. package/src/providers/codex-oauth/types.ts +2 -0
  190. package/src/providers/cursor-adapter.ts +1 -1
  191. package/src/providers/dsh-adapter.ts +10 -1
  192. package/src/providers/grok-adapter.ts +18 -2
  193. package/src/providers/opencode-adapter.ts +21 -5
  194. package/src/providers/pi-mono-extension.ts +56 -25
  195. package/src/providers/pricing-sources.md +2 -0
  196. package/src/script-workflows/supervisor.ts +11 -2
  197. package/src/scripts-runtime/eval-harness.ts +2 -12
  198. package/src/scripts-runtime/executors/quickjs-bundle.ts +152 -0
  199. package/src/scripts-runtime/executors/quickjs-prelude.ts +285 -0
  200. package/src/scripts-runtime/executors/quickjs-runner.ts +580 -0
  201. package/src/scripts-runtime/executors/quickjs-worker.ts +81 -0
  202. package/src/scripts-runtime/executors/quickjs.ts +196 -0
  203. package/src/scripts-runtime/executors/registry.ts +2 -0
  204. package/src/scripts-runtime/executors/sourcemap.ts +79 -0
  205. package/src/scripts-runtime/script-error-hints.ts +14 -0
  206. package/src/server.ts +66 -4
  207. package/src/tests/acp-adapter.test.ts +277 -12
  208. package/src/tests/boot-scrub-sweep.test.ts +390 -0
  209. package/src/tests/check-text-columns.test.ts +145 -0
  210. package/src/tests/ci-unit-test-report.test.ts +73 -0
  211. package/src/tests/claude-default-route.test.ts +75 -0
  212. package/src/tests/claude-hook-output.test.ts +233 -0
  213. package/src/tests/claude-sdk-process.fixture.ts +13 -2
  214. package/src/tests/codex-adapter-pool-auth-revalidate.test.ts +4 -2
  215. package/src/tests/codex-adapter.test.ts +166 -26
  216. package/src/tests/codex-oauth-auth-timestamps.test.ts +76 -0
  217. package/src/tests/codex-oauth-device.test.ts +23 -37
  218. package/src/tests/codex-oauth.test.ts +4 -1
  219. package/src/tests/context-window.test.ts +2 -2
  220. package/src/tests/credential-check.test.ts +51 -1
  221. package/src/tests/db-query-denylist.test.ts +202 -0
  222. package/src/tests/db-task-read-contract.test.ts +1 -0
  223. package/src/tests/db-task-write-contract.test.ts +1 -0
  224. package/src/tests/dsh-adapter.test.ts +23 -1
  225. package/src/tests/enabled-tools.test.ts +269 -0
  226. package/src/tests/entrypoint-acp-target-binary.test.ts +31 -1
  227. package/src/tests/entrypoint-codex-oauth-seed.test.ts +12 -0
  228. package/src/tests/events-scrub.test.ts +88 -0
  229. package/src/tests/fixtures/secret-corpus.ts +320 -0
  230. package/src/tests/grok-adapter.test.ts +13 -0
  231. package/src/tests/haiku-5-5-pricing.test.ts +38 -0
  232. package/src/tests/heartbeat-checklist.test.ts +158 -1
  233. package/src/tests/onboarding.test.ts +44 -0
  234. package/src/tests/opencode-adapter.test.ts +66 -3
  235. package/src/tests/opencode-plugin.test.ts +37 -0
  236. package/src/tests/openrouter-attribution-call-sites.test.ts +204 -0
  237. package/src/tests/openrouter-base-url.test.ts +30 -39
  238. package/src/tests/pi-mono-extension.test.ts +161 -2
  239. package/src/tests/pricing-refresh.test.ts +70 -1
  240. package/src/tests/reasoning-effort.test.ts +3 -1
  241. package/src/tests/script-connections.test.ts +5 -0
  242. package/src/tests/script-executor-conformance.test.ts +3 -0
  243. package/src/tests/script-executor-quickjs.test.ts +442 -0
  244. package/src/tests/script-executor-registry.test.ts +6 -1
  245. package/src/tests/script-runs-http.test.ts +88 -1
  246. package/src/tests/script-runs-scrub.test.ts +275 -0
  247. package/src/tests/scripts-http.test.ts +82 -1
  248. package/src/tests/scrubbed-text-12e.test.ts +289 -0
  249. package/src/tests/sealed-key-guard.test.ts +166 -0
  250. package/src/tests/secret-canary-sweep.test.ts +958 -0
  251. package/src/tests/secret-registry.test.ts +355 -0
  252. package/src/tests/secret-rules.test.ts +230 -0
  253. package/src/tests/secret-scrubber.test.ts +3 -2
  254. package/src/tests/telemetry-trigger.test.ts +12 -1
  255. package/src/tests/workflow-llm.test.ts +14 -0
  256. package/src/tests/workflow-replay.test.ts +518 -0
  257. package/src/tests/workflow-scrub.test.ts +242 -0
  258. package/src/tests/workflow-system-one-decision-providers.test.ts +33 -0
  259. package/src/tools/db-query.ts +1 -1
  260. package/src/tools/inject-learning.ts +1 -1
  261. package/src/tools/request-human-input.ts +7 -2
  262. package/src/tools/workflows/get-workflow-run.ts +3 -2
  263. package/src/types.ts +1 -1
  264. package/src/utils/enabled-tools.ts +27 -0
  265. package/src/utils/internal-ai/complete-structured.ts +11 -3
  266. package/src/utils/openrouter-base-url.ts +23 -0
  267. package/src/utils/secret-rules.generated.ts +2055 -0
  268. package/src/utils/secret-scrubber.ts +363 -29
  269. package/src/workflows/engine.ts +39 -4
  270. package/src/workflows/executors/raw-llm.ts +1 -0
  271. package/src/workflows/executors/system-one-decision.ts +2 -0
  272. package/src/workflows/executors/validate.ts +1 -0
  273. package/src/workflows/executors/workflow-llm.ts +9 -2
  274. package/src/workflows/recovery.ts +10 -1
  275. package/src/workflows/resume.ts +62 -3
  276. package/src/workflows/retry-poller.ts +3 -0
  277. package/templates/skills/agent-browser/SKILL.md +2 -0
  278. package/templates/skills/agent-browser/content.md +2 -0
  279. package/templates/skills/code-quality/content.md +1 -0
  280. package/templates/skills/heartbeat-runbook/content.md +1 -1
  281. package/templates/skills/work-on-task/SKILL.md +4 -0
  282. package/templates/skills/work-on-task/content.md +4 -0
  283. package/templates/skills/workflow-iterate/content.md +9 -0
  284. package/dist/acp-adapter-w6zws6me.js +0 -23
  285. package/dist/boot-scrub-logs-246yn076.js +0 -99
  286. package/dist/cli-3a4m1aws.js +0 -572
  287. package/dist/cli-3dpj7atn.js +0 -11
  288. package/dist/cli-a87b04k8.js +0 -951
  289. package/dist/cli-cvk6yzw5.js +0 -40
  290. package/dist/cli-gvcgmx69.js +0 -183
  291. package/dist/cli-h1spv8v4.js +0 -427
  292. package/dist/cli-jqt9hrnz.js +0 -168
  293. package/dist/cli-yhmwmv0g.js +0 -9281
  294. package/dist/grok-adapter-yt9pab3k.js +0 -29
  295. package/src/be/boot-scrub-logs.ts +0 -132
  296. package/dist/{codex-hook-d2rkvf39.js → codex-hook-15dgc4cb.js} +1 -1
@@ -3805,6 +3805,7 @@ __export(exports_dist, {
3805
3805
  encodeITerm2: () => encodeITerm2,
3806
3806
  encodeKitty: () => encodeKitty,
3807
3807
  foregroundAnsi: () => foregroundAnsi,
3808
+ formatProgramStatus: () => formatProgramStatus,
3808
3809
  fuzzyFilter: () => fuzzyFilter,
3809
3810
  fuzzyMatch: () => fuzzyMatch,
3810
3811
  getCapabilities: () => getCapabilities,
@@ -6038,6 +6039,9 @@ function detectCapabilitiesFromEnvironment(tmuxForwardsHyperlink) {
6038
6039
  if (term.startsWith("screen")) {
6039
6040
  return { images: null, trueColor: hasTrueColorHint, hyperlinks: false };
6040
6041
  }
6042
+ if (termProgram === "herdr") {
6043
+ return { images: null, trueColor: hasTrueColorHint, hyperlinks: true };
6044
+ }
6041
6045
  if (process.env.KITTY_WINDOW_ID || termProgram === "kitty") {
6042
6046
  return { images: "kitty", trueColor: true, hyperlinks: true };
6043
6047
  }
@@ -7445,6 +7449,10 @@ class Box {
7445
7449
  setBgFn(bgFn) {
7446
7450
  this.bgFn = bgFn;
7447
7451
  }
7452
+ setPaddingX(paddingX) {
7453
+ this.paddingX = paddingX;
7454
+ this.invalidateCache();
7455
+ }
7448
7456
  invalidateCache() {
7449
7457
  this.cache = undefined;
7450
7458
  }
@@ -7551,6 +7559,10 @@ class Text {
7551
7559
  this.cachedWidth = undefined;
7552
7560
  this.cachedLines = undefined;
7553
7561
  }
7562
+ setPaddingX(paddingX) {
7563
+ this.paddingX = paddingX;
7564
+ this.invalidate();
7565
+ }
7554
7566
  invalidate() {
7555
7567
  this.cachedText = undefined;
7556
7568
  this.cachedWidth = undefined;
@@ -12821,6 +12833,39 @@ function getNativeClipboard() {
12821
12833
  return;
12822
12834
  return loadNativePlatformHelper("linux", "-x11");
12823
12835
  }
12836
+ // node_modules/@earendil-works/pi-tui/dist/program-status.js
12837
+ var PROGRAM_STATUS_QUERY = "\x1B]7501;?\x1B\\";
12838
+ function isProgramStatusReply(sequence) {
12839
+ return /^\x1b\]7501;\?[^\x07\x1b]*(?:\x07|\x1b\\)$/.test(sequence);
12840
+ }
12841
+ var APP_PATTERN = /^[A-Za-z0-9_.+-]{1,32}$/;
12842
+ var CONTROL_CHARACTERS = /[\u0000-\u001f\u007f-\u009f]+/g;
12843
+ var MAX_MESSAGE_BYTES = 2048;
12844
+ function truncateUtf8(text, maxBytes) {
12845
+ if (Buffer.byteLength(text, "utf8") <= maxBytes)
12846
+ return text;
12847
+ let bytes = 0;
12848
+ let end = 0;
12849
+ for (const char of text) {
12850
+ const size = Buffer.byteLength(char, "utf8");
12851
+ if (bytes + size > maxBytes)
12852
+ break;
12853
+ bytes += size;
12854
+ end += char.length;
12855
+ }
12856
+ return text.slice(0, end);
12857
+ }
12858
+ function formatProgramStatus(status) {
12859
+ const pairs = [`state=${status.state}`];
12860
+ if (status.app !== undefined && APP_PATTERN.test(status.app))
12861
+ pairs.push(`app=${status.app}`);
12862
+ if (status.state === "blocked" && status.kind)
12863
+ pairs.push(`kind=${status.kind}`);
12864
+ const message = truncateUtf8((status.message ?? "").replace(CONTROL_CHARACTERS, " ").trim(), MAX_MESSAGE_BYTES);
12865
+ if (message)
12866
+ pairs.push(`msg=${Buffer.from(message, "utf8").toString("base64")}`);
12867
+ return `\x1B]7501;${pairs.join(":")}\x1B\\`;
12868
+ }
12824
12869
  // node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js
12825
12870
  import { EventEmitter } from "events";
12826
12871
  var ESC = "\x1B";
@@ -13118,7 +13163,8 @@ var TERMINAL_PROGRESS_CLEAR_SEQUENCE = "\x1B]9;4;0\x07";
13118
13163
  var NATIVE_SHIFT_ENTER_SEQUENCE = "\x1B[13;2u";
13119
13164
  var DESIRED_KITTY_KEYBOARD_PROTOCOL_FLAGS = 7;
13120
13165
  var KEYBOARD_PROTOCOL_RESPONSE_FRAGMENT_TIMEOUT_MS = 150;
13121
- var KITTY_KEYBOARD_PROTOCOL_QUERY = `\x1B[>${DESIRED_KITTY_KEYBOARD_PROTOCOL_FLAGS}u\x1B[?u\x1B[c`;
13166
+ var KITTY_KEYBOARD_PROTOCOL_QUERY = `\x1B[>${DESIRED_KITTY_KEYBOARD_PROTOCOL_FLAGS}u\x1B[?u`;
13167
+ var DEVICE_ATTRIBUTES_QUERY = "\x1B[c";
13122
13168
  function parseKeyboardProtocolNegotiationSequence(sequence) {
13123
13169
  const kittyFlags = sequence.match(/^\x1b\[\?(\d+)u$/);
13124
13170
  if (kittyFlags) {
@@ -13173,6 +13219,9 @@ class ProcessTerminal {
13173
13219
  stdinBuffer;
13174
13220
  stdinDataHandler;
13175
13221
  progressInterval;
13222
+ programStatus;
13223
+ programStatusSupported = false;
13224
+ programStatusQueryPending = false;
13176
13225
  writeLogPath = (() => {
13177
13226
  const env2 = process.env.PI_TUI_WRITE_LOG || "";
13178
13227
  if (!env2)
@@ -13210,6 +13259,14 @@ class ProcessTerminal {
13210
13259
  setupStdinBuffer() {
13211
13260
  this.stdinBuffer = new StdinBuffer({ escapeTimeout: resolveEscapeTimeoutMs() });
13212
13261
  this.stdinBuffer.on("data", (sequence) => {
13262
+ if (isProgramStatusReply(sequence)) {
13263
+ if (this.programStatusQueryPending) {
13264
+ this.programStatusQueryPending = false;
13265
+ this.programStatusSupported = true;
13266
+ this.writeProgramStatus();
13267
+ }
13268
+ return;
13269
+ }
13213
13270
  const negotiation = this.readKeyboardProtocolNegotiationSequence(sequence);
13214
13271
  if (negotiation === "pending") {
13215
13272
  this.scheduleKeyboardProtocolNegotiationBufferFlush();
@@ -13235,7 +13292,12 @@ class ProcessTerminal {
13235
13292
  this.keyboardProtocolPushed = true;
13236
13293
  this.pendingKeyboardProtocolDeviceAttributes += 1;
13237
13294
  this.clearKeyboardProtocolNegotiationBuffer();
13238
- process.stdout.write(KITTY_KEYBOARD_PROTOCOL_QUERY);
13295
+ const programStatusOverride = process.env.PI_PROGRAM_STATUS;
13296
+ this.programStatusSupported = programStatusOverride === "1";
13297
+ this.programStatusQueryPending = programStatusOverride !== "1" && programStatusOverride !== "0";
13298
+ const programStatusQuery = this.programStatusQueryPending ? PROGRAM_STATUS_QUERY : "";
13299
+ process.stdout.write(`${KITTY_KEYBOARD_PROTOCOL_QUERY}${programStatusQuery}${DEVICE_ATTRIBUTES_QUERY}`);
13300
+ this.writeProgramStatus();
13239
13301
  }
13240
13302
  handleKeyboardProtocolNegotiationSequence(negotiationSequence) {
13241
13303
  this.clearKeyboardProtocolNegotiationBuffer();
@@ -13243,6 +13305,8 @@ class ProcessTerminal {
13243
13305
  if (this.pendingKeyboardProtocolDeviceAttributes === 0)
13244
13306
  return false;
13245
13307
  this.pendingKeyboardProtocolDeviceAttributes -= 1;
13308
+ if (this.pendingKeyboardProtocolDeviceAttributes === 0)
13309
+ this.programStatusQueryPending = false;
13246
13310
  }
13247
13311
  if (negotiationSequence.type === "kitty-flags") {
13248
13312
  if (negotiationSequence.flags !== 0) {
@@ -13376,6 +13440,11 @@ class ProcessTerminal {
13376
13440
  if (this.clearProgressInterval()) {
13377
13441
  process.stdout.write(TERMINAL_PROGRESS_CLEAR_SEQUENCE);
13378
13442
  }
13443
+ if (this.programStatusSupported && this.programStatus) {
13444
+ process.stdout.write(formatProgramStatus({ state: "clear" }));
13445
+ }
13446
+ this.programStatusSupported = false;
13447
+ this.programStatusQueryPending = false;
13379
13448
  process.stdout.write("\x1B[?2004l");
13380
13449
  const shouldDisableKittyProtocol = this.keyboardProtocolPushed || this._kittyProtocolActive;
13381
13450
  this.clearKeyboardProtocolNegotiationBuffer();
@@ -13443,6 +13512,16 @@ class ProcessTerminal {
13443
13512
  setTitle(title) {
13444
13513
  process.stdout.write(`\x1B]0;${title}\x07`);
13445
13514
  }
13515
+ setProgramStatus(status) {
13516
+ this.programStatus = status.state === "clear" ? undefined : status;
13517
+ if (this.programStatusSupported)
13518
+ process.stdout.write(formatProgramStatus(status));
13519
+ }
13520
+ writeProgramStatus() {
13521
+ if (this.programStatusSupported && this.programStatus) {
13522
+ process.stdout.write(formatProgramStatus(this.programStatus));
13523
+ }
13524
+ }
13446
13525
  setProgress(active) {
13447
13526
  if (active) {
13448
13527
  process.stdout.write(TERMINAL_PROGRESS_ACTIVE_SEQUENCE);
@@ -14260,6 +14339,10 @@ class TuiAltScreen extends TuiBase {
14260
14339
  return false;
14261
14340
  return this.copyTextToClipboard(text);
14262
14341
  }
14342
+ resetTextSelection() {
14343
+ this.clearTextSelection();
14344
+ this.lastClick = undefined;
14345
+ }
14263
14346
  getScreenLines() {
14264
14347
  return [...this.previousScreen];
14265
14348
  }
@@ -13,11 +13,11 @@ import {
13
13
  parseClaudeMdPendingRecord,
14
14
  planClaudeMdSync,
15
15
  withFileLock
16
- } from "./cli-wfajtmf7.js";
16
+ } from "./cli-mxvnnv5q.js";
17
17
  import {
18
18
  init_secret_scrubber,
19
19
  scrubSecrets
20
- } from "./cli-h1spv8v4.js";
20
+ } from "./cli-wt7ccy4r.js";
21
21
 
22
22
  // src/commands/claude-md-session.ts
23
23
  init_file_lock();
@@ -4,17 +4,17 @@ import {
4
4
  import {
5
5
  clampContextPercent,
6
6
  getContextWindowSize
7
- } from "./cli-32bca7nr.js";
7
+ } from "./cli-7avy4v8w.js";
8
8
  import {
9
9
  applyReasoningEffort
10
- } from "./cli-ttbsse3f.js";
10
+ } from "./cli-tmhsxhb8.js";
11
11
  import {
12
12
  swarmRuntimeInstanceId
13
13
  } from "./cli-re8z5p8p.js";
14
14
  import {
15
15
  DEFAULT_MODEL_TIER_MAP,
16
16
  init_types
17
- } from "./cli-9s3h836g.js";
17
+ } from "./cli-xvdgasgy.js";
18
18
  import {
19
19
  init_session_templates
20
20
  } from "./cli-g5erf0zt.js";
@@ -30,12 +30,12 @@ import {
30
30
  import {
31
31
  cursorCatalogRef,
32
32
  init_src
33
- } from "./cli-zsh093hk.js";
33
+ } from "./cli-014vns2y.js";
34
34
  import {
35
35
  init_secret_scrubber,
36
36
  registerVolatileSecret,
37
37
  scrubSecrets
38
- } from "./cli-h1spv8v4.js";
38
+ } from "./cli-wt7ccy4r.js";
39
39
  import {
40
40
  __require
41
41
  } from "./cli-bc05qbss.js";
@@ -50,7 +50,7 @@ import { tmpdir } from "node:os";
50
50
  import { join } from "node:path";
51
51
  init_env_flag();
52
52
  init_secret_scrubber();
53
- var CURSOR_SDK_VERSION = "1.0.36";
53
+ var CURSOR_SDK_VERSION = "1.0.37";
54
54
  var CURSOR_MCP_SERVER_NAME = "agent-swarm";
55
55
  var NATIVE_SYSTEM_PROMPT_ENV = "CURSOR_NATIVE_SYSTEM_PROMPT";
56
56
  var FIRST_MESSAGE_TEMPLATE = "system.agent.cursor.first_message";
@@ -58,7 +58,7 @@ function checkCursorCredentials(env) {
58
58
  return env.CURSOR_API_KEY?.trim() ? { ready: true, missing: [], satisfiedBy: "env" } : { ready: false, missing: ["CURSOR_API_KEY"], hint: "Set CURSOR_API_KEY for cursor." };
59
59
  }
60
60
  async function liveTestCursorKey(apiKey) {
61
- const { Cursor } = await import("./index-fdk1t4d6.js");
61
+ const { Cursor } = await import("./index-n0rxa4ca.js");
62
62
  try {
63
63
  await Cursor.me({ apiKey });
64
64
  return { ok: true };
@@ -78,7 +78,7 @@ async function listCursorModels(apiKey) {
78
78
  if (modelListCache?.key === apiKey && Date.now() - modelListCache.at < MODEL_LIST_TTL_MS) {
79
79
  return modelListCache.models;
80
80
  }
81
- const { Cursor } = await import("./index-fdk1t4d6.js");
81
+ const { Cursor } = await import("./index-n0rxa4ca.js");
82
82
  const models = await Cursor.models.list({ apiKey });
83
83
  modelListCache = { key: apiKey, at: Date.now(), models };
84
84
  return models;
@@ -452,7 +452,7 @@ class CursorAdapter {
452
452
  if (!apiKey)
453
453
  throw new Error("cursor requires CURSOR_API_KEY");
454
454
  registerVolatileSecret(apiKey, "CURSOR_API_KEY");
455
- const { Agent, JsonlLocalAgentStore } = await import("./index-fdk1t4d6.js");
455
+ const { Agent, JsonlLocalAgentStore } = await import("./index-n0rxa4ca.js");
456
456
  const modelId = config.model || DEFAULT_MODEL_TIER_MAP.cursor.regular;
457
457
  const effort = applyReasoningEffort("cursor", modelId, config.reasoningEffort);
458
458
  const requested = effort.kind === "cursor-effort" ? effort.reasoningEffort : undefined;
@@ -5,12 +5,12 @@ import {
5
5
  instantFlush,
6
6
  requestSlackThreadSteering,
7
7
  wasEventSeen
8
- } from "./cli-8gpbwy09.js";
8
+ } from "./cli-1yrcfa5s.js";
9
9
  import {
10
10
  enrichSlackUserEmail,
11
11
  resolveSlackUserId,
12
12
  rewriteSlackMentions
13
- } from "./cli-j0pdrmwg.js";
13
+ } from "./cli-y0kjpfm9.js";
14
14
  import {
15
15
  TaskCreationBlockedError,
16
16
  broadcastMatches,
@@ -23,14 +23,14 @@ import {
23
23
  hasOtherUserMention,
24
24
  notifySlackFileFailures,
25
25
  routeMessage
26
- } from "./cli-50eg13rj.js";
26
+ } from "./cli-wydz3feg.js";
27
27
  import {
28
28
  ackSlackMessage,
29
29
  buildTreeBlocks,
30
30
  ensureSlackThreadTree,
31
31
  isSlackRenderV2Enabled,
32
32
  registerTreeMessage
33
- } from "./cli-0n4fasz0.js";
33
+ } from "./cli-c8r99akr.js";
34
34
  import {
35
35
  getAgentById,
36
36
  getAgentWorkingOnThread,
@@ -39,11 +39,11 @@ import {
39
39
  getMostRecentTaskInThread,
40
40
  getTasksByAgentId,
41
41
  init_context_key,
42
- init_db,
42
+ init_db1 as init_db,
43
43
  isExtensionAgent,
44
44
  reactionName,
45
45
  slackContextKey
46
- } from "./cli-qdv8kgz7.js";
46
+ } from "./cli-mkdsy1nq.js";
47
47
  import {
48
48
  init_resolver,
49
49
  resolveTemplate
@@ -61,11 +61,11 @@ import {
61
61
  import {
62
62
  init_event_bus,
63
63
  workflowEventBus
64
- } from "./cli-hpryr6em.js";
64
+ } from "./cli-mb75wpxf.js";
65
65
  import {
66
66
  init_secret_scrubber,
67
67
  scrubSecrets
68
- } from "./cli-h1spv8v4.js";
68
+ } from "./cli-wt7ccy4r.js";
69
69
  import {
70
70
  __callDispose,
71
71
  __using
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_package,
3
3
  package_default
4
- } from "./cli-1kzfvd1z.js";
4
+ } from "./cli-ymmc1zxg.js";
5
5
 
6
6
  // src/commands/shared/client-config.ts
7
7
  init_package();
@@ -4,7 +4,7 @@ import {
4
4
  init_src,
5
5
  runtimeCatalogModel,
6
6
  runtimeCatalogSection
7
- } from "./cli-zsh093hk.js";
7
+ } from "./cli-014vns2y.js";
8
8
 
9
9
  // src/utils/context-window.ts
10
10
  init_src();
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  getValidCodexOAuth,
3
3
  persistCodexOAuth
4
- } from "./cli-ftry7975.js";
5
- import {
6
- oauthErrorHtml,
7
- oauthSuccessHtml
8
- } from "./cli-2x0e561b.js";
4
+ } from "./cli-v1w7pbd8.js";
9
5
  import {
10
6
  GITHUB_COPILOT_MODELS,
11
7
  builtinModels,
12
8
  normalizeRadiusGatewayUrl,
13
9
  registerBundledOAuthFlowLoaders
14
- } from "./cli-pkke6geq.js";
10
+ } from "./cli-km4x66j0.js";
11
+ import {
12
+ oauthErrorHtml,
13
+ oauthSuccessHtml
14
+ } from "./cli-2x0e561b.js";
15
15
  import {
16
16
  getEnvApiKey
17
17
  } from "./cli-zxg80zs9.js";
18
18
  import {
19
19
  InMemoryCredentialStore
20
- } from "./cli-nexwh8zg.js";
20
+ } from "./cli-g7k7zbcz.js";
21
21
  import {
22
22
  getProviderEnvValue
23
23
  } from "./cli-btbzvq95.js";
@@ -307,23 +307,26 @@ async function exchangeAuthorizationCode(code, state, verifier, redirectUri, sig
307
307
  }
308
308
  async function loginAnthropic(interaction) {
309
309
  const { verifier, challenge } = await generatePKCE();
310
- const callback = await startOAuthCallbackServer({
310
+ const startCallbackServer = (port) => startOAuthCallbackServer({
311
311
  providerName: "Anthropic",
312
312
  host: CALLBACK_HOST,
313
- port: CALLBACK_PORT,
313
+ port,
314
314
  path: CALLBACK_PATH,
315
+ redirectHost: "localhost",
315
316
  state: verifier,
316
317
  complete: async (code) => code,
317
318
  signal: interaction.signal
318
- }).catch(() => {
319
+ });
320
+ const callback = await startCallbackServer(CALLBACK_PORT).catch(() => startCallbackServer(0)).catch(() => {
319
321
  return;
320
322
  });
323
+ const redirectUri = callback?.redirectUri ?? REDIRECT_URI;
321
324
  try {
322
325
  const authParams = new URLSearchParams({
323
326
  code: "true",
324
327
  client_id: CLIENT_ID,
325
328
  response_type: "code",
326
- redirect_uri: REDIRECT_URI,
329
+ redirect_uri: redirectUri,
327
330
  scope: SCOPES,
328
331
  code_challenge: challenge,
329
332
  code_challenge_method: "S256",
@@ -336,7 +339,7 @@ async function loginAnthropic(interaction) {
336
339
  });
337
340
  const result = await waitForCallbackOrManualInput(interaction, callback, {
338
341
  message: "Complete login in your browser, or paste the authorization code / redirect URL here:",
339
- placeholder: REDIRECT_URI
342
+ placeholder: redirectUri
340
343
  });
341
344
  let code;
342
345
  let state = verifier;
@@ -352,7 +355,7 @@ async function loginAnthropic(interaction) {
352
355
  if (!code)
353
356
  throw new Error("Missing authorization code");
354
357
  interaction.notify({ type: "progress", message: "Exchanging authorization code for tokens..." });
355
- return await exchangeAuthorizationCode(code, state, verifier, REDIRECT_URI, interaction.signal);
358
+ return await exchangeAuthorizationCode(code, state, verifier, redirectUri, interaction.signal);
356
359
  } finally {
357
360
  callback?.close();
358
361
  }
@@ -1431,7 +1434,7 @@ async function loginOpenAIChatGPT(interaction, options) {
1431
1434
  const authorizationUrl = new URL(AUTHORIZE_URL2);
1432
1435
  authorizationUrl.search = new URLSearchParams({
1433
1436
  client_id: DYNAMIC_CLIENT_ID,
1434
- agent_name_hint: AGENT_NAME_HINT,
1437
+ agent_name_hint: options?.agentName ?? AGENT_NAME_HINT,
1435
1438
  ext_agent_host_id: hostId,
1436
1439
  response_type: "code",
1437
1440
  redirect_uri: REDIRECT_URI2,
@@ -1732,8 +1735,8 @@ async function loginOpenAICodexDeviceCode(interaction) {
1732
1735
  const code = await pollOpenAICodexDeviceAuth(device, interaction.signal);
1733
1736
  return exchangeAuthorizationCodeForCredentials(code.authorizationCode, code.codeVerifier, DEVICE_REDIRECT_URI, interaction.signal);
1734
1737
  }
1735
- async function loginOpenAICodex(interaction) {
1736
- const { verifier, state, url } = await createAuthorizationFlow();
1738
+ async function loginOpenAICodex(interaction, options) {
1739
+ const { verifier, state, url } = await createAuthorizationFlow(options?.agentName);
1737
1740
  const callback = await startOAuthCallbackServer({
1738
1741
  providerName: "OpenAI",
1739
1742
  host: getCallbackHost(),
@@ -1777,7 +1780,7 @@ async function refreshOpenAICodexToken(refreshToken2, signal) {
1777
1780
  var openaiCodexOAuth = {
1778
1781
  name: "OpenAI (ChatGPT Plus/Pro)",
1779
1782
  isSubscription: true,
1780
- async login(interaction) {
1783
+ async login(interaction, options) {
1781
1784
  const method = await interaction.prompt({
1782
1785
  type: "select",
1783
1786
  message: "Select OpenAI Codex login method:",
@@ -1792,7 +1795,7 @@ var openaiCodexOAuth = {
1792
1795
  if (method !== OPENAI_CODEX_BROWSER_LOGIN_METHOD) {
1793
1796
  throw new Error(`Unknown OpenAI Codex login method: ${method}`);
1794
1797
  }
1795
- return loginOpenAICodex(interaction);
1798
+ return loginOpenAICodex(interaction, options);
1796
1799
  },
1797
1800
  refresh: (credential, signal) => refreshOpenAICodexToken(credential.refresh, signal),
1798
1801
  async toAuth(credential) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  retryProviderRequest
3
- } from "./cli-qbksc292.js";
3
+ } from "./cli-zy39d433.js";
4
4
  import {
5
5
  require_ecdsa_sig_formatter,
6
6
  require_jws,
@@ -10,7 +10,7 @@ import {
10
10
  getJsonSchemaToolParameters,
11
11
  resolveJsonSchemaStrictSampling,
12
12
  transformMessages
13
- } from "./cli-8kt0bmgx.js";
13
+ } from "./cli-xf713zz0.js";
14
14
  import {
15
15
  sanitizeSurrogates
16
16
  } from "./cli-y2apkfe2.js";
@@ -18,7 +18,7 @@ import {
18
18
  clampThinkingLevel,
19
19
  collapseSystemMessages,
20
20
  withoutInitialSystemMessage
21
- } from "./cli-nexwh8zg.js";
21
+ } from "./cli-g7k7zbcz.js";
22
22
  import {
23
23
  import_websocket
24
24
  } from "./cli-76yrvwsa.js";
@@ -0,0 +1,33 @@
1
+ import {
2
+ __esm
3
+ } from "./cli-bc05qbss.js";
4
+
5
+ // src/utils/openrouter-base-url.ts
6
+ function getOpenRouterBaseUrl(env = process.env) {
7
+ const raw = env.OPENROUTER_BASE_URL;
8
+ if (typeof raw === "string" && raw.trim().length > 0) {
9
+ return raw.trim().replace(/\/+$/, "");
10
+ }
11
+ return DEFAULT_OPENROUTER_BASE_URL;
12
+ }
13
+ function getOpenRouterAttributionHeaders(url, env = process.env) {
14
+ const enabled = env.OPENROUTER_APP_ATTRIBUTION?.toLowerCase();
15
+ if (enabled === "false" || enabled === "0")
16
+ return {};
17
+ try {
18
+ const host = new URL(url).hostname;
19
+ return host === "openrouter.ai" || host.endsWith(".openrouter.ai") ? { ...OPENROUTER_APP_ATTRIBUTION_HEADERS } : {};
20
+ } catch {
21
+ return {};
22
+ }
23
+ }
24
+ var DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1", OPENROUTER_APP_ATTRIBUTION_HEADERS;
25
+ var init_openrouter_base_url = __esm(() => {
26
+ OPENROUTER_APP_ATTRIBUTION_HEADERS = {
27
+ "HTTP-Referer": "https://agent-swarm.dev",
28
+ "X-OpenRouter-Title": "Agent Swarm",
29
+ "X-OpenRouter-Categories": "personal-agent,cloud-agent"
30
+ };
31
+ });
32
+
33
+ export { DEFAULT_OPENROUTER_BASE_URL, getOpenRouterBaseUrl, getOpenRouterAttributionHeaders, init_openrouter_base_url };