switchboard-router 0.9.45 → 0.9.48
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/app/{.next-cli-build/static/chunks/1321-bdff37b474a387c0.js → .next/static/chunks/1321-73cba51ca6694ffa.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-cf70f587dc7ab205.js +1 -0
- package/app/.next/static/css/912e8e046d0cd4ca.css +1 -0
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +20 -20
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/prerender-manifest.json +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-library/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/routing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/aider-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/gemini-cli-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/grok-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +20 -20
- package/app/.next-cli-build/server/chunks/1350.js +1 -1
- package/app/.next-cli-build/server/chunks/2619.js +1 -1
- package/app/.next-cli-build/server/chunks/2847.js +1 -1
- package/app/.next-cli-build/server/chunks/369.js +3 -3
- package/app/.next-cli-build/server/chunks/5717.js +1 -1
- package/app/.next-cli-build/server/chunks/5781.js +2 -2
- package/app/.next-cli-build/server/chunks/6533.js +1 -1
- package/app/.next-cli-build/server/chunks/7201.js +1 -1
- package/app/.next-cli-build/server/chunks/869.js +1 -1
- package/app/.next-cli-build/server/chunks/8942.js +1 -1
- package/app/.next-cli-build/server/chunks/8998.js +8 -8
- package/app/.next-cli-build/server/chunks/9264.js +2 -2
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +8 -8
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/app/{.next/static/chunks/1321-bdff37b474a387c0.js → .next-cli-build/static/chunks/1321-73cba51ca6694ffa.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-cf70f587dc7ab205.js +1 -0
- package/app/.next-cli-build/static/css/912e8e046d0cd4ca.css +1 -0
- package/app/open-sse/identity/tls/bin/darwin/arm64/switchboard-claude-tls +0 -0
- package/app/open-sse/identity/tls/bin/darwin/x64/switchboard-claude-tls +0 -0
- package/app/open-sse/identity/tls/bin/linux/arm64/switchboard-claude-tls +0 -0
- package/app/open-sse/identity/tls/bin/linux/x64/switchboard-claude-tls +0 -0
- package/app/open-sse/identity/tls/bin/win32/arm64/switchboard-claude-tls.exe +0 -0
- package/app/open-sse/identity/tls/bin/win32/x64/switchboard-claude-tls.exe +0 -0
- package/app/package.json +1 -1
- package/package.json +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-2050b8c10234b86e.js +0 -1
- package/app/.next/static/css/5c8909d9cd96e270.css +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-2050b8c10234b86e.js +0 -1
- package/app/.next-cli-build/static/css/5c8909d9cd96e270.css +0 -1
- /package/app/.next/static/{67uh5PHd0ouLGa9jpqi0E → MSigI0uI9w5TrE5x-BeGU}/_buildManifest.js +0 -0
- /package/app/.next/static/{67uh5PHd0ouLGa9jpqi0E → MSigI0uI9w5TrE5x-BeGU}/_ssgManifest.js +0 -0
- /package/app/.next-cli-build/static/{67uh5PHd0ouLGa9jpqi0E → MSigI0uI9w5TrE5x-BeGU}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{67uh5PHd0ouLGa9jpqi0E → MSigI0uI9w5TrE5x-BeGU}/_ssgManifest.js +0 -0
|
@@ -2,4 +2,4 @@ exports.id=7201,exports.ids=[7201],exports.modules={4630:(a,b,c)=>{"use strict";
|
|
|
2
2
|
${e}${n(t)}
|
|
3
3
|
`}function s(a){let b=o(a,e);if(!b)return a;let c=(0,d.Tp)(p(a,e));if(c.errors.length)throw Error(`Invalid Aider YAML: ${c.errors[0].message}`);for(let a of["openai-api-base","openai-api-key","model","alias"])b[a]?.exists?c.setIn([a],b[a].value):c.deleteIn([a]);return c.toString()}function t(a,{baseUrl:b,models:c,defaultModel:e}){let g=o(a,f)?u(a):a,h=(0,d.Tp)(g||"");if(h.errors.length)throw Error(`Invalid Hermes YAML: ${h.errors[0].message}`);let k=i(c),l=j(e,k),m=q(h.getIn(["custom_providers"])),p=Array.isArray(m)?m:[],r=p.find(a=>a?.name==="switchboard"),s=q(h.getIn(["model"])),v=p.filter(a=>a?.name!=="switchboard"),w=Object.fromEntries(k.map(a=>[a,{}]));return v.push({name:"switchboard",base_url:b,key_env:"SWITCHBOARD_API_KEY",api_mode:"chat_completions",models:w}),h.setIn(["custom_providers"],v),h.setIn(["model"],{...s&&"object"==typeof s?s:{},default:l,provider:"custom:switchboard"}),`${h.toString().trimEnd()}
|
|
4
4
|
${f}${n({previousProvider:r??null,previousModel:s??null})}
|
|
5
|
-
`}function u(a){let b=o(a,f),c=(0,d.Tp)(p(a,f));if(c.errors.length)throw Error(`Invalid Hermes YAML: ${c.errors[0].message}`);let e=q(c.getIn(["custom_providers"]));if(Array.isArray(e)){let a=e.filter(a=>a?.name!=="switchboard");b?.previousProvider&&a.push(b.previousProvider),a.length?c.setIn(["custom_providers"],a):c.deleteIn(["custom_providers"])}return"custom:switchboard"===q(c.getIn(["model","provider"]))&&(b?.previousModel?c.setIn(["model"],b.previousModel):c.deleteIn(["model"])),c.toString()}function v(a,{baseUrl:b,apiKey:c,models:d,defaultModel:e}){let f=i(d),g=j(e,f);return{...a,model:`switchboard/${g}`,provider:{...a.provider||{},switchboard:{npm:"@ai-sdk/openai-compatible",name:"Switchboard",options:{apiKey:c,baseURL:b},models:Object.fromEntries(f.map(a=>[a,{name:k(a)}]))}}}}function w(a,{baseUrl:b,apiKey:c,models:d,defaultModel:e}){let f=i(d),g=j(e,f),h=a.providers||{},l=a.models||{};return{providers:{...h,providers:{...h.providers||{},switchboard:{type:"openai-compatible",name:"Switchboard",baseUrl:b,apiKey:c,defaultModelId:g}}},models:{...l,providers:{...l.providers||{},switchboard:{provider:{name:"Switchboard",baseUrl:b,defaultModelId:g},models:Object.fromEntries(f.map(a=>[a,{id:a,name:k(a)}]))}}}}}function x(a,{models:b,defaultModel:c}){let d=i(b),e=j(c,d),f=Object.fromEntries(Object.entries(a?.modelConfigs?.modelDefinitions&&"object"==typeof a.modelConfigs.modelDefinitions?a.modelConfigs.modelDefinitions:{}).filter(([,a])=>a?.family!=="switchboard"));return{...a,model:{...a.model||{},name:e},experimental:{...a.experimental||{},dynamicModelConfiguration:!0},modelConfigs:{...a.modelConfigs||{},modelDefinitions:{...f,...Object.fromEntries(d.map(a=>[a,{displayName:`Switchboard \xb7 ${k(a)}`,family:"switchboard",tier:"custom",isPreview:!1,isVisible:!0,features:{thinking:!0,multimodalToolUse:!0}}]))}}}}},47293:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(50122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},50122:(a,b,c)=>{"use strict";c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},57781:(a,b,c)=>{"use strict";c.d(b,{R:()=>h});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f);async function h(a,b,c="utf-8"){let d=g().dirname(a);await e().mkdir(d,{recursive:!0});let f=g().join(d,`.${g().basename(a)}.sb-tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await e().writeFile(f,b,c);try{let a=await e().open(f,"r+");try{await a.sync()}finally{await a.close()}}catch{}await e().rename(f,a)}catch(a){try{await e().unlink(f)}catch{}throw a}}},68393:(a,b,c)=>{"use strict";c.d(b,{AD:()=>x,El:()=>v,JF:()=>r,LU:()=>u,Ng:()=>o,OU:()=>t,Ro:()=>h,_1:()=>s,ao:()=>l,at:()=>B,i6:()=>A,iO:()=>w,s8:()=>z,wN:()=>y});let d=Object.freeze({PASS_THROUGH:"pass-through",PROXY:"proxy",FULL_CATALOG:"full-catalog"}),e="x-switchboard-claude-mode",f="x-switchboard-claude-models",g="x-switchboard-claude-labels",h="x-switchboard-key",i="claude-switchboard-v1/",j=/^(?:claude|anthropic)-[a-z0-9][a-z0-9._-]*$/i,k=Object.freeze(["ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_FABLE_MODEL","ANTHROPIC_DEFAULT_FABLE_MODEL_NAME","ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION"]);function l(a){let b=String(a||"");if(!b)return"";let c=0x811c9dc5;for(let a=0;a<b.length;a+=1)c^=b.charCodeAt(a),c=Math.imul(c,0x1000193);return(c>>>0).toString(16).padStart(8,"0")}let m=a=>a.replace(/(^|-)([a-z])/g,(a,b,c)=>`${b}${c.toUpperCase()}`);function n(a,b){if("string"!=typeof a)return"";for(let c of a.split(/\r?\n/)){let a=c.indexOf(":");if(!(a<0)&&c.slice(0,a).trim().toLowerCase()===b)return c.slice(a+1).trim()}return""}function o(a){return"string"==typeof a&&j.test(a)}function p(a){if(!Array.isArray(a))throw TypeError("Claude catalog models must be an array.");let b=[],c=new Set;for(let d of a){if("string"!=typeof d)throw TypeError("Each Claude catalog model must be a string.");let a=d.trim();if(a){if(/\r|\n/.test(a))throw TypeError("Claude catalog model IDs cannot contain newlines.");c.has(a)||(c.add(a),b.push(a))}}return b}function q(a){if("string"!=typeof a||!a.trim())return[];try{return p(JSON.parse(decodeURIComponent(a)))}catch{return[]}}function r(a){return q(n(a,f))}function s(a){return q(a?.get(f))}function t(a,b){if(!a||"object"!=typeof a||Array.isArray(a))return{};let c=new Set(p(b)),d={};for(let[b,e]of Object.entries(a)){if(!c.has(b))continue;let a=String(e||"").trim().replace(/[·•—–]/g," | ").replace(/[\r\n]+/g," ").replace(/\s+/g," ");a&&(d[b]=a.slice(0,48))}return d}function u(a){var b=a?.get(g);if("string"!=typeof b||!b.trim())return{};try{let a=JSON.parse(decodeURIComponent(b));return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}catch{return{}}}function v(a){let b=String(a||"").trim();if(!b)throw TypeError("A Switchboard model ID is required.");let c=b.split("/").map(encodeURIComponent).join("/");return`${i}${c}`}function w(a){if("string"!=typeof a||!a.startsWith(i))return null;let b=a.slice(i.length);if(!b)return null;try{let c=b.split("/").map(decodeURIComponent).join("/");return v(c)===a?c:null}catch{return null}}function x({baseUrl:a,gatewayKey:b,models:c=[],pickerLabels:h={}}){let i=String(a||"").trim().replace(/\/+$/,""),j=String(b||"").trim();if(!i)throw TypeError("A Switchboard endpoint is required.");if(!j)throw TypeError("A Switchboard API key is required.");let l=p(c),n=t(h,l),o=function(a=[],b={}){let c=p(a),h=[`${m(e)}: ${d.FULL_CATALOG}`,`${m(f)}: ${encodeURIComponent(JSON.stringify(p(c)))}`],i=function(a,b={}){let c=t(b,a);return 0===Object.keys(c).length?"":encodeURIComponent(JSON.stringify(c))}(c,b);return i&&h.push(`${m(g)}: ${i}`),h.join("\n")}(l,n);if(new TextEncoder().encode(o).byteLength>7168)throw TypeError("This catalog is too large for Claude Code request headers. Remove models or shorten picker labels.");let q={ANTHROPIC_API_KEY:"",ANTHROPIC_AUTH_TOKEN:j,ANTHROPIC_BASE_URL:i.endsWith("/v1")?i:`${i}/v1`,ANTHROPIC_CUSTOM_HEADERS:o,ANTHROPIC_CUSTOM_MODEL_OPTION:"",CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY:"1"};for(let a of k)q[a]="";return{env:q,pickerLabels:n}}function y(a){return n(a,e).toLowerCase()===d.PASS_THROUGH}function z(a){let b=n(a,e).toLowerCase();return b===d.FULL_CATALOG||b===d.PROXY}function A(a){return a?.get(e)?.trim().toLowerCase()===d.PASS_THROUGH}function B(a){let b=a?.get(e)?.trim().toLowerCase();return b===d.FULL_CATALOG||b===d.PROXY}},78335:()=>{},85432:(a,b,c)=>{"use strict";c.d(b,{Kt:()=>m,MH:()=>l,vA:()=>k});var d=c(15717),e=c(19978),f=c(94454),g=c(29696);let h="compatible-reasoning:snapshot";async function i(){let a="function"==typeof d.Fh?(0,d.Fh)({type:"openai-compatible"}):Promise.resolve([]),b="function"==typeof d.uv?(0,d.uv)():Promise.resolve([]),[c,e]=await Promise.all([Promise.resolve(a).catch(()=>[]),Promise.resolve(b).catch(()=>[])]),f=new Map,h=new Map;for(let a of c){if(!a?.id||!a?.prefix)continue;let b={id:a.id,apiType:"responses"===a.apiType?"responses":"chat",staticFormat:(0,g.ml)(a.baseUrl)};f.set(a.id,b),h.set(a.prefix,b)}let i=new Map;for(let a of e){if(!a?.providerAlias||!a?.id||"llm"!==(a.type||"llm"))continue;let b=h.get(a.providerAlias);b&&(0,g.K5)(a.reasoning)&&i.set(`${b.id}|${a.id}`,a.reasoning)}return{nodesById:f,prefixToNode:h,byModel:i}}let j={nodesById:new Map,prefixToNode:new Map,byModel:new Map};async function k(a=15e3){try{let b=await (0,e.PO)(h,i,a);b&&(j=b)}catch{}}function l(){(0,e.Y3)(h)}function m(a,b){let c=j.prefixToNode.get(a);if(!c)return null;let d=j.byModel.get(`${c.id}|${b}`);return d||("none"===c.staticFormat?{supported:!1,effort:null}:c.staticFormat?{supported:!0,effort:"qwen"===c.staticFormat?null:c.staticFormat}:null)}(0,f.xl)(function(a,b){var c,d,e,f;if(!a||!a.startsWith("openai-compatible-"))return null;let g=j.nodesById.get(a),h=j.byModel.get(`${a}|${b}`);return h?(c=h,d=g?.apiType||"chat",c.supported?"responses"===d?"openai-responses":"nested"===c.effort?"openai-nested":"openai":"none"):g?.staticFormat?(e=g.staticFormat,f=g.apiType,"none"===e?"none":"qwen"===e?"qwen":"responses"===f?"openai-responses":"nested"===e?"openai-nested":"openai"):null})},92770:(a,b,c)=>{"use strict";c.r(b),c.d(b,{DELETE:()=>V,GET:()=>R,POST:()=>T});var d=c(49796),e=c(23211),f=c(79646),g=c(28354),h=c(79748),i=c.n(h),j=c(33873),k=c.n(j),l=c(21820),m=c.n(l),n=c(63294),o=c(23628),p=c(95510),q=c(68393),r=c(15717),s=c(43904),t=c(85432),u=c(24424);let v=(0,g.promisify)(f.exec),w="switchboard",x=Promise.resolve(),y=a=>{let b=x.then(a,a);return x=b.catch(()=>{}),b},z=()=>k().join(m().homedir(),".pi","agent"),A=()=>k().join(z(),"models.json"),B=()=>k().join(z(),"settings.json"),C=()=>k().join(z(),"switchboard-backup.json"),D=()=>k().join(z(),"models.yml"),E=async()=>{try{let a="win32"===m().platform();return await v(a?"where pi":"which pi",{windowsHide:!0}),!0}catch{try{return await i().access(z()),!0}catch{return!1}}},F=async(a,b)=>{try{let b=await i().readFile(a,"utf-8"),c=JSON.parse(b);if(!c||"object"!=typeof c||Array.isArray(c))throw TypeError(`${a} must contain a JSON object`);return c}catch(a){if("ENOENT"===a.code)return b;throw a}},G=()=>F(A(),{providers:{}}),H=()=>F(B(),{}),I=async(a,b)=>{try{let b=await i().readFile(a,"utf-8"),c=""===b.trim()?{}:(0,n.qg)(b);if(!c||"object"!=typeof c||Array.isArray(c))throw TypeError(`${a} must contain a YAML object`);return c}catch(a){if("ENOENT"===a.code)return b;throw a}},J=()=>I(D(),{providers:{}}),K=a=>Array.isArray(a)?a.map(K):a&&"object"==typeof a?Object.fromEntries(Object.keys(a).sort().map(b=>[b,K(a[b])])):a,L=(a,b)=>JSON.stringify(K(a))===JSON.stringify(K(b)),M=a=>a&&"object"==typeof a&&"boolean"==typeof a.exists,N=a=>{if(null==a)return null;if(1===a.version&&"restored"===a.state)return a;if(1!==a.version||!M(a.provider)||!["defaultProvider","defaultModel","enabledModels"].every(b=>M(a.settings?.[b]))||!a.managedProvider||!a.managedSettings)throw Error("Unsupported or invalid Pi Switchboard backup file");return a},O=async(a,b,c,d)=>{await i().mkdir(z(),{recursive:!0}),await (0,p.M_)([{filePath:C(),content:d?JSON.stringify(d,null,2):null,secret:!0},{filePath:D(),content:(0,n.As)(a),secret:!0},{filePath:A(),content:JSON.stringify(b,null,2),secret:!0},{filePath:B(),content:JSON.stringify(c,null,2),secret:!0}])},P=(a,b,c)=>{("defaultProvider"!==c&&"defaultModel"!==c||a.defaultProvider===w)&&L(a[c],b?.managedSettings?.[c])&&(0,p.S3)(a,{[c]:b.settings?.[c]})};async function Q(){try{if(!await E())return e.NextResponse.json({installed:!1,settings:null,message:"Pi is not installed"});let[a,b,c]=await Promise.all([J(),G(),H()]),d=a?.providers?.[w]||null,f=d||b?.providers?.[w]||null,g=Array.isArray(d?.models)?d.models:Array.isArray(b?.providers?.[w]?.models)?b.providers[w].models:[],h=g.map(a=>a?.id).filter(Boolean),i=Object.fromEntries(g.filter(a=>a?.id&&a?.name).map(a=>[a.id,a.name])),j=(c.defaultProvider===w&&h.includes(c.defaultModel)?c.defaultModel:null)||h[0]||null,k=f?.baseUrl||null,l=!!(f&&(a=>{try{let b=new URL(String(a||"")).hostname.toLowerCase();return"localhost"===b||"0.0.0.0"===b||/^127(?:\.\d{1,3}){3}$/.test(b)}catch{return!1}})(k)),m=l&&h.length>0;return e.NextResponse.json({installed:!0,hasSwitchboard:l,settings:{baseUrl:k,model:j,defaultModel:j,models:h,pickerLabels:i,apiKeySet:!!f?.apiKey,provider:w,scopeConfigured:m},configPath:D(),settingsPath:B()})}catch(a){return console.log("Error checking pi settings:",a),e.NextResponse.json({error:"Failed to check pi settings"},{status:500})}}async function R(){return y(Q)}async function S(a){try{let b,c;try{b=await a.json()}catch{return e.NextResponse.json({error:"Invalid JSON body"},{status:400})}let{baseUrl:d,apiKey:f,model:g,models:h,defaultModel:i,pickerLabels:j}=b||{},[k,l,m,n]=await Promise.all([J(),G(),H(),F(C(),null)]),u=N(n),v=u?.state==="restored"?null:u,x=Array.isArray(k?.providers?.[w]?.models)?k.providers[w].models:Array.isArray(l?.providers?.[w]?.models)?l.providers[w].models:[],y=void 0===h?[g,...x.map(a=>a?.id)]:h,z=(0,o.rP)(y),A=void 0===j||j&&"object"==typeof j&&!Array.isArray(j)&&Object.values(j).every(a=>"string"==typeof a);if(!(0,o.uI)(d)||!(0,o.iU)(f)||0===z.length||!A)return e.NextResponse.json({error:"baseUrl, models, API key, or picker labels are invalid"},{status:400});let E=(c=String(d||"").replace(/\/+$/,"")).endsWith("/v1")?c:`${c}/v1`,I=f||"sk_switchboard",K=(0,o.F2)(i||g,z),L=(0,q.OU)(j,z);await (0,t.vA)().catch(()=>{});let M="function"==typeof r.Uv?await Promise.resolve((0,r.Uv)()).catch(()=>[]):[],P=new Map(M.map(a=>[a.name,a])),Q=(a,b=new Set)=>{try{let c=String(a||""),d=c.indexOf("/");if(d<=0){if(b.has(c))return null;b.add(c);let a=P.get(c);if(!a||!Array.isArray(a.models)||0===a.models.length)return null;let d=null;for(let c of a.models){let a=Q(String(c),b);if(a?.reasoning)return a;a&&!d&&(d=a)}return d}let e=c.slice(0,d),f=c.slice(d+1),g=(0,t.Kt)(e,f);if(g){let a=(0,s.nl)(e,f);return{reasoning:!0===g.supported,contextWindow:a.contextWindow||null}}let h=(0,s.nl)(e,f);return{reasoning:!0===h.reasoning,contextWindow:h.contextWindow||null}}catch{return null}},R=a=>{(!a.providers||"object"!=typeof a.providers||Array.isArray(a.providers))&&(a.providers={})};R(k),R(l);let S={baseUrl:E,api:"openai-completions",apiKey:I,authHeader:!0,compat:{supportsDeveloperRole:!1,supportsReasoningEffort:!0,supportsUsageInStreaming:!0},models:(0,o.L6)(z,x,L,Q)},T={...S,discovery:{type:"openai-models-list"}},U=v?.version===1?v:{version:1,state:"active",provider:(0,p.EA)(k.providers,[w])[w],legacyProvider:(0,p.EA)(l.providers,[w])[w],settings:(0,p.EA)(m,["defaultProvider","defaultModel","enabledModels"])};k.providers[w]=T,l.providers[w]=S,m.defaultProvider=w,m.defaultModel=K;let V=((a,b)=>{if(!Array.isArray(a)||0===a.length)return;let c=a.filter(a=>"string"!=typeof a||!a.startsWith(`${w}/`));if(0!==c.length)return[...c,...b]})(m.enabledModels,z.map(a=>`${w}/${a}`));return V?m.enabledModels=V:delete m.enabledModels,U.managedProvider=T,U.managedLegacyProvider=S,U.managedSettings={defaultProvider:w,defaultModel:K,enabledModels:m.enabledModels},await O(k,l,m,U),e.NextResponse.json({success:!0,message:`Pi configured with ${z.length} model${1===z.length?"":"s"}. ${K} is the default; use /model to switch.`,pickerLabels:Object.fromEntries(S.models.map(a=>[a.id,a.name])),configPath:D(),settingsPath:B()})}catch(a){return console.log("Error updating pi settings:",a),e.NextResponse.json({error:"Failed to update pi settings"},{status:500})}}async function T(a){return y(()=>S(a))}async function U(){try{let[a,b,c,d]=await Promise.all([J(),G(),H(),F(C(),null)]),f=N(d);if(f?.state==="restored")return e.NextResponse.json({success:!0,message:"No Switchboard Pi settings to reset"});let g=a?.providers?.[w],h=b?.providers?.[w],i=!!(g||h),j=c.defaultProvider===w||Array.isArray(c.enabledModels)&&c.enabledModels.some(a=>"string"==typeof a&&a.startsWith(`${w}/`));if(!f&&!i&&!j)return e.NextResponse.json({success:!0,message:"No Switchboard Pi settings to reset"});return g&&(!f?.managedProvider||L(g,f.managedProvider))&&(f?.version===1?(0,p.S3)(a.providers,{[w]:f.provider}):delete a.providers[w]),h&&(!f?.managedLegacyProvider||L(h,f.managedLegacyProvider))&&(f?.version===1?(0,p.S3)(b.providers,{[w]:f.legacyProvider??f.provider}):delete b.providers[w]),f?.version===1?(P(c,f,"defaultModel"),P(c,f,"defaultProvider"),P(c,f,"enabledModels")):c.defaultProvider===w&&(delete c.defaultProvider,delete c.defaultModel),!f&&Array.isArray(c.enabledModels)&&(c.enabledModels=c.enabledModels.filter(a=>"string"!=typeof a||!a.startsWith(`${w}/`)),0===c.enabledModels.length&&delete c.enabledModels),await O(a,b,c,{version:1,state:"restored"}),e.NextResponse.json({success:!0,message:"Switchboard provider removed and previous Pi model settings restored"})}catch(a){return console.log("Error resetting pi settings:",a),e.NextResponse.json({error:"Failed to reset pi settings"},{status:500})}}async function V(){return y(U)}(0,u.D)([R,T,V]),(0,d.A)(R,"007744b94cde0b32d217038f70bde74969820aff07",null),(0,d.A)(T,"40f0b7eb1c961e81aad1d082f03eb834d2a113dda9",null),(0,d.A)(V,"00a6bce3fed292f67c9869373ebda0dae47e19ce4f",null)},95510:(a,b,c)=>{"use strict";c.d(b,{EA:()=>i,M_:()=>h,S3:()=>j,Yb:()=>g});var d=c(51455),e=c.n(d),f=c(57781);async function g(a,b,{secret:c=!1}={}){if(await (0,f.R)(a,b,c?{encoding:"utf-8",mode:384}:"utf-8"),c)try{await e().chmod(a,384)}catch{}}async function h(a){let b=await Promise.all(a.map(async({filePath:a})=>{try{return{exists:!0,value:await e().readFile(a)}}catch(a){if(a?.code==="ENOENT")return{exists:!1,value:null};throw a}})),c=async({filePath:a,content:b,secret:c=!1})=>{if(null!==b)return void await g(a,b,{secret:c});try{await e().unlink(a)}catch(a){if(a?.code!=="ENOENT")throw a}};try{for(let b of a)await c(b)}catch(e){let d=(await Promise.allSettled(a.map(({filePath:a,secret:d=!1},e)=>c({filePath:a,content:b[e].exists?b[e].value:null,secret:d})))).filter(a=>"rejected"===a.status);if(d.length>0)throw AggregateError([e,...d.map(a=>a.reason)],"Failed to replace CLI files and roll them back cleanly");throw e}}function i(a,b){return Object.fromEntries(b.map(b=>[b,{exists:Object.hasOwn(a,b),value:a[b]}]))}function j(a,b){for(let[c,d]of Object.entries(b||{}))d?.exists?a[c]=d.value:delete a[c]}},96487:()=>{}};
|
|
5
|
+
`}function u(a){let b=o(a,f),c=(0,d.Tp)(p(a,f));if(c.errors.length)throw Error(`Invalid Hermes YAML: ${c.errors[0].message}`);let e=q(c.getIn(["custom_providers"]));if(Array.isArray(e)){let a=e.filter(a=>a?.name!=="switchboard");b?.previousProvider&&a.push(b.previousProvider),a.length?c.setIn(["custom_providers"],a):c.deleteIn(["custom_providers"])}return"custom:switchboard"===q(c.getIn(["model","provider"]))&&(b?.previousModel?c.setIn(["model"],b.previousModel):c.deleteIn(["model"])),c.toString()}function v(a,{baseUrl:b,apiKey:c,models:d,defaultModel:e}){let f=i(d),g=j(e,f);return{...a,model:`switchboard/${g}`,provider:{...a.provider||{},switchboard:{npm:"@ai-sdk/openai-compatible",name:"Switchboard",options:{apiKey:c,baseURL:b},models:Object.fromEntries(f.map(a=>[a,{name:k(a)}]))}}}}function w(a,{baseUrl:b,apiKey:c,models:d,defaultModel:e}){let f=i(d),g=j(e,f),h=a.providers||{},l=a.models||{};return{providers:{...h,providers:{...h.providers||{},switchboard:{type:"openai-compatible",name:"Switchboard",baseUrl:b,apiKey:c,defaultModelId:g}}},models:{...l,providers:{...l.providers||{},switchboard:{provider:{name:"Switchboard",baseUrl:b,defaultModelId:g},models:Object.fromEntries(f.map(a=>[a,{id:a,name:k(a)}]))}}}}}function x(a,{models:b,defaultModel:c}){let d=i(b),e=j(c,d),f=Object.fromEntries(Object.entries(a?.modelConfigs?.modelDefinitions&&"object"==typeof a.modelConfigs.modelDefinitions?a.modelConfigs.modelDefinitions:{}).filter(([,a])=>a?.family!=="switchboard"));return{...a,model:{...a.model||{},name:e},experimental:{...a.experimental||{},dynamicModelConfiguration:!0},modelConfigs:{...a.modelConfigs||{},modelDefinitions:{...f,...Object.fromEntries(d.map(a=>[a,{displayName:`Switchboard \xb7 ${k(a)}`,family:"switchboard",tier:"custom",isPreview:!1,isVisible:!0,features:{thinking:!0,multimodalToolUse:!0}}]))}}}}},47293:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(50122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},50122:(a,b,c)=>{"use strict";c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},57781:(a,b,c)=>{"use strict";c.d(b,{R:()=>h});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f);async function h(a,b,c="utf-8"){let d=g().dirname(a);await e().mkdir(d,{recursive:!0});let f=g().join(d,`.${g().basename(a)}.sb-tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await e().writeFile(f,b,c);try{let a=await e().open(f,"r+");try{await a.sync()}finally{await a.close()}}catch{}await e().rename(f,a)}catch(a){try{await e().unlink(f)}catch{}throw a}}},68393:(a,b,c)=>{"use strict";c.d(b,{AD:()=>x,El:()=>v,JF:()=>r,LU:()=>u,Ng:()=>o,OU:()=>t,Ro:()=>h,_1:()=>s,ao:()=>l,at:()=>B,i6:()=>A,iO:()=>w,s8:()=>z,wN:()=>y});let d=Object.freeze({PASS_THROUGH:"pass-through",PROXY:"proxy",FULL_CATALOG:"full-catalog"}),e="x-switchboard-claude-mode",f="x-switchboard-claude-models",g="x-switchboard-claude-labels",h="x-switchboard-key",i="claude-switchboard-v1/",j=/^(?:claude|anthropic)-[a-z0-9][a-z0-9._-]*$/i,k=Object.freeze(["ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_FABLE_MODEL","ANTHROPIC_DEFAULT_FABLE_MODEL_NAME","ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION"]);function l(a){let b=String(a||"");if(!b)return"";let c=0x811c9dc5;for(let a=0;a<b.length;a+=1)c^=b.charCodeAt(a),c=Math.imul(c,0x1000193);return(c>>>0).toString(16).padStart(8,"0")}let m=a=>a.replace(/(^|-)([a-z])/g,(a,b,c)=>`${b}${c.toUpperCase()}`);function n(a,b){if("string"!=typeof a)return"";for(let c of a.split(/\r?\n/)){let a=c.indexOf(":");if(!(a<0)&&c.slice(0,a).trim().toLowerCase()===b)return c.slice(a+1).trim()}return""}function o(a){return"string"==typeof a&&j.test(a)}function p(a){if(!Array.isArray(a))throw TypeError("Claude catalog models must be an array.");let b=[],c=new Set;for(let d of a){if("string"!=typeof d)throw TypeError("Each Claude catalog model must be a string.");let a=d.trim();if(a){if(/\r|\n/.test(a))throw TypeError("Claude catalog model IDs cannot contain newlines.");c.has(a)||(c.add(a),b.push(a))}}return b}function q(a){if("string"!=typeof a||!a.trim())return[];try{return p(JSON.parse(decodeURIComponent(a)))}catch{return[]}}function r(a){return q(n(a,f))}function s(a){return q(a?.get(f))}function t(a,b){if(!a||"object"!=typeof a||Array.isArray(a))return{};let c=new Set(p(b)),d={};for(let[b,e]of Object.entries(a)){if(!c.has(b))continue;let a=String(e||"").trim().replace(/[·•—–]/g," | ").replace(/[\r\n]+/g," ").replace(/\s+/g," ");a&&(d[b]=a.slice(0,48))}return d}function u(a){var b=a?.get(g);if("string"!=typeof b||!b.trim())return{};try{let a=JSON.parse(decodeURIComponent(b));return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}catch{return{}}}function v(a){let b=String(a||"").trim();if(!b)throw TypeError("A Switchboard model ID is required.");let c=b.split("/").map(encodeURIComponent).join("/");return`${i}${c}`}function w(a){if("string"!=typeof a||!a.startsWith(i))return null;let b=a.slice(i.length);if(!b)return null;try{let c=b.split("/").map(decodeURIComponent).join("/");return v(c)===a?c:null}catch{return null}}function x({baseUrl:a,gatewayKey:b,models:c=[],pickerLabels:h={}}){let i=String(a||"").trim().replace(/\/+$/,""),j=String(b||"").trim();if(!i)throw TypeError("A Switchboard endpoint is required.");if(!j)throw TypeError("A Switchboard API key is required.");let l=p(c),n=t(h,l),o=function(a=[],b={}){let c=p(a),h=[`${m(e)}: ${d.FULL_CATALOG}`,`${m(f)}: ${encodeURIComponent(JSON.stringify(p(c)))}`],i=function(a,b={}){let c=t(b,a);return 0===Object.keys(c).length?"":encodeURIComponent(JSON.stringify(c))}(c,b);return i&&h.push(`${m(g)}: ${i}`),h.join("\n")}(l,n);if(new TextEncoder().encode(o).byteLength>7168)throw TypeError("This catalog is too large for Claude Code request headers. Remove models or shorten picker labels.");let q={ANTHROPIC_API_KEY:"",ANTHROPIC_AUTH_TOKEN:j,ANTHROPIC_BASE_URL:i.endsWith("/v1")?i:`${i}/v1`,ANTHROPIC_CUSTOM_HEADERS:o,ANTHROPIC_CUSTOM_MODEL_OPTION:"",CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY:"1"};for(let a of k)q[a]="";return{env:q,pickerLabels:n}}function y(a){return n(a,e).toLowerCase()===d.PASS_THROUGH}function z(a){let b=n(a,e).toLowerCase();return b===d.FULL_CATALOG||b===d.PROXY}function A(a){return a?.get(e)?.trim().toLowerCase()===d.PASS_THROUGH}function B(a){let b=a?.get(e)?.trim().toLowerCase();return b===d.FULL_CATALOG||b===d.PROXY}},78335:()=>{},85432:(a,b,c)=>{"use strict";c.d(b,{Kt:()=>m,MH:()=>l,vA:()=>k});var d=c(15717),e=c(19978),f=c(94454),g=c(29696);let h="compatible-reasoning:snapshot";async function i(){let a="function"==typeof d.Fh?(0,d.Fh)({type:"openai-compatible"}):Promise.resolve([]),b="function"==typeof d.uv?(0,d.uv)():Promise.resolve([]),[c,e]=await Promise.all([Promise.resolve(a).catch(()=>[]),Promise.resolve(b).catch(()=>[])]),f=new Map,h=new Map;for(let a of c){if(!a?.id||!a?.prefix)continue;let b={id:a.id,apiType:"responses"===a.apiType?"responses":"chat",staticFormat:(0,g.ml)(a.baseUrl)};f.set(a.id,b),h.set(a.prefix,b)}let i=new Map;for(let a of e){if(!a?.providerAlias||!a?.id||"llm"!==(a.type||"llm"))continue;let b=h.get(a.providerAlias);b&&(0,g.K5)(a.reasoning)&&i.set(`${b.id}|${a.id}`,a.reasoning)}return{nodesById:f,prefixToNode:h,byModel:i}}let j={nodesById:new Map,prefixToNode:new Map,byModel:new Map};async function k(a=15e3){try{let b=await (0,e.PO)(h,i,a);b&&(j=b)}catch{}}function l(){(0,e.Y3)(h)}function m(a,b){let c=j.prefixToNode.get(a);if(!c)return null;let d=j.byModel.get(`${c.id}|${b}`);return d||("none"===c.staticFormat?{supported:!1,effort:null}:c.staticFormat?{supported:!0,effort:"qwen"===c.staticFormat?null:c.staticFormat}:null)}(0,f.xl)(function(a,b){var c,d,e,f;if(!a||!a.startsWith("openai-compatible-"))return null;let g=j.nodesById.get(a),h=j.byModel.get(`${a}|${b}`);return h?(c=h,d=g?.apiType||"chat",c.supported?"responses"===d?"openai-responses":"nested"===c.effort?"openai-nested":"openai":"none"):g?.staticFormat?(e=g.staticFormat,f=g.apiType,"none"===e?"none":"qwen"===e?"qwen":"responses"===f?"openai-responses":"nested"===e?"openai-nested":"openai"):null})},92770:(a,b,c)=>{"use strict";c.r(b),c.d(b,{DELETE:()=>V,GET:()=>R,POST:()=>T});var d=c(49796),e=c(23211),f=c(79646),g=c(28354),h=c(79748),i=c.n(h),j=c(33873),k=c.n(j),l=c(21820),m=c.n(l),n=c(63294),o=c(23628),p=c(95510),q=c(68393),r=c(15717),s=c(43904),t=c(85432),u=c(24424);let v=(0,g.promisify)(f.exec),w="switchboard",x=Promise.resolve(),y=a=>{let b=x.then(a,a);return x=b.catch(()=>{}),b},z=()=>k().join(m().homedir(),".pi","agent"),A=()=>k().join(z(),"models.json"),B=()=>k().join(z(),"settings.json"),C=()=>k().join(z(),"switchboard-backup.json"),D=()=>k().join(z(),"models.yml"),E=async()=>{try{let a="win32"===m().platform();return await v(a?"where pi":"which pi",{windowsHide:!0}),!0}catch{try{return await i().access(z()),!0}catch{return!1}}},F=async(a,b)=>{try{let b=await i().readFile(a,"utf-8"),c=JSON.parse(b);if(!c||"object"!=typeof c||Array.isArray(c))throw TypeError(`${a} must contain a JSON object`);return c}catch(a){if("ENOENT"===a.code)return b;throw a}},G=()=>F(A(),{providers:{}}),H=()=>F(B(),{}),I=async(a,b)=>{try{let b=await i().readFile(a,"utf-8"),c=""===b.trim()?{}:(0,n.qg)(b);if(!c||"object"!=typeof c||Array.isArray(c))throw TypeError(`${a} must contain a YAML object`);return c}catch(a){if("ENOENT"===a.code)return b;throw a}},J=()=>I(D(),{providers:{}}),K=a=>Array.isArray(a)?a.map(K):a&&"object"==typeof a?Object.fromEntries(Object.keys(a).sort().map(b=>[b,K(a[b])])):a,L=(a,b)=>JSON.stringify(K(a))===JSON.stringify(K(b)),M=a=>a&&"object"==typeof a&&"boolean"==typeof a.exists,N=a=>{if(null==a)return null;if(1===a.version&&"restored"===a.state)return a;if(1!==a.version||!M(a.provider)||!["defaultProvider","defaultModel","enabledModels"].every(b=>M(a.settings?.[b]))||!a.managedProvider||!a.managedSettings)throw Error("Unsupported or invalid Pi Switchboard backup file");return a},O=async(a,b,c,d)=>{await i().mkdir(z(),{recursive:!0}),await (0,p.M_)([{filePath:C(),content:d?JSON.stringify(d,null,2):null,secret:!0},{filePath:D(),content:(0,n.As)(a),secret:!0},{filePath:A(),content:JSON.stringify(b,null,2),secret:!0},{filePath:B(),content:JSON.stringify(c,null,2),secret:!0}])},P=(a,b,c)=>{("defaultProvider"!==c&&"defaultModel"!==c||a.defaultProvider===w)&&L(a[c],b?.managedSettings?.[c])&&(0,p.S3)(a,{[c]:b.settings?.[c]})};async function Q(){try{if(!await E())return e.NextResponse.json({installed:!1,settings:null,message:"Pi is not installed"});let[a,b,c]=await Promise.all([J(),G(),H()]),d=a?.providers?.[w]||null,f=d||b?.providers?.[w]||null,g=Array.isArray(d?.models)?d.models:Array.isArray(b?.providers?.[w]?.models)?b.providers[w].models:[],h=g.map(a=>a?.id).filter(Boolean),i=Object.fromEntries(g.filter(a=>a?.id&&a?.name).map(a=>[a.id,a.name])),j=(c.defaultProvider===w&&h.includes(c.defaultModel)?c.defaultModel:null)||h[0]||null,k=f?.baseUrl||null,l=!!(f&&(a=>{try{let b=new URL(String(a||"")).hostname.toLowerCase();return"localhost"===b||"0.0.0.0"===b||/^127(?:\.\d{1,3}){3}$/.test(b)}catch{return!1}})(k)),m=l&&h.length>0;return e.NextResponse.json({installed:!0,hasSwitchboard:l,settings:{baseUrl:k,model:j,defaultModel:j,models:h,pickerLabels:i,apiKeySet:!!f?.apiKey,provider:w,scopeConfigured:m},configPath:D(),settingsPath:B()})}catch(a){return console.log("Error checking pi settings:",a),e.NextResponse.json({error:"Failed to check pi settings"},{status:500})}}async function R(){return y(Q)}async function S(a){try{let b,c;try{b=await a.json()}catch{return e.NextResponse.json({error:"Invalid JSON body"},{status:400})}let{baseUrl:d,apiKey:f,model:g,models:h,defaultModel:i,pickerLabels:j}=b||{},[k,l,m,n]=await Promise.all([J(),G(),H(),F(C(),null)]),u=N(n),v=u?.state==="restored"?null:u,x=Array.isArray(k?.providers?.[w]?.models)?k.providers[w].models:Array.isArray(l?.providers?.[w]?.models)?l.providers[w].models:[],y=void 0===h?[g,...x.map(a=>a?.id)]:h,z=(0,o.rP)(y),A=void 0===j||j&&"object"==typeof j&&!Array.isArray(j)&&Object.values(j).every(a=>"string"==typeof a);if(!(0,o.uI)(d)||!(0,o.iU)(f)||0===z.length||!A)return e.NextResponse.json({error:"baseUrl, models, API key, or picker labels are invalid"},{status:400});let E=(c=String(d||"").replace(/\/+$/,"")).endsWith("/v1")?c:`${c}/v1`,I=f||"sk_switchboard",K=(0,o.F2)(i||g,z),L=(0,q.OU)(j,z);await (0,t.vA)().catch(()=>{});let M="function"==typeof r.Uv?await Promise.resolve((0,r.Uv)()).catch(()=>[]):[],P=new Map(M.map(a=>[a.name,a])),Q=(a,b=new Set)=>{try{let c=String(a||""),d=c.indexOf("/");if(d<=0){if(b.has(c))return null;b.add(c);let a=P.get(c);if(!a||!Array.isArray(a.models)||0===a.models.length)return null;let d=null;for(let c of a.models){let a=Q(String(c),b);if(a?.reasoning)return a;a&&!d&&(d=a)}return d}let e=c.slice(0,d),f=c.slice(d+1),g=(0,t.Kt)(e,f);if(g){let a=(0,s.nl)(e,f);return{reasoning:!0===g.supported,contextWindow:a.contextWindow||null}}let h=(0,s.nl)(e,f);return{reasoning:!0===h.reasoning,contextWindow:h.contextWindow||null}}catch{return null}},R=a=>{(!a.providers||"object"!=typeof a.providers||Array.isArray(a.providers))&&(a.providers={})};R(k),R(l);let S={baseUrl:E,api:"openai-completions",apiKey:I,authHeader:!0,compat:{supportsDeveloperRole:!1,supportsReasoningEffort:!0,supportsUsageInStreaming:!0},models:(0,o.L6)(z,x,L,Q)},T={...S,discovery:{type:"openai-models-list"}},U=v?.version===1?v:{version:1,state:"active",provider:(0,p.EA)(k.providers,[w])[w],legacyProvider:(0,p.EA)(l.providers,[w])[w],settings:(0,p.EA)(m,["defaultProvider","defaultModel","enabledModels"])};k.providers[w]=T,l.providers[w]=S,m.defaultProvider=w,m.defaultModel=K;let V=((a,b)=>{if(!Array.isArray(a)||0===a.length)return;let c=a.filter(a=>"string"!=typeof a||!a.startsWith(`${w}/`));if(0!==c.length)return[...c,...b]})(m.enabledModels,z.map(a=>`${w}/${a}`));return V?m.enabledModels=V:delete m.enabledModels,U.managedProvider=T,U.managedLegacyProvider=S,U.managedSettings={defaultProvider:w,defaultModel:K,enabledModels:m.enabledModels},await O(k,l,m,U),e.NextResponse.json({success:!0,message:`Pi configured with ${z.length} model${1===z.length?"":"s"}. ${K} is the default; use /model to switch.`,pickerLabels:Object.fromEntries(S.models.map(a=>[a.id,a.name])),configPath:D(),settingsPath:B()})}catch(a){return console.log("Error updating pi settings:",a),e.NextResponse.json({error:"Failed to update pi settings"},{status:500})}}async function T(a){return y(()=>S(a))}async function U(){try{let[a,b,c,d]=await Promise.all([J(),G(),H(),F(C(),null)]),f=N(d);if(f?.state==="restored")return e.NextResponse.json({success:!0,message:"No Switchboard Pi settings to reset"});let g=a?.providers?.[w],h=b?.providers?.[w],i=!!(g||h),j=c.defaultProvider===w||Array.isArray(c.enabledModels)&&c.enabledModels.some(a=>"string"==typeof a&&a.startsWith(`${w}/`));if(!f&&!i&&!j)return e.NextResponse.json({success:!0,message:"No Switchboard Pi settings to reset"});return g&&(!f?.managedProvider||L(g,f.managedProvider))&&(f?.version===1?(0,p.S3)(a.providers,{[w]:f.provider}):delete a.providers[w]),h&&(!f?.managedLegacyProvider||L(h,f.managedLegacyProvider))&&(f?.version===1?(0,p.S3)(b.providers,{[w]:f.legacyProvider??f.provider}):delete b.providers[w]),f?.version===1?(P(c,f,"defaultModel"),P(c,f,"defaultProvider"),P(c,f,"enabledModels")):c.defaultProvider===w&&(delete c.defaultProvider,delete c.defaultModel),!f&&Array.isArray(c.enabledModels)&&(c.enabledModels=c.enabledModels.filter(a=>"string"!=typeof a||!a.startsWith(`${w}/`)),0===c.enabledModels.length&&delete c.enabledModels),await O(a,b,c,{version:1,state:"restored"}),e.NextResponse.json({success:!0,message:"Switchboard provider removed and previous Pi model settings restored"})}catch(a){return console.log("Error resetting pi settings:",a),e.NextResponse.json({error:"Failed to reset pi settings"},{status:500})}}async function V(){return y(U)}(0,u.D)([R,T,V]),(0,d.A)(R,"00450d87d2ffa11afa78f16c17a11d0c9b0b1f9856",null),(0,d.A)(T,"4029f61610cea7f5aca2b3a6fdea336980e6ef6daf",null),(0,d.A)(V,"00193adebd385678b7db9565caa9b23c055e57fb4f",null)},95510:(a,b,c)=>{"use strict";c.d(b,{EA:()=>i,M_:()=>h,S3:()=>j,Yb:()=>g});var d=c(51455),e=c.n(d),f=c(57781);async function g(a,b,{secret:c=!1}={}){if(await (0,f.R)(a,b,c?{encoding:"utf-8",mode:384}:"utf-8"),c)try{await e().chmod(a,384)}catch{}}async function h(a){let b=await Promise.all(a.map(async({filePath:a})=>{try{return{exists:!0,value:await e().readFile(a)}}catch(a){if(a?.code==="ENOENT")return{exists:!1,value:null};throw a}})),c=async({filePath:a,content:b,secret:c=!1})=>{if(null!==b)return void await g(a,b,{secret:c});try{await e().unlink(a)}catch(a){if(a?.code!=="ENOENT")throw a}};try{for(let b of a)await c(b)}catch(e){let d=(await Promise.allSettled(a.map(({filePath:a,secret:d=!1},e)=>c({filePath:a,content:b[e].exists?b[e].value:null,secret:d})))).filter(a=>"rejected"===a.status);if(d.length>0)throw AggregateError([e,...d.map(a=>a.reason)],"Failed to replace CLI files and roll them back cleanly");throw e}}function i(a,b){return Object.fromEntries(b.map(b=>[b,{exists:Object.hasOwn(a,b),value:a[b]}]))}function j(a,b){for(let[c,d]of Object.entries(b||{}))d?.exists?a[c]=d.value:delete a[c]}},96487:()=>{}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=869,exports.ids=[869],exports.modules={4489:(a,b,c)=>{c.d(b,{ki:()=>f}),c(29696);let d=new Set(["chat","text","language","model"]),e=new Map(["imageToText","webSearch","webFetch"].map(a=>[a.toLowerCase(),a]));function f(a){if("string"!=typeof a||!a)return a;let b=a.toLowerCase();return d.has(b)?"llm":e.get(b)||b}},27335:(a,b,c)=>{c.d(b,{Xg:()=>r,vq:()=>f.vq,fZ:()=>j,cY:()=>t,ez:()=>n,ux:()=>m,OA:()=>o,kt:()=>p,KC:()=>s,SM:()=>i});var d=c(4630),e=c(39698),f=c(45350),g=c(6595);let h="-review";function i(a){return f.vq[a]||[]}function j(a){let b=f.vq[a];return b?.[0]?.id||null}let k=new Set(["kr","kiro"]);function l(a,b,c){if(!a)return;let d=a.find(a=>a.id===b);if(d)return d;if(!k.has(c))return;let e=(0,g.Kq)(b);if(e!==b)return a.find(a=>a.id===e)}function m(a,b){let c=f.vq[a];return c?(0,g.gr)(l(c,b,a)):null}function n(a,b){let c=f.vq[a];return c?(0,g.ec)(l(c,b,a)):null}function o(a,b){let c=f.vq[a];if(!c)return null;let d=l(c,b,a);return d?.kind||d?.type||null}function p(a,b){let c="string"==typeof b?b.match(/\([^()]+\)\s*$/):null,d=c?c[0]:"",e=d?b.slice(0,c.index).trim():b,g=l(f.vq[a],e,a);return g?.upstreamModelId?g.upstreamModelId+d:g?.id?g.id+d:"cx"===a&&"string"==typeof e&&e.endsWith(h)?e.slice(0,-h.length)+d:e+d}let q=Object.fromEntries(e.A.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias])),r=Object.fromEntries(Object.keys(d.xq).map(a=>[a,q[a]||a]));function s(a){let b=r[a]||a;return f.vq[b]||[]}function t(a,b){return(0,g.g5)(l(f.vq[a],b,a))}},29696:(a,b,c)=>{function d(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"boolean"==typeof a.supported&&(null==a.effort||"flat"===a.effort||"nested"===a.effort)}c.d(b,{K5:()=>d,ml:()=>f});let e=[{suffix:"aliyuncs.com",format:"qwen"},{suffix:"opencode.ai",format:"flat"},{suffix:"api.surplusintelligence.ai",format:"flat"},{suffix:"inference-api.nousresearch.com",format:"none"}];function f(a){let b="";try{b=new URL(String(a||"")).hostname.toLowerCase()}catch{return null}if(!b)return null;for(let a of e)if(b===a.suffix||b.endsWith(`.${a.suffix}`))return a.format;return null}},30869:(a,b,c)=>{c.d(b,{UY:()=>h,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g,oc:()=>i});var d=c(39006),e=c(40615),f=c(81329);d.rE;let g={npmPackageName:"switchboard-router",installCmd:"npm i -g switchboard-router",installCmdLatest:"npm i -g switchboard-router@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:2200,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,statusStartupTimeoutMs:2e3,appPort:20128},h={maxLines:200,pollIntervalMs:1e3},i={tickIntervalMs:6e4,pingLeadMs:5e3,refreshAheadMs:3e5,failureCooldownMs:9e5,providers:{claude:{settingsKey:"claudeAutoPing",quotaKey:"session (5h)",pingModel:"claude-haiku-4-5-20251001",pingText:"hi",pingMaxTokens:1},codex:{settingsKey:"codexAutoPing",quotaKey:"session",pingWhenResetAtSlides:!0,resetAtDriftMs:3e4,minPingIntervalMs:6e5,skipWhenBlockingQuotaExhausted:!0,pingModel:"gpt-5.5",pingText:"hi",pingInstructions:"Reply with OK.",pingReasoningEffort:"none"}}}},39006:a=>{a.exports=JSON.parse('{"UU":"switchboard-app","rE":"0.9.
|
|
1
|
+
"use strict";exports.id=869,exports.ids=[869],exports.modules={4489:(a,b,c)=>{c.d(b,{ki:()=>f}),c(29696);let d=new Set(["chat","text","language","model"]),e=new Map(["imageToText","webSearch","webFetch"].map(a=>[a.toLowerCase(),a]));function f(a){if("string"!=typeof a||!a)return a;let b=a.toLowerCase();return d.has(b)?"llm":e.get(b)||b}},27335:(a,b,c)=>{c.d(b,{Xg:()=>r,vq:()=>f.vq,fZ:()=>j,cY:()=>t,ez:()=>n,ux:()=>m,OA:()=>o,kt:()=>p,KC:()=>s,SM:()=>i});var d=c(4630),e=c(39698),f=c(45350),g=c(6595);let h="-review";function i(a){return f.vq[a]||[]}function j(a){let b=f.vq[a];return b?.[0]?.id||null}let k=new Set(["kr","kiro"]);function l(a,b,c){if(!a)return;let d=a.find(a=>a.id===b);if(d)return d;if(!k.has(c))return;let e=(0,g.Kq)(b);if(e!==b)return a.find(a=>a.id===e)}function m(a,b){let c=f.vq[a];return c?(0,g.gr)(l(c,b,a)):null}function n(a,b){let c=f.vq[a];return c?(0,g.ec)(l(c,b,a)):null}function o(a,b){let c=f.vq[a];if(!c)return null;let d=l(c,b,a);return d?.kind||d?.type||null}function p(a,b){let c="string"==typeof b?b.match(/\([^()]+\)\s*$/):null,d=c?c[0]:"",e=d?b.slice(0,c.index).trim():b,g=l(f.vq[a],e,a);return g?.upstreamModelId?g.upstreamModelId+d:g?.id?g.id+d:"cx"===a&&"string"==typeof e&&e.endsWith(h)?e.slice(0,-h.length)+d:e+d}let q=Object.fromEntries(e.A.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias])),r=Object.fromEntries(Object.keys(d.xq).map(a=>[a,q[a]||a]));function s(a){let b=r[a]||a;return f.vq[b]||[]}function t(a,b){return(0,g.g5)(l(f.vq[a],b,a))}},29696:(a,b,c)=>{function d(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"boolean"==typeof a.supported&&(null==a.effort||"flat"===a.effort||"nested"===a.effort)}c.d(b,{K5:()=>d,ml:()=>f});let e=[{suffix:"aliyuncs.com",format:"qwen"},{suffix:"opencode.ai",format:"flat"},{suffix:"api.surplusintelligence.ai",format:"flat"},{suffix:"inference-api.nousresearch.com",format:"none"}];function f(a){let b="";try{b=new URL(String(a||"")).hostname.toLowerCase()}catch{return null}if(!b)return null;for(let a of e)if(b===a.suffix||b.endsWith(`.${a.suffix}`))return a.format;return null}},30869:(a,b,c)=>{c.d(b,{UY:()=>h,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g,oc:()=>i});var d=c(39006),e=c(40615),f=c(81329);d.rE;let g={npmPackageName:"switchboard-router",installCmd:"npm i -g switchboard-router",installCmdLatest:"npm i -g switchboard-router@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:2200,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,statusStartupTimeoutMs:2e3,appPort:20128},h={maxLines:200,pollIntervalMs:1e3},i={tickIntervalMs:6e4,pingLeadMs:5e3,refreshAheadMs:3e5,failureCooldownMs:9e5,providers:{claude:{settingsKey:"claudeAutoPing",quotaKey:"session (5h)",pingModel:"claude-haiku-4-5-20251001",pingText:"hi",pingMaxTokens:1},codex:{settingsKey:"codexAutoPing",quotaKey:"session",pingWhenResetAtSlides:!0,resetAtDriftMs:3e4,minPingIntervalMs:6e5,skipWhenBlockingQuotaExhausted:!0,pingModel:"gpt-5.5",pingText:"hi",pingInstructions:"Reply with OK.",pingReasoningEffort:"none"}}}},39006:a=>{a.exports=JSON.parse('{"UU":"switchboard-app","rE":"0.9.48"}')},40615:(a,b,c)=>{c.d(b,{Q2:()=>s,js:()=>w,DI:()=>n,fg:()=>k,Pd:()=>o,IS:()=>h,nJ:()=>i,zN:()=>j,JH:()=>m,jO:()=>y,wb:()=>x,br:()=>l,wG:()=>v,zt:()=>t,gb:()=>q,gC:()=>r,mq:()=>p,rs:()=>u});var d=c(39698);let e="⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";Object.fromEntries(d.A.filter(a=>a.display).map(a=>{let b;return[a.id,"RISK_NOTICE"===(b=a.display).deprecationNotice?{...b,deprecationNotice:e}:b]}));let f=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","modelsFetcher","mediaPriority","hiddenKinds"],g=a=>Object.fromEntries(d.A.filter(b=>b.category===a).map(a=>[a.id,function(a){let b={};for(let c of(a.media&&Object.assign(b,a.media),f))void 0!==a[c]&&(b[c]=a[c]);let c={...a.display||{}};return"RISK_NOTICE"===c.deprecationNotice&&(c.deprecationNotice=e),{...c,id:a.id,alias:a.uiAlias||a.alias,...a.aliases?.length?{aliases:a.aliases}:{},...a.hidden?{hidden:!0}:{},...b,...void 0!==a.priority?{priority:a.priority}:{},...a.hasFree?{hasFree:!0}:{},...a.thinkingConfig?{thinkingConfig:a.thinkingConfig}:{},...a.regions?{regions:a.regions,defaultRegion:a.defaultRegion}:{},...a.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...a.noAuth?{noAuth:!0}:{},...a.passthroughModels?{passthroughModels:!0}:{},...a.hasOAuth?{hasOAuth:!0}:{},...a.authModes?{authModes:a.authModes}:{},...a.authType?{authType:a.authType}:{},...a.authHint?{authHint:a.authHint}:{}}}(a)])),h=g("free"),i=g("freeTier"),j=g("oauth"),k=g("apikey"),l=g("webCookie"),m="openai-compatible-",n="anthropic-compatible-",o="custom-embedding-";function p(a){return"string"==typeof a&&a.startsWith(m)}function q(a){return"string"==typeof a&&a.startsWith(n)}function r(a){return"string"==typeof a&&a.startsWith(o)}let s={...h,...i,...j,...k,...l};function t(a){for(let b of Object.values(s))if(b.alias===a||b.id===a||b.aliases?.includes(a))return b;return null}function u(a){let b=t(a);return b?.id||a}function v(a){let b=s[a];return b?.alias||a}let w=Object.values(s).reduce((a,b)=>(a[b.alias]=b.id,a),{});Object.values(s).reduce((a,b)=>(a[b.id]=b.alias,a),{});let x=d.A.filter(a=>a.features?.usage).map(a=>a.id),y=d.A.filter(a=>a.features?.usageApikey).map(a=>a.id)},81329:(a,b,c)=>{c.d(b,{CP:()=>h,PROVIDER_MODELS:()=>d.vq,Xg:()=>d.Xg,eh:()=>g});var d=c(27335),e=c(40615),f=c(4489);Object.entries(e.Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a);let g=Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),h=(a,b=null)=>{let c=a?.kind||a?.type||b;return c?(0,f.ki)(c):c}}};
|
|
@@ -241,6 +241,6 @@ PRAGMA busy_timeout = 5000;
|
|
|
241
241
|
DROP TABLE IF EXISTS prometheusRoutingRequests;
|
|
242
242
|
DROP TABLE IF EXISTS prometheusMetricState;
|
|
243
243
|
DROP TABLE IF EXISTS prometheusUsageTotals;
|
|
244
|
-
`)}}].sort((a,b)=>a.version-b.version);function D(a,b,c=null){let d=a.get("SELECT value FROM _meta WHERE key = ?",[b]);return d?d.value:c}function E(a,b,c){a.run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[b,String(c)])}let F=null;function G(){if(F)return F;try{let a=g().join(process.cwd(),"package.json");F=JSON.parse(e().readFileSync(a,"utf-8")).version||"0.0.0"}catch{F="0.0.0"}return F}function H(a){(0,h.Jh)();let b=G(),c=`${a}-${b}-${function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}${b(a.getMonth()+1)}${b(a.getDate())}-${b(a.getHours())}${b(a.getMinutes())}${b(a.getSeconds())}`}()}`,d=g().join(h.KQ,c),f=1;for(;e().existsSync(d);)d=g().join(h.KQ,`${c}-${f++}`);return e().mkdirSync(d,{recursive:!0}),d}function I(a,b,c=null){if(!e().existsSync(a))return null;let d=c||g().basename(a),f=g().join(b,d);return e().copyFileSync(a,f),f}function J(){if(e().existsSync(h.KQ))for(let a of e().readdirSync(h.KQ,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>({name:a.name,full:g().join(h.KQ,a.name),mtime:e().statSync(g().join(h.KQ,a.name)).mtimeMs})).sort((a,b)=>b.mtime-a.mtime).slice(5))try{e().rmSync(a.full,{recursive:!0,force:!0})}catch{}}var K=c(33323),L=c(
|
|
244
|
+
`)}}].sort((a,b)=>a.version-b.version);function D(a,b,c=null){let d=a.get("SELECT value FROM _meta WHERE key = ?",[b]);return d?d.value:c}function E(a,b,c){a.run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[b,String(c)])}let F=null;function G(){if(F)return F;try{let a=g().join(process.cwd(),"package.json");F=JSON.parse(e().readFileSync(a,"utf-8")).version||"0.0.0"}catch{F="0.0.0"}return F}function H(a){(0,h.Jh)();let b=G(),c=`${a}-${b}-${function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}${b(a.getMonth()+1)}${b(a.getDate())}-${b(a.getHours())}${b(a.getMinutes())}${b(a.getSeconds())}`}()}`,d=g().join(h.KQ,c),f=1;for(;e().existsSync(d);)d=g().join(h.KQ,`${c}-${f++}`);return e().mkdirSync(d,{recursive:!0}),d}function I(a,b,c=null){if(!e().existsSync(a))return null;let d=c||g().basename(a),f=g().join(b,d);return e().copyFileSync(a,f),f}function J(){if(e().existsSync(h.KQ))for(let a of e().readdirSync(h.KQ,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>({name:a.name,full:g().join(h.KQ,a.name),mtime:e().statSync(g().join(h.KQ,a.name)).mtimeMs})).sort((a,b)=>b.mtime-a.mtime).slice(5))try{e().rmSync(a.full,{recursive:!0,force:!0})}catch{}}var K=c(33323),L=c(22438);let M=g().join(h.HG,".migrated-from-json"),N=g().join(h.HG,".legacy-secrets-sanitized"),O=new WeakSet,P=j.O0;class Q extends Error{constructor(a,b){super(a),this.name="MigrationAborted",this.droppedRows=b}}function R(a,b,c,d,e){let f=[];for(let a of c)try{d(a)}catch(b){f.push({...e(a),reason:b.message})}let g=a.get(`SELECT COUNT(*) as c FROM ${b}`)?.c??0;if(g!==c.length)throw console.warn(`[DB][migrate] ${b} row-count mismatch: expected ${c.length}, got ${g}. Dropped:`,f),new Q(`${b} row-count mismatch: expected ${c.length}, got ${g}`,f)}function S(a){if(!e().existsSync(a))return null;try{return JSON.parse(e().readFileSync(a,"utf-8"))}catch{return null}}function T(a,b,c=new Map){let d=new Map,e=[];for(let b of a?.apiKeys||[]){if("string"!=typeof b?.key||!b.id)continue;let a=(0,j.Yh)(b.key);e.push({id:b.id,stored:a}),(0,j.BA)(a).legacy&&d.set(String(b.key),b.id)}let f=new Set((b?.history||[]).map(a=>a?.apiKey).filter(a=>"string"==typeof a&&"local-no-key"!==a));for(let a of Object.values(b?.dailySummary||{}))for(let[b,c]of Object.entries(a?.byApiKey||{})){let a="string"==typeof c?.apiKey?c.apiKey:b.split("|")[0];a&&"local-no-key"!==a&&f.add(String(a))}for(let a of f){if(d.has(a))continue;let b=e.find(b=>{let d=`${b.id}\u0000${b.stored}\u0000${a}`;return c.has(d)||c.set(d,P(b.stored,a)),c.get(d)});b&&d.set(a,b.id)}return d}function U(a,b){if(!a||!e().existsSync(g().dirname(a)))return;let c=`${a}.${process.pid}.${Date.now()}.tmp`;e().writeFileSync(c,JSON.stringify(b,null,2),{mode:384}),e().renameSync(c,a),e().chmodSync(a,384)}function V(a,b,c,d,e=null,f=new Map,g=!1){let h=e||T(a,b,f);return{main:a&&"object"==typeof a?{...a,apiKeys:(a.apiKeys||[]).map(a=>({...a,key:function(a,b,c){if(c&&b.has(a.id))return b.get(a.id);if("string"!=typeof a.key)return null;let d=(0,j.Yh)(a.key);return(0,j.BA)(d).legacy?(0,j.ws)(d):d}(a,d,g)}))}:null,usage:b&&"object"==typeof b?{...b,history:(b.history||[]).map(a=>({...a,apiKey:null,clientKeyId:h.get(String(a.apiKey))||a.clientKeyId||null})),dailySummary:Object.fromEntries(Object.entries(b.dailySummary||{}).map(([a,b])=>[a,o(b,c,"up",a=>h.get(String(a))||null)]))}:null}}function W(a,b,c,d=null,f=null,i=new Map){let j=a.all("SELECT id, key FROM apiKeys")||[],k=new Map(j.map(a=>[a.id,a.key])),l=V(b,c,j,k,f,i,!0);if(l.main&&U(h.Or.main,l.main),l.usage&&U(h.Or.usage,l.usage),e().existsSync(h.KQ))for(let a of e().readdirSync(h.KQ,{withFileTypes:!0})){if(!a.isDirectory()||!a.name.startsWith("migrate-from-json-"))continue;let b=g().join(h.KQ,a.name),c=g().join(b,g().basename(h.Or.main)),e=g().join(b,g().basename(h.Or.usage)),f=V(S(c),S(e),j,k,null,i,!!d&&g().resolve(b)===g().resolve(d));f.main&&U(c,f.main),f.usage&&U(e,f.usage)}}function X(a){try{a.checkpoint?.()}catch{}}async function Y(a){if(O.has(a))return;let b=function(a){try{let b=a.get("SELECT COUNT(*) as c FROM _meta");return!b||0===b.c}catch{return!0}}(a),c=function(a){a.exec((0,i.zE)("_meta",i.CG._meta));let b=parseInt(D(a,"schemaVersion","0"),10)||0;if(b>=(C.length?C[C.length-1].version:0))return{applied:0,from:b,to:b};let c=C.filter(a=>a.version>b),d=b;for(let b of c)a.transaction(()=>b.up(a)),"function"==typeof b.afterUp&&b.afterUp(a),a.transaction(()=>E(a,"schemaVersion",b.version)),d=b.version,console.log(`[DB][migrate] applied #${b.version} ${b.name}`);return{applied:c.length,from:b,to:d}}(a);for(let[b,c]of Object.entries(i.CG)){a.exec((0,i.zE)(b,c));let d=new Set(a.all(`PRAGMA table_info(${b})`).map(a=>a.name));for(let[e,f]of Object.entries(c.columns))if(!d.has(e)){let c=f.replace(/PRIMARY KEY( AUTOINCREMENT)?/i,"").replace(/UNIQUE/i,"").trim();try{a.exec(`ALTER TABLE ${b} ADD COLUMN ${e} ${c}`),console.log(`[DB][sync] +column ${b}.${e}`)}catch(a){console.warn(`[DB][sync] add column ${b}.${e} failed: ${a.message}`)}}for(let b of c.indexes||[])try{a.exec(b)}catch{}}let d=e().existsSync(M),f=S(h.Or.main),g=S(h.Or.usage),k=S(h.Or.disabled),l=S(h.Or.details),m=!!(f||g||k||l),n=e().existsSync(N),p=D(a,"migratedAt",null);if(m&&!n&&p){a.checkpoint?.();let b=new Map,c=T(f,g,b);W(a,f,g,null,c,b),e().writeFileSync(N,new Date().toISOString(),{mode:384})}let q=m&&!d&&!p;if(q&&!function(a){for(let b of["settings","providerConnections","providerNodes","proxyPools","apiKeys","combos","kv","usageHistory","usageDaily","requestDetails"])if(0!==(a.get(`SELECT COUNT(*) count FROM ${b}`)?.count||0))return!1;return!0}(a))return void console.error("[DB][migrate] legacy import pending but target tables are not empty; preserving sources for repair");if(q){let b=Date.now(),c=H("migrate-from-json");for(let a of Object.values(h.Or))I(a,c);let d=new Map,i=T(f,g,d);try{a.transaction(()=>{if(f&&"object"==typeof f){for(let[b,c]of(f.settings&&a.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,K.s)(f.settings)]),R(a,"providerConnections",f.providerConnections||[],b=>{let c=(0,L.connToRow)(b);a.run("INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[c.id,c.provider,c.authType||"oauth",c.name,c.email,c.priority,c.isActive,c.data,c.createdAt||new Date().toISOString(),c.updatedAt||new Date().toISOString()])},a=>({id:a.id??null,provider:a.provider??null,name:a.name??null})),R(a,"providerNodes",f.providerNodes||[],b=>{let{id:c,type:d,name:e,createdAt:f,updatedAt:g,...h}=b;a.run("INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c,d||null,e||null,(0,K.s)(h),f||new Date().toISOString(),g||new Date().toISOString()])},a=>({id:a.id??null,type:a.type??null,name:a.name??null})),R(a,"proxyPools",f.proxyPools||[],b=>{let{id:c,isActive:d,testStatus:e,createdAt:f,updatedAt:g,...h}=b;a.run("INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c,+(!1!==d),e||"unknown",(0,K.s)(h),f||new Date().toISOString(),g||new Date().toISOString()])},a=>({id:a.id??null})),R(a,"apiKeys",f.apiKeys||[],b=>{let c=(0,j.Yh)(b.key),d="string"==typeof c&&(0,j.BA)(c).legacy?(0,j.ws)(c):c,e=(0,j.BA)(d);a.run(`INSERT OR REPLACE INTO apiKeys(id, key, keyPrefix, lookupDigest, name, machineId, isActive, createdAt, allowedModels, allowedCombos, expiresAt, rateLimitPerMinute, concurrencyLimit, spendLimitUsd, spentUsd)
|
|
245
245
|
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[b.id,d,e.prefix||null,e.lookupDigest||null,b.name||null,b.machineId||null,+(!1!==b.isActive),b.createdAt||new Date().toISOString(),null==b.allowedModels?null:(0,K.s)(b.allowedModels),null==b.allowedCombos?null:(0,K.s)(b.allowedCombos),b.expiresAt||null,b.rateLimitPerMinute??null,b.concurrencyLimit??null,b.spendLimitUsd??null,Number(b.spentUsd||0)])},a=>({id:a.id??null,name:a.name??null})),R(a,"combos",f.combos||[],b=>{a.run("INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[b.id,b.name,b.kind||null,(0,K.s)(b.models||[]),b.createdAt||new Date().toISOString(),b.updatedAt||new Date().toISOString()])},a=>({id:a.id??null,name:a.name??null})),Object.entries(f.modelAliases||{})))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)",[b,(0,K.s)(c)]);for(let b of f.customModels||[]){let c=`${b.providerAlias}|${b.id}|${b.type||"llm"}`;a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[c,(0,K.s)(b)])}for(let[b,c]of Object.entries(f.mitmAlias||{}))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)",[b,(0,K.s)(c||{})]);for(let[b,c]of Object.entries(f.pricing||{}))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)",[b,(0,K.s)(c||{})])}!function(a,b,c=new Map){let d=a.all("SELECT id, key FROM apiKeys")||[];if(b&&"object"==typeof b){for(let d of b.history||[]){let b=d.tokens||{},e=c.get(String(d.apiKey))||null;a.run(`INSERT INTO usageHistory(timestamp, provider, model, connectionId, clientKeyId, endpoint, promptTokens, completionTokens, cost, status, tokens, meta)
|
|
246
246
|
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[d.timestamp||new Date().toISOString(),d.provider||null,d.model||null,d.connectionId||null,e,d.endpoint||null,b.prompt_tokens||b.input_tokens||0,b.completion_tokens||b.output_tokens||0,d.cost||0,d.status||"ok",(0,K.s)(b),(0,K.s)({})]),e&&a.run("UPDATE apiKeys SET spentUsd = spentUsd + ? WHERE id = ?",[Number(d.cost||0),e])}for(let[e,f]of Object.entries(b.dailySummary||{}))a.run("INSERT OR REPLACE INTO usageDaily(dateKey, data) VALUES(?, ?)",[e,(0,K.s)(o(f,d,"up",a=>c.get(String(a))||null))]);"number"==typeof b.totalRequestsLifetime&&E(a,"totalRequestsLifetime",b.totalRequestsLifetime)}}(a,g,i);if(k&&"object"==typeof k.disabled)for(let[b,c]of Object.entries(k.disabled))a.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('disabledModels', ?, ?)",[b,(0,K.s)(c||[])]);if(l&&Array.isArray(l.records))for(let b of l.records)a.run("INSERT OR REPLACE INTO requestDetails(id, timestamp, provider, model, connectionId, status, data) VALUES(?, ?, ?, ?, ?, ?, ?)",[b.id,b.timestamp||new Date().toISOString(),b.provider||null,b.model||null,b.connectionId||null,b.status||null,(0,K.s)(b)]);B(a),E(a,"appVersion",G()),E(a,"migratedAt",new Date().toISOString())})}catch(a){if(a instanceof Q)return void console.error(`[DB][migrate] aborted: ${a.message} | legacy JSON kept | backup: ${c}`);throw a}a.checkpoint?.(),W(a,f,g,c,i,d),e().writeFileSync(N,new Date().toISOString(),{mode:384}),e().writeFileSync(M,new Date().toISOString(),{mode:384}),J(),console.log(`[DB][migrate] JSON → SQLite in ${Date.now()-b}ms | legacy sources sanitized | backup: ${c}`),O.add(a);return}if(b){E(a,"appVersion",G()),O.add(a);return}let r=D(a,"appVersion",null),s=G();if(r&&r!==s){X(a);let b=H(`upgrade-${r}-to-${s}`);try{I(h.AL,b)}catch{}E(a,"appVersion",s),J(),console.log(`[DB][migrate] App ${r} → ${s} | schema ${c.from} → ${c.to} | backup: ${b}`)}else if(c.applied>0){X(a);let b=H(`schema-${c.from}-to-${c.to}`);try{I(h.AL,b)}catch{}J()}O.add(a)}}};
|