@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.
- package/dist/agents/authenticated-model-catalog.js +27 -0
- package/dist/agents/current-model-catalog.js +30 -10
- package/dist/agents/model-catalog-normalized.js +1 -0
- package/dist/agents/model-catalog-source.js +4 -4
- package/dist/agents/model-forward-compat.js +19 -1
- package/dist/agents/model-metadata.js +37 -8
- package/dist/agents/pi-embedded-runner/agent-messages.js +15 -0
- package/dist/agents/pi-embedded-runner/compact.js +2 -1
- package/dist/agents/pi-embedded-runner/extra-params.js +25 -0
- package/dist/agents/pi-embedded-runner/model.js +2 -7
- package/dist/agents/pi-embedded-runner/run/attempt.js +4 -5
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/brand.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/cli/program/register.agent.js +17 -0
- package/dist/cli/providers-cli.js +3 -2
- package/dist/commands/agents.commands.models.js +63 -0
- package/dist/commands/agents.js +1 -0
- package/dist/commands/auth-choice.apply.api-providers.js +3 -8
- package/dist/commands/auth-choice.apply.openai.js +13 -7
- package/dist/commands/auth-choice.model-check.js +1 -2
- package/dist/commands/configure.gateway-auth.js +14 -16
- package/dist/commands/model-picker.js +25 -7
- package/dist/commands/models/list.registry.js +13 -18
- package/dist/commands/onboard-auth.config-core.js +1 -1
- package/dist/commands/onboard-auth.config-litellm.js +21 -21
- package/dist/commands/onboard-auth.credentials.js +0 -1
- package/dist/commands/onboard-auth.js +0 -1
- package/dist/commands/openai-codex-model-default.js +26 -4
- package/dist/config/defaults.js +1 -1
- package/dist/config/zod-schema.agent-defaults.js +4 -2
- package/dist/config/zod-schema.agent-runtime.js +4 -2
- package/dist/config/zod-schema.core.js +4 -2
- package/dist/control-ui/assets/{app-WIDYwhr-.js → app-D2RaTXoV.js} +1788 -1755
- package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +2 -0
- package/dist/control-ui/assets/{index-K3ysLeTN.js → index-D2nC6I-9.js} +3 -3
- package/dist/control-ui/assets/{providers-rQMhp1fb.js → providers-CyjiG5Jw.js} +4 -4
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -0
- package/dist/cron/isolated-agent/run.js +9 -3
- package/dist/cron/normalize.js +10 -0
- package/dist/gateway/control-ui.js +2 -0
- package/dist/gateway/protocol/schema/agents-models-skills.js +6 -2
- package/dist/gateway/protocol/schema/cron.js +7 -0
- package/dist/gateway/server-methods/models.js +8 -9
- package/dist/gateway/server-model-catalog.js +3 -0
- package/dist/infra/update-runner.js +31 -3
- package/dist/light-update-status.js +10 -10
- package/dist/memory/inventory.js +19 -2
- package/dist/plugin-sdk/{accounts-BZrfqJmO.js → accounts-CeRNo5Ae.js} +1 -1
- package/dist/plugin-sdk/{actions-7_zTh8zC.js → actions-OMRHtXPj.js} +2 -2
- package/dist/plugin-sdk/{active-listener-D8NVRD8J.js → active-listener-BlIkS3iR.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-BrVWUkoP.js → audio-preflight-B2n3a2Tj.js} +26 -26
- package/dist/plugin-sdk/{audit-2iRlVyQF.js → audit-Ppg6dR_b.js} +1 -1
- package/dist/plugin-sdk/{channel-access-BCf1rJsn.js → channel-access-af8dWWRv.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-B-Z51Qsd.js → channel-access-configure-B6IAGlE0.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-BREC9ijl.js → chunk-CD76Byie.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-BLRCltGL.js → chunk-items-Bu19zrYH.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +26 -26
- package/dist/plugin-sdk/{commands-registry-D3-bFLsz.js → commands-registry-DgS55tNj.js} +2 -2
- package/dist/plugin-sdk/{common-BlqMqEqn.js → common-CWvfeiX0.js} +1 -1
- package/dist/plugin-sdk/{config-442EDe7Z.js → config-CYDETqcF.js} +130 -134
- package/dist/plugin-sdk/{config-schema-DV0zctd2.js → config-schema-CQ4EVcQG.js} +164 -78
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/{group-mentions-DLOOve8d.d.ts → group-mentions-BxDgHCgj.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-pNaP87Dr.js → handle-action-B75UVKxF.js} +13 -13
- package/dist/plugin-sdk/{helpers-B994qqVW.js → helpers-BuEwju6y.js} +1 -1
- package/dist/plugin-sdk/{image-ops-Doq8nZQw.js → image-ops-C66HPeAZ.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +8 -8
- package/dist/plugin-sdk/index.js +28 -28
- package/dist/plugin-sdk/{login-CK2zTIJA.js → login-Amr2DpKU.js} +3 -3
- package/dist/plugin-sdk/{login-qr-u8Mn1mCp.js → login-qr-DMQNEi9m.js} +3 -3
- package/dist/plugin-sdk/{manager-CeJNf2bH.js → manager-Bvpq49BI.js} +2 -2
- package/dist/plugin-sdk/{markdown-tables-DeZztrY6.js → markdown-tables-DmQ7oXOm.js} +1 -1
- package/dist/plugin-sdk/{media-CgUAEfhs.js → media-ByLQbEwJ.js} +2 -2
- package/dist/plugin-sdk/{monitor-CEtMJuFX.js → monitor-K_u6daGa.js} +30 -30
- package/dist/plugin-sdk/{monitor-D-APtCpn.js → monitor-S_7LrvSj.js} +31 -31
- package/dist/plugin-sdk/{openresponses-http-g1Iz0xB2.js → openresponses-http-BrDJUZXR.js} +26 -26
- package/dist/plugin-sdk/{optional-runtime-dependency-D0BdXz1C.js → optional-runtime-dependency-CbYjAC2b.js} +1 -1
- package/dist/plugin-sdk/{outbound-DXGuFrdx.js → outbound-BuDafBBI.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-oxhGO33g.js → outbound-attachment-DmZmUqFP.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-D3WPVg_j.d.ts → pairing-message-D0-UWGFJ.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-C29ixrvn.js → pairing-message-e4D4eBDA.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-1kcsOWRs.js → pairing-store-T3IGoGZg.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-l-xqaEd0.js → pi-model-discovery-DvAG_Png.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-CibV8F8G.js → pi-model-discovery-runtime-NjkUgjIf.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-9qEBW5-k.js → pw-ai-D7eW43DL.js} +3 -3
- package/dist/plugin-sdk/{replies-BX3L8fX7.js → replies-BMIPmEoP.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-D0AK10E7.js → resolve-outbound-target-CXCqUUPV.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-UO6XLYH3.js → resolve-route-DJN-SUSt.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-C5N8JiHL.js → retry-policy-CY1qY6d7.js} +1 -1
- package/dist/plugin-sdk/{runtime-Dnzwux3G.js → runtime-CgOkQe0w.js} +3 -3
- package/dist/plugin-sdk/{runtime-dependency-BDDpVKBO.js → runtime-dependency-DvdRNMvs.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
- package/dist/plugin-sdk/sat-runtime.js +5 -5
- package/dist/plugin-sdk/{send-bcKv8F5E.js → send-2ITqny2W.js} +8 -8
- package/dist/plugin-sdk/{send-DGEgo_6f.js → send-BAz22RZr.js} +5 -5
- package/dist/plugin-sdk/{send-DcsYRH2f.js → send-BG3RWyil.js} +7 -7
- package/dist/plugin-sdk/{send-D5rgCP1r.js → send-Cr-dj6S-.js} +6 -6
- package/dist/plugin-sdk/{send-B4XLsTL0.js → send-eTxqFFsw.js} +6 -6
- package/dist/plugin-sdk/{session-BoGNOlwv.js → session-C8nJmmVE.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-Be8s4TGQ.js → skill-commands-Rm5by9S8.js} +2 -2
- package/dist/plugin-sdk/{slack-actions-TNnAXiUx.js → slack-actions-BNIALJTA.js} +11 -11
- package/dist/plugin-sdk/{slack-74qForpW.js → slack-xvIVvyEM.js} +38 -38
- package/dist/plugin-sdk/slack.d.ts +5 -5
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-CrYayLff.js → sticker-cache-D3oDiu2u.js} +3 -3
- package/dist/plugin-sdk/{tables-Ch4js2qy.js → tables-DS5L7lCA.js} +1 -1
- package/dist/plugin-sdk/{targets-BGfRUJPE.js → targets-D6lUomJc.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-BGy4AEvF.js → telegram-actions-MSFkDn0m.js} +29 -29
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-_uQ2EF17.js → thread-bindings.lifecycle-Ry6Vcgw3.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-DUg0s_1X.js → thread-bindings.state-C0stmvNk.js} +2 -2
- package/dist/plugin-sdk/{tmp-fased-dir-BrbXGSkl.d.ts → tmp-fased-dir-D91GExk4.d.ts} +2 -2
- package/dist/plugin-sdk/{types-CBCtqtMn.d.ts → types-BzadOItY.d.ts} +1 -1
- package/dist/plugin-sdk/{types-DlKIHIqA.d.ts → types-DKvBJHfH.d.ts} +16 -6
- package/dist/plugin-sdk/{types-BJdDoTQF.d.ts → types-DVTIpopt.d.ts} +2 -2
- package/dist/plugin-sdk/{types.plugin-CvUiB3Kh.d.ts → types.plugin-BiHPaDTF.d.ts} +2 -1
- package/dist/plugin-sdk/{wallet-status-M6aK3abH.js → wallet-status-f0HagNeO.js} +31 -13
- package/dist/plugin-sdk/{web-r1KFR44s.js → web-DRNJxHXA.js} +31 -31
- package/dist/plugin-sdk/{whatsapp-actions-CID_tqAX.js → whatsapp-actions-BDXZF2R5.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-Bk-aZVMa.js → whatsapp-heartbeat-CKgmwCGr.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +5 -5
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C_STtED7.js → wsl-Biw7Mj39.js} +3 -3
- package/dist/providers/huggingface-models.js +0 -30
- package/dist/providers/litellm-models.js +1 -1
- package/dist/providers/opencode-zen-shared.js +0 -1
- package/dist/providers/refresh.js +221 -62
- package/dist/providers/registry.js +31 -7
- package/dist/providers/runtime-model-catalog.js +181 -0
- package/dist/providers/vercel-ai-gateway-models.js +0 -35
- package/dist/shared/model-thinking.js +44 -2
- package/dist/wizard/onboarding.js +24 -6
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/dist/control-ui/assets/chat-model-ref-NT82zapt.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=[`off`,`minimal`,`low`,`medium`,`high`],t=[...e,`xhigh`],n=[`off`,`low`,`medium`,`high`,`xhigh`,`max`],r=[`openai/gpt-5.6`,`openai/gpt-5.6-terra`,`openai/gpt-5.6-luna`,`openai/gpt-5.5`,`openai/gpt-5.4`,`openai/gpt-5.4-mini`,`openai/gpt-5.4-nano`,`openai-codex/gpt-5.6-sol`,`openai-codex/gpt-5.6-terra`,`openai-codex/gpt-5.6-luna`,`openai-codex/gpt-5.5`,`openai-codex/gpt-5.4`,`openai-codex/gpt-5.4-mini`,`openai-codex/gpt-5.3-codex-spark`,`github-copilot/gpt-5.5`,`github-copilot/gpt-5.4`,`github-copilot/gpt-5.4-mini`,`github-copilot/gpt-5.3-codex-spark`],i=new Set(r.map(e=>e.toLowerCase())),a=new Set(r.map(e=>e.split(`/`)[1]?.toLowerCase()).filter(e=>!!e)),o=new Set([`openai/gpt-5.6`,`openai/gpt-5.6-sol`,`openai/gpt-5.6-terra`,`openai/gpt-5.6-luna`,`openai-codex/gpt-5.6-sol`,`openai-codex/gpt-5.6-terra`,`openai-codex/gpt-5.6-luna`].map(e=>e.toLowerCase())),ee=new Set([`gpt-5.6`,`gpt-5.6-sol`,`gpt-5.6-terra`,`gpt-5.6-luna`]);function te(e){if(!e)return``;let t=e.trim().toLowerCase();return t===`z.ai`||t===`z-ai`?`zai`:t}function ne(e){return te(e)===`zai`}function re(e){if(!e)return;let t=e.trim().toLowerCase(),n=t.replace(/[\s_-]+/g,``);if(n===`xhigh`||n===`extrahigh`)return`xhigh`;if(t===`max`)return`max`;if(t===`off`)return`off`;if([`on`,`enable`,`enabled`].includes(t))return`low`;if([`min`,`minimal`].includes(t))return`minimal`;if([`low`,`thinkhard`,`think-hard`,`think_hard`].includes(t))return`low`;if([`mid`,`med`,`medium`,`thinkharder`,`think-harder`,`harder`].includes(t))return`medium`;if([`high`,`ultra`,`ultrathink`,`think-hard`,`thinkhardest`,`highest`].includes(t))return`high`;if(t===`think`)return`minimal`}function ie(e,t){let n=t?.trim().toLowerCase();if(!n)return!1;let r=e?.trim().toLowerCase();return r?o.has(`${r}/${n}`):ee.has(n)}function ae(e,t){let n=t?.trim().toLowerCase();if(!n)return!1;let r=e?.trim().toLowerCase();return r?i.has(`${r}/${n}`):a.has(n)}function oe(e){let t=new Set,n=[];for(let r of e??[]){let e=re(r);!e||t.has(e)||(t.add(e),n.push(e))}return n}function se(r,i){return ie(r,i)?[...n]:ae(r,i)?[...t]:[...e]}function ce(e){let t=e?.trim().toLowerCase()??``;return t.includes(`fable-5`)||t.includes(`opus-4-8`)||t.includes(`opus-4.8`)||t.includes(`opus-4-6`)||t.includes(`opus-4.6`)||t.includes(`opus-4-7`)||t.includes(`opus-4.7`)||t.includes(`sonnet-5`)||t.includes(`sonnet-4-6`)||t.includes(`sonnet-4.6`)||t.includes(`sonnet-4-7`)||t.includes(`sonnet-4.7`)}function le(e,t){let n=te(e);return n===`openai`||n===`openai-codex`||n===`github-copilot`||n===`copilot-proxy`?{thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:n===`anthropic`?{thinkingMode:ce(t)?`anthropic-adaptive`:`anthropic-thinking-budget`,reasoningBudgetSupported:!ce(t)}:n===`google`||n===`google-gemini-cli`?{thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}:n===`zai`?{thinkingMode:`zai-binary`,reasoningBudgetSupported:!1}:n===`qwen`||n===`qwen-coding-plan`?{thinkingMode:`qwen-thinking`,reasoningBudgetSupported:!0}:n===`moonshot`||n===`kimi-coding`?{thinkingMode:`moonshot-thinking`,reasoningBudgetSupported:!1}:{thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1}}function ue(e,t){let n=te(e),r=t?.trim().toLowerCase()??``;return!n||!r?!1:n===`openai`||n===`openai-codex`||n===`github-copilot`||n===`copilot-proxy`?/^gpt-5(?:[.-]|$)/.test(r):n===`anthropic`?r.startsWith(`claude-`)||r.includes(`claude-`):n===`google`||n===`google-gemini-cli`?r.startsWith(`gemini-`):n===`zai`?r.startsWith(`glm-`):n===`qwen`||n===`qwen-coding-plan`?r.includes(`qwen`):n===`moonshot`||n===`kimi-coding`?r.includes(`kimi`):n===`minimax`||n===`minimax-cn`?r.includes(`minimax-m2`):[`openrouter`,`vercel-ai-gateway`,`opencode`,`huggingface`,`venice`,`together`,`synthetic`,`litellm`].includes(n)?/(gpt-5|claude-|gemini-|grok-|qwen|kimi|glm-|deepseek-r1|reasoning|thinking)/.test(r):!1}function s(e){let t=oe(e.capabilities?.thinkingLevels),n=t.length>0||typeof e.capabilities?.thinkingMode==`string`||typeof e.capabilities?.defaultThinkingLevel==`string`;if(e.capabilities?.fixedReasoning===!0&&!n||!(e.reasoning===!0||e.reasoning!==!1&&ue(e.provider,e.model))&&!n)return null;let r=le(e.provider,e.model),i=r.thinkingMode===`zai-binary`?[`off`,`low`]:se(e.provider,e.model),a=t.length>0?t:i,o=re(e.capabilities?.defaultThinkingLevel);return{thinkingLevels:a,defaultThinkingLevel:o&&a.includes(o)?o:a.includes(`low`)?`low`:a[0]??`off`,thinkingMode:e.capabilities?.thinkingMode??r.thinkingMode,reasoningBudgetSupported:e.capabilities?.reasoningBudgetSupported??r.reasoningBudgetSupported}}function de(e,t){return ne(e)?[`off`,`low`]:se(e,t)}function fe(e,t){return de(e,t)}var pe=`cloudflare-ai-gateway`,c=`cloudflare-ai-gateway`,me=`claude-sonnet-5`;`${c}${me}`;var he={input:0,output:0,cacheRead:0,cacheWrite:0},ge={tools:!0,json:!0},_e={thinkingLevels:[...e],defaultThinkingLevel:`low`,reasoningBudgetSupported:!0},ve=[{id:me,name:`Claude Sonnet 5`,reasoning:!0,input:[`text`,`image`],cost:he,contextWindow:1e6,maxTokens:128e3,capabilities:{...ge,..._e,thinkingMode:`anthropic-adaptive`}},{id:`claude-opus-4-8`,name:`Claude Opus 4.8`,reasoning:!0,input:[`text`,`image`],cost:he,contextWindow:1e6,maxTokens:128e3,capabilities:{...ge,..._e,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1}},{id:`claude-haiku-4-5`,name:`Claude Haiku 4.5`,reasoning:!0,input:[`text`,`image`],cost:he,contextWindow:2e5,maxTokens:64e3,capabilities:{...ge,..._e,thinkingMode:`anthropic-thinking-budget`}}],ye=ve.map(e=>e.id).map(e=>`${c}/${e}`);function be(e=c){return Object.fromEntries(ve.map(t=>[`${e}/${t.id}`.toLowerCase(),t.capabilities?{...t.capabilities}:{}]))}var xe=`openai/gpt-oss-120b`;`${xe}`;var l={tools:!0,json:!0},Se=[{id:xe,name:`GPT-OSS 120B`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.15,output:.75,cacheRead:0,cacheWrite:0},capabilities:l},{id:`deepseek-ai/DeepSeek-V4-Pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],contextWindow:1048576,maxTokens:8192,cost:{input:1.69,output:3.38,cacheRead:0,cacheWrite:0},capabilities:l},{id:`deepseek-ai/DeepSeek-V4-Flash`,name:`DeepSeek V4 Flash`,reasoning:!1,input:[`text`],contextWindow:1048576,maxTokens:8192,cost:{input:.14,output:.28,cacheRead:0,cacheWrite:0},capabilities:l},{id:`moonshotai/Kimi-K2.6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.95,output:4,cacheRead:0,cacheWrite:0},capabilities:l},{id:`MiniMaxAI/MiniMax-M2.7`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],contextWindow:204800,maxTokens:8192,cost:{input:.3,output:1.2,cacheRead:0,cacheWrite:0},capabilities:l},{id:`zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:8192,cost:{input:1.4,output:4.4,cacheRead:0,cacheWrite:0},capabilities:l},{id:`Qwen/Qwen3.6-35B-A3B`,name:`Qwen3.6 35B A3B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.15,output:.95,cacheRead:0,cacheWrite:0},capabilities:l},{id:`Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.6,output:3.6,cacheRead:0,cacheWrite:0},capabilities:l},{id:`Qwen/Qwen3-Coder-Next`,name:`Qwen3 Coder Next`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.2,output:1.5,cacheRead:0,cacheWrite:0},capabilities:{tools:!0,json:!1}},{id:`Qwen/Qwen3-Coder-480B-A35B-Instruct`,name:`Qwen3 Coder 480B A35B Instruct`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.3,output:1.3,cacheRead:0,cacheWrite:0},capabilities:l},{id:`google/gemma-4-31B-it`,name:`Gemma 4 31B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.14,output:.4,cacheRead:0,cacheWrite:0},capabilities:l},{id:`google/gemma-4-26B-A4B-it`,name:`Gemma 4 26B A4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,cost:{input:.13,output:.4,cacheRead:0,cacheWrite:0},capabilities:l},{id:`openai/gpt-oss-20b`,name:`GPT-OSS 20B`,reasoning:!0,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.1,output:.5,cacheRead:0,cacheWrite:0},capabilities:l},{id:`deepseek-ai/DeepSeek-R1`,name:`DeepSeek R1`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:8192,cost:{input:.7,output:2.5,cacheRead:0,cacheWrite:0},capabilities:l},{id:`deepseek-ai/DeepSeek-V3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:163840,maxTokens:8192,cost:{input:.269,output:.4,cacheRead:0,cacheWrite:0},capabilities:l},{id:`meta-llama/Llama-3.3-70B-Instruct`,name:`Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.59,output:.79,cacheRead:0,cacheWrite:0},capabilities:l},{id:`Qwen/Qwen3-VL-235B-A22B-Instruct`,name:`Qwen3 VL 235B A22B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:131072,maxTokens:8192,cost:{input:.3,output:1.5,cacheRead:0,cacheWrite:0},capabilities:l},{id:`Qwen/Qwen3-235B-A22B-Instruct-2507`,name:`Qwen3 235B A22B Instruct 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.09,output:.58,cacheRead:0,cacheWrite:0},capabilities:l},{id:`google/gemma-3n-E4B-it`,name:`Gemma 3N E4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:32768,maxTokens:8192,cost:{input:.06,output:.12,cacheRead:0,cacheWrite:0},capabilities:{tools:!1,json:!0}},{id:`inclusionAI/Ling-2.6-1T`,name:`Ling 2.6 1T`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,cost:{input:.3,output:2.5,cacheRead:0,cacheWrite:0},capabilities:l}],Ce=Se.map(e=>e.id).map(e=>`huggingface/${e}`);function we(e){return{...e.capabilities?{...e.capabilities}:{},...e.reasoning?{fixedReasoning:!0}:{}}}function Te(e=`huggingface`){return Object.fromEntries(Se.map(t=>[`${e}/${t.id}`.toLowerCase(),we(t)]))}var Ee=[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.4-nano`,`gpt-5.3-codex-spark`,`claude-fable-5`,`claude-opus-4-8`,`claude-sonnet-5`,`claude-haiku-4-5`,`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`,`minimax-m2.7`,`glm-5.2`,`kimi-k2.6`].map(e=>`opencode/${e}`);function De(e){let t=e.trim().toLowerCase();return t.startsWith(`claude-`)?{provider:`anthropic`,model:t}:t.startsWith(`gemini-`)?{provider:`google`,model:t}:t.startsWith(`glm-`)?{provider:`zai`,model:t}:t.startsWith(`kimi-`)?{provider:`moonshot`,model:t}:t.startsWith(`qwen`)?{provider:`qwen`,model:t}:t.startsWith(`gpt-`)?{provider:`openai`,model:t}:{provider:`opencode`,model:t}}function Oe(e){let t=De(e),n=s({provider:t.provider,model:t.model,reasoning:!0});return{tools:!0,json:!0,...n?{thinkingLevels:n.thinkingLevels,defaultThinkingLevel:n.defaultThinkingLevel,thinkingMode:n.thinkingMode,reasoningBudgetSupported:n.reasoningBudgetSupported}:{}}}function ke(e){return Object.fromEntries(e.map(e=>[e,Oe(e.replace(/^opencode\//,``))]))}var Ae=`hf:MiniMaxAI/MiniMax-M2.5`;`${Ae}`;var u={tools:!0,json:!0},je=[{id:`hf:zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:u},{id:`hf:moonshotai/Kimi-K2.6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:65536,capabilities:u},{id:Ae,name:`MiniMax M2.5`,reasoning:!1,input:[`text`],contextWindow:191488,maxTokens:65536,capabilities:u},{id:`hf:zai-org/GLM-4.7-Flash`,name:`GLM-4.7 Flash`,reasoning:!1,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:u},{id:`hf:zai-org/GLM-5`,name:`GLM-5`,reasoning:!0,input:[`text`],contextWindow:196608,maxTokens:65536,capabilities:u},{id:`hf:nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4`,name:`NVIDIA Nemotron 3 Super 120B`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:65536,capabilities:u},{id:`hf:zai-org/GLM-4.7`,name:`GLM-4.7`,reasoning:!1,input:[`text`],contextWindow:202752,maxTokens:65536,capabilities:u},{id:`hf:deepseek-ai/DeepSeek-V3.2`,name:`DeepSeek V3.2`,reasoning:!1,input:[`text`],contextWindow:159e3,maxTokens:8192,capabilities:u},{id:`hf:openai/gpt-oss-120b`,name:`GPT OSS 120B`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:u},{id:`hf:deepseek-ai/DeepSeek-R1-0528`,name:`DeepSeek R1 0528`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:u},{id:`hf:deepseek-ai/DeepSeek-V3`,name:`DeepSeek V3`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:u},{id:`hf:meta-llama/Llama-3.3-70B-Instruct`,name:`Llama 3.3 70B Instruct`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,capabilities:u},{id:`hf:moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:u},{id:`hf:nvidia/Kimi-K2.5-NVFP4`,name:`Kimi K2.5 NVFP4`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:u},{id:`hf:Qwen/Qwen3-235B-A22B-Thinking-2507`,name:`Qwen3 235B A22B Thinking 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:8192,capabilities:u},{id:`hf:Qwen/Qwen3-Coder-480B-A35B-Instruct`,name:`Qwen3 Coder 480B A35B Instruct`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:8192,capabilities:u},{id:`hf:Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:8192,capabilities:u}],Me=je.map(e=>e.id);function Ne(e=`synthetic`){return Object.fromEntries(je.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}var Pe=`moonshotai/Kimi-K2.6`;`${Pe}`;var d={tools:!0,json:!0},f={tools:!1,json:!1},Fe=[{id:Pe,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:16384,cost:{input:1.2,output:4.5,cacheRead:.2,cacheWrite:1.2},capabilities:{...d,video:!0}},{id:`moonshotai/Kimi-K2.5`,name:`Kimi K2.5`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.5,output:2.8,cacheRead:.5,cacheWrite:2.8},capabilities:d},{id:`MiniMaxAI/MiniMax-M2.7`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:32768,cost:{input:.3,output:1.2,cacheRead:.06,cacheWrite:.3},capabilities:d},{id:`zai-org/GLM-5.1`,name:`GLM-5.1`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:128e3,cost:{input:1.4,output:4.4,cacheRead:1.4,cacheWrite:1.4},capabilities:d},{id:`zai-org/GLM-5`,name:`GLM-5`,reasoning:!0,input:[`text`],contextWindow:202752,maxTokens:128e3,cost:{input:1,output:3.2,cacheRead:1,cacheWrite:1},capabilities:d},{id:`Qwen/Qwen3.6-Plus`,name:`Qwen3.6 Plus`,reasoning:!0,input:[`text`],contextWindow:1e6,maxTokens:32768,cost:{input:.5,output:3,cacheRead:.5,cacheWrite:.5},capabilities:f},{id:`Qwen/Qwen3.5-397B-A17B`,name:`Qwen3.5 397B A17B`,reasoning:!0,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.6,output:3.6,cacheRead:.6,cacheWrite:.6},capabilities:d},{id:`Qwen/Qwen3.5-9B`,name:`Qwen3.5 9B`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.1,output:.15,cacheRead:.1,cacheWrite:.1},capabilities:d},{id:`openai/gpt-oss-120b`,name:`GPT-OSS 120B`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:32768,cost:{input:.15,output:.6,cacheRead:.15,cacheWrite:.15},capabilities:d},{id:`openai/gpt-oss-20b`,name:`GPT-OSS 20B`,reasoning:!0,input:[`text`],contextWindow:128e3,maxTokens:32768,cost:{input:.05,output:.2,cacheRead:.05,cacheWrite:.05},capabilities:d},{id:`deepseek-ai/DeepSeek-V4-Pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],contextWindow:512e3,maxTokens:32768,cost:{input:2.1,output:4.4,cacheRead:.2,cacheWrite:2.1},capabilities:d},{id:`deepseek-ai/DeepSeek-R1`,name:`DeepSeek R1 0528`,reasoning:!0,input:[`text`],contextWindow:163840,maxTokens:32768,cost:{input:3,output:7,cacheRead:3,cacheWrite:3},capabilities:f},{id:`deepseek-ai/DeepSeek-V3.1`,name:`DeepSeek V3.1`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:32768,cost:{input:.6,output:1.7,cacheRead:.6,cacheWrite:.6},capabilities:f},{id:`Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8`,name:`Qwen3 Coder 480B A35B Instruct FP8`,reasoning:!1,input:[`text`],contextWindow:256e3,maxTokens:32768,cost:{input:2,output:2,cacheRead:2,cacheWrite:2},capabilities:d},{id:`Qwen/Qwen3-235B-A22B-Instruct-2507-tput`,name:`Qwen3 235B A22B Instruct 2507`,reasoning:!0,input:[`text`],contextWindow:262144,maxTokens:32768,cost:{input:.2,output:.6,cacheRead:.2,cacheWrite:.2},capabilities:d},{id:`Qwen/Qwen3-Coder-Next-FP8`,name:`Qwen3 Coder Next FP8`,reasoning:!1,input:[`text`],contextWindow:262144,maxTokens:32768,cost:{input:.5,output:1.2,cacheRead:.5,cacheWrite:.5},capabilities:f},{id:`meta-llama/Llama-3.3-70B-Instruct-Turbo`,name:`Llama 3.3 70B Instruct Turbo`,reasoning:!1,input:[`text`],contextWindow:131072,maxTokens:8192,cost:{input:.88,output:.88,cacheRead:.88,cacheWrite:.88},capabilities:d},{id:`essentialai/rnj-1-instruct`,name:`Rnj-1 Instruct`,reasoning:!1,input:[`text`],contextWindow:32768,maxTokens:8192,cost:{input:.15,output:.15,cacheRead:.15,cacheWrite:.15},capabilities:d},{id:`google/gemma-4-31B-it`,name:`Gemma 4 31B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:262144,maxTokens:32768,cost:{input:.2,output:.5,cacheRead:.2,cacheWrite:.2},capabilities:d},{id:`google/gemma-3n-E4B-it`,name:`Gemma 3N E4B Instruct`,reasoning:!1,input:[`text`,`image`],contextWindow:32768,maxTokens:8192,cost:{input:.06,output:.12,cacheRead:.06,cacheWrite:.06},capabilities:{tools:!1,json:!0}}],Ie=Fe.map(e=>e.id).map(e=>`together/${e}`);function Le(e=`together`){return Object.fromEntries(Fe.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}var Re=`zai-org-glm-5-1`;`${Re}`;var p={thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1},m={tools:!0,json:!0},ze={tools:!0,json:!1},Be=[{id:Re,name:`GLM 5.1`,reasoning:!0,input:[`text`],cost:{input:1.75,output:5.5,cacheRead:.325,cacheWrite:0},contextWindow:2e5,maxTokens:24e3,capabilities:{...m,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...p}},{id:`venice-uncensored-1-2`,name:`Venice Uncensored 1.2`,reasoning:!1,input:[`text`,`image`],cost:{input:.2,output:.9,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:8192,capabilities:m},{id:`qwen-3-6-plus`,name:`Qwen 3.6 Plus Uncensored`,reasoning:!0,input:[`text`,`image`],cost:{input:.625,output:3.75,cacheRead:.0625,cacheWrite:.78},contextWindow:1e6,maxTokens:65536,capabilities:{...m,video:!0,fixedReasoning:!0}},{id:`qwen3-5-397b-a17b`,name:`Qwen 3.5 397B`,reasoning:!0,input:[`text`,`image`],cost:{input:.75,output:4.5,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:32768,capabilities:{...m,video:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...p}},{id:`qwen3-235b-a22b-thinking-2507`,name:`Qwen 3 235B A22B Thinking`,reasoning:!0,input:[`text`],cost:{input:.45,output:3.5,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:16384,capabilities:{...m,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...p}},{id:`qwen3-coder-480b-a35b-instruct-turbo`,name:`Qwen 3 Coder 480B Turbo`,reasoning:!1,input:[`text`],cost:{input:.35,output:1.5,cacheRead:.04,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:m},{id:`qwen3-vl-235b-a22b`,name:`Qwen3 VL 235B`,reasoning:!1,input:[`text`,`image`],cost:{input:.25,output:1.5,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:16384,capabilities:m},{id:`deepseek-v4-pro`,name:`DeepSeek V4 Pro`,reasoning:!0,input:[`text`],cost:{input:1.73,output:3.796,cacheRead:.33,cacheWrite:0},contextWindow:1e6,maxTokens:32768,capabilities:{...m,fixedReasoning:!0}},{id:`deepseek-v4-flash`,name:`DeepSeek V4 Flash`,reasoning:!0,input:[`text`],cost:{input:.17,output:.35,cacheRead:.028,cacheWrite:0},contextWindow:1e6,maxTokens:32768,capabilities:{...m,fixedReasoning:!0}},{id:`kimi-k2-6`,name:`Kimi K2.6`,reasoning:!0,input:[`text`,`image`],cost:{input:.85,output:4.655,cacheRead:.22,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:{...m,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...p}},{id:`claude-opus-4-7`,name:`Claude Opus 4.7`,reasoning:!0,input:[`text`,`image`],cost:{input:6,output:30,cacheRead:.6,cacheWrite:7.5},contextWindow:1e6,maxTokens:128e3,capabilities:{...m,fixedReasoning:!0}},{id:`claude-sonnet-4-6`,name:`Claude Sonnet 4.6`,reasoning:!0,input:[`text`,`image`],cost:{input:3.6,output:18,cacheRead:.36,cacheWrite:4.5},contextWindow:1e6,maxTokens:64e3,capabilities:{...m,fixedReasoning:!0}},{id:`openai-gpt-55`,name:`GPT-5.5`,reasoning:!0,input:[`text`,`image`],cost:{input:6.25,output:37.5,cacheRead:.625,cacheWrite:0},contextWindow:1e6,maxTokens:131072,capabilities:{...m,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...p}},{id:`openai-gpt-55-pro`,name:`GPT-5.5 Pro`,reasoning:!0,input:[`text`,`image`],cost:{input:37.5,output:225,cacheRead:0,cacheWrite:0},contextWindow:1e6,maxTokens:128e3,capabilities:{...m,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`medium`,...p}},{id:`openai-gpt-54`,name:`GPT-5.4`,reasoning:!0,input:[`text`,`image`],cost:{input:3.13,output:18.8,cacheRead:.313,cacheWrite:0},contextWindow:1e6,maxTokens:131072,capabilities:{...m,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...p}},{id:`openai-gpt-54-mini`,name:`GPT-5.4 Mini`,reasoning:!0,input:[`text`,`image`],cost:{input:.9375,output:5.625,cacheRead:.09375,cacheWrite:0},contextWindow:4e5,maxTokens:128e3,capabilities:{...m,thinkingLevels:[`off`,`minimal`,`low`,`medium`,`high`],defaultThinkingLevel:`high`,...p}},{id:`gemini-3-1-pro-preview`,name:`Gemini 3.1 Pro Preview`,reasoning:!0,input:[`text`,`image`],cost:{input:2.5,output:15,cacheRead:.5,cacheWrite:.5},contextWindow:1e6,maxTokens:32768,capabilities:{...m,audio:!0,video:!0,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...p}},{id:`grok-4-20`,name:`Grok 4.20`,reasoning:!0,input:[`text`,`image`],cost:{input:1.42,output:2.83,cacheRead:.23,cacheWrite:0},contextWindow:2e6,maxTokens:128e3,capabilities:{...m,fixedReasoning:!0}},{id:`minimax-m27`,name:`MiniMax M2.7`,reasoning:!0,input:[`text`],cost:{input:.375,output:1.5,cacheRead:.075,cacheWrite:0},contextWindow:198e3,maxTokens:32768,capabilities:{...ze,thinkingLevels:[`low`,`medium`,`high`],defaultThinkingLevel:`low`,...p}},{id:`openai-gpt-oss-120b`,name:`OpenAI GPT OSS 120B`,reasoning:!0,input:[`text`],cost:{input:.07,output:.3,cacheRead:0,cacheWrite:0},contextWindow:128e3,maxTokens:16384,capabilities:{...ze,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...p}},{id:`google-gemma-4-31b-it`,name:`Google Gemma 4 31B Instruct`,reasoning:!0,input:[`text`,`image`],cost:{input:.175,output:.5,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:8192,capabilities:{...m,video:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,...p}},{id:`mistral-small-2603`,name:`Mistral Small 4`,reasoning:!0,input:[`text`,`image`],cost:{input:.1875,output:.75,cacheRead:0,cacheWrite:0},contextWindow:256e3,maxTokens:65536,capabilities:{...m,thinkingLevels:[`off`,`high`],defaultThinkingLevel:`high`,...p}}],Ve=Be.map(e=>e.id).map(e=>`venice/${e}`);function He(e=`venice`){return Object.fromEntries(Be.map(t=>[`${e}/${t.id}`.toLowerCase(),t.capabilities?{...t.capabilities}:{}]))}var Ue=[{id:`openai/gpt-5.5`,contextWindow:1e6,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`web-search`,`implicit-caching`,`file-input`,`vision`]},{id:`openai/gpt-5.4`,contextWindow:1e6,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`,`web-search`]},{id:`openai/gpt-5.4-mini`,contextWindow:4e5,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`,`web-search`]},{id:`openai/gpt-5.4-nano`,contextWindow:4e5,maxTokens:128e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`web-search`,`vision`,`file-input`]},{id:`anthropic/claude-fable-5`,contextWindow:1e6,maxTokens:128e3,tags:[`tool-use`,`reasoning`,`vision`,`file-input`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-opus-4.8`,contextWindow:1e6,maxTokens:128e3,tags:[`tool-use`,`reasoning`,`vision`,`file-input`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-sonnet-5`,contextWindow:1e6,maxTokens:128e3,tags:[`file-input`,`reasoning`,`tool-use`,`vision`,`explicit-caching`,`web-search`]},{id:`anthropic/claude-haiku-4.5`,contextWindow:2e5,maxTokens:64e3,tags:[`file-input`,`reasoning`,`tool-use`,`vision`,`explicit-caching`]},{id:`google/gemini-3.5-flash`,contextWindow:1e6,maxTokens:65e3,tags:[`reasoning`,`tool-use`,`file-input`,`vision`,`web-search`,`implicit-caching`]},{id:`google/gemini-3.1-pro-preview`,contextWindow:1e6,maxTokens:64e3,tags:[`file-input`,`tool-use`,`reasoning`,`vision`,`web-search`,`implicit-caching`]},{id:`google/gemini-3.1-flash-lite`,contextWindow:1e6,maxTokens:65e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`,`web-search`]},{id:`xai/grok-4.3`,contextWindow:1e6,maxTokens:1e6,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`,`web-search`]},{id:`xai/grok-build-0.1`,contextWindow:256e3,maxTokens:256e3,tags:[`tool-use`,`implicit-caching`]},{id:`mistral/mistral-medium-3.5`,contextWindow:256e3,maxTokens:256e3,tags:[`reasoning`,`tool-use`,`vision`]},{id:`minimax/minimax-m2.7`,contextWindow:204800,maxTokens:131e3,tags:[`reasoning`,`tool-use`,`implicit-caching`,`file-input`,`vision`]},{id:`minimax/minimax-m2.7-highspeed`,contextWindow:204800,maxTokens:131100,tags:[`reasoning`,`tool-use`,`implicit-caching`,`vision`]},{id:`moonshotai/kimi-k2.6`,contextWindow:262e3,maxTokens:262e3,tags:[`reasoning`,`tool-use`,`vision`,`file-input`,`implicit-caching`]}],We=Ue.map(e=>e.id).map(e=>`vercel-ai-gateway/${e}`);function Ge(e){let t=e.trim().replace(/^vercel-ai-gateway\//,``).toLowerCase();return Ue.find(e=>e.id.toLowerCase()===t)}function Ke(e){let[t,...n]=e.trim().replace(/^vercel-ai-gateway\//,``).split(`/`),r=n.join(`/`);switch(t){case`anthropic`:return{provider:`anthropic`,model:r};case`google`:return{provider:`google`,model:r};case`minimax`:return{provider:`minimax`,model:r};case`moonshotai`:return{provider:`moonshot`,model:r};case`openai`:return{provider:`openai`,model:r};case`xai`:return{provider:`xai`,model:r};default:return{provider:`vercel-ai-gateway`,model:e}}}function qe(e){let t=Ge(e);if(!t)return;let n=new Set(t.tags.map(e=>e.toLowerCase())),r=Ke(t.id),i=n.has(`reasoning`)?s({provider:r.provider,model:r.model,reasoning:!0}):null;return{tools:n.has(`tool-use`),...i?{thinkingLevels:i.thinkingLevels,defaultThinkingLevel:i.defaultThinkingLevel,thinkingMode:i.thinkingMode,reasoningBudgetSupported:i.reasoningBudgetSupported}:{}}}function Je(e){return Object.fromEntries(e.flatMap(e=>{let t=qe(e);return t?[[e,t]]:[]}))}var Ye={tools:!0,json:!0,thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1},Xe={...Ye,audio:!0,video:!0},Ze=[{id:`mimo-v2.5-pro`,name:`Xiaomi MiMo V2.5 Pro`,reasoning:!0,input:[`text`,`image`],cost:{input:1,output:3,cacheRead:.2,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:Ye},{id:`mimo-v2.5`,name:`Xiaomi MiMo V2.5`,reasoning:!0,input:[`text`,`image`],cost:{input:.4,output:2,cacheRead:.08,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:Xe},{id:`mimo-v2-pro`,name:`Xiaomi MiMo V2 Pro`,reasoning:!0,input:[`text`],cost:{input:1,output:3,cacheRead:.2,cacheWrite:0},contextWindow:1048576,maxTokens:131072,capabilities:Ye},{id:`mimo-v2-omni`,name:`Xiaomi MiMo V2 Omni`,reasoning:!0,input:[`text`,`image`],cost:{input:.4,output:2,cacheRead:.08,cacheWrite:0},contextWindow:262144,maxTokens:128e3,capabilities:Xe},{id:`mimo-v2-flash`,name:`Xiaomi MiMo V2 Flash`,reasoning:!0,input:[`text`],cost:{input:.11,output:.32,cacheRead:.01,cacheWrite:0},contextWindow:262144,maxTokens:64e3,capabilities:Ye}],Qe=Ze.map(e=>e.id);function $e(e=`xiaomi`){return Object.fromEntries(Ze.map(t=>[`${e}/${t.id}`,t.capabilities?{...t.capabilities}:{}]))}var et=`default`;`${et}`,[{id:et,name:`LiteLLM proxy default`,reasoning:!1,input:[`text`],contextWindow:128e3,maxTokens:8192,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},capabilities:{}}].map(e=>e.id).map(e=>`litellm/${e}`),new Map(`openai.anthropic.chutes.ollama.lmstudio.vllm.minimax.moonshot.google.xai.mistral.volcengine.byteplus.openrouter.qwen.zai.qianfan.copilot.ai-gateway.opencode-zen.xiaomi.synthetic.together.huggingface.venice.litellm.cloudflare-ai-gateway.custom`.split(`.`).map((e,t)=>[e,t]));var tt=`openai`,h=`openai`,g=`openai-codex`,nt=`anthropic`,_=`anthropic`,rt=`chutes`,v=`chutes`,it=`ollama`,y=`ollama`,at=`lmstudio`,b=`lmstudio`,ot=`vllm`,x=`vllm`,st=`minimax`,S=`minimax`,C=`minimax-cn`,w=`minimax-portal`,ct=`moonshot`,T=`moonshot`,E=`kimi-coding`,lt=`google`,D=`google`,O=`google-gemini-cli`,ut=`mistral`,k=`mistral`,dt=`volcengine`,A=`volcengine`,j=`volcengine-coding`,M=`volcengine-plan`,ft=`byteplus`,N=`byteplus`,P=`byteplus-coding`,F=`byteplus-plan`,pt=`openrouter`,I=`openrouter`,mt=`qwen`,L=`qwen`,R=`qwen-coding-plan`,ht=`qianfan`,z=`qianfan`,gt=`copilot`,B=`github-copilot`,V=`copilot-proxy`,_t=`ai-gateway`,H=`vercel-ai-gateway`,vt=`opencode-zen`,U=`opencode`,yt=`xiaomi`,W=`xiaomi`,bt=`synthetic`,G=`synthetic`,xt=`together`,K=`together`,St=`huggingface`,q=`huggingface`,Ct=`venice`,J=`venice`,wt=`litellm`,Y=`litellm`,Tt=`custom`,X=`custom`,Et=[`gpt-5.6`,`gpt-5.6-terra`,`gpt-5.6-luna`,`gpt-5.5`],Dt=[`gpt-5.6-sol`,`gpt-5.6-terra`,`gpt-5.6-luna`,`gpt-5.5`],Ot=[`gpt-5.3-codex`,`gpt-5.3-codex-spark`,`gpt-5.4`,`gpt-5.4-mini`],kt=Et.map(e=>`${h}/${e}`),At=Dt.map(e=>`${g}/${e}`),jt=[`claude-fable-5`,`claude-opus-4-8`,`claude-sonnet-5`,`claude-haiku-4-5`].map(e=>`${_}/${e}`),Mt=[`google/gemma-4-31B-turbo-TEE`,`Qwen/Qwen3-32B-TEE`,`deepseek-ai/DeepSeek-V3.2-TEE`,`zai-org/GLM-5.1-TEE`,`moonshotai/Kimi-K2.6-TEE`,`Qwen/Qwen3.6-27B-TEE`,`Qwen/Qwen3.5-397B-A17B-TEE`,`zai-org/GLM-5-TEE`,`Qwen/Qwen3-235B-A22B-Thinking-2507-TEE`,`zai-org/GLM-5.2-TEE`],Nt=Mt.map(e=>`${v}/${e}`),Pt=[],Ft=[],It=[],Lt=[`MiniMax-M2.7`,`MiniMax-M2.7-highspeed`,`MiniMax-M2.5`,`MiniMax-M2.5-highspeed`],Rt=Lt.map(e=>`${S}/${e}`),zt=Lt.map(e=>`${C}/${e}`),Bt=[`MiniMax-M2.7`,`MiniMax-M2.7-highspeed`].map(e=>`${w}/${e}`),Vt=[`kimi-k2.6`,`kimi-k2.5`].map(e=>`${T}/${e}`),Ht=[`kimi-for-coding`].map(e=>`${E}/${e}`),Ut=[`gemini-3.5-flash`,`gemini-3.1-pro-preview`,`gemini-3-flash-preview`,`gemini-3.1-flash-lite`],Wt=Ut.map(e=>`${D}/${e}`),Gt=Ut.map(e=>`${O}/${e}`),Kt=[`grok-4.5`,`grok-4.3`,`grok-build-0.1`].map(e=>`xai/${e}`),qt=[`mistral-medium-3.5`,`mistral-small-2603`,`mistral-large-2512`,`devstral-2512`,`ministral-14b-2512`,`ministral-8b-2512`,`ministral-3b-2512`].map(e=>`${k}/${e}`),Jt=[`doubao-seed-2-0-pro-260215`,`doubao-seed-2-0-lite-260215`,`doubao-seed-2-0-mini-260215`,`doubao-seed-2-0-code-preview-260215`,`deepseek-v3-2-251201`,`glm-4-7-251222`].map(e=>`${A}/${e}`),Yt=[`ark-code-latest`,`doubao-seed-2.0-code`,`doubao-seed-2.0-pro`,`doubao-seed-2.0-lite`,`doubao-seed-code`,`minimax-m2.5`,`glm-4.7`,`deepseek-v3.2`,`kimi-k2.5`].flatMap(e=>[`${j}/${e}`,`${M}/${e}`]),Xt=[`seed-2-0-pro-260328`,`seed-2-0-lite-260228`,`seed-2-0-mini-260215`,`seed-2-0-code-preview-260328`,`deepseek-v3-2-251201`,`glm-4-7-251222`].map(e=>`${N}/${e}`),Zt=[`ark-code-latest`,`dola-seed-2.0-pro`,`dola-seed-2.0-lite`,`dola-seed-2.0-code`,`bytedance-seed-code`,`glm-5.1`,`glm-4.7`,`kimi-k2.5`,`gpt-oss-120b`].flatMap(e=>[`${P}/${e}`,`${F}/${e}`]),Qt=`openai/gpt-5.6-sol,openai/gpt-5.6-terra,openai/gpt-5.6-luna,openai/gpt-5.5,openai/gpt-5.4,openai/gpt-5.4-mini,openai/gpt-5.4-nano,anthropic/claude-fable-5,anthropic/claude-opus-4.8,anthropic/claude-sonnet-5,anthropic/claude-haiku-4.5,google/gemini-3.5-flash,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google/gemini-3.1-flash-lite,x-ai/grok-4.5,x-ai/grok-4.3,x-ai/grok-build-0.1,mistralai/mistral-medium-3-5,mistralai/mistral-small-2603,mistralai/mistral-large-2512,mistralai/devstral-2512,qwen/qwen3.7-max,qwen/qwen3.7-plus,qwen/qwen3.6-flash,z-ai/glm-5.2,deepseek/deepseek-v4-pro,deepseek/deepseek-v4-flash,minimax/minimax-m2.7,moonshotai/kimi-k2.6`.split(`,`).map(e=>`${I}/${e}`),$t=[`qwen3.7-max`,`qwen3.7-plus`,`qwen3.6-flash`].map(e=>`${L}/${e}`),en=[`qwen3.7-max`,`qwen3.7-plus`,`qwen3.6-flash`,`deepseek-v4-pro`,`deepseek-v4-flash`,`kimi-k2.7-code`,`glm-5.2`,`MiniMax-M2.5`].map(e=>`${R}/${e}`),tn=[`glm-5.2`,`glm-5.1`,`glm-5`,`glm-5-turbo`,`glm-5v-turbo`,`glm-4.7`,`glm-4.7-flashx`,`glm-4.7-flash`].map(e=>`zai/${e}`),nn={tools:!0,json:!0,thinkingLevels:[`off`,`low`],defaultThinkingLevel:`low`,thinkingMode:`zai-binary`,reasoningBudgetSupported:!1},rn=Object.fromEntries(tn.map(e=>[e,e.endsWith(`/glm-5v-turbo`)?{...nn,video:!0}:nn])),an=[`ernie-5.1`,`ernie-5.0`,`ernie-5.0-thinking-latest`,`ernie-5.0-thinking-preview`,`ernie-x1.1-preview`,`ernie-x1.1`,`ernie-x1-turbo-32k`,`deepseek-v4-pro`,`deepseek-v4-flash`,`deepseek-v3.2-think`,`deepseek-v3.2`].map(e=>`${z}/${e}`),on=new Set([`qianfan/ernie-5.1`,`qianfan/ernie-5.0`,`qianfan/ernie-5.0-thinking-latest`,`qianfan/ernie-5.0-thinking-preview`,`qianfan/ernie-x1.1-preview`,`qianfan/ernie-x1.1`,`qianfan/ernie-x1-turbo-32k`]),sn=new Set([`qianfan/deepseek-v4-pro`,`qianfan/deepseek-v4-flash`,`qianfan/deepseek-v3.2-think`,`qianfan/deepseek-v3.2`]),cn=Object.fromEntries(an.map(t=>[t,{tools:!0,json:!0,...on.has(t)?{fixedReasoning:!0}:sn.has(t)?{thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!0}:{}}])),ln=[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex-spark`,`gpt-4.1`,`claude-fable-5`,`claude-opus-4.8`,`claude-sonnet-5`,`claude-haiku-4.5`,`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`,`grok-build-0.1`],un=ln.map(e=>`${B}/${e}`),dn=[...ln].map(e=>`${V}/${e}`);`${B}`;var fn=new Set([`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex-spark`]),pn=new Set([`claude-fable-5`,`claude-opus-4.8`,`claude-sonnet-5`]),mn=new Set([`claude-haiku-4.5`]),hn=new Set([`gemini-3.5-flash`,`gemini-3.1-pro`,`gemini-3-flash`]);function gn(t){return Object.fromEntries(t.map(t=>{let n=t.slice(t.indexOf(`/`)+1);return[t,{tools:!0,json:!0,...fn.has(n)?{thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:pn.has(n)?{thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!0}:mn.has(n)?{thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!0}:hn.has(n)?{thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}:{}}]}))}var _n={...gn(un),...gn(dn)},vn=Je(We),yn=ke(Ee),bn=Qe.map(e=>`${W}/${e}`);`${W}`;var xn=$e(W),Sn=Me.map(e=>`${G}/${e}`);`${G}`;var Cn=Ne(G),wn=Le(K),Tn=Te(q),En=He(J),Dn=be(c),On=[];function kn(e){let t=e.indexOf(`/`);return t<=0||t===e.length-1?null:{route:e.slice(0,t).trim(),model:e.slice(t+1).trim()}}function An(e,t){let n=t.trim().toLowerCase(),r=(e,r)=>n.startsWith(`${e}/`)?{provider:r,model:t.slice(e.length+1)}:null;return r(`openai`,`openai`)??r(`anthropic`,`anthropic`)??r(`google`,`google`)??r(`x-ai`,`xai`)??r(`xai`,`xai`)??r(`mistralai`,`mistral`)??r(`minimax`,`minimax`)??r(`qwen`,`qwen`)??r(`moonshotai`,`moonshot`)??r(`z-ai`,`zai`)??r(`zai-org`,`zai`)??r(`glm`,`zai`)??{provider:n.includes(`claude-`)||n.includes(`claude_`)?`anthropic`:n.includes(`gemini-`)?`google`:n.includes(`qwen`)?`qwen`:n.includes(`kimi`)?`moonshot`:n.includes(`glm-`)?`zai`:e,model:t}}function jn(e){let t=An(e.route,e.model),n=s({provider:t.provider,model:t.model,reasoning:e.reasoning});if(n)return{thinkingLevels:n.thinkingLevels,defaultThinkingLevel:n.defaultThinkingLevel,thinkingMode:n.thinkingMode,reasoningBudgetSupported:n.reasoningBudgetSupported}}function Mn(e){let t=kn(e);if(t)return jn({route:t.route,model:t.model})}function Z(e){return Object.fromEntries(e.map(e=>[e.toLowerCase(),Mn(e)??{}]))}function Q(e,t){let n=Z(e);for(let[e,r]of Object.entries(t))n[e.toLowerCase()]={...n[e.toLowerCase()],...r};return n}var $=[...e],Nn={"anthropic/claude-fable-5":{thinkingLevels:$,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-opus-4-8":{thinkingLevels:$,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-sonnet-5":{thinkingLevels:$,defaultThinkingLevel:`low`,thinkingMode:`anthropic-adaptive`,reasoningBudgetSupported:!1},"anthropic/claude-haiku-4-5":{thinkingLevels:$,defaultThinkingLevel:`low`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!0}},Pn=Object.fromEntries(Mt.map(e=>[`${v}/${e}`,{tools:!0,json:!0,...jn({route:v,model:e,reasoning:!0}),...e===`moonshotai/Kimi-K2.6-TEE`?{video:!0}:{}}])),Fn=[...e],In=Object.fromEntries([...Rt,...zt,...Bt].map(e=>[e,{tools:!0,thinkingLevels:Fn,defaultThinkingLevel:`off`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!1}])),Ln=Object.fromEntries([...Vt,...Ht].map(t=>[t,{tools:!0,...t===`moonshot/kimi-k2.6`?{video:!0}:{},thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`moonshot-thinking`,reasoningBudgetSupported:!1}])),Rn=Object.fromEntries([...Wt,...Gt].map(t=>[t,{tools:!0,json:!0,audio:!0,video:!0,thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`google-thinking-budget`,reasoningBudgetSupported:!0}])),zn={"xai/grok-4.5":{tools:!0,json:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1},"xai/grok-4.3":{tools:!0,json:!0,thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1},"xai/grok-build-0.1":{tools:!0,json:!0}},Bn=[`off`,`high`],Vn=Object.fromEntries(qt.map(e=>[e,{tools:!0,json:!0,...e===`mistral/mistral-medium-3.5`||e===`mistral/mistral-small-2603`?{thinkingLevels:[...Bn],defaultThinkingLevel:`high`,thinkingMode:`mistral-reasoning-effort`,reasoningBudgetSupported:!1}:{}}])),Hn=[`minimal`,`low`,`medium`,`high`],Un=new Set([`volcengine/doubao-seed-2-0-pro-260215`,`volcengine/doubao-seed-2-0-lite-260215`,`volcengine/doubao-seed-2-0-mini-260215`,`volcengine/doubao-seed-2-0-code-preview-260215`,`volcengine-coding/doubao-seed-2.0-code`,`volcengine-plan/doubao-seed-2.0-code`,`volcengine-coding/doubao-seed-2.0-pro`,`volcengine-plan/doubao-seed-2.0-pro`,`volcengine-coding/doubao-seed-2.0-lite`,`volcengine-plan/doubao-seed-2.0-lite`,`volcengine-coding/doubao-seed-code`,`volcengine-plan/doubao-seed-code`]),Wn=new Set([`volcengine/doubao-seed-2-0-pro-260215`,`volcengine/doubao-seed-2-0-lite-260215`,`volcengine/doubao-seed-2-0-mini-260215`,`volcengine/doubao-seed-2-0-code-preview-260215`,`volcengine-coding/doubao-seed-2.0-code`,`volcengine-plan/doubao-seed-2.0-code`,`volcengine-coding/doubao-seed-2.0-pro`,`volcengine-plan/doubao-seed-2.0-pro`,`volcengine-coding/doubao-seed-2.0-lite`,`volcengine-plan/doubao-seed-2.0-lite`,`volcengine-coding/doubao-seed-code`,`volcengine-plan/doubao-seed-code`]),Gn=Object.fromEntries([...Jt,...Yt].map(e=>[e,{tools:!0,json:!0,...Un.has(e)?{thinkingLevels:[...Hn],defaultThinkingLevel:`medium`,thinkingMode:`volcengine-reasoning-effort`,reasoningBudgetSupported:!1}:{},...Wn.has(e)?{video:!0}:{}}])),Kn=[`off`,`high`],qn=new Set([`byteplus/seed-2-0-pro-260328`,`byteplus/seed-2-0-lite-260228`,`byteplus/seed-2-0-mini-260215`,`byteplus/seed-2-0-code-preview-260328`,`byteplus-coding/dola-seed-2.0-pro`,`byteplus-plan/dola-seed-2.0-pro`,`byteplus-coding/dola-seed-2.0-lite`,`byteplus-plan/dola-seed-2.0-lite`,`byteplus-coding/dola-seed-2.0-code`,`byteplus-plan/dola-seed-2.0-code`,`byteplus-coding/bytedance-seed-code`,`byteplus-plan/bytedance-seed-code`]),Jn=Object.fromEntries([...Xt,...Zt].map(e=>[e,{tools:!0,json:!0,...qn.has(e)?{thinkingLevels:[...Kn],defaultThinkingLevel:`high`,thinkingMode:`byteplus-thinking-type`,reasoningBudgetSupported:!1}:{}}])),Yn=new Set([`openrouter/google/gemini-3.5-flash`,`openrouter/google/gemini-3.1-pro-preview`,`openrouter/google/gemini-3-flash-preview`,`openrouter/google/gemini-3.1-flash-lite`]),Xn=new Set([`openrouter/google/gemini-3.5-flash`,`openrouter/google/gemini-3.1-pro-preview`,`openrouter/google/gemini-3-flash-preview`,`openrouter/google/gemini-3.1-flash-lite`,`openrouter/qwen/qwen3.7-max`,`openrouter/qwen/qwen3.7-plus`,`openrouter/qwen/qwen3.6-flash`]),Zn=new Set([`openrouter/mistralai/mistral-medium-3-5`,`openrouter/mistralai/mistral-small-2603`]),Qn=new Set([`openrouter/minimax/minimax-m2.7`]),$n=new Set([`openrouter/deepseek/deepseek-v4-pro`,`openrouter/deepseek/deepseek-v4-flash`]),er=new Set([`openrouter/openai/gpt-5.6-sol`,`openrouter/openai/gpt-5.6-terra`,`openrouter/openai/gpt-5.6-luna`,`openrouter/openai/gpt-5.5`,`openrouter/openai/gpt-5.4`,`openrouter/openai/gpt-5.4-mini`,`openrouter/openai/gpt-5.4-nano`]),tr=new Set([`openrouter/x-ai/grok-4.5`,`openrouter/x-ai/grok-4.3`]),nr=Object.fromEntries(Qt.map(n=>[n,{tools:!0,json:!0,...Yn.has(n)?{audio:!0}:{},...Xn.has(n)?{video:!0}:{},...Zn.has(n)?{thinkingLevels:[...Bn],defaultThinkingLevel:`high`,thinkingMode:`mistral-reasoning-effort`,reasoningBudgetSupported:!1}:{},...Qn.has(n)?{thinkingLevels:[...Fn],defaultThinkingLevel:`off`,thinkingMode:`anthropic-thinking-budget`,reasoningBudgetSupported:!1}:{},...$n.has(n)?{thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`generic-reasoning`,reasoningBudgetSupported:!1}:{},...er.has(n)?{thinkingLevels:[...t],defaultThinkingLevel:`low`,thinkingMode:`openai-reasoning-effort`,reasoningBudgetSupported:!1}:{},...tr.has(n)?{thinkingLevels:[`off`,`low`,`medium`,`high`],defaultThinkingLevel:`low`,thinkingMode:`xai-reasoning-effort`,reasoningBudgetSupported:!1}:{}}])),rr=new Set([`qwen-coding-plan/kimi-k2.7-code`,`qwen-coding-plan/glm-5.2`,`qwen-coding-plan/MiniMax-M2.5`]),ir=Object.fromEntries([...$t,...en].map(t=>[t,{tools:!0,json:!0,...rr.has(t)?{}:{thinkingLevels:[...e],defaultThinkingLevel:`low`,thinkingMode:`qwen-thinking`,reasoningBudgetSupported:!0}}])),ar={id:tt,label:`OpenAI`,priority:1,hint:`OpenAI sign-in + API key`,methods:[{id:`openai-codex`,route:g,kind:`oauth`,label:`Sign in`,hint:`Open the OpenAI sign-in URL, finish login in the browser, then Fased completes the OAuth flow.`},{id:`openai-api-key`,route:h,kind:`api-key`,label:`API key`}],models:{recommended:[...kt,...At],routeRules:{[h]:[`${h}/*`],[g]:[`${g}/*`]}},modelCapabilities:Z([...kt,...At])},or={id:nt,label:`Anthropic`,priority:2,hint:`Claude Code OAuth + setup-token + API key`,methods:[{id:`anthropic-oauth`,route:_,kind:`oauth`,label:`Sign in (Claude Code)`,hint:`Claude or Console account; Pro, Max, Team, Enterprise, or Console access`,buttonLabel:`Sign in`},{id:`token`,route:_,kind:`token`,label:`Token (setup-token)`,hint:"run `claude setup-token` elsewhere, then paste the token here",buttonLabel:`Paste token`},{id:`apiKey`,route:_,kind:`api-key`,label:`API key`}],models:{recommended:[...jt],routeRules:{[_]:[`${_}/*`]}},modelCapabilities:Q(jt,Nn)},sr={id:rt,label:`Chutes`,priority:3,hint:`Sign in + API key`,methods:[{id:`chutes`,route:v,kind:`oauth`,label:`Sign in`,hint:`Requires a Chutes OAuth app client id. Enter the cid, then Fased generates the Chutes sign-in URL.`,buttonLabel:`Sign in`},{id:`chutes-api-key`,route:v,kind:`api-key`,label:`API key`}],models:{recommended:[...Nt],routeRules:{[v]:[`${v}/*`]}},modelCapabilities:Q(Nt,Pn)},cr={id:it,label:`Ollama`,priority:4,hint:`Local, cloud, or hybrid Ollama through the native API`,modelProviderIds:[y],methods:[{id:`ollama`,route:y,kind:`manual`,label:`Ollama native URL + model`,hint:`Use the native Ollama base URL, for example http://127.0.0.1:11434. Do not use /v1.`,buttonLabel:`Configure`}],models:{recommended:Pt,dynamic:!0,operatorCatalog:!0,routeRules:{[y]:[`${y}/*`]}},modelCapabilities:Z(Pt)},lr={id:at,label:`LM Studio`,priority:4,hint:`Local LM Studio server on localhost:1234`,modelProviderIds:[b],methods:[{id:`lmstudio`,route:b,kind:`manual`,label:`LM Studio URL + model`,hint:`Use http://127.0.0.1:1234/v1, optional API token, and a model key from LM Studio.`,buttonLabel:`Configure`}],models:{recommended:Ft,dynamic:!0,operatorCatalog:!0,routeRules:{[b]:[`${b}/*`]}},modelCapabilities:Z(Ft)},ur={id:ot,label:`vLLM-compatible`,priority:4,hint:`OpenAI-compatible local server: vLLM, SGLang, TGI, LocalAI, or FastChat`,modelProviderIds:[x],methods:[{id:`vllm`,route:x,kind:`manual`,label:`vLLM-compatible URL + model`,hint:`Enter the /v1 base URL, API key or local placeholder, and served model ID for vLLM, SGLang, TGI, LocalAI, or FastChat.`,buttonLabel:`Configure`}],models:{recommended:It,dynamic:!0,operatorCatalog:!0,routeRules:{[x]:[`${x}/*`]}},modelCapabilities:Z(It)},dr={id:st,label:`MiniMax`,priority:5,hint:`MiniMax OAuth + API key`,modelProviderIds:[S,C,w],methods:[{id:`minimax-portal`,route:w,kind:`oauth`,label:`Sign in`,hint:`Global or CN endpoint; uses MiniMax portal sign-in`,setupRequirement:`Requires MiniMax portal/coding-plan access. Choose Global or CN, then open the approval URL and approve before the code expires.`,buttonLabel:`Sign in`},{id:`minimax-api`,route:S,kind:`api-key`,label:`API key`},{id:`minimax-api-key-cn`,route:C,kind:`api-key`,label:`API key (CN)`,hint:`China endpoint (api.minimaxi.com)`},{id:`minimax-api-lightning`,route:S,configProviderId:`minimax-lightning`,statusRoute:S,kind:`api-key`,label:`Highspeed API key`,hint:`Fast M2.7 tier`}],models:{recommended:[...Rt,...zt,...Bt],routeRules:{[S]:[`${S}/*`],[C]:[`${C}/*`],[w]:[`${w}/*`]}},modelCapabilities:Q([...Rt,...zt,...Bt],In)},fr={id:ct,label:`Moonshot AI`,priority:6,hint:`Kimi API + Kimi Code`,modelProviderIds:[T,E],methods:[{id:`moonshot-api-key`,route:T,kind:`api-key`,label:`Kimi API key (.ai)`,hint:`Kimi Open Platform endpoint (api.moonshot.ai)`},{id:`moonshot-api-key-cn`,route:T,configProviderId:`moonshot-cn`,statusRoute:T,kind:`api-key`,label:`Kimi API key (.cn)`,hint:`China endpoint (api.moonshot.cn)`},{id:`kimi-code-api-key`,route:E,kind:`api-key`,label:`Kimi Code API key (subscription)`,hint:`Kimi Code membership endpoint (api.kimi.com/coding)`}],models:{recommended:[...Vt,...Ht],routeRules:{[T]:[`${T}/*`],[E]:[`${E}/*`]}},modelCapabilities:Q([...Vt,...Ht],Ln)},pr={id:lt,label:`Google`,priority:7,hint:`Gemini API key + OAuth`,routeAliases:[`gemini`],modelProviderIds:[D,`gemini`,O],methods:[{id:`gemini-api-key`,route:D,kind:`api-key`,label:`Gemini API key`},{id:`google-gemini-cli`,route:O,kind:`oauth`,label:`Sign in (Gemini CLI)`,hint:`Unofficial flow; review account-risk warning before use`,setupRequirement:`Requires gemini-cli installed on the gateway machine, or GEMINI_CLI_OAUTH_CLIENT_ID set before sign-in.`}],models:{recommended:[...Wt,...Gt],routeRules:{[D]:[`${D}/*`,`gemini/*`],[O]:[`${O}/*`]}},modelCapabilities:Q([...Wt,...Gt],Rn)},mr={id:`xai`,label:`xAI (Grok)`,priority:8,hint:`Grok API key or xAI account sign-in`,methods:[{id:`xai-oauth`,route:`xai`,kind:`oauth`,label:`xAI sign-in`,hint:`Browser sign-in for eligible xAI/Grok accounts`,buttonLabel:`Sign in`},{id:`xai-device-code`,route:`xai`,kind:`device`,label:`xAI device code`,hint:`Remote-friendly sign-in for eligible xAI/Grok accounts`,buttonLabel:`Device code`},{id:`xai-api-key`,route:`xai`,kind:`api-key`,label:`xAI API key`}],models:{recommended:[...Kt],routeRules:{xai:[`xai/*`]}},modelCapabilities:Q(Kt,zn)},hr={id:ut,label:`Mistral AI`,priority:9,hint:`Mistral API key`,methods:[{id:`mistral-api-key`,route:k,kind:`api-key`,label:`Mistral API key`}],models:{recommended:[...qt],routeRules:{[k]:[`${k}/*`]}},modelCapabilities:Q(qt,Vn)},gr={id:dt,label:`Volcano Engine`,priority:10,hint:`Ark API key + Coding Plan`,modelProviderIds:[A,j,M],methods:[{id:`volcengine-api-key`,route:A,kind:`api-key`,label:`Volcano Engine API key`}],models:{recommended:[...Jt,...Yt],routeRules:{[A]:[`${A}/*`],[j]:[`${j}/*`],[M]:[`${M}/*`]}},modelCapabilities:Q([...Jt,...Yt],Gn)},_r={id:ft,label:`BytePlus`,priority:11,hint:`ModelArk API key + Coding Plan`,modelProviderIds:[N,P,F],methods:[{id:`byteplus-api-key`,route:N,kind:`api-key`,label:`BytePlus API key`}],models:{recommended:[...Xt,...Zt],routeRules:{[N]:[`${N}/*`],[P]:[`${P}/*`],[F]:[`${F}/*`]}},modelCapabilities:Q([...Xt,...Zt],Jn)},vr={id:pt,label:`OpenRouter`,priority:12,hint:`API key`,methods:[{id:`openrouter-api-key`,route:I,kind:`api-key`,label:`OpenRouter API key`}],models:{recommended:[...Qt],dynamic:!0,routeRules:{[I]:[`${I}/*`]}},modelCapabilities:Q(Qt,nr)},yr={id:mt,label:`Qwen`,priority:14,hint:`Coding Plan + DashScope API key`,modelProviderIds:[R,L],methods:[{id:`qwen-coding-plan-api-key`,route:R,kind:`api-key`,label:`Coding Plan API key`,hint:`Alibaba Cloud Coding Plan endpoint (coding.dashscope.aliyuncs.com)`},{id:`qwen-api-key`,route:L,kind:`api-key`,label:`DashScope API key`,hint:`DashScope OpenAI-compatible endpoint (dashscope.aliyuncs.com)`}],models:{recommended:[...en,...$t],routeRules:{[R]:[`${R}/*`],[L]:[`${L}/*`]}},modelCapabilities:Q([...en,...$t],ir)},br={id:`zai`,label:`Z.AI`,priority:15,hint:`GLM Coding Plan / Global / CN`,modelProviderIds:[`zai`],methods:[{id:`zai-coding-global`,route:`zai`,configProviderId:`zai-coding-global`,statusRoute:`zai`,kind:`api-key`,label:`Coding-Plan-Global`,hint:`GLM Coding Plan Global (api.z.ai)`},{id:`zai-coding-cn`,route:`zai`,configProviderId:`zai-coding-cn`,statusRoute:`zai`,kind:`api-key`,label:`Coding-Plan-CN`,hint:`GLM Coding Plan CN (open.bigmodel.cn)`},{id:`zai-global`,route:`zai`,configProviderId:`zai`,kind:`api-key`,label:`Global`,hint:`Z.AI Global (api.z.ai)`},{id:`zai-cn`,route:`zai`,configProviderId:`zai-cn`,statusRoute:`zai`,kind:`api-key`,label:`CN`,hint:`Z.AI CN (open.bigmodel.cn)`}],models:{recommended:[...tn],routeRules:{zai:[`zai/*`]}},modelCapabilities:Q(tn,rn)},xr={id:ht,label:`Qianfan`,priority:16,hint:`Baidu Qianfan API key`,methods:[{id:`qianfan-api-key`,route:z,kind:`api-key`,label:`Qianfan API key`}],models:{recommended:[...an],routeRules:{[z]:[`${z}/*`]}},modelCapabilities:Q(an,cn)},Sr={id:gt,label:`Copilot`,priority:17,hint:`GitHub device login + local proxy`,modelProviderIds:[B,V],methods:[{id:`github-copilot`,route:B,kind:`device`,label:`GitHub sign in`,hint:`GitHub OAuth device flow; requires an active Copilot subscription`,buttonLabel:`Sign in`},{id:`copilot-proxy`,route:V,kind:`device`,label:`Proxy sign in`,hint:`Local VS Code Copilot Proxy bridge`,buttonLabel:`Configure`}],models:{recommended:[...un,...dn],dynamic:!0,routeRules:{[B]:[`${B}/*`],[V]:[`${V}/*`]}},modelCapabilities:Q([...un,...dn],_n)},Cr={id:_t,label:`Vercel AI`,priority:18,hint:`API key`,modelProviderIds:[H],methods:[{id:`ai-gateway-api-key`,route:H,kind:`api-key`,label:`Vercel AI API key`}],models:{recommended:[...We],dynamic:!0,routeRules:{[H]:[`${H}/*`]}},modelCapabilities:Q(We,vn)},wr={id:vt,label:`OpenCode Zen`,priority:19,hint:`API key`,modelProviderIds:[U],methods:[{id:`opencode-zen`,route:U,kind:`api-key`,label:`OpenCode Zen API key`,hint:`Sign in to OpenCode Zen, then paste the API key`}],models:{recommended:[...Ee],dynamic:!0,routeRules:{[U]:[`${U}/*`]}},modelCapabilities:Q(Ee,yn)},Tr={id:yt,label:`Xiaomi`,priority:20,hint:`MiMo API key`,modelProviderIds:[W],methods:[{id:`xiaomi-api-key`,route:W,kind:`api-key`,label:`Xiaomi API key`,hint:`Create an API key in the Xiaomi MiMo API Open Platform`}],models:{recommended:[...bn],routeRules:{[W]:[`${W}/*`]}},modelCapabilities:Q(bn,xn)},Er={id:bt,label:`Synthetic`,priority:21,hint:`Anthropic-compatible API key`,modelProviderIds:[G],methods:[{id:`synthetic-api-key`,route:G,kind:`api-key`,label:`Synthetic API key`,hint:`Create an API key in Synthetic`}],models:{recommended:[...Sn],routeRules:{[G]:[`${G}/*`]}},modelCapabilities:Q(Sn,Cn)},Dr={id:xt,label:`Together AI`,priority:22,hint:`API key`,modelProviderIds:[K],methods:[{id:`together-api-key`,route:K,kind:`api-key`,label:`Together AI API key`,hint:`Create an API key in Together AI`}],models:{recommended:[...Ie],routeRules:{[K]:[`${K}/*`]}},modelCapabilities:Q(Ie,wn)},Or={id:St,label:`Hugging Face`,priority:23,hint:`Inference Providers token`,modelProviderIds:[q],methods:[{id:`huggingface-api-key`,route:q,kind:`api-key`,label:`Hugging Face token`,hint:`Create a fine-grained token with Inference Providers access`}],models:{recommended:[...Ce],dynamic:!0,routeRules:{[q]:[`${q}/*`]}},modelCapabilities:Tn},kr={id:Ct,label:`Venice AI`,priority:24,hint:`Privacy-focused API key`,modelProviderIds:[J],methods:[{id:`venice-api-key`,route:J,kind:`api-key`,label:`Venice AI API key`,hint:`Create an API key in Venice settings`}],models:{recommended:[...Ve],dynamic:!0,routeRules:{[J]:[`${J}/*`]}},modelCapabilities:En},Ar={id:wt,label:`LiteLLM`,priority:25,hint:`OpenAI-compatible LLM proxy`,modelProviderIds:[Y],methods:[{id:`litellm-api-key`,route:Y,kind:`api-key`,label:`LiteLLM API key`,hint:`LiteLLM Proxy virtual key or master key plus /v1 base URL`}],models:{recommended:[],dynamic:!0,operatorCatalog:!0,routeRules:{[Y]:[`${Y}/*`]}},modelCapabilities:{}},jr={id:pe,label:`Cloudflare AI`,priority:26,hint:`Anthropic through Cloudflare AI`,modelProviderIds:[c],methods:[{id:`cloudflare-ai-gateway-api-key`,route:c,kind:`manual`,label:`Cloudflare AI API key`,hint:`Requires Cloudflare Account ID, Gateway ID, and Anthropic provider API key`,buttonLabel:`Configure`}],models:{recommended:[...ye],routeRules:{[c]:[`${c}/*`]}},modelCapabilities:Dn},Mr={id:Tt,label:`Custom Provider`,priority:27,hint:`OpenAI or Anthropic-compatible endpoint outside the built-in provider cards`,modelProviderIds:[X],methods:[{id:`custom-api-key`,route:X,kind:`manual`,label:`Custom Provider`,hint:`Requires base URL, endpoint compatibility, model ID, and optional API key. Use this for SGLang or other compatible endpoints when the vLLM-compatible shortcut does not fit.`,buttonLabel:`Configure`}],models:{recommended:On,dynamic:!0,operatorCatalog:!0,routeRules:{[X]:[`${X}/*`]}},modelCapabilities:Z(On)},Nr=[ar,or,sr,cr,lr,ur,dr,fr,pr,mr,hr,gr,_r,vr,yr,br,xr,Sr,Cr,wr,Tr,Er,Dr,Or,kr,Ar,jr,Mr],Pr=new Map(Nr.map(e=>[e.id,e])),Fr=new Map(Nr.flatMap(e=>[...e.methods.map(t=>[t.route,e]),...(e.routeAliases??[]).map(t=>[t,e]),...(e.modelProviderIds??[]).map(t=>[t,e])])),Ir=new Set(Nr.flatMap(e=>e.models.recommended.map(e=>e.toLowerCase())));new Map(Nr.flatMap(e=>Object.entries(e.modelCapabilities??{}).map(([e,t])=>[e.toLowerCase(),t]))),new Set(Dt),[...Dt,...Ot];function Lr(e){return Pr.get(e.trim().toLowerCase())}function Rr(e){return Fr.get(e.trim().toLowerCase())}function zr(e){let t=e.trim();if(!t)return!1;let n=t.indexOf(`/`);if(n===-1)return!0;let r=t.slice(0,n).trim().toLowerCase();if(!Rr(r))return!1;let i=Rr(r);return i?i.models.operatorCatalog?!0:Ir.has(t.toLowerCase()):!1}function Br(e){let t=e.provider.trim(),n=e.id.trim();return!t||!n?!1:zr(`${t}/${n}`)}function Vr(e,t){let n=e.trim();if(!n)return``;if(n.includes(`/`))return n;let r=t?.trim();return r?`${r}/${n}`:n}function Hr(e){let t=e.trim();return t?t.includes(`/`)?{kind:`qualified`,value:t}:{kind:`raw`,value:t}:null}function Ur(e,t){return Wr(e,t).value}function Wr(e,t){if(!e)return{value:``,source:`empty`,reason:`empty`};let n=e?.value.trim();if(!n)return{value:``,source:`empty`,reason:`empty`};if(e.kind===`qualified`)return{value:n,source:`qualified`};let r=``;for(let e of t){if(e.id.trim().toLowerCase()!==n.toLowerCase())continue;let t=Vr(e.id,e.provider);if(!r){r=t;continue}if(r.toLowerCase()!==t.toLowerCase())return{value:n,source:`raw`,reason:`ambiguous`}}return r?{value:r,source:`catalog`}:{value:n,source:`raw`,reason:`missing`}}function Gr(e,t){return typeof e==`string`?Vr(e,t):``}function Kr(e,t,n){if(typeof e!=`string`)return{value:``,source:`empty`,reason:`empty`};let r=e.trim();if(!r)return{value:``,source:`empty`,reason:`empty`};let i=t?.trim();if(i){let e=n.find(e=>e.provider?.trim().toLowerCase()===i.toLowerCase()&&e.id.trim().toLowerCase()===r.toLowerCase());if(e)return{value:Xr(e).value,source:`server`}}let a=Wr(Hr(r),n);return a.source===`qualified`||a.source===`catalog`?a:{value:Gr(r,t),source:`server`,reason:a.reason}}function qr(e,t,n){return Kr(e,t,n).value}function Jr(e){let t=e.trim();if(!t)return``;let n=t.indexOf(`/`);if(n<=0)return t;let r=t.slice(0,n);return`${t.slice(n+1)} · ${Yr(r)}`}function Yr(e){return Rr(e)?.label??e}function Xr(e){let t=e.provider?.trim();return{value:(()=>{if(!t)return e.id;let n=`${t.toLowerCase()}/`;return e.id.toLowerCase().startsWith(n)?e.id:`${t}/${e.id}`})(),label:t?`${e.id} · ${Yr(t)}`:e.id}}export{ur as A,re as B,vr as C,Dr as D,Er as E,Lr as F,Rr as I,Br as L,mr as M,Tr as N,kr as O,br as P,zr as R,wr as S,yr as T,s as V,dr as _,Wr as a,cr as b,_r as c,Sr as d,Mr as f,lr as g,Ar as h,Ur as i,gr as j,Cr as k,sr as l,Or as m,Hr as n,qr as o,pr as p,Jr as r,or as s,Xr as t,jr as u,hr as v,xr as w,ar as x,fr as y,fe as z};
|
|
2
|
+
//# sourceMappingURL=chat-model-ref-BZFblCeY.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./app-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./app-D2RaTXoV.js","./icons-D3-vEvih.js","./open-external-url-DwSiwMPl.js","./chat-model-ref-BZFblCeY.js","./marketplace-order-evidence-DkR0ZRHa.js","./mining-commit-R-6nu87p.js","./task-ledger-source-route-C-yTp0QU.js","./wallet-policy-C3ZS66Rl.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e={"entry-loaded":10,"app-import-start":20,"app-imported":30,"custom-element-defined":40,connected:50,"first-updated":60,rendered:70,"boot-failed":100};function t(t,n){if(typeof window>`u`)return;let r=window.__FASED_CONTROL_UI_BOOT=window.__FASED_CONTROL_UI_BOOT??{},i=e[r.stage]??0;e[t]<i&&r.stage!==`boot-failed`||(r.stage=t,r.detail=n??``,r.updatedAt=Date.now(),typeof r.mark==`function`&&r.mark(t,n),typeof window.dispatchEvent==`function`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(`fased-control-ui-boot`,{detail:{stage:t,detail:n??``}})))}var n=`modulepreload`,r=function(e,t){return new URL(e,t).href},i={},a=function(e,t,a){let o=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,new URL(`../../../src/node/plugins/importAnalysisBuild.ts`,import.meta.url)).href}o=l(t.map(t=>{if(t=r(t,a),t=u(t),t in i)return;i[t]=!0;let o=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let r=e[n];if(r.href===t&&(!o||r.rel===`stylesheet`))return}let s=document.createElement(`link`);if(s.rel=o?`stylesheet`:n,o||(s.as=`script`),s.crossOrigin=``,s.href=t,c&&s.setAttribute(`nonce`,c),document.head.appendChild(s),o)return new Promise((e,n)=>{s.addEventListener(`load`,e),s.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(t=>{for(let e of t||[])e.status===`rejected`&&s(e.reason);return e().catch(s)})};function o(e){let n=e instanceof Error?e.stack??e.message:String(e);t(`boot-failed`,n||`Unknown dashboard boot error.`);let r=document.querySelector(`fased-app`);if(!r)return;r.innerHTML=``;let i=document.createElement(`style`);i.textContent=`
|
|
3
3
|
body {
|
|
4
4
|
margin: 0;
|
|
@@ -57,5 +57,5 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./app-WIDYwhr-.js","./
|
|
|
57
57
|
font-weight: 650;
|
|
58
58
|
cursor: pointer;
|
|
59
59
|
}
|
|
60
|
-
`;let a=document.createElement(`div`);a.className=`boot-page`;let o=document.createElement(`section`);o.className=`boot-card`;let s=document.createElement(`h1`);s.className=`boot-title`,s.textContent=`Dashboard bundle could not load`;let c=document.createElement(`p`);c.className=`boot-desc`,c.textContent=`The gateway page loaded, but the browser could not start the dashboard bundle. Reload first. If it keeps happening after an update, clear this site's browser data and sign in again.`;let l=document.createElement(`div`);l.className=`boot-error`,l.textContent=n||`Unknown dashboard boot error.`;let u=document.createElement(`button`);u.className=`boot-button`,u.textContent=`Reload`,u.addEventListener(`click`,()=>window.location.reload()),o.append(s,c,l,u),a.append(o),r.append(i,a)}t(`entry-loaded`),t(`app-import-start`),a(()=>import(`./app-
|
|
61
|
-
//# sourceMappingURL=index-
|
|
60
|
+
`;let a=document.createElement(`div`);a.className=`boot-page`;let o=document.createElement(`section`);o.className=`boot-card`;let s=document.createElement(`h1`);s.className=`boot-title`,s.textContent=`Dashboard bundle could not load`;let c=document.createElement(`p`);c.className=`boot-desc`,c.textContent=`The gateway page loaded, but the browser could not start the dashboard bundle. Reload first. If it keeps happening after an update, clear this site's browser data and sign in again.`;let l=document.createElement(`div`);l.className=`boot-error`,l.textContent=n||`Unknown dashboard boot error.`;let u=document.createElement(`button`);u.className=`boot-button`,u.textContent=`Reload`,u.addEventListener(`click`,()=>window.location.reload()),o.append(s,c,l,u),a.append(o),r.append(i,a)}t(`entry-loaded`),t(`app-import-start`),a(()=>import(`./app-D2RaTXoV.js`).then(()=>t(`app-imported`)),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url).catch(o);export{t as n,a as t};
|
|
61
|
+
//# sourceMappingURL=index-D2nC6I-9.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{A as r,C as i,D as a,E as o,F as s,I as c,M as l,N as u,O as d,P as f,R as p,S as m,T as h,_ as g,b as _,c as v,d as y,f as b,g as x,h as S,j as ee,k as te,l as ne,m as re,p as ie,s as ae,t as oe,u as C,v as w,w as T,x as E,y as D}from"./chat-model-ref-
|
|
1
|
+
import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{A as r,C as i,D as a,E as o,F as s,I as c,M as l,N as u,O as d,P as f,R as p,S as m,T as h,_ as g,b as _,c as v,d as y,f as b,g as x,h as S,j as ee,k as te,l as ne,m as re,p as ie,s as ae,t as oe,u as C,v as w,w as T,x as E,y as D}from"./chat-model-ref-BZFblCeY.js";import{buildOrderedProviderProfiles as se,buildProviderAuthSummary as O,calloutClassForProviderAuthActionTone as k}from"./config-CU5Zi8Dh.js";function A(e){return e===`api-key`?`api`:e===`token`?`token`:e===`manual`?`manual`:`interactive`}function j(e){return{id:e.id,label:e.label,routeIds:[...new Set([...e.methods.map(e=>e.route),...e.routeAliases??[]])],authMethods:e.methods.map(e=>({kind:A(e.kind),providerId:e.configProviderId??e.route,statusProviderId:e.statusRoute,methodId:e.id,label:e.label,buttonLabel:e.buttonLabel,reason:e.hint,setupRequirement:e.setupRequirement})),modelProviderIds:e.modelProviderIds,modelRefs:e.models.recommended}}var M=[j(E),j(ae),j(ne),j(_),j(x),j(r),j(g),j(D),j(ie),j(l),j(w),j(ee),j(v),j(i),j(h),j(f),j(T),j(y),j(te),j(m),j(u),j(o),j(a),j(re),j(d),j(S),j(C),j(b)],N={anthropic:`Anthropic API key`,byteplus:`BytePlus API key`,chutes:`Chutes API key`,gemini:`Google Gemini API key`,google:`Google Gemini API key`,huggingface:`Hugging Face token`,"kimi-code":`Kimi Code API key`,"kimi-coding":`Kimi Code API key`,litellm:`LiteLLM API key`,minimax:`MiniMax API key`,"minimax-cn":`MiniMax CN API key`,"minimax-lightning":`MiniMax Highspeed API key`,mistral:`Mistral API key`,moonshot:`Moonshot API key`,"moonshot-cn":`Moonshot CN API key`,opencode:`OpenCode Zen API key`,"opencode-zen":`OpenCode Zen API key`,openai:`OpenAI API key`,openrouter:`OpenRouter API key`,qianfan:`Qianfan API key`,qwen:`Qwen DashScope API key`,"qwen-coding-plan":`Qwen Coding Plan API key`,synthetic:`Synthetic API key`,together:`Together AI API key`,venice:`Venice API key`,"vercel-ai-gateway":`Vercel AI API key`,volcengine:`Volcano Engine API key`,xai:`xAI API key`,xiaomi:`Xiaomi API key`,zai:`Z.AI API key`,"zai-cn":`Z.AI CN API key`,"zai-coding-cn":`Z.AI Coding CN API key`,"zai-coding-global":`Z.AI Coding Global API key`},P={anthropic:`Sign in`,chutes:`Sign in`,"copilot-proxy":`Proxy sign in`,"github-copilot":`GitHub sign in`,"google-gemini-cli":`Sign in`,"minimax-portal":`Sign in`,"openai-codex":`Sign in`,xai:`xAI sign-in`},F={"cloudflare-ai-gateway":`Cloudflare AI uses the Configure form for Account ID, Gateway ID, and Anthropic API key.`,"copilot-proxy":`Copilot Proxy uses a local sign-in/proxy flow, not API-key setup.`,"github-copilot":`GitHub Copilot uses GitHub device login, not API-key setup.`,"google-gemini-cli":`Google Gemini CLI uses OAuth. Use the Google provider row for Gemini API keys.`,"minimax-portal":`MiniMax Portal uses OAuth. Use the MiniMax provider row for API keys.`,"openai-codex":`OpenAI sign-in uses ChatGPT OAuth. Use the OpenAI provider row for OpenAI API keys.`,ollama:`Ollama needs native endpoint/model fields, not generic API-key setup.`,lmstudio:`LM Studio needs endpoint/model fields, not generic API-key setup.`,vllm:`vLLM needs endpoint/model fields, not API-key setup.`},I={gemini:`Use the Google Gemini CLI row for OAuth, or save a Gemini API key here.`,google:`Use the Google Gemini CLI row for OAuth, or save a Gemini API key here.`,minimax:`Use the MiniMax Portal row for OAuth, or save a MiniMax API key here.`,openai:`Use OpenAI sign-in for ChatGPT OAuth, or save an OpenAI API key here.`};function L(e,t){return e?.providers.find(e=>e.provider===t)??null}function R(e,t){return e?.providers.find(e=>e.provider===t)??null}function z(e){return e===`ready`||e===`ok`||e===`configured`||e===`expiring`||e===`static`?`chip ok`:e===`missing`||e===`unauthenticated`||e===`unconfigured`||e===`refresh-required`?`chip warn`:e===`error`?`chip danger`:`chip`}function B(e){return e===`ready`||e===`ok`||e===`configured`||e===`expiring`||e===`static`}function V(e){return e?B(e.status)||e.profiles.some(e=>B(e.status)):!1}function H(e,t){return(t.modelProviderIds??t.routeIds).map(t=>L(e,t)).filter(e=>!!e)}function U(e){return e===`ok`?`chip ok`:e===`fail`?`chip danger`:`chip`}function W(e,t,n){return e===`ok`?t:e===`fail`?n:`unknown`}function G(n){let r=n.find(e=>e.health)?.health;return r?e`
|
|
2
2
|
<div class="providers-health" role="note">
|
|
3
3
|
<span class=${U(r.reachable)}>
|
|
4
4
|
reachable ${W(r.reachable,`ok`,`failed`)}
|
|
@@ -41,7 +41,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{A as r,C as i,D as
|
|
|
41
41
|
</svg>
|
|
42
42
|
</span>
|
|
43
43
|
`}function $(e){return(e??``).split(/\r?\n/g).map(e=>e.trim()).filter(e=>e&&!e.toLowerCase().startsWith(`summary:`)).join(`
|
|
44
|
-
`)}function xe(e){return!e||e.actionKind!==`interactive`?e?.title??``:e.tone===`success`?`Sign in complete`:e.tone===`danger`?`Sign in failed`:e.tone===`warn`?`Sign in cancelled`:e.prompt?`Continue sign in`:`Sign in in progress`}function Se(e){return e?e.actionKind===`interactive`?e.tone===`success`?`Sign in completed.`:e.tone===`danger`?`Sign in did not complete.`:e.tone===`warn`?`Sign in was cancelled.`:`Sign in is in progress.`:e.message.trim():``}function Ce(e){if(!e)return``;let t=$(e.detail);return e.actionKind===`interactive`&&e.tone!==`danger`?``:t}function we(e){return $(e).split(/\r?\n/g).map(e=>e.trim()).filter(Boolean)[0]??`Continue sign-in.`}function Te(e,t){let n=`${t}/`;return e.filter(e=>e.value===t||e.value.startsWith(n))}function Ee(e,t){let n=new Set,r=[];for(let i of t)for(let t of Te(e,i))n.has(t.value)||(n.add(t.value),r.push(t));return r}function De(e,t){let n=t.trim();return e.some(e=>n===e||n.startsWith(`${e}/`))}function Oe(e){let t=e.indexOf(`/`);if(t<=0)return{value:e,label:e};let n=e.slice(0,t);return{value:e,label:`${e.slice(t+1)} · ${n}`}}function ke(e){let t=e.providerCard.modelProviderIds??e.providerCard.routeIds,n=new Map(e.options.map(e=>[e.value,e])),r=new Set,i=[],a=e=>{let a=e.trim();!a||r.has(a)||!De(t,a)||(r.add(a),i.push(n.get(a)??Oe(a)))};e.current&&a(e.current);for(let t of e.providerCard.modelRefs)a(t);if(i.length===0&&e.providerCard.modelRefs.length===0)for(let n of Ee(e.options,t))r.has(n.value)||(r.add(n.value),i.push(n));return i}function Ae(r){let i=O(r.formValue??r.originalValue??{}),a=M,o=de({config:r.formValue??r.originalValue??{},modelCatalog:r.modelCatalog,current:null}),s=xe(r.authAction),c=Se(r.authAction),l=Ce(r.authAction),u=we(r.authAction?.prompt?.message),d=!!c&&c!==u,f=e=>{e.preventDefault();let t=e.currentTarget,n=new FormData(t),i=q(n,`provider`),a=q(n,`secret`);if(!i||!a){t.reportValidity();return}r.onStoreProviderApiKey({provider:i,secret:a}),t.reset()},p=e=>{e.preventDefault();let t=e.currentTarget,n=new FormData(t),i=q(n,`provider`),a=q(n,`secret`),o=q(n,`baseUrl`),s=q(n,`modelId`),c=q(n,`compatibility`),l=c===`anthropic`||c===`openai`||c===`unknown`?c:void 0,u=q(n,`customProviderId`),d=q(n,`alias`),f=q(n,`accountId`),p=q(n,`gatewayId`);if(!i){t.reportValidity();return}r.onStoreManualProvider({provider:i,...a?{secret:a}:{},...o?{baseUrl:o}:{},...s?{modelId:s}:{},...l?{compatibility:l}:{},...u?{customProviderId:u}:{},...d?{alias:d}:{},...f?{accountId:f}:{},...p?{gatewayId:p}:{},...J(n,`allowPrivateNetwork`)?{allowPrivateNetwork:!0}:{}})},m=e=>{typeof window<`u`&&!window.confirm(`Clear the stored credential for "${e}"?`)||r.onClearProfileCredential(e)},h=e=>e.routeIds.some(e=>{let t=R(r.authStatus,e);return t?V(t):!1}),g=[...a].toSorted((e,t)=>{let n=h(e);return n===h(t)?a.indexOf(e)-a.indexOf(t):n?-1:1});return e`
|
|
44
|
+
`)}function xe(e){return!e||e.actionKind!==`interactive`?e?.title??``:e.tone===`success`?`Sign in complete`:e.tone===`danger`?`Sign in failed`:e.tone===`warn`?`Sign in cancelled`:e.prompt?`Continue sign in`:`Sign in in progress`}function Se(e){return e?e.actionKind===`interactive`?e.tone===`success`?`Sign in completed.`:e.tone===`danger`?`Sign in did not complete.`:e.tone===`warn`?`Sign in was cancelled.`:`Sign in is in progress.`:e.message.trim():``}function Ce(e){if(!e)return``;let t=$(e.detail);return e.actionKind===`interactive`&&e.tone!==`danger`?``:t}function we(e){return $(e).split(/\r?\n/g).map(e=>e.trim()).filter(Boolean)[0]??`Continue sign-in.`}function Te(e,t){let n=`${t}/`;return e.filter(e=>e.value===t||e.value.startsWith(n))}function Ee(e,t){let n=new Set,r=[];for(let i of t)for(let t of Te(e,i))n.has(t.value)||(n.add(t.value),r.push(t));return r}function De(e,t){let n=t.trim();return e.some(e=>n===e||n.startsWith(`${e}/`))}function Oe(e){let t=e.indexOf(`/`);if(t<=0)return{value:e,label:e};let n=e.slice(0,t);return{value:e,label:`${e.slice(t+1)} · ${n}`}}function ke(e){let t=e.providerCard.modelProviderIds??e.providerCard.routeIds,n=new Map(e.options.map(e=>[e.value,e])),r=new Set,i=[],a=e=>{let a=e.trim();!a||r.has(a)||!De(t,a)||(r.add(a),i.push(n.get(a)??Oe(a)))};e.current&&a(e.current);for(let t of e.providerCard.modelRefs)(!e.authoritative||n.has(t))&&a(t);if(e.authoritative||i.length===0&&e.providerCard.modelRefs.length===0)for(let n of Ee(e.options,t))r.has(n.value)||(r.add(n.value),i.push(n));return i}function Ae(r){let i=O(r.formValue??r.originalValue??{}),a=M,o=de({config:r.formValue??r.originalValue??{},modelCatalog:r.modelCatalog,current:null}),s=xe(r.authAction),c=Se(r.authAction),l=Ce(r.authAction),u=we(r.authAction?.prompt?.message),d=!!c&&c!==u,f=e=>{e.preventDefault();let t=e.currentTarget,n=new FormData(t),i=q(n,`provider`),a=q(n,`secret`);if(!i||!a){t.reportValidity();return}r.onStoreProviderApiKey({provider:i,secret:a}),t.reset()},p=e=>{e.preventDefault();let t=e.currentTarget,n=new FormData(t),i=q(n,`provider`),a=q(n,`secret`),o=q(n,`baseUrl`),s=q(n,`modelId`),c=q(n,`compatibility`),l=c===`anthropic`||c===`openai`||c===`unknown`?c:void 0,u=q(n,`customProviderId`),d=q(n,`alias`),f=q(n,`accountId`),p=q(n,`gatewayId`);if(!i){t.reportValidity();return}r.onStoreManualProvider({provider:i,...a?{secret:a}:{},...o?{baseUrl:o}:{},...s?{modelId:s}:{},...l?{compatibility:l}:{},...u?{customProviderId:u}:{},...d?{alias:d}:{},...f?{accountId:f}:{},...p?{gatewayId:p}:{},...J(n,`allowPrivateNetwork`)?{allowPrivateNetwork:!0}:{}})},m=e=>{typeof window<`u`&&!window.confirm(`Clear the stored credential for "${e}"?`)||r.onClearProfileCredential(e)},h=e=>e.routeIds.some(e=>{let t=R(r.authStatus,e);return t?V(t):!1}),g=[...a].toSorted((e,t)=>{let n=h(e);return n===h(t)?a.indexOf(e)-a.indexOf(t):n?-1:1});return e`
|
|
45
45
|
<style>
|
|
46
46
|
.providers-shell {
|
|
47
47
|
display: grid;
|
|
@@ -828,7 +828,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{A as r,C as i,D as
|
|
|
828
828
|
</button>
|
|
829
829
|
</div>
|
|
830
830
|
</section>
|
|
831
|
-
`:g.map(n=>{let a=n.routeIds.map(e=>R(r.authStatus,e)).filter(e=>!!e),s=a.some(e=>V(e)),c=a.find(e=>V(e))?.status??a[0]?.status??null,l=ke({options:o,providerCard:n,current:null}),u=H(r.modelCatalogStatus,n),d=n.modelRefs.length||l.length,h=a.map(e=>me({runtimeProvider:e})).find(e=>!!e)??null,g=`${d} ${d===1?`model`:`models`}`,_=r.providerSetupExtra?.({id:n.id,label:n.label,routeIds:[...n.routeIds],modelProviderIds:[...n.modelProviderIds??n.routeIds],modelCount:d,ready:s})??t;return e`
|
|
831
|
+
`:g.map(n=>{let a=n.routeIds.map(e=>R(r.authStatus,e)).filter(e=>!!e),s=a.some(e=>V(e)),c=a.find(e=>V(e))?.status??a[0]?.status??null,l=ke({options:o,providerCard:n,current:null,authoritative:s}),u=H(r.modelCatalogStatus,n),d=s?l.length:n.modelRefs.length||l.length,h=a.map(e=>me({runtimeProvider:e})).find(e=>!!e)??null,g=`${d} ${d===1?`model`:`models`}`,_=r.providerSetupExtra?.({id:n.id,label:n.label,routeIds:[...n.routeIds],modelProviderIds:[...n.modelProviderIds??n.routeIds],modelCount:d,ready:s})??t;return e`
|
|
832
832
|
<details
|
|
833
833
|
class="providers-provider"
|
|
834
834
|
data-provider-card=${n.id}
|
|
@@ -1141,4 +1141,4 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{A as r,C as i,D as
|
|
|
1141
1141
|
</section>
|
|
1142
1142
|
</section>
|
|
1143
1143
|
`}export{Ae as renderProviders};
|
|
1144
|
-
//# sourceMappingURL=providers-
|
|
1144
|
+
//# sourceMappingURL=providers-CyjiG5Jw.js.map
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<link rel="icon" type="image/png" sizes="32x32" href="./favicon-32.png" />
|
|
15
15
|
<link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png" />
|
|
16
16
|
<script data-fased-boot-watchdog src="./boot-watchdog.js" defer></script>
|
|
17
|
-
<script type="module" crossorigin src="./assets/index-
|
|
17
|
+
<script type="module" crossorigin src="./assets/index-D2nC6I-9.js"></script>
|
|
18
18
|
<link rel="stylesheet" crossorigin href="./assets/index-RwVraC3c.css">
|
|
19
19
|
</head>
|
|
20
20
|
<body>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"0.1.55"}
|
|
@@ -894,6 +894,12 @@ async function runCronIsolatedAgentTurn(params) {
|
|
|
894
894
|
}
|
|
895
895
|
const modelOverrideResult = resolveTaskModelOverride(params.job);
|
|
896
896
|
let modelSource = hooksGmailModelApplied ? "Gmail hook model" : "Agent default model";
|
|
897
|
+
const requestedTaskRole = params.job.executionPolicy?.modelPolicy?.role;
|
|
898
|
+
const requestedRoleSelection = requestedTaskRole ? resolveTaskModelRole({
|
|
899
|
+
cfg: params.cfg,
|
|
900
|
+
agentId,
|
|
901
|
+
role: requestedTaskRole
|
|
902
|
+
}) : undefined;
|
|
897
903
|
const escalationSelection = resolveTaskModelRole({
|
|
898
904
|
cfg: params.cfg,
|
|
899
905
|
agentId,
|
|
@@ -906,9 +912,9 @@ async function runCronIsolatedAgentTurn(params) {
|
|
|
906
912
|
const taskEscalationModel = params.job.executionPolicy?.modelPolicy?.escalationModel?.trim();
|
|
907
913
|
const pendingEscalationModel = params.job.state.pendingEscalation ? taskEscalationModel || escalationSelection?.model : undefined;
|
|
908
914
|
const sourceConflictEscalationModel = effectiveExecutionModeForPolicy === "agent-turn" && sourceVerification?.status === "conflict_suspected" ? taskEscalationModel || escalationSelection?.model : undefined;
|
|
909
|
-
const modelOverride = pendingEscalationModel || sourceConflictEscalationModel || modelOverrideResult.model?.trim();
|
|
910
|
-
const modelOverrideSource = pendingEscalationModel || sourceConflictEscalationModel ? "policy" : modelOverrideResult.source;
|
|
911
|
-
const modelOverrideSourceLabel = pendingEscalationModel || sourceConflictEscalationModel ? taskEscalationModel ? "Task escalation model" : escalationSelection ? formatTaskModelSelectionSource(escalationSelection) : "Escalation model" : modelOverrideResult.source === "policy" ? "Task model override" : modelOverrideResult.source === "payload" ? "Task payload model" : undefined;
|
|
915
|
+
const modelOverride = pendingEscalationModel || sourceConflictEscalationModel || modelOverrideResult.model?.trim() || requestedRoleSelection?.model;
|
|
916
|
+
const modelOverrideSource = pendingEscalationModel || sourceConflictEscalationModel || requestedRoleSelection ? "policy" : modelOverrideResult.source;
|
|
917
|
+
const modelOverrideSourceLabel = pendingEscalationModel || sourceConflictEscalationModel ? taskEscalationModel ? "Task escalation model" : escalationSelection ? formatTaskModelSelectionSource(escalationSelection) : "Escalation model" : modelOverrideResult.source === "policy" ? "Task model override" : modelOverrideResult.source === "payload" ? "Task payload model" : requestedRoleSelection ? formatTaskModelSelectionSource(requestedRoleSelection) : undefined;
|
|
912
918
|
if (modelOverride !== undefined && modelOverride.length > 0) {
|
|
913
919
|
const resolvedOverride = resolveAllowedModelRef({
|
|
914
920
|
cfg: cfgWithAgentDefaults,
|
package/dist/cron/normalize.js
CHANGED
|
@@ -400,6 +400,16 @@ function coerceExecutionPolicy(policy) {
|
|
|
400
400
|
if (mode) {
|
|
401
401
|
modelPolicy.mode = mode;
|
|
402
402
|
}
|
|
403
|
+
const role = coerceEnum(policy.modelPolicy.role, [
|
|
404
|
+
"cheapCheck",
|
|
405
|
+
"strong",
|
|
406
|
+
"escalation",
|
|
407
|
+
"coding",
|
|
408
|
+
"summarizer"
|
|
409
|
+
]);
|
|
410
|
+
if (role) {
|
|
411
|
+
modelPolicy.role = role;
|
|
412
|
+
}
|
|
403
413
|
for (const field of [
|
|
404
414
|
"model",
|
|
405
415
|
"thinking",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { openVerifiedFileSync } from "../infra/safe-open-sync.js";
|
|
2
2
|
import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
|
|
3
|
+
import { VERSION } from "../version.js";
|
|
3
4
|
import { isWithinDir } from "../infra/path-safety.js";
|
|
4
5
|
import { AVATAR_MAX_BYTES } from "../shared/avatar-policy.js";
|
|
5
6
|
import { CONTROL_UI_AVATAR_PREFIX, buildControlUiAvatarUrl, normalizeControlUiBasePath, resolveAssistantAvatarUrl } from "./control-ui-shared.js";
|
|
@@ -284,6 +285,7 @@ function handleControlUiHttpRequest(req, res, opts) {
|
|
|
284
285
|
}
|
|
285
286
|
sendJson(res, 200, {
|
|
286
287
|
basePath,
|
|
288
|
+
serverVersion: VERSION,
|
|
287
289
|
assistantName: identity.name,
|
|
288
290
|
assistantAvatar: avatarValue ?? identity.avatar,
|
|
289
291
|
assistantAgentId: identity.agentId
|
|
@@ -26,6 +26,7 @@ const ModelChoiceSchema = Type.Object({
|
|
|
26
26
|
label: NonEmptyString,
|
|
27
27
|
contextWindow: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
28
28
|
maxTokens: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
29
|
+
apiRoute: Type.Optional(NonEmptyString),
|
|
29
30
|
features: Type.Array(Type.Union([
|
|
30
31
|
Type.Literal("text"),
|
|
31
32
|
Type.Literal("vision"),
|
|
@@ -42,7 +43,8 @@ const ModelChoiceSchema = Type.Object({
|
|
|
42
43
|
Type.Literal("low"),
|
|
43
44
|
Type.Literal("medium"),
|
|
44
45
|
Type.Literal("high"),
|
|
45
|
-
Type.Literal("xhigh")
|
|
46
|
+
Type.Literal("xhigh"),
|
|
47
|
+
Type.Literal("max")
|
|
46
48
|
]))),
|
|
47
49
|
defaultThinkingLevel: Type.Optional(Type.Union([
|
|
48
50
|
Type.Literal("off"),
|
|
@@ -50,7 +52,8 @@ const ModelChoiceSchema = Type.Object({
|
|
|
50
52
|
Type.Literal("low"),
|
|
51
53
|
Type.Literal("medium"),
|
|
52
54
|
Type.Literal("high"),
|
|
53
|
-
Type.Literal("xhigh")
|
|
55
|
+
Type.Literal("xhigh"),
|
|
56
|
+
Type.Literal("max")
|
|
54
57
|
])),
|
|
55
58
|
thinkingMode: Type.Optional(Type.Union([
|
|
56
59
|
Type.Literal("openai-reasoning-effort"),
|
|
@@ -185,6 +188,7 @@ const AgentsFilesSetResultSchema = Type.Object({
|
|
|
185
188
|
}, { additionalProperties: false });
|
|
186
189
|
const ModelsListParamsSchema = Type.Object({
|
|
187
190
|
all: Type.Optional(Type.Boolean()),
|
|
191
|
+
available: Type.Optional(Type.Boolean()),
|
|
188
192
|
provider: Type.Optional(NonEmptyString),
|
|
189
193
|
sessionKey: Type.Optional(NonEmptyString),
|
|
190
194
|
includeMetadata: Type.Optional(Type.Boolean())
|
|
@@ -493,6 +493,13 @@ const CronTaskExecutionPolicySchema = Type.Object({
|
|
|
493
493
|
Type.Literal("auto"),
|
|
494
494
|
Type.Literal("none")
|
|
495
495
|
])),
|
|
496
|
+
role: Type.Optional(Type.Union([
|
|
497
|
+
Type.Literal("cheapCheck"),
|
|
498
|
+
Type.Literal("strong"),
|
|
499
|
+
Type.Literal("escalation"),
|
|
500
|
+
Type.Literal("coding"),
|
|
501
|
+
Type.Literal("summarizer")
|
|
502
|
+
])),
|
|
496
503
|
model: Type.Optional(NonEmptyString),
|
|
497
504
|
thinking: Type.Optional(NonEmptyString),
|
|
498
505
|
escalationModel: Type.Optional(NonEmptyString)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defaultRuntime } from "../../runtime.js";
|
|
2
2
|
import { resolveAgentDir, resolveDefaultAgentId, resolveSessionAgentId } from "../../agents/agent-scope.js";
|
|
3
|
-
import {
|
|
3
|
+
import { listProviderBrandManifests } from "../../providers/registry.js";
|
|
4
4
|
import { DEFAULT_PROVIDER } from "../../agents/defaults.js";
|
|
5
5
|
import { normalizeSecretInput } from "../../utils/normalize-secret-input.js";
|
|
6
6
|
import { normalizeProviderId } from "../../agents/provider-id.js";
|
|
@@ -13,12 +13,12 @@ import { resolveProfileUnusableUntilForDisplay } from "../../agents/auth-profile
|
|
|
13
13
|
import "../../agents/auth-profiles.js";
|
|
14
14
|
import { ErrorCodes, errorShape } from "../protocol/schema/error-codes.js";
|
|
15
15
|
import { formatValidationErrors, validateModelsAuthClearParams, validateModelsAuthConfigureParams, validateModelsAuthInteractiveStartParams, validateModelsAuthStatusParams, validateModelsAuthStoreParams, validateModelsCatalogStatusParams, validateModelsListParams } from "../protocol/index.js";
|
|
16
|
-
import { buildCredentialScopedAllowedModelSet } from "../../agents/model-catalog-access.js";
|
|
17
16
|
import { deriveModelMetadata } from "../../agents/model-metadata.js";
|
|
18
17
|
import { loadProviderExtensionCatalogIndex } from "../../agents/provider-extension-catalog-index.js";
|
|
19
18
|
import { buildModelCatalogStatus } from "../../agents/model-catalog-status.js";
|
|
20
19
|
import { DEFAULT_OAUTH_WARN_MS, buildAuthHealthSummary } from "../../agents/auth-health.js";
|
|
21
20
|
import { normalizeLegacyOnboardAuthChoice } from "../../commands/auth-choice-legacy.js";
|
|
21
|
+
import { resolveAuthenticatedModelCatalog } from "../../agents/authenticated-model-catalog.js";
|
|
22
22
|
import { configureLmStudioProvider, configureOllamaProvider, configureVllmProvider } from "../../commands/vllm-setup.js";
|
|
23
23
|
import { applyAuthChoice } from "../../commands/auth-choice.apply.js";
|
|
24
24
|
import "../../commands/auth-choice.js";
|
|
@@ -854,16 +854,15 @@ const modelsHandlers = {
|
|
|
854
854
|
}) : defaultAgentId;
|
|
855
855
|
const agentDir = resolveAgentDir(cfg, authAgentId);
|
|
856
856
|
const store = ensureAuthProfileStore(agentDir);
|
|
857
|
-
const { usableCatalog, allowedCatalog } =
|
|
857
|
+
const { usableCatalog, allowedCatalog } = await resolveAuthenticatedModelCatalog({
|
|
858
858
|
cfg,
|
|
859
|
+
store,
|
|
859
860
|
catalog,
|
|
860
|
-
defaultProvider: DEFAULT_PROVIDER
|
|
861
|
-
store
|
|
861
|
+
defaultProvider: DEFAULT_PROVIDER
|
|
862
862
|
});
|
|
863
863
|
const providerFilter = typeof params.provider === "string" && params.provider.trim() ? normalizeProviderId(params.provider) : "";
|
|
864
|
-
const modelSource = params.all === true ? usableCatalog : allowedCatalog.length > 0 ? allowedCatalog : usableCatalog;
|
|
865
|
-
const
|
|
866
|
-
const models = providerFilter ? curatedModelSource.filter((model) => normalizeProviderId(model.provider) === providerFilter) : curatedModelSource;
|
|
864
|
+
const modelSource = params.all === true || params.available === true ? usableCatalog : allowedCatalog.length > 0 ? allowedCatalog : usableCatalog;
|
|
865
|
+
const models = providerFilter ? modelSource.filter((model) => normalizeProviderId(model.provider) === providerFilter) : modelSource;
|
|
867
866
|
const payloadModels = params.includeMetadata === true ? models.map((model) => ({
|
|
868
867
|
...model,
|
|
869
868
|
metadata: model.metadata ?? deriveModelMetadata({
|
|
@@ -871,7 +870,7 @@ const modelsHandlers = {
|
|
|
871
870
|
cfg
|
|
872
871
|
})
|
|
873
872
|
})) : models;
|
|
874
|
-
respond(true, { models: payloadModels }, undefined);
|
|
873
|
+
respond(true, { models: payloadModels.toSorted((left, right) => left.provider.localeCompare(right.provider) || (left.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) - (right.metadata?.recommendationRank ?? Number.MAX_SAFE_INTEGER) || left.name.localeCompare(right.name)) }, undefined);
|
|
875
874
|
} catch (err) {
|
|
876
875
|
respond(false, undefined, errorShape(ErrorCodes.UNAVAILABLE, String(err)));
|
|
877
876
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { loadConfig } from "../config/io.js";
|
|
2
2
|
import "../config/config.js";
|
|
3
3
|
import { loadModelCatalog, resetModelCatalogCacheForTest } from "../agents/model-catalog.js";
|
|
4
|
+
import { resetRuntimeProviderModelCatalogCache } from "../providers/runtime-model-catalog.js";
|
|
4
5
|
|
|
5
6
|
//#region src/gateway/server-model-catalog.ts
|
|
6
7
|
function createGatewayModelCatalogCache() {
|
|
@@ -54,11 +55,13 @@ function startGatewayModelCatalogRefresh(params) {
|
|
|
54
55
|
function markGatewayModelCatalogStaleForReload() {
|
|
55
56
|
readOnlyModelCatalogCache.staleGeneration += 1;
|
|
56
57
|
fullModelCatalogCache.staleGeneration += 1;
|
|
58
|
+
resetRuntimeProviderModelCatalogCache();
|
|
57
59
|
}
|
|
58
60
|
function __resetModelCatalogCacheForTest() {
|
|
59
61
|
resetGatewayModelCatalogCache(readOnlyModelCatalogCache);
|
|
60
62
|
resetGatewayModelCatalogCache(fullModelCatalogCache);
|
|
61
63
|
resetModelCatalogCacheForTest();
|
|
64
|
+
resetRuntimeProviderModelCatalogCache();
|
|
62
65
|
}
|
|
63
66
|
async function loadGatewayModelCatalog(params) {
|
|
64
67
|
const cache = resolveGatewayModelCatalogCache(params);
|
|
@@ -13,6 +13,17 @@ import fs from "node:fs/promises";
|
|
|
13
13
|
import * as tar from "tar";
|
|
14
14
|
|
|
15
15
|
//#region src/infra/update-runner.ts
|
|
16
|
+
async function readControlUiBuildVersion(root) {
|
|
17
|
+
try {
|
|
18
|
+
const parsed = JSON.parse(await fs.readFile(path.join(root, "dist", "control-ui", "version.json"), "utf8"));
|
|
19
|
+
return typeof parsed.version === "string" && parsed.version.trim() ? parsed.version.trim() : null;
|
|
20
|
+
} catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function controlUiBuildMatches(root, expectedVersion) {
|
|
25
|
+
return compareSemverStrings(await readControlUiBuildVersion(root), expectedVersion) === 0;
|
|
26
|
+
}
|
|
16
27
|
async function readHostedRuntimeMetadata(root) {
|
|
17
28
|
try {
|
|
18
29
|
const parsed = JSON.parse(await fs.readFile(path.join(root, ".fased-hosted-runtime.json"), "utf8"));
|
|
@@ -435,6 +446,22 @@ async function runHostedArtifactUpdate(params) {
|
|
|
435
446
|
reason: "artifact version mismatch"
|
|
436
447
|
};
|
|
437
448
|
}
|
|
449
|
+
if (!await controlUiBuildMatches(artifactRoot, params.expectedVersion)) {
|
|
450
|
+
steps.push({
|
|
451
|
+
name: "artifact UI version check",
|
|
452
|
+
command: `verify dashboard build v${params.expectedVersion}`,
|
|
453
|
+
cwd: artifactRoot,
|
|
454
|
+
durationMs: 0,
|
|
455
|
+
exitCode: 1,
|
|
456
|
+
stderrTail: `expected dashboard v${params.expectedVersion}, found ${await readControlUiBuildVersion(artifactRoot) ?? "unknown"}`
|
|
457
|
+
});
|
|
458
|
+
return {
|
|
459
|
+
kind: "error",
|
|
460
|
+
steps,
|
|
461
|
+
reason: "artifact dashboard version mismatch",
|
|
462
|
+
afterVersion: await readPackageVersion(params.pkgRoot)
|
|
463
|
+
};
|
|
464
|
+
}
|
|
438
465
|
const dependenciesChanged = runtimeDependencyMetaChanged(params.beforeMeta, artifactMeta);
|
|
439
466
|
steps.push({
|
|
440
467
|
name: "artifact dependency check",
|
|
@@ -756,7 +783,7 @@ async function runHostedLayeredArtifactUpdate(params) {
|
|
|
756
783
|
}
|
|
757
784
|
await fs.symlink(dependencyModules, path.join(artifactRoot, "node_modules"), "dir");
|
|
758
785
|
const artifactVersion = await readPackageVersion(artifactRoot);
|
|
759
|
-
const runtimeShapeReady = compareSemverStrings(artifactVersion, params.expectedVersion) === 0 && await pathExists(path.join(artifactRoot, "fased.mjs")) && await pathExists(path.join(artifactRoot, "node_modules"));
|
|
786
|
+
const runtimeShapeReady = compareSemverStrings(artifactVersion, params.expectedVersion) === 0 && await pathExists(path.join(artifactRoot, "fased.mjs")) && await pathExists(path.join(artifactRoot, "node_modules")) && await controlUiBuildMatches(artifactRoot, params.expectedVersion);
|
|
760
787
|
if (!runtimeShapeReady) {
|
|
761
788
|
return {
|
|
762
789
|
kind: "error",
|
|
@@ -903,12 +930,13 @@ async function runHostedReleaseArtifactUpdate(params) {
|
|
|
903
930
|
}
|
|
904
931
|
const artifactRoot = path.join(extractDir, "package");
|
|
905
932
|
const artifactVersion = await readPackageVersion(artifactRoot);
|
|
906
|
-
const
|
|
933
|
+
const controlUiVersion = await readControlUiBuildVersion(artifactRoot);
|
|
934
|
+
const runtimeShapeReady = compareSemverStrings(artifactVersion, params.expectedVersion) === 0 && await pathExists(path.join(artifactRoot, "fased.mjs")) && await pathExists(path.join(artifactRoot, "node_modules")) && compareSemverStrings(controlUiVersion, params.expectedVersion) === 0;
|
|
907
935
|
const verifyCommand = `verify checksummed v${params.expectedVersion} runtime shape`;
|
|
908
936
|
const verifyInfo = startProgress("hosted artifact verify", verifyCommand, artifactRoot);
|
|
909
937
|
const verifyStarted = Date.now();
|
|
910
938
|
const runtimeReady = runtimeShapeReady;
|
|
911
|
-
const verifyFailure = !runtimeShapeReady ? `expected complete v${params.expectedVersion}, found ${artifactVersion ?? "unknown"}` : "hosted runtime shape verification failed";
|
|
939
|
+
const verifyFailure = !runtimeShapeReady ? `expected complete v${params.expectedVersion}, found runtime ${artifactVersion ?? "unknown"} and dashboard ${controlUiVersion ?? "unknown"}` : "hosted runtime shape verification failed";
|
|
912
940
|
completeProgress(verifyInfo, {
|
|
913
941
|
name: "hosted artifact verify",
|
|
914
942
|
command: verifyCommand,
|