aigetwey 1.3.6 → 1.3.7
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/CHANGELOG.md +26 -0
- package/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/build-manifest.json +3 -3
- package/dashboard/.next/diagnostics/route-bundle-stats.json +10 -10
- package/dashboard/.next/fallback-build-manifest.json +3 -3
- package/dashboard/.next/server/app/(console)/combos/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/config/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/console/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/endpoint/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/providers/[id]/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/providers/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/quota/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/tools/[id]/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/tools/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/(console)/usage/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/_global-error.html +1 -1
- package/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/_not-found.html +1 -1
- package/dashboard/.next/server/app/_not-found.rsc +2 -2
- package/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/combos.html +1 -1
- package/dashboard/.next/server/app/combos.rsc +2 -2
- package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp/combos/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp/combos.segment.rsc +1 -1
- package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
- package/dashboard/.next/server/app/combos.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/server/app/combos.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/combos.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/combos.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/config.html +1 -1
- package/dashboard/.next/server/app/config.rsc +2 -2
- package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp/config/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp/config.segment.rsc +1 -1
- package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
- package/dashboard/.next/server/app/config.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/server/app/config.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/config.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/config.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/console.html +1 -1
- package/dashboard/.next/server/app/console.rsc +2 -2
- package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp/console/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp/console.segment.rsc +1 -1
- package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
- package/dashboard/.next/server/app/console.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/server/app/console.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/console.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/console.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/endpoint.html +1 -1
- package/dashboard/.next/server/app/endpoint.rsc +3 -3
- package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp/endpoint/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp/endpoint.segment.rsc +1 -1
- package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
- package/dashboard/.next/server/app/endpoint.segments/_full.segment.rsc +3 -3
- package/dashboard/.next/server/app/endpoint.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/endpoint.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/endpoint.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/server/app/index.rsc +3 -3
- package/dashboard/.next/server/app/index.segments/!KGNvbnNvbGUp/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/server/app/index.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
- package/dashboard/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/login.html +1 -1
- package/dashboard/.next/server/app/login.rsc +2 -2
- package/dashboard/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/dashboard/.next/server/app/providers.html +1 -1
- package/dashboard/.next/server/app/providers.rsc +3 -3
- package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp/providers/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp/providers.segment.rsc +1 -1
- package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
- package/dashboard/.next/server/app/providers.segments/_full.segment.rsc +3 -3
- package/dashboard/.next/server/app/providers.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/providers.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/quota.html +1 -1
- package/dashboard/.next/server/app/quota.rsc +2 -2
- package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp/quota/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp/quota.segment.rsc +1 -1
- package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
- package/dashboard/.next/server/app/quota.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/server/app/quota.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/quota.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/quota.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/app/tools.html +1 -1
- package/dashboard/.next/server/app/tools.rsc +2 -2
- package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp/tools/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp/tools.segment.rsc +1 -1
- package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
- package/dashboard/.next/server/app/tools.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/server/app/tools.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/server/app/tools.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/server/app/tools.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/server/chunks/[root-of-the-server]__043un18._.js +1 -1
- package/dashboard/.next/server/chunks/[root-of-the-server]__043un18._.js.map +1 -1
- package/dashboard/.next/server/chunks/_0digmky._.js +1 -1
- package/dashboard/.next/server/chunks/_0digmky._.js.map +1 -1
- package/dashboard/.next/server/chunks/ssr/_1mumvwn._.js +1 -1
- package/dashboard/.next/server/chunks/ssr/_1mumvwn._.js.map +1 -1
- package/dashboard/.next/server/chunks/ssr/src_components_0nuo5yx._.js +1 -1
- package/dashboard/.next/server/chunks/ssr/src_components_0nuo5yx._.js.map +1 -1
- package/dashboard/.next/server/chunks/ssr/src_components_EndpointView_tsx_0awdzb5._.js +1 -1
- package/dashboard/.next/server/chunks/ssr/src_components_EndpointView_tsx_0awdzb5._.js.map +1 -1
- package/dashboard/.next/server/chunks/ssr/src_components_ProviderDetail_tsx_06sxu0r._.js +1 -1
- package/dashboard/.next/server/chunks/ssr/src_components_ProviderDetail_tsx_06sxu0r._.js.map +1 -1
- package/dashboard/.next/server/chunks/ssr/src_components_ToolDetail_tsx_0qperd-._.js +1 -1
- package/dashboard/.next/server/chunks/ssr/src_components_ToolDetail_tsx_0qperd-._.js.map +1 -1
- package/dashboard/.next/server/middleware-build-manifest.js +3 -3
- package/dashboard/.next/server/pages/404.html +1 -1
- package/dashboard/.next/server/pages/500.html +1 -1
- package/dashboard/.next/static/chunks/03o9w8fy3awov.css +3 -0
- package/dashboard/.next/static/chunks/{0_fo_1xhw25rd.js → 063d_vdu_m-g_.js} +1 -1
- package/dashboard/.next/static/chunks/{3i6nr2y3h_7s2.js → 0tq5u12liycmg.js} +1 -1
- package/dashboard/.next/static/chunks/{00415cmd3ji2s.js → 16vbdc0g5xea0.js} +1 -1
- package/dashboard/.next/static/chunks/{05i93ivai9obr.js → 3mhsmb2ks1vev.js} +1 -1
- package/dashboard/.next/trace +1 -1
- package/dashboard/.next/trace-build +1 -1
- package/dashboard/src/components/EndpointView.tsx +13 -7
- package/dashboard/src/components/ProviderDetail.tsx +1 -1
- package/dashboard/src/components/ProviderManager.tsx +1 -1
- package/dashboard/src/components/ToolDetail.tsx +160 -20
- package/dashboard/src/lib/session.ts +6 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +1 -1
- package/dashboard/.next/static/chunks/2284qz1hy9776.css +0 -3
- /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → BHVoneq9_CCAAPwET7GfO}/_buildManifest.js +0 -0
- /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → BHVoneq9_CCAAPwET7GfO}/_clientMiddlewareManifest.js +0 -0
- /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → BHVoneq9_CCAAPwET7GfO}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,81189,e=>{"use strict";var t=e.i(43476);let n={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",warn:"bg-warning/12 text-warning",info:"bg-info/12 text-info",neutral:"bg-surface-2 text-text-muted"};function a({tone:e="neutral",children:i,className:s}){return(0,t.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${n[e]}${s?` ${s}`:""}`,children:i})}e.s(["Badge",0,a,"FormatBadge",0,function({format:e}){return(0,t.jsx)(a,{tone:"info",children:e})}])},38286,e=>{"use strict";var t=e.i(43476);e.s(["Empty",0,function({children:e}){return(0,t.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:e})},"Stat",0,function({label:e,value:n,sub:a}){return(0,t.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,t.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:e}),(0,t.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:n}),a&&(0,t.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:a})]})},"fmt",0,{int:e=>e.toLocaleString("en-US"),compact:e=>Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)),cost:e=>0===e?"$0":e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`,time:e=>new Date(e).toLocaleString("en-US",{hour12:!1}),date(e){let t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()}`},ago(e){let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`},duration(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;if(t<3600)return`${Math.floor(t/60)}m ${t%60}s`;let n=Math.floor(t/3600),a=Math.floor(t%3600/60);if(n<24)return`${n}h ${a}m`;let i=Math.floor(n/24);return`${i}d ${n%24}h`}}])},69163,e=>{"use strict";var t=e.i(43476);e.s(["CardTitle",0,function({title:e,sub:n,icon:a}){return(0,t.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[a,(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("div",{className:"truncate text-[14px] font-semibold tracking-tight text-text",children:e}),n&&(0,t.jsx)("div",{className:"truncate text-[12px] text-text-muted",children:n})]})]})},"RichCard",0,function({header:e,footer:n,children:a,className:i}){return(0,t.jsxs)("section",{className:`overflow-hidden rounded-brand-lg border border-border bg-surface shadow-soft${i?` ${i}`:""}`,children:[e&&(0,t.jsx)("header",{className:"flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-3",children:e}),(0,t.jsx)("div",{className:"p-4",children:a}),n&&(0,t.jsx)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:n})]})}])},53854,45570,e=>{"use strict";var t=e.i(43476);function n(e,t){return RegExp("^"+e.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i").test(t)}let a={vision:!1,pdf:!1,audioInput:!1,videoInput:!1,imageOutput:!1,audioOutput:!1,search:!1,tools:!0,reasoning:!1,thinkingFormat:null,thinkingCanDisable:!0,thinkingRange:null,contextWindow:2e5,maxOutput:64e3},i={"claude-opus-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.7":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:64e3},"claude-sonnet-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:64e3},"gpt-image-1":{imageOutput:!0,tools:!1},"glm-4.6v":{vision:!0,reasoning:!0,thinkingFormat:"zai",contextWindow:128e3},"vision-model":{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6},"coder-model":{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},s={"codebuddy-cn":{"glm-5.2":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:48e3},"glm-5.1":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5.0":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"glm-5.0-turbo":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5v-turbo":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:38e3},"glm-4.7":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"minimax-m3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:512e3,maxOutput:48e3},"minimax-m2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"kimi-k2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.6":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.5":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:164e3,maxOutput:32e3},"hy3-preview":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:192e3,maxOutput:64e3},"deepseek-v4-pro":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:5e4},"deepseek-v4-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:5e4},"deepseek-v3-2-volc":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:96e3,maxOutput:32e3}}},o=[{pattern:"*claude*opus-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.8*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*haiku*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*opus*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*sonnet*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*fable*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude*mythos*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude-3*",caps:{vision:!0}},{pattern:"*claude*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*gemini*image*",caps:{vision:!0,imageOutput:!0,contextWindow:1048576}},{pattern:"*gemini-3*pro*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65535}},{pattern:"*gemini-3*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2.5*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-budget",thinkingRange:{min:0,max:24576},contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2*",caps:{vision:!0,audioInput:!0,videoInput:!0,search:!0,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini*",caps:{vision:!0,search:!0,contextWindow:1048576}},{pattern:"*gemma*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*nanobanana*",caps:{vision:!0,imageOutput:!0}},{pattern:"*gpt-5*image*",caps:{imageOutput:!0}},{pattern:"*gpt-5*codex*",caps:{reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-4o*",caps:{vision:!0,search:!0,contextWindow:128e3,maxOutput:16384}},{pattern:"*gpt-4.1*",caps:{vision:!0,contextWindow:1e6,maxOutput:32768}},{pattern:"*gpt-4-turbo*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*gpt-4*",caps:{contextWindow:128e3}},{pattern:"*gpt-3.5*",caps:{contextWindow:16385,maxOutput:4096}},{pattern:"*gpt-oss*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1-mini*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o4*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*grok*image*",caps:{imageOutput:!0}},{pattern:"*grok-code*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-4*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-3*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:131072}},{pattern:"*grok*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*qwen*vl*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*max*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*plus*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*235b*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*coder*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},{pattern:"*qwq*",caps:{reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:131072}},{pattern:"*qwen*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*kimi*k2.7*code*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*k2*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*",caps:{reasoning:!0,thinkingFormat:"kimi",contextWindow:262144}},{pattern:"*glm-5*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4.7*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*glm*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*deepseek-v4*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3}},{pattern:"*reasoner*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-r*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-chat*",caps:{contextWindow:128e3}},{pattern:"*deepseek*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:128e3}},{pattern:"*minimax*image*",caps:{imageOutput:!0}},{pattern:"*minimax-m3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"minimax",contextWindow:1048576,maxOutput:512e3}},{pattern:"*minimax-m2.7*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:204800,maxOutput:131072}},{pattern:"*minimax*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:131072}},{pattern:"*mimo*v2.5*",caps:{vision:!0,contextWindow:1048576,maxOutput:131072}},{pattern:"*mimo*omni*",caps:{vision:!0,audioInput:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*mimo*",caps:{vision:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*llama-4*",caps:{vision:!0,contextWindow:1e6}},{pattern:"*llama*",caps:{contextWindow:128e3}},{pattern:"*codestral*",caps:{contextWindow:256e3}},{pattern:"*mistral-large*",caps:{vision:!0,contextWindow:256e3}},{pattern:"*mistral*",caps:{contextWindow:128e3}},{pattern:"*command-a-vision*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*command*",caps:{contextWindow:128e3}},{pattern:"*sonar*",caps:{search:!0,contextWindow:128e3}},{pattern:"*pplx*",caps:{search:!0,contextWindow:128e3}},{pattern:"*perplexity*",caps:{search:!0,contextWindow:128e3}},{pattern:"*hunyuan*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"hy3*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"*step-*",caps:{reasoning:!0,thinkingFormat:"step",contextWindow:128e3}},{pattern:"*nemotron*",caps:{reasoning:!0,contextWindow:128e3}},{pattern:"*ling-*",caps:{reasoning:!0,contextWindow:128e3}}];function r(e,t){if(!t)return{...a};if(e&&s[e]?.[t])return{...a,...s[e][t]};let r=(t.includes("/")?t.split("/").pop():t)??t;if(i[r])return{...a,...i[r]};if(i[t])return{...a,...i[t]};for(let{pattern:e,caps:i}of o)if(n(e,r)||n(e,t))return{...a,...i};return{...a}}e.s(["getCapabilitiesForModel",0,r,"modalitiesForModel",0,function(e){let t=e.indexOf("/"),n=r(t>0?e.slice(0,t):null,t>0?e.slice(t+1):e),a=["text"];n.vision&&a.push("image"),n.pdf&&a.push("pdf"),n.audioInput&&a.push("audio"),n.videoInput&&a.push("video");let i=["text"];return n.imageOutput&&i.push("image"),n.audioOutput&&i.push("audio"),{input:a,output:i}}],45570);var l=e.i(51514);let c={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-info"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-warning"}};e.s(["CapacityBadges",0,function({model:e,provider:n=null,size:a=15,className:i=""}){let s=r(n,e),o=Object.keys(c).filter(e=>s[e]);return 0===o.length?null:(0,t.jsx)("span",{className:`inline-flex flex-none items-center gap-0.5 ${i}`,children:o.map(e=>(0,t.jsx)("span",{title:`${c[e].label} — ${c[e].desc}`,className:"leading-none",children:(0,t.jsx)(l.Icon,{name:c[e].icon,size:a,className:c[e].color})},e))})}],53854)},78347,e=>{"use strict";var t=e.i(43476),n=e.i(71645),a=e.i(51514),i=e.i(53854);e.s(["ModelPicker",0,function({title:e="Add models",note:s="Click to add, click again to remove.",searchPlaceholder:o="Search models…",groups:r,selected:l,onToggle:c,onClose:d,showThinkingHint:x=!0}){let[p,u]=(0,n.useState)(""),m=p.trim().toLowerCase(),h=r.map(e=>({...e,items:m?e.items.filter(e=>e.value.toLowerCase().includes(m)):e.items})).filter(e=>e.items.length>0),g=new Set(l);return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-black/60 p-6 sm:p-10",onClick:d,children:(0,t.jsxs)("div",{className:"flex max-h-[80vh] w-full max-w-lg flex-col rounded-brand-lg border border-border bg-surface shadow-elevated",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-border-subtle px-4 py-3",children:[(0,t.jsx)("h2",{className:"text-[14px] font-semibold text-text",children:e}),(0,t.jsx)("button",{onClick:d,className:"text-text-subtle hover:text-text","aria-label":"Close",children:(0,t.jsx)(a.Icon,{name:"close",size:18})})]}),(0,t.jsxs)("div",{className:"border-b border-border-subtle px-4 py-3",children:[(0,t.jsx)("p",{className:"mb-2 text-[12px] text-text-muted",children:s}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(a.Icon,{name:"search",size:15,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-text-subtle"}),(0,t.jsx)("input",{autoFocus:!0,value:p,onChange:e=>u(e.target.value),placeholder:o,className:"w-full rounded-brand border border-border bg-bg py-2 pl-8 pr-3 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none"})]})]}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:0===h.length?(0,t.jsxs)("p",{className:"py-6 text-center text-[12.5px] text-text-subtle",children:["No models match “",p,"”."]}):(0,t.jsx)("div",{className:"space-y-4",children:h.map(e=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-1.5 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-text-subtle",children:[e.label," ",(0,t.jsxs)("span",{className:"tnum text-text-subtle/70",children:["(",e.items.length,")"]})]}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.items.map(e=>{let n=g.has(e.value);return(0,t.jsxs)("button",{type:"button",onClick:()=>c(e.value),className:`inline-flex items-center gap-1 rounded-brand border px-2 py-1 text-[12px] transition-colors ${n?"border-accent bg-accent-soft text-accent":"border-border bg-bg text-text-muted hover:border-text-subtle hover:text-text"}`,children:[n&&(0,t.jsx)(a.Icon,{name:"check",size:12}),(0,t.jsx)("span",{className:"tnum",children:e.label}),(0,t.jsx)(i.CapacityBadges,{model:e.value,size:13}),e.tag&&(0,t.jsx)("span",{className:"rounded bg-surface-2 px-1 text-[10px] text-text-subtle",children:e.tag})]},e.value)})})]},e.label))})}),x&&(0,t.jsxs)("div",{className:"border-t border-border-subtle px-4 py-2 text-[11px] text-text-subtle",children:[(0,t.jsx)(a.Icon,{name:"neurology",size:12,className:"mr-1 inline align-text-bottom text-warning"}),"Reasoning models accept a thinking suffix — call"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1 text-text-muted",children:"model(high)"})," or"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1 text-text-muted",children:"model(none)"})," (high·low·medium·minimal·auto·none·or a token budget)."]}),(0,t.jsxs)("div",{className:"flex items-center justify-between border-t border-border-subtle px-4 py-3",children:[(0,t.jsxs)("span",{className:"tnum text-[12px] text-text-subtle",children:[l.length," selected"]}),(0,t.jsx)("button",{onClick:d,className:"rounded-brand bg-accent px-3.5 py-1.5 text-[13px] font-semibold text-accent-ink hover:bg-accent-hover",children:"Done"})]})]})})}])},24644,e=>{"use strict";var t=e.i(43476),n=e.i(71645),a=e.i(29481),i=e.i(81189),s=e.i(69163),o=e.i(10007),r=e.i(51514);function l({masked:e,reveal:a,className:i,align:s="inline"}){let[o,c]=(0,n.useState)(null),[d,x]=(0,n.useState)(!1),[p,u]=(0,n.useState)(!1),[m,h]=(0,n.useState)(!1);async function g(){if(d)return void x(!1);if(null===o){u(!0);let e=await a();if(u(!1),null===e)return;c(e)}x(!0)}let b=d&&null!==o?o:e;return(0,t.jsxs)("span",{className:`flex min-w-0 items-center gap-1.5${i?` ${i}`:""}`,children:[(0,t.jsx)("span",{className:`tnum truncate text-[12.5px] text-text${"right"===s?" flex-1":""}`,children:b}),d&&null!==o&&(0,t.jsx)("button",{type:"button",onClick:()=>{navigator.clipboard.writeText(o),h(!0),setTimeout(()=>h(!1),1200)},className:"flex-none text-text-subtle transition-colors hover:text-text","aria-label":"Copy key",children:(0,t.jsx)(r.Icon,{name:m?"check":"content_copy",size:14})}),(0,t.jsx)("button",{type:"button",onClick:g,disabled:p,className:"flex-none text-text-subtle transition-colors hover:text-text disabled:opacity-40","aria-label":d?"Hide key":"Show key",children:(0,t.jsx)(r.Icon,{name:p?"hourglass_empty":d?"visibility_off":"visibility",size:15})})]})}var c=e.i(38286),d=e.i(78347),x=e.i(13135);let p=["off","lite","full","ultra"],u=e=>`rounded-brand px-3 py-1.5 text-[13px] font-medium transition-colors ${e?"bg-accent/12 text-accent":"bg-surface-2 text-text-muted hover:text-text"}`,m={"24h":864e5,"7day":6048e5,"30day":2592e6};function h({ep:e,hr:l,refresh:c}){let d=e.headroom,[x,p]=(0,n.useState)(d.url),[u,m]=(0,n.useState)(""),[g,b]=(0,n.useState)(""),[k,f]=(0,n.useState)(null);async function j(e,t){m(e),b(""),f(null);let n=await t();m(""),n.ok||b(n.error??"action failed"),await c()}async function w(){m("check"),b(""),f(null);let e=await a.adminApi.headroomStatus();(m(""),await c(),e.ok&&e.data)?f(e.data.running?{ok:!0,text:`proxy is up at ${e.data.url}`}:{ok:!1,text:`no proxy responding at ${e.data.url}`}):f({ok:!1,text:e.error??"could not reach the gateway"})}return(0,n.useEffect)(()=>p(d.url),[d.url]),(0,t.jsx)(s.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(s.CardTitle,{title:"Headroom",sub:"external context-compression proxy"}),children:(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-[12px]",children:[(0,t.jsx)(i.Badge,{tone:l?.installed?"live":"neutral",children:l?.installed?"installed":"not installed"}),(0,t.jsx)(i.Badge,{tone:l?.running?"live":"warn",children:l?.running?"proxy running":"proxy down"}),(0,t.jsx)(i.Badge,{tone:l?.python?"info":"neutral",children:l?.python?`python ${l.python}`:"no python ≥3.10"}),l?.managedPid?(0,t.jsxs)("span",{className:"tnum text-text-subtle",children:["pid ",l.managedPid]}):null]}),(0,t.jsx)(v,{label:"Enable headroom",desc:"Compress the full context through the proxy before each request (fail-open if it's down).",on:d.enabled,busy:"enable"===u,onChange:e=>j("enable",()=>a.adminApi.setHeadroom({enabled:e}))}),(0,t.jsx)(v,{label:"Compress user messages",desc:"Also squeeze user turns, not just tool/assistant context.",on:d.compress_user_messages,busy:"cum"===u,onChange:e=>j("cum",()=>a.adminApi.setHeadroom({compress_user_messages:e}))}),(0,t.jsxs)("div",{className:"flex items-end gap-2",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Proxy URL"}),(0,t.jsx)(o.Input,{value:x,onChange:e=>p(e.target.value),placeholder:"http://localhost:8787",className:"font-mono text-[12.5px]"})]}),(0,t.jsx)(o.Button,{variant:"ghost",disabled:x.trim()===d.url||"url"===u,onClick:()=>j("url",()=>a.adminApi.setHeadroom({url:x.trim()})),children:"Save URL"})]}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsxs)(o.Button,{disabled:!l?.canStart||l?.running||"start"===u,onClick:()=>j("start",()=>a.adminApi.headroomStart()),children:[(0,t.jsx)(r.Icon,{name:"play_arrow",size:16})," ","start"===u?"Starting…":"Start proxy"]}),(0,t.jsxs)(o.Button,{variant:"danger",disabled:!l?.managedPid||"stop"===u,onClick:()=>j("stop",()=>a.adminApi.headroomStop()),children:[(0,t.jsx)(r.Icon,{name:"stop",size:16})," Stop"]}),(0,t.jsxs)(o.Button,{variant:"ghost",disabled:"check"===u,onClick:w,children:[(0,t.jsx)(r.Icon,{name:"sync",size:16})," ","check"===u?"Checking…":"Check"]}),l&&!l.installed&&(0,t.jsxs)("span",{className:"text-[11px] text-text-subtle",children:["Headroom isn’t installed. Get it from"," ",(0,t.jsx)("a",{href:"https://github.com/chopratejas/headroom",target:"_blank",rel:"noreferrer",className:"text-accent hover:underline",children:"chopratejas/headroom"})," ","(needs Python ≥ 3.10):"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1",children:"pipx install git+https://github.com/chopratejas/headroom"})," ","— then re-open this page."]}),l?.installed&&!l.localUrl&&(0,t.jsx)("span",{className:"text-[11px] text-text-subtle",children:"URL isn’t loopback — start that proxy yourself."})]}),g&&(0,t.jsx)("p",{className:"text-[12px] text-danger",children:g}),k&&(0,t.jsxs)("p",{className:`flex items-center gap-1 text-[12px] ${k.ok?"text-success":"text-danger"}`,children:[(0,t.jsx)(r.Icon,{name:k.ok?"check_circle":"error",size:14})," ",k.text]})]})})}function g({name:e,value:a,onClose:i}){let[s,l]=(0,n.useState)(!1);return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6",onClick:i,children:(0,t.jsxs)("div",{className:"w-full max-w-md rounded-brand-lg border border-border bg-surface p-5 shadow-elevated",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,t.jsx)("span",{className:"flex h-7 w-7 items-center justify-center rounded-full bg-accent-soft text-accent",children:(0,t.jsx)(r.Icon,{name:"key",size:16})}),(0,t.jsx)("h2",{className:"text-[15px] font-semibold text-text",children:"Key created"})]}),(0,t.jsxs)("p",{className:"mb-3 text-[12px] text-text-muted",children:["Copy ",(0,t.jsx)("span",{className:"text-text",children:e})," now. You can reveal it again later from this page."]}),(0,t.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(a),l(!0),setTimeout(()=>l(!1),1500)},className:"flex w-full items-center justify-between gap-2 rounded-brand border border-border-subtle bg-bg px-3 py-2.5 text-left hover:border-text-subtle",children:[(0,t.jsx)("span",{className:"tnum truncate text-[12.5px] text-text",children:a}),(0,t.jsx)(r.Icon,{name:s?"check":"content_copy",size:15})]}),(0,t.jsx)("div",{className:"mt-4 flex justify-end",children:(0,t.jsx)(o.Button,{onClick:i,children:"Done"})})]})})}function b({label:e,value:a}){let[i,s]=(0,n.useState)(!1);return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,t.jsx)("span",{className:"text-text-subtle",children:e}),(0,t.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(a),s(!0),setTimeout(()=>s(!1),1200)},className:"flex items-center gap-1.5 rounded-brand border border-border-subtle px-2.5 py-1 tnum text-[12.5px] text-text hover:border-text-subtle",children:[a,(0,t.jsx)(r.Icon,{name:i?"check":"content_copy",size:13})]})]})}function v({label:e,desc:n,on:a,busy:i,onChange:s}){return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[13px] font-semibold text-text",children:e}),(0,t.jsx)("div",{className:"text-[12px] text-text-muted",children:n})]}),(0,t.jsx)("button",{disabled:i,onClick:()=>s(!a),className:`relative h-6 w-11 flex-none rounded-full transition-colors ${a?"bg-accent":"bg-surface-3"}`,"aria-pressed":a,children:(0,t.jsx)("span",{className:`absolute left-0.5 top-0.5 h-5 w-5 rounded-full bg-bg transition-transform ${a?"translate-x-5":"translate-x-0"}`})})]})}function k({label:e,desc:n,value:a,busy:s,onChange:o}){return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[13px] font-semibold text-text",children:e}),"off"!==a&&(0,t.jsx)(i.Badge,{tone:"info",children:a})]}),(0,t.jsx)("div",{className:"text-[12px] text-text-muted",children:n})]}),(0,t.jsx)("div",{className:"flex flex-none items-center gap-1 rounded-full border border-border bg-surface p-1",children:p.map(e=>(0,t.jsx)("button",{disabled:s,onClick:()=>o(e),className:`rounded-full px-2.5 py-1 text-[11.5px] font-medium transition-colors ${a===e?"bg-surface-2 text-text":"text-text-muted hover:text-text"}`,children:e},e))})]})}e.s(["EndpointView",0,function(){let[e,i]=(0,n.useState)(null),[p,f]=(0,n.useState)(""),[j,w]=(0,n.useState)(""),[y,N]=(0,n.useState)(""),[C,W]=(0,n.useState)(null),[F,S]=(0,n.useState)(null),[O,$]=(0,n.useState)(null),[I,A]=(0,n.useState)(null),[D,z]=(0,n.useState)(""),[R,M]=(0,n.useState)([]),[B,q]=(0,n.useState)(null),[T,P]=(0,n.useState)([]),[L,U]=(0,n.useState)(""),[_,E]=(0,n.useState)("never"),[K,G]=(0,n.useState)(""),[H,V]=(0,n.useState)(""),[Y,J]=(0,n.useState)("30day"),[Q,X]=(0,n.useState)({}),[Z,ee]=(0,n.useState)(!1),et=(0,n.useCallback)(async()=>{let e=await a.adminApi.endpoint();e.ok?(f(""),i(e.data)):f(e.error??"could not reach the gateway")},[]),en=(0,n.useCallback)(async()=>{let e=await a.adminApi.headroomStatus();e.ok&&$(e.data)},[]);if((0,n.useEffect)(()=>{et(),en(),(async()=>{try{let e=await fetch("/api/gw/admin/config");if(!e.ok)return;let t=await e.json(),n=[];for(let e of(t.models.length&&n.push({label:"Combos",items:t.models.map(e=>({value:e.alias,label:e.alias}))}),t.providers))e.models.length&&n.push({label:e.id,items:e.models.map(t=>({value:`${e.id}/${t.id}`,label:`${e.id}/${t.id}`}))});M(n)}catch{}})(),a.adminApi.budgets().then(e=>{if(!e.ok||!e.data)return;let t={};for(let n of e.data.budgets)"key"===n.scope.type&&(t[n.scope.id]={limit:n.limit,window:n.window});X(t)})},[et,en]),p)return(0,t.jsx)(c.Empty,{children:p});if(!e)return(0,t.jsx)(c.Empty,{children:"Loading…"});let ea=`http://127.0.0.1:${e.port}`;async function ei(e,t){w(e);let n=await t();w(""),n.ok?(f(""),await et()):f(n.error??"action failed")}async function es(e,t){let n=(e||"Gateway key").trim();w("genkey");let i=await a.adminApi.addServerKey(t,n);(w(""),i.ok)?(f(""),N(""),W({key:t,name:n}),await et()):f(i.error??"could not add key")}return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"Endpoint & Key"}),(0,t.jsx)("p",{className:"mt-1 text-[13px] text-text-muted",children:"Gateway address, client keys, and the token-saver toggles."})]}),(0,t.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,t.jsxs)(s.RichCard,{header:(0,t.jsx)(s.CardTitle,{title:"Gateway URL",sub:"one endpoint for every client"}),children:[(0,t.jsx)("div",{className:"text-[13px]",children:(0,t.jsx)(b,{label:"Gateway URL",value:ea})}),(0,t.jsxs)("p",{className:"mt-3 text-[12px] text-text-subtle",children:["One gateway, both formats. Anthropic clients (Claude Code) use it as-is; OpenAI clients (opencode, Cursor, Codex) append ",(0,t.jsx)("span",{className:"tnum",children:"/v1"}),". The ",(0,t.jsx)("span",{className:"text-text-muted",children:"CLI Tools"})," ","page has copy-ready env per tool."]})]}),(0,t.jsxs)(s.RichCard,{header:(0,t.jsx)(s.CardTitle,{title:"Gateway keys",sub:`${e.keys.length} configured`}),children:[0===e.keys.length?(0,t.jsx)(c.Empty,{children:"No keys — auth is DISABLED (localhost only). Generate one below."}):(0,t.jsx)("div",{className:"space-y-1.5",children:e.keys.map((e,n)=>I===n?(0,t.jsxs)("div",{className:"space-y-2 rounded-brand border border-accent bg-accent-soft/40 px-3 py-2.5",children:[(0,t.jsx)(o.Input,{value:D,onChange:e=>z(e.target.value),placeholder:"key name (e.g. Claude Code)"}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)(o.Button,{variant:"ghost",onClick:()=>A(null),children:"Cancel"}),(0,t.jsx)(o.Button,{disabled:j===`editkey${n}`,onClick:()=>ei(`editkey${n}`,async()=>{let e=await a.adminApi.editServerKey(n,D.trim());return e.ok&&A(null),e}),children:"Save"})]})]},n):(0,t.jsxs)("div",{className:"space-y-0 rounded-brand border border-border-subtle",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2",children:[(0,t.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[e.name&&(0,t.jsx)("span",{className:"text-[12px] font-semibold text-text-muted",children:e.name}),(0,t.jsx)(l,{masked:e.key,reveal:async()=>{let e=await a.adminApi.revealServerKey(n);return e.ok?e.data?.key??null:null}}),(0,t.jsxs)("div",{className:"mt-0.5 flex flex-wrap items-center gap-1.5 text-[11px] text-text-subtle",children:[(0,t.jsx)("span",{children:e.models?.length?`${e.models.length} model${e.models.length>1?"s":""}`:"all models"}),(0,t.jsx)("span",{children:"·"}),(0,t.jsx)("span",{children:e.rpm?`${e.rpm}/min`:"no rate limit"}),(0,t.jsx)("span",{children:"·"}),(0,t.jsx)("span",{children:e.expires?Date.now()>e.expires?(0,t.jsx)("span",{className:"text-danger",children:"expired"}):`expires ${c.fmt.date(e.expires)}`:"no expiry"})]})]}),(0,t.jsxs)("div",{className:"flex flex-none items-center gap-1",children:[(0,t.jsx)("button",{onClick:()=>{q(n),P(e.models??[]),U(e.rpm?String(e.rpm):""),E(e.expires?"keep":"never"),G("");let t=Q[e.fingerprint];V(t?String(t.limit):""),J(t?.window??"30day")},className:"text-text-subtle hover:text-text","aria-label":"Edit key scope",title:"Model allowlist + rate limit + budget + expiry",children:(0,t.jsx)(r.Icon,{name:"tune",size:15})}),(0,t.jsx)("button",{onClick:()=>{A(n),z(e.name??"")},className:"text-text-subtle hover:text-text","aria-label":"Rename key",title:"Rename key",children:(0,t.jsx)(r.Icon,{name:"edit",size:15})}),(0,t.jsx)("button",{onClick:()=>S({i:n,label:e.name||e.key}),className:"text-text-subtle hover:text-danger","aria-label":"Remove key",children:(0,t.jsx)(r.Icon,{name:"delete",size:16})})]})]}),B===n&&(0,t.jsxs)("div",{className:"space-y-2 border-t border-border-subtle bg-accent-soft/40 px-3 py-2.5",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Allowed models"}),(0,t.jsx)("div",{className:"flex flex-wrap items-center gap-1.5",children:0===T.length?(0,t.jsx)("span",{className:"text-[12px] text-text-subtle",children:"All models (unrestricted)"}):T.map(e=>(0,t.jsxs)("span",{className:"inline-flex items-center gap-1 rounded border border-accent bg-accent-soft px-2 py-0.5 text-[12px] text-accent",children:[(0,t.jsx)("span",{className:"tnum",children:e}),(0,t.jsx)("button",{onClick:()=>P(t=>t.filter(t=>t!==e)),className:"hover:text-danger","aria-label":`Remove ${e}`,children:(0,t.jsx)(r.Icon,{name:"close",size:12})})]},e))}),(0,t.jsxs)(o.Button,{type:"button",variant:"ghost",className:"mt-1.5",onClick:()=>ee(!0),children:[(0,t.jsx)(r.Icon,{name:"add",size:15})," Pick models"]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Rate limit"}),(0,t.jsx)(o.Input,{inputMode:"numeric",value:L,onChange:e=>U(e.target.value.replace(/[^\d]/g,"")),placeholder:"req/min (blank = unlimited)"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Access expiry"}),e.expires&&(0,t.jsxs)("div",{className:"mb-1.5 text-[11px] text-text-subtle",children:["currently ",Date.now()>e.expires?(0,t.jsx)("span",{className:"text-danger",children:"expired"}):`expires ${c.fmt.date(e.expires)}`]}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1",children:(e.expires?["keep","never","24h","7day","30day","custom"]:["never","24h","7day","30day","custom"]).map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>E(e),className:u(_===e),children:"never"===e?"no expiry":e},e))}),"custom"===_&&(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-1.5",children:[(0,t.jsx)(o.Input,{inputMode:"numeric",value:K,onChange:e=>G(e.target.value.replace(/[^\d]/g,"")),placeholder:"days",className:"w-24"}),(0,t.jsx)("span",{className:"text-[11px] text-text-subtle",children:"days from now"})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Spend cap (USD)"}),(0,t.jsx)(o.Input,{inputMode:"decimal",value:H,onChange:e=>V(e.target.value.replace(/[^\d.]/g,"")),placeholder:"USD (blank = no cap)"}),H&&(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-1.5",children:[(0,t.jsx)("span",{className:"text-[11px] text-text-subtle",children:"resets every"}),["5h","24h","7day","30day"].map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>J(e),className:u(Y===e),children:e},e))]})]}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)(o.Button,{variant:"ghost",onClick:()=>q(null),children:"Cancel"}),(0,t.jsx)(o.Button,{disabled:j===`scope${n}`,onClick:()=>ei(`scope${n}`,async()=>{let t="keep"===_?void 0:"never"===_?null:"custom"===_?K?Date.now()+864e5*Number(K):null:Date.now()+m[_],i=await a.adminApi.setServerKeyScope(n,{models:T,rpm:L?Number(L):null,expires:t});if(!i.ok)return i;let s=H?Number(H):0;return s>0?await a.adminApi.setBudget({scope:{type:"key",id:e.fingerprint},unit:"usd",limit:s,window:Y}):Q[e.fingerprint]&&await a.adminApi.clearBudget(`key:${e.fingerprint}`),q(null),i}),children:"Save"})]})]})]},n))}),(0,t.jsxs)("div",{className:"mt-3 space-y-2",children:[(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(o.Input,{value:y,onChange:e=>N(e.target.value),placeholder:"key name (e.g. Claude Code)",className:"flex-1"}),(0,t.jsxs)(o.Button,{disabled:"genkey"===j,onClick:()=>{let e,t;return es(y,(e=new Uint8Array(24),crypto.getRandomValues(e),t=Array.from(e,e=>e.toString(16).padStart(2,"0")).join(""),`aig-${t}`))},children:[(0,t.jsx)(r.Icon,{name:"add",size:16})," ","genkey"===j?"Adding…":"Add key"]})]}),(0,t.jsx)("p",{className:"text-[11px] text-text-subtle",children:"Name it, then click Add key — a key is generated and shown once. Configure its limits after."})]})]}),(0,t.jsx)(s.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(s.CardTitle,{title:"Token savers",sub:"applied to every request before routing"}),children:(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)(v,{label:"RTK",desc:"Compress bulky tool_result blocks (diffs, grep, listings) in the request.",on:e.rtk,busy:"rtk"===j,onChange:e=>ei("rtk",()=>a.adminApi.setRtk(e))}),(0,t.jsx)(k,{label:"Caveman",desc:"Terser model output — drops filler, keeps substance.",value:e.caveman,busy:"caveman"===j,onChange:e=>ei("caveman",()=>a.adminApi.setCaveman(e))}),(0,t.jsx)(k,{label:"Ponytail",desc:"Minimal, YAGNI code style — deletion over addition.",value:e.ponytail,busy:"ponytail"===j,onChange:e=>ei("ponytail",()=>a.adminApi.setPonytail(e))})]})}),(0,t.jsx)(h,{ep:e,hr:O,refresh:async()=>{await et(),await en()}})]}),C&&(0,t.jsx)(g,{name:C.name,value:C.key,onClose:()=>W(null)}),F&&(0,t.jsx)(x.ConfirmModal,{title:"Remove gateway key",message:`Delete "${F.label}"? Any client using this key stops working immediately.`,confirmLabel:"Remove",busy:j===`rmkey${F.i}`,onCancel:()=>S(null),onConfirm:()=>{let e=F.i;ei(`rmkey${e}`,()=>a.adminApi.removeServerKey(e)).then(()=>S(null))}}),Z&&(0,t.jsx)(d.ModelPicker,{title:"Allowed models",note:"Pick the models this key may call. None = all.",groups:R,selected:T,onToggle:e=>P(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),onClose:()=>ee(!1),showThinkingHint:!1})]})}],24644)}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,81189,e=>{"use strict";var t=e.i(43476);let n={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",warn:"bg-warning/12 text-warning",info:"bg-info/12 text-info",neutral:"bg-surface-2 text-text-muted"};function a({tone:e="neutral",children:i,className:s}){return(0,t.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${n[e]}${s?` ${s}`:""}`,children:i})}e.s(["Badge",0,a,"FormatBadge",0,function({format:e}){return(0,t.jsx)(a,{tone:"info",children:e})}])},38286,e=>{"use strict";var t=e.i(43476);e.s(["Empty",0,function({children:e}){return(0,t.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:e})},"Stat",0,function({label:e,value:n,sub:a}){return(0,t.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,t.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:e}),(0,t.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:n}),a&&(0,t.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:a})]})},"fmt",0,{int:e=>e.toLocaleString("en-US"),compact:e=>Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)),cost:e=>0===e?"$0":e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`,time:e=>new Date(e).toLocaleString("en-US",{hour12:!1}),date(e){let t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()}`},ago(e){let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`},duration(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;if(t<3600)return`${Math.floor(t/60)}m ${t%60}s`;let n=Math.floor(t/3600),a=Math.floor(t%3600/60);if(n<24)return`${n}h ${a}m`;let i=Math.floor(n/24);return`${i}d ${n%24}h`}}])},69163,e=>{"use strict";var t=e.i(43476);e.s(["CardTitle",0,function({title:e,sub:n,icon:a}){return(0,t.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[a,(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("div",{className:"truncate text-[14px] font-semibold tracking-tight text-text",children:e}),n&&(0,t.jsx)("div",{className:"truncate text-[12px] text-text-muted",children:n})]})]})},"RichCard",0,function({header:e,footer:n,children:a,className:i}){return(0,t.jsxs)("section",{className:`overflow-hidden rounded-brand-lg border border-border bg-surface shadow-soft${i?` ${i}`:""}`,children:[e&&(0,t.jsx)("header",{className:"flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-3",children:e}),(0,t.jsx)("div",{className:"p-4",children:a}),n&&(0,t.jsx)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:n})]})}])},53854,45570,e=>{"use strict";var t=e.i(43476);function n(e,t){return RegExp("^"+e.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i").test(t)}let a={vision:!1,pdf:!1,audioInput:!1,videoInput:!1,imageOutput:!1,audioOutput:!1,search:!1,tools:!0,reasoning:!1,thinkingFormat:null,thinkingCanDisable:!0,thinkingRange:null,contextWindow:2e5,maxOutput:64e3},i={"claude-opus-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.7":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:64e3},"claude-sonnet-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:64e3},"gpt-image-1":{imageOutput:!0,tools:!1},"glm-4.6v":{vision:!0,reasoning:!0,thinkingFormat:"zai",contextWindow:128e3},"vision-model":{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6},"coder-model":{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},s={"codebuddy-cn":{"glm-5.2":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:48e3},"glm-5.1":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5.0":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"glm-5.0-turbo":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5v-turbo":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:38e3},"glm-4.7":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"minimax-m3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:512e3,maxOutput:48e3},"minimax-m2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"kimi-k2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.6":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.5":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:164e3,maxOutput:32e3},"hy3-preview":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:192e3,maxOutput:64e3},"deepseek-v4-pro":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:5e4},"deepseek-v4-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:5e4},"deepseek-v3-2-volc":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:96e3,maxOutput:32e3}}},o=[{pattern:"*claude*opus-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.8*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*haiku*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*opus*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*sonnet*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*fable*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude*mythos*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude-3*",caps:{vision:!0}},{pattern:"*claude*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*gemini*image*",caps:{vision:!0,imageOutput:!0,contextWindow:1048576}},{pattern:"*gemini-3*pro*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65535}},{pattern:"*gemini-3*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2.5*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-budget",thinkingRange:{min:0,max:24576},contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2*",caps:{vision:!0,audioInput:!0,videoInput:!0,search:!0,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini*",caps:{vision:!0,search:!0,contextWindow:1048576}},{pattern:"*gemma*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*nanobanana*",caps:{vision:!0,imageOutput:!0}},{pattern:"*gpt-5*image*",caps:{imageOutput:!0}},{pattern:"*gpt-5*codex*",caps:{reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-4o*",caps:{vision:!0,search:!0,contextWindow:128e3,maxOutput:16384}},{pattern:"*gpt-4.1*",caps:{vision:!0,contextWindow:1e6,maxOutput:32768}},{pattern:"*gpt-4-turbo*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*gpt-4*",caps:{contextWindow:128e3}},{pattern:"*gpt-3.5*",caps:{contextWindow:16385,maxOutput:4096}},{pattern:"*gpt-oss*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1-mini*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o4*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*grok*image*",caps:{imageOutput:!0}},{pattern:"*grok-code*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-4*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-3*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:131072}},{pattern:"*grok*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*qwen*vl*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*max*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*plus*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*235b*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*coder*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},{pattern:"*qwq*",caps:{reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:131072}},{pattern:"*qwen*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*kimi*k2.7*code*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*k2*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*",caps:{reasoning:!0,thinkingFormat:"kimi",contextWindow:262144}},{pattern:"*glm-5*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4.7*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*glm*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*deepseek-v4*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3}},{pattern:"*reasoner*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-r*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-chat*",caps:{contextWindow:128e3}},{pattern:"*deepseek*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:128e3}},{pattern:"*minimax*image*",caps:{imageOutput:!0}},{pattern:"*minimax-m3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"minimax",contextWindow:1048576,maxOutput:512e3}},{pattern:"*minimax-m2.7*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:204800,maxOutput:131072}},{pattern:"*minimax*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:131072}},{pattern:"*mimo*v2.5*",caps:{vision:!0,contextWindow:1048576,maxOutput:131072}},{pattern:"*mimo*omni*",caps:{vision:!0,audioInput:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*mimo*",caps:{vision:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*llama-4*",caps:{vision:!0,contextWindow:1e6}},{pattern:"*llama*",caps:{contextWindow:128e3}},{pattern:"*codestral*",caps:{contextWindow:256e3}},{pattern:"*mistral-large*",caps:{vision:!0,contextWindow:256e3}},{pattern:"*mistral*",caps:{contextWindow:128e3}},{pattern:"*command-a-vision*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*command*",caps:{contextWindow:128e3}},{pattern:"*sonar*",caps:{search:!0,contextWindow:128e3}},{pattern:"*pplx*",caps:{search:!0,contextWindow:128e3}},{pattern:"*perplexity*",caps:{search:!0,contextWindow:128e3}},{pattern:"*hunyuan*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"hy3*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"*step-*",caps:{reasoning:!0,thinkingFormat:"step",contextWindow:128e3}},{pattern:"*nemotron*",caps:{reasoning:!0,contextWindow:128e3}},{pattern:"*ling-*",caps:{reasoning:!0,contextWindow:128e3}}];function r(e,t){if(!t)return{...a};if(e&&s[e]?.[t])return{...a,...s[e][t]};let r=(t.includes("/")?t.split("/").pop():t)??t;if(i[r])return{...a,...i[r]};if(i[t])return{...a,...i[t]};for(let{pattern:e,caps:i}of o)if(n(e,r)||n(e,t))return{...a,...i};return{...a}}e.s(["getCapabilitiesForModel",0,r,"modalitiesForModel",0,function(e){let t=e.indexOf("/"),n=r(t>0?e.slice(0,t):null,t>0?e.slice(t+1):e),a=["text"];n.vision&&a.push("image"),n.pdf&&a.push("pdf"),n.audioInput&&a.push("audio"),n.videoInput&&a.push("video");let i=["text"];return n.imageOutput&&i.push("image"),n.audioOutput&&i.push("audio"),{input:a,output:i}}],45570);var l=e.i(51514);let c={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-info"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-warning"}};e.s(["CapacityBadges",0,function({model:e,provider:n=null,size:a=15,className:i=""}){let s=r(n,e),o=Object.keys(c).filter(e=>s[e]);return 0===o.length?null:(0,t.jsx)("span",{className:`inline-flex flex-none items-center gap-0.5 ${i}`,children:o.map(e=>(0,t.jsx)("span",{title:`${c[e].label} — ${c[e].desc}`,className:"leading-none",children:(0,t.jsx)(l.Icon,{name:c[e].icon,size:a,className:c[e].color})},e))})}],53854)},78347,e=>{"use strict";var t=e.i(43476),n=e.i(71645),a=e.i(51514),i=e.i(53854);e.s(["ModelPicker",0,function({title:e="Add models",note:s="Click to add, click again to remove.",searchPlaceholder:o="Search models…",groups:r,selected:l,onToggle:c,onClose:d,showThinkingHint:x=!0}){let[p,u]=(0,n.useState)(""),m=p.trim().toLowerCase(),h=r.map(e=>({...e,items:m?e.items.filter(e=>e.value.toLowerCase().includes(m)):e.items})).filter(e=>e.items.length>0),g=new Set(l);return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-black/60 p-6 sm:p-10",onClick:d,children:(0,t.jsxs)("div",{className:"flex max-h-[80vh] w-full max-w-lg flex-col rounded-brand-lg border border-border bg-surface shadow-elevated",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-border-subtle px-4 py-3",children:[(0,t.jsx)("h2",{className:"text-[14px] font-semibold text-text",children:e}),(0,t.jsx)("button",{onClick:d,className:"text-text-subtle hover:text-text","aria-label":"Close",children:(0,t.jsx)(a.Icon,{name:"close",size:18})})]}),(0,t.jsxs)("div",{className:"border-b border-border-subtle px-4 py-3",children:[(0,t.jsx)("p",{className:"mb-2 text-[12px] text-text-muted",children:s}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(a.Icon,{name:"search",size:15,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-text-subtle"}),(0,t.jsx)("input",{autoFocus:!0,value:p,onChange:e=>u(e.target.value),placeholder:o,className:"w-full rounded-brand border border-border bg-bg py-2 pl-8 pr-3 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none"})]})]}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:0===h.length?(0,t.jsxs)("p",{className:"py-6 text-center text-[12.5px] text-text-subtle",children:["No models match “",p,"”."]}):(0,t.jsx)("div",{className:"space-y-4",children:h.map(e=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-1.5 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-text-subtle",children:[e.label," ",(0,t.jsxs)("span",{className:"tnum text-text-subtle/70",children:["(",e.items.length,")"]})]}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.items.map(e=>{let n=g.has(e.value);return(0,t.jsxs)("button",{type:"button",onClick:()=>c(e.value),className:`inline-flex items-center gap-1 rounded-brand border px-2 py-1 text-[12px] transition-colors ${n?"border-accent bg-accent-soft text-accent":"border-border bg-bg text-text-muted hover:border-text-subtle hover:text-text"}`,children:[n&&(0,t.jsx)(a.Icon,{name:"check",size:12}),(0,t.jsx)("span",{className:"tnum",children:e.label}),(0,t.jsx)(i.CapacityBadges,{model:e.value,size:13}),e.tag&&(0,t.jsx)("span",{className:"rounded bg-surface-2 px-1 text-[10px] text-text-subtle",children:e.tag})]},e.value)})})]},e.label))})}),x&&(0,t.jsxs)("div",{className:"border-t border-border-subtle px-4 py-2 text-[11px] text-text-subtle",children:[(0,t.jsx)(a.Icon,{name:"neurology",size:12,className:"mr-1 inline align-text-bottom text-warning"}),"Reasoning models accept a thinking suffix — call"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1 text-text-muted",children:"model(high)"})," or"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1 text-text-muted",children:"model(none)"})," (high·low·medium·minimal·auto·none·or a token budget)."]}),(0,t.jsxs)("div",{className:"flex items-center justify-between border-t border-border-subtle px-4 py-3",children:[(0,t.jsxs)("span",{className:"tnum text-[12px] text-text-subtle",children:[l.length," selected"]}),(0,t.jsx)("button",{onClick:d,className:"rounded-brand bg-accent px-3.5 py-1.5 text-[13px] font-semibold text-accent-ink hover:bg-accent-hover",children:"Done"})]})]})})}])},24644,e=>{"use strict";var t=e.i(43476),n=e.i(71645),a=e.i(29481),i=e.i(81189),s=e.i(69163),o=e.i(10007),r=e.i(51514);function l({masked:e,reveal:a,className:i,align:s="inline"}){let[o,c]=(0,n.useState)(null),[d,x]=(0,n.useState)(!1),[p,u]=(0,n.useState)(!1),[m,h]=(0,n.useState)(!1);async function g(){if(d)return void x(!1);if(null===o){u(!0);let e=await a();if(u(!1),null===e)return;c(e)}x(!0)}let b=d&&null!==o?o:e;return(0,t.jsxs)("span",{className:`flex min-w-0 items-center gap-1.5${i?` ${i}`:""}`,children:[(0,t.jsx)("span",{className:`tnum truncate text-[12.5px] text-text${"right"===s?" flex-1":""}`,children:b}),d&&null!==o&&(0,t.jsx)("button",{type:"button",onClick:()=>{navigator.clipboard.writeText(o),h(!0),setTimeout(()=>h(!1),1200)},className:"flex-none text-text-subtle transition-colors hover:text-text","aria-label":"Copy key",children:(0,t.jsx)(r.Icon,{name:m?"check":"content_copy",size:14})}),(0,t.jsx)("button",{type:"button",onClick:g,disabled:p,className:"flex-none text-text-subtle transition-colors hover:text-text disabled:opacity-40","aria-label":d?"Hide key":"Show key",children:(0,t.jsx)(r.Icon,{name:p?"hourglass_empty":d?"visibility_off":"visibility",size:15})})]})}var c=e.i(38286),d=e.i(78347),x=e.i(13135);let p=["off","lite","full","ultra"],u=e=>`rounded-brand px-3 py-1.5 text-[13px] font-medium transition-colors ${e?"bg-accent/12 text-accent":"bg-surface-2 text-text-muted hover:text-text"}`,m={"24h":864e5,"7day":6048e5,"30day":2592e6};function h({ep:e,hr:l,refresh:c}){let d=e.headroom,[x,p]=(0,n.useState)(d.url),[u,m]=(0,n.useState)(""),[g,b]=(0,n.useState)(""),[k,f]=(0,n.useState)(null);async function j(e,t){m(e),b(""),f(null);let n=await t();m(""),n.ok||b(n.error??"action failed"),await c()}async function w(){m("check"),b(""),f(null);let e=await a.adminApi.headroomStatus();(m(""),await c(),e.ok&&e.data)?f(e.data.running?{ok:!0,text:`proxy is up at ${e.data.url}`}:{ok:!1,text:`no proxy responding at ${e.data.url}`}):f({ok:!1,text:e.error??"could not reach the gateway"})}return(0,n.useEffect)(()=>p(d.url),[d.url]),(0,t.jsx)(s.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(s.CardTitle,{title:"Headroom",sub:"external context-compression proxy"}),children:(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-[12px]",children:[(0,t.jsx)(i.Badge,{tone:l?.installed?"live":"neutral",children:l?.installed?"installed":"not installed"}),(0,t.jsx)(i.Badge,{tone:l?.running?"live":"warn",children:l?.running?"proxy running":"proxy down"}),(0,t.jsx)(i.Badge,{tone:l?.python?"info":"neutral",children:l?.python?`python ${l.python}`:"no python ≥3.10"}),l?.managedPid?(0,t.jsxs)("span",{className:"tnum text-text-subtle",children:["pid ",l.managedPid]}):null]}),(0,t.jsx)(v,{label:"Enable headroom",desc:"Compress the full context through the proxy before each request.",on:d.enabled,busy:"enable"===u,disabled:!l?.running&&!d.enabled,onChange:e=>j("enable",()=>a.adminApi.setHeadroom({enabled:e}))}),(0,t.jsx)(v,{label:"Compress user messages",desc:"Also squeeze user turns, not just tool/assistant context.",on:d.compress_user_messages,busy:"cum"===u,onChange:e=>j("cum",()=>a.adminApi.setHeadroom({compress_user_messages:e}))}),(0,t.jsxs)("div",{className:"flex items-end gap-2",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Proxy URL"}),(0,t.jsx)(o.Input,{value:x,onChange:e=>p(e.target.value),placeholder:"http://localhost:8787",className:"font-mono text-[12.5px]"})]}),(0,t.jsx)(o.Button,{variant:"ghost",disabled:x.trim()===d.url||"url"===u,onClick:()=>j("url",()=>a.adminApi.setHeadroom({url:x.trim()})),children:"Save URL"})]}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsxs)(o.Button,{disabled:!l?.canStart||l?.running||!!u,onClick:async()=>{await j("start",()=>a.adminApi.headroomStart()),await w()},children:[(0,t.jsx)(r.Icon,{name:"start"===u?"sync":"play_arrow",size:16,className:"start"===u?"animate-spin":""}),"start"===u?"Starting…":"Start proxy"]}),(0,t.jsxs)(o.Button,{variant:"danger",disabled:!l?.managedPid||"stop"===u,onClick:()=>j("stop",()=>a.adminApi.headroomStop()),children:[(0,t.jsx)(r.Icon,{name:"stop",size:16})," Stop"]}),(0,t.jsxs)(o.Button,{variant:"ghost",disabled:"check"===u,onClick:w,children:[(0,t.jsx)(r.Icon,{name:"sync",size:16})," ","check"===u?"Checking…":"Check"]}),l&&!l.installed&&(0,t.jsxs)("span",{className:"text-[11px] text-text-subtle",children:["Headroom isn’t installed. Get it from"," ",(0,t.jsx)("a",{href:"https://github.com/chopratejas/headroom",target:"_blank",rel:"noreferrer",className:"text-accent hover:underline",children:"chopratejas/headroom"})," ","(needs Python ≥ 3.10):"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1",children:"pipx install git+https://github.com/chopratejas/headroom"})," ","— then re-open this page."]}),l?.installed&&!l.localUrl&&(0,t.jsx)("span",{className:"text-[11px] text-text-subtle",children:"URL isn’t loopback — start that proxy yourself."})]}),g&&(0,t.jsx)("p",{className:"text-[12px] text-danger",children:g}),k&&(0,t.jsxs)("p",{className:`flex items-center gap-1 text-[12px] ${k.ok?"text-success":"text-danger"}`,children:[(0,t.jsx)(r.Icon,{name:k.ok?"check_circle":"error",size:14})," ",k.text]})]})})}function g({name:e,value:a,onClose:i}){let[s,l]=(0,n.useState)(!1);return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6",onClick:i,children:(0,t.jsxs)("div",{className:"w-full max-w-md rounded-brand-lg border border-border bg-surface p-5 shadow-elevated",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,t.jsx)("span",{className:"flex h-7 w-7 items-center justify-center rounded-full bg-accent-soft text-accent",children:(0,t.jsx)(r.Icon,{name:"key",size:16})}),(0,t.jsx)("h2",{className:"text-[15px] font-semibold text-text",children:"Key created"})]}),(0,t.jsxs)("p",{className:"mb-3 text-[12px] text-text-muted",children:["Copy ",(0,t.jsx)("span",{className:"text-text",children:e})," now. You can reveal it again later from this page."]}),(0,t.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(a),l(!0),setTimeout(()=>l(!1),1500)},className:"flex w-full items-center justify-between gap-2 rounded-brand border border-border-subtle bg-bg px-3 py-2.5 text-left hover:border-text-subtle",children:[(0,t.jsx)("span",{className:"tnum truncate text-[12.5px] text-text",children:a}),(0,t.jsx)(r.Icon,{name:s?"check":"content_copy",size:15})]}),(0,t.jsx)("div",{className:"mt-4 flex justify-end",children:(0,t.jsx)(o.Button,{onClick:i,children:"Done"})})]})})}function b({label:e,value:a}){let[i,s]=(0,n.useState)(!1);return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,t.jsx)("span",{className:"text-text-subtle",children:e}),(0,t.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(a),s(!0),setTimeout(()=>s(!1),1200)},className:"flex items-center gap-1.5 rounded-brand border border-border-subtle px-2.5 py-1 tnum text-[12.5px] text-text hover:border-text-subtle",children:[a,(0,t.jsx)(r.Icon,{name:i?"check":"content_copy",size:13})]})]})}function v({label:e,desc:n,on:a,busy:i,disabled:s,onChange:o}){let r=i||s;return(0,t.jsxs)("div",{className:`flex items-center justify-between gap-4 ${r?"opacity-40":""}`,children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[13px] font-semibold text-text",children:e}),(0,t.jsx)("div",{className:"text-[12px] text-text-muted",children:n})]}),(0,t.jsx)("button",{disabled:r,onClick:()=>o(!a),className:`relative h-6 w-11 flex-none rounded-full transition-colors ${a?"bg-accent":"bg-surface-3"}`,"aria-pressed":a,children:(0,t.jsx)("span",{className:`absolute left-0.5 top-0.5 h-5 w-5 rounded-full bg-bg transition-transform ${a?"translate-x-5":"translate-x-0"}`})})]})}function k({label:e,desc:n,value:a,busy:s,onChange:o}){return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[13px] font-semibold text-text",children:e}),"off"!==a&&(0,t.jsx)(i.Badge,{tone:"info",children:a})]}),(0,t.jsx)("div",{className:"text-[12px] text-text-muted",children:n})]}),(0,t.jsx)("div",{className:"flex flex-none items-center gap-1 rounded-full border border-border bg-surface p-1",children:p.map(e=>(0,t.jsx)("button",{disabled:s,onClick:()=>o(e),className:`rounded-full px-2.5 py-1 text-[11.5px] font-medium transition-colors ${a===e?"bg-surface-2 text-text":"text-text-muted hover:text-text"}`,children:e},e))})]})}e.s(["EndpointView",0,function(){let[e,i]=(0,n.useState)(null),[p,f]=(0,n.useState)(""),[j,w]=(0,n.useState)(""),[y,N]=(0,n.useState)(""),[C,W]=(0,n.useState)(null),[F,S]=(0,n.useState)(null),[O,$]=(0,n.useState)(null),[I,A]=(0,n.useState)(null),[D,z]=(0,n.useState)(""),[R,M]=(0,n.useState)([]),[B,q]=(0,n.useState)(null),[T,P]=(0,n.useState)([]),[L,U]=(0,n.useState)(""),[_,E]=(0,n.useState)("never"),[K,G]=(0,n.useState)(""),[H,V]=(0,n.useState)(""),[Y,J]=(0,n.useState)("30day"),[Q,X]=(0,n.useState)({}),[Z,ee]=(0,n.useState)(!1),et=(0,n.useCallback)(async()=>{let e=await a.adminApi.endpoint();e.ok?(f(""),i(e.data)):f(e.error??"could not reach the gateway")},[]),en=(0,n.useCallback)(async()=>{let e=await a.adminApi.headroomStatus();e.ok&&$(e.data)},[]);if((0,n.useEffect)(()=>{et(),en(),(async()=>{try{let e=await fetch("/api/gw/admin/config");if(!e.ok)return;let t=await e.json(),n=[];for(let e of(t.models.length&&n.push({label:"Combos",items:t.models.map(e=>({value:e.alias,label:e.alias}))}),t.providers))e.models.length&&n.push({label:e.id,items:e.models.map(t=>({value:`${e.id}/${t.id}`,label:`${e.id}/${t.id}`}))});M(n)}catch{}})(),a.adminApi.budgets().then(e=>{if(!e.ok||!e.data)return;let t={};for(let n of e.data.budgets)"key"===n.scope.type&&(t[n.scope.id]={limit:n.limit,window:n.window});X(t)})},[et,en]),p)return(0,t.jsx)(c.Empty,{children:p});if(!e)return(0,t.jsx)(c.Empty,{children:"Loading…"});let ea=`http://127.0.0.1:${e.port}`;async function ei(e,t){w(e);let n=await t();w(""),n.ok?(f(""),await et()):f(n.error??"action failed")}async function es(e,t){let n=(e||"Gateway key").trim();w("genkey");let i=await a.adminApi.addServerKey(t,n);(w(""),i.ok)?(f(""),N(""),W({key:t,name:n}),await et()):f(i.error??"could not add key")}return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"Endpoint & Key"}),(0,t.jsx)("p",{className:"mt-1 text-[13px] text-text-muted",children:"Gateway address, client keys, and the token-saver toggles."})]}),(0,t.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,t.jsxs)(s.RichCard,{header:(0,t.jsx)(s.CardTitle,{title:"Gateway URL",sub:"one endpoint for every client"}),children:[(0,t.jsx)("div",{className:"text-[13px]",children:(0,t.jsx)(b,{label:"Gateway URL",value:ea})}),(0,t.jsxs)("p",{className:"mt-3 text-[12px] text-text-subtle",children:["One gateway, both formats. Anthropic clients (Claude Code) use it as-is; OpenAI clients (opencode, Cursor, Codex) append ",(0,t.jsx)("span",{className:"tnum",children:"/v1"}),". The ",(0,t.jsx)("span",{className:"text-text-muted",children:"CLI Tools"})," ","page has copy-ready env per tool."]})]}),(0,t.jsxs)(s.RichCard,{header:(0,t.jsx)(s.CardTitle,{title:"Gateway keys",sub:`${e.keys.length} configured`}),children:[0===e.keys.length?(0,t.jsx)(c.Empty,{children:"No keys — auth is DISABLED (localhost only). Generate one below."}):(0,t.jsx)("div",{className:"space-y-1.5",children:e.keys.map((e,n)=>I===n?(0,t.jsxs)("div",{className:"space-y-2 rounded-brand border border-accent bg-accent-soft/40 px-3 py-2.5",children:[(0,t.jsx)(o.Input,{value:D,onChange:e=>z(e.target.value),placeholder:"key name (e.g. Claude Code)"}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)(o.Button,{variant:"ghost",onClick:()=>A(null),children:"Cancel"}),(0,t.jsx)(o.Button,{disabled:j===`editkey${n}`,onClick:()=>ei(`editkey${n}`,async()=>{let e=await a.adminApi.editServerKey(n,D.trim());return e.ok&&A(null),e}),children:"Save"})]})]},n):(0,t.jsxs)("div",{className:"space-y-0 rounded-brand border border-border-subtle",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2 px-3 py-2",children:[(0,t.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[e.name&&(0,t.jsx)("span",{className:"text-[12px] font-semibold text-text-muted",children:e.name}),(0,t.jsx)(l,{masked:e.key,reveal:async()=>{let e=await a.adminApi.revealServerKey(n);return e.ok?e.data?.key??null:null}}),(0,t.jsxs)("div",{className:"mt-0.5 flex flex-wrap items-center gap-1.5 text-[11px] text-text-subtle",children:[(0,t.jsx)("span",{children:e.models?.length?`${e.models.length} model${e.models.length>1?"s":""}`:"all models"}),(0,t.jsx)("span",{children:"·"}),(0,t.jsx)("span",{children:e.rpm?`${e.rpm}/min`:"no rate limit"}),(0,t.jsx)("span",{children:"·"}),(0,t.jsx)("span",{children:e.expires?Date.now()>e.expires?(0,t.jsx)("span",{className:"text-danger",children:"expired"}):`expires ${c.fmt.date(e.expires)}`:"no expiry"})]})]}),(0,t.jsxs)("div",{className:"flex flex-none items-center gap-1",children:[(0,t.jsx)("button",{onClick:()=>{q(n),P(e.models??[]),U(e.rpm?String(e.rpm):""),E(e.expires?"keep":"never"),G("");let t=Q[e.fingerprint];V(t?String(t.limit):""),J(t?.window??"30day")},className:"text-text-subtle hover:text-text","aria-label":"Edit key scope",title:"Model allowlist + rate limit + budget + expiry",children:(0,t.jsx)(r.Icon,{name:"tune",size:15})}),(0,t.jsx)("button",{onClick:()=>{A(n),z(e.name??"")},className:"text-text-subtle hover:text-text","aria-label":"Rename key",title:"Rename key",children:(0,t.jsx)(r.Icon,{name:"edit",size:15})}),(0,t.jsx)("button",{onClick:()=>S({i:n,label:e.name||e.key}),className:"text-text-subtle hover:text-danger","aria-label":"Remove key",children:(0,t.jsx)(r.Icon,{name:"delete",size:16})})]})]}),B===n&&(0,t.jsxs)("div",{className:"space-y-2 border-t border-border-subtle bg-accent-soft/40 px-3 py-2.5",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Allowed models"}),(0,t.jsx)("div",{className:"flex flex-wrap items-center gap-1.5",children:0===T.length?(0,t.jsx)("span",{className:"text-[12px] text-text-subtle",children:"All models (unrestricted)"}):T.map(e=>(0,t.jsxs)("span",{className:"inline-flex items-center gap-1 rounded border border-accent bg-accent-soft px-2 py-0.5 text-[12px] text-accent",children:[(0,t.jsx)("span",{className:"tnum",children:e}),(0,t.jsx)("button",{onClick:()=>P(t=>t.filter(t=>t!==e)),className:"hover:text-danger","aria-label":`Remove ${e}`,children:(0,t.jsx)(r.Icon,{name:"close",size:12})})]},e))}),(0,t.jsxs)(o.Button,{type:"button",variant:"ghost",className:"mt-1.5",onClick:()=>ee(!0),children:[(0,t.jsx)(r.Icon,{name:"add",size:15})," Pick models"]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Rate limit"}),(0,t.jsx)(o.Input,{inputMode:"numeric",value:L,onChange:e=>U(e.target.value.replace(/[^\d]/g,"")),placeholder:"req/min (blank = unlimited)"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Access expiry"}),e.expires&&(0,t.jsxs)("div",{className:"mb-1.5 text-[11px] text-text-subtle",children:["currently ",Date.now()>e.expires?(0,t.jsx)("span",{className:"text-danger",children:"expired"}):`expires ${c.fmt.date(e.expires)}`]}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1",children:(e.expires?["keep","never","24h","7day","30day","custom"]:["never","24h","7day","30day","custom"]).map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>E(e),className:u(_===e),children:"never"===e?"no expiry":e},e))}),"custom"===_&&(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-1.5",children:[(0,t.jsx)(o.Input,{inputMode:"numeric",value:K,onChange:e=>G(e.target.value.replace(/[^\d]/g,"")),placeholder:"days",className:"w-24"}),(0,t.jsx)("span",{className:"text-[11px] text-text-subtle",children:"days from now"})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Spend cap (USD)"}),(0,t.jsx)(o.Input,{inputMode:"decimal",value:H,onChange:e=>V(e.target.value.replace(/[^\d.]/g,"")),placeholder:"USD (blank = no cap)"}),H&&(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-1.5",children:[(0,t.jsx)("span",{className:"text-[11px] text-text-subtle",children:"resets every"}),["5h","24h","7day","30day"].map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>J(e),className:u(Y===e),children:e},e))]})]}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)(o.Button,{variant:"ghost",onClick:()=>q(null),children:"Cancel"}),(0,t.jsx)(o.Button,{disabled:j===`scope${n}`,onClick:()=>ei(`scope${n}`,async()=>{let t="keep"===_?void 0:"never"===_?null:"custom"===_?K?Date.now()+864e5*Number(K):null:Date.now()+m[_],i=await a.adminApi.setServerKeyScope(n,{models:T,rpm:L?Number(L):null,expires:t});if(!i.ok)return i;let s=H?Number(H):0;return s>0?await a.adminApi.setBudget({scope:{type:"key",id:e.fingerprint},unit:"usd",limit:s,window:Y}):Q[e.fingerprint]&&await a.adminApi.clearBudget(`key:${e.fingerprint}`),q(null),i}),children:"Save"})]})]})]},n))}),(0,t.jsxs)("div",{className:"mt-3 space-y-2",children:[(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(o.Input,{value:y,onChange:e=>N(e.target.value),placeholder:"key name (e.g. Claude Code)",className:"flex-1"}),(0,t.jsxs)(o.Button,{disabled:"genkey"===j,onClick:()=>{let e,t;return es(y,(e=new Uint8Array(24),crypto.getRandomValues(e),t=Array.from(e,e=>e.toString(16).padStart(2,"0")).join(""),`aig-${t}`))},children:[(0,t.jsx)(r.Icon,{name:"add",size:16})," ","genkey"===j?"Adding…":"Add key"]})]}),(0,t.jsx)("p",{className:"text-[11px] text-text-subtle",children:"Name it, then click Add key — a key is generated and shown once. Configure its limits after."})]})]}),(0,t.jsx)(s.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(s.CardTitle,{title:"Token savers",sub:"applied to every request before routing"}),children:(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)(v,{label:"RTK",desc:"Compress bulky tool_result blocks (diffs, grep, listings) in the request.",on:e.rtk,busy:"rtk"===j,onChange:e=>ei("rtk",()=>a.adminApi.setRtk(e))}),(0,t.jsx)(k,{label:"Caveman",desc:"Terser model output — drops filler, keeps substance.",value:e.caveman,busy:"caveman"===j,onChange:e=>ei("caveman",()=>a.adminApi.setCaveman(e))}),(0,t.jsx)(k,{label:"Ponytail",desc:"Minimal, YAGNI code style — deletion over addition.",value:e.ponytail,busy:"ponytail"===j,onChange:e=>ei("ponytail",()=>a.adminApi.setPonytail(e))})]})}),(0,t.jsx)(h,{ep:e,hr:O,refresh:async()=>{await et(),await en()}})]}),C&&(0,t.jsx)(g,{name:C.name,value:C.key,onClose:()=>W(null)}),F&&(0,t.jsx)(x.ConfirmModal,{title:"Remove gateway key",message:`Delete "${F.label}"? Any client using this key stops working immediately.`,confirmLabel:"Remove",busy:j===`rmkey${F.i}`,onCancel:()=>S(null),onConfirm:()=>{let e=F.i;ei(`rmkey${e}`,()=>a.adminApi.removeServerKey(e)).then(()=>S(null))}}),Z&&(0,t.jsx)(d.ModelPicker,{title:"Allowed models",note:"Pick the models this key may call. None = all.",groups:R,selected:T,onToggle:e=>P(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),onClose:()=>ee(!1),showThinkingHint:!1})]})}],24644)}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,81189,e=>{"use strict";var t=e.i(43476);let n={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",warn:"bg-warning/12 text-warning",info:"bg-info/12 text-info",neutral:"bg-surface-2 text-text-muted"};function a({tone:e="neutral",children:i,className:s}){return(0,t.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${n[e]}${s?` ${s}`:""}`,children:i})}e.s(["Badge",0,a,"FormatBadge",0,function({format:e}){return(0,t.jsx)(a,{tone:"info",children:e})}])},38286,e=>{"use strict";var t=e.i(43476);e.s(["Empty",0,function({children:e}){return(0,t.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:e})},"Stat",0,function({label:e,value:n,sub:a}){return(0,t.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,t.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:e}),(0,t.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:n}),a&&(0,t.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:a})]})},"fmt",0,{int:e=>e.toLocaleString("en-US"),compact:e=>Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)),cost:e=>0===e?"$0":e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`,time:e=>new Date(e).toLocaleString("en-US",{hour12:!1}),date(e){let t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()}`},ago(e){let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`},duration(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;if(t<3600)return`${Math.floor(t/60)}m ${t%60}s`;let n=Math.floor(t/3600),a=Math.floor(t%3600/60);if(n<24)return`${n}h ${a}m`;let i=Math.floor(n/24);return`${i}d ${n%24}h`}}])},69163,e=>{"use strict";var t=e.i(43476);e.s(["CardTitle",0,function({title:e,sub:n,icon:a}){return(0,t.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[a,(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("div",{className:"truncate text-[14px] font-semibold tracking-tight text-text",children:e}),n&&(0,t.jsx)("div",{className:"truncate text-[12px] text-text-muted",children:n})]})]})},"RichCard",0,function({header:e,footer:n,children:a,className:i}){return(0,t.jsxs)("section",{className:`overflow-hidden rounded-brand-lg border border-border bg-surface shadow-soft${i?` ${i}`:""}`,children:[e&&(0,t.jsx)("header",{className:"flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-3",children:e}),(0,t.jsx)("div",{className:"p-4",children:a}),n&&(0,t.jsx)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:n})]})}])},53854,45570,e=>{"use strict";var t=e.i(43476);function n(e,t){return RegExp("^"+e.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i").test(t)}let a={vision:!1,pdf:!1,audioInput:!1,videoInput:!1,imageOutput:!1,audioOutput:!1,search:!1,tools:!0,reasoning:!1,thinkingFormat:null,thinkingCanDisable:!0,thinkingRange:null,contextWindow:2e5,maxOutput:64e3},i={"claude-opus-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.7":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:64e3},"claude-sonnet-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:64e3},"gpt-image-1":{imageOutput:!0,tools:!1},"glm-4.6v":{vision:!0,reasoning:!0,thinkingFormat:"zai",contextWindow:128e3},"vision-model":{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6},"coder-model":{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},s={"codebuddy-cn":{"glm-5.2":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:48e3},"glm-5.1":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5.0":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"glm-5.0-turbo":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5v-turbo":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:38e3},"glm-4.7":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"minimax-m3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:512e3,maxOutput:48e3},"minimax-m2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"kimi-k2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.6":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.5":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:164e3,maxOutput:32e3},"hy3-preview":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:192e3,maxOutput:64e3},"deepseek-v4-pro":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:5e4},"deepseek-v4-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:5e4},"deepseek-v3-2-volc":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:96e3,maxOutput:32e3}}},o=[{pattern:"*claude*opus-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.8*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*haiku*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*opus*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*sonnet*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*fable*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude*mythos*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude-3*",caps:{vision:!0}},{pattern:"*claude*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*gemini*image*",caps:{vision:!0,imageOutput:!0,contextWindow:1048576}},{pattern:"*gemini-3*pro*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65535}},{pattern:"*gemini-3*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2.5*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-budget",thinkingRange:{min:0,max:24576},contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2*",caps:{vision:!0,audioInput:!0,videoInput:!0,search:!0,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini*",caps:{vision:!0,search:!0,contextWindow:1048576}},{pattern:"*gemma*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*nanobanana*",caps:{vision:!0,imageOutput:!0}},{pattern:"*gpt-5*image*",caps:{imageOutput:!0}},{pattern:"*gpt-5*codex*",caps:{reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-4o*",caps:{vision:!0,search:!0,contextWindow:128e3,maxOutput:16384}},{pattern:"*gpt-4.1*",caps:{vision:!0,contextWindow:1e6,maxOutput:32768}},{pattern:"*gpt-4-turbo*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*gpt-4*",caps:{contextWindow:128e3}},{pattern:"*gpt-3.5*",caps:{contextWindow:16385,maxOutput:4096}},{pattern:"*gpt-oss*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1-mini*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o4*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*grok*image*",caps:{imageOutput:!0}},{pattern:"*grok-code*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-4*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-3*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:131072}},{pattern:"*grok*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*qwen*vl*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*max*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*plus*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*235b*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*coder*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},{pattern:"*qwq*",caps:{reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:131072}},{pattern:"*qwen*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*kimi*k2.7*code*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*k2*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*",caps:{reasoning:!0,thinkingFormat:"kimi",contextWindow:262144}},{pattern:"*glm-5*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4.7*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*glm*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*deepseek-v4*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3}},{pattern:"*reasoner*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-r*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-chat*",caps:{contextWindow:128e3}},{pattern:"*deepseek*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:128e3}},{pattern:"*minimax*image*",caps:{imageOutput:!0}},{pattern:"*minimax-m3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"minimax",contextWindow:1048576,maxOutput:512e3}},{pattern:"*minimax-m2.7*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:204800,maxOutput:131072}},{pattern:"*minimax*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:131072}},{pattern:"*mimo*v2.5*",caps:{vision:!0,contextWindow:1048576,maxOutput:131072}},{pattern:"*mimo*omni*",caps:{vision:!0,audioInput:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*mimo*",caps:{vision:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*llama-4*",caps:{vision:!0,contextWindow:1e6}},{pattern:"*llama*",caps:{contextWindow:128e3}},{pattern:"*codestral*",caps:{contextWindow:256e3}},{pattern:"*mistral-large*",caps:{vision:!0,contextWindow:256e3}},{pattern:"*mistral*",caps:{contextWindow:128e3}},{pattern:"*command-a-vision*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*command*",caps:{contextWindow:128e3}},{pattern:"*sonar*",caps:{search:!0,contextWindow:128e3}},{pattern:"*pplx*",caps:{search:!0,contextWindow:128e3}},{pattern:"*perplexity*",caps:{search:!0,contextWindow:128e3}},{pattern:"*hunyuan*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"hy3*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"*step-*",caps:{reasoning:!0,thinkingFormat:"step",contextWindow:128e3}},{pattern:"*nemotron*",caps:{reasoning:!0,contextWindow:128e3}},{pattern:"*ling-*",caps:{reasoning:!0,contextWindow:128e3}}];function r(e,t){if(!t)return{...a};if(e&&s[e]?.[t])return{...a,...s[e][t]};let r=(t.includes("/")?t.split("/").pop():t)??t;if(i[r])return{...a,...i[r]};if(i[t])return{...a,...i[t]};for(let{pattern:e,caps:i}of o)if(n(e,r)||n(e,t))return{...a,...i};return{...a}}e.s(["getCapabilitiesForModel",0,r,"modalitiesForModel",0,function(e){let t=e.indexOf("/"),n=r(t>0?e.slice(0,t):null,t>0?e.slice(t+1):e),a=["text"];n.vision&&a.push("image"),n.pdf&&a.push("pdf"),n.audioInput&&a.push("audio"),n.videoInput&&a.push("video");let i=["text"];return n.imageOutput&&i.push("image"),n.audioOutput&&i.push("audio"),{input:a,output:i}}],45570);var l=e.i(51514);let c={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-info"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-warning"}};e.s(["CapacityBadges",0,function({model:e,provider:n=null,size:a=15,className:i=""}){let s=r(n,e),o=Object.keys(c).filter(e=>s[e]);return 0===o.length?null:(0,t.jsx)("span",{className:`inline-flex flex-none items-center gap-0.5 ${i}`,children:o.map(e=>(0,t.jsx)("span",{title:`${c[e].label} — ${c[e].desc}`,className:"leading-none",children:(0,t.jsx)(l.Icon,{name:c[e].icon,size:a,className:c[e].color})},e))})}],53854)},78347,e=>{"use strict";var t=e.i(43476),n=e.i(71645),a=e.i(51514),i=e.i(53854);e.s(["ModelPicker",0,function({title:e="Add models",note:s="Click to add, click again to remove.",searchPlaceholder:o="Search models…",groups:r,selected:l,onToggle:c,onClose:d,showThinkingHint:p=!0}){let[x,u]=(0,n.useState)(""),m=x.trim().toLowerCase(),g=r.map(e=>({...e,items:m?e.items.filter(e=>e.value.toLowerCase().includes(m)):e.items})).filter(e=>e.items.length>0),h=new Set(l);return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-black/60 p-6 sm:p-10",onClick:d,children:(0,t.jsxs)("div",{className:"flex max-h-[80vh] w-full max-w-lg flex-col rounded-brand-lg border border-border bg-surface shadow-elevated",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-border-subtle px-4 py-3",children:[(0,t.jsx)("h2",{className:"text-[14px] font-semibold text-text",children:e}),(0,t.jsx)("button",{onClick:d,className:"text-text-subtle hover:text-text","aria-label":"Close",children:(0,t.jsx)(a.Icon,{name:"close",size:18})})]}),(0,t.jsxs)("div",{className:"border-b border-border-subtle px-4 py-3",children:[(0,t.jsx)("p",{className:"mb-2 text-[12px] text-text-muted",children:s}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(a.Icon,{name:"search",size:15,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-text-subtle"}),(0,t.jsx)("input",{autoFocus:!0,value:x,onChange:e=>u(e.target.value),placeholder:o,className:"w-full rounded-brand border border-border bg-bg py-2 pl-8 pr-3 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none"})]})]}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:0===g.length?(0,t.jsxs)("p",{className:"py-6 text-center text-[12.5px] text-text-subtle",children:["No models match “",x,"”."]}):(0,t.jsx)("div",{className:"space-y-4",children:g.map(e=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-1.5 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-text-subtle",children:[e.label," ",(0,t.jsxs)("span",{className:"tnum text-text-subtle/70",children:["(",e.items.length,")"]})]}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.items.map(e=>{let n=h.has(e.value);return(0,t.jsxs)("button",{type:"button",onClick:()=>c(e.value),className:`inline-flex items-center gap-1 rounded-brand border px-2 py-1 text-[12px] transition-colors ${n?"border-accent bg-accent-soft text-accent":"border-border bg-bg text-text-muted hover:border-text-subtle hover:text-text"}`,children:[n&&(0,t.jsx)(a.Icon,{name:"check",size:12}),(0,t.jsx)("span",{className:"tnum",children:e.label}),(0,t.jsx)(i.CapacityBadges,{model:e.value,size:13}),e.tag&&(0,t.jsx)("span",{className:"rounded bg-surface-2 px-1 text-[10px] text-text-subtle",children:e.tag})]},e.value)})})]},e.label))})}),p&&(0,t.jsxs)("div",{className:"border-t border-border-subtle px-4 py-2 text-[11px] text-text-subtle",children:[(0,t.jsx)(a.Icon,{name:"neurology",size:12,className:"mr-1 inline align-text-bottom text-warning"}),"Reasoning models accept a thinking suffix — call"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1 text-text-muted",children:"model(high)"})," or"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1 text-text-muted",children:"model(none)"})," (high·low·medium·minimal·auto·none·or a token budget)."]}),(0,t.jsxs)("div",{className:"flex items-center justify-between border-t border-border-subtle px-4 py-3",children:[(0,t.jsxs)("span",{className:"tnum text-[12px] text-text-subtle",children:[l.length," selected"]}),(0,t.jsx)("button",{onClick:d,className:"rounded-brand bg-accent px-3.5 py-1.5 text-[13px] font-semibold text-accent-ink hover:bg-accent-hover",children:"Done"})]})]})})}])},70789,e=>{"use strict";let t=[{id:"claude-code",name:"Claude Code",icon:"smart_toy",format:"anthropic",blurb:"Anthropic CLI. Point its base URL + key at the gateway.",autoConfig:!0,install:"npm i -g @anthropic-ai/claude-code",slots:[{label:"Opus · heavy",alias:"claude-opus-4-1"},{label:"Sonnet · default",alias:"claude-sonnet-4-6"},{label:"Haiku · fast",alias:"claude-haiku-4-5"}],env:(e,t)=>[{name:"ANTHROPIC_BASE_URL",value:e},{name:"ANTHROPIC_API_KEY",value:t||"<your-gateway-key>"}],steps:["Export the two variables in the shell you run `claude` from.","Create a combo named like each slot above so Claude Code's model ids resolve.","The gateway translates Anthropic ↔ provider format, so any provider works behind it."]},{id:"opencode",name:"opencode",icon:"code_blocks",format:"openai",blurb:"OpenAI-compatible provider. Set base_url to /v1.",autoConfig:!0,install:"curl -fsSL https://opencode.ai/install | bash",slots:[{label:"Model",alias:"gpt-5"}],env:(e,t)=>[{name:"OPENAI_BASE_URL",value:`${e}/v1`},{name:"OPENAI_API_KEY",value:t||"<your-gateway-key>"}],steps:["Add an OpenAI-compatible provider with the gateway /v1 base URL.","Pick a combo alias as the model."]}];e.s(["CLI_TOOLS",0,t,"toolById",0,function(e){return t.find(t=>t.id===e)}])},61092,e=>{"use strict";var t=e.i(43476),n=e.i(71645),a=e.i(18566),i=e.i(69163),s=e.i(81189),o=e.i(10007),r=e.i(78347),l=e.i(51514),c=e.i(38286),d=e.i(29481),p=e.i(70789),x=e.i(45570);function u({label:e,children:n,top:a}){return(0,t.jsxs)("div",{className:`grid grid-cols-[7rem_1fr] gap-3 ${a?"items-start":"items-center"}`,children:[(0,t.jsx)("span",{className:`text-[12px] font-medium text-text-subtle ${a?"pt-1.5":""}`,children:e}),(0,t.jsx)("div",{className:"min-w-0",children:n})]})}function m({text:e}){let[a,i]=(0,n.useState)(!1);return(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("pre",{className:"overflow-x-auto rounded-brand border border-border-subtle bg-bg px-3 py-2.5 font-mono text-[12.5px] leading-relaxed text-text",children:e}),(0,t.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(e),i(!0),setTimeout(()=>i(!1),1200)},className:"absolute right-2 top-2 flex items-center gap-1 rounded-brand border border-border bg-surface px-2 py-1 text-[11px] text-text-muted hover:text-text",children:[(0,t.jsx)(l.Icon,{name:a?"check":"content_copy",size:13})," ",a?"copied":"copy"]})]})}e.s(["ToolDetail",0,function({id:e}){let g=(0,a.useRouter)(),h=(0,p.toolById)(e),[b,v]=(0,n.useState)(null),[k,f]=(0,n.useState)([]),[w,j]=(0,n.useState)(0),[y,N]=(0,n.useState)(""),[C,W]=(0,n.useState)(""),[F,O]=(0,n.useState)(null),[S,$]=(0,n.useState)(""),[I,A]=(0,n.useState)(""),[T,D]=(0,n.useState)([]),[M,R]=(0,n.useState)([]),[_,E]=(0,n.useState)(!1),[L,P]=(0,n.useState)([]),[z,U]=(0,n.useState)(""),[B,q]=(0,n.useState)({opus:"",sonnet:"",haiku:""}),H=h?.format==="anthropic",K=(0,n.useCallback)(async()=>{h?.autoConfig&&O((await d.cliConfig.status(h.id)).data)},[h]);async function Y(){if(!h||!b)return;A("");let e=`http://127.0.0.1:${b.port}`,t=b.keys.length&&y||void 0;if(H){let n={};B.opus&&(n.opus=B.opus),B.sonnet&&(n.sonnet=B.sonnet),B.haiku&&(n.haiku=B.haiku),$("apply");let a=await d.cliConfig.apply(h.id,{base:e,key:t,models:n});$(""),A(a.ok?"Wrote config ✓":a.error??"failed"),a.ok&&K();return}if(0===L.length)return void A("add at least one model");$("apply");let n=await d.cliConfig.apply(h.id,{base:e,key:t,models:L,active:z});$(""),A(n.ok?"Wrote config ✓":n.error??"failed"),n.ok&&K()}async function J(){if(!h)return;$("reset"),A("");let e=await d.cliConfig.reset(h.id);$(""),e.ok?(A("Removed gateway config ✓"),K()):A(e.error??"failed")}if((0,n.useEffect)(()=>{K()},[K]),(0,n.useEffect)(()=>{F?.installed&&(H&&F.modelSlots?q({opus:F.modelSlots.opus??"",sonnet:F.modelSlots.sonnet??"",haiku:F.modelSlots.haiku??""}):!H&&F.models&&F.models.length>0&&(P(F.models),U(F.activeModel??F.models[0]??"")))},[F,H]),(0,n.useEffect)(()=>{(async()=>{let[e,t]=await Promise.all([fetch("/api/gw/admin/endpoint"),fetch("/api/gw/admin/config")]);if(!e.ok)return W("could not reach the gateway");if(v(await e.json()),t.ok){let e=await t.json(),n=e.models.map(e=>e.alias);f(n);let a=e.providers.filter(e=>!e.disabled);D([...n,...a.flatMap(e=>e.models.map(t=>`${e.id}/${t.id}`))]);let i=[];for(let e of(n.length&&i.push({label:"Combos",items:n.map(e=>({value:e,label:e}))}),a))e.models.length&&i.push({label:e.id,items:e.models.map(t=>({value:`${e.id}/${t.id}`,label:`${e.id}/${t.id}`}))});R(i)}})()},[]),(0,n.useEffect)(()=>{b&&0!==b.keys.length&&d.adminApi.revealServerKey(w).then(e=>N(e.ok?e.data?.key??"":""))},[b,w]),!h)return(0,t.jsx)(c.Empty,{children:"Unknown tool."});if(C)return(0,t.jsx)(c.Empty,{children:C});if(!b)return(0,t.jsx)(c.Empty,{children:"Loading…"});let V=`http://127.0.0.1:${b.port}`,G=h.env(V,y).map(e=>`export ${e.name}="${e.value}"`).join("\n"),Q=L.length?L:F?.models??[],X="opencode"===h.id?JSON.stringify({provider:{aigetwey:{npm:"@ai-sdk/openai-compatible",options:{baseURL:`${V}/v1`,apiKey:y||"aigetwey"},models:Object.fromEntries(Q.map(e=>[e,{name:e,modalities:(0,x.modalitiesForModel)(e)}]))}},model:`aigetwey/${z||Q[0]||""}`},null,2):null,Z="claude-code"===h.id?JSON.stringify({hasCompletedOnboarding:!0,env:{ANTHROPIC_BASE_URL:V,API_TIMEOUT_MS:"600000",...y?{ANTHROPIC_AUTH_TOKEN:y}:{},...B.opus?{ANTHROPIC_DEFAULT_OPUS_MODEL:B.opus}:{},...B.sonnet?{ANTHROPIC_DEFAULT_SONNET_MODEL:B.sonnet}:{},...B.haiku?{ANTHROPIC_DEFAULT_HAIKU_MODEL:B.haiku}:{}}},null,2):null;return(0,t.jsxs)("div",{children:[(0,t.jsxs)("button",{onClick:()=>g.push("/tools"),className:"mb-4 inline-flex items-center gap-1 text-[12px] text-text-muted hover:text-text",children:[(0,t.jsx)(l.Icon,{name:"arrow_back",size:15})," CLI Tools"]}),(0,t.jsxs)("div",{className:"mb-6 flex items-center gap-3",children:[(0,t.jsx)("span",{className:"flex h-9 w-9 items-center justify-center rounded-brand bg-surface-2 text-text-muted",children:(0,t.jsx)(l.Icon,{name:h.icon,size:20})}),(0,t.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:h.name}),(0,t.jsx)(s.Badge,{tone:"info",children:h.format})]}),(0,t.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[h.autoConfig&&(0,t.jsx)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.CardTitle,{title:"Local setup",sub:"detect this tool on your machine and write its config for you"}),F&&(0,t.jsx)(s.Badge,{tone:F.installed?F.configured?"live":"warn":"neutral",children:F.installed?F.configured?"configured":"detected":"not detected"})]}),children:F?F.installed?(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(u,{label:"Endpoint",children:(0,t.jsx)("span",{className:"tnum text-[12.5px] text-text",children:H?V:`${V}/v1`})}),b.keys.length>0&&(0,t.jsx)(u,{label:"API Key",children:(0,t.jsx)(o.Select,{value:String(w),onChange:e=>j(Number(e.target.value)),className:"max-w-[260px]",children:b.keys.map((e,n)=>(0,t.jsx)("option",{value:n,children:e.name||`key ${n+1}`},n))})}),H?(0,t.jsx)(u,{label:"Models",top:!0,children:(0,t.jsx)("div",{className:"flex flex-col gap-2",children:["opus","sonnet","haiku"].map(e=>(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"w-16 text-[12px] capitalize text-text-subtle",children:e}),(0,t.jsxs)(o.Select,{value:B[e],onChange:t=>q(n=>({...n,[e]:t.target.value})),className:"flex-1",children:[(0,t.jsx)("option",{value:"",children:"— none —"}),T.map(e=>(0,t.jsx)("option",{value:e,children:e},e))]})]},e))})}):(0,t.jsx)(u,{label:"Models",top:!0,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"flex min-h-[34px] flex-wrap gap-1.5 rounded-brand border border-border-subtle bg-bg px-2 py-1.5",children:0===L.length?(0,t.jsx)("span",{className:"text-[12px] text-text-subtle",children:"No models — add one below."}):L.map(e=>(0,t.jsxs)("span",{onClick:()=>U(t=>t===e?"":e),title:e===z?"active model — click to clear":"click to set active",className:`inline-flex cursor-pointer items-center gap-1 rounded px-2 py-0.5 text-[12px] transition-colors ${e===z?"border border-accent bg-accent-soft text-accent":"border border-transparent bg-surface-2 text-text-muted hover:border-border"}`,children:[e===z&&(0,t.jsx)(l.Icon,{name:"star",size:11}),(0,t.jsx)("span",{className:"tnum",children:e}),(0,t.jsx)("button",{onClick:t=>{t.stopPropagation(),P(t=>t.filter(t=>t!==e)),U(t=>t===e?"":t)},className:"hover:text-danger","aria-label":`Remove ${e}`,children:(0,t.jsx)(l.Icon,{name:"close",size:12})})]},e))}),(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,t.jsxs)(o.Button,{type:"button",variant:"ghost",onClick:()=>E(!0),children:[(0,t.jsx)(l.Icon,{name:"add",size:15})," Add models"]}),(0,t.jsx)("span",{className:"text-[11.5px] text-text-subtle",children:z?(0,t.jsxs)(t.Fragment,{children:["active: ",(0,t.jsx)("span",{className:"tnum text-accent",children:z})]}):L.length?"click a chip to set active":""})]})]})}),F.configured&&F.baseUrl&&(0,t.jsx)(u,{label:"Current",children:(0,t.jsx)("span",{className:"tnum text-[11.5px] text-text-subtle",children:F.baseUrl})}),(0,t.jsxs)("div",{className:"flex items-center gap-2 border-t border-border-subtle pt-3",children:[(0,t.jsxs)(o.Button,{onClick:Y,disabled:"apply"===S,children:[(0,t.jsx)(l.Icon,{name:"apply"===S?"progress_activity":"bolt",size:15}),"apply"===S?"Applying…":F.configured?"Re-apply":"Apply config"]}),F.configured&&(0,t.jsx)(o.Button,{variant:"ghost",onClick:J,disabled:"reset"===S,children:"reset"===S?"Removing…":"Reset"}),I&&(0,t.jsx)("span",{className:"text-[12px] text-text-subtle",children:I}),F.path&&(0,t.jsx)("span",{className:"ml-auto truncate tnum text-[11px] text-text-subtle",children:F.path})]})]}):(0,t.jsx)("p",{className:"text-[12.5px] text-text-muted",children:"Not found on this machine. Install it (above) or paste the manual env below — then re-open this page."}):(0,t.jsx)("p",{className:"text-[12.5px] text-text-subtle",children:"Checking your machine…"})}),h.install&&(0,t.jsx)(i.RichCard,{header:(0,t.jsx)(i.CardTitle,{title:"Install"}),children:(0,t.jsx)(m,{text:h.install})}),(0,t.jsxs)(i.RichCard,{className:h.install?"":"lg:col-span-2",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.CardTitle,{title:"Environment",sub:"copy into your shell"}),b.keys.length>1&&(0,t.jsx)(o.Select,{value:String(w),onChange:e=>j(Number(e.target.value)),className:"max-w-[180px]",children:b.keys.map((e,n)=>(0,t.jsx)("option",{value:n,children:e.name||`key ${n+1}`},n))})]}),children:[(0,t.jsx)(m,{text:G}),0===b.keys.length?(0,t.jsx)("p",{className:"mt-3 text-[12px] text-warning",children:"No gateway key set — auth is disabled. Add one under Endpoint, then it appears here."}):(0,t.jsxs)("p",{className:"mt-3 text-[12px] text-text-subtle",children:["Using key ",(0,t.jsx)("span",{className:"text-text-muted",children:b.keys[w]?.name||`#${w+1}`}),". The real value is filled in above."]})]}),X&&(0,t.jsxs)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(i.CardTitle,{title:"Manual config",sub:"merge into ~/.config/opencode/opencode.json — every model listed"}),children:[0===Q.length?(0,t.jsx)("p",{className:"text-[12.5px] text-text-muted",children:"Add models above to see them listed here."}):(0,t.jsx)(m,{text:X}),(0,t.jsx)("p",{className:"mt-3 text-[12px] text-text-subtle",children:"Apply does the same merge for you — it keeps any other providers and existing models, only adding these."})]}),Z&&(0,t.jsxs)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(i.CardTitle,{title:"Manual config",sub:"merge the env block into ~/.claude/settings.json"}),children:[(0,t.jsx)(m,{text:Z}),(0,t.jsx)("p",{className:"mt-3 text-[12px] text-text-subtle",children:"Apply does the same merge for you — it keeps the rest of your settings, only writing these env keys."})]}),!h.autoConfig&&(0,t.jsxs)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(i.CardTitle,{title:"Models to call",sub:"name a combo exactly this — the tool will hit it"}),children:[(0,t.jsx)("div",{className:"space-y-1.5",children:h.slots.map(e=>{let n=k.includes(e.alias);return(0,t.jsxs)("div",{className:"flex items-center gap-3 rounded-brand border border-border-subtle px-3 py-2",children:[(0,t.jsx)("span",{className:"w-32 flex-none text-[12px] text-text-subtle",children:e.label}),(0,t.jsx)(l.Icon,{name:"arrow_forward",size:14,className:"flex-none text-text-subtle"}),(0,t.jsx)("span",{className:"tnum truncate text-[13px] text-text",children:e.alias}),(0,t.jsx)("span",{className:"ml-auto flex flex-none items-center gap-2",children:n?(0,t.jsx)(s.Badge,{tone:"live",children:"ready"}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.Badge,{tone:"warn",children:"missing"}),(0,t.jsxs)("button",{type:"button",onClick:()=>g.push("/combos"),className:"inline-flex items-center gap-1 text-[12px] text-accent hover:underline",children:[(0,t.jsx)(l.Icon,{name:"add",size:13})," create"]})]})})]},e.alias)})}),k.length>0&&(0,t.jsxs)("p",{className:"mt-2.5 text-[11px] text-text-subtle",children:["Your combos: ",(0,t.jsx)("span",{className:"tnum text-text-muted",children:k.join(", ")})]})]}),(0,t.jsx)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(i.CardTitle,{title:"Steps"}),children:(0,t.jsx)("ol",{className:"space-y-2.5",children:h.steps.map((e,n)=>(0,t.jsxs)("li",{className:"flex gap-2.5 text-[13px] text-text-muted",children:[(0,t.jsx)("span",{className:"flex h-5 w-5 flex-none items-center justify-center rounded-full bg-surface-2 tnum text-[11px] text-text",children:n+1}),e]},n))})})]}),_&&(0,t.jsx)(r.ModelPicker,{title:"Add models",note:"Click a model to add it, click again to remove. Then hit Apply.",groups:M,selected:L,onToggle:function(e){L.includes(e)?(P(t=>t.filter(t=>t!==e)),z===e&&U("")):(P(t=>[...t,e]),z||U(e))},onClose:()=>E(!1)})]})}])}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,81189,e=>{"use strict";var t=e.i(43476);let n={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",warn:"bg-warning/12 text-warning",info:"bg-info/12 text-info",neutral:"bg-surface-2 text-text-muted"};function a({tone:e="neutral",children:i,className:s}){return(0,t.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${n[e]}${s?` ${s}`:""}`,children:i})}e.s(["Badge",0,a,"FormatBadge",0,function({format:e}){return(0,t.jsx)(a,{tone:"info",children:e})}])},38286,e=>{"use strict";var t=e.i(43476);e.s(["Empty",0,function({children:e}){return(0,t.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:e})},"Stat",0,function({label:e,value:n,sub:a}){return(0,t.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,t.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:e}),(0,t.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:n}),a&&(0,t.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:a})]})},"fmt",0,{int:e=>e.toLocaleString("en-US"),compact:e=>Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)),cost:e=>0===e?"$0":e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`,time:e=>new Date(e).toLocaleString("en-US",{hour12:!1}),date(e){let t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()}`},ago(e){let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`},duration(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;if(t<3600)return`${Math.floor(t/60)}m ${t%60}s`;let n=Math.floor(t/3600),a=Math.floor(t%3600/60);if(n<24)return`${n}h ${a}m`;let i=Math.floor(n/24);return`${i}d ${n%24}h`}}])},69163,e=>{"use strict";var t=e.i(43476);e.s(["CardTitle",0,function({title:e,sub:n,icon:a}){return(0,t.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[a,(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("div",{className:"truncate text-[14px] font-semibold tracking-tight text-text",children:e}),n&&(0,t.jsx)("div",{className:"truncate text-[12px] text-text-muted",children:n})]})]})},"RichCard",0,function({header:e,footer:n,children:a,className:i}){return(0,t.jsxs)("section",{className:`overflow-hidden rounded-brand-lg border border-border bg-surface shadow-soft${i?` ${i}`:""}`,children:[e&&(0,t.jsx)("header",{className:"flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-3",children:e}),(0,t.jsx)("div",{className:"p-4",children:a}),n&&(0,t.jsx)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:n})]})}])},53854,45570,e=>{"use strict";var t=e.i(43476);function n(e,t){return RegExp("^"+e.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i").test(t)}let a={vision:!1,pdf:!1,audioInput:!1,videoInput:!1,imageOutput:!1,audioOutput:!1,search:!1,tools:!0,reasoning:!1,thinkingFormat:null,thinkingCanDisable:!0,thinkingRange:null,contextWindow:2e5,maxOutput:64e3},i={"claude-opus-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.7":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:64e3},"claude-sonnet-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:64e3},"gpt-image-1":{imageOutput:!0,tools:!1},"glm-4.6v":{vision:!0,reasoning:!0,thinkingFormat:"zai",contextWindow:128e3},"vision-model":{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6},"coder-model":{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},s={"codebuddy-cn":{"glm-5.2":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:48e3},"glm-5.1":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5.0":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"glm-5.0-turbo":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5v-turbo":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:38e3},"glm-4.7":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"minimax-m3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:512e3,maxOutput:48e3},"minimax-m2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"kimi-k2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.6":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.5":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:164e3,maxOutput:32e3},"hy3-preview":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:192e3,maxOutput:64e3},"deepseek-v4-pro":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:5e4},"deepseek-v4-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:5e4},"deepseek-v3-2-volc":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:96e3,maxOutput:32e3}}},o=[{pattern:"*claude*opus-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.8*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*haiku*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*opus*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*sonnet*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*fable*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude*mythos*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude-3*",caps:{vision:!0}},{pattern:"*claude*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*gemini*image*",caps:{vision:!0,imageOutput:!0,contextWindow:1048576}},{pattern:"*gemini-3*pro*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65535}},{pattern:"*gemini-3*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2.5*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-budget",thinkingRange:{min:0,max:24576},contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2*",caps:{vision:!0,audioInput:!0,videoInput:!0,search:!0,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini*",caps:{vision:!0,search:!0,contextWindow:1048576}},{pattern:"*gemma*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*nanobanana*",caps:{vision:!0,imageOutput:!0}},{pattern:"*gpt-5*image*",caps:{imageOutput:!0}},{pattern:"*gpt-5*codex*",caps:{reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-4o*",caps:{vision:!0,search:!0,contextWindow:128e3,maxOutput:16384}},{pattern:"*gpt-4.1*",caps:{vision:!0,contextWindow:1e6,maxOutput:32768}},{pattern:"*gpt-4-turbo*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*gpt-4*",caps:{contextWindow:128e3}},{pattern:"*gpt-3.5*",caps:{contextWindow:16385,maxOutput:4096}},{pattern:"*gpt-oss*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1-mini*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o4*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*grok*image*",caps:{imageOutput:!0}},{pattern:"*grok-code*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-4*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-3*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:131072}},{pattern:"*grok*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*qwen*vl*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*max*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*plus*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*235b*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*coder*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},{pattern:"*qwq*",caps:{reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:131072}},{pattern:"*qwen*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*kimi*k2.7*code*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*k2*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*",caps:{reasoning:!0,thinkingFormat:"kimi",contextWindow:262144}},{pattern:"*glm-5*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4.7*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*glm*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*deepseek-v4*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3}},{pattern:"*reasoner*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-r*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-chat*",caps:{contextWindow:128e3}},{pattern:"*deepseek*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:128e3}},{pattern:"*minimax*image*",caps:{imageOutput:!0}},{pattern:"*minimax-m3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"minimax",contextWindow:1048576,maxOutput:512e3}},{pattern:"*minimax-m2.7*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:204800,maxOutput:131072}},{pattern:"*minimax*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:131072}},{pattern:"*mimo*v2.5*",caps:{vision:!0,contextWindow:1048576,maxOutput:131072}},{pattern:"*mimo*omni*",caps:{vision:!0,audioInput:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*mimo*",caps:{vision:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*llama-4*",caps:{vision:!0,contextWindow:1e6}},{pattern:"*llama*",caps:{contextWindow:128e3}},{pattern:"*codestral*",caps:{contextWindow:256e3}},{pattern:"*mistral-large*",caps:{vision:!0,contextWindow:256e3}},{pattern:"*mistral*",caps:{contextWindow:128e3}},{pattern:"*command-a-vision*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*command*",caps:{contextWindow:128e3}},{pattern:"*sonar*",caps:{search:!0,contextWindow:128e3}},{pattern:"*pplx*",caps:{search:!0,contextWindow:128e3}},{pattern:"*perplexity*",caps:{search:!0,contextWindow:128e3}},{pattern:"*hunyuan*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"hy3*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"*step-*",caps:{reasoning:!0,thinkingFormat:"step",contextWindow:128e3}},{pattern:"*nemotron*",caps:{reasoning:!0,contextWindow:128e3}},{pattern:"*ling-*",caps:{reasoning:!0,contextWindow:128e3}}];function r(e,t){if(!t)return{...a};if(e&&s[e]?.[t])return{...a,...s[e][t]};let r=(t.includes("/")?t.split("/").pop():t)??t;if(i[r])return{...a,...i[r]};if(i[t])return{...a,...i[t]};for(let{pattern:e,caps:i}of o)if(n(e,r)||n(e,t))return{...a,...i};return{...a}}e.s(["getCapabilitiesForModel",0,r,"modalitiesForModel",0,function(e){let t=e.indexOf("/"),n=r(t>0?e.slice(0,t):null,t>0?e.slice(t+1):e),a=["text"];n.vision&&a.push("image"),n.pdf&&a.push("pdf"),n.audioInput&&a.push("audio"),n.videoInput&&a.push("video");let i=["text"];return n.imageOutput&&i.push("image"),n.audioOutput&&i.push("audio"),{input:a,output:i}}],45570);var l=e.i(51514);let c={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-info"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-warning"}};e.s(["CapacityBadges",0,function({model:e,provider:n=null,size:a=15,className:i=""}){let s=r(n,e),o=Object.keys(c).filter(e=>s[e]);return 0===o.length?null:(0,t.jsx)("span",{className:`inline-flex flex-none items-center gap-0.5 ${i}`,children:o.map(e=>(0,t.jsx)("span",{title:`${c[e].label} — ${c[e].desc}`,className:"leading-none",children:(0,t.jsx)(l.Icon,{name:c[e].icon,size:a,className:c[e].color})},e))})}],53854)},78347,e=>{"use strict";var t=e.i(43476),n=e.i(71645),a=e.i(51514),i=e.i(53854);e.s(["ModelPicker",0,function({title:e="Add models",note:s="Click to add, click again to remove.",searchPlaceholder:o="Search models…",groups:r,selected:l,onToggle:c,onClose:d,showThinkingHint:p=!0}){let[x,u]=(0,n.useState)(""),m=x.trim().toLowerCase(),g=r.map(e=>({...e,items:m?e.items.filter(e=>e.value.toLowerCase().includes(m)):e.items})).filter(e=>e.items.length>0),h=new Set(l);return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-black/60 p-6 sm:p-10",onClick:d,children:(0,t.jsxs)("div",{className:"flex max-h-[80vh] w-full max-w-lg flex-col rounded-brand-lg border border-border bg-surface shadow-elevated",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-border-subtle px-4 py-3",children:[(0,t.jsx)("h2",{className:"text-[14px] font-semibold text-text",children:e}),(0,t.jsx)("button",{onClick:d,className:"text-text-subtle hover:text-text","aria-label":"Close",children:(0,t.jsx)(a.Icon,{name:"close",size:18})})]}),(0,t.jsxs)("div",{className:"border-b border-border-subtle px-4 py-3",children:[(0,t.jsx)("p",{className:"mb-2 text-[12px] text-text-muted",children:s}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(a.Icon,{name:"search",size:15,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-text-subtle"}),(0,t.jsx)("input",{autoFocus:!0,value:x,onChange:e=>u(e.target.value),placeholder:o,className:"w-full rounded-brand border border-border bg-bg py-2 pl-8 pr-3 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none"})]})]}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto px-4 py-3",children:0===g.length?(0,t.jsxs)("p",{className:"py-6 text-center text-[12.5px] text-text-subtle",children:["No models match “",x,"”."]}):(0,t.jsx)("div",{className:"space-y-4",children:g.map(e=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-1.5 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-text-subtle",children:[e.label," ",(0,t.jsxs)("span",{className:"tnum text-text-subtle/70",children:["(",e.items.length,")"]})]}),(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.items.map(e=>{let n=h.has(e.value);return(0,t.jsxs)("button",{type:"button",onClick:()=>c(e.value),className:`inline-flex items-center gap-1 rounded-brand border px-2 py-1 text-[12px] transition-colors ${n?"border-accent bg-accent-soft text-accent":"border-border bg-bg text-text-muted hover:border-text-subtle hover:text-text"}`,children:[n&&(0,t.jsx)(a.Icon,{name:"check",size:12}),(0,t.jsx)("span",{className:"tnum",children:e.label}),(0,t.jsx)(i.CapacityBadges,{model:e.value,size:13}),e.tag&&(0,t.jsx)("span",{className:"rounded bg-surface-2 px-1 text-[10px] text-text-subtle",children:e.tag})]},e.value)})})]},e.label))})}),p&&(0,t.jsxs)("div",{className:"border-t border-border-subtle px-4 py-2 text-[11px] text-text-subtle",children:[(0,t.jsx)(a.Icon,{name:"neurology",size:12,className:"mr-1 inline align-text-bottom text-warning"}),"Reasoning models accept a thinking suffix — call"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1 text-text-muted",children:"model(high)"})," or"," ",(0,t.jsx)("code",{className:"rounded bg-surface-2 px-1 text-text-muted",children:"model(none)"})," (high·low·medium·minimal·auto·none·or a token budget)."]}),(0,t.jsxs)("div",{className:"flex items-center justify-between border-t border-border-subtle px-4 py-3",children:[(0,t.jsxs)("span",{className:"tnum text-[12px] text-text-subtle",children:[l.length," selected"]}),(0,t.jsx)("button",{onClick:d,className:"rounded-brand bg-accent px-3.5 py-1.5 text-[13px] font-semibold text-accent-ink hover:bg-accent-hover",children:"Done"})]})]})})}])},70789,e=>{"use strict";let t=[{id:"claude-code",name:"Claude Code",icon:"smart_toy",format:"anthropic",blurb:"Anthropic CLI. Point its base URL + key at the gateway.",autoConfig:!0,install:"npm i -g @anthropic-ai/claude-code",slots:[{label:"Opus · heavy",alias:"claude-opus-4-1"},{label:"Sonnet · default",alias:"claude-sonnet-4-6"},{label:"Haiku · fast",alias:"claude-haiku-4-5"}],env:(e,t)=>[{name:"ANTHROPIC_BASE_URL",value:e},{name:"ANTHROPIC_API_KEY",value:t||"<your-gateway-key>"}],steps:["Export the two variables in the shell you run `claude` from.","Create a combo named like each slot above so Claude Code's model ids resolve.","The gateway translates Anthropic ↔ provider format, so any provider works behind it."]},{id:"opencode",name:"opencode",icon:"code_blocks",format:"openai",blurb:"OpenAI-compatible provider. Set base_url to /v1.",autoConfig:!0,install:"curl -fsSL https://opencode.ai/install | bash",slots:[{label:"Model",alias:"gpt-5"}],env:(e,t)=>[{name:"OPENAI_BASE_URL",value:`${e}/v1`},{name:"OPENAI_API_KEY",value:t||"<your-gateway-key>"}],steps:["Add an OpenAI-compatible provider with the gateway /v1 base URL.","Pick a combo alias as the model."]}];e.s(["CLI_TOOLS",0,t,"toolById",0,function(e){return t.find(t=>t.id===e)}])},61092,e=>{"use strict";var t=e.i(43476),n=e.i(71645),a=e.i(18566),i=e.i(69163),s=e.i(81189),o=e.i(10007),r=e.i(78347),l=e.i(51514),c=e.i(38286),d=e.i(29481),p=e.i(70789),x=e.i(45570);function u({label:e,children:n,top:a}){return(0,t.jsxs)("div",{className:`grid grid-cols-[7rem_1fr] gap-3 ${a?"items-start":"items-center"}`,children:[(0,t.jsx)("span",{className:`text-[12px] font-medium text-text-subtle ${a?"pt-1.5":""}`,children:e}),(0,t.jsx)("div",{className:"min-w-0",children:n})]})}function m({text:e}){let[a,i]=(0,n.useState)(!1);return(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("pre",{className:"overflow-x-auto rounded-brand border border-border-subtle bg-bg px-3 py-2.5 font-mono text-[12.5px] leading-relaxed text-text",children:e}),(0,t.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(e),i(!0),setTimeout(()=>i(!1),1200)},className:"absolute right-2 top-2 flex items-center gap-1 rounded-brand border border-border bg-surface px-2 py-1 text-[11px] text-text-muted hover:text-text",children:[(0,t.jsx)(l.Icon,{name:a?"check":"content_copy",size:13})," ",a?"copied":"copy"]})]})}e.s(["ToolDetail",0,function({id:e}){let g=(0,a.useRouter)(),h=(0,p.toolById)(e),[b,v]=(0,n.useState)(null),[f,k]=(0,n.useState)([]),[j,w]=(0,n.useState)(0),[y,N]=(0,n.useState)(""),[C,F]=(0,n.useState)([]),[O,W]=(0,n.useState)(""),[S,I]=(0,n.useState)(""),[$,_]=(0,n.useState)(!1),[A,T]=(0,n.useState)(""),[D,R]=(0,n.useState)(!1),[M,E]=(0,n.useState)("");(0,n.useEffect)(()=>{F(JSON.parse(localStorage.getItem(`cli-saved-bases-${e}`)??"[]")),W(localStorage.getItem(`cli-selected-base-${e}`)??""),T(localStorage.getItem(`cli-custom-key-${e}`)??"")},[e]);let[z,P]=(0,n.useState)(""),[L,B]=(0,n.useState)(null),[U,q]=(0,n.useState)(""),[K,H]=(0,n.useState)(""),[J,Y]=(0,n.useState)([]),[V,G]=(0,n.useState)([]),[Q,X]=(0,n.useState)(!1),[Z,ee]=(0,n.useState)(null),[et,en]=(0,n.useState)([]),[ea,ei]=(0,n.useState)(""),[es,eo]=(0,n.useState)({opus:"",sonnet:"",haiku:""}),er=h?.format==="anthropic",el=(0,n.useCallback)(async()=>{h?.autoConfig&&B((await d.cliConfig.status(h.id)).data)},[h]);function ec(t){let n=t.trim();if(!n)return;let a=[n,...C.filter(e=>e!==n)];F(a),W(n),localStorage.setItem(`cli-saved-bases-${e}`,JSON.stringify(a)),localStorage.setItem(`cli-selected-base-${e}`,n),I(""),_(!1)}async function ed(){if(!h||!b)return;H(""),localStorage.setItem(`cli-selected-base-${e}`,O),A.trim()?localStorage.setItem(`cli-custom-key-${e}`,A.trim()):localStorage.removeItem(`cli-custom-key-${e}`);let t=`http://127.0.0.1:${b.port}`,n=O||t,a=A.trim()||b.keys.length&&y||void 0;if(er){let e={};es.opus&&(e.opus=es.opus),es.sonnet&&(e.sonnet=es.sonnet),es.haiku&&(e.haiku=es.haiku),q("apply");let t=await d.cliConfig.apply(h.id,{base:n,key:a,models:e});q(""),H(t.ok?"Wrote config ✓":t.error??"failed"),t.ok&&el();return}if(0===et.length)return void H("add at least one model");q("apply");let i=await d.cliConfig.apply(h.id,{base:n,key:a,models:et,active:ea});q(""),H(i.ok?"Wrote config ✓":i.error??"failed"),i.ok&&el()}async function ep(){if(!h)return;q("reset"),H("");let e=await d.cliConfig.reset(h.id);q(""),e.ok?(H("Removed gateway config ✓"),el()):H(e.error??"failed")}if((0,n.useEffect)(()=>{el()},[el]),(0,n.useEffect)(()=>{L?.installed&&(er&&L.modelSlots?eo({opus:L.modelSlots.opus??"",sonnet:L.modelSlots.sonnet??"",haiku:L.modelSlots.haiku??""}):!er&&L.models&&L.models.length>0&&(en(L.models),ei(L.activeModel??L.models[0]??"")))},[L,er]),(0,n.useEffect)(()=>{(async()=>{let[e,t]=await Promise.all([fetch("/api/gw/admin/endpoint"),fetch("/api/gw/admin/config")]);if(!e.ok)return P("could not reach the gateway");if(v(await e.json()),t.ok){let e=await t.json(),n=e.models.map(e=>e.alias);k(n);let a=e.providers.filter(e=>!e.disabled);Y([...n,...a.flatMap(e=>e.models.map(t=>`${e.id}/${t.id}`))]);let i=[];for(let e of(n.length&&i.push({label:"Combos",items:n.map(e=>({value:e,label:e}))}),a))e.models.length&&i.push({label:e.id,items:e.models.map(t=>({value:`${e.id}/${t.id}`,label:`${e.id}/${t.id}`}))});G(i)}})()},[]),(0,n.useEffect)(()=>{b&&0!==b.keys.length&&d.adminApi.revealServerKey(j).then(e=>N(e.ok?e.data?.key??"":""))},[b,j]),!h)return(0,t.jsx)(c.Empty,{children:"Unknown tool."});if(z)return(0,t.jsx)(c.Empty,{children:z});if(!b)return(0,t.jsx)(c.Empty,{children:"Loading…"});let ex=`http://127.0.0.1:${b.port}`,eu=O||ex,em=A.trim()||y,eg=h.env(eu,em).map(e=>`export ${e.name}="${e.value}"`).join("\n"),eh=et.length?et:L?.models??[],eb="opencode"===h.id?JSON.stringify({provider:{aigetwey:{npm:"@ai-sdk/openai-compatible",options:{baseURL:`${eu}/v1`,apiKey:y||"aigetwey"},models:Object.fromEntries(eh.map(e=>[e,{name:e,modalities:(0,x.modalitiesForModel)(e)}]))}},model:`aigetwey/${ea||eh[0]||""}`},null,2):null,ev="claude-code"===h.id?JSON.stringify({hasCompletedOnboarding:!0,env:{ANTHROPIC_BASE_URL:eu,API_TIMEOUT_MS:"600000",...y?{ANTHROPIC_AUTH_TOKEN:y}:{},...es.opus?{ANTHROPIC_DEFAULT_OPUS_MODEL:es.opus}:{},...es.sonnet?{ANTHROPIC_DEFAULT_SONNET_MODEL:es.sonnet}:{},...es.haiku?{ANTHROPIC_DEFAULT_HAIKU_MODEL:es.haiku}:{}}},null,2):null;return(0,t.jsxs)("div",{children:[(0,t.jsxs)("button",{onClick:()=>g.push("/tools"),className:"mb-4 inline-flex items-center gap-1 text-[12px] text-text-muted hover:text-text",children:[(0,t.jsx)(l.Icon,{name:"arrow_back",size:15})," CLI Tools"]}),(0,t.jsxs)("div",{className:"mb-6 flex items-center gap-3",children:[(0,t.jsx)("span",{className:"flex h-9 w-9 items-center justify-center rounded-brand bg-surface-2 text-text-muted",children:(0,t.jsx)(l.Icon,{name:h.icon,size:20})}),(0,t.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:h.name}),(0,t.jsx)(s.Badge,{tone:"info",children:h.format})]}),(0,t.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[h.autoConfig&&(0,t.jsx)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.CardTitle,{title:"Local setup",sub:"detect this tool on your machine and write its config for you"}),L&&(0,t.jsx)(s.Badge,{tone:L.installed?L.configured?"live":"warn":"neutral",children:L.installed?L.configured?"configured":"detected":"not detected"})]}),children:L?L.installed?(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(u,{label:"Endpoint",children:(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)(o.Select,{value:O||"__auto__",onChange:t=>{let n=t.target.value;if("__custom__"===n)return void _(!0);let a="__auto__"===n?"":n;W(a),localStorage.setItem(`cli-selected-base-${e}`,a)},className:"flex-1",children:[(0,t.jsxs)("option",{value:"__auto__",children:[ex," (auto)"]}),C.map(e=>(0,t.jsx)("option",{value:e,children:e},e)),(0,t.jsx)("option",{value:"__custom__",children:"Custom URL…"})]}),O&&(0,t.jsx)(o.Button,{variant:"ghost",className:"px-2 py-1 flex-none",title:"remove this URL",onClick:()=>{let t=C.filter(e=>e!==O);F(t),localStorage.setItem(`cli-saved-bases-${e}`,JSON.stringify(t)),W(""),localStorage.setItem(`cli-selected-base-${e}`,"")},children:(0,t.jsx)(l.Icon,{name:"delete",size:15})})]}),$&&(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{autoFocus:!0,value:S,onChange:e=>I(e.target.value),onKeyDown:e=>"Enter"===e.key&&ec(S),placeholder:"https://your-gateway.example.com",className:"flex-1 rounded-brand border border-accent bg-bg px-2.5 py-1.5 font-mono text-[12px] text-text outline-none placeholder:text-text-subtle"}),(0,t.jsx)(o.Button,{variant:"ghost",onClick:()=>ec(S),children:"Add"}),(0,t.jsx)(o.Button,{variant:"ghost",onClick:()=>{_(!1),I("")},children:"Cancel"})]})]})}),(0,t.jsx)(u,{label:"API Key",children:(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)(o.Select,{value:A?"__custom__":String(j),onChange:t=>{let n=t.target.value;"__custom__"===n?R(!0):(T(""),w(Number(n)),localStorage.removeItem(`cli-custom-key-${e}`))},className:"flex-1",children:[b.keys.map((e,n)=>(0,t.jsx)("option",{value:n,children:e.name||`key ${n+1}`},n)),A&&(0,t.jsxs)("option",{value:"__custom__",children:[A.slice(0,12),"… (custom)"]}),!A&&(0,t.jsx)("option",{value:"__custom__",children:"Custom key…"})]}),A&&(0,t.jsx)(o.Button,{variant:"ghost",className:"px-2 py-1 flex-none",title:"remove custom key",onClick:()=>{T(""),localStorage.removeItem(`cli-custom-key-${e}`)},children:(0,t.jsx)(l.Icon,{name:"delete",size:15})})]}),D&&(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{autoFocus:!0,value:M,onChange:e=>E(e.target.value),onKeyDown:t=>{"Enter"===t.key&&(T(M.trim()),localStorage.setItem(`cli-custom-key-${e}`,M.trim()),R(!1),E(""))},placeholder:"paste API key…",className:"flex-1 rounded-brand border border-accent bg-bg px-2.5 py-1.5 font-mono text-[12px] text-text outline-none placeholder:text-text-subtle"}),(0,t.jsx)(o.Button,{variant:"ghost",onClick:()=>{T(M.trim()),localStorage.setItem(`cli-custom-key-${e}`,M.trim()),R(!1),E("")},children:"Add"}),(0,t.jsx)(o.Button,{variant:"ghost",onClick:()=>{R(!1),E("")},children:"Cancel"})]})]})}),er?(0,t.jsx)(u,{label:"Models",top:!0,children:(0,t.jsx)("div",{className:"flex flex-col gap-2",children:["opus","sonnet","haiku"].map(e=>(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"w-16 flex-none text-[12px] capitalize text-text-subtle",children:e}),es[e]?(0,t.jsxs)("span",{className:"flex flex-1 items-center gap-1.5 rounded border border-accent bg-accent-soft px-2 py-1 font-mono text-[12px] text-accent",children:[(0,t.jsx)("span",{className:"flex-1 truncate",children:es[e]}),(0,t.jsx)("button",{onClick:()=>eo(t=>({...t,[e]:""})),className:"flex-none hover:text-danger","aria-label":"clear",children:(0,t.jsx)(l.Icon,{name:"close",size:12})})]}):(0,t.jsxs)("button",{onClick:()=>{ee(e),X(!0)},className:"flex items-center gap-1 rounded border border-dashed border-border px-2.5 py-1 text-[12px] text-text-subtle hover:border-accent hover:text-accent",children:[(0,t.jsx)(l.Icon,{name:"add",size:13})," Add model"]})]},e))})}):(0,t.jsx)(u,{label:"Models",top:!0,children:(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"flex min-h-[34px] flex-wrap gap-1.5 rounded-brand border border-border-subtle bg-bg px-2 py-1.5",children:0===et.length?(0,t.jsx)("span",{className:"text-[12px] text-text-subtle",children:"No models — add one below."}):et.map(e=>(0,t.jsxs)("span",{onClick:()=>ei(t=>t===e?"":e),title:e===ea?"active model — click to clear":"click to set active",className:`inline-flex cursor-pointer items-center gap-1 rounded px-2 py-0.5 text-[12px] transition-colors ${e===ea?"border border-accent bg-accent-soft text-accent":"border border-transparent bg-surface-2 text-text-muted hover:border-border"}`,children:[e===ea&&(0,t.jsx)(l.Icon,{name:"star",size:11}),(0,t.jsx)("span",{className:"tnum",children:e}),(0,t.jsx)("button",{onClick:t=>{t.stopPropagation(),en(t=>t.filter(t=>t!==e)),ei(t=>t===e?"":t)},className:"hover:text-danger","aria-label":`Remove ${e}`,children:(0,t.jsx)(l.Icon,{name:"close",size:12})})]},e))}),(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,t.jsxs)(o.Button,{type:"button",variant:"ghost",onClick:()=>X(!0),children:[(0,t.jsx)(l.Icon,{name:"add",size:15})," Add models"]}),(0,t.jsx)("span",{className:"text-[11.5px] text-text-subtle",children:ea?(0,t.jsxs)(t.Fragment,{children:["active: ",(0,t.jsx)("span",{className:"tnum text-accent",children:ea})]}):et.length?"click a chip to set active":""})]})]})}),L.configured&&L.baseUrl&&(0,t.jsx)(u,{label:"Current",children:(0,t.jsx)("span",{className:"tnum text-[11.5px] text-text-subtle",children:L.baseUrl})}),(0,t.jsxs)("div",{className:"flex items-center gap-2 border-t border-border-subtle pt-3",children:[(0,t.jsxs)(o.Button,{onClick:ed,disabled:"apply"===U,children:[(0,t.jsx)(l.Icon,{name:"apply"===U?"progress_activity":"bolt",size:15}),"apply"===U?"Applying…":L.configured?"Re-apply":"Apply config"]}),L.configured&&(0,t.jsx)(o.Button,{variant:"ghost",onClick:ep,disabled:"reset"===U,children:"reset"===U?"Removing…":"Reset"}),K&&(0,t.jsx)("span",{className:"text-[12px] text-text-subtle",children:K}),L.path&&(0,t.jsx)("span",{className:"ml-auto truncate tnum text-[11px] text-text-subtle",children:L.path})]})]}):(0,t.jsx)("p",{className:"text-[12.5px] text-text-muted",children:"Not found on this machine. Install it (above) or paste the manual env below — then re-open this page."}):(0,t.jsx)("p",{className:"text-[12.5px] text-text-subtle",children:"Checking your machine…"})}),h.install&&(0,t.jsx)(i.RichCard,{header:(0,t.jsx)(i.CardTitle,{title:"Install"}),children:(0,t.jsx)(m,{text:h.install})}),(0,t.jsxs)(i.RichCard,{className:h.install?"":"lg:col-span-2",header:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.CardTitle,{title:"Environment",sub:"copy into your shell"}),b.keys.length>1&&(0,t.jsx)(o.Select,{value:String(j),onChange:e=>w(Number(e.target.value)),className:"max-w-[180px]",children:b.keys.map((e,n)=>(0,t.jsx)("option",{value:n,children:e.name||`key ${n+1}`},n))})]}),children:[(0,t.jsx)(m,{text:eg}),0===b.keys.length?(0,t.jsx)("p",{className:"mt-3 text-[12px] text-warning",children:"No gateway key set — auth is disabled. Add one under Endpoint, then it appears here."}):(0,t.jsxs)("p",{className:"mt-3 text-[12px] text-text-subtle",children:["Using key ",(0,t.jsx)("span",{className:"text-text-muted",children:b.keys[j]?.name||`#${j+1}`}),". The real value is filled in above."]})]}),eb&&(0,t.jsxs)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(i.CardTitle,{title:"Manual config",sub:"merge into ~/.config/opencode/opencode.json — every model listed"}),children:[0===eh.length?(0,t.jsx)("p",{className:"text-[12.5px] text-text-muted",children:"Add models above to see them listed here."}):(0,t.jsx)(m,{text:eb}),(0,t.jsx)("p",{className:"mt-3 text-[12px] text-text-subtle",children:"Apply does the same merge for you — it keeps any other providers and existing models, only adding these."})]}),ev&&(0,t.jsxs)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(i.CardTitle,{title:"Manual config",sub:"merge the env block into ~/.claude/settings.json"}),children:[(0,t.jsx)(m,{text:ev}),(0,t.jsx)("p",{className:"mt-3 text-[12px] text-text-subtle",children:"Apply does the same merge for you — it keeps the rest of your settings, only writing these env keys."})]}),!h.autoConfig&&(0,t.jsxs)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(i.CardTitle,{title:"Models to call",sub:"name a combo exactly this — the tool will hit it"}),children:[(0,t.jsx)("div",{className:"space-y-1.5",children:h.slots.map(e=>{let n=f.includes(e.alias);return(0,t.jsxs)("div",{className:"flex items-center gap-3 rounded-brand border border-border-subtle px-3 py-2",children:[(0,t.jsx)("span",{className:"w-32 flex-none text-[12px] text-text-subtle",children:e.label}),(0,t.jsx)(l.Icon,{name:"arrow_forward",size:14,className:"flex-none text-text-subtle"}),(0,t.jsx)("span",{className:"tnum truncate text-[13px] text-text",children:e.alias}),(0,t.jsx)("span",{className:"ml-auto flex flex-none items-center gap-2",children:n?(0,t.jsx)(s.Badge,{tone:"live",children:"ready"}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.Badge,{tone:"warn",children:"missing"}),(0,t.jsxs)("button",{type:"button",onClick:()=>g.push("/combos"),className:"inline-flex items-center gap-1 text-[12px] text-accent hover:underline",children:[(0,t.jsx)(l.Icon,{name:"add",size:13})," create"]})]})})]},e.alias)})}),f.length>0&&(0,t.jsxs)("p",{className:"mt-2.5 text-[11px] text-text-subtle",children:["Your combos: ",(0,t.jsx)("span",{className:"tnum text-text-muted",children:f.join(", ")})]})]}),(0,t.jsx)(i.RichCard,{className:"lg:col-span-2",header:(0,t.jsx)(i.CardTitle,{title:"Steps"}),children:(0,t.jsx)("ol",{className:"space-y-2.5",children:h.steps.map((e,n)=>(0,t.jsxs)("li",{className:"flex gap-2.5 text-[13px] text-text-muted",children:[(0,t.jsx)("span",{className:"flex h-5 w-5 flex-none items-center justify-center rounded-full bg-surface-2 tnum text-[11px] text-text",children:n+1}),e]},n))})})]}),Q&&Z&&(0,t.jsx)(r.ModelPicker,{title:`Pick model — ${Z}`,note:"Click a model to select it for this slot.",groups:V,selected:es[Z]?[es[Z]]:[],onToggle:e=>{eo(t=>({...t,[Z]:t[Z]===e?"":e})),X(!1),ee(null)},onClose:()=>{X(!1),ee(null)}}),Q&&!Z&&(0,t.jsx)(r.ModelPicker,{title:"Add models",note:"Click a model to add it, click again to remove. Then hit Apply.",groups:V,selected:et,onToggle:function(e){et.includes(e)?(en(t=>t.filter(t=>t!==e)),ea===e&&ei("")):(en(t=>[...t,e]),ea||ei(e))},onClose:()=>X(!1)})]})}])}]);
|