@fased/fased 0.1.54 → 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 (163) hide show
  1. package/dist/agents/authenticated-model-catalog.js +27 -0
  2. package/dist/agents/current-model-catalog.js +3 -10
  3. package/dist/agents/model-catalog-normalized.js +1 -0
  4. package/dist/agents/model-metadata.js +25 -4
  5. package/dist/agents/pi-embedded-runner/extra-params.js +25 -0
  6. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  7. package/dist/brand.js +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  10. package/dist/cli/providers-cli.js +3 -2
  11. package/dist/commands/auth-choice.apply.api-providers.js +3 -8
  12. package/dist/commands/auth-choice.apply.openai.js +13 -7
  13. package/dist/commands/auth-choice.model-check.js +1 -2
  14. package/dist/commands/configure.gateway-auth.js +14 -16
  15. package/dist/commands/model-picker.js +25 -7
  16. package/dist/commands/models/list.registry.js +12 -17
  17. package/dist/commands/onboard-auth.config-core.js +1 -1
  18. package/dist/commands/onboard-auth.config-litellm.js +21 -21
  19. package/dist/commands/onboard-auth.credentials.js +0 -1
  20. package/dist/commands/onboard-auth.js +0 -1
  21. package/dist/commands/openai-codex-model-default.js +27 -5
  22. package/dist/config/zod-schema.agent-defaults.js +4 -2
  23. package/dist/config/zod-schema.agent-runtime.js +4 -2
  24. package/dist/config/zod-schema.core.js +4 -2
  25. package/dist/control-ui/assets/{app-BKlu6OKz.js → app-D2RaTXoV.js} +1475 -1474
  26. package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +2 -0
  27. package/dist/control-ui/assets/{index-nrFcGMv-.js → index-D2nC6I-9.js} +3 -3
  28. package/dist/control-ui/assets/{providers-BQFrRqym.js → providers-CyjiG5Jw.js} +4 -4
  29. package/dist/control-ui/index.html +1 -1
  30. package/dist/control-ui/version.json +1 -0
  31. package/dist/gateway/control-ui.js +2 -0
  32. package/dist/gateway/protocol/schema/agents-models-skills.js +5 -2
  33. package/dist/gateway/server-methods/models.js +7 -8
  34. package/dist/gateway/server-model-catalog.js +3 -0
  35. package/dist/infra/update-runner.js +31 -3
  36. package/dist/light-update-status.js +11 -11
  37. package/dist/memory/inventory.js +19 -2
  38. package/dist/plugin-sdk/{accounts-DW9OS5Ll.js → accounts-CeRNo5Ae.js} +1 -1
  39. package/dist/plugin-sdk/{actions-DQUXohRr.js → actions-OMRHtXPj.js} +2 -2
  40. package/dist/plugin-sdk/{active-listener-BZQWZPF7.js → active-listener-BlIkS3iR.js} +1 -1
  41. package/dist/plugin-sdk/{audio-preflight-t4mmHsI2.js → audio-preflight-B2n3a2Tj.js} +26 -26
  42. package/dist/plugin-sdk/{audit-BZk_6Buw.js → audit-Ppg6dR_b.js} +1 -1
  43. package/dist/plugin-sdk/{channel-access-CN5HiWdb.js → channel-access-af8dWWRv.js} +1 -1
  44. package/dist/plugin-sdk/{channel-access-configure-B7Kkvx9K.js → channel-access-configure-B6IAGlE0.js} +1 -1
  45. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  46. package/dist/plugin-sdk/channel-plugin-common.js +4 -4
  47. package/dist/plugin-sdk/{chunk-B2ffJ-LR.js → chunk-CD76Byie.js} +1 -1
  48. package/dist/plugin-sdk/{chunk-items-jOdkyP53.js → chunk-items-Bu19zrYH.js} +1 -1
  49. package/dist/plugin-sdk/command-status.d.ts +2 -2
  50. package/dist/plugin-sdk/command-status.js +26 -26
  51. package/dist/plugin-sdk/{commands-registry-BWb4NcfW.js → commands-registry-DgS55tNj.js} +2 -2
  52. package/dist/plugin-sdk/{common-C4XrB73N.js → common-CWvfeiX0.js} +1 -1
  53. package/dist/plugin-sdk/{config-rySyVtKs.js → config-CYDETqcF.js} +83 -65
  54. package/dist/plugin-sdk/{config-schema-BaybPPrJ.js → config-schema-CQ4EVcQG.js} +128 -66
  55. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  56. package/dist/plugin-sdk/discord.d.ts +5 -5
  57. package/dist/plugin-sdk/discord.js +19 -19
  58. package/dist/plugin-sdk/{group-mentions-DLOOve8d.d.ts → group-mentions-BxDgHCgj.d.ts} +1 -1
  59. package/dist/plugin-sdk/{handle-action-CGF-Qnp0.js → handle-action-B75UVKxF.js} +13 -13
  60. package/dist/plugin-sdk/{helpers-DgRMfCnT.js → helpers-BuEwju6y.js} +1 -1
  61. package/dist/plugin-sdk/{image-ops-CcBfoMLW.js → image-ops-C66HPeAZ.js} +1 -1
  62. package/dist/plugin-sdk/index.d.ts +8 -8
  63. package/dist/plugin-sdk/index.js +28 -28
  64. package/dist/plugin-sdk/{login-DpDQyM7r.js → login-Amr2DpKU.js} +3 -3
  65. package/dist/plugin-sdk/{login-qr-COaSAPY5.js → login-qr-DMQNEi9m.js} +3 -3
  66. package/dist/plugin-sdk/{manager-Cqz30lA3.js → manager-Bvpq49BI.js} +2 -2
  67. package/dist/plugin-sdk/{markdown-tables-BOG5sSQQ.js → markdown-tables-DmQ7oXOm.js} +1 -1
  68. package/dist/plugin-sdk/{media-Bu-nJpPs.js → media-ByLQbEwJ.js} +2 -2
  69. package/dist/plugin-sdk/{monitor-II_NIq3G.js → monitor-K_u6daGa.js} +30 -30
  70. package/dist/plugin-sdk/{monitor-DL6oEVo8.js → monitor-S_7LrvSj.js} +31 -31
  71. package/dist/plugin-sdk/{openresponses-http-vkHBBpGY.js → openresponses-http-BrDJUZXR.js} +26 -26
  72. package/dist/plugin-sdk/{optional-runtime-dependency-DEojVNfv.js → optional-runtime-dependency-CbYjAC2b.js} +1 -1
  73. package/dist/plugin-sdk/{outbound-mf2y6KuY.js → outbound-BuDafBBI.js} +6 -6
  74. package/dist/plugin-sdk/{outbound-attachment-ivAHpWnn.js → outbound-attachment-DmZmUqFP.js} +2 -2
  75. package/dist/plugin-sdk/{pairing-message-CvJ6Qa1Q.d.ts → pairing-message-D0-UWGFJ.d.ts} +2 -2
  76. package/dist/plugin-sdk/{pairing-message-CqYG12t-.js → pairing-message-e4D4eBDA.js} +1 -1
  77. package/dist/plugin-sdk/{pairing-store-D-21Sphe.js → pairing-store-T3IGoGZg.js} +2 -2
  78. package/dist/plugin-sdk/{pi-model-discovery-B6gD1clF.js → pi-model-discovery-DvAG_Png.js} +1 -1
  79. package/dist/plugin-sdk/{pi-model-discovery-runtime-3yDxS3ro.js → pi-model-discovery-runtime-NjkUgjIf.js} +2 -2
  80. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  81. package/dist/plugin-sdk/{pw-ai-CMplwiwf.js → pw-ai-D7eW43DL.js} +3 -3
  82. package/dist/plugin-sdk/{replies-wiI4veI7.js → replies-BMIPmEoP.js} +2 -2
  83. package/dist/plugin-sdk/{resolve-outbound-target-bm9RUK5q.js → resolve-outbound-target-CXCqUUPV.js} +1 -1
  84. package/dist/plugin-sdk/{resolve-route-ekGNc6os.js → resolve-route-DJN-SUSt.js} +1 -1
  85. package/dist/plugin-sdk/{retry-policy-BvlC2SPh.js → retry-policy-CY1qY6d7.js} +1 -1
  86. package/dist/plugin-sdk/{runtime-ClSakPxR.js → runtime-CgOkQe0w.js} +3 -3
  87. package/dist/plugin-sdk/{runtime-dependency-yAWxH4El.js → runtime-dependency-DvdRNMvs.js} +2 -2
  88. package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
  89. package/dist/plugin-sdk/sat-runtime.js +5 -5
  90. package/dist/plugin-sdk/{send-CgyS75Av.js → send-2ITqny2W.js} +8 -8
  91. package/dist/plugin-sdk/{send-D264hFVb.js → send-BAz22RZr.js} +5 -5
  92. package/dist/plugin-sdk/{send-C7x6gzSl.js → send-BG3RWyil.js} +7 -7
  93. package/dist/plugin-sdk/{send-D58yEeH4.js → send-Cr-dj6S-.js} +6 -6
  94. package/dist/plugin-sdk/{send-DrAtUGLM.js → send-eTxqFFsw.js} +6 -6
  95. package/dist/plugin-sdk/{session-DyMtb5YQ.js → session-C8nJmmVE.js} +2 -2
  96. package/dist/plugin-sdk/{skill-commands-Q80wCyry.js → skill-commands-Rm5by9S8.js} +2 -2
  97. package/dist/plugin-sdk/{slack-actions-dGE_t_Un.js → slack-actions-BNIALJTA.js} +11 -11
  98. package/dist/plugin-sdk/{slack-C-I6q3NB.js → slack-xvIVvyEM.js} +38 -38
  99. package/dist/plugin-sdk/slack.d.ts +5 -5
  100. package/dist/plugin-sdk/slack.js +9 -9
  101. package/dist/plugin-sdk/{sticker-cache-DCrDTYIi.js → sticker-cache-D3oDiu2u.js} +3 -3
  102. package/dist/plugin-sdk/{tables-0mhUOh5v.js → tables-DS5L7lCA.js} +1 -1
  103. package/dist/plugin-sdk/{targets-znKHngSk.js → targets-D6lUomJc.js} +1 -1
  104. package/dist/plugin-sdk/{telegram-actions-GBYY8-x9.js → telegram-actions-MSFkDn0m.js} +29 -29
  105. package/dist/plugin-sdk/telegram.d.ts +5 -5
  106. package/dist/plugin-sdk/telegram.js +8 -8
  107. package/dist/plugin-sdk/{thread-bindings.lifecycle-ClzPBK70.js → thread-bindings.lifecycle-Ry6Vcgw3.js} +3 -3
  108. package/dist/plugin-sdk/{thread-bindings.state-Ha01nmrq.js → thread-bindings.state-C0stmvNk.js} +2 -2
  109. package/dist/plugin-sdk/{tmp-fased-dir-C_xfeEN9.d.ts → tmp-fased-dir-D91GExk4.d.ts} +2 -2
  110. package/dist/plugin-sdk/{types-CBCtqtMn.d.ts → types-BzadOItY.d.ts} +1 -1
  111. package/dist/plugin-sdk/{types-BI2njxWJ.d.ts → types-DKvBJHfH.d.ts} +14 -5
  112. package/dist/plugin-sdk/{types-DV5TNhMK.d.ts → types-DVTIpopt.d.ts} +2 -2
  113. package/dist/plugin-sdk/{types.plugin-CvUiB3Kh.d.ts → types.plugin-BiHPaDTF.d.ts} +2 -1
  114. package/dist/plugin-sdk/{wallet-status-CyovJojz.js → wallet-status-f0HagNeO.js} +8 -5
  115. package/dist/plugin-sdk/{web-CJMfhGFY.js → web-DRNJxHXA.js} +31 -31
  116. package/dist/plugin-sdk/{whatsapp-actions-0ZbGo5ZV.js → whatsapp-actions-BDXZF2R5.js} +13 -13
  117. package/dist/plugin-sdk/{whatsapp-heartbeat-DGTsuvQ8.js → whatsapp-heartbeat-CKgmwCGr.js} +2 -2
  118. package/dist/plugin-sdk/whatsapp.d.ts +5 -5
  119. package/dist/plugin-sdk/whatsapp.js +12 -12
  120. package/dist/plugin-sdk/{wsl-D5jDUlms.js → wsl-Biw7Mj39.js} +3 -3
  121. package/dist/providers/litellm-models.js +1 -1
  122. package/dist/providers/refresh.js +218 -56
  123. package/dist/providers/registry.js +15 -5
  124. package/dist/providers/runtime-model-catalog.js +181 -0
  125. package/dist/shared/model-thinking.js +41 -2
  126. package/dist/wizard/onboarding.js +24 -6
  127. package/extensions/acpx/package.json +1 -1
  128. package/extensions/bluebubbles/package.json +1 -1
  129. package/extensions/copilot-proxy/package.json +1 -1
  130. package/extensions/diagnostics-otel/package.json +1 -1
  131. package/extensions/fased-federation/package.json +1 -1
  132. package/extensions/google-gemini-cli-auth/package.json +1 -1
  133. package/extensions/imessage/package.json +1 -1
  134. package/extensions/irc/package.json +1 -1
  135. package/extensions/line/package.json +1 -1
  136. package/extensions/llm-task/package.json +1 -1
  137. package/extensions/lobster/package.json +1 -1
  138. package/extensions/matrix/CHANGELOG.md +6 -0
  139. package/extensions/matrix/package.json +1 -1
  140. package/extensions/mattermost/package.json +1 -1
  141. package/extensions/memory-core/package.json +2 -2
  142. package/extensions/memory-lancedb/package.json +1 -1
  143. package/extensions/minimax-portal-auth/package.json +1 -1
  144. package/extensions/msteams/CHANGELOG.md +6 -0
  145. package/extensions/msteams/package.json +1 -1
  146. package/extensions/nextcloud-talk/package.json +1 -1
  147. package/extensions/nostr/CHANGELOG.md +6 -0
  148. package/extensions/nostr/package.json +1 -1
  149. package/extensions/open-prose/package.json +1 -1
  150. package/extensions/sat-mining/package.json +1 -1
  151. package/extensions/signal/package.json +1 -1
  152. package/extensions/synology-chat/package.json +1 -1
  153. package/extensions/tlon/package.json +1 -1
  154. package/extensions/twitch/CHANGELOG.md +6 -0
  155. package/extensions/twitch/package.json +1 -1
  156. package/extensions/voice-call/CHANGELOG.md +6 -0
  157. package/extensions/voice-call/package.json +1 -1
  158. package/extensions/zalo/CHANGELOG.md +6 -0
  159. package/extensions/zalo/package.json +1 -1
  160. package/extensions/zalouser/CHANGELOG.md +6 -0
  161. package/extensions/zalouser/package.json +1 -1
  162. package/package.json +1 -1
  163. package/dist/control-ui/assets/chat-model-ref-B9sWop67.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,9 +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\.6-(?:sol|terra|luna)|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
