@fased/fased 0.1.62 → 0.1.64

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 (341) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +38 -30
  3. package/config/dependency-ownership.json +1 -1
  4. package/config/signer-policies/README.md +49 -0
  5. package/config/signer-policies/agent.json.template +32 -0
  6. package/config/signer-policies/mining.json.template +69 -0
  7. package/config/signer-policies/network.json.template +5 -0
  8. package/config/signer-policies/vault.json.template +70 -0
  9. package/config/signer-protocol-v2.json +76 -0
  10. package/config/typescript-noemit-baseline.json +680 -0
  11. package/dist/agents/auth-profiles/store.js +267 -31
  12. package/dist/agents/bash-tools.exec.js +10 -4
  13. package/dist/agents/current-model-catalog.js +3 -3
  14. package/dist/agents/memory-search.js +7 -1
  15. package/dist/agents/model-catalog-access.js +1 -2
  16. package/dist/agents/model-catalog-snapshot.js +1 -1
  17. package/dist/agents/model-catalog-source.js +1 -1
  18. package/dist/agents/model-metadata.js +1 -1
  19. package/dist/agents/model-selection.js +2 -28
  20. package/dist/agents/models-config.providers.js +6 -6
  21. package/dist/agents/pi-embedded-runner/compact.js +15 -7
  22. package/dist/agents/pi-embedded-runner/model.js +1 -1
  23. package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
  24. package/dist/agents/pi-embedded-runner/run.js +2 -0
  25. package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
  26. package/dist/agents/pi-tool-definition-adapter.js +16 -1
  27. package/dist/agents/pi-tools.js +2 -1
  28. package/dist/agents/sandbox/config.js +1 -1
  29. package/dist/agents/sandbox/context.js +27 -2
  30. package/dist/agents/skills/env-overrides.js +38 -28
  31. package/dist/agents/skills/trust.js +93 -0
  32. package/dist/agents/skills/workspace.js +128 -0
  33. package/dist/agents/skills-clawhub.js +36 -11
  34. package/dist/agents/skills-marketplace-scan.js +49 -0
  35. package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
  36. package/dist/agents/tools/mining-tool.js +1 -1
  37. package/dist/agents/tools/session-status-tool.js +1 -1
  38. package/dist/agents/tools/wallet-action-tool.js +172 -36
  39. package/dist/agents/tools/wallet-skill-policy.js +65 -23
  40. package/dist/agents/tools/wallet-tool.js +7 -11
  41. package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
  42. package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
  43. package/dist/auto-reply/reply/directive-handling.model.js +2 -1
  44. package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
  45. package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
  46. package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
  47. package/dist/auto-reply/reply/model-selection.js +7 -4
  48. package/dist/auto-reply/reply/session-reset-model.js +4 -4
  49. package/dist/brand.js +1 -1
  50. package/dist/build-info.json +3 -3
  51. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  52. package/dist/channel-web.js +2 -2
  53. package/dist/cli/gateway-cli/run.js +8 -0
  54. package/dist/cli/program/command-registry.js +1 -1
  55. package/dist/cli/program/register.onboard.js +2 -3
  56. package/dist/cli/program/register.wallet.js +16 -123
  57. package/dist/cli/providers-cli.js +1 -1
  58. package/dist/cli/sat-cli.js +129 -2
  59. package/dist/cli/update-cli/update-command.js +260 -11
  60. package/dist/commands/auth-choice.apply.api-providers.js +3 -3
  61. package/dist/commands/doctor-config-flow.js +1 -1
  62. package/dist/commands/doctor-legacy-config.js +2 -13
  63. package/dist/commands/model-picker.js +6 -6
  64. package/dist/commands/models/auth.js +1 -1
  65. package/dist/commands/onboard-auth.config-gateways.js +1 -1
  66. package/dist/commands/onboard-auth.credentials.js +32 -8
  67. package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
  68. package/dist/commands/onboard-non-interactive/local.js +5 -1
  69. package/dist/commands/wallet.js +568 -1911
  70. package/dist/config/config.js +2 -2
  71. package/dist/config/io.js +64 -2
  72. package/dist/config/schema.help.js +8 -7
  73. package/dist/config/schema.labels.js +5 -4
  74. package/dist/config/zod-schema.agent-runtime.js +1 -0
  75. package/dist/config/zod-schema.js +5 -0
  76. package/dist/control-ui/assets/{app-DLil9VO1.js → app-bR-fO5ty.js} +1511 -1555
  77. package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
  78. package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
  79. package/dist/control-ui/assets/{index-DdE_NIXo.js → index-ckCxHwjy.js} +3 -3
  80. package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-BgHFh0ei.js} +134 -114
  81. package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
  82. package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
  83. package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
  84. package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
  85. package/dist/control-ui/index.html +1 -1
  86. package/dist/control-ui/version.json +1 -1
  87. package/dist/daemon/systemd-system.js +56 -50
  88. package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
  89. package/dist/extensions/sat-mining/src/rpc-read.js +235 -67
  90. package/dist/extensions/sat-mining/src/sat-bond-layout.js +5 -2
  91. package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
  92. package/dist/extensions/sat-mining/src/solana-submit.js +1038 -397
  93. package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
  94. package/dist/federation/auto-connect.js +98 -8
  95. package/dist/federation/marketplace-capability-adapter.js +33 -7
  96. package/dist/federation/marketplace-delivery-outbox.js +196 -0
  97. package/dist/federation/marketplace-delivery.js +351 -215
  98. package/dist/federation/marketplace-direct-payment.js +272 -141
  99. package/dist/federation/marketplace-escrow.js +607 -249
  100. package/dist/federation/marketplace-settlement-ledger.js +352 -0
  101. package/dist/federation/offers.js +9 -7
  102. package/dist/federation/peer-auth-v2.js +529 -0
  103. package/dist/gateway/a2a-http.js +425 -96
  104. package/dist/gateway/a2a-settlement.js +259 -153
  105. package/dist/gateway/a2a-task-store.js +524 -0
  106. package/dist/gateway/auth.js +38 -2
  107. package/dist/gateway/config-reload.js +46 -33
  108. package/dist/gateway/durable-capacity.js +31 -0
  109. package/dist/gateway/federation-http.js +540 -135
  110. package/dist/gateway/federation-marketplace-run-store.js +397 -0
  111. package/dist/gateway/federation-marketplace.js +535 -230
  112. package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
  113. package/dist/gateway/security-path.js +1 -1
  114. package/dist/gateway/server-http.js +1084 -1205
  115. package/dist/gateway/server-methods/models.js +1 -1
  116. package/dist/gateway/server-methods/secrets.js +40 -0
  117. package/dist/gateway/server-methods.js +1 -2
  118. package/dist/gateway/server-reload-handlers.js +196 -66
  119. package/dist/gateway/server-runtime-config.js +1 -1
  120. package/dist/gateway/server-secrets-runtime.js +288 -0
  121. package/dist/gateway/server.impl.js +73 -42
  122. package/dist/gateway/sessions-patch.js +3 -5
  123. package/dist/index.js +4 -2
  124. package/dist/infra/fasedhub.js +64 -1
  125. package/dist/infra/local-source-paired-update.js +538 -0
  126. package/dist/infra/restart.js +41 -10
  127. package/dist/infra/update-runner.js +96 -0
  128. package/dist/light-update-status.js +11 -11
  129. package/dist/memory/backend-config.js +2 -1
  130. package/dist/memory/session-files.js +16 -2
  131. package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
  132. package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
  133. package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
  134. package/dist/plugin-sdk/{audio-preflight-Bwi2Oq03.js → audio-preflight-BYxAt775.js} +27 -27
  135. package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
  136. package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
  137. package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
  138. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  139. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  140. package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
  141. package/dist/plugin-sdk/{chunk-items-DzT4L4Ty.js → chunk-items-DIRHG2gJ.js} +1 -1
  142. package/dist/plugin-sdk/command-status.d.ts +2 -2
  143. package/dist/plugin-sdk/command-status.js +27 -27
  144. package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
  145. package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
  146. package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
  147. package/dist/plugin-sdk/{config-schema-BrkmtFxB.js → config-schema-BOT7kHb6.js} +6779 -3696
  148. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  149. package/dist/plugin-sdk/discord.d.ts +6 -6
  150. package/dist/plugin-sdk/discord.js +19 -19
  151. package/dist/plugin-sdk/file-lock.js +35 -4
  152. package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
  153. package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
  154. package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
  155. package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
  156. package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
  157. package/dist/plugin-sdk/index.d.ts +21 -39
  158. package/dist/plugin-sdk/index.js +29 -29
  159. package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
  160. package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
  161. package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
  162. package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
  163. package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
  164. package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
  165. package/dist/plugin-sdk/{monitor-M_ta2lMc.js → monitor-BCFDaqJ-.js} +31 -31
  166. package/dist/plugin-sdk/{monitor-wYVncM9w.js → monitor-BgbjRiPM.js} +32 -32
  167. package/dist/plugin-sdk/{openresponses-http-B2GmeSt4.js → openresponses-http-DFf87SMM.js} +27 -27
  168. package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
  169. package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
  170. package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
  171. package/dist/plugin-sdk/{pairing-message-B3bHYGaw.d.ts → pairing-message-CS-9BHug.d.ts} +2 -2
  172. package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
  173. package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
  174. package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
  175. package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
  176. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  177. package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
  178. package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
  179. package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
  180. package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
  181. package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
  182. package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
  183. package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
  184. package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
  185. package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
  186. package/dist/plugin-sdk/sat-runtime.d.ts +549 -309
  187. package/dist/plugin-sdk/sat-runtime.js +29 -29
  188. package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
  189. package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
  190. package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
  191. package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
  192. package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
  193. package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
  194. package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
  195. package/dist/plugin-sdk/{slack-CxE1mfzj.js → slack-BUTt8cxK.js} +39 -39
  196. package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
  197. package/dist/plugin-sdk/slack.d.ts +6 -6
  198. package/dist/plugin-sdk/slack.js +9 -9
  199. package/dist/plugin-sdk/{sticker-cache-CGzGWu00.js → sticker-cache-D0wHVqjt.js} +3 -3
  200. package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
  201. package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
  202. package/dist/plugin-sdk/{telegram-actions-DaEcYQ8r.js → telegram-actions-CC_qN4v0.js} +30 -30
  203. package/dist/plugin-sdk/telegram.d.ts +6 -6
  204. package/dist/plugin-sdk/telegram.js +8 -8
  205. package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
  206. package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
  207. package/dist/plugin-sdk/tmp-fased-dir-xOTGlzBE.d.ts +486 -0
  208. package/dist/plugin-sdk/{types-vcJrC_uv.d.ts → types-C3avNytw.d.ts} +3 -4
  209. package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
  210. package/dist/plugin-sdk/{types-DFAW-n1J.d.ts → types-DWfbSAaM.d.ts} +2 -2
  211. package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
  212. package/dist/plugin-sdk/{web-CInY-lCv.js → web-BXsJ1vqe.js} +32 -32
  213. package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
  214. package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
  215. package/dist/plugin-sdk/whatsapp.d.ts +13 -13
  216. package/dist/plugin-sdk/whatsapp.js +12 -12
  217. package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
  218. package/dist/plugin-sdk/{zod-schema.providers-core-BEbNizPe.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
  219. package/dist/providers/refresh.js +1 -1
  220. package/dist/providers/registry.js +1 -1
  221. package/dist/secrets/apply.js +1 -1
  222. package/dist/secrets/runtime.js +1 -1
  223. package/dist/wallet/external-submission-ledger.js +376 -0
  224. package/dist/wallet/legacy-embedded-keystore.js +40 -0
  225. package/dist/wallet/local-socket-signer-archive.js +30 -0
  226. package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
  227. package/dist/wallet/local-socket-signer-policy.js +166 -0
  228. package/dist/wallet/local-socket-signer-protocol.js +561 -118
  229. package/dist/wallet/native-signer-wallet-id.js +25 -0
  230. package/dist/wallet/providers/alchemy-adapter.js +3 -0
  231. package/dist/wallet/providers/local-socket-signer-adapter.js +380 -105
  232. package/dist/wallet/providers/turnkey-adapter.js +292 -34
  233. package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
  234. package/dist/wallet/signer-network-admin.js +184 -0
  235. package/dist/wallet/signer-protocol-v2.generated.js +90 -0
  236. package/dist/wallet/solana-bond-signing.js +157 -69
  237. package/dist/wallet/solana-reviewed-transaction.js +375 -0
  238. package/dist/wallet/solana-swap.js +520 -64
  239. package/dist/wallet/solana-transaction-inspection.js +106 -4
  240. package/dist/wallet/solana-trigger.js +658 -320
  241. package/dist/wallet/turnkey-reviewed-state.js +370 -0
  242. package/dist/wallet/wallet-approval-auth.js +17 -28
  243. package/dist/wallet/wallet-atomic-state.js +53 -0
  244. package/dist/wallet/wallet-canary.js +0 -1
  245. package/dist/wallet/wallet-inbound-events.js +16 -11
  246. package/dist/wallet/wallet-policy-simulation.js +1 -1
  247. package/dist/wallet/wallet-policy.js +90 -36
  248. package/dist/wallet/wallet-provider-capabilities.js +28 -4
  249. package/dist/wallet/wallet-provider-registry.js +57 -44
  250. package/dist/wallet/wallet-provider-resolver.js +62 -63
  251. package/dist/wallet/wallet-runtime-config.js +28 -41
  252. package/dist/wallet/wallet-secrets-store.js +22 -0
  253. package/dist/wallet/wallet-send-approvals.js +1891 -589
  254. package/dist/wallet/wallet-send-execution-ledger.js +292 -0
  255. package/dist/wallet/wallet-settlement-links.js +14 -13
  256. package/dist/wallet/wallet-standard-review.js +353 -0
  257. package/dist/wallet/wallet-status.js +0 -9
  258. package/dist/wallet/wallet-task-ledger.js +16 -2
  259. package/dist/web/auto-reply/heartbeat-runner.js +1 -1
  260. package/dist/web/auto-reply/monitor.js +2 -2
  261. package/dist/wizard/host-security-capability.js +14 -23
  262. package/dist/wizard/onboarding.finalize.js +63 -184
  263. package/dist/wizard/onboarding.host-security.js +117 -1367
  264. package/dist/wizard/onboarding.js +172 -217
  265. package/dist/wizard/onboarding.wallet.js +232 -785
  266. package/extensions/acpx/package.json +1 -1
  267. package/extensions/bluebubbles/package.json +1 -1
  268. package/extensions/copilot-proxy/package.json +1 -1
  269. package/extensions/diagnostics-otel/package.json +1 -1
  270. package/extensions/fased-federation/package.json +1 -1
  271. package/extensions/google-gemini-cli-auth/package.json +1 -1
  272. package/extensions/imessage/package.json +1 -1
  273. package/extensions/irc/package.json +1 -1
  274. package/extensions/line/package.json +1 -1
  275. package/extensions/llm-task/package.json +1 -1
  276. package/extensions/lobster/package.json +1 -1
  277. package/extensions/matrix/CHANGELOG.md +12 -0
  278. package/extensions/matrix/package.json +1 -1
  279. package/extensions/mattermost/package.json +1 -1
  280. package/extensions/memory-core/package.json +2 -2
  281. package/extensions/memory-lancedb/package.json +1 -1
  282. package/extensions/minimax-portal-auth/package.json +1 -1
  283. package/extensions/msteams/CHANGELOG.md +12 -0
  284. package/extensions/msteams/package.json +1 -1
  285. package/extensions/nextcloud-talk/package.json +1 -1
  286. package/extensions/nostr/CHANGELOG.md +12 -0
  287. package/extensions/nostr/package.json +1 -1
  288. package/extensions/open-prose/package.json +1 -1
  289. package/extensions/sat-mining/index.ts +498 -153
  290. package/extensions/sat-mining/package.json +1 -1
  291. package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
  292. package/extensions/sat-mining/src/audit-store.ts +50 -5
  293. package/extensions/sat-mining/src/claim-service.ts +85 -14
  294. package/extensions/sat-mining/src/config.ts +9 -0
  295. package/extensions/sat-mining/src/cycle-progress.ts +16 -8
  296. package/extensions/sat-mining/src/epoch-service.ts +9 -5
  297. package/extensions/sat-mining/src/gateway-runner.ts +21 -1
  298. package/extensions/sat-mining/src/protocol-contract.ts +45 -1
  299. package/extensions/sat-mining/src/recovery-service.ts +312 -0
  300. package/extensions/sat-mining/src/round-watcher.ts +391 -81
  301. package/extensions/sat-mining/src/rpc-read.ts +330 -89
  302. package/extensions/sat-mining/src/runtime.ts +14 -0
  303. package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
  304. package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
  305. package/extensions/sat-mining/src/solana-submit.ts +1199 -428
  306. package/extensions/sat-mining/src/submission-ledger.ts +433 -0
  307. package/extensions/signal/package.json +1 -1
  308. package/extensions/synology-chat/package.json +1 -1
  309. package/extensions/tlon/package.json +1 -1
  310. package/extensions/twitch/CHANGELOG.md +12 -0
  311. package/extensions/twitch/package.json +1 -1
  312. package/extensions/voice-call/CHANGELOG.md +12 -0
  313. package/extensions/voice-call/package.json +1 -1
  314. package/extensions/zalo/CHANGELOG.md +12 -0
  315. package/extensions/zalo/package.json +1 -1
  316. package/extensions/zalouser/CHANGELOG.md +12 -0
  317. package/extensions/zalouser/package.json +1 -1
  318. package/install.sh +4955 -0
  319. package/package.json +23 -5
  320. package/scripts/fased-host-updater.mjs +1421 -0
  321. package/scripts/fased-host-updaterctl.mjs +186 -0
  322. package/scripts/fased-managed-service.sh +36 -0
  323. package/scripts/fased-managed-updater.mjs +3065 -156
  324. package/scripts/fased-signer-enroll-hosting.sh +275 -0
  325. package/scripts/fased-signer-network-hosting.sh +143 -0
  326. package/scripts/fased-signer-owner-policy.mjs +1430 -0
  327. package/scripts/fased-signer-policy-hosting.sh +50 -0
  328. package/scripts/fased-signer-policy-local.sh +26 -0
  329. package/scripts/hosted-release-manifest.mjs +185 -0
  330. package/scripts/install-fased-signerd.sh +183 -108
  331. package/scripts/install-managed-runtime.mjs +212 -10
  332. package/scripts/managed-runtime-layout.mjs +75 -3
  333. package/scripts/migrate-hosted-signer-v2.mjs +58 -0
  334. package/scripts/start-managed.sh +169 -360
  335. package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
  336. package/dist/plugin-sdk/tmp-fased-dir-CS6zsYEE.d.ts +0 -77
  337. package/dist/wallet/local-socket-signer-broker.js +0 -224
  338. package/dist/wallet/local-socket-signer-custody.js +0 -42
  339. package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
  340. package/dist/wallet/providers/privy-adapter.js +0 -80
  341. package/dist/wallet/wallet-custody.js +0 -1836
@@ -1,12 +1,12 @@
1
- import{createRequire as e}from"node:module";import t from"node:process";import n,{constants as r}from"node:fs";import i from"node:path";import a from"node:fs/promises";import{fileURLToPath as o}from"node:url";import{execFile as s,execFileSync as c,spawn as l}from"node:child_process";import{isDeepStrictEqual as u,promisify as d}from"node:util";import{Logger as f}from"tslog";import p from"node:os";import m from"json5";import h,{Chalk as g}from"chalk";import _ from"node:crypto";import v from"dotenv";import"jszip";import"tar";import{getOAuthProviders as ee}from"@mariozechner/pi-ai/oauth";import y from"ajv";import{z as b}from"zod";function te(e){return!e||e===`--`?!1:e.startsWith(`-`)?/^-\d+(?:\.\d+)?$/.test(e):!0}function ne(e,t){let n=e.slice(2);for(let e of n){if(e===`--`)break;if(e===t)return!0}return!1}function re(e,t){let n=e.slice(2);for(let e=0;e<n.length;e+=1){let r=n[e];if(r===`--`)break;if(r===t){let t=n[e+1];return te(t)?t:null}if(r.startsWith(`${t}=`))return r.slice(t.length+1)||null}}const ie=`fased`,ae=new Set([ie]),oe=/^(?:((?:pnpm|npm|bunx|npx)\s+))?(fased)\b/;function se(e=process.argv){let t=e[1];if(!t)return ie;let n=i.basename(t).trim();return ae.has(n)?n:ie}function ce(e,t=se()){return!e.trim()||!oe.test(e)?e:e.replace(oe,(e,n)=>`${n??``}${t}`)}const le=/^[a-z0-9][a-z0-9_-]{0,63}$/i;function ue(e){return e?le.test(e):!1}function de(e){let t=e?.trim();return!t||t.toLowerCase()===`default`||!ue(t)?null:t}const fe=/^(?:pnpm|npm|bunx|npx)\s+fased\b|^fased\b|^node\s+scripts\/run-node\.mjs\b/,pe=/(?:^|\s)--profile(?:\s|=|$)/,me=/(?:^|\s)--dev(?:\s|$)/;function he(e=process.argv){let t=se(e),r=e[1];if(!r||i.basename(r).trim()!==`run-node.mjs`)return t;let a=i.resolve(process.cwd(),`scripts`,`run-node.mjs`);return n.existsSync(a)?`node scripts/run-node.mjs`:t}function ge(e,t=process.env){let n=se(),r=he(),i=ce(e,n);r!==n&&fe.test(i)&&(i=i.replace(fe,r));let a=de(t.FASED_PROFILE);return!a||!fe.test(i)||pe.test(i)||me.test(i)?i:i.replace(fe,e=>`${e} --profile ${a}`)}const _e=new Set([`fased`,`@fased/fased`]);async function ve(e){try{let t=await a.readFile(i.join(e,`package.json`),`utf-8`),n=JSON.parse(t);return typeof n.name==`string`?n.name:null}catch{return null}}function ye(e){try{let t=n.readFileSync(i.join(e,`package.json`),`utf-8`),r=JSON.parse(t);return typeof r.name==`string`?r.name:null}catch{return null}}async function be(e,t=12){for(let n of Se(e,t)){let e=await ve(n);if(e&&_e.has(e))return n}return null}function xe(e,t=12){for(let n of Se(e,t)){let e=ye(n);if(e&&_e.has(e))return n}return null}function*Se(e,t){let n=i.resolve(e);for(let e=0;e<t;e+=1){yield n;let e=i.dirname(n);if(e===n)break;n=e}}function Ce(e){let t=i.resolve(e),r=[i.dirname(t)];try{let e=n.realpathSync(t);e!==t&&r.push(i.dirname(e))}catch{}let a=t.split(i.sep),o=a.lastIndexOf(`.bin`);if(o>0&&a[o-1]===`node_modules`){let e=i.basename(t),n=a.slice(0,o).join(i.sep);r.push(i.join(n,e))}return r}async function we(e){for(let t of Ee(e)){let e=await be(t);if(e)return e}return null}function Te(e){for(let t of Ee(e)){let e=xe(t);if(e)return e}return null}function Ee(e){let t=[];return e.moduleUrl&&t.push(i.dirname(o(e.moduleUrl))),e.argv1&&t.push(...Ce(e.argv1)),e.cwd&&t.push(e.cwd),t}const x=`/tmp/fased`,De=n.constants.W_OK|n.constants.X_OK;function Oe(e,t){return typeof e==`object`&&!!e&&`code`in e&&e.code===t}function ke(e={}){let t=e.accessSync??n.accessSync,r=e.chmodSync??n.chmodSync,a=e.lstatSync??n.lstatSync,o=e.mkdirSync??n.mkdirSync,s=e.warn??(e=>console.warn(e)),c=e.getuid??(()=>{try{return typeof process.getuid==`function`?process.getuid():void 0}catch{return}}),l=e.tmpdir??p.tmpdir,u=c(),d=e=>u===void 0?!0:!(typeof e.uid==`number`&&e.uid!==u||typeof e.mode==`number`&&e.mode&18),f=()=>{let e=l(),t=u===void 0?`fased`:`fased-${u}`;return i.join(e,t)},m=e=>e.isDirectory()&&!e.isSymbolicLink()&&d(e),h=e=>{try{return m(a(e))?(t(e,De),`available`):`invalid`}catch(e){return Oe(e,`ENOENT`)?`missing`:`invalid`}},g=e=>{try{let t=a(e);return!t.isDirectory()||t.isSymbolicLink()||u!==void 0&&typeof t.uid==`number`&&t.uid!==u||typeof t.mode!=`number`||!(t.mode&18)?!1:(r(e,448),s(`[fased] tightened permissions on temp dir: ${e}`),h(e)===`available`)}catch{return!1}},_=()=>{let e=f(),t=h(e);if(t===`available`)return e;if(t===`invalid`){if(g(e))return e;throw Error(`Unsafe fallback FasedAgent temp dir: ${e}`)}try{o(e,{recursive:!0,mode:448}),r(e,448)}catch{throw Error(`Unable to create fallback FasedAgent temp dir: ${e}`)}if(h(e)!==`available`&&!g(e))throw Error(`Unsafe fallback FasedAgent temp dir: ${e}`);return e},v=h(x);if(v===`available`)return x;if(v===`invalid`)return g(x)?x:_();try{return t(`/tmp`,De),o(x,{recursive:!0,mode:448}),r(x,448),h(x)!==`available`&&!g(x)?_():x}catch{return _()}}function Ae(e){return e?.trim()||void 0}function je(e=process.env,t=p.homedir){let n=Me(e,t);return n?i.resolve(n):void 0}function Me(e,t){let n=Ae(e.FASED_HOME);if(n){if(n===`~`||n.startsWith(`~/`)||n.startsWith(`~\\`)){let r=Ae(e.HOME)??Ae(e.USERPROFILE)??Ne(t);return r?n.replace(/^~(?=$|[\\/])/,r):void 0}return n}return Ae(e.HOME)||Ae(e.USERPROFILE)||Ne(t)}function Ne(e){try{return Ae(e())}catch{return}}function S(e=process.env,t=p.homedir){return je(e,t)??i.resolve(process.cwd())}function Pe(e,t){if(!e.startsWith(`~`))return e;let n=Ae(t?.home)??je(t?.env??process.env,t?.homedir??p.homedir);return n?e.replace(/^~(?=$|[\\/])/,n):e}function Fe(e=process.env){return e.FASED_NIX_MODE===`1`}Fe();const Ie=`fased.json`;function Le(){return S(process.env,p.homedir)}function Re(e){return()=>S(e,p.homedir)}function ze(e=Le){return i.join(e(),`.fased`)}function Be(e=process.env,t=Re(e)){let n=()=>S(e,t),r=e.FASED_STATE_DIR?.trim();return r?Ve(r,e,n):ze(n)}function Ve(e,t=process.env,n=Re(t)){let r=e.trim();if(!r)return r;if(r.startsWith(`~`)){let e=Pe(r,{home:S(t,n),env:t,homedir:n});return i.resolve(e)}return i.resolve(r)}Be();function He(e=process.env,t=Be(e,Re(e))){let n=e.FASED_CONFIG_PATH?.trim();return n?Ve(n,e,Re(e)):i.join(t,Ie)}function Ue(e=process.env,t=Re(e)){return Ge(e,t).find(e=>{try{return n.existsSync(e)}catch{return!1}})||He(e,Be(e,t))}function We(e=process.env,t=Be(e,Re(e)),r=Re(e)){let a=e.FASED_CONFIG_PATH?.trim();if(a)return Ve(a,e,r);let o=e.FASED_STATE_DIR?.trim(),s=[i.join(t,Ie)].find(e=>{try{return n.existsSync(e)}catch{return!1}});if(s)return s;if(o)return i.join(t,Ie);let c=Be(e,r);return i.resolve(t)===i.resolve(c)?Ue(e,r):i.join(t,Ie)}Ue();function Ge(e=process.env,t=Re(e)){let n=()=>S(e,t),r=e.FASED_CONFIG_PATH?.trim();if(r)return[Ve(r,e,n)];let a=[],o=e.FASED_STATE_DIR?.trim();if(o){let t=Ve(o,e,n);a.push(i.join(t,Ie))}return a.push(i.join(ze(n),Ie)),a}function Ke(){let e=We();try{if(!n.existsSync(e))return;let t=n.readFileSync(e,`utf-8`),r=m.parse(t)?.logging;return!r||typeof r!=`object`||Array.isArray(r)?void 0:r}catch{return}}const qe=[`silent`,`fatal`,`error`,`warn`,`info`,`debug`,`trace`];function Je(e){if(typeof e!=`string`)return;let t=e.trim();return qe.includes(t)?t:void 0}function Ye(e,t=`info`){return Je(e)??t}function Xe(e){return{fatal:0,error:1,warn:2,info:3,debug:4,trace:5,silent:1/0}[e]}const C={cachedLogger:null,cachedSettings:null,cachedConsoleSettings:null,overrideSettings:null,invalidEnvLogLevelValue:null,consolePatched:!1,forceConsoleToStderr:!1,consoleTimestampPrefix:!1,consoleSubsystemFilter:null,resolvingConsoleSettings:!1,streamErrorHandlersInstalled:!1,rawConsole:null};function Ze(){let e=process.env.FASED_LOG_LEVEL,t=typeof e==`string`?e.trim():``;if(!t){C.invalidEnvLogLevelValue=null;return}let n=Je(t);if(n)return C.invalidEnvLogLevelValue=null,n;C.invalidEnvLogLevelValue!==t&&(C.invalidEnvLogLevelValue=t,process.stderr.write(`[fased] Ignoring invalid FASED_LOG_LEVEL="${t}" (allowed: ${qe.join(`|`)}).\n`))}function Qe(e){let t=process.getBuiltinModule;if(typeof t!=`function`)return null;try{let n=t(`module`),r=typeof n.createRequire==`function`?n.createRequire:null;return r?r(e):null}catch{return null}}const $e=ke();i.join($e,`fased.log`);const et=`fased`,tt=`.log`,nt=Qe(import.meta.url),rt=new Set;function it(e,t){e.attachTransport(e=>{if(rt.has(t))try{t(e)}catch{}})}function at(){let e=C.overrideSettings??Ke();if(!e)try{e=(nt?.(`../config/config.js`))?.loadConfig?.().logging}catch{e=void 0}let t=process.env.VITEST===`true`&&process.env.FASED_TEST_FILE_LOG!==`1`?`silent`:`info`,n=Ye(e?.level,t);return{level:Ze()??n,file:e?.file??ht(),maxFileBytes:lt(e?.maxFileBytes)}}function ot(e,t){return e?e.level!==t.level||e.file!==t.file||e.maxFileBytes!==t.maxFileBytes:!0}function st(e){let t=C.cachedSettings??at();return C.cachedSettings||=t,t.level===`silent`?!1:Xe(e)<=Xe(t.level)}function ct(e){n.mkdirSync(i.dirname(e.file),{recursive:!0}),gt(e.file)&&_t(i.dirname(e.file));let t=ut(e.file),r=!1,a=new f({name:`fased`,minLevel:Xe(e.level),type:`hidden`});a.attachTransport(n=>{try{let i=n.date?.toISOString?.()??new Date().toISOString(),a=`${JSON.stringify({...n,time:i})}\n`,o=Buffer.byteLength(a,`utf8`),s=t+o;if(s>e.maxFileBytes){if(!r){r=!0;let t=JSON.stringify({time:new Date().toISOString(),level:`warn`,subsystem:`logging`,message:`log file size cap reached; suppressing writes file=${e.file} maxFileBytes=${e.maxFileBytes}`});dt(e.file,`${t}\n`),process.stderr.write(`[fased] log file size cap reached; suppressing writes file=${e.file} maxFileBytes=${e.maxFileBytes}\n`)}return}dt(e.file,a)&&(t=s)}catch{}});for(let e of rt)it(a,e);return a}function lt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):524288e3}function ut(e){try{return n.statSync(e).size}catch{return 0}}function dt(e,t){try{return n.appendFileSync(e,t,{encoding:`utf8`}),!0}catch{return!1}}function ft(){let e=at(),t=C.cachedLogger,n=C.cachedSettings;return(!t||ot(n,e))&&(C.cachedLogger=ct(e),C.cachedSettings=e),C.cachedLogger}function pt(e,t){let n=ft(),r=t?.level?Xe(t.level):void 0,i=e?JSON.stringify(e):void 0;return n.getSubLogger({name:i,minLevel:r,prefix:e?[i??``]:[]})}function mt(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function ht(){let e=mt(new Date);return i.join($e,`${et}-${e}${tt}`)}function gt(e){let t=i.basename(e);return t.startsWith(`${et}-`)&&t.endsWith(tt)&&t.length===`${et}-YYYY-MM-DD${tt}`.length}function _t(e){try{let t=n.readdirSync(e,{withFileTypes:!0}),r=Date.now()-864e5;for(let a of t){if(!a.isFile()||!a.name.startsWith(`${et}-`)||!a.name.endsWith(tt))continue;let t=i.join(e,a.name);try{n.statSync(t).mtimeMs<r&&n.rmSync(t,{force:!0})}catch{}}}catch{}}const vt={accent:`#22D3EE`,accentBright:`#67E8F9`,accentDim:`#0891B2`,info:`#93C5FD`,success:`#4ADE80`,warn:`#FACC15`,error:`#F87171`,muted:`#A3A3A3`},yt=typeof process.env.FORCE_COLOR==`string`&&process.env.FORCE_COLOR.trim().length>0&&process.env.FORCE_COLOR.trim()!==`0`,bt=process.env.NO_COLOR&&!yt?new g({level:0}):h,xt=e=>bt.hex(e),St={accent:xt(vt.accent),accentBright:xt(vt.accentBright),accentDim:xt(vt.accentDim),info:xt(vt.info),success:bt.green,warn:bt.yellow,error:xt(vt.error),muted:xt(vt.muted),noteChrome:bt.gray,noteTitle:bt.bold.gray,noteHeading:bt.bold.yellow,heading:bt.bold,command:bt.green,option:bt.yellow};function Ct(){return!1}const wt=[`telegram`,`whatsapp`,`discord`,`irc`,`googlechat`,`slack`,`signal`,`imessage`],Tt=[...wt],Et=[],Dt={imsg:`imessage`,"internet-relay-chat":`irc`,"google-chat":`googlechat`,gchat:`googlechat`},Ot=e=>e?.trim().toLowerCase()||void 0;function kt(e){let t=Ot(e);if(!t)return null;let n=Dt[t]??t;return wt.includes(n)?n:null}function At(e,t,n){let r=n?` (${n})`:``,i=`[terminal] restore ${e} failed${r}: ${String(t)}`;try{process.stderr.write(`${i}\n`)}catch(e){console.error(`[terminal] restore reporting failed${r}: ${String(e)}`)}}function jt(e,t={}){let n=t.resumeStdinIfPaused??t.resumeStdin??!1,r=process.stdin;if(r.isTTY&&typeof r.setRawMode==`function`){try{r.setRawMode(!1)}catch(t){At(`raw mode`,t,e)}if(n&&typeof r.isPaused==`function`&&r.isPaused())try{r.resume()}catch(t){At(`stdin resume`,t,e)}}if(process.stdout.isTTY)try{process.stdout.write(`\x1B[0m\x1B[?25h\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1006l\x1B[?2004l`)}catch(t){At(`stdout reset`,t,e)}}function Mt(e=process.env){return e.VITEST!==`true`||e.FASED_TEST_RUNTIME_LOG===`1`?!0:typeof console.log.mock==`object`}function Nt(){return{log:(...e)=>{Mt()&&console.log(...e)},error:(...e)=>{console.error(...e)}}}const Pt={...Nt(),exit:e=>{throw jt(`runtime exit`,{resumeStdinIfPaused:!1}),process.exit(e),Error(`unreachable`)}},Ft=RegExp(`\\x1b\\[[0-9;]*m`,`g`),It=RegExp(`\\x1b\\]8;;.*?\\x1b\\\\|\\x1b\\]8;;\\x1b\\\\`,`g`);function Lt(e){return e.replace(It,``).replace(Ft,``)}function Rt(e){return Array.from(Lt(e)).length}const zt=Qe(import.meta.url);let Bt=()=>{try{return(zt?.(`../config/config.js`))?.loadConfig?.().logging}catch{return}};function Vt(e){return Ct()?`debug`:!e&&process.env.VITEST===`true`&&process.env.FASED_TEST_CONSOLE!==`1`?`silent`:Ye(e,`info`)}function Ht(e){return e===`compact`||e===`json`||e===`pretty`?e:process.stdout.isTTY?`pretty`:`compact`}function Ut(){let e=C.overrideSettings??Ke();if(!e)if(C.resolvingConsoleSettings)e=void 0;else{C.resolvingConsoleSettings=!0;try{e=Bt()}finally{C.resolvingConsoleSettings=!1}}return{level:Ze()??Vt(e?.consoleLevel),style:Ht(e?.consoleStyle)}}function Wt(e,t){return e?e.level!==t.level||e.style!==t.style:!0}function Gt(){let e=Ut(),t=C.cachedConsoleSettings;return(!t||Wt(t,e))&&(C.cachedConsoleSettings=e),C.cachedConsoleSettings}function Kt(e){let t=C.consoleSubsystemFilter;return!t||t.length===0?!0:t.some(t=>e===t||e.startsWith(`${t}/`))}function qt(e,t){return t.level===`silent`?!1:Xe(e)<=Xe(t.level)}(()=>{let e=process.getBuiltinModule;if(typeof e!=`function`)return null;try{let t=e(`util`);return typeof t.inspect==`function`?t.inspect:null}catch{return null}})();function Jt(){let e=(process.env.TERM??``).toLowerCase();return process.env.COLORTERM||process.env.TERM_PROGRAM?!0:e.length>0&&e!==`dumb`}function Yt(){let e=typeof process.env.FORCE_COLOR==`string`&&process.env.FORCE_COLOR.trim().length>0&&process.env.FORCE_COLOR.trim()!==`0`;return process.env.NO_COLOR&&!e?new g({level:0}):process.stdout.isTTY||process.stderr.isTTY||Jt()?new g({level:1}):new g({level:0})}const Xt=[`cyan`,`green`,`yellow`,`blue`,`magenta`,`red`],Zt={"gmail-watcher":`blue`},Qt=[`gateway`,`channels`,`providers`],$t=new Set(wt);function en(e,t){let n=Zt[t];if(n)return e[n];let r=0;for(let e=0;e<t.length;e+=1)r=r*31+t.charCodeAt(e)|0;return e[Xt[Math.abs(r)%Xt.length]]}function tn(e){let t=e.split(`/`).filter(Boolean),n=t.join(`/`)||e;for(;t.length>0&&Qt.includes(t[0]);)t.shift();return t.length===0?n:$t.has(t[0])?t[0]:t.length>2?t.slice(-2).join(`/`):t.join(`/`)}function nn(e,t){if(!t)return e;if(e.startsWith(`[`)){let n=e.indexOf(`]`);if(n>1&&e.slice(1,n).toLowerCase()===t.toLowerCase()){let t=n+1;for(;e[t]===` `;)t+=1;return e.slice(t)}}if(e.slice(0,t.length).toLowerCase()!==t.toLowerCase())return e;let n=e.slice(t.length,t.length+1);if(n!==`:`&&n!==` `)return e;let r=t.length;for(;e[r]===` `;)r+=1;for(e[r]===`:`&&(r+=1);e[r]===` `;)r+=1;return e.slice(r)}function rn(e){let t=e.style===`json`?e.subsystem:tn(e.subsystem);if(e.style===`json`)return JSON.stringify({time:new Date().toISOString(),level:e.level,subsystem:t,message:e.message,...e.meta});let n=Yt(),r=`[${t}]`,i=en(n,t),a=e.level===`error`||e.level===`fatal`?n.red:e.level===`warn`?n.yellow:e.level===`debug`||e.level===`trace`?n.gray:n.cyan,o=nn(e.message,t);return`${[e.style===`pretty`?n.gray(new Date().toISOString().slice(11,19)):C.consoleTimestampPrefix?n.gray(new Date().toISOString()):``,i(r)].filter(Boolean).join(` `)} ${a(o)}`}function an(e,t){let n=process.platform===`win32`&&process.env.GITHUB_ACTIONS===`true`?t.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,`?`).replace(/[\uD800-\uDFFF]/g,`?`):t,r=C.rawConsole??console;C.forceConsoleToStderr||e===`error`||e===`fatal`?(r.error??console.error)(n):e===`warn`?(r.warn??console.warn)(n):(r.log??console.log)(n)}function on(e,t,n,r){if(t===`silent`)return;let i=e[t];typeof i==`function`&&(r&&Object.keys(r).length>0?i.call(e,r,n):i.call(e,n))}function sn(e){let t=null,n=()=>(t||=pt({subsystem:e}),t),r=(t,r,i)=>{let a=Gt(),o,s=i;if(i&&Object.keys(i).length>0){let{consoleMessage:e,...t}=i;typeof e==`string`&&(o=e),s=Object.keys(t).length>0?t:void 0}if(on(n(),t,r,s),!qt(t,{level:a.level})||!Kt(e))return;let c=o??r;!Ct()&&e===`agent/embedded`&&/(sessionId|runId)=probe-/.test(c)||an(t,rn({level:t,subsystem:e,message:a.style===`json`?r:c,style:a.style,meta:s}))},i=t=>qt(t,{level:Gt().level})&&Kt(e),a=e=>st(e);return{subsystem:e,isEnabled:(e,t=`any`)=>t===`console`?i(e):t===`file`?a(e):i(e)||a(e),trace:(e,t)=>r(`trace`,e,t),debug:(e,t)=>r(`debug`,e,t),info:(e,t)=>r(`info`,e,t),warn:(e,t)=>r(`warn`,e,t),error:(e,t)=>r(`error`,e,t),fatal:(e,t)=>r(`fatal`,e,t),raw:t=>{if(on(n(),`info`,t,{raw:!0}),Kt(e)){if(!Ct()&&e===`agent/embedded`&&/(sessionId|runId)=probe-/.test(t))return;an(`info`,t)}},child:t=>sn(`${e}/${t}`)}}function cn(e){return[e.hasInput?`pipe`:e.preferInherit?`inherit`:`pipe`,`pipe`,`pipe`]}d(s);function ln(e){if(process.platform!==`win32`)return e;let t=i.basename(e).toLowerCase();return i.extname(t)?e:[`npm`,`pnpm`,`yarn`,`npx`].includes(t)?`${e}.cmd`:e}function un(e){return!1}async function dn(e,t){let n=typeof t==`number`?{timeoutMs:t}:t,{timeoutMs:r,cwd:a,input:o,env:s,noOutputTimeoutMs:c}=n,{windowsVerbatimArguments:u}=n,d=o!==void 0,f=(()=>{let t=i.basename(e[0]??``);return t===`npm`||t===`npm.cmd`||t===`npm.exe`?!0:t===`node`||t===`node.exe`?(e[1]??``).includes(`npm-cli.js`):!1})(),p=s?{...process.env,...s}:{...process.env},m=Object.fromEntries(Object.entries(p).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)]));f&&(m.NPM_CONFIG_FUND??=`false`,m.npm_config_fund??=`false`);let h=cn({hasInput:d,preferInherit:!0}),g=ln(e[0]??``),_=l(g,e.slice(1),{stdio:h,cwd:a,env:m,windowsVerbatimArguments:u,...un({resolvedCommand:g,platform:process.platform})?{shell:!0}:{}});return await new Promise((e,t)=>{let n=``,i=``,a=!1,s=!1,l=!1,u=null,f=typeof c==`number`&&Number.isFinite(c)&&c>0,p=()=>{u&&=(clearTimeout(u),null)},m=()=>{!f||a||(p(),u=setTimeout(()=>{a||(l=!0,typeof _.kill==`function`&&_.kill(`SIGKILL`))},Math.floor(c)))},h=setTimeout(()=>{s=!0,typeof _.kill==`function`&&_.kill(`SIGKILL`)},r);m(),d&&_.stdin&&(_.stdin.write(o??``),_.stdin.end()),_.stdout?.on(`data`,e=>{n+=e.toString(),m()}),_.stderr?.on(`data`,e=>{i+=e.toString(),m()}),_.on(`error`,e=>{a||(a=!0,clearTimeout(h),p(),t(e))}),_.on(`close`,(t,r)=>{if(a)return;a=!0,clearTimeout(h),p();let o=l?`no-output-timeout`:s?`timeout`:r==null?`exit`:`signal`;e({pid:_.pid??void 0,stdout:n,stderr:i,code:t,signal:r,killed:_.killed,termination:o,noOutputTimedOut:l})})})}async function fn(e,t,n,r=fetch){let i=new AbortController,a=setTimeout(i.abort.bind(i),Math.max(1,n));try{return await r(e,{...t,signal:i.signal})}finally{clearTimeout(a)}}async function pn(e){try{let t=await a.readFile(i.join(e,`package.json`),`utf-8`),n=JSON.parse(t)?.packageManager?.split(`@`)[0]?.trim();if(n===`pnpm`||n===`bun`||n===`npm`)return n}catch{}let t=await a.readdir(e).catch(()=>[]);return t.includes(`pnpm-lock.yaml`)?`pnpm`:t.includes(`bun.lockb`)?`bun`:t.includes(`package-lock.json`)?`npm`:null}function mn(e){if(!e)return null;let t=e.trim().toLowerCase();return t===`stable`||t===`beta`||t===`dev`?t:null}function hn(e){return/(?:^|[.-])beta(?:[.-]|$)/i.test(e)}function gn(e){if(e.configChannel)return{channel:e.configChannel,source:`config`};if(e.installKind===`git`){let t=e.git?.tag;return t?{channel:hn(t)?`beta`:`stable`,source:`git-tag`}:{channel:`stable`,source:`default`}}return e.installKind,{channel:`stable`,source:`default`}}function _n(e){return e.source===`config`?`${e.channel} (config)`:e.source===`git-tag`?e.gitTag?`${e.channel} (${e.gitTag})`:`${e.channel} (tag)`:e.source===`git-branch`?e.gitBranch?`${e.channel} (${e.gitBranch})`:`${e.channel} (branch)`:`${e.channel} (default)`}function vn(e){let t=gn({configChannel:e.configChannel,installKind:e.installKind,git:e.gitTag||e.gitBranch?{tag:e.gitTag??null,branch:e.gitBranch??null}:void 0});return{channel:t.channel,source:t.source,label:_n({channel:t.channel,source:t.source,gitTag:e.gitTag??null,gitBranch:e.gitBranch??null})}}function w(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.prototype.toString.call(e)===`[object Object]`}function T(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function E(e,t=process.env,n=p.homedir){if(!e)return``;let r=e.trim();if(!r)return r;if(r.startsWith(`~`)){let e=Pe(r,{home:S(t,n),env:t,homedir:n});return i.resolve(e)}return i.resolve(r)}function yn(e=process.env,t=p.homedir){let r=e.FASED_STATE_DIR?.trim()||e.FASED_CONFIG_DIR?.trim();if(r)return E(r);let a=i.join(S(e,t),`.fased`);try{if(n.existsSync(a))return a}catch{}return a}function bn(){return je(process.env,p.homedir)}function xn(){let e=bn();if(e)return process.env.FASED_HOME?.trim()?{home:e,prefix:`$FASED_HOME`}:{home:e,prefix:`~`}}function Sn(e){if(!e)return e;let t=xn();return t?e.split(t.home).join(t.prefix):e}function Cn(e){return Sn(e)}yn();function wn(e){let t=i.dirname(e);return i.basename(t).startsWith(`@`)?i.dirname(t):t}function Tn(e){let t=i.resolve(e),n=`${i.sep}.fased${i.sep}install-cache${i.sep}npm-global`,r=`${n}${`${i.sep}lib${i.sep}node_modules`}`,a=t.indexOf(`${r}${i.sep}`);if(a<0)return null;let o=t.slice(0,a+n.length),s=i.join(o,`lib`,`node_modules`),c=i.join(i.dirname(o),`npm-cache`),l=wn(t);return i.resolve(l)===i.resolve(s)?{manager:`npm`,globalRoot:s,cacheRoot:i.dirname(o),env:{npm_config_prefix:o,npm_config_cache:c}}:null}async function En(e){try{return await a.access(e),!0}catch{return!1}}async function Dn(e){return await pn(e)??`unknown`}async function On(e){let t=await dn([`git`,`-C`,e,`rev-parse`,`--show-toplevel`],{timeoutMs:4e3}).catch(()=>null);if(!t||t.code!==0)return null;let n=t.stdout.trim();return n?i.resolve(n):null}async function kn(e){let t=e.timeoutMs??6e3,n=i.resolve(e.root),r={root:n,sha:null,tag:null,branch:null,upstream:null,dirty:null,ahead:null,behind:null,fetchOk:null},a=await dn([`git`,`-C`,n,`rev-parse`,`--abbrev-ref`,`HEAD`],{timeoutMs:t}).catch(()=>null);if(!a||a.code!==0)return{...r,error:a?.stderr?.trim()||`git unavailable`};let o=a.stdout.trim()||null,s=await dn([`git`,`-C`,n,`rev-parse`,`HEAD`],{timeoutMs:t}).catch(()=>null),c=s&&s.code===0?s.stdout.trim():null,l=await dn([`git`,`-C`,n,`describe`,`--tags`,`--exact-match`],{timeoutMs:t}).catch(()=>null),u=l&&l.code===0?l.stdout.trim():null,d=await dn([`git`,`-C`,n,`rev-parse`,`--abbrev-ref`,`@{upstream}`],{timeoutMs:t}).catch(()=>null),f=d&&d.code===0?d.stdout.trim():null,p=await dn([`git`,`-C`,n,`status`,`--porcelain`,`--`,`:!dist/control-ui/`],{timeoutMs:t}).catch(()=>null),m=p&&p.code===0?p.stdout.trim().length>0:null,h=e.fetch?await dn([`git`,`-C`,n,`fetch`,`--quiet`,`--prune`],{timeoutMs:t}).then(e=>e.code===0).catch(()=>!1):null,g=f&&f.length>0?await dn([`git`,`-C`,n,`rev-list`,`--left-right`,`--count`,`HEAD...${f}`],{timeoutMs:t}).catch(()=>null):null,_=g&&g.code===0?(e=>{let t=e.trim().split(/\s+/);if(t.length<2)return null;let n=Number.parseInt(t[0]??``,10),r=Number.parseInt(t[1]??``,10);return!Number.isFinite(n)||!Number.isFinite(r)?null:{ahead:n,behind:r}})(g.stdout):null;return{root:n,sha:c,tag:u,branch:o,upstream:f,dirty:m,ahead:_?.ahead??null,behind:_?.behind??null,fetchOk:h}}async function An(e){try{return(await a.stat(e)).mtimeMs}catch{return null}}function jn(e){let t=e.root;return e.manager===`pnpm`?{lockfilePath:i.join(t,`pnpm-lock.yaml`),markerPath:i.join(t,`node_modules`,`.modules.yaml`)}:e.manager===`bun`?{lockfilePath:i.join(t,`bun.lockb`),markerPath:i.join(t,`node_modules`)}:e.manager===`npm`?{lockfilePath:i.join(t,`package-lock.json`),markerPath:i.join(t,`node_modules`)}:{lockfilePath:null,markerPath:null}}async function Mn(e){let{lockfilePath:t,markerPath:n}=jn({root:i.resolve(e.root),manager:e.manager});if(!t||!n)return{manager:e.manager,status:`unknown`,lockfilePath:t,markerPath:n,reason:`unknown package manager`};let r=await En(t),a=await En(n);if(!r)return{manager:e.manager,status:`unknown`,lockfilePath:t,markerPath:n,reason:`lockfile missing`};if(!a)return{manager:e.manager,status:`missing`,lockfilePath:t,markerPath:n,reason:`node_modules marker missing`};let o=await An(t),s=await An(n);return!o||!s?{manager:e.manager,status:`unknown`,lockfilePath:t,markerPath:n}:o>s+1e3?{manager:e.manager,status:`stale`,lockfilePath:t,markerPath:n,reason:`lockfile newer than install marker`}:{manager:e.manager,status:`ok`,lockfilePath:t,markerPath:n}}async function Nn(e){let t=await Pn({tag:`latest`,timeoutMs:e?.timeoutMs});return{latestVersion:t.version,error:t.error}}async function Pn(e){let t=e?.timeoutMs??3500,n=e.tag;try{let e=await fn(`https://registry.npmjs.org/%40fased%2Ffased/${encodeURIComponent(n)}`,{},Math.max(250,t));if(!e.ok)return{tag:n,version:null,error:`HTTP ${e.status}`};let r=await e.json();return{tag:n,version:typeof r?.version==`string`?r.version:null}}catch(e){return{tag:n,version:null,error:String(e)}}}function Fn(e,t){let n=In(e),r=In(t);return!n||!r?null:n.major===r.major?n.minor===r.minor?n.patch===r.patch?Rn(n.prerelease,r.prerelease):n.patch<r.patch?-1:1:n.minor<r.minor?-1:1:n.major<r.major?-1:1}function In(e){if(!e)return null;let t=Ln(e.trim()),n=/^v?([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(t);if(!n)return null;let[,r,i,a,o]=n;return!r||!i||!a?null:{major:Number.parseInt(r,10),minor:Number.parseInt(i,10),patch:Number.parseInt(a,10),prerelease:o?o.split(`.`).filter(Boolean):null}}function Ln(e){let t=e.trim(),n=/^([vV]?[0-9]+\.[0-9]+\.[0-9]+)\.beta(?:\.([0-9A-Za-z.-]+))?$/.exec(t);if(!n)return t;let r=n[1],i=n[2];return i?`${r}-beta.${i}`:`${r}-beta`}function Rn(e,t){if(!e?.length&&!t?.length)return 0;if(!e?.length)return 1;if(!t?.length)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(n==null&&i==null)return 0;if(n==null)return-1;if(i==null)return 1;if(n===i)continue;let a=/^[0-9]+$/.test(n),o=/^[0-9]+$/.test(i);return a&&o?Number.parseInt(n,10)<Number.parseInt(i,10)?-1:1:a&&!o?-1:!a&&o?1:n<i?-1:1}return 0}async function zn(e){let t=e.timeoutMs??6e3,n=e.root?i.resolve(e.root):null;if(!n)return{root:null,installKind:`unknown`,packageManager:`unknown`,registry:e.includeRegistry?await Nn({timeoutMs:t}):void 0};let r=await On(n),a=r&&i.resolve(r)===n,o=a?`git`:`package`,s=!a&&Tn(n)?`npm`:await Dn(n);return{root:n,installKind:o,packageManager:s,git:a?await kn({root:n,timeoutMs:t,fetch:!!e.fetchGit}):void 0,deps:await Mn({root:n,manager:s}),registry:e.includeRegistry?await Nn({timeoutMs:t}):void 0}}const Bn=new Set([`fased`,`@fased/fased`]),Vn=[`../package.json`,`../../package.json`,`../../../package.json`,`./package.json`],Hn=[`../build-info.json`,`../../build-info.json`,`./build-info.json`];function Un(t,n,r={}){try{let i=e(t);for(let e of n)try{let t=i(e),n=t.version?.trim();if(!n||r.requirePackageName&&!Bn.has(t.name??``))continue;return n}catch{}return null}catch{return null}}function Wn(...e){for(let t of e){let e=t?.trim();if(e)return e}}function Gn(e){return Un(e,Vn,{requirePackageName:!0})}function Kn(e){return Un(e,Hn)}function qn(e){return Gn(e)||Kn(e)}function Jn(e=process.env,t=`dev`){return Wn(e.FASED_VERSION,e.FASED_SERVICE_VERSION,e.npm_package_version)??t}const Yn=typeof __FASED_VERSION__==`string`&&__FASED_VERSION__||process.env.FASED_BUNDLED_VERSION||qn(import.meta.url)||`0.0.0`;function Xn(e,t={}){let n=e.registry?.latestVersion??null,r=n?Fn(Yn,n):null,i=r!=null&&r<0,a=(t.channel==null||t.channel===`dev`)&&e.installKind===`git`&&typeof e.git?.behind==`number`?e.git.behind:null,o=a!=null&&a>0;return{available:o||i,hasGitUpdate:o,hasRegistryUpdate:i,latestVersion:i?n:null,gitBehind:a}}function Zn(e,t={}){let n=Xn(e,t);if(!n.available)return null;let r=[];return n.hasGitUpdate&&n.gitBehind!=null&&r.push(`git behind ${n.gitBehind}`),n.hasRegistryUpdate&&n.latestVersion&&r.push(`npm ${n.latestVersion}`),`Update available${r.length>0?` (${r.join(` · `)})`:``}. Run: ${ge(`fased update`)}`}function Qn(e,t={}){let n=[],r=()=>{if(e.registry?.latestVersion){let t=Fn(Yn,e.registry.latestVersion);t===0?n.push(`npm latest ${e.registry.latestVersion}`):t!=null&&t<0?n.push(`npm update ${e.registry.latestVersion}`):n.push(`npm latest ${e.registry.latestVersion} (local newer)`);return}e.registry?.error&&n.push(`npm latest unknown`)};if(e.installKind===`git`&&e.git){if(t.channel&&t.channel!==`dev`)n.push(`${t.channel} channel`),e.git.dirty===!0&&n.push(`dirty`);else{let t=e.git.branch?`git ${e.git.branch}`:`git`;n.push(t),e.git.upstream&&n.push(`↔ ${e.git.upstream}`),e.git.dirty===!0&&n.push(`dirty`),e.git.behind!=null&&e.git.ahead!=null&&(e.git.behind===0&&e.git.ahead===0?n.push(`up to date`):e.git.behind>0&&e.git.ahead===0?n.push(`behind ${e.git.behind}`):e.git.behind===0&&e.git.ahead>0?n.push(`ahead ${e.git.ahead}`):e.git.behind>0&&e.git.ahead>0&&n.push(`diverged (ahead ${e.git.ahead}, behind ${e.git.behind})`)),e.git.fetchOk===!1&&n.push(`fetch failed`)}r()}else n.push(e.packageManager===`unknown`?`pkg`:e.packageManager),r();return e.deps&&(e.deps.status===`ok`&&n.push(`deps ok`),e.deps.status===`missing`&&n.push(`deps missing`),e.deps.status===`stale`&&n.push(`deps stale`)),`Update: ${n.join(` · `)}`}function $n(e){return e?.trim()||void 0}function er(e){let t=e?.commands?.ownerDisplay;return t===`hash`?{ownerDisplay:`hash`,ownerDisplaySecret:$n(e?.commands?.ownerDisplaySecret)}:{ownerDisplay:t,ownerDisplaySecret:void 0}}function tr(e,t=()=>_.randomBytes(32).toString(`hex`)){let n=er(e);if(n.ownerDisplay!==`hash`||n.ownerDisplaySecret)return{config:e};let r=t();return{config:{...e,commands:{...e.commands,ownerDisplay:`hash`,ownerDisplaySecret:r}},generatedSecret:r}}var nr={blockedEverywhereKeys:`NODE_OPTIONS.NODE_PATH.PYTHONHOME.PYTHONPATH.PERL5LIB.PERL5OPT.RUBYLIB.RUBYOPT.BASH_ENV.ENV.BROWSER.GIT_EDITOR.GIT_EXTERNAL_DIFF.GIT_DIR.GIT_WORK_TREE.GIT_COMMON_DIR.GIT_EXEC_PATH.GIT_INDEX_FILE.GIT_OBJECT_DIRECTORY.GIT_ALTERNATE_OBJECT_DIRECTORIES.GIT_NAMESPACE.GIT_SEQUENCE_EDITOR.GIT_TEMPLATE_DIR.GIT_SSL_NO_VERIFY.GIT_SSL_CAINFO.GIT_SSL_CAPATH.CC.CXX.CARGO_BUILD_RUSTC.CARGO_BUILD_RUSTC_WRAPPER.RUSTC_WRAPPER.CMAKE_C_COMPILER.CMAKE_CXX_COMPILER.SHELL.SHELLOPTS.PS4.GCONV_PATH.IFS.SSLKEYLOGFILE.JAVA_OPTS.JAVA_TOOL_OPTIONS._JAVA_OPTIONS.JDK_JAVA_OPTIONS.PYTHONBREAKPOINT.DOTNET_STARTUP_HOOKS.DOTNET_ADDITIONAL_DEPS.GLIBC_TUNABLES.MAVEN_OPTS.MAKEFLAGS.MFLAGS.SBT_OPTS.GRADLE_OPTS.ANT_OPTS.HGRCPATH.EXINIT.VIMINIT.MYVIMRC.GVIMINIT.LUA_INIT.LUA_INIT_5_1.LUA_INIT_5_2.LUA_INIT_5_3.LUA_INIT_5_4.EMACSLOADPATH.RUBYSHELL.GIT_HOOK_PATH.SVN_EDITOR.SVN_SSH.BZR_EDITOR.BZR_SSH.BZR_PLUGIN_PATH.SUDO_ASKPASS.JULIA_EDITOR.CONFIG_SITE.CONFIG_SHELL.CMAKE_TOOLCHAIN_FILE.CATALINA_OPTS.CORECLR_PROFILER.HELM_PLUGINS.PACKER_PLUGIN_PATH.VAGRANT_VAGRANTFILE.ERL_AFLAGS.ERL_FLAGS.ERL_ZFLAGS.ELIXIR_ERL_OPTIONS.R_ENVIRON.R_PROFILE.R_ENVIRON_USER.R_PROFILE_USER.HOSTALIASES`.split(`.`),blockedOverrideOnlyKeys:`HOME.GRADLE_USER_HOME.ZDOTDIR.GIT_DIR.GIT_WORK_TREE.GIT_COMMON_DIR.GIT_INDEX_FILE.GIT_OBJECT_DIRECTORY.GIT_ALTERNATE_OBJECT_DIRECTORIES.GIT_NAMESPACE.GIT_SSH_COMMAND.GIT_SSH.GIT_PROXY_COMMAND.GIT_ASKPASS.GIT_SSL_NO_VERIFY.GIT_SSL_CAINFO.GIT_SSL_CAPATH.SSH_ASKPASS.LESSOPEN.LESSCLOSE.PAGER.MANPAGER.GIT_PAGER.EDITOR.VISUAL.FCEDIT.SUDO_EDITOR.PROMPT_COMMAND.HISTFILE.PERL5DB.PERL5DBCMD.OPENSSL_CONF.OPENSSL_ENGINES.PYTHONSTARTUP.WGETRC.CURL_HOME.CLASSPATH.CFLAGS.CGO_CFLAGS.CGO_LDFLAGS.GOFLAGS.MAKEFLAGS.MFLAGS.CORECLR_PROFILER_PATH.PHPRC.PHP_INI_SCAN_DIR.DENO_DIR.BUN_CONFIG_REGISTRY.YARN_RC_FILENAME.HTTP_PROXY.HTTPS_PROXY.ALL_PROXY.NO_PROXY.NODE_TLS_REJECT_UNAUTHORIZED.NODE_EXTRA_CA_CERTS.SSL_CERT_FILE.SSL_CERT_DIR.REQUESTS_CA_BUNDLE.CURL_CA_BUNDLE.DOCKER_HOST.DOCKER_TLS_VERIFY.DOCKER_CERT_PATH.PIP_INDEX_URL.PIP_PYPI_URL.PIP_EXTRA_INDEX_URL.PIP_CONFIG_FILE.PIP_FIND_LINKS.PIP_TRUSTED_HOST.UV_INDEX.UV_INDEX_URL.UV_PYTHON.UV_EXTRA_INDEX_URL.UV_DEFAULT_INDEX.DOCKER_CONTEXT.LIBRARY_PATH.LDFLAGS.CPATH.C_INCLUDE_PATH.CPLUS_INCLUDE_PATH.OBJC_INCLUDE_PATH.GOPROXY.GONOSUMCHECK.GONOSUMDB.GONOPROXY.GOPRIVATE.GOENV.GOPATH.HGRCPATH.PYTHONUSERBASE.RUSTC_WRAPPER.RUSTFLAGS.CARGO_HOME.VIRTUAL_ENV.LUA_PATH.LUA_CPATH.GEM_HOME.GEM_PATH.BUNDLE_GEMFILE.COMPOSER_HOME.CARGO_BUILD_RUSTC_WRAPPER.XDG_CONFIG_HOME.XDG_CONFIG_DIRS.AWS_CONFIG_FILE.KUBECONFIG.GOOGLE_APPLICATION_CREDENTIALS.AWS_SHARED_CREDENTIALS_FILE.AWS_WEB_IDENTITY_TOKEN_FILE.AZURE_AUTH_LOCATION.HELM_HOME.ANSIBLE_CONFIG.ANSIBLE_LIBRARY.ANSIBLE_CALLBACK_PLUGINS.ANSIBLE_COLLECTIONS_PATH.ANSIBLE_CONNECTION_PLUGINS.ANSIBLE_FILTER_PLUGINS.ANSIBLE_INVENTORY_PLUGINS.ANSIBLE_LOOKUP_PLUGINS.ANSIBLE_MODULE_UTILS.ANSIBLE_REMOTE_TEMP.ANSIBLE_ROLES_PATH.ANSIBLE_STRATEGY_PLUGINS.R_LIBS_USER.TF_CLI_CONFIG_FILE.TF_PLUGIN_CACHE_DIR.AMQP_URL.AWS_ACCESS_KEY_ID.AWS_CONTAINER_CREDENTIALS_FULL_URI.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI.AWS_SECRET_ACCESS_KEY.AWS_SECURITY_TOKEN.AWS_SESSION_TOKEN.AZURE_CLIENT_ID.AZURE_CLIENT_SECRET.DATABASE_URL.GH_TOKEN.GITHUB_TOKEN.GITLAB_TOKEN.MONGODB_URI.NODE_AUTH_TOKEN.NPM_TOKEN.REDIS_URL.SSH_AUTH_SOCK`.split(`.`),allowedInheritedOverrideOnlyKeys:`ALL_PROXY.AWS_CONFIG_FILE.AWS_SHARED_CREDENTIALS_FILE.AWS_WEB_IDENTITY_TOKEN_FILE.AZURE_AUTH_LOCATION.CURL_CA_BUNDLE.DOCKER_CERT_PATH.DOCKER_CONTEXT.DOCKER_HOST.DOCKER_TLS_VERIFY.GIT_PAGER.GOOGLE_APPLICATION_CREDENTIALS.GRADLE_USER_HOME.HISTFILE.HOME.HTTPS_PROXY.HTTP_PROXY.KUBECONFIG.MANPAGER.NODE_EXTRA_CA_CERTS.NODE_TLS_REJECT_UNAUTHORIZED.NO_PROXY.PAGER.REQUESTS_CA_BUNDLE.SSH_AUTH_SOCK.SSL_CERT_DIR.SSL_CERT_FILE.ZDOTDIR`.split(`.`),blockedOverridePrefixes:[`GIT_CONFIG_`,`NPM_CONFIG_`,`CARGO_REGISTRIES_`,`TF_VAR_`],blockedPrefixes:[`DYLD_`,`LD_`,`BASH_FUNC_`]};const rr=/^[A-Za-z_][A-Za-z0-9_]*$/,ir=nr;function ar(e){return Array.from(new Set(Array.from(e,e=>e.toUpperCase()))).toSorted((e,t)=>e.localeCompare(t))}const or=ar(ir.blockedEverywhereKeys??ir.blockedKeys??[]),sr=ar(ir.blockedOverrideOnlyKeys??ir.blockedOverrideKeys??[]),cr=new Set(ar(ir.allowedInheritedOverrideOnlyKeys??[])),lr=ar([...or,...sr.filter(e=>!cr.has(e))]),ur=Object.freeze(or),dr=Object.freeze(ar(ir.blockedPrefixes)),fr=Object.freeze(lr),pr=Object.freeze(ar(ir.blockedPrefixes)),mr=Object.freeze(sr),hr=Object.freeze(ar(ir.blockedOverridePrefixes??[]));Object.freeze([`TERM`,`LANG`,`LC_ALL`,`LC_CTYPE`,`LC_MESSAGES`,`COLORTERM`,`NO_COLOR`,`FORCE_COLOR`]);const gr=new Set(ur),_r=new Set(fr),vr=new Set(mr);function yr(e,t){let n=e.trim();return!n||t?.portable&&!rr.test(n)?null:n}function br(e){let t=yr(e);if(!t)return!1;let n=t.toUpperCase();return gr.has(n)?!0:dr.some(e=>n.startsWith(e))}function xr(e){let t=yr(e);if(!t)return!1;let n=t.toUpperCase();return _r.has(n)?!0:pr.some(e=>n.startsWith(e))}function Sr(e){let t=yr(e);if(!t)return!1;let n=t.toUpperCase();return vr.has(n)?!0:hr.some(e=>n.startsWith(e))}function Cr(e){let t=e?.baseEnv??process.env,n=e?.overrides??void 0,r=e?.blockPathOverrides??!0,i={};for(let[e,n]of Object.entries(t)){if(typeof n!=`string`)continue;let t=yr(e,{portable:!0});!t||xr(t)||(i[t]=n)}if(!n)return i;for(let[e,t]of Object.entries(n)){if(typeof t!=`string`)continue;let n=yr(e,{portable:!0});if(!n)continue;let a=n.toUpperCase();r&&a===`PATH`||br(a)||Sr(a)||(i[n]=t)}return i}const wr=new Set(`ALL_PROXY.ANTHROPIC_API_KEY.ANTHROPIC_OAUTH_TOKEN.BROWSER_EXECUTABLE_PATH.FASED_AGENT_DIR.FASED_ALLOW_INSECURE_PRIVATE_WS.FASED_ALLOW_PROJECT_LOCAL_BIN.FASED_BROWSER_EXECUTABLE_PATH.FASED_BROWSER_CONTROL_MODULE.FASED_BUNDLED_HOOKS_DIR.FASED_BUNDLED_PLUGINS_DIR.FASED_BUNDLED_SKILLS_DIR.FASED_CACHE_TRACE.FASED_CACHE_TRACE_FILE.FASED_CACHE_TRACE_MESSAGES.FASED_CACHE_TRACE_PROMPT.FASED_CACHE_TRACE_SYSTEM.FASED_CONFIG_PATH.FASED_GATEWAY_PASSWORD.FASED_GATEWAY_PORT.FASED_GATEWAY_SECRET.FASED_GATEWAY_TOKEN.FASED_GATEWAY_URL.FASED_HOME.FASED_LIVE_ANTHROPIC_KEY.FASED_LIVE_ANTHROPIC_KEYS.FASED_LIVE_GEMINI_KEY.FASED_LIVE_OPENAI_KEY.FASED_MPM_CATALOG_PATHS.FASED_NODE_EXEC_FALLBACK.FASED_NODE_EXEC_HOST.FASED_OAUTH_DIR.FASED_PINNED_PYTHON.FASED_PINNED_WRITE_PYTHON.FASED_PLUGIN_CATALOG_PATHS.FASED_PROFILE.FASED_RAW_STREAM.FASED_RAW_STREAM_PATH.FASED_SHOW_SECRETS.FASED_SKIP_BROWSER_CONTROL_SERVER.FASED_STATE_DIR.FASED_TEST_TAILSCALE_BINARY.HTTP_PROXY.HTTPS_PROXY.NODE_TLS_REJECT_UNAUTHORIZED.NO_PROXY.OPENAI_API_KEY.OPENAI_API_KEYS.PI_CODING_AGENT_DIR.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH.UV_PYTHON`.split(`.`)),Tr=[`_BASE_URL`],Er=[`ANTHROPIC_API_KEY_`,`CLAWHUB_`,`FASED_CLAWHUB_`,`FASEDHUB_`,`FASED_DISABLE_`,`FASED_SKIP_`,`FASED_UPDATE_`,`OPENAI_API_KEY_`];function Dr(e){return br(e)||Sr(e)}function Or(e){return!1}function kr(e){let t=e.toUpperCase();return Dr(t)||wr.has(t)||Er.some(e=>t.startsWith(e))||Tr.some(e=>t.endsWith(e))}function Ar(e){let t;try{t=n.readFileSync(e.filePath,`utf8`)}catch(t){return e.quiet||(t&&typeof t==`object`&&`code`in t?String(t.code):void 0)!==`ENOENT`&&console.warn(`[dotenv] Failed to read ${e.filePath}: ${String(t)}`),null}let r;try{r=v.parse(t)}catch(t){return e.quiet||console.warn(`[dotenv] Failed to parse ${e.filePath}: ${String(t)}`),null}let i=[];for(let[t,n]of Object.entries(r)){let r=yr(t,{portable:!0});!r||e.shouldBlockKey(r)||i.push({key:r,value:n})}return{filePath:e.filePath,entries:i}}function jr(e,t){let n=Ar({filePath:e,shouldBlockKey:kr,quiet:t?.quiet??!0});if(n)for(let{key:e,value:t}of n.entries)process.env[e]===void 0&&(process.env[e]=t)}function Mr(e){let t=new Set(Object.keys(process.env)),n=new Map,r=new Map;for(let i of e)for(let{key:e,value:a}of i.entries){if(t.has(e))continue;let o=r.get(e);if(o){if(o.value!==a){let t=`${o.filePath}\u0000${i.filePath}`,r=n.get(t);r?r.keys.add(e):n.set(t,{keptPath:o.filePath,ignoredPath:i.filePath,keys:new Set([e])})}continue}r.set(e,{value:a,filePath:i.filePath}),process.env[e]===void 0&&(process.env[e]=a)}for(let e of n.values()){let t=[...e.keys].toSorted();t.length!==0&&console.warn(`[dotenv] Conflicting values in ${e.keptPath} and ${e.ignoredPath} for ${t.join(`, `)}; keeping ${e.keptPath}.`)}}function Nr(e){let t=e?.quiet??!0,n=e?.stateEnvPath??i.join(yn(process.env),`.env`),r=i.join(S(process.env,p.homedir),`.fased`,`.env`),a=process.env.FASED_STATE_DIR?.trim()!==void 0&&i.resolve(n)!==i.resolve(r),o=[Ar({filePath:n,shouldBlockKey:Or,quiet:t})];a||o.push(Ar({filePath:i.join(S(process.env,p.homedir),`.config`,`fased`,`gateway.env`),shouldBlockKey:Or,quiet:t})),Mr(o.filter(e=>e!==null))}function Pr(e){let t=e?.quiet??!0;jr(i.join(process.cwd(),`.env`),{quiet:t}),Nr({quiet:t})}const Fr=[`true`,`1`,`yes`,`on`],Ir=[`false`,`0`,`no`,`off`],Lr=new Set(Fr),Rr=new Set(Ir);function zr(e,t={}){if(typeof e==`boolean`)return e;if(typeof e!=`string`)return;let n=e.trim().toLowerCase();if(!n)return;let r=t.truthy??Fr,i=t.falsy??Ir,a=r===Fr?Lr:new Set(r),o=i===Ir?Rr:new Set(i);if(a.has(n))return!0;if(o.has(n))return!1}function Br(e){return zr(e)===!0}const Vr=15e3;let Hr;function Ur(e){let t=Cr({baseEnv:e}),n=p.homedir().trim();return n?t.HOME=n:delete t.HOME,delete t.ZDOTDIR,t}function Wr(e){return typeof e!=`number`||!Number.isFinite(e)?Vr:Math.max(0,e)}function Gr(){if(Hr!==void 0)return Hr;try{let e=n.readFileSync(`/etc/shells`,`utf8`).split(/\r?\n/).map(e=>e.trim()).filter(e=>e.length>0&&!e.startsWith(`#`)&&i.isAbsolute(e));Hr=new Set(e)}catch{Hr=null}return Hr}function Kr(e){return!i.isAbsolute(e)||i.normalize(e)!==e?!1:Gr()?.has(e)===!0}function qr(e){let t=e.SHELL?.trim();return t&&Kr(t)?t:`/bin/sh`}function Jr(e){return e.exec(e.shell,[`-l`,`-c`,`env -0`],{encoding:`buffer`,timeout:e.timeoutMs,maxBuffer:2097152,env:e.env,stdio:[`ignore`,`pipe`,`pipe`]})}function Yr(e){let t=new Map,n=e.toString(`utf8`).split(`\0`);for(let e of n){if(!e)continue;let n=e.indexOf(`=`);if(n<=0)continue;let r=e.slice(0,n),i=e.slice(n+1);r&&t.set(r,i)}return t}function Xr(e){let t=e.exec??c,n=Wr(e.timeoutMs),r=qr(e.env),i=Ur(e.env);try{return{ok:!0,shellEnv:Yr(Jr({shell:r,env:i,exec:t,timeoutMs:n}))}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}function Zr(e){let t=e.logger??console;if(!e.enabled)return{ok:!0,applied:[],skippedReason:`disabled`};if(e.expectedKeys.some(t=>!!e.env[t]?.trim()))return{ok:!0,applied:[],skippedReason:`already-has-keys`};let n=Xr({env:e.env,timeoutMs:e.timeoutMs,exec:e.exec});if(!n.ok)return t.warn(`[fased] shell env fallback failed: ${n.error}`),{ok:!1,error:n.error,applied:[]};let r=[];for(let t of e.expectedKeys){if(e.env[t]?.trim())continue;let i=n.shellEnv.get(t);i?.trim()&&(e.env[t]=i,r.push(t))}return{ok:!0,applied:r}}function Qr(e){return Br(e.FASED_LOAD_SHELL_ENV)}function $r(e){return Br(e.FASED_DEFER_SHELL_ENV_FALLBACK)}function ei(e){let t=e.FASED_SHELL_ENV_TIMEOUT_MS?.trim();if(!t)return Vr;let n=Number.parseInt(t,10);return Number.isFinite(n)?Math.max(0,n):Vr}const ti=new Set([`ENOENT`,`ENOTDIR`]),ni=/^\.\.(?:[\\/]|$)/u;function ri(e){let t=i.win32.normalize(e);return t.startsWith(`\\\\?\\`)&&(t=t.slice(4),t.toUpperCase().startsWith(`UNC\\`)&&(t=`\\\\${t.slice(4)}`)),t.replaceAll(`/`,`\\`).toLowerCase()}function ii(e){return!!(e&&typeof e==`object`&&`code`in e)}function ai(e){return ii(e)&&typeof e.code==`string`&&ti.has(e.code)}function oi(e,t){let n=i.resolve(e),r=i.resolve(t);if(process.platform===`win32`){let e=ri(n),t=ri(r),a=i.win32.relative(e,t);return a===``||!ni.test(a)&&!i.win32.isAbsolute(a)}let a=i.relative(n,r);return a===``||!ni.test(a)&&!i.isAbsolute(a)}r.O_WRONLY|r.O_CREAT|r.O_TRUNC|(process.platform!==`win32`&&`O_NOFOLLOW`in r?r.O_NOFOLLOW:0);function si(e,t){let n=i.resolve(e),r=i.resolve(t),a=i.relative(n,r);return a===``||!a.startsWith(`..${i.sep}`)&&a!==`..`&&!i.isAbsolute(a)}Qe(import.meta.url),String.raw`\b[A-Z0-9_]*(?:KEY|TOKEN|SECRET|PASSWORD|PASSWD)\b\s*[=:]\s*(["']?)([^\s"'\\]+)\1`,String.raw`"(?:apiKey|token|secret|password|passwd|accessToken|refreshToken)"\s*:\s*"([^"]+)"`,String.raw`--(?:api[-_]?key|token|secret|password|passwd)\s+(["']?)([^\s"']+)\1`,String.raw`Authorization\s*[:=]\s*Bearer\s+([A-Za-z0-9._\-+=]+)`,String.raw`\bBearer\s+([A-Za-z0-9._\-+=]{18,})\b`,String.raw`-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]+?-----END [A-Z ]*PRIVATE KEY-----`,String.raw`\b(sk-[A-Za-z0-9_-]{8,})\b`,String.raw`\b(ghp_[A-Za-z0-9]{20,})\b`,String.raw`\b(github_pat_[A-Za-z0-9_]{20,})\b`,String.raw`\b(xox[baprs]-[A-Za-z0-9-]{10,})\b`,String.raw`\b(xapp-[A-Za-z0-9-]{10,})\b`,String.raw`\b(gsk_[A-Za-z0-9_-]{10,})\b`,String.raw`\b(AIza[0-9A-Za-z\-_]{20,})\b`,String.raw`\b(pplx-[A-Za-z0-9_-]{10,})\b`,String.raw`\b(npm_[A-Za-z0-9]{10,})\b`,String.raw`\bbot(\d{6,}:[A-Za-z0-9_-]{20,})\b`,String.raw`\b(\d{6,}:[A-Za-z0-9_-]{20,})\b`,Object.freeze({allowFinalSymlinkForUnlink:!1,allowFinalHardlinkForUnlink:!1}),Object.freeze({allowFinalSymlinkForUnlink:!0,allowFinalHardlinkForUnlink:!0});function ci(e){let t=i.resolve(e.rootPath),n=i.resolve(e.absolutePath),r=e.rootCanonicalPath?i.resolve(e.rootCanonicalPath):pi(t),a=oi(t,n),o=ui({absolutePath:n,outsideLexicalCanonicalPath:a?void 0:pi(n)});if(di({skipLexicalRootCheck:e.skipLexicalRootCheck,lexicalInside:a,canonicalOutsideLexicalPath:o,rootCanonicalPath:r,boundaryLabel:e.boundaryLabel,rootPath:t,absolutePath:n}),!a){let i=o;return _i({boundaryLabel:e.boundaryLabel,rootCanonicalPath:r,candidatePath:i,absolutePath:n}),fi({absolutePath:n,canonicalPath:i,rootPath:t,rootCanonicalPath:r,kind:mi(n,!1)})}return li({params:e,absolutePath:n,rootPath:t,rootCanonicalPath:r})}function li(e){let t=i.relative(e.rootPath,e.absolutePath).split(i.sep).filter(Boolean),r=e.params.policy?.allowFinalSymlinkForUnlink===!0,a=e.rootCanonicalPath,o=e.rootPath,s=!1;for(let c=0;c<t.length;c+=1){let l=t[c]??``,u=c===t.length-1;o=i.join(o,l);let d;try{d=n.lstatSync(o)}catch(n){if(ai(n)){let n=t.slice(c);a=i.resolve(a,...n),_i({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,candidatePath:a,absolutePath:e.absolutePath});break}throw n}if(!d.isSymbolicLink()){a=i.resolve(a,l),_i({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,candidatePath:a,absolutePath:e.absolutePath});continue}if(r&&u){s=!0,a=i.resolve(a,l),_i({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,candidatePath:a,absolutePath:e.absolutePath});break}let f=Si(o);if(!oi(e.rootCanonicalPath,f))throw yi({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,symlinkPath:o});a=f,o=f}_i({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,candidatePath:a,absolutePath:e.absolutePath});let c=mi(e.absolutePath,s);return fi({absolutePath:e.absolutePath,canonicalPath:a,rootPath:e.rootPath,rootCanonicalPath:e.rootCanonicalPath,kind:c})}function ui(e){return e.outsideLexicalCanonicalPath??e.absolutePath}function di(e){if(!(e.skipLexicalRootCheck||e.lexicalInside)&&!oi(e.rootCanonicalPath,e.canonicalOutsideLexicalPath))throw vi({boundaryLabel:e.boundaryLabel,rootPath:e.rootPath,absolutePath:e.absolutePath})}function fi(e){return{absolutePath:e.absolutePath,canonicalPath:e.canonicalPath,rootPath:e.rootPath,rootCanonicalPath:e.rootCanonicalPath,relativePath:gi(e.rootCanonicalPath,e.canonicalPath),exists:e.kind.exists,kind:e.kind.kind}}function pi(e){let t=i.resolve(e),r=t,a=[];for(;!xi(r)&&!n.existsSync(r);){a.unshift(i.basename(r));let e=i.dirname(r);if(e===r)break;r=e}if(!n.existsSync(r))return t;try{let e=i.resolve(n.realpathSync(r));return a.length===0?e:i.resolve(e,...a)}catch{return t}}function mi(e,t){try{return{exists:!0,kind:hi(t?n.lstatSync(e):n.statSync(e))}}catch(e){if(ai(e))return{exists:!1,kind:`missing`};throw e}}function hi(e){return e.isFile()?`file`:e.isDirectory()?`directory`:e.isSymbolicLink()?`symlink`:`other`}function gi(e,t){let n=i.relative(i.resolve(e),i.resolve(t));return!n||n===`.`||n.startsWith(`..`)||i.isAbsolute(n)?``:n}function _i(e){if(!oi(e.rootCanonicalPath,e.candidatePath))throw Error(`Path resolves outside ${e.boundaryLabel} (${bi(e.rootCanonicalPath)}): ${bi(e.absolutePath)}`)}function vi(e){return Error(`Path escapes ${e.boundaryLabel} (${bi(e.rootPath)}): ${bi(e.absolutePath)}`)}function yi(e){return Error(`Symlink escapes ${e.boundaryLabel} (${bi(e.rootCanonicalPath)}): ${bi(e.symlinkPath)}`)}function bi(e){let t=p.homedir();return e.startsWith(t)?`~${e.slice(t.length)}`:e}function xi(e){return i.parse(e).root===e}function Si(e){try{return i.resolve(n.realpathSync(e))}catch(t){if(!ai(t))throw t;let r=n.readlinkSync(e);return pi(i.resolve(i.dirname(e),r))}}function Ci(e){return e===0||e===0n}function wi(e,t,n=process.platform){return e.ino===t.ino?e.dev===t.dev?!0:n===`win32`&&(Ci(e.dev)||Ci(t.dev)):!1}function Ti(e){let t=typeof e==`object`&&e&&`code`in e?String(e.code):``;return t===`ENOENT`||t===`ENOTDIR`||t===`ELOOP`}function Ei(e,t){return wi(e,t)}function Di(e){let t=e.ioFs??n,r=t.constants.O_RDONLY|(typeof t.constants.O_NOFOLLOW==`number`?t.constants.O_NOFOLLOW:0),i=null;try{if(e.rejectPathSymlink&&t.lstatSync(e.filePath).isSymbolicLink())return{ok:!1,reason:`validation`};let n=e.resolvedPath??t.realpathSync(e.filePath),a=t.lstatSync(n);if(!a.isFile()||e.rejectHardlinks&&a.nlink>1||e.maxBytes!==void 0&&a.size>e.maxBytes)return{ok:!1,reason:`validation`};i=t.openSync(n,r);let o=t.fstatSync(i);if(!o.isFile()||e.rejectHardlinks&&o.nlink>1||e.maxBytes!==void 0&&o.size>e.maxBytes||!Ei(a,o))return{ok:!1,reason:`validation`};let s={ok:!0,path:n,fd:i,stat:o};return i=null,s}catch(e){return Ti(e)?{ok:!1,reason:`path`,error:e}:{ok:!1,reason:`io`,error:e}}finally{i!==null&&t.closeSync(i)}}function Oi(e){return typeof e.openSync==`function`&&typeof e.closeSync==`function`&&typeof e.fstatSync==`function`&&typeof e.lstatSync==`function`&&typeof e.realpathSync==`function`&&typeof e.readFileSync==`function`&&typeof e.constants==`object`&&e.constants!==null}function ki(e){let t=e.ioFs??n,r=i.resolve(e.absolutePath),a,o;try{let t=ci({absolutePath:r,rootPath:e.rootPath,rootCanonicalPath:e.rootRealPath,boundaryLabel:e.boundaryLabel,skipLexicalRootCheck:e.skipLexicalRootCheck});a=t.canonicalPath,o=t.rootCanonicalPath}catch(e){return{ok:!1,reason:`validation`,error:e}}let s=Di({filePath:r,resolvedPath:a,rejectHardlinks:e.rejectHardlinks??!0,maxBytes:e.maxBytes,ioFs:t});return s.ok?{ok:!0,path:s.path,fd:s.fd,stat:s.stat,rootRealPath:o}:s}const Ai=`fased.plugin.json`,ji=[Ai];function D(e){return Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):[]}function Mi(e){if(!T(e))return;let t={};for(let[n,r]of Object.entries(e)){let e=n.trim();if(!e)continue;let i=D(r);i.length!==0&&(t[e]=i)}return Object.keys(t).length>0?t:void 0}function Ni(e){if(!T(e))return;let t={};for(let[n,r]of Object.entries(e)){let e=typeof n==`string`?n.trim():``,i=typeof r==`string`?r.trim():``;!e||!i||(t[e]=i)}return Object.keys(t).length>0?t:void 0}function Pi(e){if(!T(e))return;let t=D(e.memoryEmbeddingProviders),n=D(e.speechProviders),r=D(e.realtimeTranscriptionProviders),i=D(e.realtimeVoiceProviders),a=D(e.mediaUnderstandingProviders),o=D(e.imageGenerationProviders),s=D(e.videoGenerationProviders),c=D(e.musicGenerationProviders),l=D(e.webFetchProviders),u=D(e.webSearchProviders),d=D(e.tools),f={...t.length>0?{memoryEmbeddingProviders:t}:{},...n.length>0?{speechProviders:n}:{},...r.length>0?{realtimeTranscriptionProviders:r}:{},...i.length>0?{realtimeVoiceProviders:i}:{},...a.length>0?{mediaUnderstandingProviders:a}:{},...o.length>0?{imageGenerationProviders:o}:{},...s.length>0?{videoGenerationProviders:s}:{},...c.length>0?{musicGenerationProviders:c}:{},...l.length>0?{webFetchProviders:l}:{},...u.length>0?{webSearchProviders:u}:{},...d.length>0?{tools:d}:{}};return Object.keys(f).length>0?f:void 0}function Fi(e){if(!T(e))return;let t=D(e.modelPrefixes),n=D(e.modelPatterns),r={...t.length>0?{modelPrefixes:t}:{},...n.length>0?{modelPatterns:n}:{}};return Object.keys(r).length>0?r:void 0}function Ii(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(!T(n))continue;let e=typeof n.provider==`string`?n.provider.trim():``,r=typeof n.method==`string`?n.method.trim():``,i=typeof n.choiceId==`string`?n.choiceId.trim():``;if(!e||!r||!i)continue;let a=typeof n.choiceLabel==`string`?n.choiceLabel.trim():``,o=typeof n.choiceHint==`string`?n.choiceHint.trim():``,s=typeof n.assistantPriority==`number`&&Number.isFinite(n.assistantPriority)?n.assistantPriority:void 0,c=n.assistantVisibility===`manual-only`||n.assistantVisibility===`visible`?n.assistantVisibility:void 0,l=D(n.deprecatedChoiceIds),u=typeof n.groupId==`string`?n.groupId.trim():``,d=typeof n.groupLabel==`string`?n.groupLabel.trim():``,f=typeof n.groupHint==`string`?n.groupHint.trim():``,p=typeof n.optionKey==`string`?n.optionKey.trim():``,m=typeof n.cliFlag==`string`?n.cliFlag.trim():``,h=typeof n.cliOption==`string`?n.cliOption.trim():``,g=typeof n.cliDescription==`string`?n.cliDescription.trim():``,_=D(n.onboardingScopes).filter(e=>e===`text-inference`||e===`image-generation`);t.push({provider:e,method:r,choiceId:i,...a?{choiceLabel:a}:{},...o?{choiceHint:o}:{},...s===void 0?{}:{assistantPriority:s},...c?{assistantVisibility:c}:{},...l.length>0?{deprecatedChoiceIds:l}:{},...u?{groupId:u}:{},...d?{groupLabel:d}:{},...f?{groupHint:f}:{},...p?{optionKey:p}:{},...m?{cliFlag:m}:{},...h?{cliOption:h}:{},...g?{cliDescription:g}:{},..._.length>0?{onboardingScopes:_}:{}})}return t.length>0?t:void 0}function Li(e){if(!T(e))return;let t={};for(let[n,r]of Object.entries(e)){let e=n.trim();if(!e||!T(r))continue;let i=T(r.schema)?r.schema:null;if(!i)continue;let a=T(r.uiHints)?r.uiHints:void 0,o=typeof r.label==`string`?r.label.trim():``,s=typeof r.description==`string`?r.description.trim():``,c=D(r.preferOver);t[e]={schema:i,...a?{uiHints:a}:{},...o?{label:o}:{},...s?{description:s}:{},...c.length>0?{preferOver:c}:{}}}return Object.keys(t).length>0?t:void 0}function Ri(e){for(let t of ji){let r=i.join(e,t);if(n.existsSync(r))return r}return i.join(e,Ai)}function zi(e){let t=Ri(e),r=ki({absolutePath:t,rootPath:e,boundaryLabel:`plugin root`});if(!r.ok)return r.reason===`path`?{ok:!1,error:`plugin manifest not found: ${t}`,manifestPath:t}:{ok:!1,error:`unsafe plugin manifest path: ${t} (${r.reason})`,manifestPath:t};let i;try{i=m.parse(n.readFileSync(r.fd,`utf-8`))}catch(e){return{ok:!1,error:`failed to parse plugin manifest: ${String(e)}`,manifestPath:t}}finally{n.closeSync(r.fd)}if(!T(i))return{ok:!1,error:`plugin manifest must be an object`,manifestPath:t};let a=typeof i.id==`string`?i.id.trim():``;if(!a)return{ok:!1,error:`plugin manifest requires id`,manifestPath:t};let o=T(i.configSchema)?i.configSchema:null;if(!o)return{ok:!1,error:`plugin manifest requires configSchema`,manifestPath:t};let s=i.enabledByDefault===!0,c=i.runtimeOnly===!0,l=D(i.legacyPluginIds),u=D(i.autoEnableWhenConfiguredProviders),d=typeof i.kind==`string`?i.kind:void 0,f=typeof i.name==`string`?i.name.trim():void 0,p=typeof i.description==`string`?i.description.trim():void 0,h=typeof i.version==`string`?i.version.trim():void 0,g=D(i.channels),_=D(i.providers),v=Fi(i.modelSupport),ee=Mi(i.providerAuthEnvVars),y=Ni(i.providerAuthAliases),b=Ii(i.providerAuthChoices),te=D(i.skills),ne=Pi(i.contracts),re=Li(i.channelConfigs),ie;return T(i.uiHints)&&(ie=i.uiHints),{ok:!0,manifest:{id:a,configSchema:o,...c?{runtimeOnly:!0}:{},...s?{enabledByDefault:s}:{},...l.length>0?{legacyPluginIds:l}:{},...u.length>0?{autoEnableWhenConfiguredProviders:u}:{},kind:d,channels:g,providers:_,modelSupport:v,providerAuthEnvVars:ee,providerAuthAliases:y,providerAuthChoices:b,skills:te,name:f,description:p,version:h,uiHints:ie,contracts:ne,channelConfigs:re},manifestPath:t}}const Bi=[`index.ts`,`index.js`,`index.mjs`,`index.cjs`];function Vi(e){if(e)return e.fased}const Hi={memory:`memory-core`};function Ui(e){return Hi[e]}function Wi(e,t){let n={entry:!1,install:!1,allowlist:!1,loadPath:!1,memorySlot:!1},r=e.plugins??{},i=r.entries;if(i&&t in i){let{[t]:e,...r}=i;i=Object.keys(r).length>0?r:void 0,n.entry=!0}let a=r.installs,o=a?.[t];if(a&&t in a){let{[t]:e,...r}=a;a=Object.keys(r).length>0?r:void 0,n.install=!0}let s=r.allow;Array.isArray(s)&&s.includes(t)&&(s=s.filter(e=>e!==t),s.length===0&&(s=void 0),n.allowlist=!0);let c=r.load;if(o?.source===`path`&&o.sourcePath){let e=o.sourcePath,t=c?.paths;if(Array.isArray(t)&&t.includes(e)){let r=t.filter(t=>t!==e);c=r.length>0?{...c,paths:r}:void 0,n.loadPath=!0}}let l=r.slots;l?.memory===t&&(l={...l,memory:Ui(`memory`)},n.memorySlot=!0),l&&Object.keys(l).length===0&&(l=void 0);let u={...r,entries:i,installs:a,allow:s,load:c,slots:l};return u.entries===void 0&&delete u.entries,u.installs===void 0&&delete u.installs,u.allow===void 0&&delete u.allow,u.load===void 0&&delete u.load,u.slots===void 0&&delete u.slots,{config:{...e,plugins:Object.keys(u).length>0?u:void 0},actions:n}}const Gi=new Set([`__proto__`,`prototype`,`constructor`]);function Ki(e){return Gi.has(e)}const qi=`main`,Ji=/^[a-z0-9][a-z0-9_-]{0,63}$/i,Yi=/[^a-z0-9_-]+/g,Xi=/^-+/,Zi=/-+$/;function O(e){let t=(e??``).trim();return t?Ji.test(t)?t.toLowerCase():t.toLowerCase().replace(Yi,`-`).replace(Xi,``).replace(Zi,``).slice(0,64)||qi:qi}var Qi=class extends Error{constructor(e){super(ra(e)),this.name=`DuplicateAgentDirError`,this.duplicates=e}};function $i(e){let t=i.resolve(e);return process.platform===`darwin`||process.platform===`win32`?t.toLowerCase():t}function ea(e){let t=new Set,n=Array.isArray(e.agents?.list)?e.agents?.list:[],r=n.find(e=>e?.default)?.id??n[0]?.id??qi;t.add(O(r));for(let e of n)e?.id&&t.add(O(e.id));let i=e.bindings;if(Array.isArray(i))for(let e of i){let n=e?.agentId;typeof n==`string`&&n.trim()&&t.add(O(n))}return[...t]}function ta(e,t,n){let r=O(t),a=(Array.isArray(e.agents?.list)?e.agents?.list.find(e=>O(e.id)===r)?.agentDir:void 0)?.trim();if(a)return E(a);let o=n?.env??process.env,s=Be(o,n?.homedir??(()=>S(o,p.homedir)));return i.join(s,`agents`,r,`agent`)}function na(e,t){let n=new Map;for(let r of ea(e)){let i=ta(e,r,t),a=$i(i),o=n.get(a);o?o.agentIds.push(r):n.set(a,{agentDir:i,agentIds:[r]})}return[...n.values()].filter(e=>e.agentIds.length>1)}function ra(e){return[`Duplicate agentDir detected (multi-agent config).`,`Each agent must have a unique agentDir; sharing it causes auth/session state collisions and token invalidation.`,``,`Conflicts:`,...e.map(e=>`- ${e.agentDir}: ${e.agentIds.map(e=>`"${e}"`).join(`, `)}`),``,`Fix: remove the shared agents.list[].agentDir override (or give each agent its own directory).`,`If you want to share credentials, copy auth-profiles.json instead of sharing the entire agentDir.`].join(`
2
- `)}async function ia(e,t){let n=`${e}.bak`;await t.unlink(`${n}.4`).catch(()=>{});for(let e=3;e>=1;--e)await t.rename(`${n}.${e}`,`${n}.${e+1}`).catch(()=>{});await t.rename(n,`${n}.1`).catch(()=>{})}function aa(e){if(typeof e==`string`)return e.trim()||void 0;if(!(!e||typeof e!=`object`))return e.primary?.trim()||void 0}const k=[`off`,`minimal`,`low`,`medium`,`high`],oa=[...k,`xhigh`],sa=[`off`,`low`,`medium`,`high`,`xhigh`,`max`],ca=[...sa,`ultra`],la=[`openai/gpt-5.6`,`openai/gpt-5.6-terra`,`openai/gpt-5.6-luna`,`openai/gpt-5.5`,`openai/gpt-5.4`,`openai/gpt-5.4-mini`,`openai/gpt-5.4-nano`,`openai-codex/gpt-5.6-sol`,`openai-codex/gpt-5.6-terra`,`openai-codex/gpt-5.6-luna`,`openai-codex/gpt-5.5`,`openai-codex/gpt-5.4`,`openai-codex/gpt-5.4-mini`,`openai-codex/gpt-5.3-codex-spark`,`github-copilot/gpt-5.5`,`github-copilot/gpt-5.4`,`github-copilot/gpt-5.4-mini`,`github-copilot/gpt-5.3-codex-spark`],ua=new Set(la.map(e=>e.toLowerCase())),da=new Set(la.map(e=>e.split(`/`)[1]?.toLowerCase()).filter(e=>!!e)),fa=new Set([`openai/gpt-5.6`,`openai/gpt-5.6-sol`,`openai/gpt-5.6-terra`,`openai/gpt-5.6-luna`,`openai-codex/gpt-5.6-sol`,`openai-codex/gpt-5.6-terra`,`openai-codex/gpt-5.6-luna`].map(e=>e.toLowerCase())),pa=new Set([`gpt-5.6`,`gpt-5.6-sol`,`gpt-5.6-terra`,`gpt-5.6-luna`]);function ma(e){if(!e)return``;let t=e.trim().toLowerCase();return t===`z.ai`||t===`z-ai`?`zai`:t}function ha(e){if(!e)return;let t=e.trim().toLowerCase(),n=t.replace(/[\s_-]+/g,``);if(n===`xhigh`||n===`extrahigh`)return`xhigh`;if(t===`max`)return`max`;if(t===`ultra`)return`ultra`;if(t===`off`)return`off`;if([`on`,`enable`,`enabled`].includes(t))return`low`;if([`min`,`minimal`].includes(t))return`minimal`;if([`low`,`thinkhard`,`think-hard`,`think_hard`].includes(t))return`low`;if([`mid`,`med`,`medium`,`thinkharder`,`think-harder`,`harder`].includes(t))return`medium`;if([`high`,`ultrathink`,`think-hard`,`thinkhardest`,`highest`].includes(t))return`high`;if(t===`think`)return`minimal`}function ga(e,t){let n=t?.trim().toLowerCase();if(!n)return!1;let r=e?.trim().toLowerCase();return r?fa.has(`${r}/${n}`):pa.has(n)}function _a(e,t){let n=t?.trim().toLowerCase();if(!n)return!1;let r=e?.trim().toLowerCase();return r?ua.has(`${r}/${n}`):da.has(n)}function va(e){let t=new Set,n=[];for(let r of e??[]){let e=ha(r);!e||t.has(e)||(t.add(e),n.push(e))}return n}function ya(e,t){let n=ma(e),r=t?.trim().toLowerCase();return n===`openai-codex`&&(r===`gpt-5.6-sol`||r===`gpt-5.6-terra`)?[...ca]:ga(e,t)?[...sa]:_a(e,t)?[...oa]:[...k]}function ba(e){let t=e?.trim().toLowerCase()??``;return t.includes(`fable-5`)||t.includes(`opus-4-8`)||t.includes(`opus-4.8`)||t.includes(`opus-4-6`)||t.includes(`opus-4.6`)||t.includes(`opus-4-7`)||t.includes(`opus-4.7`)||t.includes(`sonnet-5`)||t.includes(`sonnet-4-6`)||t.includes(`sonnet-4.6`)||t.includes(`sonnet-4-7`)||t.includes(`sonnet-4.7`)}function xa(e,t){let n=ma(e);return n===`openai`||n===`openai-codex`||n===`github-copilot`||n===`copilot-proxy`?{thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:n===`anthropic`?{thinkingMode:ba(t)?`anthropic-adaptive`:`anthropic-thinking-budget`,reasoningBudgetSupported:!ba(t)}:n===`google`||n===`google-gemini-cli`?{thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}:n===`zai`?{thinkingMode:`zai-binary`,reasoningBudgetSupported:!1}:n===`qwen`||n===`qwen-coding-plan`?{thinkingMode:`qwen-thinking`,reasoningBudgetSupported:!0}:n===`moonshot`||n===`kimi-coding`?{thinkingMode:`moonshot-thinking`,reasoningBudgetSupported:!1}:{thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1}}function Sa(e,t){let n=ma(e),r=t?.trim().toLowerCase()??``;return!n||!r?!1:n===`openai`||n===`openai-codex`||n===`github-copilot`||n===`copilot-proxy`?/^gpt-5(?:[.-]|$)/.test(r):n===`anthropic`?r.startsWith(`claude-`)||r.includes(`claude-`):n===`google`||n===`google-gemini-cli`?r.startsWith(`gemini-`):n===`zai`?r.startsWith(`glm-`):n===`qwen`||n===`qwen-coding-plan`?r.includes(`qwen`):n===`moonshot`||n===`kimi-coding`?r.includes(`kimi`):n===`minimax`||n===`minimax-cn`?r.includes(`minimax-m2`):[`openrouter`,`vercel-ai-gateway`,`opencode`,`huggingface`,`venice`,`together`,`synthetic`,`litellm`].includes(n)?/(gpt-5|claude-|gemini-|grok-|qwen|kimi|glm-|deepseek-r1|reasoning|thinking)/.test(r):!1}function Ca(e){let t=va(e.capabilities?.thinkingLevels),n=t.length>0||typeof e.capabilities?.thinkingMode==`string`||typeof e.capabilities?.defaultThinkingLevel==`string`;if(e.capabilities?.fixedReasoning===!0&&!n||!(e.reasoning===!0||e.reasoning!==!1&&Sa(e.provider,e.model))&&!n)return null;let r=xa(e.provider,e.model),i=r.thinkingMode===`zai-binary`?[`off`,`low`]:ya(e.provider,e.model),a=t.length>0?t:i,o=ha(e.capabilities?.defaultThinkingLevel);return{thinkingLevels:a,defaultThinkingLevel:o&&a.includes(o)?o:a.includes(`low`)?`low`:a[0]??`off`,thinkingMode:e.capabilities?.thinkingMode??r.thinkingMode,reasoningBudgetSupported:e.capabilities?.reasoningBudgetSupported??r.reasoningBudgetSupported}}const wa=`cloudflare-ai-gateway`,Ta=`claude-sonnet-5`;`${wa}${Ta}`;const Ea={input:0,output:0,cacheRead:0,cacheWrite:0},Da={tools:!0,json:!0},Oa={thinkingLevels:[...k],defaultThinkingLevel:`low`,reasoningBudgetSupported:!0},ka=[{id:Ta,name:`Claude Sonnet 5`,reasoning:!0,input:[`text`,`image`],cost:Ea,contextWindow:1e6,maxTokens:128e3,capabilities:{...Da,...Oa,thinkingMode:`anthropic-adaptive`}},{id:`claude-opus-4-8`,name:`Claude Opus 4.8`,reasoning:!0,input:[`text`,`image`],cost:Ea,contextWindow:1e6,maxTokens:128e3,capabilities:{...Da,...Oa,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1}},{id:`claude-haiku-4-5`,name:`Claude Haiku 4.5`,reasoning:!0,input:[`text`,`image`],cost:Ea,contextWindow:2e5,maxTokens:64e3,capabilities:{...Da,...Oa,thinkingMode:`anthropic-thinking-budget`}}],Aa=ka.map(e=>e.id).map(e=>`${wa}/${e}`);function ja(e){let t=e?.id?.trim()||Ta,n=ka.find(e=>e.id===t)??ka[0];return{id:t,name:e?.name??n.name,api:`anthropic-messages`,reasoning:e?.reasoning??n.reasoning,input:e?.input??[...n.input],cost:{...n.cost},contextWindow:n.contextWindow,maxTokens:n.maxTokens,capabilities:n.capabilities?{...n.capabilities}:void 0}}function Ma(e=wa){return Object.fromEntries(ka.map(t=>[`${e}/${t.id}`.toLowerCase(),t.capabilities?{...t.capabilities}:{}]))}const Na=`openai/gpt-oss-120b`;`${Na}`;const A={tools:!0,json:!0},Pa=[{id:Na,name:`GPT-OSS 120B`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.15,output:.75,cacheRead:0,cacheWrite:0},capabilities:A},{id:`deepseek-ai/DeepSeek-V4-Pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],contextWindow:1048576,maxTokens:8192,cost:{input:1.69,output:3.38,cacheRead:0,cacheWrite:0},capabilities:A},{id:`deepseek-ai/DeepSeek-V4-Flash`,name:`DeepSeek V4 Flash`,reasoning:!1,input:[`text`],contextWindow:1048576,maxTokens:8192,cost:{input:.14,output:.28,cacheRead:0,cacheWrite:0},capabilities:A},{id:`moonshotai/Kimi-K2.6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.95,output:4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`MiniMaxAI/MiniMax-M2.7`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],contextWindow:204800,maxTokens:8192,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0},capabilities:A},{id:`zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:8192,cost:{input:1.4,output:4.4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3.6-35B-A3B`,name:`Qwen3.6 35B A3B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.15,output:.95,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.6,output:3.6,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3-Coder-Next`,name:`Qwen3 Coder Next`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.2,output:1.5,cacheRead:0,cacheWrite:0},capabilities:{tools:!0,json:!1}},{id:`Qwen/Qwen3-Coder-480B-A35B-Instruct`,name:`Qwen3 Coder 480B A35B Instruct`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.3,output:1.3,cacheRead:0,cacheWrite:0},capabilities:A},{id:`google/gemma-4-31B-it`,name:`Gemma 4 31B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.14,output:.4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`google/gemma-4-26B-A4B-it`,name:`Gemma 4 26B A4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.13,output:.4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`openai/gpt-oss-20b`,name:`GPT-OSS 20B`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.1,output:.5,cacheRead:0,cacheWrite:0},capabilities:A},{id:`deepseek-ai/DeepSeek-R1`,name:`DeepSeek R1`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:8192,cost:{input:.7,output:2.5,cacheRead:0,cacheWrite:0},capabilities:A},{id:`deepseek-ai/DeepSeek-V3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:163840,maxTokens:8192,cost:{input:.269,output:.4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`meta-llama/Llama-3.3-70B-Instruct`,name:`Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.59,output:.79,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3-VL-235B-A22B-Instruct`,name:`Qwen3 VL 235B A22B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:8192,cost:{input:.3,output:1.5,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3-235B-A22B-Instruct-2507`,name:`Qwen3 235B A22B Instruct 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.09,output:.58,cacheRead:0,cacheWrite:0},capabilities:A},{id:`google/gemma-3n-E4B-it`,name:`Gemma 3N E4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:32768,maxTokens:8192,cost:{input:.06,output:.12,cacheRead:0,cacheWrite:0},capabilities:{tools:!1,json:!0}},{id:`inclusionAI/Ling-2.6-1T`,name:`Ling 2.6 1T`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.3,output:2.5,cacheRead:0,cacheWrite:0},capabilities:A}],Fa=Pa.map(e=>e.id).map(e=>`huggingface/${e}`);function Ia(e){return{...e.capabilities?{...e.capabilities}:{},...e.reasoning?{fixedReasoning:!0}:{}}}function La(e){let t=Ia(e);return{id:e.id,name:e.name,api:`openai-completions`,reasoning:e.reasoning,input:[...e.input],cost:{...e.cost},contextWindow:e.contextWindow,maxTokens:e.maxTokens,capabilities:t}}function Ra(e=`huggingface`){return Object.fromEntries(Pa.map(t=>[`${e}/${t.id}`.toLowerCase(),Ia(t)]))}const za=[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.4-nano`,`gpt-5.3-codex-spark`,`claude-fable-5`,`claude-opus-4-8`,`claude-sonnet-5`,`claude-haiku-4-5`,`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`,`minimax-m2.7`,`glm-5.2`,`kimi-k2.6`],Ba=za.map(e=>`opencode/${e}`);function Va(e){let t=e.trim().toLowerCase();return t.startsWith(`claude-`)?{provider:`anthropic`,model:t}:t.startsWith(`gemini-`)?{provider:`google`,model:t}:t.startsWith(`glm-`)?{provider:`zai`,model:t}:t.startsWith(`kimi-`)?{provider:`moonshot`,model:t}:t.startsWith(`qwen`)?{provider:`qwen`,model:t}:t.startsWith(`gpt-`)?{provider:`openai`,model:t}:{provider:`opencode`,model:t}}function Ha(e){let t=Va(e),n=Ca({provider:t.provider,model:t.model,reasoning:!0});return{tools:!0,json:!0,...n?{thinkingLevels:n.thinkingLevels,defaultThinkingLevel:n.defaultThinkingLevel,thinkingMode:n.thinkingMode,reasoningBudgetSupported:n.reasoningBudgetSupported}:{}}}function Ua(e){return Object.fromEntries(e.map(e=>[e,Ha(e.replace(/^opencode\//,``))]))}const Wa=`hf:MiniMaxAI/MiniMax-M2.5`;`${Wa}`;const Ga={input:0,output:0,cacheRead:0,cacheWrite:0},j={tools:!0,json:!0},Ka=[{id:`hf:zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:j},{id:`hf:moonshotai/Kimi-K2.6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:65536,capabilities:j},{id:Wa,name:`MiniMax M2.5`,reasoning:!1,input:[`text`],contextWindow:191488,maxTokens:65536,capabilities:j},{id:`hf:zai-org/GLM-4.7-Flash`,name:`GLM-4.7 Flash`,reasoning:!1,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:j},{id:`hf:zai-org/GLM-5`,name:`GLM-5`,reasoning:!0,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:j},{id:`hf:nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4`,name:`NVIDIA Nemotron 3 Super 120B`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:65536,capabilities:j},{id:`hf:zai-org/GLM-4.7`,name:`GLM-4.7`,reasoning:!1,input:[`text`],contextWindow:202752,maxTokens:65536,capabilities:j},{id:`hf:deepseek-ai/DeepSeek-V3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:159e3,maxTokens:8192,capabilities:j},{id:`hf:openai/gpt-oss-120b`,name:`GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:j},{id:`hf:deepseek-ai/DeepSeek-R1-0528`,name:`DeepSeek R1 0528`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:j},{id:`hf:deepseek-ai/DeepSeek-V3`,name:`DeepSeek V3`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:j},{id:`hf:meta-llama/Llama-3.3-70B-Instruct`,name:`Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:j},{id:`hf:moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:j},{id:`hf:nvidia/Kimi-K2.5-NVFP4`,name:`Kimi K2.5 NVFP4`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:j},{id:`hf:Qwen/Qwen3-235B-A22B-Thinking-2507`,name:`Qwen3 235B A22B Thinking 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,capabilities:j},{id:`hf:Qwen/Qwen3-Coder-480B-A35B-Instruct`,name:`Qwen3 Coder 480B A35B Instruct`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,capabilities:j},{id:`hf:Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:j}],qa=Ka.map(e=>e.id);function Ja(e){return{id:e.id,name:e.name,reasoning:e.reasoning,input:[...e.input],cost:{...Ga},contextWindow:e.contextWindow,maxTokens:e.maxTokens,capabilities:e.capabilities?{...e.capabilities}:void 0}}function Ya(e=`synthetic`){return Object.fromEntries(Ka.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}const Xa=`moonshotai/Kimi-K2.6`;`${Xa}`;const M={tools:!0,json:!0},Za={tools:!1,json:!1},Qa=[{id:Xa,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:16384,cost:{input:1.2,output:4.5,cacheRead:.2,cacheWrite:1.2},capabilities:{...M,video:!0}},{id:`moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.5,output:2.8,cacheRead:.5,cacheWrite:2.8},capabilities:M},{id:`MiniMaxAI/MiniMax-M2.7`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:32768,cost:{input:.3,output:1.2,cacheRead:.06,cacheWrite:.3},capabilities:M},{id:`zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:128e3,cost:{input:1.4,output:4.4,cacheRead:1.4,cacheWrite:1.4},capabilities:M},{id:`zai-org/GLM-5`,name:`GLM-5`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:128e3,cost:{input:1,output:3.2,cacheRead:1,cacheWrite:1},capabilities:M},{id:`Qwen/Qwen3.6-Plus`,name:`Qwen3.6 Plus`,reasoning:!0,input:[`text`],contextWindow:1e6,maxTokens:32768,cost:{input:.5,output:3,cacheRead:.5,cacheWrite:.5},capabilities:Za},{id:`Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.6,output:3.6,cacheRead:.6,cacheWrite:.6},capabilities:M},{id:`Qwen/Qwen3.5-9B`,name:`Qwen3.5 9B`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.1,output:.15,cacheRead:.1,cacheWrite:.1},capabilities:M},{id:`openai/gpt-oss-120b`,name:`GPT-OSS 120B`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:32768,cost:{input:.15,output:.6,cacheRead:.15,cacheWrite:.15},capabilities:M},{id:`openai/gpt-oss-20b`,name:`GPT-OSS 20B`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:32768,cost:{input:.05,output:.2,cacheRead:.05,cacheWrite:.05},capabilities:M},{id:`deepseek-ai/DeepSeek-V4-Pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],contextWindow:512e3,maxTokens:32768,cost:{input:2.1,output:4.4,cacheRead:.2,cacheWrite:2.1},capabilities:M},{id:`deepseek-ai/DeepSeek-R1`,name:`DeepSeek R1 0528`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:32768,cost:{input:3,output:7,cacheRead:3,cacheWrite:3},capabilities:Za},{id:`deepseek-ai/DeepSeek-V3.1`,name:`DeepSeek V3.1`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:32768,cost:{input:.6,output:1.7,cacheRead:.6,cacheWrite:.6},capabilities:Za},{id:`Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8`,name:`Qwen3 Coder 480B A35B Instruct FP8`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:32768,cost:{input:2,output:2,cacheRead:2,cacheWrite:2},capabilities:M},{id:`Qwen/Qwen3-235B-A22B-Instruct-2507-tput`,name:`Qwen3 235B A22B Instruct 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:32768,cost:{input:.2,output:.6,cacheRead:.2,cacheWrite:.2},capabilities:M},{id:`Qwen/Qwen3-Coder-Next-FP8`,name:`Qwen3 Coder Next FP8`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:32768,cost:{input:.5,output:1.2,cacheRead:.5,cacheWrite:.5},capabilities:Za},{id:`meta-llama/Llama-3.3-70B-Instruct-Turbo`,name:`Llama 3.3 70B Instruct Turbo`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.88,output:.88,cacheRead:.88,cacheWrite:.88},capabilities:M},{id:`essentialai/rnj-1-instruct`,name:`Rnj-1 Instruct`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:8192,cost:{input:.15,output:.15,cacheRead:.15,cacheWrite:.15},capabilities:M},{id:`google/gemma-4-31B-it`,name:`Gemma 4 31B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.2,output:.5,cacheRead:.2,cacheWrite:.2},capabilities:M},{id:`google/gemma-3n-E4B-it`,name:`Gemma 3N E4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:32768,maxTokens:8192,cost:{input:.06,output:.12,cacheRead:.06,cacheWrite:.06},capabilities:{tools:!1,json:!0}}],$a=Qa.map(e=>e.id).map(e=>`together/${e}`);function eo(e){return{id:e.id,name:e.name,api:`openai-completions`,reasoning:e.reasoning,input:[...e.input],cost:{...e.cost},contextWindow:e.contextWindow,maxTokens:e.maxTokens,capabilities:e.capabilities?{...e.capabilities}:void 0}}function to(e=`together`){return Object.fromEntries(Qa.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}const no=`zai-org-glm-5-1`;`${no}`;const N={thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1},P={tools:!0,json:!0},ro={tools:!0,json:!1},io=[{id:no,name:`GLM 5.1`,reasoning:!0,input:[`text`],cost:{input:1.75,output:5.5,cacheRead:.325,cacheWrite:0},contextWindow:2e5,maxTokens:24e3,capabilities:{...P,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`venice-uncensored-1-2`,name:`Venice Uncensored 1.2`,reasoning:!1,input:[`text`,`image`],cost:{input:.2,output:.9,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:8192,capabilities:P},{id:`qwen-3-6-plus`,name:`Qwen 3.6 Plus Uncensored`,reasoning:!0,input:[`text`,`image`],cost:{input:.625,output:3.75,cacheRead:.0625,cacheWrite:.78},contextWindow:1e6,maxTokens:65536,capabilities:{...P,video:!0,fixedReasoning:!0}},{id:`qwen3-5-397b-a17b`,name:`Qwen 3.5 397B`,reasoning:!0,input:[`text`,`image`],cost:{input:.75,output:4.5,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:32768,capabilities:{...P,video:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`qwen3-235b-a22b-thinking-2507`,name:`Qwen 3 235B A22B Thinking`,reasoning:!0,input:[`text`],cost:{input:.45,output:3.5,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:16384,capabilities:{...P,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`qwen3-coder-480b-a35b-instruct-turbo`,name:`Qwen 3 Coder 480B Turbo`,reasoning:!1,input:[`text`],cost:{input:.35,output:1.5,cacheRead:.04,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:P},{id:`qwen3-vl-235b-a22b`,name:`Qwen3 VL 235B`,reasoning:!1,input:[`text`,`image`],cost:{input:.25,output:1.5,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:16384,capabilities:P},{id:`deepseek-v4-pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],cost:{input:1.73,output:3.796,cacheRead:.33,cacheWrite:0},contextWindow:1e6,maxTokens:32768,capabilities:{...P,fixedReasoning:!0}},{id:`deepseek-v4-flash`,name:`DeepSeek V4 Flash`,reasoning:!0,input:[`text`],cost:{input:.17,output:.35,cacheRead:.028,cacheWrite:0},contextWindow:1e6,maxTokens:32768,capabilities:{...P,fixedReasoning:!0}},{id:`kimi-k2-6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],cost:{input:.85,output:4.655,cacheRead:.22,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:{...P,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...N}},{id:`claude-opus-4-7`,name:`Claude Opus 4.7`,reasoning:!0,input:[`text`,`image`],cost:{input:6,output:30,cacheRead:.6,cacheWrite:7.5},contextWindow:1e6,maxTokens:128e3,capabilities:{...P,fixedReasoning:!0}},{id:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`,reasoning:!0,input:[`text`,`image`],cost:{input:3.6,output:18,cacheRead:.36,cacheWrite:4.5},contextWindow:1e6,maxTokens:64e3,capabilities:{...P,fixedReasoning:!0}},{id:`openai-gpt-55`,name:`GPT-5.5`,reasoning:!0,input:[`text`,`image`],cost:{input:6.25,output:37.5,cacheRead:.625,cacheWrite:0},contextWindow:1e6,maxTokens:131072,capabilities:{...P,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...N}},{id:`openai-gpt-55-pro`,name:`GPT-5.5 Pro`,reasoning:!0,input:[`text`,`image`],cost:{input:37.5,output:225,cacheRead:0,cacheWrite:0},contextWindow:1e6,maxTokens:128e3,capabilities:{...P,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`medium`,...N}},{id:`openai-gpt-54`,name:`GPT-5.4`,reasoning:!0,input:[`text`,`image`],cost:{input:3.13,output:18.8,cacheRead:.313,cacheWrite:0},contextWindow:1e6,maxTokens:131072,capabilities:{...P,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...N}},{id:`openai-gpt-54-mini`,name:`GPT-5.4 Mini`,reasoning:!0,input:[`text`,`image`],cost:{input:.9375,output:5.625,cacheRead:.09375,cacheWrite:0},contextWindow:4e5,maxTokens:128e3,capabilities:{...P,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...N}},{id:`gemini-3-1-pro-preview`,name:`Gemini 3.1 Pro Preview`,reasoning:!0,input:[`text`,`image`],cost:{input:2.5,output:15,cacheRead:.5,cacheWrite:.5},contextWindow:1e6,maxTokens:32768,capabilities:{...P,audio:!0,video:!0,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`grok-4-20`,name:`Grok 4.20`,reasoning:!0,input:[`text`,`image`],cost:{input:1.42,output:2.83,cacheRead:.23,cacheWrite:0},contextWindow:2e6,maxTokens:128e3,capabilities:{...P,fixedReasoning:!0}},{id:`minimax-m27`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],cost:{input:.375,output:1.5,cacheRead:.075,cacheWrite:0},contextWindow:198e3,maxTokens:32768,capabilities:{...ro,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`openai-gpt-oss-120b`,name:`OpenAI GPT OSS 120B`,reasoning:!0,input:[`text`],cost:{input:.07,output:.3,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:16384,capabilities:{...ro,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`google-gemma-4-31b-it`,name:`Google Gemma 4 31B Instruct`,reasoning:!0,input:[`text`,`image`],cost:{input:.175,output:.5,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:8192,capabilities:{...P,video:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`mistral-small-2603`,name:`Mistral Small 4`,reasoning:!0,input:[`text`,`image`],cost:{input:.1875,output:.75,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:{...P,thinkingLevels:[`off`,`high`],defaultThinkingLevel:`high`,...N}}],ao=io.map(e=>e.id).map(e=>`venice/${e}`);function oo(e){let t=e.capabilities,n=!!t?.thinkingLevels?.length;return{id:e.id,name:e.name,api:`openai-completions`,reasoning:e.reasoning,input:[...e.input],cost:{...e.cost},contextWindow:e.contextWindow,maxTokens:e.maxTokens,compat:{supportsUsageInStreaming:!1,supportsReasoningEffort:n},capabilities:t?{...t}:void 0}}function so(e=`venice`){return Object.fromEntries(io.map(t=>[`${e}/${t.id}`.toLowerCase(),t.capabilities?{...t.capabilities}:{}]))}const co=[{id:`openai/gpt-5.5`,contextWindow:1e6,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`web-search`,`implicit-caching`,`file-input`,`vision`]},{id:`openai/gpt-5.4`,contextWindow:1e6,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`,`web-search`]},{id:`openai/gpt-5.4-mini`,contextWindow:4e5,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`,`web-search`]},{id:`openai/gpt-5.4-nano`,contextWindow:4e5,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`web-search`,`vision`,`file-input`]},{id:`anthropic/claude-fable-5`,contextWindow:1e6,maxTokens:128e3,tags:[`tool-use`,`reasoning`,`vision`,`file-input`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-opus-4.8`,contextWindow:1e6,maxTokens:128e3,tags:[`tool-use`,`reasoning`,`vision`,`file-input`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-sonnet-5`,contextWindow:1e6,maxTokens:128e3,tags:[`file-input`,`reasoning`,`tool-use`,`vision`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-haiku-4.5`,contextWindow:2e5,maxTokens:64e3,tags:[`file-input`,`reasoning`,`tool-use`,`vision`,`explicit-caching`]},{id:`google/gemini-3.5-flash`,contextWindow:1e6,maxTokens:65e3,tags:[`reasoning`,`tool-use`,`file-input`,`vision`,`web-search`,`implicit-caching`]},{id:`google/gemini-3.1-pro-preview`,contextWindow:1e6,maxTokens:64e3,tags:[`file-input`,`tool-use`,`reasoning`,`vision`,`web-search`,`implicit-caching`]},{id:`google/gemini-3.1-flash-lite`,contextWindow:1e6,maxTokens:65e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`,`web-search`]},{id:`xai/grok-4.3`,contextWindow:1e6,maxTokens:1e6,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`,`web-search`]},{id:`xai/grok-build-0.1`,contextWindow:256e3,maxTokens:256e3,tags:[`tool-use`,`implicit-caching`]},{id:`mistral/mistral-medium-3.5`,contextWindow:256e3,maxTokens:256e3,tags:[`reasoning`,`tool-use`,`vision`]},{id:`minimax/minimax-m2.7`,contextWindow:204800,maxTokens:131e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`]},{id:`minimax/minimax-m2.7-highspeed`,contextWindow:204800,maxTokens:131100,tags:[`reasoning`,`tool-use`,`implicit-caching`,`vision`]},{id:`moonshotai/kimi-k2.6`,contextWindow:262e3,maxTokens:262e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`]}],lo=co.map(e=>e.id),uo=lo.map(e=>`vercel-ai-gateway/${e}`),fo={anthropic:`Anthropic`,google:`Google`,minimax:`MiniMax`,mistral:`Mistral`,moonshotai:`Moonshot`,openai:`OpenAI`,xai:`xAI`};function po(e){let t=e.trim().replace(/^vercel-ai-gateway\//,``).toLowerCase();return co.find(e=>e.id.toLowerCase()===t)}function mo(e){let[t,...n]=e.trim().replace(/^vercel-ai-gateway\//,``).split(`/`),r=n.join(`/`);switch(t){case`anthropic`:return{provider:`anthropic`,model:r};case`google`:return{provider:`google`,model:r};case`minimax`:return{provider:`minimax`,model:r};case`moonshotai`:return{provider:`moonshot`,model:r};case`openai`:return{provider:`openai`,model:r};case`xai`:return{provider:`xai`,model:r};default:return{provider:`vercel-ai-gateway`,model:e}}}function ho(e){let t=po(e);if(!t)return;let n=new Set(t.tags.map(e=>e.toLowerCase())),r=mo(t.id),i=n.has(`reasoning`)?Ca({provider:r.provider,model:r.model,reasoning:!0}):null;return{tools:n.has(`tool-use`),...i?{thinkingLevels:i.thinkingLevels,defaultThinkingLevel:i.defaultThinkingLevel,thinkingMode:i.thinkingMode,reasoningBudgetSupported:i.reasoningBudgetSupported}:{}}}function go(e){return Object.fromEntries(e.flatMap(e=>{let t=ho(e);return t?[[e,t]]:[]}))}function _o(e){let[t,...n]=e.split(`/`),r=fo[t??``]??t,i=n.join(`/`);return!r||!i?e:`${r} ${i.replace(/\bapi\b/gi,`API`).replace(/\bgpt\b/gi,`GPT`).replace(/\bxai\b/gi,`xAI`).replace(/[._-]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}`}function vo(e){let t=po(e),n=new Set(t?.tags.map(e=>e.toLowerCase())??[]),r=ho(e);return{id:e,name:_o(e),reasoning:n.has(`reasoning`),input:n.has(`vision`)?[`text`,`image`]:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:t?.contextWindow??2e5,maxTokens:t?.maxTokens??8192,api:`openai-completions`,...r?{capabilities:r}:{}}}const yo={tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1},bo={...yo,audio:!0,video:!0},xo=[{id:`mimo-v2.5-pro`,name:`Xiaomi MiMo V2.5 Pro`,reasoning:!0,input:[`text`,`image`],cost:{input:1,output:3,cacheRead:.2,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:yo},{id:`mimo-v2.5`,name:`Xiaomi MiMo V2.5`,reasoning:!0,input:[`text`,`image`],cost:{input:.4,output:2,cacheRead:.08,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:bo},{id:`mimo-v2-pro`,name:`Xiaomi MiMo V2 Pro`,reasoning:!0,input:[`text`],cost:{input:1,output:3,cacheRead:.2,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:yo},{id:`mimo-v2-omni`,name:`Xiaomi MiMo V2 Omni`,reasoning:!0,input:[`text`,`image`],cost:{input:.4,output:2,cacheRead:.08,cacheWrite:0},contextWindow:262144,maxTokens:128e3,capabilities:bo},{id:`mimo-v2-flash`,name:`Xiaomi MiMo V2 Flash`,reasoning:!0,input:[`text`],cost:{input:.11,output:.32,cacheRead:.01,cacheWrite:0},contextWindow:262144,maxTokens:64e3,capabilities:yo}],So=xo.map(e=>e.id);function Co(e){let t=xo.find(t=>t.id===e);if(!t)throw Error(`Unknown Xiaomi model: ${e}`);return{...t,input:[...t.input],cost:{...t.cost},capabilities:t.capabilities?{...t.capabilities}:void 0}}function wo(e=`xiaomi`){return Object.fromEntries(xo.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}const To=`default`;`${To}`,[{id:To,name:`LiteLLM proxy default`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},capabilities:{}}].map(e=>e.id).map(e=>`litellm/${e}`);const Eo=`openai.anthropic.chutes.ollama.lmstudio.vllm.minimax.moonshot.google.xai.mistral.volcengine.byteplus.openrouter.qwen.zai.qianfan.copilot.ai-gateway.opencode-zen.xiaomi.synthetic.together.huggingface.venice.litellm.cloudflare-ai-gateway.custom`.split(`.`);new Map(Eo.map((e,t)=>[e,t]));const Do=`openai`,Oo=`openai-codex`,ko=`anthropic`,Ao=`chutes`,jo=`ollama`,Mo=`lmstudio`,No=`vllm`,Po=`minimax`,Fo=`minimax-cn`,Io=`minimax-portal`,F=`moonshot`,Lo=`kimi-coding`,Ro=`google`,zo=`google-gemini-cli`,Bo=`mistral`,Vo=`volcengine`,Ho=`volcengine-coding`,Uo=`volcengine-plan`,Wo=`byteplus`,Go=`byteplus-coding`,Ko=`byteplus-plan`,qo=`openrouter`,Jo=`qwen`,Yo=`qwen-coding-plan`,Xo=`qianfan`,Zo=`github-copilot`,Qo=`copilot-proxy`,$o=`vercel-ai-gateway`,es=`opencode`,ts=`xiaomi`,ns=`synthetic`,rs=`together`,is=`huggingface`,as=`venice`,os=`litellm`,ss=`custom`,cs=[`gpt-5.6`,`gpt-5.6-terra`,`gpt-5.6-luna`,`gpt-5.5`],ls=[`gpt-5.6-sol`,`gpt-5.6-terra`,`gpt-5.6-luna`,`gpt-5.5`],us=[`gpt-5.3-codex`,`gpt-5.3-codex-spark`,`gpt-5.4`,`gpt-5.4-mini`],ds=cs.map(e=>`${Do}/${e}`),fs=ls.map(e=>`${Oo}/${e}`),ps=[`claude-fable-5`,`claude-opus-4-8`,`claude-sonnet-5`,`claude-haiku-4-5`].map(e=>`${ko}/${e}`),ms=[`google/gemma-4-31B-turbo-TEE`,`Qwen/Qwen3-32B-TEE`,`deepseek-ai/DeepSeek-V3.2-TEE`,`zai-org/GLM-5.1-TEE`,`moonshotai/Kimi-K2.6-TEE`,`Qwen/Qwen3.6-27B-TEE`,`Qwen/Qwen3.5-397B-A17B-TEE`,`zai-org/GLM-5-TEE`,`Qwen/Qwen3-235B-A22B-Thinking-2507-TEE`,`zai-org/GLM-5.2-TEE`],hs=ms.map(e=>`${Ao}/${e}`),gs=[],_s=[],vs=[],ys=[`MiniMax-M2.7`,`MiniMax-M2.7-highspeed`,`MiniMax-M2.5`,`MiniMax-M2.5-highspeed`],bs=ys.map(e=>`${Po}/${e}`),xs=ys.map(e=>`${Fo}/${e}`),Ss=[`MiniMax-M2.7`,`MiniMax-M2.7-highspeed`].map(e=>`${Io}/${e}`),Cs=[`kimi-k2.6`,`kimi-k2.5`].map(e=>`${F}/${e}`),ws=[`kimi-for-coding`].map(e=>`${Lo}/${e}`),Ts=[`gemini-3.5-flash`,`gemini-3.1-pro-preview`,`gemini-3-flash-preview`,`gemini-3.1-flash-lite`],Es=Ts.map(e=>`${Ro}/${e}`),Ds=Ts.map(e=>`${zo}/${e}`),Os=[`grok-4.5`,`grok-4.3`,`grok-build-0.1`].map(e=>`xai/${e}`),ks=[`mistral-medium-3.5`,`mistral-small-2603`,`mistral-large-2512`,`devstral-2512`,`ministral-14b-2512`,`ministral-8b-2512`,`ministral-3b-2512`].map(e=>`${Bo}/${e}`),As=[`doubao-seed-2-0-pro-260215`,`doubao-seed-2-0-lite-260215`,`doubao-seed-2-0-mini-260215`,`doubao-seed-2-0-code-preview-260215`,`deepseek-v3-2-251201`,`glm-4-7-251222`].map(e=>`${Vo}/${e}`),js=[`ark-code-latest`,`doubao-seed-2.0-code`,`doubao-seed-2.0-pro`,`doubao-seed-2.0-lite`,`doubao-seed-code`,`minimax-m2.5`,`glm-4.7`,`deepseek-v3.2`,`kimi-k2.5`].flatMap(e=>[`${Ho}/${e}`,`${Uo}/${e}`]),Ms=[`seed-2-0-pro-260328`,`seed-2-0-lite-260228`,`seed-2-0-mini-260215`,`seed-2-0-code-preview-260328`,`deepseek-v3-2-251201`,`glm-4-7-251222`].map(e=>`${Wo}/${e}`),Ns=[`ark-code-latest`,`dola-seed-2.0-pro`,`dola-seed-2.0-lite`,`dola-seed-2.0-code`,`bytedance-seed-code`,`glm-5.1`,`glm-4.7`,`kimi-k2.5`,`gpt-oss-120b`].flatMap(e=>[`${Go}/${e}`,`${Ko}/${e}`]),Ps=`openai/gpt-5.6-sol,openai/gpt-5.6-terra,openai/gpt-5.6-luna,openai/gpt-5.5,openai/gpt-5.4,openai/gpt-5.4-mini,openai/gpt-5.4-nano,anthropic/claude-fable-5,anthropic/claude-opus-4.8,anthropic/claude-sonnet-5,anthropic/claude-haiku-4.5,google/gemini-3.5-flash,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google/gemini-3.1-flash-lite,x-ai/grok-4.5,x-ai/grok-4.3,x-ai/grok-build-0.1,mistralai/mistral-medium-3-5,mistralai/mistral-small-2603,mistralai/mistral-large-2512,mistralai/devstral-2512,qwen/qwen3.7-max,qwen/qwen3.7-plus,qwen/qwen3.6-flash,z-ai/glm-5.2,deepseek/deepseek-v4-pro,deepseek/deepseek-v4-flash,minimax/minimax-m2.7,moonshotai/kimi-k2.6`.split(`,`).map(e=>`${qo}/${e}`),Fs=[`qwen3.7-max`,`qwen3.7-plus`,`qwen3.6-flash`].map(e=>`${Jo}/${e}`),Is=[`qwen3.7-max`,`qwen3.7-plus`,`qwen3.6-flash`,`deepseek-v4-pro`,`deepseek-v4-flash`,`kimi-k2.7-code`,`glm-5.2`,`MiniMax-M2.5`].map(e=>`${Yo}/${e}`),Ls=[`glm-5.2`,`glm-5.1`,`glm-5`,`glm-5-turbo`,`glm-5v-turbo`,`glm-4.7`,`glm-4.7-flashx`,`glm-4.7-flash`].map(e=>`zai/${e}`),Rs={tools:!0,json:!0,thinkingLevels:[`off`,`low`],defaultThinkingLevel:`low`,thinkingMode:`zai-binary`,reasoningBudgetSupported:!1},zs=Object.fromEntries(Ls.map(e=>[e,e.endsWith(`/glm-5v-turbo`)?{...Rs,video:!0}:Rs])),Bs=[`ernie-5.1`,`ernie-5.0`,`ernie-5.0-thinking-latest`,`ernie-5.0-thinking-preview`,`ernie-x1.1-preview`,`ernie-x1.1`,`ernie-x1-turbo-32k`,`deepseek-v4-pro`,`deepseek-v4-flash`,`deepseek-v3.2-think`,`deepseek-v3.2`].map(e=>`${Xo}/${e}`),Vs=new Set([`qianfan/ernie-5.1`,`qianfan/ernie-5.0`,`qianfan/ernie-5.0-thinking-latest`,`qianfan/ernie-5.0-thinking-preview`,`qianfan/ernie-x1.1-preview`,`qianfan/ernie-x1.1`,`qianfan/ernie-x1-turbo-32k`]),Hs=new Set([`qianfan/deepseek-v4-pro`,`qianfan/deepseek-v4-flash`,`qianfan/deepseek-v3.2-think`,`qianfan/deepseek-v3.2`]),Us=Object.fromEntries(Bs.map(e=>[e,{tools:!0,json:!0,...Vs.has(e)?{fixedReasoning:!0}:Hs.has(e)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!0}:{}}])),Ws=[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex-spark`,`gpt-4.1`,`claude-fable-5`,`claude-opus-4.8`,`claude-sonnet-5`,`claude-haiku-4.5`,`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`,`grok-build-0.1`],Gs=Ws.map(e=>`${Zo}/${e}`),Ks=[...Ws],qs=Ks.map(e=>`${Qo}/${e}`);`${Zo}`;const Js=new Set([`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex-spark`]),Ys=new Set([`claude-fable-5`,`claude-opus-4.8`,`claude-sonnet-5`]),Xs=new Set([`claude-haiku-4.5`]),Zs=new Set([`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`]);function Qs(e){return Object.fromEntries(e.map(e=>{let t=e.slice(e.indexOf(`/`)+1);return[e,{tools:!0,json:!0,...Js.has(t)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:Ys.has(t)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!0}:Xs.has(t)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!0}:Zs.has(t)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}:{}}]}))}const $s={...Qs(Gs),...Qs(qs)},ec=go(uo),tc=Ua(Ba),nc=So.map(e=>`${ts}/${e}`);`${ts}`;const rc=wo(ts),ic=qa.map(e=>`${ns}/${e}`);`${ns}`;const ac=Ya(ns),oc=to(rs),sc=Ra(is),cc=so(as),lc=Ma(wa),uc=[];function dc(e){let t=e.indexOf(`/`);return t<=0||t===e.length-1?null:{route:e.slice(0,t).trim(),model:e.slice(t+1).trim()}}function fc(e,t){let n=t.trim().toLowerCase(),r=(e,r)=>n.startsWith(`${e}/`)?{provider:r,model:t.slice(e.length+1)}:null;return r(`openai`,Do)??r(`anthropic`,ko)??r(`google`,Ro)??r(`x-ai`,`xai`)??r(`xai`,`xai`)??r(`mistralai`,Bo)??r(`minimax`,Po)??r(`qwen`,Jo)??r(`moonshotai`,F)??r(`z-ai`,`zai`)??r(`zai-org`,`zai`)??r(`glm`,`zai`)??{provider:n.includes(`claude-`)||n.includes(`claude_`)?ko:n.includes(`gemini-`)?Ro:n.includes(`qwen`)?Jo:n.includes(`kimi`)?F:n.includes(`glm-`)?`zai`:e,model:t}}function pc(e){let t=fc(e.route,e.model),n=Ca({provider:t.provider,model:t.model,reasoning:e.reasoning});if(n)return{thinkingLevels:n.thinkingLevels,defaultThinkingLevel:n.defaultThinkingLevel,thinkingMode:n.thinkingMode,reasoningBudgetSupported:n.reasoningBudgetSupported}}function mc(e){let t=dc(e);if(t)return pc({route:t.route,model:t.model})}function hc(e){return Object.fromEntries(e.map(e=>[e.toLowerCase(),mc(e)??{}]))}function I(e,t){let n=hc(e);for(let[e,r]of Object.entries(t))n[e.toLowerCase()]={...n[e.toLowerCase()],...r};return n}const gc=[...k],_c={"anthropic/claude-fable-5":{thinkingLevels:gc,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-opus-4-8":{thinkingLevels:gc,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-sonnet-5":{thinkingLevels:gc,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-haiku-4-5":{thinkingLevels:gc,defaultThinkingLevel:`low`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!0}},vc=Object.fromEntries(ms.map(e=>[`${Ao}/${e}`,{tools:!0,json:!0,...pc({route:Ao,model:e,reasoning:!0}),...e===`moonshotai/Kimi-K2.6-TEE`?{video:!0}:{}}])),yc=[...k],bc=Object.fromEntries([...bs,...xs,...Ss].map(e=>[e,{tools:!0,thinkingLevels:yc,defaultThinkingLevel:`off`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!1}])),xc=Object.fromEntries([...Cs,...ws].map(e=>[e,{tools:!0,...e===`${F}/kimi-k2.6`?{video:!0}:{},thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`moonshot-thinking`,reasoningBudgetSupported:!1}])),Sc=Object.fromEntries([...Es,...Ds].map(e=>[e,{tools:!0,json:!0,audio:!0,video:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}])),Cc={"xai/grok-4.5":{tools:!0,json:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1},"xai/grok-4.3":{tools:!0,json:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1},"xai/grok-build-0.1":{tools:!0,json:!0}},wc=[`off`,`high`],Tc=Object.fromEntries(ks.map(e=>[e,{tools:!0,json:!0,...e===`mistral/mistral-medium-3.5`||e===`mistral/mistral-small-2603`?{thinkingLevels:[...wc],defaultThinkingLevel:`high`,thinkingMode:`mistral-reasoning-effort`,reasoningBudgetSupported:!1}:{}}])),Ec=[`minimal`,`low`,`medium`,`high`],Dc=new Set([`volcengine/doubao-seed-2-0-pro-260215`,`volcengine/doubao-seed-2-0-lite-260215`,`volcengine/doubao-seed-2-0-mini-260215`,`volcengine/doubao-seed-2-0-code-preview-260215`,`volcengine-coding/doubao-seed-2.0-code`,`volcengine-plan/doubao-seed-2.0-code`,`volcengine-coding/doubao-seed-2.0-pro`,`volcengine-plan/doubao-seed-2.0-pro`,`volcengine-coding/doubao-seed-2.0-lite`,`volcengine-plan/doubao-seed-2.0-lite`,`volcengine-coding/doubao-seed-code`,`volcengine-plan/doubao-seed-code`]),Oc=new Set([`volcengine/doubao-seed-2-0-pro-260215`,`volcengine/doubao-seed-2-0-lite-260215`,`volcengine/doubao-seed-2-0-mini-260215`,`volcengine/doubao-seed-2-0-code-preview-260215`,`volcengine-coding/doubao-seed-2.0-code`,`volcengine-plan/doubao-seed-2.0-code`,`volcengine-coding/doubao-seed-2.0-pro`,`volcengine-plan/doubao-seed-2.0-pro`,`volcengine-coding/doubao-seed-2.0-lite`,`volcengine-plan/doubao-seed-2.0-lite`,`volcengine-coding/doubao-seed-code`,`volcengine-plan/doubao-seed-code`]),kc=Object.fromEntries([...As,...js].map(e=>[e,{tools:!0,json:!0,...Dc.has(e)?{thinkingLevels:[...Ec],defaultThinkingLevel:`medium`,thinkingMode:`volcengine-reasoning-effort`,reasoningBudgetSupported:!1}:{},...Oc.has(e)?{video:!0}:{}}])),Ac=[`off`,`high`],jc=new Set([`byteplus/seed-2-0-pro-260328`,`byteplus/seed-2-0-lite-260228`,`byteplus/seed-2-0-mini-260215`,`byteplus/seed-2-0-code-preview-260328`,`byteplus-coding/dola-seed-2.0-pro`,`byteplus-plan/dola-seed-2.0-pro`,`byteplus-coding/dola-seed-2.0-lite`,`byteplus-plan/dola-seed-2.0-lite`,`byteplus-coding/dola-seed-2.0-code`,`byteplus-plan/dola-seed-2.0-code`,`byteplus-coding/bytedance-seed-code`,`byteplus-plan/bytedance-seed-code`]),Mc=Object.fromEntries([...Ms,...Ns].map(e=>[e,{tools:!0,json:!0,...jc.has(e)?{thinkingLevels:[...Ac],defaultThinkingLevel:`high`,thinkingMode:`byteplus-thinking-type`,reasoningBudgetSupported:!1}:{}}])),Nc=new Set([`openrouter/google/gemini-3.5-flash`,`openrouter/google/gemini-3.1-pro-preview`,`openrouter/google/gemini-3-flash-preview`,`openrouter/google/gemini-3.1-flash-lite`]),Pc=new Set([`openrouter/google/gemini-3.5-flash`,`openrouter/google/gemini-3.1-pro-preview`,`openrouter/google/gemini-3-flash-preview`,`openrouter/google/gemini-3.1-flash-lite`,`openrouter/qwen/qwen3.7-max`,`openrouter/qwen/qwen3.7-plus`,`openrouter/qwen/qwen3.6-flash`]),Fc=new Set([`openrouter/mistralai/mistral-medium-3-5`,`openrouter/mistralai/mistral-small-2603`]),Ic=new Set([`openrouter/minimax/minimax-m2.7`]),Lc=new Set([`openrouter/deepseek/deepseek-v4-pro`,`openrouter/deepseek/deepseek-v4-flash`]),Rc=new Set([`openrouter/openai/gpt-5.6-sol`,`openrouter/openai/gpt-5.6-terra`,`openrouter/openai/gpt-5.6-luna`,`openrouter/openai/gpt-5.5`,`openrouter/openai/gpt-5.4`,`openrouter/openai/gpt-5.4-mini`,`openrouter/openai/gpt-5.4-nano`]),zc=new Set([`openrouter/x-ai/grok-4.5`,`openrouter/x-ai/grok-4.3`]),Bc=Object.fromEntries(Ps.map(e=>[e,{tools:!0,json:!0,...Nc.has(e)?{audio:!0}:{},...Pc.has(e)?{video:!0}:{},...Fc.has(e)?{thinkingLevels:[...wc],defaultThinkingLevel:`high`,thinkingMode:`mistral-reasoning-effort`,reasoningBudgetSupported:!1}:{},...Ic.has(e)?{thinkingLevels:[...yc],defaultThinkingLevel:`off`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!1}:{},...Lc.has(e)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1}:{},...Rc.has(e)?{thinkingLevels:[...oa],defaultThinkingLevel:`low`,thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:{},...zc.has(e)?{thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1}:{}}])),Vc=new Set([`qwen-coding-plan/kimi-k2.7-code`,`qwen-coding-plan/glm-5.2`,`qwen-coding-plan/MiniMax-M2.5`]),Hc=Object.fromEntries([...Fs,...Is].map(e=>[e,{tools:!0,json:!0,...Vc.has(e)?{}:{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`qwen-thinking`,reasoningBudgetSupported:!0}}])),Uc=[{id:`openai`,label:`OpenAI`,priority:1,hint:`OpenAI sign-in + API key`,methods:[{id:`openai-codex`,route:Oo,kind:`oauth`,label:`ChatGPT sign-in`,hint:`Open the OpenAI sign-in URL, finish login in the browser, then Fased completes the OAuth flow.`},{id:`openai-api-key`,route:Do,kind:`api-key`,label:`API key`}],models:{recommended:[...ds,...fs],routeRules:{[Do]:[`${Do}/*`],[Oo]:[`${Oo}/*`]}},modelCapabilities:hc([...ds,...fs])},{id:`anthropic`,label:`Anthropic`,priority:2,hint:`Claude Code OAuth + setup-token + API key`,methods:[{id:`anthropic-oauth`,route:ko,kind:`oauth`,label:`Sign in (Claude Code)`,hint:`Claude or Console account; Pro, Max, Team, Enterprise, or Console access`,buttonLabel:`Sign in`},{id:`token`,route:ko,kind:`token`,label:`Token (setup-token)`,hint:"run `claude setup-token` elsewhere, then paste the token here",buttonLabel:`Paste token`},{id:`apiKey`,route:ko,kind:`api-key`,label:`API key`}],models:{recommended:[...ps],routeRules:{[ko]:[`${ko}/*`]}},modelCapabilities:I(ps,_c)},{id:`chutes`,label:`Chutes`,priority:3,hint:`Sign in + API key`,methods:[{id:`chutes`,route:Ao,kind:`oauth`,label:`Sign in`,hint:`Requires a Chutes OAuth app client id. Enter the cid, then Fased generates the Chutes sign-in URL.`,buttonLabel:`Sign in`},{id:`chutes-api-key`,route:Ao,kind:`api-key`,label:`API key`}],models:{recommended:[...hs],routeRules:{[Ao]:[`${Ao}/*`]}},modelCapabilities:I(hs,vc)},{id:`ollama`,label:`Ollama`,priority:4,hint:`Local, cloud, or hybrid Ollama through the native API`,modelProviderIds:[jo],methods:[{id:`ollama`,route:jo,kind:`manual`,label:`Ollama native URL + model`,hint:`Use the native Ollama base URL, for example http://127.0.0.1:11434. Do not use /v1.`,buttonLabel:`Configure`}],models:{recommended:gs,dynamic:!0,operatorCatalog:!0,routeRules:{[jo]:[`${jo}/*`]}},modelCapabilities:hc(gs)},{id:`lmstudio`,label:`LM Studio`,priority:4,hint:`Local LM Studio server on localhost:1234`,modelProviderIds:[Mo],methods:[{id:`lmstudio`,route:Mo,kind:`manual`,label:`LM Studio URL + model`,hint:`Use http://127.0.0.1:1234/v1, optional API token, and a model key from LM Studio.`,buttonLabel:`Configure`}],models:{recommended:_s,dynamic:!0,operatorCatalog:!0,routeRules:{[Mo]:[`${Mo}/*`]}},modelCapabilities:hc(_s)},{id:`vllm`,label:`vLLM-compatible`,priority:4,hint:`OpenAI-compatible local server: vLLM, SGLang, TGI, LocalAI, or FastChat`,modelProviderIds:[No],methods:[{id:`vllm`,route:No,kind:`manual`,label:`vLLM-compatible URL + model`,hint:`Enter the /v1 base URL, API key or local placeholder, and served model ID for vLLM, SGLang, TGI, LocalAI, or FastChat.`,buttonLabel:`Configure`}],models:{recommended:vs,dynamic:!0,operatorCatalog:!0,routeRules:{[No]:[`${No}/*`]}},modelCapabilities:hc(vs)},{id:`minimax`,label:`MiniMax`,priority:5,hint:`MiniMax OAuth + API key`,modelProviderIds:[Po,Fo,Io],methods:[{id:`minimax-portal`,route:Io,kind:`oauth`,label:`Sign in`,hint:`Global or CN endpoint; uses MiniMax portal sign-in`,setupRequirement:`Requires MiniMax portal/coding-plan access. Choose Global or CN, then open the approval URL and approve before the code expires.`,buttonLabel:`Sign in`},{id:`minimax-api`,route:Po,kind:`api-key`,label:`API key`},{id:`minimax-api-key-cn`,route:Fo,kind:`api-key`,label:`API key (CN)`,hint:`China endpoint (api.minimaxi.com)`},{id:`minimax-api-lightning`,route:Po,configProviderId:`minimax-lightning`,statusRoute:Po,kind:`api-key`,label:`Highspeed API key`,hint:`Fast M2.7 tier`}],models:{recommended:[...bs,...xs,...Ss],routeRules:{[Po]:[`${Po}/*`],[Fo]:[`${Fo}/*`],[Io]:[`${Io}/*`]}},modelCapabilities:I([...bs,...xs,...Ss],bc)},{id:`moonshot`,label:`Moonshot AI`,priority:6,hint:`Kimi API + Kimi Code`,modelProviderIds:[F,Lo],methods:[{id:`moonshot-api-key`,route:F,kind:`api-key`,label:`Kimi API key (.ai)`,hint:`Kimi Open Platform endpoint (api.moonshot.ai)`},{id:`moonshot-api-key-cn`,route:F,configProviderId:`moonshot-cn`,statusRoute:F,kind:`api-key`,label:`Kimi API key (.cn)`,hint:`China endpoint (api.moonshot.cn)`},{id:`kimi-code-api-key`,route:Lo,kind:`api-key`,label:`Kimi Code API key (subscription)`,hint:`Kimi Code membership endpoint (api.kimi.com/coding)`}],models:{recommended:[...Cs,...ws],routeRules:{[F]:[`${F}/*`],[Lo]:[`${Lo}/*`]}},modelCapabilities:I([...Cs,...ws],xc)},{id:`google`,label:`Google`,priority:7,hint:`Gemini API key + OAuth`,routeAliases:[`gemini`],modelProviderIds:[Ro,`gemini`,zo],methods:[{id:`gemini-api-key`,route:Ro,kind:`api-key`,label:`Gemini API key`},{id:`google-gemini-cli`,route:zo,kind:`oauth`,label:`Sign in (Gemini CLI)`,hint:`Unofficial flow; review account-risk warning before use`,setupRequirement:`Requires gemini-cli installed on the gateway machine, or GEMINI_CLI_OAUTH_CLIENT_ID set before sign-in.`}],models:{recommended:[...Es,...Ds],routeRules:{[Ro]:[`${Ro}/*`,`gemini/*`],[zo]:[`${zo}/*`]}},modelCapabilities:I([...Es,...Ds],Sc)},{id:`xai`,label:`xAI (Grok)`,priority:8,hint:`Grok API key or xAI account sign-in`,methods:[{id:`xai-oauth`,route:`xai`,kind:`oauth`,label:`xAI sign-in`,hint:`Browser sign-in for eligible xAI/Grok accounts`,buttonLabel:`Sign in`},{id:`xai-device-code`,route:`xai`,kind:`device`,label:`xAI device code`,hint:`Remote-friendly sign-in for eligible xAI/Grok accounts`,buttonLabel:`Device code`},{id:`xai-api-key`,route:`xai`,kind:`api-key`,label:`xAI API key`}],models:{recommended:[...Os],routeRules:{xai:[`xai/*`]}},modelCapabilities:I(Os,Cc)},{id:`mistral`,label:`Mistral AI`,priority:9,hint:`Mistral API key`,methods:[{id:`mistral-api-key`,route:Bo,kind:`api-key`,label:`Mistral API key`}],models:{recommended:[...ks],routeRules:{[Bo]:[`${Bo}/*`]}},modelCapabilities:I(ks,Tc)},{id:`volcengine`,label:`Volcano Engine`,priority:10,hint:`Ark API key + Coding Plan`,modelProviderIds:[Vo,Ho,Uo],methods:[{id:`volcengine-api-key`,route:Vo,kind:`api-key`,label:`Volcano Engine API key`}],models:{recommended:[...As,...js],routeRules:{[Vo]:[`${Vo}/*`],[Ho]:[`${Ho}/*`],[Uo]:[`${Uo}/*`]}},modelCapabilities:I([...As,...js],kc)},{id:`byteplus`,label:`BytePlus`,priority:11,hint:`ModelArk API key + Coding Plan`,modelProviderIds:[Wo,Go,Ko],methods:[{id:`byteplus-api-key`,route:Wo,kind:`api-key`,label:`BytePlus API key`}],models:{recommended:[...Ms,...Ns],routeRules:{[Wo]:[`${Wo}/*`],[Go]:[`${Go}/*`],[Ko]:[`${Ko}/*`]}},modelCapabilities:I([...Ms,...Ns],Mc)},{id:`openrouter`,label:`OpenRouter`,priority:12,hint:`API key`,methods:[{id:`openrouter-api-key`,route:qo,kind:`api-key`,label:`OpenRouter API key`}],models:{recommended:[...Ps],dynamic:!0,routeRules:{[qo]:[`${qo}/*`]}},modelCapabilities:I(Ps,Bc)},{id:`qwen`,label:`Qwen`,priority:14,hint:`Coding Plan + DashScope API key`,modelProviderIds:[Yo,Jo],methods:[{id:`qwen-coding-plan-api-key`,route:Yo,kind:`api-key`,label:`Coding Plan API key`,hint:`Alibaba Cloud Coding Plan endpoint (coding.dashscope.aliyuncs.com)`},{id:`qwen-api-key`,route:Jo,kind:`api-key`,label:`DashScope API key`,hint:`DashScope OpenAI-compatible endpoint (dashscope.aliyuncs.com)`}],models:{recommended:[...Is,...Fs],routeRules:{[Yo]:[`${Yo}/*`],[Jo]:[`${Jo}/*`]}},modelCapabilities:I([...Is,...Fs],Hc)},{id:`zai`,label:`Z.AI`,priority:15,hint:`GLM Coding Plan / Global / CN`,modelProviderIds:[`zai`],methods:[{id:`zai-coding-global`,route:`zai`,configProviderId:`zai-coding-global`,statusRoute:`zai`,kind:`api-key`,label:`Coding-Plan-Global`,hint:`GLM Coding Plan Global (api.z.ai)`},{id:`zai-coding-cn`,route:`zai`,configProviderId:`zai-coding-cn`,statusRoute:`zai`,kind:`api-key`,label:`Coding-Plan-CN`,hint:`GLM Coding Plan CN (open.bigmodel.cn)`},{id:`zai-global`,route:`zai`,configProviderId:`zai`,kind:`api-key`,label:`Global`,hint:`Z.AI Global (api.z.ai)`},{id:`zai-cn`,route:`zai`,configProviderId:`zai-cn`,statusRoute:`zai`,kind:`api-key`,label:`CN`,hint:`Z.AI CN (open.bigmodel.cn)`}],models:{recommended:[...Ls],routeRules:{zai:[`zai/*`]}},modelCapabilities:I(Ls,zs)},{id:`qianfan`,label:`Qianfan`,priority:16,hint:`Baidu Qianfan API key`,methods:[{id:`qianfan-api-key`,route:Xo,kind:`api-key`,label:`Qianfan API key`}],models:{recommended:[...Bs],routeRules:{[Xo]:[`${Xo}/*`]}},modelCapabilities:I(Bs,Us)},{id:`copilot`,label:`Copilot`,priority:17,hint:`GitHub device login + local proxy`,modelProviderIds:[Zo,Qo],methods:[{id:`github-copilot`,route:Zo,kind:`device`,label:`GitHub sign in`,hint:`GitHub OAuth device flow; requires an active Copilot subscription`,buttonLabel:`Sign in`},{id:`copilot-proxy`,route:Qo,kind:`device`,label:`Proxy sign in`,hint:`Local VS Code Copilot Proxy bridge`,buttonLabel:`Configure`}],models:{recommended:[...Gs,...qs],dynamic:!0,routeRules:{[Zo]:[`${Zo}/*`],[Qo]:[`${Qo}/*`]}},modelCapabilities:I([...Gs,...qs],$s)},{id:`ai-gateway`,label:`Vercel AI`,priority:18,hint:`API key`,modelProviderIds:[$o],methods:[{id:`ai-gateway-api-key`,route:$o,kind:`api-key`,label:`Vercel AI API key`}],models:{recommended:[...uo],dynamic:!0,routeRules:{[$o]:[`${$o}/*`]}},modelCapabilities:I(uo,ec)},{id:`opencode-zen`,label:`OpenCode Zen`,priority:19,hint:`API key`,modelProviderIds:[es],methods:[{id:`opencode-zen`,route:es,kind:`api-key`,label:`OpenCode Zen API key`,hint:`Sign in to OpenCode Zen, then paste the API key`}],models:{recommended:[...Ba],dynamic:!0,routeRules:{[es]:[`${es}/*`]}},modelCapabilities:I(Ba,tc)},{id:`xiaomi`,label:`Xiaomi`,priority:20,hint:`MiMo API key`,modelProviderIds:[ts],methods:[{id:`xiaomi-api-key`,route:ts,kind:`api-key`,label:`Xiaomi API key`,hint:`Create an API key in the Xiaomi MiMo API Open Platform`}],models:{recommended:[...nc],routeRules:{[ts]:[`${ts}/*`]}},modelCapabilities:I(nc,rc)},{id:`synthetic`,label:`Synthetic`,priority:21,hint:`Anthropic-compatible API key`,modelProviderIds:[ns],methods:[{id:`synthetic-api-key`,route:ns,kind:`api-key`,label:`Synthetic API key`,hint:`Create an API key in Synthetic`}],models:{recommended:[...ic],routeRules:{[ns]:[`${ns}/*`]}},modelCapabilities:I(ic,ac)},{id:`together`,label:`Together AI`,priority:22,hint:`API key`,modelProviderIds:[rs],methods:[{id:`together-api-key`,route:rs,kind:`api-key`,label:`Together AI API key`,hint:`Create an API key in Together AI`}],models:{recommended:[...$a],routeRules:{[rs]:[`${rs}/*`]}},modelCapabilities:I($a,oc)},{id:`huggingface`,label:`Hugging Face`,priority:23,hint:`Inference Providers token`,modelProviderIds:[is],methods:[{id:`huggingface-api-key`,route:is,kind:`api-key`,label:`Hugging Face token`,hint:`Create a fine-grained token with Inference Providers access`}],models:{recommended:[...Fa],dynamic:!0,routeRules:{[is]:[`${is}/*`]}},modelCapabilities:sc},{id:`venice`,label:`Venice AI`,priority:24,hint:`Privacy-focused API key`,modelProviderIds:[as],methods:[{id:`venice-api-key`,route:as,kind:`api-key`,label:`Venice AI API key`,hint:`Create an API key in Venice settings`}],models:{recommended:[...ao],dynamic:!0,routeRules:{[as]:[`${as}/*`]}},modelCapabilities:cc},{id:`litellm`,label:`LiteLLM`,priority:25,hint:`OpenAI-compatible LLM proxy`,modelProviderIds:[os],methods:[{id:`litellm-api-key`,route:os,kind:`api-key`,label:`LiteLLM API key`,hint:`LiteLLM Proxy virtual key or master key plus /v1 base URL`}],models:{recommended:[],dynamic:!0,operatorCatalog:!0,routeRules:{[os]:[`${os}/*`]}},modelCapabilities:{}},{id:`cloudflare-ai-gateway`,label:`Cloudflare AI`,priority:26,hint:`Anthropic through Cloudflare AI`,modelProviderIds:[wa],methods:[{id:`cloudflare-ai-gateway-api-key`,route:wa,kind:`manual`,label:`Cloudflare AI API key`,hint:`Requires Cloudflare Account ID, Gateway ID, and Anthropic provider API key`,buttonLabel:`Configure`}],models:{recommended:[...Aa],routeRules:{[wa]:[`${wa}/*`]}},modelCapabilities:lc},{id:`custom`,label:`Custom Provider`,priority:27,hint:`OpenAI or Anthropic-compatible endpoint outside the built-in provider cards`,modelProviderIds:[ss],methods:[{id:`custom-api-key`,route:ss,kind:`manual`,label:`Custom Provider`,hint:`Requires base URL, endpoint compatibility, model ID, and optional API key. Use this for SGLang or other compatible endpoints when the vLLM-compatible shortcut does not fit.`,buttonLabel:`Configure`}],models:{recommended:uc,dynamic:!0,operatorCatalog:!0,routeRules:{[ss]:[`${ss}/*`]}},modelCapabilities:hc(uc)}];new Map(Uc.map(e=>[e.id,e])),new Map(Uc.flatMap(e=>[...e.methods.map(t=>[t.route,e]),...(e.routeAliases??[]).map(t=>[t,e]),...(e.modelProviderIds??[]).map(t=>[t,e])])),new Set(Uc.flatMap(e=>e.models.recommended.map(e=>e.toLowerCase()))),new Map(Uc.flatMap(e=>Object.entries(e.modelCapabilities??{}).map(([e,t])=>[e.toLowerCase(),t]))),new Set([...ls,...us]),i.resolve(i.dirname(o(import.meta.url)),`../../docs/reference/templates`);function Wc(e=process.env,t=p.homedir){let n=S(e,t),r=e.FASED_PROFILE?.trim();return r&&r.toLowerCase()!==`default`?i.join(n,`.fased`,`workspace-${r}`):i.join(n,`.fased`,`workspace`)}Wc();let Gc=null;function Kc(){return Gc??=sn(`agent-scope`),Gc}function qc(e){return e.replace(/\0/g,``)}let Jc=!1;function Yc(e){let t=e.agents?.list;return Array.isArray(t)?t.filter(e=>!!(e&&typeof e==`object`)):[]}function Xc(e){let t=Yc(e);if(t.length===0)return qi;let n=t.filter(e=>e?.default);n.length>1&&!Jc&&(Jc=!0,Kc().warn(`Multiple agents marked default=true; using the first entry as default.`));let r=(n[0]??t[0])?.id?.trim();return O(r||qi)}function Zc(e,t){let n=O(t);return Yc(e).find(e=>O(e.id)===n)}function Qc(e,t){let n=Zc(e,O(t));if(n)return{name:typeof n.name==`string`?n.name:void 0,workspace:typeof n.workspace==`string`?n.workspace:void 0,agentDir:typeof n.agentDir==`string`?n.agentDir:void 0,activeModelProvider:typeof n.activeModelProvider==`string`?n.activeModelProvider:void 0,modelProviders:n.modelProviders&&typeof n.modelProviders==`object`?n.modelProviders:void 0,model:typeof n.model==`string`||n.model&&typeof n.model==`object`?n.model:void 0,taskModels:n.taskModels&&typeof n.taskModels==`object`?n.taskModels:void 0,thinkingDefault:n.thinkingDefault,verboseDefault:e.agents?.defaults?.verboseDefault,reasoningDefault:n.reasoningDefault,fastModeDefault:n.fastModeDefault,skills:Array.isArray(n.skills)?n.skills:void 0,memorySearch:n.memorySearch,humanDelay:n.humanDelay,heartbeat:n.heartbeat,identity:n.identity,groupChat:n.groupChat,subagents:typeof n.subagents==`object`&&n.subagents?n.subagents:void 0,sandbox:n.sandbox,tools:n.tools}}function $c(e,t){let n=O(t),r=Qc(e,n)?.workspace?.trim();if(r)return qc(E(r));let a=Xc(e),o=e.agents?.defaults?.workspace?.trim();if(n===a)return qc(o?E(o):Wc(process.env));if(o)return qc(i.join(E(o),n));let s=Be(process.env);return qc(i.join(s,`workspace-${n}`))}const el=`default`,tl=/^\$\{([A-Z][A-Z0-9_]{0,127})\}$/;function nl(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function rl(e){return!nl(e)||Object.keys(e).length!==3?!1:(e.source===`env`||e.source===`file`||e.source===`exec`)&&typeof e.provider==`string`&&e.provider.trim().length>0&&typeof e.id==`string`&&e.id.trim().length>0}function il(e){return nl(e)?(e.source===`env`||e.source===`file`||e.source===`exec`)&&typeof e.id==`string`&&e.id.trim().length>0&&e.provider===void 0:!1}function al(e,t=el){if(typeof e!=`string`)return null;let n=tl.exec(e.trim());return n?{source:`env`,provider:t.trim()||el,id:n[1]}:null}function ol(e,t){if(rl(e))return e;if(il(e)){let n=e.source===`env`?t?.env??el:e.source===`file`?t?.file??el:t?.exec??el;return{source:e.source,provider:n,id:e.id}}return al(e,t?.env)||null}function sl(e){let t=e.split(`.`);if(t.length!==4)return!1;let n=t.map(e=>Number(e));if(n.some(e=>!Number.isInteger(e)||e<0||e>255))return!1;let[r,i]=n;return r===10||r===127||r===0||r===172&&i>=16&&i<=31||r===192&&i===168||r===169&&i===254}function cl(e){let t=e?.trim();if(!t)return!1;try{let e=new URL(t).hostname.toLowerCase().replace(/^\[|\]$/g,``);return e===`localhost`||e===`::1`||e===`0.0.0.0`||e.endsWith(`.local`)||e.endsWith(`.internal`)||sl(e)?!0:e.startsWith(`fc`)||e.startsWith(`fd`)||e.startsWith(`fe80:`)}catch{return!1}}const ll=[`chat.inject`,`push.test`,`web.login.start`,`web.login.wait`],ul=new Set([...Et,`device-pair`,`phone-control`,`sat-mining`,`talk-voice`]),dl=e=>Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):[];function fl(e){return typeof e==`string`&&ll.includes(e)}function pl(e){if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e,n=Array.isArray(t.allow)?t.allow:[],r=[];for(let e of n){if(!e||typeof e!=`object`||Array.isArray(e))continue;let t=e;fl(t.method)&&r.push({method:t.method,sources:dl(t.sources),requireOperatorApproval:t.requireOperatorApproval===!0})}return r}const ml=e=>{if(typeof e!=`string`)return;let t=e.trim();if(t)return t.toLowerCase()===`none`?null:t},hl=e=>{if(!e||typeof e!=`object`||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(!n.trim())continue;if(!r||typeof r!=`object`||Array.isArray(r)){t[n]={};continue}let e=r;t[n]={enabled:typeof e.enabled==`boolean`?e.enabled:void 0,config:`config`in e?e.config:void 0,runtime:gl(e.runtime)}}return t};function gl(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=t.helpers&&typeof t.helpers==`object`&&!Array.isArray(t.helpers)?t.helpers:void 0;return{helpers:{sessions:{read:(n?.sessions&&typeof n.sessions==`object`&&!Array.isArray(n.sessions)?n.sessions:void 0)?.read===!0}},adminRpcActions:{allow:pl(t.adminRpcActions)}}}const _l=e=>{let t=ml(e?.slots?.memory);return{enabled:e?.enabled!==!1,allow:dl(e?.allow),deny:dl(e?.deny),loadPaths:dl(e?.load?.paths),slots:{memory:t===void 0?Ui(`memory`):t},entries:hl(e?.entries)}};function vl(e,t,n){if(!n.enabled)return{enabled:!1,reason:`plugins disabled`};if(n.deny.includes(e))return{enabled:!1,reason:`blocked by denylist`};if(n.allow.length>0&&!n.allow.includes(e))return{enabled:!1,reason:`not in allowlist`};if(n.slots.memory===e)return{enabled:!0};let r=n.entries[e];return r?.enabled===!0?{enabled:!0}:r?.enabled===!1?{enabled:!1,reason:`disabled in config`}:t===`bundled`&&ul.has(e)?{enabled:!0}:t===`bundled`?{enabled:!1,reason:`bundled (disabled by default)`}:{enabled:!0}}function yl(e,t){if(!e)return!1;let n=kt(t);if(!n)return!1;let r=e.channels?.[n];return!r||typeof r!=`object`||Array.isArray(r)?!1:r.enabled===!0}function bl(e){let t=vl(e.id,e.origin,e.config);return!t.enabled&&t.reason===`bundled (disabled by default)`&&yl(e.rootConfig,e.id)?{enabled:!0}:t}function xl(e){return e.kind===`memory`?e.slot===null?{enabled:!1,reason:`memory slot disabled`}:typeof e.slot==`string`?e.slot===e.id?{enabled:!0,selected:!0}:{enabled:!1,reason:`memory slot set to "${e.slot}"`}:e.selectedId&&e.selectedId!==e.id?{enabled:!1,reason:`memory slot already filled by "${e.selectedId}"`}:{enabled:!0,selected:!0}:{enabled:!0}}function Sl(e){try{let t=n.readdirSync(e,{withFileTypes:!0});for(let r of t){if(!r.isDirectory())continue;let t=i.join(e,r.name);if(n.existsSync(i.join(t,`fased.plugin.json`)))return!0}}catch{return!1}return!1}function Cl(e={}){let t=process.env.FASED_BUNDLED_PLUGINS_DIR?.trim();if(t)return t;try{let t=i.dirname(e.execPath??process.execPath),n=i.join(t,`extensions`);if(Sl(n))return n}catch{}try{let t=e.moduleUrl??import.meta.url,n=Te({argv1:e.argv1??process.argv[1],moduleUrl:t,cwd:e.cwd??process.cwd()});if(n){let e=i.join(n,`extensions`);if(Sl(e))return e}let r=i.dirname(o(t));for(let e=0;e<6;e+=1){let e=i.join(r,`extensions`);if(Sl(e))return e;let t=i.dirname(r);if(t===r)break;r=t}}catch{}}function wl(e,t){return oi(e,t)}function Tl(e,t){let r=t?.get(e);if(r)return r;try{let r=n.realpathSync(e);return t?.set(e,r),r}catch{return null}}function El(e){try{return n.statSync(e)}catch{return null}}function Dl(e){return(e&511).toString(8).padStart(3,`0`)}const Ol=new Set([`.ts`,`.js`,`.mts`,`.cts`,`.mjs`,`.cjs`]);function kl(e){return e===void 0?process.platform===`win32`||typeof process.getuid!=`function`?null:process.getuid():e}function Al(e){let t=Tl(e.source),n=Tl(e.rootDir);return!t||!n||wl(n,t)?null:{reason:`source_escapes_root`,sourcePath:e.source,rootPath:e.rootDir,targetPath:e.source,sourceRealPath:t,rootRealPath:n}}function jl(e){if(process.platform===`win32`)return null;let t=[e.rootDir,e.source],n=new Set;for(let r of t){let t=i.resolve(r);if(n.has(t))continue;n.add(t);let a=El(r);if(!a)return{reason:`path_stat_failed`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r};let o=a.mode&511;if(o&2)return{reason:`path_world_writable`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r,modeBits:o};if(e.origin!==`bundled`&&e.uid!==null&&typeof a.uid==`number`&&a.uid!==e.uid&&a.uid!==0)return{reason:`path_suspicious_ownership`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r,foundUid:a.uid,expectedUid:e.uid}}return null}function Ml(e){return Al({source:e.source,rootDir:e.rootDir})||jl({source:e.source,rootDir:e.rootDir,origin:e.origin,uid:kl(e.ownershipUid)})}function Nl(e){return e.reason===`source_escapes_root`?`blocked plugin candidate: source escapes plugin root (${e.sourcePath} -> ${e.sourceRealPath}; root=${e.rootRealPath})`:e.reason===`path_stat_failed`?`blocked plugin candidate: cannot stat path (${e.targetPath})`:e.reason===`path_world_writable`?`blocked plugin candidate: world-writable path (${e.targetPath}, mode=${Dl(e.modeBits??0)})`:`blocked plugin candidate: suspicious ownership (${e.targetPath}, uid=${e.foundUid}, expected uid=${e.expectedUid} or root)`}function Pl(e){let t=Ml({source:e.source,rootDir:e.rootDir,origin:e.origin,ownershipUid:e.ownershipUid});return t?(e.diagnostics.push({level:`warn`,source:t.targetPath,message:Nl(t)}),!0):!1}function Fl(e){let t=i.extname(e);return Ol.has(t)?!e.endsWith(`.d.ts`):!1}function Il(e){let t=e.trim().toLowerCase();return!!(!t||t.endsWith(`.bak`)||t.includes(`.backup-`)||t.includes(`.disabled`))}function Ll(e){let t=ki({absolutePath:i.join(e,`package.json`),rootPath:e,boundaryLabel:`plugin package directory`});if(!t.ok)return null;try{let e=n.readFileSync(t.fd,`utf-8`);return JSON.parse(e)}catch{return null}finally{n.closeSync(t.fd)}}function Rl(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t||i.isAbsolute(t))return null;let n=t.replace(/^\.\/+/,``);return!n||n===`.`||n===`..`?null:n}function zl(e,t){if(!zi(t).ok)return[];let r=[e.main,e.module,...Bi],a=[],o=new Set;for(let e of r){let r=Rl(e);if(!r||o.has(r))continue;o.add(r);let s=i.resolve(t,r);wl(t,s)&&n.existsSync(s)&&Fl(s)&&a.push(r)}return a}function Bl(e,t){let n=Vi(e)?.extensions;return Array.isArray(n)?n.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):t?zl(e,t):[]}function Vl(e){let t=i.basename(e.filePath,i.extname(e.filePath)),n=e.packageName?.trim();if(!n)return t;let r=n.includes(`/`)?n.split(`/`).pop()??n:n;return e.hasMultipleExtensions?`${r}/${t}`:r}function Hl(e){let t=i.resolve(e.source);if(e.seen.has(t))return;let n=Tl(e.rootDir)??i.resolve(e.rootDir);if(Pl({source:t,rootDir:n,origin:e.origin,diagnostics:e.diagnostics,ownershipUid:e.ownershipUid}))return;e.seen.add(t);let r=e.manifest??null;e.candidates.push({idHint:e.idHint,source:t,rootDir:n,origin:e.origin,workspaceDir:e.workspaceDir,packageName:r?.name?.trim()||void 0,packageVersion:r?.version?.trim()||void 0,packageDescription:r?.description?.trim()||void 0,packageDir:e.packageDir,packageManifest:Vi(r??void 0)})}function Ul(e){let t=ki({absolutePath:i.resolve(e.packageDir,e.entryPath),rootPath:e.packageDir,boundaryLabel:`plugin package directory`});if(!t.ok)return e.diagnostics.push({level:`error`,message:`extension entry escapes package directory: ${e.entryPath}`,source:e.sourceLabel}),null;let r=t.path;return n.closeSync(t.fd),r}function Wl(e){if(!n.existsSync(e.dir))return;let t=[];try{t=n.readdirSync(e.dir,{withFileTypes:!0})}catch(t){e.diagnostics.push({level:`warn`,message:`failed to read extensions dir: ${e.dir} (${String(t)})`,source:e.dir});return}for(let r of t){let t=i.join(e.dir,r.name);if(r.isFile()){if(!Fl(t))continue;Hl({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:i.basename(r.name,i.extname(r.name)),source:t,rootDir:i.dirname(t),origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir})}if(!r.isDirectory()||Il(r.name))continue;let a=Ll(t),o=a?Bl(a,t):[];if(o.length>0){for(let n of o){let r=Ul({packageDir:t,entryPath:n,sourceLabel:t,diagnostics:e.diagnostics});r&&Hl({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:Vl({filePath:r,packageName:a?.name,hasMultipleExtensions:o.length>1}),source:r,rootDir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,manifest:a,packageDir:t})}continue}let s=[`index.ts`,`index.js`,`index.mjs`,`index.cjs`].map(e=>i.join(t,e)).find(e=>n.existsSync(e));s&&Fl(s)&&Hl({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:r.name,source:s,rootDir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,manifest:a,packageDir:t})}}function Gl(e){let t=E(e.rawPath);if(!n.existsSync(t)){e.diagnostics.push({level:`error`,message:`plugin path not found: ${t}`,source:t});return}let r=n.statSync(t);if(r.isFile()){if(!Fl(t)){e.diagnostics.push({level:`error`,message:`plugin path is not a supported file: ${t}`,source:t});return}Hl({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:i.basename(t,i.extname(t)),source:t,rootDir:i.dirname(t),origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir});return}if(r.isDirectory()){let r=Ll(t),a=r?Bl(r,t):[];if(a.length>0){for(let n of a){let i=Ul({packageDir:t,entryPath:n,sourceLabel:t,diagnostics:e.diagnostics});i&&Hl({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:Vl({filePath:i,packageName:r?.name,hasMultipleExtensions:a.length>1}),source:i,rootDir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,manifest:r,packageDir:t})}return}let o=[`index.ts`,`index.js`,`index.mjs`,`index.cjs`].map(e=>i.join(t,e)).find(e=>n.existsSync(e));if(o&&Fl(o)){Hl({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:i.basename(t),source:o,rootDir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,manifest:r,packageDir:t});return}Wl({dir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen});return}}function Kl(e){let t=[],n=[],r=new Set,a=e.workspaceDir?.trim(),o=e.extraPaths??[];for(let i of o){if(typeof i!=`string`)continue;let o=i.trim();o&&Gl({rawPath:o,origin:`config`,ownershipUid:e.ownershipUid,workspaceDir:a?.trim()||void 0,candidates:t,diagnostics:n,seen:r})}if(a){let o=E(a),s=[i.join(o,`.fased`,`extensions`)];for(let i of s)Wl({dir:i,origin:`workspace`,ownershipUid:e.ownershipUid,workspaceDir:o,candidates:t,diagnostics:n,seen:r})}Wl({dir:i.join(yn(),`extensions`),origin:`global`,ownershipUid:e.ownershipUid,candidates:t,diagnostics:n,seen:r});let s=Cl();return s&&Wl({dir:s,origin:`bundled`,ownershipUid:e.ownershipUid,candidates:t,diagnostics:n,seen:r}),{candidates:t,diagnostics:n}}e(import.meta.url);const ql=/(\d+)\.(\d+)\.(\d+)/;function Jl(e){if(!e)return null;let t=e.match(ql);if(!t)return null;let[,n,r,i]=t;return{major:Number.parseInt(n,10),minor:Number.parseInt(r,10),patch:Number.parseInt(i,10)}}function Yl(e,t){return e?e.major===t.major?e.minor===t.minor?e.patch>=t.patch:e.minor>t.minor:e.major>t.major:!1}const Xl=/^>=(\d+)\.(\d+)\.(\d+)$/;function Zl(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t)return null;let n=t.match(Xl);if(!n)return null;let r=`${n[1]}.${n[2]}.${n[3]}`;return Jl(r)?{raw:t,minimumLabel:r}:null}function Ql(e){if(e.minHostVersion===void 0)return{ok:!0,requirement:null};let t=Zl(e.minHostVersion);if(!t)return{ok:!1,kind:`invalid`,error:`fased.install.minHostVersion must use a semver floor in the form ">=x.y.z"`};let n=e.currentVersion?.trim()||`unknown`,r=Jl(n);if(!r)return{ok:!1,kind:`unknown_host_version`,requirement:t};let i=Jl(t.minimumLabel);return!i||!Yl(r,i)?{ok:!1,kind:`incompatible`,requirement:t,currentVersion:n}:{ok:!0,requirement:t}}const $l={config:0,workspace:1,global:2,bundled:3},eu=new Map,tu=new Set;function nu(e){return e.manifest.runtimeOnly===!0?!0:e.manifest.id===`openai-runtime`&&e.candidate.packageName===`@fased/openai-runtime`}function ru(e){let t=e.FASED_PLUGIN_MANIFEST_CACHE_MS?.trim();if(t===``||t===`0`)return 0;if(!t)return 200;let n=Number.parseInt(t,10);return Number.isFinite(n)?Math.max(0,n):200}function iu(e){return e.FASED_DISABLE_PLUGIN_MANIFEST_CACHE?.trim()?!1:ru(e)>0}function au(e){let t=e.workspaceDir?E(e.workspaceDir):``,n=e.plugins.loadPaths.map(e=>E(e)).map(e=>e.trim()).filter(Boolean).toSorted();return`${t}::${e.hostVersion}::${JSON.stringify(n)}`}function ou(e){try{return n.statSync(e).mtimeMs}catch{return null}}function su(e){return e?.trim()||void 0}function cu(e){if(!Array.isArray(e))return;let t=e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean);return t.length>0?t:void 0}function lu(e){let t=e.packageChannel?.id?.trim();if(!t||!e.channelConfigs?.[t])return e.channelConfigs;let n=e.channelConfigs[t],r=n.label??(typeof e.packageChannel?.label==`string`?e.packageChannel.label.trim():``),i=n.description??(typeof e.packageChannel?.blurb==`string`?e.packageChannel.blurb.trim():``),a=n.preferOver??cu(e.packageChannel?.preferOver);return{...e.channelConfigs,[t]:{...n,...r?{label:r}:{},...i?{description:i}:{},...a?.length?{preferOver:a}:{}}}}function uu(e){let t=lu({channelConfigs:e.manifest.channelConfigs,packageChannel:e.candidate.packageManifest?.channel});return{id:e.manifest.id,runtimeOnly:nu(e)?!0:void 0,name:su(e.manifest.name)??e.candidate.packageName,description:su(e.manifest.description)??e.candidate.packageDescription,version:su(e.manifest.version)??e.candidate.packageVersion,enabledByDefault:e.manifest.enabledByDefault===!0?!0:void 0,autoEnableWhenConfiguredProviders:e.manifest.autoEnableWhenConfiguredProviders,legacyPluginIds:e.manifest.legacyPluginIds,kind:e.manifest.kind,channels:e.manifest.channels??[],providers:e.manifest.providers??[],modelSupport:e.manifest.modelSupport,providerAuthEnvVars:e.manifest.providerAuthEnvVars,providerAuthAliases:e.manifest.providerAuthAliases,providerAuthChoices:e.manifest.providerAuthChoices,skills:e.manifest.skills??[],origin:e.candidate.origin,workspaceDir:e.candidate.workspaceDir,rootDir:e.candidate.rootDir,source:e.candidate.source,manifestPath:e.manifestPath,schemaCacheKey:e.schemaCacheKey,configSchema:e.configSchema,configUiHints:e.manifest.uiHints,contracts:e.manifest.contracts,channelConfigs:t,startupDeferConfiguredChannelFullLoadUntilAfterListen:e.candidate.packageManifest?.startup?.deferConfiguredChannelFullLoadUntilAfterListen===!0,...e.candidate.packageManifest?.channel?.id?{channelCatalogMeta:{id:e.candidate.packageManifest.channel.id,...typeof e.candidate.packageManifest.channel.label==`string`?{label:e.candidate.packageManifest.channel.label}:{},...typeof e.candidate.packageManifest.channel.blurb==`string`?{blurb:e.candidate.packageManifest.channel.blurb}:{},...e.candidate.packageManifest.channel.preferOver?{preferOver:e.candidate.packageManifest.channel.preferOver}:{}}}:{}}}function du(e){let t=_l((e.config??{}).plugins),n=e.env??process.env,r=Jn(n,Yn),a=au({workspaceDir:e.workspaceDir,plugins:t,hostVersion:r}),o=e.cache!==!1&&iu(n);if(o){let e=eu.get(a);if(e&&e.expiresAt>Date.now())return e.registry}let s=e.candidates?{candidates:e.candidates,diagnostics:e.diagnostics??[]}:Kl({workspaceDir:e.workspaceDir,extraPaths:t.loadPaths}),c=[...s.diagnostics],l=s.candidates,u=[],d=new Map,f=new Map;for(let e of l){let t=zi(e.rootDir);if(!t.ok){if(e.idHint&&tu.has(e.idHint))continue;c.push({level:`error`,message:t.error,source:t.manifestPath});continue}let n=t.manifest,a=Ql({currentVersion:r,minHostVersion:e.packageManifest?.install?.minHostVersion});if(!a.ok){let t=i.join(e.packageDir??e.rootDir,`package.json`);c.push({level:a.kind===`unknown_host_version`?`warn`:`error`,pluginId:n.id,source:t,message:a.kind===`invalid`?`plugin manifest invalid | ${a.error}`:a.kind===`unknown_host_version`?`plugin requires Fased >=${a.requirement.minimumLabel}, but this host version could not be determined; skipping load`:`plugin requires Fased >=${a.requirement.minimumLabel}, but this host is ${a.currentVersion}; skipping load`});continue}e.idHint&&e.idHint!==n.id&&c.push({level:`warn`,pluginId:n.id,source:e.source,message:`plugin id mismatch (manifest uses "${n.id}", entry hints "${e.idHint}")`});let o=n.configSchema,s=ou(t.manifestPath),l=s?`${t.manifestPath}:${s}`:t.manifestPath,p=d.get(n.id);if(p){let r=Tl(p.candidate.rootDir,f),i=Tl(e.rootDir,f);if(r&&i&&r===i){$l[e.origin]<$l[p.candidate.origin]&&(u[p.recordIndex]=uu({manifest:n,candidate:e,manifestPath:t.manifestPath,schemaCacheKey:l,configSchema:o}),d.set(n.id,{candidate:e,recordIndex:p.recordIndex}));continue}if(nu({manifest:n,candidate:e})&&u[p.recordIndex]?.runtimeOnly===!0){$l[e.origin]<$l[p.candidate.origin]&&(u[p.recordIndex]=uu({manifest:n,candidate:e,manifestPath:t.manifestPath,schemaCacheKey:l,configSchema:o}),d.set(n.id,{candidate:e,recordIndex:p.recordIndex}));continue}c.push({level:`warn`,pluginId:n.id,source:e.source,message:`duplicate plugin id detected; later plugin may be overridden (${e.source})`})}else d.set(n.id,{candidate:e,recordIndex:u.length});u.push(uu({manifest:n,candidate:e,manifestPath:t.manifestPath,schemaCacheKey:l,configSchema:o}))}let p={plugins:u,diagnostics:c};if(o){let e=ru(n);e>0&&eu.set(a,{expiresAt:Date.now()+e,registry:p})}return p}function fu(e){let t=process,n=t[e];if(n)return n;let r=new Map;return t[e]=r,r}fu(Symbol.for(`fased.fileLockHeldLocks`)),process.env.FASED_XAI_OAUTH_CLIENT_ID?.trim();const pu=/^(?:[^~]|~0|~1)*$/;function mu(e){return e===`value`?!0:e.startsWith(`/`)?e.slice(1).split(`/`).every(e=>pu.test(e)):!1}const hu=`https://api.chutes.ai`;`${hu}`,`${hu}`,`${hu}`,new Set(ee().map(e=>e.id)),new Map([`auth_permanent`,`auth`,`billing`,`format`,`model_not_found`,`timeout`,`overloaded`,`rate_limit`,`session_expired`,`unknown`].map((e,t)=>[e,t]));const gu={id:`glm-4-7-251222`,name:`GLM 4.7`,reasoning:!1,input:[`text`,`image`],contextWindow:2e5,maxTokens:4096},_u=[{id:`ark-code-latest`,name:`Ark Coding Plan`,reasoning:!1,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`doubao-seed-2.0-code`,name:`Doubao Seed 2.0 Code`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2.0-pro`,name:`Doubao Seed 2.0 Pro`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2.0-lite`,name:`Doubao Seed 2.0 Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-code`,name:`Doubao Seed Code`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`minimax-m2.5`,name:`MiniMax M2.5`,reasoning:!0,input:[`text`],contextWindow:2e5,maxTokens:128e3},{id:`glm-4.7`,name:`GLM 4.7 Coding`,reasoning:!1,input:[`text`],contextWindow:2e5,maxTokens:128e3},{id:`deepseek-v3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:32e3},{id:`kimi-k2.5`,name:`Kimi K2.5 Coding`,reasoning:!1,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3}];function vu(e,t){return{id:e.id,name:e.name,reasoning:e.reasoning,input:[...e.input],cost:t,contextWindow:e.contextWindow,maxTokens:e.maxTokens}}const yu={input:1e-4,output:2e-4,cacheRead:0,cacheWrite:0},bu=[{id:`seed-2-0-pro-260328`,name:`ByteDance Seed 2.0 Pro`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`seed-2-0-lite-260228`,name:`ByteDance Seed 2.0 Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`seed-2-0-mini-260215`,name:`ByteDance Seed 2.0 Mini`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`seed-2-0-code-preview-260328`,name:`ByteDance Seed 2.0 Code Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`deepseek-v3-2-251201`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:32e3},{id:`glm-4-7-251222`,name:`GLM 4.7`,reasoning:!1,input:[`text`],contextWindow:2e5,maxTokens:128e3}];function xu(e){return vu(e,yu)}const Su=[{id:`ark-code-latest`,name:`BytePlus Coding Plan`,reasoning:!1,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`dola-seed-2.0-pro`,name:`Dola Seed 2.0 Pro`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`dola-seed-2.0-lite`,name:`Dola Seed 2.0 Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`dola-seed-2.0-code`,name:`Dola Seed 2.0 Code`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`bytedance-seed-code`,name:`ByteDance Seed Code`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`glm-5.1`,name:`GLM 5.1`,reasoning:!1,input:[`text`],contextWindow:2e5,maxTokens:128e3},{id:`glm-4.7`,name:`GLM 4.7`,reasoning:!1,input:[`text`],contextWindow:2e5,maxTokens:128e3},{id:`kimi-k2.5`,name:`Kimi K2.5`,reasoning:!1,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`gpt-oss-120b`,name:`GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:32e3}];function Cu(){return[...Ws]}function wu(){return[...Ks]}function Tu(e){let t=e.trim().toLowerCase();return/^gpt-5(?:[.-]|$)/.test(t)?{tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:t===`claude-fable-5`||t===`claude-opus-4.8`||t===`claude-sonnet-5`?{tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!0}:t===`claude-haiku-4.5`?{tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!0}:t===`gemini-3.5-flash`||t===`gemini-3.1-pro`||t===`gemini-3-flash`?{tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}:{tools:!0,json:!0}}function Eu(e,t){let n=e.trim();if(!n)throw Error(`Model id required`);return{id:n,name:n,api:t,reasoning:!!Tu(n).thinkingMode,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:8192,capabilities:Tu(n)}}function Du(e){return Eu(e,`openai-responses`)}function Ou(e){return Eu(e,`openai-completions`)}const ku=[{id:`google/gemma-4-31B-turbo-TEE`,name:`google/gemma-4-31B-turbo-TEE`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:65536,cost:{input:.0245,output:.0978,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-32B-TEE`,name:`Qwen/Qwen3-32B-TEE`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.08,output:.24,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-5.1-TEE`,name:`zai-org/GLM-5.1-TEE`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:1.05,output:3.5,cacheRead:0,cacheWrite:0}},{id:`moonshotai/Kimi-K2.6-TEE`,name:`moonshotai/Kimi-K2.6-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65535,cost:{input:.95,output:4,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3.6-27B-TEE`,name:`Qwen/Qwen3.6-27B-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65536,cost:{input:.195,output:1.56,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-32B`,name:`Qwen/Qwen3-32B`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.08,output:.24,cacheRead:0,cacheWrite:0}},{id:`unsloth/Mistral-Nemo-Instruct-2407`,name:`unsloth/Mistral-Nemo-Instruct-2407`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:131072,cost:{input:.02,output:.04,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3-0324-TEE`,name:`deepseek-ai/DeepSeek-V3-0324-TEE`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:65536,cost:{input:.25,output:1,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-235B-A22B-Instruct-2507-TEE`,name:`Qwen/Qwen3-235B-A22B-Instruct-2507-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65536,cost:{input:.08,output:.55,cacheRead:0,cacheWrite:0}},{id:`openai/gpt-oss-120b-TEE`,name:`openai/gpt-oss-120b-TEE`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:65536,cost:{input:.05,output:.45,cacheRead:0,cacheWrite:0}},{id:`chutesai/Mistral-Small-3.1-24B-Instruct-2503`,name:`chutesai/Mistral-Small-3.1-24B-Instruct-2503`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:131072,cost:{input:.03,output:.11,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3.2-TEE`,name:`deepseek-ai/DeepSeek-V3.2-TEE`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:65536,cost:{input:.28,output:.42,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.7-TEE`,name:`zai-org/GLM-4.7-TEE`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:.4,output:2,cacheRead:0,cacheWrite:0}},{id:`moonshotai/Kimi-K2.5-TEE`,name:`moonshotai/Kimi-K2.5-TEE`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:65535,cost:{input:.45,output:2.2,cacheRead:0,cacheWrite:0}},{id:`unsloth/gemma-3-27b-it`,name:`unsloth/gemma-3-27b-it`,reasoning:!1,input:[`text`,`image`],contextWindow:128e3,maxTokens:65536,cost:{input:.04,output:.15,cacheRead:0,cacheWrite:0}},{id:`XiaomiMiMo/MiMo-V2-Flash-TEE`,name:`XiaomiMiMo/MiMo-V2-Flash-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65536,cost:{input:.09,output:.29,cacheRead:0,cacheWrite:0}},{id:`chutesai/Mistral-Small-3.2-24B-Instruct-2506`,name:`chutesai/Mistral-Small-3.2-24B-Instruct-2506`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:131072,cost:{input:.06,output:.18,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-R1-0528-TEE`,name:`deepseek-ai/DeepSeek-R1-0528-TEE`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:65536,cost:{input:.45,output:2.15,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-5-TEE`,name:`zai-org/GLM-5-TEE`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:.95,output:3.15,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3.1-TEE`,name:`deepseek-ai/DeepSeek-V3.1-TEE`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:65536,cost:{input:.2,output:.8,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3.1-Terminus-TEE`,name:`deepseek-ai/DeepSeek-V3.1-Terminus-TEE`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:65536,cost:{input:.23,output:.9,cacheRead:0,cacheWrite:0}},{id:`unsloth/gemma-3-4b-it`,name:`unsloth/gemma-3-4b-it`,reasoning:!1,input:[`text`,`image`],contextWindow:96e3,maxTokens:96e3,cost:{input:.01,output:.03,cacheRead:0,cacheWrite:0}},{id:`MiniMaxAI/MiniMax-M2.5-TEE`,name:`MiniMaxAI/MiniMax-M2.5-TEE`,reasoning:!0,input:[`text`],contextWindow:196608,maxTokens:65536,cost:{input:.3,output:1.1,cacheRead:0,cacheWrite:0}},{id:`tngtech/DeepSeek-TNG-R1T2-Chimera`,name:`tngtech/DeepSeek-TNG-R1T2-Chimera`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:163840,cost:{input:.25,output:.85,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-Coder-Next-TEE`,name:`Qwen/Qwen3-Coder-Next-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65536,cost:{input:.12,output:.75,cacheRead:0,cacheWrite:0}},{id:`NousResearch/Hermes-4-405B-FP8-TEE`,name:`NousResearch/Hermes-4-405B-FP8-TEE`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:65536,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3`,name:`deepseek-ai/DeepSeek-V3`,reasoning:!1,input:[`text`],contextWindow:163840,maxTokens:163840,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`openai/gpt-oss-20b`,name:`openai/gpt-oss-20b`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:131072,cost:{input:.04,output:.15,cacheRead:0,cacheWrite:0}},{id:`unsloth/Llama-3.2-3B-Instruct`,name:`unsloth/Llama-3.2-3B-Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:4096,cost:{input:.01,output:.01,cacheRead:0,cacheWrite:0}},{id:`unsloth/Mistral-Small-24B-Instruct-2501`,name:`unsloth/Mistral-Small-24B-Instruct-2501`,reasoning:!1,input:[`text`,`image`],contextWindow:32768,maxTokens:32768,cost:{input:.07,output:.3,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.7-FP8`,name:`zai-org/GLM-4.7-FP8`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.6-TEE`,name:`zai-org/GLM-4.6-TEE`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65536,cost:{input:.4,output:1.7,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3.5-397B-A17B-TEE`,name:`Qwen/Qwen3.5-397B-A17B-TEE`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:65536,cost:{input:.55,output:3.5,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen2.5-72B-Instruct`,name:`Qwen/Qwen2.5-72B-Instruct`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:32768,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`NousResearch/DeepHermes-3-Mistral-24B-Preview`,name:`NousResearch/DeepHermes-3-Mistral-24B-Preview`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:32768,cost:{input:.02,output:.1,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-Next-80B-A3B-Instruct`,name:`Qwen/Qwen3-Next-80B-A3B-Instruct`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:262144,cost:{input:.1,output:.8,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.6-FP8`,name:`zai-org/GLM-4.6-FP8`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-235B-A22B-Thinking-2507`,name:`Qwen/Qwen3-235B-A22B-Thinking-2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:262144,cost:{input:.11,output:.6,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-R1-Distill-Llama-70B`,name:`deepseek-ai/DeepSeek-R1-Distill-Llama-70B`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:131072,cost:{input:.03,output:.11,cacheRead:0,cacheWrite:0}},{id:`tngtech/R1T2-Chimera-Speed`,name:`tngtech/R1T2-Chimera-Speed`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:65536,cost:{input:.22,output:.6,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.6V`,name:`zai-org/GLM-4.6V`,reasoning:!0,input:[`text`,`image`],contextWindow:131072,maxTokens:65536,cost:{input:.3,output:.9,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen2.5-VL-32B-Instruct`,name:`Qwen/Qwen2.5-VL-32B-Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:16384,maxTokens:16384,cost:{input:.05,output:.22,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-VL-235B-A22B-Instruct`,name:`Qwen/Qwen3-VL-235B-A22B-Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-14B`,name:`Qwen/Qwen3-14B`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.05,output:.22,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen2.5-Coder-32B-Instruct`,name:`Qwen/Qwen2.5-Coder-32B-Instruct`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:32768,cost:{input:.03,output:.11,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-30B-A3B`,name:`Qwen/Qwen3-30B-A3B`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.06,output:.22,cacheRead:0,cacheWrite:0}},{id:`unsloth/gemma-3-12b-it`,name:`unsloth/gemma-3-12b-it`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:131072,cost:{input:.03,output:.1,cacheRead:0,cacheWrite:0}},{id:`unsloth/Llama-3.2-1B-Instruct`,name:`unsloth/Llama-3.2-1B-Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:4096,cost:{input:.01,output:.01,cacheRead:0,cacheWrite:0}},{id:`nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16-TEE`,name:`nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16-TEE`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:4096,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`NousResearch/Hermes-4-14B`,name:`NousResearch/Hermes-4-14B`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.01,output:.05,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3Guard-Gen-0.6B`,name:`Qwen/Qwen3Guard-Gen-0.6B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:4096,cost:{input:.01,output:.01,cacheRead:0,cacheWrite:0}},{id:`rednote-hilab/dots.ocr`,name:`rednote-hilab/dots.ocr`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:131072,cost:{input:.01,output:.01,cacheRead:0,cacheWrite:0}}];function Au(e){return{...e,compat:{supportsUsageInStreaming:!1}}}const ju={input:1e-4,output:2e-4,cacheRead:0,cacheWrite:0},Mu=[{id:`doubao-seed-2-0-pro-260215`,name:`Doubao Seed 2.0 Pro`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2-0-lite-260215`,name:`Doubao Seed 2.0 Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2-0-mini-260215`,name:`Doubao Seed 2.0 Mini`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2-0-code-preview-260215`,name:`Doubao Seed 2.0 Code Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},gu,{id:`deepseek-v3-2-251201`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`,`image`],contextWindow:128e3,maxTokens:4096}];function Nu(e){return vu(e,ju)}const Pu=[..._u];function Fu(e){let t=e.toLowerCase();return t.startsWith(`gpt-`)?`openai-responses`:t.startsWith(`claude-`)?`anthropic-messages`:t.startsWith(`gemini-`)?`google-generative-ai`:`openai-completions`}function Iu(e){let t=e.toLowerCase();return!(t.includes(`glm`)||t.includes(`minimax`))}const Lu={"gpt-5.5":{input:5,output:30,cacheRead:.5,cacheWrite:0},"gpt-5.5-pro":{input:30,output:180,cacheRead:30,cacheWrite:0},"gpt-5.4":{input:2.5,output:15,cacheRead:.25,cacheWrite:0},"gpt-5.4-pro":{input:30,output:180,cacheRead:30,cacheWrite:0},"gpt-5.4-mini":{input:.75,output:4.5,cacheRead:.075,cacheWrite:0},"gpt-5.4-nano":{input:.2,output:1.25,cacheRead:.02,cacheWrite:0},"gpt-5.3-codex":{input:1.75,output:14,cacheRead:.175,cacheWrite:0},"gpt-5.3-codex-spark":{input:1.75,output:14,cacheRead:.175,cacheWrite:0},"gpt-5.2":{input:1.75,output:14,cacheRead:.175,cacheWrite:0},"gpt-5.2-codex":{input:1.75,output:14,cacheRead:.175,cacheWrite:0},"claude-fable-5":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-opus-4-8":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-sonnet-5":{input:3,output:15,cacheRead:.3,cacheWrite:3.75},"claude-opus-4-7":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-opus-4-6":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-opus-4-5":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-sonnet-4-6":{input:3,output:15,cacheRead:.3,cacheWrite:3.75},"claude-sonnet-4-5":{input:3,output:15,cacheRead:.3,cacheWrite:3.75},"claude-haiku-4-5":{input:1,output:5,cacheRead:.1,cacheWrite:1.25},"gemini-3.5-flash":{input:.5,output:3,cacheRead:.05,cacheWrite:0},"gemini-3.1-pro":{input:2,output:12,cacheRead:.2,cacheWrite:0},"gemini-3-flash":{input:.5,output:3,cacheRead:.05,cacheWrite:0},"qwen3.7-plus":{input:.5,output:3,cacheRead:.05,cacheWrite:.625},"qwen3.6-plus":{input:.5,output:3,cacheRead:.05,cacheWrite:.625},"minimax-m2.7":{input:.3,output:1.2,cacheRead:.06,cacheWrite:.375},"glm-5.2":{input:1.4,output:4.4,cacheRead:.26,cacheWrite:0},"glm-5.1":{input:1.4,output:4.4,cacheRead:.26,cacheWrite:0},"kimi-k2.6":{input:.95,output:4,cacheRead:.16,cacheWrite:0},"gpt-5.1-codex":{input:1.07,output:8.5,cacheRead:.107,cacheWrite:0},"gemini-3-pro":{input:2,output:12,cacheRead:.2,cacheWrite:0},"gpt-5.1-codex-mini":{input:.25,output:2,cacheRead:.025,cacheWrite:0},"gpt-5.1":{input:1.07,output:8.5,cacheRead:.107,cacheWrite:0},"glm-4.7":{input:0,output:0,cacheRead:0,cacheWrite:0},"gpt-5.1-codex-max":{input:1.25,output:10,cacheRead:.125,cacheWrite:0}},Ru={input:0,output:0,cacheRead:0,cacheWrite:0},zu={"gpt-5.5":4e5,"gpt-5.5-pro":4e5,"gpt-5.4":4e5,"gpt-5.4-pro":4e5,"gpt-5.4-mini":4e5,"gpt-5.4-nano":4e5,"gpt-5.3-codex":4e5,"gpt-5.3-codex-spark":4e5,"gpt-5.2":4e5,"gpt-5.2-codex":4e5,"claude-fable-5":1e6,"claude-opus-4-8":1e6,"claude-sonnet-5":1e6,"claude-opus-4-7":1e6,"claude-opus-4-6":1e6,"claude-opus-4-5":2e5,"claude-sonnet-4-6":1e6,"claude-sonnet-4-5":1e6,"claude-haiku-4-5":2e5,"gemini-3.5-flash":1048576,"gemini-3.1-pro":1048576,"qwen3.7-plus":1e6,"qwen3.6-plus":262144,"minimax-m2.7":262144,"glm-5.2":1e6,"glm-5.1":204800,"kimi-k2.6":262144,"gpt-5.1-codex":4e5,"gemini-3-pro":1048576,"gpt-5.1-codex-mini":4e5,"gpt-5.1":4e5,"glm-4.7":204800,"gemini-3-flash":1048576,"gpt-5.1-codex-max":4e5};function Bu(e){return zu[e]??128e3}const Vu={"gpt-5.5":128e3,"gpt-5.5-pro":128e3,"gpt-5.4":128e3,"gpt-5.4-pro":128e3,"gpt-5.4-mini":128e3,"gpt-5.4-nano":128e3,"gpt-5.3-codex":128e3,"gpt-5.3-codex-spark":128e3,"gpt-5.2":128e3,"gpt-5.2-codex":128e3,"claude-fable-5":128e3,"claude-opus-4-8":128e3,"claude-sonnet-5":128e3,"claude-opus-4-7":128e3,"claude-opus-4-6":128e3,"claude-opus-4-5":64e3,"claude-sonnet-4-6":128e3,"claude-sonnet-4-5":64e3,"claude-haiku-4-5":64e3,"gemini-3.5-flash":65536,"gemini-3.1-pro":65536,"qwen3.7-plus":65536,"qwen3.6-plus":65536,"minimax-m2.7":65536,"glm-5.2":131072,"glm-5.1":131072,"kimi-k2.6":65536,"gpt-5.1-codex":128e3,"gemini-3-pro":65536,"gpt-5.1-codex-mini":128e3,"gpt-5.1":128e3,"glm-4.7":131072,"gemini-3-flash":65536,"gpt-5.1-codex-max":128e3};function Hu(e){return Vu[e]??8192}function Uu(e){return{id:e,name:Gu(e),api:Fu(e),reasoning:!0,input:Iu(e)?[`text`,`image`]:[`text`],cost:Lu[e]??Ru,contextWindow:Bu(e),maxTokens:Hu(e),capabilities:Ha(e)}}const Wu={"gpt-5.5":`GPT-5.5`,"gpt-5.5-pro":`GPT-5.5 Pro`,"gpt-5.4":`GPT-5.4`,"gpt-5.4-pro":`GPT-5.4 Pro`,"gpt-5.4-mini":`GPT-5.4 Mini`,"gpt-5.4-nano":`GPT-5.4 Nano`,"gpt-5.3-codex":`GPT-5.3 Codex`,"gpt-5.3-codex-spark":`GPT-5.3 Codex Spark`,"gpt-5.2":`GPT-5.2`,"gpt-5.2-codex":`GPT-5.2 Codex`,"claude-fable-5":`Claude Fable 5`,"claude-opus-4-8":`Claude Opus 4.8`,"claude-sonnet-5":`Claude Sonnet 5`,"claude-opus-4-7":`Claude Opus 4.7`,"claude-opus-4-6":`Claude Opus 4.6`,"claude-opus-4-5":`Claude Opus 4.5`,"claude-sonnet-4-6":`Claude Sonnet 4.6`,"claude-sonnet-4-5":`Claude Sonnet 4.5`,"claude-haiku-4-5":`Claude Haiku 4.5`,"gemini-3.5-flash":`Gemini 3.5 Flash`,"gemini-3.1-pro":`Gemini 3.1 Pro`,"qwen3.7-plus":`Qwen3.7 Plus`,"qwen3.6-plus":`Qwen3.6 Plus`,"minimax-m2.7":`MiniMax M2.7`,"glm-5.2":`GLM 5.2`,"glm-5.1":`GLM 5.1`,"kimi-k2.6":`Kimi K2.6`,"gpt-5.1-codex":`GPT-5.1 Codex`,"gemini-3-pro":`Gemini 3 Pro`,"gpt-5.1-codex-mini":`GPT-5.1 Codex Mini`,"gpt-5.1":`GPT-5.1`,"glm-4.7":`GLM-4.7`,"gemini-3-flash":`Gemini 3 Flash`,"gpt-5.1-codex-max":`GPT-5.1 Codex Max`};function Gu(e){return Wu[e]?Wu[e]:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}function Ku(){return za.map(Uu)}const qu={input:0,output:0,cacheRead:0,cacheWrite:0};function L(e){return{id:e.id,name:e.name??e.id,reasoning:e.reasoning??!1,input:e.input??[`text`],cost:e.cost??qu,contextWindow:e.contextWindow??2e5,maxTokens:e.maxTokens??8192,...e.api?{api:e.api}:{},...e.compat?{compat:e.compat}:{},...e.capabilities?{capabilities:e.capabilities}:{}}}const Ju=[L({id:`gpt-5.6`,name:`GPT-5.6 Sol`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-responses`,cost:{input:5,output:30,cacheRead:.5,cacheWrite:6.25}}),L({id:`gpt-5.6-terra`,name:`GPT-5.6 Terra`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-responses`,cost:{input:2.5,output:15,cacheRead:.25,cacheWrite:3.125}}),L({id:`gpt-5.6-luna`,name:`GPT-5.6 Luna`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-responses`,cost:{input:1,output:6,cacheRead:.1,cacheWrite:1.25}}),L({id:`gpt-5.5`,name:`GPT-5.5`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,api:`openai-responses`,cost:{input:5,output:30,cacheRead:.5,cacheWrite:0}}),L({id:`gpt-5.4`,name:`GPT-5.4`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,api:`openai-responses`,cost:{input:2.5,output:15,cacheRead:.25,cacheWrite:0}}),L({id:`gpt-5.4-mini`,name:`GPT-5.4 Mini`,reasoning:!0,input:[`text`,`image`],contextWindow:4e5,maxTokens:128e3,api:`openai-responses`,cost:{input:.75,output:4.5,cacheRead:.075,cacheWrite:0}}),L({id:`gpt-5.4-nano`,name:`GPT-5.4 Nano`,reasoning:!0,input:[`text`,`image`],contextWindow:4e5,maxTokens:128e3,api:`openai-responses`,cost:{input:.2,output:1.25,cacheRead:.02,cacheWrite:0}})];L({id:`gpt-5.6-sol`,name:`GPT-5.6 Sol`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-codex-responses`,compat:{responsesLite:!0}}),L({id:`gpt-5.6-terra`,name:`GPT-5.6 Terra`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-codex-responses`,compat:{responsesLite:!0}}),L({id:`gpt-5.6-luna`,name:`GPT-5.6 Luna`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-codex-responses`,compat:{responsesLite:!0}}),L({id:`gpt-5.5`,name:`GPT-5.5 Codex`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,api:`openai-codex-responses`}),L({id:`gpt-5.4`,name:`GPT-5.4 Codex`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,api:`openai-codex-responses`}),L({id:`gpt-5.4-mini`,name:`GPT-5.4 Mini Codex`,reasoning:!0,input:[`text`,`image`],contextWindow:4e5,maxTokens:128e3,api:`openai-codex-responses`,cost:{input:.75,output:4.5,cacheRead:.075,cacheWrite:0}}),L({id:`gpt-5.3-codex-spark`,name:`GPT-5.3 Codex Spark`,reasoning:!0,input:[`text`],contextWindow:4e5,maxTokens:128e3,api:`openai-codex-responses`});const Yu=[L({id:`claude-fable-5`,name:`Claude Fable 5`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,cost:{input:10,output:50,cacheRead:1,cacheWrite:12.5}}),L({id:`claude-opus-4-8`,name:`Claude Opus 4.8`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,cost:{input:5,output:25,cacheRead:.5,cacheWrite:6.25}}),L({id:`claude-sonnet-5`,name:`Claude Sonnet 5`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,cost:{input:2,output:10,cacheRead:.2,cacheWrite:2.5}}),L({id:`claude-haiku-4-5`,name:`Claude Haiku 4.5`,reasoning:!0,input:[`text`,`image`],contextWindow:2e5,maxTokens:64e3})],Xu=[L({id:`gemini-3.5-flash`,name:`Gemini 3.5 Flash`,reasoning:!0,input:[`text`,`image`],contextWindow:1048576,maxTokens:65536}),L({id:`gemini-3.1-pro-preview`,name:`Gemini 3.1 Pro Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:1048576,maxTokens:65536}),L({id:`gemini-3-flash-preview`,name:`Gemini 3 Flash Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:1048576,maxTokens:65536}),L({id:`gemini-3.1-flash-lite`,name:`Gemini 3.1 Flash-Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:1048576,maxTokens:65536})];L({id:`grok-4.3`,name:`Grok 4.3`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:64e3,api:`openai-responses`,cost:{input:1.25,output:2.5,cacheRead:.2,cacheWrite:0},capabilities:{tools:!0,json:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1}}),L({id:`grok-build-0.1`,name:`Grok Build 0.1`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:64e3,api:`openai-responses`,cost:{input:1.25,output:2.5,cacheRead:.2,cacheWrite:0},capabilities:{tools:!0,json:!0}}),L({id:`glm-5.2`,name:`GLM-5.2`,reasoning:!0,contextWindow:1e6,maxTokens:128e3}),L({id:`glm-5.1`,name:`GLM-5.1`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-5`,name:`GLM-5`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-5-turbo`,name:`GLM-5 Turbo`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-5v-turbo`,name:`GLM-5V Turbo`,reasoning:!0,input:[`text`,`image`],contextWindow:2e5,maxTokens:128e3}),L({id:`glm-4.7`,name:`GLM-4.7`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-4.7-flashx`,name:`GLM-4.7 FlashX`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-4.7-flash`,name:`GLM-4.7 Flash`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`MiniMax-M2.7`,name:`MiniMax M2.7`,reasoning:!0,contextWindow:204800,maxTokens:131072}),L({id:`MiniMax-M2.7-highspeed`,name:`MiniMax M2.7 Highspeed`,reasoning:!0,contextWindow:204800,maxTokens:131072}),L({id:`MiniMax-M2.5`,name:`MiniMax M2.5`,reasoning:!0,contextWindow:204800,maxTokens:131072}),L({id:`MiniMax-M2.5-highspeed`,name:`MiniMax M2.5 Highspeed`,reasoning:!0,contextWindow:204800,maxTokens:131072}),L({id:`kimi-k2.6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768}),L({id:`kimi-k2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:8192}),L({id:`kimi-for-coding`,name:`Kimi Coding`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768}),L({id:`mistral-medium-3.5`,name:`Mistral Medium 3.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:1.5,output:7.5,cacheRead:0,cacheWrite:0}}),L({id:`mistral-small-2603`,name:`Mistral Small 4`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.15,output:.6,cacheRead:0,cacheWrite:0}}),L({id:`mistral-large-2512`,name:`Mistral Large 3`,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.5,output:1.5,cacheRead:0,cacheWrite:0}}),L({id:`devstral-2512`,name:`Devstral 2`,contextWindow:262144,maxTokens:262144,cost:{input:.4,output:2,cacheRead:0,cacheWrite:0}}),L({id:`ministral-14b-2512`,name:`Ministral 3 14B`,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.2,output:.2,cacheRead:0,cacheWrite:0}}),L({id:`ministral-8b-2512`,name:`Ministral 3 8B`,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.15,output:.15,cacheRead:0,cacheWrite:0}}),L({id:`ministral-3b-2512`,name:`Ministral 3 3B`,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.1,output:.1,cacheRead:0,cacheWrite:0}}),L({id:`qwen3.7-max`,name:`qwen3.7-max`,input:[`text`,`image`],contextWindow:1e6,maxTokens:65536}),L({id:`qwen3.7-plus`,name:`qwen3.7-plus`,input:[`text`,`image`],contextWindow:1e6,maxTokens:65536}),L({id:`qwen3.6-flash`,name:`qwen3.6-flash`,input:[`text`,`image`],contextWindow:1e6,maxTokens:65536}),L({id:`deepseek-v4-pro`,name:`deepseek-v4-pro`,contextWindow:1e6,maxTokens:131072}),L({id:`deepseek-v4-flash`,name:`deepseek-v4-flash`,contextWindow:1e6,maxTokens:131072}),L({id:`kimi-k2.7-code`,name:`kimi-k2.7-code`,contextWindow:262144,maxTokens:32768}),L({id:`glm-5.2`,name:`glm-5.2`,contextWindow:1e6,maxTokens:128e3}),L({id:`MiniMax-M2.5`,name:`MiniMax-M2.5`,reasoning:!0,contextWindow:1e6,maxTokens:65536}),L({id:`ernie-5.1`,name:`ERNIE 5.1`,reasoning:!0,input:[`text`,`image`],contextWindow:128e3,maxTokens:65536}),L({id:`ernie-5.0`,name:`ERNIE 5.0`,reasoning:!0,input:[`text`,`image`],contextWindow:128e3,maxTokens:65536}),L({id:`ernie-5.0-thinking-latest`,name:`ERNIE 5.0 Thinking Latest`,reasoning:!0,input:[`text`,`image`],contextWindow:128e3,maxTokens:65536}),L({id:`ernie-5.0-thinking-preview`,name:`ERNIE 5.0 Thinking Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:119e3,maxTokens:64e3}),L({id:`ernie-x1.1-preview`,name:`ERNIE X1.1 Preview`,reasoning:!0,contextWindow:64e3,maxTokens:65536}),L({id:`ernie-x1.1`,name:`ERNIE X1.1`,reasoning:!0,contextWindow:64e3,maxTokens:65536}),L({id:`ernie-x1-turbo-32k`,name:`ERNIE X1 Turbo 32K`,reasoning:!0,contextWindow:32e3,maxTokens:28160}),L({id:`deepseek-v4-pro`,name:`DeepSeek V4 Pro`,reasoning:!0,contextWindow:1e6,maxTokens:131072}),L({id:`deepseek-v4-flash`,name:`DeepSeek V4 Flash`,reasoning:!0,contextWindow:1e6,maxTokens:131072}),L({id:`deepseek-v3.2-think`,name:`DeepSeek V3.2 Think`,reasoning:!0,contextWindow:128e3,maxTokens:32768}),L({id:`deepseek-v3.2`,name:`DeepSeek V3.2`,reasoning:!0,contextWindow:128e3,maxTokens:32768}),[L({id:`auto`,name:`OpenRouter Auto`,input:[`text`,`image`],contextWindow:2e5}),L({id:`moonshotai/kimi-k2.6`,name:`MoonshotAI Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,api:`openai-completions`,cost:{input:1,output:3,cacheRead:.2,cacheWrite:0}}),L({id:`moonshotai/kimi-k2.5`,name:`MoonshotAI Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,api:`openai-completions`,cost:{input:.44,output:2,cacheRead:.22,cacheWrite:0}}),...Ju.map(e=>({...e,id:`openai/${e.id}`,name:`OpenAI ${e.name}`,api:`openai-completions`})),...Yu.map(e=>({...e,id:`anthropic/${e.id}`,name:`Anthropic ${e.name}`,api:`openai-completions`})),...Xu.map(e=>({...e,id:`google/${e.id}`,name:`Google ${e.name}`,api:`openai-completions`}))],ku.map(Au),Ka.map(Ja),io.map(oo),Qa.map(eo),Pa.map(La),Ku(),lo.map(vo),ka.map(e=>ja({id:e.id})),Cu().map(Du),wu().map(Ou),Mu.map(Nu),Pu.map(Nu),Pu.map(Nu),bu.map(xu),Su.map(xu),Su.map(xu),So.map(e=>Co(e));const Zu=`qwen3.7-plus`;`${Zu}`,`${Zu}`;const Qu=1e6,$u=65536,ed={input:0,output:0,cacheRead:0,cacheWrite:0},td=[{id:`qwen3.7-max`,name:`Qwen3.7 Max`,reasoning:!0,input:[`text`,`image`],cost:ed,contextWindow:Qu,maxTokens:$u},{id:`qwen3.7-plus`,name:`Qwen3.7 Plus`,reasoning:!0,input:[`text`,`image`],cost:ed,contextWindow:Qu,maxTokens:$u},{id:`qwen3.6-flash`,name:`Qwen3.6 Flash`,reasoning:!0,input:[`text`,`image`],cost:ed,contextWindow:1e6,maxTokens:$u}];td[0],td[1],td[2];function nd(e){return e===`gemini-3.5-flash-preview`?`gemini-3.5-flash`:e===`gemini-3-pro`||e===`gemini-3-pro-preview`||e===`gemini-3.1-pro`?`gemini-3.1-pro-preview`:e===`gemini-3-flash`||e===`gemini-3.1-flash`||e===`gemini-3.1-flash-preview`?`gemini-3-flash-preview`:e===`gemini-3.1-flash-lite`||e===`gemini-3.1-flash-lite-preview`?`gemini-3.1-flash-lite`:e}const rd={"opus-4.8":`claude-opus-4-8`,"opus-4.6":`claude-opus-4-6`,"opus-4.5":`claude-opus-4-5`,"sonnet-5":`claude-sonnet-5`,"sonnet-4.6":`claude-sonnet-4-6`,"sonnet-4.5":`claude-sonnet-4-5`},id=[`gpt-5.4-codex`,`gpt-5.3-codex`];function ad(e){let t=e.trim().toLowerCase();return t===`z.ai`||t===`z-ai`?`zai`:t===`opencode-zen`?`opencode`:t===`kimi-code`?`kimi-coding`:t===`moonshotai`||t===`moonshot-ai`?`moonshot`:t===`bytedance`||t===`doubao`?`volcengine`:t}function od(e){let t=e.trim();return t&&(rd[t.toLowerCase()]??t)}function sd(e,t){if(e===`anthropic`)return od(t);if(e===`vercel-ai-gateway`&&!t.includes(`/`)){if(t.toLowerCase().startsWith(`gpt-`))return`openai/${t}`;let e=od(t);if(e.startsWith(`claude-`))return`anthropic/${e}`}return e===`google`?nd(t):e===`openrouter`&&!t.includes(`/`)?`openrouter/${t}`:t}function cd(e,t){if(e!==`openai`)return!1;let n=t.trim().toLowerCase();return n?id.some(e=>n===e||n.startsWith(`${e}-`)):!1}function ld(e,t){let n=ad(e),r=sd(n,t.trim());return cd(n,r)?{provider:`openai-codex`,model:r}:{provider:n,model:r}}function ud(e,t){let n=e.trim();if(!n)return null;let r=n.indexOf(`/`);if(r===-1)return ld(t,n);let i=n.slice(0,r).trim(),a=n.slice(r+1).trim();return!i||!a?null:ld(i,a)}const dd=`elevenlabs`;function fd(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function pd(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function md(e){let t=pd(e);if(t)return t;let n=ol(e);if(n)return n;if(fd(e)&&Object.keys(e).length>0)return e}function hd(e){return md(e)!==void 0}function gd(e){if(!fd(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return Object.keys(t).length>0?t:void 0}function _d(e){if(!fd(e))return;let t={};for(let[n,r]of Object.entries(e))if(r!==void 0){if(n===`voiceAliases`){let e=gd(r);e&&(t.voiceAliases=e);continue}if(n===`apiKey`){let e=md(r);e&&(t.apiKey=e);continue}if(n===`voiceId`||n===`modelId`||n===`outputFormat`){let e=pd(r);e&&(t[n]=e);continue}t[n]=r}return Object.keys(t).length>0?t:void 0}function vd(e){if(!fd(e))return;let t={};for(let[n,r]of Object.entries(e)){let e=pd(n);if(!e)continue;let i=_d(r);i&&(t[e]=i)}return Object.keys(t).length>0?t:void 0}function yd(e){let t={},n=pd(e.voiceId);n&&(t.voiceId=n);let r=gd(e.voiceAliases);r&&(t.voiceAliases=r);let i=pd(e.modelId);i&&(t.modelId=i);let a=pd(e.outputFormat);a&&(t.outputFormat=a);let o=md(e.apiKey);return o&&(t.apiKey=o),t}function bd(e){return _d({voiceId:e.voiceId,voiceAliases:e.voiceAliases,modelId:e.modelId,outputFormat:e.outputFormat,apiKey:e.apiKey})}function xd(e){let t=pd(e.provider);if(t)return t;let n=e.providers?Object.keys(e.providers):[];return n.length===1?n[0]:void 0}function Sd(e){if(!fd(e))return;let t=e,n=typeof t.provider==`string`||fd(t.providers),r={},i=yd(t);if(Object.keys(i).length>0&&Object.assign(r,i),typeof t.interruptOnSpeech==`boolean`&&(r.interruptOnSpeech=t.interruptOnSpeech),n){let e=vd(t.providers),n=pd(t.provider);if(e&&(r.providers=e),n)r.provider=n;else if(e){let t=Object.keys(e);t.length===1&&(r.provider=t[0])}return Object.keys(r).length>0?r:void 0}let a=bd(t);return a&&(r.provider=dd,r.providers={[dd]:a}),Object.keys(r).length>0?r:void 0}function Cd(e){if(!e.talk)return e;let t=Sd(e.talk);return t?{...e,talk:t}:e}function wd(e){let t=Sd(e);if(!t)return{};let n=xd(t);return n?{provider:n,config:t.providers?.[n]}:{}}function Td(e={}){let t=e.fs??n,r=e.os??p,a=e.path??i,o=r.homedir(),s=[`.profile`,`.zprofile`,`.zshrc`,`.bashrc`].map(e=>a.join(o,e));for(let e of s)if(t.existsSync(e))try{let n=t.readFileSync(e,`utf-8`).match(/(?:^|\n)\s*(?:export\s+)?ELEVENLABS_API_KEY\s*=\s*["']?([^\n"']+)["']?/)?.[1]?.trim();if(n)return n}catch{}return null}function Ed(e=process.env,t={}){return(e.ELEVENLABS_API_KEY??``).trim()||Td(t)}let Dd={warned:!1};const Od={opus:`anthropic/claude-opus-4-8`,sonnet:`anthropic/claude-sonnet-5`,gpt:`openai/gpt-5.6`,"gpt-mini":`openai/gpt-5.4-mini`,gemini:`google/gemini-3.5-flash`,"gemini-flash":`google/gemini-3-flash-preview`,"gemini-flash-lite":`google/gemini-3.1-flash-lite`},kd={input:0,output:0,cacheRead:0,cacheWrite:0},Ad=[`text`];function jd(e,t){return t||(ad(e)===`anthropic`?`anthropic-messages`:void 0)}function Md(e){return typeof e==`number`&&Number.isFinite(e)&&e>0}function Nd(e){return{input:typeof e?.input==`number`?e.input:kd.input,output:typeof e?.output==`number`?e.output:kd.output,cacheRead:typeof e?.cacheRead==`number`?e.cacheRead:kd.cacheRead,cacheWrite:typeof e?.cacheWrite==`number`?e.cacheWrite:kd.cacheWrite}}function Pd(e){let t=e.auth?.profiles??{},n=Object.entries(t).filter(([,e])=>e?.provider===`anthropic`),r=e.auth?.order?.anthropic??[];for(let e of r){let n=t[e];if(!(!n||n.provider!==`anthropic`)){if(n.mode===`api_key`)return`api_key`;if(n.mode===`oauth`||n.mode===`token`)return`oauth`}}let i=n.some(([,e])=>e?.mode===`api_key`),a=n.some(([,e])=>e?.mode===`oauth`||e?.mode===`token`);return i&&!a?`api_key`:a&&!i||process.env.ANTHROPIC_OAUTH_TOKEN?.trim()?`oauth`:process.env.ANTHROPIC_API_KEY?.trim()?`api_key`:null}function Fd(e){if(!e||typeof e!=`string`)return null;let t=e.trim();return t?Od[t.toLowerCase()]??t:null}function Id(e){if(!e)return!1;let t=ad(e.provider),n=e.model.toLowerCase();return t===`anthropic`?!0:t===`amazon-bedrock`&&n.includes(`anthropic.claude`)}function Ld(e){let t=e.messages;if(t?.ackReactionScope!==void 0)return e;let n=t?{...t}:{};return n.ackReactionScope=`group-mentions`,{...e,messages:n}}function Rd(e,t={}){let n=e.session;if(!n||n.mainKey===void 0)return e;let r=n.mainKey.trim(),i=t.warn??console.warn,a=t.warnState??Dd,o={...e,session:{...n,mainKey:`main`}};return r&&r!==`main`&&!a.warned&&(a.warned=!0,i(`session.mainKey is ignored; main session is always "main".`)),o}function zd(e){let t=Cd(e),n=Ed();if(!n)return t;let r=t.talk,i=wd(r);if(i.provider&&i.provider!==dd||hd(i.config?.apiKey)||hd(r?.apiKey))return t;let a=i.provider??dd,o={...r?.providers};o[a]={...o[a],apiKey:n};let s={...r,provider:r?.provider??a,providers:o,apiKey:n};return{...t,talk:s}}function Bd(e){return Cd(e)}function Vd(e){let t=!1,n=e,r=n.models?.providers;if(r){let e={...r};for(let[n,i]of Object.entries(r)){let r=i.models;if(!Array.isArray(r)||r.length===0)continue;let a=jd(n,i.api),o=i;a&&i.api!==a&&(t=!0,o={...o,api:a});let s=!1,c=r.map(e=>{let t=e,n=!1,r=typeof t.reasoning==`boolean`?t.reasoning:!1;t.reasoning!==r&&(n=!0);let i=t.input??[...Ad];t.input===void 0&&(n=!0);let o=Nd(t.cost);(!t.cost||t.cost.input!==o.input||t.cost.output!==o.output||t.cost.cacheRead!==o.cacheRead||t.cost.cacheWrite!==o.cacheWrite)&&(n=!0);let c=Md(t.contextWindow)?t.contextWindow:2e5;t.contextWindow!==c&&(n=!0);let l=Math.min(8192,c),u=Md(t.maxTokens)?t.maxTokens:l,d=Math.min(u,c);t.maxTokens!==d&&(n=!0);let f=t.api??a;return t.api!==f&&(n=!0),n?(s=!0,{...t,reasoning:r,input:i,cost:o,contextWindow:c,maxTokens:d,api:f}):e});if(!s){o!==i&&(e[n]=o);continue}e[n]={...o,models:c},t=!0}t&&(n={...n,models:{...n.models,providers:e}})}let i=n.agents?.defaults;if(!i)return t?n:e;let a=i.models??{};if(Object.keys(a).length===0)return t?n:e;let o={...a};for(let[e,n]of Object.entries(Od)){let r=o[n];r&&r.alias===void 0&&(o[n]={...r,alias:e},t=!0)}return t?{...n,agents:{...n.agents,defaults:{...i,models:o}}}:e}function Hd(e){let t=e.agents,n=t?.defaults,r=typeof n?.maxConcurrent==`number`&&Number.isFinite(n.maxConcurrent),i=typeof n?.subagents?.maxConcurrent==`number`&&Number.isFinite(n.subagents.maxConcurrent);if(r&&i)return e;let a=!1,o=n?{...n}:{};r||(o.maxConcurrent=4,a=!0);let s=n?.subagents?{...n.subagents}:{};return i||(s.maxConcurrent=8,a=!0),a?{...e,agents:{...t,defaults:{...o,subagents:s}}}:e}function Ud(e){let t=e.logging;return!t||t.redactSensitive?e:{...e,logging:{...t,redactSensitive:`tools`}}}function Wd(e){let t=e.agents?.defaults;if(!t)return e;let n=Pd(e);if(!n)return e;let r=!1,i={...t},a=t.contextPruning??{},o=t.heartbeat??{};if(t.contextPruning?.mode===void 0&&(i.contextPruning={...a,mode:`cache-ttl`,ttl:t.contextPruning?.ttl??`1h`},r=!0),t.heartbeat?.every===void 0&&(i.heartbeat={...o,every:n===`oauth`?`1h`:`30m`},r=!0),n===`api_key`){let e=t.models?{...t.models}:{},n=!1;for(let[t,r]of Object.entries(e)){if(!Id(ud(t,`anthropic`)))continue;let i=r??{},a=i.params??{};typeof a.cacheRetention!=`string`&&(e[t]={...i,params:{...a,cacheRetention:`short`}},n=!0)}let a=Fd(aa(t.model)??void 0);if(a){let t=ud(a,`anthropic`);if(Id(t)){let r=`${t.provider}/${t.model}`,i=e[r]??{},a=i.params??{};typeof a.cacheRetention!=`string`&&(e[r]={...i,params:{...a,cacheRetention:`short`}},n=!0)}}n&&(i.models=e,r=!0)}return r?{...e,agents:{...e.agents,defaults:i}}:e}function Gd(e){let t=e.agents?.defaults;if(!t)return e;let n=t?.compaction;return n?.mode?e:{...e,agents:{...e.agents,defaults:{...t,compaction:{...n,mode:`safeguard`}}}}}const Kd=/\$\{[A-Z_][A-Z0-9_]*\}/;function qd(e){return Kd.test(e)}function Jd(e,t){let n=/^[A-Z_][A-Z0-9_]*$/,r=[];for(let i=0;i<e.length;i++){if(e[i]===`$`){if(e[i+1]===`$`&&e[i+2]===`{`){let t=i+3,a=e.indexOf(`}`,t);if(a!==-1){let o=e.slice(t,a);if(n.test(o)){r.push(`\${${o}}`),i=a;continue}}}if(e[i+1]===`{`){let a=i+2,o=e.indexOf(`}`,a);if(o!==-1){let s=e.slice(a,o);if(n.test(s)){let e=t[s];if(e===void 0||e===``)return null;r.push(e),i=o;continue}}}}r.push(e[i])}return r.join(``)}function Yd(e,t,n=process.env){if(t==null)return e;if(typeof e==`string`&&typeof t==`string`)return qd(t)&&Jd(t,n)===e?t:e;if(Array.isArray(e)&&Array.isArray(t))return e.map((e,r)=>r<t.length?Yd(e,t[r],n):e);if(w(e)&&w(t)){let r={};for(let[i,a]of Object.entries(e))i in t?r[i]=Yd(a,t[i],n):r[i]=a;return r}return e}const Xd=/^[A-Z_][A-Z0-9_]*$/;var Zd=class extends Error{constructor(e,t){super(`Missing env var "${e}" referenced at config path: ${t}`),this.varName=e,this.configPath=t,this.name=`MissingEnvVarError`}};function Qd(e,t){if(e[t]!==`$`)return null;let n=e[t+1],r=e[t+2];if(n===`$`&&r===`{`){let n=t+3,r=e.indexOf(`}`,n);if(r!==-1){let t=e.slice(n,r);if(Xd.test(t))return{kind:`escaped`,name:t,end:r}}}if(n===`{`){let n=t+2,r=e.indexOf(`}`,n);if(r!==-1){let t=e.slice(n,r);if(Xd.test(t))return{kind:`substitution`,name:t,end:r}}}return null}function $d(e,t,n){if(!e.includes(`$`))return e;let r=[];for(let i=0;i<e.length;i+=1){let a=e[i];if(a!==`$`){r.push(a);continue}let o=Qd(e,i);if(o?.kind===`escaped`){r.push(`\${${o.name}}`),i=o.end;continue}if(o?.kind===`substitution`){let e=t[o.name];if(e===void 0||e===``)throw new Zd(o.name,n);r.push(e),i=o.end;continue}r.push(a)}return r.join(``)}function ef(e){if(!e.includes(`$`))return!1;for(let t=0;t<e.length;t+=1){if(e[t]!==`$`)continue;let n=Qd(e,t);if(n?.kind===`escaped`){t=n.end;continue}if(n?.kind===`substitution`)return!0}return!1}function tf(e,t,n){if(typeof e==`string`)return $d(e,t,n);if(Array.isArray(e))return e.map((e,r)=>tf(e,t,`${n}[${r}]`));if(w(e)){let r={};for(let[i,a]of Object.entries(e))r[i]=tf(a,t,n?`${n}.${i}`:i);return r}return e}function nf(e,t=process.env){return tf(e,t,``)}function rf(e){return br(e)||Sr(e)}function af(e){let t=e?.env;if(!t)return{};let n={};if(t.vars)for(let[e,r]of Object.entries(t.vars)){if(!r)continue;let t=yr(e,{portable:!0});t&&(rf(t)||(n[t]=r))}for(let[e,r]of Object.entries(t)){if(e===`shellEnv`||e===`vars`||typeof r!=`string`||!r.trim())continue;let t=yr(e,{portable:!0});t&&(rf(t)||(n[t]=r))}return n}function of(e){return af(e)}function sf(e,t=process.env){let n=of(e);for(let[e,r]of Object.entries(n))t[e]?.trim()||(t[e]=r)}const cf=`$include`;var R=class extends Error{constructor(e,t,n){super(e),this.includePath=t,this.cause=n,this.name=`ConfigIncludeError`}},lf=class extends R{constructor(e){super(`Circular include detected: ${e.join(` -> `)}`,e[e.length-1]),this.chain=e,this.name=`CircularIncludeError`}};function uf(e,t){if(Array.isArray(e)&&Array.isArray(t))return[...e,...t];if(w(e)&&w(t)){let n={...e};for(let e of Object.keys(t))Ki(e)||(n[e]=e in n?uf(n[e],t[e]):t[e]);return n}return t}var df=class e{constructor(e,t,n){this.basePath=e,this.resolver=t,this.visited=new Set,this.depth=0,this.visited.add(i.normalize(e)),this.rootDir=i.normalize(n??i.dirname(e)),this.rootRealDir=i.normalize(ff(this.rootDir))}process(e){return Array.isArray(e)?e.map(e=>this.process(e)):w(e)?cf in e?this.processInclude(e):this.processObject(e):e}processObject(e){let t={};for(let[n,r]of Object.entries(e))t[n]=this.process(r);return t}processInclude(e){let t=e[cf],n=Object.keys(e).filter(e=>e!==cf),r=this.resolveInclude(t);if(n.length===0)return r;if(!w(r))throw new R(`Sibling keys require included content to be an object`,typeof t==`string`?t:cf);let i={};for(let t of n)i[t]=this.process(e[t]);return uf(r,i)}resolveInclude(e){if(typeof e==`string`)return this.loadFile(e);if(Array.isArray(e))return e.reduce((e,t)=>{if(typeof t!=`string`)throw new R(`Invalid $include array item: expected string, got ${typeof t}`,String(t));return uf(e,this.loadFile(t))},{});throw new R(`Invalid $include value: expected string or array of strings, got ${typeof e}`,String(e))}loadFile(e){let t=this.resolvePath(e);this.checkCircular(t),this.checkDepth(e);let n=this.readFile(e,t),r=this.parseFile(e,t,n);return this.processNested(t,r)}resolvePath(e){let t=i.dirname(this.basePath),r=i.isAbsolute(e)?e:i.resolve(t,e),a=i.normalize(r);if(!si(this.rootDir,a))throw new R(`Include path escapes config directory: ${e} (root: ${this.rootDir})`,e);try{let t=n.realpathSync(a);if(!si(this.rootRealDir,t))throw new R(`Include path resolves outside config directory (symlink): ${e} (root: ${this.rootDir})`,e)}catch(e){if(e instanceof R)throw e}return a}checkCircular(e){if(this.visited.has(e))throw new lf([...this.visited,e])}checkDepth(e){if(this.depth>=10)throw new R(`Maximum include depth (10) exceeded at: ${e}`,e)}readFile(e,t){try{return this.resolver.readFileWithGuards?this.resolver.readFileWithGuards({includePath:e,resolvedPath:t,rootRealDir:this.rootRealDir}):this.resolver.readFile(t)}catch(n){throw n instanceof R?n:new R(`Failed to read include file: ${e} (resolved: ${t})`,e,n instanceof Error?n:void 0)}}parseFile(e,t,n){try{return this.resolver.parseJson(n)}catch(n){throw new R(`Failed to parse include file: ${e} (resolved: ${t})`,e,n instanceof Error?n:void 0)}}processNested(t,n){let r=new e(t,this.resolver,this.rootDir);return r.visited=new Set([...this.visited,t]),r.depth=this.depth+1,r.process(n)}};function ff(e){try{return n.realpathSync(e)}catch{return e}}function pf(e){let t=e.ioFs??n,r=e.maxBytes??2097152;if(!Oi(t))return t.readFileSync(e.resolvedPath,`utf-8`);let i=ki({absolutePath:e.resolvedPath,rootPath:e.rootRealDir,rootRealPath:e.rootRealDir,boundaryLabel:`config directory`,skipLexicalRootCheck:!0,maxBytes:r,ioFs:t});if(!i.ok)throw i.reason===`validation`?new R(`Include file failed security checks (regular file, max ${r} bytes, no hardlinks): ${e.includePath}`,e.includePath):new R(`Failed to read include file: ${e.includePath} (resolved: ${e.resolvedPath})`,e.includePath,i.error instanceof Error?i.error:void 0);try{return t.readFileSync(i.fd,`utf-8`)}finally{t.closeSync(i.fd)}}const mf={readFile:e=>n.readFileSync(e,`utf-8`),readFileWithGuards:({includePath:e,resolvedPath:t,rootRealDir:n})=>pf({includePath:e,resolvedPath:t,rootRealDir:n}),parseJson:e=>m.parse(e)};function hf(e,t,n=mf){return new df(t,n).process(e)}function gf(e){return typeof e==`string`&&e.trim().toLowerCase()||null}function _f(e){let t=gf(e);return t===`off`||t===`partial`||t===`block`||t===`progress`?t:null}function vf(e){let t=_f(e);return t?t===`progress`?`partial`:t:null}function yf(e){let t=gf(e);return t===`replace`||t===`status_final`||t===`append`?t:null}function bf(e){return e===`append`?`block`:e===`status_final`?`progress`:`partial`}function xf(e={}){let t=_f(e.streaming);return t?t===`progress`?`partial`:t:vf(e.streamMode)||(typeof e.streaming==`boolean`&&e.streaming?`partial`:`off`)}function Sf(e={}){return vf(e.streaming)||vf(e.streamMode)||(typeof e.streaming==`boolean`&&e.streaming?`partial`:`off`)}function Cf(e={}){let t=_f(e.streaming);if(t)return t;let n=yf(e.streamMode);return n?bf(n):(e.streaming,`partial`)}function wf(e={}){return typeof e.nativeStreaming==`boolean`?e.nativeStreaming:typeof e.streaming==`boolean`?e.streaming:!0}const Tf=/[;&|`$<>]/,Ef=/[\r\n]/,Df=/["']/,Of=/^[A-Za-z0-9._+-]+$/;function kf(e){return e.startsWith(`.`)||e.startsWith(`~`)||e.includes(`/`)||e.includes(`\\`)?!0:/^[A-Za-z]:[\\/]/.test(e)}function Af(e){if(!e)return!1;let t=e.trim();return!t||t.includes(`\0`)||Ef.test(t)||Tf.test(t)||Df.test(t)?!1:kf(t)?!0:t.startsWith(`-`)?!1:Of.test(t)}const z=e=>T(e)?e:null,B=(e,t)=>{let n=e[t];if(T(n))return n;let r={};return e[t]=r,r},V=(e,t)=>{for(let[n,r]of Object.entries(t)){if(r===void 0||Ki(n))continue;let t=e[n];if(t===void 0){e[n]=r;continue}T(t)&&T(r)&&V(t,r)}},jf=e=>{let t=z(e),n=Array.isArray(t?.command)?t?.command:null;if(!n||n.length===0||typeof n[0]!=`string`||!n.every(e=>typeof e==`string`))return null;let r=n[0].trim();if(!r||!Af(r))return null;let i=n.slice(1),a=typeof t?.timeoutSeconds==`number`?t?.timeoutSeconds:void 0,o={command:r,type:`cli`};return i.length>0&&(o.args=i),a!==void 0&&(o.timeoutSeconds=a),o},Mf=e=>{let t=e?.list;return Array.isArray(t)?t:[]},Nf=e=>{let t=Mf(z(e.agents)),n=t.find(e=>T(e)&&e.default===!0&&typeof e.id==`string`&&e.id.trim()!==``);if(n)return n.id.trim();let r=z(e.routing),i=typeof r?.defaultAgentId==`string`?r.defaultAgentId.trim():``;if(i)return i;let a=t.find(e=>T(e)&&typeof e.id==`string`&&e.id.trim()!==``);return a?a.id.trim():`main`},Pf=(e,t)=>{let n=t.trim(),r=e.find(e=>T(e)&&typeof e.id==`string`&&e.id.trim()===n);if(r)return r;let i={id:n};return e.push(i),i};function Ff(e,t,n,r){let i=Array.isArray(e.bindings)?e.bindings:null;if(!i)return;let a=!1;for(let e of i){if(!T(e))continue;let t=z(e.match);t&&r(t)&&(e.match=t,a=!0)}a&&(e.bindings=i,t.push(n))}function If(e){let t=T(e.groups)?e.groups:{};return{groups:t,entry:T(t[`*`])?t[`*`]:{}}}function Lf(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Rf(e){let t=z(e.owner.threadBindings);if(!t||!Lf(t,`ttlHours`))return!1;let n=t.idleHours!==void 0;return n||(t.idleHours=t.ttlHours),delete t.ttlHours,e.owner.threadBindings=t,n?e.changes.push(`Removed ${e.pathPrefix}.threadBindings.ttlHours (${e.pathPrefix}.threadBindings.idleHours already set).`):e.changes.push(`Moved ${e.pathPrefix}.threadBindings.ttlHours → ${e.pathPrefix}.threadBindings.idleHours.`),!0}const zf=[{id:`bindings.match.provider->bindings.match.channel`,describe:`Move bindings[].match.provider to bindings[].match.channel`,apply:(e,t)=>{Ff(e,t,`Moved bindings[].match.provider → bindings[].match.channel.`,e=>{if(typeof e.channel==`string`&&e.channel.trim())return!1;let t=typeof e.provider==`string`?e.provider.trim():``;return t?(e.channel=t,delete e.provider,!0):!1})}},{id:`bindings.match.accountID->bindings.match.accountId`,describe:`Move bindings[].match.accountID to bindings[].match.accountId`,apply:(e,t)=>{Ff(e,t,`Moved bindings[].match.accountID → bindings[].match.accountId.`,e=>{if(e.accountId!==void 0)return!1;let t=typeof e.accountID==`string`?e.accountID.trim():e.accountID;return t?(e.accountId=t,delete e.accountID,!0):!1})}},{id:`session.sendPolicy.rules.match.provider->match.channel`,describe:`Move session.sendPolicy.rules[].match.provider to match.channel`,apply:(e,t)=>{let n=z(e.session);if(!n)return;let r=z(n.sendPolicy);if(!r)return;let i=Array.isArray(r.rules)?r.rules:null;if(!i)return;let a=!1;for(let e of i){if(!T(e))continue;let t=z(e.match);if(!t||typeof t.channel==`string`&&t.channel.trim())continue;let n=typeof t.provider==`string`?t.provider.trim():``;n&&(t.channel=n,delete t.provider,e.match=t,a=!0)}a&&(r.rules=i,n.sendPolicy=r,e.session=n,t.push(`Moved session.sendPolicy.rules[].match.provider → match.channel.`))}},{id:`messages.queue.byProvider->byChannel`,describe:`Move messages.queue.byProvider to messages.queue.byChannel`,apply:(e,t)=>{let n=z(e.messages);if(!n)return;let r=z(n.queue);r&&r.byProvider!==void 0&&(r.byChannel===void 0?(r.byChannel=r.byProvider,t.push(`Moved messages.queue.byProvider → messages.queue.byChannel.`)):t.push(`Removed messages.queue.byProvider (messages.queue.byChannel already set).`),delete r.byProvider,n.queue=r,e.messages=n)}},{id:`providers->channels`,describe:`Move provider config sections to channels.*`,apply:(e,t)=>{let n=[`whatsapp`,`telegram`,`discord`,`slack`,`signal`,`imessage`,`msteams`].filter(t=>T(e[t]));if(n.length===0)return;let r=B(e,`channels`);for(let i of n){let n=z(e[i]);if(!n)continue;let a=B(r,i),o=Object.keys(a).length>0;V(a,n),r[i]=a,delete e[i],t.push(o?`Merged ${i} → channels.${i}.`:`Moved ${i} → channels.${i}.`)}e.channels=r}},{id:`thread-bindings.ttlHours->idleHours`,describe:`Move legacy threadBindings.ttlHours keys to threadBindings.idleHours (session + channels.discord)`,apply:(e,t)=>{let n=z(e.session);n&&(Rf({owner:n,pathPrefix:`session`,changes:t}),e.session=n);let r=z(e.channels),i=z(r?.discord);if(!r||!i)return;Rf({owner:i,pathPrefix:`channels.discord`,changes:t});let a=z(i.accounts);if(a){for(let[e,n]of Object.entries(a)){let r=z(n);r&&(Rf({owner:r,pathPrefix:`channels.discord.accounts.${e}`,changes:t}),a[e]=r)}i.accounts=a}r.discord=i,e.channels=r}},{id:`channels.streaming-keys->channels.streaming`,describe:`Normalize legacy streaming keys to channels.<provider>.streaming (Telegram/Discord/Slack)`,apply:(e,t)=>{let n=z(e.channels);if(!n)return;let r=e=>{let n=n=>{let r=e.entry.streamMode!==void 0,i=e.entry.streaming;if(!r&&typeof i!=`boolean`)return!1;let a=n(e.entry);return e.entry.streaming=a,r&&(delete e.entry.streamMode,t.push(`Moved ${e.pathPrefix}.streamMode → ${e.pathPrefix}.streaming (${a}).`)),typeof i==`boolean`&&t.push(`Normalized ${e.pathPrefix}.streaming boolean → enum (${a}).`),!0},r=e.entry.streamMode!==void 0,i=e.entry.streaming,a=e.entry.nativeStreaming;if(e.provider===`telegram`){n(xf);return}if(e.provider===`discord`){n(Sf);return}if(!r&&typeof i!=`boolean`)return;let o=Cf(e.entry),s=wf(e.entry);e.entry.streaming=o,e.entry.nativeStreaming=s,r&&(delete e.entry.streamMode,t.push(`Moved ${e.pathPrefix}.streamMode → ${e.pathPrefix}.streaming (${o}).`)),typeof i==`boolean`?t.push(`Moved ${e.pathPrefix}.streaming (boolean) → ${e.pathPrefix}.nativeStreaming (${s}).`):typeof a!=`boolean`&&r&&t.push(`Set ${e.pathPrefix}.nativeStreaming → ${s}.`)},i=e=>{let t=z(n[e]);if(!t)return;r({provider:e,entry:t,pathPrefix:`channels.${e}`});let i=z(t.accounts);if(i)for(let[t,n]of Object.entries(i)){let i=z(n);i&&r({provider:e,entry:i,pathPrefix:`channels.${e}.accounts.${t}`})}};i(`telegram`),i(`discord`),i(`slack`)}},{id:`routing.allowFrom->channels.whatsapp.allowFrom`,describe:`Move routing.allowFrom to channels.whatsapp.allowFrom`,apply:(e,t)=>{let n=e.routing;if(!n||typeof n!=`object`)return;let r=n.allowFrom;if(r===void 0)return;let i=z(e.channels),a=i?z(i.whatsapp):null;if(!a){delete n.allowFrom,Object.keys(n).length===0&&delete e.routing,t.push(`Removed routing.allowFrom (channels.whatsapp not configured).`);return}a.allowFrom===void 0?(a.allowFrom=r,t.push(`Moved routing.allowFrom → channels.whatsapp.allowFrom.`)):t.push(`Removed routing.allowFrom (channels.whatsapp.allowFrom already set).`),delete n.allowFrom,Object.keys(n).length===0&&delete e.routing,i.whatsapp=a,e.channels=i}},{id:`routing.groupChat.requireMention->groups.*.requireMention`,describe:`Move routing.groupChat.requireMention to channels.whatsapp/telegram/imessage groups`,apply:(e,t)=>{let n=e.routing;if(!n||typeof n!=`object`)return;let r=n.groupChat&&typeof n.groupChat==`object`?n.groupChat:null;if(!r)return;let i=r.requireMention;if(i===void 0)return;let a=B(e,`channels`),o=(e,n)=>{if(n?.requireExisting&&!T(a[e]))return;let r=a[e]&&typeof a[e]==`object`?a[e]:{},{groups:o,entry:s}=If(r);s.requireMention===void 0?(s.requireMention=i,o[`*`]=s,r.groups=o,a[e]=r,t.push(`Moved routing.groupChat.requireMention → channels.${e}.groups."*".requireMention.`)):t.push(`Removed routing.groupChat.requireMention (channels.${e}.groups."*" already set).`)};o(`whatsapp`,{requireExisting:!0}),o(`telegram`),o(`imessage`),delete r.requireMention,Object.keys(r).length===0&&delete n.groupChat,Object.keys(n).length===0&&delete e.routing,e.channels=a}},{id:`gateway.token->gateway.auth.token`,describe:`Move gateway.token to gateway.auth.token`,apply:(e,t)=>{let n=e.gateway;if(!n||typeof n!=`object`)return;let r=n.token;if(r===void 0)return;let i=n,a=i.auth&&typeof i.auth==`object`?i.auth:{};a.token===void 0?(a.token=r,a.mode||=`token`,t.push(`Moved gateway.token → gateway.auth.token.`)):t.push(`Removed gateway.token (gateway.auth.token already set).`),delete i.token,Object.keys(a).length>0&&(i.auth=a),e.gateway=i}},{id:`telegram.requireMention->channels.telegram.groups.*.requireMention`,describe:`Move telegram.requireMention to channels.telegram.groups.*.requireMention`,apply:(e,t)=>{let n=B(e,`channels`),r=n.telegram;if(!r||typeof r!=`object`)return;let i=r.requireMention;if(i===void 0)return;let{groups:a,entry:o}=If(r);o.requireMention===void 0?(o.requireMention=i,a[`*`]=o,r.groups=a,t.push(`Moved telegram.requireMention → channels.telegram.groups."*".requireMention.`)):t.push(`Removed telegram.requireMention (channels.telegram.groups."*" already set).`),delete r.requireMention,n.telegram=r,e.channels=n}}];function Bf(e){let t=jf(e.source);if(!t){e.changes.push(e.invalidMessage);return}let n=B(B(B(e.raw,`tools`),`media`),`audio`);if((Array.isArray(n.models)?n.models:[]).length===0){n.enabled=!0,n.models=[t],e.changes.push(e.movedMessage);return}e.changes.push(e.alreadySetMessage)}const Vf=[{id:`agent.model-config-v2`,describe:`Migrate legacy agent.model/allowedModels/modelAliases/modelFallbacks/imageModelFallbacks to agent.models + model lists`,apply:(e,t)=>{let n=z(e.agent),r=z(z(e.agents)?.defaults),i=n??r;if(!i)return;let a=n?`agent`:`agents.defaults`,o=typeof i.model==`string`?String(i.model):void 0,s=typeof i.imageModel==`string`?String(i.imageModel):void 0,c=Array.isArray(i.allowedModels)?i.allowedModels.map(String):[],l=Array.isArray(i.modelFallbacks)?i.modelFallbacks.map(String):[],u=Array.isArray(i.imageModelFallbacks)?i.imageModelFallbacks.map(String):[],d=i.modelAliases&&typeof i.modelAliases==`object`?i.modelAliases:{};if(!(o||s||c.length>0||l.length>0||u.length>0||Object.keys(d).length>0))return;let f=i.models&&typeof i.models==`object`?i.models:{},p=e=>{if(typeof e!=`string`)return;let t=e.trim();t&&(f[t]||(f[t]={}))};p(o),p(s);for(let e of c)p(e);for(let e of l)p(e);for(let e of u)p(e);for(let e of Object.values(d))typeof e==`string`&&p(e);for(let[e,t]of Object.entries(d)){if(typeof t!=`string`)continue;let n=t.trim();if(!n)continue;let r=f[n]&&typeof f[n]==`object`?f[n]:{};`alias`in r||(r.alias=e,f[n]=r)}let m=i.model&&typeof i.model==`object`?i.model:null;m?(!m.primary&&o&&(m.primary=o),l.length>0&&(!Array.isArray(m.fallbacks)||m.fallbacks.length===0)&&(m.fallbacks=l),i.model=m):(o||l.length>0)&&(i.model={primary:o,fallbacks:l.length?l:[]});let h=i.imageModel&&typeof i.imageModel==`object`?i.imageModel:null;h?(!h.primary&&s&&(h.primary=s),u.length>0&&(!Array.isArray(h.fallbacks)||h.fallbacks.length===0)&&(h.fallbacks=u),i.imageModel=h):(s||u.length>0)&&(i.imageModel={primary:s,fallbacks:u.length?u:[]}),i.models=f,o!==void 0&&t.push(`Migrated ${a}.model string → ${a}.model.primary.`),l.length>0&&t.push(`Migrated ${a}.modelFallbacks → ${a}.model.fallbacks.`),s!==void 0&&t.push(`Migrated ${a}.imageModel string → ${a}.imageModel.primary.`),u.length>0&&t.push(`Migrated ${a}.imageModelFallbacks → ${a}.imageModel.fallbacks.`),c.length>0&&t.push(`Migrated ${a}.allowedModels → ${a}.models.`),Object.keys(d).length>0&&t.push(`Migrated ${a}.modelAliases → ${a}.models.*.alias.`),delete i.allowedModels,delete i.modelAliases,delete i.modelFallbacks,delete i.imageModelFallbacks}},{id:`routing.agents-v2`,describe:`Move routing.agents/defaultAgentId to agents.list`,apply:(e,t)=>{let n=z(e.routing);if(!n)return;let r=z(n.agents),i=B(e,`agents`),a=Mf(i);if(r){for(let[e,n]of Object.entries(r)){let r=String(e??``).trim(),i=z(n);if(!r||!i)continue;let o=Pf(a,r),s={...i};if(`mentionPatterns`in s){let e=s.mentionPatterns,n=B(o,`groupChat`);n.mentionPatterns===void 0?(n.mentionPatterns=e,t.push(`Moved routing.agents.${r}.mentionPatterns → agents.list (id "${r}").groupChat.mentionPatterns.`)):t.push(`Removed routing.agents.${r}.mentionPatterns (agents.list groupChat mentionPatterns already set).`),delete s.mentionPatterns}let c=z(s.groupChat);c&&(V(B(o,`groupChat`),c),delete s.groupChat);let l=z(s.sandbox);if(l){let e=z(l.tools);e&&(V(B(B(B(o,`tools`),`sandbox`),`tools`),e),delete l.tools,t.push(`Moved routing.agents.${r}.sandbox.tools → agents.list (id "${r}").tools.sandbox.tools.`)),s.sandbox=l}V(o,s)}delete n.agents,t.push(`Moved routing.agents → agents.list.`)}let o=typeof n.defaultAgentId==`string`?n.defaultAgentId.trim():``;if(o){if(a.some(e=>T(e)&&e.default===!0))t.push(`Removed routing.defaultAgentId (agents.list default already set).`);else{let e=Pf(a,o);e.default=!0,t.push(`Moved routing.defaultAgentId → agents.list (id "${o}").default.`)}delete n.defaultAgentId}a.length>0&&(i.list=a),Object.keys(n).length===0&&delete e.routing}},{id:`routing.config-v2`,describe:`Move routing bindings/groupChat/queue/agentToAgent/transcribeAudio`,apply:(e,t)=>{let n=z(e.routing);if(!n)return;if(n.bindings!==void 0&&(e.bindings===void 0?(e.bindings=n.bindings,t.push(`Moved routing.bindings → bindings.`)):t.push(`Removed routing.bindings (bindings already set).`),delete n.bindings),n.agentToAgent!==void 0){let r=B(e,`tools`);r.agentToAgent===void 0?(r.agentToAgent=n.agentToAgent,t.push(`Moved routing.agentToAgent → tools.agentToAgent.`)):t.push(`Removed routing.agentToAgent (tools.agentToAgent already set).`),delete n.agentToAgent}if(n.queue!==void 0){let r=B(e,`messages`);r.queue===void 0?(r.queue=n.queue,t.push(`Moved routing.queue → messages.queue.`)):t.push(`Removed routing.queue (messages.queue already set).`),delete n.queue}let r=z(n.groupChat);if(r){let i=r.historyLimit;if(i!==void 0){let n=B(B(e,`messages`),`groupChat`);n.historyLimit===void 0?(n.historyLimit=i,t.push(`Moved routing.groupChat.historyLimit → messages.groupChat.historyLimit.`)):t.push(`Removed routing.groupChat.historyLimit (messages.groupChat.historyLimit already set).`),delete r.historyLimit}let a=r.mentionPatterns;if(a!==void 0){let n=B(B(e,`messages`),`groupChat`);n.mentionPatterns===void 0?(n.mentionPatterns=a,t.push(`Moved routing.groupChat.mentionPatterns → messages.groupChat.mentionPatterns.`)):t.push(`Removed routing.groupChat.mentionPatterns (messages.groupChat.mentionPatterns already set).`),delete r.mentionPatterns}Object.keys(r).length===0?delete n.groupChat:n.groupChat=r}n.transcribeAudio!==void 0&&(Bf({raw:e,source:n.transcribeAudio,changes:t,movedMessage:`Moved routing.transcribeAudio → tools.media.audio.models.`,alreadySetMessage:`Removed routing.transcribeAudio (tools.media.audio.models already set).`,invalidMessage:`Removed routing.transcribeAudio (invalid or empty command).`}),delete n.transcribeAudio),Object.keys(n).length===0&&delete e.routing}},{id:`audio.transcription-v2`,describe:`Move audio.transcription to tools.media.audio.models`,apply:(e,t)=>{let n=z(e.audio);n?.transcription!==void 0&&(Bf({raw:e,source:n.transcription,changes:t,movedMessage:`Moved audio.transcription → tools.media.audio.models.`,alreadySetMessage:`Removed audio.transcription (tools.media.audio.models already set).`,invalidMessage:`Removed audio.transcription (invalid or empty command).`}),delete n.transcription,Object.keys(n).length===0?delete e.audio:e.audio=n)}},{id:`media.preserveFilenames-v2`,describe:`Move top-level media.preserveFilenames to channels.msteams.preserveFilenames`,apply:(e,t)=>{let n=z(e.media);if(n?.preserveFilenames===void 0)return;let r=B(B(e,`channels`),`msteams`);r.preserveFilenames===void 0?(r.preserveFilenames=n.preserveFilenames,t.push(`Moved media.preserveFilenames → channels.msteams.preserveFilenames.`)):t.push(`Removed media.preserveFilenames (channels.msteams.preserveFilenames already set).`),delete n.preserveFilenames,Object.keys(n).length===0?delete e.media:e.media=n}}],Hf=[`e`,`vm`].join(``),Uf=[`camera.snap`,`camera.clip`,`screen.record`,`calendar.add`,`contacts.add`,`reminders.add`],Wf=[{id:`gateway.nodes.generated-deny-defaults`,describe:`Remove the redundant node denylist generated by older onboarding`,apply:(e,t)=>{let n=z(e.gateway),r=z(n?.nodes),i=r?.denyCommands;!n||!r||r.allowCommands!==void 0||r.browser!==void 0||!Array.isArray(i)||i.length!==Uf.length||!i.every((e,t)=>e===Uf[t])||(delete r.denyCommands,Object.keys(r).length===0&&delete n.nodes,t.push(`Removed the redundant gateway.nodes.denyCommands defaults generated by older onboarding.`))}},{id:`models.providers.request.allowPrivateNetwork`,describe:`Mark existing private model provider base URLs as explicitly allowed`,apply:(e,t)=>{let n=z(z(e.models)?.providers);if(n)for(let[e,r]of Object.entries(n)){let n=z(r),i=typeof n?.baseUrl==`string`?n.baseUrl:``;if(!n||!cl(i))continue;let a=z(n.request)??{};a.allowPrivateNetwork===void 0&&(a.allowPrivateNetwork=!0,n.request=a,t.push(`Added models.providers.${e}.request.allowPrivateNetwork=true for existing private model endpoint.`))}}},{id:`memorySearch->agents.defaults.memorySearch`,describe:`Move top-level memorySearch to agents.defaults.memorySearch`,apply:(e,t)=>{let n=z(e.memorySearch);if(!n)return;let r=B(e,`agents`),i=B(r,`defaults`),a=z(i.memorySearch);if(!a)i.memorySearch=n,t.push(`Moved memorySearch → agents.defaults.memorySearch.`);else{let e=structuredClone(a);V(e,n),i.memorySearch=e,t.push(`Merged memorySearch → agents.defaults.memorySearch (filled missing fields from legacy; kept explicit agents.defaults values).`)}r.defaults=i,e.agents=r,delete e.memorySearch}},{id:`auth.anthropic-claude-cli-mode-oauth`,describe:`Switch anthropic:claude-cli auth profile mode to oauth`,apply:(e,t)=>{let n=z(z(e.auth)?.profiles);if(!n)return;let r=z(n[`anthropic:claude-cli`]);r&&r.mode===`token`&&(r.mode=`oauth`,t.push(`Updated auth.profiles["anthropic:claude-cli"].mode → "oauth".`))}},{id:`tools.bash->tools.exec`,describe:`Move tools.bash to tools.exec`,apply:(e,t)=>{let n=B(e,`tools`),r=z(n.bash);r&&(n.exec===void 0?(n.exec=r,t.push(`Moved tools.bash → tools.exec.`)):t.push(`Removed tools.bash (tools.exec already set).`),delete n.bash)}},{id:`wallet.solana-only-runtime`,describe:`Remove legacy wallet chain entries after Solana-only runtime migration`,apply:(e,t)=>{let n=z(e.wallet);if(!n)return;let r=z(n.keystore);if(r&&Array.isArray(r.chainSupport)){let e=r.chainSupport.some(e=>e!==`solana`),n=r.chainSupport.length===1&&r.chainSupport[0]===`solana`;(e||!n)&&(r.chainSupport=[`solana`],t.push(`Normalized wallet.keystore.chainSupport → ["solana"] (removed legacy non-Solana entries).`))}let i=z(n.runtime);if(i&&Array.isArray(i.chains)){let e=i.chains.some(e=>e!==`solana`),n=i.chains.length===1&&i.chains[0]===`solana`;(e||!n)&&(i.chains=[`solana`],t.push(`Normalized wallet.runtime.chains → ["solana"] (removed legacy non-Solana entries).`))}let a=z(i?.policy);a&&Hf in a&&(delete a[Hf],t.push(`Removed wallet.runtime.policy legacy non-Solana policy block.`))}},{id:`messages.tts.enabled->auto`,describe:`Move messages.tts.enabled to messages.tts.auto`,apply:(e,t)=>{let n=z(z(e.messages)?.tts);if(n){if(n.auto!==void 0){`enabled`in n&&(delete n.enabled,t.push(`Removed messages.tts.enabled (messages.tts.auto already set).`));return}typeof n.enabled==`boolean`&&(n.auto=n.enabled?`always`:`off`,delete n.enabled,t.push(`Moved messages.tts.enabled → messages.tts.auto (${String(n.auto)}).`))}}},{id:`agent.defaults-v2`,describe:`Move agent config to agents.defaults and tools`,apply:(e,t)=>{let n=z(e.agent);if(!n)return;let r=B(e,`agents`),i=z(r.defaults)??{},a=B(e,`tools`),o=z(n.tools);o&&(a.allow===void 0&&o.allow!==void 0&&(a.allow=o.allow,t.push(`Moved agent.tools.allow → tools.allow.`)),a.deny===void 0&&o.deny!==void 0&&(a.deny=o.deny,t.push(`Moved agent.tools.deny → tools.deny.`)));let s=z(n.elevated);s&&(a.elevated===void 0?(a.elevated=s,t.push(`Moved agent.elevated → tools.elevated.`)):t.push(`Removed agent.elevated (tools.elevated already set).`));let c=z(n.bash);c&&(a.exec===void 0?(a.exec=c,t.push(`Moved agent.bash → tools.exec.`)):t.push(`Removed agent.bash (tools.exec already set).`));let l=z(n.sandbox);if(l){let e=z(l.tools);e&&(V(B(B(a,`sandbox`),`tools`),e),delete l.tools,t.push(`Moved agent.sandbox.tools → tools.sandbox.tools.`))}let u=z(n.subagents);if(u){let e=z(u.tools);e&&(V(B(B(a,`subagents`),`tools`),e),delete u.tools,t.push(`Moved agent.subagents.tools → tools.subagents.tools.`))}let d=structuredClone(n);delete d.tools,delete d.elevated,delete d.bash,T(d.sandbox)&&delete d.sandbox.tools,T(d.subagents)&&delete d.subagents.tools,V(i,d),r.defaults=i,e.agents=r,delete e.agent,t.push(`Moved agent → agents.defaults.`)}},{id:`identity->agents.list`,describe:`Move identity to agents.list[].identity`,apply:(e,t)=>{let n=z(e.identity);if(!n)return;let r=B(e,`agents`),i=Mf(r),a=Nf(e),o=Pf(i,a);o.identity===void 0?(o.identity=n,t.push(`Moved identity → agents.list (id "${a}").identity.`)):t.push(`Removed identity (agents.list identity already set).`),r.list=i,e.agents=r,delete e.identity}}];[...zf,...Vf,...Wf];function Gf(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Kf(e){return Gf(e)&&Object.prototype.hasOwnProperty.call(e,`ttlHours`)}function qf(e){return Gf(e)?Object.values(e).some(e=>Kf(Gf(e)?e.threadBindings:void 0)):!1}const Jf=[{path:[`whatsapp`],message:`whatsapp config moved to channels.whatsapp (auto-migrated on load).`},{path:[`telegram`],message:`telegram config moved to channels.telegram (auto-migrated on load).`},{path:[`discord`],message:`discord config moved to channels.discord (auto-migrated on load).`},{path:[`slack`],message:`slack config moved to channels.slack (auto-migrated on load).`},{path:[`signal`],message:`signal config moved to channels.signal (auto-migrated on load).`},{path:[`imessage`],message:`imessage config moved to channels.imessage (auto-migrated on load).`},{path:[`msteams`],message:`msteams config moved to channels.msteams (auto-migrated on load).`},{path:[`session`,`threadBindings`],message:`session.threadBindings.ttlHours was renamed to session.threadBindings.idleHours (auto-migrated on load).`,match:e=>Kf(e)},{path:[`channels`,`discord`,`threadBindings`],message:`channels.discord.threadBindings.ttlHours was renamed to channels.discord.threadBindings.idleHours (auto-migrated on load).`,match:e=>Kf(e)},{path:[`channels`,`discord`,`accounts`],message:`channels.discord.accounts.<id>.threadBindings.ttlHours was renamed to channels.discord.accounts.<id>.threadBindings.idleHours (auto-migrated on load).`,match:e=>qf(e)},{path:[`routing`,`allowFrom`],message:`routing.allowFrom was removed; use channels.whatsapp.allowFrom instead (auto-migrated on load).`},{path:[`routing`,`bindings`],message:`routing.bindings was moved; use top-level bindings instead (auto-migrated on load).`},{path:[`routing`,`agents`],message:`routing.agents was moved; use agents.list instead (auto-migrated on load).`},{path:[`routing`,`defaultAgentId`],message:`routing.defaultAgentId was moved; use agents.list[].default instead (auto-migrated on load).`},{path:[`routing`,`agentToAgent`],message:`routing.agentToAgent was moved; use tools.agentToAgent instead (auto-migrated on load).`},{path:[`routing`,`groupChat`,`requireMention`],message:`routing.groupChat.requireMention was removed; use channels.whatsapp/telegram/imessage groups defaults (e.g. channels.whatsapp.groups."*".requireMention) instead (auto-migrated on load).`},{path:[`routing`,`groupChat`,`mentionPatterns`],message:`routing.groupChat.mentionPatterns was moved; use agents.list[].groupChat.mentionPatterns or messages.groupChat.mentionPatterns instead (auto-migrated on load).`},{path:[`routing`,`queue`],message:`routing.queue was moved; use messages.queue instead (auto-migrated on load).`},{path:[`routing`,`transcribeAudio`],message:`routing.transcribeAudio was moved; use tools.media.audio.models instead (auto-migrated on load).`},{path:[`telegram`,`requireMention`],message:`telegram.requireMention was removed; use channels.telegram.groups."*".requireMention instead (auto-migrated on load).`},{path:[`identity`],message:`identity was moved; use agents.list[].identity instead (auto-migrated on load).`},{path:[`agent`],message:`agent.* was moved; use agents.defaults (and tools.* for tool/elevated/exec settings) instead (auto-migrated on load).`},{path:[`memorySearch`],message:`top-level memorySearch was moved; use agents.defaults.memorySearch instead (auto-migrated on load).`},{path:[`tools`,`bash`],message:`tools.bash was removed; use tools.exec instead (auto-migrated on load).`},{path:[`wallet`,`runtime`,`policy`,[`e`,`vm`].join(``)],message:`wallet.runtime.policy has a legacy non-Solana policy block; Fased wallet runtime is Solana-only (auto-migrated on load).`},{path:[`wallet`,`keystore`,`chainSupport`],message:`wallet.keystore.chainSupport contains legacy non-Solana entries; Fased wallet runtime is Solana-only (auto-migrated on load).`,match:e=>Array.isArray(e)&&e.some(e=>e!==`solana`)},{path:[`wallet`,`runtime`,`chains`],message:`wallet.runtime.chains contains legacy non-Solana entries; Fased wallet runtime is Solana-only (auto-migrated on load).`,match:e=>Array.isArray(e)&&e.some(e=>e!==`solana`)},{path:[`agent`,`model`],message:`agent.model string was replaced by agents.defaults.model.primary/fallbacks and agents.defaults.models (auto-migrated on load).`,match:e=>typeof e==`string`},{path:[`agent`,`imageModel`],message:`agent.imageModel string was replaced by agents.defaults.imageModel.primary/fallbacks (auto-migrated on load).`,match:e=>typeof e==`string`},{path:[`agent`,`allowedModels`],message:`agent.allowedModels was replaced by agents.defaults.models (auto-migrated on load).`},{path:[`agent`,`modelAliases`],message:`agent.modelAliases was replaced by agents.defaults.models.*.alias (auto-migrated on load).`},{path:[`agent`,`modelFallbacks`],message:`agent.modelFallbacks was replaced by agents.defaults.model.fallbacks (auto-migrated on load).`},{path:[`agent`,`imageModelFallbacks`],message:`agent.imageModelFallbacks was replaced by agents.defaults.imageModel.fallbacks (auto-migrated on load).`},{path:[`messages`,`tts`,`enabled`],message:`messages.tts.enabled was replaced by messages.tts.auto (auto-migrated on load).`},{path:[`gateway`,`token`],message:`gateway.token is ignored; use gateway.auth.token instead (auto-migrated on load).`}];function Yf(e){if(!e||typeof e!=`object`)return[];let t=e,n=[];for(let e of Jf){let r=t;for(let t of e.path){if(!r||typeof r!=`object`){r=void 0;break}r=r[t]}r!==void 0&&(!e.match||e.match(r,t))&&n.push({path:e.path.join(`.`),message:e.message})}return n}function Xf(e){return w(e)?typeof e.id==`string`&&e.id.length>0:!1}function Zf(e,t,n){if(!e.every(Xf))return;let r=[...e],i=new Map;for(let[e,t]of r.entries()){if(!Xf(t))return;i.set(t.id,e)}for(let e of t){if(!Xf(e)){r.push(structuredClone(e));continue}let t=i.get(e.id);if(t===void 0){r.push(structuredClone(e)),i.set(e.id,r.length-1);continue}r[t]=Qf(r[t],e,n)}return r}function Qf(e,t,n={}){if(!w(t))return t;let r=w(e)?{...e}:{};for(let[e,i]of Object.entries(t))if(!Ki(e)){if(i===null){delete r[e];continue}if(n.mergeObjectArraysById&&Array.isArray(r[e])&&Array.isArray(i)){let t=Zf(r[e],i,n);if(t){r[e]=t;continue}}if(w(i)){let t=r[e];r[e]=Qf(w(t)?t:{},i,n);continue}r[e]=i}return r}const $f=new Set,ep=e=>!e||e.length===0?$f:new Set(e);function tp(e,t){let n=new Set;for(let t of e)t.startsWith(`--`)&&n.add(t);for(let e of t)e.startsWith(`--`)&&n.add(e);return Array.from(n)}function np(e){let t=new Map;for(let n of e)if(!(!n.startsWith(`--`)||n.length<=2))for(let e=3;e<=n.length;e+=1){let r=n.slice(0,e),i=t.get(r);if(i===void 0){t.set(r,n);continue}i!==n&&t.set(r,null)}return t}function rp(e){let t=ep(e.allowedValueFlags),n=ep(e.deniedFlags),r=tp(t,n);return{minPositional:e.minPositional,maxPositional:e.maxPositional,allowedValueFlags:t,deniedFlags:n,knownLongFlags:r,knownLongFlagsSet:new Set(r),longFlagPrefixMap:np(r)}}function ip(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,rp(t)]))}ip({jq:{maxPositional:1,allowedValueFlags:[`--arg`,`--argjson`,`--argstr`],deniedFlags:[`--argfile`,`--rawfile`,`--slurpfile`,`--from-file`,`--library-path`,`-L`,`-f`]},grep:{maxPositional:0,allowedValueFlags:[`--regexp`,`--max-count`,`--after-context`,`--before-context`,`--context`,`--devices`,`--binary-files`,`--exclude`,`--include`,`--label`,`-e`,`-m`,`-A`,`-B`,`-C`,`-D`],deniedFlags:[`--file`,`--exclude-from`,`--dereference-recursive`,`--directories`,`--recursive`,`-f`,`-d`,`-r`,`-R`]},cut:{maxPositional:0,allowedValueFlags:[`--bytes`,`--characters`,`--fields`,`--delimiter`,`--output-delimiter`,`-b`,`-c`,`-f`,`-d`]},sort:{maxPositional:0,allowedValueFlags:[`--key`,`--field-separator`,`--buffer-size`,`--parallel`,`--batch-size`,`-k`,`-t`,`-S`],deniedFlags:[`--compress-program`,`--files0-from`,`--output`,`--random-source`,`--temporary-directory`,`-T`,`-o`]},uniq:{maxPositional:0,allowedValueFlags:[`--skip-fields`,`--skip-chars`,`--check-chars`,`--group`,`-f`,`-s`,`-w`]},head:{maxPositional:0,allowedValueFlags:[`--lines`,`--bytes`,`-n`,`-c`]},tail:{maxPositional:0,allowedValueFlags:[`--lines`,`--bytes`,`--sleep-interval`,`--max-unchanged-stats`,`--pid`,`-n`,`-c`]},tr:{minPositional:1,maxPositional:2},wc:{maxPositional:0,deniedFlags:[`--files0-from`]}});function ap(e){let t=e.trim().toLowerCase();return t.length>0?t:null}function op(e){if(typeof e!=`number`||!Number.isFinite(e))return;let t=Math.trunc(e);return t>=0?t:void 0}function sp(e){if(!Array.isArray(e)||e.length===0)return;let t=Array.from(new Set(e.map(e=>e.trim()).filter(e=>e.length>0))).toSorted((e,t)=>e.localeCompare(t));return t.length>0?t:void 0}function cp(e){let t=op(e.minPositional),n=op(e.maxPositional);return{minPositional:t,maxPositional:t!==void 0&&n!==void 0&&n<t?t:n,allowedValueFlags:sp(e.allowedValueFlags),deniedFlags:sp(e.deniedFlags)}}function lp(e){let t={};if(!e)return t;for(let[n,r]of Object.entries(e)){let e=ap(n);e&&(t[e]=cp(r))}return t}const up=[`ash`,`bash`,`dash`,`fish`,`ksh`,`sh`,`zsh`],dp=[`cmd`],fp=[`powershell`,`pwsh`],pp=[`chrt`,`doas`,`env`,`ionice`,`nice`,`nohup`,`setsid`,`stdbuf`,`sudo`,`taskset`,`timeout`];function mp(e){let t=new Set;for(let n of e)t.add(n),t.add(`${n}.exe`);return Array.from(t)}new Set(mp(dp)),new Set(mp(fp)),new Set(mp(pp)),new Set([...up,...dp,...fp]);function hp(e){if(!Array.isArray(e))return[];let t=e.map(e=>e.trim()).filter(e=>e.length>0);return Array.from(new Set(t))}function gp(e){let t=e=>{if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=lp(t.safeBinProfiles);t.safeBinProfiles=Object.keys(n).length>0?n:void 0;let r=hp(t.safeBinTrustedDirs);t.safeBinTrustedDirs=r.length>0?r:void 0};t(e.tools?.exec);let n=Array.isArray(e.agents?.list)?e.agents.list:[];for(let e of n)t(e?.tools?.exec)}const _p=/^~(?=$|[\\/])/,vp=/(dir|path|paths|file|root|workspace)$/i,yp=new Set([`paths`,`pathPrepend`]);function bp(e,t){return!_p.test(t.trim())||!e?t:vp.test(e)||yp.has(e)?E(t):t}function xp(e,t){if(typeof t==`string`)return bp(e,t);if(Array.isArray(t)){let n=!!(e&&yp.has(e));return t.map(t=>typeof t==`string`?n?bp(e,t):t:Array.isArray(t)||w(t)?xp(void 0,t):t)}if(!w(t))return t;for(let[e,n]of Object.entries(t)){let r=xp(e,n);r!==n&&(t[e]=r)}return t}function Sp(e){return!e||typeof e!=`object`||xp(void 0,e),e}function Cp(e){return typeof e==`string`&&e.trim()||null}function wp(e,t){return e?.some(e=>Cp(e)===t)===!0}function Tp(e){if(e.plugins?.enabled===!1)return null;let t=Cp(e.plugins?.slots?.memory)??`memory-core`;return t.toLowerCase()===`none`||e.plugins?.entries?.[t]?.enabled===!1||wp(e.plugins?.deny,t)?null:t}function Ep(e){let t=e.plugins?.allow,n=Array.isArray(t),r=new Set((t??[]).map(Cp).filter(e=>e!==null)),i=new Set;for(let[t,n]of Object.entries(e.plugins?.entries??{})){if(n?.enabled===!1)continue;let e=Cp(t);e&&i.add(e)}for(let t of Object.keys(e.plugins?.installs??{})){let e=Cp(t);e&&i.add(e)}let a=Tp(e);a&&(n||i.size>0)&&i.add(a);let o=new Set;for(let e of i)r.has(e)||(r.add(e),o.add(e));if(o.size===0)return{config:e,repairedPluginIds:[]};let s=[...o].toSorted((e,t)=>e.localeCompare(t)),c=[...r].toSorted((e,t)=>e.localeCompare(t));return{config:{...e,plugins:{...e.plugins,allow:c}},repairedPluginIds:s}}let Dp={};function Op(e,t){if(!w(e)||!w(t))return t;let n={...e};for(let[r,i]of Object.entries(t))i===void 0||Ki(r)||(n[r]=Op(e[r],i));return n}function kp(e){return!Dp||Object.keys(Dp).length===0?e:Op(e,Dp)}const Ap=new y({allErrors:!0,strict:!1,removeAdditional:!1}),jp=new Map;function Mp(e){return!e||e.length===0?[`invalid config`]:e.map(e=>`${e.instancePath?.replace(/^\//,``).replace(/\//g,`.`)||`<root>`}: ${e.message??`invalid`}`)}function Np(e){let t=jp.get(e.cacheKey);return(!t||t.schema!==e.schema)&&(t={validate:Ap.compile(e.schema),schema:e.schema},jp.set(e.cacheKey,t)),t.validate(e.value)?{ok:!0}:{ok:!1,errors:Mp(t.validate.errors)}}const Pp=/^data:/i,Fp=/^https?:\/\//i,Ip=/^[a-z][a-z0-9+.-]*:/i,Lp=/^[a-zA-Z]:[\\/]/;function Rp(e){return Pp.test(e)}function zp(e){return Fp.test(e)}function Bp(e){return Ip.test(e)}function Vp(e){return Lp.test(e)}function Hp(e,t){let n=i.relative(e,t);return n===``?!0:!n.startsWith(`..`)&&!i.isAbsolute(n)}const Up={b:1,kb:1024,k:1024,mb:1024**2,m:1024**2,gb:1024**3,g:1024**3,tb:1024**4,t:1024**4};function Wp(e,t){let n=String(e??``).trim().toLowerCase();if(!n)throw Error(`invalid byte size (empty)`);let r=/^(\d+(?:\.\d+)?)([a-z]+)?$/.exec(n);if(!r)throw Error(`invalid byte size: ${e}`);let i=Number(r[1]);if(!Number.isFinite(i)||i<0)throw Error(`invalid byte size: ${e}`);let a=Up[(r[2]??t?.defaultUnit??`b`).toLowerCase()];if(!a)throw Error(`invalid byte size unit: ${e}`);let o=Math.round(i*a);if(!Number.isFinite(o))throw Error(`invalid byte size: ${e}`);return o}const Gp={ms:1,s:1e3,m:6e4,h:36e5,d:864e5};function Kp(e,t){let n=String(e??``).trim().toLowerCase();if(!n)throw Error(`invalid duration (empty)`);let r=/^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/.exec(n);if(r){let n=Number(r[1]);if(!Number.isFinite(n)||n<0)throw Error(`invalid duration: ${e}`);let i=r[2]??t?.defaultUnit??`ms`,a=Math.round(n*Gp[i]);if(!Number.isFinite(a))throw Error(`invalid duration: ${e}`);return a}let i=0,a=0;for(let t of n.matchAll(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g)){let[n,r,o]=t,s=t.index??-1;if(!n||!r||!o||s<0||s!==a)throw Error(`invalid duration: ${e}`);let c=Number(r);if(!Number.isFinite(c)||c<0)throw Error(`invalid duration: ${e}`);let l=Gp[o];if(!l)throw Error(`invalid duration: ${e}`);i+=c*l,a+=n.length}if(a!==n.length||a===0)throw Error(`invalid duration: ${e}`);let o=Math.round(i);if(!Number.isFinite(o))throw Error(`invalid duration: ${e}`);return o}function qp(e){return e?.trim().toLowerCase()||void 0}function Jp(e){let t=qp(e.network);return t?t===`host`?`host`:t.startsWith(`container:`)&&e.allowContainerNamespaceJoin!==!0?`container_namespace_join`:null:null}const Yp=b.union([b.string(),b.object({primary:b.string().optional(),fallbacks:b.array(b.string()).max(1).optional()}).strict()]),Xp=b.object({cheapCheck:b.string().optional(),strong:b.string().optional(),escalation:b.string().optional(),coding:b.string().optional(),summarizer:b.string().optional()}).strict(),Zp=b.object({profileId:b.string().optional(),primary:b.string().optional(),fallbacks:b.array(b.string()).max(1).optional(),taskModels:Xp.optional()}).strict(),Qp=[`openai-completions`,`openai-responses`,`openai-codex-responses`,`anthropic-messages`,`google-generative-ai`,`github-copilot`,`ollama`],$p=b.union([b.literal(`allow`),b.literal(`deny`)]),em=b.union([b.literal(`direct`),b.literal(`group`),b.literal(`channel`),b.literal(`dm`)]).optional();function tm(){return b.object({default:$p.optional(),rules:b.array(b.object({action:$p,match:b.object({channel:b.string().optional(),chatType:em,keyPrefix:b.string().optional(),rawKeyPrefix:b.string().optional()}).strict().optional()}).strict()).optional()}).strict().optional()}const H=b.registry(),nm=/^[A-Z][A-Z0-9_]{0,127}$/,rm=/^[a-z][a-z0-9_-]{0,63}$/,im=/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/,am=/^[A-Za-z]:[\\/]/,om=/^\\\\[^\\]+\\[^\\]+/;function sm(e){return i.isAbsolute(e)||am.test(e)||om.test(e)}const cm=b.object({source:b.literal(`env`),provider:b.string().regex(rm,`Secret reference provider must match /^[a-z][a-z0-9_-]{0,63}$/ (example: "default").`),id:b.string().regex(nm,`Env secret reference id must match /^[A-Z][A-Z0-9_]{0,127}$/ (example: "OPENAI_API_KEY").`)}).strict(),lm=b.object({source:b.literal(`file`),provider:b.string().regex(rm,`Secret reference provider must match /^[a-z][a-z0-9_-]{0,63}$/ (example: "default").`),id:b.string().refine(mu,`File secret reference id must be an absolute JSON pointer (example: "/providers/openai/apiKey"), or "value" for singleValue mode.`)}).strict(),um=b.object({source:b.literal(`exec`),provider:b.string().regex(rm,`Secret reference provider must match /^[a-z][a-z0-9_-]{0,63}$/ (example: "default").`),id:b.string().regex(im,`Exec secret reference id must match /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/ (example: "vault/openai/api-key").`)}).strict(),dm=b.discriminatedUnion(`source`,[cm,lm,um]),U=b.union([b.string(),dm]),fm=b.object({source:b.literal(`env`),allowlist:b.array(b.string().regex(nm)).max(256).optional()}).strict(),pm=b.object({source:b.literal(`file`),path:b.string().min(1),mode:b.union([b.literal(`singleValue`),b.literal(`json`)]).optional(),timeoutMs:b.number().int().positive().max(12e4).optional(),maxBytes:b.number().int().positive().max(20*1024*1024).optional()}).strict(),mm=b.object({source:b.literal(`exec`),command:b.string().min(1).refine(e=>Af(e),`secrets.providers.*.command is unsafe.`).refine(e=>sm(e),`secrets.providers.*.command must be an absolute path.`),args:b.array(b.string().max(1024)).max(128).optional(),timeoutMs:b.number().int().positive().max(12e4).optional(),noOutputTimeoutMs:b.number().int().positive().max(12e4).optional(),maxOutputBytes:b.number().int().positive().max(20*1024*1024).optional(),jsonOnly:b.boolean().optional(),env:b.record(b.string(),b.string()).optional(),passEnv:b.array(b.string().regex(nm)).max(128).optional(),trustedDirs:b.array(b.string().min(1).refine(e=>sm(e),`trustedDirs entries must be absolute paths.`)).max(64).optional(),allowInsecurePath:b.boolean().optional(),allowSymlinkCommand:b.boolean().optional()}).strict(),hm=b.discriminatedUnion(`source`,[fm,pm,mm]),gm=b.object({providers:b.object({}).catchall(hm).optional(),defaults:b.object({env:b.string().regex(rm).optional(),file:b.string().regex(rm).optional(),exec:b.string().regex(rm).optional()}).strict().optional(),resolution:b.object({maxProviderConcurrency:b.number().int().positive().max(16).optional(),maxRefsPerProvider:b.number().int().positive().max(4096).optional(),maxBatchBytes:b.number().int().positive().max(5*1024*1024).optional()}).strict().optional()}).strict().optional(),_m=b.enum(Qp),vm=b.object({supportsStore:b.boolean().optional(),supportsDeveloperRole:b.boolean().optional(),supportsReasoningEffort:b.boolean().optional(),supportsUsageInStreaming:b.boolean().optional(),supportsStrictMode:b.boolean().optional(),maxTokensField:b.union([b.literal(`max_completion_tokens`),b.literal(`max_tokens`)]).optional(),thinkingFormat:b.union([b.literal(`openai`),b.literal(`zai`),b.literal(`qwen`)]).optional(),requiresToolResultName:b.boolean().optional(),requiresAssistantAfterToolResult:b.boolean().optional(),requiresThinkingAsText:b.boolean().optional(),requiresMistralToolIds:b.boolean().optional()}).strict().optional(),ym=b.object({tools:b.boolean().optional(),json:b.boolean().optional(),audio:b.boolean().optional(),video:b.boolean().optional(),speech:b.boolean().optional(),fixedReasoning:b.boolean().optional(),thinkingLevels:b.array(b.union([b.literal(`off`),b.literal(`minimal`),b.literal(`low`),b.literal(`medium`),b.literal(`high`),b.literal(`xhigh`),b.literal(`max`),b.literal(`ultra`)])).optional(),defaultThinkingLevel:b.union([b.literal(`off`),b.literal(`minimal`),b.literal(`low`),b.literal(`medium`),b.literal(`high`),b.literal(`xhigh`),b.literal(`max`),b.literal(`ultra`)]).optional(),thinkingMode:b.union([b.literal(`openai-reasoning-effort`),b.literal(`anthropic-thinking-budget`),b.literal(`anthropic-adaptive`),b.literal(`google-thinking-budget`),b.literal(`xai-reasoning-effort`),b.literal(`xai-multi-agent-effort`),b.literal(`mistral-reasoning-effort`),b.literal(`volcengine-reasoning-effort`),b.literal(`byteplus-thinking-type`),b.literal(`zai-binary`),b.literal(`qwen-thinking`),b.literal(`moonshot-thinking`),b.literal(`generic-reasoning`)]).optional(),reasoningBudgetSupported:b.boolean().optional()}).strict().optional(),bm=b.object({id:b.string().min(1),name:b.string().min(1),api:_m.optional(),reasoning:b.boolean().optional(),input:b.array(b.union([b.literal(`text`),b.literal(`image`)])).optional(),cost:b.object({input:b.number().optional(),output:b.number().optional(),cacheRead:b.number().optional(),cacheWrite:b.number().optional()}).strict().optional(),contextWindow:b.number().positive().optional(),maxTokens:b.number().positive().optional(),headers:b.record(b.string(),b.string()).optional(),compat:vm,capabilities:ym}).strict(),xm=b.object({baseUrl:b.string().min(1),apiKey:U.optional().register(H),auth:b.union([b.literal(`api-key`),b.literal(`oauth`),b.literal(`token`)]).optional(),api:_m.optional(),headers:b.record(b.string(),b.string()).optional(),authHeader:b.boolean().optional(),request:b.object({allowPrivateNetwork:b.boolean().optional()}).strict().optional(),models:b.array(bm)}).strict(),Sm=b.object({mode:b.union([b.literal(`merge`),b.literal(`replace`)]).optional(),providers:b.record(b.string(),xm).optional()}).strict().optional(),Cm=b.object({mentionPatterns:b.array(b.string()).optional(),historyLimit:b.number().int().positive().optional()}).strict().optional(),W=b.object({historyLimit:b.number().int().min(0).optional()}).strict(),wm=b.object({name:b.string().optional(),theme:b.string().optional(),emoji:b.string().optional(),avatar:b.string().optional()}).strict().optional(),G=b.union([b.literal(`steer`),b.literal(`followup`),b.literal(`collect`),b.literal(`steer-backlog`),b.literal(`steer+backlog`),b.literal(`queue`),b.literal(`interrupt`)]),Tm=b.union([b.literal(`old`),b.literal(`new`),b.literal(`summarize`)]),Em=b.union([b.literal(`off`),b.literal(`first`),b.literal(`all`)]),Dm=b.union([b.literal(`never`),b.literal(`instant`),b.literal(`thinking`),b.literal(`message`)]),K=b.enum([`open`,`disabled`,`allowlist`]),q=b.enum([`pairing`,`allowlist`,`open`,`disabled`]),J=b.object({minChars:b.number().int().positive().optional(),maxChars:b.number().int().positive().optional(),idleMs:b.number().int().nonnegative().optional()}).strict();b.number().int().min(0).optional(),b.number().int().min(0).optional(),b.record(b.string(),W.optional()).optional(),b.number().int().positive().optional(),b.enum([`length`,`newline`]).optional(),b.boolean().optional(),J.optional(),b.string().optional(),b.number().positive().optional();const Om=b.object({minChars:b.number().int().positive().optional(),maxChars:b.number().int().positive().optional(),breakPreference:b.union([b.literal(`paragraph`),b.literal(`newline`),b.literal(`sentence`)]).optional()}).strict(),km=b.enum([`off`,`bullets`,`code`]),Am=b.object({tables:km.optional()}).strict().optional(),jm=b.enum([`elevenlabs`,`openai`,`edge`]),Mm=b.enum([`final`,`all`]),Nm=b.enum([`off`,`always`,`inbound`,`tagged`]),Pm=b.object({auto:Nm.optional(),enabled:b.boolean().optional(),mode:Mm.optional(),provider:jm.optional(),summaryModel:b.string().optional(),modelOverrides:b.object({enabled:b.boolean().optional(),allowText:b.boolean().optional(),allowProvider:b.boolean().optional(),allowVoice:b.boolean().optional(),allowModelId:b.boolean().optional(),allowVoiceSettings:b.boolean().optional(),allowNormalization:b.boolean().optional(),allowSeed:b.boolean().optional()}).strict().optional(),elevenlabs:b.object({apiKey:b.string().optional().register(H),baseUrl:b.string().optional(),voiceId:b.string().optional(),modelId:b.string().optional(),seed:b.number().int().min(0).max(4294967295).optional(),applyTextNormalization:b.enum([`auto`,`on`,`off`]).optional(),languageCode:b.string().optional(),voiceSettings:b.object({stability:b.number().min(0).max(1).optional(),similarityBoost:b.number().min(0).max(1).optional(),style:b.number().min(0).max(1).optional(),useSpeakerBoost:b.boolean().optional(),speed:b.number().min(.5).max(2).optional()}).strict().optional()}).strict().optional(),openai:b.object({apiKey:b.string().optional().register(H),model:b.string().optional(),voice:b.string().optional()}).strict().optional(),edge:b.object({enabled:b.boolean().optional(),voice:b.string().optional(),lang:b.string().optional(),outputFormat:b.string().optional(),pitch:b.string().optional(),rate:b.string().optional(),volume:b.string().optional(),saveSubtitles:b.boolean().optional(),proxy:b.string().optional(),timeoutMs:b.number().int().min(1e3).max(12e4).optional()}).strict().optional(),prefsPath:b.string().optional(),maxTextLength:b.number().int().min(1).optional(),timeoutMs:b.number().int().min(1e3).max(12e4).optional()}).strict().optional(),Fm=b.object({mode:b.union([b.literal(`off`),b.literal(`natural`),b.literal(`custom`)]).optional(),minMs:b.number().int().nonnegative().optional(),maxMs:b.number().int().nonnegative().optional()}).strict(),Im=b.object({noOutputTimeoutMs:b.number().int().min(1e3).optional(),noOutputTimeoutRatio:b.number().min(.05).max(.95).optional(),minMs:b.number().int().min(1e3).optional(),maxMs:b.number().int().min(1e3).optional()}).strict().optional(),Lm=b.object({command:b.string(),args:b.array(b.string()).optional(),output:b.union([b.literal(`json`),b.literal(`text`),b.literal(`jsonl`)]).optional(),resumeOutput:b.union([b.literal(`json`),b.literal(`text`),b.literal(`jsonl`)]).optional(),input:b.union([b.literal(`arg`),b.literal(`stdin`)]).optional(),maxPromptArgChars:b.number().int().positive().optional(),env:b.record(b.string(),b.string()).optional(),clearEnv:b.array(b.string()).optional(),modelArg:b.string().optional(),modelAliases:b.record(b.string(),b.string()).optional(),sessionArg:b.string().optional(),sessionArgs:b.array(b.string()).optional(),resumeArgs:b.array(b.string()).optional(),sessionMode:b.union([b.literal(`always`),b.literal(`existing`),b.literal(`none`)]).optional(),sessionIdFields:b.array(b.string()).optional(),systemPromptArg:b.string().optional(),systemPromptMode:b.union([b.literal(`append`),b.literal(`replace`)]).optional(),systemPromptWhen:b.union([b.literal(`first`),b.literal(`always`),b.literal(`never`)]).optional(),imageArg:b.string().optional(),imageMode:b.union([b.literal(`repeat`),b.literal(`list`)]).optional(),serialize:b.boolean().optional(),reliability:b.object({watchdog:b.object({fresh:Im,resume:Im}).strict().optional()}).strict().optional()}).strict(),Rm=e=>(e??[]).map(e=>String(e).trim()).filter(Boolean),Y=e=>{e.policy===`open`&&(Rm(e.allowFrom).includes(`*`)||e.ctx.addIssue({code:b.ZodIssueCode.custom,path:e.path,message:e.message}))},X=e=>{e.policy===`allowlist`&&(Rm(e.allowFrom).length>0||e.ctx.addIssue({code:b.ZodIssueCode.custom,path:e.path,message:e.message}))},zm=b.enum([`thread`,`top-level`]),Bm=b.object({attempts:b.number().int().min(1).optional(),minDelayMs:b.number().int().min(0).optional(),maxDelayMs:b.number().int().min(0).optional(),jitter:b.number().min(0).max(1).optional()}).strict().optional(),Vm=b.object({whatsapp:G.optional(),telegram:G.optional(),discord:G.optional(),irc:G.optional(),slack:G.optional(),mattermost:G.optional(),signal:G.optional(),imessage:G.optional(),msteams:G.optional(),webchat:G.optional()}).strict().optional(),Hm=b.record(b.string(),b.number().int().nonnegative()).optional(),Um=b.object({mode:G.optional(),byChannel:Vm,debounceMs:b.number().int().nonnegative().optional(),debounceMsByChannel:Hm,cap:b.number().int().positive().optional(),drop:Tm.optional()}).strict().optional(),Wm=b.object({debounceMs:b.number().int().nonnegative().optional(),byChannel:Hm}).strict().optional(),Gm=b.object({command:b.array(b.string()).superRefine((e,t)=>{let n=e[0];Af(n)||t.addIssue({code:b.ZodIssueCode.custom,path:[0],message:`expected safe executable name or path`})}),timeoutSeconds:b.number().int().positive().optional()}).strict().optional(),Km=b.string().regex(/^#?[0-9a-fA-F]{6}$/,`expected hex color (RRGGBB)`),qm=b.string().refine(Af,`expected safe executable name or path`),Jm=tm(),Ym=b.array(b.union([b.literal(`image`),b.literal(`audio`),b.literal(`video`)])).optional(),Xm=b.object({mode:b.union([b.literal(`first`),b.literal(`all`)]).optional(),maxAttachments:b.number().int().positive().optional(),prefer:b.union([b.literal(`first`),b.literal(`last`),b.literal(`path`),b.literal(`url`)]).optional()}).strict().optional(),Zm=b.object({detectLanguage:b.boolean().optional(),punctuate:b.boolean().optional(),smartFormat:b.boolean().optional()}).strict().optional(),Qm=b.union([b.string(),b.number(),b.boolean()]),$m=b.record(b.string(),b.record(b.string(),Qm)).optional(),eh={prompt:b.string().optional(),timeoutSeconds:b.number().int().positive().optional(),language:b.string().optional(),providerOptions:$m,deepgram:Zm,baseUrl:b.string().optional(),headers:b.record(b.string(),b.string()).optional()},th=b.object({provider:b.string().optional(),model:b.string().optional(),capabilities:Ym,type:b.union([b.literal(`provider`),b.literal(`cli`)]).optional(),command:b.string().optional(),args:b.array(b.string()).optional(),maxChars:b.number().int().positive().optional(),maxBytes:b.number().int().positive().optional(),...eh,profile:b.string().optional(),preferredProfile:b.string().optional()}).strict().optional(),nh=b.object({enabled:b.boolean().optional(),scope:Jm,maxBytes:b.number().int().positive().optional(),maxChars:b.number().int().positive().optional(),...eh,attachments:Xm,models:b.array(th).optional()}).strict().optional(),rh=b.object({models:b.array(th).optional(),concurrency:b.number().int().positive().optional(),image:nh.optional(),audio:nh.optional(),video:nh.optional()}).strict().optional(),ih=b.object({type:b.literal(`cli`).optional(),command:b.string().min(1),args:b.array(b.string()).optional(),timeoutSeconds:b.number().int().positive().optional()}).strict(),ah=b.object({enabled:b.boolean().optional(),scope:Jm,maxLinks:b.number().int().positive().optional(),timeoutSeconds:b.number().int().positive().optional(),models:b.array(ih).optional()}).strict().optional(),oh=b.union([b.boolean(),b.literal(`auto`)]),sh=b.object({native:oh.optional(),nativeSkills:oh.optional()}).strict().optional(),ch=b.object({every:b.string().optional(),activeHours:b.object({start:b.string().optional(),end:b.string().optional(),timezone:b.string().optional()}).strict().optional(),model:b.string().optional(),session:b.string().optional(),includeReasoning:b.boolean().optional(),target:b.string().optional(),directPolicy:b.union([b.literal(`allow`),b.literal(`block`)]).optional(),to:b.string().optional(),accountId:b.string().optional(),prompt:b.string().optional(),ackMaxChars:b.number().int().nonnegative().optional(),suppressToolErrorWarnings:b.boolean().optional()}).strict().superRefine((e,t)=>{if(!e.every)return;try{Kp(e.every,{defaultUnit:`m`})}catch{t.addIssue({code:b.ZodIssueCode.custom,path:[`every`],message:`invalid duration (use ms, s, m, h)`})}let n=e.activeHours;if(!n)return;let r=/^([01]\d|2[0-3]|24):([0-5]\d)$/,i=(e,n,i)=>{if(!e)return;if(!r.test(e)){t.addIssue({code:b.ZodIssueCode.custom,path:[`activeHours`,i],message:`invalid time (use "HH:MM" 24h format)`});return}let[a,o]=e.split(`:`),s=Number(a);if(s===24&&Number(o)!==0){t.addIssue({code:b.ZodIssueCode.custom,path:[`activeHours`,i],message:`invalid time (24:00 is the only allowed 24:xx value)`});return}s===24&&!n.allow24&&t.addIssue({code:b.ZodIssueCode.custom,path:[`activeHours`,i],message:`invalid time (start cannot be 24:00)`})};i(n.start,{allow24:!1},`start`),i(n.end,{allow24:!0},`end`)}).optional(),lh=b.object({image:b.string().optional(),containerPrefix:b.string().optional(),workdir:b.string().optional(),readOnlyRoot:b.boolean().optional(),tmpfs:b.array(b.string()).optional(),network:b.string().optional(),user:b.string().optional(),capDrop:b.array(b.string()).optional(),env:b.record(b.string(),b.string()).optional(),setupCommand:b.string().optional(),pidsLimit:b.number().int().positive().optional(),memory:b.union([b.string(),b.number()]).optional(),memorySwap:b.union([b.string(),b.number()]).optional(),cpus:b.number().positive().optional(),ulimits:b.record(b.string(),b.union([b.string(),b.number(),b.object({soft:b.number().int().nonnegative().optional(),hard:b.number().int().nonnegative().optional()}).strict()])).optional(),seccompProfile:b.string().optional(),apparmorProfile:b.string().optional(),dns:b.array(b.string()).optional(),extraHosts:b.array(b.string()).optional(),binds:b.array(b.string()).optional(),dangerouslyAllowReservedContainerTargets:b.boolean().optional(),dangerouslyAllowExternalBindSources:b.boolean().optional(),dangerouslyAllowContainerNamespaceJoin:b.boolean().optional()}).strict().superRefine((e,t)=>{if(e.binds)for(let n=0;n<e.binds.length;n+=1){let r=e.binds[n]?.trim()??``;if(!r){t.addIssue({code:b.ZodIssueCode.custom,path:[`binds`,n],message:`Sandbox security: bind mount entry must be a non-empty string.`});continue}let i=r.indexOf(`:`),a=(i<=0?r:r.slice(0,i)).trim();a.startsWith(`/`)||t.addIssue({code:b.ZodIssueCode.custom,path:[`binds`,n],message:`Sandbox security: bind mount "${r}" uses a non-absolute source path "${a}". Only absolute POSIX paths are supported for sandbox binds.`})}let n=Jp({network:e.network,allowContainerNamespaceJoin:e.dangerouslyAllowContainerNamespaceJoin===!0});n===`host`&&t.addIssue({code:b.ZodIssueCode.custom,path:[`network`],message:`Sandbox security: network mode "host" is blocked. Use "bridge" or "none" instead.`}),n===`container_namespace_join`&&t.addIssue({code:b.ZodIssueCode.custom,path:[`network`],message:`Sandbox security: network mode "container:*" is blocked by default. Use a custom bridge network, or set dangerouslyAllowContainerNamespaceJoin=true only when you fully trust this runtime.`}),e.seccompProfile?.trim().toLowerCase()===`unconfined`&&t.addIssue({code:b.ZodIssueCode.custom,path:[`seccompProfile`],message:`Sandbox security: seccomp profile "unconfined" is blocked. Use a custom seccomp profile file or omit this setting.`}),e.apparmorProfile?.trim().toLowerCase()===`unconfined`&&t.addIssue({code:b.ZodIssueCode.custom,path:[`apparmorProfile`],message:`Sandbox security: apparmor profile "unconfined" is blocked. Use a named AppArmor profile or omit this setting.`})}).optional(),uh=b.object({enabled:b.boolean().optional(),image:b.string().optional(),containerPrefix:b.string().optional(),network:b.string().optional(),cdpPort:b.number().int().positive().optional(),cdpSourceRange:b.string().optional(),vncPort:b.number().int().positive().optional(),noVncPort:b.number().int().positive().optional(),headless:b.boolean().optional(),enableNoVnc:b.boolean().optional(),allowHostControl:b.boolean().optional(),autoStart:b.boolean().optional(),autoStartTimeoutMs:b.number().int().positive().optional(),binds:b.array(b.string()).optional()}).superRefine((e,t)=>{e.network?.trim().toLowerCase()===`host`&&t.addIssue({code:b.ZodIssueCode.custom,path:[`network`],message:`Sandbox security: browser network mode "host" is blocked. Use "bridge" or a custom bridge network instead.`})}).strict().optional(),dh=b.object({idleHours:b.number().int().nonnegative().optional(),maxAgeDays:b.number().int().nonnegative().optional()}).strict().optional(),Z=b.object({allow:b.array(b.string()).optional(),alsoAllow:b.array(b.string()).optional(),deny:b.array(b.string()).optional()}).strict().superRefine((e,t)=>{e.allow&&e.allow.length>0&&e.alsoAllow&&e.alsoAllow.length>0&&t.addIssue({code:b.ZodIssueCode.custom,message:`tools policy cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)`})}).optional(),fh=b.object({enabled:b.boolean().optional(),provider:b.string().optional(),apiKey:U.optional().register(H),maxResults:b.number().int().positive().optional(),timeoutSeconds:b.number().int().positive().optional(),cacheTtlMinutes:b.number().nonnegative().optional(),duckduckgo:b.object({region:b.string().optional(),safeSearch:b.union([b.literal(`strict`),b.literal(`moderate`),b.literal(`off`)]).optional()}).strict().optional(),exa:b.object({apiKey:U.optional().register(H),baseUrl:b.string().optional(),type:b.union([b.literal(`auto`),b.literal(`neural`),b.literal(`fast`),b.literal(`deep`),b.literal(`deep-reasoning`),b.literal(`instant`)]).optional()}).strict().optional(),firecrawl:b.object({apiKey:U.optional().register(H),baseUrl:b.string().optional()}).strict().optional(),perplexity:b.object({apiKey:U.optional().register(H),baseUrl:b.string().optional(),model:b.string().optional()}).strict().optional(),grok:b.object({apiKey:U.optional().register(H),model:b.string().optional(),inlineCitations:b.boolean().optional()}).strict().optional(),gemini:b.object({apiKey:U.optional().register(H),model:b.string().optional()}).strict().optional(),kimi:b.object({apiKey:U.optional().register(H),baseUrl:b.string().optional(),model:b.string().optional()}).strict().optional(),searxng:b.object({baseUrl:b.string().optional(),categories:b.string().optional(),language:b.string().optional()}).strict().optional(),tavily:b.object({apiKey:U.optional().register(H),baseUrl:b.string().optional(),includeAnswer:b.boolean().optional(),searchDepth:b.union([b.literal(`basic`),b.literal(`advanced`)]).optional(),topic:b.string().optional()}).strict().optional()}).strict().optional(),ph=b.object({enabled:b.boolean().optional(),maxChars:b.number().int().positive().optional(),maxCharsCap:b.number().int().positive().optional(),timeoutSeconds:b.number().int().positive().optional(),cacheTtlMinutes:b.number().nonnegative().optional(),maxRedirects:b.number().int().nonnegative().optional(),userAgent:b.string().optional(),readability:b.boolean().optional(),firecrawl:b.object({enabled:b.boolean().optional(),apiKey:U.optional().register(H),baseUrl:b.string().optional(),onlyMainContent:b.boolean().optional(),maxAgeMs:b.number().int().nonnegative().optional(),timeoutSeconds:b.number().int().positive().optional()}).strict().optional()}).strict().optional(),mh=b.object({search:fh,fetch:ph}).strict().optional(),hh=b.union([b.literal(`minimal`),b.literal(`coding`),b.literal(`messaging`),b.literal(`full`)]).optional();function gh(e,t,n){e.allow&&e.allow.length>0&&e.alsoAllow&&e.alsoAllow.length>0&&t.addIssue({code:b.ZodIssueCode.custom,message:n})}const _h=b.object({allow:b.array(b.string()).optional(),alsoAllow:b.array(b.string()).optional(),deny:b.array(b.string()).optional(),profile:hh}).strict().superRefine((e,t)=>{gh(e,t,`tools.byProvider policy cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)`)}),vh=b.record(b.string(),b.array(b.union([b.string(),b.number()]))).optional(),yh=b.object({enabled:b.boolean().optional(),workspaceOnly:b.boolean().optional(),allowModels:b.array(b.string()).optional()}).strict().optional(),bh=b.object({minPositional:b.number().int().nonnegative().optional(),maxPositional:b.number().int().nonnegative().optional(),allowedValueFlags:b.array(b.string()).optional(),deniedFlags:b.array(b.string()).optional()}).strict(),xh={host:b.enum([`auto`,`sandbox`,`gateway`,`node`]).optional(),security:b.enum([`deny`,`allowlist`,`full`]).optional(),ask:b.enum([`off`,`on-miss`,`always`]).optional(),node:b.string().optional(),pathPrepend:b.array(b.string()).optional(),safeBins:b.array(b.string()).optional(),safeBinTrustedDirs:b.array(b.string()).optional(),safeBinProfiles:b.record(b.string(),bh).optional(),backgroundMs:b.number().int().positive().optional(),timeoutSec:b.number().int().positive().optional(),cleanupMs:b.number().int().positive().optional(),notifyOnExit:b.boolean().optional(),notifyOnExitEmptySuccess:b.boolean().optional(),applyPatch:yh},Sh=b.object({...xh,approvalRunningNoticeMs:b.number().int().nonnegative().optional()}).strict().optional(),Ch=b.object(xh).strict().optional(),wh=b.object({workspaceOnly:b.boolean().optional()}).strict().optional(),Th=b.object({genericRepeat:b.boolean().optional(),knownPollNoProgress:b.boolean().optional(),pingPong:b.boolean().optional()}).strict().optional(),Eh=b.object({enabled:b.boolean().optional(),historySize:b.number().int().positive().optional(),warningThreshold:b.number().int().positive().optional(),criticalThreshold:b.number().int().positive().optional(),globalCircuitBreakerThreshold:b.number().int().positive().optional(),detectors:Th}).strict().superRefine((e,t)=>{e.warningThreshold!==void 0&&e.criticalThreshold!==void 0&&e.warningThreshold>=e.criticalThreshold&&t.addIssue({code:b.ZodIssueCode.custom,path:[`criticalThreshold`],message:`tools.loopDetection.warningThreshold must be lower than criticalThreshold.`}),e.criticalThreshold!==void 0&&e.globalCircuitBreakerThreshold!==void 0&&e.criticalThreshold>=e.globalCircuitBreakerThreshold&&t.addIssue({code:b.ZodIssueCode.custom,path:[`globalCircuitBreakerThreshold`],message:`tools.loopDetection.criticalThreshold must be lower than globalCircuitBreakerThreshold.`})}).optional(),Dh=b.object({mode:b.union([b.literal(`off`),b.literal(`non-main`),b.literal(`all`)]).optional(),backend:b.string().optional(),workspaceAccess:b.union([b.literal(`none`),b.literal(`ro`),b.literal(`rw`)]).optional(),sessionToolsVisibility:b.union([b.literal(`spawned`),b.literal(`all`)]).optional(),scope:b.union([b.literal(`session`),b.literal(`agent`),b.literal(`shared`)]).optional(),perSession:b.boolean().optional(),workspaceRoot:b.string().optional(),docker:lh,browser:uh,prune:dh}).strict().superRefine((e,t)=>{Jp({network:e.browser?.network,allowContainerNamespaceJoin:e.docker?.dangerouslyAllowContainerNamespaceJoin===!0})===`container_namespace_join`&&t.addIssue({code:b.ZodIssueCode.custom,path:[`browser`,`network`],message:`Sandbox security: browser network mode "container:*" is blocked by default. Set sandbox.docker.dangerouslyAllowContainerNamespaceJoin=true only when you fully trust this runtime.`})}).optional(),Oh={profile:hh,allow:b.array(b.string()).optional(),alsoAllow:b.array(b.string()).optional(),deny:b.array(b.string()).optional(),byProvider:b.record(b.string(),_h).optional()},kh=b.object({...Oh,elevated:b.object({enabled:b.boolean().optional(),allowFrom:vh}).strict().optional(),exec:Sh,fs:wh,loopDetection:Eh,sandbox:b.object({tools:Z}).strict().optional()}).strict().superRefine((e,t)=>{gh(e,t,`agent tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)`)}).optional(),Ah=b.object({enabled:b.boolean().optional(),sources:b.array(b.union([b.literal(`memory`),b.literal(`sessions`)])).optional(),extraPaths:b.array(b.string()).optional(),experimental:b.object({sessionMemory:b.boolean().optional()}).strict().optional(),provider:b.union([b.literal(`openai`),b.literal(`local`),b.literal(`gemini`),b.literal(`voyage`),b.literal(`mistral`)]).optional(),remote:b.object({baseUrl:b.string().optional(),apiKey:b.string().optional().register(H),headers:b.record(b.string(),b.string()).optional(),batch:b.object({enabled:b.boolean().optional(),wait:b.boolean().optional(),concurrency:b.number().int().positive().optional(),pollIntervalMs:b.number().int().nonnegative().optional(),timeoutMinutes:b.number().int().positive().optional()}).strict().optional()}).strict().optional(),fallback:b.union([b.literal(`openai`),b.literal(`gemini`),b.literal(`local`),b.literal(`voyage`),b.literal(`mistral`),b.literal(`none`)]).optional(),model:b.string().optional(),local:b.object({modelPath:b.string().optional(),modelCacheDir:b.string().optional()}).strict().optional(),store:b.object({driver:b.literal(`sqlite`).optional(),path:b.string().optional(),vector:b.object({enabled:b.boolean().optional(),extensionPath:b.string().optional()}).strict().optional()}).strict().optional(),chunking:b.object({tokens:b.number().int().positive().optional(),overlap:b.number().int().nonnegative().optional()}).strict().optional(),sync:b.object({onSessionStart:b.boolean().optional(),onSearch:b.boolean().optional(),watch:b.boolean().optional(),watchDebounceMs:b.number().int().nonnegative().optional(),intervalMinutes:b.number().int().nonnegative().optional(),sessions:b.object({deltaBytes:b.number().int().nonnegative().optional(),deltaMessages:b.number().int().nonnegative().optional()}).strict().optional()}).strict().optional(),query:b.object({maxResults:b.number().int().positive().optional(),minScore:b.number().min(0).max(1).optional(),hybrid:b.object({enabled:b.boolean().optional(),vectorWeight:b.number().min(0).max(1).optional(),textWeight:b.number().min(0).max(1).optional(),candidateMultiplier:b.number().int().positive().optional(),mmr:b.object({enabled:b.boolean().optional(),lambda:b.number().min(0).max(1).optional()}).strict().optional(),temporalDecay:b.object({enabled:b.boolean().optional(),halfLifeDays:b.number().int().positive().optional()}).strict().optional()}).strict().optional()}).strict().optional(),cache:b.object({enabled:b.boolean().optional(),maxEntries:b.number().int().positive().optional()}).strict().optional()}).strict().optional(),jh=b.object({id:b.string(),default:b.boolean().optional(),name:b.string().optional(),workspace:b.string().optional(),agentDir:b.string().optional(),activeModelProvider:b.string().optional(),modelProviders:b.record(b.string(),Zp).optional(),model:Yp.optional(),taskModels:Xp.optional(),thinkingDefault:b.union([b.literal(`off`),b.literal(`minimal`),b.literal(`low`),b.literal(`medium`),b.literal(`high`),b.literal(`xhigh`),b.literal(`max`),b.literal(`ultra`)]).optional(),reasoningDefault:b.union([b.literal(`off`),b.literal(`minimal`),b.literal(`low`),b.literal(`medium`),b.literal(`high`),b.literal(`xhigh`),b.literal(`max`),b.literal(`ultra`)]).optional(),fastModeDefault:b.boolean().optional(),skills:b.array(b.string()).optional(),memorySearch:Ah,humanDelay:Fm.optional(),heartbeat:ch,identity:wm,groupChat:Cm,subagents:b.object({allowAgents:b.array(b.string()).optional(),requireAgentId:b.boolean().optional(),model:b.union([b.string(),b.object({primary:b.string().optional(),fallbacks:b.array(b.string()).max(1).optional()}).strict()]).optional(),thinking:b.string().optional()}).strict().optional(),sandbox:Dh,tools:kh,strictAgentic:b.object({mode:b.union([b.literal(`off`),b.literal(`warn`)]).optional()}).strict().optional()}).strict(),Mh=b.object({...Oh,web:mh,media:rh,links:ah,sessions:b.object({visibility:b.enum([`self`,`tree`,`agent`,`all`]).optional()}).strict().optional(),loopDetection:Eh,message:b.object({allowCrossContextSend:b.boolean().optional(),crossContext:b.object({allowWithinProvider:b.boolean().optional(),allowAcrossProviders:b.boolean().optional(),marker:b.object({enabled:b.boolean().optional(),prefix:b.string().optional(),suffix:b.string().optional()}).strict().optional()}).strict().optional(),broadcast:b.object({enabled:b.boolean().optional()}).strict().optional()}).strict().optional(),agentToAgent:b.object({enabled:b.boolean().optional(),allow:b.array(b.string()).optional()}).strict().optional(),elevated:b.object({enabled:b.boolean().optional(),allowFrom:vh}).strict().optional(),exec:Ch,fs:wh,subagents:b.object({tools:Z}).strict().optional(),sandbox:b.object({tools:Z}).strict().optional()}).strict().superRefine((e,t)=>{gh(e,t,`tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)`)}).optional(),Nh=b.object({model:Yp.optional(),taskModels:Xp.optional(),imageModel:Yp.optional(),models:b.record(b.string(),b.object({alias:b.string().optional(),params:b.record(b.string(),b.unknown()).optional(),streaming:b.boolean().optional()}).strict()).optional(),workspace:b.string().optional(),repoRoot:b.string().optional(),skipBootstrap:b.boolean().optional(),bootstrapMaxChars:b.number().int().positive().optional(),bootstrapTotalMaxChars:b.number().int().positive().optional(),bootstrapPromptTruncationWarning:b.union([b.literal(`off`),b.literal(`once`),b.literal(`always`)]).optional(),userTimezone:b.string().optional(),timeFormat:b.union([b.literal(`auto`),b.literal(`12`),b.literal(`24`)]).optional(),envelopeTimezone:b.string().optional(),envelopeTimestamp:b.union([b.literal(`on`),b.literal(`off`)]).optional(),envelopeElapsed:b.union([b.literal(`on`),b.literal(`off`)]).optional(),contextTokens:b.number().int().positive().optional(),cliBackends:b.record(b.string(),Lm).optional(),memorySearch:Ah,contextPruning:b.object({mode:b.union([b.literal(`off`),b.literal(`cache-ttl`)]).optional(),ttl:b.string().optional(),keepLastAssistants:b.number().int().nonnegative().optional(),softTrimRatio:b.number().min(0).max(1).optional(),hardClearRatio:b.number().min(0).max(1).optional(),minPrunableToolChars:b.number().int().nonnegative().optional(),tools:b.object({allow:b.array(b.string()).optional(),deny:b.array(b.string()).optional()}).strict().optional(),softTrim:b.object({maxChars:b.number().int().nonnegative().optional(),headChars:b.number().int().nonnegative().optional(),tailChars:b.number().int().nonnegative().optional()}).strict().optional(),hardClear:b.object({enabled:b.boolean().optional(),placeholder:b.string().optional()}).strict().optional()}).strict().optional(),compaction:b.object({mode:b.union([b.literal(`default`),b.literal(`safeguard`)]).optional(),reserveTokens:b.number().int().nonnegative().optional(),keepRecentTokens:b.number().int().positive().optional(),timeoutSeconds:b.number().positive().optional(),reserveTokensFloor:b.number().int().nonnegative().optional(),maxHistoryShare:b.number().min(.1).max(.9).optional(),identifierPolicy:b.union([b.literal(`strict`),b.literal(`off`),b.literal(`custom`)]).optional(),identifierInstructions:b.string().optional(),memoryFlush:b.object({enabled:b.boolean().optional(),softThresholdTokens:b.number().int().nonnegative().optional(),prompt:b.string().optional(),systemPrompt:b.string().optional()}).strict().optional()}).strict().optional(),embeddedPi:b.object({projectSettingsPolicy:b.union([b.literal(`trusted`),b.literal(`sanitize`),b.literal(`ignore`)]).optional()}).strict().optional(),strictAgentic:b.object({mode:b.union([b.literal(`off`),b.literal(`warn`)]).optional()}).strict().optional(),skills:b.array(b.string()).optional(),thinkingDefault:b.union([b.literal(`off`),b.literal(`minimal`),b.literal(`low`),b.literal(`medium`),b.literal(`high`),b.literal(`xhigh`),b.literal(`max`),b.literal(`ultra`)]).optional(),reasoningDefault:b.union([b.literal(`off`),b.literal(`minimal`),b.literal(`low`),b.literal(`medium`),b.literal(`high`),b.literal(`xhigh`),b.literal(`max`),b.literal(`ultra`)]).optional(),fastModeDefault:b.boolean().optional(),verboseDefault:b.union([b.literal(`off`),b.literal(`on`),b.literal(`full`)]).optional(),elevatedDefault:b.union([b.literal(`off`),b.literal(`on`),b.literal(`ask`),b.literal(`full`)]).optional(),blockStreamingDefault:b.union([b.literal(`off`),b.literal(`on`)]).optional(),blockStreamingBreak:b.union([b.literal(`text_end`),b.literal(`message_end`)]).optional(),blockStreamingChunk:Om.optional(),blockStreamingCoalesce:J.optional(),humanDelay:Fm.optional(),timeoutSeconds:b.number().int().positive().optional(),mediaMaxMb:b.number().positive().optional(),imageMaxDimensionPx:b.number().int().positive().optional(),typingIntervalSeconds:b.number().int().positive().optional(),typingMode:Dm.optional(),heartbeat:ch,maxConcurrent:b.number().int().positive().optional(),subagents:b.object({maxConcurrent:b.number().int().positive().optional(),maxSpawnDepth:b.number().int().min(1).max(5).optional().describe(`Maximum nesting depth for sub-agent spawning. 1 = no nesting (default), 2 = sub-agents can spawn sub-sub-agents.`),maxChildrenPerAgent:b.number().int().min(1).max(20).optional().describe(`Maximum number of active children a single agent session can spawn (default: 5).`),archiveAfterMinutes:b.number().int().positive().optional(),model:Yp.optional(),thinking:b.string().optional(),runTimeoutSeconds:b.number().int().min(0).optional(),announceTimeoutMs:b.number().int().positive().optional(),allowAgents:b.array(b.string()).optional(),requireAgentId:b.boolean().optional()}).strict().optional(),sandbox:Dh}).strict().optional(),Ph=b.object({defaults:b.lazy(()=>Nh).optional(),list:b.array(jh).optional()}).strict().optional(),Fh=b.array(b.object({agentId:b.string(),comment:b.string().optional(),match:b.object({channel:b.string(),accountId:b.string().optional(),peer:b.object({kind:b.union([b.literal(`direct`),b.literal(`group`),b.literal(`channel`),b.literal(`dm`)]),id:b.string()}).strict().optional(),guildId:b.string().optional(),teamId:b.string().optional(),roles:b.array(b.string()).optional()}).strict()}).strict()).optional(),Ih=b.enum([`parallel`,`sequential`]),Lh=b.object({strategy:Ih.optional()}).catchall(b.array(b.string())).optional(),Rh=b.object({channel:b.string().min(1),to:b.string().min(1),accountId:b.string().optional(),threadId:b.union([b.string(),b.number()]).optional()}).strict(),zh=b.object({enabled:b.boolean().optional(),mode:b.union([b.literal(`session`),b.literal(`targets`),b.literal(`both`)]).optional(),agentFilter:b.array(b.string()).optional(),sessionFilter:b.array(b.string()).optional(),targets:b.array(Rh).optional()}).strict().optional(),Bh=b.object({exec:zh}).strict().optional();function Vh(e){let t=e.trim();return!(!t||i.isAbsolute(t)||t.startsWith(`~`)||t.includes(`:`)||t.split(/[\\/]+/g).some(e=>e===`..`))}const Hh=b.string().refine(Vh,`module must be a safe relative path (no absolute paths)`),Uh=b.object({id:b.string().optional(),enabled:b.boolean().optional(),match:b.object({path:b.string().optional(),source:b.string().optional()}).optional(),action:b.union([b.literal(`wake`),b.literal(`agent`),b.literal(`workflow`)]).optional(),wakeMode:b.union([b.literal(`now`),b.literal(`next-heartbeat`)]).optional(),name:b.string().optional(),agentId:b.string().optional(),sessionKey:b.string().optional().register(H),messageTemplate:b.string().optional(),textTemplate:b.string().optional(),workflowDefinitionId:b.string().optional(),deliver:b.boolean().optional(),allowUnsafeExternalContent:b.boolean().optional(),channel:b.union([b.literal(`last`),b.literal(`whatsapp`),b.literal(`telegram`),b.literal(`discord`),b.literal(`irc`),b.literal(`slack`),b.literal(`signal`),b.literal(`imessage`),b.literal(`msteams`)]).optional(),to:b.string().optional(),model:b.string().optional(),thinking:b.string().optional(),timeoutSeconds:b.number().int().positive().optional(),notifyPolicy:b.union([b.literal(`silent`),b.literal(`done_only`),b.literal(`state_changes`)]).optional(),transform:b.object({module:Hh,export:b.string().optional()}).strict().optional()}).strict().optional(),Wh=b.object({event:b.string(),module:Hh,export:b.string().optional()}).strict(),Gh=b.object({enabled:b.boolean().optional(),env:b.record(b.string(),b.string()).optional()}).passthrough(),Kh=b.object({source:b.union([b.literal(`npm`),b.literal(`archive`),b.literal(`path`)]),spec:b.string().optional(),sourcePath:b.string().optional(),installPath:b.string().optional(),version:b.string().optional(),installedAt:b.string().optional(),hooks:b.array(b.string()).optional()}).strict(),qh=b.object({enabled:b.boolean().optional(),handlers:b.array(Wh).optional(),entries:b.record(b.string(),Gh).optional(),load:b.object({extraDirs:b.array(b.string()).optional()}).strict().optional(),installs:b.record(b.string(),Kh).optional()}).strict().optional(),Jh=b.object({account:b.string().optional(),project:b.string().optional(),label:b.string().optional(),topic:b.string().optional(),subscription:b.string().optional(),pushToken:b.string().optional().register(H),hookUrl:b.string().optional(),includeBody:b.boolean().optional(),maxBytes:b.number().int().positive().optional(),renewEveryMinutes:b.number().int().positive().optional(),allowUnsafeExternalContent:b.boolean().optional(),serve:b.object({bind:b.string().optional(),port:b.number().int().positive().optional(),path:b.string().optional()}).strict().optional(),tailscale:b.object({mode:b.union([b.literal(`off`),b.literal(`serve`),b.literal(`funnel`)]).optional(),path:b.string().optional(),target:b.string().optional()}).strict().optional(),model:b.string().optional(),thinking:b.union([b.literal(`off`),b.literal(`minimal`),b.literal(`low`),b.literal(`medium`),b.literal(`high`)]).optional()}).strict().optional(),Yh={source:b.union([b.literal(`npm`),b.literal(`archive`),b.literal(`path`),b.literal(`clawhub`)]),spec:b.string().optional(),sourcePath:b.string().optional(),installPath:b.string().optional(),version:b.string().optional(),resolvedName:b.string().optional(),resolvedVersion:b.string().optional(),resolvedSpec:b.string().optional(),integrity:b.string().optional(),shasum:b.string().optional(),resolvedAt:b.string().optional(),installedAt:b.string().optional(),clawhubUrl:b.string().optional(),clawhubArtifactUrl:b.string().optional(),clawhubPackage:b.string().optional(),clawhubFamily:b.union([b.literal(`code-plugin`),b.literal(`bundle-plugin`)]).optional(),clawhubChannel:b.union([b.literal(`official`),b.literal(`community`),b.literal(`private`)]).optional(),artifactKind:b.union([b.literal(`legacy-zip`),b.literal(`npm-pack`),b.literal(`clawpack`)]).optional(),artifactFormat:b.union([b.literal(`zip`),b.literal(`tgz`)]).optional(),npmIntegrity:b.string().optional(),npmShasum:b.string().optional(),npmTarballName:b.string().optional(),clawpackSha256:b.string().optional(),clawpackSpecVersion:b.number().int().nonnegative().optional(),clawpackManifestSha256:b.string().optional(),clawpackSize:b.number().int().nonnegative().optional(),securityState:b.string().optional(),scanState:b.string().optional(),moderationState:b.string().optional(),readinessPhase:b.string().optional(),verificationTier:b.string().optional(),verificationSourceRepo:b.string().optional(),verificationSourceCommit:b.string().optional(),verificationHasProvenance:b.boolean().optional()},Q=b.object({showOk:b.boolean().optional(),showAlerts:b.boolean().optional(),useIndicator:b.boolean().optional()}).strict().optional(),Xh=/^[A-Za-z0-9._-]+$/,Zh=/^\[[0-9A-Fa-f:.%]+\]$/,Qh=/\s/;function $h(e){for(let t of e){let e=t.charCodeAt(0);if(e<=31||e===127||Qh.test(t))return!0}return!1}function eg(e){if(typeof e!=`string`)return;let t=e.trim();if(!t||$h(t)||t.startsWith(`-`)||t.includes(`/`)||t.includes(`\\`))return;let n=t.indexOf(`@`),r=t.lastIndexOf(`@`),i,a=t;if(!(n!==-1&&(n!==r||n===0||n===t.length-1||(i=t.slice(0,n),a=t.slice(n+1),!Xh.test(i))))&&!(!a||a.startsWith(`-`)||a.includes(`@`))&&!(a.includes(`:`)&&!Zh.test(a))&&!(!Xh.test(a)&&!Zh.test(a)))return i?`${i}@${a}`:a}function tg(e){return eg(e)!==void 0}const ng=/^[A-Za-z]:\//,rg=/^[A-Za-z]:$/;function ig(e){let t=e.trim();if(!t||t.includes(`\0`))return;let n=i.posix.normalize(t.replaceAll(`\\`,`/`));if(!(n.startsWith(`/`)||ng.test(n))||n===`/`)return;let r=n.endsWith(`/`)?n.slice(0,-1):n;if(!rg.test(r))return r}function ag(e){return e.split(`/`).filter(Boolean)}function og(e){let t=ig(e);if(!t)return!1;let n=ag(t);return n.length===0?!1:n.every(e=>e===`*`||!e.includes(`*`))}const sg=/^[a-z0-9_]{1,32}$/;function cg(e){let t=e.trim();return t?(t.startsWith(`/`)?t.slice(1):t).trim().toLowerCase().replace(/-/g,`_`):``}function lg(e){return e.trim()}function ug(e){let t=Array.isArray(e.commands)?e.commands:[],n=e.reservedCommands??new Set,r=e.checkReserved!==!1,i=e.checkDuplicates!==!1,a=new Set,o=[],s=[];for(let e=0;e<t.length;e+=1){let c=t[e],l=cg(String(c?.command??``));if(!l){s.push({index:e,field:`command`,message:`Telegram custom command is missing a command name.`});continue}if(!sg.test(l)){s.push({index:e,field:`command`,message:`Telegram custom command "/${l}" is invalid (use a-z, 0-9, underscore; max 32 chars).`});continue}if(r&&n.has(l)){s.push({index:e,field:`command`,message:`Telegram custom command "/${l}" conflicts with a native command.`});continue}if(i&&a.has(l)){s.push({index:e,field:`command`,message:`Telegram custom command "/${l}" is duplicated.`});continue}let u=lg(String(c?.description??``));if(!u){s.push({index:e,field:`description`,message:`Telegram custom command "/${l}" is missing a description.`});continue}i&&a.add(l),o.push({command:l,description:u})}return{commands:o,issues:s}}const dg=b.record(b.string(),Z).optional(),fg=b.union([b.string(),b.number()]).refine(e=>typeof e==`string`,{message:`Discord IDs must be strings (wrap numeric IDs in quotes).`}),pg=b.array(fg),mg=b.enum([`off`,`dm`,`group`,`all`,`allowlist`]),hg=b.union([b.array(b.string()),b.object({inlineButtons:mg.optional()}).strict()]),gg=b.object({requireMention:b.boolean().optional(),groupPolicy:K.optional(),skills:b.array(b.string()).optional(),enabled:b.boolean().optional(),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),systemPrompt:b.string().optional()}).strict(),_g=b.object({requireMention:b.boolean().optional(),groupPolicy:K.optional(),tools:Z,toolsBySender:dg,skills:b.array(b.string()).optional(),enabled:b.boolean().optional(),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),systemPrompt:b.string().optional(),topics:b.record(b.string(),gg.optional()).optional()}).strict(),vg=b.object({command:b.string().transform(cg),description:b.string().transform(lg)}).strict(),yg=(e,t)=>{if(!e.customCommands||e.customCommands.length===0)return;let{issues:n}=ug({commands:e.customCommands,checkReserved:!1,checkDuplicates:!1});for(let e of n)t.addIssue({code:b.ZodIssueCode.custom,path:[`customCommands`,e.index,e.field],message:e.message})};function bg(e){e.streaming=xf(e),delete e.streamMode}function xg(e){e.streaming=Sf(e),delete e.streamMode}function Sg(e){e.nativeStreaming=wf(e),e.streaming=Cf(e),delete e.streamMode}const Cg=b.object({name:b.string().optional(),capabilities:hg.optional(),markdown:Am,enabled:b.boolean().optional(),commands:sh,customCommands:b.array(vg).optional(),configWrites:b.boolean().optional(),dmPolicy:q.optional().default(`pairing`),botToken:b.string().optional().register(H),tokenFile:b.string().optional(),replyToMode:Em.optional(),groups:b.record(b.string(),_g.optional()).optional(),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),defaultTo:b.union([b.string(),b.number()]).optional(),groupAllowFrom:b.array(b.union([b.string(),b.number()])).optional(),groupPolicy:K.optional().default(`allowlist`),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),streaming:b.union([b.boolean(),b.enum([`off`,`partial`,`block`,`progress`])]).optional(),blockStreaming:b.boolean().optional(),draftChunk:Om.optional(),blockStreamingCoalesce:J.optional(),streamMode:b.enum([`off`,`partial`,`block`]).optional(),mediaMaxMb:b.number().positive().optional(),timeoutSeconds:b.number().int().positive().optional(),retry:Bm,network:b.object({autoSelectFamily:b.boolean().optional(),dnsResultOrder:b.enum([`ipv4first`,`verbatim`]).optional()}).strict().optional(),proxy:b.string().optional(),webhookUrl:b.string().optional().describe(`Public HTTPS webhook URL registered with Telegram for inbound updates. This must be internet-reachable and requires channels.telegram.webhookSecret.`),webhookSecret:b.string().optional().describe(`Secret token sent to Telegram during webhook registration and verified on inbound webhook requests. Telegram returns this value for verification; this is not the gateway auth token and not the bot token.`).register(H),webhookPath:b.string().optional().describe(`Local webhook route path served by the gateway listener. Defaults to /telegram-webhook.`),webhookHost:b.string().optional().describe(`Local bind host for the webhook listener. Defaults to 127.0.0.1; keep loopback unless you intentionally expose direct ingress.`),webhookPort:b.number().int().nonnegative().optional().describe(`Local bind port for the webhook listener. Defaults to 8787; set to 0 to let the OS assign an ephemeral port.`),actions:b.object({reactions:b.boolean().optional(),sendMessage:b.boolean().optional(),deleteMessage:b.boolean().optional(),sticker:b.boolean().optional()}).strict().optional(),reactionNotifications:b.enum([`off`,`own`,`all`]).optional(),reactionLevel:b.enum([`off`,`ack`,`minimal`,`extensive`]).optional(),heartbeat:Q,linkPreview:b.boolean().optional(),responsePrefix:b.string().optional(),ackReaction:b.string().optional()}).strict(),wg=Cg.superRefine((e,t)=>{bg(e),yg(e,t)}),Tg=Cg.extend({accounts:b.record(b.string(),wg.optional()).optional()}).superRefine((e,t)=>{if(bg(e),Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.telegram.dmPolicy="open" requires channels.telegram.allowFrom to include "*"`}),X({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.telegram.dmPolicy="allowlist" requires channels.telegram.allowFrom to contain at least one sender ID`}),yg(e,t),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.telegram.accounts.*.dmPolicy="open" requires channels.telegram.accounts.*.allowFrom (or channels.telegram.allowFrom) to include "*"`}),X({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.telegram.accounts.*.dmPolicy="allowlist" requires channels.telegram.accounts.*.allowFrom (or channels.telegram.allowFrom) to contain at least one sender ID`})}let n=typeof e.webhookUrl==`string`?e.webhookUrl.trim():``,r=typeof e.webhookSecret==`string`?e.webhookSecret.trim():``;if(n&&!r&&t.addIssue({code:b.ZodIssueCode.custom,message:`channels.telegram.webhookUrl requires channels.telegram.webhookSecret`,path:[`webhookSecret`]}),e.accounts)for(let[n,i]of Object.entries(e.accounts)){if(!i||i.enabled===!1)continue;let a=i.dmPolicy??e.dmPolicy,o=Array.isArray(i.allowFrom)?i.allowFrom:e.allowFrom;Y({policy:a,allowFrom:o,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.telegram.accounts.*.dmPolicy="open" requires channels.telegram.allowFrom or channels.telegram.accounts.*.allowFrom to include "*"`}),X({policy:a,allowFrom:o,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.telegram.accounts.*.dmPolicy="allowlist" requires channels.telegram.allowFrom or channels.telegram.accounts.*.allowFrom to contain at least one sender ID`}),typeof i.webhookUrl==`string`&&i.webhookUrl.trim()&&!(typeof i.webhookSecret==`string`&&i.webhookSecret.trim())&&!r&&t.addIssue({code:b.ZodIssueCode.custom,message:`channels.telegram.accounts.*.webhookUrl requires channels.telegram.webhookSecret or channels.telegram.accounts.*.webhookSecret`,path:[`accounts`,n,`webhookSecret`]})}}),Eg=b.object({enabled:b.boolean().optional(),policy:q.optional(),allowFrom:pg.optional(),groupEnabled:b.boolean().optional(),groupChannels:pg.optional()}).strict(),Dg=b.object({allow:b.boolean().optional(),requireMention:b.boolean().optional(),tools:Z,toolsBySender:dg,skills:b.array(b.string()).optional(),enabled:b.boolean().optional(),users:pg.optional(),roles:pg.optional(),systemPrompt:b.string().optional(),includeThreadStarter:b.boolean().optional(),autoThread:b.boolean().optional()}).strict(),Og=b.object({slug:b.string().optional(),requireMention:b.boolean().optional(),tools:Z,toolsBySender:dg,reactionNotifications:b.enum([`off`,`own`,`all`,`allowlist`]).optional(),users:pg.optional(),roles:pg.optional(),channels:b.record(b.string(),Dg.optional()).optional()}).strict(),kg=b.object({components:b.object({accentColor:Km.optional()}).strict().optional()}).strict().optional(),Ag=b.object({guildId:b.string().min(1),channelId:b.string().min(1)}).strict(),jg=b.object({enabled:b.boolean().optional(),autoJoin:b.array(Ag).optional(),daveEncryption:b.boolean().optional(),decryptionFailureTolerance:b.number().int().min(0).optional(),tts:Pm.optional()}).strict().optional(),Mg=b.object({name:b.string().optional(),capabilities:b.array(b.string()).optional(),markdown:Am,enabled:b.boolean().optional(),commands:sh,configWrites:b.boolean().optional(),token:b.string().optional().register(H),proxy:b.string().optional(),allowBots:b.boolean().optional(),dangerouslyAllowNameMatching:b.boolean().optional(),groupPolicy:K.optional().default(`allowlist`),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),blockStreaming:b.boolean().optional(),blockStreamingCoalesce:J.optional(),streaming:b.union([b.boolean(),b.enum([`off`,`partial`,`block`,`progress`])]).optional(),streamMode:b.enum([`partial`,`block`,`off`]).optional(),draftChunk:Om.optional(),maxLinesPerMessage:b.number().int().positive().optional(),mediaMaxMb:b.number().positive().optional(),retry:Bm,actions:b.object({reactions:b.boolean().optional(),stickers:b.boolean().optional(),emojiUploads:b.boolean().optional(),stickerUploads:b.boolean().optional(),polls:b.boolean().optional(),permissions:b.boolean().optional(),messages:b.boolean().optional(),threads:b.boolean().optional(),pins:b.boolean().optional(),search:b.boolean().optional(),memberInfo:b.boolean().optional(),roleInfo:b.boolean().optional(),roles:b.boolean().optional(),channelInfo:b.boolean().optional(),voiceStatus:b.boolean().optional(),events:b.boolean().optional(),moderation:b.boolean().optional(),channels:b.boolean().optional(),presence:b.boolean().optional()}).strict().optional(),replyToMode:Em.optional(),dmPolicy:q.optional(),allowFrom:pg.optional(),defaultTo:b.string().optional(),dm:Eg.optional(),guilds:b.record(b.string(),Og.optional()).optional(),heartbeat:Q,execApprovals:b.object({enabled:b.boolean().optional(),approvers:pg.optional(),agentFilter:b.array(b.string()).optional(),sessionFilter:b.array(b.string()).optional(),cleanupAfterResolve:b.boolean().optional(),target:b.enum([`dm`,`channel`,`both`]).optional()}).strict().optional(),ui:kg,slashCommand:b.object({ephemeral:b.boolean().optional()}).strict().optional(),threadBindings:b.object({enabled:b.boolean().optional(),idleHours:b.number().nonnegative().optional(),maxAgeHours:b.number().nonnegative().optional(),spawnSubagentSessions:b.boolean().optional(),spawnAcpSessions:b.boolean().optional()}).strict().optional(),intents:b.object({presence:b.boolean().optional(),guildMembers:b.boolean().optional()}).strict().optional(),voice:jg,pluralkit:b.object({enabled:b.boolean().optional(),token:b.string().optional().register(H)}).strict().optional(),responsePrefix:b.string().optional(),ackReaction:b.string().optional(),activity:b.string().optional(),status:b.enum([`online`,`dnd`,`idle`,`invisible`]).optional(),activityType:b.union([b.literal(0),b.literal(1),b.literal(2),b.literal(3),b.literal(4),b.literal(5)]).optional(),activityUrl:b.string().url().optional()}).strict().superRefine((e,t)=>{xg(e);let n=!!(typeof e.activity==`string`&&e.activity.trim()),r=e.activityType!==void 0,i=!!(typeof e.activityUrl==`string`&&e.activityUrl.trim());(r||i)&&!n&&t.addIssue({code:b.ZodIssueCode.custom,message:`channels.discord.activity is required when activityType or activityUrl is set`,path:[`activity`]}),e.activityType===1&&!i&&t.addIssue({code:b.ZodIssueCode.custom,message:`channels.discord.activityUrl is required when activityType is 1 (Streaming)`,path:[`activityUrl`]}),i&&e.activityType!==1&&t.addIssue({code:b.ZodIssueCode.custom,message:`channels.discord.activityType must be 1 (Streaming) when activityUrl is set`,path:[`activityType`]})}),Ng=Mg.extend({accounts:b.record(b.string(),Mg.optional()).optional()}).superRefine((e,t)=>{let n=e.dmPolicy??e.dm?.policy??`pairing`,r=e.allowFrom??e.dm?.allowFrom,i=e.allowFrom===void 0?[`dm`,`allowFrom`]:[`allowFrom`];if(Y({policy:n,allowFrom:r,ctx:t,path:[...i],message:`channels.discord.dmPolicy="open" requires channels.discord.allowFrom (or channels.discord.dm.allowFrom) to include "*"`}),X({policy:n,allowFrom:r,ctx:t,path:[...i],message:`channels.discord.dmPolicy="allowlist" requires channels.discord.allowFrom (or channels.discord.dm.allowFrom) to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??r.dm?.policy??e.dmPolicy??e.dm?.policy??`pairing`,a=r.allowFrom??r.dm?.allowFrom??e.allowFrom??e.dm?.allowFrom;Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.discord.accounts.*.dmPolicy="open" requires channels.discord.accounts.*.allowFrom (or channels.discord.allowFrom) to include "*"`}),X({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.discord.accounts.*.dmPolicy="allowlist" requires channels.discord.accounts.*.allowFrom (or channels.discord.allowFrom) to contain at least one sender ID`})}}),Pg=b.object({enabled:b.boolean().optional(),policy:q.optional().default(`pairing`),allowFrom:b.array(b.union([b.string(),b.number()])).optional()}).strict().superRefine((e,t)=>{Y({policy:e.policy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.googlechat.dm.policy="open" requires channels.googlechat.dm.allowFrom to include "*"`}),X({policy:e.policy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.googlechat.dm.policy="allowlist" requires channels.googlechat.dm.allowFrom to contain at least one sender ID`})}),Fg=b.object({enabled:b.boolean().optional(),allow:b.boolean().optional(),requireMention:b.boolean().optional(),users:b.array(b.union([b.string(),b.number()])).optional(),systemPrompt:b.string().optional()}).strict(),Ig=b.object({name:b.string().optional(),capabilities:b.array(b.string()).optional(),enabled:b.boolean().optional(),configWrites:b.boolean().optional(),allowBots:b.boolean().optional(),dangerouslyAllowNameMatching:b.boolean().optional(),requireMention:b.boolean().optional(),groupPolicy:K.optional().default(`allowlist`),groupAllowFrom:b.array(b.union([b.string(),b.number()])).optional(),groups:b.record(b.string(),Fg.optional()).optional(),defaultTo:b.string().optional(),serviceAccount:b.union([b.string(),b.record(b.string(),b.unknown()),dm]).optional().register(H),serviceAccountRef:dm.optional().register(H),serviceAccountFile:b.string().optional(),audienceType:b.enum([`app-url`,`project-number`]).optional(),audience:b.string().optional(),webhookPath:b.string().optional(),webhookUrl:b.string().optional(),botUser:b.string().optional(),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),blockStreaming:b.boolean().optional(),blockStreamingCoalesce:J.optional(),streamMode:b.enum([`replace`,`status_final`,`append`]).optional().default(`replace`),mediaMaxMb:b.number().positive().optional(),replyToMode:Em.optional(),actions:b.object({reactions:b.boolean().optional()}).strict().optional(),dm:Pg.optional(),typingIndicator:b.enum([`none`,`message`,`reaction`]).optional(),responsePrefix:b.string().optional()}).strict(),Lg=Ig.extend({accounts:b.record(b.string(),Ig.optional()).optional(),defaultAccount:b.string().optional()}),Rg=b.object({enabled:b.boolean().optional(),policy:q.optional(),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),groupEnabled:b.boolean().optional(),groupChannels:b.array(b.union([b.string(),b.number()])).optional(),replyToMode:Em.optional()}).strict(),zg=b.object({enabled:b.boolean().optional(),allow:b.boolean().optional(),requireMention:b.boolean().optional(),tools:Z,toolsBySender:dg,allowBots:b.boolean().optional(),users:b.array(b.union([b.string(),b.number()])).optional(),skills:b.array(b.string()).optional(),systemPrompt:b.string().optional()}).strict(),Bg=b.object({historyScope:b.enum([`thread`,`channel`]).optional(),inheritParent:b.boolean().optional(),initialHistoryLimit:b.number().int().min(0).optional()}).strict(),Vg=b.object({direct:Em.optional(),group:Em.optional(),channel:Em.optional()}).strict(),Hg=b.object({name:b.string().optional(),mode:b.enum([`socket`,`http`]).optional(),signingSecret:b.string().optional().register(H),webhookPath:b.string().optional(),capabilities:b.array(b.string()).optional(),markdown:Am,enabled:b.boolean().optional(),commands:sh,configWrites:b.boolean().optional(),botToken:b.string().optional().register(H),appToken:b.string().optional().register(H),userToken:b.string().optional().register(H),userTokenReadOnly:b.boolean().optional().default(!0),allowBots:b.boolean().optional(),dangerouslyAllowNameMatching:b.boolean().optional(),requireMention:b.boolean().optional(),groupPolicy:K.optional(),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),blockStreaming:b.boolean().optional(),blockStreamingCoalesce:J.optional(),streaming:b.union([b.boolean(),b.enum([`off`,`partial`,`block`,`progress`])]).optional(),nativeStreaming:b.boolean().optional(),streamMode:b.enum([`replace`,`status_final`,`append`]).optional(),mediaMaxMb:b.number().positive().optional(),reactionNotifications:b.enum([`off`,`own`,`all`,`allowlist`]).optional(),reactionAllowlist:b.array(b.union([b.string(),b.number()])).optional(),replyToMode:Em.optional(),replyToModeByChatType:Vg.optional(),thread:Bg.optional(),actions:b.object({reactions:b.boolean().optional(),messages:b.boolean().optional(),pins:b.boolean().optional(),search:b.boolean().optional(),permissions:b.boolean().optional(),memberInfo:b.boolean().optional(),channelInfo:b.boolean().optional(),emojiList:b.boolean().optional()}).strict().optional(),slashCommand:b.object({enabled:b.boolean().optional(),name:b.string().optional(),sessionPrefix:b.string().optional(),ephemeral:b.boolean().optional()}).strict().optional(),dmPolicy:q.optional(),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),defaultTo:b.string().optional(),dm:Rg.optional(),channels:b.record(b.string(),zg.optional()).optional(),heartbeat:Q,responsePrefix:b.string().optional(),ackReaction:b.string().optional()}).strict().superRefine(e=>{Sg(e)}),Ug=Hg.safeExtend({mode:b.enum([`socket`,`http`]).optional().default(`socket`),signingSecret:b.string().optional().register(H),webhookPath:b.string().optional().default(`/slack/events`),groupPolicy:K.optional().default(`allowlist`),accounts:b.record(b.string(),Hg.optional()).optional()}).superRefine((e,t)=>{let n=e.dmPolicy??e.dm?.policy??`pairing`,r=e.allowFrom??e.dm?.allowFrom,i=e.allowFrom===void 0?[`dm`,`allowFrom`]:[`allowFrom`];Y({policy:n,allowFrom:r,ctx:t,path:[...i],message:`channels.slack.dmPolicy="open" requires channels.slack.allowFrom (or channels.slack.dm.allowFrom) to include "*"`}),X({policy:n,allowFrom:r,ctx:t,path:[...i],message:`channels.slack.dmPolicy="allowlist" requires channels.slack.allowFrom (or channels.slack.dm.allowFrom) to contain at least one sender ID`});let a=e.mode??`socket`;if(a===`http`&&!e.signingSecret&&t.addIssue({code:b.ZodIssueCode.custom,message:`channels.slack.mode="http" requires channels.slack.signingSecret`,path:[`signingSecret`]}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r||r.enabled===!1)continue;let i=r.mode??a,o=r.dmPolicy??r.dm?.policy??e.dmPolicy??e.dm?.policy??`pairing`,s=r.allowFrom??r.dm?.allowFrom??e.allowFrom??e.dm?.allowFrom;Y({policy:o,allowFrom:s,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.slack.accounts.*.dmPolicy="open" requires channels.slack.accounts.*.allowFrom (or channels.slack.allowFrom) to include "*"`}),X({policy:o,allowFrom:s,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.slack.accounts.*.dmPolicy="allowlist" requires channels.slack.accounts.*.allowFrom (or channels.slack.allowFrom) to contain at least one sender ID`}),i===`http`&&((r.signingSecret??e.signingSecret)||t.addIssue({code:b.ZodIssueCode.custom,message:`channels.slack.accounts.*.mode="http" requires channels.slack.signingSecret or channels.slack.accounts.*.signingSecret`,path:[`accounts`,n,`signingSecret`]}))}}),Wg=b.object({name:b.string().optional(),capabilities:b.array(b.string()).optional(),markdown:Am,enabled:b.boolean().optional(),configWrites:b.boolean().optional(),account:b.string().optional(),httpUrl:b.string().optional(),httpHost:b.string().optional(),httpPort:b.number().int().positive().optional(),cliPath:qm.optional(),autoStart:b.boolean().optional(),startupTimeoutMs:b.number().int().min(1e3).max(12e4).optional(),receiveMode:b.union([b.literal(`on-start`),b.literal(`manual`)]).optional(),ignoreAttachments:b.boolean().optional(),ignoreStories:b.boolean().optional(),sendReadReceipts:b.boolean().optional(),dmPolicy:q.optional().default(`pairing`),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),defaultTo:b.string().optional(),groupAllowFrom:b.array(b.union([b.string(),b.number()])).optional(),groupPolicy:K.optional().default(`allowlist`),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),blockStreaming:b.boolean().optional(),blockStreamingCoalesce:J.optional(),mediaMaxMb:b.number().int().positive().optional(),reactionNotifications:b.enum([`off`,`own`,`all`,`allowlist`]).optional(),reactionAllowlist:b.array(b.union([b.string(),b.number()])).optional(),actions:b.object({reactions:b.boolean().optional()}).strict().optional(),reactionLevel:b.enum([`off`,`ack`,`minimal`,`extensive`]).optional(),heartbeat:Q,responsePrefix:b.string().optional()}).strict(),Gg=Wg,Kg=Wg.extend({accounts:b.record(b.string(),Gg.optional()).optional()}).superRefine((e,t)=>{if(Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.signal.dmPolicy="open" requires channels.signal.allowFrom to include "*"`}),X({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.signal.dmPolicy="allowlist" requires channels.signal.allowFrom to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.signal.accounts.*.dmPolicy="open" requires channels.signal.accounts.*.allowFrom (or channels.signal.allowFrom) to include "*"`}),X({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.signal.accounts.*.dmPolicy="allowlist" requires channels.signal.accounts.*.allowFrom (or channels.signal.allowFrom) to contain at least one sender ID`})}}),qg=b.object({requireMention:b.boolean().optional(),tools:Z,toolsBySender:dg,skills:b.array(b.string()).optional(),enabled:b.boolean().optional(),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),systemPrompt:b.string().optional()}).strict(),Jg=b.object({enabled:b.boolean().optional(),service:b.string().optional(),password:b.string().optional().register(H),passwordFile:b.string().optional(),register:b.boolean().optional(),registerEmail:b.string().optional()}).strict(),Yg=b.object({name:b.string().optional(),capabilities:b.array(b.string()).optional(),markdown:Am,enabled:b.boolean().optional(),configWrites:b.boolean().optional(),host:b.string().optional(),port:b.number().int().min(1).max(65535).optional(),tls:b.boolean().optional(),nick:b.string().optional(),username:b.string().optional(),realname:b.string().optional(),password:b.string().optional().register(H),passwordFile:b.string().optional(),nickserv:Jg.optional(),channels:b.array(b.string()).optional(),dmPolicy:q.optional().default(`pairing`),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),defaultTo:b.string().optional(),groupAllowFrom:b.array(b.union([b.string(),b.number()])).optional(),groupPolicy:K.optional().default(`allowlist`),groups:b.record(b.string(),qg.optional()).optional(),mentionPatterns:b.array(b.string()).optional(),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),blockStreaming:b.boolean().optional(),blockStreamingCoalesce:J.optional(),mediaMaxMb:b.number().positive().optional(),heartbeat:Q,responsePrefix:b.string().optional()}).strict();function Xg(e,t){Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.irc.dmPolicy="open" requires channels.irc.allowFrom to include "*"`}),X({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.irc.dmPolicy="allowlist" requires channels.irc.allowFrom to contain at least one sender ID`}),e.nickserv?.register&&!e.nickserv.registerEmail?.trim()&&t.addIssue({code:b.ZodIssueCode.custom,path:[`nickserv`,`registerEmail`],message:`channels.irc.nickserv.register=true requires channels.irc.nickserv.registerEmail`})}const Zg=Yg.superRefine((e,t)=>{e.nickserv?.register&&!e.nickserv.registerEmail?.trim()&&t.addIssue({code:b.ZodIssueCode.custom,path:[`nickserv`,`registerEmail`],message:`channels.irc.nickserv.register=true requires channels.irc.nickserv.registerEmail`})}),Qg=Yg.extend({accounts:b.record(b.string(),Zg.optional()).optional()}).superRefine((e,t)=>{if(Xg(e,t),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.irc.accounts.*.dmPolicy="open" requires channels.irc.accounts.*.allowFrom (or channels.irc.allowFrom) to include "*"`}),X({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.irc.accounts.*.dmPolicy="allowlist" requires channels.irc.accounts.*.allowFrom (or channels.irc.allowFrom) to contain at least one sender ID`})}}),$g=b.object({name:b.string().optional(),capabilities:b.array(b.string()).optional(),markdown:Am,enabled:b.boolean().optional(),configWrites:b.boolean().optional(),cliPath:qm.optional(),dbPath:b.string().optional(),remoteHost:b.string().refine(tg,`expected SSH host or user@host (no spaces/options)`).optional(),service:b.union([b.literal(`imessage`),b.literal(`sms`),b.literal(`auto`)]).optional(),region:b.string().optional(),dmPolicy:q.optional().default(`pairing`),allowFrom:b.array(b.union([b.string(),b.number()])).optional(),defaultTo:b.string().optional(),groupAllowFrom:b.array(b.union([b.string(),b.number()])).optional(),groupPolicy:K.optional().default(`allowlist`),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),includeAttachments:b.boolean().optional(),attachmentRoots:b.array(b.string().refine(og,`expected absolute path root`)).optional(),remoteAttachmentRoots:b.array(b.string().refine(og,`expected absolute path root`)).optional(),mediaMaxMb:b.number().int().positive().optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),blockStreaming:b.boolean().optional(),blockStreamingCoalesce:J.optional(),groups:b.record(b.string(),b.object({requireMention:b.boolean().optional(),tools:Z,toolsBySender:dg}).strict().optional()).optional(),heartbeat:Q,responsePrefix:b.string().optional()}).strict(),e_=$g,t_=$g.extend({accounts:b.record(b.string(),e_.optional()).optional()}).superRefine((e,t)=>{if(Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.imessage.dmPolicy="open" requires channels.imessage.allowFrom to include "*"`}),X({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.imessage.dmPolicy="allowlist" requires channels.imessage.allowFrom to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.imessage.accounts.*.dmPolicy="open" requires channels.imessage.accounts.*.allowFrom (or channels.imessage.allowFrom) to include "*"`}),X({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.imessage.accounts.*.dmPolicy="allowlist" requires channels.imessage.accounts.*.allowFrom (or channels.imessage.allowFrom) to contain at least one sender ID`})}}),n_=b.union([b.string(),b.number()]),r_=b.object({reactions:b.boolean().optional(),edit:b.boolean().optional(),unsend:b.boolean().optional(),reply:b.boolean().optional(),sendWithEffect:b.boolean().optional(),renameGroup:b.boolean().optional(),setGroupIcon:b.boolean().optional(),addParticipant:b.boolean().optional(),removeParticipant:b.boolean().optional(),leaveGroup:b.boolean().optional(),sendAttachment:b.boolean().optional()}).strict().optional(),i_=b.object({requireMention:b.boolean().optional(),tools:Z,toolsBySender:dg}).strict(),a_=b.object({name:b.string().optional(),capabilities:b.array(b.string()).optional(),markdown:Am,configWrites:b.boolean().optional(),enabled:b.boolean().optional(),serverUrl:b.string().optional(),password:b.string().optional().register(H),webhookPath:b.string().optional(),dmPolicy:q.optional().default(`pairing`),allowFrom:b.array(n_).optional(),groupAllowFrom:b.array(n_).optional(),groupPolicy:K.optional().default(`allowlist`),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),mediaMaxMb:b.number().int().positive().optional(),mediaLocalRoots:b.array(b.string()).optional(),sendReadReceipts:b.boolean().optional(),blockStreaming:b.boolean().optional(),blockStreamingCoalesce:J.optional(),groups:b.record(b.string(),i_.optional()).optional(),heartbeat:Q,responsePrefix:b.string().optional()}).strict(),o_=a_,s_=a_.extend({accounts:b.record(b.string(),o_.optional()).optional(),actions:r_}).superRefine((e,t)=>{if(Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.bluebubbles.dmPolicy="open" requires channels.bluebubbles.allowFrom to include "*"`}),X({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.bluebubbles.dmPolicy="allowlist" requires channels.bluebubbles.allowFrom to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.bluebubbles.accounts.*.dmPolicy="open" requires channels.bluebubbles.accounts.*.allowFrom (or channels.bluebubbles.allowFrom) to include "*"`}),X({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.bluebubbles.accounts.*.dmPolicy="allowlist" requires channels.bluebubbles.accounts.*.allowFrom (or channels.bluebubbles.allowFrom) to contain at least one sender ID`})}}),c_=b.object({requireMention:b.boolean().optional(),tools:Z,toolsBySender:dg,replyStyle:zm.optional()}).strict(),l_=b.object({requireMention:b.boolean().optional(),tools:Z,toolsBySender:dg,replyStyle:zm.optional(),channels:b.record(b.string(),c_.optional()).optional()}).strict(),u_=b.object({enabled:b.boolean().optional(),capabilities:b.array(b.string()).optional(),dangerouslyAllowNameMatching:b.boolean().optional(),markdown:Am,configWrites:b.boolean().optional(),appId:b.string().optional(),appPassword:b.string().optional().register(H),tenantId:b.string().optional(),webhook:b.object({port:b.number().int().positive().optional(),path:b.string().optional()}).strict().optional(),dmPolicy:q.optional().default(`pairing`),allowFrom:b.array(b.string()).optional(),defaultTo:b.string().optional(),groupAllowFrom:b.array(b.string()).optional(),groupPolicy:K.optional().default(`allowlist`),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),blockStreamingCoalesce:J.optional(),mediaAllowHosts:b.array(b.string()).optional(),mediaAuthAllowHosts:b.array(b.string()).optional(),requireMention:b.boolean().optional(),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),replyStyle:zm.optional(),teams:b.record(b.string(),l_.optional()).optional(),mediaMaxMb:b.number().positive().optional(),preserveFilenames:b.boolean().optional(),sharePointSiteId:b.string().optional(),heartbeat:Q,responsePrefix:b.string().optional()}).strict().superRefine((e,t)=>{Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.msteams.dmPolicy="open" requires channels.msteams.allowFrom to include "*"`}),X({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.msteams.dmPolicy="allowlist" requires channels.msteams.allowFrom to contain at least one sender ID`})}),d_=b.record(b.string(),Z).optional(),f_=b.object({requireMention:b.boolean().optional(),tools:Z,toolsBySender:d_}).strict().optional(),p_=b.record(b.string(),f_).optional(),m_=b.object({emoji:b.string().optional(),direct:b.boolean().optional().default(!0),group:b.enum([`always`,`mentions`,`never`]).optional().default(`mentions`)}).strict().optional(),h_=b.object({enabled:b.boolean().optional(),capabilities:b.array(b.string()).optional(),markdown:Am,configWrites:b.boolean().optional(),sendReadReceipts:b.boolean().optional(),messagePrefix:b.string().optional(),responsePrefix:b.string().optional(),dmPolicy:q.optional().default(`pairing`),selfChatMode:b.boolean().optional(),allowFrom:b.array(b.string()).optional(),defaultTo:b.string().optional(),groupAllowFrom:b.array(b.string()).optional(),groupPolicy:K.optional().default(`allowlist`),historyLimit:b.number().int().min(0).optional(),dmHistoryLimit:b.number().int().min(0).optional(),dms:b.record(b.string(),W.optional()).optional(),textChunkLimit:b.number().int().positive().optional(),chunkMode:b.enum([`length`,`newline`]).optional(),blockStreaming:b.boolean().optional(),blockStreamingCoalesce:J.optional(),groups:p_,ackReaction:m_,debounceMs:b.number().int().nonnegative().optional().default(0),heartbeat:Q});function g_(e){e.dmPolicy===`open`&&((Array.isArray(e.allowFrom)?e.allowFrom:[]).map(e=>String(e).trim()).filter(Boolean).includes(`*`)||e.ctx.addIssue({code:b.ZodIssueCode.custom,path:e.path??[`allowFrom`],message:e.message}))}function __(e){e.dmPolicy===`allowlist`&&((Array.isArray(e.allowFrom)?e.allowFrom:[]).map(e=>String(e).trim()).filter(Boolean).length>0||e.ctx.addIssue({code:b.ZodIssueCode.custom,path:e.path??[`allowFrom`],message:e.message}))}const v_=h_.extend({name:b.string().optional(),enabled:b.boolean().optional(),authDir:b.string().optional(),mediaMaxMb:b.number().int().positive().optional()}).strict(),y_=h_.extend({accounts:b.record(b.string(),v_.optional()).optional(),mediaMaxMb:b.number().int().positive().optional().default(50),actions:b.object({reactions:b.boolean().optional(),sendMessage:b.boolean().optional(),polls:b.boolean().optional()}).strict().optional()}).strict().superRefine((e,t)=>{if(g_({dmPolicy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,message:`channels.whatsapp.dmPolicy="open" requires channels.whatsapp.allowFrom to include "*"`}),__({dmPolicy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,message:`channels.whatsapp.dmPolicy="allowlist" requires channels.whatsapp.allowFrom to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;g_({dmPolicy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.whatsapp.accounts.*.dmPolicy="open" requires channels.whatsapp.accounts.*.allowFrom (or channels.whatsapp.allowFrom) to include "*"`}),__({dmPolicy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.whatsapp.accounts.*.dmPolicy="allowlist" requires channels.whatsapp.accounts.*.allowFrom (or channels.whatsapp.allowFrom) to contain at least one sender ID`})}}),b_=b.record(b.string(),b.record(b.string(),b.string())).optional(),x_=b.object({defaults:b.object({groupPolicy:K.optional(),heartbeat:Q}).strict().optional(),modelByChannel:b_,whatsapp:y_.optional(),telegram:Tg.optional(),discord:Ng.optional(),irc:Qg.optional(),googlechat:Lg.optional(),slack:Ug.optional(),signal:Kg.optional(),imessage:t_.optional(),bluebubbles:s_.optional(),msteams:u_.optional()}).passthrough().optional(),S_=b.object({mode:b.union([b.literal(`daily`),b.literal(`idle`)]).optional(),atHour:b.number().int().min(0).max(23).optional(),idleMinutes:b.number().int().positive().optional()}).strict(),C_=tm(),w_=b.object({scope:b.union([b.literal(`per-sender`),b.literal(`global`)]).optional(),dmScope:b.union([b.literal(`main`),b.literal(`per-peer`),b.literal(`per-channel-peer`),b.literal(`per-account-channel-peer`)]).optional(),identityLinks:b.record(b.string(),b.array(b.string())).optional(),resetTriggers:b.array(b.string()).optional(),idleMinutes:b.number().int().positive().optional(),reset:S_.optional(),resetByType:b.object({direct:S_.optional(),dm:S_.optional(),group:S_.optional(),thread:S_.optional()}).strict().optional(),resetByChannel:b.record(b.string(),S_).optional(),store:b.string().optional(),typingIntervalSeconds:b.number().int().positive().optional(),typingMode:Dm.optional(),parentForkMaxTokens:b.number().int().nonnegative().optional(),mainKey:b.string().optional(),sendPolicy:C_.optional(),agentToAgent:b.object({maxPingPongTurns:b.number().int().min(0).max(5).optional()}).strict().optional(),threadBindings:b.object({enabled:b.boolean().optional(),idleHours:b.number().nonnegative().optional(),maxAgeHours:b.number().nonnegative().optional()}).strict().optional(),maintenance:b.object({mode:b.enum([`enforce`,`warn`]).optional(),pruneAfter:b.union([b.string(),b.number()]).optional(),pruneDays:b.number().int().positive().optional(),maxEntries:b.number().int().positive().optional(),rotateBytes:b.union([b.string(),b.number()]).optional(),resetArchiveRetention:b.union([b.string(),b.number(),b.literal(!1)]).optional(),maxDiskBytes:b.union([b.string(),b.number()]).optional(),highWaterBytes:b.union([b.string(),b.number()]).optional()}).strict().superRefine((e,t)=>{if(e.pruneAfter!==void 0)try{Kp(String(e.pruneAfter).trim(),{defaultUnit:`d`})}catch{t.addIssue({code:b.ZodIssueCode.custom,path:[`pruneAfter`],message:`invalid duration (use ms, s, m, h, d)`})}if(e.rotateBytes!==void 0)try{Wp(String(e.rotateBytes).trim(),{defaultUnit:`b`})}catch{t.addIssue({code:b.ZodIssueCode.custom,path:[`rotateBytes`],message:`invalid size (use b, kb, mb, gb, tb)`})}if(e.resetArchiveRetention!==void 0&&e.resetArchiveRetention!==!1)try{Kp(String(e.resetArchiveRetention).trim(),{defaultUnit:`d`})}catch{t.addIssue({code:b.ZodIssueCode.custom,path:[`resetArchiveRetention`],message:`invalid duration (use ms, s, m, h, d)`})}if(e.maxDiskBytes!==void 0)try{Wp(String(e.maxDiskBytes).trim(),{defaultUnit:`b`})}catch{t.addIssue({code:b.ZodIssueCode.custom,path:[`maxDiskBytes`],message:`invalid size (use b, kb, mb, gb, tb)`})}if(e.highWaterBytes!==void 0)try{Wp(String(e.highWaterBytes).trim(),{defaultUnit:`b`})}catch{t.addIssue({code:b.ZodIssueCode.custom,path:[`highWaterBytes`],message:`invalid size (use b, kb, mb, gb, tb)`})}}).optional()}).strict().optional(),T_=b.object({messagePrefix:b.string().optional(),responsePrefix:b.string().optional(),groupChat:Cm,queue:Um,inbound:Wm,ackReaction:b.string().optional(),ackReactionScope:b.enum([`group-mentions`,`group-all`,`direct`,`all`]).optional(),removeAckAfterReply:b.boolean().optional(),statusReactions:b.object({enabled:b.boolean().optional(),emojis:b.object({thinking:b.string().optional(),tool:b.string().optional(),coding:b.string().optional(),web:b.string().optional(),done:b.string().optional(),error:b.string().optional(),stallSoft:b.string().optional(),stallHard:b.string().optional()}).strict().optional(),timing:b.object({debounceMs:b.number().int().min(0).optional(),stallSoftMs:b.number().int().min(0).optional(),stallHardMs:b.number().int().min(0).optional(),doneHoldMs:b.number().int().min(0).optional(),errorHoldMs:b.number().int().min(0).optional()}).strict().optional()}).strict().optional(),suppressToolErrors:b.boolean().optional(),tts:Pm}).strict().optional(),E_=b.object({native:oh.optional().default(`auto`),nativeSkills:oh.optional().default(`auto`),text:b.boolean().optional(),bash:b.boolean().optional(),bashForegroundMs:b.number().int().min(0).max(3e4).optional(),config:b.boolean().optional(),debug:b.boolean().optional(),restart:b.boolean().optional().default(!0),useAccessGroups:b.boolean().optional(),ownerAllowFrom:b.array(b.union([b.string(),b.number()])).optional(),ownerDisplay:b.enum([`raw`,`hash`]).optional().default(`raw`),ownerDisplaySecret:b.string().optional().register(H),allowFrom:vh.optional()}).strict().optional().default(()=>({native:`auto`,nativeSkills:`auto`,restart:!0,ownerDisplay:`raw`})),D_=b.object({mode:b.literal(`efficient`).optional()}).strict().optional(),O_=b.object({browserProxy:b.object({enabled:b.boolean().optional(),allowProfiles:b.array(b.string()).optional()}).strict().optional()}).strict().optional(),k_=b.object({path:b.string(),name:b.string().optional(),pattern:b.string().optional()}).strict(),A_=b.object({enabled:b.boolean().optional(),exportDir:b.string().optional(),retentionDays:b.number().int().nonnegative().optional()}).strict(),j_=b.object({voiceId:b.string().optional(),voiceAliases:b.record(b.string(),b.string()).optional(),modelId:b.string().optional(),outputFormat:b.string().optional(),apiKey:U.optional().register(H)}).catchall(b.unknown()),M_=b.object({transcription:Gm}).strict().optional(),N_=b.object({interval:b.string().optional(),debounceMs:b.number().int().nonnegative().optional(),onBoot:b.boolean().optional(),waitForBootSync:b.boolean().optional(),embedInterval:b.string().optional(),commandTimeoutMs:b.number().int().nonnegative().optional(),updateTimeoutMs:b.number().int().nonnegative().optional(),embedTimeoutMs:b.number().int().nonnegative().optional()}).strict(),P_=b.object({maxResults:b.number().int().positive().optional(),maxSnippetChars:b.number().int().positive().optional(),maxInjectedChars:b.number().int().positive().optional(),timeoutMs:b.number().int().nonnegative().optional()}).strict(),F_=b.object({command:b.string().optional(),searchMode:b.union([b.literal(`query`),b.literal(`search`),b.literal(`vsearch`)]).optional(),includeDefaultMemory:b.boolean().optional(),paths:b.array(k_).optional(),sessions:A_.optional(),update:N_.optional(),limits:P_.optional(),scope:C_.optional()}).strict(),I_=b.object({backend:b.union([b.literal(`builtin`),b.literal(`qmd`)]).optional(),citations:b.union([b.literal(`auto`),b.literal(`on`),b.literal(`off`)]).optional(),qmd:F_.optional()}).strict().optional(),L_=b.object({enabled:b.boolean().optional(),dispatch:b.object({enabled:b.boolean().optional()}).strict().optional(),backend:b.string().optional(),defaultAgent:b.string().optional(),allowedAgents:b.array(b.string()).optional(),maxConcurrentSessions:b.number().int().positive().optional(),stream:b.object({coalesceIdleMs:b.number().int().nonnegative().optional(),maxChunkChars:b.number().int().positive().optional()}).strict().optional(),runtime:b.object({ttlMinutes:b.number().int().positive().optional(),installCommand:b.string().optional()}).strict().optional()}).strict().optional(),R_=b.string().refine(e=>{try{return Kp(e),!0}catch{return!1}},{message:`invalid duration (use ms, s, m, h, d)`}),z_=b.union([b.number().int().positive(),b.string()]).refine(e=>{try{return Wp(String(e).trim(),{defaultUnit:`b`})>0}catch{return!1}},{message:`invalid byte size`}),B_=b.object({maxBytes:z_.optional(),keepLines:b.number().int().positive().optional()}).strict(),V_=b.union([b.string(),b.number().transform((e,t)=>{let n=new Date(e);return!Number.isFinite(e)||Number.isNaN(n.getTime())?(t.addIssue({code:b.ZodIssueCode.custom,message:`invalid timestamp`}),b.NEVER):n.toISOString()})]),H_=b.union([b.literal(`per-job`),b.literal(`per-hour`),b.literal(`per-1k-rows`),b.literal(`per-api-call`),b.literal(`per-day`),b.literal(`per-month`),b.literal(`custom`)]),U_=b.object({currency:b.string().optional(),model:b.string().optional(),amount:b.number().positive().optional(),unit:H_.optional(),unitLabel:b.string().optional()}).strict().optional(),W_=b.union([b.literal(`human`),b.literal(`agent`),b.literal(`agent-approval`),b.literal(`api`),b.literal(`dataset`),b.literal(`hybrid`)]),G_=b.object({kind:b.union([b.literal(`result`),b.literal(`artifact`),b.literal(`invoice`),b.literal(`receipt`),b.literal(`tx`),b.literal(`signature`),b.literal(`manual`)]).optional(),required:b.boolean().optional(),description:b.string().optional()}).strict(),K_=b.object({allowed:b.boolean().optional(),humanApprovalRequired:b.boolean().optional(),allowedSkills:b.array(b.string()).optional(),allowedPlugins:b.array(b.string()).optional(),maxRuntimeSeconds:b.number().int().positive().optional(),maxSpendAmount:b.number().positive().optional(),maxSpendCurrency:b.string().optional()}).strict().optional(),q_=b.object({kind:b.union([b.literal(`native`),b.literal(`spl-token`)]).optional(),address:b.string().optional()}).strict().optional(),J_=b.object({chain:b.literal(`solana`).optional(),address:b.string().optional()}).strict().optional(),Y_=b.object({currency:b.string().optional(),chain:b.literal(`solana`).optional(),assetDecimals:b.number().int().min(0).max(18).optional(),asset:q_,payee:J_}).strict().optional(),X_=b.object({id:b.string().optional(),source:b.union([b.literal(`builtin`),b.literal(`manual`),b.literal(`skill`)]).optional(),enabled:b.boolean().optional(),title:b.string(),summary:b.string().optional(),serviceKind:b.string(),inputShape:b.string().optional(),deliveryShape:b.string().optional(),capabilities:b.array(b.string()).optional(),pricing:U_,fulfillmentMode:W_.optional(),performer:W_.optional(),receiptRules:b.array(G_).optional(),automation:K_,paymentRails:b.array(b.string()).optional(),acceptedAssets:b.array(b.string()).optional(),paymentDefaults:Y_,availability:b.string().optional(),visibility:b.string().optional(),requiredTrustOrBondTier:b.string().optional(),createdAt:b.string().optional(),updatedAt:b.string().optional()}).strict(),Z_=b.union([b.literal(`draft`),b.literal(`open`),b.literal(`matched`),b.literal(`closed`)]),Q_=b.union([b.literal(`draft`),b.literal(`accepted`),b.literal(`funded`),b.literal(`running`),b.literal(`delivered`),b.literal(`disputed`),b.literal(`closed`),b.literal(`cancelled`)]),$_=b.union([b.literal(`not_submitted`),b.literal(`pending`),b.literal(`accepted`),b.literal(`failed`)]),ev=b.union([b.literal(`draft`),b.literal(`requires_payment`),b.literal(`submitted`),b.literal(`verified`),b.literal(`failed`),b.literal(`cancelled`)]),tv=b.union([b.literal(`direct`),b.literal(`escrow`)]),nv=b.union([b.literal(`not_required`),b.literal(`requires_payment`),b.literal(`submitted`),b.literal(`verified`),b.literal(`settled`),b.literal(`held`),b.literal(`released`),b.literal(`failed`),b.literal(`disputed`),b.literal(`cancelled`)]),rv=b.union([b.literal(`not_applicable`),b.literal(`required`),b.literal(`funded`),b.literal(`held`),b.literal(`released`),b.literal(`refunded`),b.literal(`cancelled`),b.literal(`blocked`)]),iv=b.union([b.literal(`pending`),b.literal(`ready`),b.literal(`running`),b.literal(`delivered`),b.literal(`failed`),b.literal(`blocked`)]),av=b.union([b.literal(`pending`),b.literal(`issued`),b.literal(`verified`),b.literal(`rejected`)]),ov=b.union([b.literal(`one-time`),b.literal(`per-job`),b.literal(`per-hour`),b.literal(`per-1k-rows`),b.literal(`per-api-call`),b.literal(`per-day`),b.literal(`per-week`),b.literal(`per-month`),b.literal(`custom`)]),sv=b.union([b.literal(`not_applicable`),b.literal(`draft`),b.literal(`active`),b.literal(`past_due`),b.literal(`paused`),b.literal(`expired`),b.literal(`cancelled`),b.literal(`blocked`)]),cv=b.union([b.literal(`none`),b.literal(`manual`),b.literal(`auto-renew`),b.literal(`auto-renew-with-approval`)]),lv=b.union([b.literal(`not_required`),b.literal(`scheduled`),b.literal(`stopped`),b.literal(`blocked`)]),uv=b.object({status:sv.optional(),billingPeriod:ov.optional(),maxBuyers:b.number().int().positive().optional(),remainingSlots:b.number().int().min(0).optional(),startsAt:b.string().optional(),endsAt:b.string().optional(),renewalPolicy:cv.optional(),paymentExpiresAt:b.string().optional(),deliveryStop:b.object({status:lv.optional(),reason:b.string().optional(),scheduledAt:b.string().optional(),stoppedAt:b.string().optional(),updatedAt:b.string().optional()}).strict().optional(),createdAt:b.string().optional(),updatedAt:b.string().optional()}).strict(),dv=b.union([b.literal(`app-inbox`),b.literal(`channel`),b.literal(`webhook`),b.literal(`websocket`),b.literal(`federation`),b.literal(`api`),b.literal(`artifact`)]),fv=b.union([b.literal(`draft`),b.literal(`ready`),b.literal(`revoked`),b.literal(`expired`),b.literal(`blocked`)]),pv=b.object({targetId:b.string().optional(),source:b.union([b.literal(`order`),b.literal(`subscription`),b.literal(`manual`)]).optional(),owner:b.union([b.literal(`buyer`),b.literal(`seller`)]).optional(),kind:dv.optional(),status:fv.optional(),label:b.string().optional(),descriptor:b.string().optional(),maskedTarget:b.string().optional(),scope:b.object({orderId:b.string().optional(),subscriptionId:b.string().optional(),serviceKind:b.string().optional(),expiresAt:b.string().optional(),maxDeliveries:b.number().int().positive().optional()}).strict().optional(),channel:b.object({provider:b.string().optional(),to:b.string().optional(),accountId:b.string().optional(),threadId:b.union([b.string(),b.number()]).optional()}).strict().optional(),webhook:b.object({url:b.string().optional(),method:b.literal(`POST`).optional(),secretRef:b.string().optional()}).strict().optional(),websocket:b.object({url:b.string().optional(),tokenRef:b.string().optional()}).strict().optional(),federation:b.object({handle:b.string().optional(),nodeEndpoint:b.string().optional()}).strict().optional(),api:b.object({url:b.string().optional(),tokenRef:b.string().optional()}).strict().optional(),artifact:b.object({artifactRef:b.string().optional()}).strict().optional(),createdAt:b.string().optional(),updatedAt:b.string().optional(),revokedAt:b.string().optional()}).strict(),mv=b.object({intentId:b.string().optional(),status:ev.optional(),amount:b.number().optional(),currency:b.string().optional(),unit:H_.optional(),method:b.string().optional(),chain:b.literal(`solana`).optional(),assetKind:b.union([b.literal(`native`),b.literal(`spl-token`)]).optional(),assetAddress:b.string().optional(),assetDecimals:b.number().int().min(0).max(18).optional(),expiresInMinutes:b.number().int().positive().optional(),acceptedAssets:b.array(b.string()).optional(),payerWalletId:b.string().optional(),payeeHandle:b.string().optional(),payeeAddress:b.string().optional(),txRef:b.string().optional(),createdAt:b.string().optional(),updatedAt:b.string().optional()}).strict(),hv=b.object({status:rv.optional(),holdPolicy:b.union([b.literal(`none`),b.literal(`release_on_delivery`),b.literal(`manual_release`)]).optional(),releaseRequired:b.boolean().optional(),vaultWalletId:b.string().optional(),vaultWalletName:b.string().optional(),vaultAddress:b.string().optional(),fundingRequestId:b.string().optional(),fundingTxRef:b.string().optional(),fundedAt:b.string().optional(),releaseRequestId:b.string().optional(),releaseTxRef:b.string().optional(),releasedAt:b.string().optional(),refundRequestId:b.string().optional(),refundTxRef:b.string().optional(),refundedAt:b.string().optional(),cancelledAt:b.string().optional(),notes:b.string().optional(),updatedAt:b.string().optional()}).strict(),gv=b.object({mode:tv.optional(),status:nv.optional(),amount:b.number().optional(),currency:b.string().optional(),chain:b.literal(`solana`).optional(),assetKind:b.union([b.literal(`native`),b.literal(`spl-token`)]).optional(),assetAddress:b.string().optional(),assetDecimals:b.number().int().min(0).max(18).optional(),invoiceId:b.string().optional(),receiptId:b.string().optional(),txRef:b.string().optional(),evidenceRef:b.string().optional(),payerWalletId:b.string().optional(),payeeAddress:b.string().optional(),escrow:hv.optional(),notes:b.string().optional(),createdAt:b.string().optional(),updatedAt:b.string().optional(),verifiedAt:b.string().optional(),settledAt:b.string().optional()}).strict(),_v=b.object({status:iv.optional(),fulfillmentMode:W_.optional(),inputShape:b.string().optional(),deliveryShape:b.string().optional(),targetId:b.string().optional(),targetKind:dv.optional(),targetStatus:fv.optional(),targetLabel:b.string().optional(),targetMasked:b.string().optional(),target:pv.optional(),resultRef:b.string().optional(),artifactRef:b.string().optional(),notes:b.string().optional(),deliveredAt:b.string().optional(),updatedAt:b.string().optional()}).strict(),vv=b.object({status:av.optional(),invoiceId:b.string().optional(),receiptId:b.string().optional(),txRef:b.string().optional(),resultRef:b.string().optional(),disputeCaseId:b.string().optional(),notes:b.string().optional(),createdAt:b.string().optional(),updatedAt:b.string().optional()}).strict(),yv=b.object({id:b.string().optional(),source:b.union([b.literal(`manual`),b.literal(`chat`)]).optional(),enabled:b.boolean().optional(),status:Z_.optional(),title:b.string(),summary:b.string().optional(),serviceKind:b.string(),inputShape:b.string().optional(),deliveryShape:b.string().optional(),capabilities:b.array(b.string()).optional(),pricing:U_,fulfillmentMode:W_.optional(),receiptRules:b.array(G_).optional(),paymentRails:b.array(b.string()).optional(),acceptedAssets:b.array(b.string()).optional(),requiredTrustOrBondTier:b.string().optional(),visibility:b.string().optional(),expiresAt:b.string().optional(),createdAt:b.string().optional(),updatedAt:b.string().optional()}).strict(),bv=b.object({id:b.string().optional(),source:b.union([b.literal(`local`),b.literal(`federation`)]).optional(),status:Q_.optional(),offerId:b.string().optional(),requestId:b.string().optional(),buyerHandle:b.string().optional(),sellerHandle:b.string().optional(),sellerEndpoint:b.string().optional(),sellerOrderId:b.string().optional(),sellerSyncStatus:$_.optional(),sellerSyncError:b.string().optional(),sellerSyncedAt:b.string().optional(),sellerAcceptedAt:b.string().optional(),serviceKind:b.string().optional(),title:b.string().optional(),pricing:U_,fulfillmentMode:W_.optional(),receiptRules:b.array(G_).optional(),paymentIntent:mv.optional(),settlement:gv.optional(),delivery:_v.optional(),subscription:uv.optional(),receipt:vv.optional(),invoiceId:b.string().optional(),receiptId:b.string().optional(),txRef:b.string().optional(),resultRef:b.string().optional(),disputeCaseId:b.string().optional(),createdAt:b.string().optional(),updatedAt:b.string().optional()}).strict(),xv=b.object({allowPrograms:b.array(b.string()).optional(),tokenCaps:b.record(b.string(),b.object({maxPerTx:b.string().optional(),maxDaily:b.string().optional()}).strict()).optional(),maxPerTx:b.string().optional(),maxDaily:b.string().optional()}).strict(),Sv=b.object({provider:b.object({id:b.union([b.literal(`embedded-keystore`),b.literal(`local-socket-signer`),b.literal(`alchemy`),b.literal(`turnkey`),b.literal(`privy`)]).optional()}).strict().optional(),execution:b.object({mode:b.union([b.literal(`manual`),b.literal(`autonomous`)]).optional()}).strict().optional(),approvalAuth:b.object({mode:b.union([b.literal(`none`),b.literal(`webauthn`)]).optional(),challengeTtlSeconds:b.number().int().positive().optional(),grantTtlSeconds:b.number().int().positive().optional()}).strict().optional(),keystore:b.object({enabled:b.boolean().optional(),path:b.string().optional(),chainSupport:b.array(b.literal(`solana`)).optional(),autoLockSeconds:b.number().int().nonnegative().optional(),requirePasskeyForUnlock:b.boolean().optional()}).strict().optional(),runtime:b.object({enabled:b.boolean().optional(),mode:b.union([b.literal(`managed`),b.literal(`external`)]).optional(),runtime:b.union([b.literal(`external-docker`),b.literal(`external-custom`)]).optional(),external:b.object({kind:b.union([b.literal(`docker`),b.literal(`custom`)]).optional()}).strict().optional(),auth:b.object({mode:b.union([b.literal(`jwt-bootstrap`),b.literal(`static-token-compat`)]).optional(),bootstrapUrl:b.string().optional()}).strict().optional(),source:b.object({ref:b.string().optional()}).strict().optional(),chains:b.array(b.literal(`solana`)).optional(),service:b.object({host:b.string().optional(),port:b.number().int().min(1).max(65535).optional()}).strict().optional(),install:b.object({enabled:b.boolean().optional(),version:b.string().optional()}).strict().optional(),policy:b.object({capsEnabled:b.boolean().optional(),directSigning:b.boolean().optional(),skillsEnabled:b.boolean().optional(),solana:xv.optional()}).strict().optional(),toolAccess:b.object({mode:b.union([b.literal(`owner-only`),b.literal(`allowlist`),b.literal(`all`)]).optional(),allowAgents:b.array(b.string()).optional(),allowSkills:b.array(b.string()).optional(),denySkills:b.array(b.string()).optional(),allowSources:b.array(b.string()).optional()}).strict().optional()}).strict().optional()}).strict().optional(),Cv=b.object({$schema:b.string().optional(),meta:b.object({lastTouchedVersion:b.string().optional(),lastTouchedAt:V_.optional()}).strict().optional(),env:b.object({shellEnv:b.object({enabled:b.boolean().optional(),timeoutMs:b.number().int().nonnegative().optional()}).strict().optional(),vars:b.record(b.string(),b.string()).optional()}).catchall(b.string()).optional(),wizard:b.object({lastRunAt:b.string().optional(),lastRunVersion:b.string().optional(),lastRunCommit:b.string().optional(),lastRunCommand:b.string().optional(),lastRunMode:b.union([b.literal(`local`),b.literal(`remote`)]).optional()}).strict().optional(),diagnostics:b.object({enabled:b.boolean().optional(),flags:b.array(b.string()).optional(),otel:b.object({enabled:b.boolean().optional(),endpoint:b.string().optional(),protocol:b.union([b.literal(`http/protobuf`),b.literal(`grpc`)]).optional(),headers:b.record(b.string(),b.string()).optional(),serviceName:b.string().optional(),traces:b.boolean().optional(),metrics:b.boolean().optional(),logs:b.boolean().optional(),sampleRate:b.number().min(0).max(1).optional(),flushIntervalMs:b.number().int().nonnegative().optional()}).strict().optional(),prometheus:b.object({enabled:b.boolean().optional(),path:b.string().optional(),requireAuth:b.boolean().optional(),includeRuntime:b.boolean().optional()}).strict().optional(),cacheTrace:b.object({enabled:b.boolean().optional(),filePath:b.string().optional(),includeMessages:b.boolean().optional(),includePrompt:b.boolean().optional(),includeSystem:b.boolean().optional()}).strict().optional()}).strict().optional(),logging:b.object({level:b.union([b.literal(`silent`),b.literal(`fatal`),b.literal(`error`),b.literal(`warn`),b.literal(`info`),b.literal(`debug`),b.literal(`trace`)]).optional(),file:b.string().optional(),maxFileBytes:b.number().int().positive().optional(),consoleLevel:b.union([b.literal(`silent`),b.literal(`fatal`),b.literal(`error`),b.literal(`warn`),b.literal(`info`),b.literal(`debug`),b.literal(`trace`)]).optional(),consoleStyle:b.union([b.literal(`pretty`),b.literal(`compact`),b.literal(`json`)]).optional(),redactSensitive:b.union([b.literal(`off`),b.literal(`tools`)]).optional(),redactPatterns:b.array(b.string()).optional()}).strict().optional(),update:b.object({channel:b.union([b.literal(`stable`),b.literal(`beta`),b.literal(`dev`)]).optional(),checkOnStart:b.boolean().optional()}).strict().optional(),browser:b.object({enabled:b.boolean().optional(),evaluateEnabled:b.boolean().optional(),cdpUrl:b.string().optional(),remoteCdpTimeoutMs:b.number().int().nonnegative().optional(),remoteCdpHandshakeTimeoutMs:b.number().int().nonnegative().optional(),color:b.string().optional(),executablePath:b.string().optional(),headless:b.boolean().optional(),noSandbox:b.boolean().optional(),attachOnly:b.boolean().optional(),defaultProfile:b.string().optional(),snapshotDefaults:D_,profiles:b.record(b.string().regex(/^[a-z0-9-]+$/,`Profile names must be alphanumeric with hyphens only`),b.object({cdpPort:b.number().int().min(1).max(65535).optional(),cdpUrl:b.string().optional(),driver:b.union([b.literal(`clawd`),b.literal(`extension`)]).optional(),color:Km}).strict().refine(e=>e.cdpPort||e.cdpUrl,{message:`Profile must set cdpPort or cdpUrl`})).optional()}).strict().optional(),ui:b.object({seamColor:Km.optional(),assistant:b.object({name:b.string().max(50).optional(),avatar:b.string().max(200).optional()}).strict().optional()}).strict().optional(),auth:b.object({profiles:b.record(b.string(),b.object({provider:b.string(),mode:b.union([b.literal(`api_key`),b.literal(`oauth`),b.literal(`token`)]),email:b.string().optional()}).strict()).optional(),order:b.record(b.string(),b.array(b.string())).optional(),cooldowns:b.object({billingBackoffHours:b.number().positive().optional(),billingBackoffHoursByProvider:b.record(b.string(),b.number().positive()).optional(),overloadedBackoffMs:b.number().positive().optional(),overloadedProfileRotations:b.number().nonnegative().optional(),rateLimitedProfileRotations:b.number().nonnegative().optional(),billingMaxHours:b.number().positive().optional(),failureWindowHours:b.number().positive().optional()}).strict().optional()}).strict().optional(),acp:L_,models:Sm,nodeHost:O_,agents:Ph,tools:Mh,bindings:Fh,broadcast:Lh,audio:M_,media:b.object({preserveFilenames:b.boolean().optional()}).strict().optional(),messages:T_,commands:E_,approvals:Bh,session:w_,cron:b.object({enabled:b.boolean().optional(),store:b.string().optional(),maxConcurrentRuns:b.number().int().positive().optional(),webhook:b.string().url().refine(e=>/^https?:\/\//iu.test(e),`Must be an http(s) URL`).optional(),webhookToken:b.string().optional().register(H),sessionRetention:b.union([R_,b.literal(!1)]).optional(),runLog:B_.optional()}).strict().optional(),hooks:b.object({enabled:b.boolean().optional(),path:b.string().optional(),token:b.string().optional().register(H),defaultSessionKey:b.string().optional(),allowRequestSessionKey:b.boolean().optional(),allowedSessionKeyPrefixes:b.array(b.string()).optional(),allowedAgentIds:b.array(b.string()).optional(),maxBodyBytes:b.number().int().positive().optional(),presets:b.array(b.string()).optional(),transformsDir:b.string().optional(),mappings:b.array(Uh).optional(),gmail:Jh,internal:qh}).strict().optional(),web:b.object({enabled:b.boolean().optional(),heartbeatSeconds:b.number().int().positive().optional(),reconnect:b.object({initialMs:b.number().positive().optional(),maxMs:b.number().positive().optional(),factor:b.number().positive().optional(),jitter:b.number().min(0).max(1).optional(),maxAttempts:b.number().int().min(0).optional()}).strict().optional()}).strict().optional(),channels:x_,discovery:b.object({wideArea:b.object({enabled:b.boolean().optional(),domain:b.string().optional()}).strict().optional(),mdns:b.object({mode:b.enum([`off`,`minimal`,`full`]).optional()}).strict().optional()}).strict().optional(),federation:b.object({offers:b.object({manual:b.array(X_).optional(),skill:b.array(X_.extend({source:b.union([b.literal(`skill`)]).optional(),skillId:b.string().optional()}).strict()).optional()}).strict().optional(),marketplace:b.object({requests:b.object({manual:b.array(yv).optional()}).strict().optional(),deliveryTargets:b.object({local:b.array(pv).optional()}).strict().optional(),orders:b.object({local:b.array(bv).optional()}).strict().optional()}).strict().optional(),bond:b.object({walletId:b.string().optional()}).strict().optional()}).strict().optional(),canvasHost:b.object({enabled:b.boolean().optional(),root:b.string().optional(),port:b.number().int().positive().optional(),liveReload:b.boolean().optional()}).strict().optional(),talk:b.object({provider:b.string().optional(),providers:b.record(b.string(),j_).optional(),voiceId:b.string().optional(),voiceAliases:b.record(b.string(),b.string()).optional(),modelId:b.string().optional(),outputFormat:b.string().optional(),apiKey:U.optional().register(H),interruptOnSpeech:b.boolean().optional()}).strict().optional(),gateway:b.object({port:b.number().int().positive().optional(),channelHealthCheckMinutes:b.number().int().min(0).optional(),mode:b.union([b.literal(`local`),b.literal(`remote`)]).optional(),bind:b.union([b.literal(`auto`),b.literal(`lan`),b.literal(`loopback`),b.literal(`custom`),b.literal(`tailnet`)]).optional(),controlUi:b.object({enabled:b.boolean().optional(),basePath:b.string().optional(),root:b.string().optional(),allowedOrigins:b.array(b.string()).optional(),allowInsecureAuth:b.boolean().optional(),dangerouslyDisableDeviceAuth:b.boolean().optional(),dangerouslyAllowHostHeaderOriginFallback:b.boolean().optional()}).strict().optional(),auth:b.object({mode:b.union([b.literal(`token`),b.literal(`password`),b.literal(`trusted-proxy`)]).optional(),token:b.string().optional().register(H),password:b.string().optional().register(H),allowTailscale:b.boolean().optional(),rateLimit:b.object({maxAttempts:b.number().optional(),windowMs:b.number().optional(),lockoutMs:b.number().optional(),exemptLoopback:b.boolean().optional()}).strict().optional(),trustedProxy:b.object({userHeader:b.string().min(1,`userHeader is required for trusted-proxy mode`),requiredHeaders:b.array(b.string()).optional(),allowUsers:b.array(b.string()).optional()}).strict().optional()}).strict().optional(),trustedProxies:b.array(b.string()).optional(),tools:b.object({deny:b.array(b.string()).optional(),allow:b.array(b.string()).optional()}).strict().optional(),tailscale:b.object({mode:b.union([b.literal(`off`),b.literal(`serve`),b.literal(`funnel`)]).optional(),resetOnExit:b.boolean().optional()}).strict().optional(),remote:b.object({url:b.string().optional(),transport:b.union([b.literal(`ssh`),b.literal(`direct`)]).optional(),token:b.string().optional().register(H),password:b.string().optional().register(H),tlsFingerprint:b.string().optional(),sshTarget:b.string().optional(),sshIdentity:b.string().optional()}).strict().optional(),reload:b.object({mode:b.union([b.literal(`off`),b.literal(`restart`),b.literal(`hot`),b.literal(`hybrid`)]).optional(),debounceMs:b.number().int().min(0).optional()}).strict().optional(),tls:b.object({enabled:b.boolean().optional(),autoGenerate:b.boolean().optional(),certPath:b.string().optional(),keyPath:b.string().optional(),caPath:b.string().optional()}).optional(),http:b.object({endpoints:b.object({chatCompletions:b.object({enabled:b.boolean().optional()}).strict().optional(),responses:b.object({enabled:b.boolean().optional(),maxBodyBytes:b.number().int().positive().optional(),maxUrlParts:b.number().int().nonnegative().optional(),files:b.object({allowUrl:b.boolean().optional(),urlAllowlist:b.array(b.string()).optional(),allowedMimes:b.array(b.string()).optional(),maxBytes:b.number().int().positive().optional(),maxChars:b.number().int().positive().optional(),maxRedirects:b.number().int().nonnegative().optional(),timeoutMs:b.number().int().positive().optional(),pdf:b.object({maxPages:b.number().int().positive().optional(),maxPixels:b.number().int().positive().optional(),minTextChars:b.number().int().nonnegative().optional()}).strict().optional()}).strict().optional(),images:b.object({allowUrl:b.boolean().optional(),urlAllowlist:b.array(b.string()).optional(),allowedMimes:b.array(b.string()).optional(),maxBytes:b.number().int().positive().optional(),maxRedirects:b.number().int().nonnegative().optional(),timeoutMs:b.number().int().positive().optional()}).strict().optional()}).strict().optional()}).strict().optional(),securityHeaders:b.object({strictTransportSecurity:b.union([b.string(),b.literal(!1)]).optional()}).strict().optional()}).strict().optional(),nodes:b.object({browser:b.object({mode:b.union([b.literal(`auto`),b.literal(`manual`),b.literal(`off`)]).optional(),node:b.string().optional()}).strict().optional(),allowCommands:b.array(b.string()).optional(),denyCommands:b.array(b.string()).optional()}).strict().optional(),customBindHost:b.string().optional(),allowRealIpFallback:b.boolean().optional()}).strict().optional(),memory:I_,wallet:Sv,secrets:gm,mcp:b.object({servers:b.record(b.string(),b.record(b.string(),b.unknown())).optional()}).strict().optional(),skills:b.object({allowBundled:b.array(b.string()).optional(),load:b.object({extraDirs:b.array(b.string()).optional(),watch:b.boolean().optional(),watchDebounceMs:b.number().int().min(0).optional()}).strict().optional(),install:b.object({preferBrew:b.boolean().optional(),nodeManager:b.union([b.literal(`npm`),b.literal(`pnpm`),b.literal(`yarn`),b.literal(`bun`)]).optional()}).strict().optional(),marketplace:b.object({allowRegistries:b.array(b.string()).optional()}).strict().optional(),entries:b.record(b.string(),b.object({enabled:b.boolean().optional(),apiKey:U.optional().register(H),env:b.record(b.string(),b.string()).optional(),config:b.record(b.string(),b.unknown()).optional()}).strict()).optional()}).strict().optional(),plugins:b.object({enabled:b.boolean().optional(),allow:b.array(b.string()).optional(),deny:b.array(b.string()).optional(),load:b.object({paths:b.array(b.string()).optional()}).strict().optional(),slots:b.object({memory:b.string().optional()}).strict().optional(),entries:b.record(b.string(),b.object({enabled:b.boolean().optional(),config:b.record(b.string(),b.unknown()).optional(),runtime:b.object({helpers:b.object({sessions:b.object({read:b.boolean().optional()}).strict().optional()}).strict().optional(),adminRpcActions:b.object({allow:b.array(b.object({method:b.union([b.literal(`chat.inject`),b.literal(`push.test`),b.literal(`web.login.start`),b.literal(`web.login.wait`)]).optional(),sources:b.array(b.string()).optional(),requireOperatorApproval:b.boolean().optional()}).strict()).optional()}).strict().optional()}).strict().optional()}).strict()).optional(),installs:b.record(b.string(),b.object(Yh).strict()).optional()}).strict().optional()}).strict().superRefine((e,t)=>{let n=e.agents?.list??[];if(n.length===0)return;let r=new Set(n.map(e=>e.id)),i=e.broadcast;if(i){for(let[e,n]of Object.entries(i))if(e!==`strategy`&&Array.isArray(n))for(let i=0;i<n.length;i+=1){let a=n[i];r.has(a)||t.addIssue({code:b.ZodIssueCode.custom,path:[`broadcast`,e,i],message:`Unknown agent id "${a}" (not in agents.list).`})}}}),wv=new Set;function Tv(e,t){let n=i.resolve(t);return Hp(n,i.resolve(n,e))}function Ev(e){let t=e.agents?.list;if(!Array.isArray(t)||t.length===0)return[];let n=[];for(let[r,i]of t.entries()){if(!i||typeof i!=`object`)continue;let t=i.identity?.avatar;if(typeof t!=`string`)continue;let a=t.trim();if(a&&!(Rp(a)||zp(a))){if(a.startsWith(`~`)){n.push({path:`agents.list.${r}.identity.avatar`,message:`identity.avatar must be a workspace-relative path, http(s) URL, or data URI.`});continue}if(Bp(a)&&!Vp(a)){n.push({path:`agents.list.${r}.identity.avatar`,message:`identity.avatar must be a workspace-relative path, http(s) URL, or data URI.`});continue}Tv(a,$c(e,i.id??Xc(e)))||n.push({path:`agents.list.${r}.identity.avatar`,message:`identity.avatar must stay within the agent workspace.`})}}return n}function Dv(e){let t=Yf(e);if(t.length>0)return{ok:!1,issues:t.map(e=>({path:e.path,message:e.message}))};let n=Cv.safeParse(e);if(!n.success)return{ok:!1,issues:n.error.issues.map(e=>({path:e.path.join(`.`),message:e.message}))};let r=na(n.data);if(r.length>0)return{ok:!1,issues:[{path:`agents.list`,message:ra(r)}]};let i=Ev(n.data);return i.length>0?{ok:!1,issues:i}:{ok:!0,config:n.data}}function Ov(e){let t=Dv(e);return t.ok?{ok:!0,config:Vd(Hd(Rd(t.config)))}:t}function kv(e){return jv(e,{applyDefaults:!0})}function Av(e){return jv(e,{applyDefaults:!1})}function jv(e,t){let n=t.applyDefaults?Ov(e):Dv(e);if(!n.ok)return{ok:!1,issues:n.issues,warnings:[]};let r=n.config,i=[],a=[],o=T(e)&&Object.prototype.hasOwnProperty.call(e,`plugins`),s=null,c=()=>{if(s)return s;let e=du({config:r,workspaceDir:$c(r,Xc(r))??void 0}),t=new Set(e.plugins.map(e=>e.id)),n=_l(r.plugins);for(let t of e.diagnostics){let e=t.pluginId?`plugins.entries.${t.pluginId}`:`plugins`;!t.pluginId&&t.message.includes(`plugin path not found`)&&(e=`plugins.load.paths`);let n=`${t.pluginId?`plugin ${t.pluginId}`:`plugin`}: ${t.message}`;t.level===`error`?i.push({path:e,message:n}):a.push({path:e,message:n})}return s={registry:e,knownIds:t,normalizedPlugins:n},s},l=new Set([`defaults`,`modelByChannel`,...Tt]);if(r.channels&&T(r.channels))for(let e of Object.keys(r.channels)){let t=e.trim();if(t){if(!l.has(t)){let{registry:e}=c();for(let t of e.plugins)for(let e of t.channels)l.add(e)}l.has(t)||i.push({path:`channels.${t}`,message:`unknown channel id: ${t}`})}}let u=new Set;for(let e of Tt)u.add(e.toLowerCase());let d=(e,t)=>{if(typeof e!=`string`)return;let n=e.trim();if(!n){i.push({path:t,message:`heartbeat target must not be empty`});return}let r=n.toLowerCase();if(!(r===`last`||r===`none`)&&!kt(n)){if(!u.has(r)){let{registry:e}=c();for(let t of e.plugins)for(let e of t.channels){let t=e.trim();t&&u.add(t.toLowerCase())}}u.has(r)||i.push({path:t,message:`unknown heartbeat target: ${e}`})}};if(d(r.agents?.defaults?.heartbeat?.target,`agents.defaults.heartbeat.target`),Array.isArray(r.agents?.list))for(let[e,t]of r.agents.list.entries())d(t?.heartbeat?.target,`agents.list.${e}.heartbeat.target`);if(!o)return i.length>0?{ok:!1,issues:i,warnings:a}:{ok:!0,config:r,warnings:a};let{registry:f,knownIds:p,normalizedPlugins:m}=c(),h=(e,t,n)=>{if(!wv.has(t)){if(n?.warnOnly){a.push({path:e,message:`plugin not found: ${t} (stale config entry ignored; remove it from plugins config)`});return}i.push({path:e,message:`plugin not found: ${t}`})}},g=r.plugins,_=g?.entries;if(_&&T(_))for(let e of Object.keys(_))p.has(e)||h(`plugins.entries.${e}`,e,{warnOnly:!0});let v=g?.allow??[];for(let e of v)typeof e!=`string`||!e.trim()||p.has(e)||h(`plugins.allow`,e);let ee=g?.deny??[];for(let e of ee)typeof e!=`string`||!e.trim()||p.has(e)||h(`plugins.deny`,e);let y=m.slots.memory;typeof y==`string`&&y.trim()&&!p.has(y)&&h(`plugins.slots.memory`,y);let b=null,te=new Set;for(let e of f.plugins){let t=e.id;if(te.has(t))continue;te.add(t);let n=m.entries[t],o=!!n?.config,s=bl({id:t,origin:e.origin,config:m,rootConfig:r}),c=s.enabled,l=s.reason;if(c){let n=xl({id:t,kind:e.kind,slot:y,selectedId:b});n.enabled||(c=!1,l=n.reason),n.selected&&e.kind===`memory`&&(b=t)}if(c||o)if(e.configSchema){let r=Np({schema:e.configSchema,cacheKey:e.schemaCacheKey??e.manifestPath??t,value:n?.config??{}});if(!r.ok)for(let e of r.errors)i.push({path:`plugins.entries.${t}.config`,message:`invalid config: ${e}`})}else i.push({path:`plugins.entries.${t}`,message:`plugin schema missing for ${t}`});!c&&o&&a.push({path:`plugins.entries.${t}`,message:`plugin disabled (${l??`disabled`}) but config is present`})}return i.length>0?{ok:!1,issues:i,warnings:a}:{ok:!0,config:r,warnings:a}}const Mv=/^v?(\d+)\.(\d+)\.(\d+)(?:-(\d+))?/,Nv=/^v?(20\d{2})\.(\d{1,2})\.(\d{1,2})(?:-(\d+))?$/;function Pv(e){if(!e)return null;let t=e.trim().match(Mv);if(!t)return null;let[,n,r,i,a]=t,o=e.trim().match(Nv);return{major:Number.parseInt(n,10),minor:Number.parseInt(r,10),patch:Number.parseInt(i,10),revision:a?Number.parseInt(a,10):0,flavor:o?`calendar`:`semver`}}function Fv(e,t){let n=Pv(e),r=Pv(t);return!n||!r?null:n.flavor===r.flavor?n.major===r.major?n.minor===r.minor?n.patch===r.patch?n.revision===r.revision?0:n.revision<r.revision?-1:1:n.patch<r.patch?-1:1:n.minor<r.minor?-1:1:n.major<r.major?-1:1:0}const Iv=[`OPENAI_API_KEY`,`ANTHROPIC_API_KEY`,`ANTHROPIC_OAUTH_TOKEN`,`GEMINI_API_KEY`,`ZAI_API_KEY`,`OPENROUTER_API_KEY`,`AI_GATEWAY_API_KEY`,`MINIMAX_API_KEY`,`SYNTHETIC_API_KEY`,`ELEVENLABS_API_KEY`,`TELEGRAM_BOT_TOKEN`,`DISCORD_BOT_TOKEN`,`SLACK_BOT_TOKEN`,`SLACK_APP_TOKEN`,`FASED_GATEWAY_TOKEN`,`FASED_GATEWAY_PASSWORD`],Lv=[];function Rv(e){let t=e,n=[];for(let e of Lv){let r=!!(t.plugins?.entries&&e in t.plugins.entries),i=!!(t.plugins?.installs&&e in t.plugins.installs),a=Array.isArray(t.plugins?.allow)&&t.plugins.allow.includes(e),o=t.plugins?.slots?.memory===e;!r&&!i&&!a&&!o||(t=Wi(t,e).config,n.push(e))}return{config:t,removedPluginIds:n}}const zv=/^(?<policyPath>[a-z0-9_.-]+)\s*=\s*"open"\s+requires\s+(?<allowPath>[a-z0-9_.-]+)(?:\s+\(or\s+[a-z0-9_.-]+\))?\s+to include "\*"$/i,Bv=new Set;function Vv(e){return _.createHash(`sha256`).update(e??``).digest(`hex`)}function Hv(e,t){let n=t.match(zv),r=n?.groups?.policyPath?.trim(),i=n?.groups?.allowPath?.trim();return!r||!i?`Config validation failed: ${e}: ${t}`:[`Config validation failed: ${e}`,``,`Configuration mismatch: ${r} is "open", but ${i} does not include "*".`,``,`Fix with:`,` fased config set ${i} '["*"]'`,``,`Or switch policy:`,` fased config set ${r} "pairing"`].join(`
3
- `)}function Uv(e){return/^[0-9]+$/.test(e)}function Wv(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Gv(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const Kv=Symbol(`write-pruned-object`);function qv(e,t,n){if(n>=t.length)return{changed:!1,value:e};let r=t[n],i=n===t.length-1;if(Array.isArray(e)){if(!Uv(r))return{changed:!1,value:e};let a=Number.parseInt(r,10);if(!Number.isFinite(a)||a<0||a>=e.length)return{changed:!1,value:e};if(i){let t=e.slice();return t.splice(a,1),{changed:!0,value:t}}let o=qv(e[a],t,n+1);if(!o.changed)return{changed:!1,value:e};let s=e.slice();return o.value===Kv?s.splice(a,1):s[a]=o.value,{changed:!0,value:s}}if(Ki(r)||!Wv(e)||!Gv(e,r))return{changed:!1,value:e};if(i){let t={...e};return delete t[r],{changed:!0,value:Object.keys(t).length===0?Kv:t}}let a=qv(e[r],t,n+1);if(!a.changed)return{changed:!1,value:e};let o={...e};return a.value===Kv?delete o[r]:o[r]=a.value,{changed:!0,value:Object.keys(o).length===0?Kv:o}}function Jv(e,t){if(t.length===0)return{changed:!1,next:e};let n=qv(e,t,0);return n.changed?n.value===Kv?{changed:!0,next:{}}:Wv(n.value)?{changed:!0,next:Xv(n.value)}:{changed:!1,next:e}:{changed:!1,next:e}}function Yv(e){if(typeof e.hash==`string`){let t=e.hash.trim();if(t)return t}return typeof e.raw==`string`?Vv(e.raw):null}function Xv(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:e}function $(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Zv(e){if(!$(e))return!1;let t=e.meta;return $(t)}function Qv(e){if(!$(e))return null;let t=e.gateway;if(!$(t)||typeof t.mode!=`string`)return null;let n=t.mode.trim();return n.length>0?n:null}function $v(e){return structuredClone(e)}function ey(e,t){if(!$(e)||!$(t))return $v(t);let n={},r=new Set([...Object.keys(e),...Object.keys(t)]);for(let i of r){let r=i in e;if(!(i in t)){n[i]=null;continue}let a=t[i];if(!r){n[i]=$v(a);continue}let o=e[i];if($(o)&&$(a)){let e=ey(o,a);if($(e)&&Object.keys(e).length===0)continue;n[i]=e;continue}u(o,a)||(n[i]=$v(a))}return n}function ty(e,t,n){if(typeof e==`string`){ef(e)&&n.set(t,e);return}if(Array.isArray(e)){e.forEach((e,r)=>{ty(e,`${t}[${r}]`,n)});return}if($(e))for(let[r,i]of Object.entries(e))ty(i,t?`${t}.${r}`:r,n)}function ny(e,t,n,r){if(Array.isArray(e)&&Array.isArray(t)){let i=Math.max(e.length,t.length);for(let a=0;a<i;a+=1){let i=n?`${n}[${a}]`:`[${a}]`;if(a>=e.length||a>=t.length){r.add(i);continue}ny(e[a],t[a],i,r)}return}if($(e)&&$(t)){let i=new Set([...Object.keys(e),...Object.keys(t)]);for(let a of i){let i=n?`${n}.${a}`:a,o=a in e;if(!(a in t)||!o){r.add(i);continue}ny(e[a],t[a],i,r)}return}u(e,t)||r.add(n)}function ry(e){if(!e)return``;if(e.endsWith(`]`)){let t=e.lastIndexOf(`[`);return t>0?e.slice(0,t):``}let t=e.lastIndexOf(`.`);return t>=0?e.slice(0,t):``}function iy(e,t){if(t.has(e))return!0;let n=ry(e);for(;n;){if(t.has(n))return!0;n=ry(n)}return t.has(``)}function ay(e,t,n,r){if(typeof e==`string`){if(!iy(t,r)){let e=n.get(t);if(e!==void 0)return e}return e}if(Array.isArray(e)){let i=!1,a=e.map((e,a)=>{let o=ay(e,`${t}[${a}]`,n,r);return o!==e&&(i=!0),o});return i?a:e}if($(e)){let i=!1,a={};for(let[o,s]of Object.entries(e)){let e=ay(s,t?`${t}.${o}`:o,n,r);e!==s&&(i=!0),a[o]=e}return i?a:e}return e}function oy(e,t){return i.join(Be(e,t),`logs`,`config-audit.jsonl`)}function sy(e){let t=[];return e.existsBefore?(typeof e.previousBytes==`number`&&typeof e.nextBytes==`number`&&e.previousBytes>=512&&e.nextBytes<Math.floor(e.previousBytes*.5)&&t.push(`size-drop:${e.previousBytes}->${e.nextBytes}`),e.hasMetaBefore||t.push(`missing-meta-before-write`),e.gatewayModeBefore&&!e.gatewayModeAfter&&t.push(`gateway-mode-removed`),t):t}async function cy(e,t){try{let n=oy(e.env,e.homedir);await e.fs.promises.mkdir(i.dirname(n),{recursive:!0,mode:448}),await e.fs.promises.appendFile(n,`${JSON.stringify(t)}\n`,{encoding:`utf-8`,mode:384})}catch{}}function ly(e,t){if(!e||typeof e!=`object`)return;let n=e.gateway;!n||typeof n!=`object`||`token`in n&&t.warn(`Config uses "gateway.token". This key is ignored; use "gateway.auth.token" instead.`)}function uy(e){let t=new Date().toISOString();return{...e,meta:{...e.meta,lastTouchedVersion:Yn,lastTouchedAt:t}}}function dy(e,t){let n=e.meta?.lastTouchedVersion;if(!n)return;let r=Fv(Yn,n);r!==null&&r<0&&t.warn(`Config was last written by a newer FasedAgent (${n}); current version is ${Yn}.`)}function fy(e){return e.configPath?e.configPath:We(e.env,Be(e.env,e.homedir))}function py(e={}){return{fs:e.fs??n,json5:e.json5??m,env:e.env??process.env,homedir:e.homedir??(()=>S(e.env??process.env,p.homedir)),configPath:e.configPath??``,logger:e.logger??console}}function my(e){e===process.env&&Pr({quiet:!0})}function hy(e,t=m){try{return{ok:!0,parsed:t.parse(e)}}catch(e){return{ok:!1,error:String(e)}}}function gy(e,t,n){return hf(e,t,{readFile:e=>n.fs.readFileSync(e,`utf-8`),readFileWithGuards:({includePath:e,resolvedPath:t,rootRealDir:r})=>pf({includePath:e,resolvedPath:t,rootRealDir:r,ioFs:n.fs}),parseJson:e=>n.json5.parse(e)})}function _y(e,t){return e&&typeof e==`object`&&`env`in e&&sf(e,t),{resolvedConfigRaw:nf(e,t),envSnapshotForRestore:{...t}}}function vy(e={}){let t=py(e),n=fy(t),r=(t.configPath?[n]:Ge(t.env,t.homedir)).find(e=>t.fs.existsSync(e))??n;function a(){try{if(my(t.env),!t.fs.existsSync(r))return Qr(t.env)&&!$r(t.env)&&Zr({enabled:!0,env:t.env,expectedKeys:Iv,logger:t.logger,timeoutMs:ei(t.env)}),{};let e=t.fs.readFileSync(r,`utf-8`),{resolvedConfigRaw:n}=_y(gy(t.json5.parse(e),r,t),t.env);if(ly(n,t.logger),typeof n!=`object`||!n)return{};let i=na(n,{env:t.env,homedir:t.homedir});if(i.length>0)throw new Qi(i);let a=Rv(n),o=Ep(a.config),s=kv(o.config);if(!s.ok){let e=s.issues.map(e=>`- ${e.path||`<root>`}: ${e.message}`).join(`
4
- `);Bv.has(r)||(Bv.add(r),t.logger.error(`Invalid config at ${r}:\\n${e}`));let n=Error(`Invalid config`);throw n.code=`INVALID_CONFIG`,n.details=e,n}if(s.warnings.length>0){let e=s.warnings.map(e=>`- ${e.path||`<root>`}: ${e.message}`).join(`
5
- `);t.logger.warn(`Config warnings:\n${e}`)}dy(s.config,t.logger);let c=Bd(Vd(Gd(Wd(Hd(Rd(Ud(Ld(s.config))))))));Sp(c),gp(c);let u=na(c,{env:t.env,homedir:t.homedir});if(u.length>0)throw new Qi(u);sf(c,t.env),(Qr(t.env)||c.env?.shellEnv?.enabled===!0)&&!$r(t.env)&&Zr({enabled:!0,env:t.env,expectedKeys:Iv,logger:t.logger,timeoutMs:c.env?.shellEnv?.timeoutMs??ei(t.env)});let d=yy.get(r),f=tr(c,()=>d??_.randomBytes(32).toString(`hex`)),p=Ep(f.config),m=p.config,h=[...new Set([...o.repairedPluginIds,...p.repairedPluginIds])].toSorted((e,t)=>e.localeCompare(t));if(a.removedPluginIds.length>0){let e=`${r}:legacy-removed-plugins`;Sy.has(e)||(Sy.add(e),l(m,{expectedConfigPath:r}).catch(()=>{}).finally(()=>{Sy.delete(e)}))}if(h.length>0){let e=`${r}:installed-plugin-allowlist`;Cy.has(e)||(Cy.add(e),t.logger.warn(`Pinned installed plugins in plugins.allow: ${h.join(`, `)}`),l(m,{expectedConfigPath:r}).catch(e=>{t.logger.warn(`Failed to persist repaired plugins.allow at ${r}: ${String(e)}`)}).finally(()=>{Cy.delete(e)}))}return f.generatedSecret?(yy.set(r,f.generatedSecret),by.has(r)||(by.add(r),l(m,{expectedConfigPath:r}).then(()=>{yy.delete(r),xy.delete(r)}).catch(e=>{xy.has(r)||(xy.add(r),t.logger.warn(`Failed to persist auto-generated commands.ownerDisplaySecret at ${r}: ${String(e)}`))}).finally(()=>{by.delete(r)}))):(yy.delete(r),xy.delete(r)),kp(m)}catch(e){if(e instanceof Qi)throw t.logger.error(e.message),e;return e?.code===`INVALID_CONFIG`||t.logger.error(`Failed to read config at ${r}`,e),{}}}async function o(){if(my(t.env),!t.fs.existsSync(r)){let e=Vv(null);return{snapshot:{path:r,exists:!1,raw:null,parsed:{},resolved:{},valid:!0,config:zd(Bd(Vd(Gd(Wd(Hd(Rd(Ld({})))))))),hash:e,issues:[],warnings:[],legacyIssues:[]}}}try{let e=t.fs.readFileSync(r,`utf-8`),n=Vv(e),i=hy(e,t.json5);if(!i.ok)return{snapshot:{path:r,exists:!0,raw:e,parsed:{},resolved:{},valid:!1,config:{},hash:n,issues:[{path:``,message:`JSON5 parse failed: ${i.error}`}],warnings:[],legacyIssues:[]}};let a;try{a=gy(i.parsed,r,t)}catch(t){let a=t instanceof R?t.message:`Include resolution failed: ${String(t)}`;return{snapshot:{path:r,exists:!0,raw:e,parsed:i.parsed,resolved:Xv(i.parsed),valid:!1,config:Xv(i.parsed),hash:n,issues:[{path:``,message:a}],warnings:[],legacyIssues:[]}}}let o;try{o=_y(a,t.env)}catch(t){let o=t instanceof Zd?t.message:`Env var substitution failed: ${String(t)}`;return{snapshot:{path:r,exists:!0,raw:e,parsed:i.parsed,resolved:Xv(a),valid:!1,config:Xv(a),hash:n,issues:[{path:``,message:o}],warnings:[],legacyIssues:[]}}}let s=Rv(o.resolvedConfigRaw),c=s.config,u=Yf(c),d=Ep(c),f=kv(d.config);if(!f.ok)return{snapshot:{path:r,exists:!0,raw:e,parsed:i.parsed,resolved:Xv(c),valid:!1,config:Xv(c),hash:n,issues:f.issues,warnings:f.warnings,legacyIssues:u}};dy(f.config,t.logger);let p=Sp(zd(Bd(Vd(Hd(Rd(Ud(Ld(f.config))))))));gp(p);let m=Ep(p),h=m.config,g=[...new Set([...d.repairedPluginIds,...m.repairedPluginIds])].toSorted((e,t)=>e.localeCompare(t)),_=Xv(d.config);if(s.removedPluginIds.length>0){let e=`${r}:legacy-removed-plugins`;Sy.has(e)||(Sy.add(e),l(h,{expectedConfigPath:r}).catch(()=>{}).finally(()=>{Sy.delete(e)}))}if(g.length>0){let e=`${r}:installed-plugin-allowlist`;Cy.has(e)||(Cy.add(e),l(h,{expectedConfigPath:r}).catch(()=>{}).finally(()=>{Cy.delete(e)}))}return{snapshot:{path:r,exists:!0,raw:e,parsed:i.parsed,resolved:_,valid:!0,config:h,hash:n,issues:[],warnings:f.warnings,legacyIssues:u},envSnapshotForRestore:o.envSnapshotForRestore}}catch(e){let n=e,i;if(n?.code===`EACCES`){let n=process.getuid?.(),a=typeof n==`number`?String(n):`$(id -u)`;i=[`read failed: ${String(e)}`,``,`Config file is not readable by the current process. If running in a container`,`or 1-click deployment, fix ownership with:`,` chown ${a} "${r}"`,`Then restart the gateway.`].join(`
6
- `),t.logger.error(i)}else i=`read failed: ${String(e)}`;return{snapshot:{path:r,exists:!0,raw:null,parsed:{},resolved:{},valid:!1,config:{},hash:Vv(null),issues:[{path:``,message:i}],warnings:[],legacyIssues:[]}}}}async function s(){return(await o()).snapshot}async function c(){let e=await o();return{snapshot:e.snapshot,writeOptions:{envSnapshotForRestore:e.envSnapshotForRestore,expectedConfigPath:r}}}async function l(e,n={}){let a=e,{snapshot:s}=await o(),c=null,l=null;if(s.valid&&s.exists){let n=ey(s.config,e);a=Qf(s.resolved,n);try{let n=hf(s.parsed,r,{readFile:e=>t.fs.readFileSync(e,`utf-8`),readFileWithGuards:({includePath:e,resolvedPath:n,rootRealDir:r})=>pf({includePath:e,resolvedPath:n,rootRealDir:r,ioFs:t.fs}),parseJson:e=>t.json5.parse(e)}),i=new Map;ty(n,``,i),i.size>0&&(c=i,l=new Set,ny(s.config,e,``,l))}catch{c=null}}let u=Av(a);if(!u.ok){let e=u.issues[0],t=e?.path?e.path:`<root>`,n=e?.message??`invalid`;throw Error(Hv(t,n))}if(u.warnings.length>0){let e=u.warnings.map(e=>`- ${e.path}: ${e.message}`).join(`
7
- `);t.logger.warn(`Config warnings:\n${e}`)}let d=u.config;try{if(t.fs.existsSync(r)){let e=hy(await t.fs.promises.readFile(r,`utf-8`),t.json5);if(e.ok){let r=n.envSnapshotForRestore??t.env;d=Yd(d,e.parsed,r)}}}catch{}let f=i.dirname(r);await t.fs.promises.mkdir(f,{recursive:!0,mode:448});let p=c&&l?ay(d,``,c,l):d;if(n.unsetPaths?.length)for(let e of n.unsetPaths){if(!Array.isArray(e)||e.length===0)continue;let t=Jv(p,e);t.changed&&(p=t.next)}let m=uy(p),h=JSON.stringify(m,null,2).trimEnd().concat(`
8
- `),g=Vv(h),v=Yv(s),ee=l?.size,y=typeof s.raw==`string`?Buffer.byteLength(s.raw,`utf-8`):null,b=Buffer.byteLength(h,`utf-8`),te=Zv(s.parsed),ne=Zv(m),re=Qv(s.resolved),ie=Qv(m),ae=sy({existsBefore:s.exists,previousBytes:y,nextBytes:b,hasMetaBefore:te,gatewayModeBefore:re,gatewayModeAfter:ie}),oe=()=>{if(t.env.FASED_SUPPRESS_CONFIG_OVERWRITE_LOG===`1`||!s.exists)return;let e=t.env.VITEST===`true`,n=t.env.FASED_TEST_CONFIG_OVERWRITE_LOG===`1`;if(e&&!n)return;let i=typeof ee==`number`?`, changedPaths=${ee}`:``;t.logger.warn(`Config overwrite: ${r} (sha256 ${v??`unknown`} -> ${g}, backup=${r}.bak${i})`)},se=()=>{if(t.env.FASED_SUPPRESS_CONFIG_OVERWRITE_LOG===`1`||ae.length===0)return;let e=t.env.VITEST===`true`,n=t.env.FASED_TEST_CONFIG_WRITE_ANOMALY_LOG===`1`;e&&!n||t.logger.warn(`Config write anomaly: ${r} (${ae.join(`, `)})`)},ce={ts:new Date().toISOString(),source:`config-io`,event:`config.write`,configPath:r,pid:process.pid,ppid:process.ppid,cwd:process.cwd(),argv:process.argv.slice(0,8),execArgv:process.execArgv.slice(0,8),watchMode:t.env.FASED_WATCH_MODE===`1`,watchSession:typeof t.env.FASED_WATCH_SESSION==`string`&&t.env.FASED_WATCH_SESSION.trim().length>0?t.env.FASED_WATCH_SESSION.trim():null,watchCommand:typeof t.env.FASED_WATCH_COMMAND==`string`&&t.env.FASED_WATCH_COMMAND.trim().length>0?t.env.FASED_WATCH_COMMAND.trim():null,existsBefore:s.exists,previousHash:v??null,nextHash:g,previousBytes:y,nextBytes:b,changedPathCount:typeof ee==`number`?ee:null,hasMetaBefore:te,hasMetaAfter:ne,gatewayModeBefore:re,gatewayModeAfter:ie,suspicious:ae},le=async(e,n)=>{let r=n&&typeof n==`object`&&`code`in n&&typeof n.code==`string`?n.code:void 0,i=n&&typeof n==`object`&&`message`in n&&typeof n.message==`string`?n.message:void 0;await cy(t,{...ce,result:e,nextHash:e===`failed`?null:ce.nextHash,nextBytes:e===`failed`?null:ce.nextBytes,errorCode:r,errorMessage:i})},ue=i.join(f,`${i.basename(r)}.${process.pid}.${_.randomUUID()}.tmp`);try{await t.fs.promises.writeFile(ue,h,{encoding:`utf-8`,mode:384}),t.fs.existsSync(r)&&(await ia(r,t.fs.promises),await t.fs.promises.copyFile(r,`${r}.bak`).catch(()=>{}));try{await t.fs.promises.rename(ue,r)}catch(e){let n=e.code;if(n===`EPERM`||n===`EEXIST`){await t.fs.promises.copyFile(ue,r),await t.fs.promises.chmod(r,384).catch(()=>{}),await t.fs.promises.unlink(ue).catch(()=>{}),oe(),se(),await le(`copy-fallback`);return}throw await t.fs.promises.unlink(ue).catch(()=>{}),e}oe(),se(),await le(`rename`)}catch(e){throw await le(`failed`,e),e}}return{configPath:r,loadConfig:a,readConfigFileSnapshot:s,readConfigFileSnapshotForWrite:c,writeConfigFile:l}}const yy=new Map,by=new Set,xy=new Set,Sy=new Set,Cy=new Set;async function wy(){return await vy().readConfigFileSnapshot()}function Ty(e,t){return t<=0?``:e.repeat(t)}function Ey(e,t,n){let r=Rt(e);if(r>=t)return e;let i=t-r;if(n===`right`)return`${Ty(` `,i)}${e}`;if(n===`center`){let t=Math.floor(i/2),n=i-t;return`${Ty(` `,t)}${e}${Ty(` `,n)}`}return`${e}${Ty(` `,i)}`}function Dy(e,t){if(t<=0)return[e];let n=[];for(let t=0;t<e.length;){if(e[t]===`\x1B`){if(e[t+1]===`[`){let r=t+2;for(;r<e.length;){let t=e[r];if(t===`m`)break;if(t&&t>=`0`&&t<=`9`){r+=1;continue}if(t===`;`){r+=1;continue}break}if(e[r]===`m`){n.push({kind:`ansi`,value:e.slice(t,r+1)}),t=r+1;continue}}if(e[t+1]===`]`&&e.slice(t+2,t+5)===`8;;`){let r=e.indexOf(`\x1B\\`,t+5);if(r>=0){n.push({kind:`ansi`,value:e.slice(t,r+2)}),t=r+2;continue}}}let r=e.codePointAt(t);if(!r)break;let i=String.fromCodePoint(r);n.push({kind:`char`,value:i}),t+=i.length}let r=n.findIndex(e=>e.kind===`char`);if(r<0)return[e];let i=-1;for(let e=n.length-1;e>=0;--e)if(n[e]?.kind===`char`){i=e;break}let a=n.slice(0,r).filter(e=>e.kind===`ansi`).map(e=>e.value).join(``),o=n.slice(i+1).filter(e=>e.kind===`ansi`).map(e=>e.value).join(``),s=n.slice(r,i+1),c=[],l=e=>e===` `||e===` `||e===`/`||e===`-`||e===`_`||e===`.`,u=e=>e===` `||e===` `,d=!1,f=[],p=0,m=null,h=e=>(e??f).map(e=>e.value).join(``),g=e=>e.reduce((e,t)=>e+(t.kind===`char`?1:0),0),_=e=>{let t=e.replace(/\s+$/,``);t.trim().length!==0&&c.push(t)},v=e=>{if(f.length===0)return;if(e==null||e<=0){_(h()),f.length=0,p=0,m=null;return}let t=f.slice(0,e),n=f.slice(e);for(_(h(t));n.length>0&&n[0]?.kind===`char`&&u(n[0].value);)n.shift();f.length=0,f.push(...n),p=g(f),m=null};for(let e of s){if(e.kind===`ansi`){f.push(e);continue}let n=e.value;if(!(d&&(d=!1,n===`
1
+ import{createRequire as e}from"node:module";import t from"node:process";import n,{constants as r}from"node:fs";import i from"node:path";import a from"node:fs/promises";import{fileURLToPath as o}from"node:url";import{execFile as s,execFileSync as c,spawn as l}from"node:child_process";import{isDeepStrictEqual as u,promisify as d}from"node:util";import{Logger as f}from"tslog";import p from"node:os";import m from"json5";import h,{Chalk as g}from"chalk";import _ from"node:crypto";import v from"dotenv";import"jszip";import"tar";import{getOAuthProviders as ee}from"@mariozechner/pi-ai/oauth";import te from"ajv";import{z as y}from"zod";function ne(e){return!e||e===`--`?!1:e.startsWith(`-`)?/^-\d+(?:\.\d+)?$/.test(e):!0}function re(e,t){let n=e.slice(2);for(let e of n){if(e===`--`)break;if(e===t)return!0}return!1}function ie(e,t){let n=e.slice(2);for(let e=0;e<n.length;e+=1){let r=n[e];if(r===`--`)break;if(r===t){let t=n[e+1];return ne(t)?t:null}if(r.startsWith(`${t}=`))return r.slice(t.length+1)||null}}const ae=`fased`,oe=new Set([ae]),se=/^(?:((?:pnpm|npm|bunx|npx)\s+))?(fased)\b/;function ce(e=process.argv){let t=e[1];if(!t)return ae;let n=i.basename(t).trim();return oe.has(n)?n:ae}function le(e,t=ce()){return!e.trim()||!se.test(e)?e:e.replace(se,(e,n)=>`${n??``}${t}`)}const ue=/^[a-z0-9][a-z0-9_-]{0,63}$/i;function de(e){return e?ue.test(e):!1}function fe(e){let t=e?.trim();return!t||t.toLowerCase()===`default`||!de(t)?null:t}const pe=/^(?:pnpm|npm|bunx|npx)\s+fased\b|^fased\b|^node\s+scripts\/run-node\.mjs\b/,me=/(?:^|\s)--profile(?:\s|=|$)/,he=/(?:^|\s)--dev(?:\s|$)/;function ge(e=process.argv){let t=ce(e),r=e[1];if(!r||i.basename(r).trim()!==`run-node.mjs`)return t;let a=i.resolve(process.cwd(),`scripts`,`run-node.mjs`);return n.existsSync(a)?`node scripts/run-node.mjs`:t}function _e(e,t=process.env){let n=ce(),r=ge(),i=le(e,n);r!==n&&pe.test(i)&&(i=i.replace(pe,r));let a=fe(t.FASED_PROFILE);return!a||!pe.test(i)||me.test(i)||he.test(i)?i:i.replace(pe,e=>`${e} --profile ${a}`)}const ve=new Set([`fased`,`@fased/fased`]);async function ye(e){try{let t=await a.readFile(i.join(e,`package.json`),`utf-8`),n=JSON.parse(t);return typeof n.name==`string`?n.name:null}catch{return null}}function be(e){try{let t=n.readFileSync(i.join(e,`package.json`),`utf-8`),r=JSON.parse(t);return typeof r.name==`string`?r.name:null}catch{return null}}async function xe(e,t=12){for(let n of Ce(e,t)){let e=await ye(n);if(e&&ve.has(e))return n}return null}function Se(e,t=12){for(let n of Ce(e,t)){let e=be(n);if(e&&ve.has(e))return n}return null}function*Ce(e,t){let n=i.resolve(e);for(let e=0;e<t;e+=1){yield n;let e=i.dirname(n);if(e===n)break;n=e}}function we(e){let t=i.resolve(e),r=[i.dirname(t)];try{let e=n.realpathSync(t);e!==t&&r.push(i.dirname(e))}catch{}let a=t.split(i.sep),o=a.lastIndexOf(`.bin`);if(o>0&&a[o-1]===`node_modules`){let e=i.basename(t),n=a.slice(0,o).join(i.sep);r.push(i.join(n,e))}return r}async function Te(e){for(let t of De(e)){let e=await xe(t);if(e)return e}return null}function Ee(e){for(let t of De(e)){let e=Se(t);if(e)return e}return null}function De(e){let t=[];return e.moduleUrl&&t.push(i.dirname(o(e.moduleUrl))),e.argv1&&t.push(...we(e.argv1)),e.cwd&&t.push(e.cwd),t}const Oe=`/tmp/fased`,ke=n.constants.W_OK|n.constants.X_OK;function Ae(e,t){return typeof e==`object`&&!!e&&`code`in e&&e.code===t}function je(e={}){let t=e.accessSync??n.accessSync,r=e.chmodSync??n.chmodSync,a=e.lstatSync??n.lstatSync,o=e.mkdirSync??n.mkdirSync,s=e.warn??(e=>console.warn(e)),c=e.getuid??(()=>{try{return typeof process.getuid==`function`?process.getuid():void 0}catch{return}}),l=e.tmpdir??p.tmpdir,u=c(),d=e=>u===void 0?!0:!(typeof e.uid==`number`&&e.uid!==u||typeof e.mode==`number`&&e.mode&18),f=()=>{let e=l(),t=u===void 0?`fased`:`fased-${u}`;return i.join(e,t)},m=e=>e.isDirectory()&&!e.isSymbolicLink()&&d(e),h=e=>{try{return m(a(e))?(t(e,ke),`available`):`invalid`}catch(e){return Ae(e,`ENOENT`)?`missing`:`invalid`}},g=e=>{try{let t=a(e);return!t.isDirectory()||t.isSymbolicLink()||u!==void 0&&typeof t.uid==`number`&&t.uid!==u||typeof t.mode!=`number`||!(t.mode&18)?!1:(r(e,448),s(`[fased] tightened permissions on temp dir: ${e}`),h(e)===`available`)}catch{return!1}},_=()=>{let e=f(),t=h(e);if(t===`available`)return e;if(t===`invalid`){if(g(e))return e;throw Error(`Unsafe fallback FasedAgent temp dir: ${e}`)}try{o(e,{recursive:!0,mode:448}),r(e,448)}catch{throw Error(`Unable to create fallback FasedAgent temp dir: ${e}`)}if(h(e)!==`available`&&!g(e))throw Error(`Unsafe fallback FasedAgent temp dir: ${e}`);return e},v=h(Oe);if(v===`available`)return Oe;if(v===`invalid`)return g(Oe)?Oe:_();try{return t(`/tmp`,ke),o(Oe,{recursive:!0,mode:448}),r(Oe,448),h(Oe)!==`available`&&!g(Oe)?_():Oe}catch{return _()}}function Me(e){return e?.trim()||void 0}function Ne(e=process.env,t=p.homedir){let n=Pe(e,t);return n?i.resolve(n):void 0}function Pe(e,t){let n=Me(e.FASED_HOME);if(n){if(n===`~`||n.startsWith(`~/`)||n.startsWith(`~\\`)){let r=Me(e.HOME)??Me(e.USERPROFILE)??Fe(t);return r?n.replace(/^~(?=$|[\\/])/,r):void 0}return n}return Me(e.HOME)||Me(e.USERPROFILE)||Fe(t)}function Fe(e){try{return Me(e())}catch{return}}function b(e=process.env,t=p.homedir){return Ne(e,t)??i.resolve(process.cwd())}function Ie(e,t){if(!e.startsWith(`~`))return e;let n=Me(t?.home)??Ne(t?.env??process.env,t?.homedir??p.homedir);return n?e.replace(/^~(?=$|[\\/])/,n):e}function Le(e=process.env){return e.FASED_NIX_MODE===`1`}Le();const Re=`fased.json`;function ze(){return b(process.env,p.homedir)}function Be(e){return()=>b(e,p.homedir)}function Ve(e=ze){return i.join(e(),`.fased`)}function x(e=process.env,t=Be(e)){let n=()=>b(e,t),r=e.FASED_STATE_DIR?.trim();return r?He(r,e,n):Ve(n)}function He(e,t=process.env,n=Be(t)){let r=e.trim();if(!r)return r;if(r.startsWith(`~`)){let e=Ie(r,{home:b(t,n),env:t,homedir:n});return i.resolve(e)}return i.resolve(r)}x();function Ue(e=process.env,t=x(e,Be(e))){let n=e.FASED_CONFIG_PATH?.trim();return n?He(n,e,Be(e)):i.join(t,Re)}function We(e=process.env,t=Be(e)){return Ke(e,t).find(e=>{try{return n.existsSync(e)}catch{return!1}})||Ue(e,x(e,t))}function Ge(e=process.env,t=x(e,Be(e)),r=Be(e)){let a=e.FASED_CONFIG_PATH?.trim();if(a)return He(a,e,r);let o=e.FASED_STATE_DIR?.trim(),s=[i.join(t,Re)].find(e=>{try{return n.existsSync(e)}catch{return!1}});if(s)return s;if(o)return i.join(t,Re);let c=x(e,r);return i.resolve(t)===i.resolve(c)?We(e,r):i.join(t,Re)}We();function Ke(e=process.env,t=Be(e)){let n=()=>b(e,t),r=e.FASED_CONFIG_PATH?.trim();if(r)return[He(r,e,n)];let a=[],o=e.FASED_STATE_DIR?.trim();if(o){let t=He(o,e,n);a.push(i.join(t,Re))}return a.push(i.join(Ve(n),Re)),a}function qe(){let e=Ge();try{if(!n.existsSync(e))return;let t=n.readFileSync(e,`utf-8`),r=m.parse(t)?.logging;return!r||typeof r!=`object`||Array.isArray(r)?void 0:r}catch{return}}const Je=[`silent`,`fatal`,`error`,`warn`,`info`,`debug`,`trace`];function Ye(e){if(typeof e!=`string`)return;let t=e.trim();return Je.includes(t)?t:void 0}function Xe(e,t=`info`){return Ye(e)??t}function Ze(e){return{fatal:0,error:1,warn:2,info:3,debug:4,trace:5,silent:1/0}[e]}const S={cachedLogger:null,cachedSettings:null,cachedConsoleSettings:null,overrideSettings:null,invalidEnvLogLevelValue:null,consolePatched:!1,forceConsoleToStderr:!1,consoleTimestampPrefix:!1,consoleSubsystemFilter:null,resolvingConsoleSettings:!1,streamErrorHandlersInstalled:!1,rawConsole:null};function Qe(){let e=process.env.FASED_LOG_LEVEL,t=typeof e==`string`?e.trim():``;if(!t){S.invalidEnvLogLevelValue=null;return}let n=Ye(t);if(n)return S.invalidEnvLogLevelValue=null,n;S.invalidEnvLogLevelValue!==t&&(S.invalidEnvLogLevelValue=t,process.stderr.write(`[fased] Ignoring invalid FASED_LOG_LEVEL="${t}" (allowed: ${Je.join(`|`)}).\n`))}function $e(e){let t=process.getBuiltinModule;if(typeof t!=`function`)return null;try{let n=t(`module`),r=typeof n.createRequire==`function`?n.createRequire:null;return r?r(e):null}catch{return null}}const et=je();i.join(et,`fased.log`);const tt=`fased`,nt=`.log`,rt=$e(import.meta.url),it=new Set;function at(e,t){e.attachTransport(e=>{if(it.has(t))try{t(e)}catch{}})}function ot(){let e=S.overrideSettings??qe();if(!e)try{e=(rt?.(`../config/config.js`))?.loadConfig?.().logging}catch{e=void 0}let t=process.env.VITEST===`true`&&process.env.FASED_TEST_FILE_LOG!==`1`?`silent`:`info`,n=Xe(e?.level,t);return{level:Qe()??n,file:e?.file??gt(),maxFileBytes:ut(e?.maxFileBytes)}}function st(e,t){return e?e.level!==t.level||e.file!==t.file||e.maxFileBytes!==t.maxFileBytes:!0}function ct(e){let t=S.cachedSettings??ot();return S.cachedSettings||=t,t.level===`silent`?!1:Ze(e)<=Ze(t.level)}function lt(e){n.mkdirSync(i.dirname(e.file),{recursive:!0}),_t(e.file)&&vt(i.dirname(e.file));let t=dt(e.file),r=!1,a=new f({name:`fased`,minLevel:Ze(e.level),type:`hidden`});a.attachTransport(n=>{try{let i=n.date?.toISOString?.()??new Date().toISOString(),a=`${JSON.stringify({...n,time:i})}\n`,o=Buffer.byteLength(a,`utf8`),s=t+o;if(s>e.maxFileBytes){if(!r){r=!0;let t=JSON.stringify({time:new Date().toISOString(),level:`warn`,subsystem:`logging`,message:`log file size cap reached; suppressing writes file=${e.file} maxFileBytes=${e.maxFileBytes}`});ft(e.file,`${t}\n`),process.stderr.write(`[fased] log file size cap reached; suppressing writes file=${e.file} maxFileBytes=${e.maxFileBytes}\n`)}return}ft(e.file,a)&&(t=s)}catch{}});for(let e of it)at(a,e);return a}function ut(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):524288e3}function dt(e){try{return n.statSync(e).size}catch{return 0}}function ft(e,t){try{return n.appendFileSync(e,t,{encoding:`utf8`}),!0}catch{return!1}}function pt(){let e=ot(),t=S.cachedLogger,n=S.cachedSettings;return(!t||st(n,e))&&(S.cachedLogger=lt(e),S.cachedSettings=e),S.cachedLogger}function mt(e,t){let n=pt(),r=t?.level?Ze(t.level):void 0,i=e?JSON.stringify(e):void 0;return n.getSubLogger({name:i,minLevel:r,prefix:e?[i??``]:[]})}function ht(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function gt(){let e=ht(new Date);return i.join(et,`${tt}-${e}${nt}`)}function _t(e){let t=i.basename(e);return t.startsWith(`${tt}-`)&&t.endsWith(nt)&&t.length===`${tt}-YYYY-MM-DD${nt}`.length}function vt(e){try{let t=n.readdirSync(e,{withFileTypes:!0}),r=Date.now()-864e5;for(let a of t){if(!a.isFile()||!a.name.startsWith(`${tt}-`)||!a.name.endsWith(nt))continue;let t=i.join(e,a.name);try{n.statSync(t).mtimeMs<r&&n.rmSync(t,{force:!0})}catch{}}}catch{}}const yt={accent:`#22D3EE`,accentBright:`#67E8F9`,accentDim:`#0891B2`,info:`#93C5FD`,success:`#4ADE80`,warn:`#FACC15`,error:`#F87171`,muted:`#A3A3A3`},bt=typeof process.env.FORCE_COLOR==`string`&&process.env.FORCE_COLOR.trim().length>0&&process.env.FORCE_COLOR.trim()!==`0`,C=process.env.NO_COLOR&&!bt?new g({level:0}):h,xt=e=>C.hex(e),St={accent:xt(yt.accent),accentBright:xt(yt.accentBright),accentDim:xt(yt.accentDim),info:xt(yt.info),success:C.green,warn:C.yellow,error:xt(yt.error),muted:xt(yt.muted),noteChrome:C.gray,noteTitle:C.bold.gray,noteHeading:C.bold.yellow,heading:C.bold,command:C.green,option:C.yellow};function Ct(){return!1}const wt=[`telegram`,`whatsapp`,`discord`,`irc`,`googlechat`,`slack`,`signal`,`imessage`],Tt=[...wt],Et=[],Dt={imsg:`imessage`,"internet-relay-chat":`irc`,"google-chat":`googlechat`,gchat:`googlechat`},Ot=e=>e?.trim().toLowerCase()||void 0;function kt(e){let t=Ot(e);if(!t)return null;let n=Dt[t]??t;return wt.includes(n)?n:null}function At(e,t,n){let r=n?` (${n})`:``,i=`[terminal] restore ${e} failed${r}: ${String(t)}`;try{process.stderr.write(`${i}\n`)}catch(e){console.error(`[terminal] restore reporting failed${r}: ${String(e)}`)}}function jt(e,t={}){let n=t.resumeStdinIfPaused??t.resumeStdin??!1,r=process.stdin;if(r.isTTY&&typeof r.setRawMode==`function`){try{r.setRawMode(!1)}catch(t){At(`raw mode`,t,e)}if(n&&typeof r.isPaused==`function`&&r.isPaused())try{r.resume()}catch(t){At(`stdin resume`,t,e)}}if(process.stdout.isTTY)try{process.stdout.write(`\x1B[0m\x1B[?25h\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1006l\x1B[?2004l`)}catch(t){At(`stdout reset`,t,e)}}function Mt(e=process.env){return e.VITEST!==`true`||e.FASED_TEST_RUNTIME_LOG===`1`?!0:typeof console.log.mock==`object`}function Nt(){return{log:(...e)=>{Mt()&&console.log(...e)},error:(...e)=>{console.error(...e)}}}const Pt={...Nt(),exit:e=>{throw jt(`runtime exit`,{resumeStdinIfPaused:!1}),process.exit(e),Error(`unreachable`)}},Ft=RegExp(`\\x1b\\[[0-9;]*m`,`g`),It=RegExp(`\\x1b\\]8;;.*?\\x1b\\\\|\\x1b\\]8;;\\x1b\\\\`,`g`);function Lt(e){return e.replace(It,``).replace(Ft,``)}function Rt(e){return Array.from(Lt(e)).length}const zt=$e(import.meta.url);let Bt=()=>{try{return(zt?.(`../config/config.js`))?.loadConfig?.().logging}catch{return}};function Vt(e){return Ct()?`debug`:!e&&process.env.VITEST===`true`&&process.env.FASED_TEST_CONSOLE!==`1`?`silent`:Xe(e,`info`)}function Ht(e){return e===`compact`||e===`json`||e===`pretty`?e:process.stdout.isTTY?`pretty`:`compact`}function Ut(){let e=S.overrideSettings??qe();if(!e)if(S.resolvingConsoleSettings)e=void 0;else{S.resolvingConsoleSettings=!0;try{e=Bt()}finally{S.resolvingConsoleSettings=!1}}return{level:Qe()??Vt(e?.consoleLevel),style:Ht(e?.consoleStyle)}}function Wt(e,t){return e?e.level!==t.level||e.style!==t.style:!0}function Gt(){let e=Ut(),t=S.cachedConsoleSettings;return(!t||Wt(t,e))&&(S.cachedConsoleSettings=e),S.cachedConsoleSettings}function Kt(e){let t=S.consoleSubsystemFilter;return!t||t.length===0?!0:t.some(t=>e===t||e.startsWith(`${t}/`))}function qt(e,t){return t.level===`silent`?!1:Ze(e)<=Ze(t.level)}(()=>{let e=process.getBuiltinModule;if(typeof e!=`function`)return null;try{let t=e(`util`);return typeof t.inspect==`function`?t.inspect:null}catch{return null}})();function Jt(){let e=(process.env.TERM??``).toLowerCase();return process.env.COLORTERM||process.env.TERM_PROGRAM?!0:e.length>0&&e!==`dumb`}function Yt(){let e=typeof process.env.FORCE_COLOR==`string`&&process.env.FORCE_COLOR.trim().length>0&&process.env.FORCE_COLOR.trim()!==`0`;return process.env.NO_COLOR&&!e?new g({level:0}):process.stdout.isTTY||process.stderr.isTTY||Jt()?new g({level:1}):new g({level:0})}const Xt=[`cyan`,`green`,`yellow`,`blue`,`magenta`,`red`],Zt={"gmail-watcher":`blue`},Qt=[`gateway`,`channels`,`providers`],$t=new Set(wt);function en(e,t){let n=Zt[t];if(n)return e[n];let r=0;for(let e=0;e<t.length;e+=1)r=r*31+t.charCodeAt(e)|0;return e[Xt[Math.abs(r)%Xt.length]]}function tn(e){let t=e.split(`/`).filter(Boolean),n=t.join(`/`)||e;for(;t.length>0&&Qt.includes(t[0]);)t.shift();return t.length===0?n:$t.has(t[0])?t[0]:t.length>2?t.slice(-2).join(`/`):t.join(`/`)}function nn(e,t){if(!t)return e;if(e.startsWith(`[`)){let n=e.indexOf(`]`);if(n>1&&e.slice(1,n).toLowerCase()===t.toLowerCase()){let t=n+1;for(;e[t]===` `;)t+=1;return e.slice(t)}}if(e.slice(0,t.length).toLowerCase()!==t.toLowerCase())return e;let n=e.slice(t.length,t.length+1);if(n!==`:`&&n!==` `)return e;let r=t.length;for(;e[r]===` `;)r+=1;for(e[r]===`:`&&(r+=1);e[r]===` `;)r+=1;return e.slice(r)}function rn(e){let t=e.style===`json`?e.subsystem:tn(e.subsystem);if(e.style===`json`)return JSON.stringify({time:new Date().toISOString(),level:e.level,subsystem:t,message:e.message,...e.meta});let n=Yt(),r=`[${t}]`,i=en(n,t),a=e.level===`error`||e.level===`fatal`?n.red:e.level===`warn`?n.yellow:e.level===`debug`||e.level===`trace`?n.gray:n.cyan,o=nn(e.message,t);return`${[e.style===`pretty`?n.gray(new Date().toISOString().slice(11,19)):S.consoleTimestampPrefix?n.gray(new Date().toISOString()):``,i(r)].filter(Boolean).join(` `)} ${a(o)}`}function an(e,t){let n=process.platform===`win32`&&process.env.GITHUB_ACTIONS===`true`?t.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,`?`).replace(/[\uD800-\uDFFF]/g,`?`):t,r=S.rawConsole??console;S.forceConsoleToStderr||e===`error`||e===`fatal`?(r.error??console.error)(n):e===`warn`?(r.warn??console.warn)(n):(r.log??console.log)(n)}function on(e,t,n,r){if(t===`silent`)return;let i=e[t];typeof i==`function`&&(r&&Object.keys(r).length>0?i.call(e,r,n):i.call(e,n))}function sn(e){let t=null,n=()=>(t||=mt({subsystem:e}),t),r=(t,r,i)=>{let a=Gt(),o,s=i;if(i&&Object.keys(i).length>0){let{consoleMessage:e,...t}=i;typeof e==`string`&&(o=e),s=Object.keys(t).length>0?t:void 0}if(on(n(),t,r,s),!qt(t,{level:a.level})||!Kt(e))return;let c=o??r;!Ct()&&e===`agent/embedded`&&/(sessionId|runId)=probe-/.test(c)||an(t,rn({level:t,subsystem:e,message:a.style===`json`?r:c,style:a.style,meta:s}))},i=t=>qt(t,{level:Gt().level})&&Kt(e),a=e=>ct(e);return{subsystem:e,isEnabled:(e,t=`any`)=>t===`console`?i(e):t===`file`?a(e):i(e)||a(e),trace:(e,t)=>r(`trace`,e,t),debug:(e,t)=>r(`debug`,e,t),info:(e,t)=>r(`info`,e,t),warn:(e,t)=>r(`warn`,e,t),error:(e,t)=>r(`error`,e,t),fatal:(e,t)=>r(`fatal`,e,t),raw:t=>{if(on(n(),`info`,t,{raw:!0}),Kt(e)){if(!Ct()&&e===`agent/embedded`&&/(sessionId|runId)=probe-/.test(t))return;an(`info`,t)}},child:t=>sn(`${e}/${t}`)}}function cn(e){return[e.hasInput?`pipe`:e.preferInherit?`inherit`:`pipe`,`pipe`,`pipe`]}d(s);function ln(e){if(process.platform!==`win32`)return e;let t=i.basename(e).toLowerCase();return i.extname(t)?e:[`npm`,`pnpm`,`yarn`,`npx`].includes(t)?`${e}.cmd`:e}function un(e){return!1}async function dn(e,t){let n=typeof t==`number`?{timeoutMs:t}:t,{timeoutMs:r,cwd:a,input:o,env:s,noOutputTimeoutMs:c}=n,{windowsVerbatimArguments:u}=n,d=o!==void 0,f=(()=>{let t=i.basename(e[0]??``);return t===`npm`||t===`npm.cmd`||t===`npm.exe`?!0:t===`node`||t===`node.exe`?(e[1]??``).includes(`npm-cli.js`):!1})(),p=s?{...process.env,...s}:{...process.env},m=Object.fromEntries(Object.entries(p).filter(([,e])=>e!==void 0).map(([e,t])=>[e,String(t)]));f&&(m.NPM_CONFIG_FUND??=`false`,m.npm_config_fund??=`false`);let h=cn({hasInput:d,preferInherit:!0}),g=ln(e[0]??``),_=l(g,e.slice(1),{stdio:h,cwd:a,env:m,windowsVerbatimArguments:u,...un({resolvedCommand:g,platform:process.platform})?{shell:!0}:{}});return await new Promise((e,t)=>{let n=``,i=``,a=!1,s=!1,l=!1,u=null,f=typeof c==`number`&&Number.isFinite(c)&&c>0,p=()=>{u&&=(clearTimeout(u),null)},m=()=>{!f||a||(p(),u=setTimeout(()=>{a||(l=!0,typeof _.kill==`function`&&_.kill(`SIGKILL`))},Math.floor(c)))},h=setTimeout(()=>{s=!0,typeof _.kill==`function`&&_.kill(`SIGKILL`)},r);m(),d&&_.stdin&&(_.stdin.write(o??``),_.stdin.end()),_.stdout?.on(`data`,e=>{n+=e.toString(),m()}),_.stderr?.on(`data`,e=>{i+=e.toString(),m()}),_.on(`error`,e=>{a||(a=!0,clearTimeout(h),p(),t(e))}),_.on(`close`,(t,r)=>{if(a)return;a=!0,clearTimeout(h),p();let o=l?`no-output-timeout`:s?`timeout`:r==null?`exit`:`signal`;e({pid:_.pid??void 0,stdout:n,stderr:i,code:t,signal:r,killed:_.killed,termination:o,noOutputTimedOut:l})})})}async function fn(e,t,n,r=fetch){let i=new AbortController,a=setTimeout(i.abort.bind(i),Math.max(1,n));try{return await r(e,{...t,signal:i.signal})}finally{clearTimeout(a)}}async function pn(e){try{let t=await a.readFile(i.join(e,`package.json`),`utf-8`),n=JSON.parse(t)?.packageManager?.split(`@`)[0]?.trim();if(n===`pnpm`||n===`bun`||n===`npm`)return n}catch{}let t=await a.readdir(e).catch(()=>[]);return t.includes(`pnpm-lock.yaml`)?`pnpm`:t.includes(`bun.lockb`)?`bun`:t.includes(`package-lock.json`)?`npm`:null}function mn(e){if(!e)return null;let t=e.trim().toLowerCase();return t===`stable`||t===`beta`||t===`dev`?t:null}function hn(e){return/(?:^|[.-])beta(?:[.-]|$)/i.test(e)}function gn(e){if(e.configChannel)return{channel:e.configChannel,source:`config`};if(e.installKind===`git`){let t=e.git?.tag;return t?{channel:hn(t)?`beta`:`stable`,source:`git-tag`}:{channel:`stable`,source:`default`}}return e.installKind,{channel:`stable`,source:`default`}}function _n(e){return e.source===`config`?`${e.channel} (config)`:e.source===`git-tag`?e.gitTag?`${e.channel} (${e.gitTag})`:`${e.channel} (tag)`:e.source===`git-branch`?e.gitBranch?`${e.channel} (${e.gitBranch})`:`${e.channel} (branch)`:`${e.channel} (default)`}function vn(e){let t=gn({configChannel:e.configChannel,installKind:e.installKind,git:e.gitTag||e.gitBranch?{tag:e.gitTag??null,branch:e.gitBranch??null}:void 0});return{channel:t.channel,source:t.source,label:_n({channel:t.channel,source:t.source,gitTag:e.gitTag??null,gitBranch:e.gitBranch??null})}}function w(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.prototype.toString.call(e)===`[object Object]`}function T(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function E(e,t=process.env,n=p.homedir){if(!e)return``;let r=e.trim();if(!r)return r;if(r.startsWith(`~`)){let e=Ie(r,{home:b(t,n),env:t,homedir:n});return i.resolve(e)}return i.resolve(r)}function yn(e=process.env,t=p.homedir){let r=e.FASED_STATE_DIR?.trim()||e.FASED_CONFIG_DIR?.trim();if(r)return E(r);let a=i.join(b(e,t),`.fased`);try{if(n.existsSync(a))return a}catch{}return a}function bn(){return Ne(process.env,p.homedir)}function xn(){let e=bn();if(e)return process.env.FASED_HOME?.trim()?{home:e,prefix:`$FASED_HOME`}:{home:e,prefix:`~`}}function Sn(e){if(!e)return e;let t=xn();return t?e.split(t.home).join(t.prefix):e}function Cn(e){return Sn(e)}yn();function wn(e){let t=i.dirname(e);return i.basename(t).startsWith(`@`)?i.dirname(t):t}function Tn(e){let t=i.resolve(e),n=`${i.sep}.fased${i.sep}install-cache${i.sep}npm-global`,r=`${n}${`${i.sep}lib${i.sep}node_modules`}`,a=t.indexOf(`${r}${i.sep}`);if(a<0)return null;let o=t.slice(0,a+n.length),s=i.join(o,`lib`,`node_modules`),c=i.join(i.dirname(o),`npm-cache`),l=wn(t);return i.resolve(l)===i.resolve(s)?{manager:`npm`,globalRoot:s,cacheRoot:i.dirname(o),env:{npm_config_prefix:o,npm_config_cache:c}}:null}async function En(e){try{return await a.access(e),!0}catch{return!1}}async function Dn(e){return await pn(e)??`unknown`}async function On(e){let t=await dn([`git`,`-C`,e,`rev-parse`,`--show-toplevel`],{timeoutMs:4e3}).catch(()=>null);if(!t||t.code!==0)return null;let n=t.stdout.trim();return n?i.resolve(n):null}async function kn(e){let t=e.timeoutMs??6e3,n=i.resolve(e.root),r={root:n,sha:null,tag:null,branch:null,upstream:null,dirty:null,ahead:null,behind:null,fetchOk:null},a=await dn([`git`,`-C`,n,`rev-parse`,`--abbrev-ref`,`HEAD`],{timeoutMs:t}).catch(()=>null);if(!a||a.code!==0)return{...r,error:a?.stderr?.trim()||`git unavailable`};let o=a.stdout.trim()||null,s=await dn([`git`,`-C`,n,`rev-parse`,`HEAD`],{timeoutMs:t}).catch(()=>null),c=s&&s.code===0?s.stdout.trim():null,l=await dn([`git`,`-C`,n,`describe`,`--tags`,`--exact-match`],{timeoutMs:t}).catch(()=>null),u=l&&l.code===0?l.stdout.trim():null,d=await dn([`git`,`-C`,n,`rev-parse`,`--abbrev-ref`,`@{upstream}`],{timeoutMs:t}).catch(()=>null),f=d&&d.code===0?d.stdout.trim():null,p=await dn([`git`,`-C`,n,`status`,`--porcelain`,`--`,`:!dist/control-ui/`],{timeoutMs:t}).catch(()=>null),m=p&&p.code===0?p.stdout.trim().length>0:null,h=e.fetch?await dn([`git`,`-C`,n,`fetch`,`--quiet`,`--prune`],{timeoutMs:t}).then(e=>e.code===0).catch(()=>!1):null,g=f&&f.length>0?await dn([`git`,`-C`,n,`rev-list`,`--left-right`,`--count`,`HEAD...${f}`],{timeoutMs:t}).catch(()=>null):null,_=g&&g.code===0?(e=>{let t=e.trim().split(/\s+/);if(t.length<2)return null;let n=Number.parseInt(t[0]??``,10),r=Number.parseInt(t[1]??``,10);return!Number.isFinite(n)||!Number.isFinite(r)?null:{ahead:n,behind:r}})(g.stdout):null;return{root:n,sha:c,tag:u,branch:o,upstream:f,dirty:m,ahead:_?.ahead??null,behind:_?.behind??null,fetchOk:h}}async function An(e){try{return(await a.stat(e)).mtimeMs}catch{return null}}function jn(e){let t=e.root;return e.manager===`pnpm`?{lockfilePath:i.join(t,`pnpm-lock.yaml`),markerPath:i.join(t,`node_modules`,`.modules.yaml`)}:e.manager===`bun`?{lockfilePath:i.join(t,`bun.lockb`),markerPath:i.join(t,`node_modules`)}:e.manager===`npm`?{lockfilePath:i.join(t,`package-lock.json`),markerPath:i.join(t,`node_modules`)}:{lockfilePath:null,markerPath:null}}async function Mn(e){let{lockfilePath:t,markerPath:n}=jn({root:i.resolve(e.root),manager:e.manager});if(!t||!n)return{manager:e.manager,status:`unknown`,lockfilePath:t,markerPath:n,reason:`unknown package manager`};let r=await En(t),a=await En(n);if(!r)return{manager:e.manager,status:`unknown`,lockfilePath:t,markerPath:n,reason:`lockfile missing`};if(!a)return{manager:e.manager,status:`missing`,lockfilePath:t,markerPath:n,reason:`node_modules marker missing`};let o=await An(t),s=await An(n);return!o||!s?{manager:e.manager,status:`unknown`,lockfilePath:t,markerPath:n}:o>s+1e3?{manager:e.manager,status:`stale`,lockfilePath:t,markerPath:n,reason:`lockfile newer than install marker`}:{manager:e.manager,status:`ok`,lockfilePath:t,markerPath:n}}async function Nn(e){let t=await Pn({tag:`latest`,timeoutMs:e?.timeoutMs});return{latestVersion:t.version,error:t.error}}async function Pn(e){let t=e?.timeoutMs??3500,n=e.tag;try{let e=await fn(`https://registry.npmjs.org/%40fased%2Ffased/${encodeURIComponent(n)}`,{},Math.max(250,t));if(!e.ok)return{tag:n,version:null,error:`HTTP ${e.status}`};let r=await e.json();return{tag:n,version:typeof r?.version==`string`?r.version:null}}catch(e){return{tag:n,version:null,error:String(e)}}}function Fn(e,t){let n=In(e),r=In(t);return!n||!r?null:n.major===r.major?n.minor===r.minor?n.patch===r.patch?Rn(n.prerelease,r.prerelease):n.patch<r.patch?-1:1:n.minor<r.minor?-1:1:n.major<r.major?-1:1}function In(e){if(!e)return null;let t=Ln(e.trim()),n=/^v?([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(t);if(!n)return null;let[,r,i,a,o]=n;return!r||!i||!a?null:{major:Number.parseInt(r,10),minor:Number.parseInt(i,10),patch:Number.parseInt(a,10),prerelease:o?o.split(`.`).filter(Boolean):null}}function Ln(e){let t=e.trim(),n=/^([vV]?[0-9]+\.[0-9]+\.[0-9]+)\.beta(?:\.([0-9A-Za-z.-]+))?$/.exec(t);if(!n)return t;let r=n[1],i=n[2];return i?`${r}-beta.${i}`:`${r}-beta`}function Rn(e,t){if(!e?.length&&!t?.length)return 0;if(!e?.length)return 1;if(!t?.length)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(n==null&&i==null)return 0;if(n==null)return-1;if(i==null)return 1;if(n===i)continue;let a=/^[0-9]+$/.test(n),o=/^[0-9]+$/.test(i);return a&&o?Number.parseInt(n,10)<Number.parseInt(i,10)?-1:1:a&&!o?-1:!a&&o?1:n<i?-1:1}return 0}async function zn(e){let t=e.timeoutMs??6e3,n=e.root?i.resolve(e.root):null;if(!n)return{root:null,installKind:`unknown`,packageManager:`unknown`,registry:e.includeRegistry?await Nn({timeoutMs:t}):void 0};let r=await On(n),a=r&&i.resolve(r)===n,o=a?`git`:`package`,s=!a&&Tn(n)?`npm`:await Dn(n);return{root:n,installKind:o,packageManager:s,git:a?await kn({root:n,timeoutMs:t,fetch:!!e.fetchGit}):void 0,deps:await Mn({root:n,manager:s}),registry:e.includeRegistry?await Nn({timeoutMs:t}):void 0}}const Bn=new Set([`fased`,`@fased/fased`]),Vn=[`../package.json`,`../../package.json`,`../../../package.json`,`./package.json`],Hn=[`../build-info.json`,`../../build-info.json`,`./build-info.json`];function Un(t,n,r={}){try{let i=e(t);for(let e of n)try{let t=i(e),n=t.version?.trim();if(!n||r.requirePackageName&&!Bn.has(t.name??``))continue;return n}catch{}return null}catch{return null}}function Wn(...e){for(let t of e){let e=t?.trim();if(e)return e}}function Gn(e){return Un(e,Vn,{requirePackageName:!0})}function Kn(e){return Un(e,Hn)}function qn(e){return Gn(e)||Kn(e)}function Jn(e=process.env,t=`dev`){return Wn(e.FASED_VERSION,e.FASED_SERVICE_VERSION,e.npm_package_version)??t}const Yn=typeof __FASED_VERSION__==`string`&&__FASED_VERSION__||process.env.FASED_BUNDLED_VERSION||qn(import.meta.url)||`0.0.0`;function Xn(e,t={}){let n=e.registry?.latestVersion??null,r=n?Fn(Yn,n):null,i=r!=null&&r<0,a=(t.channel==null||t.channel===`dev`)&&e.installKind===`git`&&typeof e.git?.behind==`number`?e.git.behind:null,o=a!=null&&a>0;return{available:o||i,hasGitUpdate:o,hasRegistryUpdate:i,latestVersion:i?n:null,gitBehind:a}}function Zn(e,t={}){let n=Xn(e,t);if(!n.available)return null;let r=[];return n.hasGitUpdate&&n.gitBehind!=null&&r.push(`git behind ${n.gitBehind}`),n.hasRegistryUpdate&&n.latestVersion&&r.push(`npm ${n.latestVersion}`),`Update available${r.length>0?` (${r.join(` · `)})`:``}. Run: ${_e(`fased update`)}`}function Qn(e,t={}){let n=[],r=()=>{if(e.registry?.latestVersion){let t=Fn(Yn,e.registry.latestVersion);t===0?n.push(`npm latest ${e.registry.latestVersion}`):t!=null&&t<0?n.push(`npm update ${e.registry.latestVersion}`):n.push(`npm latest ${e.registry.latestVersion} (local newer)`);return}e.registry?.error&&n.push(`npm latest unknown`)};if(e.installKind===`git`&&e.git){if(t.channel&&t.channel!==`dev`)n.push(`${t.channel} channel`),e.git.dirty===!0&&n.push(`dirty`);else{let t=e.git.branch?`git ${e.git.branch}`:`git`;n.push(t),e.git.upstream&&n.push(`↔ ${e.git.upstream}`),e.git.dirty===!0&&n.push(`dirty`),e.git.behind!=null&&e.git.ahead!=null&&(e.git.behind===0&&e.git.ahead===0?n.push(`up to date`):e.git.behind>0&&e.git.ahead===0?n.push(`behind ${e.git.behind}`):e.git.behind===0&&e.git.ahead>0?n.push(`ahead ${e.git.ahead}`):e.git.behind>0&&e.git.ahead>0&&n.push(`diverged (ahead ${e.git.ahead}, behind ${e.git.behind})`)),e.git.fetchOk===!1&&n.push(`fetch failed`)}r()}else n.push(e.packageManager===`unknown`?`pkg`:e.packageManager),r();return e.deps&&(e.deps.status===`ok`&&n.push(`deps ok`),e.deps.status===`missing`&&n.push(`deps missing`),e.deps.status===`stale`&&n.push(`deps stale`)),`Update: ${n.join(` · `)}`}function $n(e){return e?.trim()||void 0}function er(e){let t=e?.commands?.ownerDisplay;return t===`hash`?{ownerDisplay:`hash`,ownerDisplaySecret:$n(e?.commands?.ownerDisplaySecret)}:{ownerDisplay:t,ownerDisplaySecret:void 0}}function tr(e,t=()=>_.randomBytes(32).toString(`hex`)){let n=er(e);if(n.ownerDisplay!==`hash`||n.ownerDisplaySecret)return{config:e};let r=t();return{config:{...e,commands:{...e.commands,ownerDisplay:`hash`,ownerDisplaySecret:r}},generatedSecret:r}}var nr={blockedEverywhereKeys:`NODE_OPTIONS.NODE_PATH.PYTHONHOME.PYTHONPATH.PERL5LIB.PERL5OPT.RUBYLIB.RUBYOPT.BASH_ENV.ENV.BROWSER.GIT_EDITOR.GIT_EXTERNAL_DIFF.GIT_DIR.GIT_WORK_TREE.GIT_COMMON_DIR.GIT_EXEC_PATH.GIT_INDEX_FILE.GIT_OBJECT_DIRECTORY.GIT_ALTERNATE_OBJECT_DIRECTORIES.GIT_NAMESPACE.GIT_SEQUENCE_EDITOR.GIT_TEMPLATE_DIR.GIT_SSL_NO_VERIFY.GIT_SSL_CAINFO.GIT_SSL_CAPATH.CC.CXX.CARGO_BUILD_RUSTC.CARGO_BUILD_RUSTC_WRAPPER.RUSTC_WRAPPER.CMAKE_C_COMPILER.CMAKE_CXX_COMPILER.SHELL.SHELLOPTS.PS4.GCONV_PATH.IFS.SSLKEYLOGFILE.JAVA_OPTS.JAVA_TOOL_OPTIONS._JAVA_OPTIONS.JDK_JAVA_OPTIONS.PYTHONBREAKPOINT.DOTNET_STARTUP_HOOKS.DOTNET_ADDITIONAL_DEPS.GLIBC_TUNABLES.MAVEN_OPTS.MAKEFLAGS.MFLAGS.SBT_OPTS.GRADLE_OPTS.ANT_OPTS.HGRCPATH.EXINIT.VIMINIT.MYVIMRC.GVIMINIT.LUA_INIT.LUA_INIT_5_1.LUA_INIT_5_2.LUA_INIT_5_3.LUA_INIT_5_4.EMACSLOADPATH.RUBYSHELL.GIT_HOOK_PATH.SVN_EDITOR.SVN_SSH.BZR_EDITOR.BZR_SSH.BZR_PLUGIN_PATH.SUDO_ASKPASS.JULIA_EDITOR.CONFIG_SITE.CONFIG_SHELL.CMAKE_TOOLCHAIN_FILE.CATALINA_OPTS.CORECLR_PROFILER.HELM_PLUGINS.PACKER_PLUGIN_PATH.VAGRANT_VAGRANTFILE.ERL_AFLAGS.ERL_FLAGS.ERL_ZFLAGS.ELIXIR_ERL_OPTIONS.R_ENVIRON.R_PROFILE.R_ENVIRON_USER.R_PROFILE_USER.HOSTALIASES`.split(`.`),blockedOverrideOnlyKeys:`HOME.GRADLE_USER_HOME.ZDOTDIR.GIT_DIR.GIT_WORK_TREE.GIT_COMMON_DIR.GIT_INDEX_FILE.GIT_OBJECT_DIRECTORY.GIT_ALTERNATE_OBJECT_DIRECTORIES.GIT_NAMESPACE.GIT_SSH_COMMAND.GIT_SSH.GIT_PROXY_COMMAND.GIT_ASKPASS.GIT_SSL_NO_VERIFY.GIT_SSL_CAINFO.GIT_SSL_CAPATH.SSH_ASKPASS.LESSOPEN.LESSCLOSE.PAGER.MANPAGER.GIT_PAGER.EDITOR.VISUAL.FCEDIT.SUDO_EDITOR.PROMPT_COMMAND.HISTFILE.PERL5DB.PERL5DBCMD.OPENSSL_CONF.OPENSSL_ENGINES.PYTHONSTARTUP.WGETRC.CURL_HOME.CLASSPATH.CFLAGS.CGO_CFLAGS.CGO_LDFLAGS.GOFLAGS.MAKEFLAGS.MFLAGS.CORECLR_PROFILER_PATH.PHPRC.PHP_INI_SCAN_DIR.DENO_DIR.BUN_CONFIG_REGISTRY.YARN_RC_FILENAME.HTTP_PROXY.HTTPS_PROXY.ALL_PROXY.NO_PROXY.NODE_TLS_REJECT_UNAUTHORIZED.NODE_EXTRA_CA_CERTS.SSL_CERT_FILE.SSL_CERT_DIR.REQUESTS_CA_BUNDLE.CURL_CA_BUNDLE.DOCKER_HOST.DOCKER_TLS_VERIFY.DOCKER_CERT_PATH.PIP_INDEX_URL.PIP_PYPI_URL.PIP_EXTRA_INDEX_URL.PIP_CONFIG_FILE.PIP_FIND_LINKS.PIP_TRUSTED_HOST.UV_INDEX.UV_INDEX_URL.UV_PYTHON.UV_EXTRA_INDEX_URL.UV_DEFAULT_INDEX.DOCKER_CONTEXT.LIBRARY_PATH.LDFLAGS.CPATH.C_INCLUDE_PATH.CPLUS_INCLUDE_PATH.OBJC_INCLUDE_PATH.GOPROXY.GONOSUMCHECK.GONOSUMDB.GONOPROXY.GOPRIVATE.GOENV.GOPATH.HGRCPATH.PYTHONUSERBASE.RUSTC_WRAPPER.RUSTFLAGS.CARGO_HOME.VIRTUAL_ENV.LUA_PATH.LUA_CPATH.GEM_HOME.GEM_PATH.BUNDLE_GEMFILE.COMPOSER_HOME.CARGO_BUILD_RUSTC_WRAPPER.XDG_CONFIG_HOME.XDG_CONFIG_DIRS.AWS_CONFIG_FILE.KUBECONFIG.GOOGLE_APPLICATION_CREDENTIALS.AWS_SHARED_CREDENTIALS_FILE.AWS_WEB_IDENTITY_TOKEN_FILE.AZURE_AUTH_LOCATION.HELM_HOME.ANSIBLE_CONFIG.ANSIBLE_LIBRARY.ANSIBLE_CALLBACK_PLUGINS.ANSIBLE_COLLECTIONS_PATH.ANSIBLE_CONNECTION_PLUGINS.ANSIBLE_FILTER_PLUGINS.ANSIBLE_INVENTORY_PLUGINS.ANSIBLE_LOOKUP_PLUGINS.ANSIBLE_MODULE_UTILS.ANSIBLE_REMOTE_TEMP.ANSIBLE_ROLES_PATH.ANSIBLE_STRATEGY_PLUGINS.R_LIBS_USER.TF_CLI_CONFIG_FILE.TF_PLUGIN_CACHE_DIR.AMQP_URL.AWS_ACCESS_KEY_ID.AWS_CONTAINER_CREDENTIALS_FULL_URI.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI.AWS_SECRET_ACCESS_KEY.AWS_SECURITY_TOKEN.AWS_SESSION_TOKEN.AZURE_CLIENT_ID.AZURE_CLIENT_SECRET.DATABASE_URL.GH_TOKEN.GITHUB_TOKEN.GITLAB_TOKEN.MONGODB_URI.NODE_AUTH_TOKEN.NPM_TOKEN.REDIS_URL.SSH_AUTH_SOCK`.split(`.`),allowedInheritedOverrideOnlyKeys:`ALL_PROXY.AWS_CONFIG_FILE.AWS_SHARED_CREDENTIALS_FILE.AWS_WEB_IDENTITY_TOKEN_FILE.AZURE_AUTH_LOCATION.CURL_CA_BUNDLE.DOCKER_CERT_PATH.DOCKER_CONTEXT.DOCKER_HOST.DOCKER_TLS_VERIFY.GIT_PAGER.GOOGLE_APPLICATION_CREDENTIALS.GRADLE_USER_HOME.HISTFILE.HOME.HTTPS_PROXY.HTTP_PROXY.KUBECONFIG.MANPAGER.NODE_EXTRA_CA_CERTS.NODE_TLS_REJECT_UNAUTHORIZED.NO_PROXY.PAGER.REQUESTS_CA_BUNDLE.SSH_AUTH_SOCK.SSL_CERT_DIR.SSL_CERT_FILE.ZDOTDIR`.split(`.`),blockedOverridePrefixes:[`GIT_CONFIG_`,`NPM_CONFIG_`,`CARGO_REGISTRIES_`,`TF_VAR_`],blockedPrefixes:[`DYLD_`,`LD_`,`BASH_FUNC_`]};const rr=/^[A-Za-z_][A-Za-z0-9_]*$/,ir=nr;function ar(e){return Array.from(new Set(Array.from(e,e=>e.toUpperCase()))).toSorted((e,t)=>e.localeCompare(t))}const or=ar(ir.blockedEverywhereKeys??ir.blockedKeys??[]),sr=ar(ir.blockedOverrideOnlyKeys??ir.blockedOverrideKeys??[]),cr=new Set(ar(ir.allowedInheritedOverrideOnlyKeys??[])),lr=ar([...or,...sr.filter(e=>!cr.has(e))]),ur=Object.freeze(or),dr=Object.freeze(ar(ir.blockedPrefixes)),fr=Object.freeze(lr),pr=Object.freeze(ar(ir.blockedPrefixes)),mr=Object.freeze(sr),hr=Object.freeze(ar(ir.blockedOverridePrefixes??[]));Object.freeze([`TERM`,`LANG`,`LC_ALL`,`LC_CTYPE`,`LC_MESSAGES`,`COLORTERM`,`NO_COLOR`,`FORCE_COLOR`]);const gr=new Set(ur),_r=new Set(fr),vr=new Set(mr);function yr(e,t){let n=e.trim();return!n||t?.portable&&!rr.test(n)?null:n}function br(e){let t=yr(e);if(!t)return!1;let n=t.toUpperCase();return gr.has(n)?!0:dr.some(e=>n.startsWith(e))}function xr(e){let t=yr(e);if(!t)return!1;let n=t.toUpperCase();return _r.has(n)?!0:pr.some(e=>n.startsWith(e))}function Sr(e){let t=yr(e);if(!t)return!1;let n=t.toUpperCase();return vr.has(n)?!0:hr.some(e=>n.startsWith(e))}function Cr(e){let t=e?.baseEnv??process.env,n=e?.overrides??void 0,r=e?.blockPathOverrides??!0,i={};for(let[e,n]of Object.entries(t)){if(typeof n!=`string`)continue;let t=yr(e,{portable:!0});!t||xr(t)||(i[t]=n)}if(!n)return i;for(let[e,t]of Object.entries(n)){if(typeof t!=`string`)continue;let n=yr(e,{portable:!0});if(!n)continue;let a=n.toUpperCase();r&&a===`PATH`||br(a)||Sr(a)||(i[n]=t)}return i}const wr=new Set(`ALL_PROXY.ANTHROPIC_API_KEY.ANTHROPIC_OAUTH_TOKEN.BROWSER_EXECUTABLE_PATH.FASED_AGENT_DIR.FASED_ALLOW_INSECURE_PRIVATE_WS.FASED_ALLOW_PROJECT_LOCAL_BIN.FASED_BROWSER_EXECUTABLE_PATH.FASED_BROWSER_CONTROL_MODULE.FASED_BUNDLED_HOOKS_DIR.FASED_BUNDLED_PLUGINS_DIR.FASED_BUNDLED_SKILLS_DIR.FASED_CACHE_TRACE.FASED_CACHE_TRACE_FILE.FASED_CACHE_TRACE_MESSAGES.FASED_CACHE_TRACE_PROMPT.FASED_CACHE_TRACE_SYSTEM.FASED_CONFIG_PATH.FASED_GATEWAY_PASSWORD.FASED_GATEWAY_PORT.FASED_GATEWAY_SECRET.FASED_GATEWAY_TOKEN.FASED_GATEWAY_URL.FASED_HOME.FASED_LIVE_ANTHROPIC_KEY.FASED_LIVE_ANTHROPIC_KEYS.FASED_LIVE_GEMINI_KEY.FASED_LIVE_OPENAI_KEY.FASED_MPM_CATALOG_PATHS.FASED_NODE_EXEC_FALLBACK.FASED_NODE_EXEC_HOST.FASED_OAUTH_DIR.FASED_PINNED_PYTHON.FASED_PINNED_WRITE_PYTHON.FASED_PLUGIN_CATALOG_PATHS.FASED_PROFILE.FASED_RAW_STREAM.FASED_RAW_STREAM_PATH.FASED_SHOW_SECRETS.FASED_SKIP_BROWSER_CONTROL_SERVER.FASED_STATE_DIR.FASED_TEST_TAILSCALE_BINARY.HTTP_PROXY.HTTPS_PROXY.NODE_TLS_REJECT_UNAUTHORIZED.NO_PROXY.OPENAI_API_KEY.OPENAI_API_KEYS.PI_CODING_AGENT_DIR.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH.UV_PYTHON`.split(`.`)),Tr=[`_BASE_URL`],Er=[`ANTHROPIC_API_KEY_`,`CLAWHUB_`,`FASED_CLAWHUB_`,`FASEDHUB_`,`FASED_DISABLE_`,`FASED_SKIP_`,`FASED_UPDATE_`,`OPENAI_API_KEY_`];function Dr(e){return br(e)||Sr(e)}function Or(e){return!1}function kr(e){let t=e.toUpperCase();return Dr(t)||wr.has(t)||Er.some(e=>t.startsWith(e))||Tr.some(e=>t.endsWith(e))}function Ar(e){let t;try{t=n.readFileSync(e.filePath,`utf8`)}catch(t){return e.quiet||(t&&typeof t==`object`&&`code`in t?String(t.code):void 0)!==`ENOENT`&&console.warn(`[dotenv] Failed to read ${e.filePath}: ${String(t)}`),null}let r;try{r=v.parse(t)}catch(t){return e.quiet||console.warn(`[dotenv] Failed to parse ${e.filePath}: ${String(t)}`),null}let i=[];for(let[t,n]of Object.entries(r)){let r=yr(t,{portable:!0});!r||e.shouldBlockKey(r)||i.push({key:r,value:n})}return{filePath:e.filePath,entries:i}}function jr(e,t){let n=Ar({filePath:e,shouldBlockKey:kr,quiet:t?.quiet??!0});if(n)for(let{key:e,value:t}of n.entries)process.env[e]===void 0&&(process.env[e]=t)}function Mr(e){let t=new Set(Object.keys(process.env)),n=new Map,r=new Map;for(let i of e)for(let{key:e,value:a}of i.entries){if(t.has(e))continue;let o=r.get(e);if(o){if(o.value!==a){let t=`${o.filePath}\u0000${i.filePath}`,r=n.get(t);r?r.keys.add(e):n.set(t,{keptPath:o.filePath,ignoredPath:i.filePath,keys:new Set([e])})}continue}r.set(e,{value:a,filePath:i.filePath}),process.env[e]===void 0&&(process.env[e]=a)}for(let e of n.values()){let t=[...e.keys].toSorted();t.length!==0&&console.warn(`[dotenv] Conflicting values in ${e.keptPath} and ${e.ignoredPath} for ${t.join(`, `)}; keeping ${e.keptPath}.`)}}function Nr(e){let t=e?.quiet??!0,n=e?.stateEnvPath??i.join(yn(process.env),`.env`),r=i.join(b(process.env,p.homedir),`.fased`,`.env`),a=process.env.FASED_STATE_DIR?.trim()!==void 0&&i.resolve(n)!==i.resolve(r),o=[Ar({filePath:n,shouldBlockKey:Or,quiet:t})];a||o.push(Ar({filePath:i.join(b(process.env,p.homedir),`.config`,`fased`,`gateway.env`),shouldBlockKey:Or,quiet:t})),Mr(o.filter(e=>e!==null))}function Pr(e){let t=e?.quiet??!0;jr(i.join(process.cwd(),`.env`),{quiet:t}),Nr({quiet:t})}function Fr(e){if(process.platform!==`linux`)return!1;try{return n.readFileSync(`/proc/${e}/status`,`utf8`).match(/^State:\s+(\S)/m)?.[1]===`Z`}catch{return!1}}function Ir(e){if(!Number.isFinite(e)||e<=0)return!1;try{process.kill(e,0)}catch{return!1}return!Fr(e)}function Lr(e){let t=process,n=t[e];if(n)return n;let r=new Map;return t[e]=r,r}const Rr=Lr(Symbol.for(`fased.fileLockHeldLocks`));function zr(e,t){let n=Math.min(e.maxTimeout,Math.max(e.minTimeout,e.minTimeout*e.factor**t)),r=e.randomize?1+Math.random():1;return Math.min(e.maxTimeout,Math.round(n*r))}async function Br(e){try{let t=await a.readFile(e,`utf8`),n=JSON.parse(t);if(typeof n.pid!=`number`||typeof n.createdAt!=`string`)return null;let r=typeof n.startTime==`number`&&Number.isSafeInteger(n.startTime)?n.startTime:void 0;return{pid:n.pid,createdAt:n.createdAt,startTime:r}}catch{return null}}function Vr(e){if(process.platform!==`linux`)return null;try{let t=n.readFileSync(`/proc/${e}/stat`,`utf8`).trim(),r=t.lastIndexOf(`)`);if(r<0)return null;let i=t.slice(r+1).trim().split(/\s+/u),a=Number.parseInt(i[19]??``,10);return Number.isSafeInteger(a)?a:null}catch{return null}}async function Hr(e){let t=i.resolve(e),n=i.dirname(t);await a.mkdir(n,{recursive:!0});try{let e=await a.realpath(n);return i.join(e,i.basename(t))}catch{return t}}async function Ur(e,t){let n=await Br(e);if(n?.pid){if(!Ir(n.pid))return!0;if(n.startTime!==void 0){let e=Vr(n.pid);if(e!==null)return e!==n.startTime}return!1}if(n?.createdAt){let e=Date.parse(n.createdAt);if(!Number.isFinite(e)||Date.now()-e>t)return!0}try{let n=await a.stat(e);return Date.now()-n.mtimeMs>t}catch{return!0}}async function Wr(e){let t=Rr.get(e);t&&(--t.count,!(t.count>0)&&(Rr.delete(e),await t.handle.close().catch(()=>void 0),await a.rm(t.lockPath,{force:!0}).catch(()=>void 0)))}async function Gr(e,t){let n=await Hr(e),r=`${n}.lock`,i=Rr.get(n);if(i)return i.count+=1,{lockPath:r,release:()=>Wr(n)};let o=Math.max(1,t.retries.retries+1);for(let e=0;e<o;e+=1)try{let e=await a.open(r,`wx`),t=Vr(process.pid);return await e.writeFile(JSON.stringify({pid:process.pid,createdAt:new Date().toISOString(),...t===null?{}:{startTime:t}},null,2),`utf8`),Rr.set(n,{count:1,handle:e,lockPath:r}),{lockPath:r,release:()=>Wr(n)}}catch(n){if(n.code!==`EEXIST`)throw n;if(await Ur(r,t.stale)){await a.rm(r,{force:!0}).catch(()=>void 0);continue}if(e>=o-1)break;await new Promise(n=>setTimeout(n,zr(t.retries,e)))}throw Error(`file lock timeout for ${n}`)}async function Kr(e,t,n){let r=await Gr(e,t);try{return await n()}finally{await r.release()}}const qr=[`true`,`1`,`yes`,`on`],Jr=[`false`,`0`,`no`,`off`],Yr=new Set(qr),Xr=new Set(Jr);function Zr(e,t={}){if(typeof e==`boolean`)return e;if(typeof e!=`string`)return;let n=e.trim().toLowerCase();if(!n)return;let r=t.truthy??qr,i=t.falsy??Jr,a=r===qr?Yr:new Set(r),o=i===Jr?Xr:new Set(i);if(a.has(n))return!0;if(o.has(n))return!1}function Qr(e){return Zr(e)===!0}const $r=15e3;let ei;function ti(e){let t=Cr({baseEnv:e}),n=p.homedir().trim();return n?t.HOME=n:delete t.HOME,delete t.ZDOTDIR,t}function ni(e){return typeof e!=`number`||!Number.isFinite(e)?$r:Math.max(0,e)}function ri(){if(ei!==void 0)return ei;try{let e=n.readFileSync(`/etc/shells`,`utf8`).split(/\r?\n/).map(e=>e.trim()).filter(e=>e.length>0&&!e.startsWith(`#`)&&i.isAbsolute(e));ei=new Set(e)}catch{ei=null}return ei}function ii(e){return!i.isAbsolute(e)||i.normalize(e)!==e?!1:ri()?.has(e)===!0}function ai(e){let t=e.SHELL?.trim();return t&&ii(t)?t:`/bin/sh`}function oi(e){return e.exec(e.shell,[`-l`,`-c`,`env -0`],{encoding:`buffer`,timeout:e.timeoutMs,maxBuffer:2097152,env:e.env,stdio:[`ignore`,`pipe`,`pipe`]})}function si(e){let t=new Map,n=e.toString(`utf8`).split(`\0`);for(let e of n){if(!e)continue;let n=e.indexOf(`=`);if(n<=0)continue;let r=e.slice(0,n),i=e.slice(n+1);r&&t.set(r,i)}return t}function ci(e){let t=e.exec??c,n=ni(e.timeoutMs),r=ai(e.env),i=ti(e.env);try{return{ok:!0,shellEnv:si(oi({shell:r,env:i,exec:t,timeoutMs:n}))}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}function li(e){let t=e.logger??console;if(!e.enabled)return{ok:!0,applied:[],skippedReason:`disabled`};if(e.expectedKeys.some(t=>!!e.env[t]?.trim()))return{ok:!0,applied:[],skippedReason:`already-has-keys`};let n=ci({env:e.env,timeoutMs:e.timeoutMs,exec:e.exec});if(!n.ok)return t.warn(`[fased] shell env fallback failed: ${n.error}`),{ok:!1,error:n.error,applied:[]};let r=[];for(let t of e.expectedKeys){if(e.env[t]?.trim())continue;let i=n.shellEnv.get(t);i?.trim()&&(e.env[t]=i,r.push(t))}return{ok:!0,applied:r}}function ui(e){return Qr(e.FASED_LOAD_SHELL_ENV)}function di(e){return Qr(e.FASED_DEFER_SHELL_ENV_FALLBACK)}function fi(e){let t=e.FASED_SHELL_ENV_TIMEOUT_MS?.trim();if(!t)return $r;let n=Number.parseInt(t,10);return Number.isFinite(n)?Math.max(0,n):$r}const pi=new Set([`ENOENT`,`ENOTDIR`]),mi=/^\.\.(?:[\\/]|$)/u;function hi(e){let t=i.win32.normalize(e);return t.startsWith(`\\\\?\\`)&&(t=t.slice(4),t.toUpperCase().startsWith(`UNC\\`)&&(t=`\\\\${t.slice(4)}`)),t.replaceAll(`/`,`\\`).toLowerCase()}function gi(e){return!!(e&&typeof e==`object`&&`code`in e)}function _i(e){return gi(e)&&typeof e.code==`string`&&pi.has(e.code)}function vi(e,t){let n=i.resolve(e),r=i.resolve(t);if(process.platform===`win32`){let e=hi(n),t=hi(r),a=i.win32.relative(e,t);return a===``||!mi.test(a)&&!i.win32.isAbsolute(a)}let a=i.relative(n,r);return a===``||!mi.test(a)&&!i.isAbsolute(a)}r.O_WRONLY|r.O_CREAT|r.O_TRUNC|(process.platform!==`win32`&&`O_NOFOLLOW`in r?r.O_NOFOLLOW:0);function yi(e,t){let n=i.resolve(e),r=i.resolve(t),a=i.relative(n,r);return a===``||!a.startsWith(`..${i.sep}`)&&a!==`..`&&!i.isAbsolute(a)}$e(import.meta.url),String.raw`\b[A-Z0-9_]*(?:KEY|TOKEN|SECRET|PASSWORD|PASSWD)\b\s*[=:]\s*(["']?)([^\s"'\\]+)\1`,String.raw`"(?:apiKey|token|secret|password|passwd|accessToken|refreshToken)"\s*:\s*"([^"]+)"`,String.raw`--(?:api[-_]?key|token|secret|password|passwd)\s+(["']?)([^\s"']+)\1`,String.raw`Authorization\s*[:=]\s*Bearer\s+([A-Za-z0-9._\-+=]+)`,String.raw`\bBearer\s+([A-Za-z0-9._\-+=]{18,})\b`,String.raw`-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]+?-----END [A-Z ]*PRIVATE KEY-----`,String.raw`\b(sk-[A-Za-z0-9_-]{8,})\b`,String.raw`\b(ghp_[A-Za-z0-9]{20,})\b`,String.raw`\b(github_pat_[A-Za-z0-9_]{20,})\b`,String.raw`\b(xox[baprs]-[A-Za-z0-9-]{10,})\b`,String.raw`\b(xapp-[A-Za-z0-9-]{10,})\b`,String.raw`\b(gsk_[A-Za-z0-9_-]{10,})\b`,String.raw`\b(AIza[0-9A-Za-z\-_]{20,})\b`,String.raw`\b(pplx-[A-Za-z0-9_-]{10,})\b`,String.raw`\b(npm_[A-Za-z0-9]{10,})\b`,String.raw`\bbot(\d{6,}:[A-Za-z0-9_-]{20,})\b`,String.raw`\b(\d{6,}:[A-Za-z0-9_-]{20,})\b`,Object.freeze({allowFinalSymlinkForUnlink:!1,allowFinalHardlinkForUnlink:!1}),Object.freeze({allowFinalSymlinkForUnlink:!0,allowFinalHardlinkForUnlink:!0});function bi(e){let t=i.resolve(e.rootPath),n=i.resolve(e.absolutePath),r=e.rootCanonicalPath?i.resolve(e.rootCanonicalPath):Ti(t),a=vi(t,n),o=Si({absolutePath:n,outsideLexicalCanonicalPath:a?void 0:Ti(n)});if(Ci({skipLexicalRootCheck:e.skipLexicalRootCheck,lexicalInside:a,canonicalOutsideLexicalPath:o,rootCanonicalPath:r,boundaryLabel:e.boundaryLabel,rootPath:t,absolutePath:n}),!a){let i=o;return ki({boundaryLabel:e.boundaryLabel,rootCanonicalPath:r,candidatePath:i,absolutePath:n}),wi({absolutePath:n,canonicalPath:i,rootPath:t,rootCanonicalPath:r,kind:Ei(n,!1)})}return xi({params:e,absolutePath:n,rootPath:t,rootCanonicalPath:r})}function xi(e){let t=i.relative(e.rootPath,e.absolutePath).split(i.sep).filter(Boolean),r=e.params.policy?.allowFinalSymlinkForUnlink===!0,a=e.rootCanonicalPath,o=e.rootPath,s=!1;for(let c=0;c<t.length;c+=1){let l=t[c]??``,u=c===t.length-1;o=i.join(o,l);let d;try{d=n.lstatSync(o)}catch(n){if(_i(n)){let n=t.slice(c);a=i.resolve(a,...n),ki({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,candidatePath:a,absolutePath:e.absolutePath});break}throw n}if(!d.isSymbolicLink()){a=i.resolve(a,l),ki({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,candidatePath:a,absolutePath:e.absolutePath});continue}if(r&&u){s=!0,a=i.resolve(a,l),ki({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,candidatePath:a,absolutePath:e.absolutePath});break}let f=Pi(o);if(!vi(e.rootCanonicalPath,f))throw ji({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,symlinkPath:o});a=f,o=f}ki({boundaryLabel:e.params.boundaryLabel,rootCanonicalPath:e.rootCanonicalPath,candidatePath:a,absolutePath:e.absolutePath});let c=Ei(e.absolutePath,s);return wi({absolutePath:e.absolutePath,canonicalPath:a,rootPath:e.rootPath,rootCanonicalPath:e.rootCanonicalPath,kind:c})}function Si(e){return e.outsideLexicalCanonicalPath??e.absolutePath}function Ci(e){if(!(e.skipLexicalRootCheck||e.lexicalInside)&&!vi(e.rootCanonicalPath,e.canonicalOutsideLexicalPath))throw Ai({boundaryLabel:e.boundaryLabel,rootPath:e.rootPath,absolutePath:e.absolutePath})}function wi(e){return{absolutePath:e.absolutePath,canonicalPath:e.canonicalPath,rootPath:e.rootPath,rootCanonicalPath:e.rootCanonicalPath,relativePath:Oi(e.rootCanonicalPath,e.canonicalPath),exists:e.kind.exists,kind:e.kind.kind}}function Ti(e){let t=i.resolve(e),r=t,a=[];for(;!Ni(r)&&!n.existsSync(r);){a.unshift(i.basename(r));let e=i.dirname(r);if(e===r)break;r=e}if(!n.existsSync(r))return t;try{let e=i.resolve(n.realpathSync(r));return a.length===0?e:i.resolve(e,...a)}catch{return t}}function Ei(e,t){try{return{exists:!0,kind:Di(t?n.lstatSync(e):n.statSync(e))}}catch(e){if(_i(e))return{exists:!1,kind:`missing`};throw e}}function Di(e){return e.isFile()?`file`:e.isDirectory()?`directory`:e.isSymbolicLink()?`symlink`:`other`}function Oi(e,t){let n=i.relative(i.resolve(e),i.resolve(t));return!n||n===`.`||n.startsWith(`..`)||i.isAbsolute(n)?``:n}function ki(e){if(!vi(e.rootCanonicalPath,e.candidatePath))throw Error(`Path resolves outside ${e.boundaryLabel} (${Mi(e.rootCanonicalPath)}): ${Mi(e.absolutePath)}`)}function Ai(e){return Error(`Path escapes ${e.boundaryLabel} (${Mi(e.rootPath)}): ${Mi(e.absolutePath)}`)}function ji(e){return Error(`Symlink escapes ${e.boundaryLabel} (${Mi(e.rootCanonicalPath)}): ${Mi(e.symlinkPath)}`)}function Mi(e){let t=p.homedir();return e.startsWith(t)?`~${e.slice(t.length)}`:e}function Ni(e){return i.parse(e).root===e}function Pi(e){try{return i.resolve(n.realpathSync(e))}catch(t){if(!_i(t))throw t;let r=n.readlinkSync(e);return Ti(i.resolve(i.dirname(e),r))}}function Fi(e){return e===0||e===0n}function Ii(e,t,n=process.platform){return e.ino===t.ino?e.dev===t.dev?!0:n===`win32`&&(Fi(e.dev)||Fi(t.dev)):!1}function Li(e){let t=typeof e==`object`&&e&&`code`in e?String(e.code):``;return t===`ENOENT`||t===`ENOTDIR`||t===`ELOOP`}function Ri(e,t){return Ii(e,t)}function zi(e){let t=e.ioFs??n,r=t.constants.O_RDONLY|(typeof t.constants.O_NOFOLLOW==`number`?t.constants.O_NOFOLLOW:0),i=null;try{if(e.rejectPathSymlink&&t.lstatSync(e.filePath).isSymbolicLink())return{ok:!1,reason:`validation`};let n=e.resolvedPath??t.realpathSync(e.filePath),a=t.lstatSync(n);if(!a.isFile()||e.rejectHardlinks&&a.nlink>1||e.maxBytes!==void 0&&a.size>e.maxBytes)return{ok:!1,reason:`validation`};i=t.openSync(n,r);let o=t.fstatSync(i);if(!o.isFile()||e.rejectHardlinks&&o.nlink>1||e.maxBytes!==void 0&&o.size>e.maxBytes||!Ri(a,o))return{ok:!1,reason:`validation`};let s={ok:!0,path:n,fd:i,stat:o};return i=null,s}catch(e){return Li(e)?{ok:!1,reason:`path`,error:e}:{ok:!1,reason:`io`,error:e}}finally{i!==null&&t.closeSync(i)}}function Bi(e){return typeof e.openSync==`function`&&typeof e.closeSync==`function`&&typeof e.fstatSync==`function`&&typeof e.lstatSync==`function`&&typeof e.realpathSync==`function`&&typeof e.readFileSync==`function`&&typeof e.constants==`object`&&e.constants!==null}function Vi(e){let t=e.ioFs??n,r=i.resolve(e.absolutePath),a,o;try{let t=bi({absolutePath:r,rootPath:e.rootPath,rootCanonicalPath:e.rootRealPath,boundaryLabel:e.boundaryLabel,skipLexicalRootCheck:e.skipLexicalRootCheck});a=t.canonicalPath,o=t.rootCanonicalPath}catch(e){return{ok:!1,reason:`validation`,error:e}}let s=zi({filePath:r,resolvedPath:a,rejectHardlinks:e.rejectHardlinks??!0,maxBytes:e.maxBytes,ioFs:t});return s.ok?{ok:!0,path:s.path,fd:s.fd,stat:s.stat,rootRealPath:o}:s}const Hi=`fased.plugin.json`,Ui=[Hi];function D(e){return Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):[]}function Wi(e){if(!T(e))return;let t={};for(let[n,r]of Object.entries(e)){let e=n.trim();if(!e)continue;let i=D(r);i.length!==0&&(t[e]=i)}return Object.keys(t).length>0?t:void 0}function Gi(e){if(!T(e))return;let t={};for(let[n,r]of Object.entries(e)){let e=typeof n==`string`?n.trim():``,i=typeof r==`string`?r.trim():``;!e||!i||(t[e]=i)}return Object.keys(t).length>0?t:void 0}function Ki(e){if(!T(e))return;let t=D(e.memoryEmbeddingProviders),n=D(e.speechProviders),r=D(e.realtimeTranscriptionProviders),i=D(e.realtimeVoiceProviders),a=D(e.mediaUnderstandingProviders),o=D(e.imageGenerationProviders),s=D(e.videoGenerationProviders),c=D(e.musicGenerationProviders),l=D(e.webFetchProviders),u=D(e.webSearchProviders),d=D(e.tools),f={...t.length>0?{memoryEmbeddingProviders:t}:{},...n.length>0?{speechProviders:n}:{},...r.length>0?{realtimeTranscriptionProviders:r}:{},...i.length>0?{realtimeVoiceProviders:i}:{},...a.length>0?{mediaUnderstandingProviders:a}:{},...o.length>0?{imageGenerationProviders:o}:{},...s.length>0?{videoGenerationProviders:s}:{},...c.length>0?{musicGenerationProviders:c}:{},...l.length>0?{webFetchProviders:l}:{},...u.length>0?{webSearchProviders:u}:{},...d.length>0?{tools:d}:{}};return Object.keys(f).length>0?f:void 0}function qi(e){if(!T(e))return;let t=D(e.modelPrefixes),n=D(e.modelPatterns),r={...t.length>0?{modelPrefixes:t}:{},...n.length>0?{modelPatterns:n}:{}};return Object.keys(r).length>0?r:void 0}function Ji(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(!T(n))continue;let e=typeof n.provider==`string`?n.provider.trim():``,r=typeof n.method==`string`?n.method.trim():``,i=typeof n.choiceId==`string`?n.choiceId.trim():``;if(!e||!r||!i)continue;let a=typeof n.choiceLabel==`string`?n.choiceLabel.trim():``,o=typeof n.choiceHint==`string`?n.choiceHint.trim():``,s=typeof n.assistantPriority==`number`&&Number.isFinite(n.assistantPriority)?n.assistantPriority:void 0,c=n.assistantVisibility===`manual-only`||n.assistantVisibility===`visible`?n.assistantVisibility:void 0,l=D(n.deprecatedChoiceIds),u=typeof n.groupId==`string`?n.groupId.trim():``,d=typeof n.groupLabel==`string`?n.groupLabel.trim():``,f=typeof n.groupHint==`string`?n.groupHint.trim():``,p=typeof n.optionKey==`string`?n.optionKey.trim():``,m=typeof n.cliFlag==`string`?n.cliFlag.trim():``,h=typeof n.cliOption==`string`?n.cliOption.trim():``,g=typeof n.cliDescription==`string`?n.cliDescription.trim():``,_=D(n.onboardingScopes).filter(e=>e===`text-inference`||e===`image-generation`);t.push({provider:e,method:r,choiceId:i,...a?{choiceLabel:a}:{},...o?{choiceHint:o}:{},...s===void 0?{}:{assistantPriority:s},...c?{assistantVisibility:c}:{},...l.length>0?{deprecatedChoiceIds:l}:{},...u?{groupId:u}:{},...d?{groupLabel:d}:{},...f?{groupHint:f}:{},...p?{optionKey:p}:{},...m?{cliFlag:m}:{},...h?{cliOption:h}:{},...g?{cliDescription:g}:{},..._.length>0?{onboardingScopes:_}:{}})}return t.length>0?t:void 0}function Yi(e){if(!T(e))return;let t={};for(let[n,r]of Object.entries(e)){let e=n.trim();if(!e||!T(r))continue;let i=T(r.schema)?r.schema:null;if(!i)continue;let a=T(r.uiHints)?r.uiHints:void 0,o=typeof r.label==`string`?r.label.trim():``,s=typeof r.description==`string`?r.description.trim():``,c=D(r.preferOver);t[e]={schema:i,...a?{uiHints:a}:{},...o?{label:o}:{},...s?{description:s}:{},...c.length>0?{preferOver:c}:{}}}return Object.keys(t).length>0?t:void 0}function Xi(e){for(let t of Ui){let r=i.join(e,t);if(n.existsSync(r))return r}return i.join(e,Hi)}function Zi(e){let t=Xi(e),r=Vi({absolutePath:t,rootPath:e,boundaryLabel:`plugin root`});if(!r.ok)return r.reason===`path`?{ok:!1,error:`plugin manifest not found: ${t}`,manifestPath:t}:{ok:!1,error:`unsafe plugin manifest path: ${t} (${r.reason})`,manifestPath:t};let i;try{i=m.parse(n.readFileSync(r.fd,`utf-8`))}catch(e){return{ok:!1,error:`failed to parse plugin manifest: ${String(e)}`,manifestPath:t}}finally{n.closeSync(r.fd)}if(!T(i))return{ok:!1,error:`plugin manifest must be an object`,manifestPath:t};let a=typeof i.id==`string`?i.id.trim():``;if(!a)return{ok:!1,error:`plugin manifest requires id`,manifestPath:t};let o=T(i.configSchema)?i.configSchema:null;if(!o)return{ok:!1,error:`plugin manifest requires configSchema`,manifestPath:t};let s=i.enabledByDefault===!0,c=i.runtimeOnly===!0,l=D(i.legacyPluginIds),u=D(i.autoEnableWhenConfiguredProviders),d=typeof i.kind==`string`?i.kind:void 0,f=typeof i.name==`string`?i.name.trim():void 0,p=typeof i.description==`string`?i.description.trim():void 0,h=typeof i.version==`string`?i.version.trim():void 0,g=D(i.channels),_=D(i.providers),v=qi(i.modelSupport),ee=Wi(i.providerAuthEnvVars),te=Gi(i.providerAuthAliases),y=Ji(i.providerAuthChoices),ne=D(i.skills),re=Ki(i.contracts),ie=Yi(i.channelConfigs),ae;return T(i.uiHints)&&(ae=i.uiHints),{ok:!0,manifest:{id:a,configSchema:o,...c?{runtimeOnly:!0}:{},...s?{enabledByDefault:s}:{},...l.length>0?{legacyPluginIds:l}:{},...u.length>0?{autoEnableWhenConfiguredProviders:u}:{},kind:d,channels:g,providers:_,modelSupport:v,providerAuthEnvVars:ee,providerAuthAliases:te,providerAuthChoices:y,skills:ne,name:f,description:p,version:h,uiHints:ae,contracts:re,channelConfigs:ie},manifestPath:t}}const Qi=[`index.ts`,`index.js`,`index.mjs`,`index.cjs`];function $i(e){if(e)return e.fased}const ea={memory:`memory-core`};function ta(e){return ea[e]}function na(e,t){let n={entry:!1,install:!1,allowlist:!1,loadPath:!1,memorySlot:!1},r=e.plugins??{},i=r.entries;if(i&&t in i){let{[t]:e,...r}=i;i=Object.keys(r).length>0?r:void 0,n.entry=!0}let a=r.installs,o=a?.[t];if(a&&t in a){let{[t]:e,...r}=a;a=Object.keys(r).length>0?r:void 0,n.install=!0}let s=r.allow;Array.isArray(s)&&s.includes(t)&&(s=s.filter(e=>e!==t),s.length===0&&(s=void 0),n.allowlist=!0);let c=r.load;if(o?.source===`path`&&o.sourcePath){let e=o.sourcePath,t=c?.paths;if(Array.isArray(t)&&t.includes(e)){let r=t.filter(t=>t!==e);c=r.length>0?{...c,paths:r}:void 0,n.loadPath=!0}}let l=r.slots;l?.memory===t&&(l={...l,memory:ta(`memory`)},n.memorySlot=!0),l&&Object.keys(l).length===0&&(l=void 0);let u={...r,entries:i,installs:a,allow:s,load:c,slots:l};return u.entries===void 0&&delete u.entries,u.installs===void 0&&delete u.installs,u.allow===void 0&&delete u.allow,u.load===void 0&&delete u.load,u.slots===void 0&&delete u.slots,{config:{...e,plugins:Object.keys(u).length>0?u:void 0},actions:n}}const ra=new Set([`__proto__`,`prototype`,`constructor`]);function ia(e){return ra.has(e)}const aa=`main`,oa=/^[a-z0-9][a-z0-9_-]{0,63}$/i,sa=/[^a-z0-9_-]+/g,ca=/^-+/,la=/-+$/;function O(e){let t=(e??``).trim();return t?oa.test(t)?t.toLowerCase():t.toLowerCase().replace(sa,`-`).replace(ca,``).replace(la,``).slice(0,64)||aa:aa}var ua=class extends Error{constructor(e){super(ha(e)),this.name=`DuplicateAgentDirError`,this.duplicates=e}};function da(e){let t=i.resolve(e);return process.platform===`darwin`||process.platform===`win32`?t.toLowerCase():t}function fa(e){let t=new Set,n=Array.isArray(e.agents?.list)?e.agents?.list:[],r=n.find(e=>e?.default)?.id??n[0]?.id??aa;t.add(O(r));for(let e of n)e?.id&&t.add(O(e.id));let i=e.bindings;if(Array.isArray(i))for(let e of i){let n=e?.agentId;typeof n==`string`&&n.trim()&&t.add(O(n))}return[...t]}function pa(e,t,n){let r=O(t),a=(Array.isArray(e.agents?.list)?e.agents?.list.find(e=>O(e.id)===r)?.agentDir:void 0)?.trim();if(a)return E(a);let o=n?.env??process.env,s=x(o,n?.homedir??(()=>b(o,p.homedir)));return i.join(s,`agents`,r,`agent`)}function ma(e,t){let n=new Map;for(let r of fa(e)){let i=pa(e,r,t),a=da(i),o=n.get(a);o?o.agentIds.push(r):n.set(a,{agentDir:i,agentIds:[r]})}return[...n.values()].filter(e=>e.agentIds.length>1)}function ha(e){return[`Duplicate agentDir detected (multi-agent config).`,`Each agent must have a unique agentDir; sharing it causes auth/session state collisions and token invalidation.`,``,`Conflicts:`,...e.map(e=>`- ${e.agentDir}: ${e.agentIds.map(e=>`"${e}"`).join(`, `)}`),``,`Fix: remove the shared agents.list[].agentDir override (or give each agent its own directory).`,`If you want to share credentials, copy auth-profiles.json instead of sharing the entire agentDir.`].join(`
2
+ `)}async function ga(e,t){let n=`${e}.bak`;await t.unlink(`${n}.4`).catch(()=>{});for(let e=3;e>=1;--e)await t.rename(`${n}.${e}`,`${n}.${e+1}`).catch(()=>{});await t.rename(n,`${n}.1`).catch(()=>{})}function _a(e){if(typeof e==`string`)return e.trim()||void 0;if(!(!e||typeof e!=`object`))return e.primary?.trim()||void 0}i.resolve(i.dirname(o(import.meta.url)),`../../docs/reference/templates`);function va(e=process.env,t=p.homedir){let n=b(e,t),r=e.FASED_PROFILE?.trim();return r&&r.toLowerCase()!==`default`?i.join(n,`.fased`,`workspace-${r}`):i.join(n,`.fased`,`workspace`)}va();let ya=null;function ba(){return ya??=sn(`agent-scope`),ya}function xa(e){return e.replace(/\0/g,``)}let Sa=!1;function Ca(e){let t=e.agents?.list;return Array.isArray(t)?t.filter(e=>!!(e&&typeof e==`object`)):[]}function wa(e){let t=Ca(e);if(t.length===0)return aa;let n=t.filter(e=>e?.default);n.length>1&&!Sa&&(Sa=!0,ba().warn(`Multiple agents marked default=true; using the first entry as default.`));let r=(n[0]??t[0])?.id?.trim();return O(r||aa)}function Ta(e,t){let n=O(t);return Ca(e).find(e=>O(e.id)===n)}function Ea(e,t){let n=Ta(e,O(t));if(n)return{name:typeof n.name==`string`?n.name:void 0,workspace:typeof n.workspace==`string`?n.workspace:void 0,agentDir:typeof n.agentDir==`string`?n.agentDir:void 0,activeModelProvider:typeof n.activeModelProvider==`string`?n.activeModelProvider:void 0,modelProviders:n.modelProviders&&typeof n.modelProviders==`object`?n.modelProviders:void 0,model:typeof n.model==`string`||n.model&&typeof n.model==`object`?n.model:void 0,taskModels:n.taskModels&&typeof n.taskModels==`object`?n.taskModels:void 0,thinkingDefault:n.thinkingDefault,verboseDefault:e.agents?.defaults?.verboseDefault,reasoningDefault:n.reasoningDefault,fastModeDefault:n.fastModeDefault,skills:Array.isArray(n.skills)?n.skills:void 0,memorySearch:n.memorySearch,humanDelay:n.humanDelay,heartbeat:n.heartbeat,identity:n.identity,groupChat:n.groupChat,subagents:typeof n.subagents==`object`&&n.subagents?n.subagents:void 0,sandbox:n.sandbox,tools:n.tools}}function Da(e,t){let n=O(t),r=Ea(e,n)?.workspace?.trim();if(r)return xa(E(r));let a=wa(e),o=e.agents?.defaults?.workspace?.trim();if(n===a)return xa(o?E(o):va(process.env));if(o)return xa(i.join(E(o),n));let s=x(process.env);return xa(i.join(s,`workspace-${n}`))}const Oa=`default`,ka=/^\$\{([A-Z][A-Z0-9_]{0,127})\}$/;function Aa(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ja(e){return!Aa(e)||Object.keys(e).length!==3?!1:(e.source===`env`||e.source===`file`||e.source===`exec`)&&typeof e.provider==`string`&&e.provider.trim().length>0&&typeof e.id==`string`&&e.id.trim().length>0}function Ma(e){return Aa(e)?(e.source===`env`||e.source===`file`||e.source===`exec`)&&typeof e.id==`string`&&e.id.trim().length>0&&e.provider===void 0:!1}function Na(e,t=Oa){if(typeof e!=`string`)return null;let n=ka.exec(e.trim());return n?{source:`env`,provider:t.trim()||Oa,id:n[1]}:null}function Pa(e,t){if(ja(e))return e;if(Ma(e)){let n=e.source===`env`?t?.env??Oa:e.source===`file`?t?.file??Oa:t?.exec??Oa;return{source:e.source,provider:n,id:e.id}}return Na(e,t?.env)||null}const k=[`off`,`minimal`,`low`,`medium`,`high`],Fa=[...k,`xhigh`],Ia=[`off`,`low`,`medium`,`high`,`xhigh`,`max`],La=[...Ia,`ultra`],Ra=[`openai/gpt-5.6`,`openai/gpt-5.6-terra`,`openai/gpt-5.6-luna`,`openai/gpt-5.5`,`openai/gpt-5.4`,`openai/gpt-5.4-mini`,`openai/gpt-5.4-nano`,`openai-codex/gpt-5.6-sol`,`openai-codex/gpt-5.6-terra`,`openai-codex/gpt-5.6-luna`,`openai-codex/gpt-5.5`,`openai-codex/gpt-5.4`,`openai-codex/gpt-5.4-mini`,`openai-codex/gpt-5.3-codex-spark`,`github-copilot/gpt-5.5`,`github-copilot/gpt-5.4`,`github-copilot/gpt-5.4-mini`,`github-copilot/gpt-5.3-codex-spark`],za=new Set(Ra.map(e=>e.toLowerCase())),Ba=new Set(Ra.map(e=>e.split(`/`)[1]?.toLowerCase()).filter(e=>!!e)),Va=new Set([`openai/gpt-5.6`,`openai/gpt-5.6-sol`,`openai/gpt-5.6-terra`,`openai/gpt-5.6-luna`,`openai-codex/gpt-5.6-sol`,`openai-codex/gpt-5.6-terra`,`openai-codex/gpt-5.6-luna`].map(e=>e.toLowerCase())),Ha=new Set([`gpt-5.6`,`gpt-5.6-sol`,`gpt-5.6-terra`,`gpt-5.6-luna`]);function Ua(e){if(!e)return``;let t=e.trim().toLowerCase();return t===`z.ai`||t===`z-ai`?`zai`:t}function Wa(e){if(!e)return;let t=e.trim().toLowerCase(),n=t.replace(/[\s_-]+/g,``);if(n===`xhigh`||n===`extrahigh`)return`xhigh`;if(t===`max`)return`max`;if(t===`ultra`)return`ultra`;if(t===`off`)return`off`;if([`on`,`enable`,`enabled`].includes(t))return`low`;if([`min`,`minimal`].includes(t))return`minimal`;if([`low`,`thinkhard`,`think-hard`,`think_hard`].includes(t))return`low`;if([`mid`,`med`,`medium`,`thinkharder`,`think-harder`,`harder`].includes(t))return`medium`;if([`high`,`ultrathink`,`think-hard`,`thinkhardest`,`highest`].includes(t))return`high`;if(t===`think`)return`minimal`}function Ga(e,t){let n=t?.trim().toLowerCase();if(!n)return!1;let r=e?.trim().toLowerCase();return r?Va.has(`${r}/${n}`):Ha.has(n)}function Ka(e,t){let n=t?.trim().toLowerCase();if(!n)return!1;let r=e?.trim().toLowerCase();return r?za.has(`${r}/${n}`):Ba.has(n)}function qa(e){let t=new Set,n=[];for(let r of e??[]){let e=Wa(r);!e||t.has(e)||(t.add(e),n.push(e))}return n}function Ja(e,t){let n=Ua(e),r=t?.trim().toLowerCase();return n===`openai-codex`&&(r===`gpt-5.6-sol`||r===`gpt-5.6-terra`)?[...La]:Ga(e,t)?[...Ia]:Ka(e,t)?[...Fa]:[...k]}function Ya(e){let t=e?.trim().toLowerCase()??``;return t.includes(`fable-5`)||t.includes(`opus-4-8`)||t.includes(`opus-4.8`)||t.includes(`opus-4-6`)||t.includes(`opus-4.6`)||t.includes(`opus-4-7`)||t.includes(`opus-4.7`)||t.includes(`sonnet-5`)||t.includes(`sonnet-4-6`)||t.includes(`sonnet-4.6`)||t.includes(`sonnet-4-7`)||t.includes(`sonnet-4.7`)}function Xa(e,t){let n=Ua(e);return n===`openai`||n===`openai-codex`||n===`github-copilot`||n===`copilot-proxy`?{thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:n===`anthropic`?{thinkingMode:Ya(t)?`anthropic-adaptive`:`anthropic-thinking-budget`,reasoningBudgetSupported:!Ya(t)}:n===`google`||n===`google-gemini-cli`?{thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}:n===`zai`?{thinkingMode:`zai-binary`,reasoningBudgetSupported:!1}:n===`qwen`||n===`qwen-coding-plan`?{thinkingMode:`qwen-thinking`,reasoningBudgetSupported:!0}:n===`moonshot`||n===`kimi-coding`?{thinkingMode:`moonshot-thinking`,reasoningBudgetSupported:!1}:{thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1}}function Za(e,t){let n=Ua(e),r=t?.trim().toLowerCase()??``;return!n||!r?!1:n===`openai`||n===`openai-codex`||n===`github-copilot`||n===`copilot-proxy`?/^gpt-5(?:[.-]|$)/.test(r):n===`anthropic`?r.startsWith(`claude-`)||r.includes(`claude-`):n===`google`||n===`google-gemini-cli`?r.startsWith(`gemini-`):n===`zai`?r.startsWith(`glm-`):n===`qwen`||n===`qwen-coding-plan`?r.includes(`qwen`):n===`moonshot`||n===`kimi-coding`?r.includes(`kimi`):n===`minimax`||n===`minimax-cn`?r.includes(`minimax-m2`):[`openrouter`,`vercel-ai-gateway`,`opencode`,`huggingface`,`venice`,`together`,`synthetic`,`litellm`].includes(n)?/(gpt-5|claude-|gemini-|grok-|qwen|kimi|glm-|deepseek-r1|reasoning|thinking)/.test(r):!1}function Qa(e){let t=qa(e.capabilities?.thinkingLevels),n=t.length>0||typeof e.capabilities?.thinkingMode==`string`||typeof e.capabilities?.defaultThinkingLevel==`string`;if(e.capabilities?.fixedReasoning===!0&&!n||!(e.reasoning===!0||e.reasoning!==!1&&Za(e.provider,e.model))&&!n)return null;let r=Xa(e.provider,e.model),i=r.thinkingMode===`zai-binary`?[`off`,`low`]:Ja(e.provider,e.model),a=t.length>0?t:i,o=Wa(e.capabilities?.defaultThinkingLevel);return{thinkingLevels:a,defaultThinkingLevel:o&&a.includes(o)?o:a.includes(`low`)?`low`:a[0]??`off`,thinkingMode:e.capabilities?.thinkingMode??r.thinkingMode,reasoningBudgetSupported:e.capabilities?.reasoningBudgetSupported??r.reasoningBudgetSupported}}const $a={tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1},eo={...$a,audio:!0,video:!0},to=[{id:`mimo-v2.5-pro`,name:`Xiaomi MiMo V2.5 Pro`,reasoning:!0,input:[`text`,`image`],cost:{input:1,output:3,cacheRead:.2,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:$a},{id:`mimo-v2.5`,name:`Xiaomi MiMo V2.5`,reasoning:!0,input:[`text`,`image`],cost:{input:.4,output:2,cacheRead:.08,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:eo},{id:`mimo-v2-pro`,name:`Xiaomi MiMo V2 Pro`,reasoning:!0,input:[`text`],cost:{input:1,output:3,cacheRead:.2,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:$a},{id:`mimo-v2-omni`,name:`Xiaomi MiMo V2 Omni`,reasoning:!0,input:[`text`,`image`],cost:{input:.4,output:2,cacheRead:.08,cacheWrite:0},contextWindow:262144,maxTokens:128e3,capabilities:eo},{id:`mimo-v2-flash`,name:`Xiaomi MiMo V2 Flash`,reasoning:!0,input:[`text`],cost:{input:.11,output:.32,cacheRead:.01,cacheWrite:0},contextWindow:262144,maxTokens:64e3,capabilities:$a}],no=to.map(e=>e.id);function ro(e){let t=to.find(t=>t.id===e);if(!t)throw Error(`Unknown Xiaomi model: ${e}`);return{...t,input:[...t.input],cost:{...t.cost},capabilities:t.capabilities?{...t.capabilities}:void 0}}function io(e=`xiaomi`){return Object.fromEntries(to.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}function ao(e){let t=e.split(`.`);if(t.length!==4)return!1;let n=t.map(e=>Number(e));if(n.some(e=>!Number.isInteger(e)||e<0||e>255))return!1;let[r,i]=n;return r===10||r===127||r===0||r===172&&i>=16&&i<=31||r===192&&i===168||r===169&&i===254}function oo(e){let t=e?.trim();if(!t)return!1;try{let e=new URL(t).hostname.toLowerCase().replace(/^\[|\]$/g,``);return e===`localhost`||e===`::1`||e===`0.0.0.0`||e.endsWith(`.local`)||e.endsWith(`.internal`)||ao(e)?!0:e.startsWith(`fc`)||e.startsWith(`fd`)||e.startsWith(`fe80:`)}catch{return!1}}const so=[`chat.inject`,`push.test`,`web.login.start`,`web.login.wait`],co=new Set([...Et,`device-pair`,`phone-control`,`sat-mining`,`talk-voice`]),lo=e=>Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):[];function uo(e){return typeof e==`string`&&so.includes(e)}function fo(e){if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e,n=Array.isArray(t.allow)?t.allow:[],r=[];for(let e of n){if(!e||typeof e!=`object`||Array.isArray(e))continue;let t=e;uo(t.method)&&r.push({method:t.method,sources:lo(t.sources),requireOperatorApproval:t.requireOperatorApproval===!0})}return r}const po=e=>{if(typeof e!=`string`)return;let t=e.trim();if(t)return t.toLowerCase()===`none`?null:t},mo=e=>{if(!e||typeof e!=`object`||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(!n.trim())continue;if(!r||typeof r!=`object`||Array.isArray(r)){t[n]={};continue}let e=r;t[n]={enabled:typeof e.enabled==`boolean`?e.enabled:void 0,config:`config`in e?e.config:void 0,runtime:ho(e.runtime)}}return t};function ho(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=t.helpers&&typeof t.helpers==`object`&&!Array.isArray(t.helpers)?t.helpers:void 0;return{helpers:{sessions:{read:(n?.sessions&&typeof n.sessions==`object`&&!Array.isArray(n.sessions)?n.sessions:void 0)?.read===!0}},adminRpcActions:{allow:fo(t.adminRpcActions)}}}const go=e=>{let t=po(e?.slots?.memory);return{enabled:e?.enabled!==!1,allow:lo(e?.allow),deny:lo(e?.deny),loadPaths:lo(e?.load?.paths),slots:{memory:t===void 0?ta(`memory`):t},entries:mo(e?.entries)}};function _o(e,t,n){if(!n.enabled)return{enabled:!1,reason:`plugins disabled`};if(n.deny.includes(e))return{enabled:!1,reason:`blocked by denylist`};if(n.allow.length>0&&!n.allow.includes(e))return{enabled:!1,reason:`not in allowlist`};if(n.slots.memory===e)return{enabled:!0};let r=n.entries[e];return r?.enabled===!0?{enabled:!0}:r?.enabled===!1?{enabled:!1,reason:`disabled in config`}:t===`bundled`&&co.has(e)?{enabled:!0}:t===`bundled`?{enabled:!1,reason:`bundled (disabled by default)`}:{enabled:!0}}function vo(e,t){if(!e)return!1;let n=kt(t);if(!n)return!1;let r=e.channels?.[n];return!r||typeof r!=`object`||Array.isArray(r)?!1:r.enabled===!0}function yo(e){let t=_o(e.id,e.origin,e.config);return!t.enabled&&t.reason===`bundled (disabled by default)`&&vo(e.rootConfig,e.id)?{enabled:!0}:t}function bo(e){return e.kind===`memory`?e.slot===null?{enabled:!1,reason:`memory slot disabled`}:typeof e.slot==`string`?e.slot===e.id?{enabled:!0,selected:!0}:{enabled:!1,reason:`memory slot set to "${e.slot}"`}:e.selectedId&&e.selectedId!==e.id?{enabled:!1,reason:`memory slot already filled by "${e.selectedId}"`}:{enabled:!0,selected:!0}:{enabled:!0}}function xo(e){try{let t=n.readdirSync(e,{withFileTypes:!0});for(let r of t){if(!r.isDirectory())continue;let t=i.join(e,r.name);if(n.existsSync(i.join(t,`fased.plugin.json`)))return!0}}catch{return!1}return!1}function So(e={}){let t=process.env.FASED_BUNDLED_PLUGINS_DIR?.trim();if(t)return t;try{let t=i.dirname(e.execPath??process.execPath),n=i.join(t,`extensions`);if(xo(n))return n}catch{}try{let t=e.moduleUrl??import.meta.url,n=Ee({argv1:e.argv1??process.argv[1],moduleUrl:t,cwd:e.cwd??process.cwd()});if(n){let e=i.join(n,`extensions`);if(xo(e))return e}let r=i.dirname(o(t));for(let e=0;e<6;e+=1){let e=i.join(r,`extensions`);if(xo(e))return e;let t=i.dirname(r);if(t===r)break;r=t}}catch{}}function Co(e,t){return vi(e,t)}function wo(e,t){let r=t?.get(e);if(r)return r;try{let r=n.realpathSync(e);return t?.set(e,r),r}catch{return null}}function To(e){try{return n.statSync(e)}catch{return null}}function Eo(e){return(e&511).toString(8).padStart(3,`0`)}const Do=new Set([`.ts`,`.js`,`.mts`,`.cts`,`.mjs`,`.cjs`]);function Oo(e){return e===void 0?process.platform===`win32`||typeof process.getuid!=`function`?null:process.getuid():e}function ko(e){let t=wo(e.source),n=wo(e.rootDir);return!t||!n||Co(n,t)?null:{reason:`source_escapes_root`,sourcePath:e.source,rootPath:e.rootDir,targetPath:e.source,sourceRealPath:t,rootRealPath:n}}function Ao(e){if(process.platform===`win32`)return null;let t=[e.rootDir,e.source],n=new Set;for(let r of t){let t=i.resolve(r);if(n.has(t))continue;n.add(t);let a=To(r);if(!a)return{reason:`path_stat_failed`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r};let o=a.mode&511;if(o&2)return{reason:`path_world_writable`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r,modeBits:o};if(e.origin!==`bundled`&&e.uid!==null&&typeof a.uid==`number`&&a.uid!==e.uid&&a.uid!==0)return{reason:`path_suspicious_ownership`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r,foundUid:a.uid,expectedUid:e.uid}}return null}function jo(e){return ko({source:e.source,rootDir:e.rootDir})||Ao({source:e.source,rootDir:e.rootDir,origin:e.origin,uid:Oo(e.ownershipUid)})}function Mo(e){return e.reason===`source_escapes_root`?`blocked plugin candidate: source escapes plugin root (${e.sourcePath} -> ${e.sourceRealPath}; root=${e.rootRealPath})`:e.reason===`path_stat_failed`?`blocked plugin candidate: cannot stat path (${e.targetPath})`:e.reason===`path_world_writable`?`blocked plugin candidate: world-writable path (${e.targetPath}, mode=${Eo(e.modeBits??0)})`:`blocked plugin candidate: suspicious ownership (${e.targetPath}, uid=${e.foundUid}, expected uid=${e.expectedUid} or root)`}function No(e){let t=jo({source:e.source,rootDir:e.rootDir,origin:e.origin,ownershipUid:e.ownershipUid});return t?(e.diagnostics.push({level:`warn`,source:t.targetPath,message:Mo(t)}),!0):!1}function Po(e){let t=i.extname(e);return Do.has(t)?!e.endsWith(`.d.ts`):!1}function Fo(e){let t=e.trim().toLowerCase();return!!(!t||t.endsWith(`.bak`)||t.includes(`.backup-`)||t.includes(`.disabled`))}function Io(e){let t=Vi({absolutePath:i.join(e,`package.json`),rootPath:e,boundaryLabel:`plugin package directory`});if(!t.ok)return null;try{let e=n.readFileSync(t.fd,`utf-8`);return JSON.parse(e)}catch{return null}finally{n.closeSync(t.fd)}}function Lo(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t||i.isAbsolute(t))return null;let n=t.replace(/^\.\/+/,``);return!n||n===`.`||n===`..`?null:n}function Ro(e,t){if(!Zi(t).ok)return[];let r=[e.main,e.module,...Qi],a=[],o=new Set;for(let e of r){let r=Lo(e);if(!r||o.has(r))continue;o.add(r);let s=i.resolve(t,r);Co(t,s)&&n.existsSync(s)&&Po(s)&&a.push(r)}return a}function zo(e,t){let n=$i(e)?.extensions;return Array.isArray(n)?n.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):t?Ro(e,t):[]}function Bo(e){let t=i.basename(e.filePath,i.extname(e.filePath)),n=e.packageName?.trim();if(!n)return t;let r=n.includes(`/`)?n.split(`/`).pop()??n:n;return e.hasMultipleExtensions?`${r}/${t}`:r}function Vo(e){let t=i.resolve(e.source);if(e.seen.has(t))return;let n=wo(e.rootDir)??i.resolve(e.rootDir);if(No({source:t,rootDir:n,origin:e.origin,diagnostics:e.diagnostics,ownershipUid:e.ownershipUid}))return;e.seen.add(t);let r=e.manifest??null;e.candidates.push({idHint:e.idHint,source:t,rootDir:n,origin:e.origin,workspaceDir:e.workspaceDir,packageName:r?.name?.trim()||void 0,packageVersion:r?.version?.trim()||void 0,packageDescription:r?.description?.trim()||void 0,packageDir:e.packageDir,packageManifest:$i(r??void 0)})}function Ho(e){let t=Vi({absolutePath:i.resolve(e.packageDir,e.entryPath),rootPath:e.packageDir,boundaryLabel:`plugin package directory`});if(!t.ok)return e.diagnostics.push({level:`error`,message:`extension entry escapes package directory: ${e.entryPath}`,source:e.sourceLabel}),null;let r=t.path;return n.closeSync(t.fd),r}function Uo(e){if(!n.existsSync(e.dir))return;let t=[];try{t=n.readdirSync(e.dir,{withFileTypes:!0})}catch(t){e.diagnostics.push({level:`warn`,message:`failed to read extensions dir: ${e.dir} (${String(t)})`,source:e.dir});return}for(let r of t){let t=i.join(e.dir,r.name);if(r.isFile()){if(!Po(t))continue;Vo({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:i.basename(r.name,i.extname(r.name)),source:t,rootDir:i.dirname(t),origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir})}if(!r.isDirectory()||Fo(r.name))continue;let a=Io(t),o=a?zo(a,t):[];if(o.length>0){for(let n of o){let r=Ho({packageDir:t,entryPath:n,sourceLabel:t,diagnostics:e.diagnostics});r&&Vo({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:Bo({filePath:r,packageName:a?.name,hasMultipleExtensions:o.length>1}),source:r,rootDir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,manifest:a,packageDir:t})}continue}let s=[`index.ts`,`index.js`,`index.mjs`,`index.cjs`].map(e=>i.join(t,e)).find(e=>n.existsSync(e));s&&Po(s)&&Vo({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:r.name,source:s,rootDir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,manifest:a,packageDir:t})}}function Wo(e){let t=E(e.rawPath);if(!n.existsSync(t)){e.diagnostics.push({level:`error`,message:`plugin path not found: ${t}`,source:t});return}let r=n.statSync(t);if(r.isFile()){if(!Po(t)){e.diagnostics.push({level:`error`,message:`plugin path is not a supported file: ${t}`,source:t});return}Vo({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:i.basename(t,i.extname(t)),source:t,rootDir:i.dirname(t),origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir});return}if(r.isDirectory()){let r=Io(t),a=r?zo(r,t):[];if(a.length>0){for(let n of a){let i=Ho({packageDir:t,entryPath:n,sourceLabel:t,diagnostics:e.diagnostics});i&&Vo({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:Bo({filePath:i,packageName:r?.name,hasMultipleExtensions:a.length>1}),source:i,rootDir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,manifest:r,packageDir:t})}return}let o=[`index.ts`,`index.js`,`index.mjs`,`index.cjs`].map(e=>i.join(t,e)).find(e=>n.existsSync(e));if(o&&Po(o)){Vo({candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen,idHint:i.basename(t),source:o,rootDir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,manifest:r,packageDir:t});return}Uo({dir:t,origin:e.origin,ownershipUid:e.ownershipUid,workspaceDir:e.workspaceDir,candidates:e.candidates,diagnostics:e.diagnostics,seen:e.seen});return}}function Go(e){let t=[],n=[],r=new Set,a=e.workspaceDir?.trim(),o=e.extraPaths??[];for(let i of o){if(typeof i!=`string`)continue;let o=i.trim();o&&Wo({rawPath:o,origin:`config`,ownershipUid:e.ownershipUid,workspaceDir:a?.trim()||void 0,candidates:t,diagnostics:n,seen:r})}if(a){let o=E(a),s=[i.join(o,`.fased`,`extensions`)];for(let i of s)Uo({dir:i,origin:`workspace`,ownershipUid:e.ownershipUid,workspaceDir:o,candidates:t,diagnostics:n,seen:r})}Uo({dir:i.join(yn(),`extensions`),origin:`global`,ownershipUid:e.ownershipUid,candidates:t,diagnostics:n,seen:r});let s=So();return s&&Uo({dir:s,origin:`bundled`,ownershipUid:e.ownershipUid,candidates:t,diagnostics:n,seen:r}),{candidates:t,diagnostics:n}}e(import.meta.url);const Ko=/(\d+)\.(\d+)\.(\d+)/;function qo(e){if(!e)return null;let t=e.match(Ko);if(!t)return null;let[,n,r,i]=t;return{major:Number.parseInt(n,10),minor:Number.parseInt(r,10),patch:Number.parseInt(i,10)}}function Jo(e,t){return e?e.major===t.major?e.minor===t.minor?e.patch>=t.patch:e.minor>t.minor:e.major>t.major:!1}const Yo=/^>=(\d+)\.(\d+)\.(\d+)$/;function Xo(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t)return null;let n=t.match(Yo);if(!n)return null;let r=`${n[1]}.${n[2]}.${n[3]}`;return qo(r)?{raw:t,minimumLabel:r}:null}function Zo(e){if(e.minHostVersion===void 0)return{ok:!0,requirement:null};let t=Xo(e.minHostVersion);if(!t)return{ok:!1,kind:`invalid`,error:`fased.install.minHostVersion must use a semver floor in the form ">=x.y.z"`};let n=e.currentVersion?.trim()||`unknown`,r=qo(n);if(!r)return{ok:!1,kind:`unknown_host_version`,requirement:t};let i=qo(t.minimumLabel);return!i||!Jo(r,i)?{ok:!1,kind:`incompatible`,requirement:t,currentVersion:n}:{ok:!0,requirement:t}}const Qo={config:0,workspace:1,global:2,bundled:3},$o=new Map,es=new Set;function ts(e){return e.manifest.runtimeOnly===!0?!0:e.manifest.id===`openai-runtime`&&e.candidate.packageName===`@fased/openai-runtime`}function ns(e){let t=e.FASED_PLUGIN_MANIFEST_CACHE_MS?.trim();if(t===``||t===`0`)return 0;if(!t)return 200;let n=Number.parseInt(t,10);return Number.isFinite(n)?Math.max(0,n):200}function rs(e){return e.FASED_DISABLE_PLUGIN_MANIFEST_CACHE?.trim()?!1:ns(e)>0}function is(e){let t=e.workspaceDir?E(e.workspaceDir):``,n=e.plugins.loadPaths.map(e=>E(e)).map(e=>e.trim()).filter(Boolean).toSorted();return`${t}::${e.hostVersion}::${JSON.stringify(n)}`}function as(e){try{return n.statSync(e).mtimeMs}catch{return null}}function os(e){return e?.trim()||void 0}function ss(e){if(!Array.isArray(e))return;let t=e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean);return t.length>0?t:void 0}function cs(e){let t=e.packageChannel?.id?.trim();if(!t||!e.channelConfigs?.[t])return e.channelConfigs;let n=e.channelConfigs[t],r=n.label??(typeof e.packageChannel?.label==`string`?e.packageChannel.label.trim():``),i=n.description??(typeof e.packageChannel?.blurb==`string`?e.packageChannel.blurb.trim():``),a=n.preferOver??ss(e.packageChannel?.preferOver);return{...e.channelConfigs,[t]:{...n,...r?{label:r}:{},...i?{description:i}:{},...a?.length?{preferOver:a}:{}}}}function ls(e){let t=cs({channelConfigs:e.manifest.channelConfigs,packageChannel:e.candidate.packageManifest?.channel});return{id:e.manifest.id,runtimeOnly:ts(e)?!0:void 0,name:os(e.manifest.name)??e.candidate.packageName,description:os(e.manifest.description)??e.candidate.packageDescription,version:os(e.manifest.version)??e.candidate.packageVersion,enabledByDefault:e.manifest.enabledByDefault===!0?!0:void 0,autoEnableWhenConfiguredProviders:e.manifest.autoEnableWhenConfiguredProviders,legacyPluginIds:e.manifest.legacyPluginIds,kind:e.manifest.kind,channels:e.manifest.channels??[],providers:e.manifest.providers??[],modelSupport:e.manifest.modelSupport,providerAuthEnvVars:e.manifest.providerAuthEnvVars,providerAuthAliases:e.manifest.providerAuthAliases,providerAuthChoices:e.manifest.providerAuthChoices,skills:e.manifest.skills??[],origin:e.candidate.origin,workspaceDir:e.candidate.workspaceDir,rootDir:e.candidate.rootDir,source:e.candidate.source,manifestPath:e.manifestPath,schemaCacheKey:e.schemaCacheKey,configSchema:e.configSchema,configUiHints:e.manifest.uiHints,contracts:e.manifest.contracts,channelConfigs:t,startupDeferConfiguredChannelFullLoadUntilAfterListen:e.candidate.packageManifest?.startup?.deferConfiguredChannelFullLoadUntilAfterListen===!0,...e.candidate.packageManifest?.channel?.id?{channelCatalogMeta:{id:e.candidate.packageManifest.channel.id,...typeof e.candidate.packageManifest.channel.label==`string`?{label:e.candidate.packageManifest.channel.label}:{},...typeof e.candidate.packageManifest.channel.blurb==`string`?{blurb:e.candidate.packageManifest.channel.blurb}:{},...e.candidate.packageManifest.channel.preferOver?{preferOver:e.candidate.packageManifest.channel.preferOver}:{}}}:{}}}function us(e){let t=go((e.config??{}).plugins),n=e.env??process.env,r=Jn(n,Yn),a=is({workspaceDir:e.workspaceDir,plugins:t,hostVersion:r}),o=e.cache!==!1&&rs(n);if(o){let e=$o.get(a);if(e&&e.expiresAt>Date.now())return e.registry}let s=e.candidates?{candidates:e.candidates,diagnostics:e.diagnostics??[]}:Go({workspaceDir:e.workspaceDir,extraPaths:t.loadPaths}),c=[...s.diagnostics],l=s.candidates,u=[],d=new Map,f=new Map;for(let e of l){let t=Zi(e.rootDir);if(!t.ok){if(e.idHint&&es.has(e.idHint))continue;c.push({level:`error`,message:t.error,source:t.manifestPath});continue}let n=t.manifest,a=Zo({currentVersion:r,minHostVersion:e.packageManifest?.install?.minHostVersion});if(!a.ok){let t=i.join(e.packageDir??e.rootDir,`package.json`);c.push({level:a.kind===`unknown_host_version`?`warn`:`error`,pluginId:n.id,source:t,message:a.kind===`invalid`?`plugin manifest invalid | ${a.error}`:a.kind===`unknown_host_version`?`plugin requires Fased >=${a.requirement.minimumLabel}, but this host version could not be determined; skipping load`:`plugin requires Fased >=${a.requirement.minimumLabel}, but this host is ${a.currentVersion}; skipping load`});continue}e.idHint&&e.idHint!==n.id&&c.push({level:`warn`,pluginId:n.id,source:e.source,message:`plugin id mismatch (manifest uses "${n.id}", entry hints "${e.idHint}")`});let o=n.configSchema,s=as(t.manifestPath),l=s?`${t.manifestPath}:${s}`:t.manifestPath,p=d.get(n.id);if(p){let r=wo(p.candidate.rootDir,f),i=wo(e.rootDir,f);if(r&&i&&r===i){Qo[e.origin]<Qo[p.candidate.origin]&&(u[p.recordIndex]=ls({manifest:n,candidate:e,manifestPath:t.manifestPath,schemaCacheKey:l,configSchema:o}),d.set(n.id,{candidate:e,recordIndex:p.recordIndex}));continue}if(ts({manifest:n,candidate:e})&&u[p.recordIndex]?.runtimeOnly===!0){Qo[e.origin]<Qo[p.candidate.origin]&&(u[p.recordIndex]=ls({manifest:n,candidate:e,manifestPath:t.manifestPath,schemaCacheKey:l,configSchema:o}),d.set(n.id,{candidate:e,recordIndex:p.recordIndex}));continue}c.push({level:`warn`,pluginId:n.id,source:e.source,message:`duplicate plugin id detected; later plugin may be overridden (${e.source})`})}else d.set(n.id,{candidate:e,recordIndex:u.length});u.push(ls({manifest:n,candidate:e,manifestPath:t.manifestPath,schemaCacheKey:l,configSchema:o}))}let p={plugins:u,diagnostics:c};if(o){let e=ns(n);e>0&&$o.set(a,{expiresAt:Date.now()+e,registry:p})}return p}process.env.FASED_XAI_OAUTH_CLIENT_ID?.trim();const ds=/^(?:[^~]|~0|~1)*$/;function fs(e){return e===`value`?!0:e.startsWith(`/`)?e.slice(1).split(`/`).every(e=>ds.test(e)):!1}const ps=`https://api.chutes.ai`;`${ps}`,`${ps}`,`${ps}`,new Set(ee().map(e=>e.id)),new Map([`auth_permanent`,`auth`,`billing`,`format`,`model_not_found`,`timeout`,`overloaded`,`rate_limit`,`session_expired`,`unknown`].map((e,t)=>[e,t]));const ms={id:`glm-4-7-251222`,name:`GLM 4.7`,reasoning:!1,input:[`text`,`image`],contextWindow:2e5,maxTokens:4096},hs=[{id:`ark-code-latest`,name:`Ark Coding Plan`,reasoning:!1,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`doubao-seed-2.0-code`,name:`Doubao Seed 2.0 Code`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2.0-pro`,name:`Doubao Seed 2.0 Pro`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2.0-lite`,name:`Doubao Seed 2.0 Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-code`,name:`Doubao Seed Code`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`minimax-m2.5`,name:`MiniMax M2.5`,reasoning:!0,input:[`text`],contextWindow:2e5,maxTokens:128e3},{id:`glm-4.7`,name:`GLM 4.7 Coding`,reasoning:!1,input:[`text`],contextWindow:2e5,maxTokens:128e3},{id:`deepseek-v3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:32e3},{id:`kimi-k2.5`,name:`Kimi K2.5 Coding`,reasoning:!1,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3}];function gs(e,t){return{id:e.id,name:e.name,reasoning:e.reasoning,input:[...e.input],cost:t,contextWindow:e.contextWindow,maxTokens:e.maxTokens}}const _s={input:1e-4,output:2e-4,cacheRead:0,cacheWrite:0},vs=[{id:`seed-2-0-pro-260328`,name:`ByteDance Seed 2.0 Pro`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`seed-2-0-lite-260228`,name:`ByteDance Seed 2.0 Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`seed-2-0-mini-260215`,name:`ByteDance Seed 2.0 Mini`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`seed-2-0-code-preview-260328`,name:`ByteDance Seed 2.0 Code Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`deepseek-v3-2-251201`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:32e3},{id:`glm-4-7-251222`,name:`GLM 4.7`,reasoning:!1,input:[`text`],contextWindow:2e5,maxTokens:128e3}];function ys(e){return gs(e,_s)}const bs=[{id:`ark-code-latest`,name:`BytePlus Coding Plan`,reasoning:!1,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`dola-seed-2.0-pro`,name:`Dola Seed 2.0 Pro`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`dola-seed-2.0-lite`,name:`Dola Seed 2.0 Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`dola-seed-2.0-code`,name:`Dola Seed 2.0 Code`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`bytedance-seed-code`,name:`ByteDance Seed Code`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`glm-5.1`,name:`GLM 5.1`,reasoning:!1,input:[`text`],contextWindow:2e5,maxTokens:128e3},{id:`glm-4.7`,name:`GLM 4.7`,reasoning:!1,input:[`text`],contextWindow:2e5,maxTokens:128e3},{id:`kimi-k2.5`,name:`Kimi K2.5`,reasoning:!1,input:[`text`,`image`],contextWindow:256e3,maxTokens:32e3},{id:`gpt-oss-120b`,name:`GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:32e3}],xs=`cloudflare-ai-gateway`,Ss=`claude-sonnet-5`;`${xs}${Ss}`;const Cs={input:0,output:0,cacheRead:0,cacheWrite:0},ws={tools:!0,json:!0},Ts={thinkingLevels:[...k],defaultThinkingLevel:`low`,reasoningBudgetSupported:!0},Es=[{id:Ss,name:`Claude Sonnet 5`,reasoning:!0,input:[`text`,`image`],cost:Cs,contextWindow:1e6,maxTokens:128e3,capabilities:{...ws,...Ts,thinkingMode:`anthropic-adaptive`}},{id:`claude-opus-4-8`,name:`Claude Opus 4.8`,reasoning:!0,input:[`text`,`image`],cost:Cs,contextWindow:1e6,maxTokens:128e3,capabilities:{...ws,...Ts,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1}},{id:`claude-haiku-4-5`,name:`Claude Haiku 4.5`,reasoning:!0,input:[`text`,`image`],cost:Cs,contextWindow:2e5,maxTokens:64e3,capabilities:{...ws,...Ts,thinkingMode:`anthropic-thinking-budget`}}],Ds=Es.map(e=>e.id).map(e=>`${xs}/${e}`);function Os(e){let t=e?.id?.trim()||Ss,n=Es.find(e=>e.id===t)??Es[0];return{id:t,name:e?.name??n.name,api:`anthropic-messages`,reasoning:e?.reasoning??n.reasoning,input:e?.input??[...n.input],cost:{...n.cost},contextWindow:n.contextWindow,maxTokens:n.maxTokens,capabilities:n.capabilities?{...n.capabilities}:void 0}}function ks(e=xs){return Object.fromEntries(Es.map(t=>[`${e}/${t.id}`.toLowerCase(),t.capabilities?{...t.capabilities}:{}]))}const As=`openai/gpt-oss-120b`;`${As}`;const A={tools:!0,json:!0},js=[{id:As,name:`GPT-OSS 120B`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.15,output:.75,cacheRead:0,cacheWrite:0},capabilities:A},{id:`deepseek-ai/DeepSeek-V4-Pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],contextWindow:1048576,maxTokens:8192,cost:{input:1.69,output:3.38,cacheRead:0,cacheWrite:0},capabilities:A},{id:`deepseek-ai/DeepSeek-V4-Flash`,name:`DeepSeek V4 Flash`,reasoning:!1,input:[`text`],contextWindow:1048576,maxTokens:8192,cost:{input:.14,output:.28,cacheRead:0,cacheWrite:0},capabilities:A},{id:`moonshotai/Kimi-K2.6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.95,output:4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`MiniMaxAI/MiniMax-M2.7`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],contextWindow:204800,maxTokens:8192,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0},capabilities:A},{id:`zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:8192,cost:{input:1.4,output:4.4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3.6-35B-A3B`,name:`Qwen3.6 35B A3B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.15,output:.95,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.6,output:3.6,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3-Coder-Next`,name:`Qwen3 Coder Next`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.2,output:1.5,cacheRead:0,cacheWrite:0},capabilities:{tools:!0,json:!1}},{id:`Qwen/Qwen3-Coder-480B-A35B-Instruct`,name:`Qwen3 Coder 480B A35B Instruct`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.3,output:1.3,cacheRead:0,cacheWrite:0},capabilities:A},{id:`google/gemma-4-31B-it`,name:`Gemma 4 31B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.14,output:.4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`google/gemma-4-26B-A4B-it`,name:`Gemma 4 26B A4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.13,output:.4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`openai/gpt-oss-20b`,name:`GPT-OSS 20B`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.1,output:.5,cacheRead:0,cacheWrite:0},capabilities:A},{id:`deepseek-ai/DeepSeek-R1`,name:`DeepSeek R1`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:8192,cost:{input:.7,output:2.5,cacheRead:0,cacheWrite:0},capabilities:A},{id:`deepseek-ai/DeepSeek-V3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:163840,maxTokens:8192,cost:{input:.269,output:.4,cacheRead:0,cacheWrite:0},capabilities:A},{id:`meta-llama/Llama-3.3-70B-Instruct`,name:`Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.59,output:.79,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3-VL-235B-A22B-Instruct`,name:`Qwen3 VL 235B A22B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:8192,cost:{input:.3,output:1.5,cacheRead:0,cacheWrite:0},capabilities:A},{id:`Qwen/Qwen3-235B-A22B-Instruct-2507`,name:`Qwen3 235B A22B Instruct 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.09,output:.58,cacheRead:0,cacheWrite:0},capabilities:A},{id:`google/gemma-3n-E4B-it`,name:`Gemma 3N E4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:32768,maxTokens:8192,cost:{input:.06,output:.12,cacheRead:0,cacheWrite:0},capabilities:{tools:!1,json:!0}},{id:`inclusionAI/Ling-2.6-1T`,name:`Ling 2.6 1T`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.3,output:2.5,cacheRead:0,cacheWrite:0},capabilities:A}],Ms=js.map(e=>e.id).map(e=>`huggingface/${e}`);function Ns(e){return{...e.capabilities?{...e.capabilities}:{},...e.reasoning?{fixedReasoning:!0}:{}}}function Ps(e){let t=Ns(e);return{id:e.id,name:e.name,api:`openai-completions`,reasoning:e.reasoning,input:[...e.input],cost:{...e.cost},contextWindow:e.contextWindow,maxTokens:e.maxTokens,capabilities:t}}function Fs(e=`huggingface`){return Object.fromEntries(js.map(t=>[`${e}/${t.id}`.toLowerCase(),Ns(t)]))}const Is=[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.4-nano`,`gpt-5.3-codex-spark`,`claude-fable-5`,`claude-opus-4-8`,`claude-sonnet-5`,`claude-haiku-4-5`,`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`,`minimax-m2.7`,`glm-5.2`,`kimi-k2.6`],Ls=Is.map(e=>`opencode/${e}`);function Rs(e){let t=e.trim().toLowerCase();return t.startsWith(`claude-`)?{provider:`anthropic`,model:t}:t.startsWith(`gemini-`)?{provider:`google`,model:t}:t.startsWith(`glm-`)?{provider:`zai`,model:t}:t.startsWith(`kimi-`)?{provider:`moonshot`,model:t}:t.startsWith(`qwen`)?{provider:`qwen`,model:t}:t.startsWith(`gpt-`)?{provider:`openai`,model:t}:{provider:`opencode`,model:t}}function zs(e){let t=Rs(e),n=Qa({provider:t.provider,model:t.model,reasoning:!0});return{tools:!0,json:!0,...n?{thinkingLevels:n.thinkingLevels,defaultThinkingLevel:n.defaultThinkingLevel,thinkingMode:n.thinkingMode,reasoningBudgetSupported:n.reasoningBudgetSupported}:{}}}function Bs(e){return Object.fromEntries(e.map(e=>[e,zs(e.replace(/^opencode\//,``))]))}const Vs=`hf:MiniMaxAI/MiniMax-M2.5`;`${Vs}`;const Hs={input:0,output:0,cacheRead:0,cacheWrite:0},j={tools:!0,json:!0},Us=[{id:`hf:zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:j},{id:`hf:moonshotai/Kimi-K2.6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:65536,capabilities:j},{id:Vs,name:`MiniMax M2.5`,reasoning:!1,input:[`text`],contextWindow:191488,maxTokens:65536,capabilities:j},{id:`hf:zai-org/GLM-4.7-Flash`,name:`GLM-4.7 Flash`,reasoning:!1,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:j},{id:`hf:zai-org/GLM-5`,name:`GLM-5`,reasoning:!0,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:j},{id:`hf:nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4`,name:`NVIDIA Nemotron 3 Super 120B`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:65536,capabilities:j},{id:`hf:zai-org/GLM-4.7`,name:`GLM-4.7`,reasoning:!1,input:[`text`],contextWindow:202752,maxTokens:65536,capabilities:j},{id:`hf:deepseek-ai/DeepSeek-V3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:159e3,maxTokens:8192,capabilities:j},{id:`hf:openai/gpt-oss-120b`,name:`GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:j},{id:`hf:deepseek-ai/DeepSeek-R1-0528`,name:`DeepSeek R1 0528`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:j},{id:`hf:deepseek-ai/DeepSeek-V3`,name:`DeepSeek V3`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:j},{id:`hf:meta-llama/Llama-3.3-70B-Instruct`,name:`Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:j},{id:`hf:moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:j},{id:`hf:nvidia/Kimi-K2.5-NVFP4`,name:`Kimi K2.5 NVFP4`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:j},{id:`hf:Qwen/Qwen3-235B-A22B-Thinking-2507`,name:`Qwen3 235B A22B Thinking 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,capabilities:j},{id:`hf:Qwen/Qwen3-Coder-480B-A35B-Instruct`,name:`Qwen3 Coder 480B A35B Instruct`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,capabilities:j},{id:`hf:Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:j}],Ws=Us.map(e=>e.id);function Gs(e){return{id:e.id,name:e.name,reasoning:e.reasoning,input:[...e.input],cost:{...Hs},contextWindow:e.contextWindow,maxTokens:e.maxTokens,capabilities:e.capabilities?{...e.capabilities}:void 0}}function Ks(e=`synthetic`){return Object.fromEntries(Us.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}const qs=`moonshotai/Kimi-K2.6`;`${qs}`;const M={tools:!0,json:!0},Js={tools:!1,json:!1},Ys=[{id:qs,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:16384,cost:{input:1.2,output:4.5,cacheRead:.2,cacheWrite:1.2},capabilities:{...M,video:!0}},{id:`moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.5,output:2.8,cacheRead:.5,cacheWrite:2.8},capabilities:M},{id:`MiniMaxAI/MiniMax-M2.7`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:32768,cost:{input:.3,output:1.2,cacheRead:.06,cacheWrite:.3},capabilities:M},{id:`zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:128e3,cost:{input:1.4,output:4.4,cacheRead:1.4,cacheWrite:1.4},capabilities:M},{id:`zai-org/GLM-5`,name:`GLM-5`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:128e3,cost:{input:1,output:3.2,cacheRead:1,cacheWrite:1},capabilities:M},{id:`Qwen/Qwen3.6-Plus`,name:`Qwen3.6 Plus`,reasoning:!0,input:[`text`],contextWindow:1e6,maxTokens:32768,cost:{input:.5,output:3,cacheRead:.5,cacheWrite:.5},capabilities:Js},{id:`Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.6,output:3.6,cacheRead:.6,cacheWrite:.6},capabilities:M},{id:`Qwen/Qwen3.5-9B`,name:`Qwen3.5 9B`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.1,output:.15,cacheRead:.1,cacheWrite:.1},capabilities:M},{id:`openai/gpt-oss-120b`,name:`GPT-OSS 120B`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:32768,cost:{input:.15,output:.6,cacheRead:.15,cacheWrite:.15},capabilities:M},{id:`openai/gpt-oss-20b`,name:`GPT-OSS 20B`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:32768,cost:{input:.05,output:.2,cacheRead:.05,cacheWrite:.05},capabilities:M},{id:`deepseek-ai/DeepSeek-V4-Pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],contextWindow:512e3,maxTokens:32768,cost:{input:2.1,output:4.4,cacheRead:.2,cacheWrite:2.1},capabilities:M},{id:`deepseek-ai/DeepSeek-R1`,name:`DeepSeek R1 0528`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:32768,cost:{input:3,output:7,cacheRead:3,cacheWrite:3},capabilities:Js},{id:`deepseek-ai/DeepSeek-V3.1`,name:`DeepSeek V3.1`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:32768,cost:{input:.6,output:1.7,cacheRead:.6,cacheWrite:.6},capabilities:Js},{id:`Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8`,name:`Qwen3 Coder 480B A35B Instruct FP8`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:32768,cost:{input:2,output:2,cacheRead:2,cacheWrite:2},capabilities:M},{id:`Qwen/Qwen3-235B-A22B-Instruct-2507-tput`,name:`Qwen3 235B A22B Instruct 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:32768,cost:{input:.2,output:.6,cacheRead:.2,cacheWrite:.2},capabilities:M},{id:`Qwen/Qwen3-Coder-Next-FP8`,name:`Qwen3 Coder Next FP8`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:32768,cost:{input:.5,output:1.2,cacheRead:.5,cacheWrite:.5},capabilities:Js},{id:`meta-llama/Llama-3.3-70B-Instruct-Turbo`,name:`Llama 3.3 70B Instruct Turbo`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.88,output:.88,cacheRead:.88,cacheWrite:.88},capabilities:M},{id:`essentialai/rnj-1-instruct`,name:`Rnj-1 Instruct`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:8192,cost:{input:.15,output:.15,cacheRead:.15,cacheWrite:.15},capabilities:M},{id:`google/gemma-4-31B-it`,name:`Gemma 4 31B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.2,output:.5,cacheRead:.2,cacheWrite:.2},capabilities:M},{id:`google/gemma-3n-E4B-it`,name:`Gemma 3N E4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:32768,maxTokens:8192,cost:{input:.06,output:.12,cacheRead:.06,cacheWrite:.06},capabilities:{tools:!1,json:!0}}],Xs=Ys.map(e=>e.id).map(e=>`together/${e}`);function Zs(e){return{id:e.id,name:e.name,api:`openai-completions`,reasoning:e.reasoning,input:[...e.input],cost:{...e.cost},contextWindow:e.contextWindow,maxTokens:e.maxTokens,capabilities:e.capabilities?{...e.capabilities}:void 0}}function Qs(e=`together`){return Object.fromEntries(Ys.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}const $s=`zai-org-glm-5-1`;`${$s}`;const N={thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1},P={tools:!0,json:!0},ec={tools:!0,json:!1},tc=[{id:$s,name:`GLM 5.1`,reasoning:!0,input:[`text`],cost:{input:1.75,output:5.5,cacheRead:.325,cacheWrite:0},contextWindow:2e5,maxTokens:24e3,capabilities:{...P,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`venice-uncensored-1-2`,name:`Venice Uncensored 1.2`,reasoning:!1,input:[`text`,`image`],cost:{input:.2,output:.9,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:8192,capabilities:P},{id:`qwen-3-6-plus`,name:`Qwen 3.6 Plus Uncensored`,reasoning:!0,input:[`text`,`image`],cost:{input:.625,output:3.75,cacheRead:.0625,cacheWrite:.78},contextWindow:1e6,maxTokens:65536,capabilities:{...P,video:!0,fixedReasoning:!0}},{id:`qwen3-5-397b-a17b`,name:`Qwen 3.5 397B`,reasoning:!0,input:[`text`,`image`],cost:{input:.75,output:4.5,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:32768,capabilities:{...P,video:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`qwen3-235b-a22b-thinking-2507`,name:`Qwen 3 235B A22B Thinking`,reasoning:!0,input:[`text`],cost:{input:.45,output:3.5,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:16384,capabilities:{...P,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`qwen3-coder-480b-a35b-instruct-turbo`,name:`Qwen 3 Coder 480B Turbo`,reasoning:!1,input:[`text`],cost:{input:.35,output:1.5,cacheRead:.04,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:P},{id:`qwen3-vl-235b-a22b`,name:`Qwen3 VL 235B`,reasoning:!1,input:[`text`,`image`],cost:{input:.25,output:1.5,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:16384,capabilities:P},{id:`deepseek-v4-pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],cost:{input:1.73,output:3.796,cacheRead:.33,cacheWrite:0},contextWindow:1e6,maxTokens:32768,capabilities:{...P,fixedReasoning:!0}},{id:`deepseek-v4-flash`,name:`DeepSeek V4 Flash`,reasoning:!0,input:[`text`],cost:{input:.17,output:.35,cacheRead:.028,cacheWrite:0},contextWindow:1e6,maxTokens:32768,capabilities:{...P,fixedReasoning:!0}},{id:`kimi-k2-6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],cost:{input:.85,output:4.655,cacheRead:.22,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:{...P,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...N}},{id:`claude-opus-4-7`,name:`Claude Opus 4.7`,reasoning:!0,input:[`text`,`image`],cost:{input:6,output:30,cacheRead:.6,cacheWrite:7.5},contextWindow:1e6,maxTokens:128e3,capabilities:{...P,fixedReasoning:!0}},{id:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`,reasoning:!0,input:[`text`,`image`],cost:{input:3.6,output:18,cacheRead:.36,cacheWrite:4.5},contextWindow:1e6,maxTokens:64e3,capabilities:{...P,fixedReasoning:!0}},{id:`openai-gpt-55`,name:`GPT-5.5`,reasoning:!0,input:[`text`,`image`],cost:{input:6.25,output:37.5,cacheRead:.625,cacheWrite:0},contextWindow:1e6,maxTokens:131072,capabilities:{...P,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...N}},{id:`openai-gpt-55-pro`,name:`GPT-5.5 Pro`,reasoning:!0,input:[`text`,`image`],cost:{input:37.5,output:225,cacheRead:0,cacheWrite:0},contextWindow:1e6,maxTokens:128e3,capabilities:{...P,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`medium`,...N}},{id:`openai-gpt-54`,name:`GPT-5.4`,reasoning:!0,input:[`text`,`image`],cost:{input:3.13,output:18.8,cacheRead:.313,cacheWrite:0},contextWindow:1e6,maxTokens:131072,capabilities:{...P,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...N}},{id:`openai-gpt-54-mini`,name:`GPT-5.4 Mini`,reasoning:!0,input:[`text`,`image`],cost:{input:.9375,output:5.625,cacheRead:.09375,cacheWrite:0},contextWindow:4e5,maxTokens:128e3,capabilities:{...P,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...N}},{id:`gemini-3-1-pro-preview`,name:`Gemini 3.1 Pro Preview`,reasoning:!0,input:[`text`,`image`],cost:{input:2.5,output:15,cacheRead:.5,cacheWrite:.5},contextWindow:1e6,maxTokens:32768,capabilities:{...P,audio:!0,video:!0,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`grok-4-20`,name:`Grok 4.20`,reasoning:!0,input:[`text`,`image`],cost:{input:1.42,output:2.83,cacheRead:.23,cacheWrite:0},contextWindow:2e6,maxTokens:128e3,capabilities:{...P,fixedReasoning:!0}},{id:`minimax-m27`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],cost:{input:.375,output:1.5,cacheRead:.075,cacheWrite:0},contextWindow:198e3,maxTokens:32768,capabilities:{...ec,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`openai-gpt-oss-120b`,name:`OpenAI GPT OSS 120B`,reasoning:!0,input:[`text`],cost:{input:.07,output:.3,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:16384,capabilities:{...ec,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`google-gemma-4-31b-it`,name:`Google Gemma 4 31B Instruct`,reasoning:!0,input:[`text`,`image`],cost:{input:.175,output:.5,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:8192,capabilities:{...P,video:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...N}},{id:`mistral-small-2603`,name:`Mistral Small 4`,reasoning:!0,input:[`text`,`image`],cost:{input:.1875,output:.75,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:{...P,thinkingLevels:[`off`,`high`],defaultThinkingLevel:`high`,...N}}],nc=tc.map(e=>e.id).map(e=>`venice/${e}`);function rc(e){let t=e.capabilities,n=!!t?.thinkingLevels?.length;return{id:e.id,name:e.name,api:`openai-completions`,reasoning:e.reasoning,input:[...e.input],cost:{...e.cost},contextWindow:e.contextWindow,maxTokens:e.maxTokens,compat:{supportsUsageInStreaming:!1,supportsReasoningEffort:n},capabilities:t?{...t}:void 0}}function ic(e=`venice`){return Object.fromEntries(tc.map(t=>[`${e}/${t.id}`.toLowerCase(),t.capabilities?{...t.capabilities}:{}]))}const ac=[{id:`openai/gpt-5.5`,contextWindow:1e6,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`web-search`,`implicit-caching`,`file-input`,`vision`]},{id:`openai/gpt-5.4`,contextWindow:1e6,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`,`web-search`]},{id:`openai/gpt-5.4-mini`,contextWindow:4e5,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`,`web-search`]},{id:`openai/gpt-5.4-nano`,contextWindow:4e5,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`web-search`,`vision`,`file-input`]},{id:`anthropic/claude-fable-5`,contextWindow:1e6,maxTokens:128e3,tags:[`tool-use`,`reasoning`,`vision`,`file-input`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-opus-4.8`,contextWindow:1e6,maxTokens:128e3,tags:[`tool-use`,`reasoning`,`vision`,`file-input`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-sonnet-5`,contextWindow:1e6,maxTokens:128e3,tags:[`file-input`,`reasoning`,`tool-use`,`vision`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-haiku-4.5`,contextWindow:2e5,maxTokens:64e3,tags:[`file-input`,`reasoning`,`tool-use`,`vision`,`explicit-caching`]},{id:`google/gemini-3.5-flash`,contextWindow:1e6,maxTokens:65e3,tags:[`reasoning`,`tool-use`,`file-input`,`vision`,`web-search`,`implicit-caching`]},{id:`google/gemini-3.1-pro-preview`,contextWindow:1e6,maxTokens:64e3,tags:[`file-input`,`tool-use`,`reasoning`,`vision`,`web-search`,`implicit-caching`]},{id:`google/gemini-3.1-flash-lite`,contextWindow:1e6,maxTokens:65e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`,`web-search`]},{id:`xai/grok-4.3`,contextWindow:1e6,maxTokens:1e6,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`,`web-search`]},{id:`xai/grok-build-0.1`,contextWindow:256e3,maxTokens:256e3,tags:[`tool-use`,`implicit-caching`]},{id:`mistral/mistral-medium-3.5`,contextWindow:256e3,maxTokens:256e3,tags:[`reasoning`,`tool-use`,`vision`]},{id:`minimax/minimax-m2.7`,contextWindow:204800,maxTokens:131e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`]},{id:`minimax/minimax-m2.7-highspeed`,contextWindow:204800,maxTokens:131100,tags:[`reasoning`,`tool-use`,`implicit-caching`,`vision`]},{id:`moonshotai/kimi-k2.6`,contextWindow:262e3,maxTokens:262e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`]}],oc=ac.map(e=>e.id),sc=oc.map(e=>`vercel-ai-gateway/${e}`),cc={anthropic:`Anthropic`,google:`Google`,minimax:`MiniMax`,mistral:`Mistral`,moonshotai:`Moonshot`,openai:`OpenAI`,xai:`xAI`};function lc(e){let t=e.trim().replace(/^vercel-ai-gateway\//,``).toLowerCase();return ac.find(e=>e.id.toLowerCase()===t)}function uc(e){let[t,...n]=e.trim().replace(/^vercel-ai-gateway\//,``).split(`/`),r=n.join(`/`);switch(t){case`anthropic`:return{provider:`anthropic`,model:r};case`google`:return{provider:`google`,model:r};case`minimax`:return{provider:`minimax`,model:r};case`moonshotai`:return{provider:`moonshot`,model:r};case`openai`:return{provider:`openai`,model:r};case`xai`:return{provider:`xai`,model:r};default:return{provider:`vercel-ai-gateway`,model:e}}}function dc(e){let t=lc(e);if(!t)return;let n=new Set(t.tags.map(e=>e.toLowerCase())),r=uc(t.id),i=n.has(`reasoning`)?Qa({provider:r.provider,model:r.model,reasoning:!0}):null;return{tools:n.has(`tool-use`),...i?{thinkingLevels:i.thinkingLevels,defaultThinkingLevel:i.defaultThinkingLevel,thinkingMode:i.thinkingMode,reasoningBudgetSupported:i.reasoningBudgetSupported}:{}}}function fc(e){return Object.fromEntries(e.flatMap(e=>{let t=dc(e);return t?[[e,t]]:[]}))}function pc(e){let[t,...n]=e.split(`/`),r=cc[t??``]??t,i=n.join(`/`);return!r||!i?e:`${r} ${i.replace(/\bapi\b/gi,`API`).replace(/\bgpt\b/gi,`GPT`).replace(/\bxai\b/gi,`xAI`).replace(/[._-]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}`}function mc(e){let t=lc(e),n=new Set(t?.tags.map(e=>e.toLowerCase())??[]),r=dc(e);return{id:e,name:pc(e),reasoning:n.has(`reasoning`),input:n.has(`vision`)?[`text`,`image`]:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:t?.contextWindow??2e5,maxTokens:t?.maxTokens??8192,api:`openai-completions`,...r?{capabilities:r}:{}}}const hc=`default`;`${hc}`,[{id:hc,name:`LiteLLM proxy default`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},capabilities:{}}].map(e=>e.id).map(e=>`litellm/${e}`);const gc=`openai.anthropic.chutes.ollama.lmstudio.vllm.minimax.moonshot.google.xai.mistral.volcengine.byteplus.openrouter.qwen.zai.qianfan.copilot.ai-gateway.opencode-zen.xiaomi.synthetic.together.huggingface.venice.litellm.cloudflare-ai-gateway.custom`.split(`.`);new Map(gc.map((e,t)=>[e,t]));const _c=`openai`,vc=`openai-codex`,yc=`anthropic`,bc=`chutes`,xc=`ollama`,Sc=`lmstudio`,Cc=`vllm`,wc=`minimax`,Tc=`minimax-cn`,Ec=`minimax-portal`,F=`moonshot`,Dc=`kimi-coding`,Oc=`google`,kc=`google-gemini-cli`,Ac=`mistral`,jc=`volcengine`,Mc=`volcengine-coding`,Nc=`volcengine-plan`,Pc=`byteplus`,Fc=`byteplus-coding`,Ic=`byteplus-plan`,Lc=`openrouter`,Rc=`qwen`,zc=`qwen-coding-plan`,Bc=`qianfan`,Vc=`github-copilot`,Hc=`copilot-proxy`,Uc=`vercel-ai-gateway`,Wc=`opencode`,Gc=`xiaomi`,Kc=`synthetic`,qc=`together`,Jc=`huggingface`,Yc=`venice`,Xc=`litellm`,Zc=`custom`,Qc=[`gpt-5.6`,`gpt-5.6-terra`,`gpt-5.6-luna`,`gpt-5.5`],$c=[`gpt-5.6-sol`,`gpt-5.6-terra`,`gpt-5.6-luna`,`gpt-5.5`],el=[`gpt-5.3-codex`,`gpt-5.3-codex-spark`,`gpt-5.4`,`gpt-5.4-mini`],tl=Qc.map(e=>`${_c}/${e}`),nl=$c.map(e=>`${vc}/${e}`),rl=[`claude-fable-5`,`claude-opus-4-8`,`claude-sonnet-5`,`claude-haiku-4-5`].map(e=>`${yc}/${e}`),il=[`google/gemma-4-31B-turbo-TEE`,`Qwen/Qwen3-32B-TEE`,`deepseek-ai/DeepSeek-V3.2-TEE`,`zai-org/GLM-5.1-TEE`,`moonshotai/Kimi-K2.6-TEE`,`Qwen/Qwen3.6-27B-TEE`,`Qwen/Qwen3.5-397B-A17B-TEE`,`zai-org/GLM-5-TEE`,`Qwen/Qwen3-235B-A22B-Thinking-2507-TEE`,`zai-org/GLM-5.2-TEE`],al=il.map(e=>`${bc}/${e}`),ol=[],sl=[],cl=[],ll=[`MiniMax-M2.7`,`MiniMax-M2.7-highspeed`,`MiniMax-M2.5`,`MiniMax-M2.5-highspeed`],ul=ll.map(e=>`${wc}/${e}`),dl=ll.map(e=>`${Tc}/${e}`),fl=[`MiniMax-M2.7`,`MiniMax-M2.7-highspeed`].map(e=>`${Ec}/${e}`),pl=[`kimi-k2.6`,`kimi-k2.5`].map(e=>`${F}/${e}`),ml=[`kimi-for-coding`].map(e=>`${Dc}/${e}`),hl=[`gemini-3.5-flash`,`gemini-3.1-pro-preview`,`gemini-3-flash-preview`,`gemini-3.1-flash-lite`],gl=hl.map(e=>`${Oc}/${e}`),_l=hl.map(e=>`${kc}/${e}`),vl=[`grok-4.5`,`grok-4.3`,`grok-build-0.1`].map(e=>`xai/${e}`),yl=[`mistral-medium-3.5`,`mistral-small-2603`,`mistral-large-2512`,`devstral-2512`,`ministral-14b-2512`,`ministral-8b-2512`,`ministral-3b-2512`].map(e=>`${Ac}/${e}`),bl=[`doubao-seed-2-0-pro-260215`,`doubao-seed-2-0-lite-260215`,`doubao-seed-2-0-mini-260215`,`doubao-seed-2-0-code-preview-260215`,`deepseek-v3-2-251201`,`glm-4-7-251222`].map(e=>`${jc}/${e}`),xl=[`ark-code-latest`,`doubao-seed-2.0-code`,`doubao-seed-2.0-pro`,`doubao-seed-2.0-lite`,`doubao-seed-code`,`minimax-m2.5`,`glm-4.7`,`deepseek-v3.2`,`kimi-k2.5`].flatMap(e=>[`${Mc}/${e}`,`${Nc}/${e}`]),Sl=[`seed-2-0-pro-260328`,`seed-2-0-lite-260228`,`seed-2-0-mini-260215`,`seed-2-0-code-preview-260328`,`deepseek-v3-2-251201`,`glm-4-7-251222`].map(e=>`${Pc}/${e}`),Cl=[`ark-code-latest`,`dola-seed-2.0-pro`,`dola-seed-2.0-lite`,`dola-seed-2.0-code`,`bytedance-seed-code`,`glm-5.1`,`glm-4.7`,`kimi-k2.5`,`gpt-oss-120b`].flatMap(e=>[`${Fc}/${e}`,`${Ic}/${e}`]),wl=`openai/gpt-5.6-sol,openai/gpt-5.6-terra,openai/gpt-5.6-luna,openai/gpt-5.5,openai/gpt-5.4,openai/gpt-5.4-mini,openai/gpt-5.4-nano,anthropic/claude-fable-5,anthropic/claude-opus-4.8,anthropic/claude-sonnet-5,anthropic/claude-haiku-4.5,google/gemini-3.5-flash,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google/gemini-3.1-flash-lite,x-ai/grok-4.5,x-ai/grok-4.3,x-ai/grok-build-0.1,mistralai/mistral-medium-3-5,mistralai/mistral-small-2603,mistralai/mistral-large-2512,mistralai/devstral-2512,qwen/qwen3.7-max,qwen/qwen3.7-plus,qwen/qwen3.6-flash,z-ai/glm-5.2,deepseek/deepseek-v4-pro,deepseek/deepseek-v4-flash,minimax/minimax-m2.7,moonshotai/kimi-k2.6`.split(`,`).map(e=>`${Lc}/${e}`),Tl=[`qwen3.7-max`,`qwen3.7-plus`,`qwen3.6-flash`].map(e=>`${Rc}/${e}`),El=[`qwen3.7-max`,`qwen3.7-plus`,`qwen3.6-flash`,`deepseek-v4-pro`,`deepseek-v4-flash`,`kimi-k2.7-code`,`glm-5.2`,`MiniMax-M2.5`].map(e=>`${zc}/${e}`),Dl=[`glm-5.2`,`glm-5.1`,`glm-5`,`glm-5-turbo`,`glm-5v-turbo`,`glm-4.7`,`glm-4.7-flashx`,`glm-4.7-flash`].map(e=>`zai/${e}`),Ol={tools:!0,json:!0,thinkingLevels:[`off`,`low`],defaultThinkingLevel:`low`,thinkingMode:`zai-binary`,reasoningBudgetSupported:!1},kl=Object.fromEntries(Dl.map(e=>[e,e.endsWith(`/glm-5v-turbo`)?{...Ol,video:!0}:Ol])),Al=[`ernie-5.1`,`ernie-5.0`,`ernie-5.0-thinking-latest`,`ernie-5.0-thinking-preview`,`ernie-x1.1-preview`,`ernie-x1.1`,`ernie-x1-turbo-32k`,`deepseek-v4-pro`,`deepseek-v4-flash`,`deepseek-v3.2-think`,`deepseek-v3.2`].map(e=>`${Bc}/${e}`),jl=new Set([`qianfan/ernie-5.1`,`qianfan/ernie-5.0`,`qianfan/ernie-5.0-thinking-latest`,`qianfan/ernie-5.0-thinking-preview`,`qianfan/ernie-x1.1-preview`,`qianfan/ernie-x1.1`,`qianfan/ernie-x1-turbo-32k`]),Ml=new Set([`qianfan/deepseek-v4-pro`,`qianfan/deepseek-v4-flash`,`qianfan/deepseek-v3.2-think`,`qianfan/deepseek-v3.2`]),Nl=Object.fromEntries(Al.map(e=>[e,{tools:!0,json:!0,...jl.has(e)?{fixedReasoning:!0}:Ml.has(e)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!0}:{}}])),Pl=[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex-spark`,`gpt-4.1`,`claude-fable-5`,`claude-opus-4.8`,`claude-sonnet-5`,`claude-haiku-4.5`,`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`,`grok-build-0.1`],Fl=Pl.map(e=>`${Vc}/${e}`),Il=[...Pl],Ll=Il.map(e=>`${Hc}/${e}`);`${Vc}`;const Rl=new Set([`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex-spark`]),zl=new Set([`claude-fable-5`,`claude-opus-4.8`,`claude-sonnet-5`]),Bl=new Set([`claude-haiku-4.5`]),Vl=new Set([`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`]);function Hl(e){return Object.fromEntries(e.map(e=>{let t=e.slice(e.indexOf(`/`)+1);return[e,{tools:!0,json:!0,...Rl.has(t)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:zl.has(t)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!0}:Bl.has(t)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!0}:Vl.has(t)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}:{}}]}))}const Ul={...Hl(Fl),...Hl(Ll)},Wl=fc(sc),Gl=Bs(Ls),Kl=no.map(e=>`${Gc}/${e}`);`${Gc}`;const ql=io(Gc),Jl=Ws.map(e=>`${Kc}/${e}`);`${Kc}`;const Yl=Ks(Kc),Xl=Qs(qc),Zl=Fs(Jc),Ql=ic(Yc),$l=ks(xs),eu=[];function tu(e){let t=e.indexOf(`/`);return t<=0||t===e.length-1?null:{route:e.slice(0,t).trim(),model:e.slice(t+1).trim()}}function nu(e,t){let n=t.trim().toLowerCase(),r=(e,r)=>n.startsWith(`${e}/`)?{provider:r,model:t.slice(e.length+1)}:null;return r(`openai`,_c)??r(`anthropic`,yc)??r(`google`,Oc)??r(`x-ai`,`xai`)??r(`xai`,`xai`)??r(`mistralai`,Ac)??r(`minimax`,wc)??r(`qwen`,Rc)??r(`moonshotai`,F)??r(`z-ai`,`zai`)??r(`zai-org`,`zai`)??r(`glm`,`zai`)??{provider:n.includes(`claude-`)||n.includes(`claude_`)?yc:n.includes(`gemini-`)?Oc:n.includes(`qwen`)?Rc:n.includes(`kimi`)?F:n.includes(`glm-`)?`zai`:e,model:t}}function ru(e){let t=nu(e.route,e.model),n=Qa({provider:t.provider,model:t.model,reasoning:e.reasoning});if(n)return{thinkingLevels:n.thinkingLevels,defaultThinkingLevel:n.defaultThinkingLevel,thinkingMode:n.thinkingMode,reasoningBudgetSupported:n.reasoningBudgetSupported}}function iu(e){let t=tu(e);if(t)return ru({route:t.route,model:t.model})}function au(e){return Object.fromEntries(e.map(e=>[e.toLowerCase(),iu(e)??{}]))}function I(e,t){let n=au(e);for(let[e,r]of Object.entries(t))n[e.toLowerCase()]={...n[e.toLowerCase()],...r};return n}const ou=[...k],su={"anthropic/claude-fable-5":{thinkingLevels:ou,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-opus-4-8":{thinkingLevels:ou,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-sonnet-5":{thinkingLevels:ou,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-haiku-4-5":{thinkingLevels:ou,defaultThinkingLevel:`low`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!0}},cu=Object.fromEntries(il.map(e=>[`${bc}/${e}`,{tools:!0,json:!0,...ru({route:bc,model:e,reasoning:!0}),...e===`moonshotai/Kimi-K2.6-TEE`?{video:!0}:{}}])),lu=[...k],uu=Object.fromEntries([...ul,...dl,...fl].map(e=>[e,{tools:!0,thinkingLevels:lu,defaultThinkingLevel:`off`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!1}])),du=Object.fromEntries([...pl,...ml].map(e=>[e,{tools:!0,...e===`${F}/kimi-k2.6`?{video:!0}:{},thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`moonshot-thinking`,reasoningBudgetSupported:!1}])),fu=Object.fromEntries([...gl,..._l].map(e=>[e,{tools:!0,json:!0,audio:!0,video:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}])),pu={"xai/grok-4.5":{tools:!0,json:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1},"xai/grok-4.3":{tools:!0,json:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1},"xai/grok-build-0.1":{tools:!0,json:!0}},mu=[`off`,`high`],hu=Object.fromEntries(yl.map(e=>[e,{tools:!0,json:!0,...e===`mistral/mistral-medium-3.5`||e===`mistral/mistral-small-2603`?{thinkingLevels:[...mu],defaultThinkingLevel:`high`,thinkingMode:`mistral-reasoning-effort`,reasoningBudgetSupported:!1}:{}}])),gu=[`minimal`,`low`,`medium`,`high`],_u=new Set([`volcengine/doubao-seed-2-0-pro-260215`,`volcengine/doubao-seed-2-0-lite-260215`,`volcengine/doubao-seed-2-0-mini-260215`,`volcengine/doubao-seed-2-0-code-preview-260215`,`volcengine-coding/doubao-seed-2.0-code`,`volcengine-plan/doubao-seed-2.0-code`,`volcengine-coding/doubao-seed-2.0-pro`,`volcengine-plan/doubao-seed-2.0-pro`,`volcengine-coding/doubao-seed-2.0-lite`,`volcengine-plan/doubao-seed-2.0-lite`,`volcengine-coding/doubao-seed-code`,`volcengine-plan/doubao-seed-code`]),vu=new Set([`volcengine/doubao-seed-2-0-pro-260215`,`volcengine/doubao-seed-2-0-lite-260215`,`volcengine/doubao-seed-2-0-mini-260215`,`volcengine/doubao-seed-2-0-code-preview-260215`,`volcengine-coding/doubao-seed-2.0-code`,`volcengine-plan/doubao-seed-2.0-code`,`volcengine-coding/doubao-seed-2.0-pro`,`volcengine-plan/doubao-seed-2.0-pro`,`volcengine-coding/doubao-seed-2.0-lite`,`volcengine-plan/doubao-seed-2.0-lite`,`volcengine-coding/doubao-seed-code`,`volcengine-plan/doubao-seed-code`]),yu=Object.fromEntries([...bl,...xl].map(e=>[e,{tools:!0,json:!0,..._u.has(e)?{thinkingLevels:[...gu],defaultThinkingLevel:`medium`,thinkingMode:`volcengine-reasoning-effort`,reasoningBudgetSupported:!1}:{},...vu.has(e)?{video:!0}:{}}])),bu=[`off`,`high`],xu=new Set([`byteplus/seed-2-0-pro-260328`,`byteplus/seed-2-0-lite-260228`,`byteplus/seed-2-0-mini-260215`,`byteplus/seed-2-0-code-preview-260328`,`byteplus-coding/dola-seed-2.0-pro`,`byteplus-plan/dola-seed-2.0-pro`,`byteplus-coding/dola-seed-2.0-lite`,`byteplus-plan/dola-seed-2.0-lite`,`byteplus-coding/dola-seed-2.0-code`,`byteplus-plan/dola-seed-2.0-code`,`byteplus-coding/bytedance-seed-code`,`byteplus-plan/bytedance-seed-code`]),Su=Object.fromEntries([...Sl,...Cl].map(e=>[e,{tools:!0,json:!0,...xu.has(e)?{thinkingLevels:[...bu],defaultThinkingLevel:`high`,thinkingMode:`byteplus-thinking-type`,reasoningBudgetSupported:!1}:{}}])),Cu=new Set([`openrouter/google/gemini-3.5-flash`,`openrouter/google/gemini-3.1-pro-preview`,`openrouter/google/gemini-3-flash-preview`,`openrouter/google/gemini-3.1-flash-lite`]),wu=new Set([`openrouter/google/gemini-3.5-flash`,`openrouter/google/gemini-3.1-pro-preview`,`openrouter/google/gemini-3-flash-preview`,`openrouter/google/gemini-3.1-flash-lite`,`openrouter/qwen/qwen3.7-max`,`openrouter/qwen/qwen3.7-plus`,`openrouter/qwen/qwen3.6-flash`]),Tu=new Set([`openrouter/mistralai/mistral-medium-3-5`,`openrouter/mistralai/mistral-small-2603`]),Eu=new Set([`openrouter/minimax/minimax-m2.7`]),Du=new Set([`openrouter/deepseek/deepseek-v4-pro`,`openrouter/deepseek/deepseek-v4-flash`]),Ou=new Set([`openrouter/openai/gpt-5.6-sol`,`openrouter/openai/gpt-5.6-terra`,`openrouter/openai/gpt-5.6-luna`,`openrouter/openai/gpt-5.5`,`openrouter/openai/gpt-5.4`,`openrouter/openai/gpt-5.4-mini`,`openrouter/openai/gpt-5.4-nano`]),ku=new Set([`openrouter/x-ai/grok-4.5`,`openrouter/x-ai/grok-4.3`]),Au=Object.fromEntries(wl.map(e=>[e,{tools:!0,json:!0,...Cu.has(e)?{audio:!0}:{},...wu.has(e)?{video:!0}:{},...Tu.has(e)?{thinkingLevels:[...mu],defaultThinkingLevel:`high`,thinkingMode:`mistral-reasoning-effort`,reasoningBudgetSupported:!1}:{},...Eu.has(e)?{thinkingLevels:[...lu],defaultThinkingLevel:`off`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!1}:{},...Du.has(e)?{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1}:{},...Ou.has(e)?{thinkingLevels:[...Fa],defaultThinkingLevel:`low`,thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:{},...ku.has(e)?{thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1}:{}}])),ju=new Set([`qwen-coding-plan/kimi-k2.7-code`,`qwen-coding-plan/glm-5.2`,`qwen-coding-plan/MiniMax-M2.5`]),Mu=Object.fromEntries([...Tl,...El].map(e=>[e,{tools:!0,json:!0,...ju.has(e)?{}:{thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`qwen-thinking`,reasoningBudgetSupported:!0}}])),Nu=[{id:`openai`,label:`OpenAI`,priority:1,hint:`OpenAI sign-in + API key`,methods:[{id:`openai-codex`,route:vc,kind:`oauth`,label:`ChatGPT sign-in`,hint:`Open the OpenAI sign-in URL, finish login in the browser, then Fased completes the OAuth flow.`},{id:`openai-api-key`,route:_c,kind:`api-key`,label:`API key`}],models:{recommended:[...tl,...nl],routeRules:{[_c]:[`${_c}/*`],[vc]:[`${vc}/*`]}},modelCapabilities:au([...tl,...nl])},{id:`anthropic`,label:`Anthropic`,priority:2,hint:`Claude Code OAuth + setup-token + API key`,methods:[{id:`anthropic-oauth`,route:yc,kind:`oauth`,label:`Sign in (Claude Code)`,hint:`Claude or Console account; Pro, Max, Team, Enterprise, or Console access`,buttonLabel:`Sign in`},{id:`token`,route:yc,kind:`token`,label:`Token (setup-token)`,hint:"run `claude setup-token` elsewhere, then paste the token here",buttonLabel:`Paste token`},{id:`apiKey`,route:yc,kind:`api-key`,label:`API key`}],models:{recommended:[...rl],routeRules:{[yc]:[`${yc}/*`]}},modelCapabilities:I(rl,su)},{id:`chutes`,label:`Chutes`,priority:3,hint:`Sign in + API key`,methods:[{id:`chutes`,route:bc,kind:`oauth`,label:`Sign in`,hint:`Requires a Chutes OAuth app client id. Enter the cid, then Fased generates the Chutes sign-in URL.`,buttonLabel:`Sign in`},{id:`chutes-api-key`,route:bc,kind:`api-key`,label:`API key`}],models:{recommended:[...al],routeRules:{[bc]:[`${bc}/*`]}},modelCapabilities:I(al,cu)},{id:`ollama`,label:`Ollama`,priority:4,hint:`Local, cloud, or hybrid Ollama through the native API`,modelProviderIds:[xc],methods:[{id:`ollama`,route:xc,kind:`manual`,label:`Ollama native URL + model`,hint:`Use the native Ollama base URL, for example http://127.0.0.1:11434. Do not use /v1.`,buttonLabel:`Configure`}],models:{recommended:ol,dynamic:!0,operatorCatalog:!0,routeRules:{[xc]:[`${xc}/*`]}},modelCapabilities:au(ol)},{id:`lmstudio`,label:`LM Studio`,priority:4,hint:`Local LM Studio server on localhost:1234`,modelProviderIds:[Sc],methods:[{id:`lmstudio`,route:Sc,kind:`manual`,label:`LM Studio URL + model`,hint:`Use http://127.0.0.1:1234/v1, optional API token, and a model key from LM Studio.`,buttonLabel:`Configure`}],models:{recommended:sl,dynamic:!0,operatorCatalog:!0,routeRules:{[Sc]:[`${Sc}/*`]}},modelCapabilities:au(sl)},{id:`vllm`,label:`vLLM-compatible`,priority:4,hint:`OpenAI-compatible local server: vLLM, SGLang, TGI, LocalAI, or FastChat`,modelProviderIds:[Cc],methods:[{id:`vllm`,route:Cc,kind:`manual`,label:`vLLM-compatible URL + model`,hint:`Enter the /v1 base URL, API key or local placeholder, and served model ID for vLLM, SGLang, TGI, LocalAI, or FastChat.`,buttonLabel:`Configure`}],models:{recommended:cl,dynamic:!0,operatorCatalog:!0,routeRules:{[Cc]:[`${Cc}/*`]}},modelCapabilities:au(cl)},{id:`minimax`,label:`MiniMax`,priority:5,hint:`MiniMax OAuth + API key`,modelProviderIds:[wc,Tc,Ec],methods:[{id:`minimax-portal`,route:Ec,kind:`oauth`,label:`Sign in`,hint:`Global or CN endpoint; uses MiniMax portal sign-in`,setupRequirement:`Requires MiniMax portal/coding-plan access. Choose Global or CN, then open the approval URL and approve before the code expires.`,buttonLabel:`Sign in`},{id:`minimax-api`,route:wc,kind:`api-key`,label:`API key`},{id:`minimax-api-key-cn`,route:Tc,kind:`api-key`,label:`API key (CN)`,hint:`China endpoint (api.minimaxi.com)`},{id:`minimax-api-lightning`,route:wc,configProviderId:`minimax-lightning`,statusRoute:wc,kind:`api-key`,label:`Highspeed API key`,hint:`Fast M2.7 tier`}],models:{recommended:[...ul,...dl,...fl],routeRules:{[wc]:[`${wc}/*`],[Tc]:[`${Tc}/*`],[Ec]:[`${Ec}/*`]}},modelCapabilities:I([...ul,...dl,...fl],uu)},{id:`moonshot`,label:`Moonshot AI`,priority:6,hint:`Kimi API + Kimi Code`,modelProviderIds:[F,Dc],methods:[{id:`moonshot-api-key`,route:F,kind:`api-key`,label:`Kimi API key (.ai)`,hint:`Kimi Open Platform endpoint (api.moonshot.ai)`},{id:`moonshot-api-key-cn`,route:F,configProviderId:`moonshot-cn`,statusRoute:F,kind:`api-key`,label:`Kimi API key (.cn)`,hint:`China endpoint (api.moonshot.cn)`},{id:`kimi-code-api-key`,route:Dc,kind:`api-key`,label:`Kimi Code API key (subscription)`,hint:`Kimi Code membership endpoint (api.kimi.com/coding)`}],models:{recommended:[...pl,...ml],routeRules:{[F]:[`${F}/*`],[Dc]:[`${Dc}/*`]}},modelCapabilities:I([...pl,...ml],du)},{id:`google`,label:`Google`,priority:7,hint:`Gemini API key + OAuth`,routeAliases:[`gemini`],modelProviderIds:[Oc,`gemini`,kc],methods:[{id:`gemini-api-key`,route:Oc,kind:`api-key`,label:`Gemini API key`},{id:`google-gemini-cli`,route:kc,kind:`oauth`,label:`Sign in (Gemini CLI)`,hint:`Unofficial flow; review account-risk warning before use`,setupRequirement:`Requires gemini-cli installed on the gateway machine, or GEMINI_CLI_OAUTH_CLIENT_ID set before sign-in.`}],models:{recommended:[...gl,..._l],routeRules:{[Oc]:[`${Oc}/*`,`gemini/*`],[kc]:[`${kc}/*`]}},modelCapabilities:I([...gl,..._l],fu)},{id:`xai`,label:`xAI (Grok)`,priority:8,hint:`Grok API key or xAI account sign-in`,methods:[{id:`xai-oauth`,route:`xai`,kind:`oauth`,label:`xAI sign-in`,hint:`Browser sign-in for eligible xAI/Grok accounts`,buttonLabel:`Sign in`},{id:`xai-device-code`,route:`xai`,kind:`device`,label:`xAI device code`,hint:`Remote-friendly sign-in for eligible xAI/Grok accounts`,buttonLabel:`Device code`},{id:`xai-api-key`,route:`xai`,kind:`api-key`,label:`xAI API key`}],models:{recommended:[...vl],routeRules:{xai:[`xai/*`]}},modelCapabilities:I(vl,pu)},{id:`mistral`,label:`Mistral AI`,priority:9,hint:`Mistral API key`,methods:[{id:`mistral-api-key`,route:Ac,kind:`api-key`,label:`Mistral API key`}],models:{recommended:[...yl],routeRules:{[Ac]:[`${Ac}/*`]}},modelCapabilities:I(yl,hu)},{id:`volcengine`,label:`Volcano Engine`,priority:10,hint:`Ark API key + Coding Plan`,modelProviderIds:[jc,Mc,Nc],methods:[{id:`volcengine-api-key`,route:jc,kind:`api-key`,label:`Volcano Engine API key`}],models:{recommended:[...bl,...xl],routeRules:{[jc]:[`${jc}/*`],[Mc]:[`${Mc}/*`],[Nc]:[`${Nc}/*`]}},modelCapabilities:I([...bl,...xl],yu)},{id:`byteplus`,label:`BytePlus`,priority:11,hint:`ModelArk API key + Coding Plan`,modelProviderIds:[Pc,Fc,Ic],methods:[{id:`byteplus-api-key`,route:Pc,kind:`api-key`,label:`BytePlus API key`}],models:{recommended:[...Sl,...Cl],routeRules:{[Pc]:[`${Pc}/*`],[Fc]:[`${Fc}/*`],[Ic]:[`${Ic}/*`]}},modelCapabilities:I([...Sl,...Cl],Su)},{id:`openrouter`,label:`OpenRouter`,priority:12,hint:`API key`,methods:[{id:`openrouter-api-key`,route:Lc,kind:`api-key`,label:`OpenRouter API key`}],models:{recommended:[...wl],dynamic:!0,routeRules:{[Lc]:[`${Lc}/*`]}},modelCapabilities:I(wl,Au)},{id:`qwen`,label:`Qwen`,priority:14,hint:`Coding Plan + DashScope API key`,modelProviderIds:[zc,Rc],methods:[{id:`qwen-coding-plan-api-key`,route:zc,kind:`api-key`,label:`Coding Plan API key`,hint:`Alibaba Cloud Coding Plan endpoint (coding.dashscope.aliyuncs.com)`},{id:`qwen-api-key`,route:Rc,kind:`api-key`,label:`DashScope API key`,hint:`DashScope OpenAI-compatible endpoint (dashscope.aliyuncs.com)`}],models:{recommended:[...El,...Tl],routeRules:{[zc]:[`${zc}/*`],[Rc]:[`${Rc}/*`]}},modelCapabilities:I([...El,...Tl],Mu)},{id:`zai`,label:`Z.AI`,priority:15,hint:`GLM Coding Plan / Global / CN`,modelProviderIds:[`zai`],methods:[{id:`zai-coding-global`,route:`zai`,configProviderId:`zai-coding-global`,statusRoute:`zai`,kind:`api-key`,label:`Coding-Plan-Global`,hint:`GLM Coding Plan Global (api.z.ai)`},{id:`zai-coding-cn`,route:`zai`,configProviderId:`zai-coding-cn`,statusRoute:`zai`,kind:`api-key`,label:`Coding-Plan-CN`,hint:`GLM Coding Plan CN (open.bigmodel.cn)`},{id:`zai-global`,route:`zai`,configProviderId:`zai`,kind:`api-key`,label:`Global`,hint:`Z.AI Global (api.z.ai)`},{id:`zai-cn`,route:`zai`,configProviderId:`zai-cn`,statusRoute:`zai`,kind:`api-key`,label:`CN`,hint:`Z.AI CN (open.bigmodel.cn)`}],models:{recommended:[...Dl],routeRules:{zai:[`zai/*`]}},modelCapabilities:I(Dl,kl)},{id:`qianfan`,label:`Qianfan`,priority:16,hint:`Baidu Qianfan API key`,methods:[{id:`qianfan-api-key`,route:Bc,kind:`api-key`,label:`Qianfan API key`}],models:{recommended:[...Al],routeRules:{[Bc]:[`${Bc}/*`]}},modelCapabilities:I(Al,Nl)},{id:`copilot`,label:`Copilot`,priority:17,hint:`GitHub device login + local proxy`,modelProviderIds:[Vc,Hc],methods:[{id:`github-copilot`,route:Vc,kind:`device`,label:`GitHub sign in`,hint:`GitHub OAuth device flow; requires an active Copilot subscription`,buttonLabel:`Sign in`},{id:`copilot-proxy`,route:Hc,kind:`device`,label:`Proxy sign in`,hint:`Local VS Code Copilot Proxy bridge`,buttonLabel:`Configure`}],models:{recommended:[...Fl,...Ll],dynamic:!0,routeRules:{[Vc]:[`${Vc}/*`],[Hc]:[`${Hc}/*`]}},modelCapabilities:I([...Fl,...Ll],Ul)},{id:`ai-gateway`,label:`Vercel AI`,priority:18,hint:`API key`,modelProviderIds:[Uc],methods:[{id:`ai-gateway-api-key`,route:Uc,kind:`api-key`,label:`Vercel AI API key`}],models:{recommended:[...sc],dynamic:!0,routeRules:{[Uc]:[`${Uc}/*`]}},modelCapabilities:I(sc,Wl)},{id:`opencode-zen`,label:`OpenCode Zen`,priority:19,hint:`API key`,modelProviderIds:[Wc],methods:[{id:`opencode-zen`,route:Wc,kind:`api-key`,label:`OpenCode Zen API key`,hint:`Sign in to OpenCode Zen, then paste the API key`}],models:{recommended:[...Ls],dynamic:!0,routeRules:{[Wc]:[`${Wc}/*`]}},modelCapabilities:I(Ls,Gl)},{id:`xiaomi`,label:`Xiaomi`,priority:20,hint:`MiMo API key`,modelProviderIds:[Gc],methods:[{id:`xiaomi-api-key`,route:Gc,kind:`api-key`,label:`Xiaomi API key`,hint:`Create an API key in the Xiaomi MiMo API Open Platform`}],models:{recommended:[...Kl],routeRules:{[Gc]:[`${Gc}/*`]}},modelCapabilities:I(Kl,ql)},{id:`synthetic`,label:`Synthetic`,priority:21,hint:`Anthropic-compatible API key`,modelProviderIds:[Kc],methods:[{id:`synthetic-api-key`,route:Kc,kind:`api-key`,label:`Synthetic API key`,hint:`Create an API key in Synthetic`}],models:{recommended:[...Jl],routeRules:{[Kc]:[`${Kc}/*`]}},modelCapabilities:I(Jl,Yl)},{id:`together`,label:`Together AI`,priority:22,hint:`API key`,modelProviderIds:[qc],methods:[{id:`together-api-key`,route:qc,kind:`api-key`,label:`Together AI API key`,hint:`Create an API key in Together AI`}],models:{recommended:[...Xs],routeRules:{[qc]:[`${qc}/*`]}},modelCapabilities:I(Xs,Xl)},{id:`huggingface`,label:`Hugging Face`,priority:23,hint:`Inference Providers token`,modelProviderIds:[Jc],methods:[{id:`huggingface-api-key`,route:Jc,kind:`api-key`,label:`Hugging Face token`,hint:`Create a fine-grained token with Inference Providers access`}],models:{recommended:[...Ms],dynamic:!0,routeRules:{[Jc]:[`${Jc}/*`]}},modelCapabilities:Zl},{id:`venice`,label:`Venice AI`,priority:24,hint:`Privacy-focused API key`,modelProviderIds:[Yc],methods:[{id:`venice-api-key`,route:Yc,kind:`api-key`,label:`Venice AI API key`,hint:`Create an API key in Venice settings`}],models:{recommended:[...nc],dynamic:!0,routeRules:{[Yc]:[`${Yc}/*`]}},modelCapabilities:Ql},{id:`litellm`,label:`LiteLLM`,priority:25,hint:`OpenAI-compatible LLM proxy`,modelProviderIds:[Xc],methods:[{id:`litellm-api-key`,route:Xc,kind:`api-key`,label:`LiteLLM API key`,hint:`LiteLLM Proxy virtual key or master key plus /v1 base URL`}],models:{recommended:[],dynamic:!0,operatorCatalog:!0,routeRules:{[Xc]:[`${Xc}/*`]}},modelCapabilities:{}},{id:`cloudflare-ai-gateway`,label:`Cloudflare AI`,priority:26,hint:`Anthropic through Cloudflare AI`,modelProviderIds:[xs],methods:[{id:`cloudflare-ai-gateway-api-key`,route:xs,kind:`manual`,label:`Cloudflare AI API key`,hint:`Requires Cloudflare Account ID, Gateway ID, and Anthropic provider API key`,buttonLabel:`Configure`}],models:{recommended:[...Ds],routeRules:{[xs]:[`${xs}/*`]}},modelCapabilities:$l},{id:`custom`,label:`Custom Provider`,priority:27,hint:`OpenAI or Anthropic-compatible endpoint outside the built-in provider cards`,modelProviderIds:[Zc],methods:[{id:`custom-api-key`,route:Zc,kind:`manual`,label:`Custom Provider`,hint:`Requires base URL, endpoint compatibility, model ID, and optional API key. Use this for SGLang or other compatible endpoints when the vLLM-compatible shortcut does not fit.`,buttonLabel:`Configure`}],models:{recommended:eu,dynamic:!0,operatorCatalog:!0,routeRules:{[Zc]:[`${Zc}/*`]}},modelCapabilities:au(eu)}];new Map(Nu.map(e=>[e.id,e])),new Map(Nu.flatMap(e=>[...e.methods.map(t=>[t.route,e]),...(e.routeAliases??[]).map(t=>[t,e]),...(e.modelProviderIds??[]).map(t=>[t,e])])),new Set(Nu.flatMap(e=>e.models.recommended.map(e=>e.toLowerCase()))),new Map(Nu.flatMap(e=>Object.entries(e.modelCapabilities??{}).map(([e,t])=>[e.toLowerCase(),t]))),new Set([...$c,...el]);function Pu(){return[...Pl]}function Fu(){return[...Il]}function Iu(e){let t=e.trim().toLowerCase();return/^gpt-5(?:[.-]|$)/.test(t)?{tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:t===`claude-fable-5`||t===`claude-opus-4.8`||t===`claude-sonnet-5`?{tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!0}:t===`claude-haiku-4.5`?{tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!0}:t===`gemini-3.5-flash`||t===`gemini-3.1-pro`||t===`gemini-3-flash`?{tools:!0,json:!0,thinkingLevels:[...k],defaultThinkingLevel:`low`,thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}:{tools:!0,json:!0}}function Lu(e,t){let n=e.trim();if(!n)throw Error(`Model id required`);return{id:n,name:n,api:t,reasoning:!!Iu(n).thinkingMode,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:8192,capabilities:Iu(n)}}function Ru(e){return Lu(e,`openai-responses`)}function zu(e){return Lu(e,`openai-completions`)}const Bu=[{id:`google/gemma-4-31B-turbo-TEE`,name:`google/gemma-4-31B-turbo-TEE`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:65536,cost:{input:.0245,output:.0978,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-32B-TEE`,name:`Qwen/Qwen3-32B-TEE`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.08,output:.24,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-5.1-TEE`,name:`zai-org/GLM-5.1-TEE`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:1.05,output:3.5,cacheRead:0,cacheWrite:0}},{id:`moonshotai/Kimi-K2.6-TEE`,name:`moonshotai/Kimi-K2.6-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65535,cost:{input:.95,output:4,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3.6-27B-TEE`,name:`Qwen/Qwen3.6-27B-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65536,cost:{input:.195,output:1.56,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-32B`,name:`Qwen/Qwen3-32B`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.08,output:.24,cacheRead:0,cacheWrite:0}},{id:`unsloth/Mistral-Nemo-Instruct-2407`,name:`unsloth/Mistral-Nemo-Instruct-2407`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:131072,cost:{input:.02,output:.04,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3-0324-TEE`,name:`deepseek-ai/DeepSeek-V3-0324-TEE`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:65536,cost:{input:.25,output:1,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-235B-A22B-Instruct-2507-TEE`,name:`Qwen/Qwen3-235B-A22B-Instruct-2507-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65536,cost:{input:.08,output:.55,cacheRead:0,cacheWrite:0}},{id:`openai/gpt-oss-120b-TEE`,name:`openai/gpt-oss-120b-TEE`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:65536,cost:{input:.05,output:.45,cacheRead:0,cacheWrite:0}},{id:`chutesai/Mistral-Small-3.1-24B-Instruct-2503`,name:`chutesai/Mistral-Small-3.1-24B-Instruct-2503`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:131072,cost:{input:.03,output:.11,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3.2-TEE`,name:`deepseek-ai/DeepSeek-V3.2-TEE`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:65536,cost:{input:.28,output:.42,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.7-TEE`,name:`zai-org/GLM-4.7-TEE`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:.4,output:2,cacheRead:0,cacheWrite:0}},{id:`moonshotai/Kimi-K2.5-TEE`,name:`moonshotai/Kimi-K2.5-TEE`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:65535,cost:{input:.45,output:2.2,cacheRead:0,cacheWrite:0}},{id:`unsloth/gemma-3-27b-it`,name:`unsloth/gemma-3-27b-it`,reasoning:!1,input:[`text`,`image`],contextWindow:128e3,maxTokens:65536,cost:{input:.04,output:.15,cacheRead:0,cacheWrite:0}},{id:`XiaomiMiMo/MiMo-V2-Flash-TEE`,name:`XiaomiMiMo/MiMo-V2-Flash-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65536,cost:{input:.09,output:.29,cacheRead:0,cacheWrite:0}},{id:`chutesai/Mistral-Small-3.2-24B-Instruct-2506`,name:`chutesai/Mistral-Small-3.2-24B-Instruct-2506`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:131072,cost:{input:.06,output:.18,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-R1-0528-TEE`,name:`deepseek-ai/DeepSeek-R1-0528-TEE`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:65536,cost:{input:.45,output:2.15,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-5-TEE`,name:`zai-org/GLM-5-TEE`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:.95,output:3.15,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3.1-TEE`,name:`deepseek-ai/DeepSeek-V3.1-TEE`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:65536,cost:{input:.2,output:.8,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3.1-Terminus-TEE`,name:`deepseek-ai/DeepSeek-V3.1-Terminus-TEE`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:65536,cost:{input:.23,output:.9,cacheRead:0,cacheWrite:0}},{id:`unsloth/gemma-3-4b-it`,name:`unsloth/gemma-3-4b-it`,reasoning:!1,input:[`text`,`image`],contextWindow:96e3,maxTokens:96e3,cost:{input:.01,output:.03,cacheRead:0,cacheWrite:0}},{id:`MiniMaxAI/MiniMax-M2.5-TEE`,name:`MiniMaxAI/MiniMax-M2.5-TEE`,reasoning:!0,input:[`text`],contextWindow:196608,maxTokens:65536,cost:{input:.3,output:1.1,cacheRead:0,cacheWrite:0}},{id:`tngtech/DeepSeek-TNG-R1T2-Chimera`,name:`tngtech/DeepSeek-TNG-R1T2-Chimera`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:163840,cost:{input:.25,output:.85,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-Coder-Next-TEE`,name:`Qwen/Qwen3-Coder-Next-TEE`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:65536,cost:{input:.12,output:.75,cacheRead:0,cacheWrite:0}},{id:`NousResearch/Hermes-4-405B-FP8-TEE`,name:`NousResearch/Hermes-4-405B-FP8-TEE`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:65536,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-V3`,name:`deepseek-ai/DeepSeek-V3`,reasoning:!1,input:[`text`],contextWindow:163840,maxTokens:163840,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`openai/gpt-oss-20b`,name:`openai/gpt-oss-20b`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:131072,cost:{input:.04,output:.15,cacheRead:0,cacheWrite:0}},{id:`unsloth/Llama-3.2-3B-Instruct`,name:`unsloth/Llama-3.2-3B-Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:4096,cost:{input:.01,output:.01,cacheRead:0,cacheWrite:0}},{id:`unsloth/Mistral-Small-24B-Instruct-2501`,name:`unsloth/Mistral-Small-24B-Instruct-2501`,reasoning:!1,input:[`text`,`image`],contextWindow:32768,maxTokens:32768,cost:{input:.07,output:.3,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.7-FP8`,name:`zai-org/GLM-4.7-FP8`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.6-TEE`,name:`zai-org/GLM-4.6-TEE`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65536,cost:{input:.4,output:1.7,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3.5-397B-A17B-TEE`,name:`Qwen/Qwen3.5-397B-A17B-TEE`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:65536,cost:{input:.55,output:3.5,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen2.5-72B-Instruct`,name:`Qwen/Qwen2.5-72B-Instruct`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:32768,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`NousResearch/DeepHermes-3-Mistral-24B-Preview`,name:`NousResearch/DeepHermes-3-Mistral-24B-Preview`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:32768,cost:{input:.02,output:.1,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-Next-80B-A3B-Instruct`,name:`Qwen/Qwen3-Next-80B-A3B-Instruct`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:262144,cost:{input:.1,output:.8,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.6-FP8`,name:`zai-org/GLM-4.6-FP8`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:65535,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-235B-A22B-Thinking-2507`,name:`Qwen/Qwen3-235B-A22B-Thinking-2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:262144,cost:{input:.11,output:.6,cacheRead:0,cacheWrite:0}},{id:`deepseek-ai/DeepSeek-R1-Distill-Llama-70B`,name:`deepseek-ai/DeepSeek-R1-Distill-Llama-70B`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:131072,cost:{input:.03,output:.11,cacheRead:0,cacheWrite:0}},{id:`tngtech/R1T2-Chimera-Speed`,name:`tngtech/R1T2-Chimera-Speed`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:65536,cost:{input:.22,output:.6,cacheRead:0,cacheWrite:0}},{id:`zai-org/GLM-4.6V`,name:`zai-org/GLM-4.6V`,reasoning:!0,input:[`text`,`image`],contextWindow:131072,maxTokens:65536,cost:{input:.3,output:.9,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen2.5-VL-32B-Instruct`,name:`Qwen/Qwen2.5-VL-32B-Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:16384,maxTokens:16384,cost:{input:.05,output:.22,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-VL-235B-A22B-Instruct`,name:`Qwen/Qwen3-VL-235B-A22B-Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-14B`,name:`Qwen/Qwen3-14B`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.05,output:.22,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen2.5-Coder-32B-Instruct`,name:`Qwen/Qwen2.5-Coder-32B-Instruct`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:32768,cost:{input:.03,output:.11,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3-30B-A3B`,name:`Qwen/Qwen3-30B-A3B`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.06,output:.22,cacheRead:0,cacheWrite:0}},{id:`unsloth/gemma-3-12b-it`,name:`unsloth/gemma-3-12b-it`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:131072,cost:{input:.03,output:.1,cacheRead:0,cacheWrite:0}},{id:`unsloth/Llama-3.2-1B-Instruct`,name:`unsloth/Llama-3.2-1B-Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:4096,cost:{input:.01,output:.01,cacheRead:0,cacheWrite:0}},{id:`nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16-TEE`,name:`nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16-TEE`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:4096,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0}},{id:`NousResearch/Hermes-4-14B`,name:`NousResearch/Hermes-4-14B`,reasoning:!0,input:[`text`],contextWindow:40960,maxTokens:40960,cost:{input:.01,output:.05,cacheRead:0,cacheWrite:0}},{id:`Qwen/Qwen3Guard-Gen-0.6B`,name:`Qwen/Qwen3Guard-Gen-0.6B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:4096,cost:{input:.01,output:.01,cacheRead:0,cacheWrite:0}},{id:`rednote-hilab/dots.ocr`,name:`rednote-hilab/dots.ocr`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:131072,cost:{input:.01,output:.01,cacheRead:0,cacheWrite:0}}];function Vu(e){return{...e,compat:{supportsUsageInStreaming:!1}}}const Hu={input:1e-4,output:2e-4,cacheRead:0,cacheWrite:0},Uu=[{id:`doubao-seed-2-0-pro-260215`,name:`Doubao Seed 2.0 Pro`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2-0-lite-260215`,name:`Doubao Seed 2.0 Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2-0-mini-260215`,name:`Doubao Seed 2.0 Mini`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},{id:`doubao-seed-2-0-code-preview-260215`,name:`Doubao Seed 2.0 Code Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:128e3},ms,{id:`deepseek-v3-2-251201`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`,`image`],contextWindow:128e3,maxTokens:4096}];function Wu(e){return gs(e,Hu)}const Gu=[...hs];function Ku(e){let t=e.toLowerCase();return t.startsWith(`gpt-`)?`openai-responses`:t.startsWith(`claude-`)?`anthropic-messages`:t.startsWith(`gemini-`)?`google-generative-ai`:`openai-completions`}function qu(e){let t=e.toLowerCase();return!(t.includes(`glm`)||t.includes(`minimax`))}const Ju={"gpt-5.5":{input:5,output:30,cacheRead:.5,cacheWrite:0},"gpt-5.5-pro":{input:30,output:180,cacheRead:30,cacheWrite:0},"gpt-5.4":{input:2.5,output:15,cacheRead:.25,cacheWrite:0},"gpt-5.4-pro":{input:30,output:180,cacheRead:30,cacheWrite:0},"gpt-5.4-mini":{input:.75,output:4.5,cacheRead:.075,cacheWrite:0},"gpt-5.4-nano":{input:.2,output:1.25,cacheRead:.02,cacheWrite:0},"gpt-5.3-codex":{input:1.75,output:14,cacheRead:.175,cacheWrite:0},"gpt-5.3-codex-spark":{input:1.75,output:14,cacheRead:.175,cacheWrite:0},"gpt-5.2":{input:1.75,output:14,cacheRead:.175,cacheWrite:0},"gpt-5.2-codex":{input:1.75,output:14,cacheRead:.175,cacheWrite:0},"claude-fable-5":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-opus-4-8":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-sonnet-5":{input:3,output:15,cacheRead:.3,cacheWrite:3.75},"claude-opus-4-7":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-opus-4-6":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-opus-4-5":{input:5,output:25,cacheRead:.5,cacheWrite:6.25},"claude-sonnet-4-6":{input:3,output:15,cacheRead:.3,cacheWrite:3.75},"claude-sonnet-4-5":{input:3,output:15,cacheRead:.3,cacheWrite:3.75},"claude-haiku-4-5":{input:1,output:5,cacheRead:.1,cacheWrite:1.25},"gemini-3.5-flash":{input:.5,output:3,cacheRead:.05,cacheWrite:0},"gemini-3.1-pro":{input:2,output:12,cacheRead:.2,cacheWrite:0},"gemini-3-flash":{input:.5,output:3,cacheRead:.05,cacheWrite:0},"qwen3.7-plus":{input:.5,output:3,cacheRead:.05,cacheWrite:.625},"qwen3.6-plus":{input:.5,output:3,cacheRead:.05,cacheWrite:.625},"minimax-m2.7":{input:.3,output:1.2,cacheRead:.06,cacheWrite:.375},"glm-5.2":{input:1.4,output:4.4,cacheRead:.26,cacheWrite:0},"glm-5.1":{input:1.4,output:4.4,cacheRead:.26,cacheWrite:0},"kimi-k2.6":{input:.95,output:4,cacheRead:.16,cacheWrite:0},"gpt-5.1-codex":{input:1.07,output:8.5,cacheRead:.107,cacheWrite:0},"gemini-3-pro":{input:2,output:12,cacheRead:.2,cacheWrite:0},"gpt-5.1-codex-mini":{input:.25,output:2,cacheRead:.025,cacheWrite:0},"gpt-5.1":{input:1.07,output:8.5,cacheRead:.107,cacheWrite:0},"glm-4.7":{input:0,output:0,cacheRead:0,cacheWrite:0},"gpt-5.1-codex-max":{input:1.25,output:10,cacheRead:.125,cacheWrite:0}},Yu={input:0,output:0,cacheRead:0,cacheWrite:0},Xu={"gpt-5.5":4e5,"gpt-5.5-pro":4e5,"gpt-5.4":4e5,"gpt-5.4-pro":4e5,"gpt-5.4-mini":4e5,"gpt-5.4-nano":4e5,"gpt-5.3-codex":4e5,"gpt-5.3-codex-spark":4e5,"gpt-5.2":4e5,"gpt-5.2-codex":4e5,"claude-fable-5":1e6,"claude-opus-4-8":1e6,"claude-sonnet-5":1e6,"claude-opus-4-7":1e6,"claude-opus-4-6":1e6,"claude-opus-4-5":2e5,"claude-sonnet-4-6":1e6,"claude-sonnet-4-5":1e6,"claude-haiku-4-5":2e5,"gemini-3.5-flash":1048576,"gemini-3.1-pro":1048576,"qwen3.7-plus":1e6,"qwen3.6-plus":262144,"minimax-m2.7":262144,"glm-5.2":1e6,"glm-5.1":204800,"kimi-k2.6":262144,"gpt-5.1-codex":4e5,"gemini-3-pro":1048576,"gpt-5.1-codex-mini":4e5,"gpt-5.1":4e5,"glm-4.7":204800,"gemini-3-flash":1048576,"gpt-5.1-codex-max":4e5};function Zu(e){return Xu[e]??128e3}const Qu={"gpt-5.5":128e3,"gpt-5.5-pro":128e3,"gpt-5.4":128e3,"gpt-5.4-pro":128e3,"gpt-5.4-mini":128e3,"gpt-5.4-nano":128e3,"gpt-5.3-codex":128e3,"gpt-5.3-codex-spark":128e3,"gpt-5.2":128e3,"gpt-5.2-codex":128e3,"claude-fable-5":128e3,"claude-opus-4-8":128e3,"claude-sonnet-5":128e3,"claude-opus-4-7":128e3,"claude-opus-4-6":128e3,"claude-opus-4-5":64e3,"claude-sonnet-4-6":128e3,"claude-sonnet-4-5":64e3,"claude-haiku-4-5":64e3,"gemini-3.5-flash":65536,"gemini-3.1-pro":65536,"qwen3.7-plus":65536,"qwen3.6-plus":65536,"minimax-m2.7":65536,"glm-5.2":131072,"glm-5.1":131072,"kimi-k2.6":65536,"gpt-5.1-codex":128e3,"gemini-3-pro":65536,"gpt-5.1-codex-mini":128e3,"gpt-5.1":128e3,"glm-4.7":131072,"gemini-3-flash":65536,"gpt-5.1-codex-max":128e3};function $u(e){return Qu[e]??8192}function ed(e){return{id:e,name:nd(e),api:Ku(e),reasoning:!0,input:qu(e)?[`text`,`image`]:[`text`],cost:Ju[e]??Yu,contextWindow:Zu(e),maxTokens:$u(e),capabilities:zs(e)}}const td={"gpt-5.5":`GPT-5.5`,"gpt-5.5-pro":`GPT-5.5 Pro`,"gpt-5.4":`GPT-5.4`,"gpt-5.4-pro":`GPT-5.4 Pro`,"gpt-5.4-mini":`GPT-5.4 Mini`,"gpt-5.4-nano":`GPT-5.4 Nano`,"gpt-5.3-codex":`GPT-5.3 Codex`,"gpt-5.3-codex-spark":`GPT-5.3 Codex Spark`,"gpt-5.2":`GPT-5.2`,"gpt-5.2-codex":`GPT-5.2 Codex`,"claude-fable-5":`Claude Fable 5`,"claude-opus-4-8":`Claude Opus 4.8`,"claude-sonnet-5":`Claude Sonnet 5`,"claude-opus-4-7":`Claude Opus 4.7`,"claude-opus-4-6":`Claude Opus 4.6`,"claude-opus-4-5":`Claude Opus 4.5`,"claude-sonnet-4-6":`Claude Sonnet 4.6`,"claude-sonnet-4-5":`Claude Sonnet 4.5`,"claude-haiku-4-5":`Claude Haiku 4.5`,"gemini-3.5-flash":`Gemini 3.5 Flash`,"gemini-3.1-pro":`Gemini 3.1 Pro`,"qwen3.7-plus":`Qwen3.7 Plus`,"qwen3.6-plus":`Qwen3.6 Plus`,"minimax-m2.7":`MiniMax M2.7`,"glm-5.2":`GLM 5.2`,"glm-5.1":`GLM 5.1`,"kimi-k2.6":`Kimi K2.6`,"gpt-5.1-codex":`GPT-5.1 Codex`,"gemini-3-pro":`Gemini 3 Pro`,"gpt-5.1-codex-mini":`GPT-5.1 Codex Mini`,"gpt-5.1":`GPT-5.1`,"glm-4.7":`GLM-4.7`,"gemini-3-flash":`Gemini 3 Flash`,"gpt-5.1-codex-max":`GPT-5.1 Codex Max`};function nd(e){return td[e]?td[e]:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}function rd(){return Is.map(ed)}const id={input:0,output:0,cacheRead:0,cacheWrite:0};function L(e){return{id:e.id,name:e.name??e.id,reasoning:e.reasoning??!1,input:e.input??[`text`],cost:e.cost??id,contextWindow:e.contextWindow??2e5,maxTokens:e.maxTokens??8192,...e.api?{api:e.api}:{},...e.compat?{compat:e.compat}:{},...e.capabilities?{capabilities:e.capabilities}:{}}}const ad=[L({id:`gpt-5.6`,name:`GPT-5.6 Sol`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-responses`,cost:{input:5,output:30,cacheRead:.5,cacheWrite:6.25}}),L({id:`gpt-5.6-terra`,name:`GPT-5.6 Terra`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-responses`,cost:{input:2.5,output:15,cacheRead:.25,cacheWrite:3.125}}),L({id:`gpt-5.6-luna`,name:`GPT-5.6 Luna`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-responses`,cost:{input:1,output:6,cacheRead:.1,cacheWrite:1.25}}),L({id:`gpt-5.5`,name:`GPT-5.5`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,api:`openai-responses`,cost:{input:5,output:30,cacheRead:.5,cacheWrite:0}}),L({id:`gpt-5.4`,name:`GPT-5.4`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,api:`openai-responses`,cost:{input:2.5,output:15,cacheRead:.25,cacheWrite:0}}),L({id:`gpt-5.4-mini`,name:`GPT-5.4 Mini`,reasoning:!0,input:[`text`,`image`],contextWindow:4e5,maxTokens:128e3,api:`openai-responses`,cost:{input:.75,output:4.5,cacheRead:.075,cacheWrite:0}}),L({id:`gpt-5.4-nano`,name:`GPT-5.4 Nano`,reasoning:!0,input:[`text`,`image`],contextWindow:4e5,maxTokens:128e3,api:`openai-responses`,cost:{input:.2,output:1.25,cacheRead:.02,cacheWrite:0}})];L({id:`gpt-5.6-sol`,name:`GPT-5.6 Sol`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-codex-responses`,compat:{responsesLite:!0}}),L({id:`gpt-5.6-terra`,name:`GPT-5.6 Terra`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-codex-responses`,compat:{responsesLite:!0}}),L({id:`gpt-5.6-luna`,name:`GPT-5.6 Luna`,reasoning:!0,input:[`text`,`image`],contextWindow:105e4,maxTokens:128e3,api:`openai-codex-responses`,compat:{responsesLite:!0}}),L({id:`gpt-5.5`,name:`GPT-5.5 Codex`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,api:`openai-codex-responses`}),L({id:`gpt-5.4`,name:`GPT-5.4 Codex`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,api:`openai-codex-responses`}),L({id:`gpt-5.4-mini`,name:`GPT-5.4 Mini Codex`,reasoning:!0,input:[`text`,`image`],contextWindow:4e5,maxTokens:128e3,api:`openai-codex-responses`,cost:{input:.75,output:4.5,cacheRead:.075,cacheWrite:0}}),L({id:`gpt-5.3-codex-spark`,name:`GPT-5.3 Codex Spark`,reasoning:!0,input:[`text`],contextWindow:4e5,maxTokens:128e3,api:`openai-codex-responses`});const od=[L({id:`claude-fable-5`,name:`Claude Fable 5`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,cost:{input:10,output:50,cacheRead:1,cacheWrite:12.5}}),L({id:`claude-opus-4-8`,name:`Claude Opus 4.8`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,cost:{input:5,output:25,cacheRead:.5,cacheWrite:6.25}}),L({id:`claude-sonnet-5`,name:`Claude Sonnet 5`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:128e3,cost:{input:2,output:10,cacheRead:.2,cacheWrite:2.5}}),L({id:`claude-haiku-4-5`,name:`Claude Haiku 4.5`,reasoning:!0,input:[`text`,`image`],contextWindow:2e5,maxTokens:64e3})],sd=[L({id:`gemini-3.5-flash`,name:`Gemini 3.5 Flash`,reasoning:!0,input:[`text`,`image`],contextWindow:1048576,maxTokens:65536}),L({id:`gemini-3.1-pro-preview`,name:`Gemini 3.1 Pro Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:1048576,maxTokens:65536}),L({id:`gemini-3-flash-preview`,name:`Gemini 3 Flash Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:1048576,maxTokens:65536}),L({id:`gemini-3.1-flash-lite`,name:`Gemini 3.1 Flash-Lite`,reasoning:!0,input:[`text`,`image`],contextWindow:1048576,maxTokens:65536})];L({id:`grok-4.3`,name:`Grok 4.3`,reasoning:!0,input:[`text`,`image`],contextWindow:1e6,maxTokens:64e3,api:`openai-responses`,cost:{input:1.25,output:2.5,cacheRead:.2,cacheWrite:0},capabilities:{tools:!0,json:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1}}),L({id:`grok-build-0.1`,name:`Grok Build 0.1`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:64e3,api:`openai-responses`,cost:{input:1.25,output:2.5,cacheRead:.2,cacheWrite:0},capabilities:{tools:!0,json:!0}}),L({id:`glm-5.2`,name:`GLM-5.2`,reasoning:!0,contextWindow:1e6,maxTokens:128e3}),L({id:`glm-5.1`,name:`GLM-5.1`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-5`,name:`GLM-5`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-5-turbo`,name:`GLM-5 Turbo`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-5v-turbo`,name:`GLM-5V Turbo`,reasoning:!0,input:[`text`,`image`],contextWindow:2e5,maxTokens:128e3}),L({id:`glm-4.7`,name:`GLM-4.7`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-4.7-flashx`,name:`GLM-4.7 FlashX`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`glm-4.7-flash`,name:`GLM-4.7 Flash`,reasoning:!0,contextWindow:2e5,maxTokens:128e3}),L({id:`MiniMax-M2.7`,name:`MiniMax M2.7`,reasoning:!0,contextWindow:204800,maxTokens:131072}),L({id:`MiniMax-M2.7-highspeed`,name:`MiniMax M2.7 Highspeed`,reasoning:!0,contextWindow:204800,maxTokens:131072}),L({id:`MiniMax-M2.5`,name:`MiniMax M2.5`,reasoning:!0,contextWindow:204800,maxTokens:131072}),L({id:`MiniMax-M2.5-highspeed`,name:`MiniMax M2.5 Highspeed`,reasoning:!0,contextWindow:204800,maxTokens:131072}),L({id:`kimi-k2.6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768}),L({id:`kimi-k2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:256e3,maxTokens:8192}),L({id:`kimi-for-coding`,name:`Kimi Coding`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768}),L({id:`mistral-medium-3.5`,name:`Mistral Medium 3.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:1.5,output:7.5,cacheRead:0,cacheWrite:0}}),L({id:`mistral-small-2603`,name:`Mistral Small 4`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.15,output:.6,cacheRead:0,cacheWrite:0}}),L({id:`mistral-large-2512`,name:`Mistral Large 3`,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.5,output:1.5,cacheRead:0,cacheWrite:0}}),L({id:`devstral-2512`,name:`Devstral 2`,contextWindow:262144,maxTokens:262144,cost:{input:.4,output:2,cacheRead:0,cacheWrite:0}}),L({id:`ministral-14b-2512`,name:`Ministral 3 14B`,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.2,output:.2,cacheRead:0,cacheWrite:0}}),L({id:`ministral-8b-2512`,name:`Ministral 3 8B`,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.15,output:.15,cacheRead:0,cacheWrite:0}}),L({id:`ministral-3b-2512`,name:`Ministral 3 3B`,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,cost:{input:.1,output:.1,cacheRead:0,cacheWrite:0}}),L({id:`qwen3.7-max`,name:`qwen3.7-max`,input:[`text`,`image`],contextWindow:1e6,maxTokens:65536}),L({id:`qwen3.7-plus`,name:`qwen3.7-plus`,input:[`text`,`image`],contextWindow:1e6,maxTokens:65536}),L({id:`qwen3.6-flash`,name:`qwen3.6-flash`,input:[`text`,`image`],contextWindow:1e6,maxTokens:65536}),L({id:`deepseek-v4-pro`,name:`deepseek-v4-pro`,contextWindow:1e6,maxTokens:131072}),L({id:`deepseek-v4-flash`,name:`deepseek-v4-flash`,contextWindow:1e6,maxTokens:131072}),L({id:`kimi-k2.7-code`,name:`kimi-k2.7-code`,contextWindow:262144,maxTokens:32768}),L({id:`glm-5.2`,name:`glm-5.2`,contextWindow:1e6,maxTokens:128e3}),L({id:`MiniMax-M2.5`,name:`MiniMax-M2.5`,reasoning:!0,contextWindow:1e6,maxTokens:65536}),L({id:`ernie-5.1`,name:`ERNIE 5.1`,reasoning:!0,input:[`text`,`image`],contextWindow:128e3,maxTokens:65536}),L({id:`ernie-5.0`,name:`ERNIE 5.0`,reasoning:!0,input:[`text`,`image`],contextWindow:128e3,maxTokens:65536}),L({id:`ernie-5.0-thinking-latest`,name:`ERNIE 5.0 Thinking Latest`,reasoning:!0,input:[`text`,`image`],contextWindow:128e3,maxTokens:65536}),L({id:`ernie-5.0-thinking-preview`,name:`ERNIE 5.0 Thinking Preview`,reasoning:!0,input:[`text`,`image`],contextWindow:119e3,maxTokens:64e3}),L({id:`ernie-x1.1-preview`,name:`ERNIE X1.1 Preview`,reasoning:!0,contextWindow:64e3,maxTokens:65536}),L({id:`ernie-x1.1`,name:`ERNIE X1.1`,reasoning:!0,contextWindow:64e3,maxTokens:65536}),L({id:`ernie-x1-turbo-32k`,name:`ERNIE X1 Turbo 32K`,reasoning:!0,contextWindow:32e3,maxTokens:28160}),L({id:`deepseek-v4-pro`,name:`DeepSeek V4 Pro`,reasoning:!0,contextWindow:1e6,maxTokens:131072}),L({id:`deepseek-v4-flash`,name:`DeepSeek V4 Flash`,reasoning:!0,contextWindow:1e6,maxTokens:131072}),L({id:`deepseek-v3.2-think`,name:`DeepSeek V3.2 Think`,reasoning:!0,contextWindow:128e3,maxTokens:32768}),L({id:`deepseek-v3.2`,name:`DeepSeek V3.2`,reasoning:!0,contextWindow:128e3,maxTokens:32768}),[L({id:`auto`,name:`OpenRouter Auto`,input:[`text`,`image`],contextWindow:2e5}),L({id:`moonshotai/kimi-k2.6`,name:`MoonshotAI Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,api:`openai-completions`,cost:{input:1,output:3,cacheRead:.2,cacheWrite:0}}),L({id:`moonshotai/kimi-k2.5`,name:`MoonshotAI Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:262144,api:`openai-completions`,cost:{input:.44,output:2,cacheRead:.22,cacheWrite:0}}),...ad.map(e=>({...e,id:`openai/${e.id}`,name:`OpenAI ${e.name}`,api:`openai-completions`})),...od.map(e=>({...e,id:`anthropic/${e.id}`,name:`Anthropic ${e.name}`,api:`openai-completions`})),...sd.map(e=>({...e,id:`google/${e.id}`,name:`Google ${e.name}`,api:`openai-completions`}))],Bu.map(Vu),Us.map(Gs),tc.map(rc),Ys.map(Zs),js.map(Ps),rd(),oc.map(mc),Es.map(e=>Os({id:e.id})),Pu().map(Ru),Fu().map(zu),Uu.map(Wu),Gu.map(Wu),Gu.map(Wu),vs.map(ys),bs.map(ys),bs.map(ys),no.map(e=>ro(e));const cd=`qwen3.7-plus`;`${cd}`,`${cd}`;const ld=1e6,ud=65536,dd={input:0,output:0,cacheRead:0,cacheWrite:0},fd=[{id:`qwen3.7-max`,name:`Qwen3.7 Max`,reasoning:!0,input:[`text`,`image`],cost:dd,contextWindow:ld,maxTokens:ud},{id:`qwen3.7-plus`,name:`Qwen3.7 Plus`,reasoning:!0,input:[`text`,`image`],cost:dd,contextWindow:ld,maxTokens:ud},{id:`qwen3.6-flash`,name:`Qwen3.6 Flash`,reasoning:!0,input:[`text`,`image`],cost:dd,contextWindow:1e6,maxTokens:ud}];fd[0],fd[1],fd[2];function pd(e){return e===`gemini-3.5-flash-preview`?`gemini-3.5-flash`:e===`gemini-3-pro`||e===`gemini-3-pro-preview`||e===`gemini-3.1-pro`?`gemini-3.1-pro-preview`:e===`gemini-3-flash`||e===`gemini-3.1-flash`||e===`gemini-3.1-flash-preview`?`gemini-3-flash-preview`:e===`gemini-3.1-flash-lite`||e===`gemini-3.1-flash-lite-preview`?`gemini-3.1-flash-lite`:e}const md={"opus-4.8":`claude-opus-4-8`,"opus-4.6":`claude-opus-4-6`,"opus-4.5":`claude-opus-4-5`,"sonnet-5":`claude-sonnet-5`,"sonnet-4.6":`claude-sonnet-4-6`,"sonnet-4.5":`claude-sonnet-4-5`},hd=[`gpt-5.4-codex`,`gpt-5.3-codex`];function gd(e){let t=e.trim().toLowerCase();return t===`z.ai`||t===`z-ai`?`zai`:t===`opencode-zen`?`opencode`:t===`kimi-code`?`kimi-coding`:t===`moonshotai`||t===`moonshot-ai`?`moonshot`:t===`bytedance`||t===`doubao`?`volcengine`:t}function _d(e){let t=e.trim();return t&&(md[t.toLowerCase()]??t)}function vd(e,t){if(e===`anthropic`)return _d(t);if(e===`vercel-ai-gateway`&&!t.includes(`/`)){if(t.toLowerCase().startsWith(`gpt-`))return`openai/${t}`;let e=_d(t);if(e.startsWith(`claude-`))return`anthropic/${e}`}return e===`google`?pd(t):e===`openrouter`&&!t.includes(`/`)?`openrouter/${t}`:t}function yd(e,t){if(e!==`openai`)return!1;let n=t.trim().toLowerCase();return n?hd.some(e=>n===e||n.startsWith(`${e}-`)):!1}function bd(e,t){let n=gd(e),r=vd(n,t.trim());return yd(n,r)?{provider:`openai-codex`,model:r}:{provider:n,model:r}}function xd(e,t){let n=e.trim();if(!n)return null;let r=n.indexOf(`/`);if(r===-1)return bd(t,n);let i=n.slice(0,r).trim(),a=n.slice(r+1).trim();return!i||!a?null:bd(i,a)}const Sd=`elevenlabs`;function Cd(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wd(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function Td(e){let t=wd(e);if(t)return t;let n=Pa(e);if(n)return n;if(Cd(e)&&Object.keys(e).length>0)return e}function Ed(e){return Td(e)!==void 0}function Dd(e){if(!Cd(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return Object.keys(t).length>0?t:void 0}function Od(e){if(!Cd(e))return;let t={};for(let[n,r]of Object.entries(e))if(r!==void 0){if(n===`voiceAliases`){let e=Dd(r);e&&(t.voiceAliases=e);continue}if(n===`apiKey`){let e=Td(r);e&&(t.apiKey=e);continue}if(n===`voiceId`||n===`modelId`||n===`outputFormat`){let e=wd(r);e&&(t[n]=e);continue}t[n]=r}return Object.keys(t).length>0?t:void 0}function kd(e){if(!Cd(e))return;let t={};for(let[n,r]of Object.entries(e)){let e=wd(n);if(!e)continue;let i=Od(r);i&&(t[e]=i)}return Object.keys(t).length>0?t:void 0}function Ad(e){let t={},n=wd(e.voiceId);n&&(t.voiceId=n);let r=Dd(e.voiceAliases);r&&(t.voiceAliases=r);let i=wd(e.modelId);i&&(t.modelId=i);let a=wd(e.outputFormat);a&&(t.outputFormat=a);let o=Td(e.apiKey);return o&&(t.apiKey=o),t}function jd(e){return Od({voiceId:e.voiceId,voiceAliases:e.voiceAliases,modelId:e.modelId,outputFormat:e.outputFormat,apiKey:e.apiKey})}function Md(e){let t=wd(e.provider);if(t)return t;let n=e.providers?Object.keys(e.providers):[];return n.length===1?n[0]:void 0}function Nd(e){if(!Cd(e))return;let t=e,n=typeof t.provider==`string`||Cd(t.providers),r={},i=Ad(t);if(Object.keys(i).length>0&&Object.assign(r,i),typeof t.interruptOnSpeech==`boolean`&&(r.interruptOnSpeech=t.interruptOnSpeech),n){let e=kd(t.providers),n=wd(t.provider);if(e&&(r.providers=e),n)r.provider=n;else if(e){let t=Object.keys(e);t.length===1&&(r.provider=t[0])}return Object.keys(r).length>0?r:void 0}let a=jd(t);return a&&(r.provider=Sd,r.providers={[Sd]:a}),Object.keys(r).length>0?r:void 0}function Pd(e){if(!e.talk)return e;let t=Nd(e.talk);return t?{...e,talk:t}:e}function Fd(e){let t=Nd(e);if(!t)return{};let n=Md(t);return n?{provider:n,config:t.providers?.[n]}:{}}function Id(e={}){let t=e.fs??n,r=e.os??p,a=e.path??i,o=r.homedir(),s=[`.profile`,`.zprofile`,`.zshrc`,`.bashrc`].map(e=>a.join(o,e));for(let e of s)if(t.existsSync(e))try{let n=t.readFileSync(e,`utf-8`).match(/(?:^|\n)\s*(?:export\s+)?ELEVENLABS_API_KEY\s*=\s*["']?([^\n"']+)["']?/)?.[1]?.trim();if(n)return n}catch{}return null}function Ld(e=process.env,t={}){return(e.ELEVENLABS_API_KEY??``).trim()||Id(t)}let Rd={warned:!1};const zd={opus:`anthropic/claude-opus-4-8`,sonnet:`anthropic/claude-sonnet-5`,gpt:`openai/gpt-5.6`,"gpt-mini":`openai/gpt-5.4-mini`,gemini:`google/gemini-3.5-flash`,"gemini-flash":`google/gemini-3-flash-preview`,"gemini-flash-lite":`google/gemini-3.1-flash-lite`},Bd={input:0,output:0,cacheRead:0,cacheWrite:0},Vd=[`text`];function Hd(e,t){return t||(gd(e)===`anthropic`?`anthropic-messages`:void 0)}function Ud(e){return typeof e==`number`&&Number.isFinite(e)&&e>0}function Wd(e){return{input:typeof e?.input==`number`?e.input:Bd.input,output:typeof e?.output==`number`?e.output:Bd.output,cacheRead:typeof e?.cacheRead==`number`?e.cacheRead:Bd.cacheRead,cacheWrite:typeof e?.cacheWrite==`number`?e.cacheWrite:Bd.cacheWrite}}function Gd(e){let t=e.auth?.profiles??{},n=Object.entries(t).filter(([,e])=>e?.provider===`anthropic`),r=e.auth?.order?.anthropic??[];for(let e of r){let n=t[e];if(!(!n||n.provider!==`anthropic`)){if(n.mode===`api_key`)return`api_key`;if(n.mode===`oauth`||n.mode===`token`)return`oauth`}}let i=n.some(([,e])=>e?.mode===`api_key`),a=n.some(([,e])=>e?.mode===`oauth`||e?.mode===`token`);return i&&!a?`api_key`:a&&!i||process.env.ANTHROPIC_OAUTH_TOKEN?.trim()?`oauth`:process.env.ANTHROPIC_API_KEY?.trim()?`api_key`:null}function Kd(e){if(!e||typeof e!=`string`)return null;let t=e.trim();return t?zd[t.toLowerCase()]??t:null}function qd(e){if(!e)return!1;let t=gd(e.provider),n=e.model.toLowerCase();return t===`anthropic`?!0:t===`amazon-bedrock`&&n.includes(`anthropic.claude`)}function Jd(e){let t=e.messages;if(t?.ackReactionScope!==void 0)return e;let n=t?{...t}:{};return n.ackReactionScope=`group-mentions`,{...e,messages:n}}function Yd(e,t={}){let n=e.session;if(!n||n.mainKey===void 0)return e;let r=n.mainKey.trim(),i=t.warn??console.warn,a=t.warnState??Rd,o={...e,session:{...n,mainKey:`main`}};return r&&r!==`main`&&!a.warned&&(a.warned=!0,i(`session.mainKey is ignored; main session is always "main".`)),o}function Xd(e){let t=Pd(e),n=Ld();if(!n)return t;let r=t.talk,i=Fd(r);if(i.provider&&i.provider!==Sd||Ed(i.config?.apiKey)||Ed(r?.apiKey))return t;let a=i.provider??Sd,o={...r?.providers};o[a]={...o[a],apiKey:n};let s={...r,provider:r?.provider??a,providers:o,apiKey:n};return{...t,talk:s}}function Zd(e){return Pd(e)}function Qd(e){let t=!1,n=e,r=n.models?.providers;if(r){let e={...r};for(let[n,i]of Object.entries(r)){let r=i.models;if(!Array.isArray(r)||r.length===0)continue;let a=Hd(n,i.api),o=i;a&&i.api!==a&&(t=!0,o={...o,api:a});let s=!1,c=r.map(e=>{let t=e,n=!1,r=typeof t.reasoning==`boolean`?t.reasoning:!1;t.reasoning!==r&&(n=!0);let i=t.input??[...Vd];t.input===void 0&&(n=!0);let o=Wd(t.cost);(!t.cost||t.cost.input!==o.input||t.cost.output!==o.output||t.cost.cacheRead!==o.cacheRead||t.cost.cacheWrite!==o.cacheWrite)&&(n=!0);let c=Ud(t.contextWindow)?t.contextWindow:2e5;t.contextWindow!==c&&(n=!0);let l=Math.min(8192,c),u=Ud(t.maxTokens)?t.maxTokens:l,d=Math.min(u,c);t.maxTokens!==d&&(n=!0);let f=t.api??a;return t.api!==f&&(n=!0),n?(s=!0,{...t,reasoning:r,input:i,cost:o,contextWindow:c,maxTokens:d,api:f}):e});if(!s){o!==i&&(e[n]=o);continue}e[n]={...o,models:c},t=!0}t&&(n={...n,models:{...n.models,providers:e}})}let i=n.agents?.defaults;if(!i)return t?n:e;let a=i.models??{};if(Object.keys(a).length===0)return t?n:e;let o={...a};for(let[e,n]of Object.entries(zd)){let r=o[n];r&&r.alias===void 0&&(o[n]={...r,alias:e},t=!0)}return t?{...n,agents:{...n.agents,defaults:{...i,models:o}}}:e}function $d(e){let t=e.agents,n=t?.defaults,r=typeof n?.maxConcurrent==`number`&&Number.isFinite(n.maxConcurrent),i=typeof n?.subagents?.maxConcurrent==`number`&&Number.isFinite(n.subagents.maxConcurrent);if(r&&i)return e;let a=!1,o=n?{...n}:{};r||(o.maxConcurrent=4,a=!0);let s=n?.subagents?{...n.subagents}:{};return i||(s.maxConcurrent=8,a=!0),a?{...e,agents:{...t,defaults:{...o,subagents:s}}}:e}function ef(e){let t=e.logging;return!t||t.redactSensitive?e:{...e,logging:{...t,redactSensitive:`tools`}}}function tf(e){let t=e.agents?.defaults;if(!t)return e;let n=Gd(e);if(!n)return e;let r=!1,i={...t},a=t.contextPruning??{},o=t.heartbeat??{};if(t.contextPruning?.mode===void 0&&(i.contextPruning={...a,mode:`cache-ttl`,ttl:t.contextPruning?.ttl??`1h`},r=!0),t.heartbeat?.every===void 0&&(i.heartbeat={...o,every:n===`oauth`?`1h`:`30m`},r=!0),n===`api_key`){let e=t.models?{...t.models}:{},n=!1;for(let[t,r]of Object.entries(e)){if(!qd(xd(t,`anthropic`)))continue;let i=r??{},a=i.params??{};typeof a.cacheRetention!=`string`&&(e[t]={...i,params:{...a,cacheRetention:`short`}},n=!0)}let a=Kd(_a(t.model)??void 0);if(a){let t=xd(a,`anthropic`);if(qd(t)){let r=`${t.provider}/${t.model}`,i=e[r]??{},a=i.params??{};typeof a.cacheRetention!=`string`&&(e[r]={...i,params:{...a,cacheRetention:`short`}},n=!0)}}n&&(i.models=e,r=!0)}return r?{...e,agents:{...e.agents,defaults:i}}:e}function nf(e){let t=e.agents?.defaults;if(!t)return e;let n=t?.compaction;return n?.mode?e:{...e,agents:{...e.agents,defaults:{...t,compaction:{...n,mode:`safeguard`}}}}}const rf=/\$\{[A-Z_][A-Z0-9_]*\}/;function af(e){return rf.test(e)}function of(e,t){let n=/^[A-Z_][A-Z0-9_]*$/,r=[];for(let i=0;i<e.length;i++){if(e[i]===`$`){if(e[i+1]===`$`&&e[i+2]===`{`){let t=i+3,a=e.indexOf(`}`,t);if(a!==-1){let o=e.slice(t,a);if(n.test(o)){r.push(`\${${o}}`),i=a;continue}}}if(e[i+1]===`{`){let a=i+2,o=e.indexOf(`}`,a);if(o!==-1){let s=e.slice(a,o);if(n.test(s)){let e=t[s];if(e===void 0||e===``)return null;r.push(e),i=o;continue}}}}r.push(e[i])}return r.join(``)}function sf(e,t,n=process.env){if(t==null)return e;if(typeof e==`string`&&typeof t==`string`)return af(t)&&of(t,n)===e?t:e;if(Array.isArray(e)&&Array.isArray(t))return e.map((e,r)=>r<t.length?sf(e,t[r],n):e);if(w(e)&&w(t)){let r={};for(let[i,a]of Object.entries(e))i in t?r[i]=sf(a,t[i],n):r[i]=a;return r}return e}const cf=/^[A-Z_][A-Z0-9_]*$/;var lf=class extends Error{constructor(e,t){super(`Missing env var "${e}" referenced at config path: ${t}`),this.varName=e,this.configPath=t,this.name=`MissingEnvVarError`}};function uf(e,t){if(e[t]!==`$`)return null;let n=e[t+1],r=e[t+2];if(n===`$`&&r===`{`){let n=t+3,r=e.indexOf(`}`,n);if(r!==-1){let t=e.slice(n,r);if(cf.test(t))return{kind:`escaped`,name:t,end:r}}}if(n===`{`){let n=t+2,r=e.indexOf(`}`,n);if(r!==-1){let t=e.slice(n,r);if(cf.test(t))return{kind:`substitution`,name:t,end:r}}}return null}function df(e,t,n){if(!e.includes(`$`))return e;let r=[];for(let i=0;i<e.length;i+=1){let a=e[i];if(a!==`$`){r.push(a);continue}let o=uf(e,i);if(o?.kind===`escaped`){r.push(`\${${o.name}}`),i=o.end;continue}if(o?.kind===`substitution`){let e=t[o.name];if(e===void 0||e===``)throw new lf(o.name,n);r.push(e),i=o.end;continue}r.push(a)}return r.join(``)}function ff(e){if(!e.includes(`$`))return!1;for(let t=0;t<e.length;t+=1){if(e[t]!==`$`)continue;let n=uf(e,t);if(n?.kind===`escaped`){t=n.end;continue}if(n?.kind===`substitution`)return!0}return!1}function pf(e,t,n){if(typeof e==`string`)return df(e,t,n);if(Array.isArray(e))return e.map((e,r)=>pf(e,t,`${n}[${r}]`));if(w(e)){let r={};for(let[i,a]of Object.entries(e))r[i]=pf(a,t,n?`${n}.${i}`:i);return r}return e}function mf(e,t=process.env){return pf(e,t,``)}function hf(e){return br(e)||Sr(e)}function gf(e){let t=e?.env;if(!t)return{};let n={};if(t.vars)for(let[e,r]of Object.entries(t.vars)){if(!r)continue;let t=yr(e,{portable:!0});t&&(hf(t)||(n[t]=r))}for(let[e,r]of Object.entries(t)){if(e===`shellEnv`||e===`vars`||typeof r!=`string`||!r.trim())continue;let t=yr(e,{portable:!0});t&&(hf(t)||(n[t]=r))}return n}function _f(e){return gf(e)}function vf(e,t=process.env){let n=_f(e);for(let[e,r]of Object.entries(n))t[e]?.trim()||(t[e]=r)}const yf=`$include`;var R=class extends Error{constructor(e,t,n){super(e),this.includePath=t,this.cause=n,this.name=`ConfigIncludeError`}},bf=class extends R{constructor(e){super(`Circular include detected: ${e.join(` -> `)}`,e[e.length-1]),this.chain=e,this.name=`CircularIncludeError`}};function xf(e,t){if(Array.isArray(e)&&Array.isArray(t))return[...e,...t];if(w(e)&&w(t)){let n={...e};for(let e of Object.keys(t))ia(e)||(n[e]=e in n?xf(n[e],t[e]):t[e]);return n}return t}var Sf=class e{constructor(e,t,n){this.basePath=e,this.resolver=t,this.visited=new Set,this.depth=0,this.visited.add(i.normalize(e)),this.rootDir=i.normalize(n??i.dirname(e)),this.rootRealDir=i.normalize(Cf(this.rootDir))}process(e){return Array.isArray(e)?e.map(e=>this.process(e)):w(e)?yf in e?this.processInclude(e):this.processObject(e):e}processObject(e){let t={};for(let[n,r]of Object.entries(e))t[n]=this.process(r);return t}processInclude(e){let t=e[yf],n=Object.keys(e).filter(e=>e!==yf),r=this.resolveInclude(t);if(n.length===0)return r;if(!w(r))throw new R(`Sibling keys require included content to be an object`,typeof t==`string`?t:yf);let i={};for(let t of n)i[t]=this.process(e[t]);return xf(r,i)}resolveInclude(e){if(typeof e==`string`)return this.loadFile(e);if(Array.isArray(e))return e.reduce((e,t)=>{if(typeof t!=`string`)throw new R(`Invalid $include array item: expected string, got ${typeof t}`,String(t));return xf(e,this.loadFile(t))},{});throw new R(`Invalid $include value: expected string or array of strings, got ${typeof e}`,String(e))}loadFile(e){let t=this.resolvePath(e);this.checkCircular(t),this.checkDepth(e);let n=this.readFile(e,t),r=this.parseFile(e,t,n);return this.processNested(t,r)}resolvePath(e){let t=i.dirname(this.basePath),r=i.isAbsolute(e)?e:i.resolve(t,e),a=i.normalize(r);if(!yi(this.rootDir,a))throw new R(`Include path escapes config directory: ${e} (root: ${this.rootDir})`,e);try{let t=n.realpathSync(a);if(!yi(this.rootRealDir,t))throw new R(`Include path resolves outside config directory (symlink): ${e} (root: ${this.rootDir})`,e)}catch(e){if(e instanceof R)throw e}return a}checkCircular(e){if(this.visited.has(e))throw new bf([...this.visited,e])}checkDepth(e){if(this.depth>=10)throw new R(`Maximum include depth (10) exceeded at: ${e}`,e)}readFile(e,t){try{return this.resolver.readFileWithGuards?this.resolver.readFileWithGuards({includePath:e,resolvedPath:t,rootRealDir:this.rootRealDir}):this.resolver.readFile(t)}catch(n){throw n instanceof R?n:new R(`Failed to read include file: ${e} (resolved: ${t})`,e,n instanceof Error?n:void 0)}}parseFile(e,t,n){try{return this.resolver.parseJson(n)}catch(n){throw new R(`Failed to parse include file: ${e} (resolved: ${t})`,e,n instanceof Error?n:void 0)}}processNested(t,n){let r=new e(t,this.resolver,this.rootDir);return r.visited=new Set([...this.visited,t]),r.depth=this.depth+1,r.process(n)}};function Cf(e){try{return n.realpathSync(e)}catch{return e}}function wf(e){let t=e.ioFs??n,r=e.maxBytes??2097152;if(!Bi(t))return t.readFileSync(e.resolvedPath,`utf-8`);let i=Vi({absolutePath:e.resolvedPath,rootPath:e.rootRealDir,rootRealPath:e.rootRealDir,boundaryLabel:`config directory`,skipLexicalRootCheck:!0,maxBytes:r,ioFs:t});if(!i.ok)throw i.reason===`validation`?new R(`Include file failed security checks (regular file, max ${r} bytes, no hardlinks): ${e.includePath}`,e.includePath):new R(`Failed to read include file: ${e.includePath} (resolved: ${e.resolvedPath})`,e.includePath,i.error instanceof Error?i.error:void 0);try{return t.readFileSync(i.fd,`utf-8`)}finally{t.closeSync(i.fd)}}const Tf={readFile:e=>n.readFileSync(e,`utf-8`),readFileWithGuards:({includePath:e,resolvedPath:t,rootRealDir:n})=>wf({includePath:e,resolvedPath:t,rootRealDir:n}),parseJson:e=>m.parse(e)};function Ef(e,t,n=Tf){return new Sf(t,n).process(e)}function Df(e){return typeof e==`string`&&e.trim().toLowerCase()||null}function Of(e){let t=Df(e);return t===`off`||t===`partial`||t===`block`||t===`progress`?t:null}function kf(e){let t=Of(e);return t?t===`progress`?`partial`:t:null}function Af(e){let t=Df(e);return t===`replace`||t===`status_final`||t===`append`?t:null}function jf(e){return e===`append`?`block`:e===`status_final`?`progress`:`partial`}function Mf(e={}){let t=Of(e.streaming);return t?t===`progress`?`partial`:t:kf(e.streamMode)||(typeof e.streaming==`boolean`&&e.streaming?`partial`:`off`)}function Nf(e={}){return kf(e.streaming)||kf(e.streamMode)||(typeof e.streaming==`boolean`&&e.streaming?`partial`:`off`)}function Pf(e={}){let t=Of(e.streaming);if(t)return t;let n=Af(e.streamMode);return n?jf(n):(e.streaming,`partial`)}function Ff(e={}){return typeof e.nativeStreaming==`boolean`?e.nativeStreaming:typeof e.streaming==`boolean`?e.streaming:!0}const If=/[;&|`$<>]/,Lf=/[\r\n]/,Rf=/["']/,zf=/^[A-Za-z0-9._+-]+$/;function Bf(e){return e.startsWith(`.`)||e.startsWith(`~`)||e.includes(`/`)||e.includes(`\\`)?!0:/^[A-Za-z]:[\\/]/.test(e)}function Vf(e){if(!e)return!1;let t=e.trim();return!t||t.includes(`\0`)||Lf.test(t)||If.test(t)||Rf.test(t)?!1:Bf(t)?!0:t.startsWith(`-`)?!1:zf.test(t)}const z=e=>T(e)?e:null,B=(e,t)=>{let n=e[t];if(T(n))return n;let r={};return e[t]=r,r},Hf=(e,t)=>{for(let[n,r]of Object.entries(t)){if(r===void 0||ia(n))continue;let t=e[n];if(t===void 0){e[n]=r;continue}T(t)&&T(r)&&Hf(t,r)}},Uf=e=>{let t=z(e),n=Array.isArray(t?.command)?t?.command:null;if(!n||n.length===0||typeof n[0]!=`string`||!n.every(e=>typeof e==`string`))return null;let r=n[0].trim();if(!r||!Vf(r))return null;let i=n.slice(1),a=typeof t?.timeoutSeconds==`number`?t?.timeoutSeconds:void 0,o={command:r,type:`cli`};return i.length>0&&(o.args=i),a!==void 0&&(o.timeoutSeconds=a),o},Wf=e=>{let t=e?.list;return Array.isArray(t)?t:[]},Gf=e=>{let t=Wf(z(e.agents)),n=t.find(e=>T(e)&&e.default===!0&&typeof e.id==`string`&&e.id.trim()!==``);if(n)return n.id.trim();let r=z(e.routing),i=typeof r?.defaultAgentId==`string`?r.defaultAgentId.trim():``;if(i)return i;let a=t.find(e=>T(e)&&typeof e.id==`string`&&e.id.trim()!==``);return a?a.id.trim():`main`},Kf=(e,t)=>{let n=t.trim(),r=e.find(e=>T(e)&&typeof e.id==`string`&&e.id.trim()===n);if(r)return r;let i={id:n};return e.push(i),i};function qf(e,t,n,r){let i=Array.isArray(e.bindings)?e.bindings:null;if(!i)return;let a=!1;for(let e of i){if(!T(e))continue;let t=z(e.match);t&&r(t)&&(e.match=t,a=!0)}a&&(e.bindings=i,t.push(n))}function Jf(e){let t=T(e.groups)?e.groups:{};return{groups:t,entry:T(t[`*`])?t[`*`]:{}}}function Yf(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Xf(e){let t=z(e.owner.threadBindings);if(!t||!Yf(t,`ttlHours`))return!1;let n=t.idleHours!==void 0;return n||(t.idleHours=t.ttlHours),delete t.ttlHours,e.owner.threadBindings=t,n?e.changes.push(`Removed ${e.pathPrefix}.threadBindings.ttlHours (${e.pathPrefix}.threadBindings.idleHours already set).`):e.changes.push(`Moved ${e.pathPrefix}.threadBindings.ttlHours → ${e.pathPrefix}.threadBindings.idleHours.`),!0}const Zf=[{id:`bindings.match.provider->bindings.match.channel`,describe:`Move bindings[].match.provider to bindings[].match.channel`,apply:(e,t)=>{qf(e,t,`Moved bindings[].match.provider → bindings[].match.channel.`,e=>{if(typeof e.channel==`string`&&e.channel.trim())return!1;let t=typeof e.provider==`string`?e.provider.trim():``;return t?(e.channel=t,delete e.provider,!0):!1})}},{id:`bindings.match.accountID->bindings.match.accountId`,describe:`Move bindings[].match.accountID to bindings[].match.accountId`,apply:(e,t)=>{qf(e,t,`Moved bindings[].match.accountID → bindings[].match.accountId.`,e=>{if(e.accountId!==void 0)return!1;let t=typeof e.accountID==`string`?e.accountID.trim():e.accountID;return t?(e.accountId=t,delete e.accountID,!0):!1})}},{id:`session.sendPolicy.rules.match.provider->match.channel`,describe:`Move session.sendPolicy.rules[].match.provider to match.channel`,apply:(e,t)=>{let n=z(e.session);if(!n)return;let r=z(n.sendPolicy);if(!r)return;let i=Array.isArray(r.rules)?r.rules:null;if(!i)return;let a=!1;for(let e of i){if(!T(e))continue;let t=z(e.match);if(!t||typeof t.channel==`string`&&t.channel.trim())continue;let n=typeof t.provider==`string`?t.provider.trim():``;n&&(t.channel=n,delete t.provider,e.match=t,a=!0)}a&&(r.rules=i,n.sendPolicy=r,e.session=n,t.push(`Moved session.sendPolicy.rules[].match.provider → match.channel.`))}},{id:`messages.queue.byProvider->byChannel`,describe:`Move messages.queue.byProvider to messages.queue.byChannel`,apply:(e,t)=>{let n=z(e.messages);if(!n)return;let r=z(n.queue);r&&r.byProvider!==void 0&&(r.byChannel===void 0?(r.byChannel=r.byProvider,t.push(`Moved messages.queue.byProvider → messages.queue.byChannel.`)):t.push(`Removed messages.queue.byProvider (messages.queue.byChannel already set).`),delete r.byProvider,n.queue=r,e.messages=n)}},{id:`providers->channels`,describe:`Move provider config sections to channels.*`,apply:(e,t)=>{let n=[`whatsapp`,`telegram`,`discord`,`slack`,`signal`,`imessage`,`msteams`].filter(t=>T(e[t]));if(n.length===0)return;let r=B(e,`channels`);for(let i of n){let n=z(e[i]);if(!n)continue;let a=B(r,i),o=Object.keys(a).length>0;Hf(a,n),r[i]=a,delete e[i],t.push(o?`Merged ${i} → channels.${i}.`:`Moved ${i} → channels.${i}.`)}e.channels=r}},{id:`thread-bindings.ttlHours->idleHours`,describe:`Move legacy threadBindings.ttlHours keys to threadBindings.idleHours (session + channels.discord)`,apply:(e,t)=>{let n=z(e.session);n&&(Xf({owner:n,pathPrefix:`session`,changes:t}),e.session=n);let r=z(e.channels),i=z(r?.discord);if(!r||!i)return;Xf({owner:i,pathPrefix:`channels.discord`,changes:t});let a=z(i.accounts);if(a){for(let[e,n]of Object.entries(a)){let r=z(n);r&&(Xf({owner:r,pathPrefix:`channels.discord.accounts.${e}`,changes:t}),a[e]=r)}i.accounts=a}r.discord=i,e.channels=r}},{id:`channels.streaming-keys->channels.streaming`,describe:`Normalize legacy streaming keys to channels.<provider>.streaming (Telegram/Discord/Slack)`,apply:(e,t)=>{let n=z(e.channels);if(!n)return;let r=e=>{let n=n=>{let r=e.entry.streamMode!==void 0,i=e.entry.streaming;if(!r&&typeof i!=`boolean`)return!1;let a=n(e.entry);return e.entry.streaming=a,r&&(delete e.entry.streamMode,t.push(`Moved ${e.pathPrefix}.streamMode → ${e.pathPrefix}.streaming (${a}).`)),typeof i==`boolean`&&t.push(`Normalized ${e.pathPrefix}.streaming boolean → enum (${a}).`),!0},r=e.entry.streamMode!==void 0,i=e.entry.streaming,a=e.entry.nativeStreaming;if(e.provider===`telegram`){n(Mf);return}if(e.provider===`discord`){n(Nf);return}if(!r&&typeof i!=`boolean`)return;let o=Pf(e.entry),s=Ff(e.entry);e.entry.streaming=o,e.entry.nativeStreaming=s,r&&(delete e.entry.streamMode,t.push(`Moved ${e.pathPrefix}.streamMode → ${e.pathPrefix}.streaming (${o}).`)),typeof i==`boolean`?t.push(`Moved ${e.pathPrefix}.streaming (boolean) → ${e.pathPrefix}.nativeStreaming (${s}).`):typeof a!=`boolean`&&r&&t.push(`Set ${e.pathPrefix}.nativeStreaming → ${s}.`)},i=e=>{let t=z(n[e]);if(!t)return;r({provider:e,entry:t,pathPrefix:`channels.${e}`});let i=z(t.accounts);if(i)for(let[t,n]of Object.entries(i)){let i=z(n);i&&r({provider:e,entry:i,pathPrefix:`channels.${e}.accounts.${t}`})}};i(`telegram`),i(`discord`),i(`slack`)}},{id:`routing.allowFrom->channels.whatsapp.allowFrom`,describe:`Move routing.allowFrom to channels.whatsapp.allowFrom`,apply:(e,t)=>{let n=e.routing;if(!n||typeof n!=`object`)return;let r=n.allowFrom;if(r===void 0)return;let i=z(e.channels),a=i?z(i.whatsapp):null;if(!a){delete n.allowFrom,Object.keys(n).length===0&&delete e.routing,t.push(`Removed routing.allowFrom (channels.whatsapp not configured).`);return}a.allowFrom===void 0?(a.allowFrom=r,t.push(`Moved routing.allowFrom → channels.whatsapp.allowFrom.`)):t.push(`Removed routing.allowFrom (channels.whatsapp.allowFrom already set).`),delete n.allowFrom,Object.keys(n).length===0&&delete e.routing,i.whatsapp=a,e.channels=i}},{id:`routing.groupChat.requireMention->groups.*.requireMention`,describe:`Move routing.groupChat.requireMention to channels.whatsapp/telegram/imessage groups`,apply:(e,t)=>{let n=e.routing;if(!n||typeof n!=`object`)return;let r=n.groupChat&&typeof n.groupChat==`object`?n.groupChat:null;if(!r)return;let i=r.requireMention;if(i===void 0)return;let a=B(e,`channels`),o=(e,n)=>{if(n?.requireExisting&&!T(a[e]))return;let r=a[e]&&typeof a[e]==`object`?a[e]:{},{groups:o,entry:s}=Jf(r);s.requireMention===void 0?(s.requireMention=i,o[`*`]=s,r.groups=o,a[e]=r,t.push(`Moved routing.groupChat.requireMention → channels.${e}.groups."*".requireMention.`)):t.push(`Removed routing.groupChat.requireMention (channels.${e}.groups."*" already set).`)};o(`whatsapp`,{requireExisting:!0}),o(`telegram`),o(`imessage`),delete r.requireMention,Object.keys(r).length===0&&delete n.groupChat,Object.keys(n).length===0&&delete e.routing,e.channels=a}},{id:`gateway.token->gateway.auth.token`,describe:`Move gateway.token to gateway.auth.token`,apply:(e,t)=>{let n=e.gateway;if(!n||typeof n!=`object`)return;let r=n.token;if(r===void 0)return;let i=n,a=i.auth&&typeof i.auth==`object`?i.auth:{};a.token===void 0?(a.token=r,a.mode||=`token`,t.push(`Moved gateway.token → gateway.auth.token.`)):t.push(`Removed gateway.token (gateway.auth.token already set).`),delete i.token,Object.keys(a).length>0&&(i.auth=a),e.gateway=i}},{id:`telegram.requireMention->channels.telegram.groups.*.requireMention`,describe:`Move telegram.requireMention to channels.telegram.groups.*.requireMention`,apply:(e,t)=>{let n=B(e,`channels`),r=n.telegram;if(!r||typeof r!=`object`)return;let i=r.requireMention;if(i===void 0)return;let{groups:a,entry:o}=Jf(r);o.requireMention===void 0?(o.requireMention=i,a[`*`]=o,r.groups=a,t.push(`Moved telegram.requireMention → channels.telegram.groups."*".requireMention.`)):t.push(`Removed telegram.requireMention (channels.telegram.groups."*" already set).`),delete r.requireMention,n.telegram=r,e.channels=n}}];function Qf(e){let t=Uf(e.source);if(!t){e.changes.push(e.invalidMessage);return}let n=B(B(B(e.raw,`tools`),`media`),`audio`);if((Array.isArray(n.models)?n.models:[]).length===0){n.enabled=!0,n.models=[t],e.changes.push(e.movedMessage);return}e.changes.push(e.alreadySetMessage)}const $f=[{id:`agent.model-config-v2`,describe:`Migrate legacy agent.model/allowedModels/modelAliases/modelFallbacks/imageModelFallbacks to agent.models + model lists`,apply:(e,t)=>{let n=z(e.agent),r=z(z(e.agents)?.defaults),i=n??r;if(!i)return;let a=n?`agent`:`agents.defaults`,o=typeof i.model==`string`?String(i.model):void 0,s=typeof i.imageModel==`string`?String(i.imageModel):void 0,c=Array.isArray(i.allowedModels)?i.allowedModels.map(String):[],l=Array.isArray(i.modelFallbacks)?i.modelFallbacks.map(String):[],u=Array.isArray(i.imageModelFallbacks)?i.imageModelFallbacks.map(String):[],d=i.modelAliases&&typeof i.modelAliases==`object`?i.modelAliases:{};if(!(o||s||c.length>0||l.length>0||u.length>0||Object.keys(d).length>0))return;let f=i.models&&typeof i.models==`object`?i.models:{},p=e=>{if(typeof e!=`string`)return;let t=e.trim();t&&(f[t]||(f[t]={}))};p(o),p(s);for(let e of c)p(e);for(let e of l)p(e);for(let e of u)p(e);for(let e of Object.values(d))typeof e==`string`&&p(e);for(let[e,t]of Object.entries(d)){if(typeof t!=`string`)continue;let n=t.trim();if(!n)continue;let r=f[n]&&typeof f[n]==`object`?f[n]:{};`alias`in r||(r.alias=e,f[n]=r)}let m=i.model&&typeof i.model==`object`?i.model:null;m?(!m.primary&&o&&(m.primary=o),l.length>0&&(!Array.isArray(m.fallbacks)||m.fallbacks.length===0)&&(m.fallbacks=l),i.model=m):(o||l.length>0)&&(i.model={primary:o,fallbacks:l.length?l:[]});let h=i.imageModel&&typeof i.imageModel==`object`?i.imageModel:null;h?(!h.primary&&s&&(h.primary=s),u.length>0&&(!Array.isArray(h.fallbacks)||h.fallbacks.length===0)&&(h.fallbacks=u),i.imageModel=h):(s||u.length>0)&&(i.imageModel={primary:s,fallbacks:u.length?u:[]}),i.models=f,o!==void 0&&t.push(`Migrated ${a}.model string → ${a}.model.primary.`),l.length>0&&t.push(`Migrated ${a}.modelFallbacks → ${a}.model.fallbacks.`),s!==void 0&&t.push(`Migrated ${a}.imageModel string → ${a}.imageModel.primary.`),u.length>0&&t.push(`Migrated ${a}.imageModelFallbacks → ${a}.imageModel.fallbacks.`),c.length>0&&t.push(`Migrated ${a}.allowedModels → ${a}.models.`),Object.keys(d).length>0&&t.push(`Migrated ${a}.modelAliases → ${a}.models.*.alias.`),delete i.allowedModels,delete i.modelAliases,delete i.modelFallbacks,delete i.imageModelFallbacks}},{id:`routing.agents-v2`,describe:`Move routing.agents/defaultAgentId to agents.list`,apply:(e,t)=>{let n=z(e.routing);if(!n)return;let r=z(n.agents),i=B(e,`agents`),a=Wf(i);if(r){for(let[e,n]of Object.entries(r)){let r=String(e??``).trim(),i=z(n);if(!r||!i)continue;let o=Kf(a,r),s={...i};if(`mentionPatterns`in s){let e=s.mentionPatterns,n=B(o,`groupChat`);n.mentionPatterns===void 0?(n.mentionPatterns=e,t.push(`Moved routing.agents.${r}.mentionPatterns → agents.list (id "${r}").groupChat.mentionPatterns.`)):t.push(`Removed routing.agents.${r}.mentionPatterns (agents.list groupChat mentionPatterns already set).`),delete s.mentionPatterns}let c=z(s.groupChat);c&&(Hf(B(o,`groupChat`),c),delete s.groupChat);let l=z(s.sandbox);if(l){let e=z(l.tools);e&&(Hf(B(B(B(o,`tools`),`sandbox`),`tools`),e),delete l.tools,t.push(`Moved routing.agents.${r}.sandbox.tools → agents.list (id "${r}").tools.sandbox.tools.`)),s.sandbox=l}Hf(o,s)}delete n.agents,t.push(`Moved routing.agents → agents.list.`)}let o=typeof n.defaultAgentId==`string`?n.defaultAgentId.trim():``;if(o){if(a.some(e=>T(e)&&e.default===!0))t.push(`Removed routing.defaultAgentId (agents.list default already set).`);else{let e=Kf(a,o);e.default=!0,t.push(`Moved routing.defaultAgentId → agents.list (id "${o}").default.`)}delete n.defaultAgentId}a.length>0&&(i.list=a),Object.keys(n).length===0&&delete e.routing}},{id:`routing.config-v2`,describe:`Move routing bindings/groupChat/queue/agentToAgent/transcribeAudio`,apply:(e,t)=>{let n=z(e.routing);if(!n)return;if(n.bindings!==void 0&&(e.bindings===void 0?(e.bindings=n.bindings,t.push(`Moved routing.bindings → bindings.`)):t.push(`Removed routing.bindings (bindings already set).`),delete n.bindings),n.agentToAgent!==void 0){let r=B(e,`tools`);r.agentToAgent===void 0?(r.agentToAgent=n.agentToAgent,t.push(`Moved routing.agentToAgent → tools.agentToAgent.`)):t.push(`Removed routing.agentToAgent (tools.agentToAgent already set).`),delete n.agentToAgent}if(n.queue!==void 0){let r=B(e,`messages`);r.queue===void 0?(r.queue=n.queue,t.push(`Moved routing.queue → messages.queue.`)):t.push(`Removed routing.queue (messages.queue already set).`),delete n.queue}let r=z(n.groupChat);if(r){let i=r.historyLimit;if(i!==void 0){let n=B(B(e,`messages`),`groupChat`);n.historyLimit===void 0?(n.historyLimit=i,t.push(`Moved routing.groupChat.historyLimit → messages.groupChat.historyLimit.`)):t.push(`Removed routing.groupChat.historyLimit (messages.groupChat.historyLimit already set).`),delete r.historyLimit}let a=r.mentionPatterns;if(a!==void 0){let n=B(B(e,`messages`),`groupChat`);n.mentionPatterns===void 0?(n.mentionPatterns=a,t.push(`Moved routing.groupChat.mentionPatterns → messages.groupChat.mentionPatterns.`)):t.push(`Removed routing.groupChat.mentionPatterns (messages.groupChat.mentionPatterns already set).`),delete r.mentionPatterns}Object.keys(r).length===0?delete n.groupChat:n.groupChat=r}n.transcribeAudio!==void 0&&(Qf({raw:e,source:n.transcribeAudio,changes:t,movedMessage:`Moved routing.transcribeAudio → tools.media.audio.models.`,alreadySetMessage:`Removed routing.transcribeAudio (tools.media.audio.models already set).`,invalidMessage:`Removed routing.transcribeAudio (invalid or empty command).`}),delete n.transcribeAudio),Object.keys(n).length===0&&delete e.routing}},{id:`audio.transcription-v2`,describe:`Move audio.transcription to tools.media.audio.models`,apply:(e,t)=>{let n=z(e.audio);n?.transcription!==void 0&&(Qf({raw:e,source:n.transcription,changes:t,movedMessage:`Moved audio.transcription → tools.media.audio.models.`,alreadySetMessage:`Removed audio.transcription (tools.media.audio.models already set).`,invalidMessage:`Removed audio.transcription (invalid or empty command).`}),delete n.transcription,Object.keys(n).length===0?delete e.audio:e.audio=n)}},{id:`media.preserveFilenames-v2`,describe:`Move top-level media.preserveFilenames to channels.msteams.preserveFilenames`,apply:(e,t)=>{let n=z(e.media);if(n?.preserveFilenames===void 0)return;let r=B(B(e,`channels`),`msteams`);r.preserveFilenames===void 0?(r.preserveFilenames=n.preserveFilenames,t.push(`Moved media.preserveFilenames → channels.msteams.preserveFilenames.`)):t.push(`Removed media.preserveFilenames (channels.msteams.preserveFilenames already set).`),delete n.preserveFilenames,Object.keys(n).length===0?delete e.media:e.media=n}}],ep=[`e`,`vm`].join(``),tp=[`camera.snap`,`camera.clip`,`screen.record`,`calendar.add`,`contacts.add`,`reminders.add`],np=[{id:`gateway.nodes.generated-deny-defaults`,describe:`Remove the redundant node denylist generated by older onboarding`,apply:(e,t)=>{let n=z(e.gateway),r=z(n?.nodes),i=r?.denyCommands;!n||!r||r.allowCommands!==void 0||r.browser!==void 0||!Array.isArray(i)||i.length!==tp.length||!i.every((e,t)=>e===tp[t])||(delete r.denyCommands,Object.keys(r).length===0&&delete n.nodes,t.push(`Removed the redundant gateway.nodes.denyCommands defaults generated by older onboarding.`))}},{id:`models.providers.request.allowPrivateNetwork`,describe:`Mark existing private model provider base URLs as explicitly allowed`,apply:(e,t)=>{let n=z(z(e.models)?.providers);if(n)for(let[e,r]of Object.entries(n)){let n=z(r),i=typeof n?.baseUrl==`string`?n.baseUrl:``;if(!n||!oo(i))continue;let a=z(n.request)??{};a.allowPrivateNetwork===void 0&&(a.allowPrivateNetwork=!0,n.request=a,t.push(`Added models.providers.${e}.request.allowPrivateNetwork=true for existing private model endpoint.`))}}},{id:`memorySearch->agents.defaults.memorySearch`,describe:`Move top-level memorySearch to agents.defaults.memorySearch`,apply:(e,t)=>{let n=z(e.memorySearch);if(!n)return;let r=B(e,`agents`),i=B(r,`defaults`),a=z(i.memorySearch);if(!a)i.memorySearch=n,t.push(`Moved memorySearch → agents.defaults.memorySearch.`);else{let e=structuredClone(a);Hf(e,n),i.memorySearch=e,t.push(`Merged memorySearch → agents.defaults.memorySearch (filled missing fields from legacy; kept explicit agents.defaults values).`)}r.defaults=i,e.agents=r,delete e.memorySearch}},{id:`auth.anthropic-claude-cli-mode-oauth`,describe:`Switch anthropic:claude-cli auth profile mode to oauth`,apply:(e,t)=>{let n=z(z(e.auth)?.profiles);if(!n)return;let r=z(n[`anthropic:claude-cli`]);r&&r.mode===`token`&&(r.mode=`oauth`,t.push(`Updated auth.profiles["anthropic:claude-cli"].mode → "oauth".`))}},{id:`tools.bash->tools.exec`,describe:`Move tools.bash to tools.exec`,apply:(e,t)=>{let n=B(e,`tools`),r=z(n.bash);r&&(n.exec===void 0?(n.exec=r,t.push(`Moved tools.bash → tools.exec.`)):t.push(`Removed tools.bash (tools.exec already set).`),delete n.bash)}},{id:`wallet.solana-only-runtime`,describe:`Remove legacy wallet chain entries after Solana-only runtime migration`,apply:(e,t)=>{let n=z(e.wallet);if(!n)return;let r=z(n.keystore);if(r&&Array.isArray(r.chainSupport)){let e=r.chainSupport.some(e=>e!==`solana`),n=r.chainSupport.length===1&&r.chainSupport[0]===`solana`;(e||!n)&&(r.chainSupport=[`solana`],t.push(`Normalized wallet.keystore.chainSupport → ["solana"] (removed legacy non-Solana entries).`))}let i=z(n.runtime);if(i&&Array.isArray(i.chains)){let e=i.chains.some(e=>e!==`solana`),n=i.chains.length===1&&i.chains[0]===`solana`;(e||!n)&&(i.chains=[`solana`],t.push(`Normalized wallet.runtime.chains → ["solana"] (removed legacy non-Solana entries).`))}let a=z(i?.policy);a&&ep in a&&(delete a[ep],t.push(`Removed wallet.runtime.policy legacy non-Solana policy block.`))}},{id:`messages.tts.enabled->auto`,describe:`Move messages.tts.enabled to messages.tts.auto`,apply:(e,t)=>{let n=z(z(e.messages)?.tts);if(n){if(n.auto!==void 0){`enabled`in n&&(delete n.enabled,t.push(`Removed messages.tts.enabled (messages.tts.auto already set).`));return}typeof n.enabled==`boolean`&&(n.auto=n.enabled?`always`:`off`,delete n.enabled,t.push(`Moved messages.tts.enabled → messages.tts.auto (${String(n.auto)}).`))}}},{id:`agent.defaults-v2`,describe:`Move agent config to agents.defaults and tools`,apply:(e,t)=>{let n=z(e.agent);if(!n)return;let r=B(e,`agents`),i=z(r.defaults)??{},a=B(e,`tools`),o=z(n.tools);o&&(a.allow===void 0&&o.allow!==void 0&&(a.allow=o.allow,t.push(`Moved agent.tools.allow → tools.allow.`)),a.deny===void 0&&o.deny!==void 0&&(a.deny=o.deny,t.push(`Moved agent.tools.deny → tools.deny.`)));let s=z(n.elevated);s&&(a.elevated===void 0?(a.elevated=s,t.push(`Moved agent.elevated → tools.elevated.`)):t.push(`Removed agent.elevated (tools.elevated already set).`));let c=z(n.bash);c&&(a.exec===void 0?(a.exec=c,t.push(`Moved agent.bash → tools.exec.`)):t.push(`Removed agent.bash (tools.exec already set).`));let l=z(n.sandbox);if(l){let e=z(l.tools);e&&(Hf(B(B(a,`sandbox`),`tools`),e),delete l.tools,t.push(`Moved agent.sandbox.tools → tools.sandbox.tools.`))}let u=z(n.subagents);if(u){let e=z(u.tools);e&&(Hf(B(B(a,`subagents`),`tools`),e),delete u.tools,t.push(`Moved agent.subagents.tools → tools.subagents.tools.`))}let d=structuredClone(n);delete d.tools,delete d.elevated,delete d.bash,T(d.sandbox)&&delete d.sandbox.tools,T(d.subagents)&&delete d.subagents.tools,Hf(i,d),r.defaults=i,e.agents=r,delete e.agent,t.push(`Moved agent → agents.defaults.`)}},{id:`identity->agents.list`,describe:`Move identity to agents.list[].identity`,apply:(e,t)=>{let n=z(e.identity);if(!n)return;let r=B(e,`agents`),i=Wf(r),a=Gf(e),o=Kf(i,a);o.identity===void 0?(o.identity=n,t.push(`Moved identity → agents.list (id "${a}").identity.`)):t.push(`Removed identity (agents.list identity already set).`),r.list=i,e.agents=r,delete e.identity}}];[...Zf,...$f,...np];function rp(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function ip(e){return rp(e)&&Object.prototype.hasOwnProperty.call(e,`ttlHours`)}function ap(e){return rp(e)?Object.values(e).some(e=>ip(rp(e)?e.threadBindings:void 0)):!1}const op=[{path:[`whatsapp`],message:`whatsapp config moved to channels.whatsapp (auto-migrated on load).`},{path:[`telegram`],message:`telegram config moved to channels.telegram (auto-migrated on load).`},{path:[`discord`],message:`discord config moved to channels.discord (auto-migrated on load).`},{path:[`slack`],message:`slack config moved to channels.slack (auto-migrated on load).`},{path:[`signal`],message:`signal config moved to channels.signal (auto-migrated on load).`},{path:[`imessage`],message:`imessage config moved to channels.imessage (auto-migrated on load).`},{path:[`msteams`],message:`msteams config moved to channels.msteams (auto-migrated on load).`},{path:[`session`,`threadBindings`],message:`session.threadBindings.ttlHours was renamed to session.threadBindings.idleHours (auto-migrated on load).`,match:e=>ip(e)},{path:[`channels`,`discord`,`threadBindings`],message:`channels.discord.threadBindings.ttlHours was renamed to channels.discord.threadBindings.idleHours (auto-migrated on load).`,match:e=>ip(e)},{path:[`channels`,`discord`,`accounts`],message:`channels.discord.accounts.<id>.threadBindings.ttlHours was renamed to channels.discord.accounts.<id>.threadBindings.idleHours (auto-migrated on load).`,match:e=>ap(e)},{path:[`routing`,`allowFrom`],message:`routing.allowFrom was removed; use channels.whatsapp.allowFrom instead (auto-migrated on load).`},{path:[`routing`,`bindings`],message:`routing.bindings was moved; use top-level bindings instead (auto-migrated on load).`},{path:[`routing`,`agents`],message:`routing.agents was moved; use agents.list instead (auto-migrated on load).`},{path:[`routing`,`defaultAgentId`],message:`routing.defaultAgentId was moved; use agents.list[].default instead (auto-migrated on load).`},{path:[`routing`,`agentToAgent`],message:`routing.agentToAgent was moved; use tools.agentToAgent instead (auto-migrated on load).`},{path:[`routing`,`groupChat`,`requireMention`],message:`routing.groupChat.requireMention was removed; use channels.whatsapp/telegram/imessage groups defaults (e.g. channels.whatsapp.groups."*".requireMention) instead (auto-migrated on load).`},{path:[`routing`,`groupChat`,`mentionPatterns`],message:`routing.groupChat.mentionPatterns was moved; use agents.list[].groupChat.mentionPatterns or messages.groupChat.mentionPatterns instead (auto-migrated on load).`},{path:[`routing`,`queue`],message:`routing.queue was moved; use messages.queue instead (auto-migrated on load).`},{path:[`routing`,`transcribeAudio`],message:`routing.transcribeAudio was moved; use tools.media.audio.models instead (auto-migrated on load).`},{path:[`telegram`,`requireMention`],message:`telegram.requireMention was removed; use channels.telegram.groups."*".requireMention instead (auto-migrated on load).`},{path:[`identity`],message:`identity was moved; use agents.list[].identity instead (auto-migrated on load).`},{path:[`agent`],message:`agent.* was moved; use agents.defaults (and tools.* for tool/elevated/exec settings) instead (auto-migrated on load).`},{path:[`memorySearch`],message:`top-level memorySearch was moved; use agents.defaults.memorySearch instead (auto-migrated on load).`},{path:[`tools`,`bash`],message:`tools.bash was removed; use tools.exec instead (auto-migrated on load).`},{path:[`wallet`,`runtime`,`policy`,[`e`,`vm`].join(``)],message:`wallet.runtime.policy has a legacy non-Solana policy block; Fased wallet runtime is Solana-only (auto-migrated on load).`},{path:[`wallet`,`keystore`,`chainSupport`],message:`wallet.keystore.chainSupport contains legacy non-Solana entries; Fased wallet runtime is Solana-only (auto-migrated on load).`,match:e=>Array.isArray(e)&&e.some(e=>e!==`solana`)},{path:[`wallet`,`runtime`,`chains`],message:`wallet.runtime.chains contains legacy non-Solana entries; Fased wallet runtime is Solana-only (auto-migrated on load).`,match:e=>Array.isArray(e)&&e.some(e=>e!==`solana`)},{path:[`agent`,`model`],message:`agent.model string was replaced by agents.defaults.model.primary/fallbacks and agents.defaults.models (auto-migrated on load).`,match:e=>typeof e==`string`},{path:[`agent`,`imageModel`],message:`agent.imageModel string was replaced by agents.defaults.imageModel.primary/fallbacks (auto-migrated on load).`,match:e=>typeof e==`string`},{path:[`agent`,`allowedModels`],message:`agent.allowedModels was replaced by agents.defaults.models (auto-migrated on load).`},{path:[`agent`,`modelAliases`],message:`agent.modelAliases was replaced by agents.defaults.models.*.alias (auto-migrated on load).`},{path:[`agent`,`modelFallbacks`],message:`agent.modelFallbacks was replaced by agents.defaults.model.fallbacks (auto-migrated on load).`},{path:[`agent`,`imageModelFallbacks`],message:`agent.imageModelFallbacks was replaced by agents.defaults.imageModel.fallbacks (auto-migrated on load).`},{path:[`messages`,`tts`,`enabled`],message:`messages.tts.enabled was replaced by messages.tts.auto (auto-migrated on load).`},{path:[`gateway`,`token`],message:`gateway.token is ignored; use gateway.auth.token instead (auto-migrated on load).`}];function sp(e){if(!e||typeof e!=`object`)return[];let t=e,n=[];for(let e of op){let r=t;for(let t of e.path){if(!r||typeof r!=`object`){r=void 0;break}r=r[t]}r!==void 0&&(!e.match||e.match(r,t))&&n.push({path:e.path.join(`.`),message:e.message})}return n}function cp(e){return w(e)?typeof e.id==`string`&&e.id.length>0:!1}function lp(e,t,n){if(!e.every(cp))return;let r=[...e],i=new Map;for(let[e,t]of r.entries()){if(!cp(t))return;i.set(t.id,e)}for(let e of t){if(!cp(e)){r.push(structuredClone(e));continue}let t=i.get(e.id);if(t===void 0){r.push(structuredClone(e)),i.set(e.id,r.length-1);continue}r[t]=up(r[t],e,n)}return r}function up(e,t,n={}){if(!w(t))return t;let r=w(e)?{...e}:{};for(let[e,i]of Object.entries(t))if(!ia(e)){if(i===null){delete r[e];continue}if(n.mergeObjectArraysById&&Array.isArray(r[e])&&Array.isArray(i)){let t=lp(r[e],i,n);if(t){r[e]=t;continue}}if(w(i)){let t=r[e];r[e]=up(w(t)?t:{},i,n);continue}r[e]=i}return r}const dp=new Set,fp=e=>!e||e.length===0?dp:new Set(e);function pp(e,t){let n=new Set;for(let t of e)t.startsWith(`--`)&&n.add(t);for(let e of t)e.startsWith(`--`)&&n.add(e);return Array.from(n)}function mp(e){let t=new Map;for(let n of e)if(!(!n.startsWith(`--`)||n.length<=2))for(let e=3;e<=n.length;e+=1){let r=n.slice(0,e),i=t.get(r);if(i===void 0){t.set(r,n);continue}i!==n&&t.set(r,null)}return t}function hp(e){let t=fp(e.allowedValueFlags),n=fp(e.deniedFlags),r=pp(t,n);return{minPositional:e.minPositional,maxPositional:e.maxPositional,allowedValueFlags:t,deniedFlags:n,knownLongFlags:r,knownLongFlagsSet:new Set(r),longFlagPrefixMap:mp(r)}}function gp(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,hp(t)]))}gp({jq:{maxPositional:1,allowedValueFlags:[`--arg`,`--argjson`,`--argstr`],deniedFlags:[`--argfile`,`--rawfile`,`--slurpfile`,`--from-file`,`--library-path`,`-L`,`-f`]},grep:{maxPositional:0,allowedValueFlags:[`--regexp`,`--max-count`,`--after-context`,`--before-context`,`--context`,`--devices`,`--binary-files`,`--exclude`,`--include`,`--label`,`-e`,`-m`,`-A`,`-B`,`-C`,`-D`],deniedFlags:[`--file`,`--exclude-from`,`--dereference-recursive`,`--directories`,`--recursive`,`-f`,`-d`,`-r`,`-R`]},cut:{maxPositional:0,allowedValueFlags:[`--bytes`,`--characters`,`--fields`,`--delimiter`,`--output-delimiter`,`-b`,`-c`,`-f`,`-d`]},sort:{maxPositional:0,allowedValueFlags:[`--key`,`--field-separator`,`--buffer-size`,`--parallel`,`--batch-size`,`-k`,`-t`,`-S`],deniedFlags:[`--compress-program`,`--files0-from`,`--output`,`--random-source`,`--temporary-directory`,`-T`,`-o`]},uniq:{maxPositional:0,allowedValueFlags:[`--skip-fields`,`--skip-chars`,`--check-chars`,`--group`,`-f`,`-s`,`-w`]},head:{maxPositional:0,allowedValueFlags:[`--lines`,`--bytes`,`-n`,`-c`]},tail:{maxPositional:0,allowedValueFlags:[`--lines`,`--bytes`,`--sleep-interval`,`--max-unchanged-stats`,`--pid`,`-n`,`-c`]},tr:{minPositional:1,maxPositional:2},wc:{maxPositional:0,deniedFlags:[`--files0-from`]}});function _p(e){let t=e.trim().toLowerCase();return t.length>0?t:null}function vp(e){if(typeof e!=`number`||!Number.isFinite(e))return;let t=Math.trunc(e);return t>=0?t:void 0}function yp(e){if(!Array.isArray(e)||e.length===0)return;let t=Array.from(new Set(e.map(e=>e.trim()).filter(e=>e.length>0))).toSorted((e,t)=>e.localeCompare(t));return t.length>0?t:void 0}function bp(e){let t=vp(e.minPositional),n=vp(e.maxPositional);return{minPositional:t,maxPositional:t!==void 0&&n!==void 0&&n<t?t:n,allowedValueFlags:yp(e.allowedValueFlags),deniedFlags:yp(e.deniedFlags)}}function xp(e){let t={};if(!e)return t;for(let[n,r]of Object.entries(e)){let e=_p(n);e&&(t[e]=bp(r))}return t}const Sp=[`ash`,`bash`,`dash`,`fish`,`ksh`,`sh`,`zsh`],Cp=[`cmd`],wp=[`powershell`,`pwsh`],Tp=[`chrt`,`doas`,`env`,`ionice`,`nice`,`nohup`,`setsid`,`stdbuf`,`sudo`,`taskset`,`timeout`];function Ep(e){let t=new Set;for(let n of e)t.add(n),t.add(`${n}.exe`);return Array.from(t)}new Set(Ep(Cp)),new Set(Ep(wp)),new Set(Ep(Tp)),new Set([...Sp,...Cp,...wp]);function Dp(e){if(!Array.isArray(e))return[];let t=e.map(e=>e.trim()).filter(e=>e.length>0);return Array.from(new Set(t))}function Op(e){let t=e=>{if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=xp(t.safeBinProfiles);t.safeBinProfiles=Object.keys(n).length>0?n:void 0;let r=Dp(t.safeBinTrustedDirs);t.safeBinTrustedDirs=r.length>0?r:void 0};t(e.tools?.exec);let n=Array.isArray(e.agents?.list)?e.agents.list:[];for(let e of n)t(e?.tools?.exec)}const kp=/^~(?=$|[\\/])/,Ap=/(dir|path|paths|file|root|workspace)$/i,jp=new Set([`paths`,`pathPrepend`]);function Mp(e,t){return!kp.test(t.trim())||!e?t:Ap.test(e)||jp.has(e)?E(t):t}function Np(e,t){if(typeof t==`string`)return Mp(e,t);if(Array.isArray(t)){let n=!!(e&&jp.has(e));return t.map(t=>typeof t==`string`?n?Mp(e,t):t:Array.isArray(t)||w(t)?Np(void 0,t):t)}if(!w(t))return t;for(let[e,n]of Object.entries(t)){let r=Np(e,n);r!==n&&(t[e]=r)}return t}function Pp(e){return!e||typeof e!=`object`||Np(void 0,e),e}function Fp(e){return typeof e==`string`&&e.trim()||null}function Ip(e,t){return e?.some(e=>Fp(e)===t)===!0}function Lp(e){if(e.plugins?.enabled===!1)return null;let t=Fp(e.plugins?.slots?.memory)??`memory-core`;return t.toLowerCase()===`none`||e.plugins?.entries?.[t]?.enabled===!1||Ip(e.plugins?.deny,t)?null:t}function Rp(e){let t=e.plugins?.allow,n=Array.isArray(t),r=new Set((t??[]).map(Fp).filter(e=>e!==null)),i=new Set;for(let[t,n]of Object.entries(e.plugins?.entries??{})){if(n?.enabled===!1)continue;let e=Fp(t);e&&i.add(e)}for(let t of Object.keys(e.plugins?.installs??{})){let e=Fp(t);e&&i.add(e)}let a=Lp(e);a&&(n||i.size>0)&&i.add(a);let o=new Set;for(let e of i)r.has(e)||(r.add(e),o.add(e));if(o.size===0)return{config:e,repairedPluginIds:[]};let s=[...o].toSorted((e,t)=>e.localeCompare(t)),c=[...r].toSorted((e,t)=>e.localeCompare(t));return{config:{...e,plugins:{...e.plugins,allow:c}},repairedPluginIds:s}}let zp={};function Bp(e,t){if(!w(e)||!w(t))return t;let n={...e};for(let[r,i]of Object.entries(t))i===void 0||ia(r)||(n[r]=Bp(e[r],i));return n}function Vp(e){return!zp||Object.keys(zp).length===0?e:Bp(e,zp)}const Hp=new te({allErrors:!0,strict:!1,removeAdditional:!1}),Up=new Map;function Wp(e){return!e||e.length===0?[`invalid config`]:e.map(e=>`${e.instancePath?.replace(/^\//,``).replace(/\//g,`.`)||`<root>`}: ${e.message??`invalid`}`)}function Gp(e){let t=Up.get(e.cacheKey);return(!t||t.schema!==e.schema)&&(t={validate:Hp.compile(e.schema),schema:e.schema},Up.set(e.cacheKey,t)),t.validate(e.value)?{ok:!0}:{ok:!1,errors:Wp(t.validate.errors)}}const Kp=/^data:/i,qp=/^https?:\/\//i,Jp=/^[a-z][a-z0-9+.-]*:/i,Yp=/^[a-zA-Z]:[\\/]/;function Xp(e){return Kp.test(e)}function Zp(e){return qp.test(e)}function Qp(e){return Jp.test(e)}function $p(e){return Yp.test(e)}function em(e,t){let n=i.relative(e,t);return n===``?!0:!n.startsWith(`..`)&&!i.isAbsolute(n)}const tm={b:1,kb:1024,k:1024,mb:1024**2,m:1024**2,gb:1024**3,g:1024**3,tb:1024**4,t:1024**4};function nm(e,t){let n=String(e??``).trim().toLowerCase();if(!n)throw Error(`invalid byte size (empty)`);let r=/^(\d+(?:\.\d+)?)([a-z]+)?$/.exec(n);if(!r)throw Error(`invalid byte size: ${e}`);let i=Number(r[1]);if(!Number.isFinite(i)||i<0)throw Error(`invalid byte size: ${e}`);let a=tm[(r[2]??t?.defaultUnit??`b`).toLowerCase()];if(!a)throw Error(`invalid byte size unit: ${e}`);let o=Math.round(i*a);if(!Number.isFinite(o))throw Error(`invalid byte size: ${e}`);return o}const rm={ms:1,s:1e3,m:6e4,h:36e5,d:864e5};function im(e,t){let n=String(e??``).trim().toLowerCase();if(!n)throw Error(`invalid duration (empty)`);let r=/^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/.exec(n);if(r){let n=Number(r[1]);if(!Number.isFinite(n)||n<0)throw Error(`invalid duration: ${e}`);let i=r[2]??t?.defaultUnit??`ms`,a=Math.round(n*rm[i]);if(!Number.isFinite(a))throw Error(`invalid duration: ${e}`);return a}let i=0,a=0;for(let t of n.matchAll(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g)){let[n,r,o]=t,s=t.index??-1;if(!n||!r||!o||s<0||s!==a)throw Error(`invalid duration: ${e}`);let c=Number(r);if(!Number.isFinite(c)||c<0)throw Error(`invalid duration: ${e}`);let l=rm[o];if(!l)throw Error(`invalid duration: ${e}`);i+=c*l,a+=n.length}if(a!==n.length||a===0)throw Error(`invalid duration: ${e}`);let o=Math.round(i);if(!Number.isFinite(o))throw Error(`invalid duration: ${e}`);return o}function am(e){return e?.trim().toLowerCase()||void 0}function om(e){let t=am(e.network);return t?t===`host`?`host`:t.startsWith(`container:`)&&e.allowContainerNamespaceJoin!==!0?`container_namespace_join`:null:null}const sm=y.union([y.string(),y.object({primary:y.string().optional(),fallbacks:y.array(y.string()).max(1).optional()}).strict()]),cm=y.object({cheapCheck:y.string().optional(),strong:y.string().optional(),escalation:y.string().optional(),coding:y.string().optional(),summarizer:y.string().optional()}).strict(),lm=y.object({profileId:y.string().optional(),primary:y.string().optional(),fallbacks:y.array(y.string()).max(1).optional(),taskModels:cm.optional()}).strict(),um=[`openai-completions`,`openai-responses`,`openai-codex-responses`,`anthropic-messages`,`google-generative-ai`,`github-copilot`,`ollama`],dm=y.union([y.literal(`allow`),y.literal(`deny`)]),fm=y.union([y.literal(`direct`),y.literal(`group`),y.literal(`channel`),y.literal(`dm`)]).optional();function pm(){return y.object({default:dm.optional(),rules:y.array(y.object({action:dm,match:y.object({channel:y.string().optional(),chatType:fm,keyPrefix:y.string().optional(),rawKeyPrefix:y.string().optional()}).strict().optional()}).strict()).optional()}).strict().optional()}const V=y.registry(),mm=/^[A-Z][A-Z0-9_]{0,127}$/,hm=/^[a-z][a-z0-9_-]{0,63}$/,gm=/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/,_m=/^[A-Za-z]:[\\/]/,vm=/^\\\\[^\\]+\\[^\\]+/;function ym(e){return i.isAbsolute(e)||_m.test(e)||vm.test(e)}const bm=y.object({source:y.literal(`env`),provider:y.string().regex(hm,`Secret reference provider must match /^[a-z][a-z0-9_-]{0,63}$/ (example: "default").`),id:y.string().regex(mm,`Env secret reference id must match /^[A-Z][A-Z0-9_]{0,127}$/ (example: "OPENAI_API_KEY").`)}).strict(),xm=y.object({source:y.literal(`file`),provider:y.string().regex(hm,`Secret reference provider must match /^[a-z][a-z0-9_-]{0,63}$/ (example: "default").`),id:y.string().refine(fs,`File secret reference id must be an absolute JSON pointer (example: "/providers/openai/apiKey"), or "value" for singleValue mode.`)}).strict(),Sm=y.object({source:y.literal(`exec`),provider:y.string().regex(hm,`Secret reference provider must match /^[a-z][a-z0-9_-]{0,63}$/ (example: "default").`),id:y.string().regex(gm,`Exec secret reference id must match /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/ (example: "vault/openai/api-key").`)}).strict(),Cm=y.discriminatedUnion(`source`,[bm,xm,Sm]),H=y.union([y.string(),Cm]),wm=y.object({source:y.literal(`env`),allowlist:y.array(y.string().regex(mm)).max(256).optional()}).strict(),Tm=y.object({source:y.literal(`file`),path:y.string().min(1),mode:y.union([y.literal(`singleValue`),y.literal(`json`)]).optional(),timeoutMs:y.number().int().positive().max(12e4).optional(),maxBytes:y.number().int().positive().max(20*1024*1024).optional()}).strict(),Em=y.object({source:y.literal(`exec`),command:y.string().min(1).refine(e=>Vf(e),`secrets.providers.*.command is unsafe.`).refine(e=>ym(e),`secrets.providers.*.command must be an absolute path.`),args:y.array(y.string().max(1024)).max(128).optional(),timeoutMs:y.number().int().positive().max(12e4).optional(),noOutputTimeoutMs:y.number().int().positive().max(12e4).optional(),maxOutputBytes:y.number().int().positive().max(20*1024*1024).optional(),jsonOnly:y.boolean().optional(),env:y.record(y.string(),y.string()).optional(),passEnv:y.array(y.string().regex(mm)).max(128).optional(),trustedDirs:y.array(y.string().min(1).refine(e=>ym(e),`trustedDirs entries must be absolute paths.`)).max(64).optional(),allowInsecurePath:y.boolean().optional(),allowSymlinkCommand:y.boolean().optional()}).strict(),Dm=y.discriminatedUnion(`source`,[wm,Tm,Em]),Om=y.object({providers:y.object({}).catchall(Dm).optional(),defaults:y.object({env:y.string().regex(hm).optional(),file:y.string().regex(hm).optional(),exec:y.string().regex(hm).optional()}).strict().optional(),resolution:y.object({maxProviderConcurrency:y.number().int().positive().max(16).optional(),maxRefsPerProvider:y.number().int().positive().max(4096).optional(),maxBatchBytes:y.number().int().positive().max(5*1024*1024).optional()}).strict().optional()}).strict().optional(),km=y.enum(um),Am=y.object({supportsStore:y.boolean().optional(),supportsDeveloperRole:y.boolean().optional(),supportsReasoningEffort:y.boolean().optional(),supportsUsageInStreaming:y.boolean().optional(),supportsStrictMode:y.boolean().optional(),maxTokensField:y.union([y.literal(`max_completion_tokens`),y.literal(`max_tokens`)]).optional(),thinkingFormat:y.union([y.literal(`openai`),y.literal(`zai`),y.literal(`qwen`)]).optional(),requiresToolResultName:y.boolean().optional(),requiresAssistantAfterToolResult:y.boolean().optional(),requiresThinkingAsText:y.boolean().optional(),requiresMistralToolIds:y.boolean().optional()}).strict().optional(),jm=y.object({tools:y.boolean().optional(),json:y.boolean().optional(),audio:y.boolean().optional(),video:y.boolean().optional(),speech:y.boolean().optional(),fixedReasoning:y.boolean().optional(),thinkingLevels:y.array(y.union([y.literal(`off`),y.literal(`minimal`),y.literal(`low`),y.literal(`medium`),y.literal(`high`),y.literal(`xhigh`),y.literal(`max`),y.literal(`ultra`)])).optional(),defaultThinkingLevel:y.union([y.literal(`off`),y.literal(`minimal`),y.literal(`low`),y.literal(`medium`),y.literal(`high`),y.literal(`xhigh`),y.literal(`max`),y.literal(`ultra`)]).optional(),thinkingMode:y.union([y.literal(`openai-reasoning-effort`),y.literal(`anthropic-thinking-budget`),y.literal(`anthropic-adaptive`),y.literal(`google-thinking-budget`),y.literal(`xai-reasoning-effort`),y.literal(`xai-multi-agent-effort`),y.literal(`mistral-reasoning-effort`),y.literal(`volcengine-reasoning-effort`),y.literal(`byteplus-thinking-type`),y.literal(`zai-binary`),y.literal(`qwen-thinking`),y.literal(`moonshot-thinking`),y.literal(`generic-reasoning`)]).optional(),reasoningBudgetSupported:y.boolean().optional()}).strict().optional(),Mm=y.object({id:y.string().min(1),name:y.string().min(1),api:km.optional(),reasoning:y.boolean().optional(),input:y.array(y.union([y.literal(`text`),y.literal(`image`)])).optional(),cost:y.object({input:y.number().optional(),output:y.number().optional(),cacheRead:y.number().optional(),cacheWrite:y.number().optional()}).strict().optional(),contextWindow:y.number().positive().optional(),maxTokens:y.number().positive().optional(),headers:y.record(y.string(),y.string()).optional(),compat:Am,capabilities:jm}).strict(),Nm=y.object({baseUrl:y.string().min(1),apiKey:H.optional().register(V),auth:y.union([y.literal(`api-key`),y.literal(`oauth`),y.literal(`token`)]).optional(),api:km.optional(),headers:y.record(y.string(),y.string()).optional(),authHeader:y.boolean().optional(),request:y.object({allowPrivateNetwork:y.boolean().optional()}).strict().optional(),models:y.array(Mm)}).strict(),Pm=y.object({mode:y.union([y.literal(`merge`),y.literal(`replace`)]).optional(),providers:y.record(y.string(),Nm).optional()}).strict().optional(),Fm=y.object({mentionPatterns:y.array(y.string()).optional(),historyLimit:y.number().int().positive().optional()}).strict().optional(),U=y.object({historyLimit:y.number().int().min(0).optional()}).strict(),Im=y.object({name:y.string().optional(),theme:y.string().optional(),emoji:y.string().optional(),avatar:y.string().optional()}).strict().optional(),W=y.union([y.literal(`steer`),y.literal(`followup`),y.literal(`collect`),y.literal(`steer-backlog`),y.literal(`steer+backlog`),y.literal(`queue`),y.literal(`interrupt`)]),Lm=y.union([y.literal(`old`),y.literal(`new`),y.literal(`summarize`)]),Rm=y.union([y.literal(`off`),y.literal(`first`),y.literal(`all`)]),zm=y.union([y.literal(`never`),y.literal(`instant`),y.literal(`thinking`),y.literal(`message`)]),G=y.enum([`open`,`disabled`,`allowlist`]),K=y.enum([`pairing`,`allowlist`,`open`,`disabled`]),q=y.object({minChars:y.number().int().positive().optional(),maxChars:y.number().int().positive().optional(),idleMs:y.number().int().nonnegative().optional()}).strict();y.number().int().min(0).optional(),y.number().int().min(0).optional(),y.record(y.string(),U.optional()).optional(),y.number().int().positive().optional(),y.enum([`length`,`newline`]).optional(),y.boolean().optional(),q.optional(),y.string().optional(),y.number().positive().optional();const Bm=y.object({minChars:y.number().int().positive().optional(),maxChars:y.number().int().positive().optional(),breakPreference:y.union([y.literal(`paragraph`),y.literal(`newline`),y.literal(`sentence`)]).optional()}).strict(),Vm=y.enum([`off`,`bullets`,`code`]),Hm=y.object({tables:Vm.optional()}).strict().optional(),Um=y.enum([`elevenlabs`,`openai`,`edge`]),Wm=y.enum([`final`,`all`]),Gm=y.enum([`off`,`always`,`inbound`,`tagged`]),Km=y.object({auto:Gm.optional(),enabled:y.boolean().optional(),mode:Wm.optional(),provider:Um.optional(),summaryModel:y.string().optional(),modelOverrides:y.object({enabled:y.boolean().optional(),allowText:y.boolean().optional(),allowProvider:y.boolean().optional(),allowVoice:y.boolean().optional(),allowModelId:y.boolean().optional(),allowVoiceSettings:y.boolean().optional(),allowNormalization:y.boolean().optional(),allowSeed:y.boolean().optional()}).strict().optional(),elevenlabs:y.object({apiKey:y.string().optional().register(V),baseUrl:y.string().optional(),voiceId:y.string().optional(),modelId:y.string().optional(),seed:y.number().int().min(0).max(4294967295).optional(),applyTextNormalization:y.enum([`auto`,`on`,`off`]).optional(),languageCode:y.string().optional(),voiceSettings:y.object({stability:y.number().min(0).max(1).optional(),similarityBoost:y.number().min(0).max(1).optional(),style:y.number().min(0).max(1).optional(),useSpeakerBoost:y.boolean().optional(),speed:y.number().min(.5).max(2).optional()}).strict().optional()}).strict().optional(),openai:y.object({apiKey:y.string().optional().register(V),model:y.string().optional(),voice:y.string().optional()}).strict().optional(),edge:y.object({enabled:y.boolean().optional(),voice:y.string().optional(),lang:y.string().optional(),outputFormat:y.string().optional(),pitch:y.string().optional(),rate:y.string().optional(),volume:y.string().optional(),saveSubtitles:y.boolean().optional(),proxy:y.string().optional(),timeoutMs:y.number().int().min(1e3).max(12e4).optional()}).strict().optional(),prefsPath:y.string().optional(),maxTextLength:y.number().int().min(1).optional(),timeoutMs:y.number().int().min(1e3).max(12e4).optional()}).strict().optional(),qm=y.object({mode:y.union([y.literal(`off`),y.literal(`natural`),y.literal(`custom`)]).optional(),minMs:y.number().int().nonnegative().optional(),maxMs:y.number().int().nonnegative().optional()}).strict(),Jm=y.object({noOutputTimeoutMs:y.number().int().min(1e3).optional(),noOutputTimeoutRatio:y.number().min(.05).max(.95).optional(),minMs:y.number().int().min(1e3).optional(),maxMs:y.number().int().min(1e3).optional()}).strict().optional(),Ym=y.object({command:y.string(),args:y.array(y.string()).optional(),output:y.union([y.literal(`json`),y.literal(`text`),y.literal(`jsonl`)]).optional(),resumeOutput:y.union([y.literal(`json`),y.literal(`text`),y.literal(`jsonl`)]).optional(),input:y.union([y.literal(`arg`),y.literal(`stdin`)]).optional(),maxPromptArgChars:y.number().int().positive().optional(),env:y.record(y.string(),y.string()).optional(),clearEnv:y.array(y.string()).optional(),modelArg:y.string().optional(),modelAliases:y.record(y.string(),y.string()).optional(),sessionArg:y.string().optional(),sessionArgs:y.array(y.string()).optional(),resumeArgs:y.array(y.string()).optional(),sessionMode:y.union([y.literal(`always`),y.literal(`existing`),y.literal(`none`)]).optional(),sessionIdFields:y.array(y.string()).optional(),systemPromptArg:y.string().optional(),systemPromptMode:y.union([y.literal(`append`),y.literal(`replace`)]).optional(),systemPromptWhen:y.union([y.literal(`first`),y.literal(`always`),y.literal(`never`)]).optional(),imageArg:y.string().optional(),imageMode:y.union([y.literal(`repeat`),y.literal(`list`)]).optional(),serialize:y.boolean().optional(),reliability:y.object({watchdog:y.object({fresh:Jm,resume:Jm}).strict().optional()}).strict().optional()}).strict(),Xm=e=>(e??[]).map(e=>String(e).trim()).filter(Boolean),J=e=>{e.policy===`open`&&(Xm(e.allowFrom).includes(`*`)||e.ctx.addIssue({code:y.ZodIssueCode.custom,path:e.path,message:e.message}))},Y=e=>{e.policy===`allowlist`&&(Xm(e.allowFrom).length>0||e.ctx.addIssue({code:y.ZodIssueCode.custom,path:e.path,message:e.message}))},Zm=y.enum([`thread`,`top-level`]),Qm=y.object({attempts:y.number().int().min(1).optional(),minDelayMs:y.number().int().min(0).optional(),maxDelayMs:y.number().int().min(0).optional(),jitter:y.number().min(0).max(1).optional()}).strict().optional(),$m=y.object({whatsapp:W.optional(),telegram:W.optional(),discord:W.optional(),irc:W.optional(),slack:W.optional(),mattermost:W.optional(),signal:W.optional(),imessage:W.optional(),msteams:W.optional(),webchat:W.optional()}).strict().optional(),eh=y.record(y.string(),y.number().int().nonnegative()).optional(),th=y.object({mode:W.optional(),byChannel:$m,debounceMs:y.number().int().nonnegative().optional(),debounceMsByChannel:eh,cap:y.number().int().positive().optional(),drop:Lm.optional()}).strict().optional(),nh=y.object({debounceMs:y.number().int().nonnegative().optional(),byChannel:eh}).strict().optional(),rh=y.object({command:y.array(y.string()).superRefine((e,t)=>{let n=e[0];Vf(n)||t.addIssue({code:y.ZodIssueCode.custom,path:[0],message:`expected safe executable name or path`})}),timeoutSeconds:y.number().int().positive().optional()}).strict().optional(),ih=y.string().regex(/^#?[0-9a-fA-F]{6}$/,`expected hex color (RRGGBB)`),ah=y.string().refine(Vf,`expected safe executable name or path`),oh=pm(),sh=y.array(y.union([y.literal(`image`),y.literal(`audio`),y.literal(`video`)])).optional(),ch=y.object({mode:y.union([y.literal(`first`),y.literal(`all`)]).optional(),maxAttachments:y.number().int().positive().optional(),prefer:y.union([y.literal(`first`),y.literal(`last`),y.literal(`path`),y.literal(`url`)]).optional()}).strict().optional(),lh=y.object({detectLanguage:y.boolean().optional(),punctuate:y.boolean().optional(),smartFormat:y.boolean().optional()}).strict().optional(),uh=y.union([y.string(),y.number(),y.boolean()]),dh=y.record(y.string(),y.record(y.string(),uh)).optional(),fh={prompt:y.string().optional(),timeoutSeconds:y.number().int().positive().optional(),language:y.string().optional(),providerOptions:dh,deepgram:lh,baseUrl:y.string().optional(),headers:y.record(y.string(),y.string()).optional()},ph=y.object({provider:y.string().optional(),model:y.string().optional(),capabilities:sh,type:y.union([y.literal(`provider`),y.literal(`cli`)]).optional(),command:y.string().optional(),args:y.array(y.string()).optional(),maxChars:y.number().int().positive().optional(),maxBytes:y.number().int().positive().optional(),...fh,profile:y.string().optional(),preferredProfile:y.string().optional()}).strict().optional(),mh=y.object({enabled:y.boolean().optional(),scope:oh,maxBytes:y.number().int().positive().optional(),maxChars:y.number().int().positive().optional(),...fh,attachments:ch,models:y.array(ph).optional()}).strict().optional(),hh=y.object({models:y.array(ph).optional(),concurrency:y.number().int().positive().optional(),image:mh.optional(),audio:mh.optional(),video:mh.optional()}).strict().optional(),gh=y.object({type:y.literal(`cli`).optional(),command:y.string().min(1),args:y.array(y.string()).optional(),timeoutSeconds:y.number().int().positive().optional()}).strict(),_h=y.object({enabled:y.boolean().optional(),scope:oh,maxLinks:y.number().int().positive().optional(),timeoutSeconds:y.number().int().positive().optional(),models:y.array(gh).optional()}).strict().optional(),vh=y.union([y.boolean(),y.literal(`auto`)]),yh=y.object({native:vh.optional(),nativeSkills:vh.optional()}).strict().optional(),bh=y.object({every:y.string().optional(),activeHours:y.object({start:y.string().optional(),end:y.string().optional(),timezone:y.string().optional()}).strict().optional(),model:y.string().optional(),session:y.string().optional(),includeReasoning:y.boolean().optional(),target:y.string().optional(),directPolicy:y.union([y.literal(`allow`),y.literal(`block`)]).optional(),to:y.string().optional(),accountId:y.string().optional(),prompt:y.string().optional(),ackMaxChars:y.number().int().nonnegative().optional(),suppressToolErrorWarnings:y.boolean().optional()}).strict().superRefine((e,t)=>{if(!e.every)return;try{im(e.every,{defaultUnit:`m`})}catch{t.addIssue({code:y.ZodIssueCode.custom,path:[`every`],message:`invalid duration (use ms, s, m, h)`})}let n=e.activeHours;if(!n)return;let r=/^([01]\d|2[0-3]|24):([0-5]\d)$/,i=(e,n,i)=>{if(!e)return;if(!r.test(e)){t.addIssue({code:y.ZodIssueCode.custom,path:[`activeHours`,i],message:`invalid time (use "HH:MM" 24h format)`});return}let[a,o]=e.split(`:`),s=Number(a);if(s===24&&Number(o)!==0){t.addIssue({code:y.ZodIssueCode.custom,path:[`activeHours`,i],message:`invalid time (24:00 is the only allowed 24:xx value)`});return}s===24&&!n.allow24&&t.addIssue({code:y.ZodIssueCode.custom,path:[`activeHours`,i],message:`invalid time (start cannot be 24:00)`})};i(n.start,{allow24:!1},`start`),i(n.end,{allow24:!0},`end`)}).optional(),xh=y.object({image:y.string().optional(),containerPrefix:y.string().optional(),workdir:y.string().optional(),readOnlyRoot:y.boolean().optional(),tmpfs:y.array(y.string()).optional(),network:y.string().optional(),user:y.string().optional(),capDrop:y.array(y.string()).optional(),env:y.record(y.string(),y.string()).optional(),setupCommand:y.string().optional(),pidsLimit:y.number().int().positive().optional(),memory:y.union([y.string(),y.number()]).optional(),memorySwap:y.union([y.string(),y.number()]).optional(),cpus:y.number().positive().optional(),ulimits:y.record(y.string(),y.union([y.string(),y.number(),y.object({soft:y.number().int().nonnegative().optional(),hard:y.number().int().nonnegative().optional()}).strict()])).optional(),seccompProfile:y.string().optional(),apparmorProfile:y.string().optional(),dns:y.array(y.string()).optional(),extraHosts:y.array(y.string()).optional(),binds:y.array(y.string()).optional(),dangerouslyAllowReservedContainerTargets:y.boolean().optional(),dangerouslyAllowExternalBindSources:y.boolean().optional(),dangerouslyAllowContainerNamespaceJoin:y.boolean().optional()}).strict().superRefine((e,t)=>{if(e.binds)for(let n=0;n<e.binds.length;n+=1){let r=e.binds[n]?.trim()??``;if(!r){t.addIssue({code:y.ZodIssueCode.custom,path:[`binds`,n],message:`Sandbox security: bind mount entry must be a non-empty string.`});continue}let i=r.indexOf(`:`),a=(i<=0?r:r.slice(0,i)).trim();a.startsWith(`/`)||t.addIssue({code:y.ZodIssueCode.custom,path:[`binds`,n],message:`Sandbox security: bind mount "${r}" uses a non-absolute source path "${a}". Only absolute POSIX paths are supported for sandbox binds.`})}let n=om({network:e.network,allowContainerNamespaceJoin:e.dangerouslyAllowContainerNamespaceJoin===!0});n===`host`&&t.addIssue({code:y.ZodIssueCode.custom,path:[`network`],message:`Sandbox security: network mode "host" is blocked. Use "bridge" or "none" instead.`}),n===`container_namespace_join`&&t.addIssue({code:y.ZodIssueCode.custom,path:[`network`],message:`Sandbox security: network mode "container:*" is blocked by default. Use a custom bridge network, or set dangerouslyAllowContainerNamespaceJoin=true only when you fully trust this runtime.`}),e.seccompProfile?.trim().toLowerCase()===`unconfined`&&t.addIssue({code:y.ZodIssueCode.custom,path:[`seccompProfile`],message:`Sandbox security: seccomp profile "unconfined" is blocked. Use a custom seccomp profile file or omit this setting.`}),e.apparmorProfile?.trim().toLowerCase()===`unconfined`&&t.addIssue({code:y.ZodIssueCode.custom,path:[`apparmorProfile`],message:`Sandbox security: apparmor profile "unconfined" is blocked. Use a named AppArmor profile or omit this setting.`})}).optional(),Sh=y.object({enabled:y.boolean().optional(),image:y.string().optional(),containerPrefix:y.string().optional(),network:y.string().optional(),cdpPort:y.number().int().positive().optional(),cdpSourceRange:y.string().optional(),vncPort:y.number().int().positive().optional(),noVncPort:y.number().int().positive().optional(),headless:y.boolean().optional(),enableNoVnc:y.boolean().optional(),allowHostControl:y.boolean().optional(),autoStart:y.boolean().optional(),autoStartTimeoutMs:y.number().int().positive().optional(),binds:y.array(y.string()).optional()}).superRefine((e,t)=>{e.network?.trim().toLowerCase()===`host`&&t.addIssue({code:y.ZodIssueCode.custom,path:[`network`],message:`Sandbox security: browser network mode "host" is blocked. Use "bridge" or a custom bridge network instead.`})}).strict().optional(),Ch=y.object({idleHours:y.number().int().nonnegative().optional(),maxAgeDays:y.number().int().nonnegative().optional()}).strict().optional(),X=y.object({allow:y.array(y.string()).optional(),alsoAllow:y.array(y.string()).optional(),deny:y.array(y.string()).optional()}).strict().superRefine((e,t)=>{e.allow&&e.allow.length>0&&e.alsoAllow&&e.alsoAllow.length>0&&t.addIssue({code:y.ZodIssueCode.custom,message:`tools policy cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)`})}).optional(),wh=y.object({enabled:y.boolean().optional(),provider:y.string().optional(),apiKey:H.optional().register(V),maxResults:y.number().int().positive().optional(),timeoutSeconds:y.number().int().positive().optional(),cacheTtlMinutes:y.number().nonnegative().optional(),duckduckgo:y.object({region:y.string().optional(),safeSearch:y.union([y.literal(`strict`),y.literal(`moderate`),y.literal(`off`)]).optional()}).strict().optional(),exa:y.object({apiKey:H.optional().register(V),baseUrl:y.string().optional(),type:y.union([y.literal(`auto`),y.literal(`neural`),y.literal(`fast`),y.literal(`deep`),y.literal(`deep-reasoning`),y.literal(`instant`)]).optional()}).strict().optional(),firecrawl:y.object({apiKey:H.optional().register(V),baseUrl:y.string().optional()}).strict().optional(),perplexity:y.object({apiKey:H.optional().register(V),baseUrl:y.string().optional(),model:y.string().optional()}).strict().optional(),grok:y.object({apiKey:H.optional().register(V),model:y.string().optional(),inlineCitations:y.boolean().optional()}).strict().optional(),gemini:y.object({apiKey:H.optional().register(V),model:y.string().optional()}).strict().optional(),kimi:y.object({apiKey:H.optional().register(V),baseUrl:y.string().optional(),model:y.string().optional()}).strict().optional(),searxng:y.object({baseUrl:y.string().optional(),categories:y.string().optional(),language:y.string().optional()}).strict().optional(),tavily:y.object({apiKey:H.optional().register(V),baseUrl:y.string().optional(),includeAnswer:y.boolean().optional(),searchDepth:y.union([y.literal(`basic`),y.literal(`advanced`)]).optional(),topic:y.string().optional()}).strict().optional()}).strict().optional(),Th=y.object({enabled:y.boolean().optional(),maxChars:y.number().int().positive().optional(),maxCharsCap:y.number().int().positive().optional(),timeoutSeconds:y.number().int().positive().optional(),cacheTtlMinutes:y.number().nonnegative().optional(),maxRedirects:y.number().int().nonnegative().optional(),userAgent:y.string().optional(),readability:y.boolean().optional(),firecrawl:y.object({enabled:y.boolean().optional(),apiKey:H.optional().register(V),baseUrl:y.string().optional(),onlyMainContent:y.boolean().optional(),maxAgeMs:y.number().int().nonnegative().optional(),timeoutSeconds:y.number().int().positive().optional()}).strict().optional()}).strict().optional(),Eh=y.object({search:wh,fetch:Th}).strict().optional(),Dh=y.union([y.literal(`minimal`),y.literal(`coding`),y.literal(`messaging`),y.literal(`full`)]).optional();function Oh(e,t,n){e.allow&&e.allow.length>0&&e.alsoAllow&&e.alsoAllow.length>0&&t.addIssue({code:y.ZodIssueCode.custom,message:n})}const kh=y.object({allow:y.array(y.string()).optional(),alsoAllow:y.array(y.string()).optional(),deny:y.array(y.string()).optional(),profile:Dh}).strict().superRefine((e,t)=>{Oh(e,t,`tools.byProvider policy cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)`)}),Ah=y.record(y.string(),y.array(y.union([y.string(),y.number()]))).optional(),jh=y.object({enabled:y.boolean().optional(),workspaceOnly:y.boolean().optional(),allowModels:y.array(y.string()).optional()}).strict().optional(),Mh=y.object({minPositional:y.number().int().nonnegative().optional(),maxPositional:y.number().int().nonnegative().optional(),allowedValueFlags:y.array(y.string()).optional(),deniedFlags:y.array(y.string()).optional()}).strict(),Nh={host:y.enum([`auto`,`sandbox`,`gateway`,`node`]).optional(),security:y.enum([`deny`,`allowlist`,`full`]).optional(),ask:y.enum([`off`,`on-miss`,`always`]).optional(),node:y.string().optional(),pathPrepend:y.array(y.string()).optional(),safeBins:y.array(y.string()).optional(),safeBinTrustedDirs:y.array(y.string()).optional(),safeBinProfiles:y.record(y.string(),Mh).optional(),backgroundMs:y.number().int().positive().optional(),timeoutSec:y.number().int().positive().optional(),cleanupMs:y.number().int().positive().optional(),notifyOnExit:y.boolean().optional(),notifyOnExitEmptySuccess:y.boolean().optional(),applyPatch:jh},Ph=y.object({...Nh,approvalRunningNoticeMs:y.number().int().nonnegative().optional()}).strict().optional(),Fh=y.object(Nh).strict().optional(),Ih=y.object({workspaceOnly:y.boolean().optional()}).strict().optional(),Lh=y.object({genericRepeat:y.boolean().optional(),knownPollNoProgress:y.boolean().optional(),pingPong:y.boolean().optional()}).strict().optional(),Rh=y.object({enabled:y.boolean().optional(),historySize:y.number().int().positive().optional(),warningThreshold:y.number().int().positive().optional(),criticalThreshold:y.number().int().positive().optional(),globalCircuitBreakerThreshold:y.number().int().positive().optional(),detectors:Lh}).strict().superRefine((e,t)=>{e.warningThreshold!==void 0&&e.criticalThreshold!==void 0&&e.warningThreshold>=e.criticalThreshold&&t.addIssue({code:y.ZodIssueCode.custom,path:[`criticalThreshold`],message:`tools.loopDetection.warningThreshold must be lower than criticalThreshold.`}),e.criticalThreshold!==void 0&&e.globalCircuitBreakerThreshold!==void 0&&e.criticalThreshold>=e.globalCircuitBreakerThreshold&&t.addIssue({code:y.ZodIssueCode.custom,path:[`globalCircuitBreakerThreshold`],message:`tools.loopDetection.criticalThreshold must be lower than globalCircuitBreakerThreshold.`})}).optional(),zh=y.object({mode:y.union([y.literal(`off`),y.literal(`non-main`),y.literal(`all`)]).optional(),backend:y.string().optional(),workspaceAccess:y.union([y.literal(`none`),y.literal(`ro`),y.literal(`rw`)]).optional(),sessionToolsVisibility:y.union([y.literal(`spawned`),y.literal(`all`)]).optional(),scope:y.union([y.literal(`session`),y.literal(`agent`),y.literal(`shared`)]).optional(),perSession:y.boolean().optional(),workspaceRoot:y.string().optional(),docker:xh,browser:Sh,prune:Ch}).strict().superRefine((e,t)=>{om({network:e.browser?.network,allowContainerNamespaceJoin:e.docker?.dangerouslyAllowContainerNamespaceJoin===!0})===`container_namespace_join`&&t.addIssue({code:y.ZodIssueCode.custom,path:[`browser`,`network`],message:`Sandbox security: browser network mode "container:*" is blocked by default. Set sandbox.docker.dangerouslyAllowContainerNamespaceJoin=true only when you fully trust this runtime.`})}).optional(),Bh={profile:Dh,allow:y.array(y.string()).optional(),alsoAllow:y.array(y.string()).optional(),deny:y.array(y.string()).optional(),byProvider:y.record(y.string(),kh).optional()},Vh=y.object({...Bh,elevated:y.object({enabled:y.boolean().optional(),allowFrom:Ah}).strict().optional(),exec:Ph,fs:Ih,loopDetection:Rh,sandbox:y.object({tools:X}).strict().optional()}).strict().superRefine((e,t)=>{Oh(e,t,`agent tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)`)}).optional(),Hh=y.object({enabled:y.boolean().optional(),sources:y.array(y.union([y.literal(`memory`),y.literal(`sessions`)])).optional(),extraPaths:y.array(y.string()).optional(),experimental:y.object({sessionMemory:y.boolean().optional()}).strict().optional(),provider:y.union([y.literal(`openai`),y.literal(`local`),y.literal(`gemini`),y.literal(`voyage`),y.literal(`mistral`)]).optional(),remote:y.object({baseUrl:y.string().optional(),apiKey:y.string().optional().register(V),headers:y.record(y.string(),y.string()).optional(),allowSessionContent:y.boolean().optional(),batch:y.object({enabled:y.boolean().optional(),wait:y.boolean().optional(),concurrency:y.number().int().positive().optional(),pollIntervalMs:y.number().int().nonnegative().optional(),timeoutMinutes:y.number().int().positive().optional()}).strict().optional()}).strict().optional(),fallback:y.union([y.literal(`openai`),y.literal(`gemini`),y.literal(`local`),y.literal(`voyage`),y.literal(`mistral`),y.literal(`none`)]).optional(),model:y.string().optional(),local:y.object({modelPath:y.string().optional(),modelCacheDir:y.string().optional()}).strict().optional(),store:y.object({driver:y.literal(`sqlite`).optional(),path:y.string().optional(),vector:y.object({enabled:y.boolean().optional(),extensionPath:y.string().optional()}).strict().optional()}).strict().optional(),chunking:y.object({tokens:y.number().int().positive().optional(),overlap:y.number().int().nonnegative().optional()}).strict().optional(),sync:y.object({onSessionStart:y.boolean().optional(),onSearch:y.boolean().optional(),watch:y.boolean().optional(),watchDebounceMs:y.number().int().nonnegative().optional(),intervalMinutes:y.number().int().nonnegative().optional(),sessions:y.object({deltaBytes:y.number().int().nonnegative().optional(),deltaMessages:y.number().int().nonnegative().optional()}).strict().optional()}).strict().optional(),query:y.object({maxResults:y.number().int().positive().optional(),minScore:y.number().min(0).max(1).optional(),hybrid:y.object({enabled:y.boolean().optional(),vectorWeight:y.number().min(0).max(1).optional(),textWeight:y.number().min(0).max(1).optional(),candidateMultiplier:y.number().int().positive().optional(),mmr:y.object({enabled:y.boolean().optional(),lambda:y.number().min(0).max(1).optional()}).strict().optional(),temporalDecay:y.object({enabled:y.boolean().optional(),halfLifeDays:y.number().int().positive().optional()}).strict().optional()}).strict().optional()}).strict().optional(),cache:y.object({enabled:y.boolean().optional(),maxEntries:y.number().int().positive().optional()}).strict().optional()}).strict().optional(),Uh=y.object({id:y.string(),default:y.boolean().optional(),name:y.string().optional(),workspace:y.string().optional(),agentDir:y.string().optional(),activeModelProvider:y.string().optional(),modelProviders:y.record(y.string(),lm).optional(),model:sm.optional(),taskModels:cm.optional(),thinkingDefault:y.union([y.literal(`off`),y.literal(`minimal`),y.literal(`low`),y.literal(`medium`),y.literal(`high`),y.literal(`xhigh`),y.literal(`max`),y.literal(`ultra`)]).optional(),reasoningDefault:y.union([y.literal(`off`),y.literal(`minimal`),y.literal(`low`),y.literal(`medium`),y.literal(`high`),y.literal(`xhigh`),y.literal(`max`),y.literal(`ultra`)]).optional(),fastModeDefault:y.boolean().optional(),skills:y.array(y.string()).optional(),memorySearch:Hh,humanDelay:qm.optional(),heartbeat:bh,identity:Im,groupChat:Fm,subagents:y.object({allowAgents:y.array(y.string()).optional(),requireAgentId:y.boolean().optional(),model:y.union([y.string(),y.object({primary:y.string().optional(),fallbacks:y.array(y.string()).max(1).optional()}).strict()]).optional(),thinking:y.string().optional()}).strict().optional(),sandbox:zh,tools:Vh,strictAgentic:y.object({mode:y.union([y.literal(`off`),y.literal(`warn`)]).optional()}).strict().optional()}).strict(),Wh=y.object({...Bh,web:Eh,media:hh,links:_h,sessions:y.object({visibility:y.enum([`self`,`tree`,`agent`,`all`]).optional()}).strict().optional(),loopDetection:Rh,message:y.object({allowCrossContextSend:y.boolean().optional(),crossContext:y.object({allowWithinProvider:y.boolean().optional(),allowAcrossProviders:y.boolean().optional(),marker:y.object({enabled:y.boolean().optional(),prefix:y.string().optional(),suffix:y.string().optional()}).strict().optional()}).strict().optional(),broadcast:y.object({enabled:y.boolean().optional()}).strict().optional()}).strict().optional(),agentToAgent:y.object({enabled:y.boolean().optional(),allow:y.array(y.string()).optional()}).strict().optional(),elevated:y.object({enabled:y.boolean().optional(),allowFrom:Ah}).strict().optional(),exec:Fh,fs:Ih,subagents:y.object({tools:X}).strict().optional(),sandbox:y.object({tools:X}).strict().optional()}).strict().superRefine((e,t)=>{Oh(e,t,`tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)`)}).optional(),Gh=y.object({model:sm.optional(),taskModels:cm.optional(),imageModel:sm.optional(),models:y.record(y.string(),y.object({alias:y.string().optional(),params:y.record(y.string(),y.unknown()).optional(),streaming:y.boolean().optional()}).strict()).optional(),workspace:y.string().optional(),repoRoot:y.string().optional(),skipBootstrap:y.boolean().optional(),bootstrapMaxChars:y.number().int().positive().optional(),bootstrapTotalMaxChars:y.number().int().positive().optional(),bootstrapPromptTruncationWarning:y.union([y.literal(`off`),y.literal(`once`),y.literal(`always`)]).optional(),userTimezone:y.string().optional(),timeFormat:y.union([y.literal(`auto`),y.literal(`12`),y.literal(`24`)]).optional(),envelopeTimezone:y.string().optional(),envelopeTimestamp:y.union([y.literal(`on`),y.literal(`off`)]).optional(),envelopeElapsed:y.union([y.literal(`on`),y.literal(`off`)]).optional(),contextTokens:y.number().int().positive().optional(),cliBackends:y.record(y.string(),Ym).optional(),memorySearch:Hh,contextPruning:y.object({mode:y.union([y.literal(`off`),y.literal(`cache-ttl`)]).optional(),ttl:y.string().optional(),keepLastAssistants:y.number().int().nonnegative().optional(),softTrimRatio:y.number().min(0).max(1).optional(),hardClearRatio:y.number().min(0).max(1).optional(),minPrunableToolChars:y.number().int().nonnegative().optional(),tools:y.object({allow:y.array(y.string()).optional(),deny:y.array(y.string()).optional()}).strict().optional(),softTrim:y.object({maxChars:y.number().int().nonnegative().optional(),headChars:y.number().int().nonnegative().optional(),tailChars:y.number().int().nonnegative().optional()}).strict().optional(),hardClear:y.object({enabled:y.boolean().optional(),placeholder:y.string().optional()}).strict().optional()}).strict().optional(),compaction:y.object({mode:y.union([y.literal(`default`),y.literal(`safeguard`)]).optional(),reserveTokens:y.number().int().nonnegative().optional(),keepRecentTokens:y.number().int().positive().optional(),timeoutSeconds:y.number().positive().optional(),reserveTokensFloor:y.number().int().nonnegative().optional(),maxHistoryShare:y.number().min(.1).max(.9).optional(),identifierPolicy:y.union([y.literal(`strict`),y.literal(`off`),y.literal(`custom`)]).optional(),identifierInstructions:y.string().optional(),memoryFlush:y.object({enabled:y.boolean().optional(),softThresholdTokens:y.number().int().nonnegative().optional(),prompt:y.string().optional(),systemPrompt:y.string().optional()}).strict().optional()}).strict().optional(),embeddedPi:y.object({projectSettingsPolicy:y.union([y.literal(`trusted`),y.literal(`sanitize`),y.literal(`ignore`)]).optional()}).strict().optional(),strictAgentic:y.object({mode:y.union([y.literal(`off`),y.literal(`warn`)]).optional()}).strict().optional(),skills:y.array(y.string()).optional(),thinkingDefault:y.union([y.literal(`off`),y.literal(`minimal`),y.literal(`low`),y.literal(`medium`),y.literal(`high`),y.literal(`xhigh`),y.literal(`max`),y.literal(`ultra`)]).optional(),reasoningDefault:y.union([y.literal(`off`),y.literal(`minimal`),y.literal(`low`),y.literal(`medium`),y.literal(`high`),y.literal(`xhigh`),y.literal(`max`),y.literal(`ultra`)]).optional(),fastModeDefault:y.boolean().optional(),verboseDefault:y.union([y.literal(`off`),y.literal(`on`),y.literal(`full`)]).optional(),elevatedDefault:y.union([y.literal(`off`),y.literal(`on`),y.literal(`ask`),y.literal(`full`)]).optional(),blockStreamingDefault:y.union([y.literal(`off`),y.literal(`on`)]).optional(),blockStreamingBreak:y.union([y.literal(`text_end`),y.literal(`message_end`)]).optional(),blockStreamingChunk:Bm.optional(),blockStreamingCoalesce:q.optional(),humanDelay:qm.optional(),timeoutSeconds:y.number().int().positive().optional(),mediaMaxMb:y.number().positive().optional(),imageMaxDimensionPx:y.number().int().positive().optional(),typingIntervalSeconds:y.number().int().positive().optional(),typingMode:zm.optional(),heartbeat:bh,maxConcurrent:y.number().int().positive().optional(),subagents:y.object({maxConcurrent:y.number().int().positive().optional(),maxSpawnDepth:y.number().int().min(1).max(5).optional().describe(`Maximum nesting depth for sub-agent spawning. 1 = no nesting (default), 2 = sub-agents can spawn sub-sub-agents.`),maxChildrenPerAgent:y.number().int().min(1).max(20).optional().describe(`Maximum number of active children a single agent session can spawn (default: 5).`),archiveAfterMinutes:y.number().int().positive().optional(),model:sm.optional(),thinking:y.string().optional(),runTimeoutSeconds:y.number().int().min(0).optional(),announceTimeoutMs:y.number().int().positive().optional(),allowAgents:y.array(y.string()).optional(),requireAgentId:y.boolean().optional()}).strict().optional(),sandbox:zh}).strict().optional(),Kh=y.object({defaults:y.lazy(()=>Gh).optional(),list:y.array(Uh).optional()}).strict().optional(),qh=y.array(y.object({agentId:y.string(),comment:y.string().optional(),match:y.object({channel:y.string(),accountId:y.string().optional(),peer:y.object({kind:y.union([y.literal(`direct`),y.literal(`group`),y.literal(`channel`),y.literal(`dm`)]),id:y.string()}).strict().optional(),guildId:y.string().optional(),teamId:y.string().optional(),roles:y.array(y.string()).optional()}).strict()}).strict()).optional(),Jh=y.enum([`parallel`,`sequential`]),Yh=y.object({strategy:Jh.optional()}).catchall(y.array(y.string())).optional(),Xh=y.object({channel:y.string().min(1),to:y.string().min(1),accountId:y.string().optional(),threadId:y.union([y.string(),y.number()]).optional()}).strict(),Zh=y.object({enabled:y.boolean().optional(),mode:y.union([y.literal(`session`),y.literal(`targets`),y.literal(`both`)]).optional(),agentFilter:y.array(y.string()).optional(),sessionFilter:y.array(y.string()).optional(),targets:y.array(Xh).optional()}).strict().optional(),Qh=y.object({exec:Zh}).strict().optional();function $h(e){let t=e.trim();return!(!t||i.isAbsolute(t)||t.startsWith(`~`)||t.includes(`:`)||t.split(/[\\/]+/g).some(e=>e===`..`))}const eg=y.string().refine($h,`module must be a safe relative path (no absolute paths)`),tg=y.object({id:y.string().optional(),enabled:y.boolean().optional(),match:y.object({path:y.string().optional(),source:y.string().optional()}).optional(),action:y.union([y.literal(`wake`),y.literal(`agent`),y.literal(`workflow`)]).optional(),wakeMode:y.union([y.literal(`now`),y.literal(`next-heartbeat`)]).optional(),name:y.string().optional(),agentId:y.string().optional(),sessionKey:y.string().optional().register(V),messageTemplate:y.string().optional(),textTemplate:y.string().optional(),workflowDefinitionId:y.string().optional(),deliver:y.boolean().optional(),allowUnsafeExternalContent:y.boolean().optional(),channel:y.union([y.literal(`last`),y.literal(`whatsapp`),y.literal(`telegram`),y.literal(`discord`),y.literal(`irc`),y.literal(`slack`),y.literal(`signal`),y.literal(`imessage`),y.literal(`msteams`)]).optional(),to:y.string().optional(),model:y.string().optional(),thinking:y.string().optional(),timeoutSeconds:y.number().int().positive().optional(),notifyPolicy:y.union([y.literal(`silent`),y.literal(`done_only`),y.literal(`state_changes`)]).optional(),transform:y.object({module:eg,export:y.string().optional()}).strict().optional()}).strict().optional(),ng=y.object({event:y.string(),module:eg,export:y.string().optional()}).strict(),rg=y.object({enabled:y.boolean().optional(),env:y.record(y.string(),y.string()).optional()}).passthrough(),ig=y.object({source:y.union([y.literal(`npm`),y.literal(`archive`),y.literal(`path`)]),spec:y.string().optional(),sourcePath:y.string().optional(),installPath:y.string().optional(),version:y.string().optional(),installedAt:y.string().optional(),hooks:y.array(y.string()).optional()}).strict(),ag=y.object({enabled:y.boolean().optional(),handlers:y.array(ng).optional(),entries:y.record(y.string(),rg).optional(),load:y.object({extraDirs:y.array(y.string()).optional()}).strict().optional(),installs:y.record(y.string(),ig).optional()}).strict().optional(),og=y.object({account:y.string().optional(),project:y.string().optional(),label:y.string().optional(),topic:y.string().optional(),subscription:y.string().optional(),pushToken:y.string().optional().register(V),hookUrl:y.string().optional(),includeBody:y.boolean().optional(),maxBytes:y.number().int().positive().optional(),renewEveryMinutes:y.number().int().positive().optional(),allowUnsafeExternalContent:y.boolean().optional(),serve:y.object({bind:y.string().optional(),port:y.number().int().positive().optional(),path:y.string().optional()}).strict().optional(),tailscale:y.object({mode:y.union([y.literal(`off`),y.literal(`serve`),y.literal(`funnel`)]).optional(),path:y.string().optional(),target:y.string().optional()}).strict().optional(),model:y.string().optional(),thinking:y.union([y.literal(`off`),y.literal(`minimal`),y.literal(`low`),y.literal(`medium`),y.literal(`high`)]).optional()}).strict().optional(),sg={source:y.union([y.literal(`npm`),y.literal(`archive`),y.literal(`path`),y.literal(`clawhub`)]),spec:y.string().optional(),sourcePath:y.string().optional(),installPath:y.string().optional(),version:y.string().optional(),resolvedName:y.string().optional(),resolvedVersion:y.string().optional(),resolvedSpec:y.string().optional(),integrity:y.string().optional(),shasum:y.string().optional(),resolvedAt:y.string().optional(),installedAt:y.string().optional(),clawhubUrl:y.string().optional(),clawhubArtifactUrl:y.string().optional(),clawhubPackage:y.string().optional(),clawhubFamily:y.union([y.literal(`code-plugin`),y.literal(`bundle-plugin`)]).optional(),clawhubChannel:y.union([y.literal(`official`),y.literal(`community`),y.literal(`private`)]).optional(),artifactKind:y.union([y.literal(`legacy-zip`),y.literal(`npm-pack`),y.literal(`clawpack`)]).optional(),artifactFormat:y.union([y.literal(`zip`),y.literal(`tgz`)]).optional(),npmIntegrity:y.string().optional(),npmShasum:y.string().optional(),npmTarballName:y.string().optional(),clawpackSha256:y.string().optional(),clawpackSpecVersion:y.number().int().nonnegative().optional(),clawpackManifestSha256:y.string().optional(),clawpackSize:y.number().int().nonnegative().optional(),securityState:y.string().optional(),scanState:y.string().optional(),moderationState:y.string().optional(),readinessPhase:y.string().optional(),verificationTier:y.string().optional(),verificationSourceRepo:y.string().optional(),verificationSourceCommit:y.string().optional(),verificationHasProvenance:y.boolean().optional()},Z=y.object({showOk:y.boolean().optional(),showAlerts:y.boolean().optional(),useIndicator:y.boolean().optional()}).strict().optional(),cg=/^[A-Za-z0-9._-]+$/,lg=/^\[[0-9A-Fa-f:.%]+\]$/,ug=/\s/;function dg(e){for(let t of e){let e=t.charCodeAt(0);if(e<=31||e===127||ug.test(t))return!0}return!1}function fg(e){if(typeof e!=`string`)return;let t=e.trim();if(!t||dg(t)||t.startsWith(`-`)||t.includes(`/`)||t.includes(`\\`))return;let n=t.indexOf(`@`),r=t.lastIndexOf(`@`),i,a=t;if(!(n!==-1&&(n!==r||n===0||n===t.length-1||(i=t.slice(0,n),a=t.slice(n+1),!cg.test(i))))&&!(!a||a.startsWith(`-`)||a.includes(`@`))&&!(a.includes(`:`)&&!lg.test(a))&&!(!cg.test(a)&&!lg.test(a)))return i?`${i}@${a}`:a}function pg(e){return fg(e)!==void 0}const mg=/^[A-Za-z]:\//,hg=/^[A-Za-z]:$/;function gg(e){let t=e.trim();if(!t||t.includes(`\0`))return;let n=i.posix.normalize(t.replaceAll(`\\`,`/`));if(!(n.startsWith(`/`)||mg.test(n))||n===`/`)return;let r=n.endsWith(`/`)?n.slice(0,-1):n;if(!hg.test(r))return r}function _g(e){return e.split(`/`).filter(Boolean)}function vg(e){let t=gg(e);if(!t)return!1;let n=_g(t);return n.length===0?!1:n.every(e=>e===`*`||!e.includes(`*`))}const yg=/^[a-z0-9_]{1,32}$/;function bg(e){let t=e.trim();return t?(t.startsWith(`/`)?t.slice(1):t).trim().toLowerCase().replace(/-/g,`_`):``}function xg(e){return e.trim()}function Sg(e){let t=Array.isArray(e.commands)?e.commands:[],n=e.reservedCommands??new Set,r=e.checkReserved!==!1,i=e.checkDuplicates!==!1,a=new Set,o=[],s=[];for(let e=0;e<t.length;e+=1){let c=t[e],l=bg(String(c?.command??``));if(!l){s.push({index:e,field:`command`,message:`Telegram custom command is missing a command name.`});continue}if(!yg.test(l)){s.push({index:e,field:`command`,message:`Telegram custom command "/${l}" is invalid (use a-z, 0-9, underscore; max 32 chars).`});continue}if(r&&n.has(l)){s.push({index:e,field:`command`,message:`Telegram custom command "/${l}" conflicts with a native command.`});continue}if(i&&a.has(l)){s.push({index:e,field:`command`,message:`Telegram custom command "/${l}" is duplicated.`});continue}let u=xg(String(c?.description??``));if(!u){s.push({index:e,field:`description`,message:`Telegram custom command "/${l}" is missing a description.`});continue}i&&a.add(l),o.push({command:l,description:u})}return{commands:o,issues:s}}const Q=y.record(y.string(),X).optional(),Cg=y.union([y.string(),y.number()]).refine(e=>typeof e==`string`,{message:`Discord IDs must be strings (wrap numeric IDs in quotes).`}),wg=y.array(Cg),Tg=y.enum([`off`,`dm`,`group`,`all`,`allowlist`]),Eg=y.union([y.array(y.string()),y.object({inlineButtons:Tg.optional()}).strict()]),Dg=y.object({requireMention:y.boolean().optional(),groupPolicy:G.optional(),skills:y.array(y.string()).optional(),enabled:y.boolean().optional(),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),systemPrompt:y.string().optional()}).strict(),Og=y.object({requireMention:y.boolean().optional(),groupPolicy:G.optional(),tools:X,toolsBySender:Q,skills:y.array(y.string()).optional(),enabled:y.boolean().optional(),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),systemPrompt:y.string().optional(),topics:y.record(y.string(),Dg.optional()).optional()}).strict(),kg=y.object({command:y.string().transform(bg),description:y.string().transform(xg)}).strict(),Ag=(e,t)=>{if(!e.customCommands||e.customCommands.length===0)return;let{issues:n}=Sg({commands:e.customCommands,checkReserved:!1,checkDuplicates:!1});for(let e of n)t.addIssue({code:y.ZodIssueCode.custom,path:[`customCommands`,e.index,e.field],message:e.message})};function jg(e){e.streaming=Mf(e),delete e.streamMode}function Mg(e){e.streaming=Nf(e),delete e.streamMode}function Ng(e){e.nativeStreaming=Ff(e),e.streaming=Pf(e),delete e.streamMode}const Pg=y.object({name:y.string().optional(),capabilities:Eg.optional(),markdown:Hm,enabled:y.boolean().optional(),commands:yh,customCommands:y.array(kg).optional(),configWrites:y.boolean().optional(),dmPolicy:K.optional().default(`pairing`),botToken:y.string().optional().register(V),tokenFile:y.string().optional(),replyToMode:Rm.optional(),groups:y.record(y.string(),Og.optional()).optional(),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),defaultTo:y.union([y.string(),y.number()]).optional(),groupAllowFrom:y.array(y.union([y.string(),y.number()])).optional(),groupPolicy:G.optional().default(`allowlist`),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),streaming:y.union([y.boolean(),y.enum([`off`,`partial`,`block`,`progress`])]).optional(),blockStreaming:y.boolean().optional(),draftChunk:Bm.optional(),blockStreamingCoalesce:q.optional(),streamMode:y.enum([`off`,`partial`,`block`]).optional(),mediaMaxMb:y.number().positive().optional(),timeoutSeconds:y.number().int().positive().optional(),retry:Qm,network:y.object({autoSelectFamily:y.boolean().optional(),dnsResultOrder:y.enum([`ipv4first`,`verbatim`]).optional()}).strict().optional(),proxy:y.string().optional(),webhookUrl:y.string().optional().describe(`Public HTTPS webhook URL registered with Telegram for inbound updates. This must be internet-reachable and requires channels.telegram.webhookSecret.`),webhookSecret:y.string().optional().describe(`Secret token sent to Telegram during webhook registration and verified on inbound webhook requests. Telegram returns this value for verification; this is not the gateway auth token and not the bot token.`).register(V),webhookPath:y.string().optional().describe(`Local webhook route path served by the gateway listener. Defaults to /telegram-webhook.`),webhookHost:y.string().optional().describe(`Local bind host for the webhook listener. Defaults to 127.0.0.1; keep loopback unless you intentionally expose direct ingress.`),webhookPort:y.number().int().nonnegative().optional().describe(`Local bind port for the webhook listener. Defaults to 8787; set to 0 to let the OS assign an ephemeral port.`),actions:y.object({reactions:y.boolean().optional(),sendMessage:y.boolean().optional(),deleteMessage:y.boolean().optional(),sticker:y.boolean().optional()}).strict().optional(),reactionNotifications:y.enum([`off`,`own`,`all`]).optional(),reactionLevel:y.enum([`off`,`ack`,`minimal`,`extensive`]).optional(),heartbeat:Z,linkPreview:y.boolean().optional(),responsePrefix:y.string().optional(),ackReaction:y.string().optional()}).strict(),Fg=Pg.superRefine((e,t)=>{jg(e),Ag(e,t)}),Ig=Pg.extend({accounts:y.record(y.string(),Fg.optional()).optional()}).superRefine((e,t)=>{if(jg(e),J({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.telegram.dmPolicy="open" requires channels.telegram.allowFrom to include "*"`}),Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.telegram.dmPolicy="allowlist" requires channels.telegram.allowFrom to contain at least one sender ID`}),Ag(e,t),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;J({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.telegram.accounts.*.dmPolicy="open" requires channels.telegram.accounts.*.allowFrom (or channels.telegram.allowFrom) to include "*"`}),Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.telegram.accounts.*.dmPolicy="allowlist" requires channels.telegram.accounts.*.allowFrom (or channels.telegram.allowFrom) to contain at least one sender ID`})}let n=typeof e.webhookUrl==`string`?e.webhookUrl.trim():``,r=typeof e.webhookSecret==`string`?e.webhookSecret.trim():``;if(n&&!r&&t.addIssue({code:y.ZodIssueCode.custom,message:`channels.telegram.webhookUrl requires channels.telegram.webhookSecret`,path:[`webhookSecret`]}),e.accounts)for(let[n,i]of Object.entries(e.accounts)){if(!i||i.enabled===!1)continue;let a=i.dmPolicy??e.dmPolicy,o=Array.isArray(i.allowFrom)?i.allowFrom:e.allowFrom;J({policy:a,allowFrom:o,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.telegram.accounts.*.dmPolicy="open" requires channels.telegram.allowFrom or channels.telegram.accounts.*.allowFrom to include "*"`}),Y({policy:a,allowFrom:o,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.telegram.accounts.*.dmPolicy="allowlist" requires channels.telegram.allowFrom or channels.telegram.accounts.*.allowFrom to contain at least one sender ID`}),typeof i.webhookUrl==`string`&&i.webhookUrl.trim()&&!(typeof i.webhookSecret==`string`&&i.webhookSecret.trim())&&!r&&t.addIssue({code:y.ZodIssueCode.custom,message:`channels.telegram.accounts.*.webhookUrl requires channels.telegram.webhookSecret or channels.telegram.accounts.*.webhookSecret`,path:[`accounts`,n,`webhookSecret`]})}}),Lg=y.object({enabled:y.boolean().optional(),policy:K.optional(),allowFrom:wg.optional(),groupEnabled:y.boolean().optional(),groupChannels:wg.optional()}).strict(),Rg=y.object({allow:y.boolean().optional(),requireMention:y.boolean().optional(),tools:X,toolsBySender:Q,skills:y.array(y.string()).optional(),enabled:y.boolean().optional(),users:wg.optional(),roles:wg.optional(),systemPrompt:y.string().optional(),includeThreadStarter:y.boolean().optional(),autoThread:y.boolean().optional()}).strict(),zg=y.object({slug:y.string().optional(),requireMention:y.boolean().optional(),tools:X,toolsBySender:Q,reactionNotifications:y.enum([`off`,`own`,`all`,`allowlist`]).optional(),users:wg.optional(),roles:wg.optional(),channels:y.record(y.string(),Rg.optional()).optional()}).strict(),Bg=y.object({components:y.object({accentColor:ih.optional()}).strict().optional()}).strict().optional(),Vg=y.object({guildId:y.string().min(1),channelId:y.string().min(1)}).strict(),Hg=y.object({enabled:y.boolean().optional(),autoJoin:y.array(Vg).optional(),daveEncryption:y.boolean().optional(),decryptionFailureTolerance:y.number().int().min(0).optional(),tts:Km.optional()}).strict().optional(),Ug=y.object({name:y.string().optional(),capabilities:y.array(y.string()).optional(),markdown:Hm,enabled:y.boolean().optional(),commands:yh,configWrites:y.boolean().optional(),token:y.string().optional().register(V),proxy:y.string().optional(),allowBots:y.boolean().optional(),dangerouslyAllowNameMatching:y.boolean().optional(),groupPolicy:G.optional().default(`allowlist`),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),blockStreaming:y.boolean().optional(),blockStreamingCoalesce:q.optional(),streaming:y.union([y.boolean(),y.enum([`off`,`partial`,`block`,`progress`])]).optional(),streamMode:y.enum([`partial`,`block`,`off`]).optional(),draftChunk:Bm.optional(),maxLinesPerMessage:y.number().int().positive().optional(),mediaMaxMb:y.number().positive().optional(),retry:Qm,actions:y.object({reactions:y.boolean().optional(),stickers:y.boolean().optional(),emojiUploads:y.boolean().optional(),stickerUploads:y.boolean().optional(),polls:y.boolean().optional(),permissions:y.boolean().optional(),messages:y.boolean().optional(),threads:y.boolean().optional(),pins:y.boolean().optional(),search:y.boolean().optional(),memberInfo:y.boolean().optional(),roleInfo:y.boolean().optional(),roles:y.boolean().optional(),channelInfo:y.boolean().optional(),voiceStatus:y.boolean().optional(),events:y.boolean().optional(),moderation:y.boolean().optional(),channels:y.boolean().optional(),presence:y.boolean().optional()}).strict().optional(),replyToMode:Rm.optional(),dmPolicy:K.optional(),allowFrom:wg.optional(),defaultTo:y.string().optional(),dm:Lg.optional(),guilds:y.record(y.string(),zg.optional()).optional(),heartbeat:Z,execApprovals:y.object({enabled:y.boolean().optional(),approvers:wg.optional(),agentFilter:y.array(y.string()).optional(),sessionFilter:y.array(y.string()).optional(),cleanupAfterResolve:y.boolean().optional(),target:y.enum([`dm`,`channel`,`both`]).optional()}).strict().optional(),ui:Bg,slashCommand:y.object({ephemeral:y.boolean().optional()}).strict().optional(),threadBindings:y.object({enabled:y.boolean().optional(),idleHours:y.number().nonnegative().optional(),maxAgeHours:y.number().nonnegative().optional(),spawnSubagentSessions:y.boolean().optional(),spawnAcpSessions:y.boolean().optional()}).strict().optional(),intents:y.object({presence:y.boolean().optional(),guildMembers:y.boolean().optional()}).strict().optional(),voice:Hg,pluralkit:y.object({enabled:y.boolean().optional(),token:y.string().optional().register(V)}).strict().optional(),responsePrefix:y.string().optional(),ackReaction:y.string().optional(),activity:y.string().optional(),status:y.enum([`online`,`dnd`,`idle`,`invisible`]).optional(),activityType:y.union([y.literal(0),y.literal(1),y.literal(2),y.literal(3),y.literal(4),y.literal(5)]).optional(),activityUrl:y.string().url().optional()}).strict().superRefine((e,t)=>{Mg(e);let n=!!(typeof e.activity==`string`&&e.activity.trim()),r=e.activityType!==void 0,i=!!(typeof e.activityUrl==`string`&&e.activityUrl.trim());(r||i)&&!n&&t.addIssue({code:y.ZodIssueCode.custom,message:`channels.discord.activity is required when activityType or activityUrl is set`,path:[`activity`]}),e.activityType===1&&!i&&t.addIssue({code:y.ZodIssueCode.custom,message:`channels.discord.activityUrl is required when activityType is 1 (Streaming)`,path:[`activityUrl`]}),i&&e.activityType!==1&&t.addIssue({code:y.ZodIssueCode.custom,message:`channels.discord.activityType must be 1 (Streaming) when activityUrl is set`,path:[`activityType`]})}),Wg=Ug.extend({accounts:y.record(y.string(),Ug.optional()).optional()}).superRefine((e,t)=>{let n=e.dmPolicy??e.dm?.policy??`pairing`,r=e.allowFrom??e.dm?.allowFrom,i=e.allowFrom===void 0?[`dm`,`allowFrom`]:[`allowFrom`];if(J({policy:n,allowFrom:r,ctx:t,path:[...i],message:`channels.discord.dmPolicy="open" requires channels.discord.allowFrom (or channels.discord.dm.allowFrom) to include "*"`}),Y({policy:n,allowFrom:r,ctx:t,path:[...i],message:`channels.discord.dmPolicy="allowlist" requires channels.discord.allowFrom (or channels.discord.dm.allowFrom) to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??r.dm?.policy??e.dmPolicy??e.dm?.policy??`pairing`,a=r.allowFrom??r.dm?.allowFrom??e.allowFrom??e.dm?.allowFrom;J({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.discord.accounts.*.dmPolicy="open" requires channels.discord.accounts.*.allowFrom (or channels.discord.allowFrom) to include "*"`}),Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.discord.accounts.*.dmPolicy="allowlist" requires channels.discord.accounts.*.allowFrom (or channels.discord.allowFrom) to contain at least one sender ID`})}}),Gg=y.object({enabled:y.boolean().optional(),policy:K.optional().default(`pairing`),allowFrom:y.array(y.union([y.string(),y.number()])).optional()}).strict().superRefine((e,t)=>{J({policy:e.policy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.googlechat.dm.policy="open" requires channels.googlechat.dm.allowFrom to include "*"`}),Y({policy:e.policy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.googlechat.dm.policy="allowlist" requires channels.googlechat.dm.allowFrom to contain at least one sender ID`})}),Kg=y.object({enabled:y.boolean().optional(),allow:y.boolean().optional(),requireMention:y.boolean().optional(),users:y.array(y.union([y.string(),y.number()])).optional(),systemPrompt:y.string().optional()}).strict(),qg=y.object({name:y.string().optional(),capabilities:y.array(y.string()).optional(),enabled:y.boolean().optional(),configWrites:y.boolean().optional(),allowBots:y.boolean().optional(),dangerouslyAllowNameMatching:y.boolean().optional(),requireMention:y.boolean().optional(),groupPolicy:G.optional().default(`allowlist`),groupAllowFrom:y.array(y.union([y.string(),y.number()])).optional(),groups:y.record(y.string(),Kg.optional()).optional(),defaultTo:y.string().optional(),serviceAccount:y.union([y.string(),y.record(y.string(),y.unknown()),Cm]).optional().register(V),serviceAccountRef:Cm.optional().register(V),serviceAccountFile:y.string().optional(),audienceType:y.enum([`app-url`,`project-number`]).optional(),audience:y.string().optional(),webhookPath:y.string().optional(),webhookUrl:y.string().optional(),botUser:y.string().optional(),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),blockStreaming:y.boolean().optional(),blockStreamingCoalesce:q.optional(),streamMode:y.enum([`replace`,`status_final`,`append`]).optional().default(`replace`),mediaMaxMb:y.number().positive().optional(),replyToMode:Rm.optional(),actions:y.object({reactions:y.boolean().optional()}).strict().optional(),dm:Gg.optional(),typingIndicator:y.enum([`none`,`message`,`reaction`]).optional(),responsePrefix:y.string().optional()}).strict(),Jg=qg.extend({accounts:y.record(y.string(),qg.optional()).optional(),defaultAccount:y.string().optional()}),Yg=y.object({enabled:y.boolean().optional(),policy:K.optional(),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),groupEnabled:y.boolean().optional(),groupChannels:y.array(y.union([y.string(),y.number()])).optional(),replyToMode:Rm.optional()}).strict(),Xg=y.object({enabled:y.boolean().optional(),allow:y.boolean().optional(),requireMention:y.boolean().optional(),tools:X,toolsBySender:Q,allowBots:y.boolean().optional(),users:y.array(y.union([y.string(),y.number()])).optional(),skills:y.array(y.string()).optional(),systemPrompt:y.string().optional()}).strict(),Zg=y.object({historyScope:y.enum([`thread`,`channel`]).optional(),inheritParent:y.boolean().optional(),initialHistoryLimit:y.number().int().min(0).optional()}).strict(),Qg=y.object({direct:Rm.optional(),group:Rm.optional(),channel:Rm.optional()}).strict(),$g=y.object({name:y.string().optional(),mode:y.enum([`socket`,`http`]).optional(),signingSecret:y.string().optional().register(V),webhookPath:y.string().optional(),capabilities:y.array(y.string()).optional(),markdown:Hm,enabled:y.boolean().optional(),commands:yh,configWrites:y.boolean().optional(),botToken:y.string().optional().register(V),appToken:y.string().optional().register(V),userToken:y.string().optional().register(V),userTokenReadOnly:y.boolean().optional().default(!0),allowBots:y.boolean().optional(),dangerouslyAllowNameMatching:y.boolean().optional(),requireMention:y.boolean().optional(),groupPolicy:G.optional(),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),blockStreaming:y.boolean().optional(),blockStreamingCoalesce:q.optional(),streaming:y.union([y.boolean(),y.enum([`off`,`partial`,`block`,`progress`])]).optional(),nativeStreaming:y.boolean().optional(),streamMode:y.enum([`replace`,`status_final`,`append`]).optional(),mediaMaxMb:y.number().positive().optional(),reactionNotifications:y.enum([`off`,`own`,`all`,`allowlist`]).optional(),reactionAllowlist:y.array(y.union([y.string(),y.number()])).optional(),replyToMode:Rm.optional(),replyToModeByChatType:Qg.optional(),thread:Zg.optional(),actions:y.object({reactions:y.boolean().optional(),messages:y.boolean().optional(),pins:y.boolean().optional(),search:y.boolean().optional(),permissions:y.boolean().optional(),memberInfo:y.boolean().optional(),channelInfo:y.boolean().optional(),emojiList:y.boolean().optional()}).strict().optional(),slashCommand:y.object({enabled:y.boolean().optional(),name:y.string().optional(),sessionPrefix:y.string().optional(),ephemeral:y.boolean().optional()}).strict().optional(),dmPolicy:K.optional(),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),defaultTo:y.string().optional(),dm:Yg.optional(),channels:y.record(y.string(),Xg.optional()).optional(),heartbeat:Z,responsePrefix:y.string().optional(),ackReaction:y.string().optional()}).strict().superRefine(e=>{Ng(e)}),e_=$g.safeExtend({mode:y.enum([`socket`,`http`]).optional().default(`socket`),signingSecret:y.string().optional().register(V),webhookPath:y.string().optional().default(`/slack/events`),groupPolicy:G.optional().default(`allowlist`),accounts:y.record(y.string(),$g.optional()).optional()}).superRefine((e,t)=>{let n=e.dmPolicy??e.dm?.policy??`pairing`,r=e.allowFrom??e.dm?.allowFrom,i=e.allowFrom===void 0?[`dm`,`allowFrom`]:[`allowFrom`];J({policy:n,allowFrom:r,ctx:t,path:[...i],message:`channels.slack.dmPolicy="open" requires channels.slack.allowFrom (or channels.slack.dm.allowFrom) to include "*"`}),Y({policy:n,allowFrom:r,ctx:t,path:[...i],message:`channels.slack.dmPolicy="allowlist" requires channels.slack.allowFrom (or channels.slack.dm.allowFrom) to contain at least one sender ID`});let a=e.mode??`socket`;if(a===`http`&&!e.signingSecret&&t.addIssue({code:y.ZodIssueCode.custom,message:`channels.slack.mode="http" requires channels.slack.signingSecret`,path:[`signingSecret`]}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r||r.enabled===!1)continue;let i=r.mode??a,o=r.dmPolicy??r.dm?.policy??e.dmPolicy??e.dm?.policy??`pairing`,s=r.allowFrom??r.dm?.allowFrom??e.allowFrom??e.dm?.allowFrom;J({policy:o,allowFrom:s,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.slack.accounts.*.dmPolicy="open" requires channels.slack.accounts.*.allowFrom (or channels.slack.allowFrom) to include "*"`}),Y({policy:o,allowFrom:s,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.slack.accounts.*.dmPolicy="allowlist" requires channels.slack.accounts.*.allowFrom (or channels.slack.allowFrom) to contain at least one sender ID`}),i===`http`&&((r.signingSecret??e.signingSecret)||t.addIssue({code:y.ZodIssueCode.custom,message:`channels.slack.accounts.*.mode="http" requires channels.slack.signingSecret or channels.slack.accounts.*.signingSecret`,path:[`accounts`,n,`signingSecret`]}))}}),t_=y.object({name:y.string().optional(),capabilities:y.array(y.string()).optional(),markdown:Hm,enabled:y.boolean().optional(),configWrites:y.boolean().optional(),account:y.string().optional(),httpUrl:y.string().optional(),httpHost:y.string().optional(),httpPort:y.number().int().positive().optional(),cliPath:ah.optional(),autoStart:y.boolean().optional(),startupTimeoutMs:y.number().int().min(1e3).max(12e4).optional(),receiveMode:y.union([y.literal(`on-start`),y.literal(`manual`)]).optional(),ignoreAttachments:y.boolean().optional(),ignoreStories:y.boolean().optional(),sendReadReceipts:y.boolean().optional(),dmPolicy:K.optional().default(`pairing`),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),defaultTo:y.string().optional(),groupAllowFrom:y.array(y.union([y.string(),y.number()])).optional(),groupPolicy:G.optional().default(`allowlist`),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),blockStreaming:y.boolean().optional(),blockStreamingCoalesce:q.optional(),mediaMaxMb:y.number().int().positive().optional(),reactionNotifications:y.enum([`off`,`own`,`all`,`allowlist`]).optional(),reactionAllowlist:y.array(y.union([y.string(),y.number()])).optional(),actions:y.object({reactions:y.boolean().optional()}).strict().optional(),reactionLevel:y.enum([`off`,`ack`,`minimal`,`extensive`]).optional(),heartbeat:Z,responsePrefix:y.string().optional()}).strict(),n_=t_,r_=t_.extend({accounts:y.record(y.string(),n_.optional()).optional()}).superRefine((e,t)=>{if(J({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.signal.dmPolicy="open" requires channels.signal.allowFrom to include "*"`}),Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.signal.dmPolicy="allowlist" requires channels.signal.allowFrom to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;J({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.signal.accounts.*.dmPolicy="open" requires channels.signal.accounts.*.allowFrom (or channels.signal.allowFrom) to include "*"`}),Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.signal.accounts.*.dmPolicy="allowlist" requires channels.signal.accounts.*.allowFrom (or channels.signal.allowFrom) to contain at least one sender ID`})}}),i_=y.object({requireMention:y.boolean().optional(),tools:X,toolsBySender:Q,skills:y.array(y.string()).optional(),enabled:y.boolean().optional(),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),systemPrompt:y.string().optional()}).strict(),a_=y.object({enabled:y.boolean().optional(),service:y.string().optional(),password:y.string().optional().register(V),passwordFile:y.string().optional(),register:y.boolean().optional(),registerEmail:y.string().optional()}).strict(),o_=y.object({name:y.string().optional(),capabilities:y.array(y.string()).optional(),markdown:Hm,enabled:y.boolean().optional(),configWrites:y.boolean().optional(),host:y.string().optional(),port:y.number().int().min(1).max(65535).optional(),tls:y.boolean().optional(),nick:y.string().optional(),username:y.string().optional(),realname:y.string().optional(),password:y.string().optional().register(V),passwordFile:y.string().optional(),nickserv:a_.optional(),channels:y.array(y.string()).optional(),dmPolicy:K.optional().default(`pairing`),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),defaultTo:y.string().optional(),groupAllowFrom:y.array(y.union([y.string(),y.number()])).optional(),groupPolicy:G.optional().default(`allowlist`),groups:y.record(y.string(),i_.optional()).optional(),mentionPatterns:y.array(y.string()).optional(),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),blockStreaming:y.boolean().optional(),blockStreamingCoalesce:q.optional(),mediaMaxMb:y.number().positive().optional(),heartbeat:Z,responsePrefix:y.string().optional()}).strict();function s_(e,t){J({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.irc.dmPolicy="open" requires channels.irc.allowFrom to include "*"`}),Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.irc.dmPolicy="allowlist" requires channels.irc.allowFrom to contain at least one sender ID`}),e.nickserv?.register&&!e.nickserv.registerEmail?.trim()&&t.addIssue({code:y.ZodIssueCode.custom,path:[`nickserv`,`registerEmail`],message:`channels.irc.nickserv.register=true requires channels.irc.nickserv.registerEmail`})}const c_=o_.superRefine((e,t)=>{e.nickserv?.register&&!e.nickserv.registerEmail?.trim()&&t.addIssue({code:y.ZodIssueCode.custom,path:[`nickserv`,`registerEmail`],message:`channels.irc.nickserv.register=true requires channels.irc.nickserv.registerEmail`})}),l_=o_.extend({accounts:y.record(y.string(),c_.optional()).optional()}).superRefine((e,t)=>{if(s_(e,t),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;J({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.irc.accounts.*.dmPolicy="open" requires channels.irc.accounts.*.allowFrom (or channels.irc.allowFrom) to include "*"`}),Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.irc.accounts.*.dmPolicy="allowlist" requires channels.irc.accounts.*.allowFrom (or channels.irc.allowFrom) to contain at least one sender ID`})}}),u_=y.object({name:y.string().optional(),capabilities:y.array(y.string()).optional(),markdown:Hm,enabled:y.boolean().optional(),configWrites:y.boolean().optional(),cliPath:ah.optional(),dbPath:y.string().optional(),remoteHost:y.string().refine(pg,`expected SSH host or user@host (no spaces/options)`).optional(),service:y.union([y.literal(`imessage`),y.literal(`sms`),y.literal(`auto`)]).optional(),region:y.string().optional(),dmPolicy:K.optional().default(`pairing`),allowFrom:y.array(y.union([y.string(),y.number()])).optional(),defaultTo:y.string().optional(),groupAllowFrom:y.array(y.union([y.string(),y.number()])).optional(),groupPolicy:G.optional().default(`allowlist`),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),includeAttachments:y.boolean().optional(),attachmentRoots:y.array(y.string().refine(vg,`expected absolute path root`)).optional(),remoteAttachmentRoots:y.array(y.string().refine(vg,`expected absolute path root`)).optional(),mediaMaxMb:y.number().int().positive().optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),blockStreaming:y.boolean().optional(),blockStreamingCoalesce:q.optional(),groups:y.record(y.string(),y.object({requireMention:y.boolean().optional(),tools:X,toolsBySender:Q}).strict().optional()).optional(),heartbeat:Z,responsePrefix:y.string().optional()}).strict(),d_=u_,f_=u_.extend({accounts:y.record(y.string(),d_.optional()).optional()}).superRefine((e,t)=>{if(J({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.imessage.dmPolicy="open" requires channels.imessage.allowFrom to include "*"`}),Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.imessage.dmPolicy="allowlist" requires channels.imessage.allowFrom to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;J({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.imessage.accounts.*.dmPolicy="open" requires channels.imessage.accounts.*.allowFrom (or channels.imessage.allowFrom) to include "*"`}),Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.imessage.accounts.*.dmPolicy="allowlist" requires channels.imessage.accounts.*.allowFrom (or channels.imessage.allowFrom) to contain at least one sender ID`})}}),p_=y.union([y.string(),y.number()]),m_=y.object({reactions:y.boolean().optional(),edit:y.boolean().optional(),unsend:y.boolean().optional(),reply:y.boolean().optional(),sendWithEffect:y.boolean().optional(),renameGroup:y.boolean().optional(),setGroupIcon:y.boolean().optional(),addParticipant:y.boolean().optional(),removeParticipant:y.boolean().optional(),leaveGroup:y.boolean().optional(),sendAttachment:y.boolean().optional()}).strict().optional(),h_=y.object({requireMention:y.boolean().optional(),tools:X,toolsBySender:Q}).strict(),g_=y.object({name:y.string().optional(),capabilities:y.array(y.string()).optional(),markdown:Hm,configWrites:y.boolean().optional(),enabled:y.boolean().optional(),serverUrl:y.string().optional(),password:y.string().optional().register(V),webhookPath:y.string().optional(),dmPolicy:K.optional().default(`pairing`),allowFrom:y.array(p_).optional(),groupAllowFrom:y.array(p_).optional(),groupPolicy:G.optional().default(`allowlist`),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),mediaMaxMb:y.number().int().positive().optional(),mediaLocalRoots:y.array(y.string()).optional(),sendReadReceipts:y.boolean().optional(),blockStreaming:y.boolean().optional(),blockStreamingCoalesce:q.optional(),groups:y.record(y.string(),h_.optional()).optional(),heartbeat:Z,responsePrefix:y.string().optional()}).strict(),__=g_,v_=g_.extend({accounts:y.record(y.string(),__.optional()).optional(),actions:m_}).superRefine((e,t)=>{if(J({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.bluebubbles.dmPolicy="open" requires channels.bluebubbles.allowFrom to include "*"`}),Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.bluebubbles.dmPolicy="allowlist" requires channels.bluebubbles.allowFrom to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;J({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.bluebubbles.accounts.*.dmPolicy="open" requires channels.bluebubbles.accounts.*.allowFrom (or channels.bluebubbles.allowFrom) to include "*"`}),Y({policy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.bluebubbles.accounts.*.dmPolicy="allowlist" requires channels.bluebubbles.accounts.*.allowFrom (or channels.bluebubbles.allowFrom) to contain at least one sender ID`})}}),y_=y.object({requireMention:y.boolean().optional(),tools:X,toolsBySender:Q,replyStyle:Zm.optional()}).strict(),b_=y.object({requireMention:y.boolean().optional(),tools:X,toolsBySender:Q,replyStyle:Zm.optional(),channels:y.record(y.string(),y_.optional()).optional()}).strict(),x_=y.object({enabled:y.boolean().optional(),capabilities:y.array(y.string()).optional(),dangerouslyAllowNameMatching:y.boolean().optional(),markdown:Hm,configWrites:y.boolean().optional(),appId:y.string().optional(),appPassword:y.string().optional().register(V),tenantId:y.string().optional(),webhook:y.object({port:y.number().int().positive().optional(),path:y.string().optional()}).strict().optional(),dmPolicy:K.optional().default(`pairing`),allowFrom:y.array(y.string()).optional(),defaultTo:y.string().optional(),groupAllowFrom:y.array(y.string()).optional(),groupPolicy:G.optional().default(`allowlist`),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),blockStreamingCoalesce:q.optional(),mediaAllowHosts:y.array(y.string()).optional(),mediaAuthAllowHosts:y.array(y.string()).optional(),requireMention:y.boolean().optional(),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),replyStyle:Zm.optional(),teams:y.record(y.string(),b_.optional()).optional(),mediaMaxMb:y.number().positive().optional(),preserveFilenames:y.boolean().optional(),sharePointSiteId:y.string().optional(),heartbeat:Z,responsePrefix:y.string().optional()}).strict().superRefine((e,t)=>{J({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.msteams.dmPolicy="open" requires channels.msteams.allowFrom to include "*"`}),Y({policy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,path:[`allowFrom`],message:`channels.msteams.dmPolicy="allowlist" requires channels.msteams.allowFrom to contain at least one sender ID`})}),S_=y.record(y.string(),X).optional(),C_=y.object({requireMention:y.boolean().optional(),tools:X,toolsBySender:S_}).strict().optional(),w_=y.record(y.string(),C_).optional(),T_=y.object({emoji:y.string().optional(),direct:y.boolean().optional().default(!0),group:y.enum([`always`,`mentions`,`never`]).optional().default(`mentions`)}).strict().optional(),E_=y.object({enabled:y.boolean().optional(),capabilities:y.array(y.string()).optional(),markdown:Hm,configWrites:y.boolean().optional(),sendReadReceipts:y.boolean().optional(),messagePrefix:y.string().optional(),responsePrefix:y.string().optional(),dmPolicy:K.optional().default(`pairing`),selfChatMode:y.boolean().optional(),allowFrom:y.array(y.string()).optional(),defaultTo:y.string().optional(),groupAllowFrom:y.array(y.string()).optional(),groupPolicy:G.optional().default(`allowlist`),historyLimit:y.number().int().min(0).optional(),dmHistoryLimit:y.number().int().min(0).optional(),dms:y.record(y.string(),U.optional()).optional(),textChunkLimit:y.number().int().positive().optional(),chunkMode:y.enum([`length`,`newline`]).optional(),blockStreaming:y.boolean().optional(),blockStreamingCoalesce:q.optional(),groups:w_,ackReaction:T_,debounceMs:y.number().int().nonnegative().optional().default(0),heartbeat:Z});function D_(e){e.dmPolicy===`open`&&((Array.isArray(e.allowFrom)?e.allowFrom:[]).map(e=>String(e).trim()).filter(Boolean).includes(`*`)||e.ctx.addIssue({code:y.ZodIssueCode.custom,path:e.path??[`allowFrom`],message:e.message}))}function O_(e){e.dmPolicy===`allowlist`&&((Array.isArray(e.allowFrom)?e.allowFrom:[]).map(e=>String(e).trim()).filter(Boolean).length>0||e.ctx.addIssue({code:y.ZodIssueCode.custom,path:e.path??[`allowFrom`],message:e.message}))}const k_=E_.extend({name:y.string().optional(),enabled:y.boolean().optional(),authDir:y.string().optional(),mediaMaxMb:y.number().int().positive().optional()}).strict(),A_=E_.extend({accounts:y.record(y.string(),k_.optional()).optional(),mediaMaxMb:y.number().int().positive().optional().default(50),actions:y.object({reactions:y.boolean().optional(),sendMessage:y.boolean().optional(),polls:y.boolean().optional()}).strict().optional()}).strict().superRefine((e,t)=>{if(D_({dmPolicy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,message:`channels.whatsapp.dmPolicy="open" requires channels.whatsapp.allowFrom to include "*"`}),O_({dmPolicy:e.dmPolicy,allowFrom:e.allowFrom,ctx:t,message:`channels.whatsapp.dmPolicy="allowlist" requires channels.whatsapp.allowFrom to contain at least one sender ID`}),e.accounts)for(let[n,r]of Object.entries(e.accounts)){if(!r)continue;let i=r.dmPolicy??e.dmPolicy,a=r.allowFrom??e.allowFrom;D_({dmPolicy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.whatsapp.accounts.*.dmPolicy="open" requires channels.whatsapp.accounts.*.allowFrom (or channels.whatsapp.allowFrom) to include "*"`}),O_({dmPolicy:i,allowFrom:a,ctx:t,path:[`accounts`,n,`allowFrom`],message:`channels.whatsapp.accounts.*.dmPolicy="allowlist" requires channels.whatsapp.accounts.*.allowFrom (or channels.whatsapp.allowFrom) to contain at least one sender ID`})}}),j_=y.record(y.string(),y.record(y.string(),y.string())).optional(),M_=y.object({defaults:y.object({groupPolicy:G.optional(),heartbeat:Z}).strict().optional(),modelByChannel:j_,whatsapp:A_.optional(),telegram:Ig.optional(),discord:Wg.optional(),irc:l_.optional(),googlechat:Jg.optional(),slack:e_.optional(),signal:r_.optional(),imessage:f_.optional(),bluebubbles:v_.optional(),msteams:x_.optional()}).passthrough().optional(),N_=y.object({mode:y.union([y.literal(`daily`),y.literal(`idle`)]).optional(),atHour:y.number().int().min(0).max(23).optional(),idleMinutes:y.number().int().positive().optional()}).strict(),P_=pm(),F_=y.object({scope:y.union([y.literal(`per-sender`),y.literal(`global`)]).optional(),dmScope:y.union([y.literal(`main`),y.literal(`per-peer`),y.literal(`per-channel-peer`),y.literal(`per-account-channel-peer`)]).optional(),identityLinks:y.record(y.string(),y.array(y.string())).optional(),resetTriggers:y.array(y.string()).optional(),idleMinutes:y.number().int().positive().optional(),reset:N_.optional(),resetByType:y.object({direct:N_.optional(),dm:N_.optional(),group:N_.optional(),thread:N_.optional()}).strict().optional(),resetByChannel:y.record(y.string(),N_).optional(),store:y.string().optional(),typingIntervalSeconds:y.number().int().positive().optional(),typingMode:zm.optional(),parentForkMaxTokens:y.number().int().nonnegative().optional(),mainKey:y.string().optional(),sendPolicy:P_.optional(),agentToAgent:y.object({maxPingPongTurns:y.number().int().min(0).max(5).optional()}).strict().optional(),threadBindings:y.object({enabled:y.boolean().optional(),idleHours:y.number().nonnegative().optional(),maxAgeHours:y.number().nonnegative().optional()}).strict().optional(),maintenance:y.object({mode:y.enum([`enforce`,`warn`]).optional(),pruneAfter:y.union([y.string(),y.number()]).optional(),pruneDays:y.number().int().positive().optional(),maxEntries:y.number().int().positive().optional(),rotateBytes:y.union([y.string(),y.number()]).optional(),resetArchiveRetention:y.union([y.string(),y.number(),y.literal(!1)]).optional(),maxDiskBytes:y.union([y.string(),y.number()]).optional(),highWaterBytes:y.union([y.string(),y.number()]).optional()}).strict().superRefine((e,t)=>{if(e.pruneAfter!==void 0)try{im(String(e.pruneAfter).trim(),{defaultUnit:`d`})}catch{t.addIssue({code:y.ZodIssueCode.custom,path:[`pruneAfter`],message:`invalid duration (use ms, s, m, h, d)`})}if(e.rotateBytes!==void 0)try{nm(String(e.rotateBytes).trim(),{defaultUnit:`b`})}catch{t.addIssue({code:y.ZodIssueCode.custom,path:[`rotateBytes`],message:`invalid size (use b, kb, mb, gb, tb)`})}if(e.resetArchiveRetention!==void 0&&e.resetArchiveRetention!==!1)try{im(String(e.resetArchiveRetention).trim(),{defaultUnit:`d`})}catch{t.addIssue({code:y.ZodIssueCode.custom,path:[`resetArchiveRetention`],message:`invalid duration (use ms, s, m, h, d)`})}if(e.maxDiskBytes!==void 0)try{nm(String(e.maxDiskBytes).trim(),{defaultUnit:`b`})}catch{t.addIssue({code:y.ZodIssueCode.custom,path:[`maxDiskBytes`],message:`invalid size (use b, kb, mb, gb, tb)`})}if(e.highWaterBytes!==void 0)try{nm(String(e.highWaterBytes).trim(),{defaultUnit:`b`})}catch{t.addIssue({code:y.ZodIssueCode.custom,path:[`highWaterBytes`],message:`invalid size (use b, kb, mb, gb, tb)`})}}).optional()}).strict().optional(),I_=y.object({messagePrefix:y.string().optional(),responsePrefix:y.string().optional(),groupChat:Fm,queue:th,inbound:nh,ackReaction:y.string().optional(),ackReactionScope:y.enum([`group-mentions`,`group-all`,`direct`,`all`]).optional(),removeAckAfterReply:y.boolean().optional(),statusReactions:y.object({enabled:y.boolean().optional(),emojis:y.object({thinking:y.string().optional(),tool:y.string().optional(),coding:y.string().optional(),web:y.string().optional(),done:y.string().optional(),error:y.string().optional(),stallSoft:y.string().optional(),stallHard:y.string().optional()}).strict().optional(),timing:y.object({debounceMs:y.number().int().min(0).optional(),stallSoftMs:y.number().int().min(0).optional(),stallHardMs:y.number().int().min(0).optional(),doneHoldMs:y.number().int().min(0).optional(),errorHoldMs:y.number().int().min(0).optional()}).strict().optional()}).strict().optional(),suppressToolErrors:y.boolean().optional(),tts:Km}).strict().optional(),L_=y.object({native:vh.optional().default(`auto`),nativeSkills:vh.optional().default(`auto`),text:y.boolean().optional(),bash:y.boolean().optional(),bashForegroundMs:y.number().int().min(0).max(3e4).optional(),config:y.boolean().optional(),debug:y.boolean().optional(),restart:y.boolean().optional().default(!0),useAccessGroups:y.boolean().optional(),ownerAllowFrom:y.array(y.union([y.string(),y.number()])).optional(),ownerDisplay:y.enum([`raw`,`hash`]).optional().default(`raw`),ownerDisplaySecret:y.string().optional().register(V),allowFrom:Ah.optional()}).strict().optional().default(()=>({native:`auto`,nativeSkills:`auto`,restart:!0,ownerDisplay:`raw`})),R_=y.object({mode:y.literal(`efficient`).optional()}).strict().optional(),z_=y.object({browserProxy:y.object({enabled:y.boolean().optional(),allowProfiles:y.array(y.string()).optional()}).strict().optional()}).strict().optional(),B_=y.object({path:y.string(),name:y.string().optional(),pattern:y.string().optional()}).strict(),V_=y.object({enabled:y.boolean().optional(),exportDir:y.string().optional(),retentionDays:y.number().int().nonnegative().optional()}).strict(),H_=y.object({voiceId:y.string().optional(),voiceAliases:y.record(y.string(),y.string()).optional(),modelId:y.string().optional(),outputFormat:y.string().optional(),apiKey:H.optional().register(V)}).catchall(y.unknown()),U_=y.object({transcription:rh}).strict().optional(),W_=y.object({interval:y.string().optional(),debounceMs:y.number().int().nonnegative().optional(),onBoot:y.boolean().optional(),waitForBootSync:y.boolean().optional(),embedInterval:y.string().optional(),commandTimeoutMs:y.number().int().nonnegative().optional(),updateTimeoutMs:y.number().int().nonnegative().optional(),embedTimeoutMs:y.number().int().nonnegative().optional()}).strict(),G_=y.object({maxResults:y.number().int().positive().optional(),maxSnippetChars:y.number().int().positive().optional(),maxInjectedChars:y.number().int().positive().optional(),timeoutMs:y.number().int().nonnegative().optional()}).strict(),K_=y.object({command:y.string().optional(),searchMode:y.union([y.literal(`query`),y.literal(`search`),y.literal(`vsearch`)]).optional(),includeDefaultMemory:y.boolean().optional(),paths:y.array(B_).optional(),sessions:V_.optional(),update:W_.optional(),limits:G_.optional(),scope:P_.optional()}).strict(),q_=y.object({backend:y.union([y.literal(`builtin`),y.literal(`qmd`)]).optional(),citations:y.union([y.literal(`auto`),y.literal(`on`),y.literal(`off`)]).optional(),qmd:K_.optional()}).strict().optional(),J_=y.object({enabled:y.boolean().optional(),dispatch:y.object({enabled:y.boolean().optional()}).strict().optional(),backend:y.string().optional(),defaultAgent:y.string().optional(),allowedAgents:y.array(y.string()).optional(),maxConcurrentSessions:y.number().int().positive().optional(),stream:y.object({coalesceIdleMs:y.number().int().nonnegative().optional(),maxChunkChars:y.number().int().positive().optional()}).strict().optional(),runtime:y.object({ttlMinutes:y.number().int().positive().optional(),installCommand:y.string().optional()}).strict().optional()}).strict().optional(),Y_=y.string().refine(e=>{try{return im(e),!0}catch{return!1}},{message:`invalid duration (use ms, s, m, h, d)`}),X_=y.union([y.number().int().positive(),y.string()]).refine(e=>{try{return nm(String(e).trim(),{defaultUnit:`b`})>0}catch{return!1}},{message:`invalid byte size`}),Z_=y.object({maxBytes:X_.optional(),keepLines:y.number().int().positive().optional()}).strict(),Q_=y.union([y.string(),y.number().transform((e,t)=>{let n=new Date(e);return!Number.isFinite(e)||Number.isNaN(n.getTime())?(t.addIssue({code:y.ZodIssueCode.custom,message:`invalid timestamp`}),y.NEVER):n.toISOString()})]),$_=y.union([y.literal(`per-job`),y.literal(`per-hour`),y.literal(`per-1k-rows`),y.literal(`per-api-call`),y.literal(`per-day`),y.literal(`per-month`),y.literal(`custom`)]),ev=y.object({currency:y.string().optional(),model:y.string().optional(),amount:y.number().positive().optional(),unit:$_.optional(),unitLabel:y.string().optional()}).strict().optional(),tv=y.union([y.literal(`human`),y.literal(`agent`),y.literal(`agent-approval`),y.literal(`api`),y.literal(`dataset`),y.literal(`hybrid`)]),nv=y.object({kind:y.union([y.literal(`result`),y.literal(`artifact`),y.literal(`invoice`),y.literal(`receipt`),y.literal(`tx`),y.literal(`signature`),y.literal(`manual`)]).optional(),required:y.boolean().optional(),description:y.string().optional()}).strict(),rv=y.object({allowed:y.boolean().optional(),humanApprovalRequired:y.boolean().optional(),allowedSkills:y.array(y.string()).optional(),allowedPlugins:y.array(y.string()).optional(),maxRuntimeSeconds:y.number().int().positive().optional(),maxSpendAmount:y.number().positive().optional(),maxSpendCurrency:y.string().optional()}).strict().optional(),iv=y.object({kind:y.union([y.literal(`native`),y.literal(`spl-token`)]).optional(),address:y.string().optional()}).strict().optional(),av=y.object({chain:y.literal(`solana`).optional(),address:y.string().optional()}).strict().optional(),ov=y.object({currency:y.string().optional(),chain:y.literal(`solana`).optional(),assetDecimals:y.number().int().min(0).max(18).optional(),asset:iv,payee:av}).strict().optional(),sv=y.object({id:y.string().optional(),source:y.union([y.literal(`builtin`),y.literal(`manual`),y.literal(`skill`)]).optional(),enabled:y.boolean().optional(),title:y.string(),summary:y.string().optional(),serviceKind:y.string(),inputShape:y.string().optional(),deliveryShape:y.string().optional(),capabilities:y.array(y.string()).optional(),pricing:ev,fulfillmentMode:tv.optional(),performer:tv.optional(),receiptRules:y.array(nv).optional(),automation:rv,paymentRails:y.array(y.string()).optional(),acceptedAssets:y.array(y.string()).optional(),paymentDefaults:ov,availability:y.string().optional(),visibility:y.string().optional(),requiredTrustOrBondTier:y.string().optional(),createdAt:y.string().optional(),updatedAt:y.string().optional()}).strict(),cv=y.union([y.literal(`draft`),y.literal(`open`),y.literal(`matched`),y.literal(`closed`)]),lv=y.union([y.literal(`draft`),y.literal(`accepted`),y.literal(`funded`),y.literal(`running`),y.literal(`delivered`),y.literal(`disputed`),y.literal(`closed`),y.literal(`cancelled`)]),uv=y.union([y.literal(`not_submitted`),y.literal(`pending`),y.literal(`accepted`),y.literal(`failed`)]),dv=y.union([y.literal(`draft`),y.literal(`requires_payment`),y.literal(`submitted`),y.literal(`verified`),y.literal(`failed`),y.literal(`cancelled`)]),fv=y.union([y.literal(`direct`),y.literal(`escrow`)]),pv=y.union([y.literal(`not_required`),y.literal(`requires_payment`),y.literal(`submitted`),y.literal(`verified`),y.literal(`settled`),y.literal(`held`),y.literal(`released`),y.literal(`failed`),y.literal(`disputed`),y.literal(`cancelled`)]),mv=y.union([y.literal(`not_applicable`),y.literal(`required`),y.literal(`funded`),y.literal(`held`),y.literal(`released`),y.literal(`refunded`),y.literal(`cancelled`),y.literal(`blocked`)]),hv=y.union([y.literal(`pending`),y.literal(`ready`),y.literal(`running`),y.literal(`delivered`),y.literal(`failed`),y.literal(`blocked`)]),gv=y.union([y.literal(`pending`),y.literal(`issued`),y.literal(`verified`),y.literal(`rejected`)]),_v=y.union([y.literal(`one-time`),y.literal(`per-job`),y.literal(`per-hour`),y.literal(`per-1k-rows`),y.literal(`per-api-call`),y.literal(`per-day`),y.literal(`per-week`),y.literal(`per-month`),y.literal(`custom`)]),vv=y.union([y.literal(`not_applicable`),y.literal(`draft`),y.literal(`active`),y.literal(`past_due`),y.literal(`paused`),y.literal(`expired`),y.literal(`cancelled`),y.literal(`blocked`)]),yv=y.union([y.literal(`none`),y.literal(`manual`),y.literal(`auto-renew`),y.literal(`auto-renew-with-approval`)]),bv=y.union([y.literal(`not_required`),y.literal(`scheduled`),y.literal(`stopped`),y.literal(`blocked`)]),xv=y.object({status:vv.optional(),billingPeriod:_v.optional(),maxBuyers:y.number().int().positive().optional(),remainingSlots:y.number().int().min(0).optional(),startsAt:y.string().optional(),endsAt:y.string().optional(),renewalPolicy:yv.optional(),paymentExpiresAt:y.string().optional(),deliveryStop:y.object({status:bv.optional(),reason:y.string().optional(),scheduledAt:y.string().optional(),stoppedAt:y.string().optional(),updatedAt:y.string().optional()}).strict().optional(),createdAt:y.string().optional(),updatedAt:y.string().optional()}).strict(),Sv=y.union([y.literal(`app-inbox`),y.literal(`channel`),y.literal(`webhook`),y.literal(`websocket`),y.literal(`federation`),y.literal(`api`),y.literal(`artifact`)]),Cv=y.union([y.literal(`draft`),y.literal(`ready`),y.literal(`revoked`),y.literal(`expired`),y.literal(`blocked`)]),wv=y.object({targetId:y.string().optional(),source:y.union([y.literal(`order`),y.literal(`subscription`),y.literal(`manual`)]).optional(),owner:y.union([y.literal(`buyer`),y.literal(`seller`)]).optional(),kind:Sv.optional(),status:Cv.optional(),label:y.string().optional(),descriptor:y.string().optional(),maskedTarget:y.string().optional(),scope:y.object({orderId:y.string().optional(),subscriptionId:y.string().optional(),serviceKind:y.string().optional(),expiresAt:y.string().optional(),maxDeliveries:y.number().int().positive().optional()}).strict().optional(),channel:y.object({provider:y.string().optional(),to:y.string().optional(),accountId:y.string().optional(),threadId:y.union([y.string(),y.number()]).optional()}).strict().optional(),webhook:y.object({url:y.string().optional(),method:y.literal(`POST`).optional(),secretRef:y.string().optional()}).strict().optional(),websocket:y.object({url:y.string().optional(),tokenRef:y.string().optional()}).strict().optional(),federation:y.object({handle:y.string().optional(),nodeEndpoint:y.string().optional()}).strict().optional(),api:y.object({url:y.string().optional(),tokenRef:y.string().optional()}).strict().optional(),artifact:y.object({artifactRef:y.string().optional()}).strict().optional(),createdAt:y.string().optional(),updatedAt:y.string().optional(),revokedAt:y.string().optional()}).strict(),Tv=y.object({intentId:y.string().optional(),status:dv.optional(),amount:y.number().optional(),currency:y.string().optional(),unit:$_.optional(),method:y.string().optional(),chain:y.literal(`solana`).optional(),assetKind:y.union([y.literal(`native`),y.literal(`spl-token`)]).optional(),assetAddress:y.string().optional(),assetDecimals:y.number().int().min(0).max(18).optional(),expiresInMinutes:y.number().int().positive().optional(),acceptedAssets:y.array(y.string()).optional(),payerWalletId:y.string().optional(),payeeHandle:y.string().optional(),payeeAddress:y.string().optional(),txRef:y.string().optional(),createdAt:y.string().optional(),updatedAt:y.string().optional()}).strict(),Ev=y.object({status:mv.optional(),holdPolicy:y.union([y.literal(`none`),y.literal(`release_on_delivery`),y.literal(`manual_release`)]).optional(),releaseRequired:y.boolean().optional(),vaultWalletId:y.string().optional(),vaultWalletName:y.string().optional(),vaultAddress:y.string().optional(),fundingRequestId:y.string().optional(),fundingTxRef:y.string().optional(),fundedAt:y.string().optional(),releaseRequestId:y.string().optional(),releaseTxRef:y.string().optional(),releasedAt:y.string().optional(),refundRequestId:y.string().optional(),refundTxRef:y.string().optional(),refundedAt:y.string().optional(),cancelledAt:y.string().optional(),notes:y.string().optional(),updatedAt:y.string().optional()}).strict(),Dv=y.object({mode:fv.optional(),status:pv.optional(),amount:y.number().optional(),currency:y.string().optional(),chain:y.literal(`solana`).optional(),assetKind:y.union([y.literal(`native`),y.literal(`spl-token`)]).optional(),assetAddress:y.string().optional(),assetDecimals:y.number().int().min(0).max(18).optional(),invoiceId:y.string().optional(),receiptId:y.string().optional(),txRef:y.string().optional(),evidenceRef:y.string().optional(),payerWalletId:y.string().optional(),payeeAddress:y.string().optional(),escrow:Ev.optional(),notes:y.string().optional(),createdAt:y.string().optional(),updatedAt:y.string().optional(),verifiedAt:y.string().optional(),settledAt:y.string().optional()}).strict(),Ov=y.object({status:hv.optional(),fulfillmentMode:tv.optional(),inputShape:y.string().optional(),deliveryShape:y.string().optional(),targetId:y.string().optional(),targetKind:Sv.optional(),targetStatus:Cv.optional(),targetLabel:y.string().optional(),targetMasked:y.string().optional(),target:wv.optional(),resultRef:y.string().optional(),artifactRef:y.string().optional(),notes:y.string().optional(),deliveredAt:y.string().optional(),updatedAt:y.string().optional()}).strict(),kv=y.object({status:gv.optional(),invoiceId:y.string().optional(),receiptId:y.string().optional(),txRef:y.string().optional(),resultRef:y.string().optional(),disputeCaseId:y.string().optional(),notes:y.string().optional(),createdAt:y.string().optional(),updatedAt:y.string().optional()}).strict(),Av=y.object({id:y.string().optional(),source:y.union([y.literal(`manual`),y.literal(`chat`)]).optional(),enabled:y.boolean().optional(),status:cv.optional(),title:y.string(),summary:y.string().optional(),serviceKind:y.string(),inputShape:y.string().optional(),deliveryShape:y.string().optional(),capabilities:y.array(y.string()).optional(),pricing:ev,fulfillmentMode:tv.optional(),receiptRules:y.array(nv).optional(),paymentRails:y.array(y.string()).optional(),acceptedAssets:y.array(y.string()).optional(),requiredTrustOrBondTier:y.string().optional(),visibility:y.string().optional(),expiresAt:y.string().optional(),createdAt:y.string().optional(),updatedAt:y.string().optional()}).strict(),jv=y.object({id:y.string().optional(),source:y.union([y.literal(`local`),y.literal(`federation`)]).optional(),status:lv.optional(),offerId:y.string().optional(),requestId:y.string().optional(),buyerHandle:y.string().optional(),sellerHandle:y.string().optional(),sellerEndpoint:y.string().optional(),sellerOrderId:y.string().optional(),sellerSyncStatus:uv.optional(),sellerSyncError:y.string().optional(),sellerSyncedAt:y.string().optional(),sellerAcceptedAt:y.string().optional(),peerNodeId:y.string().optional(),peerRemoteOrderId:y.string().optional(),peerRequestDigest:y.string().optional(),peerDeliveryDigest:y.string().optional(),serviceKind:y.string().optional(),title:y.string().optional(),pricing:ev,fulfillmentMode:tv.optional(),receiptRules:y.array(nv).optional(),paymentIntent:Tv.optional(),settlement:Dv.optional(),delivery:Ov.optional(),subscription:xv.optional(),receipt:kv.optional(),invoiceId:y.string().optional(),receiptId:y.string().optional(),txRef:y.string().optional(),resultRef:y.string().optional(),disputeCaseId:y.string().optional(),createdAt:y.string().optional(),updatedAt:y.string().optional()}).strict(),Mv=y.object({allowPrograms:y.array(y.string()).optional(),tokenCaps:y.record(y.string(),y.object({maxPerTx:y.string().optional(),maxDaily:y.string().optional()}).strict()).optional(),maxPerTx:y.string().optional(),maxDaily:y.string().optional()}).strict(),Nv=y.object({provider:y.object({id:y.union([y.literal(`embedded-keystore`),y.literal(`local-socket-signer`),y.literal(`alchemy`),y.literal(`turnkey`),y.literal(`wallet-standard`),y.literal(`privy`)]).optional()}).strict().optional(),execution:y.object({mode:y.union([y.literal(`manual`),y.literal(`autonomous`)]).optional()}).strict().optional(),approvalAuth:y.object({mode:y.union([y.literal(`none`),y.literal(`webauthn`)]).optional(),challengeTtlSeconds:y.number().int().positive().optional(),grantTtlSeconds:y.number().int().positive().optional()}).strict().optional(),keystore:y.object({enabled:y.boolean().optional(),path:y.string().optional(),chainSupport:y.array(y.literal(`solana`)).optional(),autoLockSeconds:y.number().int().nonnegative().optional(),requirePasskeyForUnlock:y.boolean().optional()}).strict().optional(),runtime:y.object({enabled:y.boolean().optional(),mode:y.union([y.literal(`managed`),y.literal(`external`)]).optional(),runtime:y.union([y.literal(`external-docker`),y.literal(`external-custom`)]).optional(),external:y.object({kind:y.union([y.literal(`docker`),y.literal(`custom`)]).optional()}).strict().optional(),auth:y.object({mode:y.union([y.literal(`jwt-bootstrap`),y.literal(`static-token-compat`)]).optional(),bootstrapUrl:y.string().optional()}).strict().optional(),source:y.object({ref:y.string().optional()}).strict().optional(),chains:y.array(y.literal(`solana`)).optional(),service:y.object({host:y.string().optional(),port:y.number().int().min(1).max(65535).optional()}).strict().optional(),install:y.object({enabled:y.boolean().optional(),version:y.string().optional()}).strict().optional(),policy:y.object({capsEnabled:y.boolean().optional(),directSigning:y.boolean().optional(),skillsEnabled:y.boolean().optional(),solana:Mv.optional()}).strict().optional(),toolAccess:y.object({mode:y.union([y.literal(`owner-only`),y.literal(`allowlist`),y.literal(`all`)]).optional(),allowAgents:y.array(y.string()).optional(),allowSkills:y.array(y.string()).optional(),denySkills:y.array(y.string()).optional(),allowSources:y.array(y.string()).optional()}).strict().optional()}).strict().optional()}).strict().optional(),Pv=y.object({$schema:y.string().optional(),meta:y.object({lastTouchedVersion:y.string().optional(),lastTouchedAt:Q_.optional()}).strict().optional(),env:y.object({shellEnv:y.object({enabled:y.boolean().optional(),timeoutMs:y.number().int().nonnegative().optional()}).strict().optional(),vars:y.record(y.string(),y.string()).optional()}).catchall(y.string()).optional(),wizard:y.object({lastRunAt:y.string().optional(),lastRunVersion:y.string().optional(),lastRunCommit:y.string().optional(),lastRunCommand:y.string().optional(),lastRunMode:y.union([y.literal(`local`),y.literal(`remote`)]).optional()}).strict().optional(),diagnostics:y.object({enabled:y.boolean().optional(),flags:y.array(y.string()).optional(),otel:y.object({enabled:y.boolean().optional(),endpoint:y.string().optional(),protocol:y.union([y.literal(`http/protobuf`),y.literal(`grpc`)]).optional(),headers:y.record(y.string(),y.string()).optional(),serviceName:y.string().optional(),traces:y.boolean().optional(),metrics:y.boolean().optional(),logs:y.boolean().optional(),sampleRate:y.number().min(0).max(1).optional(),flushIntervalMs:y.number().int().nonnegative().optional()}).strict().optional(),prometheus:y.object({enabled:y.boolean().optional(),path:y.string().optional(),requireAuth:y.boolean().optional(),includeRuntime:y.boolean().optional()}).strict().optional(),cacheTrace:y.object({enabled:y.boolean().optional(),filePath:y.string().optional(),includeMessages:y.boolean().optional(),includePrompt:y.boolean().optional(),includeSystem:y.boolean().optional()}).strict().optional()}).strict().optional(),logging:y.object({level:y.union([y.literal(`silent`),y.literal(`fatal`),y.literal(`error`),y.literal(`warn`),y.literal(`info`),y.literal(`debug`),y.literal(`trace`)]).optional(),file:y.string().optional(),maxFileBytes:y.number().int().positive().optional(),consoleLevel:y.union([y.literal(`silent`),y.literal(`fatal`),y.literal(`error`),y.literal(`warn`),y.literal(`info`),y.literal(`debug`),y.literal(`trace`)]).optional(),consoleStyle:y.union([y.literal(`pretty`),y.literal(`compact`),y.literal(`json`)]).optional(),redactSensitive:y.union([y.literal(`off`),y.literal(`tools`)]).optional(),redactPatterns:y.array(y.string()).optional()}).strict().optional(),update:y.object({channel:y.union([y.literal(`stable`),y.literal(`beta`),y.literal(`dev`)]).optional(),checkOnStart:y.boolean().optional()}).strict().optional(),browser:y.object({enabled:y.boolean().optional(),evaluateEnabled:y.boolean().optional(),cdpUrl:y.string().optional(),remoteCdpTimeoutMs:y.number().int().nonnegative().optional(),remoteCdpHandshakeTimeoutMs:y.number().int().nonnegative().optional(),color:y.string().optional(),executablePath:y.string().optional(),headless:y.boolean().optional(),noSandbox:y.boolean().optional(),attachOnly:y.boolean().optional(),defaultProfile:y.string().optional(),snapshotDefaults:R_,profiles:y.record(y.string().regex(/^[a-z0-9-]+$/,`Profile names must be alphanumeric with hyphens only`),y.object({cdpPort:y.number().int().min(1).max(65535).optional(),cdpUrl:y.string().optional(),driver:y.union([y.literal(`clawd`),y.literal(`extension`)]).optional(),color:ih}).strict().refine(e=>e.cdpPort||e.cdpUrl,{message:`Profile must set cdpPort or cdpUrl`})).optional()}).strict().optional(),ui:y.object({seamColor:ih.optional(),assistant:y.object({name:y.string().max(50).optional(),avatar:y.string().max(200).optional()}).strict().optional()}).strict().optional(),auth:y.object({profiles:y.record(y.string(),y.object({provider:y.string(),mode:y.union([y.literal(`api_key`),y.literal(`oauth`),y.literal(`token`)]),email:y.string().optional()}).strict()).optional(),order:y.record(y.string(),y.array(y.string())).optional(),cooldowns:y.object({billingBackoffHours:y.number().positive().optional(),billingBackoffHoursByProvider:y.record(y.string(),y.number().positive()).optional(),overloadedBackoffMs:y.number().positive().optional(),overloadedProfileRotations:y.number().nonnegative().optional(),rateLimitedProfileRotations:y.number().nonnegative().optional(),billingMaxHours:y.number().positive().optional(),failureWindowHours:y.number().positive().optional()}).strict().optional()}).strict().optional(),acp:J_,models:Pm,nodeHost:z_,agents:Kh,tools:Wh,bindings:qh,broadcast:Yh,audio:U_,media:y.object({preserveFilenames:y.boolean().optional()}).strict().optional(),messages:I_,commands:L_,approvals:Qh,session:F_,cron:y.object({enabled:y.boolean().optional(),store:y.string().optional(),maxConcurrentRuns:y.number().int().positive().optional(),webhook:y.string().url().refine(e=>/^https?:\/\//iu.test(e),`Must be an http(s) URL`).optional(),webhookToken:y.string().optional().register(V),sessionRetention:y.union([Y_,y.literal(!1)]).optional(),runLog:Z_.optional()}).strict().optional(),hooks:y.object({enabled:y.boolean().optional(),path:y.string().optional(),token:y.string().optional().register(V),defaultSessionKey:y.string().optional(),allowRequestSessionKey:y.boolean().optional(),allowedSessionKeyPrefixes:y.array(y.string()).optional(),allowedAgentIds:y.array(y.string()).optional(),maxBodyBytes:y.number().int().positive().optional(),presets:y.array(y.string()).optional(),transformsDir:y.string().optional(),mappings:y.array(tg).optional(),gmail:og,internal:ag}).strict().optional(),web:y.object({enabled:y.boolean().optional(),heartbeatSeconds:y.number().int().positive().optional(),reconnect:y.object({initialMs:y.number().positive().optional(),maxMs:y.number().positive().optional(),factor:y.number().positive().optional(),jitter:y.number().min(0).max(1).optional(),maxAttempts:y.number().int().min(0).optional()}).strict().optional()}).strict().optional(),channels:M_,discovery:y.object({wideArea:y.object({enabled:y.boolean().optional(),domain:y.string().optional()}).strict().optional(),mdns:y.object({mode:y.enum([`off`,`minimal`,`full`]).optional()}).strict().optional()}).strict().optional(),federation:y.object({offers:y.object({manual:y.array(sv).optional(),skill:y.array(sv.extend({source:y.union([y.literal(`skill`)]).optional(),skillId:y.string().optional()}).strict()).optional()}).strict().optional(),marketplace:y.object({requests:y.object({manual:y.array(Av).optional()}).strict().optional(),deliveryTargets:y.object({local:y.array(wv).optional()}).strict().optional(),orders:y.object({local:y.array(jv).optional()}).strict().optional()}).strict().optional(),bond:y.object({walletId:y.string().optional()}).strict().optional()}).strict().optional(),canvasHost:y.object({enabled:y.boolean().optional(),root:y.string().optional(),port:y.number().int().positive().optional(),liveReload:y.boolean().optional()}).strict().optional(),talk:y.object({provider:y.string().optional(),providers:y.record(y.string(),H_).optional(),voiceId:y.string().optional(),voiceAliases:y.record(y.string(),y.string()).optional(),modelId:y.string().optional(),outputFormat:y.string().optional(),apiKey:H.optional().register(V),interruptOnSpeech:y.boolean().optional()}).strict().optional(),gateway:y.object({port:y.number().int().positive().optional(),channelHealthCheckMinutes:y.number().int().min(0).optional(),mode:y.union([y.literal(`local`),y.literal(`remote`)]).optional(),bind:y.union([y.literal(`auto`),y.literal(`lan`),y.literal(`loopback`),y.literal(`custom`),y.literal(`tailnet`)]).optional(),controlUi:y.object({enabled:y.boolean().optional(),basePath:y.string().optional(),root:y.string().optional(),allowedOrigins:y.array(y.string()).optional(),allowInsecureAuth:y.boolean().optional(),dangerouslyDisableDeviceAuth:y.boolean().optional(),dangerouslyAllowHostHeaderOriginFallback:y.boolean().optional()}).strict().optional(),auth:y.object({mode:y.union([y.literal(`token`),y.literal(`password`),y.literal(`trusted-proxy`)]).optional(),token:y.string().optional().register(V),password:y.string().optional().register(V),allowTailscale:y.boolean().optional(),rateLimit:y.object({maxAttempts:y.number().optional(),windowMs:y.number().optional(),lockoutMs:y.number().optional(),exemptLoopback:y.boolean().optional()}).strict().optional(),trustedProxy:y.object({userHeader:y.string().min(1,`userHeader is required for trusted-proxy mode`),requiredHeaders:y.array(y.string()).optional(),allowUsers:y.array(y.string()).optional()}).strict().optional()}).strict().optional(),trustedProxies:y.array(y.string()).optional(),tools:y.object({deny:y.array(y.string()).optional(),allow:y.array(y.string()).optional()}).strict().optional(),tailscale:y.object({mode:y.union([y.literal(`off`),y.literal(`serve`),y.literal(`funnel`)]).optional(),resetOnExit:y.boolean().optional()}).strict().optional(),remote:y.object({url:y.string().optional(),transport:y.union([y.literal(`ssh`),y.literal(`direct`)]).optional(),token:y.string().optional().register(V),password:y.string().optional().register(V),tlsFingerprint:y.string().optional(),sshTarget:y.string().optional(),sshIdentity:y.string().optional()}).strict().optional(),reload:y.object({mode:y.union([y.literal(`off`),y.literal(`restart`),y.literal(`hot`),y.literal(`hybrid`)]).optional(),debounceMs:y.number().int().min(0).optional()}).strict().optional(),tls:y.object({enabled:y.boolean().optional(),autoGenerate:y.boolean().optional(),certPath:y.string().optional(),keyPath:y.string().optional(),caPath:y.string().optional()}).optional(),http:y.object({endpoints:y.object({chatCompletions:y.object({enabled:y.boolean().optional()}).strict().optional(),responses:y.object({enabled:y.boolean().optional(),maxBodyBytes:y.number().int().positive().optional(),maxUrlParts:y.number().int().nonnegative().optional(),files:y.object({allowUrl:y.boolean().optional(),urlAllowlist:y.array(y.string()).optional(),allowedMimes:y.array(y.string()).optional(),maxBytes:y.number().int().positive().optional(),maxChars:y.number().int().positive().optional(),maxRedirects:y.number().int().nonnegative().optional(),timeoutMs:y.number().int().positive().optional(),pdf:y.object({maxPages:y.number().int().positive().optional(),maxPixels:y.number().int().positive().optional(),minTextChars:y.number().int().nonnegative().optional()}).strict().optional()}).strict().optional(),images:y.object({allowUrl:y.boolean().optional(),urlAllowlist:y.array(y.string()).optional(),allowedMimes:y.array(y.string()).optional(),maxBytes:y.number().int().positive().optional(),maxRedirects:y.number().int().nonnegative().optional(),timeoutMs:y.number().int().positive().optional()}).strict().optional()}).strict().optional()}).strict().optional(),securityHeaders:y.object({strictTransportSecurity:y.union([y.string(),y.literal(!1)]).optional()}).strict().optional()}).strict().optional(),nodes:y.object({browser:y.object({mode:y.union([y.literal(`auto`),y.literal(`manual`),y.literal(`off`)]).optional(),node:y.string().optional()}).strict().optional(),allowCommands:y.array(y.string()).optional(),denyCommands:y.array(y.string()).optional()}).strict().optional(),customBindHost:y.string().optional(),allowRealIpFallback:y.boolean().optional()}).strict().optional(),memory:q_,wallet:Nv,secrets:Om,mcp:y.object({servers:y.record(y.string(),y.record(y.string(),y.unknown())).optional()}).strict().optional(),skills:y.object({allowBundled:y.array(y.string()).optional(),load:y.object({extraDirs:y.array(y.string()).optional(),watch:y.boolean().optional(),watchDebounceMs:y.number().int().min(0).optional()}).strict().optional(),install:y.object({preferBrew:y.boolean().optional(),nodeManager:y.union([y.literal(`npm`),y.literal(`pnpm`),y.literal(`yarn`),y.literal(`bun`)]).optional()}).strict().optional(),marketplace:y.object({allowRegistries:y.array(y.string()).optional()}).strict().optional(),entries:y.record(y.string(),y.object({enabled:y.boolean().optional(),apiKey:H.optional().register(V),env:y.record(y.string(),y.string()).optional(),config:y.record(y.string(),y.unknown()).optional()}).strict()).optional()}).strict().optional(),plugins:y.object({enabled:y.boolean().optional(),allow:y.array(y.string()).optional(),deny:y.array(y.string()).optional(),load:y.object({paths:y.array(y.string()).optional()}).strict().optional(),slots:y.object({memory:y.string().optional()}).strict().optional(),entries:y.record(y.string(),y.object({enabled:y.boolean().optional(),config:y.record(y.string(),y.unknown()).optional(),runtime:y.object({helpers:y.object({sessions:y.object({read:y.boolean().optional()}).strict().optional()}).strict().optional(),adminRpcActions:y.object({allow:y.array(y.object({method:y.union([y.literal(`chat.inject`),y.literal(`push.test`),y.literal(`web.login.start`),y.literal(`web.login.wait`)]).optional(),sources:y.array(y.string()).optional(),requireOperatorApproval:y.boolean().optional()}).strict()).optional()}).strict().optional()}).strict().optional()}).strict()).optional(),installs:y.record(y.string(),y.object(sg).strict()).optional()}).strict().optional()}).strict().superRefine((e,t)=>{let n=e.agents?.list??[];if(n.length===0)return;let r=new Set(n.map(e=>e.id)),i=e.broadcast;if(i){for(let[e,n]of Object.entries(i))if(e!==`strategy`&&Array.isArray(n))for(let i=0;i<n.length;i+=1){let a=n[i];r.has(a)||t.addIssue({code:y.ZodIssueCode.custom,path:[`broadcast`,e,i],message:`Unknown agent id "${a}" (not in agents.list).`})}}}),Fv=new Set;function Iv(e,t){let n=i.resolve(t);return em(n,i.resolve(n,e))}function Lv(e){let t=e.agents?.list;if(!Array.isArray(t)||t.length===0)return[];let n=[];for(let[r,i]of t.entries()){if(!i||typeof i!=`object`)continue;let t=i.identity?.avatar;if(typeof t!=`string`)continue;let a=t.trim();if(a&&!(Xp(a)||Zp(a))){if(a.startsWith(`~`)){n.push({path:`agents.list.${r}.identity.avatar`,message:`identity.avatar must be a workspace-relative path, http(s) URL, or data URI.`});continue}if(Qp(a)&&!$p(a)){n.push({path:`agents.list.${r}.identity.avatar`,message:`identity.avatar must be a workspace-relative path, http(s) URL, or data URI.`});continue}Iv(a,Da(e,i.id??wa(e)))||n.push({path:`agents.list.${r}.identity.avatar`,message:`identity.avatar must stay within the agent workspace.`})}}return n}function Rv(e){let t=sp(e);if(t.length>0)return{ok:!1,issues:t.map(e=>({path:e.path,message:e.message}))};let n=Pv.safeParse(e);if(!n.success)return{ok:!1,issues:n.error.issues.map(e=>({path:e.path.join(`.`),message:e.message}))};let r=ma(n.data);if(r.length>0)return{ok:!1,issues:[{path:`agents.list`,message:ha(r)}]};let i=Lv(n.data);return i.length>0?{ok:!1,issues:i}:{ok:!0,config:n.data}}function zv(e){let t=Rv(e);return t.ok?{ok:!0,config:Qd($d(Yd(t.config)))}:t}function Bv(e){return Hv(e,{applyDefaults:!0})}function Vv(e){return Hv(e,{applyDefaults:!1})}function Hv(e,t){let n=t.applyDefaults?zv(e):Rv(e);if(!n.ok)return{ok:!1,issues:n.issues,warnings:[]};let r=n.config,i=[],a=[],o=T(e)&&Object.prototype.hasOwnProperty.call(e,`plugins`),s=null,c=()=>{if(s)return s;let e=us({config:r,workspaceDir:Da(r,wa(r))??void 0}),t=new Set(e.plugins.map(e=>e.id)),n=go(r.plugins);for(let t of e.diagnostics){let e=t.pluginId?`plugins.entries.${t.pluginId}`:`plugins`;!t.pluginId&&t.message.includes(`plugin path not found`)&&(e=`plugins.load.paths`);let n=`${t.pluginId?`plugin ${t.pluginId}`:`plugin`}: ${t.message}`;t.level===`error`?i.push({path:e,message:n}):a.push({path:e,message:n})}return s={registry:e,knownIds:t,normalizedPlugins:n},s},l=new Set([`defaults`,`modelByChannel`,...Tt]);if(r.channels&&T(r.channels))for(let e of Object.keys(r.channels)){let t=e.trim();if(t){if(!l.has(t)){let{registry:e}=c();for(let t of e.plugins)for(let e of t.channels)l.add(e)}l.has(t)||i.push({path:`channels.${t}`,message:`unknown channel id: ${t}`})}}let u=new Set;for(let e of Tt)u.add(e.toLowerCase());let d=(e,t)=>{if(typeof e!=`string`)return;let n=e.trim();if(!n){i.push({path:t,message:`heartbeat target must not be empty`});return}let r=n.toLowerCase();if(!(r===`last`||r===`none`)&&!kt(n)){if(!u.has(r)){let{registry:e}=c();for(let t of e.plugins)for(let e of t.channels){let t=e.trim();t&&u.add(t.toLowerCase())}}u.has(r)||i.push({path:t,message:`unknown heartbeat target: ${e}`})}};if(d(r.agents?.defaults?.heartbeat?.target,`agents.defaults.heartbeat.target`),Array.isArray(r.agents?.list))for(let[e,t]of r.agents.list.entries())d(t?.heartbeat?.target,`agents.list.${e}.heartbeat.target`);if(!o)return i.length>0?{ok:!1,issues:i,warnings:a}:{ok:!0,config:r,warnings:a};let{registry:f,knownIds:p,normalizedPlugins:m}=c(),h=(e,t,n)=>{if(!Fv.has(t)){if(n?.warnOnly){a.push({path:e,message:`plugin not found: ${t} (stale config entry ignored; remove it from plugins config)`});return}i.push({path:e,message:`plugin not found: ${t}`})}},g=r.plugins,_=g?.entries;if(_&&T(_))for(let e of Object.keys(_))p.has(e)||h(`plugins.entries.${e}`,e,{warnOnly:!0});let v=g?.allow??[];for(let e of v)typeof e!=`string`||!e.trim()||p.has(e)||h(`plugins.allow`,e);let ee=g?.deny??[];for(let e of ee)typeof e!=`string`||!e.trim()||p.has(e)||h(`plugins.deny`,e);let te=m.slots.memory;typeof te==`string`&&te.trim()&&!p.has(te)&&h(`plugins.slots.memory`,te);let y=null,ne=new Set;for(let e of f.plugins){let t=e.id;if(ne.has(t))continue;ne.add(t);let n=m.entries[t],o=!!n?.config,s=yo({id:t,origin:e.origin,config:m,rootConfig:r}),c=s.enabled,l=s.reason;if(c){let n=bo({id:t,kind:e.kind,slot:te,selectedId:y});n.enabled||(c=!1,l=n.reason),n.selected&&e.kind===`memory`&&(y=t)}if(c||o)if(e.configSchema){let r=Gp({schema:e.configSchema,cacheKey:e.schemaCacheKey??e.manifestPath??t,value:n?.config??{}});if(!r.ok)for(let e of r.errors)i.push({path:`plugins.entries.${t}.config`,message:`invalid config: ${e}`})}else i.push({path:`plugins.entries.${t}`,message:`plugin schema missing for ${t}`});!c&&o&&a.push({path:`plugins.entries.${t}`,message:`plugin disabled (${l??`disabled`}) but config is present`})}return i.length>0?{ok:!1,issues:i,warnings:a}:{ok:!0,config:r,warnings:a}}const Uv=/^v?(\d+)\.(\d+)\.(\d+)(?:-(\d+))?/,Wv=/^v?(20\d{2})\.(\d{1,2})\.(\d{1,2})(?:-(\d+))?$/;function Gv(e){if(!e)return null;let t=e.trim().match(Uv);if(!t)return null;let[,n,r,i,a]=t,o=e.trim().match(Wv);return{major:Number.parseInt(n,10),minor:Number.parseInt(r,10),patch:Number.parseInt(i,10),revision:a?Number.parseInt(a,10):0,flavor:o?`calendar`:`semver`}}function Kv(e,t){let n=Gv(e),r=Gv(t);return!n||!r?null:n.flavor===r.flavor?n.major===r.major?n.minor===r.minor?n.patch===r.patch?n.revision===r.revision?0:n.revision<r.revision?-1:1:n.patch<r.patch?-1:1:n.minor<r.minor?-1:1:n.major<r.major?-1:1:0}const qv=[`OPENAI_API_KEY`,`ANTHROPIC_API_KEY`,`ANTHROPIC_OAUTH_TOKEN`,`GEMINI_API_KEY`,`ZAI_API_KEY`,`OPENROUTER_API_KEY`,`AI_GATEWAY_API_KEY`,`MINIMAX_API_KEY`,`SYNTHETIC_API_KEY`,`ELEVENLABS_API_KEY`,`TELEGRAM_BOT_TOKEN`,`DISCORD_BOT_TOKEN`,`SLACK_BOT_TOKEN`,`SLACK_APP_TOKEN`,`FASED_GATEWAY_TOKEN`,`FASED_GATEWAY_PASSWORD`],Jv=[];function Yv(e){let t=e,n=[];for(let e of Jv){let r=!!(t.plugins?.entries&&e in t.plugins.entries),i=!!(t.plugins?.installs&&e in t.plugins.installs),a=Array.isArray(t.plugins?.allow)&&t.plugins.allow.includes(e),o=t.plugins?.slots?.memory===e;!r&&!i&&!a&&!o||(t=na(t,e).config,n.push(e))}return{config:t,removedPluginIds:n}}const Xv=/^(?<policyPath>[a-z0-9_.-]+)\s*=\s*"open"\s+requires\s+(?<allowPath>[a-z0-9_.-]+)(?:\s+\(or\s+[a-z0-9_.-]+\))?\s+to include "\*"$/i,Zv=new Set,Qv=new Map;async function $v(e,t){let n=Qv.get(e)??Promise.resolve(),r,i=new Promise(e=>{r=e});Qv.set(e,i),await n.catch(()=>void 0);try{return await t()}finally{r?.(),Qv.get(e)===i&&Qv.delete(e)}}async function ey(e,t){return await $v(e,async()=>await Kr(e,{retries:{retries:160,factor:1.08,minTimeout:10,maxTimeout:250,randomize:!0},stale:12e4},t))}function ty(e){return _.createHash(`sha256`).update(e??``).digest(`hex`)}function ny(e,t){let n=t.match(Xv),r=n?.groups?.policyPath?.trim(),i=n?.groups?.allowPath?.trim();return!r||!i?`Config validation failed: ${e}: ${t}`:[`Config validation failed: ${e}`,``,`Configuration mismatch: ${r} is "open", but ${i} does not include "*".`,``,`Fix with:`,` fased config set ${i} '["*"]'`,``,`Or switch policy:`,` fased config set ${r} "pairing"`].join(`
3
+ `)}function ry(e){return/^[0-9]+$/.test(e)}function iy(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function ay(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const oy=Symbol(`write-pruned-object`);function sy(e,t,n){if(n>=t.length)return{changed:!1,value:e};let r=t[n],i=n===t.length-1;if(Array.isArray(e)){if(!ry(r))return{changed:!1,value:e};let a=Number.parseInt(r,10);if(!Number.isFinite(a)||a<0||a>=e.length)return{changed:!1,value:e};if(i){let t=e.slice();return t.splice(a,1),{changed:!0,value:t}}let o=sy(e[a],t,n+1);if(!o.changed)return{changed:!1,value:e};let s=e.slice();return o.value===oy?s.splice(a,1):s[a]=o.value,{changed:!0,value:s}}if(ia(r)||!iy(e)||!ay(e,r))return{changed:!1,value:e};if(i){let t={...e};return delete t[r],{changed:!0,value:Object.keys(t).length===0?oy:t}}let a=sy(e[r],t,n+1);if(!a.changed)return{changed:!1,value:e};let o={...e};return a.value===oy?delete o[r]:o[r]=a.value,{changed:!0,value:Object.keys(o).length===0?oy:o}}function cy(e,t){if(t.length===0)return{changed:!1,next:e};let n=sy(e,t,0);return n.changed?n.value===oy?{changed:!0,next:{}}:iy(n.value)?{changed:!0,next:uy(n.value)}:{changed:!1,next:e}:{changed:!1,next:e}}function ly(e){if(typeof e.hash==`string`){let t=e.hash.trim();if(t)return t}return typeof e.raw==`string`?ty(e.raw):null}function uy(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:e}function $(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function dy(e){if(!$(e))return!1;let t=e.meta;return $(t)}function fy(e){if(!$(e))return null;let t=e.gateway;if(!$(t)||typeof t.mode!=`string`)return null;let n=t.mode.trim();return n.length>0?n:null}function py(e){return structuredClone(e)}function my(e,t){if(!$(e)||!$(t))return py(t);let n={},r=new Set([...Object.keys(e),...Object.keys(t)]);for(let i of r){let r=i in e;if(!(i in t)){n[i]=null;continue}let a=t[i];if(!r){n[i]=py(a);continue}let o=e[i];if($(o)&&$(a)){let e=my(o,a);if($(e)&&Object.keys(e).length===0)continue;n[i]=e;continue}u(o,a)||(n[i]=py(a))}return n}function hy(e,t,n){if(typeof e==`string`){ff(e)&&n.set(t,e);return}if(Array.isArray(e)){e.forEach((e,r)=>{hy(e,`${t}[${r}]`,n)});return}if($(e))for(let[r,i]of Object.entries(e))hy(i,t?`${t}.${r}`:r,n)}function gy(e,t,n,r){if(Array.isArray(e)&&Array.isArray(t)){let i=Math.max(e.length,t.length);for(let a=0;a<i;a+=1){let i=n?`${n}[${a}]`:`[${a}]`;if(a>=e.length||a>=t.length){r.add(i);continue}gy(e[a],t[a],i,r)}return}if($(e)&&$(t)){let i=new Set([...Object.keys(e),...Object.keys(t)]);for(let a of i){let i=n?`${n}.${a}`:a,o=a in e;if(!(a in t)||!o){r.add(i);continue}gy(e[a],t[a],i,r)}return}u(e,t)||r.add(n)}function _y(e){if(!e)return``;if(e.endsWith(`]`)){let t=e.lastIndexOf(`[`);return t>0?e.slice(0,t):``}let t=e.lastIndexOf(`.`);return t>=0?e.slice(0,t):``}function vy(e,t){if(t.has(e))return!0;let n=_y(e);for(;n;){if(t.has(n))return!0;n=_y(n)}return t.has(``)}function yy(e,t,n,r){if(typeof e==`string`){if(!vy(t,r)){let e=n.get(t);if(e!==void 0)return e}return e}if(Array.isArray(e)){let i=!1,a=e.map((e,a)=>{let o=yy(e,`${t}[${a}]`,n,r);return o!==e&&(i=!0),o});return i?a:e}if($(e)){let i=!1,a={};for(let[o,s]of Object.entries(e)){let e=yy(s,t?`${t}.${o}`:o,n,r);e!==s&&(i=!0),a[o]=e}return i?a:e}return e}function by(e,t){return i.join(x(e,t),`logs`,`config-audit.jsonl`)}function xy(e){let t=[];return e.existsBefore?(typeof e.previousBytes==`number`&&typeof e.nextBytes==`number`&&e.previousBytes>=512&&e.nextBytes<Math.floor(e.previousBytes*.5)&&t.push(`size-drop:${e.previousBytes}->${e.nextBytes}`),e.hasMetaBefore||t.push(`missing-meta-before-write`),e.gatewayModeBefore&&!e.gatewayModeAfter&&t.push(`gateway-mode-removed`),t):t}async function Sy(e,t){try{let n=by(e.env,e.homedir);await e.fs.promises.mkdir(i.dirname(n),{recursive:!0,mode:448}),await e.fs.promises.appendFile(n,`${JSON.stringify(t)}\n`,{encoding:`utf-8`,mode:384})}catch{}}function Cy(e,t){if(!e||typeof e!=`object`)return;let n=e.gateway;!n||typeof n!=`object`||`token`in n&&t.warn(`Config uses "gateway.token". This key is ignored; use "gateway.auth.token" instead.`)}function wy(e){let t=new Date().toISOString();return{...e,meta:{...e.meta,lastTouchedVersion:Yn,lastTouchedAt:t}}}function Ty(e,t){let n=e.meta?.lastTouchedVersion;if(!n)return;let r=Kv(Yn,n);r!==null&&r<0&&t.warn(`Config was last written by a newer FasedAgent (${n}); current version is ${Yn}.`)}function Ey(e){return e.configPath?e.configPath:Ge(e.env,x(e.env,e.homedir))}function Dy(e={}){return{fs:e.fs??n,json5:e.json5??m,env:e.env??process.env,homedir:e.homedir??(()=>b(e.env??process.env,p.homedir)),configPath:e.configPath??``,logger:e.logger??console}}function Oy(e){e===process.env&&Pr({quiet:!0})}function ky(e,t=m){try{return{ok:!0,parsed:t.parse(e)}}catch(e){return{ok:!1,error:String(e)}}}function Ay(e,t,n){return Ef(e,t,{readFile:e=>n.fs.readFileSync(e,`utf-8`),readFileWithGuards:({includePath:e,resolvedPath:t,rootRealDir:r})=>wf({includePath:e,resolvedPath:t,rootRealDir:r,ioFs:n.fs}),parseJson:e=>n.json5.parse(e)})}function jy(e,t){return e&&typeof e==`object`&&`env`in e&&vf(e,t),{resolvedConfigRaw:mf(e,t),envSnapshotForRestore:{...t}}}function My(e={}){let t=Dy(e),n=Ey(t),r=(t.configPath?[n]:Ke(t.env,t.homedir)).find(e=>t.fs.existsSync(e))??n;function a(){try{if(Oy(t.env),!t.fs.existsSync(r))return ui(t.env)&&!di(t.env)&&li({enabled:!0,env:t.env,expectedKeys:qv,logger:t.logger,timeoutMs:fi(t.env)}),{};let e=t.fs.readFileSync(r,`utf-8`),{resolvedConfigRaw:n}=jy(Ay(t.json5.parse(e),r,t),t.env);if(Cy(n,t.logger),typeof n!=`object`||!n)return{};let i=ma(n,{env:t.env,homedir:t.homedir});if(i.length>0)throw new ua(i);let a=Yv(n),o=Rp(a.config),s=Bv(o.config);if(!s.ok){let e=s.issues.map(e=>`- ${e.path||`<root>`}: ${e.message}`).join(`
4
+ `);Zv.has(r)||(Zv.add(r),t.logger.error(`Invalid config at ${r}:\\n${e}`));let n=Error(`Invalid config`);throw n.code=`INVALID_CONFIG`,n.details=e,n}if(s.warnings.length>0){let e=s.warnings.map(e=>`- ${e.path||`<root>`}: ${e.message}`).join(`
5
+ `);t.logger.warn(`Config warnings:\n${e}`)}Ty(s.config,t.logger);let c=Zd(Qd(nf(tf($d(Yd(ef(Jd(s.config))))))));Pp(c),Op(c);let l=ma(c,{env:t.env,homedir:t.homedir});if(l.length>0)throw new ua(l);vf(c,t.env),(ui(t.env)||c.env?.shellEnv?.enabled===!0)&&!di(t.env)&&li({enabled:!0,env:t.env,expectedKeys:qv,logger:t.logger,timeoutMs:c.env?.shellEnv?.timeoutMs??fi(t.env)});let d=Ny.get(r),f=tr(c,()=>d??_.randomBytes(32).toString(`hex`)),p=Rp(f.config),m=p.config,h=[...new Set([...o.repairedPluginIds,...p.repairedPluginIds])].toSorted((e,t)=>e.localeCompare(t));if(a.removedPluginIds.length>0){let e=`${r}:legacy-removed-plugins`;Iy.has(e)||(Iy.add(e),u(m,{expectedConfigPath:r}).catch(()=>{}).finally(()=>{Iy.delete(e)}))}if(h.length>0){let e=`${r}:installed-plugin-allowlist`;Ly.has(e)||(Ly.add(e),t.logger.warn(`Pinned installed plugins in plugins.allow: ${h.join(`, `)}`),u(m,{expectedConfigPath:r}).catch(e=>{t.logger.warn(`Failed to persist repaired plugins.allow at ${r}: ${String(e)}`)}).finally(()=>{Ly.delete(e)}))}return f.generatedSecret?(Ny.set(r,f.generatedSecret),Py.has(r)||(Py.add(r),u(m,{expectedConfigPath:r}).then(()=>{Ny.delete(r),Fy.delete(r)}).catch(e=>{Fy.has(r)||(Fy.add(r),t.logger.warn(`Failed to persist auto-generated commands.ownerDisplaySecret at ${r}: ${String(e)}`))}).finally(()=>{Py.delete(r)}))):(Ny.delete(r),Fy.delete(r)),Vp(m)}catch(e){if(e instanceof ua)throw t.logger.error(e.message),e;return e?.code===`INVALID_CONFIG`||t.logger.error(`Failed to read config at ${r}`,e),{}}}async function o(){if(Oy(t.env),!t.fs.existsSync(r)){let e=ty(null);return{snapshot:{path:r,exists:!1,raw:null,parsed:{},resolved:{},valid:!0,config:Xd(Zd(Qd(nf(tf($d(Yd(Jd({})))))))),hash:e,issues:[],warnings:[],legacyIssues:[]}}}try{let e=t.fs.readFileSync(r,`utf-8`),n=ty(e),i=ky(e,t.json5);if(!i.ok)return{snapshot:{path:r,exists:!0,raw:e,parsed:{},resolved:{},valid:!1,config:{},hash:n,issues:[{path:``,message:`JSON5 parse failed: ${i.error}`}],warnings:[],legacyIssues:[]}};let a;try{a=Ay(i.parsed,r,t)}catch(t){let a=t instanceof R?t.message:`Include resolution failed: ${String(t)}`;return{snapshot:{path:r,exists:!0,raw:e,parsed:i.parsed,resolved:uy(i.parsed),valid:!1,config:uy(i.parsed),hash:n,issues:[{path:``,message:a}],warnings:[],legacyIssues:[]}}}let o;try{o=jy(a,t.env)}catch(t){let o=t instanceof lf?t.message:`Env var substitution failed: ${String(t)}`;return{snapshot:{path:r,exists:!0,raw:e,parsed:i.parsed,resolved:uy(a),valid:!1,config:uy(a),hash:n,issues:[{path:``,message:o}],warnings:[],legacyIssues:[]}}}let s=Yv(o.resolvedConfigRaw),c=s.config,l=sp(c),d=Rp(c),f=Bv(d.config);if(!f.ok)return{snapshot:{path:r,exists:!0,raw:e,parsed:i.parsed,resolved:uy(c),valid:!1,config:uy(c),hash:n,issues:f.issues,warnings:f.warnings,legacyIssues:l}};Ty(f.config,t.logger);let p=Pp(Xd(Zd(Qd($d(Yd(ef(Jd(f.config))))))));Op(p);let m=Rp(p),h=m.config,g=[...new Set([...d.repairedPluginIds,...m.repairedPluginIds])].toSorted((e,t)=>e.localeCompare(t)),_=uy(d.config);if(s.removedPluginIds.length>0){let e=`${r}:legacy-removed-plugins`;Iy.has(e)||(Iy.add(e),u(h,{expectedConfigPath:r}).catch(()=>{}).finally(()=>{Iy.delete(e)}))}if(g.length>0){let e=`${r}:installed-plugin-allowlist`;Ly.has(e)||(Ly.add(e),u(h,{expectedConfigPath:r}).catch(()=>{}).finally(()=>{Ly.delete(e)}))}return{snapshot:{path:r,exists:!0,raw:e,parsed:i.parsed,resolved:_,valid:!0,config:h,hash:n,issues:[],warnings:f.warnings,legacyIssues:l},envSnapshotForRestore:o.envSnapshotForRestore}}catch(e){let n=e,i;if(n?.code===`EACCES`){let n=process.getuid?.(),a=typeof n==`number`?String(n):`$(id -u)`;i=[`read failed: ${String(e)}`,``,`Config file is not readable by the current process. If running in a container`,`or 1-click deployment, fix ownership with:`,` chown ${a} "${r}"`,`Then restart the gateway.`].join(`
6
+ `),t.logger.error(i)}else i=`read failed: ${String(e)}`;return{snapshot:{path:r,exists:!0,raw:null,parsed:{},resolved:{},valid:!1,config:{},hash:ty(null),issues:[{path:``,message:i}],warnings:[],legacyIssues:[]}}}}async function s(){return(await o()).snapshot}async function c(){let e=await o();return{snapshot:e.snapshot,writeOptions:{envSnapshotForRestore:e.envSnapshotForRestore,expectedConfigPath:r}}}async function l(e,n={}){let a=e,{snapshot:s}=await o(),c=null,l=null;if(s.valid&&s.exists){let n=my(s.config,e);a=up(s.resolved,n);try{let n=Ef(s.parsed,r,{readFile:e=>t.fs.readFileSync(e,`utf-8`),readFileWithGuards:({includePath:e,resolvedPath:n,rootRealDir:r})=>wf({includePath:e,resolvedPath:n,rootRealDir:r,ioFs:t.fs}),parseJson:e=>t.json5.parse(e)}),i=new Map;hy(n,``,i),i.size>0&&(c=i,l=new Set,gy(s.config,e,``,l))}catch{c=null}}let u=Vv(a);if(!u.ok){let e=u.issues[0],t=e?.path?e.path:`<root>`,n=e?.message??`invalid`;throw Error(ny(t,n))}if(u.warnings.length>0){let e=u.warnings.map(e=>`- ${e.path}: ${e.message}`).join(`
7
+ `);t.logger.warn(`Config warnings:\n${e}`)}let d=u.config;try{if(t.fs.existsSync(r)){let e=ky(await t.fs.promises.readFile(r,`utf-8`),t.json5);if(e.ok){let r=n.envSnapshotForRestore??t.env;d=sf(d,e.parsed,r)}}}catch{}let f=i.dirname(r);await t.fs.promises.mkdir(f,{recursive:!0,mode:448});let p=c&&l?yy(d,``,c,l):d;if(n.unsetPaths?.length)for(let e of n.unsetPaths){if(!Array.isArray(e)||e.length===0)continue;let t=cy(p,e);t.changed&&(p=t.next)}let m=wy(p),h=JSON.stringify(m,null,2).trimEnd().concat(`
8
+ `),g=ty(h),v=ly(s),ee=l?.size,te=typeof s.raw==`string`?Buffer.byteLength(s.raw,`utf-8`):null,y=Buffer.byteLength(h,`utf-8`),ne=dy(s.parsed),re=dy(m),ie=fy(s.resolved),ae=fy(m),oe=xy({existsBefore:s.exists,previousBytes:te,nextBytes:y,hasMetaBefore:ne,gatewayModeBefore:ie,gatewayModeAfter:ae}),se=()=>{if(t.env.FASED_SUPPRESS_CONFIG_OVERWRITE_LOG===`1`||!s.exists)return;let e=t.env.VITEST===`true`,n=t.env.FASED_TEST_CONFIG_OVERWRITE_LOG===`1`;if(e&&!n)return;let i=typeof ee==`number`?`, changedPaths=${ee}`:``;t.logger.warn(`Config overwrite: ${r} (sha256 ${v??`unknown`} -> ${g}, backup=${r}.bak${i})`)},ce=()=>{if(t.env.FASED_SUPPRESS_CONFIG_OVERWRITE_LOG===`1`||oe.length===0)return;let e=t.env.VITEST===`true`,n=t.env.FASED_TEST_CONFIG_WRITE_ANOMALY_LOG===`1`;e&&!n||t.logger.warn(`Config write anomaly: ${r} (${oe.join(`, `)})`)},le={ts:new Date().toISOString(),source:`config-io`,event:`config.write`,configPath:r,pid:process.pid,ppid:process.ppid,cwd:process.cwd(),argv:process.argv.slice(0,8),execArgv:process.execArgv.slice(0,8),watchMode:t.env.FASED_WATCH_MODE===`1`,watchSession:typeof t.env.FASED_WATCH_SESSION==`string`&&t.env.FASED_WATCH_SESSION.trim().length>0?t.env.FASED_WATCH_SESSION.trim():null,watchCommand:typeof t.env.FASED_WATCH_COMMAND==`string`&&t.env.FASED_WATCH_COMMAND.trim().length>0?t.env.FASED_WATCH_COMMAND.trim():null,existsBefore:s.exists,previousHash:v??null,nextHash:g,previousBytes:te,nextBytes:y,changedPathCount:typeof ee==`number`?ee:null,hasMetaBefore:ne,hasMetaAfter:re,gatewayModeBefore:ie,gatewayModeAfter:ae,suspicious:oe},ue=async(e,n)=>{let r=n&&typeof n==`object`&&`code`in n&&typeof n.code==`string`?n.code:void 0,i=n&&typeof n==`object`&&`message`in n&&typeof n.message==`string`?n.message:void 0;await Sy(t,{...le,result:e,nextHash:e===`failed`?null:le.nextHash,nextBytes:e===`failed`?null:le.nextBytes,errorCode:r,errorMessage:i})},de=i.join(f,`${i.basename(r)}.${process.pid}.${_.randomUUID()}.tmp`);try{await t.fs.promises.writeFile(de,h,{encoding:`utf-8`,mode:384}),t.fs.existsSync(r)&&(await ga(r,t.fs.promises),await t.fs.promises.copyFile(r,`${r}.bak`).catch(()=>{}));try{await t.fs.promises.rename(de,r)}catch(e){let n=e.code;if(n===`EPERM`||n===`EEXIST`){await t.fs.promises.copyFile(de,r),await t.fs.promises.chmod(r,384).catch(()=>{}),await t.fs.promises.unlink(de).catch(()=>{}),se(),ce(),await ue(`copy-fallback`);return}throw await t.fs.promises.unlink(de).catch(()=>{}),e}se(),ce(),await ue(`rename`)}catch(e){throw await ue(`failed`,e),e}}async function u(e,t={}){await ey(r,async()=>{await l(e,t)})}async function d(e){return await ey(r,async()=>{let t=await o();if(!t.snapshot.valid)throw Error(`Config update transaction refused an invalid config snapshot`);let n=await e(structuredClone(t.snapshot.config),t.snapshot),i=n.write!==!1;return i&&await l(n.config,{envSnapshotForRestore:t.envSnapshotForRestore,expectedConfigPath:r}),{config:i?n.config:t.snapshot.config,result:n.result,written:i}})}return{configPath:r,loadConfig:a,readConfigFileSnapshot:s,readConfigFileSnapshotForWrite:c,updateConfigFile:d,writeConfigFile:u}}const Ny=new Map,Py=new Set,Fy=new Set,Iy=new Set,Ly=new Set;async function Ry(){return await My().readConfigFileSnapshot()}function zy(e,t){return t<=0?``:e.repeat(t)}function By(e,t,n){let r=Rt(e);if(r>=t)return e;let i=t-r;if(n===`right`)return`${zy(` `,i)}${e}`;if(n===`center`){let t=Math.floor(i/2),n=i-t;return`${zy(` `,t)}${e}${zy(` `,n)}`}return`${e}${zy(` `,i)}`}function Vy(e,t){if(t<=0)return[e];let n=[];for(let t=0;t<e.length;){if(e[t]===`\x1B`){if(e[t+1]===`[`){let r=t+2;for(;r<e.length;){let t=e[r];if(t===`m`)break;if(t&&t>=`0`&&t<=`9`){r+=1;continue}if(t===`;`){r+=1;continue}break}if(e[r]===`m`){n.push({kind:`ansi`,value:e.slice(t,r+1)}),t=r+1;continue}}if(e[t+1]===`]`&&e.slice(t+2,t+5)===`8;;`){let r=e.indexOf(`\x1B\\`,t+5);if(r>=0){n.push({kind:`ansi`,value:e.slice(t,r+2)}),t=r+2;continue}}}let r=e.codePointAt(t);if(!r)break;let i=String.fromCodePoint(r);n.push({kind:`char`,value:i}),t+=i.length}let r=n.findIndex(e=>e.kind===`char`);if(r<0)return[e];let i=-1;for(let e=n.length-1;e>=0;--e)if(n[e]?.kind===`char`){i=e;break}let a=n.slice(0,r).filter(e=>e.kind===`ansi`).map(e=>e.value).join(``),o=n.slice(i+1).filter(e=>e.kind===`ansi`).map(e=>e.value).join(``),s=n.slice(r,i+1),c=[],l=e=>e===` `||e===` `||e===`/`||e===`-`||e===`_`||e===`.`,u=e=>e===` `||e===` `,d=!1,f=[],p=0,m=null,h=e=>(e??f).map(e=>e.value).join(``),g=e=>e.reduce((e,t)=>e+(t.kind===`char`?1:0),0),_=e=>{let t=e.replace(/\s+$/,``);t.trim().length!==0&&c.push(t)},v=e=>{if(f.length===0)return;if(e==null||e<=0){_(h()),f.length=0,p=0,m=null;return}let t=f.slice(0,e),n=f.slice(e);for(_(h(t));n.length>0&&n[0]?.kind===`char`&&u(n[0].value);)n.shift();f.length=0,f.push(...n),p=g(f),m=null};for(let e of s){if(e.kind===`ansi`){f.push(e);continue}let n=e.value;if(!(d&&(d=!1,n===`
9
9
  `))){if(n===`
10
- `||n===`\r`){v(f.length),n===`\r`&&(d=!0);continue}p+1>t&&p>0&&v(m),f.push(e),p+=1,l(n)&&(m=f.length)}}return v(f.length),c.length?!a&&!o?c:c.map(e=>e&&`${a}${e}${o}`):[``]}function Oy(e){if(e!=null&&!(!Number.isFinite(e)||e<=0))return Math.floor(e)}function ky(e){let t=e.rows.map(e=>{let t={};for(let[n,r]of Object.entries(e))t[n]=Cn(r);return t}),n=e.border??`unicode`;if(n===`none`){let n=e.columns;return`${[n.map(e=>e.header).join(` | `),...t.map(e=>n.map(t=>e[t.key]??``).join(` | `))].join(`
11
- `)}\n`}let r=Math.max(0,e.padding??1),i=e.columns,a=i.map(e=>({headerW:Rt(e.header),cellW:Math.max(0,...t.map(t=>Rt(t[e.key]??``)))})),o=i.map((e,t)=>{let n=a[t],i=Math.max(n?.headerW??0,n?.cellW??0)+r*2,o=e.maxWidth?Math.min(i,e.maxWidth):i;return Math.max(e.minWidth??3,o)}),s=Oy(e.width),c=i.length+1,l=o.reduce((e,t)=>e+t,0)+c,u=i.map((e,t)=>Math.max(e.minWidth??3,(a[t]?.headerW??0)+r*2,3)),d=i.map((e,t)=>Math.max((a[t]?.headerW??0)+r*2,3));if(s&&l>s){let e=l-s,t=i.map((e,t)=>({i:t,w:o[t]??0})).filter(({i:e})=>!!i[e]?.flex).toSorted((e,t)=>t.w-e.w).map(e=>e.i),n=i.map((e,t)=>({i:t,w:o[t]??0})).filter(({i:e})=>!i[e]?.flex).toSorted((e,t)=>t.w-e.w).map(e=>e.i),r=(t,n)=>{for(;e>0;){let r=!1;for(let i of t)if(!((o[i]??0)<=(n[i]??0))&&(o[i]=(o[i]??0)-1,--e,r=!0,e<=0))break;if(!r)break}};r(t,u),r(t,d),r(n,u),r(n,d)}if(s){let e=i.length+1,t=s-(o.reduce((e,t)=>e+t,0)+e);if(t>0){let e=i.map((e,t)=>({c:e,i:t})).filter(({c:e})=>!!e.flex).map(({i:e})=>e);if(e.length>0){let n=i.map(e=>typeof e.maxWidth==`number`&&e.maxWidth>0?Math.floor(e.maxWidth):1/0);for(;t>0;){let r=!1;for(let i of e)if(!((o[i]??0)>=(n[i]??1/0))&&(o[i]=(o[i]??0)+1,--t,r=!0,t<=0))break;if(!r)break}}}}let f=n===`ascii`?{tl:`+`,tr:`+`,bl:`+`,br:`+`,h:`-`,v:`|`,t:`+`,ml:`+`,m:`+`,mr:`+`,b:`+`}:{tl:`┌`,tr:`┐`,bl:`└`,br:`┘`,h:`─`,v:`│`,t:`┬`,ml:`├`,m:`┼`,mr:`┤`,b:`┴`},p=(e,t,n)=>`${e}${o.map(e=>Ty(f.h,e)).join(t)}${n}`,m=e=>Math.max(1,o[e]-r*2),h=Ty(` `,r),g=(e,t=!1)=>{let n=i.map(n=>t?n.header:e[n.key]??``).map((e,t)=>Dy(e,m(t))),r=Math.max(...n.map(e=>e.length)),a=[];for(let e=0;e<r;e+=1){let t=n.map((t,n)=>`${h}${Ey(t[e]??``,m(n),i[n]?.align??`left`)}${h}`);a.push(`${f.v}${t.join(f.v)}${f.v}`)}return a},_=[];_.push(p(f.tl,f.t,f.tr)),_.push(...g({},!0)),_.push(p(f.ml,f.m,f.mr));for(let e of t)_.push(...g(e,!1));return _.push(p(f.bl,f.b,f.br)),`${_.join(`
12
- `)}\n`}function Ay(e){let t=e?Number.parseInt(e,10)*1e3:void 0;return t!==void 0&&(Number.isNaN(t)||t<=0)?(Pt.error(`--timeout must be a positive integer (seconds)`),Pt.exit(1),null):t}async function jy(){return await we({moduleUrl:import.meta.url,argv1:process.argv[1],cwd:process.cwd()})??process.cwd()}function My(e){let t=e.sha?e.sha.slice(0,8):null,n=e.branch&&e.branch!==`HEAD`?e.branch:null,r=e.tag;return[n??(r?`detached`:`git`),r?`tag ${r}`:null,t?`@ ${t}`:null].filter(Boolean).join(` · `)}async function Ny(e){let t=Ay(e.timeout);if(t===null)return;let n=await jy(),r=await wy(),i=r.valid?mn(r.config.update?.channel):null,a=await zn({root:n,timeoutMs:t??3500,fetchGit:!0,includeRegistry:!0}),o=vn({configChannel:i,installKind:a.installKind,gitTag:a.git?.tag??null,gitBranch:a.git?.branch??null}),s=o.label,c=a.installKind===`git`?My({branch:a.git?.branch??null,tag:a.git?.tag??null,sha:a.git?.sha??null}):null,l=Xn(a,{channel:o.channel}),u=Qn(a,{channel:o.channel}).replace(/^Update:\s*/i,``);if(e.json){Pt.log(JSON.stringify({update:a,channel:{value:o.channel,source:o.source,label:s,config:i},availability:l},null,2));return}let d=Math.max(60,(process.stdout.columns??120)-1),f=[{Item:`Install`,Value:a.installKind===`git`?`git (${a.root??`unknown`})`:a.installKind===`package`?a.packageManager:`unknown`},{Item:`Channel`,Value:s},...c?[{Item:`Git`,Value:c}]:[],{Item:`Update`,Value:l.available?St.warn(`available · ${u}`):u}];Pt.log(St.heading(`Fased Agent update status`)),Pt.log(``),Pt.log(ky({width:d,columns:[{key:`Item`,header:`Item`,minWidth:10},{key:`Value`,header:`Value`,flex:!0,minWidth:24}],rows:f}).trimEnd()),Pt.log(``);let p=Zn(a,{channel:o.channel});p&&Pt.log(St.warn(p))}async function Py(e=t.argv){if(e[2]!==`update`||e[3]!==`status`)return!1;let n=re(e,`--timeout`);return n===null?!1:(await Ny({json:ne(e,`--json`),timeout:n}),!0)}export{Py as run};
10
+ `||n===`\r`){v(f.length),n===`\r`&&(d=!0);continue}p+1>t&&p>0&&v(m),f.push(e),p+=1,l(n)&&(m=f.length)}}return v(f.length),c.length?!a&&!o?c:c.map(e=>e&&`${a}${e}${o}`):[``]}function Hy(e){if(e!=null&&!(!Number.isFinite(e)||e<=0))return Math.floor(e)}function Uy(e){let t=e.rows.map(e=>{let t={};for(let[n,r]of Object.entries(e))t[n]=Cn(r);return t}),n=e.border??`unicode`;if(n===`none`){let n=e.columns;return`${[n.map(e=>e.header).join(` | `),...t.map(e=>n.map(t=>e[t.key]??``).join(` | `))].join(`
11
+ `)}\n`}let r=Math.max(0,e.padding??1),i=e.columns,a=i.map(e=>({headerW:Rt(e.header),cellW:Math.max(0,...t.map(t=>Rt(t[e.key]??``)))})),o=i.map((e,t)=>{let n=a[t],i=Math.max(n?.headerW??0,n?.cellW??0)+r*2,o=e.maxWidth?Math.min(i,e.maxWidth):i;return Math.max(e.minWidth??3,o)}),s=Hy(e.width),c=i.length+1,l=o.reduce((e,t)=>e+t,0)+c,u=i.map((e,t)=>Math.max(e.minWidth??3,(a[t]?.headerW??0)+r*2,3)),d=i.map((e,t)=>Math.max((a[t]?.headerW??0)+r*2,3));if(s&&l>s){let e=l-s,t=i.map((e,t)=>({i:t,w:o[t]??0})).filter(({i:e})=>!!i[e]?.flex).toSorted((e,t)=>t.w-e.w).map(e=>e.i),n=i.map((e,t)=>({i:t,w:o[t]??0})).filter(({i:e})=>!i[e]?.flex).toSorted((e,t)=>t.w-e.w).map(e=>e.i),r=(t,n)=>{for(;e>0;){let r=!1;for(let i of t)if(!((o[i]??0)<=(n[i]??0))&&(o[i]=(o[i]??0)-1,--e,r=!0,e<=0))break;if(!r)break}};r(t,u),r(t,d),r(n,u),r(n,d)}if(s){let e=i.length+1,t=s-(o.reduce((e,t)=>e+t,0)+e);if(t>0){let e=i.map((e,t)=>({c:e,i:t})).filter(({c:e})=>!!e.flex).map(({i:e})=>e);if(e.length>0){let n=i.map(e=>typeof e.maxWidth==`number`&&e.maxWidth>0?Math.floor(e.maxWidth):1/0);for(;t>0;){let r=!1;for(let i of e)if(!((o[i]??0)>=(n[i]??1/0))&&(o[i]=(o[i]??0)+1,--t,r=!0,t<=0))break;if(!r)break}}}}let f=n===`ascii`?{tl:`+`,tr:`+`,bl:`+`,br:`+`,h:`-`,v:`|`,t:`+`,ml:`+`,m:`+`,mr:`+`,b:`+`}:{tl:`┌`,tr:`┐`,bl:`└`,br:`┘`,h:`─`,v:`│`,t:`┬`,ml:`├`,m:`┼`,mr:`┤`,b:`┴`},p=(e,t,n)=>`${e}${o.map(e=>zy(f.h,e)).join(t)}${n}`,m=e=>Math.max(1,o[e]-r*2),h=zy(` `,r),g=(e,t=!1)=>{let n=i.map(n=>t?n.header:e[n.key]??``).map((e,t)=>Vy(e,m(t))),r=Math.max(...n.map(e=>e.length)),a=[];for(let e=0;e<r;e+=1){let t=n.map((t,n)=>`${h}${By(t[e]??``,m(n),i[n]?.align??`left`)}${h}`);a.push(`${f.v}${t.join(f.v)}${f.v}`)}return a},_=[];_.push(p(f.tl,f.t,f.tr)),_.push(...g({},!0)),_.push(p(f.ml,f.m,f.mr));for(let e of t)_.push(...g(e,!1));return _.push(p(f.bl,f.b,f.br)),`${_.join(`
12
+ `)}\n`}function Wy(e){let t=e?Number.parseInt(e,10)*1e3:void 0;return t!==void 0&&(Number.isNaN(t)||t<=0)?(Pt.error(`--timeout must be a positive integer (seconds)`),Pt.exit(1),null):t}async function Gy(){return await Te({moduleUrl:import.meta.url,argv1:process.argv[1],cwd:process.cwd()})??process.cwd()}function Ky(e){let t=e.sha?e.sha.slice(0,8):null,n=e.branch&&e.branch!==`HEAD`?e.branch:null,r=e.tag;return[n??(r?`detached`:`git`),r?`tag ${r}`:null,t?`@ ${t}`:null].filter(Boolean).join(` · `)}async function qy(e){let t=Wy(e.timeout);if(t===null)return;let n=await Gy(),r=await Ry(),i=r.valid?mn(r.config.update?.channel):null,a=await zn({root:n,timeoutMs:t??3500,fetchGit:!0,includeRegistry:!0}),o=vn({configChannel:i,installKind:a.installKind,gitTag:a.git?.tag??null,gitBranch:a.git?.branch??null}),s=o.label,c=a.installKind===`git`?Ky({branch:a.git?.branch??null,tag:a.git?.tag??null,sha:a.git?.sha??null}):null,l=Xn(a,{channel:o.channel}),u=Qn(a,{channel:o.channel}).replace(/^Update:\s*/i,``);if(e.json){Pt.log(JSON.stringify({update:a,channel:{value:o.channel,source:o.source,label:s,config:i},availability:l},null,2));return}let d=Math.max(60,(process.stdout.columns??120)-1),f=[{Item:`Install`,Value:a.installKind===`git`?`git (${a.root??`unknown`})`:a.installKind===`package`?a.packageManager:`unknown`},{Item:`Channel`,Value:s},...c?[{Item:`Git`,Value:c}]:[],{Item:`Update`,Value:l.available?St.warn(`available · ${u}`):u}];Pt.log(St.heading(`Fased Agent update status`)),Pt.log(``),Pt.log(Uy({width:d,columns:[{key:`Item`,header:`Item`,minWidth:10},{key:`Value`,header:`Value`,flex:!0,minWidth:24}],rows:f}).trimEnd()),Pt.log(``);let p=Zn(a,{channel:o.channel});p&&Pt.log(St.warn(p))}async function Jy(e=t.argv){if(e[2]!==`update`||e[3]!==`status`)return!1;let n=ie(e,`--timeout`);return n===null?!1:(await qy({json:re(e,`--json`),timeout:n}),!0)}export{Jy as run};