@fased/fased 0.1.53 → 0.1.55

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 (179) hide show
  1. package/dist/agents/authenticated-model-catalog.js +27 -0
  2. package/dist/agents/current-model-catalog.js +30 -10
  3. package/dist/agents/model-catalog-normalized.js +1 -0
  4. package/dist/agents/model-catalog-source.js +4 -4
  5. package/dist/agents/model-forward-compat.js +19 -1
  6. package/dist/agents/model-metadata.js +37 -8
  7. package/dist/agents/pi-embedded-runner/agent-messages.js +15 -0
  8. package/dist/agents/pi-embedded-runner/compact.js +2 -1
  9. package/dist/agents/pi-embedded-runner/extra-params.js +25 -0
  10. package/dist/agents/pi-embedded-runner/model.js +2 -7
  11. package/dist/agents/pi-embedded-runner/run/attempt.js +4 -5
  12. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  13. package/dist/brand.js +1 -1
  14. package/dist/build-info.json +3 -3
  15. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  16. package/dist/cli/program/register.agent.js +17 -0
  17. package/dist/cli/providers-cli.js +3 -2
  18. package/dist/commands/agents.commands.models.js +63 -0
  19. package/dist/commands/agents.js +1 -0
  20. package/dist/commands/auth-choice.apply.api-providers.js +3 -8
  21. package/dist/commands/auth-choice.apply.openai.js +13 -7
  22. package/dist/commands/auth-choice.model-check.js +1 -2
  23. package/dist/commands/configure.gateway-auth.js +14 -16
  24. package/dist/commands/model-picker.js +25 -7
  25. package/dist/commands/models/list.registry.js +13 -18
  26. package/dist/commands/onboard-auth.config-core.js +1 -1
  27. package/dist/commands/onboard-auth.config-litellm.js +21 -21
  28. package/dist/commands/onboard-auth.credentials.js +0 -1
  29. package/dist/commands/onboard-auth.js +0 -1
  30. package/dist/commands/openai-codex-model-default.js +26 -4
  31. package/dist/config/defaults.js +1 -1
  32. package/dist/config/zod-schema.agent-defaults.js +4 -2
  33. package/dist/config/zod-schema.agent-runtime.js +4 -2
  34. package/dist/config/zod-schema.core.js +4 -2
  35. package/dist/control-ui/assets/{app-WIDYwhr-.js → app-D2RaTXoV.js} +1788 -1755
  36. package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +2 -0
  37. package/dist/control-ui/assets/{index-K3ysLeTN.js → index-D2nC6I-9.js} +3 -3
  38. package/dist/control-ui/assets/{providers-rQMhp1fb.js → providers-CyjiG5Jw.js} +4 -4
  39. package/dist/control-ui/index.html +1 -1
  40. package/dist/control-ui/version.json +1 -0
  41. package/dist/cron/isolated-agent/run.js +9 -3
  42. package/dist/cron/normalize.js +10 -0
  43. package/dist/gateway/control-ui.js +2 -0
  44. package/dist/gateway/protocol/schema/agents-models-skills.js +6 -2
  45. package/dist/gateway/protocol/schema/cron.js +7 -0
  46. package/dist/gateway/server-methods/models.js +8 -9
  47. package/dist/gateway/server-model-catalog.js +3 -0
  48. package/dist/infra/update-runner.js +31 -3
  49. package/dist/light-update-status.js +10 -10
  50. package/dist/memory/inventory.js +19 -2
  51. package/dist/plugin-sdk/{accounts-BZrfqJmO.js → accounts-CeRNo5Ae.js} +1 -1
  52. package/dist/plugin-sdk/{actions-7_zTh8zC.js → actions-OMRHtXPj.js} +2 -2
  53. package/dist/plugin-sdk/{active-listener-D8NVRD8J.js → active-listener-BlIkS3iR.js} +1 -1
  54. package/dist/plugin-sdk/{audio-preflight-BrVWUkoP.js → audio-preflight-B2n3a2Tj.js} +26 -26
  55. package/dist/plugin-sdk/{audit-2iRlVyQF.js → audit-Ppg6dR_b.js} +1 -1
  56. package/dist/plugin-sdk/{channel-access-BCf1rJsn.js → channel-access-af8dWWRv.js} +1 -1
  57. package/dist/plugin-sdk/{channel-access-configure-B-Z51Qsd.js → channel-access-configure-B6IAGlE0.js} +1 -1
  58. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  59. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  60. package/dist/plugin-sdk/{chunk-BREC9ijl.js → chunk-CD76Byie.js} +1 -1
  61. package/dist/plugin-sdk/{chunk-items-BLRCltGL.js → chunk-items-Bu19zrYH.js} +1 -1
  62. package/dist/plugin-sdk/command-status.d.ts +2 -2
  63. package/dist/plugin-sdk/command-status.js +26 -26
  64. package/dist/plugin-sdk/{commands-registry-D3-bFLsz.js → commands-registry-DgS55tNj.js} +2 -2
  65. package/dist/plugin-sdk/{common-BlqMqEqn.js → common-CWvfeiX0.js} +1 -1
  66. package/dist/plugin-sdk/{config-442EDe7Z.js → config-CYDETqcF.js} +130 -134
  67. package/dist/plugin-sdk/{config-schema-DV0zctd2.js → config-schema-CQ4EVcQG.js} +164 -78
  68. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  69. package/dist/plugin-sdk/discord.d.ts +5 -5
  70. package/dist/plugin-sdk/discord.js +19 -19
  71. package/dist/plugin-sdk/{group-mentions-DLOOve8d.d.ts → group-mentions-BxDgHCgj.d.ts} +1 -1
  72. package/dist/plugin-sdk/{handle-action-pNaP87Dr.js → handle-action-B75UVKxF.js} +13 -13
  73. package/dist/plugin-sdk/{helpers-B994qqVW.js → helpers-BuEwju6y.js} +1 -1
  74. package/dist/plugin-sdk/{image-ops-Doq8nZQw.js → image-ops-C66HPeAZ.js} +1 -1
  75. package/dist/plugin-sdk/index.d.ts +8 -8
  76. package/dist/plugin-sdk/index.js +28 -28
  77. package/dist/plugin-sdk/{login-CK2zTIJA.js → login-Amr2DpKU.js} +3 -3
  78. package/dist/plugin-sdk/{login-qr-u8Mn1mCp.js → login-qr-DMQNEi9m.js} +3 -3
  79. package/dist/plugin-sdk/{manager-CeJNf2bH.js → manager-Bvpq49BI.js} +2 -2
  80. package/dist/plugin-sdk/{markdown-tables-DeZztrY6.js → markdown-tables-DmQ7oXOm.js} +1 -1
  81. package/dist/plugin-sdk/{media-CgUAEfhs.js → media-ByLQbEwJ.js} +2 -2
  82. package/dist/plugin-sdk/{monitor-CEtMJuFX.js → monitor-K_u6daGa.js} +30 -30
  83. package/dist/plugin-sdk/{monitor-D-APtCpn.js → monitor-S_7LrvSj.js} +31 -31
  84. package/dist/plugin-sdk/{openresponses-http-g1Iz0xB2.js → openresponses-http-BrDJUZXR.js} +26 -26
  85. package/dist/plugin-sdk/{optional-runtime-dependency-D0BdXz1C.js → optional-runtime-dependency-CbYjAC2b.js} +1 -1
  86. package/dist/plugin-sdk/{outbound-DXGuFrdx.js → outbound-BuDafBBI.js} +6 -6
  87. package/dist/plugin-sdk/{outbound-attachment-oxhGO33g.js → outbound-attachment-DmZmUqFP.js} +2 -2
  88. package/dist/plugin-sdk/{pairing-message-D3WPVg_j.d.ts → pairing-message-D0-UWGFJ.d.ts} +2 -2
  89. package/dist/plugin-sdk/{pairing-message-C29ixrvn.js → pairing-message-e4D4eBDA.js} +1 -1
  90. package/dist/plugin-sdk/{pairing-store-1kcsOWRs.js → pairing-store-T3IGoGZg.js} +2 -2
  91. package/dist/plugin-sdk/{pi-model-discovery-l-xqaEd0.js → pi-model-discovery-DvAG_Png.js} +1 -1
  92. package/dist/plugin-sdk/{pi-model-discovery-runtime-CibV8F8G.js → pi-model-discovery-runtime-NjkUgjIf.js} +2 -2
  93. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  94. package/dist/plugin-sdk/{pw-ai-9qEBW5-k.js → pw-ai-D7eW43DL.js} +3 -3
  95. package/dist/plugin-sdk/{replies-BX3L8fX7.js → replies-BMIPmEoP.js} +2 -2
  96. package/dist/plugin-sdk/{resolve-outbound-target-D0AK10E7.js → resolve-outbound-target-CXCqUUPV.js} +1 -1
  97. package/dist/plugin-sdk/{resolve-route-UO6XLYH3.js → resolve-route-DJN-SUSt.js} +1 -1
  98. package/dist/plugin-sdk/{retry-policy-C5N8JiHL.js → retry-policy-CY1qY6d7.js} +1 -1
  99. package/dist/plugin-sdk/{runtime-Dnzwux3G.js → runtime-CgOkQe0w.js} +3 -3
  100. package/dist/plugin-sdk/{runtime-dependency-BDDpVKBO.js → runtime-dependency-DvdRNMvs.js} +2 -2
  101. package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
  102. package/dist/plugin-sdk/sat-runtime.js +5 -5
  103. package/dist/plugin-sdk/{send-bcKv8F5E.js → send-2ITqny2W.js} +8 -8
  104. package/dist/plugin-sdk/{send-DGEgo_6f.js → send-BAz22RZr.js} +5 -5
  105. package/dist/plugin-sdk/{send-DcsYRH2f.js → send-BG3RWyil.js} +7 -7
  106. package/dist/plugin-sdk/{send-D5rgCP1r.js → send-Cr-dj6S-.js} +6 -6
  107. package/dist/plugin-sdk/{send-B4XLsTL0.js → send-eTxqFFsw.js} +6 -6
  108. package/dist/plugin-sdk/{session-BoGNOlwv.js → session-C8nJmmVE.js} +2 -2
  109. package/dist/plugin-sdk/{skill-commands-Be8s4TGQ.js → skill-commands-Rm5by9S8.js} +2 -2
  110. package/dist/plugin-sdk/{slack-actions-TNnAXiUx.js → slack-actions-BNIALJTA.js} +11 -11
  111. package/dist/plugin-sdk/{slack-74qForpW.js → slack-xvIVvyEM.js} +38 -38
  112. package/dist/plugin-sdk/slack.d.ts +5 -5
  113. package/dist/plugin-sdk/slack.js +9 -9
  114. package/dist/plugin-sdk/{sticker-cache-CrYayLff.js → sticker-cache-D3oDiu2u.js} +3 -3
  115. package/dist/plugin-sdk/{tables-Ch4js2qy.js → tables-DS5L7lCA.js} +1 -1
  116. package/dist/plugin-sdk/{targets-BGfRUJPE.js → targets-D6lUomJc.js} +1 -1
  117. package/dist/plugin-sdk/{telegram-actions-BGy4AEvF.js → telegram-actions-MSFkDn0m.js} +29 -29
  118. package/dist/plugin-sdk/telegram.d.ts +5 -5
  119. package/dist/plugin-sdk/telegram.js +8 -8
  120. package/dist/plugin-sdk/{thread-bindings.lifecycle-_uQ2EF17.js → thread-bindings.lifecycle-Ry6Vcgw3.js} +3 -3
  121. package/dist/plugin-sdk/{thread-bindings.state-DUg0s_1X.js → thread-bindings.state-C0stmvNk.js} +2 -2
  122. package/dist/plugin-sdk/{tmp-fased-dir-BrbXGSkl.d.ts → tmp-fased-dir-D91GExk4.d.ts} +2 -2
  123. package/dist/plugin-sdk/{types-CBCtqtMn.d.ts → types-BzadOItY.d.ts} +1 -1
  124. package/dist/plugin-sdk/{types-DlKIHIqA.d.ts → types-DKvBJHfH.d.ts} +16 -6
  125. package/dist/plugin-sdk/{types-BJdDoTQF.d.ts → types-DVTIpopt.d.ts} +2 -2
  126. package/dist/plugin-sdk/{types.plugin-CvUiB3Kh.d.ts → types.plugin-BiHPaDTF.d.ts} +2 -1
  127. package/dist/plugin-sdk/{wallet-status-M6aK3abH.js → wallet-status-f0HagNeO.js} +31 -13
  128. package/dist/plugin-sdk/{web-r1KFR44s.js → web-DRNJxHXA.js} +31 -31
  129. package/dist/plugin-sdk/{whatsapp-actions-CID_tqAX.js → whatsapp-actions-BDXZF2R5.js} +13 -13
  130. package/dist/plugin-sdk/{whatsapp-heartbeat-Bk-aZVMa.js → whatsapp-heartbeat-CKgmwCGr.js} +2 -2
  131. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  132. package/dist/plugin-sdk/whatsapp.js +12 -12
  133. package/dist/plugin-sdk/{wsl-C_STtED7.js → wsl-Biw7Mj39.js} +3 -3
  134. package/dist/providers/huggingface-models.js +0 -30
  135. package/dist/providers/litellm-models.js +1 -1
  136. package/dist/providers/opencode-zen-shared.js +0 -1
  137. package/dist/providers/refresh.js +221 -62
  138. package/dist/providers/registry.js +31 -7
  139. package/dist/providers/runtime-model-catalog.js +181 -0
  140. package/dist/providers/vercel-ai-gateway-models.js +0 -35
  141. package/dist/shared/model-thinking.js +44 -2
  142. package/dist/wizard/onboarding.js +24 -6
  143. package/extensions/acpx/package.json +1 -1
  144. package/extensions/bluebubbles/package.json +1 -1
  145. package/extensions/copilot-proxy/package.json +1 -1
  146. package/extensions/diagnostics-otel/package.json +1 -1
  147. package/extensions/fased-federation/package.json +1 -1
  148. package/extensions/google-gemini-cli-auth/package.json +1 -1
  149. package/extensions/imessage/package.json +1 -1
  150. package/extensions/irc/package.json +1 -1
  151. package/extensions/line/package.json +1 -1
  152. package/extensions/llm-task/package.json +1 -1
  153. package/extensions/lobster/package.json +1 -1
  154. package/extensions/matrix/CHANGELOG.md +12 -0
  155. package/extensions/matrix/package.json +1 -1
  156. package/extensions/mattermost/package.json +1 -1
  157. package/extensions/memory-core/package.json +2 -2
  158. package/extensions/memory-lancedb/package.json +1 -1
  159. package/extensions/minimax-portal-auth/package.json +1 -1
  160. package/extensions/msteams/CHANGELOG.md +12 -0
  161. package/extensions/msteams/package.json +1 -1
  162. package/extensions/nextcloud-talk/package.json +1 -1
  163. package/extensions/nostr/CHANGELOG.md +12 -0
  164. package/extensions/nostr/package.json +1 -1
  165. package/extensions/open-prose/package.json +1 -1
  166. package/extensions/sat-mining/package.json +1 -1
  167. package/extensions/signal/package.json +1 -1
  168. package/extensions/synology-chat/package.json +1 -1
  169. package/extensions/tlon/package.json +1 -1
  170. package/extensions/twitch/CHANGELOG.md +12 -0
  171. package/extensions/twitch/package.json +1 -1
  172. package/extensions/voice-call/CHANGELOG.md +12 -0
  173. package/extensions/voice-call/package.json +1 -1
  174. package/extensions/zalo/CHANGELOG.md +12 -0
  175. package/extensions/zalo/package.json +1 -1
  176. package/extensions/zalouser/CHANGELOG.md +12 -0
  177. package/extensions/zalouser/package.json +1 -1
  178. package/package.json +1 -1
  179. package/dist/control-ui/assets/chat-model-ref-NT82zapt.js +0 -2