49
  function normalizeModelIds(values, options = {}) {
51
50
  const seen = new Set();
52
51
  const result = [];
@@ -109,6 +108,12 @@ function setProviderRefreshEnvFromProfile(params) {
109
108
  const provider = params.profile.provider.trim();
110
109
  const apiKey = resolveApiKeyProfileValue(params.profile, params.env);
111
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;
112
117
  case "anthropic":
113
118
  setProviderRefreshEnvValue(params.target, "ANTHROPIC_API_KEY", apiKey);
114
119
  break;
@@ -187,6 +192,23 @@ function setProviderRefreshEnvFromProfile(params) {
187
192
  case "together":
188
193
  setProviderRefreshEnvValue(params.target, "TOGETHER_API_KEY", apiKey);
189
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;
190
212
  default:
191
213
  if (provider.startsWith("custom-")) {
192
214
  setProviderRefreshEnvValue(params.target, "CUSTOM_PROVIDER_API_KEY", apiKey);
@@ -198,6 +220,28 @@ function setProviderRefreshEnvFromModelProvider(params) {
198
220
  const apiKey = resolveEnvSecretValue(params.provider.apiKey, params.env);
199
221
  const baseUrl = typeof params.provider.baseUrl === "string" ? params.provider.baseUrl.trim() : undefined;
200
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;
201
245
  case "vllm":
202
246
  setProviderRefreshEnvValue(params.target, "VLLM_API_KEY", apiKey);
203
247
  setProviderRefreshEnvValue(params.target, "VLLM_BASE_URL", baseUrl);
@@ -1091,13 +1135,13 @@ function selectManifestModelsForNormalUi(modelIds, preferred) {
1091
1135
  return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => allowed.has(id.toLowerCase())), preferred);
1092
1136
  }
1093
1137
  function selectOpenAIApiModelsForNormalUi(modelIds) {
1094
- 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);
1095
1139
  }
1096
1140
  function selectOpenAISignInModelsForNormalUi(modelIds) {
1097
- 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);
1098
1142
  }
1099
1143
  function selectChutesModelsForNormalUi(modelIds) {
1100
- return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => CHUTES_CURRENT_NORMAL_UI_MODEL_RE.test(id)), CHUTES_MODEL_IDS);
1144
+ return selectManifestModelsForNormalUi(modelIds, CHUTES_MODEL_IDS);
1101
1145
  }
