@cortexkit/opencode-anthropic-auth 1.18.0 → 1.19.1
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/README.md +20 -2
- package/dist/cli.js +1 -1
- package/dist/fable-fallback.d.ts +12 -0
- package/dist/{index-k5enth8h.js → index-075t8qec.js} +1 -1
- package/dist/{index-kckdabb4.js → index-2k47hc8b.js} +1 -1
- package/dist/index-a13w4gm9.js +2 -0
- package/dist/{index-1ets4bf8.js → index-dex8fs0m.js} +1 -1
- package/dist/{index-9aeag0wm.js → index-dzs7w297.js} +1 -1
- package/dist/index-vwgzgh5x.js +422 -0
- package/dist/index.js +22 -12
- package/dist/{logger-whpn7rjx.js → logger-n49md99d.js} +1 -1
- package/dist/rpc/port-file.js +1 -1
- package/dist/rpc/rpc-client.js +1 -1
- package/dist/rpc/rpc-dir.js +1 -1
- package/dist/server-fallback.d.ts +26 -0
- package/dist/sidebar-state.d.ts +3 -1
- package/dist/sidebar-state.js +1 -1
- package/dist/transform.d.ts +7 -1
- package/dist/tui-preferences.d.ts +4 -1
- package/dist/tui-preferences.js +2 -2
- package/package.json +2 -2
- package/src/sidebar-state.ts +15 -2
- package/src/tui-compiled/sidebar-state.ts +15 -2
- package/src/tui-compiled/tui-preferences.ts +57 -50
- package/src/tui-compiled/tui.tsx +1 -1
- package/src/tui-preferences.ts +57 -50
- package/src/tui.tsx +3 -3
- package/dist/index-h0pmqm96.js +0 -422
- package/dist/index-xjvcfyt6.js +0 -2
package/dist/index.js
CHANGED
|
@@ -1,17 +1,27 @@
|
|
|
1
|
-
import{a as Lj,f as GN,h as Mj,i as Bj}from"./index-xjvcfyt6.js";import{$ as T4,$a as e4,$b as Qj,A as RW,Aa as p4,Ab as Gj,B as kW,Ba as i4,Bb as Xj,C as w4,Ca as vN,Cb as Yj,D as c1,Da as Y1,Db as Dj,E as u1,Ea as D1,Eb as iW,F as n1,Fa as x1,Fb as dW,G as N0,Ga as d4,Gb as lW,H as G1,Ha as NN,Hb as cW,I as o1,Ia as gW,Ib as R0,J as P4,Ja as yW,Jb as uW,K as Q4,Ka as qN,Kb as cN,L as H0,La as hW,Lb as Vj,M as q,Ma as mW,Mb as _j,Na as bW,Nb as uN,O as a0,Oa as AN,P as C4,Pa as l4,Pb as Kj,Q as H4,Qa as c4,R as B1,Ra as fN,Rb as nN,S as I1,Sa as RN,Sb as _1,T as L4,Ta as u4,Tb as zj,U as M4,Ua as kN,Ub as wj,V as r1,Va as n4,Vb as oN,W as B4,Wa as o4,Wb as g0,X as s1,Xa as r4,Xb as V1,Y as I4,Ya as s4,Yb as Uj,Z as F4,Za as a4,Zb as ZN,_ as x4,_a as t4,_b as Pj,aa as E4,ab as Nj,ac as Cj,ba as S4,bb as WN,ca as a1,cb as gN,da as t1,db as jN,ea as v4,eb as yN,fa as X1,fb as Wj,ga as t0,gb as k0,ha as FN,hb as jj,ia as q4,ib as hN,ja as e1,jb as JN,ka as A4,kb as Jj,la as f4,lb as mN,ma as R4,mb as T1,na as xN,nb as bN,oa as TN,ob as ON,pa as F1,pb as $N,qa as e0,qb as Oj,ra as k4,rb as pN,s as vW,sa as N1,sb as iN,t as qW,ta as g4,tb as $j,u as H1,ua as EN,ub as dN,v as L1,va as y4,vb as Zj,w as AW,wa as h4,wb as lN,x as Z1,xa as m4,xb as Q1,y as z4,ya as b4,yb as pW,z as fW,za as SN,zb as E1}from"./index-h0pmqm96.js";import{cc as U4,lc as k,mc as a}from"./index-1ets4bf8.js";import{oc as PW}from"./index-kckdabb4.js";import{rc as Hj}from"./index-k5enth8h.js";import"./index-9aeag0wm.js";import{randomUUID as IN}from"node:crypto";var $W="claude-opus-4-8",ij=10,dj=128,lj=86400000;function GW(N){if(typeof N!=="string")return null;if(R0(N))return"opus-5";if(N===Q1||N.startsWith(`${Q1}-`))return"fable-5";return null}function ZW(N){return GW(N)!==null}function cj(N,W){let j=GW(W);return j?`${N}\x00${j}`:null}function uj(N){try{let W=JSON.parse(N);return typeof W.model==="string"?{body:W,model:W.model}:null}catch{return null}}class KN{now;recoveries=new Map;nextCycle=1;constructor(N=Date.now){this.now=N}prune(){let N=this.now();for(let[W,j]of this.recoveries)if(N-j.updatedAt>=lj)this.recoveries.delete(W);while(this.recoveries.size>dj){let W=this.recoveries.keys().next().value;if(typeof W!=="string")break;this.recoveries.delete(W)}}plan(N,W){if(!N||typeof W!=="string")return null;let j=uj(W);if(!j||!ZW(j.model))return null;let J=cj(N,j.model);if(!J)return null;this.prune();let Z=this.recoveries.get(J);if(!Z||Z.remaining<=0)return{sessionId:N,recoveryKey:J,requestedModel:j.model,effectiveModel:j.model,bodyText:W,downgraded:!1,standbyCacheAnchor:Z?.standbyCacheAnchor};return Z.updatedAt=this.now(),Z.nextRequestSequence++,this.recoveries.delete(J),this.recoveries.set(J,Z),j.body.model=$W,{sessionId:N,recoveryKey:J,requestedModel:Z.model,effectiveModel:$W,bodyText:JSON.stringify(j.body),downgraded:!0,cycle:Z.cycle,cacheAccountId:Z.cacheAccountId,standbyCacheAnchor:Z.standbyCacheAnchor,requestSequence:Z.nextRequestSequence}}recoveryAccount(N){if(N.cycle===void 0)return N.cacheAccountId;let W=this.recoveries.get(N.recoveryKey);return W?.cycle===N.cycle?W.cacheAccountId:N.cacheAccountId}bindRecoveryAccount(N,W){if(!N.downgraded||N.cycle===void 0)return!1;let j=this.recoveries.get(N.recoveryKey);if(!j||j.cycle!==N.cycle)return!1;if(j.cacheAccountId===W)return!1;return j.cacheAccountId=W,j.standbyCacheAnchor=void 0,j.standbyAnchorSequence=0,j.updatedAt=this.now(),N.cacheAccountId=W,N.standbyCacheAnchor=void 0,!0}activate(N,W){if(N.downgraded||!ZW(N.requestedModel))return this.remaining(N);let j={model:N.requestedModel,remaining:ij,cycle:this.nextCycle++,cacheAccountId:W,standbyCacheAnchor:N.standbyCacheAnchor,nextRequestSequence:0,standbyAnchorSequence:0,updatedAt:this.now()};return this.recoveries.delete(N.recoveryKey),this.recoveries.set(N.recoveryKey,j),this.prune(),j.remaining}complete(N,W){if(!N.downgraded||N.cycle==null||N.completed)return{counted:!1,remaining:this.remaining(N)};N.completed=!0;let j=this.recoveries.get(N.recoveryKey);if(!j||j.cycle!==N.cycle||j.remaining<=0)return{counted:!1,remaining:j?.remaining??0};if(j.remaining--,W&&(!j.cacheAccountId||W.oauthAccountId===j.cacheAccountId)&&N.requestSequence!=null&&N.requestSequence>=j.standbyAnchorSequence)j.standbyCacheAnchor=W,j.standbyAnchorSequence=N.requestSequence;return j.updatedAt=this.now(),this.recoveries.delete(N.recoveryKey),this.recoveries.set(N.recoveryKey,j),{counted:!0,remaining:j.remaining}}remaining(N){return this.prune(),this.recoveries.get(N.recoveryKey)?.remaining??0}}function $1(N){return typeof N==="object"&&N!==null}function nj(N){if(Array.isArray(N))return N;if($1(N)&&Array.isArray(N.data))return N.data;return[]}function _W(N){if(!$1(N)||!$1(N.info))return;return N.info}function XW(N){let W=_W(N);return typeof W?.role==="string"?W.role:void 0}function oj(N){let W=_W(N);return typeof W?.id==="string"?W.id:void 0}function YW(N){if(!$1(N)||!$1(N.info))return null;let W=N.info,j=$1(W.model)?W.model:void 0,J=typeof W.agent==="string"?W.agent:void 0,Z=typeof j?.providerID==="string"?j.providerID:typeof W.providerID==="string"?W.providerID:void 0,V=typeof j?.modelID==="string"?j.modelID:typeof W.modelID==="string"?W.modelID:void 0,_=typeof j?.variant==="string"?j.variant:typeof W.variant==="string"?W.variant:void 0;if(!J&&(!Z||!V)&&!_)return null;let B={};if(J)B.agent=J;if(Z&&V)B.model={providerID:Z,modelID:V};if(_)B.variant=_;return B}function DW(N,W){return{agent:N.agent??W.agent,model:N.model??W.model,variant:N.variant??W.variant,latestAssistantMessageId:N.latestAssistantMessageId??W.latestAssistantMessageId,latestUserMessageId:N.latestUserMessageId??W.latestUserMessageId}}function VW(N){return Boolean(N.agent&&N.model&&N.variant)}async function KW(N,W){if(!N||!W)return null;let j=N;if(typeof j.session?.messages!=="function")return null;let J=[];try{J=nj(await Promise.resolve(j.session.messages({path:{id:W},query:{limit:100}})))}catch{return null}if(J.length===0)return null;let Z,V;for(let B of J){let y=oj(B);if(!y)continue;let r=XW(B);if(r==="assistant"&&(!Z||y>Z))Z=y;if(r==="user"&&(!V||y>V))V=y}let _={latestAssistantMessageId:Z,latestUserMessageId:V};for(let B=J.length-1;B>=0;B--){if(XW(J[B])!=="assistant")continue;let y=YW(J[B]);if(!y)continue;if(_=DW(_,y),VW(_))return _}for(let B=J.length-1;B>=0;B--){let y=YW(J[B]);if(!y)continue;if(_=DW(_,y),VW(_))return _}if(!_.agent&&!_.model&&!_.variant&&!_.latestAssistantMessageId&&!_.latestUserMessageId)return null;return _}var d0=[],rj=1,zN=0,zW=new Map;function wW(N,W){if(d0.push({id:rj++,type:"open-dialog",payload:N,sessionId:W}),d0.length>100)d0=d0.slice(d0.length-100)}function UW(N=0,W){let j=Date.now();if(zN=j,W!==void 0)zW.set(W,j);let J=(Z)=>W===void 0||Z.sessionId===void 0||Z.sessionId===W;if(N>0)d0=d0.filter((Z)=>{if(Z.id>N)return!0;if(W===void 0)return!1;return Z.sessionId!==W});return d0.filter((Z)=>Z.id>N&&J(Z))}function wN(N){let W=Date.now();if(N!==void 0){let j=zW.get(N)??0;return j>0&&W-j<3000}return zN>0&&W-zN<3000}import{randomBytes as sj,timingSafeEqual as aj}from"node:crypto";import{unlink as tj}from"node:fs/promises";import{createServer as ej}from"node:http";import{join as NJ}from"node:path";function WJ(N){return new Promise((W,j)=>{let J=[],Z=0;N.on("data",(V)=>{if(Z+=V.length,Z>1e6){N.destroy(),j(Error("body too large"));return}J.push(V)}),N.on("end",()=>W(Buffer.concat(J).toString("utf8"))),N.on("error",j)})}function jJ(N,W){if(!N?.startsWith("Bearer "))return!1;let j=Buffer.from(N.slice(7)),J=Buffer.from(W);return j.length===J.length&&aj(j,J)}async function QW(N){let W=sj(32).toString("hex"),j=ej((V,_)=>{J(V,_)});async function J(V,_){let B=(y,r)=>{_.writeHead(y,{"content-type":"application/json"}),_.end(JSON.stringify(r))};try{let y=V.url??"";if(V.method==="GET"&&y==="/health")return B(200,{ok:!0});if(V.method!=="POST"||!y.startsWith("/rpc/"))return B(404,{error:"not found"});if(!jJ(V.headers.authorization,W))return B(401,{error:"unauthorized"});let r=y.slice(5),l=JSON.parse(await WJ(V)||"{}");if(r==="pending-notifications"){let d=N.drain(Number(l.lastReceivedId??0),typeof l.sessionId==="string"?l.sessionId:void 0);return B(200,{messages:d})}if(r==="apply"){let d=await N.apply(l);return B(200,d)}return B(404,{error:"unknown method"})}catch(y){if(!_.headersSent&&!_.writableEnded&&!_.destroyed)B(500,{error:y instanceof Error?y.message:String(y)})}}let Z=await new Promise((V,_)=>{j.on("error",_),j.listen(0,"127.0.0.1",()=>{let B=j.address();if(B&&typeof B==="object")V(B.port);else _(Error("no port"))})});j.unref();try{await PW(N.dir,{port:Z,token:W,pid:process.pid})}catch(V){throw await new Promise((_)=>j.close(()=>_())),V}return{port:Z,token:W,async stop(){await new Promise((V)=>j.close(()=>V())),await tj(NJ(N.dir,`port-${process.pid}.json`)).catch(()=>{})}}}import{createHash as JJ}from"node:crypto";function CW(N,W){let j=new Map,J=0,Z=0,V=0,_=0,B=0,y=(d)=>{let D0=performance.now(),I=N(d);return B+=performance.now()-D0,V++,I};return{call:(d)=>{if(!W.enabled())return y(d);let D0=j.get(d);if(D0!==void 0)return Z++,j.delete(d),j.set(d,D0),D0;let I=y(d),T0=d.length+I.length;if(T0>W.maxBytes)return I;j.set(d,I),J+=T0;while(J>W.maxBytes&&j.size>1){let P0=j.keys().next().value,E0=j.get(P0)??"";j.delete(P0),J-=P0.length+E0.length,_++}return I},stats:()=>({hits:Z,misses:V,evictions:_,entries:j.size,cacheBytes:J,computeMsTotal:B})}}function HW(N){return`${vW}${N.charAt(0).toUpperCase()}${N.slice(1)}`}function nW(N){if(N==="StructuredOutput")return N;return`${N.charAt(0).toLowerCase()}${N.slice(1)}`}var OJ=new Set(["callgraph","conflicts","delete","import","inspect","move","navigate","outline","refactor","safety","search","transform","zoom"]);function LW(N){let W=nW(N);if(W.startsWith("aft_"))return W;if(OJ.has(W))return`aft_${W}`;return null}function b1(N,W){let j=new Headers;if(N instanceof Request)N.headers.forEach((Z,V)=>{j.set(V,Z)});let J=W?.headers;if(J){if(J instanceof Headers)J.forEach((Z,V)=>{j.set(V,Z)});else if(Array.isArray(J))for(let Z of J){let[V,_]=Z;if(typeof _<"u")j.set(V,String(_))}else for(let[Z,V]of Object.entries(J))if(typeof V<"u")j.set(Z,String(V))}return j}function p1(N){return N.set("anthropic-beta",H1(N.get("anthropic-beta"),[qW])),N}function M1(N,W,j={}){return mW(N,W,j)}function $J(N){if(N.tools&&Array.isArray(N.tools))N.tools=N.tools.map((W)=>({...W,name:W.name?HW(W.name):W.name}));if(N.messages&&Array.isArray(N.messages))N.messages=N.messages.map((W)=>{if(W.content&&Array.isArray(W.content))W.content=W.content.map((j)=>{if(j.type==="tool_use"&&j.name)return{...j,name:HW(j.name)};return j});return W});return JSON.stringify(bW(N))}function UN(N){return N.replace(/"name"\s*:\s*"(mcp_)?([^"]+)"/g,(W,j,J)=>{if(j)return`"name": "${LW(J)??nW(J)}"`;let Z=LW(J);return Z?`"name": "${Z}"`:W})}function MW(N,W=!1){if(W)return{ready:UN(N),pending:""};let j=N.length,J='"name"',Z=Math.max(0,N.length-J.length+1);for(let _=Z;_<N.length;_++)if(J.startsWith(N.slice(_))){j=Math.min(j,_);break}let V=N.lastIndexOf(J);if(V!==-1){let _=N.slice(V);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(_))j=Math.min(j,V)}if(j<N.length)return{ready:UN(N.slice(0,j)),pending:N.slice(j)};return{ready:UN(N),pending:""}}function CN(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let N=process.env.ANTHROPIC_INSECURE?.trim();return N==="1"||N==="true"}function oW(N){let W=N?.trim();if(!W)return null;try{let j=new URL(W);if(j.protocol!=="http:"&&j.protocol!=="https:"||j.username||j.password)return null;return j}catch{return null}}function ZJ(){return oW(process.env.ANTHROPIC_BASE_URL)}function HN(N,W={}){let j=null;try{if(typeof N==="string"||N instanceof URL)j=new URL(N.toString());else if(N instanceof Request)j=new URL(N.url)}catch{j=null}if(!j)return{input:N,url:null};let J=j.href,Z=W.baseURL?oW(W.baseURL):ZJ();if(Z){if(j.protocol=Z.protocol,j.host=Z.host,W.baseURL)j.pathname=`${Z.pathname.replace(/\/$/,"")}${j.pathname}`}if(j.pathname.endsWith("/v1/messages")&&!j.searchParams.has("beta"))j.searchParams.set("beta","true");if(j.href===J)return{input:N,url:j};return{input:N instanceof Request?new Request(j.toString(),N):j,url:j}}function GJ(N){let J=N.split(/\n\n+/).filter((Z)=>{if(Z.includes(AW))return!1;for(let V of RW)if(Z.includes(V))return!1;return!0}).join(`
|
|
1
|
+
import{a as uJ,f as B4,h as dJ,i as lJ}from"./index-a13w4gm9.js";import{$ as rW,$a as LJ,$b as bJ,A as JW,Aa as GJ,Ab as SJ,B as NW,Ba as XJ,Bb as qJ,C as hW,Ca as n4,Cb as AJ,D as Z4,Da as P1,Db as fJ,E as Y4,Ea as H1,Eb as XW,F as D4,Fa as h1,Fb as VW,G as D0,Ga as VJ,Gb as zW,H as w1,Ha as U4,Hb as KW,I as G4,Ia as OW,Ib as f0,J as mW,Ja as $W,Jb as _W,K as bW,Ka as o4,Kb as Dj,L as x0,La as ZW,Lb as vJ,M as v,Ma as YW,Mb as RJ,Na as DW,Nb as Gj,O as $1,Oa as r4,P as pW,Pa as zJ,Pb as kJ,Q as iW,Qa as KJ,R as R1,Ra as s4,Rb as Xj,S as k1,Sa as t4,Sb as L1,T as cW,Ta as _J,Tb as gJ,U as uW,Ua as a4,Ub as hJ,V as X4,Va as UJ,Vb as Vj,W as dW,Wa as QJ,Wb as y0,X as V4,Xa as wJ,Xb as yJ,Y as lW,Ya as PJ,Yb as C1,Z as nW,Za as HJ,Zb as mJ,_ as oW,_a as CJ,_b as L4,aa as sW,ab as BJ,ac as pJ,ba as tW,bb as Q4,bc as iJ,ca as z4,cb as e4,da as K4,db as w4,ea as aW,eb as jj,fa as s0,fb as IJ,ga as Z1,gb as h0,ha as i4,hb as MJ,ia as eW,ib as Wj,ja as _4,jb as P4,ka as jJ,kb as TJ,la as WJ,lb as Jj,ma as JJ,mb as y1,na as c4,nb as Nj,oa as u4,ob as H4,pa as g1,pb as C4,qa as Y1,qb as xJ,ra as NJ,rb as Oj,s as aj,sa as D1,sb as $j,t as ej,ta as OJ,tb as FJ,u as A1,ua as d4,ub as Zj,v as f1,va as $J,vb as EJ,w as jW,wa as ZJ,wb as Yj,x as Q1,xa as YJ,xb as S1,y as gW,ya as DJ,yb as GW,z as WW,za as l4,zb as m1}from"./index-vwgzgh5x.js";import{dc as yW,mc as k,nc as O0}from"./index-dex8fs0m.js";import{pc as vj}from"./index-2k47hc8b.js";import{sc as cJ}from"./index-075t8qec.js";import"./index-dzs7w297.js";import{randomUUID as p4}from"node:crypto";var Ij="claude-opus-4-8",K3=10,_3=128,U3=86400000;function g0(j){if(typeof j!=="string")return null;if(f0(j))return"opus-5";if(j===S1||j.startsWith(`${S1}-`))return"fable-5";return null}function z1(j){return g0(j)!==null}function Q3(j,W){let J=g0(W);return J?`${j}\x00${J}`:null}function w3(j){try{let W=JSON.parse(j);return typeof W.model==="string"?{body:W,model:W.model}:null}catch{return null}}class q4{now;recoveries=new Map;nextCycle=1;constructor(j=Date.now){this.now=j}prune(){let j=this.now();for(let[W,J]of this.recoveries)if(j-J.updatedAt>=U3)this.recoveries.delete(W);while(this.recoveries.size>_3){let W=this.recoveries.keys().next().value;if(typeof W!=="string")break;this.recoveries.delete(W)}}plan(j,W){if(!j||typeof W!=="string")return null;let J=w3(W);if(!J||!z1(J.model))return null;let O=Q3(j,J.model);if(!O)return null;this.prune();let Z=this.recoveries.get(O);if(!Z||Z.remaining<=0)return{sessionId:j,recoveryKey:O,requestedModel:J.model,effectiveModel:J.model,bodyText:W,downgraded:!1,standbyCacheAnchor:Z?.standbyCacheAnchor};return Z.updatedAt=this.now(),Z.nextRequestSequence++,this.recoveries.delete(O),this.recoveries.set(O,Z),J.body.model=Ij,{sessionId:j,recoveryKey:O,requestedModel:Z.model,effectiveModel:Ij,bodyText:JSON.stringify(J.body),downgraded:!0,cycle:Z.cycle,cacheAccountId:Z.cacheAccountId,standbyCacheAnchor:Z.standbyCacheAnchor,requestSequence:Z.nextRequestSequence}}recoveryAccount(j){if(j.cycle===void 0)return j.cacheAccountId;let W=this.recoveries.get(j.recoveryKey);return W?.cycle===j.cycle?W.cacheAccountId:j.cacheAccountId}bindRecoveryAccount(j,W){if(!j.downgraded||j.cycle===void 0)return!1;let J=this.recoveries.get(j.recoveryKey);if(!J||J.cycle!==j.cycle)return!1;if(J.cacheAccountId===W)return!1;return J.cacheAccountId=W,J.standbyCacheAnchor=void 0,J.standbyAnchorSequence=0,J.updatedAt=this.now(),j.cacheAccountId=W,j.standbyCacheAnchor=void 0,!0}activate(j,W){if(j.downgraded||!z1(j.requestedModel))return this.remaining(j);let J={model:j.requestedModel,remaining:K3,cycle:this.nextCycle++,cacheAccountId:W,standbyCacheAnchor:j.standbyCacheAnchor,nextRequestSequence:0,standbyAnchorSequence:0,updatedAt:this.now()};return this.recoveries.delete(j.recoveryKey),this.recoveries.set(j.recoveryKey,J),this.prune(),J.remaining}complete(j,W){if(!j.downgraded||j.cycle==null||j.completed)return{counted:!1,remaining:this.remaining(j)};j.completed=!0;let J=this.recoveries.get(j.recoveryKey);if(!J||J.cycle!==j.cycle||J.remaining<=0)return{counted:!1,remaining:J?.remaining??0};if(J.remaining--,W&&(!J.cacheAccountId||W.oauthAccountId===J.cacheAccountId)&&j.requestSequence!=null&&j.requestSequence>=J.standbyAnchorSequence)J.standbyCacheAnchor=W,J.standbyAnchorSequence=j.requestSequence;return J.updatedAt=this.now(),this.recoveries.delete(j.recoveryKey),this.recoveries.set(j.recoveryKey,J),{counted:!0,remaining:J.remaining}}remaining(j){return this.prune(),this.recoveries.get(j.recoveryKey)?.remaining??0}}function K1(j){return typeof j==="object"&&j!==null}function P3(j){if(Array.isArray(j))return j;if(K1(j)&&Array.isArray(j.data))return j.data;return[]}function Ej(j){if(!K1(j)||!K1(j.info))return;return j.info}function Mj(j){let W=Ej(j);return typeof W?.role==="string"?W.role:void 0}function H3(j){let W=Ej(j);return typeof W?.id==="string"?W.id:void 0}function Tj(j){if(!K1(j)||!K1(j.info))return null;let W=j.info,J=K1(W.model)?W.model:void 0,O=typeof W.agent==="string"?W.agent:void 0,Z=typeof J?.providerID==="string"?J.providerID:typeof W.providerID==="string"?W.providerID:void 0,Y=typeof J?.modelID==="string"?J.modelID:typeof W.modelID==="string"?W.modelID:void 0,z=typeof J?.variant==="string"?J.variant:typeof W.variant==="string"?W.variant:void 0;if(!O&&(!Z||!Y)&&!z)return null;let B={};if(O)B.agent=O;if(Z&&Y)B.model={providerID:Z,modelID:Y};if(z)B.variant=z;return B}function xj(j,W){return{agent:j.agent??W.agent,model:j.model??W.model,variant:j.variant??W.variant,latestAssistantMessageId:j.latestAssistantMessageId??W.latestAssistantMessageId,latestUserMessageId:j.latestUserMessageId??W.latestUserMessageId}}function Fj(j){return Boolean(j.agent&&j.model&&j.variant)}async function Sj(j,W){if(!j||!W)return null;let J=j;if(typeof J.session?.messages!=="function")return null;let O=[];try{O=P3(await Promise.resolve(J.session.messages({path:{id:W},query:{limit:100}})))}catch{return null}if(O.length===0)return null;let Z,Y;for(let B of O){let x=H3(B);if(!x)continue;let r=Mj(B);if(r==="assistant"&&(!Z||x>Z))Z=x;if(r==="user"&&(!Y||x>Y))Y=x}let z={latestAssistantMessageId:Z,latestUserMessageId:Y};for(let B=O.length-1;B>=0;B--){if(Mj(O[B])!=="assistant")continue;let x=Tj(O[B]);if(!x)continue;if(z=xj(z,x),Fj(z))return z}for(let B=O.length-1;B>=0;B--){let x=Tj(O[B]);if(!x)continue;if(z=xj(z,x),Fj(z))return z}if(!z.agent&&!z.model&&!z.variant&&!z.latestAssistantMessageId&&!z.latestUserMessageId)return null;return z}var o0=[],C3=1,A4=0,qj=new Map;function Aj(j,W){if(o0.push({id:C3++,type:"open-dialog",payload:j,sessionId:W}),o0.length>100)o0=o0.slice(o0.length-100)}function fj(j=0,W){let J=Date.now();if(A4=J,W!==void 0)qj.set(W,J);let O=(Z)=>W===void 0||Z.sessionId===void 0||Z.sessionId===W;if(j>0)o0=o0.filter((Z)=>{if(Z.id>j)return!0;if(W===void 0)return!1;return Z.sessionId!==W});return o0.filter((Z)=>Z.id>j&&O(Z))}function f4(j){let W=Date.now();if(j!==void 0){let J=qj.get(j)??0;return J>0&&W-J<3000}return A4>0&&W-A4<3000}import{randomBytes as L3,timingSafeEqual as B3}from"node:crypto";import{unlink as I3}from"node:fs/promises";import{createServer as M3}from"node:http";import{join as T3}from"node:path";function x3(j){return new Promise((W,J)=>{let O=[],Z=0;j.on("data",(Y)=>{if(Z+=Y.length,Z>1e6){j.destroy(),J(Error("body too large"));return}O.push(Y)}),j.on("end",()=>W(Buffer.concat(O).toString("utf8"))),j.on("error",J)})}function F3(j,W){if(!j?.startsWith("Bearer "))return!1;let J=Buffer.from(j.slice(7)),O=Buffer.from(W);return J.length===O.length&&B3(J,O)}async function Rj(j){let W=L3(32).toString("hex"),J=M3((Y,z)=>{O(Y,z)});async function O(Y,z){let B=(x,r)=>{z.writeHead(x,{"content-type":"application/json"}),z.end(JSON.stringify(r))};try{let x=Y.url??"";if(Y.method==="GET"&&x==="/health")return B(200,{ok:!0});if(Y.method!=="POST"||!x.startsWith("/rpc/"))return B(404,{error:"not found"});if(!F3(Y.headers.authorization,W))return B(401,{error:"unauthorized"});let r=x.slice(5),o=JSON.parse(await x3(Y)||"{}");if(r==="pending-notifications"){let s=j.drain(Number(o.lastReceivedId??0),typeof o.sessionId==="string"?o.sessionId:void 0);return B(200,{messages:s})}if(r==="apply"){let s=await j.apply(o);return B(200,s)}return B(404,{error:"unknown method"})}catch(x){if(!z.headersSent&&!z.writableEnded&&!z.destroyed)B(500,{error:x instanceof Error?x.message:String(x)})}}let Z=await new Promise((Y,z)=>{J.on("error",z),J.listen(0,"127.0.0.1",()=>{let B=J.address();if(B&&typeof B==="object")Y(B.port);else z(Error("no port"))})});J.unref();try{await vj(j.dir,{port:Z,token:W,pid:process.pid})}catch(Y){throw await new Promise((z)=>J.close(()=>z())),Y}return{port:Z,token:W,async stop(){await new Promise((Y)=>J.close(()=>Y())),await I3(T3(j.dir,`port-${process.pid}.json`)).catch(()=>{})}}}var gj="server-side-fallback-2026-07-01",hj="",s1="cortexkit-server-fallback-v1:";function v0(j){return j!==null&&typeof j==="object"&&!Array.isArray(j)?j:void 0}function _1(j,W){let J=j?.[W];return typeof J==="string"?J:void 0}function U1(j){return typeof j==="string"&&j.length>0&&j.length<=128&&/^claude-[a-z0-9-]+$/i.test(j)}function E3(j){return`${s1}${j.fromModel}|${j.toModel}`}function S3(j){if(typeof j!=="string"||!j.startsWith(s1))return null;let W=j.slice(s1.length),J=W.indexOf("|");if(J<=0||J!==W.lastIndexOf("|"))return null;let O=W.slice(0,J),Z=W.slice(J+1);if(!U1(O)||!U1(Z))return null;return{fromModel:O,toModel:Z}}function q3(j){if(j.type!=="fallback")return null;let W=_1(v0(j.from),"model"),J=_1(v0(j.to),"model");if(!U1(W)||!U1(J))return null;return{fromModel:W,toModel:J}}function A3(j){return{type:"fallback",from:{model:j.fromModel},to:{model:j.toModel}}}function f3(j,W){let J=0,O=0;if(!Array.isArray(j.messages))return{restoredMarkers:J,droppedMarkers:O};for(let Z of j.messages){let Y=v0(Z);if(Y?.role!=="assistant"||!Array.isArray(Y.content))continue;let z=[];for(let B of Y.content){let x=v0(B);if(!(x?.type==="thinking"&&(x.thinking===hj||x.thinking==="")&&typeof x.signature==="string"&&x.signature.startsWith(s1))){z.push(B);continue}let o=S3(x.signature);if(W&&o)z.push(A3(o)),J++;else O++}Y.content=z}return{restoredMarkers:J,droppedMarkers:O}}function yj(j){return j?.trim().toLowerCase()==="legacy"?"legacy":"server"}function mj(j,W){let J=W&&z1(j.model),O=f3(j,J);if(J)j.fallbacks="default";else if(j.fallbacks==="default")delete j.fallbacks;return{enabled:J,...O}}function v3(j){let W,J=[];for(let Z of j.split(/\r?\n/))if(Z.startsWith("event:"))W=Z.slice(6).trim();else if(Z.startsWith("data:")){let Y=Z.slice(5);J.push(Y.startsWith(" ")?Y.slice(1):Y)}let O=J.join(`
|
|
2
|
+
`);if(!O||O==="[DONE]")return{event:W};try{return{event:W,data:v0(JSON.parse(O))}}catch{return{event:W}}}function R3(j){let W=j.indexOf(`
|
|
2
3
|
|
|
3
|
-
`)
|
|
4
|
-
|
|
5
|
-
`)
|
|
4
|
+
`),J=j.indexOf(`\r
|
|
5
|
+
\r
|
|
6
|
+
`);if(W===-1)return J===-1?null:{index:J,length:4};if(J===-1||W<J)return{index:W,length:2};return{index:J,length:4}}function kj(j,W){return`event: ${j}
|
|
7
|
+
data: ${JSON.stringify(W)}
|
|
8
|
+
|
|
9
|
+
`}function k3(j,W){return kj("content_block_start",{type:"content_block_start",index:j,content_block:{type:"thinking",thinking:hj}})+kj("content_block_delta",{type:"content_block_delta",index:j,delta:{type:"signature_delta",signature:E3(W)}})}function g3(j,W){let J=g0(j),O=g0(W);if(J&&O)return J===O;return j===W}function bj(j){let W="",J,O,Z,Y=!1,z=!1,B=new Set,x=(h)=>{if(!Array.isArray(h?.iterations))return;for(let u of h.iterations){let e=v0(u);if(e?.type!=="fallback_message")continue;let m=_1(e,"model");if(U1(m))Z=m}},r=(h)=>{if(Y)return;Y=!0;let u=O?.toModel??Z??(J&&!g3(j.requestedModel,J)?J:void 0);j.onOutcome?.({requestedModel:j.requestedModel,servedModel:J,targetModel:u,fallback:Boolean(u),handoff:Boolean(O),stopReason:h})},o=(h,u)=>{let e=v3(h),m=e.data,G0=_1(m,"type")??e.event;if(G0==="message_start"){let $0=v0(m?.message),Z0=_1($0,"model");if(U1(Z0))J=Z0;x(v0($0?.usage))}else if(G0==="content_block_start"){let $0=v0(m?.content_block),Z0=m?.index;if($0?.type==="tool_use"&&typeof Z0==="number"&&Number.isInteger(Z0)&&Z0>=0)B.add(Z0);let E=$0?q3($0):null;if(E){if(O=E,typeof Z0==="number"&&Number.isInteger(Z0)&&Z0>=0)return k3(Z0,E)}}else if(G0==="content_block_stop"){let $0=m?.index;if(typeof $0==="number"&&B.delete($0))z=!0}else if(G0==="message_delta"){x(v0(m?.usage));let $0=v0(m?.delta),Z0=_1($0,"stop_reason");if(Z0)r(Z0);if(Z0==="refusal"&&z&&B.size===0&&$0&&j.onRefusalAfterToolUse&&j.onRefusalAfterToolUse()!==!1)return $0.stop_reason="tool_use",`${e.event?`event: ${e.event}
|
|
10
|
+
`:""}${m?`data: ${JSON.stringify(m)}
|
|
11
|
+
`:""}${u}`}return h+u},s=()=>{let h="";while(!0){let u=R3(W);if(!u)break;let e=W.slice(0,u.index),m=W.slice(u.index,u.index+u.length);W=W.slice(u.index+u.length),h+=o(e,m)}return h};return{push(h){return W+=h,s()},flush(){let h=s();if(!W)return h;let u=o(W,"");return W="",h+u}}}import{createHash as h3}from"node:crypto";function pj(j,W){let J=new Map,O=0,Z=0,Y=0,z=0,B=0,x=(s)=>{let h=performance.now(),u=j(s);return B+=performance.now()-h,Y++,u};return{call:(s)=>{if(!W.enabled())return x(s);let h=J.get(s);if(h!==void 0)return Z++,J.delete(s),J.set(s,h),h;let u=x(s),e=s.length+u.length;if(e>W.maxBytes)return u;J.set(s,u),O+=e;while(O>W.maxBytes&&J.size>1){let m=J.keys().next().value,G0=J.get(m)??"";J.delete(m),O-=m.length+G0.length,z++}return u},stats:()=>({hits:Z,misses:Y,evictions:z,entries:J.size,cacheBytes:O,computeMsTotal:B})}}function ij(j){return`${aj}${j.charAt(0).toUpperCase()}${j.slice(1)}`}function UW(j){if(j==="StructuredOutput")return j;return`${j.charAt(0).toLowerCase()}${j.slice(1)}`}var y3=new Set(["callgraph","conflicts","delete","import","inspect","move","navigate","outline","refactor","safety","search","transform","zoom"]);function cj(j){let W=UW(j);if(W.startsWith("aft_"))return W;if(y3.has(W))return`aft_${W}`;return null}function W4(j,W){let J=new Headers;if(j instanceof Request)j.headers.forEach((Z,Y)=>{J.set(Y,Z)});let O=W?.headers;if(O){if(O instanceof Headers)O.forEach((Z,Y)=>{J.set(Y,Z)});else if(Array.isArray(O))for(let Z of O){let[Y,z]=Z;if(typeof z<"u")J.set(Y,String(z))}else for(let[Z,Y]of Object.entries(O))if(typeof Y<"u")J.set(Z,String(Y))}return J}function J4(j){return j.set("anthropic-beta",A1(j.get("anthropic-beta"),[ej])),j}function v1(j,W,J={}){return YW(j,W,{...J,extraBetas:J.body?.fallbacks==="default"?[gj]:void 0})}function m3(j){if(j.tools&&Array.isArray(j.tools))j.tools=j.tools.map((W)=>({...W,name:W.name?ij(W.name):W.name}));if(j.messages&&Array.isArray(j.messages))j.messages=j.messages.map((W)=>{if(W.content&&Array.isArray(W.content))W.content=W.content.map((J)=>{if(J.type==="tool_use"&&J.name)return{...J,name:ij(J.name)};return J});return W});return JSON.stringify(DW(j))}function v4(j){return j.replace(/"name"\s*:\s*"(mcp_)?([^"]+)"/g,(W,J,O)=>{if(J)return`"name": "${cj(O)??UW(O)}"`;let Z=cj(O);return Z?`"name": "${Z}"`:W})}function uj(j,W=!1){if(W)return{ready:v4(j),pending:""};let J=j.length,O='"name"',Z=Math.max(0,j.length-O.length+1);for(let z=Z;z<j.length;z++)if(O.startsWith(j.slice(z))){J=Math.min(J,z);break}let Y=j.lastIndexOf(O);if(Y!==-1){let z=j.slice(Y);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(z))J=Math.min(J,Y)}if(J<j.length)return{ready:v4(j.slice(0,J)),pending:j.slice(J)};return{ready:v4(j),pending:""}}function g4(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let j=process.env.ANTHROPIC_INSECURE?.trim();return j==="1"||j==="true"}function QW(j){let W=j?.trim();if(!W)return null;try{let J=new URL(W);if(J.protocol!=="http:"&&J.protocol!=="https:"||J.username||J.password)return null;return J}catch{return null}}function b3(){return QW(process.env.ANTHROPIC_BASE_URL)}function h4(j,W={}){let J=null;try{if(typeof j==="string"||j instanceof URL)J=new URL(j.toString());else if(j instanceof Request)J=new URL(j.url)}catch{J=null}if(!J)return{input:j,url:null};let O=J.href,Z=W.baseURL?QW(W.baseURL):b3();if(Z){if(J.protocol=Z.protocol,J.host=Z.host,W.baseURL)J.pathname=`${Z.pathname.replace(/\/$/,"")}${J.pathname}`}if(J.pathname.endsWith("/v1/messages")&&!J.searchParams.has("beta"))J.searchParams.set("beta","true");if(J.href===O)return{input:j,url:J};return{input:j instanceof Request?new Request(J.toString(),j):J,url:J}}function p3(j){let O=j.split(/\n\n+/).filter((Z)=>{if(Z.includes(jW))return!1;for(let Y of JW)if(Z.includes(Y))return!1;return!0}).join(`
|
|
12
|
+
|
|
13
|
+
`);for(let Z of NW)O=O.replace(Z.match,Z.replacement);return O.trim()}var i3=8388608;function c3(){return process.env.OPENCODE_ANTHROPIC_AUTH_MEMO!=="0"}var u3=pj(p3,{maxBytes:i3,enabled:c3});function t1(j){return u3.call(j)}function c(j){return j!=null&&typeof j==="object"&&!Array.isArray(j)}function d3(j){let W={type:"text",text:Q1};if(j==null)return[W];if(typeof j==="string"){let O=t1(j);if(O===Q1)return[W];return[W,{type:"text",text:O}]}if(c(j)){let O=typeof j.type==="string"?j.type:"text",Z=typeof j.text==="string"?j.text:"";return[W,{...j,type:O,text:t1(Z)}]}if(!Array.isArray(j))return[W];let J=j.map((O)=>{if(typeof O==="string")return{type:"text",text:t1(O)};if(c(O)&&O.type==="text"&&typeof O.text==="string")return{...O,type:"text",text:t1(O.text)};return{type:"text",text:String(O)}});if(J[0]?.text===Q1)return J;return[W,...J]}var wW={type:"ephemeral",ttl:"1h"},dj=20;function PW(j){if(c(j.cache_control))return j.cache_control;if(c(j.cacheControl))return j.cacheControl;return null}function q1(j,W){if(!c(j))return!1;return delete j.cacheControl,j.cache_control=W?{...wW}:{type:"ephemeral"},!0}function lj(j){if(!c(j))return;delete j.cache_control,delete j.cacheControl}function y4(j){if(Array.isArray(j))return j;if(typeof j==="string")return[{type:"text",text:j}];return null}function k4(j){if(Array.isArray(j))return j.map(k4);if(!c(j))return j;let W={};for(let J of Object.keys(j).sort()){if(J==="cache_control"||J==="cacheControl")continue;W[J]=k4(j[J])}return W}function HW(j){if(!c(j))return;let W=y4(j.content);if(!W?.length)return;let J=k4({...j,content:W});return h3("sha256").update(JSON.stringify(J)).digest("hex")}function l3(j){if(!c(j))return!1;let W=y4(j.content);return Boolean(W?.some((J)=>c(J)&&PW(J)?.type==="ephemeral"))}function CW(j){try{let W=JSON.parse(j);if(!Array.isArray(W.messages))return;for(let J=W.messages.length-1;J>1;J--){let O=W.messages[J];if(!c(O)||O.role!=="user"||!l3(O))continue;let Z=HW(O);if(!Z)return;return{fingerprint:Z,messageIndex:J,messageCount:W.messages.length}}return}catch{return}}function a1(j,W){if(!c(j))return;let J=PW(j);if(J?.type!=="ephemeral")return;if(W)J.ttl="1h";else delete J.ttl}function nj(j,W){if(Array.isArray(j.system))for(let J of j.system)a1(J,W);else a1(j.system,W);if(!Array.isArray(j.messages))return;for(let J of j.messages)if(a1(J,W),c(J)&&Array.isArray(J.content))for(let O of J.content)a1(O,W)}function n3(j,W){if(Array.isArray(j.system))for(let J of j.system)W(J);else W(j.system);if(!Array.isArray(j.messages))return;for(let J of j.messages)if(W(J),c(J)&&Array.isArray(J.content))for(let O of J.content)W(O)}function LW(j){lj(j),n3(j,lj)}function o3(j){LW(j),j.cache_control={...wW}}function r3(j){return c(j)&&j.type!=="thinking"&&j.type!=="redacted_thinking"}function N4(j){let W=y4(j.content);if(!W?.length)return;let J=W.filter(r3);if(!J.length)return;return{content:W,cacheableBlocks:J}}function s3(j){if(!c(j))return!1;let W=N4(j);if(!W)return!1;return j.content=W.content,q1(W.cacheableBlocks[0],!0)}function t3(j){if(!c(j))return!1;let W=N4(j);if(!W||W.cacheableBlocks.length<2)return!1;return j.content=W.content,q1(W.cacheableBlocks[1],!0)}function e1(j){if(!c(j))return!1;let W=N4(j);if(!W)return!1;let J=W.cacheableBlocks[W.cacheableBlocks.length-1];return j.content=W.content,q1(J,!0)}function a3(j){if(!c(j))return!1;return(N4(j)?.cacheableBlocks.length??0)>1}function e3(j){if(!c(j))return 0;let W=j.content;if(Array.isArray(W))return W.length;if(W==null)return 0;return 1}function j7(j){let W=[],J=0;return j.forEach((O,Z)=>{let Y=e3(O);if(c(O)&&O.role==="user"&&Y>0)W.push({index:Z,blockPosition:J+Y-1});J+=Y}),W}function W7(j,W,J,O){if(!O)return;let Z=[],Y=W.find((z)=>z.index===O.messageIndex&&z.index>1&&z.index<J.index);if(Y)Z.push(Y);for(let z of[...W].reverse()){if(z.index<=1||z.index>=J.index||z.index===Y?.index)continue;Z.push(z)}for(let z of Z)if(HW(j[z.index])===O.fingerprint)return z;return}function J7(j,W){let J=j7(j),O=[...J].reverse().find((o)=>o.index>1);if(!O)return{latest:void 0,bridge:void 0,standbyAnchorMatched:!1,standbyBridgeApplied:!1};let Z=W7(j,J,O,W),Y=Z?O.blockPosition-Z.blockPosition+1:void 0,z=Z&&Y!=null&&Y>dj?Z:void 0,B=[...J].reverse().find((o)=>o.index<O.index),x=B?O.blockPosition-B.blockPosition+1:0,r=B&&B.index>1&&x>dj?B:void 0;return{latest:O,bridge:z??r,standbyAnchorMatched:Boolean(Z),standbyDistanceBlocks:Y,standbyBridgeApplied:Boolean(z)}}function R4(j){return c(j)&&typeof j.text==="string"?j.text:""}function N7(j){if(!Array.isArray(j.system))return;let W=j.system,J=0;if(R4(W[J]).startsWith("x-anthropic-billing-header:"))J++;if(R4(W[J])===Q1)J++;let O=J+1;if(O>=W.length-1)return;let Z=W[O];if(!c(Z))return;let Y=W.slice(O).map(R4).join(`
|
|
14
|
+
`);W.splice(O,W.length-O,{...Z,type:"text",text:Y})}function oj(j){if(Array.isArray(j.system)){let W=j.system.findIndex((Z)=>c(Z)&&Z.text===Q1),J=j.system.slice(W>=0?W+1:0).filter(c),O=J[J.length-1];q1(O,!0)}else q1(j.system,!0)}function O7(j,W){if(LW(j),N7(j),!Array.isArray(j.messages))return oj(j),{standbyAnchorMatched:!1,standbyBridgeApplied:!1};let{latest:J,bridge:O,standbyAnchorMatched:Z,standbyDistanceBlocks:Y,standbyBridgeApplied:z}=J7(j.messages,W);if(!O)oj(j);if(a3(j.messages[0]))s3(j.messages[0]),t3(j.messages[0]);else e1(j.messages[0]),e1(j.messages[1]);if(O)e1(j.messages[O.index]);if(J)e1(j.messages[J.index]);return{standbyAnchorMatched:Z,standbyDistanceBlocks:Y,standbyBridgeApplied:z,...z&&O?{standbyBridgeMessageIndex:O.index}:{}}}function $7(j){if(!Array.isArray(j.messages))return 0;let W=0;return j.messages=j.messages.filter((J)=>{if(!c(J)||!Array.isArray(J.content))return!0;if(J.role!=="assistant")return!0;let O=J.content.filter((Z)=>{if(!c(Z)||Z.type!=="thinking")return!0;if(!_W(Z.signature))return!0;return W+=1,!1});if(O.length===J.content.length)return!0;return J.content=O,O.length>0}),W}function BW(j){if(!XW(j.model))return null;let W=Object.hasOwn(j,"thinking");return j.thinking={...GW},{replacedExisting:W}}function Z7(j){if(!zW(j.model))return null;let W=Object.hasOwn(j,"thinking"),J=j.thinking;if(c(J)&&J.type==="disabled")return j.thinking={type:"disabled"},{replacedExisting:W,display:"disabled"};return j.thinking={...VW},{replacedExisting:W,display:"summarized"}}function IW(j){if(!f0(j.model))return null;let W=Object.hasOwn(j,"thinking"),J=j.thinking;if(c(J)&&J.type==="disabled"){j.thinking={type:"disabled"};let O=j.output_config;if(c(O)&&O.effort==="xhigh")O.effort="high";else if(c(O)&&O.effort==="max")O.effort="high";return{replacedExisting:W,display:"disabled"}}return j.thinking={...KW},{replacedExisting:W,display:"summarized"}}function MW(j,W=S1){try{let J=JSON.parse(j);return J.model=W,delete J.speed,delete J.fallbacks,BW(J),IW(J),{ok:!0,bodyText:JSON.stringify(J)}}catch{return{ok:!1,reason:"body is not valid JSON"}}}function Y7(j,W){if(!W.enabled)return nj(j,!1),delete j.cache_control,delete j.cacheControl,{};if(W.mode==="automatic")return o3(j),{};if(W.mode==="hybrid")return O7(j,W.hybridStandbyAnchor);return nj(j,!0),delete j.cacheControl,{}}function D7(j){if(!Array.isArray(j.messages))return;while(j.messages.length){let W=j.messages[j.messages.length-1];if(!c(W)||W.role!=="assistant")break;j.messages.pop()}}function G7(j){if(!Array.isArray(j.messages))return 0;for(let W=j.messages.length-1;W>=0;W--){let J=j.messages[W];if(!c(J)||J.role!=="assistant")continue;if(!Array.isArray(J.content))return 0;if(!J.content.some((Z)=>c(Z)&&Z.type==="tool_use"))return 0;let O=0;while(J.content.length){let Z=J.content[J.content.length-1];if(!c(Z)||Z.type!=="text"||typeof Z.text!=="string"||Z.text.trim())break;J.content.pop(),O++}return O}return 0}function a(){return performance.now()}function q0(j){return Math.round(j*10)/10}function rj(j){let W=0,J=0,O=0,Z=Array.isArray(j.messages)?j.messages:[];W=Z.length;for(let Y of Z){if(!Y||typeof Y!=="object")continue;let z=Y.content;if(!Array.isArray(z))continue;J+=z.length;for(let B of z)if(B&&typeof B==="object"&&B.type==="tool_use")O++}return{messageCount:W,contentBlockCount:J,toolDefinitionCount:Array.isArray(j.tools)?j.tools.length:0,toolUseCount:O,systemBlockCount:Array.isArray(j.system)?j.system.length:0}}async function m4(j,W={}){try{let J=a(),O=JSON.parse(j);W.perf?.("parse",{ms:q0(a()-J),inputBytes:j.length,...rj(O)});let Z=a(),Y=Array.isArray(O.messages)?O.messages.length:void 0;D7(O);let z=G7(O),B=Array.isArray(O.messages)?O.messages.length:void 0;W.perf?.("strip_trailing_assistant",{ms:q0(a()-Z),removedMessages:typeof Y==="number"&&typeof B==="number"?Y-B:void 0,removedWhitespaceBlocks:z});let x=a(),r=$7(O),o=mj(O,W.serverSideFallbackEnabled===!0),s=BW(O),h=Z7(O),u=IW(O);W.perf?.("model_normalize",{ms:q0(a()-x),model:typeof O.model==="string"?O.model:void 0,fableMythosThinkingDisplay:s?"summarized":void 0,replacedFableMythosThinking:s?.replacedExisting??!1,sonnet5ThinkingDisplay:h?.display,replacedSonnet5Thinking:h?.replacedExisting??!1,opus5ThinkingDisplay:u?.display,replacedOpus5Thinking:u?.replacedExisting??!1,removedNonAnthropicThinking:r,serverSideFallbackEnabled:o.enabled,serverFallbackMarkersRestored:o.restoredMarkers,serverFallbackMarkersDropped:o.droppedMarkers,hasOutputConfig:Object.hasOwn(O,"output_config")});let e=a(),m=Array.isArray(O.messages)&&O.messages.some((G1)=>G1.role==="user")?$W(O.messages,void 0,WW):null;W.perf?.("billing_header",{ms:q0(a()-e),hasBillingHeader:Boolean(m)});let G0=a();if(O.system=d3(O.system),W.perf?.("system_identity",{ms:q0(a()-G0),systemBlockCount:Array.isArray(O.system)?O.system.length:0}),m&&Array.isArray(O.system))O.system.unshift({type:"text",text:m});let $0=a(),Z0=Y7(O,{enabled:W.cache1hEnabled??!1,mode:W.cache1hMode??"explicit",hybridStandbyAnchor:W.hybridStandbyAnchor});if(W.perf?.("cache_strategy",{ms:q0(a()-$0),enabled:W.cache1hEnabled??!1,mode:W.cache1hMode??"explicit",...Z0}),W.fastModeEnabled&&f1(O.model))O.speed="fast";else if(O.speed==="fast")delete O.speed;let E=a();if(W.identity)ZW(O,W.identity);W.perf?.("metadata",{ms:q0(a()-E),hasAccountUuid:Boolean(W.identity?.accountUuid)});let m0=a(),A0=m3(O);W.perf?.("prefix_tools_stringify",{ms:q0(a()-m0),outputBytesBeforeSign:A0.length,...rj(O)});let b0=a(),E0=await OW(A0);return W.perf?.("cch_sign",{ms:q0(a()-b0),outputBytes:E0.length}),E0}catch{return j}}var X7=new TextEncoder;function V7(){return{pending:"",events:0,parseErrors:0,eventCounts:{},typeCounts:{},deltaTypeCounts:{},contentBlockTypeCounts:{},textDeltaBytes:0,thinkingDeltaBytes:0,inputJsonDeltaBytes:0,signatureDeltaBytes:0,redactedThinkingBytes:0}}function j4(j,W){if(!W)return;j[W]=(j[W]??0)+1}function O1(j){return X7.encode(j).byteLength}function r0(j){return j&&typeof j==="object"&&!Array.isArray(j)?j:void 0}function M0(j,W){let J=j?.[W];return typeof J==="string"?J:void 0}function z7(j,W){let J=j?.[W];return typeof J==="number"?J:void 0}function TW(j){if(!j.trim())return null;let W,J=[];for(let s of j.split(/\r?\n/)){if(s.startsWith("event:")){W=s.slice(6).trim();continue}if(s.startsWith("data:")){let h=s.slice(5);J.push(h.startsWith(" ")?h.slice(1):h)}}let O=J.join(`
|
|
15
|
+
`),Z={event:W,rawBytes:O1(j),dataBytes:O1(O)};if(!O||O==="[DONE]")return Z.type=O==="[DONE]"?"done":void 0,Z.event??=Z.type,Z;let Y;try{Y=JSON.parse(O)}catch{return Z}let z=r0(Y),B=r0(z?.delta),x=r0(z?.content_block),r=r0(z?.message),o=r0(z?.usage)??r0(r?.usage);if(Z.type=M0(z,"type"),Z.event??=Z.type,Z.index=z7(z,"index"),Z.contentBlockType=M0(x,"type"),Z.deltaType=M0(B,"type"),Z.stopReason=M0(B,"stop_reason")??M0(z,"stop_reason"),Z.deltaType==="text_delta")Z.textDeltaBytes=O1(M0(B,"text")??"");if(Z.deltaType==="thinking_delta")Z.thinkingDeltaBytes=O1(M0(B,"thinking")??"");if(Z.deltaType==="input_json_delta")Z.inputJsonDeltaBytes=O1(M0(B,"partial_json")??"");if(Z.deltaType==="signature_delta")Z.signatureDeltaBytes=O1(M0(B,"signature")??"");if(Z.contentBlockType==="redacted_thinking")Z.redactedThinkingBytes=O1(M0(x,"data")??"");if(o)Z.stopReason??=M0(r,"stop_reason");return Z}function b4(j){let W=j.indexOf(`
|
|
6
16
|
|
|
7
|
-
`),j
|
|
17
|
+
`),J=j.indexOf(`\r
|
|
8
18
|
\r
|
|
9
|
-
`);if(W===-1)return
|
|
10
|
-
`);if(!J||J==="[DONE]")return null;let Z;try{Z=JSON.parse(J)}catch{return null}let V=l0(Z);if(W!=="error"&&U0(V,"type")!=="error")return null;let _=l0(V?.error),B=U0(_,"type")??U0(_,"code")??void 0,y=U0(_,"message")??U0(V,"message")??B??"Anthropic stream error";if(!kJ(B,y))return null;return gJ(B,y)}function SW(N,W){if(!W)return null;N.pending+=W;while(!0){let j=BN(N.pending);if(!j)break;let J=N.pending.slice(0,j.index);N.pending=N.pending.slice(j.index+j.length);let Z=hJ(J);if(Z)return Z}return null}function mJ(N){return{sseEvents:N.events,ssePendingChars:N.pending.length,sseParseErrors:N.parseErrors,sseEventCounts:{...N.eventCounts},sseTypeCounts:{...N.typeCounts},sseDeltaTypeCounts:{...N.deltaTypeCounts},sseContentBlockTypeCounts:{...N.contentBlockTypeCounts},sseTextDeltaBytes:N.textDeltaBytes,sseThinkingDeltaBytes:N.thinkingDeltaBytes,sseInputJsonDeltaBytes:N.inputJsonDeltaBytes,sseSignatureDeltaBytes:N.signatureDeltaBytes,sseRedactedThinkingBytes:N.redactedThinkingBytes,sseLastEvent:N.last?{...N.last}:void 0}}function O4(N,W={}){if(!N.body)return N;let j=N.body.getReader(),J=new TextDecoder,Z=new TextEncoder,V="",_=0,B=0,y=0,r=0,l=0,d=!1,D0=!1,I=o(),T0=o(),P0=W.perf?vJ():void 0,E0=RJ(),b0=W.onContentFilter||W.onComplete?AJ():void 0,c0=(O0)=>{if(!b0)return null;let S0=fJ(b0,O0);if(S0?.type==="content-filter"&&W.onContentFilter)return W.onContentFilter()===!1?null:yJ(W.contentFilterModel);if(S0?.type==="complete")W.onComplete?.(S0.finishReason);return null},v0=()=>{if(D0)return;D0=!0,j.releaseLock()},K1=async(O0)=>{try{await j.cancel(O0)}catch{}finally{v0()}},W1=(O0={})=>({chunks:_,pulls:B,inputBytes:y,outputBytes:r,pendingChars:V.length,rewriteMs:x0(l),totalMs:x0(o()-T0),...P0?mJ(P0):{},...O0}),L0=(O0,S0={})=>{W.perf?.(O0,W1(S0))};W.perf?.("stream_tool_prefix_wrapper_created",{status:N.status,hasBody:!0});let q0=new ReadableStream({async pull(O0){if(B++,!d)d=!0,L0("stream_tool_prefix_first_pull");let S0=o();try{let{done:M0,value:y0}=await j.read(),h0=x0(o()-S0);if(M0){let m0=J.decode();if(P0)EW(P0,m0);let p0=SW(E0,m0)??c0(m0);if(p0)throw L0("stream_tool_prefix_retryable_error",{error:p0.message,providerErrorType:p0.providerErrorType}),await K1(p0),p0;let I0=o(),u0=MW(`${V}${m0}`,!0);if(l+=o()-I0,u0.ready){let v1=Z.encode(u0.ready);r+=v1.byteLength,O0.enqueue(v1)}L0("stream_tool_prefix_rewrite",{readMs:h0}),v0(),O0.close();return}_++,y+=y0.byteLength;let j1=J.decode(y0,{stream:!0});if(P0)EW(P0,j1);let J1=SW(E0,j1)??c0(j1);if(J1)throw L0("stream_tool_prefix_retryable_error",{error:J1.message,providerErrorType:J1.providerErrorType,readMs:h0,lastChunkBytes:y0.byteLength}),v0(),J1;let S1=V+j1,V0=o(),z1=MW(S1);if(l+=o()-V0,V=z1.pending,z1.ready){let m0=Z.encode(z1.ready);r+=m0.byteLength,O0.enqueue(m0)}let B0=o();if(_===1||_%25===0||B0-I>5000)I=B0,L0("stream_tool_prefix_progress",{readMs:h0,lastChunkBytes:y0.byteLength})}catch(M0){throw L0("stream_tool_prefix_error",{error:M0 instanceof Error?M0.message:String(M0)}),v0(),M0}},async cancel(O0){L0("stream_tool_prefix_cancel",{reason:O0 instanceof Error?O0.message:String(O0)});try{await j.cancel(O0)}finally{v0()}}});return new Response(q0,{status:N.status,statusText:N.statusText,headers:N.headers})}var bJ="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",$4="~effect/http/HttpServerResponse",Z4="~effect/http/Cookies",G4="~effect/http/HttpBody",pJ="~effect/ErrorReporter/ignore",iJ=60000,dJ=60000,lJ=5000,X4=200,Ij=240,cJ=Ij,uJ=600000;function nJ(N,W){return(N?.accounts??[]).some((j)=>j.id===W&&j.enabled!==!1&&N0(j))}function oJ(N){let W=(N?.accounts??[]).find((j)=>j.enabled!==!1&&N0(j));if(_1(N)==="fallback-first"&&W)return{activeId:W.id,route:"fallback-first"};return{activeId:"main",route:"main"}}function Y4(N,W){if(N?.activeId==="main"||N?.activeId&&nJ(W,N.activeId))return N;return oJ(W)}function Fj(N,W,j){let J=Date.now()-N.lastUpdated;if(!N.activeId||J<0||J>uJ)return Y4(j,W);return Y4(N,W)}async function rJ(N,W,j){let J;try{J=await W()}catch(Z){return k.warn("sidebar","account storage reload failed; routing preserved",{message:Z instanceof Error?Z.message:String(Z)}),{...N.activeId?{activeId:N.activeId,route:N.route}:j??{activeId:"main",route:"main"},freshStorage:null}}return{...Fj(N,J,j),freshStorage:J}}async function sJ(N){await GN()?.beforeStorageLoad?.();let W;try{W=await q(N)}catch{return{activeId:"main",route:"main",freshStorage:null}}finally{await GN()?.afterStorageLoad?.()}await GN()?.beforeSidebarRead?.();let j=await Mj();return{...Fj(j,W),freshStorage:W}}function aJ(N){let W=Math.floor(N.retryAfterSeconds/60),j=N.retryAfterSeconds%60,J=`Retry in ${W}m ${j}s.`;return N.modelName?`${N.modelName} weekly limit reached, no routable accounts. ${J}`:`Killswitch: no routable accounts. ${J}`}function tJ(N){if(!N.requestModelId)return{isScopedDriven:!1};if(!N1(N.mainQuota,N.storage))return{isScopedDriven:!1};let W=R4(N.mainQuota,N.requestModelId);if(!W)return{isScopedDriven:!1};if(!Number.isFinite(W.remainingPercent))return{isScopedDriven:!1};let j=k4(N.storage);if(W.remainingPercent<=j.scoped)return{isScopedDriven:!0,modelName:W.modelName,modelId:N.requestModelId};return{isScopedDriven:!1}}var eJ=1,D4=!1;function XN(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function f(){return performance.now()}function s(N){return Math.round(N*10)/10}function V4(N){return Math.floor(Math.random()*Math.max(0,N))}function d1(N){if(typeof N==="string")return N;if(N instanceof URL)return N.toString();return N.url}function l1(N,W){return W?.method??(N instanceof Request?N.method:void 0)}function _4(N){return N instanceof Error?N.message:String(N)}function N3(){if(D4||!1||!XN())return;D4=!0;let N=100,W=250,j=f()+N;setInterval(()=>{let J=f(),Z=J-j;if(j=J+N,Z<W)return;a("[perf] opencode event_loop_lag",{lagMs:s(Z),thresholdMs:W})},N).unref?.()}function W3(N){let W=f(),j={requestId:String(eJ++),start:W,last:W,mark(J,Z){let V=f();if(XN())a("[perf] opencode request stage",{requestId:j.requestId,stage:J,deltaMs:s(V-j.last),totalMs:s(V-j.start),...Z});j.last=V},done(J,Z){let V=f();if(XN())a("[perf] opencode request done",{requestId:j.requestId,stage:J,deltaMs:s(V-j.last),totalMs:s(V-j.start),...Z});j.last=V}};if(XN())a("[perf] opencode request start",{requestId:j.requestId,...N});return j}function j3(N,W){let j=/^msg_([0-9a-fA-F]{12})/.exec(N);if(!j)return;let J=BigInt(`0x${j[1]}`);if(J<=0n)return;let V=`msg_${(J-1n).toString(16).padStart(12,"0")}${"z".repeat(14)}`;if(W&&V<=W)return;return V}async function K4(N,W,j,J={}){let Z=N.client.session,V=await KW(N.client,W),_={path:{id:W},body:{noReply:J.noReply??!0,parts:[{type:"text",text:j,ignored:!0}]}};if(J.beforeActiveAssistant){let B=V?.latestAssistantMessageId?j3(V.latestAssistantMessageId,V.latestUserMessageId):void 0;if(!B)throw Error("OpenCode active assistant ordering is unavailable for an immediate notification.");_.body.messageID=B}if(V?.agent)_.body.agent=V.agent;if(V?.model)_.body.model=V.model;if(V?.variant)_.body.variant=V.variant;if(typeof Z?.promptAsync==="function"){await Z.promptAsync(_);return}if(typeof Z?.prompt==="function"){await Promise.resolve(Z.prompt(_));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function J3(){let N=Error(bJ);throw N[$4]=$4,N[pJ]=!0,N.status=204,N.statusText=void 0,N.headers={},N.cookies={[Z4]:Z4,cookies:{}},N.body={[G4]:G4,_tag:"Empty"},N}function O3(N){if(N.sessionID==null)return!1;let W=N.model;return W?.providerID==="anthropic"||W?.api?.npm==="@ai-sdk/anthropic"||W?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function $3(N){if(N.some((W)=>W.includes("<use_parallel_tool_calls>")))return!1;return N.push(z4),!0}var Z3={input:0,output:0,cache:{read:0,write:0}},G3="Fable content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Fable cache warm.",X3="Fable recovery window complete. Returning to Fable 5.";function Y3(N){if(R0(N))return"Opus 5 content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Opus 5 cache warm.";return G3}function D3(N){if(R0(N))return"Opus 5 recovery window complete. Returning to Opus 5.";return X3}function V3(N){let W=N["claude-opus-4-8"]??N["claude-opus-4-5"]??Object.values(N)[0];if(!W)return N;return{...N,...Object.fromEntries(Object.values(Dj).map((j)=>[j.id,{...W,id:j.id,name:j.name,api:W.api?{...W.api,id:j.id}:void 0,cost:{input:E1.input,output:E1.output,cache:{read:E1.cacheRead,write:E1.cacheWrite5m}},limit:{...W.limit??{},context:Gj,output:Xj},capabilities:{...W.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:Yj}]))}}var _3=["low","medium","high","xhigh","max"];function K3(){return Object.fromEntries(_3.map((N)=>[N,{thinking:{type:"adaptive",display:"summarized"},effort:N}]))}function z3(N){return Object.fromEntries(Object.entries(N).map(([W,j])=>{let J=j.api?.id??j.id??W;return[W,R0(J)?{...j,variants:K3()}:j]}))}function w3(N){return Object.fromEntries(Object.entries(N).map(([W,j])=>[W,{...j,cost:Z3}]))}var p3=async(N)=>{N3();let{client:W}=N,j=globalThis.fetch,J=Q4(),Z=600000,V=50,_=new Map;function B(){let O=Date.now();for(let[$,X]of _)if(O-X.createdAt>Z)_.delete($)}function y(O,$){if(B(),_.size>=V){let X="",K=1/0;for(let[G,P]of _)if(P.createdAt<K)K=P.createdAt,X=G;if(X)_.delete(X)}_.set(O,$)}function r(O){B();let $=_.get(O);if(!$)return;if(Date.now()-$.createdAt>Z){_.delete(O);return}return $}let l;try{l=await q(J)}catch(O){let $=O instanceof Error?O.message:String(O);throw Error(`Failed to load account store: ${$}`,{cause:O instanceof Error?O:void 0})}let d=new KN,D0=new Cj({path:process.env.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE||Pj(J)}),I=new e4({storage:l,onMainQuotaFetched:async(O,$,X,K)=>{try{let G=await q(J)??H0(),P=f4(G);if(P&&P.checkedAt>=K&&p4(P.quota,G,P.checkedAt)>Date.now()){I.seedMainFromStorage(G);return}G.quota=G.quota??{},G.quota.mainQuota=O,G.quota.mainQuotaCheckedAt=$,G.quota.mainQuotaToken=X,G.quota.mainLastQuotaApiError=void 0,await a0(G,J,{mainQuota:!0})}catch(G){k.warn("quota","failed to persist main quota",{error:G instanceof Error?G.message:String(G)})}},onApiError:async(O)=>{try{let $=await q(J)??H0();$.quota=$.quota??{},$.quota.mainLastQuotaApiError=O,await a0($,J,{mainQuota:!0})}catch($){k.warn("quota","failed to persist backoff state",{error:$ instanceof Error?$.message:String($)})}}}),T0=new Map;async function P0(O,$,X){if(X?.aborted)return;let K=`${O}:${n1($)}`,G=T0.get(K);if(!G){let P=Nj({accessToken:$,fetchImpl:j,signal:X}).catch((F)=>{k.debug("quota","failed to hydrate account profile",{account:O,error:F instanceof Error?F.message:String(F)});return}).finally(()=>{if(T0.get(K)===P)T0.delete(K)});G=P,T0.set(K,G)}if(!X)return G;return new Promise((P)=>{let F=!1,z=(h)=>{if(F)return;F=!0,X.removeEventListener("abort",L),P(h)},L=()=>z(void 0);if(X.addEventListener("abort",L,{once:!0}),X.aborted)L();G.then(z)})}async function E0(O){try{if(O.accountId==="main"){let $=await $0?.();if($?.type!=="oauth"||$.access!==O.accessToken)return!1}return await C4({accountId:O.accountId,profile:O.profile,expectedTokenFingerprint:n1(O.accessToken)},J)}catch($){k.debug("quota","failed to persist account profile",{account:O.accountId,error:$ instanceof Error?$.message:String($)});return}}async function b0(O,$,X){if(process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION==="1")return O;let K=Date.now();if($&&O.main?.profile&&!WN(O.main.profile,$))O.main.profile=void 0,E0({accountId:"main",accessToken:$,profile:void 0}).catch(()=>{});if($&&!gN(O.main?.profile,K)){let G=await P0("main",$,X);if(G)O.main={type:"opencode",provider:"anthropic",profile:G},E0({accountId:"main",accessToken:$,profile:G}).catch(()=>{})}for(let G of O.accounts){if(X?.aborted)break;if(!N0(G)||!G.access)continue;let P=G.access;if(G.profile&&!WN(G.profile,P))G.profile=void 0,E0({accountId:G.id,accessToken:P,profile:void 0}).catch(()=>{});if(gN(G.profile,K))continue;let F=await P0(G.id,P,X);if(F)G.profile=F,E0({accountId:G.id,accessToken:P,profile:F}).catch(()=>{})}return O}let c0=new Set;async function v0(O,$){let X=await q(J)??H0();if(O.accountId==="main"){let G;try{let P=await $0?.();if(P?.type==="oauth")G=P.access}catch{}if(G!==O.accessToken){k.trace("quota","skipped stale main response quota persistence");return}X.quota=X.quota??{},X.quota.mainQuota=$.quota,X.quota.mainQuotaCheckedAt=$.checkedAt,X.quota.mainQuotaToken=n1(O.accessToken),await a0(X,J,{mainQuota:!0});return}let K=X.accounts.find((G)=>G.id===O.accountId&&N0(G)&&G.access===O.accessToken);if(!K)return;K.quota=$.quota,await a0(X,J,{accounts:[O.accountId]})}function K1(O){k.warn("quota","failed to persist harvested response quota",{error:O instanceof Error?O.message:String(O)})}function W1(O){let $=O instanceof Error?O.name:typeof O,X=O instanceof Error?O.message:String(O),K=`${$}:${X}`;if(c0.has(K))return;c0.add(K),k.warn("quota","failed to normalize response quota headers",{error:X})}function L0(O,$){try{if(!a4(O)){k.trace("quota","skipped non-quota response headers",{account:$.accountId});return}let X=t4(O),K=$.accountId==="main"?I.pushMainFromHeaders($.accessToken,X):I.pushFallbackFromHeaders($.accountId,$.accessToken,X);v0($,K).catch(K1),u0().catch(()=>{}),k.debug("quota","harvested response quota",{account:$.accountId,fiveHourPercent:K.quota.five_hour?.usedPercent,sevenDayPercent:K.quota.seven_day?.usedPercent,source:"headers"})}catch(X){W1(X)}}let q0=new i4({quotaManager:I,onFallbackStorageChanged:()=>{u0().catch(()=>{})}});q0.startBackgroundRefresh();let O0=null,S0=new s4({directory:process.env.OPENCODE_ANTHROPIC_AUTH_CACHEKEEP_REGISTRY_DIR||r4("opencode")}),M0=[],y0=new o4({loadStorage:()=>q(J),onTrackedSessionsChanged:async(O)=>{await S0.publish(O),M0=await S0.list(O)},prepareHeaders:async(O,$)=>{let X,K=$.oauthAccountId;if(K&&K!=="main"){let G=await q(J),P=G?.accounts.find((z)=>z.id===K&&z.enabled!==!1&&N0(z));if(!P||!G)throw Error(`OAuth account ${K} is unavailable for cache prewarm`);let F=P;try{F=await q0.refreshAccount(P,G)}catch(z){k.warn("cachekeep","fallback token refresh failed",{accountId:K,error:z instanceof Error?z.message:String(z)})}if(X=F.access,!X)throw Error(`OAuth account ${K} has no access token for cache prewarm`)}else{if(!$0)return O;let G=await $0();if(G.type!=="oauth")return O;if(!G.access||G.expires&&G.expires<Date.now()){if(!O0)return O;G.access=await O0()}X=G.access}if(!X)return O;try{let G=JSON.parse($.bodyText),P=await qN(X,typeof G.model==="string"?G.model:void 0);if(O.delete("anthropic-beta"),M1(O,X,{body:G,identity:P}),O.set("anthropic-beta",H1(O.get("anthropic-beta"),[l4])),G.speed==="fast")p1(O)}catch{M1(O,X)}return O}}),h0=new Map;function j1(O){let $=O.plan.sessionId,X=R0(O.plan.requestedModel)?"Opus 5":"Fable",K=async()=>{let z=O.warmTarget;if(!z){k.debug("fable-fallback","cache warm skipped",{session:$,reason:"Opus response was not served by an OAuth route"});return}let L=j4(z.bodyText,O.plan.requestedModel);if(!L.ok){k.warn("fable-fallback","cache warm skipped",{session:$,reason:L.reason});return}try{let h=await y0.prewarmNow({sessionId:$,url:z.url,headers:z.headers,bodyText:L.bodyText,oauthAccountId:d.recoveryAccount(O.plan)??z.oauthAccountId});if(h.ok){k.debug("fable-fallback",`${X} cache warmed`,{session:$,remaining:d.remaining(O.plan),...h.usage&&{usage:h.usage}});return}k.warn("fable-fallback",`${X} cache warm skipped`,{session:$,status:h.status,reason:h.reason})}catch(h){k.warn("fable-fallback",`${X} cache warm failed`,{session:$,error:h instanceof Error?h.message:String(h)})}},{recoveryKey:G}=O.plan,F=(h0.get(G)??Promise.resolve()).then(K,K);return h0.set(G,F),F.finally(()=>{if(h0.get(G)===F)h0.delete(G)}),F}async function J1(){return M0=await S0.list(y0.trackedSessions()),M0}if(x1({enabled:B1(l),mode:I1(l)}),JN(r1(l)),$N(s1(l)),!process.env.OPENCODE_ANTHROPIC_AUTH_LOG_LEVEL)U4(e1(l)??"info");let S1=null;if(N.directory){let O=globalThis;if(O.__anthropicAuthRpcServer)await O.__anthropicAuthRpcServer.stop().catch(()=>{}),O.__anthropicAuthRpcServer=void 0;try{S1=await QW({dir:Hj(N.directory),drain:UW,apply:yj}),O.__anthropicAuthRpcServer=S1}catch($){k.warn("rpc","failed to start",{error:$ instanceof Error?$.message:String($)})}}let V0={activeId:"main",route:"main"},z1=Lj(),B0=new Map;function m0(O,$,X){if(!O||!$)return O;let K={...O,accounts:O.accounts.map((F)=>{let z=$.accounts.find((L)=>L.id===F.id);if(!N0(F)||!z||!N0(z)||!F.access||z.access!==F.access)return F;return{...F,profile:z.profile}})},G=O.main?.profile,P=O.main??$.main;if(X&&P&&(!G||WN(G,X)))K.main={...P,profile:$.main?.profile};return K}function p0(O,$){I.updateStorage(O),I.seedMainFromStorage(O,$.mainAccessToken),I.seedFallbacksFromAccounts((O?.accounts??[]).filter(N0));let X=I.getMain($.mainAccessToken),K=I.getLastApiError(),G=O?.refresh?.mainLastRefreshError;return{main:{quota:X?.quota??null,tierLabel:jN(O?.main?.profile),quotaBackedOff:I.isBackedOff(),quotaBackoffUntil:K?.nextRetryAt,refreshBackedOff:G?t0(G,$.mainRefreshToken,Date.now()):!1,refreshBackoffUntil:G?.nextRetryAt},fallbacks:(O?.accounts??[]).filter((P)=>P.enabled!==!1&&N0(P)).map((P)=>({id:P.id,label:P.label,tierLabel:jN(P.profile),quota:P.access?I.getFallback(P.id,P.access)?.quota??null:null,needsReauth:P.lastRefreshError!=null&&t0(P.lastRefreshError,P.refresh,Date.now())&&X1(P.lastRefreshError),enabled:P.enabled!==!1})),activeId:$.activeId,route:$.route,relay:(()=>{let P=uN(O);return P?{enabled:!0,transport:P.transport??"http"}:null})(),fastMode:ON(),cacheKeep:{enabled:kN(O),window:RN(O)?"always":O?.cacheKeep?.startHour!=null&&O?.cacheKeep?.endHour!=null?`${O.cacheKeep.startHour}-${O.cacheKeep.endHour}`:void 0,trackedSessions:M0.length},fableRecoveries:B0.size>0?[...B0.values()]:void 0,lastUpdated:Date.now()}}function I0(O,$){let X=$.routingAuthoritative!==!1;if(X)V0={activeId:$.activeId,route:$.route};let K=p0(O,$);return Bj(K,z1,{routingAuthoritative:X,resolvePreservedRouting:X?void 0:async(G)=>{let P=await rJ(G,()=>q(J),{activeId:K.activeId,route:K.route}),F=$.useHydratedProfiles?m0(P.freshStorage,O,$.mainAccessToken):P.freshStorage;return{activeId:P.activeId,route:P.route,state:p0(F,{...$,activeId:P.activeId,route:P.route})}},onRoutingResolved:X?void 0:(G)=>{V0=G}}).catch((G)=>k.warn("sidebar","state write failed",{error:G instanceof Error?G.message:String(G)}))}async function u0(){let O=await q(J),$,X;if($0)try{let K=await $0();$=K.access,X=K.refresh}catch{}I0(O,{activeId:V0.activeId,route:V0.route,mainAccessToken:$,mainRefreshToken:X,routingAuthoritative:!1})}function v1(O,$){if(!$)return;if(O?.quota?.enabled!==!0)return;if(I.getMain($))return;if(YN)return;YN=!0,I.refreshMain($).then(()=>u0()).catch(()=>{}).finally(()=>{YN=!1})}let $0=null,YN=!1,O1=null,q1=0;function xj(O){let $=O?.refresh?.refreshBeforeExpiryMinutes??cJ;return Math.max(Ij,$)*60000}function Tj(O){return O?.refresh?.enabled!==!1}async function rN(O){if(!O)return;let $=await q(J),X=$?.refresh?.mainLastRefreshError;if(!$?.refresh||!X?.tokenHash)return;let K=t1(O);if(X.tokenHash===K)return;if(X.nextRetryAt&&X.nextRetryAt>Date.now()){a("[refresh] opencode main oauth keeping backoff despite token rotation",{nextRetryAt:X.nextRetryAt,retryCount:X.retryCount,remainingMs:X.nextRetryAt-Date.now()});return}$.refresh.mainLastRefreshError=void 0,await a0($,J,{mainRefresh:!0}),a("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:X.checkedAt,previousNextRetryAt:X.nextRetryAt,previousRetryCount:X.retryCount})}async function Ej(){let O=[],$;if($0)try{let z=await $0();if(z.type==="oauth"&&z.access){$=z.access;let L=await I.refreshMain(z.access);O.push({name:"OpenCode anthropic",role:"main",quota:L})}else if(z.type==="oauth")O.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(z){let L=z instanceof Error?z.message:String(z);O.push({name:"OpenCode anthropic",role:"main",error:L.includes("429")?"Usage API rate limited — try again in a moment":L})}let{storage:X,errors:K}=await q0.refreshQuotaForAllAccounts({force:!0}),G=await b0(X??H0(),$,AbortSignal.timeout(3000)),P=O.find((z)=>z.role==="main");if(P)P.tierLabel=jN(G.main?.profile);let F=new Map(K.map((z)=>[z.accountId,z.message]));if(O.push(...Vj(G,F)),!$0)O.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return _j({accounts:O,refreshedAt:Date.now()})}async function sN(O){if($0)try{let $=await $0();I0(O,{activeId:V0.activeId,route:V0.route,mainAccessToken:$.access,mainRefreshToken:$.refresh,routingAuthoritative:!1})}catch{}}function DN(O,$,X,K){if(B0.delete(O.sessionId),B0.set(O.sessionId,{...O,changedAt:Date.now()}),B0.size>128){let G=B0.keys().next().value;if(G)B0.delete(G)}if(I0($,{activeId:V0.activeId,route:V0.route,mainAccessToken:X.access,mainRefreshToken:X.refresh,routingAuthoritative:!1}),!K||wN(O.sessionId))return;K4(N,O.sessionId,K,{noReply:!0,beforeActiveAssistant:!0}).catch((G)=>{k.warn("fable-fallback","Desktop notification failed",{session:O.sessionId,error:G instanceof Error?G.message:String(G)})})}function Sj(O,$,X){if(!O||!B0.delete(O))return;I0($,{activeId:V0.activeId,route:V0.route,mainAccessToken:X.access,mainRefreshToken:X.refresh,routingAuthoritative:!1})}async function vj(O){let $=d4(O);if($.type==="enable"||$.type==="disable"){let P=$.type==="enable",F=await L4(P),z=I1(F);return x1({enabled:P,mode:z}),k.info("commands","cache enabled changed",{enabled:P}),NN({argumentsText:O,enabled:P,mode:z})}if($.type==="mode"){let P=await M4($.mode),F=B1(P);return x1({enabled:F,mode:$.mode}),k.info("commands","cache mode changed",{mode:$.mode}),NN({argumentsText:O,enabled:F,mode:$.mode})}let X=await q(J),K=B1(X),G=I1(X);return x1({enabled:K,mode:G}),NN({argumentsText:O,enabled:K,mode:G})}async function qj(O){let $=c4(O),X=await q(J);if($.type==="window")X=await F4($.startHour,$.endHour),k.info("commands","cachekeep schedule changed",{schedule:`${$.startHour}-${$.endHour}`});else if($.type==="always")X=await x4(),k.info("commands","cachekeep schedule changed",{schedule:"always"});else if($.type==="disable")X=await T4(!1),k.info("commands","cachekeep enabled changed",{enabled:!1});else if($.type==="subagents")X=await S4($.enabled),k.info("commands","cachekeep subagents changed",{subagents:$.enabled});let K=fN(X),G=await J1(),P=G.length?Math.min(...G.map((F)=>F.nextPrewarmAt)):void 0;return n4({argumentsText:O,enabled:u4(X),always:RN(X),window:K,hybridActive:kN(X),trackedSessions:G.length,trackedSessionDetails:G,nextPrewarmAt:P})}async function Aj(O){let $=Jj(O);if($.type==="enable"||$.type==="disable"){let G=$.type==="enable";return await B4(G),JN(G),k.info("commands","dump changed",{enabled:G}),mN({argumentsText:O,enabled:G})}let X=await q(J),K=r1(X);return JN(K),mN({argumentsText:O,enabled:K})}async function fj(O){let $=Oj(O);if($.type==="enable"||$.type==="disable"){let G=$.type==="enable";return await I4(G),$N(G),k.info("commands","fast mode changed",{enabled:G}),pN({argumentsText:O,enabled:G})}let X=await q(J),K=s1(X);return $N(K),pN({argumentsText:O,enabled:K})}async function Rj(O,$){let X=wj(O);if(X.type==="mode")return await zj(X.mode,J),k.info("commands","routing mode changed",{mode:X.mode}),oN({argumentsText:O,mode:X.mode});if(X.type==="reset"&&$)await D0.clear($),k.info("commands","sticky routing assignment reset");let K=await q(J);return oN({argumentsText:O,mode:_1(K)})}async function kj(O){let $=Zj(O);if($.type==="level")return await A4($.level),k.info("commands","log level changed",{level:$.level}),lN({argumentsText:O,level:$.level});let X=await q(J),K=e1(X)??"info";return lN({argumentsText:O,level:K})}async function gj(O,$){let X=Wj(O);if(X.type==="add-apikey"){if(!X.apiKey)return{text:"API key is required",accounts:k0(await q(J)??H0())};let z=X.label?.trim()||void 0,L=Date.now(),h=X.baseURL?.trim()||"https://api.kie.ai/claude";if(!o1(h))return{text:"Invalid base URL. Must be an http(s) URL without embedded credentials.",accounts:k0(await q(J)??H0())};let W0=X.authHeader??"authorization-bearer",Z0={id:z||IN(),label:z||void 0,type:"api",apiKey:X.apiKey,baseURL:h,authHeader:W0,enabled:!0,addedAt:L,lastUsed:L};await SN(Z0,J),k.info("commands","account added",{id:Z0.id,label:Z0.label,type:"apikey"});let Q0=await q(J);await sN(Q0);let n0=k0(Q0??{version:1,accounts:[]});return{text:`API key account "${Z0.label??Z0.id}" added.`,accounts:n0}}if(X.type==="add-oauth-start"){let z=await c1("max"),L={state:z.state,verifier:z.verifier,redirectUri:z.redirectUri,createdAt:Date.now()};return y($??"default",L),{text:`Open this URL in your browser:
|
|
11
|
-
${
|
|
12
|
-
`))}}if($?.length)for(let
|
|
13
|
-
`))}if(!
|
|
19
|
+
`);if(W===-1)return J===-1?null:{index:J,length:4};if(J===-1||W<J)return{index:W,length:2};return{index:J,length:4}}function sj(j,W){if(!W)return;j.pending+=W;while(!0){let J=b4(j.pending);if(!J)break;let O=j.pending.slice(0,J.index);j.pending=j.pending.slice(J.index+J.length);let Z=TW(O);if(!Z)continue;if(j.events++,j4(j.eventCounts,Z.event??"unknown"),j4(j.typeCounts,Z.type),j4(j.deltaTypeCounts,Z.deltaType),j4(j.contentBlockTypeCounts,Z.contentBlockType),j.textDeltaBytes+=Z.textDeltaBytes??0,j.thinkingDeltaBytes+=Z.thinkingDeltaBytes??0,j.inputJsonDeltaBytes+=Z.inputJsonDeltaBytes??0,j.signatureDeltaBytes+=Z.signatureDeltaBytes??0,j.redactedThinkingBytes+=Z.redactedThinkingBytes??0,j.last=Z,Z.dataBytes>0&&!Z.type&&!Z.event)j.parseErrors++}}function K7(){return{pending:"",completed:!1}}function _7(j,W){if(!W||j.completed)return null;j.pending+=W;while(!0){let J=b4(j.pending);if(!J)return null;let O=j.pending.slice(0,J.index);j.pending=j.pending.slice(J.index+J.length);let Z=TW(O);if(Z?.type!=="message_delta"||!Z.stopReason)continue;return j.completed=!0,Z.stopReason==="refusal"?{type:"content-filter"}:{type:"complete",finishReason:Z.stopReason}}}function U7(){return{pending:""}}function Q7(j,W){let J=j?.toLowerCase(),O=W.toLowerCase();return J==="api_error"||J==="overloaded_error"||J==="server_error"||J==="internal_server_error"||O.includes("internal server error")||O.includes("server overloaded")}function w7(j,W){let J=j?`${j}: ${W}`:W,O=Error(`Anthropic stream error: ${J}`);if(O.code="ECONNRESET",O.syscall="anthropic-sse",j)O.providerErrorType=j;return O}function P7(j){let W=f0(j)?"Opus 5":"Fable",J=Error(`${W} response was blocked by the provider content filter; retrying with Opus 4.8`);return J.code="ECONNRESET",J.syscall="anthropic-sse",J.providerErrorType="refusal",J}function H7(j){if(!j.includes("error"))return null;let W,J=[];for(let r of j.split(/\r?\n/)){if(r.startsWith("event:")){W=r.slice(6).trim();continue}if(r.startsWith("data:")){let o=r.slice(5);J.push(o.startsWith(" ")?o.slice(1):o)}}let O=J.join(`
|
|
20
|
+
`);if(!O||O==="[DONE]")return null;let Z;try{Z=JSON.parse(O)}catch{return null}let Y=r0(Z);if(W!=="error"&&M0(Y,"type")!=="error")return null;let z=r0(Y?.error),B=M0(z,"type")??M0(z,"code")??void 0,x=M0(z,"message")??M0(Y,"message")??B??"Anthropic stream error";if(!Q7(B,x))return null;return w7(B,x)}function tj(j,W){if(!W)return null;j.pending+=W;while(!0){let J=b4(j.pending);if(!J)break;let O=j.pending.slice(0,J.index);j.pending=j.pending.slice(J.index+J.length);let Z=H7(O);if(Z)return Z}return null}function C7(j){return{sseEvents:j.events,ssePendingChars:j.pending.length,sseParseErrors:j.parseErrors,sseEventCounts:{...j.eventCounts},sseTypeCounts:{...j.typeCounts},sseDeltaTypeCounts:{...j.deltaTypeCounts},sseContentBlockTypeCounts:{...j.contentBlockTypeCounts},sseTextDeltaBytes:j.textDeltaBytes,sseThinkingDeltaBytes:j.thinkingDeltaBytes,sseInputJsonDeltaBytes:j.inputJsonDeltaBytes,sseSignatureDeltaBytes:j.signatureDeltaBytes,sseRedactedThinkingBytes:j.redactedThinkingBytes,sseLastEvent:j.last?{...j.last}:void 0}}function xW(j,W={}){if(!j.body)return j;let J=j.body.getReader(),O=new TextDecoder,Z=new TextEncoder,Y="",z=0,B=0,x=0,r=0,o=0,s=!1,h=!1,u=a(),e=a(),m=W.perf?V7():void 0,G0=U7(),$0=W.onContentFilter||W.onComplete?K7():void 0,Z0=!1,E=!1,m0=(X0=!1)=>{if(!W.onContentFilter)return!1;if(!Z0)Z0=!0,E=W.onContentFilter({completedToolUse:X0})!==!1;return E},A0=W.serverSideFallbackModel?bj({requestedModel:W.serverSideFallbackModel,onOutcome:W.onServerSideFallbackOutcome,onRefusalAfterToolUse:W.onContentFilter?()=>m0(!0):void 0}):void 0,b0=(X0)=>{if(!$0)return null;let L0=_7($0,X0);if(L0?.type==="content-filter"&&W.onContentFilter)return m0()?P7(W.contentFilterModel):null;if(L0?.type==="complete")W.onComplete?.(L0.finishReason);return null},E0=()=>{if(h)return;h=!0,J.releaseLock()},G1=async(X0)=>{try{await J.cancel(X0)}catch{}finally{E0()}},M4=(X0={})=>({chunks:z,pulls:B,inputBytes:x,outputBytes:r,pendingChars:Y.length,rewriteMs:q0(o),totalMs:q0(a()-e),...m?C7(m):{},...X0}),p0=(X0,L0={})=>{W.perf?.(X0,M4(L0))};W.perf?.("stream_tool_prefix_wrapper_created",{status:j.status,hasBody:!0});let T4=new ReadableStream({async pull(X0){if(B++,!s)s=!0,p0("stream_tool_prefix_first_pull");while(!0){let L0=a();try{let{done:R0,value:d0}=await J.read(),l0=q0(a()-L0);if(R0){let K0=O.decode();if(m)sj(m,K0);let x4=a(),B1=A0?A0.push(K0)+A0.flush():K0,B0=tj(G0,K0)??b0(B1);if(B0)throw p0("stream_tool_prefix_retryable_error",{error:B0.message,providerErrorType:B0.providerErrorType}),await G1(B0),B0;let a0=uj(`${Y}${B1}`,!0);if(o+=a()-x4,a0.ready){let c1=Z.encode(a0.ready);r+=c1.byteLength,X0.enqueue(c1)}p0("stream_tool_prefix_rewrite",{readMs:l0}),E0(),X0.close();return}z++,x+=d0.byteLength;let i0=O.decode(d0,{stream:!0});if(m)sj(m,i0);let t0=a(),b1=A0?A0.push(i0):i0,X1=tj(G0,i0)??b0(b1);if(X1)throw p0("stream_tool_prefix_retryable_error",{error:X1.message,providerErrorType:X1.providerErrorType,readMs:l0,lastChunkBytes:d0.byteLength}),E0(),X1;let p1=Y+b1,z0=uj(p1);if(o+=a()-t0,Y=z0.pending,z0.ready){let K0=Z.encode(z0.ready);r+=K0.byteLength,X0.enqueue(K0)}let i1=a();if(z===1||z%25===0||i1-u>5000)u=i1,p0("stream_tool_prefix_progress",{readMs:l0,lastChunkBytes:d0.byteLength});if(z0.ready)return}catch(R0){throw p0("stream_tool_prefix_error",{error:R0 instanceof Error?R0.message:String(R0)}),E0(),R0}}},async cancel(X0){p0("stream_tool_prefix_cancel",{reason:X0 instanceof Error?X0.message:String(X0)});try{await J.cancel(X0)}finally{E0()}}});return new Response(T4,{status:j.status,statusText:j.statusText,headers:j.headers})}var L7="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",FW="~effect/http/HttpServerResponse",EW="~effect/http/Cookies",SW="~effect/http/HttpBody",B7="~effect/ErrorReporter/ignore",I7=60000,M7=60000,T7=5000,qW=200,nJ=240,x7=nJ,F7=600000;function E7(j,W){return(j?.accounts??[]).some((J)=>J.id===W&&J.enabled!==!1&&D0(J))}function S7(j){let W=(j?.accounts??[]).find((J)=>J.enabled!==!1&&D0(J));if(L1(j)==="fallback-first"&&W)return{activeId:W.id,route:"fallback-first"};return{activeId:"main",route:"main"}}function AW(j,W){if(j?.activeId==="main"||j?.activeId&&E7(W,j.activeId))return j;return S7(W)}function oJ(j,W,J){let O=Date.now()-j.lastUpdated;if(!j.activeId||O<0||O>F7)return AW(J,W);return AW(j,W)}async function q7(j,W,J){let O;try{O=await W()}catch(Z){return k.warn("sidebar","account storage reload failed; routing preserved",{message:Z instanceof Error?Z.message:String(Z)}),{...j.activeId?{activeId:j.activeId,route:j.route}:J??{activeId:"main",route:"main"},freshStorage:null}}return{...oJ(j,O,J),freshStorage:O}}async function A7(j){await B4()?.beforeStorageLoad?.();let W;try{W=await v(j)}catch{return{activeId:"main",route:"main",freshStorage:null}}finally{await B4()?.afterStorageLoad?.()}await B4()?.beforeSidebarRead?.();let J=await dJ();return{...oJ(J,W),freshStorage:W}}function f7(j){let W=Math.floor(j.retryAfterSeconds/60),J=j.retryAfterSeconds%60,O=`Retry in ${W}m ${J}s.`;return j.modelName?`${j.modelName} weekly limit reached, no routable accounts. ${O}`:`Killswitch: no routable accounts. ${O}`}function v7(j){if(!j.requestModelId)return{isScopedDriven:!1};if(!D1(j.mainQuota,j.storage))return{isScopedDriven:!1};let W=JJ(j.mainQuota,j.requestModelId);if(!W)return{isScopedDriven:!1};if(!Number.isFinite(W.remainingPercent))return{isScopedDriven:!1};let J=NJ(j.storage);if(W.remainingPercent<=J.scoped)return{isScopedDriven:!0,modelName:W.modelName,modelId:j.requestModelId};return{isScopedDriven:!1}}var R7=1,fW=!1;function I4(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function g(){return performance.now()}function W0(j){return Math.round(j*10)/10}function vW(j){return Math.floor(Math.random()*Math.max(0,j))}function O4(j){if(typeof j==="string")return j;if(j instanceof URL)return j.toString();return j.url}function $4(j,W){return W?.method??(j instanceof Request?j.method:void 0)}function RW(j){return j instanceof Error?j.message:String(j)}function k7(){if(fW||!1||!I4())return;fW=!0;let j=100,W=250,J=g()+j;setInterval(()=>{let O=g(),Z=O-J;if(J=O+j,Z<W)return;O0("[perf] opencode event_loop_lag",{lagMs:W0(Z),thresholdMs:W})},j).unref?.()}function g7(j){let W=g(),J={requestId:String(R7++),start:W,last:W,mark(O,Z){let Y=g();if(I4())O0("[perf] opencode request stage",{requestId:J.requestId,stage:O,deltaMs:W0(Y-J.last),totalMs:W0(Y-J.start),...Z});J.last=Y},done(O,Z){let Y=g();if(I4())O0("[perf] opencode request done",{requestId:J.requestId,stage:O,deltaMs:W0(Y-J.last),totalMs:W0(Y-J.start),...Z});J.last=Y}};if(I4())O0("[perf] opencode request start",{requestId:J.requestId,...j});return J}function h7(j,W){let J=/^msg_([0-9a-fA-F]{12})/.exec(j);if(!J)return;let O=BigInt(`0x${J[1]}`);if(O<=0n)return;let Y=`msg_${(O-1n).toString(16).padStart(12,"0")}${"z".repeat(14)}`;if(W&&Y<=W)return;return Y}async function kW(j,W,J,O={}){let Z=j.client.session,Y=await Sj(j.client,W),z={path:{id:W},body:{noReply:O.noReply??!0,parts:[{type:"text",text:J,ignored:!0}]}};if(O.beforeActiveAssistant){let B=Y?.latestAssistantMessageId?h7(Y.latestAssistantMessageId,Y.latestUserMessageId):void 0;if(!B)throw Error("OpenCode assistant ordering is unavailable for the fallback notification.");z.body.messageID=B}if(Y?.agent)z.body.agent=Y.agent;if(Y?.model)z.body.model=Y.model;if(Y?.variant)z.body.variant=Y.variant;if(typeof Z?.promptAsync==="function"){await Z.promptAsync(z);return}if(typeof Z?.prompt==="function"){await Promise.resolve(Z.prompt(z));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function y7(){let j=Error(L7);throw j[FW]=FW,j[B7]=!0,j.status=204,j.statusText=void 0,j.headers={},j.cookies={[EW]:EW,cookies:{}},j.body={[SW]:SW,_tag:"Empty"},j}function m7(j){if(j.sessionID==null)return!1;let W=j.model;return W?.providerID==="anthropic"||W?.api?.npm==="@ai-sdk/anthropic"||W?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function b7(j){if(j.some((W)=>W.includes("<use_parallel_tool_calls>")))return!1;return j.push(gW),!0}var p7={input:0,output:0,cache:{read:0,write:0}},i7="Fable content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Fable cache warm.",c7="Fable recovery window complete. Returning to Fable 5.";function u7(j){if(f0(j))return"Opus 5 content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Opus 5 cache warm.";return i7}function d7(j){if(f0(j))return"Opus 5 recovery window complete. Returning to Opus 5.";return c7}function zj(j){if(f0(j))return"Opus 5";if(j==="claude-fable-5"||j.startsWith("claude-fable-5-"))return"Fable 5";if(j==="claude-opus-4-8"||j.startsWith("claude-opus-4-8-"))return"Opus 4.8";return j}function l7(j,W){return`Anthropic safety fallback active: ${zj(j)} → ${zj(W)}. Follow-up requests may remain on the fallback model for about one hour.`}function n7(j){return`Anthropic safety fallback ended. Returning to ${zj(j)}.`}function o7(j){let W=j["claude-opus-4-8"]??j["claude-opus-4-5"]??Object.values(j)[0];if(!W)return j;return{...j,...Object.fromEntries(Object.values(fJ).map((J)=>[J.id,{...W,id:J.id,name:J.name,api:W.api?{...W.api,id:J.id}:void 0,cost:{input:m1.input,output:m1.output,cache:{read:m1.cacheRead,write:m1.cacheWrite5m}},limit:{...W.limit??{},context:SJ,output:qJ},capabilities:{...W.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:AJ}]))}}var r7=["low","medium","high","xhigh","max"];function s7(){return Object.fromEntries(r7.map((j)=>[j,{thinking:{type:"adaptive",display:"summarized"},effort:j}]))}function t7(j){return Object.fromEntries(Object.entries(j).map(([W,J])=>{let O=J.api?.id??J.id??W;return[W,f0(O)?{...J,variants:s7()}:J]}))}function a7(j){return Object.fromEntries(Object.entries(j).map(([W,J])=>[W,{...J,cost:p7}]))}var e7=async(j,W={})=>{let J={setTimeout:globalThis.setTimeout,setInterval:globalThis.setInterval,clearInterval:globalThis.clearInterval,...W};k7();let{client:O}=j,Z=globalThis.fetch,Y=bW(),z=600000,B=50,x=new Map;function r(){let N=Date.now();for(let[$,D]of x)if(N-D.createdAt>z)x.delete($)}function o(N,$){if(r(),x.size>=B){let D="",X=1/0;for(let[G,K]of x)if(K.createdAt<X)X=K.createdAt,D=G;if(D)x.delete(D)}x.set(N,$)}function s(N){r();let $=x.get(N);if(!$)return;if(Date.now()-$.createdAt>z){x.delete(N);return}return $}let h;try{h=await v(Y)}catch(N){let $=N instanceof Error?N.message:String(N);throw Error(`Failed to load account store: ${$}`,{cause:N instanceof Error?N:void 0})}let u=yj(process.env.OPENCODE_ANTHROPIC_AUTH_FALLBACK_MODE),e=new q4,m=new Map,G0=new Map,$0=new Map,Z0=new iJ({path:process.env.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE||bJ(Y)}),E=new LJ({storage:h,onMainQuotaFetched:async(N,$,D,X)=>{try{let G=await v(Y)??x0(),K=WJ(G);if(K&&K.checkedAt>=X&&GJ(K.quota,G,K.checkedAt)>Date.now()){E.seedMainFromStorage(G);return}G.quota=G.quota??{},G.quota.mainQuota=N,G.quota.mainQuotaCheckedAt=$,G.quota.mainQuotaToken=D,G.quota.mainLastQuotaApiError=void 0,await $1(G,Y,{mainQuota:!0})}catch(G){k.warn("quota","failed to persist main quota",{error:G instanceof Error?G.message:String(G)})}},onApiError:async(N)=>{try{let $=await v(Y)??x0();$.quota=$.quota??{},$.quota.mainLastQuotaApiError=N,await $1($,Y,{mainQuota:!0})}catch($){k.warn("quota","failed to persist backoff state",{error:$ instanceof Error?$.message:String($)})}}}),m0=new Map;async function A0(N,$,D){if(D?.aborted)return;let X=`${N}:${D4($)}`,G=m0.get(X);if(!G){let K=BJ({accessToken:$,fetchImpl:Z,signal:D}).catch((T)=>{k.debug("quota","failed to hydrate account profile",{account:N,error:T instanceof Error?T.message:String(T)});return}).finally(()=>{if(m0.get(X)===K)m0.delete(X)});G=K,m0.set(X,G)}if(!D)return G;return new Promise((K)=>{let T=!1,_=(b)=>{if(T)return;T=!0,D.removeEventListener("abort",I),K(b)},I=()=>_(void 0);if(D.addEventListener("abort",I,{once:!0}),D.aborted)I();G.then(_)})}async function b0(N){try{if(N.accountId==="main"){let $=await U0?.();if($?.type!=="oauth"||$.access!==N.accessToken)return!1}return await pW({accountId:N.accountId,profile:N.profile,expectedTokenFingerprint:D4(N.accessToken)},Y)}catch($){k.debug("quota","failed to persist account profile",{account:N.accountId,error:$ instanceof Error?$.message:String($)});return}}async function E0(N,$,D){if(process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION==="1")return N;let X=Date.now();if($&&N.main?.profile&&!Q4(N.main.profile,$))N.main.profile=void 0,b0({accountId:"main",accessToken:$,profile:void 0}).catch(()=>{});if($&&!e4(N.main?.profile,X)){let G=await A0("main",$,D);if(G)N.main={type:"opencode",provider:"anthropic",profile:G},b0({accountId:"main",accessToken:$,profile:G}).catch(()=>{})}for(let G of N.accounts){if(D?.aborted)break;if(!D0(G)||!G.access)continue;let K=G.access;if(G.profile&&!Q4(G.profile,K))G.profile=void 0,b0({accountId:G.id,accessToken:K,profile:void 0}).catch(()=>{});if(e4(G.profile,X))continue;let T=await A0(G.id,K,D);if(T)G.profile=T,b0({accountId:G.id,accessToken:K,profile:T}).catch(()=>{})}return N}let G1=new Set;async function M4(N,$){let D=await v(Y)??x0();if(N.accountId==="main"){let G;try{let K=await U0?.();if(K?.type==="oauth")G=K.access}catch{}if(G!==N.accessToken){k.trace("quota","skipped stale main response quota persistence");return}D.quota=D.quota??{},D.quota.mainQuota=$.quota,D.quota.mainQuotaCheckedAt=$.checkedAt,D.quota.mainQuotaToken=D4(N.accessToken),await $1(D,Y,{mainQuota:!0});return}let X=D.accounts.find((G)=>G.id===N.accountId&&D0(G)&&G.access===N.accessToken);if(!X)return;X.quota=$.quota,await $1(D,Y,{accounts:[N.accountId]})}function p0(N){k.warn("quota","failed to persist harvested response quota",{error:N instanceof Error?N.message:String(N)})}function T4(N){let $=N instanceof Error?N.name:typeof N,D=N instanceof Error?N.message:String(N),X=`${$}:${D}`;if(G1.has(X))return;G1.add(X),k.warn("quota","failed to normalize response quota headers",{error:D})}function X0(N,$){try{if(!HJ(N)){k.trace("quota","skipped non-quota response headers",{account:$.accountId});return}let D=CJ(N),X=$.accountId==="main"?E.pushMainFromHeaders($.accessToken,D):E.pushFallbackFromHeaders($.accountId,$.accessToken,D);M4($,X).catch(p0),a0().catch(()=>{}),k.debug("quota","harvested response quota",{account:$.accountId,fiveHourPercent:X.quota.five_hour?.usedPercent,sevenDayPercent:X.quota.seven_day?.usedPercent,source:"headers"})}catch(D){T4(D)}}let L0=new XJ({quotaManager:E,setIntervalImpl:J.setInterval,clearIntervalImpl:J.clearInterval,onFallbackStorageChanged:()=>{a0().catch(()=>{})}});L0.startBackgroundRefresh();let R0=null,d0=new PJ({directory:process.env.OPENCODE_ANTHROPIC_AUTH_CACHEKEEP_REGISTRY_DIR||wJ("opencode")}),l0=[],i0=new QJ({loadStorage:()=>v(Y),setIntervalImpl:J.setInterval,clearIntervalImpl:J.clearInterval,onTrackedSessionsChanged:async(N)=>{await d0.publish(N),l0=await d0.list(N)},prepareHeaders:async(N,$)=>{let D,X=$.oauthAccountId;if(X&&X!=="main"){let G=await v(Y),K=G?.accounts.find((_)=>_.id===X&&_.enabled!==!1&&D0(_));if(!K||!G)throw Error(`OAuth account ${X} is unavailable for cache prewarm`);let T=K;try{T=await L0.refreshAccount(K,G)}catch(_){k.warn("cachekeep","fallback token refresh failed",{accountId:X,error:_ instanceof Error?_.message:String(_)})}if(D=T.access,!D)throw Error(`OAuth account ${X} has no access token for cache prewarm`)}else{if(!U0)return N;let G=await U0();if(G.type!=="oauth")return N;if(!G.access||G.expires&&G.expires<Date.now()){if(!R0)return N;G.access=await R0()}D=G.access}if(!D)return N;try{let G=JSON.parse($.bodyText),K=await o4(D,typeof G.model==="string"?G.model:void 0);if(N.delete("anthropic-beta"),v1(N,D,{body:G,identity:K}),N.set("anthropic-beta",A1(N.get("anthropic-beta"),[zJ])),G.speed==="fast")J4(N)}catch{v1(N,D)}return N}}),t0=new Map;function b1(N){let $=N.plan.sessionId,D=f0(N.plan.requestedModel)?"Opus 5":"Fable",X=async()=>{let _=N.warmTarget;if(!_){k.debug("fable-fallback","cache warm skipped",{session:$,reason:"Opus response was not served by an OAuth route"});return}let I=MW(_.bodyText,N.plan.requestedModel);if(!I.ok){k.warn("fable-fallback","cache warm skipped",{session:$,reason:I.reason});return}try{let b=await i0.prewarmNow({sessionId:$,url:_.url,headers:_.headers,bodyText:I.bodyText,oauthAccountId:e.recoveryAccount(N.plan)??_.oauthAccountId});if(b.ok){k.debug("fable-fallback",`${D} cache warmed`,{session:$,remaining:e.remaining(N.plan),...b.usage&&{usage:b.usage}});return}k.warn("fable-fallback",`${D} cache warm skipped`,{session:$,status:b.status,reason:b.reason})}catch(b){k.warn("fable-fallback",`${D} cache warm failed`,{session:$,error:b instanceof Error?b.message:String(b)})}},{recoveryKey:G}=N.plan,T=(t0.get(G)??Promise.resolve()).then(X,X);return t0.set(G,T),T.finally(()=>{if(t0.get(G)===T)t0.delete(G)}),T}async function X1(){return l0=await d0.list(i0.trackedSessions()),l0}if(h1({enabled:R1(h),mode:k1(h)}),P4(X4(h)),C4(V4(h)),!process.env.OPENCODE_ANTHROPIC_AUTH_LOG_LEVEL)yW(_4(h)??"info");let p1=null;if(j.directory){let N=globalThis;if(N.__anthropicAuthRpcServer)await N.__anthropicAuthRpcServer.stop().catch(()=>{}),N.__anthropicAuthRpcServer=void 0;try{p1=await Rj({dir:cJ(j.directory),drain:fj,apply:D3}),N.__anthropicAuthRpcServer=p1}catch($){k.warn("rpc","failed to start",{error:$ instanceof Error?$.message:String($)})}}let z0={activeId:"main",route:"main"},i1=uJ(),K0=new Map;function x4(N,$,D){if(!N||!$)return N;let X={...N,accounts:N.accounts.map((T)=>{let _=$.accounts.find((I)=>I.id===T.id);if(!D0(T)||!_||!D0(_)||!T.access||_.access!==T.access)return T;return{...T,profile:_.profile}})},G=N.main?.profile,K=N.main??$.main;if(D&&K&&(!G||Q4(G,D)))X.main={...K,profile:$.main?.profile};return X}function B1(N,$){E.updateStorage(N),E.seedMainFromStorage(N,$.mainAccessToken),E.seedFallbacksFromAccounts((N?.accounts??[]).filter(D0));let D=E.getMain($.mainAccessToken),X=E.getLastApiError(),G=N?.refresh?.mainLastRefreshError;return{main:{quota:D?.quota??null,tierLabel:w4(N?.main?.profile),quotaBackedOff:E.isBackedOff(),quotaBackoffUntil:X?.nextRetryAt,refreshBackedOff:G?Z1(G,$.mainRefreshToken,Date.now()):!1,refreshBackoffUntil:G?.nextRetryAt},fallbacks:(N?.accounts??[]).filter((K)=>K.enabled!==!1&&D0(K)).map((K)=>({id:K.id,label:K.label,tierLabel:w4(K.profile),quota:K.access?E.getFallback(K.id,K.access)?.quota??null:null,needsReauth:K.lastRefreshError!=null&&Z1(K.lastRefreshError,K.refresh,Date.now())&&s0(K.lastRefreshError),enabled:K.enabled!==!1})),activeId:$.activeId,route:$.route,relay:(()=>{let K=Gj(N);return K?{enabled:!0,transport:K.transport??"http"}:null})(),fastMode:H4(),cacheKeep:{enabled:a4(N),window:t4(N)?"always":N?.cacheKeep?.startHour!=null&&N?.cacheKeep?.endHour!=null?`${N.cacheKeep.startHour}-${N.cacheKeep.endHour}`:void 0,trackedSessions:l0.length},fableRecoveries:K0.size>0?[...K0.values()]:void 0,lastUpdated:Date.now()}}function B0(N,$){let D=$.routingAuthoritative!==!1;if(D)z0={activeId:$.activeId,route:$.route};let X=B1(N,$);return lJ(X,i1,{routingAuthoritative:D,resolvePreservedRouting:D?void 0:async(G)=>{let K=await q7(G,()=>v(Y),{activeId:X.activeId,route:X.route}),T=$.useHydratedProfiles?x4(K.freshStorage,N,$.mainAccessToken):K.freshStorage;return{activeId:K.activeId,route:K.route,state:B1(T,{...$,activeId:K.activeId,route:K.route})}},onRoutingResolved:D?void 0:(G)=>{z0=G}}).catch((G)=>k.warn("sidebar","state write failed",{error:G instanceof Error?G.message:String(G)}))}async function a0(){let N=await v(Y),$,D;if(U0)try{let X=await U0();$=X.access,D=X.refresh}catch{}B0(N,{activeId:z0.activeId,route:z0.route,mainAccessToken:$,mainRefreshToken:D,routingAuthoritative:!1})}function c1(N,$){if(!$)return;if(N?.quota?.enabled!==!0)return;if(E.getMain($))return;if(F4)return;F4=!0,E.refreshMain($).then(()=>a0()).catch(()=>{}).finally(()=>{F4=!1})}let U0=null,F4=!1,V1=null,u1=0;function rJ(N){let $=N?.refresh?.refreshBeforeExpiryMinutes??x7;return Math.max(nJ,$)*60000}function sJ(N){return N?.refresh?.enabled!==!1}async function Kj(N){if(!N)return;let $=await v(Y),D=$?.refresh?.mainLastRefreshError;if(!$?.refresh||!D?.tokenHash)return;let X=K4(N);if(D.tokenHash===X)return;if(!s0(D)&&D.nextRetryAt&&D.nextRetryAt>Date.now()){O0("[refresh] opencode main oauth keeping backoff despite token rotation",{nextRetryAt:D.nextRetryAt,retryCount:D.retryCount,remainingMs:D.nextRetryAt-Date.now()});return}$.refresh.mainLastRefreshError=void 0,await $1($,Y,{mainRefresh:!0}),O0("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:D.checkedAt,previousNextRetryAt:D.nextRetryAt,previousRetryCount:D.retryCount})}async function tJ(){let N=[],$;if(U0)try{let _=await U0();if(_.type==="oauth"&&_.access){$=_.access;let I=await E.refreshMain(_.access);N.push({name:"OpenCode anthropic",role:"main",quota:I})}else if(_.type==="oauth")N.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(_){let I=_ instanceof Error?_.message:String(_);N.push({name:"OpenCode anthropic",role:"main",error:I.includes("429")?"Usage API rate limited — try again in a moment":I})}let{storage:D,errors:X}=await L0.refreshQuotaForAllAccounts({force:!0}),G=await E0(D??x0(),$,AbortSignal.timeout(3000)),K=N.find((_)=>_.role==="main");if(K)K.tierLabel=w4(G.main?.profile);let T=new Map(X.map((_)=>[_.accountId,_.message]));if(N.push(...vJ(G,T)),!U0)N.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return RJ({accounts:N,refreshedAt:Date.now()})}async function _j(N){if(U0)try{let $=await U0();B0(N,{activeId:z0.activeId,route:z0.route,mainAccessToken:$.access,mainRefreshToken:$.refresh,routingAuthoritative:!1})}catch{}}function I1(N,$,D,X){if(K0.delete(N.sessionId),K0.set(N.sessionId,{...N,changedAt:Date.now()}),K0.size>128){let K=K0.keys().next().value;if(K)K0.delete(K)}if(B0($,{activeId:z0.activeId,route:z0.route,mainAccessToken:D.access,mainRefreshToken:D.refresh,routingAuthoritative:!1}),!X||f4(N.sessionId))return;let G=G0.get(N.sessionId)??[];if(G.push(X),G.length>4)G.splice(0,G.length-4);G0.delete(N.sessionId),G0.set(N.sessionId,G);while(G0.size>128){let K=G0.keys().next().value;if(K)G0.delete(K);else break}aJ(N.sessionId)}async function aJ(N){let $=j.client.session;if(typeof $?.status!=="function")return;try{let D=await Promise.resolve($.status()),X=D!==null&&typeof D==="object"?D:void 0,G=X&&Object.hasOwn(X,"data")?X.data:X;if(G===null||typeof G!=="object"||Array.isArray(G))return;let K=G[N];if(K===void 0){await d1(N);return}if(K!==null&&typeof K==="object"&&K.type==="idle")await d1(N)}catch{}}function d1(N){let $=$0.get(N);if($)return $;let D=(async()=>{while(!0){let G=G0.get(N)?.shift();if(!G){G0.delete(N);return}try{await kW(j,N,G,{noReply:!0,beforeActiveAssistant:!0})}catch(K){k.warn("fable-fallback","Desktop notification failed",{session:N,error:K instanceof Error?K.message:String(K)})}}})();return $0.set(N,D),D.finally(()=>{if($0.get(N)===D)$0.delete(N)}),D}function eJ(N,$,D,X){if($.fallback&&$.targetModel){let G=m.get(N.recoveryKey);m.delete(N.recoveryKey),m.set(N.recoveryKey,$.targetModel);while(m.size>128){let T=m.keys().next().value;if(T)m.delete(T);else break}let K=K0.get(N.sessionId);if(G===$.targetModel&&K?.mode==="server"&&g0(K.requestedModelId)===g0(N.requestedModel)&&K.targetModelId===$.targetModel)return;k.info("fable-fallback","Anthropic server-side safety fallback active",{session:N.sessionId,requestedModel:N.requestedModel,targetModel:$.targetModel,handoff:$.handoff}),I1({sessionId:N.sessionId,mode:"server",remaining:0,requestedModelId:N.requestedModel,targetModelId:$.targetModel},D,X,l7(N.requestedModel,$.targetModel));return}if($.stopReason==="refusal"||!m.delete(N.recoveryKey))return;k.info("fable-fallback","Anthropic server-side safety fallback ended",{session:N.sessionId,requestedModel:N.requestedModel}),I1({sessionId:N.sessionId,mode:"fable",remaining:0,requestedModelId:N.requestedModel},D,X,n7(N.requestedModel))}function j3(N,$,D){if(!N)return;for(let X of m.keys())if(X.startsWith(`${N}\x00`))m.delete(X);if(!K0.delete(N))return;B0($,{activeId:z0.activeId,route:z0.route,mainAccessToken:D.access,mainRefreshToken:D.refresh,routingAuthoritative:!1})}async function W3(N){let $=VJ(N);if($.type==="enable"||$.type==="disable"){let K=$.type==="enable",T=await cW(K),_=k1(T);return h1({enabled:K,mode:_}),k.info("commands","cache enabled changed",{enabled:K}),U4({argumentsText:N,enabled:K,mode:_})}if($.type==="mode"){let K=await uW($.mode),T=R1(K);return h1({enabled:T,mode:$.mode}),k.info("commands","cache mode changed",{mode:$.mode}),U4({argumentsText:N,enabled:T,mode:$.mode})}let D=await v(Y),X=R1(D),G=k1(D);return h1({enabled:X,mode:G}),U4({argumentsText:N,enabled:X,mode:G})}async function J3(N){let $=KJ(N),D=await v(Y);if($.type==="window")D=await nW($.startHour,$.endHour),k.info("commands","cachekeep schedule changed",{schedule:`${$.startHour}-${$.endHour}`});else if($.type==="always")D=await oW(),k.info("commands","cachekeep schedule changed",{schedule:"always"});else if($.type==="disable")D=await rW(!1),k.info("commands","cachekeep enabled changed",{enabled:!1});else if($.type==="subagents")D=await tW($.enabled),k.info("commands","cachekeep subagents changed",{subagents:$.enabled});let X=s4(D),G=await X1(),K=G.length?Math.min(...G.map((T)=>T.nextPrewarmAt)):void 0;return UJ({argumentsText:N,enabled:_J(D),always:t4(D),window:X,hybridActive:a4(D),trackedSessions:G.length,trackedSessionDetails:G,nextPrewarmAt:K})}async function N3(N){let $=TJ(N);if($.type==="enable"||$.type==="disable"){let G=$.type==="enable";return await dW(G),P4(G),k.info("commands","dump changed",{enabled:G}),Jj({argumentsText:N,enabled:G})}let D=await v(Y),X=X4(D);return P4(X),Jj({argumentsText:N,enabled:X})}async function O3(N){let $=xJ(N);if($.type==="enable"||$.type==="disable"){let G=$.type==="enable";return await lW(G),C4(G),k.info("commands","fast mode changed",{enabled:G}),Oj({argumentsText:N,enabled:G})}let D=await v(Y),X=V4(D);return C4(X),Oj({argumentsText:N,enabled:X})}async function $3(N,$){let D=hJ(N);if(D.type==="mode")return await gJ(D.mode,Y),k.info("commands","routing mode changed",{mode:D.mode}),Vj({argumentsText:N,mode:D.mode});if(D.type==="reset"&&$)await Z0.clear($),k.info("commands","sticky routing assignment reset");let X=await v(Y);return Vj({argumentsText:N,mode:L1(X)})}async function Z3(N){let $=EJ(N);if($.type==="level")return await jJ($.level),k.info("commands","log level changed",{level:$.level}),Yj({argumentsText:N,level:$.level});let D=await v(Y),X=_4(D)??"info";return Yj({argumentsText:N,level:X})}async function Y3(N,$){let D=IJ(N);if(D.type==="add-apikey"){if(!D.apiKey)return{text:"API key is required",accounts:h0(await v(Y)??x0())};let _=D.label?.trim()||void 0,I=Date.now(),b=D.baseURL?.trim()||"https://api.kie.ai/claude";if(!G4(b))return{text:"Invalid base URL. Must be an http(s) URL without embedded credentials.",accounts:h0(await v(Y)??x0())};let V0=D.authHeader??"authorization-bearer",Q0={id:_||p4(),label:_||void 0,type:"api",apiKey:D.apiKey,baseURL:b,authHeader:V0,enabled:!0,addedAt:I,lastUsed:I};await l4(Q0,Y),k.info("commands","account added",{id:Q0.id,label:Q0.label,type:"apikey"});let T0=await v(Y);await _j(T0);let e0=h0(T0??{version:1,accounts:[]});return{text:`API key account "${Q0.label??Q0.id}" added.`,accounts:e0}}if(D.type==="add-oauth-start"){let _=await Z4("max"),I={state:_.state,verifier:_.verifier,redirectUri:_.redirectUri,createdAt:Date.now()};return o($??"default",I),{text:`Open this URL in your browser:
|
|
21
|
+
${_.url}`,knobs:{oauthUrl:_.url},accounts:h0(await v(Y)??x0())}}if(D.type==="add-oauth-finish"){let _=$??"default",I=s(_);if(!I)return{text:"OAuth session expired. Please start again.",accounts:h0(await v(Y)??x0())};try{let b=await Y4(D.code,I.verifier,I.redirectUri,I.state);if(b.type==="failed")return{text:"OAuth authentication failed. Please check the code and try again.",accounts:h0(await v(Y)??x0())};let V0=Date.now(),Q0={id:p4(),type:"oauth",label:D.label||void 0,access:b.access,refresh:b.refresh,expires:b.expires,enabled:!0,addedAt:V0,lastUsed:V0,lastRefreshedAt:V0};await l4(Q0,Y),k.info("commands","account added",{id:Q0.id,label:Q0.label,type:"oauth"});let T0=await v(Y);return await _j(T0),{text:"OAuth account added.",accounts:h0(T0??x0())}}catch{return{text:"OAuth exchange failed due to a network error. Please try again.",accounts:h0(await v(Y)??x0())}}finally{x.delete(_)}}let X=await v(Y);if(D.type==="status"&&X){let _;if(U0)try{let I=await U0();if(I.type==="oauth")_=I.access}catch{}X=await E0(X,_,AbortSignal.timeout(3000))}let G=MJ({argumentsText:N,storage:X??{version:1,accounts:[]}});if(G.updated){if(G.updated.action==="enable"||G.updated.action==="disable"){let I=G.updated.action==="enable";await DJ(G.updated.id,I,Y);let b=G.updated.id,V0=X?.accounts.find((Q0)=>Q0.id===b);k.info("commands",`account ${G.updated.action}d`,{id:b,label:V0?.label,enabled:I})}else if(G.updated.action==="remove"){await ZJ(G.updated.id,Y);let I=G.updated.id,b=X?.accounts.find((V0)=>V0.id===I);k.info("commands","account removed",{id:I,label:b?.label})}else if(G.updated.action==="reorder"){await YJ(G.updated.newOrder??G.updated.previousOrder??[],Y);let I=G.updated.id,b=X?.accounts.find((V0)=>V0.id===I);k.info("commands","account reordered",{id:I,label:b?.label})}let _=await v(Y);if(U0)try{let I=await U0();B0(_,{activeId:z0.activeId,route:z0.route,mainAccessToken:I.access,mainRefreshToken:I.refresh,routingAuthoritative:!1})}catch{}}let K=await v(Y),T=h0(K??{version:1,accounts:[]});return{text:G.text,accounts:T}}async function Uj(N,$,D){if(N==="claude-quota")return{command:N,text:await tJ(),knobs:{}};if(N==="claude-logging"){let _=await Z3($),I=await v(Y);return{command:N,text:_,knobs:{level:_4(I)??"info"}}}if(N==="claude-account"){let _=await Y3($,D),I={accounts:_.accounts};if("knobs"in _&&_.knobs)Object.assign(I,_.knobs);return{command:N,text:_.text,knobs:I}}if(N==="claude-routing"){let _=await $3($,D),I=await v(Y);return{command:N,text:_,knobs:{mode:L1(I)}}}if(N==="claude-fast"){let _=await O3($),I=await v(Y);return{command:N,text:_,knobs:{enabled:V4(I)}}}if(N==="claude-dump"){let _=await N3($),I=await v(Y);return{command:N,text:_,knobs:{enabled:X4(I)}}}if(N==="claude-cache"){let _=await W3($),I=await v(Y);return{command:N,text:_,knobs:{enabled:R1(I),mode:k1(I)}}}if(N==="claude-cachekeep"){let _=await J3($),I=await v(Y);return{command:N,text:_,knobs:{window:s4(I)}}}let X=await v(),G=d4(X),K=(X?.accounts??[]).filter((_)=>_.enabled!==!1).map((_)=>_.id),T=FJ({argumentsText:$,config:G,accountIds:K});if(T.updatedConfig){if(await $J(T.updatedConfig),G.enabled!==T.updatedConfig.enabled)k.info("commands","killswitch changed",{enabled:T.updatedConfig.enabled===!0});if(JSON.stringify(G.main)!==JSON.stringify(T.updatedConfig.main)||JSON.stringify(G.accounts)!==JSON.stringify(T.updatedConfig.accounts))k.info("commands","killswitch thresholds changed",{thresholds:T.updatedConfig.main??T.updatedConfig.accounts})}return{command:N,text:T.text,knobs:{config:d4(await v()),accountIds:K}}}async function D3(N){let $=await Uj(N.command,N.arguments,N.sessionId);return{text:$.text,knobs:$.knobs}}function G3(N,$=10){let D=Math.max(0,Math.min(Math.round(N/100*$),$));return"█".repeat(D)+"░".repeat($-D)}function l1(N,$){return`${N} ${G3($)} ${String(Math.round($)).padStart(3)}%`}function Qj(N){if(!N)return"";let $=new Date(N).getTime();if(Number.isNaN($))return"";let D=$-Date.now();if(D<=0)return"resets now";let X=Math.floor(D/60000);if(X<1)return"resets <1m";if(X<60)return`resets ${X}m`;let G=Math.floor(X/60),K=X%60;return K>0?`resets ${G}h${K}m`:`resets ${G}h`}function X3(N,$,D){let X=[],G=0;if(N){let{five_hour:_,seven_day:I}=N;if(_||I){let V0=D==="main"?"active":"idle",Q0=Qj(_?.resetsAt),T0=[`main · ${V0}${Q0?` (${Q0})`:""}`];if(_)T0.push(l1("5h",_.usedPercent)),G=Math.max(G,_.usedPercent);if(I)T0.push(l1("7d",I.usedPercent)),G=Math.max(G,I.usedPercent);X.push(T0.join(`
|
|
22
|
+
`))}}if($?.length)for(let _ of $){let I=_.quota;if(!I)continue;let{five_hour:b,seven_day:V0}=I;if(!b&&!V0)continue;let Q0=_.label||"alt",e0=D===_.id?"active":"idle",j1=Qj(b?.resetsAt),W1=[`${Q0} · ${e0}${j1?` (${j1})`:""}`];if(b)W1.push(l1("5h",b.usedPercent)),G=Math.max(G,b.usedPercent);if(V0)W1.push(l1("7d",V0.usedPercent)),G=Math.max(G,V0.usedPercent);X.push(W1.join(`
|
|
23
|
+
`))}if(!X.length)return;let K=X.join(`
|
|
14
24
|
|
|
15
|
-
`),
|
|
25
|
+
`),T=G>=90?"error":G>=70?"warning":"info";O.tui?.showToast?.({body:{title:"Claude Quota",message:K,variant:T,duration:T==="error"?8000:5000}})?.catch?.(()=>{})}return{event:async({event:N})=>{let $=N,D=$.properties?.info,X=$.properties?.sessionID??D?.sessionID??D?.id;if(!X)return;if($.type==="session.status"&&$.properties?.status?.type==="idle")await d1(X);if($.type==="message.updated"&&D?.role==="assistant"&&D.finish!=="tool-calls"&&typeof D.time?.completed==="number")await d1(X);if($.type==="session.deleted")K0.delete(X),G0.delete(X)},config:async(N)=>{N.command={...N.command??{},[n4]:{template:n4,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[jj]:{template:jj,description:"Manage fallback accounts — list, enable/disable, reorder, remove, or add (API key or OAuth)."},[r4]:{template:r4,description:"Keep hybrid Claude cache warm always or during a local time window."},[Dj]:{template:Dj,description:"Show current Claude OAuth quota usage for all accounts."},[Wj]:{template:Wj,description:"Show or toggle Anthropic request dump capture for debugging."},[Nj]:{template:Nj,description:"Show or toggle Anthropic fast mode for supported Opus models."},[Zj]:{template:Zj,description:"Show or set the plugin log level (error, warn, info, debug, trace)."},[Xj]:{template:Xj,description:"Show or change Claude account routing: main-first, fallback-first, or sticky-balanced."},[$j]:{template:$j,description:"Manage killswitch — hard-block requests when quota drops below per-account thresholds."}}},"experimental.chat.system.transform":async(N,$)=>{if(!m7(N))return;b7($.system)},provider:{id:"anthropic",async models(N,$){let D=t7(o7(N.models));if($.auth?.type!=="oauth"||!mW(h??{}))return D;return a7(D)}},"command.execute.before":async(N)=>{if(!["claude-account","claude-cache","claude-cachekeep","claude-quota","claude-dump","claude-fast","claude-routing","claude-killswitch","claude-logging"].includes(N.command))return;let D=N.command,X=await Uj(D,N.arguments,N.sessionID);if(D==="claude-quota"){let G=await v(),K=U0?await U0().catch(()=>{return}):void 0;B0(G,{activeId:z0.activeId,route:z0.route,mainAccessToken:K?.access,mainRefreshToken:K?.refresh,routingAuthoritative:!1})}if(f4(N.sessionID))Aj(X,N.sessionID);else await kW(j,N.sessionID,X.text);y7()},auth:{provider:"anthropic",async loader(N,$){U0=N;let D=await N();if(D.type==="oauth"){let K=function(){if(V1)J.clearInterval(V1),V1=null;let V=async()=>{try{let w=await v(Y);if(!sJ(w))return;let R=await N();if(R.type!=="oauth")return;if(await Kj(R.refresh),!R.expires)return;let A=R.expires-Date.now(),M=rJ(w);if(A>M)return;if(O0("[refresh] opencode main oauth background due",{expiresInMs:A,refreshBeforeMs:M}),R.refresh&&Z1(w?.refresh?.mainLastRefreshError,R.refresh,Date.now())){O0("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:w?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:w?.refresh?.mainLastRefreshError?.retryCount,expiresInMs:A});return}if(R.refresh&&w?.refresh?.mainRefreshLeaseUntil&&w.refresh.mainRefreshLeaseUntil>Date.now()&&w.refresh.mainRefreshLeaseTokenHash===K4(R.refresh))return;await G();let P=await N();O0("[refresh] opencode main oauth refreshed in background",{newExpiresInMs:P.expires?P.expires-Date.now():void 0})}catch(w){k.warn("refresh","opencode main oauth refresh failed",{message:w instanceof Error?w.message:String(w)})}};if(V1=J.setInterval(()=>{V()},I7+vW(M7)),"unref"in V1)V1.unref()},_=function(V,w){if(V instanceof Request&&V.body)return!1;return w==null||typeof w==="string"},I=function(V){if(typeof V!=="string")return;try{let w=JSON.parse(V);return typeof w.model==="string"?w.model:void 0}catch{return}},b=function(V){return V.has("x-parent-session-id")},V0=function(V){return V.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(V)},Q0=function(V){return V?.quota?.enabled===!0},e0=function(V,w){if(V.delete("authorization"),V.delete("x-api-key"),w.authHeader==="x-api-key")V.set("x-api-key",w.apiKey??"");else V.set("Authorization",`Bearer ${w.apiKey??""}`);V.set("Content-Type","application/json")},n1=function(V){return E.getFallback(V.id,V.access)?.quota??V.quota},E4=function(V){return["five_hour","seven_day"].some((w)=>(V?.[w]?.remainingPercent??1)<=0)},wj=function(V,w){return V.status===429||w},o1=function(V){if(!V)return!1;let w=E.getMain(V);return Boolean(w&&w.refreshAfter>Date.now()&&E4(w.quota))},X=null;async function G(){if(!X)X=(async()=>{let R=null,A=null,M=null;async function P(S){let f=await v(Y)??x0();f.refresh=f.refresh??{},S(f),await $1(f,Y,{mainRefresh:!0})}async function p(S){let f=Date.now()+T7;while(Date.now()<f){await new Promise((H)=>J.setTimeout(H,qW+vW(qW)));let U=await N();if(U.type!=="oauth"||!U.access)continue;if((U.access!==S.access||U.refresh!==S.refresh||(U.expires??0)>(S.expires??0)+60000)&&(!U.expires||U.expires>Date.now()))return O0("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:U.expires?U.expires-Date.now():void 0}),U.access}return null}for(let S=0;S<=2;S++){let f=null;try{if(S>0){let l=500*2**(S-1);await new Promise((w0)=>J.setTimeout(w0,l))}if(f=await N(),!f.refresh)throw Error("Token refresh failed: missing refresh token");let U=await v(Y),C=K4(f.refresh),H=U?.refresh?.mainLastRefreshError;if(O0("[refresh] opencode main oauth refresh check",{attempt:S,expiresInMs:f.expires?f.expires-Date.now():void 0,hasBackoff:Boolean(H),backoffActive:H?Z1(H,f.refresh,Date.now()):!1,retryCount:H?.retryCount,nextRetryAt:H?.nextRetryAt}),H&&Z1(H,f.refresh,Date.now()))throw O0("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:H.nextRetryAt,retryCount:H.retryCount}),Error(i4(H,Date.now()));if(U?.refresh?.mainRefreshLeaseUntil&&U.refresh.mainRefreshLeaseUntil>Date.now()&&U.refresh.mainRefreshLeaseTokenHash===C){O0("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:U.refresh.mainRefreshLeaseUntil});let l=await p(f);if(l)return l;throw Error("Claude OAuth refresh is already in progress")}let Q=await iW({name:"opencode-main-oauth-refresh",ttlMs:120000,renew:!0});if(!Q){O0("[refresh] opencode main oauth refresh skipped file lock");let l=await p(f);if(l)return l;throw Error("Claude OAuth refresh is already in progress")}M=Q.release,R=p4(),A=C,await P((l)=>{l.refresh=l.refresh??{},l.refresh.mainRefreshLeaseId=R??void 0,l.refresh.mainRefreshLeaseUntil=Date.now()+120000,l.refresh.mainRefreshLeaseTokenHash=C});let d=await v(Y);if(O0("[refresh] opencode main oauth refresh lease acquired",{attempt:S,leaseUntil:Date.now()+120000}),d?.refresh?.mainRefreshLeaseId!==R||d.refresh.mainRefreshLeaseTokenHash!==C)throw Error("Claude OAuth refresh is already in progress");O0("[refresh] opencode main oauth refresh request start",{attempt:S});let L=await hW({refreshToken:f.refresh,maxRetries:0});return await O.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:L.refresh,access:L.access,expires:L.expires}}),await P((l)=>{if(!l?.refresh)return;if(l.refresh.mainLastRefreshError=void 0,l.refresh.mainRefreshLeaseId===R)l.refresh.mainRefreshLeaseId=void 0,l.refresh.mainRefreshLeaseUntil=void 0,l.refresh.mainRefreshLeaseTokenHash=void 0}),O0("[refresh] opencode main oauth refresh succeeded",{attempt:S,expiresInMs:L.expires-Date.now()}),L.access}catch(U){let C=U instanceof Error&&(U.message.includes("fetch failed")||("code"in U)&&(U.code==="ECONNRESET"||U.code==="ECONNREFUSED"||U.code==="ETIMEDOUT"||U.code==="UND_ERR_CONNECT_TIMEOUT"));if(S<2&&(C||(()=>{let Q=U.status;return typeof Q==="number"&&Q>=500})()))continue;O0("[refresh] opencode main oauth refresh attempt failed",{attempt:S,error:U instanceof Error?U.message:String(U),transient:C});let H=f?.refresh;if(H&&U.isRefreshError)await P((Q)=>{Q.refresh=Q.refresh??{},Q.refresh.mainLastRefreshError=aW({error:U,now:Date.now(),refreshToken:H,previous:Q.refresh.mainLastRefreshError})});throw U}finally{if(R)await P((U)=>{if(!U?.refresh)return;if(U.refresh.mainRefreshLeaseId===R&&U.refresh.mainRefreshLeaseTokenHash===A)U.refresh.mainRefreshLeaseId=void 0,U.refresh.mainRefreshLeaseUntil=void 0,U.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await M?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})().finally(()=>{X=null});return X}R0=G,K(),E.seedFallbacksFromAccounts((h?.accounts??[]).filter(D0));let T=await A7(Y);if(await B0(T.freshStorage,{activeId:T.activeId,route:T.route,mainAccessToken:D.access,mainRefreshToken:D.refresh,routingAuthoritative:!1}),process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION!=="1")E0(h??x0(),D.access).then((V)=>{B0(V,{activeId:"main",route:"main",mainAccessToken:D.access,mainRefreshToken:D.refresh,routingAuthoritative:!1,useHydratedProfiles:!0})}).catch(()=>{});async function T0(V,w){if(!V.body||V.status!==200)return w?.mark("inspect_stream_skip",{status:V.status}),{response:V,rateLimited:!1};if(V.headers.get("x-cortexkit-relay-optimistic")==="true")return w?.mark("inspect_stream_skip",{status:V.status,reason:"optimistic_relay"}),{response:V,rateLimited:!1};let R=g(),A=V.body.getReader(),M=[],P=new TextDecoder,p="",S=0;while(!p.includes(`
|
|
16
26
|
|
|
17
|
-
`)&&b.length<65536){let{done:M,value:Y}=await S.read();if(M)break;if(w.push(Y),C+=Y.byteLength,b+=v.decode(Y,{stream:!0}),W0(b))break}if(W0(b)){await S.cancel().catch(()=>{});try{S.releaseLock()}catch{}let M=new ReadableStream({start(Y){for(let Q of w)Y.enqueue(Q);Y.close()}});return U?.mark("inspect_stream_first_event",{ms:s(f()-A),bytes:C,rateLimited:!0}),{response:new Response(M,{status:D.status,statusText:D.statusText,headers:D.headers}),rateLimited:!0}}let x=new ReadableStream({start(M){for(let Y of w)M.enqueue(Y)},async pull(M){let{done:Y,value:Q}=await S.read();if(Y){M.close();return}M.enqueue(Q)},cancel(M){return S.cancel(M)}});return U?.mark("inspect_stream_first_event",{ms:s(f()-A),bytes:C,rateLimited:!1}),{response:new Response(x,{status:D.status,statusText:D.statusText,headers:D.headers}),rateLimited:!1}}async function o0(D,U,A,S,w="api_fallback",v,b){if(b?.plan.downgraded)b.warmTarget=void 0,b.opusCacheAnchor=void 0;let C=f(),x=b1(D,U),M=x.get("x-session-affinity")||x.get("x-opencode-session"),Y=h(x);x.delete("x-parent-session-id"),x.delete("x-session-affinity"),x.delete("x-opencode-session");let Q=U?.body,H=typeof Q==="string"?Q.length:void 0;if(Q&&typeof Q==="string"){let j0=f(),J0=(()=>{if(!ON())return!1;try{return L1(JSON.parse(Q).model)}catch{return!1}})();if(Q=await MN(Q,{cache1hEnabled:!Y&&Y1(),cache1hMode:D1(),fastModeEnabled:J0,perf:(t,G0)=>S?.mark(`rewrite_body_${t}`,{route:w,...G0})}),n0(x,A),x.set("anthropic-beta",H1(x.get("anthropic-beta"),[])),J0)p1(x);S?.mark("rewrite_body",{route:w,ms:s(f()-j0),originalBytes:H,rewrittenBytes:Q.length,cacheEnabled:!Y&&Y1(),cacheMode:D1(),fastModeEnabled:J0,subagent:Y})}else n0(x,A);let p=HN(D,{baseURL:A.baseURL}),T=f(),m;try{m=await fetch(p.input,{...U,body:Q,headers:x,...CN()&&{tls:{rejectUnauthorized:!1}}})}catch(j0){if(typeof Q==="string")await T1({affinity:M,route:w,error:_4(j0),bodyText:Q,url:p.url?.toString()??d1(p.input),method:l1(D,U),headers:x});throw j0}if(typeof Q==="string")await T1({affinity:M,route:w,status:m.status,bodyText:Q,url:p.url?.toString()??d1(p.input),method:l1(D,U),headers:x});return S?.mark("send_headers_received",{route:w,ms:s(f()-T),status:m.status,relayConfigured:!1,totalSendWithAccessMs:s(f()-C),baseURL:A.baseURL}),m}async function r0(D,U,A,S,w="unknown",v,b="main",C){let x=f(),M=v,Y=async()=>{return M??=await q(J),M},Q=b1(D,U),H=Q.get("x-session-affinity")||Q.get("x-opencode-session"),p=h(Q);Q.delete("x-parent-session-id"),Q.delete("x-session-affinity"),Q.delete("x-opencode-session");let T=U?.body,m;if(T&&typeof T==="string"){let i=f();try{let g=JSON.parse(T);if(typeof g.model==="string")m=g.model}catch{}S?.mark("model_parse_for_identity",{route:w,ms:s(f()-i),bodyBytes:T.length})}let j0=f(),J0=await qN(A,m);S?.mark("resolve_claude_code_identity",{route:w,ms:s(f()-j0),hasAccountUuid:Boolean(J0.accountUuid)});let t=typeof T==="string"?T.length:void 0;if(T&&typeof T==="string"){let i=f(),g=(()=>{if(!ON())return!1;try{return L1(JSON.parse(T).model)}catch{return!1}})(),K0=!p&&Y1(),C0=D1(),F0=C?.plan.downgraded&&C.plan.standbyCacheAnchor?.oauthAccountId===b?C.plan.standbyCacheAnchor:void 0;if(T=await MN(T,{cache1hEnabled:K0,cache1hMode:C0,fastModeEnabled:g,identity:J0,hybridStandbyAnchor:F0,perf:(z0,A0)=>{if(S?.mark(`rewrite_body_${z0}`,{route:w,...A0}),z0==="cache_strategy"&&A0?.standbyBridgeApplied===!0&&C&&!C.standbyBridgeLogged)C.standbyBridgeLogged=!0,k.info("fable-fallback","restored standby Opus cache bridge",{session:C.plan.sessionId,distanceBlocks:A0?.standbyDistanceBlocks})}}),C?.plan.downgraded&&K0&&C0==="hybrid"){let z0=tW(T);C.opusCacheAnchor=z0?{...z0,oauthAccountId:b}:void 0}let u=f();try{M1(Q,A,{body:JSON.parse(T),identity:J0}),S?.mark("set_oauth_headers_body_parse",{route:w,ms:s(f()-u),bodyBytes:T.length,parsed:!0})}catch{M1(Q,A,{identity:J0}),S?.mark("set_oauth_headers_body_parse",{route:w,ms:s(f()-u),bodyBytes:T.length,parsed:!1})}if(g)p1(Q);S?.mark("rewrite_body",{route:w,ms:s(f()-i),originalBytes:t,rewrittenBytes:T.length,cacheEnabled:!p&&Y1(),cacheMode:D1(),fastModeEnabled:g,subagent:p})}let G0=HN(D);if(C&&typeof T==="string")C.warmTarget={url:G0.url?.toString()??G0.input.toString(),headers:new Headers(Q),bodyText:T,oauthAccountId:b};if(typeof T==="string"&&Y1()&&D1()==="hybrid"){let i=await Y();if(!p||E4(i)){let g=f(),K0=y0.track({sessionId:H,url:G0.url?.toString()??G0.input.toString(),headers:Q,bodyText:T,storage:i,cacheMode:"hybrid",oauthAccountId:b});S?.mark("cachekeep_track",{session:H,ms:s(f()-g),tracked:K0.tracked,reason:K0.tracked?void 0:K0.reason,bodyBytes:T.length})}}let P1=!1,k1=async()=>{P1=!0;try{let i=await fetch(G0.input,{...U,body:T,headers:Q,...CN()&&{tls:{rejectUnauthorized:!1}}});if(typeof T==="string")await T1({affinity:H,route:w,status:i.status,bodyText:T,url:G0.url?.toString()??d1(G0.input),method:l1(D,U),headers:Q});return i}catch(i){if(typeof T==="string")await T1({affinity:H,route:w,error:_4(i),bodyText:T,url:G0.url?.toString()??d1(G0.input),method:l1(D,U),headers:Q});throw i}},E=uN(await Y()),R={accountId:b,accessToken:A},c=f(),_0=await Kj({config:E,input:G0.input,init:U,headers:Q,body:T,fallback:k1,affinity:H,optimisticResponse:E?.transport==="websocket",onResponseHeaders:(i)=>L0(i,R)});if(S?.mark("send_headers_received",{route:w,ms:s(f()-c),status:_0.status,relayConfigured:E!=null,totalSendWithAccessMs:s(f()-x)}),P1)L0(_0.headers,R);return _0}async function bj(D){if(!D)return!1;try{return await I.refreshMain(D),R1(D)}catch{return!1}}async function w1(D,U={}){let A=await q0.getUsableFallbackAccounts(D,{modelId:U.modelId}),S=new Map(A.map((v)=>[v.id,v])),w=[];for(let v of D?.accounts??[]){if(N0(v)){let b=S.get(v.id);if(b)w.push(b);continue}if(U.includeApiRoutes===!0&&G1(v)&&v.enabled!==!1&&v.apiKey&&o1(v.baseURL))w.push(v)}if(!e0(D))return w;return w.filter((v)=>N0(v)?N1(f1(v),D,v.id,U.modelId):!0)}async function NW(D){let U=I.getMain(D.mainAccessToken),A=U?.quota;if(!V1(U?.quota,D.storage,Date.now(),D.requestedModelId))try{A=await I.refreshMain(D.mainAccessToken)}catch{}let S=await q0.getUsableFallbackAccounts(D.storage,{modelId:D.requestedModelId}),w=await q(J)??D.storage,v=new Map(S.map((Y)=>[Y.id,Y])),b=[];if(!X1(w?.refresh?.mainLastRefreshError))b.push({id:g0,access:D.mainAccessToken,quota:A,order:0});for(let[Y,Q]of(w?.accounts??[]).entries()){if(Q.enabled===!1||!N0(Q))continue;let H=v.get(Q.id)??Q;if(!H.access||X1(H.lastRefreshError))continue;let p=f1(H);if(!V1(p,w,Date.now(),D.requestedModelId))try{p=await I.refreshFallback(H.id,H.access)}catch{}b.push({id:H.id,access:H.access,quota:p,order:Y+1,account:H})}let C=new Set(b.flatMap((Y)=>{let Q=Y.id===g0?w?.refresh?.mainLastRefreshError:Y.account?.lastRefreshError;if(X1(Q))return[];if(V1(Y.quota,w,Date.now(),D.requestedModelId)&&ZN({quota:Y.quota,modelId:D.requestedModelId}).action==="migrate")return[];if(e0(w)&&!N1(Y.quota,w,Y.id===g0?void 0:Y.id,D.requestedModelId))return[];return[Y.id]})),x=new Set(S.map((Y)=>Y.id)),M=b.flatMap((Y)=>{if(!Y.quota)return[];let Q=Y.id===g0?void 0:Y.id;return F1(Y.quota,w)&&TN(Y.quota,D.requestedModelId)&&(!e0(w)||N1(Y.quota,w,Q,D.requestedModelId))&&(Y.id===g0||x.has(Y.id))?[{accountId:Y.id,quota:Y.quota,order:Y.order}]:[]});return{storage:w,allRoutes:b,candidates:M,retainAccountIds:C}}async function WW(D,U,A,S=!1){let w=new Headers(D.headers);if(w.set("retry-after",String(Qj(U,A))),S)return await D.body?.cancel().catch(()=>{}),w.set("content-type","application/json"),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account five-hour quota resets shortly; retaining session affinity."}}),{status:429,headers:w});return new Response(D.body,{status:D.status,statusText:D.statusText,headers:w})}async function U1(D,U,A,S,w,v,b){if(!A.length)return w??null;let C=b?.returnLastOnExhausted??!0;await w?.body?.cancel().catch(()=>{});let x=w??null;for(let[M,Y]of A.entries()){let Q;if(G1(Y)){if(!Y.apiKey)continue;Q=await o0(D,U,Y,v,`api_fallback_${M}`,S,b?.fableRequest)}else{let p=Y.access;if(!p)continue;Q=await r0(D,U,p,v,`fallback_${M}`,S,Y.id,b?.fableRequest)}x=Q;let H=a1(Q.status,S);if(!H){let p=await Q0(Q,v);Q=p.response,x=Q,H=p.rateLimited}if(!H){if(await q0.markUsed(Y),await b?.onSuccess?.(Y),N0(Y)&&Y.access&&I.shouldRefreshOnRequestCount(q1))I.refreshFallback(Y.id,Y.access).then(()=>b?.onSuccess?.(Y)).catch(()=>{});return Q}if(M<A.length-1||!C)await Q.body?.cancel().catch(()=>{})}return C?x:null}async function pj(D,U,A,S,w,v,b,C,x,M){if(!z(D,U?.body))return A;let Y=f(),Q=v??await q(J);if(w?.mark("fallback_load_storage",{ms:s(f()-Y),cached:!!v}),!(Q?.accounts??[]).some((t)=>t.enabled!==!1&&(N0(t)||G1(t)&&Boolean(t.apiKey)&&o1(t.baseURL))))return A;let p=A,T=a1(p.status,Q),m=eN(p,!1);if(!T){let t=await Q0(p,w);p=t.response,T=t.rateLimited,m=eN(p,t.rateLimited)}if(!T)return p;let j0=!1;if(S)j0=S.some(G1);else if(m)j0=await bj(b);let J0=S;if(!J0){let t=f();J0=await w1(Q,{includeApiRoutes:j0,modelId:x}),w?.mark("fallback_get_accounts",{ms:s(f()-t),accounts:J0.length})}if(e0(Q)){let t=J0.length;if(J0=J0.filter((G0)=>N0(G0)?N1(f1(G0),Q,G0.id,x):!0),J0.length<t)a("[killswitch] filtered fallbacks",{before:t,after:J0.length})}return await U1(D,U,J0,Q,p,w,{onSuccess:C,fableRequest:M})??p}return{apiKey:"",async fetch(D,U){let A=b1(D,U),S=A.get("x-session-affinity")||A.get("x-opencode-session"),w=d.plan(S,U?.body);if(w&&!w.downgraded){let E=h0.get(w.recoveryKey);if(E)await E,w=d.plan(S,U?.body)}let v=w?{plan:w}:void 0;if(w?.downgraded)U={...U,body:w.bodyText};let b=U?.body,C=W3({bodyBytes:typeof b==="string"?b.length:void 0}),x=(E)=>O4(E,{perf:(R,c)=>C.mark(R,c),contentFilterModel:w?.requestedModel,...!w?.downgraded&&w?{onContentFilter:()=>{if(!v?.warmTarget)return k.debug("fable-fallback","content filter recovery unavailable for non-OAuth route",{session:w.sessionId}),!1;let R=d.activate(w,v.warmTarget.oauthAccountId);k.info("fable-fallback","content filter detected; switching session to Opus 4.8",{session:w.sessionId,requestedModel:w.requestedModel,remaining:R}),DN({sessionId:w.sessionId,mode:"opus",remaining:R,requestedModelId:w.requestedModel},H,Y,Y3(w.requestedModel))}}:{},...w?.downgraded&&v?{onComplete:(R)=>{let c=d.complete(w,v.opusCacheAnchor);if(!c.counted)return;k.info("fable-fallback","Opus 4.8 turn completed",{session:w.sessionId,requestedModel:w.requestedModel,finishReason:R,remaining:c.remaining}),DN({sessionId:w.sessionId,mode:"opus",remaining:c.remaining,requestedModelId:w.requestedModel},H,Y);let _0=j1(v);if(c.remaining===0){let i=()=>{if(d.remaining(w)!==0)return;DN({sessionId:w.sessionId,mode:"fable",remaining:0,requestedModelId:w.requestedModel},H,Y,D3(w.requestedModel))};_0.then(i,i)}}}:{}}),M=f(),Y=await O();if(C.mark("get_auth",{ms:s(f()-M),authType:Y.type,hasAccess:Boolean(Y.access)}),Y.type!=="oauth"){let E=await fetch(D,U);return C.done("non_oauth_passthrough",{status:E.status}),E}await rN(Y.refresh);let Q=f(),H=await q();if(C.mark("load_storage",{ms:s(f()-Q)}),I.updateStorage(H),I.seedMainFromStorage(H,Y.access),I.seedFallbacksFromAccounts((H?.accounts??[]).filter(N0)),!w)Sj(S,H,Y);let p=z(D,U?.body),T=L(U?.body);if(p)q1++;if(p&&Y.access&&(!Y.expires||Y.expires>Date.now()))v1(H,Y.access);let m=(E,R)=>I0(H,{activeId:E,route:R,mainAccessToken:Y.access,mainRefreshToken:Y.refresh}),j0;if(p&&S&&_1(H)==="sticky-balanced"&&Y.access){let E=w?.effectiveModel??T,R=Uj(E),c=y0.trackedOAuthRoute(S),_0=w?.cacheAccountId??(c?c.oauthAccountId??g0:void 0),i=!1;try{let g=await NW({storage:H,mainAccessToken:Y.access,requestedModelId:E}),K0=(z0)=>D0.resolve({sessionId:S,family:R,modelId:E,candidates:g.candidates,retainAccountIds:g.retainAccountIds,storage:g.storage,inputBytes:typeof U?.body==="string"?Buffer.byteLength(U.body):1,preferredAccountId:_0,excludeAccountIds:z0}),C0=g.allRoutes.length===0||g.allRoutes.some((z0)=>!z0.quota||!V1(z0.quota,g.storage,Date.now(),E)),F0=await K0();if(!F0&&C0)throw Error("Sticky-balanced routing is waiting for current OAuth quota snapshots");let u=g.allRoutes.find((z0)=>z0.id===F0?.accountId);if(F0&&u){if(i=!0,w?.downgraded&&d.bindRecoveryAccount(w,u.id))k.info("fable-fallback","rebound recovery to migrated sticky account",{accountId:u.id});let z0=(e)=>r0(D,U,e.access,C,`sticky:${e.id}`,g.storage,e.id,v),A0=async(e,Y0,w0=!0)=>{if(w0&&e.account)await q0.markUsed(e.account);return m(e.id,"sticky-balanced"),C.done("return_sticky_balanced",{status:Y0.status,accountId:e.id,created:F0?.created,migrated:F0?.migrated}),x(Y0)},jW=async(e)=>{let Y0=e,w0=a1(e.status,g.storage),f0=!1;if(!w0){let i0=await Q0(e,C);Y0=i0.response,f0=i0.rateLimited,w0=i0.rateLimited}return{response:Y0,routeFailure:w0,streamingRateLimit:f0}},JW=V1(u.quota,g.storage,Date.now(),E)?ZN({quota:u.quota,modelId:E}):void 0;if(JW?.action==="hold")return A0(u,await WW(new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account five-hour quota resets shortly; retaining session affinity."}}),{status:429,headers:{"content-type":"application/json"}}),S,JW.retryAfterSeconds),!1);let X0=await jW(await z0(u)),_N=!1;if(!X0.routeFailure)return A0(u,X0.response);if(X0.response.status===401){let e=u.id;try{if(e===g0)Y.access=await G(),u={...u,access:Y.access};else if(u.account&&g.storage){let Y0=await q0.refreshAccount(u.account,g.storage,{force:!0});if(Y0.access)u={...u,access:Y0.access,account:Y0}}if(await X0.response.body?.cancel().catch(()=>{}),X0=await jW(await z0(u)),!X0.routeFailure)return A0(u,X0.response);_N=X0.response.status===401}catch(Y0){let w0=await q(J),f0=e===g0?w0?.refresh?.mainLastRefreshError:w0?.accounts.find((i0)=>i0.id===e&&N0(i0))?.lastRefreshError;if(!X1(f0))throw Y0;_N=!0}}let OW=X0.response.status===403||_N;if(X0.response.status===429||X0.streamingRateLimit){let e;try{e=u.id===g0?await I.refreshMain(u.access):await I.refreshFallback(u.id,u.access)}catch{e=void 0}let Y0=ZN({quota:e,modelId:E});if(C.mark("sticky_quota_failure",{accountId:u.id,action:Y0.action,reason:Y0.reason}),Y0.action==="hold")return A0(u,await WW(X0.response,S,Y0.retryAfterSeconds,X0.streamingRateLimit));OW=Y0.action==="migrate"}if(OW){let e=u.id;if(g=await NW({storage:g.storage,mainAccessToken:Y.access,requestedModelId:E}),g.candidates.filter((w0)=>w0.accountId!==e).length>0){await X0.response.body?.cancel().catch(()=>{}),F0=await K0(new Set([e]));let w0=g.allRoutes.find((f0)=>f0.id===F0?.accountId);if(F0&&w0){if(u=w0,w?.downgraded)d.bindRecoveryAccount(w,u.id);return A0(u,await z0(u))}}else if((X0.response.status===429||X0.streamingRateLimit)&&R1(Y.access)){let w0=(await w1(g.storage,{includeApiRoutes:!0,modelId:E})).filter(G1);if(w0.length>0){let f0=await U1(D,U,w0,g.storage,X0.response,C,{onSuccess:(i0)=>m(i0.id,"sticky-balanced"),fableRequest:v});if(f0)return C.done("return_sticky_api_fallback",{status:f0.status}),x(f0)}}}return A0(u,X0.response)}}catch(g){if(C.mark("sticky_balanced_error",{error:g instanceof Error?g.message:String(g)}),i)throw g;let K0=g instanceof Error?g:Error(String(g));throw Object.assign(K0,{code:"ECONNRESET",syscall:"sticky-routing"}),K0}}if(p&&_1(H)==="fallback-first")try{let E=f();j0=await w1(H,{includeApiRoutes:R1(Y.access),modelId:T}),C.mark("fallback_first_get_accounts",{ms:s(f()-E),accounts:j0.length});let R=await U1(D,U,j0,H,void 0,C,{returnLastOnExhausted:!1,onSuccess:(c)=>m(c.id,"fallback-first"),fableRequest:v});if(R)return C.done("return_fallback_first",{status:R.status}),x(R);j0=void 0}catch(E){C.mark("fallback_first_error",{error:E instanceof Error?E.message:String(E)})}if(!Y.access||!Y.expires||Y.expires<Date.now()){let R=(await q())?.refresh?.mainLastRefreshError;if(Y.refresh&&R&&t0(R,Y.refresh,Date.now()))throw a("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:R.nextRetryAt,retryCount:R.retryCount,expiresInMs:Y.expires?Y.expires-Date.now():void 0}),Error(FN(R,Date.now()));a("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(Y.access),expiresInMs:Y.expires?Y.expires-Date.now():void 0,expiredAgoMs:Y.expires&&Y.expires<Date.now()?Date.now()-Y.expires:void 0});let c=f();Y.access=await G(),C.mark("refresh_main_access",{ms:s(f()-c)})}if(!Y.access)throw C.done("missing_access_error"),Error("OAuth access token is missing after refresh");function J0(){if(H?.quota?.showToasts!==!0)return;let E=I.getMain();if(!E)return;let R=(H?.accounts??[]).filter((i)=>i.enabled!==!1&&N0(i)).map((i)=>({...i,quota:I.getFallback(i.id,i.access)?.quota??i.quota})),c=F1(E.quota,H),_0;if(c)_0="main";else _0=R.find((i)=>F1(i.quota,H))?.id??"main";mj(E.quota,R,_0)}if(p&&Z0(H))try{let E=f(),R=I.getMain(Y.access),c=R?.quota;if(!c)c=await I.refreshMain(Y.access),R=I.getMain(Y.access),J0();else if(I.needsRefresh(q1,T))if(VN(c)||xN(c,T))c=await I.refreshMain(Y.access),R=I.getMain(Y.access);else I.refreshMain(Y.access).then(()=>{u0().catch(()=>{}),J0()}).catch(()=>{});I0(H,{activeId:"main",route:"main",mainAccessToken:Y.access,mainRefreshToken:Y.refresh});let _0=F1(c,H)&&TN(c,T);if(C.mark("main_quota_for_routing",{ms:s(f()-E),passes:_0,model:T,modelScopedExhausted:xN(c,T)}),!_0){let i=f();j0=await w1(H,{includeApiRoutes:Boolean(R&&R.refreshAfter>Date.now()&&VN(R.quota)),modelId:T}),C.mark("preselect_fallback_accounts",{ms:s(f()-i),accounts:j0.length});let g=await U1(D,U,j0,H,void 0,C,{onSuccess:(K0)=>m(K0.id,"fallback"),fableRequest:v});if(g)return C.done("return_preselected_fallback",{status:g.status}),x(g)}}catch(E){C.mark("main_quota_for_routing_error",{error:E instanceof Error?E.message:String(E)})}let t=I.getMain(Y.access)?.quota;if(H?.quota?.failClosedOnUnknownQuota&&!t&&I.isBackedOff()){let E=I.getLastApiError(),R=E?q4(E,Date.now()):"Quota API unavailable";return a("[quota] blocked: quota API backed off (failClosed)",{nextRetryAt:E?.nextRetryAt,retryCount:E?.retryCount}),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:R}}),{status:429,headers:{"content-type":"application/json","retry-after":String(E?.nextRetryAt?Math.max(1,Math.ceil((E.nextRetryAt-Date.now())/1000)):60)}})}if(e0(H)){if(I.needsRefresh(q1,T))try{let R=(H?.accounts??[]).filter((c)=>c.enabled!==!1&&N0(c)&&Boolean(c.access));await Promise.all([I.refreshMain(Y.access),I.refreshAllFallbacks(R)])}catch(R){a("[quota] killswitch refresh failed",{error:R instanceof Error?R.message:String(R),backedOff:I.isBackedOff()})}t=I.getMain(Y.access)?.quota}if(e0(H)&&!N1(t,H,void 0,T)){let R=z(D,U?.body)?await w1(H,{includeApiRoutes:R1(Y.access),modelId:T}):[];if(R.length>0){a("[route] skipping main (killswitch), trying fallbacks");let C0=await U1(D,U,R,H,void 0,C,{onSuccess:(F0)=>m(F0.id,"fallback")});if(C0)return C.done("return_killswitch_fallback",{status:C0.status}),x(C0)}let c=Date.now(),_0=(H?.accounts??[]).filter((C0)=>C0.enabled!==!1&&N0(C0)).map((C0)=>({...C0,quota:f1(C0)})),i=tJ({mainQuota:t,requestModelId:T,storage:H}),g=g4(t,_0,c,i.isScopedDriven?i.modelId:void 0),K0=aJ({retryAfterSeconds:g,...i.isScopedDriven&&{modelName:i.modelName}});return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:K0}}),{status:429,headers:{"content-type":"application/json","retry-after":String(g)}})}let G0=await r0(D,U,Y.access,C,"main",H,"main",v),P1=!1,k1=await pj(D,U,G0,j0,C,H,Y.access,(E)=>{P1=!0,m(E.id,"fallback")},T,v);if(!P1)m("main","main");return C.done("return_response",{status:k1.status}),x(k1)}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let O=await c1("max");return{url:O.url,instructions:"Paste the authorization code here:",method:"code",callback:async($)=>{return u1($,O.verifier,O.redirectUri,O.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let O=await c1("console");return{url:O.url,instructions:"Paste the authorization code here:",method:"code",callback:async($)=>{let X=await u1($,O.verifier,O.redirectUri,O.state);if(X.type==="failed")return X;return{type:"success",key:(await fetch("https://api.anthropic.com/api/oauth/claude_cli/create_api_key",{method:"POST",headers:{"Content-Type":"application/json",authorization:`Bearer ${X.access}`}}).then((G)=>G.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}};export{tJ as resolveScopedDrivenBlock,aJ as formatKillswitchBlockMessage,p3 as AnthropicAuthPlugin};
|
|
27
|
+
`)&&p.length<65536){let{done:U,value:C}=await A.read();if(U)break;if(M.push(C),S+=C.byteLength,p+=P.decode(C,{stream:!0}),V0(p))break}if(V0(p)){await A.cancel().catch(()=>{});try{A.releaseLock()}catch{}let U=new ReadableStream({start(C){for(let H of M)C.enqueue(H);C.close()}});return w?.mark("inspect_stream_first_event",{ms:W0(g()-R),bytes:S,rateLimited:!0}),{response:new Response(U,{status:V.status,statusText:V.statusText,headers:V.headers}),rateLimited:!0}}let f=new ReadableStream({start(U){for(let C of M)U.enqueue(C)},async pull(U){let{done:C,value:H}=await A.read();if(C){U.close();return}U.enqueue(H)},cancel(U){return A.cancel(U)}});return w?.mark("inspect_stream_first_event",{ms:W0(g()-R),bytes:S,rateLimited:!1}),{response:new Response(f,{status:V.status,statusText:V.statusText,headers:V.headers}),rateLimited:!1}}async function j1(V,w,R,A,M="api_fallback",P,p){if(p?.plan.downgraded)p.warmTarget=void 0,p.opusCacheAnchor=void 0;let S=g(),f=W4(V,w),U=f.get("x-session-affinity")||f.get("x-opencode-session"),C=b(f);f.delete("x-parent-session-id"),f.delete("x-session-affinity"),f.delete("x-opencode-session");let H=w?.body,Q=typeof H==="string"?H.length:void 0;if(H&&typeof H==="string"){let w0=g(),n=(()=>{if(!H4())return!1;try{return f1(JSON.parse(H).model)}catch{return!1}})();if(H=await m4(H,{cache1hEnabled:!C&&P1(),cache1hMode:H1(),fastModeEnabled:n,perf:(j0,J0)=>A?.mark(`rewrite_body_${j0}`,{route:M,...J0})}),e0(f,R),f.set("anthropic-beta",A1(f.get("anthropic-beta"),[])),n)J4(f);A?.mark("rewrite_body",{route:M,ms:W0(g()-w0),originalBytes:Q,rewrittenBytes:H.length,cacheEnabled:!C&&P1(),cacheMode:H1(),fastModeEnabled:n,subagent:C})}else e0(f,R);let d=h4(V,{baseURL:R.baseURL}),L=g(),l;try{l=await fetch(d.input,{...w,body:H,headers:f,...g4()&&{tls:{rejectUnauthorized:!1}}})}catch(w0){if(typeof H==="string")await y1({affinity:U,route:M,error:RW(w0),bodyText:H,url:d.url?.toString()??O4(d.input),method:$4(V,w),headers:f});throw w0}if(typeof H==="string")await y1({affinity:U,route:M,status:l.status,bodyText:H,url:d.url?.toString()??O4(d.input),method:$4(V,w),headers:f});return A?.mark("send_headers_received",{route:M,ms:W0(g()-L),status:l.status,relayConfigured:!1,totalSendWithAccessMs:W0(g()-S),baseURL:R.baseURL}),l}async function W1(V,w,R,A,M="unknown",P,p="main",S){let f=g(),U=P,C=async()=>{return U??=await v(Y),U},H=W4(V,w),Q=H.get("x-session-affinity")||H.get("x-opencode-session"),d=b(H);H.delete("x-parent-session-id"),H.delete("x-session-affinity"),H.delete("x-opencode-session");let L=w?.body,l;if(L&&typeof L==="string"){let F=g();try{let y=JSON.parse(L);if(typeof y.model==="string")l=y.model}catch{}A?.mark("model_parse_for_identity",{route:M,ms:W0(g()-F),bodyBytes:L.length})}let w0=g(),n=await o4(R,l);A?.mark("resolve_claude_code_identity",{route:M,ms:W0(g()-w0),hasAccountUuid:Boolean(n.accountUuid)});let j0=typeof L==="string"?L.length:void 0;if(L&&typeof L==="string"){let F=g(),y=(()=>{if(!H4())return!1;try{return f1(JSON.parse(L).model)}catch{return!1}})(),_0=!d&&P1(),N0=H1(),i=S?.plan.downgraded&&S.plan.standbyCacheAnchor?.oauthAccountId===p?S.plan.standbyCacheAnchor:void 0;if(L=await m4(L,{cache1hEnabled:_0,cache1hMode:N0,fastModeEnabled:y,identity:n,hybridStandbyAnchor:i,serverSideFallbackEnabled:u==="server",perf:(C0,N1)=>{if(A?.mark(`rewrite_body_${C0}`,{route:M,...N1}),C0==="cache_strategy"&&N1?.standbyBridgeApplied===!0&&S&&!S.standbyBridgeLogged)S.standbyBridgeLogged=!0,k.info("fable-fallback","restored standby Opus cache bridge",{session:S.plan.sessionId,distanceBlocks:N1?.standbyDistanceBlocks})}}),S?.plan.downgraded&&_0&&N0==="hybrid"){let C0=CW(L);S.opusCacheAnchor=C0?{...C0,oauthAccountId:p}:void 0}let S0=g();try{v1(H,R,{body:JSON.parse(L),identity:n}),A?.mark("set_oauth_headers_body_parse",{route:M,ms:W0(g()-S0),bodyBytes:L.length,parsed:!0})}catch{v1(H,R,{identity:n}),A?.mark("set_oauth_headers_body_parse",{route:M,ms:W0(g()-S0),bodyBytes:L.length,parsed:!1})}if(y)J4(H);A?.mark("rewrite_body",{route:M,ms:W0(g()-F),originalBytes:j0,rewrittenBytes:L.length,cacheEnabled:!d&&P1(),cacheMode:H1(),fastModeEnabled:y,subagent:d})}let J0=h4(V);if(S&&typeof L==="string")S.warmTarget={url:J0.url?.toString()??J0.input.toString(),headers:new Headers(H),bodyText:L,oauthAccountId:p};if(typeof L==="string"&&P1()&&H1()==="hybrid"){let F=await C();if(!d||sW(F)){let y=g(),_0=i0.track({sessionId:Q,url:J0.url?.toString()??J0.input.toString(),headers:H,bodyText:L,storage:F,cacheMode:"hybrid",oauthAccountId:p});A?.mark("cachekeep_track",{session:Q,ms:W0(g()-y),tracked:_0.tracked,reason:_0.tracked?void 0:_0.reason,bodyBytes:L.length})}}let x1=!1,J1=async()=>{x1=!0;try{let F=await fetch(J0.input,{...w,body:L,headers:H,...g4()&&{tls:{rejectUnauthorized:!1}}});if(typeof L==="string")await y1({affinity:Q,route:M,status:F.status,bodyText:L,url:J0.url?.toString()??O4(J0.input),method:$4(V,w),headers:H});return F}catch(F){if(typeof L==="string")await y1({affinity:Q,route:M,error:RW(F),bodyText:L,url:J0.url?.toString()??O4(J0.input),method:$4(V,w),headers:H});throw F}},F1=Gj(await C()),E1={accountId:p,accessToken:R},r1=g(),q=await kJ({config:F1,input:J0.input,init:w,headers:H,body:L,fallback:J1,affinity:Q,optimisticResponse:F1?.transport==="websocket",onResponseHeaders:(F)=>X0(F,E1)});if(A?.mark("send_headers_received",{route:M,ms:W0(g()-r1),status:q.status,relayConfigured:F1!=null,totalSendWithAccessMs:W0(g()-f)}),x1)X0(q.headers,E1);return q}async function V3(V){if(!V)return!1;try{return await E.refreshMain(V),o1(V)}catch{return!1}}async function M1(V,w={}){let R=await L0.getUsableFallbackAccounts(V,{modelId:w.modelId}),A=new Map(R.map((P)=>[P.id,P])),M=[];for(let P of V?.accounts??[]){if(D0(P)){let p=A.get(P.id);if(p)M.push(p);continue}if(w.includeApiRoutes===!0&&w1(P)&&P.enabled!==!1&&P.apiKey&&G4(P.baseURL))M.push(P)}if(!Y1(V))return M;return M.filter((P)=>D0(P)?D1(n1(P),V,P.id,w.modelId):!0)}async function Pj(V){let w=E.getMain(V.mainAccessToken),R=w?.quota;if(!C1(w?.quota,V.storage,Date.now(),V.requestedModelId))try{R=await E.refreshMain(V.mainAccessToken)}catch{}let A=await L0.getUsableFallbackAccounts(V.storage,{modelId:V.requestedModelId}),M=await v(Y)??V.storage,P=new Map(A.map((C)=>[C.id,C])),p=[];if(!s0(M?.refresh?.mainLastRefreshError))p.push({id:y0,access:V.mainAccessToken,quota:R,order:0});for(let[C,H]of(M?.accounts??[]).entries()){if(H.enabled===!1||!D0(H))continue;let Q=P.get(H.id)??H;if(!Q.access||s0(Q.lastRefreshError))continue;let d=n1(Q);if(!C1(d,M,Date.now(),V.requestedModelId))try{d=await E.refreshFallback(Q.id,Q.access)}catch{}p.push({id:Q.id,access:Q.access,quota:d,order:C+1,account:Q})}let S=new Set(p.flatMap((C)=>{let H=C.id===y0?M?.refresh?.mainLastRefreshError:C.account?.lastRefreshError;if(s0(H))return[];if(C1(C.quota,M,Date.now(),V.requestedModelId)&&L4({quota:C.quota,modelId:V.requestedModelId}).action==="migrate")return[];if(Y1(M)&&!D1(C.quota,M,C.id===y0?void 0:C.id,V.requestedModelId))return[];return[C.id]})),f=new Set(A.map((C)=>C.id)),U=p.flatMap((C)=>{if(!C.quota)return[];let H=C.id===y0?void 0:C.id;return g1(C.quota,M)&&u4(C.quota,V.requestedModelId)&&(!Y1(M)||D1(C.quota,M,H,V.requestedModelId))&&(C.id===y0||f.has(C.id))?[{accountId:C.id,quota:C.quota,order:C.order}]:[]});return{storage:M,allRoutes:p,candidates:U,retainAccountIds:S}}async function Hj(V,w,R,A=!1){let M=new Headers(V.headers);if(M.set("retry-after",String(pJ(w,R))),A)return await V.body?.cancel().catch(()=>{}),M.set("content-type","application/json"),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account five-hour quota resets shortly; retaining session affinity."}}),{status:429,headers:M});return new Response(V.body,{status:V.status,statusText:V.statusText,headers:M})}async function T1(V,w,R,A,M,P,p){if(!R.length)return M??null;let S=p?.returnLastOnExhausted??!0;await M?.body?.cancel().catch(()=>{});let f=M??null;for(let[U,C]of R.entries()){let H;if(w1(C)){if(!C.apiKey)continue;H=await j1(V,w,C,P,`api_fallback_${U}`,A,p?.fableRequest)}else{let d=C.access;if(!d)continue;H=await W1(V,w,d,P,`fallback_${U}`,A,C.id,p?.fableRequest)}f=H;let Q=z4(H.status,A);if(!Q){let d=await T0(H,P);H=d.response,f=H,Q=d.rateLimited}if(!Q){if(await L0.markUsed(C),await p?.onSuccess?.(C),D0(C)&&C.access&&E.shouldRefreshOnRequestCount(u1))E.refreshFallback(C.id,C.access).then(()=>p?.onSuccess?.(C)).catch(()=>{});return H}if(U<R.length-1||!S)await H.body?.cancel().catch(()=>{})}return S?f:null}async function z3(V,w,R,A,M,P,p,S,f,U){if(!_(V,w?.body))return R;let C=g(),H=P??await v(Y);if(M?.mark("fallback_load_storage",{ms:W0(g()-C),cached:!!P}),!(H?.accounts??[]).some((j0)=>j0.enabled!==!1&&(D0(j0)||w1(j0)&&Boolean(j0.apiKey)&&G4(j0.baseURL))))return R;let d=R,L=z4(d.status,H),l=wj(d,!1);if(!L){let j0=await T0(d,M);d=j0.response,L=j0.rateLimited,l=wj(d,j0.rateLimited)}if(!L)return d;let w0=!1;if(A)w0=A.some(w1);else if(l)w0=await V3(p);let n=A;if(!n){let j0=g();n=await M1(H,{includeApiRoutes:w0,modelId:f}),M?.mark("fallback_get_accounts",{ms:W0(g()-j0),accounts:n.length})}if(Y1(H)){let j0=n.length;if(n=n.filter((J0)=>D0(J0)?D1(n1(J0),H,J0.id,f):!0),n.length<j0)O0("[killswitch] filtered fallbacks",{before:j0,after:n.length})}return await T1(V,w,n,H,d,M,{onSuccess:S,fableRequest:U})??d}return{apiKey:"",async fetch(V,w){let R=W4(V,w),A=R.get("x-session-affinity")||R.get("x-opencode-session"),M=I(w?.body),P=e.plan(A,w?.body);if(P&&!P.downgraded){let q=t0.get(P.recoveryKey);if(q)await q,P=e.plan(A,w?.body)}let p=u==="server"&&z1(P?.effectiveModel??M)?P?.effectiveModel??M:void 0,S=P?{plan:P}:void 0;if(P?.downgraded)w={...w,body:P.bodyText};let f=w?.body,U=g7({bodyBytes:typeof f==="string"?f.length:void 0}),C=(q)=>xW(q,{perf:(F,y)=>U.mark(F,y),contentFilterModel:P?.requestedModel,...!P?.downgraded&&P?{onContentFilter:(F)=>{if(!S?.warmTarget)return k.debug("fable-fallback","content filter recovery unavailable for non-OAuth route",{session:P.sessionId}),!1;let y=e.activate(P,S.warmTarget.oauthAccountId);m.delete(P.recoveryKey),k.info("fable-fallback","content filter detected; switching session to Opus 4.8",{session:P.sessionId,requestedModel:P.requestedModel,completedToolUse:F?.completedToolUse===!0,remaining:y}),I1({sessionId:P.sessionId,mode:"opus",remaining:y,requestedModelId:P.requestedModel},L,Q,u7(P.requestedModel))}}:{},...P?.downgraded&&S?{onComplete:(F)=>{let y=e.complete(P,S.opusCacheAnchor);if(!y.counted)return;k.info("fable-fallback","Opus 4.8 turn completed",{session:P.sessionId,requestedModel:P.requestedModel,finishReason:F,remaining:y.remaining}),I1({sessionId:P.sessionId,mode:"opus",remaining:y.remaining,requestedModelId:P.requestedModel},L,Q);let _0=b1(S);if(y.remaining===0){let N0=()=>{if(e.remaining(P)!==0)return;I1({sessionId:P.sessionId,mode:"fable",remaining:0,requestedModelId:P.requestedModel},L,Q,d7(P.requestedModel))};_0.then(N0,N0)}}}:{},...p?{serverSideFallbackModel:p,...P?{onServerSideFallbackOutcome:(F)=>eJ(P,F,L,Q)}:{}}:{}}),H=g(),Q=await N();if(U.mark("get_auth",{ms:W0(g()-H),authType:Q.type,hasAccess:Boolean(Q.access)}),Q.type!=="oauth"){let q=await fetch(V,w);return U.done("non_oauth_passthrough",{status:q.status}),q}await Kj(Q.refresh);let d=g(),L=await v();U.mark("load_storage",{ms:W0(g()-d)}),E.updateStorage(L),E.seedMainFromStorage(L,Q.access),E.seedFallbacksFromAccounts((L?.accounts??[]).filter(D0));let l=A?K0.get(A):void 0;if(!P||u==="server"&&l?.requestedModelId&&g0(l.requestedModelId)!==g0(P.requestedModel))j3(A,L,Q);let w0=_(V,w?.body),n=I(w?.body);if(w0)u1++;if(w0&&Q.access&&(!Q.expires||Q.expires>Date.now()))c1(L,Q.access);let j0=(q,F)=>B0(L,{activeId:q,route:F,mainAccessToken:Q.access,mainRefreshToken:Q.refresh}),J0;if(w0&&A&&L1(L)==="sticky-balanced"&&Q.access){let q=P?.effectiveModel??n,F=mJ(q),y=i0.trackedOAuthRoute(A),_0=P?.cacheAccountId??(y?y.oauthAccountId??y0:void 0),N0=!1;try{let i=await Pj({storage:L,mainAccessToken:Q.access,requestedModelId:q}),S0=(F0)=>Z0.resolve({sessionId:A,family:F,modelId:q,candidates:i.candidates,retainAccountIds:i.retainAccountIds,storage:i.storage,inputBytes:typeof w?.body==="string"?Buffer.byteLength(w.body):1,preferredAccountId:_0,excludeAccountIds:F0}),C0=s0(i.storage?.refresh?.mainLastRefreshError),N1=i.allRoutes.length===0&&!C0||i.allRoutes.some((F0)=>!F0.quota||!C1(F0.quota,i.storage,Date.now(),q)),c0=await S0();if(!c0&&N1)throw Error("Sticky-balanced routing is waiting for current OAuth quota snapshots");if(!c0){let F0=yJ({mainRefreshError:i.storage?.refresh?.mainLastRefreshError,routeQuotas:i.allRoutes.flatMap((u0)=>u0.quota?[u0.quota]:[]),modelId:q});return U.done("return_sticky_no_route",{status:F0.status}),F0}let t=i.allRoutes.find((F0)=>F0.id===c0?.accountId);if(c0&&t){if(N0=!0,P?.downgraded&&e.bindRecoveryAccount(P,t.id))k.info("fable-fallback","rebound recovery to migrated sticky account",{accountId:t.id});let F0=(Y0)=>W1(V,w,Y0.access,U,`sticky:${Y0.id}`,i.storage,Y0.id,S),u0=async(Y0,H0,I0=!0)=>{if(I0&&Y0.account)await L0.markUsed(Y0.account);return j0(Y0.id,"sticky-balanced"),U.done("return_sticky_balanced",{status:H0.status,accountId:Y0.id,created:c0?.created,migrated:c0?.migrated}),C(H0)},Cj=async(Y0)=>{let H0=Y0,I0=z4(Y0.status,i.storage),k0=!1;if(!I0){let n0=await T0(Y0,U);H0=n0.response,k0=n0.rateLimited,I0=n0.rateLimited}return{response:H0,routeFailure:I0,streamingRateLimit:k0}},Lj=C1(t.quota,i.storage,Date.now(),q)?L4({quota:t.quota,modelId:q}):void 0;if(Lj?.action==="hold")return u0(t,await Hj(new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account five-hour quota resets shortly; retaining session affinity."}}),{status:429,headers:{"content-type":"application/json"}}),A,Lj.retryAfterSeconds),!1);let P0=await Cj(await F0(t)),S4=!1;if(!P0.routeFailure)return u0(t,P0.response);if(P0.response.status===401){let Y0=t.id;try{if(Y0===y0)Q.access=await G(),t={...t,access:Q.access};else if(t.account&&i.storage){let H0=await L0.refreshAccount(t.account,i.storage,{force:!0});if(H0.access)t={...t,access:H0.access,account:H0}}if(await P0.response.body?.cancel().catch(()=>{}),P0=await Cj(await F0(t)),!P0.routeFailure)return u0(t,P0.response);S4=P0.response.status===401}catch(H0){let I0=await v(Y),k0=Y0===y0?I0?.refresh?.mainLastRefreshError:I0?.accounts.find((n0)=>n0.id===Y0&&D0(n0))?.lastRefreshError;if(!s0(k0))throw H0;S4=!0}}let Bj=P0.response.status===403||S4;if(P0.response.status===429||P0.streamingRateLimit){let Y0;try{Y0=t.id===y0?await E.refreshMain(t.access):await E.refreshFallback(t.id,t.access)}catch{Y0=void 0}let H0=L4({quota:Y0,modelId:q});if(U.mark("sticky_quota_failure",{accountId:t.id,action:H0.action,reason:H0.reason}),H0.action==="hold")return u0(t,await Hj(P0.response,A,H0.retryAfterSeconds,P0.streamingRateLimit));Bj=H0.action==="migrate"}if(Bj){let Y0=t.id;if(i=await Pj({storage:i.storage,mainAccessToken:Q.access,requestedModelId:q}),i.candidates.filter((I0)=>I0.accountId!==Y0).length>0){await P0.response.body?.cancel().catch(()=>{}),c0=await S0(new Set([Y0]));let I0=i.allRoutes.find((k0)=>k0.id===c0?.accountId);if(c0&&I0){if(t=I0,P?.downgraded)e.bindRecoveryAccount(P,t.id);return u0(t,await F0(t))}}else if((P0.response.status===429||P0.streamingRateLimit)&&o1(Q.access)){let I0=(await M1(i.storage,{includeApiRoutes:!0,modelId:q})).filter(w1);if(I0.length>0){let k0=await T1(V,w,I0,i.storage,P0.response,U,{onSuccess:(n0)=>j0(n0.id,"sticky-balanced"),fableRequest:S});if(k0)return U.done("return_sticky_api_fallback",{status:k0.status}),C(k0)}}}return u0(t,P0.response)}}catch(i){if(U.mark("sticky_balanced_error",{error:i instanceof Error?i.message:String(i)}),N0)throw i;let S0=i instanceof Error?i:Error(String(i));throw Object.assign(S0,{code:"ECONNRESET",syscall:"sticky-routing"}),S0}}if(w0&&L1(L)==="fallback-first")try{let q=g();J0=await M1(L,{includeApiRoutes:o1(Q.access),modelId:n}),U.mark("fallback_first_get_accounts",{ms:W0(g()-q),accounts:J0.length});let F=await T1(V,w,J0,L,void 0,U,{returnLastOnExhausted:!1,onSuccess:(y)=>j0(y.id,"fallback-first"),fableRequest:S});if(F)return U.done("return_fallback_first",{status:F.status}),C(F);J0=void 0}catch(q){U.mark("fallback_first_error",{error:q instanceof Error?q.message:String(q)})}if(!Q.access||!Q.expires||Q.expires<Date.now()){let F=(await v())?.refresh?.mainLastRefreshError;if(Q.refresh&&F&&Z1(F,Q.refresh,Date.now()))throw O0("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:F.nextRetryAt,retryCount:F.retryCount,expiresInMs:Q.expires?Q.expires-Date.now():void 0}),Error(i4(F,Date.now()));O0("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(Q.access),expiresInMs:Q.expires?Q.expires-Date.now():void 0,expiredAgoMs:Q.expires&&Q.expires<Date.now()?Date.now()-Q.expires:void 0});let y=g();Q.access=await G(),U.mark("refresh_main_access",{ms:W0(g()-y)})}if(!Q.access)throw U.done("missing_access_error"),Error("OAuth access token is missing after refresh");function x1(){if(L?.quota?.showToasts!==!0)return;let q=E.getMain();if(!q)return;let F=(L?.accounts??[]).filter((N0)=>N0.enabled!==!1&&D0(N0)).map((N0)=>({...N0,quota:E.getFallback(N0.id,N0.access)?.quota??N0.quota})),y=g1(q.quota,L),_0;if(y)_0="main";else _0=F.find((N0)=>g1(N0.quota,L))?.id??"main";X3(q.quota,F,_0)}if(w0&&Q0(L))try{let q=g(),F=E.getMain(Q.access),y=F?.quota;if(!y)y=await E.refreshMain(Q.access),F=E.getMain(Q.access),x1();else if(E.needsRefresh(u1,n))if(E4(y)||c4(y,n))y=await E.refreshMain(Q.access),F=E.getMain(Q.access);else E.refreshMain(Q.access).then(()=>{a0().catch(()=>{}),x1()}).catch(()=>{});B0(L,{activeId:"main",route:"main",mainAccessToken:Q.access,mainRefreshToken:Q.refresh});let _0=g1(y,L)&&u4(y,n);if(U.mark("main_quota_for_routing",{ms:W0(g()-q),passes:_0,model:n,modelScopedExhausted:c4(y,n)}),!_0){let N0=g();J0=await M1(L,{includeApiRoutes:Boolean(F&&F.refreshAfter>Date.now()&&E4(F.quota)),modelId:n}),U.mark("preselect_fallback_accounts",{ms:W0(g()-N0),accounts:J0.length});let i=await T1(V,w,J0,L,void 0,U,{onSuccess:(S0)=>j0(S0.id,"fallback"),fableRequest:S});if(i)return U.done("return_preselected_fallback",{status:i.status}),C(i)}}catch(q){U.mark("main_quota_for_routing_error",{error:q instanceof Error?q.message:String(q)})}let J1=E.getMain(Q.access)?.quota;if(L?.quota?.failClosedOnUnknownQuota&&!J1&&E.isBackedOff()){let q=E.getLastApiError(),F=q?eW(q,Date.now()):"Quota API unavailable";return O0("[quota] blocked: quota API backed off (failClosed)",{nextRetryAt:q?.nextRetryAt,retryCount:q?.retryCount}),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:F}}),{status:429,headers:{"content-type":"application/json","retry-after":String(q?.nextRetryAt?Math.max(1,Math.ceil((q.nextRetryAt-Date.now())/1000)):60)}})}if(Y1(L)){if(E.needsRefresh(u1,n))try{let F=(L?.accounts??[]).filter((y)=>y.enabled!==!1&&D0(y)&&Boolean(y.access));await Promise.all([E.refreshMain(Q.access),E.refreshAllFallbacks(F)])}catch(F){O0("[quota] killswitch refresh failed",{error:F instanceof Error?F.message:String(F),backedOff:E.isBackedOff()})}J1=E.getMain(Q.access)?.quota}if(Y1(L)&&!D1(J1,L,void 0,n)){let F=_(V,w?.body)?await M1(L,{includeApiRoutes:o1(Q.access),modelId:n}):[];if(F.length>0){O0("[route] skipping main (killswitch), trying fallbacks");let C0=await T1(V,w,F,L,void 0,U,{onSuccess:(N1)=>j0(N1.id,"fallback")});if(C0)return U.done("return_killswitch_fallback",{status:C0.status}),C(C0)}let y=Date.now(),_0=(L?.accounts??[]).filter((C0)=>C0.enabled!==!1&&D0(C0)).map((C0)=>({...C0,quota:n1(C0)})),N0=v7({mainQuota:J1,requestModelId:n,storage:L}),i=OJ(J1,_0,y,N0.isScopedDriven?N0.modelId:void 0),S0=f7({retryAfterSeconds:i,...N0.isScopedDriven&&{modelName:N0.modelName}});return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:S0}}),{status:429,headers:{"content-type":"application/json","retry-after":String(i)}})}let F1=await W1(V,w,Q.access,U,"main",L,"main",S),E1=!1,r1=await z3(V,w,F1,J0,U,L,Q.access,(q)=>{E1=!0,j0(q.id,"fallback")},n,S);if(!E1)j0("main","main");return U.done("return_response",{status:r1.status}),C(r1)}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let N=await Z4("max");return{url:N.url,instructions:"Paste the authorization code here:",method:"code",callback:async($)=>{return Y4($,N.verifier,N.redirectUri,N.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let N=await Z4("console");return{url:N.url,instructions:"Paste the authorization code here:",method:"code",callback:async($)=>{let D=await Y4($,N.verifier,N.redirectUri,N.state);if(D.type==="failed")return D;return{type:"success",key:(await fetch("https://api.anthropic.com/api/oauth/claude_cli/create_api_key",{method:"POST",headers:{"Content-Type":"application/json",authorization:`Bearer ${D.access}`}}).then((G)=>G.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}},SN=e7;export{v7 as resolveScopedDrivenBlock,f7 as formatKillswitchBlockMessage,SN as AnthropicAuthPlugin};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{cc as a,dc as b,ec as c,fc as d,gc as e,hc as f,ic as g,jc as h,kc as i,lc as j,mc as k,nc as l,oc as m}from"./index-dex8fs0m.js";import"./index-dzs7w297.js";export{d as shouldEmit,b as setLogLevel,m as relayLog,h as redactPayload,a as parseLogLevel,k as logger,l as log,g as isSecretKey,c as getLogLevel,e as getLogFilePath,i as formatLogLine,j as __setLogTestSink,f as SECRET_KEY_EXACT};
|
package/dist/rpc/port-file.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{pc as a,qc as b}from"../index-2k47hc8b.js";import"../index-dzs7w297.js";export{a as writePortFile,b as discoverPortFile};
|
package/dist/rpc/rpc-client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{qc as l}from"../index-2k47hc8b.js";import"../index-dzs7w297.js";async function a(n,e,t,o){let r=await l(n,o);if(!r)return null;let i=new AbortController,p=setTimeout(()=>i.abort(),2000);try{let s=await fetch(`http://127.0.0.1:${r.port}/rpc/${e}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${r.token}`},body:JSON.stringify(t),signal:i.signal});if(!s.ok)return null;return await s.json()}catch{return null}finally{clearTimeout(p)}}function u(n,e){return{async pending(t,o){return(await a(n,"pending-notifications",{lastReceivedId:t,sessionId:o},e))?.messages??[]},async apply(t){return await a(n,"apply",{...t},e)??{text:"apply failed",knobs:{}}}}}export{u as createRpcClient};
|
package/dist/rpc/rpc-dir.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{rc as a,sc as b}from"../index-075t8qec.js";import"../index-dzs7w297.js";export{a as tmpdir,b as getRpcDir};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const SERVER_SIDE_FALLBACK_BETA = "server-side-fallback-2026-07-01";
|
|
2
|
+
export declare const SERVER_FALLBACK_MARKER_TEXT = "\u2060";
|
|
3
|
+
export declare const SERVER_FALLBACK_SIGNATURE_PREFIX = "cortexkit-server-fallback-v1:";
|
|
4
|
+
export type ContentFilterFallbackMode = 'server' | 'legacy';
|
|
5
|
+
export type ServerSideFallbackOutcome = {
|
|
6
|
+
requestedModel: string;
|
|
7
|
+
servedModel?: string;
|
|
8
|
+
targetModel?: string;
|
|
9
|
+
fallback: boolean;
|
|
10
|
+
handoff: boolean;
|
|
11
|
+
stopReason: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function resolveContentFilterFallbackMode(value: string | undefined): ContentFilterFallbackMode;
|
|
14
|
+
export declare function applyServerSideFallbackToBody(body: Record<string, unknown>, requested: boolean): {
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
restoredMarkers: number;
|
|
17
|
+
droppedMarkers: number;
|
|
18
|
+
};
|
|
19
|
+
export declare function createServerSideFallbackStreamRewriter(options: {
|
|
20
|
+
requestedModel: string;
|
|
21
|
+
onOutcome?: (outcome: ServerSideFallbackOutcome) => void;
|
|
22
|
+
onRefusalAfterToolUse?: () => boolean | undefined;
|
|
23
|
+
}): {
|
|
24
|
+
push(text: string): string;
|
|
25
|
+
flush(): string;
|
|
26
|
+
};
|
package/dist/sidebar-state.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export interface SidebarAccountState {
|
|
|
41
41
|
}
|
|
42
42
|
export interface FableRecoverySidebarState {
|
|
43
43
|
sessionId: string;
|
|
44
|
-
mode: 'opus' | 'fable';
|
|
44
|
+
mode: 'opus' | 'fable' | 'server';
|
|
45
45
|
remaining: number;
|
|
46
46
|
changedAt: number;
|
|
47
47
|
/**
|
|
@@ -50,6 +50,8 @@ export interface FableRecoverySidebarState {
|
|
|
50
50
|
* state files; older recoveries default to Fable 5 in the summary.
|
|
51
51
|
*/
|
|
52
52
|
requestedModelId?: string;
|
|
53
|
+
/** Anthropic-selected target while server-side safety fallback is active. */
|
|
54
|
+
targetModelId?: string;
|
|
53
55
|
}
|
|
54
56
|
export interface SidebarState {
|
|
55
57
|
main: {
|