@@ -1,27 +1,29 @@
1
1
  import { BASE_THINKING_LEVELS } from "../shared/model-thinking.js";
2
2
  import { CLOUDFLARE_AI_GATEWAY_MODEL_IDS, CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID, CLOUDFLARE_AI_GATEWAY_ROUTE_ID } from "./cloudflare-ai-gateway-shared.js";
3
3
  import { HUGGINGFACE_MODEL_IDS } from "./huggingface-models.js";
4
- import { LITELLM_BASE_URL, LITELLM_MODEL_IDS } from "./litellm-models.js";
5
4
  import { OPENCODE_ZEN_MODEL_IDS } from "./opencode-zen-shared.js";
6
5
  import { SYNTHETIC_MODEL_IDS } from "./synthetic-models.js";
7
6
  import { TOGETHER_MODEL_IDS } from "./together-models.js";
8
7
  import { VENICE_MODEL_IDS } from "./venice-models.js";
9
8
  import { VERCEL_AI_GATEWAY_MODEL_IDS } from "./vercel-ai-gateway-models.js";
10
9
  import { XIAOMI_MODEL_IDS } from "./xiaomi-models.js";
10
+ import { LITELLM_BASE_URL } from "./litellm-models.js";
11
11
  import { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, QIANFAN_MODEL_IDS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, listProviderBrandManifests, lookupProviderManifestModelCapability, resolveProviderRouteModelCapability } from "./registry.js";
