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