1102
1146
  function selectAnthropicModelsForNormalUi(modelIds) {
1103
1147
  return selectManifestModelsForNormalUi(modelIds, ANTHROPIC_MODEL_IDS);
@@ -1163,8 +1207,7 @@ function selectDynamicProviderModelsForNormalUi(modelIds) {
1163
1207
  return normalizeModelIds(modelIds);
1164
1208
  }
1165
1209
  function selectLitellmModelsForNormalUi(modelIds) {
1166
- const discovered = selectDynamicProviderModelsForNormalUi(modelIds);
1167
- return discovered.length > 0 ? discovered : [...LITELLM_MODEL_IDS];
1210
+ return selectDynamicProviderModelsForNormalUi(modelIds);
1168
1211
  }
1169
1212
  function selectOpenRouterModelsForNormalUi(modelIds) {
1170
1213
  return selectManifestModelsForNormalUi(modelIds, OPENROUTER_MODEL_IDS);
@@ -1193,7 +1236,10 @@ function readEnv(env, names) {
1193
1236
  return undefined;
1194
1237
  }
1195
1238
  async function fetchJsonCatalog(params) {
1196
- 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
+ });
1197
1243
  if (!response.ok) {
1198
1244
  throw new Error(`${params.label} model catalog fetch failed: HTTP ${response.status}`);
1199
1245
  }
@@ -1269,7 +1315,25 @@ function cloudflareAiGatewayHeaders(env, providerKey) {
1269
1315
  }
1270
1316
  async function fetchOpenAIProviderRefreshSnapshot(params = {}) {
1271
1317
  const fetchImpl = params.fetch ?? fetch;
1272
- 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) });
1273
1337
  if (!response.ok) {
1274
1338
  throw new Error(`OpenAI docs model fetch failed: HTTP ${response.status}`);
1275
1339
  }