12
12
  import { readFile } from "node:fs/promises";
13
13
 
14
14
  //#region src/providers/refresh.ts
15
15
  const OPENAI_DOCS_MODELS_URL = "https://developers.openai.com/api/docs/models/all";
16
+ const OPENAI_API_MODELS_URL = "https://api.openai.com/v1/models";
16
17
  const CHUTES_MODELS_URL = "https://llm.chutes.ai/v1/models";
17
18
  const OPENROUTER_MODELS_URL = "https://openrouter.ai/api/v1/models";
18
19
  const VERCEL_AI_GATEWAY_MODELS_URL = "https://ai-gateway.vercel.sh/v1/models";
19
20
  const OPENCODE_ZEN_MODELS_URL = "https://opencode.ai/zen/v1/models";
20
21
  const HUGGINGFACE_MODELS_URL = "https://router.huggingface.co/v1/models";
21
22
  const VENICE_MODELS_URL = "https://api.venice.ai/api/v1/models";
23
+ const PROVIDER_CATALOG_TIMEOUT_MS = 8e3;
22
24
  const ANTHROPIC_MODELS_URL = "https://api.anthropic.com/v1/models";
23
25
  const GOOGLE_GEMINI_MODELS_URL = "https://generativelanguage.googleapis.com/v1beta/models";
24
- const XAI_MODELS_URL = "https://api.x.ai/v1/models";
26
+ const XAI_LANGUAGE_MODELS_URL = "https://api.x.ai/v1/language-models";
25
27
  const MISTRAL_MODELS_URL = "https://api.mistral.ai/v1/models";
26
28
  const MINIMAX_MODELS_URL = "https://api.minimax.io/v1/models";
27
29
  const MINIMAX_PORTAL_DEFAULT_BASE_URL = "https://api.minimax.io/anthropic";
@@ -44,12 +46,6 @@ const VLLM_DEFAULT_BASE_URL = "http://127.0.0.1:8000/v1";
44
46
  const OLLAMA_DEFAULT_BASE_URL = "http://127.0.0.1:11434";
45
47
  const LMSTUDIO_DEFAULT_BASE_URL = "http://127.0.0.1:1234/v1";
46
48
  const LITELLM_DEFAULT_BASE_URL = LITELLM_BASE_URL;
