@cortexkit/opencode-anthropic-auth 1.17.0 → 1.18.0

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