@@ -1280,16 +1344,20 @@ async function fetchOpenAIProviderRefreshSnapshot(params = {}) {
1280
1344
  reason: "catalog-unsupported",
1281
1345
  detail: "OpenAI public model docs do not verify ChatGPT sign-in route compatibility."
1282
1346
  } },
1283
- routes: { [OPENAI_API_ROUTE_ID]: selectOpenAIApiModelsForNormalUi(ids) }
1347
+ routes: { [OPENAI_API_ROUTE_ID]: selectOpenAIApiModelsForNormalUi(ids).map((id) => ({
1348
+ id,
1349
+ source: "official-docs"
1350
+ })) }
1284
1351
  } } };
1285
1352
  }
1286
1353
  async function fetchChutesProviderRefreshSnapshot(params = {}) {
1287
- const fetchImpl = params.fetch ?? fetch;
1288
- const response = await fetchImpl(CHUTES_MODELS_URL);
1289
- if (!response.ok) {
1290
- throw new Error(`Chutes model catalog fetch failed: HTTP ${response.status}`);
1291
- }
1292
- 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
+ });
1293
1361
  const models = parseGenericModelSnapshotsFromModelsResponse(payload);
1294
1362
  const ids = models.map((model) => model.id);
1295
1363
  return { providers: { [CHUTES_PROVIDER_BRAND_ID]: { routes: { [CHUTES_ROUTE_ID]: selectModelSnapshotsByIds(models, selectChutesModelsForNormalUi(ids), CHUTES_ROUTE_ID) } } } };