47
- const OPENAI_CURRENT_API_MODEL_RE = /^gpt-5\.(?:[4-9]|\d{2,})(?:-(?:mini|nano|terra|luna))?$/;
48
- const OPENAI_CURRENT_SIGN_IN_MODEL_RE = /^gpt-(?:5\.(?:[4-9]|\d{2,})(?:-mini)?|5\.3-codex-spark)$/;
49
- const CHUTES_CURRENT_NORMAL_UI_MODEL_RE = /^(?:google\/gemma-4-[^/]+-TEE|Qwen\/Qwen3(?:\.\d+)?-[^/]+-TEE|deepseek-ai\/DeepSeek-V3\.2-TEE|zai-org\/GLM-5(?:\.\d+)?-TEE|moonshotai\/Kimi-K2\.6-TEE)$/;
50
- const OPENROUTER_CURRENT_NORMAL_UI_MODEL_RE = /^(?:openrouter\/owl-alpha|openai\/gpt-(?:5\.6-(?:sol|terra|luna)|5\.5|5\.4(?:-(?:mini|nano))?)|anthropic\/claude-(?:fable-5|opus-4\.8|sonnet-5|haiku-4\.5)|google\/gemini-(?:3\.5-flash|3\.1-(?:pro-preview|flash-lite)|3-flash-preview)|x-ai\/(?:grok-4\.5|grok-4\.3|grok-build-0\.1)|mistralai\/(?:mistral-medium-3-5|mistral-small-2603|mistral-large-2512|devstral-2512)|qwen\/qwen3\.(?:7-(?:max|plus)|6-flash)|z-ai\/glm-5\.2|deepseek\/deepseek-v4-(?:pro|flash)|minimax\/minimax-m2\.7|moonshotai\/kimi-k2\.6)$/;
51
- const VERCEL_AI_GATEWAY_CURRENT_NORMAL_UI_MODEL_RE = /^(?:openai\/gpt-(?:5\.5|5\.4(?:-(?:mini|nano))?)|anthropic\/claude-(?:fable-5|opus-4\.8|sonnet-5|haiku-4\.5)|google\/gemini-(?:3\.5-flash|3\.1-(?:pro-preview|flash-lite)|3-flash-preview)|xai\/(?:grok-4\.3|grok-build-0\.1)|mistral\/(?:mistral-medium-3\.5|mistral-small-2603|mistral-large-2512|devstral-2512)|minimax\/minimax-m2\.7(?:-highspeed)?|moonshotai\/kimi-k2\.6)$/;
52
- const OPENCODE_ZEN_CURRENT_NORMAL_UI_MODEL_RE = /^(?:gpt-5\.(?:5|4(?:-(?:mini|nano))?|3-codex-spark)|claude-(?:fable-5|opus-4-8|sonnet-5|haiku-4-5)|gemini-(?:3\.5-flash|3\.1-pro|3-flash)|qwen3\.7-plus|minimax-m2\.7|glm-5\.2|kimi-k2\.6)$/;
53
49
  function normalizeModelIds(values, options = {}) {
54
50
  const seen = new Set();
55
51
  const result = [];
@@ -112,6 +108,12 @@ function setProviderRefreshEnvFromProfile(params) {
112
108
  const provider = params.profile.provider.trim();
113
109
  const apiKey = resolveApiKeyProfileValue(params.profile, params.env);
114
110
  switch (provider) {
111
+ case "openai":
112
+ setProviderRefreshEnvValue(params.target, "OPENAI_API_KEY", apiKey);
113
+ break;
114
+ case "chutes":
115
+ setProviderRefreshEnvValue(params.target, "CHUTES_API_KEY", apiKey);
116
+ break;
115
117
  case "anthropic":
116
118
  setProviderRefreshEnvValue(params.target, "ANTHROPIC_API_KEY", apiKey);
117
119
  break;
@@ -190,6 +192,23 @@ function setProviderRefreshEnvFromProfile(params) {
190
192
  case "together":
191
193
  setProviderRefreshEnvValue(params.target, "TOGETHER_API_KEY", apiKey);
192
194
  break;
195
+ case "openrouter":
196
+ setProviderRefreshEnvValue(params.target, "OPENROUTER_API_KEY", apiKey);
197
+ break;
198
+ case "vercel-ai-gateway":
199
+ case "ai-gateway":
200
+ setProviderRefreshEnvValue(params.target, "AI_GATEWAY_API_KEY", apiKey);
201
+ break;
202
+ case "opencode":
203
+ case "opencode-zen":
204
+ setProviderRefreshEnvValue(params.target, "OPENCODE_API_KEY", apiKey);
205
+ break;
206
+ case "huggingface":
207
+ setProviderRefreshEnvValue(params.target, "HUGGINGFACE_HUB_TOKEN", apiKey);
208
+ break;
209
+ case "venice":
210
+ setProviderRefreshEnvValue(params.target, "VENICE_API_KEY", apiKey);
211
+ break;
193
212
  default:
194
213
  if (provider.startsWith("custom-")) {
195
214
  setProviderRefreshEnvValue(params.target, "CUSTOM_PROVIDER_API_KEY", apiKey);
@@ -201,6 +220,28 @@ function setProviderRefreshEnvFromModelProvider(params) {
201
220
  const apiKey = resolveEnvSecretValue(params.provider.apiKey, params.env);
202
221
  const baseUrl = typeof params.provider.baseUrl === "string" ? params.provider.baseUrl.trim() : undefined;
203
222
  switch (params.providerId) {
223
+ case "openai":
224
+ setProviderRefreshEnvValue(params.target, "OPENAI_API_KEY", apiKey);
225
+ break;
226
+ case "chutes":
227
+ setProviderRefreshEnvValue(params.target, "CHUTES_API_KEY", apiKey);
228
+ break;
229
+ case "openrouter":
230
+ setProviderRefreshEnvValue(params.target, "OPENROUTER_API_KEY", apiKey);
231
+ break;
232
+ case "vercel-ai-gateway":
233
+ case "ai-gateway":
234
+ setProviderRefreshEnvValue(params.target, "AI_GATEWAY_API_KEY", apiKey);
235
+ break;
236
+ case "opencode":
237
+ setProviderRefreshEnvValue(params.target, "OPENCODE_API_KEY", apiKey);
238
+ break;
239
+ case "huggingface":
240
+ setProviderRefreshEnvValue(params.target, "HUGGINGFACE_HUB_TOKEN", apiKey);
241
+ break;
242
+ case "venice":
243
+ setProviderRefreshEnvValue(params.target, "VENICE_API_KEY", apiKey);
244
+ break;
204
245
  case "vllm":
205
246
  setProviderRefreshEnvValue(params.target, "VLLM_API_KEY", apiKey);
206
247
  setProviderRefreshEnvValue(params.target, "VLLM_BASE_URL", baseUrl);
@@ -1094,13 +1135,13 @@ function selectManifestModelsForNormalUi(modelIds, preferred) {
1094
1135
  return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => allowed.has(id.toLowerCase())), preferred);
1095
1136
  }
1096
1137
  function selectOpenAIApiModelsForNormalUi(modelIds) {
1097
- return sortWithPreferredOrder(normalizeModelIds(modelIds, { lowercase: true }).filter((id) => OPENAI_CURRENT_API_MODEL_RE.test(id)), OPENAI_API_MODEL_IDS);
1138
+ return selectManifestModelsForNormalUi(modelIds, OPENAI_API_MODEL_IDS);
1098
1139
  }
1099
1140
  function selectOpenAISignInModelsForNormalUi(modelIds) {
1100
- return sortWithPreferredOrder(normalizeModelIds(modelIds, { lowercase: true }).filter((id) => OPENAI_CURRENT_SIGN_IN_MODEL_RE.test(id)), OPENAI_SIGN_IN_MODEL_IDS);
1141
+ return selectManifestModelsForNormalUi(modelIds, OPENAI_SIGN_IN_MODEL_IDS);
1101
1142
  }
1102
1143
  function selectChutesModelsForNormalUi(modelIds) {
1103
- return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => CHUTES_CURRENT_NORMAL_UI_MODEL_RE.test(id)), CHUTES_MODEL_IDS);
1144
+ return selectManifestModelsForNormalUi(modelIds, CHUTES_MODEL_IDS);
1104
1145
  }
1105
1146
  function selectAnthropicModelsForNormalUi(modelIds) {
1106
1147
  return selectManifestModelsForNormalUi(modelIds, ANTHROPIC_MODEL_IDS);
@@ -1166,17 +1207,16 @@ function selectDynamicProviderModelsForNormalUi(modelIds) {
1166
1207
  return normalizeModelIds(modelIds);
1167
1208
  }
1168
1209
  function selectLitellmModelsForNormalUi(modelIds) {
1169
- const discovered = selectDynamicProviderModelsForNormalUi(modelIds);
1170
- return discovered.length > 0 ? discovered : [...LITELLM_MODEL_IDS];
1210
+ return selectDynamicProviderModelsForNormalUi(modelIds);
1171
1211
  }
1172
1212
  function selectOpenRouterModelsForNormalUi(modelIds) {
1173
- return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => OPENROUTER_CURRENT_NORMAL_UI_MODEL_RE.test(id)), OPENROUTER_MODEL_IDS);
1213
+ return selectManifestModelsForNormalUi(modelIds, OPENROUTER_MODEL_IDS);
1174
1214
  }
1175
1215
  function selectVercelAiGatewayModelsForNormalUi(modelIds) {
1176
- return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => VERCEL_AI_GATEWAY_CURRENT_NORMAL_UI_MODEL_RE.test(id)), VERCEL_AI_GATEWAY_MODEL_IDS);
1216
+ return selectManifestModelsForNormalUi(modelIds, VERCEL_AI_GATEWAY_MODEL_IDS);
1177
1217
  }
1178
1218
  function selectOpencodeZenModelsForNormalUi(modelIds) {
1179
- return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => OPENCODE_ZEN_CURRENT_NORMAL_UI_MODEL_RE.test(id)), OPENCODE_ZEN_MODEL_IDS);
1219
+ return selectManifestModelsForNormalUi(modelIds, OPENCODE_ZEN_MODEL_IDS);
1180
1220
  }
1181
1221
  function selectHuggingfaceModelsForNormalUi(modelIds) {
1182
1222
  const allowed = new Set(HUGGINGFACE_MODEL_IDS);
@@ -1196,7 +1236,10 @@ function readEnv(env, names) {
1196
1236
  return undefined;
1197
1237
  }
1198
1238
  async function fetchJsonCatalog(params) {
1199
- const response = await params.fetch(params.url, { headers: params.headers });
1239
+ const response = await params.fetch(params.url, {
1240
+ headers: params.headers,
1241
+ signal: AbortSignal.timeout(PROVIDER_CATALOG_TIMEOUT_MS)
1242
+ });
1200
1243
  if (!response.ok) {
1201
1244
  throw new Error(`${params.label} model catalog fetch failed: HTTP ${response.status}`);
1202
1245
  }
@@ -1272,7 +1315,25 @@ function cloudflareAiGatewayHeaders(env, providerKey) {
1272
1315
  }
1273
1316
  async function fetchOpenAIProviderRefreshSnapshot(params = {}) {
1274
1317
  const fetchImpl = params.fetch ?? fetch;
1275
- const response = await fetchImpl(OPENAI_DOCS_MODELS_URL);
1318
+ const token = readEnv(params.env ?? process.env, ["OPENAI_API_KEY"]);
1319
+ if (token) {
1320
+ const payload = await fetchJsonCatalog({
1321
+ fetch: fetchImpl,
1322
+ url: OPENAI_API_MODELS_URL,
1323
+ headers: bearerHeaders(token),
1324
+ label: "OpenAI"
1325
+ });
1326
+ const models = parseGenericModelSnapshotsFromModelsResponse(payload);
1327
+ const ids = selectOpenAIApiModelsForNormalUi(models.map((model) => model.id));
1328
+ return { providers: { [OPENAI_PROVIDER_BRAND_ID]: {
1329
+ missing: { [OPENAI_CODEX_ROUTE_ID]: {
1330
+ reason: "catalog-unsupported",
1331
+ detail: "ChatGPT sign-in models are discovered from the authenticated runtime."
1332
+ } },
1333
+ routes: { [OPENAI_API_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, OPENAI_API_ROUTE_ID) }
1334
+ } } };
1335
+ }
1336
+ const response = await fetchImpl(OPENAI_DOCS_MODELS_URL, { signal: AbortSignal.timeout(PROVIDER_CATALOG_TIMEOUT_MS) });
1276
1337
  if (!response.ok) {
1277
1338
  throw new Error(`OpenAI docs model fetch failed: HTTP ${response.status}`);
1278
1339
  }
@@ -1283,16 +1344,20 @@ async function fetchOpenAIProviderRefreshSnapshot(params = {}) {
1283
1344
  reason: "catalog-unsupported",
1284
1345
  detail: "OpenAI public model docs do not verify ChatGPT sign-in route compatibility."
1285
1346
  } },
1286
- routes: { [OPENAI_API_ROUTE_ID]: selectOpenAIApiModelsForNormalUi(ids) }
1347
+ routes: { [OPENAI_API_ROUTE_ID]: selectOpenAIApiModelsForNormalUi(ids).map((id) => ({
1348
+ id,
1349
+ source: "official-docs"
1350
+ })) }
1287
1351
  } } };
