switchboard-router 0.9.45 → 0.9.46
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-468635886f5017ab.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 +16 -16
- 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 +3 -3
- 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 +16 -16
- 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/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/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-468635886f5017ab.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 → WW6AmUFPUk6i1gC7bGp99}/_buildManifest.js +0 -0
- /package/app/.next/static/{67uh5PHd0ouLGa9jpqi0E → WW6AmUFPUk6i1gC7bGp99}/_ssgManifest.js +0 -0
- /package/app/.next-cli-build/static/{67uh5PHd0ouLGa9jpqi0E → WW6AmUFPUk6i1gC7bGp99}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{67uh5PHd0ouLGa9jpqi0E → WW6AmUFPUk6i1gC7bGp99}/_ssgManifest.js +0 -0
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
promptTokens = promptTokens + excluded.promptTokens,
|
|
8
8
|
completionTokens = completionTokens + excluded.completionTokens,
|
|
9
9
|
cachedTokens = cachedTokens + excluded.cachedTokens,
|
|
10
|
-
cost = cost + excluded.cost`,[c.requests,c.promptTokens,c.completionTokens,c.cachedTokens,c.cost]),a.run("DELETE FROM prometheusUsageTotals WHERE provider = ?",[b])})}},5781:(a,b,c)=>{c.r(b),c.d(b,{DEFAULT_QUOTA_FRESH_MS:()=>
|
|
10
|
+
cost = cost + excluded.cost`,[c.requests,c.promptTokens,c.completionTokens,c.cachedTokens,c.cost]),a.run("DELETE FROM prometheusUsageTotals WHERE provider = ?",[b])})}},5781:(a,b,c)=>{c.r(b),c.d(b,{DEFAULT_QUOTA_FRESH_MS:()=>m,cleanupProviderConnections:()=>I,connToRow:()=>s,createProviderConnection:()=>y,deleteProviderConnection:()=>F,deleteProviderConnectionsByProvider:()=>G,getProviderConnectionById:()=>v,getProviderConnections:()=>u,getProviderQuotaHeadroom:()=>w,redactSecrets:()=>q,reorderProviderConnections:()=>H,updateProviderConnection:()=>z,updateProviderConnectionCredentialsIfCurrent:()=>E,updateProviderConnectionStatusIfCurrent:()=>C});var d=c(11841),e=c(95812),f=c(47293),g=c(60290),h=c(36366),i=c(644),j=c(38044),k=c(30869),l=c(2903);let m=2*k.oc.tickIntervalMs,n=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","errorCode","consecutiveUseCount","idToken","lastRefreshAt"],o=new Set(["accessToken","refreshToken","idToken","apiKey","copilotToken","cookies","clientSecret","secretAccessKey"]);function p(a,b,c=!1){return"string"==typeof a?c&&a?b(a):a:c&&null!==a&&"object"!=typeof a?void 0:Array.isArray(a)?a.map(a=>p(a,b,c)):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,d])=>[a,p(d,b,c||o.has(a))])):a}function q(a){return p(a,()=>void 0)}function r(a){return a?{...p((0,i.q)(a.data,{}),a=>(0,j.wu)(a)??a),id:a.id,provider:a.provider,authType:a.authType,name:a.name,email:a.email,priority:a.priority,isActive:1===a.isActive||!0===a.isActive,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function s(a){let{id:b,provider:c,authType:d,name:e,email:f,priority:g,isActive:h,createdAt:k,updatedAt:l,...m}=a,n=p(m,j.MG);return{id:b,provider:c,authType:d,name:e??null,email:f??null,priority:g??null,isActive:+(!1!==h),data:(0,i.s)(n),createdAt:k,updatedAt:l}}function t(a,b){let c=s(b);a.run(`INSERT INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt)
|
|
11
11
|
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
12
12
|
ON CONFLICT(id) DO UPDATE SET
|
|
13
13
|
provider=excluded.provider, authType=excluded.authType, name=excluded.name,
|
|
14
14
|
email=excluded.email, priority=excluded.priority, isActive=excluded.isActive,
|
|
15
|
-
data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.provider,c.authType,c.name,c.email,c.priority,c.isActive,c.data,c.createdAt,c.updatedAt])}async function s(a={}){let b=await (0,f.c)(),c=[],d=[];a.provider&&(c.push("provider = ?"),d.push(a.provider)),void 0!==a.isActive&&(c.push("isActive = ?"),d.push(+!!a.isActive));let e=`SELECT * FROM providerConnections${c.length?` WHERE ${c.join(" AND ")}`:""}`,g=b.all(e,d).map(p);return g.sort((a,b)=>(a.priority??999)-(b.priority??999)),g}async function t(a){return p((await (0,f.c)()).get("SELECT * FROM providerConnections WHERE id = ?",[a]))}async function u(a=k){try{let b=Object.create(null),c=Number.isFinite(a)?a:k,d=Date.now();for(let a of(await s())){let e=a.lastQuota,f=Number(e?.at),g=Number(e?.remainingPercentage);if(!Number.isFinite(f)||d-f>c||!Number.isFinite(g))continue;let h=b[a.provider];(!Number.isFinite(h)||g>h)&&(b[a.provider]=g)}return b}catch{return{}}}function v(a,b){let c=a.all("SELECT * FROM providerConnections WHERE provider = ?",[b]).map(p);c.sort((a,b)=>{let c=(a.priority??999)-(b.priority??999);return 0!==c?c:new Date(b.updatedAt||0)-new Date(a.updatedAt||0)}),c.forEach((b,c)=>{a.run("UPDATE providerConnections SET priority = ? WHERE id = ?",[c+1,b.id])})}async function w(a){let b,c=await (0,f.c)(),e=new Date().toISOString();return c.transaction(()=>{let f=c.all("SELECT * FROM providerConnections WHERE provider = ?",[a.provider]).map(p),g=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.username,c=a.providerSpecificData?.chatgptAccountId;g=f.find(d=>{if("oauth"!==d.authType||d.email!==a.email)return!1;let e=d.providerSpecificData?.chatgptAccountId;if(c&&e)return c===e;if(c&&!e||!c&&e)return!1;let f=d.providerSpecificData?.username;return b&&f?b===f:!b&&!f})}else"apikey"===a.authType&&a.name&&(g=f.find(b=>"apikey"===b.authType&&b.name===a.name));if(g){let d={...g,...a,updatedAt:e};r(c,d),b=d;return}let h=a.name||null;h||"oauth"!==a.authType&&"access_token"!==a.authType||(h=a.email||`Account ${f.length+1}`);let i=a.priority;null==i&&(i=f.reduce((a,b)=>Math.max(a,b.priority||0),0)+1);let j={id:(0,d.A)(),provider:a.provider,authType:a.authType||"oauth",name:h,priority:i,isActive:void 0===a.isActive||a.isActive,createdAt:e,updatedAt:e};for(let b of l)void 0!==a[b]&&null!==a[b]&&(j[b]=a[b]);a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(j.providerSpecificData=a.providerSpecificData),void 0!==a.email&&(j.email=a.email),r(c,j),v(c,a.provider),b=j}),b}async function x(a,b){let c,d=await (0,f.c)();return d.transaction(()=>{let e=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!e){c=null;return}let f=p(e),g={...f,...b,updatedAt:new Date().toISOString()};r(d,g),f.provider!==g.provider&&(0,j.uQ)(d,f.provider),void 0!==b.priority&&v(d,f.provider),c=g}),c}let y=["testStatus","lastError","lastErrorAt","errorCode","backoffLevel","rateLimitedUntil"],z="modelLock_";async function A(a,b,c){if(!b||"object"!=typeof b||!c||"object"!=typeof c)throw TypeError("An account status snapshot and patch are required");if(Object.keys(c).some(a=>!y.includes(a)&&!a.startsWith(z)))throw TypeError("Only account status and model locks may be updated conditionally");let d=await (0,f.c)(),e=null;try{d.transaction(()=>{let f=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!f)return;let g=p(f);if([...new Set([...y,"provider","isActive",...Object.keys(b).filter(a=>a.startsWith(z)),...Object.keys(g).filter(a=>a.startsWith(z))])].some(a=>(g[a]??null)!==(b[a]??null)))return;let h={...g,...c,updatedAt:new Date().toISOString()},i=q(h);d.run("UPDATE providerConnections SET data = ?, updatedAt = ? WHERE id = ? AND data = ? AND updatedAt = ?",[i.data,i.updatedAt,a,f.data,f.updatedAt]).changes>0&&(e=h)})}catch(a){if(a?.code!=="SQLITE_BUSY_SNAPSHOT"&&a?.errcode!==517)throw a}return e}let B=["accessToken","refreshToken","idToken","expiresAt","expiresIn","lastRefreshAt","providerSpecificData","updatedAt","projectId"];async function C(a,b,c){if(!b||!c||Object.keys(c).some(a=>!B.includes(a)))throw TypeError("A credential snapshot and credential-only patch are required");let d=await (0,f.c)(),g=null;for(let f=0;f<e.tx;f++){try{d.transaction(()=>{let e=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!e)return;let f=p(e);if(["provider","authType","accessToken","refreshToken","idToken","expiresAt","lastRefreshAt"].some(a=>(f[a]??null)!==(b[a]??null))||["copilotToken","copilotTokenExpiresAt"].some(a=>(f.providerSpecificData?.[a]??null)!==(b.providerSpecificData?.[a]??null)))return;let h={...f,...c,updatedAt:new Date().toISOString(),...c.providerSpecificData?{providerSpecificData:{...f.providerSpecificData,...c.providerSpecificData}}:{}},i=q(h);d.run("UPDATE providerConnections SET data = ?, updatedAt = ? WHERE id = ? AND data = ? AND updatedAt = ?",[i.data,i.updatedAt,a,e.data,e.updatedAt]).changes>0&&(g=h)})}catch(a){if(a?.code!=="SQLITE_BUSY_SNAPSHOT"&&a?.errcode!==517)throw a;continue}return g}return null}async function D(a){let b=await (0,f.c)(),c=!1;return b.transaction(()=>{let d=b.get("SELECT provider FROM providerConnections WHERE id = ?",[a]);d&&(b.run("DELETE FROM providerConnections WHERE id = ?",[a]),v(b,d.provider),(0,j.uQ)(b,d.provider),c=!0)}),c}async function E(a){let b=await (0,f.c)(),c=0;return b.transaction(()=>{c=b.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a])?.n||0,b.run("DELETE FROM providerConnections WHERE provider = ?",[a]),(0,j.uQ)(b,a)}),c}async function F(a){let b=await (0,f.c)();b.transaction(()=>v(b,a))}async function G(){let a=await (0,f.c)(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;return a.transaction(()=>{for(let d of a.all("SELECT * FROM providerConnections")){let e=p(d),f=!1;for(let a of b)(null===e[a]||void 0===e[a])&&a in e&&(delete e[a],c++,f=!0);e.providerSpecificData&&0===Object.keys(e.providerSpecificData).length&&(delete e.providerSpecificData,c++,f=!0),f&&r(a,e)}}),c}},38044:(a,b,c)=>{c.d(b,{BA:()=>C,E8:()=>x,MG:()=>u,O0:()=>E,Yh:()=>B,cb:()=>z,lO:()=>D,ue:()=>F,ws:()=>A,wu:()=>v});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(49120);let k="aes-256-gcm",l="enc:v1:",m="enc:v2:",n=i().join(j.nJ,"auth","data-key"),o=i().join(j.nJ,"auth","cli-secret"),p="switchboard-at-rest-v1",q=null,r=null;function s(){if(q)return q;try{let a=g().readFileSync(n);if(32===a.length)return q=a}catch{}try{let a=i().join(j.nJ,"machine-id"),b=p;try{b=g().readFileSync(a,"utf8").trim()+p}catch{}q=b===p?e().randomBytes(32):e().createHash("sha256").update(b).digest()}catch{q=e().randomBytes(32)}try{g().mkdirSync(i().dirname(n),{recursive:!0,mode:448}),g().writeFileSync(n,q,{mode:384})}catch{}return q}function t(){let a=function(){if(r)return r;try{if(r=g().readFileSync(o,"utf8").trim()||null)return r}catch{}let a=e().randomBytes(32).toString("hex");try{g().mkdirSync(i().dirname(o),{recursive:!0,mode:448}),g().writeFileSync(o,a,{mode:384,flag:"wx"}),r=a}catch{try{r=g().readFileSync(o,"utf8").trim()||null}catch{r=null}}return r}();return a?e().createHash("sha256").update(s()).update(a,"utf8").digest():null}function u(a){if(null==a||""===a||"string"!=typeof a||a.startsWith(l)||a.startsWith(m))return a;let b=t(),c=b||s(),d=e().randomBytes(12),f=e().createCipheriv(k,c,d),g=Buffer.concat([f.update(a,"utf8"),f.final()]),h=f.getAuthTag();return`${b?m:l}${d.toString("hex")}:${h.toString("hex")}:${g.toString("hex")}`}function v(a){if(null==a||""===a||"string"!=typeof a)return a;let b=a.startsWith(m);if(!b&&!a.startsWith(l))return a;try{let[c,d,f]=a.slice(m.length).split(":");if(!c||!d||!f)return null;let g=b?t():s();if(!g)return null;let h=e().createDecipheriv(k,g,Buffer.from(c,"hex"));return h.setAuthTag(Buffer.from(d,"hex")),h.update(Buffer.from(f,"hex"),void 0,"utf8")+h.final("utf8")}catch{return null}}function w(a){return e().createHash("sha256").update(`sb-key:${a}`).digest("hex")}function x(a){return a&&"string"==typeof a?a.length<=12?a.slice(0,4)+"…":a.slice(0,10)+"…":""}function y(a){return"string"==typeof a&&/^[a-f0-9]{32}$/.test(a)?e().createHash("sha256").update(`sb-key-lookup:${a}`).digest("hex"):null}function z(a){if("string"!=typeof a)return null;let b=a.split("-");return 4===b.length&&"sk"===b[0]&&b[1]&&/^[a-f0-9]{8}$/.test(b[3])?y(b[2]):null}function A(a,b=z(a)){if(!b)return`v1:${x(a)}:${w(a)}`;let c=e().randomBytes(16),d=e().scryptSync(a,c,32,{N:16384,r:8,p:1,maxmem:0x4000000});return`v2:${b}:${x(a)}:${c.toString("hex")}:${d.toString("hex")}`}function B(a){if("string"!=typeof a||!a.startsWith("v2:"))return a;let b=a.split(":");if(5!==b.length||!/^[a-f0-9]{32}$/.test(b[1]))return a;let c=y(b[1]);return`v2:${c}:${b[2]}:${b[3]}:${b[4]}`}function C(a){if(!a||"string"!=typeof a)return{version:0,lookupDigest:null,prefix:"",hash:null,salt:null,legacy:!0,raw:a};let b=B(a),c=b.split(":");return b.startsWith("v2:")&&5===c.length?{version:2,lookupDigest:/^[a-f0-9]{64}$/.test(c[1])?c[1]:null,prefix:c[2],salt:c[3],hash:c[4],legacy:!1,raw:null}:b.startsWith("v2:")&&4===c.length?{version:2,lookupDigest:null,prefix:c[1],salt:c[2],hash:c[3],legacy:!1,raw:null}:b.startsWith("v1:")&&c.length>=3?{version:1,lookupDigest:null,prefix:c[1],salt:null,hash:c.slice(2).join(":"),legacy:!1,raw:null}:{version:0,lookupDigest:z(b),prefix:x(b),hash:null,salt:null,legacy:!0,raw:b}}function D(a,b){if("string"!=typeof a||"string"!=typeof b)return!1;let c=e().createHash("sha256").update(a).digest(),d=e().createHash("sha256").update(b).digest();return e().timingSafeEqual(c,d)}function E(a,b){if(!b||"string"!=typeof b)return!1;let c=C(a);if(c.legacy)return D(String(c.raw||""),b);if(1===c.version)return!!c.hash&&D(c.hash,w(b));if(!c.salt||!c.hash)return!1;try{let a=e().scryptSync(b,Buffer.from(c.salt,"hex"),32,{N:16384,r:8,p:1,maxmem:0x4000000});return D(a.toString("hex"),c.hash)}catch{return!1}}async function F(a,b){if(!b||"string"!=typeof b)return!1;let c=C(a);if(2!==c.version)return E(a,b);if(!c.salt||!c.hash)return!1;try{let a=await new Promise((a,d)=>{e().scrypt(b,Buffer.from(c.salt,"hex"),32,{N:16384,r:8,p:1,maxmem:0x4000000},(b,c)=>{b?d(b):a(c)})});return D(a.toString("hex"),c.hash)}catch{return!1}}}};
|
|
15
|
+
data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.provider,c.authType,c.name,c.email,c.priority,c.isActive,c.data,c.createdAt,c.updatedAt])}async function u(a={}){let b=await (0,h.c)(),c=[],d=[];a.provider&&(c.push("provider = ?"),d.push(a.provider)),void 0!==a.isActive&&(c.push("isActive = ?"),d.push(+!!a.isActive));let e=`SELECT * FROM providerConnections${c.length?` WHERE ${c.join(" AND ")}`:""}`,f=b.all(e,d).map(r);return f.sort((a,b)=>(a.priority??999)-(b.priority??999)),f}async function v(a){return r((await (0,h.c)()).get("SELECT * FROM providerConnections WHERE id = ?",[a]))}async function w(a=m){try{let b=Object.create(null),c=Number.isFinite(a)?a:m,d=Date.now();for(let a of(await u())){let f=a.lastQuota;if(!1===a.isActive)continue;let g=(0,e.Gv)(f?.at),h=(0,e.Gv)(f?.remainingPercentage),i=f?.resetAt?Date.parse(f.resetAt):NaN;if(Number.isFinite(i)&&i<=d||null===g||g>d||d-g>c||null===h||h<0||h>100)continue;let j=b[a.provider];(!Number.isFinite(j)||h>j)&&(b[a.provider]=h)}return b}catch{return{}}}function x(a,b){let c=a.all("SELECT * FROM providerConnections WHERE provider = ?",[b]).map(r);c.sort((a,b)=>{let c=(a.priority??999)-(b.priority??999);return 0!==c?c:new Date(b.updatedAt||0)-new Date(a.updatedAt||0)}),c.forEach((b,c)=>{a.run("UPDATE providerConnections SET priority = ? WHERE id = ?",[c+1,b.id])})}async function y(a){let b,c=await (0,h.c)(),d=new Date().toISOString();return c.transaction(()=>{let e=c.all("SELECT * FROM providerConnections WHERE provider = ?",[a.provider]).map(r),g=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.username,c=a.providerSpecificData?.chatgptAccountId;g=e.find(d=>{if("oauth"!==d.authType||d.email!==a.email)return!1;let e=d.providerSpecificData?.chatgptAccountId;if(c&&e)return c===e;if(c&&!e||!c&&e)return!1;let f=d.providerSpecificData?.username;return b&&f?b===f:!b&&!f})}else"apikey"===a.authType&&a.name&&(g=e.find(b=>"apikey"===b.authType&&b.name===a.name));if(g){let e={...g,...a,updatedAt:d};t(c,e),b=e;return}let h=a.name||null;h||"oauth"!==a.authType&&"access_token"!==a.authType||(h=a.email||`Account ${e.length+1}`);let i=a.priority;null==i&&(i=e.reduce((a,b)=>Math.max(a,b.priority||0),0)+1);let j={id:(0,f.A)(),provider:a.provider,authType:a.authType||"oauth",name:h,priority:i,isActive:void 0===a.isActive||a.isActive,createdAt:d,updatedAt:d};for(let b of n)void 0!==a[b]&&null!==a[b]&&(j[b]=a[b]);a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(j.providerSpecificData=a.providerSpecificData),void 0!==a.email&&(j.email=a.email),t(c,j),x(c,a.provider),b=j}),b}async function z(a,b){let c,e=await (0,h.c)();return e.transaction(()=>{let f=e.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!f){c=null;return}let g=r(f),h={...g,...b,updatedAt:new Date().toISOString()},i=JSON.stringify((0,d.AN)(g))!==JSON.stringify((0,d.AN)(h)),j=["accessToken","apiKey","refreshToken"].some(a=>void 0!==b[a]&&b[a]!==g[a]);(i||j)&&(h.lastQuota=null),t(e,h),g.provider!==h.provider&&(0,l.uQ)(e,g.provider),void 0!==b.priority&&x(e,g.provider),c=h}),c}let A=["testStatus","lastError","lastErrorAt","errorCode","backoffLevel","rateLimitedUntil"],B="modelLock_";async function C(a,b,c){if(!b||"object"!=typeof b||!c||"object"!=typeof c)throw TypeError("An account status snapshot and patch are required");if(Object.keys(c).some(a=>!A.includes(a)&&!a.startsWith(B)))throw TypeError("Only account status and model locks may be updated conditionally");let d=await (0,h.c)(),e=null;try{d.transaction(()=>{let f=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!f)return;let g=r(f);if([...new Set([...A,"provider","isActive",...Object.keys(b).filter(a=>a.startsWith(B)),...Object.keys(g).filter(a=>a.startsWith(B))])].some(a=>(g[a]??null)!==(b[a]??null)))return;let h={...g,...c,updatedAt:new Date().toISOString()},i=s(h);d.run("UPDATE providerConnections SET data = ?, updatedAt = ? WHERE id = ? AND data = ? AND updatedAt = ?",[i.data,i.updatedAt,a,f.data,f.updatedAt]).changes>0&&(e=h)})}catch(a){if(a?.code!=="SQLITE_BUSY_SNAPSHOT"&&a?.errcode!==517)throw a}return e}let D=["accessToken","refreshToken","idToken","expiresAt","expiresIn","lastRefreshAt","providerSpecificData","updatedAt","projectId"];async function E(a,b,c){if(!b||!c||Object.keys(c).some(a=>!D.includes(a)))throw TypeError("A credential snapshot and credential-only patch are required");let e=await (0,h.c)(),f=null;for(let h=0;h<g.tx;h++){try{e.transaction(()=>{let g=e.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!g)return;let h=r(g);if(["provider","authType","accessToken","refreshToken","idToken","expiresAt","lastRefreshAt"].some(a=>(h[a]??null)!==(b[a]??null))||["copilotToken","copilotTokenExpiresAt"].some(a=>(h.providerSpecificData?.[a]??null)!==(b.providerSpecificData?.[a]??null)))return;let i={...h,...c,updatedAt:new Date().toISOString(),...c.providerSpecificData?{providerSpecificData:{...h.providerSpecificData,...c.providerSpecificData}}:{}};JSON.stringify((0,d.AN)(h))!==JSON.stringify((0,d.AN)(i))&&(i.lastQuota=null);let j=s(i);e.run("UPDATE providerConnections SET data = ?, updatedAt = ? WHERE id = ? AND data = ? AND updatedAt = ?",[j.data,j.updatedAt,a,g.data,g.updatedAt]).changes>0&&(f=i)})}catch(a){if(a?.code!=="SQLITE_BUSY_SNAPSHOT"&&a?.errcode!==517)throw a;continue}return f}return null}async function F(a){let b=await (0,h.c)(),c=!1;return b.transaction(()=>{let d=b.get("SELECT provider FROM providerConnections WHERE id = ?",[a]);d&&(b.run("DELETE FROM providerConnections WHERE id = ?",[a]),x(b,d.provider),(0,l.uQ)(b,d.provider),c=!0)}),c}async function G(a){let b=await (0,h.c)(),c=0;return b.transaction(()=>{c=b.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a])?.n||0,b.run("DELETE FROM providerConnections WHERE provider = ?",[a]),(0,l.uQ)(b,a)}),c}async function H(a){let b=await (0,h.c)();b.transaction(()=>x(b,a))}async function I(){let a=await (0,h.c)(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;return a.transaction(()=>{for(let d of a.all("SELECT * FROM providerConnections")){let e=r(d),f=!1;for(let a of b)(null===e[a]||void 0===e[a])&&a in e&&(delete e[a],c++,f=!0);e.providerSpecificData&&0===Object.keys(e.providerSpecificData).length&&(delete e.providerSpecificData,c++,f=!0),f&&t(a,e)}}),c}},11841:(a,b,c)=>{function d(a){let b=a?.providerSpecificData||{},c=a=>"string"==typeof a?a:"";return{connectionId:c(a?.id),provider:c(a?.provider),authType:c(a?.authType),createdAt:c(a?.createdAt),email:c(a?.email),accountId:c(b.workspaceId||b.accountUuid||b.accountId||b.userId||b.chatgptAccountId),organizationId:c(b.organizationUuid||b.organizationId)}}c.d(b,{AN:()=>d,R3:()=>e,_r:()=>h,bs:()=>g});let e=3e5,f=a=>"string"==typeof a&&Number.isFinite(Date.parse(a))?new Date(a).toISOString():null;function g(a){let b=f(a?.retryAt),c=a?.result,d=null,g=f(c?.observedAt);if(g&&c?.quotas&&"object"==typeof c.quotas&&!Array.isArray(c.quotas)){let a={};for(let[b,d]of Object.entries(c.quotas))d&&["used","total","remaining","remainingPercentage"].every(a=>Number.isFinite(d[a]))&&(a[b]={used:d.used,total:d.total,remaining:d.remaining,remainingPercentage:d.remainingPercentage,resetAt:f(d.resetAt),unlimited:!0===d.unlimited});if(d={plan:"string"==typeof c.plan?c.plan:null,observedAt:g,quotas:a},c.extraUsage&&"object"==typeof c.extraUsage)for(let a of(d.extraUsage={},["is_enabled","monthly_limit","used_credits","utilization"])){let b=c.extraUsage[a];("boolean"==typeof b||Number.isFinite(b))&&(d.extraUsage[a]=b)}else d.extraUsage=null}let h=d&&Number.isFinite(a?.expiresAt)?Math.max(0,Math.min(a.expiresAt,Date.parse(d.observedAt)+e)):0;return{retryAt:b,result:d,expiresAt:h}}function h(a,b){let c=g(a),d=g(b),e=!c.result||d.result&&Date.parse(d.result.observedAt)>=Date.parse(c.result.observedAt)?d.result:c.result,f=Math.max(Date.parse(c.retryAt)||0,Date.parse(d.retryAt)||0),h=f>(Date.parse(e?.observedAt)||0)?new Date(f).toISOString():null,i=h||!e||0===d.expiresAt?0:e===d.result?d.expiresAt:c.expiresAt;return{retryAt:h,result:e,expiresAt:i}}},38044:(a,b,c)=>{c.d(b,{BA:()=>C,E8:()=>x,MG:()=>u,O0:()=>E,Yh:()=>B,cb:()=>z,lO:()=>D,ue:()=>F,ws:()=>A,wu:()=>v});var d=c(77598),e=c.n(d),f=c(73024),g=c.n(f),h=c(76760),i=c.n(h),j=c(49120);let k="aes-256-gcm",l="enc:v1:",m="enc:v2:",n=i().join(j.nJ,"auth","data-key"),o=i().join(j.nJ,"auth","cli-secret"),p="switchboard-at-rest-v1",q=null,r=null;function s(){if(q)return q;try{let a=g().readFileSync(n);if(32===a.length)return q=a}catch{}try{let a=i().join(j.nJ,"machine-id"),b=p;try{b=g().readFileSync(a,"utf8").trim()+p}catch{}q=b===p?e().randomBytes(32):e().createHash("sha256").update(b).digest()}catch{q=e().randomBytes(32)}try{g().mkdirSync(i().dirname(n),{recursive:!0,mode:448}),g().writeFileSync(n,q,{mode:384})}catch{}return q}function t(){let a=function(){if(r)return r;try{if(r=g().readFileSync(o,"utf8").trim()||null)return r}catch{}let a=e().randomBytes(32).toString("hex");try{g().mkdirSync(i().dirname(o),{recursive:!0,mode:448}),g().writeFileSync(o,a,{mode:384,flag:"wx"}),r=a}catch{try{r=g().readFileSync(o,"utf8").trim()||null}catch{r=null}}return r}();return a?e().createHash("sha256").update(s()).update(a,"utf8").digest():null}function u(a){if(null==a||""===a||"string"!=typeof a||a.startsWith(l)||a.startsWith(m))return a;let b=t(),c=b||s(),d=e().randomBytes(12),f=e().createCipheriv(k,c,d),g=Buffer.concat([f.update(a,"utf8"),f.final()]),h=f.getAuthTag();return`${b?m:l}${d.toString("hex")}:${h.toString("hex")}:${g.toString("hex")}`}function v(a){if(null==a||""===a||"string"!=typeof a)return a;let b=a.startsWith(m);if(!b&&!a.startsWith(l))return a;try{let[c,d,f]=a.slice(m.length).split(":");if(!c||!d||!f)return null;let g=b?t():s();if(!g)return null;let h=e().createDecipheriv(k,g,Buffer.from(c,"hex"));return h.setAuthTag(Buffer.from(d,"hex")),h.update(Buffer.from(f,"hex"),void 0,"utf8")+h.final("utf8")}catch{return null}}function w(a){return e().createHash("sha256").update(`sb-key:${a}`).digest("hex")}function x(a){return a&&"string"==typeof a?a.length<=12?a.slice(0,4)+"…":a.slice(0,10)+"…":""}function y(a){return"string"==typeof a&&/^[a-f0-9]{32}$/.test(a)?e().createHash("sha256").update(`sb-key-lookup:${a}`).digest("hex"):null}function z(a){if("string"!=typeof a)return null;let b=a.split("-");return 4===b.length&&"sk"===b[0]&&b[1]&&/^[a-f0-9]{8}$/.test(b[3])?y(b[2]):null}function A(a,b=z(a)){if(!b)return`v1:${x(a)}:${w(a)}`;let c=e().randomBytes(16),d=e().scryptSync(a,c,32,{N:16384,r:8,p:1,maxmem:0x4000000});return`v2:${b}:${x(a)}:${c.toString("hex")}:${d.toString("hex")}`}function B(a){if("string"!=typeof a||!a.startsWith("v2:"))return a;let b=a.split(":");if(5!==b.length||!/^[a-f0-9]{32}$/.test(b[1]))return a;let c=y(b[1]);return`v2:${c}:${b[2]}:${b[3]}:${b[4]}`}function C(a){if(!a||"string"!=typeof a)return{version:0,lookupDigest:null,prefix:"",hash:null,salt:null,legacy:!0,raw:a};let b=B(a),c=b.split(":");return b.startsWith("v2:")&&5===c.length?{version:2,lookupDigest:/^[a-f0-9]{64}$/.test(c[1])?c[1]:null,prefix:c[2],salt:c[3],hash:c[4],legacy:!1,raw:null}:b.startsWith("v2:")&&4===c.length?{version:2,lookupDigest:null,prefix:c[1],salt:c[2],hash:c[3],legacy:!1,raw:null}:b.startsWith("v1:")&&c.length>=3?{version:1,lookupDigest:null,prefix:c[1],salt:null,hash:c.slice(2).join(":"),legacy:!1,raw:null}:{version:0,lookupDigest:z(b),prefix:x(b),hash:null,salt:null,legacy:!0,raw:b}}function D(a,b){if("string"!=typeof a||"string"!=typeof b)return!1;let c=e().createHash("sha256").update(a).digest(),d=e().createHash("sha256").update(b).digest();return e().timingSafeEqual(c,d)}function E(a,b){if(!b||"string"!=typeof b)return!1;let c=C(a);if(c.legacy)return D(String(c.raw||""),b);if(1===c.version)return!!c.hash&&D(c.hash,w(b));if(!c.salt||!c.hash)return!1;try{let a=e().scryptSync(b,Buffer.from(c.salt,"hex"),32,{N:16384,r:8,p:1,maxmem:0x4000000});return D(a.toString("hex"),c.hash)}catch{return!1}}async function F(a,b){if(!b||"string"!=typeof b)return!1;let c=C(a);if(2!==c.version)return E(a,b);if(!c.salt||!c.hash)return!1;try{let a=await new Promise((a,d)=>{e().scrypt(b,Buffer.from(c.salt,"hex"),32,{N:16384,r:8,p:1,maxmem:0x4000000},(b,c)=>{b?d(b):a(c)})});return D(a.toString("hex"),c.hash)}catch{return!1}}},95812:(a,b,c)=>{function d(a){if("number"==typeof a)return Number.isFinite(a)?a:null;if("string"==typeof a&&a.trim()){let b=Number(a);return Number.isFinite(b)?b:null}return null}function e(a,b=Date.now()){if(!a||function(a,b=Date.now()){if(a?.blocked===!0)return"Provider reports limit reached";if(a?.stale===!0)return"Refresh unavailable";let c=a?.observedAt?Date.parse(a.observedAt):NaN;if(a?.observedAt&&(!Number.isFinite(c)||c>b+6e4||b-c>=6e5))return"Observation expired";let d=a?.resetAt?Date.parse(a.resetAt):NaN;return Number.isFinite(d)&&d<=b?!1===a.recurring?"Expired":"Reset passed; refresh needed":null}(a,b)||"balance"===a.kind)return null;if(!0===a.unlimited)return 100;let c=d(a.remainingPercentage);if(null!==c)return Math.max(0,Math.min(100,c));let f=d(a.total);if(null===f||f<=0)return null;let g=d(a.used),h=d(a.remaining);return null!==g&&g>=0?Math.max(0,Math.min(100,(f-g)/f*100)):null!==h&&h>=0?Math.max(0,Math.min(100,h/f*100)):null}c.d(b,{Gv:()=>d,_F:()=>e})}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=6533,exports.ids=[6533],exports.modules={
|
|
1
|
+
"use strict";exports.id=6533,exports.ids=[6533],exports.modules={33234:(a,b,c)=>{c.d(b,{l:()=>k,_:()=>l});var d,e=c(36366),f=c(77598),g=c(11841);let h="providerQuotaState",i=a=>(0,f.createHash)("sha256").update(JSON.stringify(["connectionId","provider","authType","createdAt","email","accountId","organizationId"].map(b=>"string"==typeof a?.[b]?a[b]:""))).digest("hex");function j(a,b){let c;if(!b?.connectionId||!b.provider||!b.authType||!b.createdAt)return null;let d=a.get("SELECT id, provider, authType, email, createdAt, data FROM providerConnections WHERE id = ?",[b.connectionId]);if(!d)return null;try{c=JSON.parse(d.data)}catch{return null}let e=(0,g.AN)({...d,providerSpecificData:c?.providerSpecificData});return i(e)===i(b)?i(e):null}let{loadProviderQuotaState:k,saveProviderQuotaState:l}=(d=e.c,{async loadProviderQuotaState(a){let b,c=await d(),e=j(c,a);if(!e)return{invalidIdentity:!0};let f=c.get("SELECT value FROM kv WHERE scope = ? AND key = ?",[h,a.connectionId]);try{b=JSON.parse(f?.value||"null")}catch{throw Error("Invalid durable quota state")}if(b&&1!==b.version)throw Error("Unsupported durable quota state");return b?.version===1&&b.binding===e?(0,g.bs)(b):(0,g.bs)(null)},async saveProviderQuotaState(a,b){let c=await d(),e=!1;return c.transaction(()=>{let d,f=j(c,a);if(!f)return;let i=c.get("SELECT value FROM kv WHERE scope = ? AND key = ?",[h,a.connectionId]);try{d=JSON.parse(i?.value||"null")}catch{d=null}(d?.version!==1||d.binding!==f)&&(d=null);let k={version:1,binding:f,...(0,g._r)(d,b)};c.run("INSERT INTO kv(scope,key,value) VALUES(?,?,?) ON CONFLICT(scope,key) DO UPDATE SET value=excluded.value",[h,a.connectionId,JSON.stringify(k)]),e=!0}),e}})},39326:(a,b,c)=>{function d(a){return null==a?"":String(a).trim()}async function e(a={}){try{let b=function(a={}){let b=a?.connectionProxyEnabled===!0,c=d(a?.connectionProxyUrl);return{connectionProxyEnabled:b,connectionProxyUrl:c,connectionNoProxy:d(a?.connectionNoProxy)}}(a);if(b.connectionProxyEnabled&&b.connectionProxyUrl)return{source:"legacy",proxyPoolId:null,proxyPool:null,...b,strictProxy:!1,vercelRelayUrl:""};return{source:"none",proxyPoolId:null,proxyPool:null,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:b.connectionNoProxy||"",strictProxy:!1,vercelRelayUrl:""}}catch(a){return console.error("[resolveConnectionProxyConfig] Failed to resolve proxy config:",a),{source:"error",proxyPoolId:null,proxyPool:null,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:"",strictProxy:!1,vercelRelayUrl:""}}}c.d(b,{B:()=>e})},49263:(a,b,c)=>{c.d(b,{Bl:()=>k,Qo:()=>f,RU:()=>g,S5:()=>n,V0:()=>l,hk:()=>e,kJ:()=>m});var d=c(87252);function e(a,b,c=0){let f=b?("string"==typeof b?b:JSON.stringify(b)).toLowerCase():"";for(let b of d.t2)if(b.text&&f&&f.includes(b.text)||b.status&&b.status===a){let a=!1!==b.shouldFallback;if(b.backoff){let b=Math.min(c+1,d.EQ.maxLevel);return{shouldFallback:a,cooldownMs:function(a=0){let b=Math.max(0,a-1);return Math.min(d.EQ.base*Math.pow(2,b),d.EQ.max)}(b),newBackoffLevel:b}}return{shouldFallback:a,cooldownMs:b.cooldownMs||0}}return a>=400&&a<500&&408!==a&&429!==a?{shouldFallback:!1,cooldownMs:0}:{shouldFallback:!0,cooldownMs:d.wf}}function f(a){if(!a)return"";let b=new Date(a).getTime()-Date.now();if(b<=0)return"reset after 0s";let c=Math.ceil(b/1e3),d=Math.floor(c/3600),e=Math.floor(c%3600/60),f=c%60,g=[];return d>0&&g.push(`${d}h`),e>0&&g.push(`${e}m`),(f>0||0===g.length)&&g.push(`${f}s`),`reset after ${g.join(" ")}`}let g="reauth_required",h="modelLock_",i=`${h}__all`;function j(a){return a?`${h}${a}`:i}function k(a,b){let c=j(b);return[a?.[c],a?.[i]].some(a=>a&&new Date(a).getTime()>Date.now())}function l(a,b){let c=Date.now(),d=[a?.[j(b)],a?.[i]].map(a=>new Date(a).getTime()).filter(a=>Number.isFinite(a)&&a>c);return d.length>0?new Date(Math.max(...d)).toISOString():null}function m(a){if(!a)return null;let b=null,c=Date.now();for(let[d,e]of Object.entries(a)){if(!d.startsWith(h)||!e)continue;let a=new Date(e).getTime();a<=c||(!b||a<b)&&(b=a)}return b?new Date(b).toISOString():null}function n(a,b){return{[j(a)]:new Date(Date.now()+b).toISOString()}}},66451:(a,b,c)=>{c.d(b,{Xh:()=>f,js:()=>h,sc:()=>g});var d=c(39698);let e={el:"elevenlabs",jina:"jina-ai","jina-ai":"jina-ai",polly:"aws-polly","aws-polly":"aws-polly"};for(let a of d.A)for(let b of(e[a.id]=a.id,a.alias&&(e[a.alias]=a.id),a.aliases||[]))e[b]=a.id;function f(a){if(!a)return{provider:null,model:null,isAlias:!1,providerAlias:null};if(a.includes("/")){let b=a.indexOf("/"),c=a.slice(0,b),d=a.slice(b+1);return{provider:e[c]||c,model:d,isAlias:!1,providerAlias:c}}return{provider:null,model:a,isAlias:!0,providerAlias:null}}function g(a,b){var c,d;if(!b||"string"!=typeof a)return null;let f=b[a];if(!f){for(let[c,d]of Object.entries(b))if("string"==typeof c&&c.includes("*"))try{let b="^"+c.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$";if(RegExp(b,"i").test(a)){f=d;break}}catch{}}if(!f)return null;if("string"==typeof f&&f.includes("/")){let a=f.indexOf("/");return{provider:e[c=f.slice(0,a)]||c,model:f.slice(a+1)}}return"object"==typeof f&&f.provider&&f.model?{provider:e[d=f.provider]||d,model:f.model}:"string"==typeof f?{provider:null,model:f}:null}async function h(a,b){let c=f(a);if(!c.isAlias)return{provider:c.provider,model:c.model};let d="function"==typeof b?await b():b,e=g(c.model,d);return e||{provider:function(a){if(!a)return"openai";let b=a.toLowerCase();return i.find(([a])=>a.test(b))?.[1]||"openai"}(c.model),model:c.model}}let i=[[/^grok-build$/,"grok-cli"],[/^muse-/,"muse"],[/^claude-/,"anthropic"],[/^gemini-/,"gemini"],[/^gpt-/,"openai"],[/^o[134]/,"openai"],[/^deepseek-/,"openrouter"]]}};
|
|
@@ -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,"00948d054870c189b5552f32025c373112bf856d5c",null),(0,d.A)(T,"40f5926be942f77ead23a4817f4bf7adcb944cd1aa",null),(0,d.A)(V,"00b29d86ece8be8e7a032a9ae18560e950fc964b6e",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.46"}')},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)}}};
|