@@ -1370,7 +1438,7 @@ async function fetchXaiProviderRefreshSnapshot(params = {}) {
1370
1438
  }
1371
1439
  const payload = await fetchJsonCatalog({
1372
1440
  fetch: params.fetch ?? fetch,
1373
- url: XAI_MODELS_URL,
1441
+ url: XAI_LANGUAGE_MODELS_URL,
1374
1442
  headers: bearerHeaders(token),
1375
1443
  label: "xAI"
1376
1444
  });
@@ -1864,56 +1932,73 @@ async function fetchTogetherProviderRefreshSnapshot(params = {}) {
1864
1932
  return { providers: { [TOGETHER_PROVIDER_BRAND_ID]: { routes: { [TOGETHER_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, TOGETHER_ROUTE_ID) } } } };
1865
1933
  }
1866
1934
  async function fetchOpenRouterProviderRefreshSnapshot(params = {}) {
1867
- const fetchImpl = params.fetch ?? fetch;
1868
- const response = await fetchImpl(OPENROUTER_MODELS_URL);
1869
- if (!response.ok) {
1870
- throw new Error(`OpenRouter model catalog fetch failed: HTTP ${response.status}`);
1871
- }
1872
- 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
+ });
1873
1942
  const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
1874
1943
  const ids = selectOpenRouterModelsForNormalUi(models.map((model) => model.id));