1288
1352
  }
1289
1353
  async function fetchChutesProviderRefreshSnapshot(params = {}) {
1290
- const fetchImpl = params.fetch ?? fetch;
1291
- const response = await fetchImpl(CHUTES_MODELS_URL);
1292
- if (!response.ok) {
1293
- throw new Error(`Chutes model catalog fetch failed: HTTP ${response.status}`);
1294
- }
1295
- const payload = await response.json();
1354
+ const token = readEnv(params.env ?? process.env, ["CHUTES_API_KEY"]);
1355
+ const payload = await fetchJsonCatalog({
1356
+ fetch: params.fetch ?? fetch,
1357
+ url: CHUTES_MODELS_URL,
1358
+ headers: optionalBearerHeaders(token),
1359
+ label: "Chutes"
1360
+ });
1296
1361
  const models = parseGenericModelSnapshotsFromModelsResponse(payload);
1297
1362
  const ids = models.map((model) => model.id);
1298
1363
  return { providers: { [CHUTES_PROVIDER_BRAND_ID]: { routes: { [CHUTES_ROUTE_ID]: selectModelSnapshotsByIds(models, selectChutesModelsForNormalUi(ids), CHUTES_ROUTE_ID) } } } };
@@ -1373,7 +1438,7 @@ async function fetchXaiProviderRefreshSnapshot(params = {}) {
1373
1438
  }
1374
1439
  const payload = await fetchJsonCatalog({
1375
1440
  fetch: params.fetch ?? fetch,
1376
- url: XAI_MODELS_URL,
1441
+ url: XAI_LANGUAGE_MODELS_URL,
1377
1442
  headers: bearerHeaders(token),
1378
1443
  label: "xAI"
1379
1444
  });
@@ -1867,56 +1932,73 @@ async function fetchTogetherProviderRefreshSnapshot(params = {}) {
1867
1932
  return { providers: { [TOGETHER_PROVIDER_BRAND_ID]: { routes: { [TOGETHER_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, TOGETHER_ROUTE_ID) } } } };
1868
1933
  }
1869
1934
  async function fetchOpenRouterProviderRefreshSnapshot(params = {}) {
1870
- const fetchImpl = params.fetch ?? fetch;
1871
- const response = await fetchImpl(OPENROUTER_MODELS_URL);
1872
- if (!response.ok) {
1873
- throw new Error(`OpenRouter model catalog fetch failed: HTTP ${response.status}`);
1874
- }
1875
- const payload = await response.json();
1935
+ const token = readEnv(params.env ?? process.env, ["OPENROUTER_API_KEY"]);
1936
+ const payload = await fetchJsonCatalog({
1937
+ fetch: params.fetch ?? fetch,
1938
+ url: OPENROUTER_MODELS_URL,
1939
+ headers: optionalBearerHeaders(token),
1940
+ label: "OpenRouter"
1941
+ });
1876
1942
  const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
1877
1943
  const ids = selectOpenRouterModelsForNormalUi(models.map((model) => model.id));
1878
1944
  return { providers: { [OPENROUTER_PROVIDER_BRAND_ID]: { routes: { [OPENROUTER_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, OPENROUTER_ROUTE_ID) } } } };
1879
1945
  }
1880
1946
  async function fetchVercelAiGatewayProviderRefreshSnapshot(params = {}) {
1881
- const fetchImpl = params.fetch ?? fetch;
1882
- const response = await fetchImpl(VERCEL_AI_GATEWAY_MODELS_URL);
1883
- if (!response.ok) {
1884
- throw new Error(`Vercel AI Gateway model catalog fetch failed: HTTP ${response.status}`);
1885
- }
1886
- const payload = await response.json();
1947
+ const token = readEnv(params.env ?? process.env, ["AI_GATEWAY_API_KEY"]);
1948
+ const payload = await fetchJsonCatalog({
1949
+ fetch: params.fetch ?? fetch,
1950
+ url: VERCEL_AI_GATEWAY_MODELS_URL,
1951
+ headers: optionalBearerHeaders(token),
1952
+ label: "Vercel AI Gateway"
1953
+ });
1887
1954
  const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
1888
1955
  const ids = selectVercelAiGatewayModelsForNormalUi(models.map((model) => model.id));
1889
1956
  return { providers: { [VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID]: { routes: { [VERCEL_AI_GATEWAY_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, VERCEL_AI_GATEWAY_ROUTE_ID) } } } };
1890
1957
  }
1891
1958
  async function fetchOpencodeZenProviderRefreshSnapshot(params = {}) {
1892
- const fetchImpl = params.fetch ?? fetch;
1893
- const response = await fetchImpl(OPENCODE_ZEN_MODELS_URL);
1894
- if (!response.ok) {
1895
- throw new Error(`OpenCode Zen model catalog fetch failed: HTTP ${response.status}`);
1896
- }
1897
- const payload = await response.json();
1959
+ const token = readEnv(params.env ?? process.env, ["OPENCODE_API_KEY"]);
1960
+ const payload = await fetchJsonCatalog({
1961
+ fetch: params.fetch ?? fetch,
1962
+ url: OPENCODE_ZEN_MODELS_URL,
1963
+ headers: optionalBearerHeaders(token),
1964
+ label: "OpenCode Zen"
1965
+ });
1898
1966
  const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
1899
1967
  const ids = selectOpencodeZenModelsForNormalUi(models.map((model) => model.id));
1900
1968
  return { providers: { [OPENCODE_ZEN_PROVIDER_BRAND_ID]: { routes: { [OPENCODE_ZEN_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, OPENCODE_ZEN_ROUTE_ID) } } } };
1901
1969
  }
1902
1970
  async function fetchHuggingfaceProviderRefreshSnapshot(params = {}) {
1903
- const fetchImpl = params.fetch ?? fetch;
1904
- const response = await fetchImpl(HUGGINGFACE_MODELS_URL);
1905
- if (!response.ok) {
1906
- throw new Error(`Hugging Face model catalog fetch failed: HTTP ${response.status}`);
1971
+ const token = readEnv(params.env ?? process.env, ["HUGGINGFACE_HUB_TOKEN", "HF_TOKEN"]);
1972
+ if (!token) {
1973
+ return missingProviderRoutes(HUGGINGFACE_PROVIDER_BRAND_ID, { [HUGGINGFACE_ROUTE_ID]: {
1974
+ reason: "credential-missing",
1975
+ detail: "Set HUGGINGFACE_HUB_TOKEN/HF_TOKEN or configure a Hugging Face token profile."
1976
+ } });
1907
1977
  }
1908
- const payload = await response.json();
1978
+ const payload = await fetchJsonCatalog({
1979
+ fetch: params.fetch ?? fetch,
1980
+ url: HUGGINGFACE_MODELS_URL,
1981
+ headers: bearerHeaders(token),
1982
+ label: "Hugging Face"
1983
+ });
1909
1984
  const models = parseHuggingfaceModelSnapshotsFromModelsResponse(payload);
1910
1985
  const ids = selectHuggingfaceModelsForNormalUi(models.map((model) => model.id));
1911
1986
  return { providers: { [HUGGINGFACE_PROVIDER_BRAND_ID]: { routes: { [HUGGINGFACE_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, HUGGINGFACE_ROUTE_ID) } } } };
1912
1987
  }
1913
1988
  async function fetchVeniceProviderRefreshSnapshot(params = {}) {
1914
- const fetchImpl = params.fetch ?? fetch;
1915
- const response = await fetchImpl(VENICE_MODELS_URL);
1916
- if (!response.ok) {
1917
- throw new Error(`Venice AI model catalog fetch failed: HTTP ${response.status}`);
1989
+ const token = readEnv(params.env ?? process.env, ["VENICE_API_KEY"]);
1990
+ if (!token) {
1991
+ return missingProviderRoutes(VENICE_PROVIDER_BRAND_ID, { [VENICE_ROUTE_ID]: {
1992
+ reason: "credential-missing",
1993
+ detail: "Set VENICE_API_KEY or configure a Venice API-key auth profile."
1994
+ } });
1918
1995
  }
1919
- const payload = await response.json();
1996
+ const payload = await fetchJsonCatalog({
1997
+ fetch: params.fetch ?? fetch,
1998
+ url: VENICE_MODELS_URL,
1999
+ headers: bearerHeaders(token),
2000
+ label: "Venice AI"
2001
+ });
1920
2002
  const models = parseVeniceModelSnapshotsFromModelsResponse(payload);
1921
2003
  const ids = selectVeniceModelsForNormalUi(models.map((model) => model.id));
1922
2004
  return { providers: { [VENICE_PROVIDER_BRAND_ID]: { routes: { [VENICE_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, VENICE_ROUTE_ID) } } } };
@@ -1927,6 +2009,62 @@ function fetchStaticUnsupportedProviderRefreshSnapshot() {
1927
2009
  detail: "Direct GitHub Copilot model catalog probing is not implemented; configure Copilot Proxy for a probeable /models route."
1928
2010
  } })]);
