aigetwey 1.4.7 → 1.4.8
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 +38 -0
- package/README.md +46 -25
- package/dashboard/.next/standalone/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/.next/build-manifest.json +3 -3
- package/dashboard/.next/standalone/.next/server/app/(console)/combos/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/combos/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/config/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/config/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/console/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/console/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/endpoint/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/endpoint/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/keys/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/keys/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/providers/[id]/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/providers/[id]/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/providers/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/providers/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/quota/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/quota/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/tools/[id]/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/tools/[id]/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/tools/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/tools/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/usage/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/.next/server/app/(console)/usage/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/combos.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/combos.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/combos.segments/!KGNvbnNvbGUp/combos/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/combos.segments/!KGNvbnNvbGUp/combos.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/combos.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/combos.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/combos.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/combos.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/combos.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/config.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/config.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/config.segments/!KGNvbnNvbGUp/config/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/config.segments/!KGNvbnNvbGUp/config.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/config.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/config.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/config.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/config.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/config.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/console.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/console.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/console.segments/!KGNvbnNvbGUp/console/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/console.segments/!KGNvbnNvbGUp/console.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/console.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/console.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/console.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/console.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/console.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/endpoint.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/endpoint.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/endpoint.segments/!KGNvbnNvbGUp/endpoint/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/endpoint.segments/!KGNvbnNvbGUp/endpoint.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/endpoint.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/endpoint.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/endpoint.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/endpoint.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/endpoint.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/index.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/index.segments/!KGNvbnNvbGUp/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/index.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/keys.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/keys.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/keys.segments/!KGNvbnNvbGUp/keys/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/keys.segments/!KGNvbnNvbGUp/keys.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/keys.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/keys.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/keys.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/keys.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/keys.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/.next/server/app/login.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/login.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/providers.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/providers.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/providers.segments/!KGNvbnNvbGUp/providers/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/providers.segments/!KGNvbnNvbGUp/providers.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/providers.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/providers.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/providers.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/providers.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/quota.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/quota.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/quota.segments/!KGNvbnNvbGUp/quota/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/quota.segments/!KGNvbnNvbGUp/quota.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/quota.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/quota.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/quota.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/quota.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/quota.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/tools.html +1 -1
- package/dashboard/.next/standalone/.next/server/app/tools.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/tools.segments/!KGNvbnNvbGUp/tools/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/tools.segments/!KGNvbnNvbGUp/tools.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/tools.segments/!KGNvbnNvbGUp.segment.rsc +3 -3
- package/dashboard/.next/standalone/.next/server/app/tools.segments/_full.segment.rsc +5 -5
- package/dashboard/.next/standalone/.next/server/app/tools.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/.next/server/app/tools.segments/_index.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/app/tools.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/.next/server/chunks/[root-of-the-server]__0das32e._.js +1 -1
- package/dashboard/.next/standalone/.next/server/chunks/ssr/_0g1n0z2._.js +1 -1
- package/dashboard/.next/standalone/.next/server/chunks/ssr/_1jt-_lv._.js +3 -0
- package/dashboard/.next/standalone/.next/server/chunks/ssr/src_13mfqac._.js +1 -1
- package/dashboard/.next/standalone/.next/server/chunks/ssr/src_components_0dgasfb._.js +1 -1
- package/dashboard/.next/standalone/.next/server/chunks/ssr/src_components_1z4akp5._.js +1 -1
- package/dashboard/.next/standalone/.next/server/chunks/ssr/src_components_ProviderDetail_tsx_06sxu0r._.js +1 -1
- package/dashboard/.next/standalone/.next/server/chunks/ssr/src_components_ProviderManager_tsx_09d2dzw._.js +1 -1
- package/dashboard/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/dashboard/.next/standalone/.next/server/pages/404.html +1 -1
- package/dashboard/.next/standalone/.next/server/pages/500.html +1 -1
- package/dashboard/.next/standalone/.next/static/chunks/{1o3ruivohs5gd.js → 0a2dpmmnxcati.js} +1 -1
- package/dashboard/.next/standalone/.next/static/chunks/{0zdns9uijk264.js → 0v6gyc7bvg8qn.js} +1 -1
- package/dashboard/.next/standalone/.next/static/chunks/0x7oom3qi0g1v.js +1 -0
- package/dashboard/.next/standalone/.next/static/chunks/{16g5ijkdzzgmk.js → 1b8cxegje1-0s.js} +1 -1
- package/dashboard/.next/standalone/.next/static/chunks/1gz48b5ucrqx3.css +3 -0
- package/dashboard/.next/standalone/.next/static/chunks/28vuqx9hjn8z7.js +1 -0
- package/dashboard/.next/standalone/.next/static/chunks/2ppfeqv-8bdjp.js +1 -0
- package/dashboard/.next/standalone/.next/static/chunks/{29u15x0h3zg8t.js → 3cwf_8nn90yl2.js} +1 -1
- package/dist/cli/tray/trayWin.js +67 -0
- package/dist/cli/tray/trayWin.js.map +1 -0
- package/dist/config.js +38 -4
- package/dist/config.js.map +1 -1
- package/dist/core/embeddings.js +156 -0
- package/dist/core/embeddings.js.map +1 -0
- package/dist/providers/capabilities.js +1 -1
- package/dist/providers/capabilities.js.map +1 -1
- package/dist/routes/admin.js +28 -1
- package/dist/routes/admin.js.map +1 -1
- package/dist/routes/v1.js +54 -0
- package/dist/routes/v1.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/tray/trayWin.ts +85 -0
- package/src/config.ts +51 -5
- package/src/core/embeddings.ts +194 -0
- package/src/providers/capabilities.ts +1 -1
- package/src/routes/admin.ts +32 -0
- package/src/routes/v1.ts +45 -0
- package/dashboard/.next/standalone/.next/server/chunks/ssr/_0p90gyy._.js +0 -3
- package/dashboard/.next/standalone/.next/static/chunks/08-n5lb85_j1a.css +0 -3
- package/dashboard/.next/standalone/.next/static/chunks/0anfgqf1k-eo4.js +0 -1
- package/dashboard/.next/standalone/.next/static/chunks/0qzv-tyyzo7kl.js +0 -1
- package/dashboard/.next/standalone/.next/static/chunks/3mauivz8vrva9.js +0 -1
- /package/dashboard/.next/standalone/.next/static/{SYmUHnzWs5TL-n0AY-k0m → 4LgzWtISJ5Fy5C7TcKCJm}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/.next/static/{SYmUHnzWs5TL-n0AY-k0m → 4LgzWtISJ5Fy5C7TcKCJm}/_clientMiddlewareManifest.js +0 -0
- /package/dashboard/.next/standalone/.next/static/{SYmUHnzWs5TL-n0AY-k0m → 4LgzWtISJ5Fy5C7TcKCJm}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[33405,(e,t,n)=>{t.exports=e.x("child_process",()=>require("child_process"))},24868,(e,t,n)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},46786,(e,t,n)=>{t.exports=e.x("os",()=>require("os"))},33793,e=>{"use strict";var t=e.i(47909),n=e.i(74017),a=e.i(96250),i=e.i(59756),o=e.i(61916),r=e.i(74677),s=e.i(69741),p=e.i(16795),u=e.i(87718),c=e.i(95169),l=e.i(47587),d=e.i(66012),g=e.i(70101),m=e.i(26937),h=e.i(10372),x=e.i(93695);e.i(20232);var w=e.i(220),v=e.i(89171),k=e.i(33405),O=e.i(24361),f=e.i(24868),F=e.i(14747),W=e.i(46786);function R(e,t){return RegExp("^"+e.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i").test(t)}let y={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},C={"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}},b={"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}}},E=[{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}}],A=(0,O.promisify)(k.exec);async function _(e){try{let t="win32"===W.default.platform()?"TURBOPACK unreachable":`which ${e}`;return await A(t,{windowsHide:!0}),!0}catch{return!1}}async function N(e){try{return await f.default.access(e),!0}catch{return!1}}function T(e){try{return JSON.parse(e.replace(/,(\s*[}\]])/g,"$1"))}catch{return null}}let D=()=>F.default.join(W.default.homedir(),".claude","settings.json"),I=["ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","API_TIMEOUT_MS"];async function P(e){if(!e.base)return{error:"base is required"};let t=D();await f.default.mkdir(F.default.dirname(t),{recursive:!0});let n={};try{n=T(await f.default.readFile(t,"utf-8"))??{}}catch{n={}}let a={ANTHROPIC_BASE_URL:e.base};e.key&&(a.ANTHROPIC_AUTH_TOKEN=e.key),e.models?.opus&&(a.ANTHROPIC_DEFAULT_OPUS_MODEL=e.models.opus),e.models?.sonnet&&(a.ANTHROPIC_DEFAULT_SONNET_MODEL=e.models.sonnet),e.models?.haiku&&(a.ANTHROPIC_DEFAULT_HAIKU_MODEL=e.models.haiku);let i={...n,hasCompletedOnboarding:!0,env:{...n.env??{},...a}};return await f.default.writeFile(t,JSON.stringify(i,null,2)),{success:!0,path:t}}let U="aigetwey",q=()=>F.default.join(W.default.homedir(),".config","opencode"),S=()=>F.default.join(q(),"opencode.json");async function H(e){let t=(e.models??[]).filter(Boolean);if(!e.base||0===t.length)return{error:"base and at least one model are required"};let n=S();await f.default.mkdir(q(),{recursive:!0});let a={};try{a=T(await f.default.readFile(n,"utf-8"))??{}}catch{a={}}let i=e.base.endsWith("/v1")?e.base:`${e.base}/v1`,o=a.provider??{},r=o[U]??{npm:"@ai-sdk/openai-compatible",options:{},models:{}};r.options={...r.options??{},baseURL:i,apiKey:e.key||"aigetwey"};let s=r.models??{};for(let e of t)s[e]={name:e,modalities:function(e){let t=e.indexOf("/"),n=function(e,t){if(!t)return{...y};if(e&&b[e]?.[t])return{...y,...b[e][t]};let n=(t.includes("/")?t.split("/").pop():t)??t;if(C[n])return{...y,...C[n]};if(C[t])return{...y,...C[t]};for(let{pattern:e,caps:a}of E)if(R(e,n)||R(e,t))return{...y,...a};return{...y}}(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}}(e)};r.models=s,o[U]=r,a.provider=o;let p=e.active&&t.includes(e.active)?e.active:t[0];return a.model=`${U}/${p}`,await f.default.writeFile(n,JSON.stringify(a,null,2)),{success:!0,path:n}}let L={"claude-code":{status:async function(){if(!(await _("claude")||await N(D())))return{installed:!1};let e=null;try{e=T(await f.default.readFile(D(),"utf-8"))}catch{e=null}let t=e?.env??{};return{installed:!0,configured:"string"==typeof t.ANTHROPIC_BASE_URL,path:D(),baseUrl:t.ANTHROPIC_BASE_URL??null,modelSlots:{opus:t.ANTHROPIC_DEFAULT_OPUS_MODEL??null,sonnet:t.ANTHROPIC_DEFAULT_SONNET_MODEL??null,haiku:t.ANTHROPIC_DEFAULT_HAIKU_MODEL??null}}},apply:e=>P(e),reset:async function(){let e,t=D();try{e=T(await f.default.readFile(t,"utf-8"))??{}}catch{return{success:!0}}let n=e.env;if(n){for(let e of I)delete n[e];0===Object.keys(n).length&&delete e.env}return await f.default.writeFile(t,JSON.stringify(e,null,2)),{success:!0}}},opencode:{status:async function(){if(!(await _("opencode")||await N(S())))return{installed:!1};let e=null;try{e=T(await f.default.readFile(S(),"utf-8"))}catch{e=null}let t=e?.provider?.[U],n=t?.models?Object.keys(t.models):[],a="string"==typeof e?.model&&e.model.startsWith(`${U}/`)?e.model.slice(U.length+1):null;return{installed:!0,configured:!!t,path:S(),models:n,activeModel:a,baseUrl:t?.options?.baseURL??null}},apply:e=>H(e),reset:async function(){let e,t=S();try{e=T(await f.default.readFile(t,"utf-8"))??{}}catch{return{success:!0}}let n=e.provider;return n&&delete n[U],"string"==typeof e.model&&e.model.startsWith(`${U}/`)&&delete e.model,await f.default.writeFile(t,JSON.stringify(e,null,2)),{success:!0}}}};async function M(e,t){let{tool:n}=await t.params,a=L[n];if(!a)return v.NextResponse.json({installed:!1,auto:!1});try{return v.NextResponse.json({auto:!0,...await a.status()})}catch(e){return v.NextResponse.json({error:e.message},{status:500})}}async function j(e,t){let{tool:n}=await t.params,a=L[n];if(!a)return v.NextResponse.json({error:"tool does not support auto-config"},{status:400});try{let t=await e.json(),n=await a.apply(t);if(n.error)return v.NextResponse.json(n,{status:400});return v.NextResponse.json(n)}catch(e){return v.NextResponse.json({error:e.message},{status:500})}}async function $(e,t){let{tool:n}=await t.params,a=L[n];if(!a)return v.NextResponse.json({error:"tool does not support auto-config"},{status:400});try{return v.NextResponse.json(await a.reset())}catch(e){return v.NextResponse.json({error:e.message},{status:500})}}e.s(["DELETE",0,$,"GET",0,M,"POST",0,j],58851);var K=e.i(58851);let B=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/cli-detect/[tool]/route",pathname:"/api/cli-detect/[tool]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/cli-detect/[tool]/route.ts",nextConfigOutput:"standalone",userland:K,...{}}),{workAsyncStorage:z,workUnitAsyncStorage:J,serverHooks:G}=B;async function V(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),B.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/cli-detect/[tool]/route";v=v.replace(/\/index$/,"")||"/";let k=await B.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!k)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:O,deploymentId:f,params:F,nextConfig:W,parsedUrl:R,isDraftMode:y,prerenderManifest:C,routerServerContext:b,isOnDemandRevalidate:E,revalidateOnlyGenerated:A,resolvedPathname:_,clientReferenceManifest:N,serverActionsManifest:T}=k,D=(0,s.normalizeAppPath)(v),I=!!(C.dynamicRoutes[D]||C.routes[_]),P=async()=>((null==b?void 0:b.render404)?await b.render404(e,t,R,!1):t.end("This page could not be found"),null);if(I&&!y){let e=!!C.routes[_],t=C.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(W.adapterPath)return await P();throw new x.NoFallbackError}}let U=null;!I||B.isDev||y||(U="/index"===(U=_)?"/":U);let q=!0===B.isDev||!I,S=I&&!q;T&&N&&(0,r.setManifestsSingleton)({page:v,clientReferenceManifest:N,serverActionsManifest:T});let H=e.method||"GET",L=(0,o.getTracer)(),M=L.getActiveScopeSpan(),j=!!(null==b?void 0:b.isWrappedByNextServer),$=!!(0,i.getRequestMeta)(e,"minimalMode"),K=(0,i.getRequestMeta)(e,"incrementalCache")||await B.getIncrementalCache(e,W,C,$);null==K||K.resetRequestCache(),globalThis.__incrementalCache=K;let z={params:F,previewProps:C.preview,renderOpts:{experimental:{authInterrupts:!!W.experimental.authInterrupts},cacheComponents:!!W.cacheComponents,supportsDynamicResponse:q,incrementalCache:K,cacheLifeProfiles:W.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,a,i)=>B.onRequestError(e,t,a,i,b)},sharedContext:{buildId:O,deploymentId:f}},J=new p.NodeNextRequest(e),G=new p.NodeNextResponse(t),V=u.NextRequestAdapter.fromNodeNextRequest(J,(0,u.signalFromNodeResponse)(t));try{let i,r=async e=>B.handle(V,z).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=L.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=n.get("next.route");if(a){let t=`${H} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",a),i.updateName(t))}else e.updateName(`${H} ${v}`)}),s=async i=>{var o,s;let p=async({previousCacheEntry:n})=>{try{if(!$&&E&&A&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await r(i);e.fetchMetrics=z.renderOpts.fetchMetrics;let s=z.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let p=z.renderOpts.collectedTags;if(!I)return await (0,d.sendResponse)(J,G,o,z.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(o.headers);p&&(t[h.NEXT_CACHE_TAGS_HEADER]=p),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,a=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:z.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:a}}}}catch(t){throw(null==n?void 0:n.isStale)&&await B.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,l.getRevalidateReason)({isStaticGeneration:S,isOnDemandRevalidate:E})},!1,b),t}},u=await B.handleResponse({req:e,nextConfig:W,cacheKey:U,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:E,revalidateOnlyGenerated:A,responseGenerator:p,waitUntil:a.waitUntil,isMinimalMode:$});if(!I)return null;if((null==u||null==(o=u.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(s=u.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});$||t.setHeader("x-nextjs-cache",E?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),y&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,g.fromNodeOutgoingHttpHeaders)(u.value.headers);return $&&I||c.delete(h.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,m.getCacheControlHeader)(u.cacheControl)),await (0,d.sendResponse)(J,G,new Response(u.value.body,{headers:c,status:u.value.status||200})),null};j&&M?await s(M):(i=L.getActiveScopeSpan(),await L.withPropagatedContext(e.headers,()=>L.trace(c.BaseServerSpan.handleRequest,{spanName:`${H} ${v}`,kind:o.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},s),void 0,!j))}catch(t){if(t instanceof x.NoFallbackError||await B.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,l.getRevalidateReason)({isStaticGeneration:S,isOnDemandRevalidate:E})},!1,b),I)throw t;return await (0,d.sendResponse)(J,G,new Response(null,{status:500})),null}}e.s(["handler",0,V,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:J})},"routeModule",0,B,"serverHooks",0,G,"workAsyncStorage",0,z,"workUnitAsyncStorage",0,J],33793)}];
|
|
1
|
+
module.exports=[33405,(e,t,n)=>{t.exports=e.x("child_process",()=>require("child_process"))},24868,(e,t,n)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},46786,(e,t,n)=>{t.exports=e.x("os",()=>require("os"))},33793,e=>{"use strict";var t=e.i(47909),n=e.i(74017),a=e.i(96250),i=e.i(59756),o=e.i(61916),r=e.i(74677),s=e.i(69741),p=e.i(16795),u=e.i(87718),c=e.i(95169),l=e.i(47587),d=e.i(66012),g=e.i(70101),m=e.i(26937),h=e.i(10372),x=e.i(93695);e.i(20232);var w=e.i(220),v=e.i(89171),k=e.i(33405),f=e.i(24361),O=e.i(24868),F=e.i(14747),W=e.i(46786);function R(e,t){return RegExp("^"+e.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i").test(t)}let y={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},C={"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}},b={"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}}},E=[{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}}],A=(0,f.promisify)(k.exec);async function _(e){try{W.default.platform();let t=`which ${e}`,n=process.env;return await A(t,{windowsHide:!0,env:n}),!0}catch{return!1}}async function N(e){try{return await O.default.access(e),!0}catch{return!1}}function T(e){try{return JSON.parse(e.replace(/,(\s*[}\]])/g,"$1"))}catch{return null}}let D=()=>F.default.join(W.default.homedir(),".claude","settings.json"),I=["ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","API_TIMEOUT_MS"];async function P(e){if(!e.base)return{error:"base is required"};let t=D();await O.default.mkdir(F.default.dirname(t),{recursive:!0});let n={};try{n=T(await O.default.readFile(t,"utf-8"))??{}}catch{n={}}let a={ANTHROPIC_BASE_URL:e.base};e.key&&(a.ANTHROPIC_AUTH_TOKEN=e.key),e.models?.opus&&(a.ANTHROPIC_DEFAULT_OPUS_MODEL=e.models.opus),e.models?.sonnet&&(a.ANTHROPIC_DEFAULT_SONNET_MODEL=e.models.sonnet),e.models?.haiku&&(a.ANTHROPIC_DEFAULT_HAIKU_MODEL=e.models.haiku);let i={...n,hasCompletedOnboarding:!0,env:{...n.env??{},...a}};return await O.default.writeFile(t,JSON.stringify(i,null,2)),{success:!0,path:t}}let U="aigetwey",q=()=>F.default.join(W.default.homedir(),".config","opencode"),S=()=>F.default.join(q(),"opencode.json");async function H(e){let t=(e.models??[]).filter(Boolean);if(!e.base||0===t.length)return{error:"base and at least one model are required"};let n=S();await O.default.mkdir(q(),{recursive:!0});let a={};try{a=T(await O.default.readFile(n,"utf-8"))??{}}catch{a={}}let i=e.base.endsWith("/v1")?e.base:`${e.base}/v1`,o=a.provider??{},r=o[U]??{npm:"@ai-sdk/openai-compatible",options:{},models:{}};r.options={...r.options??{},baseURL:i,apiKey:e.key||"aigetwey"};let s=r.models??{};for(let e of t)s[e]={name:e,modalities:function(e){let t=e.indexOf("/"),n=function(e,t){if(!t)return{...y};if(e&&b[e]?.[t])return{...y,...b[e][t]};let n=(t.includes("/")?t.split("/").pop():t)??t;if(C[n])return{...y,...C[n]};if(C[t])return{...y,...C[t]};for(let{pattern:e,caps:a}of E)if(R(e,n)||R(e,t))return{...y,...a};return{...y}}(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}}(e)};r.models=s,o[U]=r,a.provider=o;let p=e.active&&t.includes(e.active)?e.active:t[0];return a.model=`${U}/${p}`,await O.default.writeFile(n,JSON.stringify(a,null,2)),{success:!0,path:n}}let L={"claude-code":{status:async function(){if(!(await _("claude")||await N(D())))return{installed:!1};let e=null;try{e=T(await O.default.readFile(D(),"utf-8"))}catch{e=null}let t=e?.env??{};return{installed:!0,configured:"string"==typeof t.ANTHROPIC_BASE_URL,path:D(),baseUrl:t.ANTHROPIC_BASE_URL??null,modelSlots:{opus:t.ANTHROPIC_DEFAULT_OPUS_MODEL??null,sonnet:t.ANTHROPIC_DEFAULT_SONNET_MODEL??null,haiku:t.ANTHROPIC_DEFAULT_HAIKU_MODEL??null}}},apply:e=>P(e),reset:async function(){let e,t=D();try{e=T(await O.default.readFile(t,"utf-8"))??{}}catch{return{success:!0}}let n=e.env;if(n){for(let e of I)delete n[e];0===Object.keys(n).length&&delete e.env}return await O.default.writeFile(t,JSON.stringify(e,null,2)),{success:!0}}},opencode:{status:async function(){if(!(await _("opencode")||await N(S())))return{installed:!1};let e=null;try{e=T(await O.default.readFile(S(),"utf-8"))}catch{e=null}let t=e?.provider?.[U],n=t?.models?Object.keys(t.models):[],a="string"==typeof e?.model&&e.model.startsWith(`${U}/`)?e.model.slice(U.length+1):null;return{installed:!0,configured:!!t,path:S(),models:n,activeModel:a,baseUrl:t?.options?.baseURL??null}},apply:e=>H(e),reset:async function(){let e,t=S();try{e=T(await O.default.readFile(t,"utf-8"))??{}}catch{return{success:!0}}let n=e.provider;return n&&delete n[U],"string"==typeof e.model&&e.model.startsWith(`${U}/`)&&delete e.model,await O.default.writeFile(t,JSON.stringify(e,null,2)),{success:!0}}}};async function M(e,t){let{tool:n}=await t.params,a=L[n];if(!a)return v.NextResponse.json({installed:!1,auto:!1});try{return v.NextResponse.json({auto:!0,...await a.status()})}catch(e){return v.NextResponse.json({error:e.message},{status:500})}}async function j(e,t){let{tool:n}=await t.params,a=L[n];if(!a)return v.NextResponse.json({error:"tool does not support auto-config"},{status:400});try{let t=await e.json(),n=await a.apply(t);if(n.error)return v.NextResponse.json(n,{status:400});return v.NextResponse.json(n)}catch(e){return v.NextResponse.json({error:e.message},{status:500})}}async function $(e,t){let{tool:n}=await t.params,a=L[n];if(!a)return v.NextResponse.json({error:"tool does not support auto-config"},{status:400});try{return v.NextResponse.json(await a.reset())}catch(e){return v.NextResponse.json({error:e.message},{status:500})}}e.s(["DELETE",0,$,"GET",0,M,"POST",0,j],58851);var K=e.i(58851);let B=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/cli-detect/[tool]/route",pathname:"/api/cli-detect/[tool]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/cli-detect/[tool]/route.ts",nextConfigOutput:"standalone",userland:K,...{}}),{workAsyncStorage:z,workUnitAsyncStorage:J,serverHooks:G}=B;async function V(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),B.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/cli-detect/[tool]/route";v=v.replace(/\/index$/,"")||"/";let k=await B.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!k)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:f,deploymentId:O,params:F,nextConfig:W,parsedUrl:R,isDraftMode:y,prerenderManifest:C,routerServerContext:b,isOnDemandRevalidate:E,revalidateOnlyGenerated:A,resolvedPathname:_,clientReferenceManifest:N,serverActionsManifest:T}=k,D=(0,s.normalizeAppPath)(v),I=!!(C.dynamicRoutes[D]||C.routes[_]),P=async()=>((null==b?void 0:b.render404)?await b.render404(e,t,R,!1):t.end("This page could not be found"),null);if(I&&!y){let e=!!C.routes[_],t=C.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(W.adapterPath)return await P();throw new x.NoFallbackError}}let U=null;!I||B.isDev||y||(U="/index"===(U=_)?"/":U);let q=!0===B.isDev||!I,S=I&&!q;T&&N&&(0,r.setManifestsSingleton)({page:v,clientReferenceManifest:N,serverActionsManifest:T});let H=e.method||"GET",L=(0,o.getTracer)(),M=L.getActiveScopeSpan(),j=!!(null==b?void 0:b.isWrappedByNextServer),$=!!(0,i.getRequestMeta)(e,"minimalMode"),K=(0,i.getRequestMeta)(e,"incrementalCache")||await B.getIncrementalCache(e,W,C,$);null==K||K.resetRequestCache(),globalThis.__incrementalCache=K;let z={params:F,previewProps:C.preview,renderOpts:{experimental:{authInterrupts:!!W.experimental.authInterrupts},cacheComponents:!!W.cacheComponents,supportsDynamicResponse:q,incrementalCache:K,cacheLifeProfiles:W.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,a,i)=>B.onRequestError(e,t,a,i,b)},sharedContext:{buildId:f,deploymentId:O}},J=new p.NodeNextRequest(e),G=new p.NodeNextResponse(t),V=u.NextRequestAdapter.fromNodeNextRequest(J,(0,u.signalFromNodeResponse)(t));try{let i,r=async e=>B.handle(V,z).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let n=L.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=n.get("next.route");if(a){let t=`${H} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),i&&i!==e&&(i.setAttribute("http.route",a),i.updateName(t))}else e.updateName(`${H} ${v}`)}),s=async i=>{var o,s;let p=async({previousCacheEntry:n})=>{try{if(!$&&E&&A&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await r(i);e.fetchMetrics=z.renderOpts.fetchMetrics;let s=z.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let p=z.renderOpts.collectedTags;if(!I)return await (0,d.sendResponse)(J,G,o,z.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,g.toNodeOutgoingHttpHeaders)(o.headers);p&&(t[h.NEXT_CACHE_TAGS_HEADER]=p),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,a=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:z.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:a}}}}catch(t){throw(null==n?void 0:n.isStale)&&await B.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,l.getRevalidateReason)({isStaticGeneration:S,isOnDemandRevalidate:E})},!1,b),t}},u=await B.handleResponse({req:e,nextConfig:W,cacheKey:U,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:E,revalidateOnlyGenerated:A,responseGenerator:p,waitUntil:a.waitUntil,isMinimalMode:$});if(!I)return null;if((null==u||null==(o=u.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(s=u.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});$||t.setHeader("x-nextjs-cache",E?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),y&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,g.fromNodeOutgoingHttpHeaders)(u.value.headers);return $&&I||c.delete(h.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,m.getCacheControlHeader)(u.cacheControl)),await (0,d.sendResponse)(J,G,new Response(u.value.body,{headers:c,status:u.value.status||200})),null};j&&M?await s(M):(i=L.getActiveScopeSpan(),await L.withPropagatedContext(e.headers,()=>L.trace(c.BaseServerSpan.handleRequest,{spanName:`${H} ${v}`,kind:o.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},s),void 0,!j))}catch(t){if(t instanceof x.NoFallbackError||await B.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,l.getRevalidateReason)({isStaticGeneration:S,isOnDemandRevalidate:E})},!1,b),I)throw t;return await (0,d.sendResponse)(J,G,new Response(null,{status:500})),null}}e.s(["handler",0,V,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:J})},"routeModule",0,B,"serverHooks",0,G,"workAsyncStorage",0,z,"workUnitAsyncStorage",0,J],33793)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=%5Broot-of-the-server%5D__0das32e._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[7078,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d={primary:"bg-accent text-accent-ink shadow-warm hover:bg-accent-hover border border-transparent font-semibold",ghost:"bg-transparent text-text-muted border border-border hover:text-text hover:border-text-subtle",danger:"bg-transparent text-text-muted border border-border hover:text-danger hover:border-danger/50"};a.s(["Button",0,function({variant:a="primary",className:c,...e}){return(0,b.jsx)("button",{className:`inline-flex items-center justify-center gap-1.5 rounded-brand px-3.5 py-2 text-[13px] font-medium transition-colors duration-150 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed ${d[a]}${c?` ${c}`:""}`,...e})},"Field",0,function({label:a,hint:c,children:d}){return(0,b.jsxs)("label",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("span",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:[a,c&&(0,b.jsxs)("span",{className:"ml-1.5 lowercase tracking-normal text-text-subtle/70",children:["· ",c]})]}),d]})},"Input",0,function({className:a,...c}){return(0,b.jsx)("input",{className:`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none transition-colors${a?` ${a}`:""}`,...c})},"Select",0,function({className:a,value:d,onChange:e,children:f,...g}){let[h,i]=(0,c.useState)(!1),j=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(!h)return;let a=a=>{j.current&&!j.current.contains(a.target)&&i(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[h]);let k=[];c.Children.forEach(f,a=>{(0,c.isValidElement)(a)&&"option"===a.type
|
|
1
|
+
module.exports=[7078,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d={primary:"bg-accent text-accent-ink shadow-warm hover:bg-accent-hover border border-transparent font-semibold",ghost:"bg-transparent text-text-muted border border-border hover:text-text hover:border-text-subtle",danger:"bg-transparent text-text-muted border border-border hover:text-danger hover:border-danger/50"};a.s(["Button",0,function({variant:a="primary",className:c,...e}){return(0,b.jsx)("button",{className:`inline-flex items-center justify-center gap-1.5 rounded-brand px-3.5 py-2 text-[13px] font-medium transition-colors duration-150 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed ${d[a]}${c?` ${c}`:""}`,...e})},"Field",0,function({label:a,hint:c,children:d}){return(0,b.jsxs)("label",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("span",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:[a,c&&(0,b.jsxs)("span",{className:"ml-1.5 lowercase tracking-normal text-text-subtle/70",children:["· ",c]})]}),d]})},"Input",0,function({className:a,...c}){return(0,b.jsx)("input",{className:`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none transition-colors${a?` ${a}`:""}`,...c})},"Select",0,function({className:a,value:d,onChange:e,children:f,...g}){let[h,i]=(0,c.useState)(!1),j=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(!h)return;let a=a=>{j.current&&!j.current.contains(a.target)&&i(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[h]);let k=[];c.Children.forEach(f,a=>{if((0,c.isValidElement)(a)&&"option"===a.type){let b;b="string"==typeof a.props.children?a.props.children:Array.isArray(a.props.children)?a.props.children.map(a=>null==a?"":String(a)).join(""):String(a.props.value??""),k.push({value:String(a.props.value??""),label:b})}});let l=k.find(a=>a.value===String(d??"")),m=l?.label??"";return(0,b.jsxs)("div",{className:`relative${a?` ${a}`:""}`,ref:j,children:[(0,b.jsxs)("button",{type:"button",onClick:()=>i(a=>!a),className:"flex w-full items-center justify-between rounded-brand border border-border bg-bg px-3 py-2 text-left text-[13px] text-text transition-colors focus:border-accent focus:outline-none",children:[(0,b.jsx)("span",{className:"truncate",children:m}),(0,b.jsx)("svg",{className:`ml-2 h-4 w-4 shrink-0 text-text-subtle transition-transform ${h?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,b.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),h&&(0,b.jsx)("div",{className:"absolute left-0 right-0 top-full z-50 mt-1 overflow-hidden rounded-brand border border-border bg-surface shadow-lg",children:k.map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>{e?.({target:{value:a.value}}),i(!1)},className:`flex w-full items-center gap-2 px-3 py-2 text-left text-[12.5px] transition-colors ${a.value===String(d??"")?"bg-accent/10 text-accent":"text-text-muted hover:bg-surface-2 hover:text-text"}`,children:a.label},a.value))})]})}])},39118,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},88644,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},54427,(a,b,c)=>{"use strict";function d(){let a,b,c=new Promise((c,d)=>{a=c,b=d});return{resolve:a,reject:b,promise:c}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createPromiseWithResolvers",{enumerable:!0,get:function(){return d}})},93482,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(7078);a.s(["default",0,function(){let a=(0,d.useRouter)(),[f,g]=(0,c.useState)(""),[h,i]=(0,c.useState)(""),[j,k]=(0,c.useState)(!1);async function l(b){b.preventDefault(),k(!0),i("");let c=await fetch("/api/login",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({password:f})});c.ok?(a.replace("/"),a.refresh()):(i((await c.json().catch(()=>({}))).error??"login failed"),k(!1))}return(0,b.jsx)("main",{className:"grid min-h-screen place-items-center p-6",children:(0,b.jsxs)("form",{onSubmit:l,className:"w-full max-w-[360px] rounded-brand-lg border border-border bg-surface p-7 shadow-elevated",children:[(0,b.jsxs)("div",{className:"mb-5 flex items-center gap-2.5",children:[(0,b.jsx)("span",{className:"flex h-7 w-7 flex-none items-center justify-center rounded-brand bg-accent text-[14px] font-bold text-accent-ink shadow-warm",children:"a"}),(0,b.jsx)("span",{className:"text-[16px] font-semibold tracking-tight text-text",children:"aigetwey"})]}),(0,b.jsx)("h1",{className:"text-[19px] font-semibold tracking-tight text-text",children:"Welcome back"}),(0,b.jsx)("p",{className:"mb-6 mt-1 text-[13px] text-text-muted",children:"Enter the admin password to continue."}),(0,b.jsx)(e.Field,{label:"Password",children:(0,b.jsx)(e.Input,{type:"password",value:f,autoFocus:!0,onChange:a=>g(a.target.value)})}),h&&(0,b.jsx)("div",{className:"mt-2.5 text-[12px] text-danger",children:h}),(0,b.jsx)(e.Button,{type:"submit",disabled:j,className:"mt-6 w-full",children:j?"Connecting…":"Connect"})]})})}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=_0g1n0z2._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[88644,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},39118,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},54427,(a,b,c)=>{"use strict";function d(){let a,b,c=new Promise((c,d)=>{a=c,b=d});return{resolve:a,reject:b,promise:c}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createPromiseWithResolvers",{enumerable:!0,get:function(){return d}})},7078,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d={primary:"bg-accent text-accent-ink shadow-warm hover:bg-accent-hover border border-transparent font-semibold",ghost:"bg-transparent text-text-muted border border-border hover:text-text hover:border-text-subtle",danger:"bg-transparent text-text-muted border border-border hover:text-danger hover:border-danger/50"};a.s(["Button",0,function({variant:a="primary",className:c,...e}){return(0,b.jsx)("button",{className:`inline-flex items-center justify-center gap-1.5 rounded-brand px-3.5 py-2 text-[13px] font-medium transition-colors duration-150 cursor-pointer disabled:opacity-45 disabled:cursor-not-allowed ${d[a]}${c?` ${c}`:""}`,...e})},"Field",0,function({label:a,hint:c,children:d}){return(0,b.jsxs)("label",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("span",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:[a,c&&(0,b.jsxs)("span",{className:"ml-1.5 lowercase tracking-normal text-text-subtle/70",children:["· ",c]})]}),d]})},"Input",0,function({className:a,...c}){return(0,b.jsx)("input",{className:`w-full rounded-brand border border-border bg-bg px-3 py-2 text-[13px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none transition-colors${a?` ${a}`:""}`,...c})},"Select",0,function({className:a,value:d,onChange:e,children:f,...g}){let[h,i]=(0,c.useState)(!1),j=(0,c.useRef)(null);(0,c.useEffect)(()=>{if(!h)return;let a=a=>{j.current&&!j.current.contains(a.target)&&i(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[h]);let k=[];c.Children.forEach(f,a=>{if((0,c.isValidElement)(a)&&"option"===a.type){let b;b="string"==typeof a.props.children?a.props.children:Array.isArray(a.props.children)?a.props.children.map(a=>null==a?"":String(a)).join(""):String(a.props.value??""),k.push({value:String(a.props.value??""),label:b})}});let l=k.find(a=>a.value===String(d??"")),m=l?.label??"";return(0,b.jsxs)("div",{className:`relative${a?` ${a}`:""}`,ref:j,children:[(0,b.jsxs)("button",{type:"button",onClick:()=>i(a=>!a),className:"flex w-full items-center justify-between rounded-brand border border-border bg-bg px-3 py-2 text-left text-[13px] text-text transition-colors focus:border-accent focus:outline-none",children:[(0,b.jsx)("span",{className:"truncate",children:m}),(0,b.jsx)("svg",{className:`ml-2 h-4 w-4 shrink-0 text-text-subtle transition-transform ${h?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,b.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),h&&(0,b.jsx)("div",{className:"absolute left-0 right-0 top-full z-50 mt-1 overflow-hidden rounded-brand border border-border bg-surface shadow-lg",children:k.map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>{e?.({target:{value:a.value}}),i(!1)},className:`flex w-full items-center gap-2 px-3 py-2 text-left text-[12.5px] transition-colors ${a.value===String(d??"")?"bg-accent/10 text-accent":"text-text-muted hover:bg-surface-2 hover:text-text"}`,children:a.label},a.value))})]})}])},56173,a=>{"use strict";async function b(a,b,c){let d;try{d=await fetch(`/api/gw${b}`,{method:a,headers:void 0!==c?{"content-type":"application/json"}:{},body:void 0!==c?JSON.stringify(c):void 0})}catch(a){return{ok:!1,status:0,data:null,error:a.message}}let e=await d.text(),f=null;try{f=e?JSON.parse(e):null}catch{f=null}if(!d.ok){let a=f?.error??`request failed (${d.status})`;return{ok:!1,status:d.status,data:f,error:a}}return{ok:!0,status:d.status,data:f}}async function c(a,b,c){let d;try{d=await fetch(b,{method:a,headers:void 0!==c?{"content-type":"application/json"}:{},body:void 0!==c?JSON.stringify(c):void 0})}catch(a){return{ok:!1,status:0,data:null,error:a.message}}let e=await d.text(),f=e?JSON.parse(e):null;if(!d.ok){let a=f?.error??`request failed (${d.status})`;return{ok:!1,status:d.status,data:f,error:a}}return{ok:!0,status:d.status,data:f}}a.s(["account",0,{changePassword:(a,b)=>c("POST","/api/password",{current:a,next:b})},"adminApi",0,{providers:()=>b("GET","/admin/providers"),budgets:()=>b("GET","/admin/budgets"),models:()=>b("GET","/admin/models"),keys:()=>b("GET","/admin/keys"),keysUsage:()=>b("GET","/admin/keys/usage"),setBudget:a=>b("PUT","/admin/budgets",a),clearBudget:a=>b("DELETE",`/admin/budgets/${encodeURIComponent(a)}`),addProvider:a=>b("POST","/admin/providers",a),editProvider:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}`,c),renameProvider:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/rename`,{id:c}),removeProvider:a=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}`),addKey:(a,c,d)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/keys`,{key:c,name:d}),editKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/${c}`,d),removeKey:(a,c)=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/keys/${c}`),revealKey:(a,c)=>b("GET",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/reveal`),addModel:(a,c,d)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models`,{model:c,...d}),addModels:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models`,{models:c}),removeModel:(a,c)=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/models?model=${encodeURIComponent(c)}`),clearModels:a=>b("DELETE",`/admin/providers/${encodeURIComponent(a)}/models`),pricing:()=>b("GET","/admin/pricing"),setModelPrice:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/models/price`,{model:c,...d}),testProvider:a=>b("POST",`/admin/providers/${encodeURIComponent(a)}/test`),testKey:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/test`),checkKey:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/keys/check`,{key:c}),testModel:(a,c)=>b("POST",`/admin/providers/${encodeURIComponent(a)}/models/test?model=${encodeURIComponent(c)}`),validateProvider:a=>b("POST","/admin/providers/validate",a),discoverModels:a=>b("POST",`/admin/providers/${encodeURIComponent(a)}/connect`),exportProviders:()=>"/api/gw/admin/providers/export",importProviders:a=>b("POST","/admin/providers/import",{providers:a}),reorderProvider:(a,c)=>b("PUT","/admin/providers/reorder",{from:a,to:c}),reorderKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/reorder`,{from:c,to:d}),toggleKey:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/keys/${c}/toggle`,{enabled:d}),setProviderStrategy:(a,c,d)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/strategy`,{strategy:c,sticky:d}),setProviderDisabled:(a,c)=>b("PUT",`/admin/providers/${encodeURIComponent(a)}/disabled`,{disabled:c}),setRoute:(a,c)=>b("PUT",`/admin/routes/${encodeURIComponent(a)}`,c),removeRoute:a=>b("DELETE",`/admin/routes/${encodeURIComponent(a)}`),endpoint:()=>b("GET","/admin/endpoint"),setRtk:a=>b("PUT","/admin/endpoint/rtk",{enabled:a}),setCaveman:a=>b("PUT","/admin/endpoint/caveman",{level:a}),setPonytail:a=>b("PUT","/admin/endpoint/ponytail",{level:a}),addServerKey:(a,c)=>b("POST","/admin/endpoint/keys",{key:a,name:c}),editServerKey:(a,c)=>b("PUT",`/admin/endpoint/keys/${a}`,{name:c}),setServerKeyScope:(a,c)=>b("PUT",`/admin/endpoint/keys/${a}/scope`,c),removeServerKey:a=>b("DELETE",`/admin/endpoint/keys/${a}`),revealServerKey:a=>b("GET",`/admin/endpoint/keys/${a}/reveal`),setHeadroom:a=>b("PUT","/admin/endpoint/headroom",a),headroomStatus:()=>b("GET","/admin/headroom/status"),headroomStart:()=>b("POST","/admin/headroom/start"),headroomStop:()=>b("POST","/admin/headroom/stop"),putConfig:a=>b("PUT","/admin/config",{text:a}),version:()=>b("GET","/admin/version"),shutdown:()=>b("POST","/admin/shutdown")},"cliConfig",0,{status:a=>c("GET",`/api/cli-detect/${encodeURIComponent(a)}`),apply:(a,b)=>c("POST",`/api/cli-detect/${encodeURIComponent(a)}`,b),reset:a=>c("DELETE",`/api/cli-detect/${encodeURIComponent(a)}`)}])},73858,a=>{"use strict";var b=a.i(87924),c=a.i(7078),d=a.i(93026);a.s(["ConfirmModal",0,function({title:a,message:e,confirmLabel:f="Delete",onConfirm:g,onCancel:h,busy:i}){return(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6",onClick:h,children:(0,b.jsxs)("div",{className:"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 shadow-elevated",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"flex h-7 w-7 items-center justify-center rounded-full bg-danger/10 text-danger",children:(0,b.jsx)(d.Icon,{name:"warning",size:16})}),(0,b.jsx)("h2",{className:"text-[15px] font-semibold text-text",children:a})]}),(0,b.jsx)("p",{className:"mb-4 text-[12.5px] text-text-muted",children:e}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(c.Button,{variant:"ghost",onClick:h,children:"Cancel"}),(0,b.jsx)(c.Button,{variant:"danger",disabled:i,onClick:g,children:f})]})]})})}])},68862,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944),e=a.i(93026);let f=[{href:"/",label:"Endpoint",icon:"api"},{href:"/keys",label:"Access Keys",icon:"key"},{href:"/providers",label:"Providers",icon:"dns"},{href:"/combos",label:"Combos",icon:"layers"},{href:"/usage",label:"Usage",icon:"bar_chart"},{href:"/quota",label:"Budgets",icon:"data_usage"},{href:"/tools",label:"CLI Tools",icon:"terminal"}],g=[{href:"/console",label:"Server Console",icon:"receipt_long"},{href:"/config",label:"Settings",icon:"settings"}];a.s(["Rail",0,function(){let a=(0,d.usePathname)(),h=(0,d.useRouter)();async function i(){await fetch("/api/logout",{method:"POST"}),h.replace("/login"),h.refresh()}let j=d=>{let f,g="/"===(f=d.href)?"/"===a||a.startsWith("/endpoint"):a===f||a.startsWith(`${f}/`);return(0,b.jsx)(c.default,{href:d.href,"data-label":d.label,className:`rail-icon${g?" rail-icon-active":""}`,"aria-label":d.label,children:(0,b.jsx)(e.Icon,{name:d.icon,size:20,fill:g})},d.href)};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(c.default,{href:"/",className:"rail-brand","aria-label":"aigetwey",children:(0,b.jsxs)("svg",{viewBox:"0 0 512 512",width:"26",height:"26","aria-hidden":!0,children:[(0,b.jsx)("text",{x:"120",y:"338",fontFamily:"ui-sans-serif, Arial, sans-serif",fontSize:"260",fontWeight:"800",textAnchor:"middle",fill:"#14140f",children:"a"}),(0,b.jsxs)("g",{fill:"none",stroke:"#14140f",strokeWidth:"34",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("polyline",{points:"276,182 352,256 276,330"}),(0,b.jsx)("polyline",{points:"346,182 422,256 346,330"})]})]})}),(0,b.jsxs)("nav",{className:"flex flex-col items-center gap-3",children:[f.map(j),(0,b.jsx)("div",{className:"rail-divider"}),g.map(j)]}),(0,b.jsx)("button",{onClick:i,"data-label":"Disconnect",className:"rail-icon","aria-label":"Disconnect",children:(0,b.jsx)(e.Icon,{name:"logout",size:19})})]})}])},8255,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(93026),f=a.i(1221),g=a.i(73858),h=a.i(56173);let i={"":"Endpoint",endpoint:"Endpoint",keys:"Access Keys",providers:"Providers",combos:"Combos",usage:"Usage",quota:"Budgets",tools:"CLI Tools",console:"Server Console",config:"Settings"},j="npm i -g aigetwey@latest --prefer-online";function k({current:a,latest:d,onClose:f,onShutdown:g}){let[h,i]=(0,c.useState)(!1);function l(){navigator.clipboard.writeText(j).then(()=>{i(!0),setTimeout(()=>i(!1),2e3)})}return(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6",onClick:f,children:(0,b.jsxs)("div",{className:"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 shadow-elevated",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("div",{className:"mb-4 flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)("span",{className:"flex h-9 w-9 flex-none items-center justify-center rounded-full bg-warning/10 text-warning",children:(0,b.jsx)(e.Icon,{name:"arrow_upward",size:19})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-[14px] font-semibold text-text",children:"Update available"}),(0,b.jsxs)("p",{className:"text-[12px] text-text-muted",children:["v",a," → ",(0,b.jsxs)("span",{className:"text-warning font-medium",children:["v",d]})]})]})]}),(0,b.jsx)("button",{onClick:f,className:"text-text-subtle hover:text-text",children:(0,b.jsx)(e.Icon,{name:"close",size:17})})]}),(0,b.jsx)("p",{className:"mb-3 text-[12.5px] text-text-muted",children:"Run this command in your terminal to update:"}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-brand border border-border bg-bg px-3 py-2",children:[(0,b.jsx)("code",{className:"flex-1 text-[12px] text-text",children:j}),(0,b.jsx)("button",{onClick:l,className:"flex-none text-text-subtle transition-colors hover:text-text",title:"Copy command",children:(0,b.jsx)(e.Icon,{name:h?"check":"content_copy",size:14})})]}),(0,b.jsx)("p",{className:"mt-3 text-[11.5px] text-text-subtle",children:"Shut down the gateway first, then run the command above, then restart."}),(0,b.jsxs)("div",{className:"mt-4 flex gap-2",children:[(0,b.jsxs)("button",{onClick:()=>{l(),g()},className:"flex flex-1 items-center justify-center gap-1.5 rounded-brand border border-warning/30 bg-warning/10 px-3 py-2 text-[12.5px] font-medium text-warning transition-colors hover:bg-warning/20",children:[(0,b.jsx)(e.Icon,{name:"content_copy",size:14}),"Copy & Shut down"]}),(0,b.jsx)("button",{onClick:f,className:"rounded-brand border border-border px-3 py-2 text-[12.5px] text-text-muted transition-colors hover:text-text",children:"Later"})]})]})})}a.s(["TopBar",0,function(){let a=(0,d.usePathname)(),{theme:l,toggle:m}=(0,f.useTheme)(),n="/"===a?"":a.split("/")[1]??"",o=i[n]??n,[p,q]=(0,c.useState)(null),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(!1),[v,w]=(0,c.useState)(!1),[x,y]=(0,c.useState)(!1);async function z(){y(!0),await h.adminApi.shutdown(),w(!0),u(!1),s(!1),y(!1)}return(0,c.useEffect)(()=>{h.adminApi.version().then(a=>{a.ok&&a.data&&q(a.data)})},[]),(0,b.jsxs)("header",{className:"console-topbar",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[13px]",children:[(0,b.jsx)("span",{className:"text-text-subtle",children:"aigetwey"}),(0,b.jsx)("span",{className:"text-text-subtle",children:"/"}),(0,b.jsx)("span",{className:"font-medium text-text",children:o})]}),(0,b.jsxs)("div",{className:"ml-auto flex items-center gap-2.5",children:[p&&(p.updateAvailable?(0,b.jsxs)("button",{onClick:()=>s(!0),className:"flex items-center gap-1.5 rounded-full border border-warning/30 bg-warning/10 px-2.5 py-1 text-[11px] font-medium text-warning transition-colors hover:bg-warning/20",children:[(0,b.jsx)(e.Icon,{name:"arrow_upward",size:12}),"v",p.current," → ",p.latest]}):(0,b.jsxs)("span",{className:"text-[11px] text-text-subtle",title:"You're on the latest version",children:["v",p.current]})),(0,b.jsxs)("button",{onClick:m,className:`group relative flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-text ${"dark"===l?"hover:animate-[shake_0.4s_ease-in-out]":""}`,"aria-label":"Toggle theme",title:"dark"===l?"FLASHBANG OUT!":"Switch to dark mode",children:["dark"===l&&(0,b.jsx)("span",{className:"pointer-events-none absolute inset-0 rounded-full opacity-0 group-hover:animate-[flash_0.3s_ease-out] group-hover:opacity-100 bg-white/80"}),"dark"===l?(0,b.jsxs)("svg",{viewBox:"0 -1 24 24",className:"h-[18px] w-[18px]",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("rect",{x:"9.5",y:"3.5",width:"5",height:"3.5",rx:"1"}),(0,b.jsx)("path",{d:"M12 3.5V2.5"}),(0,b.jsx)("path",{d:"M10.5 3.5c0-1 3-1 3 0"}),(0,b.jsx)("circle",{cx:"14.5",cy:"2.8",r:"0.8"}),(0,b.jsx)("rect",{x:"8.5",y:"7",width:"7",height:"10.5",rx:"1.5"}),(0,b.jsx)("line",{x1:"8.5",y1:"12.25",x2:"15.5",y2:"12.25"}),(0,b.jsx)("line",{x1:"6.5",y1:"12.25",x2:"4.5",y2:"12.25"}),(0,b.jsx)("line",{x1:"17.5",y1:"12.25",x2:"19.5",y2:"12.25"}),(0,b.jsx)("line",{x1:"6.8",y1:"9.8",x2:"5.2",y2:"8.8"}),(0,b.jsx)("line",{x1:"17.2",y1:"9.8",x2:"18.8",y2:"8.8"}),(0,b.jsx)("line",{x1:"6.8",y1:"14.7",x2:"5.2",y2:"15.7"}),(0,b.jsx)("line",{x1:"17.2",y1:"14.7",x2:"18.8",y2:"15.7"})]}):(0,b.jsx)(e.Icon,{name:"dark_mode",size:18})]}),(0,b.jsx)("button",{onClick:()=>u(!0),className:"flex h-8 w-8 items-center justify-center rounded-full text-text-subtle transition-colors hover:text-danger","aria-label":"Shut down gateway",title:"Shut down the gateway",children:(0,b.jsx)(e.Icon,{name:"power_settings_new",size:18})}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-border bg-surface py-1 pl-1 pr-3",children:[(0,b.jsx)("span",{className:"flex h-6 w-6 items-center justify-center rounded-full bg-accent",children:(0,b.jsxs)("svg",{viewBox:"0 0 512 512",className:"h-4 w-4",children:[(0,b.jsx)("text",{x:"135",y:"360",fontFamily:"ui-sans-serif, Inter, Arial, sans-serif",fontSize:"320",fontWeight:"800",textAnchor:"middle",fill:"#0f0f0e",children:"a"}),(0,b.jsxs)("g",{fill:"none",stroke:"#0f0f0e",strokeWidth:"38",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("polyline",{points:"280,170 370,256 280,342"}),(0,b.jsx)("polyline",{points:"355,170 445,256 355,342"})]})]})}),(0,b.jsx)("span",{className:"text-[12px] font-medium text-text-muted",children:"aigetwey"})]})]}),r&&p?.updateAvailable&&(0,b.jsx)(k,{current:p.current,latest:p.latest,onClose:()=>s(!1),onShutdown:z}),t&&(0,b.jsx)(g.ConfirmModal,{title:"Shut down gateway?",message:"The gateway process will stop and all requests will fail until you restart it. The dashboard stays up but can't reach the gateway.",confirmLabel:"Shut down",busy:x,onConfirm:z,onCancel:()=>u(!1)}),v&&(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-6",children:(0,b.jsxs)("div",{className:"w-full max-w-sm rounded-brand-lg border border-border bg-surface p-5 text-center shadow-elevated",children:[(0,b.jsx)("span",{className:"mx-auto mb-2 flex h-9 w-9 items-center justify-center rounded-full bg-danger/10 text-danger",children:(0,b.jsx)(e.Icon,{name:"power_settings_new",size:20})}),(0,b.jsx)("h2",{className:"text-[15px] font-semibold text-text",children:"Gateway stopped"}),(0,b.jsxs)("p",{className:"mt-1 text-[12.5px] text-text-muted",children:["Run ",(0,b.jsx)("code",{className:"rounded bg-surface-2 px-1",children:j})," then restart with ",(0,b.jsx)("code",{className:"rounded bg-surface-2 px-1",children:"aigetwey"}),"."]})]})})]})}])}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=_1jt-_lv._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[58918,a=>{"use strict";var b=a.i(87924);a.s(["Empty",0,function({children:a}){return(0,b.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:a})},"Stat",0,function({label:a,value:c,sub:d}){return(0,b.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,b.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:a}),(0,b.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:c}),d&&(0,b.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:d})]})},"fmt",0,{int:a=>a.toLocaleString("en-US"),compact:a=>Math.abs(a)>=1e6?`${(a/1e6).toFixed(1)}M`:Math.abs(a)>=1e3?`${(a/1e3).toFixed(1)}K`:String(Math.round(a)),cost:a=>0===a?"$0":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`,time:a=>new Date(a).toLocaleString("en-US",{hour12:!1}),date(a){let b=new Date(a);return`${String(b.getDate()).padStart(2,"0")}/${String(b.getMonth()+1).padStart(2,"0")}/${b.getFullYear()}`},ago(a){let b=Math.max(0,Math.round((Date.now()-a)/1e3));return b<60?`${b}s`:b<3600?`${Math.floor(b/60)}m`:b<86400?`${Math.floor(b/3600)}h`:`${Math.floor(b/86400)}d`},duration(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;if(b<3600)return`${Math.floor(b/60)}m ${b%60}s`;let c=Math.floor(b/3600),d=Math.floor(b%3600/60);if(c<24)return`${c}h ${d}m`;let e=Math.floor(c/24);return`${e}d ${c%24}h`}}])},2693,a=>{"use strict";var b=a.i(87924);let c={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",danger:"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 d({tone:a="neutral",children:e,className:f}){return(0,b.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${c[a]}${f?` ${f}`:""}`,children:e})}a.s(["Badge",0,d,"FormatBadge",0,function({format:a}){return(0,b.jsx)(d,{tone:"info",children:a})}])},70200,a=>{"use strict";let b=[{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:(a,b)=>[{name:"ANTHROPIC_BASE_URL",value:a},{name:"ANTHROPIC_API_KEY",value:b||"<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:(a,b)=>[{name:"OPENAI_BASE_URL",value:`${a}/v1`},{name:"OPENAI_API_KEY",value:b||"<your-gateway-key>"}],steps:["Add an OpenAI-compatible provider with the gateway /v1 base URL.","Pick a combo alias as the model."]}];a.s(["CLI_TOOLS",0,b,"toolById",0,function(a){return b.find(b=>b.id===a)}])},90976,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(2693),f=a.i(93026),g=a.i(58918),h=a.i(70200);a.s(["CliToolConfig",0,function(){let[a,i]=(0,c.useState)(null),[j,k]=(0,c.useState)("");return((0,c.useEffect)(()=>{(async()=>{let a=await fetch("/api/gw/admin/endpoint");if(!a.ok)return k("could not reach the gateway");i((await a.json()).port)})()},[]),j)?(0,b.jsx)(g.Empty,{children:j}):(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-6",children:[(0,b.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"CLI Tools"}),(0,b.jsxs)("p",{className:"mt-1 text-[13px] text-text-muted",children:["Point your coding tools at the gateway. ",a?`Listening on port ${a}.`:""]})]}),(0,b.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:h.CLI_TOOLS.map(a=>(0,b.jsxs)(d.default,{href:`/tools/${a.id}`,className:"group rounded-brand-lg border border-border bg-surface p-4 shadow-soft transition-colors hover:border-text-subtle",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2.5",children:[(0,b.jsx)("span",{className:"flex h-8 w-8 items-center justify-center rounded-brand bg-surface-2 text-text-muted group-hover:text-text",children:(0,b.jsx)(f.Icon,{name:a.icon,size:18})}),(0,b.jsx)("span",{className:"text-[14px] font-semibold text-text",children:a.name})]}),(0,b.jsx)(e.Badge,{tone:"
|
|
1
|
+
module.exports=[58918,a=>{"use strict";var b=a.i(87924);a.s(["Empty",0,function({children:a}){return(0,b.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:a})},"Stat",0,function({label:a,value:c,sub:d}){return(0,b.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,b.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:a}),(0,b.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:c}),d&&(0,b.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:d})]})},"fmt",0,{int:a=>a.toLocaleString("en-US"),compact:a=>Math.abs(a)>=1e6?`${(a/1e6).toFixed(1)}M`:Math.abs(a)>=1e3?`${(a/1e3).toFixed(1)}K`:String(Math.round(a)),cost:a=>0===a?"$0":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`,time:a=>new Date(a).toLocaleString("en-US",{hour12:!1}),date(a){let b=new Date(a);return`${String(b.getDate()).padStart(2,"0")}/${String(b.getMonth()+1).padStart(2,"0")}/${b.getFullYear()}`},ago(a){let b=Math.max(0,Math.round((Date.now()-a)/1e3));return b<60?`${b}s`:b<3600?`${Math.floor(b/60)}m`:b<86400?`${Math.floor(b/3600)}h`:`${Math.floor(b/86400)}d`},duration(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;if(b<3600)return`${Math.floor(b/60)}m ${b%60}s`;let c=Math.floor(b/3600),d=Math.floor(b%3600/60);if(c<24)return`${c}h ${d}m`;let e=Math.floor(c/24);return`${e}d ${c%24}h`}}])},2693,a=>{"use strict";var b=a.i(87924);let c={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",danger:"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 d({tone:a="neutral",children:e,className:f}){return(0,b.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${c[a]}${f?` ${f}`:""}`,children:e})}a.s(["Badge",0,d,"FormatBadge",0,function({format:a}){return(0,b.jsx)(d,{tone:"info",children:a})}])},70200,a=>{"use strict";let b=[{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:(a,b)=>[{name:"ANTHROPIC_BASE_URL",value:a},{name:"ANTHROPIC_API_KEY",value:b||"<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:(a,b)=>[{name:"OPENAI_BASE_URL",value:`${a}/v1`},{name:"OPENAI_API_KEY",value:b||"<your-gateway-key>"}],steps:["Add an OpenAI-compatible provider with the gateway /v1 base URL.","Pick a combo alias as the model."]}];a.s(["CLI_TOOLS",0,b,"toolById",0,function(a){return b.find(b=>b.id===a)}])},90976,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(38246),e=a.i(2693),f=a.i(93026),g=a.i(58918),h=a.i(70200);a.s(["CliToolConfig",0,function(){let[a,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(""),[l,m]=(0,c.useState)({});return((0,c.useEffect)(()=>{(async()=>{let a=await fetch("/api/gw/admin/endpoint");if(!a.ok)return k("could not reach the gateway");i((await a.json()).port),m(Object.fromEntries(await Promise.all(h.CLI_TOOLS.map(async a=>{try{let b=await fetch(`/api/cli-detect/${a.id}`),c=await b.json();return[a.id,c.installed?"detected":"not-detected"]}catch{return[a.id,"not-detected"]}}))))})()},[]),j)?(0,b.jsx)(g.Empty,{children:j}):(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-6",children:[(0,b.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"CLI Tools"}),(0,b.jsxs)("p",{className:"mt-1 text-[13px] text-text-muted",children:["Point your coding tools at the gateway. ",a?`Listening on port ${a}.`:""]})]}),(0,b.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:h.CLI_TOOLS.map(a=>{let c=l[a.id]??"loading";return(0,b.jsxs)(d.default,{href:`/tools/${a.id}`,className:"group rounded-brand-lg border border-border bg-surface p-4 shadow-soft transition-colors hover:border-text-subtle",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-2.5",children:[(0,b.jsx)("span",{className:"flex h-8 w-8 items-center justify-center rounded-brand bg-surface-2 text-text-muted group-hover:text-text",children:(0,b.jsx)(f.Icon,{name:a.icon,size:18})}),(0,b.jsx)("span",{className:"text-[14px] font-semibold text-text",children:a.name})]}),"loading"===c?(0,b.jsx)(e.Badge,{tone:"neutral",children:"…"}):"detected"===c?(0,b.jsx)(e.Badge,{tone:"live",children:"detected"}):(0,b.jsx)(e.Badge,{tone:"neutral",children:"not detected"})]}),(0,b.jsx)("p",{className:"mt-2 text-[12.5px] text-text-muted",children:a.blurb}),(0,b.jsxs)("span",{className:"mt-3 inline-flex items-center gap-1 text-[12px] text-text-subtle group-hover:text-text",children:["Setup ",(0,b.jsx)(f.Icon,{name:"arrow_forward",size:14})]})]},a.id)})})]})}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_13mfqac._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[58918,a=>{"use strict";var b=a.i(87924);a.s(["Empty",0,function({children:a}){return(0,b.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:a})},"Stat",0,function({label:a,value:c,sub:d}){return(0,b.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,b.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:a}),(0,b.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:c}),d&&(0,b.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:d})]})},"fmt",0,{int:a=>a.toLocaleString("en-US"),compact:a=>Math.abs(a)>=1e6?`${(a/1e6).toFixed(1)}M`:Math.abs(a)>=1e3?`${(a/1e3).toFixed(1)}K`:String(Math.round(a)),cost:a=>0===a?"$0":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`,time:a=>new Date(a).toLocaleString("en-US",{hour12:!1}),date(a){let b=new Date(a);return`${String(b.getDate()).padStart(2,"0")}/${String(b.getMonth()+1).padStart(2,"0")}/${b.getFullYear()}`},ago(a){let b=Math.max(0,Math.round((Date.now()-a)/1e3));return b<60?`${b}s`:b<3600?`${Math.floor(b/60)}m`:b<86400?`${Math.floor(b/3600)}h`:`${Math.floor(b/86400)}d`},duration(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;if(b<3600)return`${Math.floor(b/60)}m ${b%60}s`;let c=Math.floor(b/3600),d=Math.floor(b%3600/60);if(c<24)return`${c}h ${d}m`;let e=Math.floor(c/24);return`${e}d ${c%24}h`}}])},85732,a=>{"use strict";var b=a.i(87924);a.s(["CardTitle",0,function({title:a,sub:c,icon:d}){return(0,b.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[d,(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-[14px] font-semibold tracking-tight text-text",children:a}),c&&(0,b.jsx)("div",{className:"truncate text-[12px] text-text-muted",children:c})]})]})},"RichCard",0,function({header:a,footer:c,children:d,className:e}){return(0,b.jsxs)("section",{className:`overflow-hidden rounded-brand-lg border border-border bg-surface shadow-soft${e?` ${e}`:""}`,children:[a&&(0,b.jsx)("header",{className:"flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-3",children:a}),(0,b.jsx)("div",{className:"p-4",children:d}),c&&(0,b.jsx)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:c})]})}])},8378,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(56173),e=a.i(85732),f=a.i(7078),g=a.i(93026),h=a.i(58918);let i=["off","lite","full","ultra"];function j({ep:a,hr:h,refresh:i}){let l=a.headroom,[m,o]=(0,c.useState)(l.url),[p,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(""),[t,u]=(0,c.useState)(null);async function v(a,b){q(a),s(""),u(null);let c=await b();q(""),c.ok||s(c.error??"action failed"),await i()}async function w(){q("check"),s(""),u(null);let a=await d.adminApi.headroomStatus();(q(""),await i(),a.ok&&a.data)?u(a.data.running?{ok:!0,text:`proxy is up at ${a.data.url}`}:{ok:!1,text:`no proxy responding at ${a.data.url}`}):u({ok:!1,text:a.error??"could not reach the gateway"})}return(0,c.useEffect)(()=>o(l.url),[l.url]),(0,b.jsx)(e.RichCard,{className:"lg:col-span-2",header:(0,b.jsx)(e.CardTitle,{title:"Headroom",sub:"external context-compression proxy"}),children:(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-[12px]",children:[(0,b.jsx)(n,{tone:h?.installed?"live":"neutral",children:h?.installed?"installed":"not installed"}),(0,b.jsx)(n,{tone:h?.running?"live":"warn",children:h?.running?"proxy running":"proxy down"}),(0,b.jsx)(n,{tone:h?.python?"info":"neutral",children:h?.python?`python ${h.python}`:"no python ≥3.10"}),h?.managedPid?(0,b.jsxs)("span",{className:"tnum text-text-subtle",children:["pid ",h.managedPid]}):null]}),(0,b.jsx)(k,{label:"Enable headroom",desc:"Compress the full context through the proxy before each request.",on:l.enabled,busy:"enable"===p,disabled:!h?.running&&!l.enabled,onChange:a=>v("enable",()=>d.adminApi.setHeadroom({enabled:a}))}),(0,b.jsx)(k,{label:"Compress user messages",desc:"Also squeeze user turns, not just tool/assistant context.",on:l.compress_user_messages,busy:"cum"===p,disabled:!h?.running&&!l.enabled,onChange:a=>v("cum",()=>d.adminApi.setHeadroom({compress_user_messages:a}))}),(0,b.jsxs)("div",{className:"flex items-end gap-2",children:[(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Proxy URL"}),(0,b.jsx)(f.Input,{value:m,onChange:a=>o(a.target.value),placeholder:"http://localhost:8787",className:"font-mono text-[12.5px]"})]}),(0,b.jsx)(f.Button,{variant:"ghost",disabled:m.trim()===l.url||"url"===p,onClick:()=>v("url",()=>d.adminApi.setHeadroom({url:m.trim()})),children:"Save URL"})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)(f.Button,{disabled:!h?.canStart||h?.running||!!p,onClick:async()=>{await v("start",()=>d.adminApi.headroomStart()),await w()},children:[(0,b.jsx)(g.Icon,{name:"start"===p?"sync":"play_arrow",size:16,className:"start"===p?"animate-spin":""}),"start"===p?"Starting…":"Start proxy"]}),(0,b.jsxs)(f.Button,{variant:"danger",disabled:!h?.managedPid||"stop"===p,onClick:()=>v("stop",()=>d.adminApi.headroomStop()),children:[(0,b.jsx)(g.Icon,{name:"stop",size:16})," Stop"]}),(0,b.jsxs)(f.Button,{variant:"ghost",disabled:"check"===p,onClick:w,children:[(0,b.jsx)(g.Icon,{name:"sync",size:16})," ","check"===p?"Checking…":"Check"]}),h&&!h.installed&&(0,b.jsxs)("span",{className:"text-[11px] text-text-subtle",children:["Headroom isn’t installed. Get it from"," ",(0,b.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,b.jsx)("code",{className:"rounded bg-surface-2 px-1",children:"pipx install git+https://github.com/chopratejas/headroom"})," ","— then re-open this page."]}),h?.installed&&!h.localUrl&&(0,b.jsx)("span",{className:"text-[11px] text-text-subtle",children:"URL isn’t loopback — start that proxy yourself."})]}),r&&(0,b.jsx)("p",{className:"text-[12px] text-danger",children:r}),t&&(0,b.jsxs)("p",{className:`flex items-center gap-1 text-[12px] ${t.ok?"text-success":"text-danger"}`,children:[(0,b.jsx)(g.Icon,{name:t.ok?"check_circle":"error",size:14})," ",t.text]})]})})}function k({label:a,desc:c,on:d,busy:e,disabled:f,onChange:g}){let h=e||f;return(0,b.jsxs)("div",{className:`flex items-center justify-between gap-4 ${h?"opacity-40":""}`,children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[13px] font-semibold text-text",children:a}),(0,b.jsx)("div",{className:"text-[12px] text-text-muted",children:c})]}),(0,b.jsx)("button",{disabled:h,onClick:()=>g(!d),className:`relative h-6 w-11 flex-none rounded-full transition-colors ${d?"bg-accent":"bg-surface-3"}`,"aria-pressed":d,children:(0,b.jsx)("span",{className:`absolute left-0.5 top-0.5 h-5 w-5 rounded-full bg-bg transition-transform ${d?"translate-x-5":"translate-x-0"}`})})]})}function l({label:a,desc:c,value:d,busy:e,onChange:f}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[13px] font-semibold text-text",children:a}),"off"!==d&&(0,b.jsx)(n,{tone:"info",children:d})]}),(0,b.jsx)("div",{className:"text-[12px] text-text-muted",children:c})]}),(0,b.jsx)("div",{className:"flex flex-none items-center gap-1 rounded-full border border-border bg-surface p-1",children:i.map(a=>(0,b.jsx)("button",{disabled:e,onClick:()=>f(a),className:`rounded-full px-2.5 py-1 text-[11.5px] font-medium transition-colors ${d===a?"bg-surface-2 text-text":"text-text-muted hover:text-text"}`,children:a},a))})]})}let m={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 n({tone:a="neutral",children:c,className:d}){return(0,b.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${m[a]}${d?` ${d}`:""}`,children:c})}function o(){let[a,d]=(0,c.useState)(null),[e,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(()=>!1);async function m(){h(!0),j("");let b=a?.enabled?"DELETE":"POST",c=await fetch("/api/gw/admin/tunnel",{method:b});c.ok?d(await c.json()):j((await c.json().catch(()=>({error:"failed"}))).error??"failed"),h(!1)}(0,c.useEffect)(()=>{fetch("/api/gw/admin/tunnel").then(async a=>{a.ok&&d(await a.json())})},[]);let n=a&&!a.enabled&&(!a.hasAuth||a.isDefaultPassword);return(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[a?.enabled?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-blue-500/10 px-2.5 py-0.5 text-[11px] font-medium text-blue-400",children:[(0,b.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-blue-400"}),"Tunnel"]}):(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-surface-alt px-2.5 py-0.5 text-[11px] font-medium text-text-muted",children:[(0,b.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-text-muted"}),"Tunnel"]}),e?(0,b.jsxs)("span",{className:"flex items-center gap-2 text-[12px] text-text-muted",children:[(0,b.jsxs)("svg",{className:"h-3.5 w-3.5 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,b.jsx)("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),(0,b.jsx)("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]}),a?.enabled?"Disconnecting…":"Starting tunnel… this may take a few seconds"]}):a?.enabled&&a.url?(0,b.jsxs)("button",{onClick:()=>void navigator.clipboard.writeText(a.url),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.url,(0,b.jsx)(g.Icon,{name:"content_copy",size:13})]}):null,!e&&(0,b.jsxs)(f.Button,{variant:a?.enabled?"ghost":"primary",disabled:e,onClick:m,className:"!px-2.5 !py-1 !text-[11.5px]",children:[(0,b.jsx)(g.Icon,{name:a?.enabled?"link_off":"link",size:12}),a?.enabled?"Disable":"Enable"]})]}),n&&!k&&(0,b.jsxs)("div",{className:"flex items-start gap-2 rounded-brand border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[12px] text-amber-400",children:[(0,b.jsx)(g.Icon,{name:"warning",size:14,className:"mt-0.5 shrink-0"}),(0,b.jsxs)("div",{className:"flex-1 space-y-0.5",children:[!a?.hasAuth&&(0,b.jsxs)("p",{children:["No API keys — ",(0,b.jsx)("a",{href:"/keys",className:"font-medium text-amber-300 underline underline-offset-2 decoration-amber-300/50 hover:decoration-amber-300",children:"add in Access Keys"})," before enabling tunnel."]}),a?.isDefaultPassword&&(0,b.jsxs)("p",{children:["Default password — ",(0,b.jsx)("a",{href:"/config",className:"font-medium text-amber-300 underline underline-offset-2 decoration-amber-300/50 hover:decoration-amber-300",children:"change in Settings"})," before enabling tunnel."]})]}),(0,b.jsx)("button",{onClick:function(){l(!0),localStorage.setItem("tunnel-warning-dismissed","1")},className:"shrink-0 p-0.5 rounded hover:bg-amber-500/10 text-amber-400/60 hover:text-amber-400",children:(0,b.jsx)(g.Icon,{name:"close",size:14})})]}),i&&(0,b.jsx)("p",{className:"mt-1.5 text-[11px] text-danger",children:i})]})}a.s(["EndpointView",0,function(){let[a,f]=(0,c.useState)(null),[i,m]=(0,c.useState)(""),[n,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(null),s=(0,c.useCallback)(async()=>{let a=await d.adminApi.endpoint();a.ok?(m(""),f(a.data)):m(a.error??"could not reach the gateway")},[]),t=(0,c.useCallback)(async()=>{let a=await d.adminApi.headroomStatus();a.ok&&r(a.data)},[]);async function u(a,b){p(a);let c=await b();p(""),c.ok?(m(""),await s()):m(c.error??"action failed")}if((0,c.useEffect)(()=>{s(),t()},[s,t]),i)return(0,b.jsx)(h.Empty,{children:i});if(!a)return(0,b.jsx)(h.Empty,{children:"Loading…"});let v=`http://localhost:${a.port}`;return(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-6",children:[(0,b.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"Endpoint"}),(0,b.jsx)("p",{className:"mt-1 text-[13px] text-text-muted",children:"Gateway address and token-saver toggles."})]}),(0,b.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,b.jsx)(e.RichCard,{className:"lg:col-span-2",header:(0,b.jsx)(e.CardTitle,{title:"Gateway URL",sub:"one endpoint for every client"}),children:(0,b.jsxs)("div",{className:"text-[13px] space-y-2.5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-emerald-500/10 px-2.5 py-0.5 text-[11px] font-medium text-emerald-400",children:[(0,b.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400"}),"Local"]}),(0,b.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(v)},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:[v,(0,b.jsx)(g.Icon,{name:"content_copy",size:13})]})]}),(0,b.jsx)(o,{})]})}),(0,b.jsx)(e.RichCard,{className:"lg:col-span-2",header:(0,b.jsx)(e.CardTitle,{title:"Token savers",sub:"applied to every request before routing"}),children:(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsx)(k,{label:"RTK",desc:"Compress bulky tool_result blocks (diffs, grep, listings) in the request.",on:a.rtk,busy:"rtk"===n,onChange:a=>u("rtk",()=>d.adminApi.setRtk(a))}),(0,b.jsx)(l,{label:"Caveman",desc:"Terser model output — drops filler, keeps substance.",value:a.caveman,busy:"caveman"===n,onChange:a=>u("caveman",()=>d.adminApi.setCaveman(a))}),(0,b.jsx)(l,{label:"Ponytail",desc:"Minimal, YAGNI code style — deletion over addition.",value:a.ponytail,busy:"ponytail"===n,onChange:a=>u("ponytail",()=>d.adminApi.setPonytail(a))})]})}),(0,b.jsx)(j,{ep:a,hr:q,refresh:async()=>{await s(),await t()}})]})]})}])}];
|
|
1
|
+
module.exports=[58918,a=>{"use strict";var b=a.i(87924);a.s(["Empty",0,function({children:a}){return(0,b.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:a})},"Stat",0,function({label:a,value:c,sub:d}){return(0,b.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,b.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:a}),(0,b.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:c}),d&&(0,b.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:d})]})},"fmt",0,{int:a=>a.toLocaleString("en-US"),compact:a=>Math.abs(a)>=1e6?`${(a/1e6).toFixed(1)}M`:Math.abs(a)>=1e3?`${(a/1e3).toFixed(1)}K`:String(Math.round(a)),cost:a=>0===a?"$0":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`,time:a=>new Date(a).toLocaleString("en-US",{hour12:!1}),date(a){let b=new Date(a);return`${String(b.getDate()).padStart(2,"0")}/${String(b.getMonth()+1).padStart(2,"0")}/${b.getFullYear()}`},ago(a){let b=Math.max(0,Math.round((Date.now()-a)/1e3));return b<60?`${b}s`:b<3600?`${Math.floor(b/60)}m`:b<86400?`${Math.floor(b/3600)}h`:`${Math.floor(b/86400)}d`},duration(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;if(b<3600)return`${Math.floor(b/60)}m ${b%60}s`;let c=Math.floor(b/3600),d=Math.floor(b%3600/60);if(c<24)return`${c}h ${d}m`;let e=Math.floor(c/24);return`${e}d ${c%24}h`}}])},85732,a=>{"use strict";var b=a.i(87924);a.s(["CardTitle",0,function({title:a,sub:c,icon:d}){return(0,b.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[d,(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-[14px] font-semibold tracking-tight text-text",children:a}),c&&(0,b.jsx)("div",{className:"truncate text-[12px] text-text-muted",children:c})]})]})},"RichCard",0,function({header:a,footer:c,children:d,className:e}){return(0,b.jsxs)("section",{className:`overflow-hidden rounded-brand-lg border border-border bg-surface shadow-soft${e?` ${e}`:""}`,children:[a&&(0,b.jsx)("header",{className:"flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-3",children:a}),(0,b.jsx)("div",{className:"p-4",children:d}),c&&(0,b.jsx)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:c})]})}])},8378,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(56173),e=a.i(85732),f=a.i(7078),g=a.i(93026),h=a.i(58918);let i=["off","lite","full","ultra"];function j({ep:a,hr:h,refresh:i}){let l=a.headroom,[m,o]=(0,c.useState)(l.url),[p,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(""),[t,u]=(0,c.useState)(null);async function v(a,b){q(a),s(""),u(null);let c=await b();q(""),c.ok||s(c.error??"action failed"),await i()}async function w(){q("check"),s(""),u(null);let a=await d.adminApi.headroomStatus();(q(""),await i(),a.ok&&a.data)?u(a.data.running?{ok:!0,text:`proxy is up at ${a.data.url}`}:{ok:!1,text:`no proxy responding at ${a.data.url}`}):u({ok:!1,text:a.error??"could not reach the gateway"})}return(0,c.useEffect)(()=>o(l.url),[l.url]),(0,b.jsx)(e.RichCard,{className:"lg:col-span-2",header:(0,b.jsx)(e.CardTitle,{title:"Headroom",sub:"external context-compression proxy"}),children:(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-[12px]",children:[(0,b.jsx)(n,{tone:h?.installed?"live":"neutral",children:h?.installed?"installed":"not installed"}),(0,b.jsx)(n,{tone:h?.running?"live":"warn",children:h?.running?"proxy running":"proxy down"}),(0,b.jsx)(n,{tone:h?.python?"info":"neutral",children:h?.python?`python ${h.python}`:"no python ≥3.10"}),h?.managedPid?(0,b.jsxs)("span",{className:"tnum text-text-subtle",children:["pid ",h.managedPid]}):null]}),(0,b.jsx)(k,{label:"Enable headroom",desc:"Compress the full context through the proxy before each request.",on:l.enabled,busy:"enable"===p,disabled:!h?.running&&!l.enabled,onChange:a=>v("enable",()=>d.adminApi.setHeadroom({enabled:a}))}),(0,b.jsx)(k,{label:"Compress user messages",desc:"Also squeeze user turns, not just tool/assistant context.",on:l.compress_user_messages,busy:"cum"===p,disabled:!h?.running&&!l.enabled,onChange:a=>v("cum",()=>d.adminApi.setHeadroom({compress_user_messages:a}))}),(0,b.jsxs)("div",{className:"flex items-end gap-2",children:[(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsx)("div",{className:"mb-1 text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Proxy URL"}),(0,b.jsx)(f.Input,{value:m,onChange:a=>o(a.target.value),placeholder:"http://localhost:8787",className:"font-mono text-[12.5px]"})]}),(0,b.jsx)(f.Button,{variant:"ghost",disabled:m.trim()===l.url||"url"===p,onClick:()=>v("url",()=>d.adminApi.setHeadroom({url:m.trim()})),children:"Save URL"})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)(f.Button,{disabled:!h?.canStart||h?.running||!!p,onClick:async()=>{await v("start",()=>d.adminApi.headroomStart()),await w()},children:[(0,b.jsx)(g.Icon,{name:"start"===p?"sync":"play_arrow",size:16,className:"start"===p?"animate-spin":""}),"start"===p?"Starting…":"Start proxy"]}),(0,b.jsxs)(f.Button,{variant:"danger",disabled:!h?.managedPid||"stop"===p,onClick:()=>v("stop",()=>d.adminApi.headroomStop()),children:[(0,b.jsx)(g.Icon,{name:"stop",size:16})," Stop"]}),(0,b.jsxs)(f.Button,{variant:"ghost",disabled:"check"===p,onClick:w,children:[(0,b.jsx)(g.Icon,{name:"sync",size:16})," ","check"===p?"Checking…":"Check"]}),h&&!h.installed&&(0,b.jsxs)("span",{className:"text-[11px] text-text-subtle",children:["Headroom isn’t installed. Get it from"," ",(0,b.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,b.jsx)("code",{className:"rounded bg-surface-2 px-1",children:"pipx install git+https://github.com/chopratejas/headroom"})," ","— then re-open this page."]}),h?.installed&&!h.localUrl&&(0,b.jsx)("span",{className:"text-[11px] text-text-subtle",children:"URL isn’t loopback — start that proxy yourself."})]}),r&&(0,b.jsx)("p",{className:"text-[12px] text-danger",children:r}),t&&(0,b.jsxs)("p",{className:`flex items-center gap-1 text-[12px] ${t.ok?"text-success":"text-danger"}`,children:[(0,b.jsx)(g.Icon,{name:t.ok?"check_circle":"error",size:14})," ",t.text]})]})})}function k({label:a,desc:c,on:d,busy:e,disabled:f,onChange:g}){let h=e||f;return(0,b.jsxs)("div",{className:`flex items-center justify-between gap-4 ${h?"opacity-40":""}`,children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[13px] font-semibold text-text",children:a}),(0,b.jsx)("div",{className:"text-[12px] text-text-muted",children:c})]}),(0,b.jsx)("button",{disabled:h,onClick:()=>g(!d),className:`relative h-6 w-11 flex-none rounded-full transition-colors ${d?"bg-accent":"bg-surface-3"}`,"aria-pressed":d,children:(0,b.jsx)("span",{className:`absolute left-0.5 top-0.5 h-5 w-5 rounded-full bg-bg transition-transform ${d?"translate-x-5":"translate-x-0"}`})})]})}function l({label:a,desc:c,value:d,busy:e,onChange:f}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[13px] font-semibold text-text",children:a}),"off"!==d&&(0,b.jsx)(n,{tone:"info",children:d})]}),(0,b.jsx)("div",{className:"text-[12px] text-text-muted",children:c})]}),(0,b.jsx)("div",{className:"flex flex-none items-center gap-1 rounded-full border border-border bg-surface p-1",children:i.map(a=>(0,b.jsx)("button",{disabled:e,onClick:()=>f(a),className:`rounded-full px-2.5 py-1 text-[11.5px] font-medium transition-colors ${d===a?"bg-accent text-accent-ink":"text-text-muted hover:text-text"}`,children:a},a))})]})}let m={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 n({tone:a="neutral",children:c,className:d}){return(0,b.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${m[a]}${d?` ${d}`:""}`,children:c})}function o(){let[a,d]=(0,c.useState)(null),[e,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(()=>!1);async function m(){h(!0),j("");let b=a?.enabled?"DELETE":"POST",c=await fetch("/api/gw/admin/tunnel",{method:b});c.ok?d(await c.json()):j((await c.json().catch(()=>({error:"failed"}))).error??"failed"),h(!1)}(0,c.useEffect)(()=>{fetch("/api/gw/admin/tunnel").then(async a=>{a.ok&&d(await a.json())})},[]);let n=a&&!a.enabled&&(!a.hasAuth||a.isDefaultPassword);return(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[a?.enabled?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-blue-500/10 px-2.5 py-0.5 text-[11px] font-medium text-blue-400",children:[(0,b.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-blue-400"}),"Tunnel"]}):(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-surface-alt px-2.5 py-0.5 text-[11px] font-medium text-text-muted",children:[(0,b.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-text-muted"}),"Tunnel"]}),e?(0,b.jsxs)("span",{className:"flex items-center gap-2 text-[12px] text-text-muted",children:[(0,b.jsxs)("svg",{className:"h-3.5 w-3.5 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,b.jsx)("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),(0,b.jsx)("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]}),a?.enabled?"Disconnecting…":"Starting tunnel… this may take a few seconds"]}):a?.enabled&&a.url?(0,b.jsxs)("button",{onClick:()=>void navigator.clipboard.writeText(a.url),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.url,(0,b.jsx)(g.Icon,{name:"content_copy",size:13})]}):null,!e&&(0,b.jsxs)(f.Button,{variant:a?.enabled?"ghost":"primary",disabled:e,onClick:m,className:"!px-2.5 !py-1 !text-[11.5px]",children:[(0,b.jsx)(g.Icon,{name:a?.enabled?"link_off":"link",size:12}),a?.enabled?"Disable":"Enable"]})]}),n&&!k&&(0,b.jsxs)("div",{className:"flex items-start gap-2 rounded-brand border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[12px] text-amber-400",children:[(0,b.jsx)(g.Icon,{name:"warning",size:14,className:"mt-0.5 shrink-0"}),(0,b.jsxs)("div",{className:"flex-1 space-y-0.5",children:[!a?.hasAuth&&(0,b.jsxs)("p",{children:["No API keys — ",(0,b.jsx)("a",{href:"/keys",className:"font-medium text-amber-300 underline underline-offset-2 decoration-amber-300/50 hover:decoration-amber-300",children:"add in Access Keys"})," before enabling tunnel."]}),a?.isDefaultPassword&&(0,b.jsxs)("p",{children:["Default password — ",(0,b.jsx)("a",{href:"/config",className:"font-medium text-amber-300 underline underline-offset-2 decoration-amber-300/50 hover:decoration-amber-300",children:"change in Settings"})," before enabling tunnel."]})]}),(0,b.jsx)("button",{onClick:function(){l(!0),localStorage.setItem("tunnel-warning-dismissed","1")},className:"shrink-0 p-0.5 rounded hover:bg-amber-500/10 text-amber-400/60 hover:text-amber-400",children:(0,b.jsx)(g.Icon,{name:"close",size:14})})]}),i&&(0,b.jsx)("p",{className:"mt-1.5 text-[11px] text-danger",children:i})]})}a.s(["EndpointView",0,function(){let[a,f]=(0,c.useState)(null),[i,m]=(0,c.useState)(""),[n,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(null),s=(0,c.useCallback)(async()=>{let a=await d.adminApi.endpoint();a.ok?(m(""),f(a.data)):m(a.error??"could not reach the gateway")},[]),t=(0,c.useCallback)(async()=>{let a=await d.adminApi.headroomStatus();a.ok&&r(a.data)},[]);async function u(a,b){p(a);let c=await b();p(""),c.ok?(m(""),await s()):m(c.error??"action failed")}if((0,c.useEffect)(()=>{s(),t()},[s,t]),i)return(0,b.jsx)(h.Empty,{children:i});if(!a)return(0,b.jsx)(h.Empty,{children:"Loading…"});let v=`http://localhost:${a.port}`;return(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-6",children:[(0,b.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"Endpoint"}),(0,b.jsx)("p",{className:"mt-1 text-[13px] text-text-muted",children:"Gateway address and token-saver toggles."})]}),(0,b.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,b.jsx)(e.RichCard,{className:"lg:col-span-2",header:(0,b.jsx)(e.CardTitle,{title:"Gateway URL",sub:"one endpoint for every client"}),children:(0,b.jsxs)("div",{className:"text-[13px] space-y-2.5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-emerald-500/10 px-2.5 py-0.5 text-[11px] font-medium text-emerald-400",children:[(0,b.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400"}),"Local"]}),(0,b.jsxs)("button",{onClick:()=>{navigator.clipboard.writeText(v)},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:[v,(0,b.jsx)(g.Icon,{name:"content_copy",size:13})]})]}),(0,b.jsx)(o,{})]})}),(0,b.jsx)(e.RichCard,{className:"lg:col-span-2",header:(0,b.jsx)(e.CardTitle,{title:"Token savers",sub:"applied to every request before routing"}),children:(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsx)(k,{label:"RTK",desc:"Compress bulky tool_result blocks (diffs, grep, listings) in the request.",on:a.rtk,busy:"rtk"===n,onChange:a=>u("rtk",()=>d.adminApi.setRtk(a))}),(0,b.jsx)(l,{label:"Caveman",desc:"Terser model output — drops filler, keeps substance.",value:a.caveman,busy:"caveman"===n,onChange:a=>u("caveman",()=>d.adminApi.setCaveman(a))}),(0,b.jsx)(l,{label:"Ponytail",desc:"Minimal, YAGNI code style — deletion over addition.",value:a.ponytail,busy:"ponytail"===n,onChange:a=>u("ponytail",()=>d.adminApi.setPonytail(a))})]})}),(0,b.jsx)(j,{ep:a,hr:q,refresh:async()=>{await s(),await t()}})]})]})}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_components_0dgasfb._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[58918,a=>{"use strict";var b=a.i(87924);a.s(["Empty",0,function({children:a}){return(0,b.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:a})},"Stat",0,function({label:a,value:c,sub:d}){return(0,b.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,b.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:a}),(0,b.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:c}),d&&(0,b.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:d})]})},"fmt",0,{int:a=>a.toLocaleString("en-US"),compact:a=>Math.abs(a)>=1e6?`${(a/1e6).toFixed(1)}M`:Math.abs(a)>=1e3?`${(a/1e3).toFixed(1)}K`:String(Math.round(a)),cost:a=>0===a?"$0":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`,time:a=>new Date(a).toLocaleString("en-US",{hour12:!1}),date(a){let b=new Date(a);return`${String(b.getDate()).padStart(2,"0")}/${String(b.getMonth()+1).padStart(2,"0")}/${b.getFullYear()}`},ago(a){let b=Math.max(0,Math.round((Date.now()-a)/1e3));return b<60?`${b}s`:b<3600?`${Math.floor(b/60)}m`:b<86400?`${Math.floor(b/3600)}h`:`${Math.floor(b/86400)}d`},duration(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;if(b<3600)return`${Math.floor(b/60)}m ${b%60}s`;let c=Math.floor(b/3600),d=Math.floor(b%3600/60);if(c<24)return`${c}h ${d}m`;let e=Math.floor(c/24);return`${e}d ${c%24}h`}}])},2693,a=>{"use strict";var b=a.i(87924);let c={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",danger:"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 d({tone:a="neutral",children:e,className:f}){return(0,b.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${c[a]}${f?` ${f}`:""}`,children:e})}a.s(["Badge",0,d,"FormatBadge",0,function({format:a}){return(0,b.jsx)(d,{tone:"info",children:a})}])},85732,a=>{"use strict";var b=a.i(87924);a.s(["CardTitle",0,function({title:a,sub:c,icon:d}){return(0,b.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[d,(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-[14px] font-semibold tracking-tight text-text",children:a}),c&&(0,b.jsx)("div",{className:"truncate text-[12px] text-text-muted",children:c})]})]})},"RichCard",0,function({header:a,footer:c,children:d,className:e}){return(0,b.jsxs)("section",{className:`overflow-hidden rounded-brand-lg border border-border bg-surface shadow-soft${e?` ${e}`:""}`,children:[a&&(0,b.jsx)("header",{className:"flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-3",children:a}),(0,b.jsx)("div",{className:"p-4",children:d}),c&&(0,b.jsx)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:c})]})}])},47153,a=>{"use strict";var b=a.i(87924);a.s(["Lamp",0,function({state:a,title:c}){return(0,b.jsx)("span",{className:`lamp lamp-${a}`,title:c,"aria-label":a})}])},1829,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(56173),e=a.i(47153),f=a.i(2693),g=a.i(85732),h=a.i(7078),i=a.i(47444),j=a.i(93026),k=a.i(73858),l=a.i(58918);function m({providers:a,onDone:e,initial:f,onCancel:g}){let k=!!f,[l,n]=(0,c.useState)(f?.alias??""),[o,p]=(0,c.useState)(()=>f?f.target.map((a,b)=>{let c=Array.isArray(f.model)?f.model[b]??f.model[0]:f.model??f.alias;return`${a}/${c}`}):[]),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(f?.strategy??"fallback"),[u,v]=(0,c.useState)(f?.price_in?.toString()??""),[w,x]=(0,c.useState)(f?.price_out?.toString()??""),[y,z]=(0,c.useState)(!1),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)(null),E=a.filter(a=>a.models.length>0).map(a=>({label:a.id,items:a.models.map(b=>({value:`${a.id}/${b.id}`,label:`${a.id}/${b.id}`}))}));async function F(a){if(a.preventDefault(),!l||0===o.length)return void B("a name and at least one model are required");z(!0),B("");let b=o.map(a=>a.slice(0,a.indexOf("/"))),c=o.map(a=>a.slice(a.indexOf("/")+1)),g=await d.adminApi.setRoute(l,{target:b,model:c,strategy:s,price_in:u?Number(u):void 0,price_out:w?Number(w):void 0});g.ok&&k&&f.alias!==l&&await d.adminApi.removeRoute(f.alias),z(!1),g.ok?e():B(g.error??"failed")}return(0,b.jsxs)("form",{onSubmit:F,className:"mb-5 rounded-brand-lg border border-border bg-surface p-4 shadow-soft",children:[(0,b.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,b.jsx)(h.Field,{label:"Alias",hint:"the name your CLI requests as a model",children:(0,b.jsx)(h.Input,{value:l,onChange:a=>n(a.target.value),placeholder:"my-claude"})}),(0,b.jsx)(h.Field,{label:"Strategy",hint:"how the chain is tried",children:(0,b.jsxs)(h.Select,{value:s,onChange:a=>t(a.target.value),children:[(0,b.jsx)("option",{value:"fallback",children:"Fallback — try in order, next on failure"}),(0,b.jsx)("option",{value:"round-robin",children:"Round Robin — rotate to spread load"})]})}),(0,b.jsx)(h.Field,{label:"Price in",hint:"per 1M, optional",children:(0,b.jsx)(h.Input,{value:u,onChange:a=>v(a.target.value),placeholder:"3"})}),(0,b.jsx)(h.Field,{label:"Price out",hint:"per 1M, optional",children:(0,b.jsx)(h.Input,{value:w,onChange:a=>x(a.target.value),placeholder:"15"})})]}),(0,b.jsxs)("div",{className:"mt-3",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Models — fallback order (drag to reorder)"}),(0,b.jsxs)(h.Button,{type:"button",variant:"ghost",onClick:()=>r(!0),children:[(0,b.jsx)(j.Icon,{name:"add",size:16})," Add models"]})]}),0===o.length?(0,b.jsxs)("div",{className:"mt-2 rounded-brand border border-dashed border-border-subtle px-3 py-4 text-center text-[12px] text-text-subtle",children:["No models yet. Click ",(0,b.jsx)("span",{className:"text-text-muted",children:"Add models"})," and pick from your providers."]}):(0,b.jsx)("ul",{className:"mt-2 space-y-1.5",children:o.map((a,c)=>(0,b.jsxs)("li",{draggable:!0,onDragStart:()=>D(c),onDragOver:a=>a.preventDefault(),onDrop:()=>{null!==C&&C!==c&&p(a=>{let b=[...a],[d]=b.splice(C,1);return b.splice(c,0,d),b}),D(null)},onDragEnd:()=>D(null),className:`flex cursor-grab items-center gap-2.5 rounded-brand border px-3 py-2 active:cursor-grabbing ${C===c?"border-accent bg-accent-soft":"border-border-subtle"}`,children:[(0,b.jsx)(j.Icon,{name:"drag_indicator",size:16,className:"text-text-subtle"}),(0,b.jsx)("span",{className:"tnum text-[11px] text-text-subtle",children:0===c?"primary":`#${c+1}`}),(0,b.jsx)("span",{className:"tnum truncate text-[13px] text-text",children:a}),(0,b.jsx)("button",{type:"button",onClick:()=>p(a=>a.filter((a,b)=>b!==c)),className:"ml-auto flex-none text-text-subtle hover:text-danger","aria-label":`Remove ${a}`,children:(0,b.jsx)(j.Icon,{name:"close",size:14})})]},a))})]}),A&&(0,b.jsx)("div",{className:"mt-2 text-[12px] text-danger",children:A}),(0,b.jsxs)("div",{className:"mt-3 flex justify-end gap-2",children:[g&&(0,b.jsx)(h.Button,{type:"button",variant:"ghost",onClick:g,children:"Cancel"}),(0,b.jsx)(h.Button,{type:"submit",disabled:y,children:y?"Saving…":k?"Update combo":"Save combo"})]}),q&&(0,b.jsx)(i.ModelPicker,{title:"Add models to the chain",note:"Click a model to add it, click again to remove. Drag to reorder after.",groups:E,selected:o,onToggle:function(a){B(""),p(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])},onClose:()=>r(!1)})]})}a.s(["RoutingView",0,function(){let[a,i]=(0,c.useState)(null),[n,o]=(0,c.useState)([]),[p,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(""),[v,w]=(0,c.useState)({}),[x,y]=(0,c.useState)(null),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(null),D=(0,c.useCallback)(async()=>{let[a,b]=await Promise.all([fetch("/api/gw/admin/config"),d.adminApi.providers()]);a.ok?(q(""),i(await a.json()),o(b.data?.providers??[])):q("could not reach the gateway")},[]);if((0,c.useEffect)(()=>{D()},[D]),p)return(0,b.jsx)(l.Empty,{children:p});if(!a)return(0,b.jsx)(l.Empty,{children:"Loading…"});async function E(a){u(a);let b=await d.adminApi.removeRoute(a);u(""),b.ok?await D():q(b.error??"failed")}async function F(a){y(a.alias),w(b=>({...b,[a.alias]:{}}));for(let b=0;b<a.target.length;b++){w(c=>({...c,[a.alias]:{...c[a.alias],[b]:"testing"}}));let c=await d.adminApi.testProvider(a.target[b]),e=c.ok&&c.data?.ok;w(c=>({...c,[a.alias]:{...c[a.alias],[b]:e?"ok":"fail"}})),b<a.target.length-1&&await new Promise(a=>setTimeout(a,400))}y(null)}return(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-5 flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"Combos & Routing"}),(0,b.jsx)("p",{className:"mt-1 text-[13px] text-text-muted",children:"A combo is an alias your CLI tool calls, routed to a chain of providers. Fallback tries them in order; round-robin spreads load."})]}),(0,b.jsxs)(h.Button,{onClick:()=>s(a=>!a),children:[(0,b.jsx)(j.Icon,{name:r?"close":"add",size:17}),r?"Cancel":"Add combo"]})]}),r&&(0,b.jsx)(m,{providers:a.providers.filter(a=>!a.disabled),onDone:()=>{s(!1),D()}}),B&&!r&&(0,b.jsx)(m,{providers:a.providers.filter(a=>!a.disabled),initial:B,onDone:()=>{C(null),D()},onCancel:()=>C(null)}),0===a.models.length?(0,b.jsx)(l.Empty,{children:"No combos yet. Add one to expose a model alias to your CLI tools."}):(0,b.jsx)("div",{className:"grid gap-3 lg:grid-cols-2",children:a.models.map(a=>(0,b.jsx)(g.RichCard,{header:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.CardTitle,{title:a.alias,sub:`${a.target.length} in chain`}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("button",{onClick:()=>F(a),disabled:x===a.alias,className:"flex items-center gap-1 rounded px-2 py-1 text-[11px] text-text-subtle transition-colors hover:bg-surface-2 hover:text-text disabled:opacity-60",title:"Test each provider in this chain",children:[(0,b.jsx)(j.Icon,{name:x===a.alias?"progress_activity":"sync",size:14}),"Test"]}),(0,b.jsx)(f.Badge,{tone:"round-robin"===a.strategy?"info":"neutral",children:a.strategy}),(void 0!==a.price_in||void 0!==a.price_out)&&(0,b.jsxs)(f.Badge,{tone:"neutral",children:[l.fmt.cost(a.price_in??0),"/",l.fmt.cost(a.price_out??0)," per 1M"]}),(0,b.jsx)("button",{onClick:()=>C(a),className:"text-text-subtle hover:text-text","aria-label":"Edit combo",children:(0,b.jsx)(j.Icon,{name:"edit",size:16})}),(0,b.jsx)("button",{onClick:()=>A(a.alias),disabled:t===a.alias,className:"text-text-subtle hover:text-danger","aria-label":"Remove alias",children:(0,b.jsx)(j.Icon,{name:"delete",size:16})})]})]}),children:(0,b.jsx)("ol",{className:"space-y-1.5",children:a.target.map((c,d)=>{let f,g=v[a.alias]?.[d];return(0,b.jsxs)("li",{className:"flex items-center gap-2.5 rounded-brand border border-border-subtle px-3 py-2",children:[(0,b.jsx)("span",{className:"tnum text-[11px] text-text-subtle",children:0===d?"primary":`#${d+1}`}),(0,b.jsx)(e.Lamp,{state:("ok"===g?"live":"fail"===g?"down":"testing"===g?"idle":null)??(!(f=n.find(a=>a.id===c))||f.keys.some(a=>a.healthy)?"live":"down")}),(0,b.jsx)("span",{className:"text-[13px] text-text",children:c}),(0,b.jsx)("span",{className:"ml-auto tnum text-[12px] text-text-muted",children:Array.isArray(a.model)?a.model[d]??a.model[0]??a.alias:"string"==typeof a.model?a.model:a.alias}),"ok"===g&&(0,b.jsx)(j.Icon,{name:"check_circle",size:14,className:"text-success"}),"fail"===g&&(0,b.jsx)(j.Icon,{name:"cancel",size:14,className:"text-danger"}),"testing"===g&&(0,b.jsx)(j.Icon,{name:"progress_activity",size:14,className:"text-text-subtle"})]},c+d)})})},a.alias))}),z&&(0,b.jsx)(k.ConfirmModal,{title:"Remove combo",message:`Delete "${z}"? CLI tools using this alias will stop working.`,confirmLabel:"Remove",busy:t===z,onCancel:()=>A(null),onConfirm:()=>{E(z).then(()=>A(null))}})]})}])}];
|
|
1
|
+
module.exports=[58918,a=>{"use strict";var b=a.i(87924);a.s(["Empty",0,function({children:a}){return(0,b.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:a})},"Stat",0,function({label:a,value:c,sub:d}){return(0,b.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,b.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:a}),(0,b.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:c}),d&&(0,b.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:d})]})},"fmt",0,{int:a=>a.toLocaleString("en-US"),compact:a=>Math.abs(a)>=1e6?`${(a/1e6).toFixed(1)}M`:Math.abs(a)>=1e3?`${(a/1e3).toFixed(1)}K`:String(Math.round(a)),cost:a=>0===a?"$0":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`,time:a=>new Date(a).toLocaleString("en-US",{hour12:!1}),date(a){let b=new Date(a);return`${String(b.getDate()).padStart(2,"0")}/${String(b.getMonth()+1).padStart(2,"0")}/${b.getFullYear()}`},ago(a){let b=Math.max(0,Math.round((Date.now()-a)/1e3));return b<60?`${b}s`:b<3600?`${Math.floor(b/60)}m`:b<86400?`${Math.floor(b/3600)}h`:`${Math.floor(b/86400)}d`},duration(a){let b=Math.max(0,Math.round(a/1e3));if(b<60)return`${b}s`;if(b<3600)return`${Math.floor(b/60)}m ${b%60}s`;let c=Math.floor(b/3600),d=Math.floor(b%3600/60);if(c<24)return`${c}h ${d}m`;let e=Math.floor(c/24);return`${e}d ${c%24}h`}}])},2693,a=>{"use strict";var b=a.i(87924);let c={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",danger:"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 d({tone:a="neutral",children:e,className:f}){return(0,b.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${c[a]}${f?` ${f}`:""}`,children:e})}a.s(["Badge",0,d,"FormatBadge",0,function({format:a}){return(0,b.jsx)(d,{tone:"info",children:a})}])},85732,a=>{"use strict";var b=a.i(87924);a.s(["CardTitle",0,function({title:a,sub:c,icon:d}){return(0,b.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0",children:[d,(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"truncate text-[14px] font-semibold tracking-tight text-text",children:a}),c&&(0,b.jsx)("div",{className:"truncate text-[12px] text-text-muted",children:c})]})]})},"RichCard",0,function({header:a,footer:c,children:d,className:e}){return(0,b.jsxs)("section",{className:`overflow-hidden rounded-brand-lg border border-border bg-surface shadow-soft${e?` ${e}`:""}`,children:[a&&(0,b.jsx)("header",{className:"flex items-center justify-between gap-3 border-b border-border-subtle px-4 py-3",children:a}),(0,b.jsx)("div",{className:"p-4",children:d}),c&&(0,b.jsx)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:c})]})}])},47153,a=>{"use strict";var b=a.i(87924);a.s(["Lamp",0,function({state:a,title:c}){return(0,b.jsx)("span",{className:`lamp lamp-${a}`,title:c,"aria-label":a})}])},1829,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(56173),e=a.i(47153),f=a.i(2693),g=a.i(85732),h=a.i(7078),i=a.i(47444),j=a.i(93026),k=a.i(73858),l=a.i(58918);function m({providers:a,onDone:e,initial:f,onCancel:g}){let k=!!f,[l,n]=(0,c.useState)(f?.alias??""),[o,p]=(0,c.useState)(()=>f?f.target.map((a,b)=>{let c=Array.isArray(f.model)?f.model[b]??f.model[0]:f.model??f.alias;return`${a}/${c}`}):[]),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(f?.strategy??"fallback"),[u,v]=(0,c.useState)(f?.sticky??1),[w,x]=(0,c.useState)(!1),[y,z]=(0,c.useState)(""),[A,B]=(0,c.useState)(null),C=a.filter(a=>a.models.length>0).map(a=>({label:a.id,items:a.models.map(b=>({value:`${a.id}/${b.id}`,label:`${a.id}/${b.id}`}))}));async function D(a){if(a.preventDefault(),!l||0===o.length)return void z("a name and at least one model are required");x(!0),z("");let b=o.map(a=>a.slice(0,a.indexOf("/"))),c=o.map(a=>a.slice(a.indexOf("/")+1)),g=await d.adminApi.setRoute(l,{target:b,model:c,strategy:s,sticky:"round-robin"===s?u:void 0});g.ok&&k&&f.alias!==l&&await d.adminApi.removeRoute(f.alias),x(!1),g.ok?e():z(g.error??"failed")}return(0,b.jsxs)("form",{onSubmit:D,className:"mb-5 rounded-brand-lg border border-border bg-surface p-4 shadow-soft",children:[(0,b.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,b.jsx)(h.Field,{label:"Alias",hint:"the name your CLI requests as a model",children:(0,b.jsx)(h.Input,{value:l,onChange:a=>n(a.target.value),placeholder:"my-claude"})}),(0,b.jsx)(h.Field,{label:"Strategy",hint:"how the chain is tried",children:(0,b.jsxs)(h.Select,{value:s,onChange:a=>t(a.target.value),children:[(0,b.jsx)("option",{value:"fallback",children:"Fallback — try in order, next on failure"}),(0,b.jsx)("option",{value:"round-robin",children:"Round Robin — rotate to spread load"})]})})]}),"round-robin"===s&&(0,b.jsxs)("div",{className:"mt-3 flex items-center gap-2 text-[12px] text-text-muted",children:[(0,b.jsx)("span",{children:"Sticky"}),(0,b.jsx)("button",{type:"button",disabled:u<=1,onClick:()=>v(a=>Math.max(1,a-1)),className:"flex h-6 w-6 items-center justify-center rounded-brand border border-border text-text-muted hover:bg-surface-2 disabled:opacity-40","aria-label":"Decrease sticky",children:(0,b.jsx)(j.Icon,{name:"remove",size:13})}),(0,b.jsx)("span",{className:"tnum w-6 text-center text-[11px] text-text",children:u}),(0,b.jsx)("button",{type:"button",onClick:()=>v(a=>a+1),className:"flex h-6 w-6 items-center justify-center rounded-brand border border-border text-text-muted hover:bg-surface-2","aria-label":"Increase sticky",children:(0,b.jsx)(j.Icon,{name:"add",size:13})}),(0,b.jsx)("span",{className:"text-text-subtle",children:"requests per model before rotating"})]}),(0,b.jsxs)("div",{className:"mt-3",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:"Models — fallback order (drag to reorder)"}),(0,b.jsxs)(h.Button,{type:"button",variant:"ghost",onClick:()=>r(!0),children:[(0,b.jsx)(j.Icon,{name:"add",size:16})," Add models"]})]}),0===o.length?(0,b.jsxs)("div",{className:"mt-2 rounded-brand border border-dashed border-border-subtle px-3 py-4 text-center text-[12px] text-text-subtle",children:["No models yet. Click ",(0,b.jsx)("span",{className:"text-text-muted",children:"Add models"})," and pick from your providers."]}):(0,b.jsx)("ul",{className:"mt-2 space-y-1.5",children:o.map((a,c)=>(0,b.jsxs)("li",{draggable:!0,onDragStart:()=>B(c),onDragOver:a=>a.preventDefault(),onDrop:()=>{null!==A&&A!==c&&p(a=>{let b=[...a],[d]=b.splice(A,1);return b.splice(c,0,d),b}),B(null)},onDragEnd:()=>B(null),className:`flex cursor-grab items-center gap-2.5 rounded-brand border px-3 py-2 active:cursor-grabbing ${A===c?"border-accent bg-accent-soft":"border-border-subtle"}`,children:[(0,b.jsx)(j.Icon,{name:"drag_indicator",size:16,className:"text-text-subtle"}),(0,b.jsx)("span",{className:"tnum text-[11px] text-text-subtle",children:0===c?"primary":`#${c+1}`}),(0,b.jsx)("span",{className:"tnum truncate text-[13px] text-text",children:a}),(0,b.jsx)("button",{type:"button",onClick:()=>p(a=>a.filter((a,b)=>b!==c)),className:"ml-auto flex-none text-text-subtle hover:text-danger","aria-label":`Remove ${a}`,children:(0,b.jsx)(j.Icon,{name:"close",size:14})})]},a))})]}),y&&(0,b.jsx)("div",{className:"mt-2 text-[12px] text-danger",children:y}),(0,b.jsxs)("div",{className:"mt-3 flex justify-end gap-2",children:[g&&(0,b.jsx)(h.Button,{type:"button",variant:"ghost",onClick:g,children:"Cancel"}),(0,b.jsx)(h.Button,{type:"submit",disabled:w,children:w?"Saving…":k?"Update combo":"Save combo"})]}),q&&(0,b.jsx)(i.ModelPicker,{title:"Add models to the chain",note:"Click a model to add it, click again to remove. Drag to reorder after.",groups:C,selected:o,onToggle:function(a){z(""),p(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])},onClose:()=>r(!1)})]})}a.s(["RoutingView",0,function(){let[a,i]=(0,c.useState)(null),[n,o]=(0,c.useState)([]),[p,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(!1),[t,u]=(0,c.useState)(""),[v,w]=(0,c.useState)({}),[x,y]=(0,c.useState)(null),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(null),D=(0,c.useCallback)(async()=>{let[a,b]=await Promise.all([fetch("/api/gw/admin/config"),d.adminApi.providers()]);a.ok?(q(""),i(await a.json()),o(b.data?.providers??[])):q("could not reach the gateway")},[]);if((0,c.useEffect)(()=>{D()},[D]),p)return(0,b.jsx)(l.Empty,{children:p});if(!a)return(0,b.jsx)(l.Empty,{children:"Loading…"});async function E(a){u(a);let b=await d.adminApi.removeRoute(a);u(""),b.ok?await D():q(b.error??"failed")}async function F(a){y(a.alias),w(b=>({...b,[a.alias]:{}}));for(let b=0;b<a.target.length;b++){w(c=>({...c,[a.alias]:{...c[a.alias],[b]:"testing"}}));let c=await d.adminApi.testProvider(a.target[b]),e=c.ok&&c.data?.ok;w(c=>({...c,[a.alias]:{...c[a.alias],[b]:e?"ok":"fail"}})),b<a.target.length-1&&await new Promise(a=>setTimeout(a,400))}y(null)}return(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-5 flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"Combos & Routing"}),(0,b.jsx)("p",{className:"mt-1 text-[13px] text-text-muted",children:"A combo is an alias your CLI tool calls, routed to a chain of providers. Fallback tries them in order; round-robin spreads load."})]}),(0,b.jsxs)(h.Button,{onClick:()=>s(a=>!a),children:[(0,b.jsx)(j.Icon,{name:r?"close":"add",size:17}),r?"Cancel":"Add combo"]})]}),r&&(0,b.jsx)(m,{providers:a.providers.filter(a=>!a.disabled),onDone:()=>{s(!1),D()}}),B&&!r&&(0,b.jsx)(m,{providers:a.providers.filter(a=>!a.disabled),initial:B,onDone:()=>{C(null),D()},onCancel:()=>C(null)}),0===a.models.length?(0,b.jsx)(l.Empty,{children:"No combos yet. Add one to expose a model alias to your CLI tools."}):(0,b.jsx)("div",{className:"grid gap-3 lg:grid-cols-2",children:a.models.map(a=>(0,b.jsx)(g.RichCard,{header:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.CardTitle,{title:a.alias,sub:`${a.target.length} in chain`}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("button",{onClick:()=>F(a),disabled:x===a.alias,className:"flex items-center gap-1 rounded px-2 py-1 text-[11px] text-text-subtle transition-colors hover:bg-surface-2 hover:text-text disabled:opacity-60",title:"Test each provider in this chain",children:[(0,b.jsx)(j.Icon,{name:x===a.alias?"progress_activity":"sync",size:14}),"Test"]}),(0,b.jsx)(f.Badge,{tone:"round-robin"===a.strategy?"info":"neutral",children:a.strategy}),(void 0!==a.price_in||void 0!==a.price_out)&&(0,b.jsxs)(f.Badge,{tone:"neutral",children:[l.fmt.cost(a.price_in??0),"/",l.fmt.cost(a.price_out??0)," per 1M"]}),(0,b.jsx)("button",{onClick:()=>C(a),className:"text-text-subtle hover:text-text","aria-label":"Edit combo",children:(0,b.jsx)(j.Icon,{name:"edit",size:16})}),(0,b.jsx)("button",{onClick:()=>A(a.alias),disabled:t===a.alias,className:"text-text-subtle hover:text-danger","aria-label":"Remove alias",children:(0,b.jsx)(j.Icon,{name:"delete",size:16})})]})]}),children:(0,b.jsx)("ol",{className:"space-y-1.5",children:a.target.map((c,d)=>{let f,g=v[a.alias]?.[d];return(0,b.jsxs)("li",{className:"flex items-center gap-2.5 rounded-brand border border-border-subtle px-3 py-2",children:[(0,b.jsx)("span",{className:"tnum text-[11px] text-text-subtle",children:0===d?"primary":`#${d+1}`}),(0,b.jsx)(e.Lamp,{state:("ok"===g?"live":"fail"===g?"down":"testing"===g?"idle":null)??(!(f=n.find(a=>a.id===c))||f.keys.some(a=>a.healthy)?"live":"down")}),(0,b.jsx)("span",{className:"text-[13px] text-text",children:c}),(0,b.jsx)("span",{className:"ml-auto tnum text-[12px] text-text-muted",children:Array.isArray(a.model)?a.model[d]??a.model[0]??a.alias:"string"==typeof a.model?a.model:a.alias}),"ok"===g&&(0,b.jsx)(j.Icon,{name:"check_circle",size:14,className:"text-success"}),"fail"===g&&(0,b.jsx)(j.Icon,{name:"cancel",size:14,className:"text-danger"}),"testing"===g&&(0,b.jsx)(j.Icon,{name:"progress_activity",size:14,className:"text-text-subtle"})]},c+d)})})},a.alias))}),z&&(0,b.jsx)(k.ConfirmModal,{title:"Remove combo",message:`Delete "${z}"? CLI tools using this alias will stop working.`,confirmLabel:"Remove",busy:t===z,onCancel:()=>A(null),onConfirm:()=>{E(z).then(()=>A(null))}})]})}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_components_1z4akp5._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[33410,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(56173),f=a.i(47153),g=a.i(2693),h=a.i(2799),i=a.i(85732),j=a.i(7078),k=a.i(93026),l=a.i(58918);function m({checked:a,indeterminate:c,onChange:d,className:e,ariaLabel:f}){let g=a||c;return(0,b.jsx)("button",{type:"button",role:"checkbox","aria-checked":c?"mixed":a,"aria-label":f,onClick:a=>{a.stopPropagation(),d()},className:`flex h-[18px] w-[18px] flex-none items-center justify-center rounded-[5px] border transition-colors ${g?"border-accent bg-accent text-accent-ink":"border-border bg-bg text-transparent hover:border-text-subtle"}${e?` ${e}`:""}`,children:(0,b.jsx)(k.Icon,{name:c?"remove":"check",size:13})})}function n({models:a,busy:d,onAdd:e,onClose:f}){let[g,h]=(0,c.useState)(""),[i,l]=(0,c.useState)(()=>new Set(a.filter(a=>!a.added).map(a=>a.id))),o=(0,c.useMemo)(()=>{let b=g.trim().toLowerCase();return b?a.filter(a=>a.id.toLowerCase().includes(b)):a},[a,g]);function p(a){l(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})}let q=o.filter(a=>i.has(a.id)).length,r=o.length>0&&q===o.length;function s(){l(a=>{let b=new Set(a);return r?o.forEach(a=>b.delete(a.id)):o.forEach(a=>b.add(a.id)),b})}return(0,b.jsx)("div",{className:"fixed inset-0 z-50 grid place-items-center bg-black/50 p-6",onClick:f,children:(0,b.jsxs)("div",{className:"flex max-h-[80vh] w-full max-w-[480px] flex-col overflow-hidden rounded-brand-lg border border-border bg-surface shadow-elevated",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("header",{className:"flex items-center justify-between border-b border-border-subtle px-4 py-3",children:[(0,b.jsxs)("span",{className:"text-[14px] font-semibold text-text",children:[a.length," models found"]}),(0,b.jsx)("button",{onClick:f,className:"text-text-subtle hover:text-text","aria-label":"Close",children:(0,b.jsx)(k.Icon,{name:"close",size:18})})]}),(0,b.jsx)("div",{className:"border-b border-border-subtle px-4 py-2.5",children:(0,b.jsx)(j.Input,{value:g,onChange:a=>h(a.target.value),placeholder:"filter…",autoFocus:!0})}),o.length>0&&(0,b.jsxs)("button",{onClick:s,className:"flex items-center gap-2.5 border-b border-border-subtle px-4 py-2 text-left hover:bg-surface-2",children:[(0,b.jsx)(m,{checked:r,indeterminate:q>0&&!r,onChange:s,ariaLabel:"Select all"}),(0,b.jsxs)("span",{className:"text-[12.5px] font-medium text-text",children:["Select all",g?" (filtered)":""]}),(0,b.jsxs)("span",{className:"ml-auto tnum text-[11px] text-text-subtle",children:[q,"/",o.length]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto px-2 py-2",children:0===o.length?(0,b.jsx)("div",{className:"px-2 py-6 text-center text-[13px] text-text-muted",children:"No matches."}):o.map(a=>{let c=i.has(a.id);return(0,b.jsxs)("button",{onClick:()=>p(a.id),className:`flex w-full items-center gap-2.5 rounded-brand border px-2.5 py-2 text-left transition-colors ${c?"border-accent/40 bg-accent-soft":"border-transparent hover:bg-surface-2"}`,children:[(0,b.jsx)(m,{checked:c,onChange:()=>p(a.id),ariaLabel:a.id}),(0,b.jsx)("span",{className:"flex-1 truncate text-[12.5px] text-text",children:a.id}),a.added&&(0,b.jsx)("span",{className:"text-[11px] text-text-subtle",children:"in catalog"})]},a.id)})}),(0,b.jsxs)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:[(0,b.jsxs)("span",{className:"tnum text-[12px] text-text-muted",children:[i.size," selected"]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",onClick:f,children:"Cancel"}),(0,b.jsx)(j.Button,{disabled:0===i.size||d,onClick:()=>e([...i]),children:d?"Adding…":`Add ${i.size}`})]})]})]})})}var o=a.i(52065),p=a.i(73858);a.s(["ProviderDetail",0,function({id:a}){let m=(0,d.useRouter)(),[q,r]=(0,c.useState)(null),[s,t]=(0,c.useState)(null),[u,v]=(0,c.useState)(""),[w,x]=(0,c.useState)(""),[y,z]=(0,c.useState)(null),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)(""),[E,F]=(0,c.useState)(""),[G,H]=(0,c.useState)(null),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(""),[M,N]=(0,c.useState)(null),[O,P]=(0,c.useState)(""),[Q,R]=(0,c.useState)(""),[S,T]=(0,c.useState)(""),[U,V]=(0,c.useState)(""),[W,X]=(0,c.useState)(null),[Y,Z]=(0,c.useState)({}),[$,_]=(0,c.useState)({}),[aa,ab]=(0,c.useState)(!1),[ac,ad]=(0,c.useState)(null),ae=(0,c.useRef)(!1),[af,ag]=(0,c.useState)(!1),[ah,ai]=(0,c.useState)(""),[aj,ak]=(0,c.useState)(""),[al,am]=(0,c.useState)(""),[an,ao]=(0,c.useState)({}),[ap,aq]=(0,c.useState)(!1);async function ar(b){Z(a=>({...a,[b]:"testing"}));let c=await e.adminApi.testModel(a,b);Z(a=>({...a,[b]:c.ok&&c.data?.ok?"ok":"fail"}))}async function as(b){_(a=>({...a,[b]:"testing"}));let c=await e.adminApi.testKey(a,b);_(a=>({...a,[b]:c.data??{ok:!1,reachable:!1,status:0,error:c.error}}))}async function at(b){ae.current=!1,ab(!0),ad(null),_({});let c=0,d=0;for(let f=0;f<b&&!ae.current;f++){_(a=>({...a,[f]:"testing"}));let g=await e.adminApi.testKey(a,f),h=g.data??{ok:!1,reachable:!1,status:0,error:g.error};_(a=>({...a,[f]:h})),h.ok?c++:d++,f<b-1&&!ae.current&&await new Promise(a=>setTimeout(a,500))}ab(!1),ad({total:b,passed:c,failed:d})}let au=(0,c.useCallback)(async()=>{let[b,c]=await Promise.all([fetch("/api/gw/admin/config"),e.adminApi.providers()]);if(!b.ok)return void v("could not reach the gateway");let d=(await b.json()).providers.find(b=>b.id===a)??null;d?(v(""),r(d),t(c.data?.providers.find(b=>b.id===a)??null)):v(`provider "${a}" not found`)},[a]);if((0,c.useEffect)(()=>{au()},[au]),u)return(0,b.jsx)(l.Empty,{children:u});if(!q)return(0,b.jsx)(l.Empty,{children:"Loading…"});let av=q.api_keys??(q.api_key?[q.api_key]:[]),aw=U.trim().toLowerCase(),ax=aw?q.models.filter(a=>a.id.toLowerCase().includes(aw)):q.models;async function ay(a,b){B(a),x("");let c=await b();B(""),c.ok?(x(""),await au()):x(c.error??"action failed")}return(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{onClick:()=>m.push("/providers"),className:"mb-4 inline-flex items-center gap-1 text-[12px] text-text-muted hover:text-text",children:[(0,b.jsx)(k.Icon,{name:"arrow_back",size:15})," Providers"]}),(0,b.jsxs)("div",{className:"mb-6",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(f.Lamp,{state:q.disabled?"idle":s?.keys.some(a=>a.healthy)??!0?"live":"down"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:q.name||q.id}),(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[12px] text-text-subtle",children:[(0,b.jsxs)("span",{className:"font-mono",children:[q.id,"/"]}),(0,b.jsx)("span",{children:"—"}),(0,b.jsx)("span",{className:"font-mono",children:q.base_url})]})]}),q.disabled&&(0,b.jsx)(g.Badge,{tone:"down",children:"disabled"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)(j.Button,{variant:"ghost",onClick:()=>{ag(!0),ai(q.base_url),ak(q.id),am(q.name??"")},children:[(0,b.jsx)(k.Icon,{name:"edit",size:15})," Edit"]}),(0,b.jsxs)(j.Button,{variant:"ghost",disabled:"test"===A,onClick:()=>ay("test",async()=>{let b=await e.adminApi.testProvider(a);return b.ok&&z(b.data),b}),children:[(0,b.jsx)(k.Icon,{name:"wifi_tethering",size:16})," ","test"===A?"Testing…":"Test connection"]}),(0,b.jsxs)(j.Button,{variant:"ghost",disabled:"discover"===A,onClick:()=>ay("discover",async()=>{let b=await e.adminApi.discoverModels(a);return b.ok&&X(b.data?.models??[]),b}),children:[(0,b.jsx)(k.Icon,{name:"sync",size:16})," ","discover"===A?"Fetching…":"Fetch models"]})]})]}),y&&(0,b.jsx)("div",{className:`mt-2 rounded-brand border px-3 py-2 text-[12px] ${y.ok?"border-live/30 bg-live/5 text-live":"border-danger/30 bg-danger/5 text-danger"}`,children:y.ok?`connected (${y.status})`:y.error||(y.reachable?`server returned ${y.status}`:"could not reach the endpoint")}),w&&(0,b.jsx)("div",{className:"mt-2 rounded-brand border border-danger/30 bg-danger/5 px-3 py-2 text-[12px] text-danger",children:w}),af&&(0,b.jsxs)("div",{className:"mt-4 space-y-3 rounded-brand border border-border bg-surface p-4",children:[(0,b.jsx)(j.Field,{label:"Label",hint:"display name in dashboard (optional, does not affect routing)",children:(0,b.jsx)(j.Input,{value:al,onChange:a=>am(a.target.value),placeholder:aj||"e.g. My Provider",className:"text-[12.5px]"})}),(0,b.jsx)(j.Field,{label:"ID / Prefix",hint:"the call prefix (id/model) — changing this breaks CLI tools",children:(0,b.jsx)(j.Input,{value:aj,onChange:a=>ak(a.target.value),placeholder:"e.g. openai",className:"font-mono text-[12.5px]"})}),aj.trim()&&aj.trim()!==a&&(0,b.jsxs)("p",{className:"flex items-start gap-1.5 rounded-brand border border-warning/40 bg-warning/8 px-2.5 py-2 text-[11.5px] text-warning",children:[(0,b.jsx)(k.Icon,{name:"warning",size:14,className:"mt-0.5 flex-none"}),(0,b.jsxs)("span",{children:["Renaming rewrites the call string. CLI tools pointing at"," ",(0,b.jsxs)("code",{className:"tnum",children:[a,"/…"]})," will break until repointed; combos that target it are updated automatically."]})]}),(0,b.jsx)(j.Field,{label:"Base URL",children:(0,b.jsx)(j.Input,{value:ah,onChange:a=>ai(a.target.value),placeholder:"https://...",className:"font-mono text-[12.5px]"})}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",onClick:()=>ag(!1),children:"Cancel"}),(0,b.jsx)(j.Button,{disabled:"editconn"===A||!aj.trim(),onClick:()=>ay("editconn",async()=>{let b=aj.trim(),c=a;if(b&&b!==a){let d=await e.adminApi.renameProvider(a,b);if(!d.ok)return d;c=b}let d=al.trim(),f=await e.adminApi.editProvider(c,{base_url:ah.trim()||void 0,name:d});return f.ok&&(ag(!1),c!==a&&m.push(`/providers/${encodeURIComponent(c)}`)),f}),children:"Save"})]})]})]}),(0,b.jsxs)("div",{className:`space-y-4 transition-opacity ${q.disabled?"opacity-50":""}`,children:[(0,b.jsxs)(i.RichCard,{header:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i.CardTitle,{title:"Keys",sub:`${av.length} configured`}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[av.length>1&&(0,b.jsxs)(j.Button,{variant:"ghost",disabled:aa,onClick:()=>at(av.length),children:[(0,b.jsx)(k.Icon,{name:aa?"progress_activity":"sync",size:15}),aa?"Testing…":"Test All"]}),aa&&(0,b.jsxs)(j.Button,{variant:"ghost",onClick:()=>{ae.current=!0},children:[(0,b.jsx)(k.Icon,{name:"stop",size:15})," Stop"]}),"round-robin"===q.strategy&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("span",{className:"text-[11px] text-text-subtle",title:"Requests per key before rotating to the next one",children:"Sticky:"}),(0,b.jsxs)("div",{className:"flex items-center rounded-brand border border-border-subtle",children:[(0,b.jsx)("button",{type:"button",disabled:(q.sticky??1)<=1,onClick:()=>void e.adminApi.setProviderStrategy(a,"round-robin",Math.max(1,(q.sticky??1)-1)).then(()=>au()),className:"px-1.5 py-0.5 text-text-subtle transition-colors hover:text-text disabled:opacity-30","aria-label":"Decrease sticky",children:(0,b.jsx)(k.Icon,{name:"remove",size:13})}),(0,b.jsx)("span",{className:"tnum w-6 text-center text-[11px] text-text",children:q.sticky??1}),(0,b.jsx)("button",{type:"button",onClick:()=>void e.adminApi.setProviderStrategy(a,"round-robin",(q.sticky??1)+1).then(()=>au()),className:"px-1.5 py-0.5 text-text-subtle transition-colors hover:text-text","aria-label":"Increase sticky",children:(0,b.jsx)(k.Icon,{name:"add",size:13})})]})]}),(0,b.jsx)("span",{className:"text-[11px] text-text-subtle",children:"Round Robin"}),(0,b.jsx)("button",{onClick:()=>{let b="round-robin"===q.strategy?null:"round-robin";e.adminApi.setProviderStrategy(a,b,q.sticky??1).then(()=>au())},className:`relative h-5 w-9 rounded-full transition-colors ${"round-robin"===q.strategy?"bg-accent":"bg-border-subtle"}`,"aria-label":"Toggle round-robin",children:(0,b.jsx)("span",{className:`absolute left-0.5 top-0.5 h-4 w-4 rounded-full bg-white transition-transform ${"round-robin"===q.strategy?"translate-x-[18px]":"translate-x-0"}`})})]})]}),children:[ac&&(0,b.jsx)("div",{className:"mb-3 flex items-center gap-2 text-[11.5px]",children:(0,b.jsxs)(g.Badge,{tone:0===ac.failed?"live":"warn",children:[ac.total," tested: ",ac.passed," valid, ",ac.failed," failed"]})}),0===av.length?(0,b.jsx)(l.Empty,{children:"No keys (free / service-account provider)."}):(0,b.jsx)("div",{className:"max-h-[400px] space-y-1.5 overflow-y-auto",children:av.map((c,d)=>{let i=s?.keys[d],l=$[d],m=l&&"testing"!==l?l:null,n=m?m.ok?"live":m.reachable?"idle":"down":i?i.healthy?"live":"down":"idle",o=q.key_names?.[c],p=q.disabled_keys?.includes(d)??!1;return M===d?(0,b.jsxs)("div",{className:"space-y-2 rounded-brand border border-accent bg-accent-soft/40 px-3 py-2.5",children:[(0,b.jsx)(j.Input,{value:O,onChange:a=>P(a.target.value),placeholder:"key name (optional)"}),(0,b.jsx)(j.Input,{value:Q,onChange:a=>R(a.target.value),placeholder:"new key value (leave blank to keep)",className:"font-mono text-[12.5px]"}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",onClick:()=>N(null),children:"Cancel"}),(0,b.jsx)(j.Button,{disabled:A===`editkey${d}`,onClick:()=>ay(`editkey${d}`,async()=>{let b=await e.adminApi.editKey(a,d,{name:O,key:Q.trim()||void 0});return b.ok&&N(null),b}),children:"Save"})]})]},d):(0,b.jsxs)("div",{className:`rounded-brand border border-border-subtle px-3 py-2${p?" opacity-60":""}`,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("button",{onClick:()=>ay(`reorder${d}up`,()=>e.adminApi.reorderKey(a,d,d-1)),disabled:0===d,className:"p-0.5 text-text-subtle hover:text-text disabled:opacity-30","aria-label":"Move up",children:(0,b.jsx)(k.Icon,{name:"keyboard_arrow_up",size:14})}),(0,b.jsx)("button",{onClick:()=>ay(`reorder${d}dn`,()=>e.adminApi.reorderKey(a,d,d+1)),disabled:d===av.length-1,className:"p-0.5 text-text-subtle hover:text-text disabled:opacity-30","aria-label":"Move down",children:(0,b.jsx)(k.Icon,{name:"keyboard_arrow_down",size:14})})]}),(0,b.jsx)(f.Lamp,{state:n}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[o&&(0,b.jsx)("div",{className:"text-[12px] font-semibold text-text-muted",children:o}),(0,b.jsx)("span",{className:"block truncate font-mono text-[12.5px] text-text",children:an[d]??c})]}),an[d]&&(0,b.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(an[d])},className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text","aria-label":"Copy key",title:"Copy to clipboard",children:(0,b.jsx)(k.Icon,{name:"content_copy",size:14})}),i&&i.cooldown_ms>0&&(0,b.jsx)(h.CooldownTimer,{ms:i.cooldown_ms}),(0,b.jsx)("button",{onClick:async()=>{if(an[d])return void ao(a=>{let b={...a};return delete b[d],b});let b=await e.adminApi.revealKey(a,d);b.ok&&b.data?.key&&ao(a=>({...a,[d]:b.data.key}))},className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text","aria-label":an[d]?"Hide key":"Show key",title:an[d]?"Hide key":"Show key",children:(0,b.jsx)(k.Icon,{name:an[d]?"visibility_off":"visibility",size:15})}),(0,b.jsx)("button",{onClick:()=>ay(`toggle${d}`,()=>e.adminApi.toggleKey(a,d,p)),className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text","aria-label":p?"Enable key":"Disable key",title:p?"Enable this key":"Disable this key",children:(0,b.jsx)(k.Icon,{name:p?"toggle_off":"toggle_on",size:20,className:p?"text-text-subtle":"text-success"})}),(0,b.jsx)("button",{onClick:()=>as(d),disabled:"testing"===l,className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text disabled:opacity-60","aria-label":`Check key ${d+1}`,title:"Check this key against the base URL",children:(0,b.jsx)(k.Icon,{name:"testing"===l?"progress_activity":"wifi_tethering",size:15})}),(0,b.jsx)("button",{onClick:()=>{N(d),P(o??""),R("")},className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text","aria-label":`Edit key ${d+1}`,title:"Rename or replace this key",children:(0,b.jsx)(k.Icon,{name:"edit",size:15})}),(0,b.jsx)("button",{onClick:()=>ay(`rmkey${d}`,()=>e.adminApi.removeKey(a,d)),className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-danger","aria-label":"Remove key",children:(0,b.jsx)(k.Icon,{name:"delete",size:15})})]}),m&&(0,b.jsxs)("div",{className:"mt-1.5 pl-8 text-[11.5px]",children:[(0,b.jsx)(g.Badge,{tone:m.ok?"live":m.reachable?"warn":"down",children:m.ok?"valid":m.reachable?`reachable (${m.status})`:"invalid"}),m.error&&(0,b.jsx)("p",{className:"mt-0.5 text-danger",children:m.error})]}),!m&&i?.last_error&&(0,b.jsxs)("div",{className:"mt-1.5 pl-8 text-[11.5px]",children:[(0,b.jsxs)("p",{className:"text-danger",children:[i.last_error.status?`${i.last_error.status}: `:"",i.last_error.message]}),(0,b.jsx)("span",{className:"text-text-subtle",children:new Date(i.last_error.at).toLocaleTimeString()})]})]},d)})}),(0,b.jsxs)("div",{className:"mt-3 space-y-2",children:[(0,b.jsx)(j.Input,{value:E,onChange:a=>F(a.target.value),placeholder:"key name (optional, e.g. primary)"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(j.Input,{value:C,onChange:a=>{D(a.target.value),H(null)},placeholder:"add a key…",className:"font-mono text-[12.5px]"}),(0,b.jsx)(j.Button,{variant:"ghost",disabled:!C||"checkkey"===A,onClick:()=>ay("checkkey",async()=>{let b=await e.adminApi.checkKey(a,C);return H(b.data??{ok:!1,reachable:!1,status:0,error:b.error}),b}),children:"Check"}),(0,b.jsx)(j.Button,{disabled:!C||"addkey"===A,onClick:()=>ay("addkey",async()=>{let b=await e.adminApi.addKey(a,C,E.trim()||void 0);return b.ok&&(D(""),F(""),H(null)),b}),children:"Add"}),(0,b.jsx)(j.Button,{variant:"ghost",onClick:()=>J(!0),children:"Bulk"})]}),G&&(0,b.jsx)("div",{className:`rounded-brand border px-3 py-2 text-[12px] ${G.ok?"border-live/30 bg-live/5 text-live":"border-danger/30 bg-danger/5 text-danger"}`,children:G.ok?`valid (${G.status})`:G.error||`server returned ${G.status}`})]}),I&&(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:()=>J(!1),children:(0,b.jsxs)("div",{className:"w-full max-w-lg rounded-brand border border-border bg-surface p-5 shadow-xl",onClick:a=>a.stopPropagation(),children:[(0,b.jsx)("h3",{className:"mb-1 text-[14px] font-semibold text-text",children:"Bulk Add Keys"}),(0,b.jsxs)("p",{className:"mb-3 text-[12px] text-text-subtle",children:["Format: ",(0,b.jsx)("code",{className:"text-text-muted",children:"name|apiKey"})," or just ",(0,b.jsx)("code",{className:"text-text-muted",children:"apiKey"})," (one per line)"]}),(0,b.jsx)("textarea",{value:K,onChange:a=>L(a.target.value),placeholder:"primary|sk-abc123\nbackup|sk-xyz789\nsk-anonymous-key",rows:8,className:"w-full rounded-brand border border-border bg-bg px-3 py-2 font-mono text-[12.5px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none",autoFocus:!0}),(0,b.jsxs)("div",{className:"mt-3 flex justify-end gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",onClick:()=>J(!1),children:"Cancel"}),(0,b.jsx)(j.Button,{disabled:!K.trim()||"bulkkeys"===A,onClick:()=>ay("bulkkeys",async()=>{for(let b of K.split("\n").map(a=>a.trim()).filter(Boolean)){let c=b.indexOf("|"),d=c>0?b.slice(0,c).trim():void 0,f=c>0?b.slice(c+1).trim():b;if(!f)continue;let g=await e.adminApi.addKey(a,f,d);if(!g.ok)return g}return L(""),J(!1),{ok:!0}}),children:"bulkkeys"===A?"Adding…":`Add ${K.split("\n").filter(a=>a.trim()).length} keys`})]})]})})]}),(0,b.jsxs)(i.RichCard,{header:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i.CardTitle,{title:"Models served",sub:`${q.models.length} in catalog`}),q.models.length>0&&(0,b.jsx)("button",{onClick:()=>ay("clear",()=>e.adminApi.clearModels(a)),disabled:"clear"===A,className:"text-[12px] text-text-subtle hover:text-danger",children:"Clear all"})]}),children:[0===q.models.length?(0,b.jsx)(l.Empty,{children:"No models. Add one below, or fetch them for a free/auto provider."}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("p",{className:"mb-2.5 text-[12px] text-text-subtle",children:["Call any of these as ",(0,b.jsxs)("span",{className:"tnum text-text-muted",children:[q.id,"/<model>"]}),", as a combo alias, or by the bare id."]}),q.models.length>8&&(0,b.jsxs)("div",{className:"mb-2.5 flex items-center gap-2",children:[(0,b.jsxs)("div",{className:"relative flex-1",children:[(0,b.jsx)(k.Icon,{name:"search",size:15,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-text-subtle"}),(0,b.jsx)(j.Input,{value:U,onChange:a=>V(a.target.value),placeholder:"filter models…",className:"pl-8"})]}),(0,b.jsx)("span",{className:"tnum whitespace-nowrap text-[12px] text-text-subtle",children:aw?`${ax.length} of ${q.models.length}`:`${q.models.length}`})]}),0===ax.length?(0,b.jsxs)(l.Empty,{children:["No model matches “",U,"”."]}):(0,b.jsx)("div",{className:"max-h-[280px] divide-y divide-border-subtle overflow-y-auto rounded-brand border border-border-subtle",children:ax.map(c=>{let d=Y[c.id];return(0,b.jsxs)("div",{className:"group flex items-center justify-between gap-3 px-3 py-2 hover:bg-bg",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,b.jsx)(k.Icon,{name:"ok"===d?"check_circle":"fail"===d?"cancel":"smart_toy",size:15,className:`flex-none ${"ok"===d?"text-success":"fail"===d?"text-danger":"text-text-subtle"}`}),(0,b.jsxs)("span",{className:"tnum truncate text-[12.5px]",children:[(0,b.jsxs)("span",{className:"text-text-subtle",children:[q.id,"/"]}),(0,b.jsx)("span",{className:"text-text",children:c.id})]}),(0,b.jsx)(o.CapacityBadges,{model:c.id,provider:q.id}),(void 0!==c.price_in||void 0!==c.price_out)&&(0,b.jsxs)("span",{className:"tnum whitespace-nowrap text-[11px] text-text-subtle",children:[l.fmt.cost(c.price_in??0),"/",l.fmt.cost(c.price_out??0)," per 1M"]})]}),(0,b.jsxs)("div",{className:"flex flex-none items-center gap-0.5",children:[(0,b.jsx)("button",{onClick:()=>ar(c.id),disabled:"testing"===d,className:"rounded p-1 text-text-subtle transition-colors hover:bg-surface hover:text-accent disabled:opacity-60","aria-label":`Test ${c.id}`,title:"fail"===d?"Test failed — click to retry":"Test this model",children:(0,b.jsx)(k.Icon,{name:"testing"===d?"progress_activity":"wifi_tethering",size:15})}),(0,b.jsx)("button",{onClick:()=>ay(`rmmodel${c.id}`,()=>e.adminApi.removeModel(a,c.id)),disabled:A===`rmmodel${c.id}`,className:"rounded p-1 text-text-subtle transition-colors hover:bg-surface hover:text-danger disabled:opacity-40","aria-label":`Remove ${c.id}`,children:(0,b.jsx)(k.Icon,{name:"delete",size:16})})]})]},c.id)})})]}),(0,b.jsxs)("div",{className:"mt-3 flex gap-2",children:[(0,b.jsx)(j.Input,{value:S,onChange:a=>T(a.target.value),placeholder:"add a model id…"}),(0,b.jsx)(j.Button,{disabled:!S||"addmodel"===A,onClick:()=>ay("addmodel",async()=>{let b=await e.adminApi.addModel(a,S);return b.ok&&T(""),b}),children:"Add"})]})]})]}),W&&(0,b.jsx)(n,{models:W,busy:"addmodels"===A,onClose:()=>X(null),onAdd:b=>ay("addmodels",async()=>{let c=await e.adminApi.addModels(a,b);return c.ok&&X(null),c})}),(0,b.jsx)("div",{className:"mt-6",children:(0,b.jsxs)(j.Button,{variant:"danger",onClick:()=>aq(!0),children:[(0,b.jsx)(k.Icon,{name:"delete",size:16})," Remove provider"]})}),ap&&(0,b.jsx)(p.ConfirmModal,{title:"Remove provider",message:`Delete "${q.name??a}"? All keys and model associations will be lost.`,confirmLabel:"Remove",busy:"rmprov"===A,onCancel:()=>aq(!1),onConfirm:()=>ay("rmprov",async()=>{let b=await e.adminApi.removeProvider(a);return b.ok?m.push("/providers"):aq(!1),b})})]})}],33410)}];
|
|
1
|
+
module.exports=[33410,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(56173),f=a.i(47153),g=a.i(2693),h=a.i(2799),i=a.i(85732),j=a.i(7078),k=a.i(93026),l=a.i(58918);function m({checked:a,indeterminate:c,onChange:d,className:e,ariaLabel:f}){let g=a||c;return(0,b.jsx)("button",{type:"button",role:"checkbox","aria-checked":c?"mixed":a,"aria-label":f,onClick:a=>{a.stopPropagation(),d()},className:`flex h-[18px] w-[18px] flex-none items-center justify-center rounded-[5px] border transition-colors ${g?"border-accent bg-accent text-accent-ink":"border-border bg-bg text-transparent hover:border-text-subtle"}${e?` ${e}`:""}`,children:(0,b.jsx)(k.Icon,{name:c?"remove":"check",size:13})})}function n({models:a,busy:d,onAdd:e,onClose:f}){let[g,h]=(0,c.useState)(""),[i,l]=(0,c.useState)(()=>new Set(a.filter(a=>!a.added).map(a=>a.id))),o=(0,c.useMemo)(()=>{let b=g.trim().toLowerCase();return b?a.filter(a=>a.id.toLowerCase().includes(b)):a},[a,g]);function p(a){l(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})}let q=o.filter(a=>i.has(a.id)).length,r=o.length>0&&q===o.length;function s(){l(a=>{let b=new Set(a);return r?o.forEach(a=>b.delete(a.id)):o.forEach(a=>b.add(a.id)),b})}return(0,b.jsx)("div",{className:"fixed inset-0 z-50 grid place-items-center bg-black/50 p-6",onClick:f,children:(0,b.jsxs)("div",{className:"flex max-h-[80vh] w-full max-w-[480px] flex-col overflow-hidden rounded-brand-lg border border-border bg-surface shadow-elevated",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("header",{className:"flex items-center justify-between border-b border-border-subtle px-4 py-3",children:[(0,b.jsxs)("span",{className:"text-[14px] font-semibold text-text",children:[a.length," models found"]}),(0,b.jsx)("button",{onClick:f,className:"text-text-subtle hover:text-text","aria-label":"Close",children:(0,b.jsx)(k.Icon,{name:"close",size:18})})]}),(0,b.jsx)("div",{className:"border-b border-border-subtle px-4 py-2.5",children:(0,b.jsx)(j.Input,{value:g,onChange:a=>h(a.target.value),placeholder:"filter…",autoFocus:!0})}),o.length>0&&(0,b.jsxs)("button",{onClick:s,className:"flex items-center gap-2.5 border-b border-border-subtle px-4 py-2 text-left hover:bg-surface-2",children:[(0,b.jsx)(m,{checked:r,indeterminate:q>0&&!r,onChange:s,ariaLabel:"Select all"}),(0,b.jsxs)("span",{className:"text-[12.5px] font-medium text-text",children:["Select all",g?" (filtered)":""]}),(0,b.jsxs)("span",{className:"ml-auto tnum text-[11px] text-text-subtle",children:[q,"/",o.length]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto px-2 py-2",children:0===o.length?(0,b.jsx)("div",{className:"px-2 py-6 text-center text-[13px] text-text-muted",children:"No matches."}):o.map(a=>{let c=i.has(a.id);return(0,b.jsxs)("button",{onClick:()=>p(a.id),className:`flex w-full items-center gap-2.5 rounded-brand border px-2.5 py-2 text-left transition-colors ${c?"border-accent/40 bg-accent-soft":"border-transparent hover:bg-surface-2"}`,children:[(0,b.jsx)(m,{checked:c,onChange:()=>p(a.id),ariaLabel:a.id}),(0,b.jsx)("span",{className:"flex-1 truncate text-[12.5px] text-text",children:a.id}),a.added&&(0,b.jsx)("span",{className:"text-[11px] text-text-subtle",children:"in catalog"})]},a.id)})}),(0,b.jsxs)("footer",{className:"flex items-center justify-between gap-3 border-t border-border-subtle bg-bg-alt px-4 py-2.5",children:[(0,b.jsxs)("span",{className:"tnum text-[12px] text-text-muted",children:[i.size," selected"]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",onClick:f,children:"Cancel"}),(0,b.jsx)(j.Button,{disabled:0===i.size||d,onClick:()=>e([...i]),children:d?"Adding…":`Add ${i.size}`})]})]})]})})}var o=a.i(52065),p=a.i(73858);a.s(["ProviderDetail",0,function({id:a}){let m=(0,d.useRouter)(),[q,r]=(0,c.useState)(null),[s,t]=(0,c.useState)(null),[u,v]=(0,c.useState)(""),[w,x]=(0,c.useState)(""),[y,z]=(0,c.useState)(null),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)(""),[E,F]=(0,c.useState)(""),[G,H]=(0,c.useState)(null),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(""),[M,N]=(0,c.useState)(null),[O,P]=(0,c.useState)(""),[Q,R]=(0,c.useState)(""),[S,T]=(0,c.useState)(""),[U,V]=(0,c.useState)(""),[W,X]=(0,c.useState)(null),[Y,Z]=(0,c.useState)({}),[$,_]=(0,c.useState)({}),[aa,ab]=(0,c.useState)(!1),[ac,ad]=(0,c.useState)(null),ae=(0,c.useRef)(!1),[af,ag]=(0,c.useState)(!1),[ah,ai]=(0,c.useState)(""),[aj,ak]=(0,c.useState)(""),[al,am]=(0,c.useState)(""),[an,ao]=(0,c.useState)({}),[ap,aq]=(0,c.useState)(!1);async function ar(b){Z(a=>({...a,[b]:"testing"}));let c=await e.adminApi.testModel(a,b);Z(a=>({...a,[b]:c.ok&&c.data?.ok?"ok":"fail"}))}async function as(b){_(a=>({...a,[b]:"testing"}));let c=await e.adminApi.testKey(a,b);_(a=>({...a,[b]:c.data??{ok:!1,reachable:!1,status:0,error:c.error}}))}async function at(b){ae.current=!1,ab(!0),ad(null),_({});let c=0,d=0;for(let f=0;f<b&&!ae.current;f++){_(a=>({...a,[f]:"testing"}));let g=await e.adminApi.testKey(a,f),h=g.data??{ok:!1,reachable:!1,status:0,error:g.error};_(a=>({...a,[f]:h})),h.ok?c++:d++,f<b-1&&!ae.current&&await new Promise(a=>setTimeout(a,500))}ab(!1),ad({total:b,passed:c,failed:d})}let au=(0,c.useCallback)(async()=>{let[b,c]=await Promise.all([fetch("/api/gw/admin/config"),e.adminApi.providers()]);if(!b.ok)return void v("could not reach the gateway");let d=(await b.json()).providers.find(b=>b.id===a)??null;d?(v(""),r(d),t(c.data?.providers.find(b=>b.id===a)??null)):v(`provider "${a}" not found`)},[a]);if((0,c.useEffect)(()=>{au()},[au]),u)return(0,b.jsx)(l.Empty,{children:u});if(!q)return(0,b.jsx)(l.Empty,{children:"Loading…"});let av=q.api_keys??(q.api_key?[q.api_key]:[]),aw=U.trim().toLowerCase(),ax=aw?q.models.filter(a=>a.id.toLowerCase().includes(aw)):q.models;async function ay(a,b){B(a),x("");let c=await b();B(""),c.ok?(x(""),await au()):x(c.error??"action failed")}return(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{onClick:()=>m.push("/providers"),className:"mb-4 inline-flex items-center gap-1 text-[12px] text-text-muted hover:text-text",children:[(0,b.jsx)(k.Icon,{name:"arrow_back",size:15})," Providers"]}),(0,b.jsxs)("div",{className:"mb-6",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(f.Lamp,{state:q.disabled?"idle":s?.keys.some(a=>a.healthy)??!0?"live":"down"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:q.name||q.id}),(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[12px] text-text-subtle",children:[(0,b.jsxs)("span",{className:"font-mono",children:[q.id,"/"]}),(0,b.jsx)("span",{children:"—"}),(0,b.jsx)("span",{className:"font-mono",children:q.base_url})]})]}),q.disabled&&(0,b.jsx)(g.Badge,{tone:"down",children:"disabled"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)(j.Button,{variant:"ghost",onClick:()=>{ag(!0),ai(q.base_url),ak(q.id),am(q.name??"")},children:[(0,b.jsx)(k.Icon,{name:"edit",size:15})," Edit"]}),(0,b.jsxs)(j.Button,{variant:"ghost",disabled:"test"===A,onClick:()=>ay("test",async()=>{let b=await e.adminApi.testProvider(a);return b.ok&&z(b.data),b}),children:[(0,b.jsx)(k.Icon,{name:"wifi_tethering",size:16})," ","test"===A?"Testing…":"Test connection"]}),(0,b.jsxs)(j.Button,{variant:"ghost",disabled:"discover"===A,onClick:()=>ay("discover",async()=>{let b=await e.adminApi.discoverModels(a);return b.ok&&X(b.data?.models??[]),b}),children:[(0,b.jsx)(k.Icon,{name:"sync",size:16})," ","discover"===A?"Fetching…":"Fetch models"]})]})]}),y&&(0,b.jsx)("div",{className:`mt-2 rounded-brand border px-3 py-2 text-[12px] ${y.ok?"border-live/30 bg-live/5 text-live":"border-danger/30 bg-danger/5 text-danger"}`,children:y.ok?`connected (${y.status})`:y.error||(y.reachable?`server returned ${y.status}`:"could not reach the endpoint")}),w&&(0,b.jsx)("div",{className:"mt-2 rounded-brand border border-danger/30 bg-danger/5 px-3 py-2 text-[12px] text-danger",children:w}),af&&(0,b.jsxs)("div",{className:"mt-4 space-y-3 rounded-brand border border-border bg-surface p-4",children:[(0,b.jsx)(j.Field,{label:"Label",hint:"display name in dashboard (optional, does not affect routing)",children:(0,b.jsx)(j.Input,{value:al,onChange:a=>am(a.target.value),placeholder:aj||"e.g. My Provider",className:"text-[12.5px]"})}),(0,b.jsx)(j.Field,{label:"ID / Prefix",hint:"the call prefix (id/model) — changing this breaks CLI tools",children:(0,b.jsx)(j.Input,{value:aj,onChange:a=>ak(a.target.value),placeholder:"e.g. openai",className:"font-mono text-[12.5px]"})}),aj.trim()&&aj.trim()!==a&&(0,b.jsxs)("p",{className:"flex items-start gap-1.5 rounded-brand border border-warning/40 bg-warning/8 px-2.5 py-2 text-[11.5px] text-warning",children:[(0,b.jsx)(k.Icon,{name:"warning",size:14,className:"mt-0.5 flex-none"}),(0,b.jsxs)("span",{children:["Renaming rewrites the call string. CLI tools pointing at"," ",(0,b.jsxs)("code",{className:"tnum",children:[a,"/…"]})," will break until repointed; combos that target it are updated automatically."]})]}),(0,b.jsx)(j.Field,{label:"Base URL",children:(0,b.jsx)(j.Input,{value:ah,onChange:a=>ai(a.target.value),placeholder:"https://...",className:"font-mono text-[12.5px]"})}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",onClick:()=>ag(!1),children:"Cancel"}),(0,b.jsx)(j.Button,{disabled:"editconn"===A||!aj.trim(),onClick:()=>ay("editconn",async()=>{let b=aj.trim(),c=a;if(b&&b!==a){let d=await e.adminApi.renameProvider(a,b);if(!d.ok)return d;c=b}let d=al.trim(),f=await e.adminApi.editProvider(c,{base_url:ah.trim()||void 0,name:d});return f.ok&&(ag(!1),c!==a&&m.push(`/providers/${encodeURIComponent(c)}`)),f}),children:"Save"})]})]})]}),(0,b.jsxs)("div",{className:`space-y-4 transition-opacity ${q.disabled?"opacity-50":""}`,children:[(0,b.jsxs)(i.RichCard,{header:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i.CardTitle,{title:"Keys",sub:`${av.length} configured`}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[av.length>1&&(0,b.jsxs)(j.Button,{variant:"ghost",disabled:aa,onClick:()=>at(av.length),children:[(0,b.jsx)(k.Icon,{name:aa?"progress_activity":"sync",size:15}),aa?"Testing…":"Test All"]}),aa&&(0,b.jsxs)(j.Button,{variant:"ghost",onClick:()=>{ae.current=!0},children:[(0,b.jsx)(k.Icon,{name:"stop",size:15})," Stop"]}),"round-robin"===q.strategy&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("span",{className:"text-[11px] text-text-subtle",title:"Requests per key before rotating to the next one",children:"Sticky:"}),(0,b.jsxs)("div",{className:"flex items-center rounded-brand border border-border-subtle",children:[(0,b.jsx)("button",{type:"button",disabled:(q.sticky??1)<=1,onClick:()=>void e.adminApi.setProviderStrategy(a,"round-robin",Math.max(1,(q.sticky??1)-1)).then(()=>au()),className:"px-1.5 py-0.5 text-text-subtle transition-colors hover:text-text disabled:opacity-30","aria-label":"Decrease sticky",children:(0,b.jsx)(k.Icon,{name:"remove",size:13})}),(0,b.jsx)("span",{className:"tnum w-6 text-center text-[11px] text-text",children:q.sticky??1}),(0,b.jsx)("button",{type:"button",onClick:()=>void e.adminApi.setProviderStrategy(a,"round-robin",(q.sticky??1)+1).then(()=>au()),className:"px-1.5 py-0.5 text-text-subtle transition-colors hover:text-text","aria-label":"Increase sticky",children:(0,b.jsx)(k.Icon,{name:"add",size:13})})]})]}),(0,b.jsx)("span",{className:"text-[11px] text-text-subtle",children:"Round Robin"}),(0,b.jsx)("button",{onClick:()=>{let b="round-robin"===q.strategy?null:"round-robin";e.adminApi.setProviderStrategy(a,b,q.sticky??1).then(()=>au())},className:`relative h-5 w-9 rounded-full transition-colors ${"round-robin"===q.strategy?"bg-accent":"bg-border-subtle"}`,"aria-label":"Toggle round-robin",children:(0,b.jsx)("span",{className:`absolute left-0.5 top-0.5 h-4 w-4 rounded-full bg-white transition-transform ${"round-robin"===q.strategy?"translate-x-[18px]":"translate-x-0"}`})})]})]}),children:[ac&&(0,b.jsx)("div",{className:"mb-3 flex items-center gap-2 text-[11.5px]",children:(0,b.jsxs)(g.Badge,{tone:0===ac.failed?"live":"warn",children:[ac.total," tested: ",ac.passed," valid, ",ac.failed," failed"]})}),0===av.length?(0,b.jsx)(l.Empty,{children:"No keys (free / service-account provider)."}):(0,b.jsx)("div",{className:"max-h-[400px] space-y-1.5 overflow-y-auto",children:av.map((c,d)=>{let i=s?.keys[d],l=$[d],m=l&&"testing"!==l?l:null,n=q.disabled_keys?.includes(d)??!1,o=n?"down":m?m.ok?"live":m.reachable?"idle":"down":i?i.healthy?"live":"down":"idle",p=q.key_names?.[c];return M===d?(0,b.jsxs)("div",{className:"space-y-2 rounded-brand border border-accent bg-accent-soft/40 px-3 py-2.5",children:[(0,b.jsx)(j.Input,{value:O,onChange:a=>P(a.target.value),placeholder:"key name (optional)"}),(0,b.jsx)(j.Input,{value:Q,onChange:a=>R(a.target.value),placeholder:"new key value (leave blank to keep)",className:"font-mono text-[12.5px]"}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",onClick:()=>N(null),children:"Cancel"}),(0,b.jsx)(j.Button,{disabled:A===`editkey${d}`,onClick:()=>ay(`editkey${d}`,async()=>{let b=await e.adminApi.editKey(a,d,{name:O,key:Q.trim()||void 0});return b.ok&&N(null),b}),children:"Save"})]})]},d):(0,b.jsxs)("div",{className:`rounded-brand border border-border-subtle px-3 py-2${n?" opacity-60":""}`,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("button",{onClick:()=>ay(`reorder${d}up`,()=>e.adminApi.reorderKey(a,d,d-1)),disabled:0===d,className:"p-0.5 text-text-subtle hover:text-text disabled:opacity-30","aria-label":"Move up",children:(0,b.jsx)(k.Icon,{name:"keyboard_arrow_up",size:14})}),(0,b.jsx)("button",{onClick:()=>ay(`reorder${d}dn`,()=>e.adminApi.reorderKey(a,d,d+1)),disabled:d===av.length-1,className:"p-0.5 text-text-subtle hover:text-text disabled:opacity-30","aria-label":"Move down",children:(0,b.jsx)(k.Icon,{name:"keyboard_arrow_down",size:14})})]}),(0,b.jsx)(f.Lamp,{state:o}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[p&&(0,b.jsx)("div",{className:"text-[12px] font-semibold text-text-muted",children:p}),(0,b.jsx)("span",{className:"block truncate font-mono text-[12.5px] text-text",children:an[d]??c})]}),an[d]&&(0,b.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(an[d])},className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text","aria-label":"Copy key",title:"Copy to clipboard",children:(0,b.jsx)(k.Icon,{name:"content_copy",size:14})}),i&&i.cooldown_ms>0&&(0,b.jsx)(h.CooldownTimer,{ms:i.cooldown_ms}),(0,b.jsx)("button",{onClick:async()=>{if(an[d])return void ao(a=>{let b={...a};return delete b[d],b});let b=await e.adminApi.revealKey(a,d);b.ok&&b.data?.key&&ao(a=>({...a,[d]:b.data.key}))},className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text","aria-label":an[d]?"Hide key":"Show key",title:an[d]?"Hide key":"Show key",children:(0,b.jsx)(k.Icon,{name:an[d]?"visibility_off":"visibility",size:15})}),(0,b.jsx)("button",{onClick:()=>ay(`toggle${d}`,()=>e.adminApi.toggleKey(a,d,n)),className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text","aria-label":n?"Enable key":"Disable key",title:n?"Enable this key":"Disable this key",children:(0,b.jsx)(k.Icon,{name:n?"toggle_off":"toggle_on",size:20,className:n?"text-danger":"text-success"})}),(0,b.jsx)("button",{onClick:()=>as(d),disabled:"testing"===l,className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text disabled:opacity-60","aria-label":`Check key ${d+1}`,title:"Check this key against the base URL",children:(0,b.jsx)(k.Icon,{name:"testing"===l?"progress_activity":"wifi_tethering",size:15})}),(0,b.jsx)("button",{onClick:()=>{N(d),P(p??""),R("")},className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-text","aria-label":`Edit key ${d+1}`,title:"Rename or replace this key",children:(0,b.jsx)(k.Icon,{name:"edit",size:15})}),(0,b.jsx)("button",{onClick:()=>ay(`rmkey${d}`,()=>e.adminApi.removeKey(a,d)),className:"flex-none rounded p-1 text-text-subtle transition-colors hover:text-danger","aria-label":"Remove key",children:(0,b.jsx)(k.Icon,{name:"delete",size:15})})]}),m&&(0,b.jsxs)("div",{className:"mt-1.5 pl-8 text-[11.5px]",children:[(0,b.jsx)(g.Badge,{tone:m.ok?"live":m.reachable?"warn":"down",children:m.ok?"valid":m.reachable?`reachable (${m.status})`:"invalid"}),m.error&&(0,b.jsx)("p",{className:"mt-0.5 text-danger",children:m.error})]}),!m&&i?.last_error&&(0,b.jsxs)("div",{className:"mt-1.5 pl-8 text-[11.5px]",children:[(0,b.jsxs)("p",{className:"text-danger",children:[i.last_error.status?`${i.last_error.status}: `:"",i.last_error.message]}),(0,b.jsx)("span",{className:"text-text-subtle",children:new Date(i.last_error.at).toLocaleTimeString()})]})]},d)})}),(0,b.jsxs)("div",{className:"mt-3 space-y-2",children:[(0,b.jsx)(j.Input,{value:E,onChange:a=>F(a.target.value),placeholder:"key name (optional, e.g. primary)"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(j.Input,{value:C,onChange:a=>{D(a.target.value),H(null)},placeholder:"add a key…",className:"font-mono text-[12.5px]"}),(0,b.jsx)(j.Button,{variant:"ghost",disabled:!C||"checkkey"===A,onClick:()=>ay("checkkey",async()=>{let b=await e.adminApi.checkKey(a,C);return H(b.data??{ok:!1,reachable:!1,status:0,error:b.error}),b}),children:"Check"}),(0,b.jsx)(j.Button,{disabled:!C||"addkey"===A,onClick:()=>ay("addkey",async()=>{let b=await e.adminApi.addKey(a,C,E.trim()||void 0);return b.ok&&(D(""),F(""),H(null)),b}),children:"Add"}),(0,b.jsx)(j.Button,{variant:"ghost",onClick:()=>J(!0),children:"Bulk"})]}),G&&(0,b.jsx)("div",{className:`rounded-brand border px-3 py-2 text-[12px] ${G.ok?"border-live/30 bg-live/5 text-live":"border-danger/30 bg-danger/5 text-danger"}`,children:G.ok?`valid (${G.status})`:G.error||`server returned ${G.status}`})]}),I&&(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:()=>J(!1),children:(0,b.jsxs)("div",{className:"w-full max-w-lg rounded-brand border border-border bg-surface p-5 shadow-xl",onClick:a=>a.stopPropagation(),children:[(0,b.jsx)("h3",{className:"mb-1 text-[14px] font-semibold text-text",children:"Bulk Add Keys"}),(0,b.jsxs)("p",{className:"mb-3 text-[12px] text-text-subtle",children:["Format: ",(0,b.jsx)("code",{className:"text-text-muted",children:"name|apiKey"})," or just ",(0,b.jsx)("code",{className:"text-text-muted",children:"apiKey"})," (one per line)"]}),(0,b.jsx)("textarea",{value:K,onChange:a=>L(a.target.value),placeholder:"primary|sk-abc123\nbackup|sk-xyz789\nsk-anonymous-key",rows:8,className:"w-full rounded-brand border border-border bg-bg px-3 py-2 font-mono text-[12.5px] text-text placeholder:text-text-subtle focus:border-accent focus:outline-none",autoFocus:!0}),(0,b.jsxs)("div",{className:"mt-3 flex justify-end gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",onClick:()=>J(!1),children:"Cancel"}),(0,b.jsx)(j.Button,{disabled:!K.trim()||"bulkkeys"===A,onClick:()=>ay("bulkkeys",async()=>{for(let b of K.split("\n").map(a=>a.trim()).filter(Boolean)){let c=b.indexOf("|"),d=c>0?b.slice(0,c).trim():void 0,f=c>0?b.slice(c+1).trim():b;if(!f)continue;let g=await e.adminApi.addKey(a,f,d);if(!g.ok)return g}return L(""),J(!1),{ok:!0}}),children:"bulkkeys"===A?"Adding…":`Add ${K.split("\n").filter(a=>a.trim()).length} keys`})]})]})})]}),(0,b.jsxs)(i.RichCard,{header:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(i.CardTitle,{title:"Models served",sub:`${q.models.length} in catalog`}),q.models.length>0&&(0,b.jsx)("button",{onClick:()=>ay("clear",()=>e.adminApi.clearModels(a)),disabled:"clear"===A,className:"text-[12px] text-text-subtle hover:text-danger",children:"Clear all"})]}),children:[0===q.models.length?(0,b.jsx)(l.Empty,{children:"No models. Add one below, or fetch them for a free/auto provider."}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("p",{className:"mb-2.5 text-[12px] text-text-subtle",children:["Call any of these as ",(0,b.jsxs)("span",{className:"tnum text-text-muted",children:[q.id,"/<model>"]}),", as a combo alias, or by the bare id."]}),q.models.length>8&&(0,b.jsxs)("div",{className:"mb-2.5 flex items-center gap-2",children:[(0,b.jsxs)("div",{className:"relative flex-1",children:[(0,b.jsx)(k.Icon,{name:"search",size:15,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-text-subtle"}),(0,b.jsx)(j.Input,{value:U,onChange:a=>V(a.target.value),placeholder:"filter models…",className:"pl-8"})]}),(0,b.jsx)("span",{className:"tnum whitespace-nowrap text-[12px] text-text-subtle",children:aw?`${ax.length} of ${q.models.length}`:`${q.models.length}`})]}),0===ax.length?(0,b.jsxs)(l.Empty,{children:["No model matches “",U,"”."]}):(0,b.jsx)("div",{className:"max-h-[280px] divide-y divide-border-subtle overflow-y-auto rounded-brand border border-border-subtle",children:ax.map(c=>{let d=Y[c.id];return(0,b.jsxs)("div",{className:"group flex items-center justify-between gap-3 px-3 py-2 hover:bg-bg",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,b.jsx)(k.Icon,{name:"ok"===d?"check_circle":"fail"===d?"cancel":"smart_toy",size:15,className:`flex-none ${"ok"===d?"text-success":"fail"===d?"text-danger":"text-text-subtle"}`}),(0,b.jsxs)("span",{className:"tnum truncate text-[12.5px]",children:[(0,b.jsxs)("span",{className:"text-text-subtle",children:[q.id,"/"]}),(0,b.jsx)("span",{className:"text-text",children:c.id})]}),(0,b.jsx)(o.CapacityBadges,{model:c.id,provider:q.id}),(void 0!==c.price_in||void 0!==c.price_out)&&(0,b.jsxs)("span",{className:"tnum whitespace-nowrap text-[11px] text-text-subtle",children:[l.fmt.cost(c.price_in??0),"/",l.fmt.cost(c.price_out??0)," per 1M"]})]}),(0,b.jsxs)("div",{className:"flex flex-none items-center gap-0.5",children:[(0,b.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(`${q.id}/${c.id}`)},className:"rounded p-1 text-text-subtle transition-colors hover:bg-surface hover:text-accent","aria-label":`Copy ${q.id}/${c.id}`,title:"Copy model name",children:(0,b.jsx)(k.Icon,{name:"content_copy",size:15})}),(0,b.jsx)("button",{onClick:()=>ar(c.id),disabled:"testing"===d,className:"rounded p-1 text-text-subtle transition-colors hover:bg-surface hover:text-accent disabled:opacity-60","aria-label":`Test ${c.id}`,title:"fail"===d?"Test failed — click to retry":"Test this model",children:(0,b.jsx)(k.Icon,{name:"testing"===d?"progress_activity":"wifi_tethering",size:15})}),(0,b.jsx)("button",{onClick:()=>ay(`rmmodel${c.id}`,()=>e.adminApi.removeModel(a,c.id)),disabled:A===`rmmodel${c.id}`,className:"rounded p-1 text-text-subtle transition-colors hover:bg-surface hover:text-danger disabled:opacity-40","aria-label":`Remove ${c.id}`,children:(0,b.jsx)(k.Icon,{name:"delete",size:16})})]})]},c.id)})})]}),(0,b.jsxs)("div",{className:"mt-3 flex gap-2",children:[(0,b.jsx)(j.Input,{value:S,onChange:a=>T(a.target.value),placeholder:"add a model id…"}),(0,b.jsx)(j.Button,{disabled:!S||"addmodel"===A,onClick:()=>ay("addmodel",async()=>{let b=await e.adminApi.addModel(a,S);return b.ok&&T(""),b}),children:"Add"})]})]})]}),W&&(0,b.jsx)(n,{models:W,busy:"addmodels"===A,onClose:()=>X(null),onAdd:b=>ay("addmodels",async()=>{let c=await e.adminApi.addModels(a,b);return c.ok&&X(null),c})}),(0,b.jsx)("div",{className:"mt-6",children:(0,b.jsxs)(j.Button,{variant:"danger",onClick:()=>aq(!0),children:[(0,b.jsx)(k.Icon,{name:"delete",size:16})," Remove provider"]})}),ap&&(0,b.jsx)(p.ConfirmModal,{title:"Remove provider",message:`Delete "${q.name??a}"? All keys and model associations will be lost.`,confirmLabel:"Remove",busy:"rmprov"===A,onCancel:()=>aq(!1),onConfirm:()=>ay("rmprov",async()=>{let b=await e.adminApi.removeProvider(a);return b.ok?m.push("/providers"):aq(!1),b})})]})}],33410)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_components_ProviderDetail_tsx_06sxu0r._.js.map
|