1875
1944
  return { providers: { [OPENROUTER_PROVIDER_BRAND_ID]: { routes: { [OPENROUTER_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, OPENROUTER_ROUTE_ID) } } } };
1876
1945
  }
1877
1946
  async function fetchVercelAiGatewayProviderRefreshSnapshot(params = {}) {
1878
- const fetchImpl = params.fetch ?? fetch;
1879
- const response = await fetchImpl(VERCEL_AI_GATEWAY_MODELS_URL);
1880
- if (!response.ok) {
1881
- throw new Error(`Vercel AI Gateway model catalog fetch failed: HTTP ${response.status}`);
1882
- }
1883
- 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
+ });
1884
1954
  const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
1885
1955
  const ids = selectVercelAiGatewayModelsForNormalUi(models.map((model) => model.id));
1886
1956
  return { providers: { [VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID]: { routes: { [VERCEL_AI_GATEWAY_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, VERCEL_AI_GATEWAY_ROUTE_ID) } } } };
1887
1957
  }
1888
1958
  async function fetchOpencodeZenProviderRefreshSnapshot(params = {}) {
1889
- const fetchImpl = params.fetch ?? fetch;
1890
- const response = await fetchImpl(OPENCODE_ZEN_MODELS_URL);
1891
- if (!response.ok) {
1892
- throw new Error(`OpenCode Zen model catalog fetch failed: HTTP ${response.status}`);
1893
- }
1894
- 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
+ });
1895
1966
  const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
1896
1967
  const ids = selectOpencodeZenModelsForNormalUi(models.map((model) => model.id));
1897
1968
  return { providers: { [OPENCODE_ZEN_PROVIDER_BRAND_ID]: { routes: { [OPENCODE_ZEN_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, OPENCODE_ZEN_ROUTE_ID) } } } };