1929
2011
  }
2012
+ function providerRefreshFetcherForBrand(brandId) {
2013
+ switch (brandId) {
2014
+ case OPENAI_PROVIDER_BRAND_ID: return fetchOpenAIProviderRefreshSnapshot;
2015
+ case CHUTES_PROVIDER_BRAND_ID: return fetchChutesProviderRefreshSnapshot;
2016
+ case ANTHROPIC_PROVIDER_BRAND_ID: return fetchAnthropicProviderRefreshSnapshot;
2017
+ case GOOGLE_PROVIDER_BRAND_ID: return fetchGoogleGeminiProviderRefreshSnapshot;
2018
+ case XAI_PROVIDER_BRAND_ID: return fetchXaiProviderRefreshSnapshot;
2019
+ case MISTRAL_PROVIDER_BRAND_ID: return fetchMistralProviderRefreshSnapshot;
2020
+ case VOLCENGINE_PROVIDER_BRAND_ID: return fetchVolcengineProviderRefreshSnapshot;
2021
+ case BYTEPLUS_PROVIDER_BRAND_ID: return fetchBytePlusProviderRefreshSnapshot;
2022
+ case MINIMAX_PROVIDER_BRAND_ID: return fetchMinimaxProviderRefreshSnapshot;
2023
+ case MOONSHOT_PROVIDER_BRAND_ID: return fetchMoonshotProviderRefreshSnapshot;
2024
+ case QWEN_PROVIDER_BRAND_ID: return fetchQwenProviderRefreshSnapshot;
2025
+ case COPILOT_PROVIDER_BRAND_ID: return fetchCopilotProviderRefreshSnapshot;
2026
+ case XIAOMI_PROVIDER_BRAND_ID: return fetchXiaomiProviderRefreshSnapshot;
2027
+ case SYNTHETIC_PROVIDER_BRAND_ID: return fetchSyntheticProviderRefreshSnapshot;
2028
+ case TOGETHER_PROVIDER_BRAND_ID: return fetchTogetherProviderRefreshSnapshot;
2029
+ case OPENROUTER_PROVIDER_BRAND_ID: return fetchOpenRouterProviderRefreshSnapshot;
2030
+ case ZAI_PROVIDER_BRAND_ID: return fetchZaiProviderRefreshSnapshot;
2031
+ case QIANFAN_PROVIDER_BRAND_ID: return fetchQianfanProviderRefreshSnapshot;
2032
+ case VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID: return fetchVercelAiGatewayProviderRefreshSnapshot;
2033
+ case OPENCODE_ZEN_PROVIDER_BRAND_ID: return fetchOpencodeZenProviderRefreshSnapshot;
2034
+ case OLLAMA_PROVIDER_BRAND_ID: return fetchOllamaProviderRefreshSnapshot;
2035
+ case LMSTUDIO_PROVIDER_BRAND_ID: return fetchLmStudioProviderRefreshSnapshot;
2036
+ case VLLM_PROVIDER_BRAND_ID: return fetchVllmProviderRefreshSnapshot;
2037
+ case LITELLM_PROVIDER_BRAND_ID: return fetchLitellmProviderRefreshSnapshot;
2038
+ case CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID: return fetchCloudflareAiGatewayProviderRefreshSnapshot;
2039
+ case CUSTOM_PROVIDER_BRAND_ID: return fetchCustomProviderRefreshSnapshot;
2040
+ case HUGGINGFACE_PROVIDER_BRAND_ID: return fetchHuggingfaceProviderRefreshSnapshot;
2041
+ case VENICE_PROVIDER_BRAND_ID: return fetchVeniceProviderRefreshSnapshot;
2042
+ default: return undefined;
2043
+ }
2044
+ }
2045
+ async function fetchProviderRefreshSnapshotForRoutes(params) {
2046
+ const requestedRoutes = new Set([...params.routes].map((route) => route.trim().toLowerCase()).filter(Boolean));
2047
+ const fetchers = new Set();
2048
+ for (const manifest of listProviderBrandManifests()) {
2049
+ const routes = new Set([
2050
+ ...manifest.methods.map((method) => method.route.trim().toLowerCase()),
2051
+ ...(manifest.modelProviderIds ?? []).map((route) => route.trim().toLowerCase()),
2052
+ ...(manifest.routeAliases ?? []).map((route) => route.trim().toLowerCase())
2053
+ ]);
2054
+ if (![...routes].some((route) => requestedRoutes.has(route))) {
2055
+ continue;
2056
+ }
2057
+ const fetcher = providerRefreshFetcherForBrand(manifest.id);
2058
+ if (fetcher) {
2059
+ fetchers.add(fetcher);
2060
+ }
2061
+ }
2062
+ const results = await Promise.allSettled([...fetchers].map((fetcher) => fetcher({
2063
+ fetch: params.fetch,
2064
+ env: params.env
2065
+ })));
2066
+ return mergeProviderRefreshSnapshots(results.flatMap((result) => result.status === "fulfilled" ? [result.value] : []));
2067
+ }
1930
2068
  function mergeProviderRefreshSnapshots(snapshots) {
1931
2069
  const providers = {};
1932
2070
  for (const snapshot of snapshots) {
@@ -1951,8 +2089,14 @@ function mergeProviderRefreshSnapshots(snapshots) {
1951
2089
  async function fetchOfficialProviderRefreshSnapshot(params = {}) {
1952
2090
  const fetchImpl = params.fetch ?? fetch;
1953
2091
  const [openai, chutes, anthropic, google, xai, mistral, volcengine, byteplus, minimax, moonshot, qwen, copilot, xiaomi, synthetic, together, openrouter, zai, qianfan, vercelAiGateway, opencodeZen, ollama, lmstudio, vllm, litellm, cloudflareAiGateway, custom, huggingface, venice, staticUnsupported] = await Promise.all([
1954
- fetchOpenAIProviderRefreshSnapshot({ fetch: fetchImpl }),
1955
- fetchChutesProviderRefreshSnapshot({ fetch: fetchImpl }),
2092
+ fetchOpenAIProviderRefreshSnapshot({
2093
+ fetch: fetchImpl,
2094
+ env: params.env
2095
+ }),
2096
+ fetchChutesProviderRefreshSnapshot({
2097
+ fetch: fetchImpl,
2098
+ env: params.env
2099
+ }),
1956
2100
  fetchAnthropicProviderRefreshSnapshot({
1957
2101
  fetch: fetchImpl,
1958
2102
  env: params.env
@@ -2005,7 +2149,10 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
2005
2149
  fetch: fetchImpl,
2006
2150
  env: params.env
2007
2151
  }),
2008
- fetchOpenRouterProviderRefreshSnapshot({ fetch: fetchImpl }),
2152
+ fetchOpenRouterProviderRefreshSnapshot({
2153
+ fetch: fetchImpl,
2154
+ env: params.env
2155
+ }),
2009
2156
  fetchZaiProviderRefreshSnapshot({
2010
2157
  fetch: fetchImpl,
2011
2158
  env: params.env
@@ -2014,8 +2161,14 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
2014
2161
  fetch: fetchImpl,
2015
2162
  env: params.env
2016
2163
  }),
2017
- fetchVercelAiGatewayProviderRefreshSnapshot({ fetch: fetchImpl }),
2018
- fetchOpencodeZenProviderRefreshSnapshot({ fetch: fetchImpl }),
2164
+ fetchVercelAiGatewayProviderRefreshSnapshot({
2165
+ fetch: fetchImpl,
2166
+ env: params.env
2167
+ }),
2168
+ fetchOpencodeZenProviderRefreshSnapshot({
2169
+ fetch: fetchImpl,
2170
+ env: params.env
2171
+ }),
2019
2172
  fetchOllamaProviderRefreshSnapshot({
2020
2173
  fetch: fetchImpl,
2021
2174
  env: params.env
@@ -2040,8 +2193,14 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
2040
2193
  fetch: fetchImpl,
2041
2194
  env: params.env
2042
2195
  }),
2043
- fetchHuggingfaceProviderRefreshSnapshot({ fetch: fetchImpl }),
2044
- fetchVeniceProviderRefreshSnapshot({ fetch: fetchImpl }),
2196
+ fetchHuggingfaceProviderRefreshSnapshot({
2197
+ fetch: fetchImpl,
2198
+ env: params.env
2199
+ }),
2200
+ fetchVeniceProviderRefreshSnapshot({
2201
+ fetch: fetchImpl,
2202
+ env: params.env
2203
+ }),
2045
2204
  Promise.resolve(fetchStaticUnsupportedProviderRefreshSnapshot())
2046
2205
  ]);
2047
2206
  return mergeProviderRefreshSnapshots([
@@ -2078,4 +2237,4 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
2078
2237
  }
2079
2238
 
2080
2239
  //#endregion
2081
- export { applyProviderRefreshToRegistrySource, buildProviderCapabilityOverridesSource, buildProviderRefreshEnvFromCredentials, buildProviderRefreshReport, buildProviderRegistryReviewPatch, fetchOfficialProviderRefreshSnapshot, loadProviderRefreshSnapshotFromFile };
2240
+ export { applyProviderRefreshToRegistrySource, buildProviderCapabilityOverridesSource, buildProviderRefreshEnvFromCredentials, buildProviderRefreshReport, buildProviderRegistryReviewPatch, fetchOfficialProviderRefreshSnapshot, fetchProviderRefreshSnapshotForRoutes, loadProviderRefreshSnapshotFromFile };
@@ -1,13 +1,13 @@
1
1
  import { BASE_THINKING_LEVELS, XHIGH_THINKING_LEVELS, resolveModelThinkingCapability } from "../shared/model-thinking.js";
2
2
  import { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_ID, CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF, CLOUDFLARE_AI_GATEWAY_MODEL_CATALOG, CLOUDFLARE_AI_GATEWAY_MODEL_IDS, CLOUDFLARE_AI_GATEWAY_MODEL_REFS, CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID, CLOUDFLARE_AI_GATEWAY_ROUTE_ID, buildCloudflareAiGatewayModelCapabilityOverrides, resolveCloudflareAiGatewayBaseUrl } from "./cloudflare-ai-gateway-shared.js";
3
3
  import { HUGGINGFACE_DEFAULT_MODEL_ID, HUGGINGFACE_DEFAULT_MODEL_REF, HUGGINGFACE_MODEL_IDS, HUGGINGFACE_MODEL_REFS, buildHuggingfaceModelCapabilityOverrides } from "./huggingface-models.js";
4
- import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID, LITELLM_DEFAULT_MODEL_REF, LITELLM_MODEL_IDS, LITELLM_MODEL_REFS, buildLitellmModelCapabilityOverrides } from "./litellm-models.js";
5
4
  import { OPENCODE_ZEN_DEFAULT_MODEL, OPENCODE_ZEN_DEFAULT_MODEL_REF, OPENCODE_ZEN_MODEL_IDS, OPENCODE_ZEN_MODEL_REFS, buildOpencodeZenModelCapabilityOverrides } from "./opencode-zen-shared.js";
6
5
  import { SYNTHETIC_MODEL_IDS, buildSyntheticModelCapabilityOverrides } from "./synthetic-models.js";
7
6
  import { TOGETHER_DEFAULT_MODEL_ID, TOGETHER_DEFAULT_MODEL_REF, TOGETHER_MODEL_IDS, TOGETHER_MODEL_REFS, buildTogetherModelCapabilityOverrides } from "./together-models.js";
8
7
  import { VENICE_DEFAULT_MODEL_ID, VENICE_DEFAULT_MODEL_REF, VENICE_MODEL_IDS, VENICE_MODEL_REFS, buildVeniceModelCapabilityOverrides } from "./venice-models.js";
9
8
  import { VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, VERCEL_AI_GATEWAY_MODEL_IDS, VERCEL_AI_GATEWAY_MODEL_REFS, buildVercelAiGatewayModelCapabilityOverrides } from "./vercel-ai-gateway-models.js";
10
9
  import { XIAOMI_MODEL_IDS, buildXiaomiModelCapabilityOverrides } from "./xiaomi-models.js";
10
+ import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID, LITELLM_MODEL_IDS, LITELLM_MODEL_REFS } from "./litellm-models.js";
11
11
 
12
12
  //#region src/providers/registry.ts
13
13
  const PROVIDER_BRAND_ORDER = [
@@ -112,7 +112,18 @@ const OPENAI_API_MODEL_IDS = [
112
112
  "gpt-5.6-luna",
113
113
  "gpt-5.5"
114
114
  ];
115
- const OPENAI_SIGN_IN_MODEL_IDS = ["gpt-5.5"];
115
+ const OPENAI_SIGN_IN_MODEL_IDS = [
116
+ "gpt-5.6-sol",
117
+ "gpt-5.6-terra",
118
+ "gpt-5.6-luna",
119
+ "gpt-5.5"
120
+ ];
121
+ const OPENAI_SIGN_IN_LEGACY_RUNTIME_MODEL_IDS = [
122
+ "gpt-5.3-codex",
123
+ "gpt-5.3-codex-spark",
124
+ "gpt-5.4",
125
+ "gpt-5.4-mini"
126
+ ];
116
127
  const OPENAI_API_MODEL_REFS = OPENAI_API_MODEL_IDS.map((id) => `${OPENAI_API_ROUTE_ID}/${id}`);
117
128
  const OPENAI_SIGN_IN_MODEL_REFS = OPENAI_SIGN_IN_MODEL_IDS.map((id) => `${OPENAI_CODEX_ROUTE_ID}/${id}`);
118
129
  const ANTHROPIC_MODEL_IDS = [
@@ -218,7 +229,6 @@ const BYTEPLUS_CODING_MODEL_IDS = [
218
229
  ];
219
230
  const BYTEPLUS_CODING_MODEL_REFS = BYTEPLUS_CODING_MODEL_IDS.flatMap((id) => [`${BYTEPLUS_CODING_ROUTE_ID}/${id}`, `${BYTEPLUS_PLAN_ROUTE_ID}/${id}`]);
220
231
  const OPENROUTER_MODEL_IDS = [
221
- "openrouter/owl-alpha",
222
232
  "openai/gpt-5.6-sol",
223
233
  "openai/gpt-5.6-terra",
224
234
  "openai/gpt-5.6-luna",
@@ -412,7 +422,6 @@ const SYNTHETIC_MODEL_CAPABILITY_OVERRIDES = buildSyntheticModelCapabilityOverri
412
422
  const TOGETHER_MODEL_CAPABILITY_OVERRIDES = buildTogetherModelCapabilityOverrides(TOGETHER_ROUTE_ID);
413
423
  const HUGGINGFACE_MODEL_CAPABILITY_OVERRIDES = buildHuggingfaceModelCapabilityOverrides(HUGGINGFACE_ROUTE_ID);
414
424
  const VENICE_MODEL_CAPABILITY_OVERRIDES = buildVeniceModelCapabilityOverrides(VENICE_ROUTE_ID);
415
- const LITELLM_MODEL_CAPABILITY_OVERRIDES = buildLitellmModelCapabilityOverrides(LITELLM_ROUTE_ID);
416
425
  const CLOUDFLARE_AI_GATEWAY_MODEL_CAPABILITY_OVERRIDES = buildCloudflareAiGatewayModelCapabilityOverrides(CLOUDFLARE_AI_GATEWAY_ROUTE_ID);
417
426
  const CUSTOM_PROVIDER_MODEL_REFS = [];
418
427
  function parseModelRef(ref) {
@@ -1427,12 +1436,12 @@ const LITELLM_PROVIDER_MANIFEST = {
1427
1436
  hint: "LiteLLM Proxy virtual key or master key plus /v1 base URL"
1428
1437
  }],
1429
1438
  models: {
1430
- recommended: [...LITELLM_MODEL_REFS],
1439
+ recommended: [],
1431
1440
  dynamic: true,
1432
1441
  operatorCatalog: true,
1433
1442
  routeRules: { [LITELLM_ROUTE_ID]: [`${LITELLM_ROUTE_ID}/*`] }
1434
1443
  },
1435
- modelCapabilities: LITELLM_MODEL_CAPABILITY_OVERRIDES
1444
+ modelCapabilities: {}
1436
1445
  };
1437
1446
  const CLOUDFLARE_AI_GATEWAY_PROVIDER_MANIFEST = {
1438
1447
  id: CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID,
@@ -1515,6 +1524,7 @@ const PROVIDER_MANIFEST_BY_ROUTE = new Map(PROVIDER_REGISTRY.flatMap((entry) =>
1515
1524
  const STANDARD_PROVIDER_MODEL_REFS = new Set(PROVIDER_REGISTRY.flatMap((entry) => entry.models.recommended.map((ref) => ref.toLowerCase())));
1516
1525
  const PROVIDER_MODEL_CAPABILITY_BY_REF = new Map(PROVIDER_REGISTRY.flatMap((entry) => Object.entries(entry.modelCapabilities ?? {}).map(([ref, capability]) => [ref.toLowerCase(), capability])));
1517
1526
  const OPENAI_SIGN_IN_MODEL_ID_SET = new Set(OPENAI_SIGN_IN_MODEL_IDS);
1527
+ const OPENAI_SIGN_IN_RUNTIME_MODEL_ID_SET = new Set([...OPENAI_SIGN_IN_MODEL_IDS, ...OPENAI_SIGN_IN_LEGACY_RUNTIME_MODEL_IDS]);
1518
1528
  function listProviderBrandManifests() {
1519
1529
  return [...PROVIDER_REGISTRY];
1520
1530
  }
@@ -1535,6 +1545,9 @@ function isOpenAIProviderRoute(provider) {
1535
1545
  return normalized === OPENAI_API_ROUTE_ID || normalized === OPENAI_CODEX_ROUTE_ID;
1536
1546
  }
1537
1547
  function isOpenAISignInRuntimeModelSupported(id) {
1548
+ return OPENAI_SIGN_IN_RUNTIME_MODEL_ID_SET.has(id.trim().toLowerCase());
1549
+ }
1550
+ function isOpenAISignInCatalogModel(id) {
1538
1551
  return OPENAI_SIGN_IN_MODEL_ID_SET.has(id.trim().toLowerCase());
1539
1552
  }
1540
1553
  function lookupProviderManifestModelCapability(provider, model) {
@@ -1567,6 +1580,17 @@ function isStandardProviderModelRef(ref) {
1567
1580
  }
1568
1581
  return STANDARD_PROVIDER_MODEL_REFS.has(value.toLowerCase());
1569
1582
  }
1583
+ function providerModelRecommendationRank(provider, model) {
1584
+ const manifest = getProviderBrandManifestForRoute(provider);
1585
+ if (!manifest) {
1586
+ return undefined;
1587
+ }
1588
+ const normalizedProvider = provider.trim().toLowerCase();
1589
+ const normalizedRef = `${normalizedProvider}/${model.trim().toLowerCase()}`;
1590
+ const routeRecommendations = manifest.models.recommended.filter((ref) => ref.trim().toLowerCase().startsWith(`${normalizedProvider}/`));
1591
+ const index = routeRecommendations.findIndex((ref) => ref.trim().toLowerCase() === normalizedRef);
1592
+ return index >= 0 ? index + 1 : undefined;
1593
+ }
1570
1594
  function isStandardProviderCatalogEntry(entry) {
1571
1595
  const provider = entry.provider.trim();
1572
1596
  const id = entry.id.trim();
@@ -1577,4 +1601,4 @@ function isStandardProviderCatalogEntry(entry) {
1577
1601
  }
1578
1602
 
1579
1603
  //#endregion
1580
- export { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_PROVIDER_MANIFEST, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_MODEL_REFS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_MODEL_REFS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_MODEL_REFS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_DEFAULT_MODEL_REF, GITHUB_COPILOT_MODEL_IDS, GITHUB_COPILOT_MODEL_REFS, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_MODEL_REFS, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_MODEL_REFS, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_MODEL_REFS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_MODEL_REFS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENAI_SIGN_IN_MODEL_REFS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_MODEL_REFS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, PROVIDER_BRAND_ORDER, QIANFAN_MODEL_IDS, QIANFAN_MODEL_REFS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_MODEL_REFS, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_MODEL_REFS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_MODEL_REFS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_MODEL_REFS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_MODEL_REFS, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_MODEL_REFS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, getProviderBrandManifestForRoute, isOpenAISignInRuntimeModelSupported, isStandardProviderCatalogEntry, isStandardProviderModelRef, listProviderBrandManifests, lookupProviderManifestModelCapability, resolveProviderRouteModelCapability };
1604
+ export { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_PROVIDER_MANIFEST, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_MODEL_REFS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_MODEL_REFS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_MODEL_REFS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_DEFAULT_MODEL_REF, GITHUB_COPILOT_MODEL_IDS, GITHUB_COPILOT_MODEL_REFS, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_MODEL_REFS, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_MODEL_REFS, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_MODEL_REFS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_MODEL_REFS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENAI_SIGN_IN_MODEL_REFS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_MODEL_REFS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, PROVIDER_BRAND_ORDER, QIANFAN_MODEL_IDS, QIANFAN_MODEL_REFS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_MODEL_REFS, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_MODEL_REFS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_MODEL_REFS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_MODEL_REFS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_MODEL_REFS, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_MODEL_REFS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, getProviderBrandManifestForRoute, isOpenAISignInCatalogModel, isOpenAISignInRuntimeModelSupported, isStandardProviderCatalogEntry, isStandardProviderModelRef, listProviderBrandManifests, lookupProviderManifestModelCapability, providerModelRecommendationRank, resolveProviderRouteModelCapability };