1898
1969
  }
1899
1970
  async function fetchHuggingfaceProviderRefreshSnapshot(params = {}) {
1900
- const fetchImpl = params.fetch ?? fetch;
1901
- const response = await fetchImpl(HUGGINGFACE_MODELS_URL);
1902
- if (!response.ok) {
1903
- 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
+ } });
1904
1977
  }
1905
- 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
+ });
1906
1984
  const models = parseHuggingfaceModelSnapshotsFromModelsResponse(payload);
1907
1985
  const ids = selectHuggingfaceModelsForNormalUi(models.map((model) => model.id));
1908
1986
  return { providers: { [HUGGINGFACE_PROVIDER_BRAND_ID]: { routes: { [HUGGINGFACE_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, HUGGINGFACE_ROUTE_ID) } } } };
1909
1987
  }
1910
1988
  async function fetchVeniceProviderRefreshSnapshot(params = {}) {
1911
- const fetchImpl = params.fetch ?? fetch;
1912
- const response = await fetchImpl(VENICE_MODELS_URL);
1913
- if (!response.ok) {
1914
- 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
+ } });
1915
1995
  }
1916
- 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
+ });
1917
2002
  const models = parseVeniceModelSnapshotsFromModelsResponse(payload);
1918
2003
  const ids = selectVeniceModelsForNormalUi(models.map((model) => model.id));
1919
2004
  return { providers: { [VENICE_PROVIDER_BRAND_ID]: { routes: { [VENICE_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, VENICE_ROUTE_ID) } } } };
@@ -1924,6 +2009,62 @@ function fetchStaticUnsupportedProviderRefreshSnapshot() {
1924
2009
  detail: "Direct GitHub Copilot model catalog probing is not implemented; configure Copilot Proxy for a probeable /models route."
1925
2010
  } })]);
1926
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
+ }
1927
2068
  function mergeProviderRefreshSnapshots(snapshots) {
1928
2069
  const providers = {};
1929
2070
  for (const snapshot of snapshots) {
@@ -1948,8 +2089,14 @@ function mergeProviderRefreshSnapshots(snapshots) {
1948
2089
  async function fetchOfficialProviderRefreshSnapshot(params = {}) {
1949
2090
  const fetchImpl = params.fetch ?? fetch;
1950
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([
1951
- fetchOpenAIProviderRefreshSnapshot({ fetch: fetchImpl }),
1952
- fetchChutesProviderRefreshSnapshot({ fetch: fetchImpl }),
2092
+ fetchOpenAIProviderRefreshSnapshot({
2093
+ fetch: fetchImpl,
2094
+ env: params.env
2095
+ }),
2096
+ fetchChutesProviderRefreshSnapshot({
2097
+ fetch: fetchImpl,
2098
+ env: params.env
2099
+ }),
1953
2100
  fetchAnthropicProviderRefreshSnapshot({
1954
2101
  fetch: fetchImpl,
1955
2102
  env: params.env
@@ -2002,7 +2149,10 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
2002
2149
  fetch: fetchImpl,
2003
2150
  env: params.env
2004
2151
  }),
2005
- fetchOpenRouterProviderRefreshSnapshot({ fetch: fetchImpl }),
2152
+ fetchOpenRouterProviderRefreshSnapshot({
2153
+ fetch: fetchImpl,
2154
+ env: params.env
2155
+ }),
2006
2156
  fetchZaiProviderRefreshSnapshot({
2007
2157
  fetch: fetchImpl,
2008
2158
  env: params.env
@@ -2011,8 +2161,14 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
2011
2161
  fetch: fetchImpl,
2012
2162
  env: params.env
2013
2163
  }),
2014
- fetchVercelAiGatewayProviderRefreshSnapshot({ fetch: fetchImpl }),
2015
- fetchOpencodeZenProviderRefreshSnapshot({ fetch: fetchImpl }),
2164
+ fetchVercelAiGatewayProviderRefreshSnapshot({
2165
+ fetch: fetchImpl,
2166
+ env: params.env
2167
+ }),
2168
+ fetchOpencodeZenProviderRefreshSnapshot({
2169
+ fetch: fetchImpl,
2170
+ env: params.env
2171
+ }),
2016
2172
  fetchOllamaProviderRefreshSnapshot({
2017
2173
  fetch: fetchImpl,
2018
2174
  env: params.env
@@ -2037,8 +2193,14 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
2037
2193
  fetch: fetchImpl,
2038
2194
  env: params.env
2039
2195
  }),
2040
- fetchHuggingfaceProviderRefreshSnapshot({ fetch: fetchImpl }),
2041
- fetchVeniceProviderRefreshSnapshot({ fetch: fetchImpl }),
2196
+ fetchHuggingfaceProviderRefreshSnapshot({
2197
+ fetch: fetchImpl,
2198
+ env: params.env
2199
+ }),
2200
+ fetchVeniceProviderRefreshSnapshot({
2201
+ fetch: fetchImpl,
2202
+ env: params.env
2203
+ }),
2042
2204
  Promise.resolve(fetchStaticUnsupportedProviderRefreshSnapshot())
2043
2205
  ]);
2044
2206
  return mergeProviderRefreshSnapshots([
@@ -2075,4 +2237,4 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
2075
2237
  }
2076
2238
 
2077
2239
  //#endregion
2078
- 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 = [
@@ -422,7 +422,6 @@ const SYNTHETIC_MODEL_CAPABILITY_OVERRIDES = buildSyntheticModelCapabilityOverri
422
422
  const TOGETHER_MODEL_CAPABILITY_OVERRIDES = buildTogetherModelCapabilityOverrides(TOGETHER_ROUTE_ID);
423
423
  const HUGGINGFACE_MODEL_CAPABILITY_OVERRIDES = buildHuggingfaceModelCapabilityOverrides(HUGGINGFACE_ROUTE_ID);
424
424
  const VENICE_MODEL_CAPABILITY_OVERRIDES = buildVeniceModelCapabilityOverrides(VENICE_ROUTE_ID);
425
- const LITELLM_MODEL_CAPABILITY_OVERRIDES = buildLitellmModelCapabilityOverrides(LITELLM_ROUTE_ID);
426
425
  const CLOUDFLARE_AI_GATEWAY_MODEL_CAPABILITY_OVERRIDES = buildCloudflareAiGatewayModelCapabilityOverrides(CLOUDFLARE_AI_GATEWAY_ROUTE_ID);
427
426
  const CUSTOM_PROVIDER_MODEL_REFS = [];
428
427
  function parseModelRef(ref) {
@@ -1437,12 +1436,12 @@ const LITELLM_PROVIDER_MANIFEST = {
1437
1436
  hint: "LiteLLM Proxy virtual key or master key plus /v1 base URL"
1438
1437
  }],
1439
1438
  models: {
1440
- recommended: [...LITELLM_MODEL_REFS],
1439
+ recommended: [],
1441
1440
  dynamic: true,
1442
1441
  operatorCatalog: true,
1443
1442
  routeRules: { [LITELLM_ROUTE_ID]: [`${LITELLM_ROUTE_ID}/*`] }
1444
1443
  },
1445
- modelCapabilities: LITELLM_MODEL_CAPABILITY_OVERRIDES
1444
+ modelCapabilities: {}
1446
1445
  };
1447
1446
  const CLOUDFLARE_AI_GATEWAY_PROVIDER_MANIFEST = {
1448
1447
  id: CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID,
@@ -1581,6 +1580,17 @@ function isStandardProviderModelRef(ref) {
1581
1580
  }
1582
1581
  return STANDARD_PROVIDER_MODEL_REFS.has(value.toLowerCase());
1583
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
+ }
1584
1594
  function isStandardProviderCatalogEntry(entry) {
1585
1595
  const provider = entry.provider.trim();
1586
1596
  const id = entry.id.trim();
@@ -1591,4 +1601,4 @@ function isStandardProviderCatalogEntry(entry) {
1591
1601
  }
1592
1602
 
1593
1603
  //#endregion
1594
- 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, 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 };