@cortexkit/opencode-anthropic-auth 1.14.0 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
- import{$ as dD,$a as lO,A as G_,Aa as b_,B as ID,Ba as g_,C as V_,Ca as sD,D as CD,Da as m_,E as K_,Ea as z0,F as w_,Fa as i_,G as z_,Ga as aD,H as I_,Ha as MD,I as C_,Ia as p_,J as iD,Ja as eD,K as LD,Ka as s0,L as L_,La as DO,M as U_,Ma as FD,N as x0,Na as HD,O as pD,Oa as l_,P as Q_,Pa as OO,Q as UD,Qa as _O,R as B_,Ra as d_,S as M_,Sa as WO,T as F_,Ta as n_,U as lD,Ua as NO,V as H_,Va as pO,W as QD,Wa as a0,X as r0,Xa as u_,Y as f_,Ya as c_,Z as e0,Za as o_,_ as x_,_a as r_,a as AO,aa as E_,ab as dO,b as SO,ba as T_,bb as nO,c as i0,ca as R_,cb as uO,d as p0,da as A_,db as t_,e as qO,ea as nD,eb as jO,f as v0,fa as S_,fb as s_,g as j_,gb as a_,h as vO,ha as q_,hb as JO,i as kO,ia as uD,j as yO,ja as k0,jb as e_,k as J_,ka as y0,l as KD,la as t0,lb as PO,m as wD,ma as v_,mb as fD,n as $0,na as BD,nb as D1,o as n0,oa as hO,ob as O1,p as zD,pa as bO,pb as $O,q as $_,qa as cD,r as X_,ra as gO,s as V0,sa as mO,t as T,ta as iO,ua as oD,v as u0,va as k_,w as Y_,wa as y_,x as c0,xa as rD,y as o0,ya as h_,z as Z_,za as tD}from"./index-fwjqfkj2.js";import{Ab as c,Bb as p,rb as P_}from"./index-se4sd5kz.js";import{Db as W1,Hb as N1}from"./index-8meqn6xw.js";import{Pb as LO}from"./index-ha0gz07d.js";import{Sb as _1}from"./index-97vmbv5w.js";import"./index-1gc9eney.js";import{randomUUID as mD}from"node:crypto";function q0(D){return typeof D==="object"&&D!==null}function G1(D){if(Array.isArray(D))return D;if(q0(D)&&Array.isArray(D.data))return D.data;return[]}function V1(D){if(!q0(D)||!q0(D.info))return;return typeof D.info.role==="string"?D.info.role:void 0}function ZO(D){if(!q0(D)||!q0(D.info))return null;let _=D.info,O=q0(_.model)?_.model:void 0,W=typeof _.agent==="string"?_.agent:void 0,j=typeof O?.providerID==="string"?O.providerID:typeof _.providerID==="string"?_.providerID:void 0,$=typeof O?.modelID==="string"?O.modelID:typeof _.modelID==="string"?_.modelID:void 0,z=typeof O?.variant==="string"?O.variant:typeof _.variant==="string"?_.variant:void 0;if(!W&&(!j||!$)&&!z)return null;let A={};if(W)A.agent=W;if(j&&$)A.model={providerID:j,modelID:$};if(z)A.variant=z;return A}function GO(D,_){return{agent:D.agent??_.agent,model:D.model??_.model,variant:D.variant??_.variant}}function VO(D){return Boolean(D.agent&&D.model&&D.variant)}async function KO(D,_){if(!D||!_)return null;let O=D;if(typeof O.session?.messages!=="function")return null;let W=[];try{W=G1(await Promise.resolve(O.session.messages({path:{id:_},query:{limit:100}})))}catch{return null}if(W.length===0)return null;let j={};for(let $=W.length-1;$>=0;$--){if(V1(W[$])!=="assistant")continue;let z=ZO(W[$]);if(!z)continue;if(j=GO(j,z),VO(j))return j}for(let $=W.length-1;$>=0;$--){let z=ZO(W[$]);if(!z)continue;if(j=GO(j,z),VO(j))return j}if(!j.agent&&!j.model&&!j.variant)return null;return j}var B0=[],K1=1,qD=0,wO=new Map;function zO(D,_){if(B0.push({id:K1++,type:"open-dialog",payload:D,sessionId:_}),B0.length>100)B0=B0.slice(B0.length-100)}function IO(D=0,_){let O=Date.now();if(qD=O,_!==void 0)wO.set(_,O);let W=(j)=>_===void 0||j.sessionId===void 0||j.sessionId===_;if(D>0)B0=B0.filter((j)=>{if(j.id>D)return!0;if(_===void 0)return!1;return j.sessionId!==_});return B0.filter((j)=>j.id>D&&W(j))}function CO(D){let _=Date.now();if(D!==void 0){let O=wO.get(D)??0;return O>0&&_-O<3000}return qD>0&&_-qD<3000}import{randomBytes as w1,timingSafeEqual as z1}from"node:crypto";import{unlink as I1}from"node:fs/promises";import{createServer as C1}from"node:http";import{join as L1}from"node:path";function U1(D){return new Promise((_,O)=>{let W=[],j=0;D.on("data",($)=>{if(j+=$.length,j>1e6){D.destroy(),O(Error("body too large"));return}W.push($)}),D.on("end",()=>_(Buffer.concat(W).toString("utf8"))),D.on("error",O)})}function Q1(D,_){if(!D?.startsWith("Bearer "))return!1;let O=Buffer.from(D.slice(7)),W=Buffer.from(_);return O.length===W.length&&z1(O,W)}async function UO(D){let _=w1(32).toString("hex"),O=C1(($,z)=>{W($,z)});async function W($,z){let A=(i,y)=>{z.writeHead(i,{"content-type":"application/json"}),z.end(JSON.stringify(y))};try{let i=$.url??"";if($.method==="GET"&&i==="/health")return A(200,{ok:!0});if($.method!=="POST"||!i.startsWith("/rpc/"))return A(404,{error:"not found"});if(!Q1($.headers.authorization,_))return A(401,{error:"unauthorized"});let y=i.slice(5),L=JSON.parse(await U1($)||"{}");if(y==="pending-notifications"){let h=D.drain(Number(L.lastReceivedId??0),typeof L.sessionId==="string"?L.sessionId:void 0);return A(200,{messages:h})}if(y==="apply"){let h=await D.apply(L);return A(200,h)}return A(404,{error:"unknown method"})}catch(i){if(!z.headersSent&&!z.writableEnded&&!z.destroyed)A(500,{error:i instanceof Error?i.message:String(i)})}}let j=await new Promise(($,z)=>{O.on("error",z),O.listen(0,"127.0.0.1",()=>{let A=O.address();if(A&&typeof A==="object")$(A.port);else z(Error("no port"))})});O.unref();try{await LO(D.dir,{port:j,token:_,pid:process.pid})}catch($){throw await new Promise((z)=>O.close(()=>z())),$}return{port:j,token:_,async stop(){await new Promise(($)=>O.close(()=>$())),await I1(L1(D.dir,`port-${process.pid}.json`)).catch(()=>{})}}}function QO(D,_){let O=new Map,W=0,j=0,$=0,z=0,A=0,i=(h)=>{let o=performance.now(),j0=D(h);return A+=performance.now()-o,$++,j0};return{call:(h)=>{if(!_.enabled())return i(h);let o=O.get(h);if(o!==void 0)return j++,O.delete(h),O.set(h,o),o;let j0=i(h),I0=h.length+j0.length;if(I0>_.maxBytes)return j0;O.set(h,j0),W+=I0;while(W>_.maxBytes&&O.size>1){let r=O.keys().next().value,L0=O.get(r)??"";O.delete(r),W-=r.length+L0.length,z++}return j0},stats:()=>({hits:j,misses:$,evictions:z,entries:O.size,cacheBytes:W,computeMsTotal:A})}}function BO(D){return`${AO}${D.charAt(0).toUpperCase()}${D.slice(1)}`}function cO(D){if(D==="StructuredOutput")return D;return`${D.charAt(0).toLowerCase()}${D.slice(1)}`}var B1=new Set(["callgraph","conflicts","delete","import","inspect","move","navigate","outline","refactor","safety","search","transform","zoom"]);function MO(D){let _=cO(D);if(_.startsWith("aft_"))return _;if(B1.has(_))return`aft_${_}`;return null}function yD(D,_){let O=new Headers;if(D instanceof Request)D.headers.forEach((j,$)=>{O.set($,j)});let W=_?.headers;if(W){if(W instanceof Headers)W.forEach((j,$)=>{O.set($,j)});else if(Array.isArray(W))for(let j of W){let[$,z]=j;if(typeof z<"u")O.set($,String(z))}else for(let[j,$]of Object.entries(W))if(typeof $<"u")O.set(j,String($))}return O}function YD(D){return D.set("anthropic-beta",i0(D.get("anthropic-beta"),[SO])),D}function l0(D,_,O={}){return mO(D,_,O)}function M1(D){if(D.tools&&Array.isArray(D.tools))D.tools=D.tools.map((_)=>({..._,name:_.name?BO(_.name):_.name}));if(D.messages&&Array.isArray(D.messages))D.messages=D.messages.map((_)=>{if(_.content&&Array.isArray(_.content))_.content=_.content.map((O)=>{if(O.type==="tool_use"&&O.name)return{...O,name:BO(O.name)};return O});return _});return JSON.stringify(iO(D))}function vD(D){return D.replace(/"name"\s*:\s*"(mcp_)?([^"]+)"/g,(_,O,W)=>{if(O)return`"name": "${MO(W)??cO(W)}"`;let j=MO(W);return j?`"name": "${j}"`:_})}function FO(D,_=!1){if(_)return{ready:vD(D),pending:""};let O=D.length,W='"name"',j=Math.max(0,D.length-W.length+1);for(let z=j;z<D.length;z++)if(W.startsWith(D.slice(z))){O=Math.min(O,z);break}let $=D.lastIndexOf(W);if($!==-1){let z=D.slice($);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(z))O=Math.min(O,$)}if(O<D.length)return{ready:vD(D.slice(0,O)),pending:D.slice(O)};return{ready:vD(D),pending:""}}function hD(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let D=process.env.ANTHROPIC_INSECURE?.trim();return D==="1"||D==="true"}function oO(D){let _=D?.trim();if(!_)return null;try{let O=new URL(_);if(O.protocol!=="http:"&&O.protocol!=="https:"||O.username||O.password)return null;return O}catch{return null}}function F1(){return oO(process.env.ANTHROPIC_BASE_URL)}function bD(D,_={}){let O=null;try{if(typeof D==="string"||D instanceof URL)O=new URL(D.toString());else if(D instanceof Request)O=new URL(D.url)}catch{O=null}if(!O)return{input:D,url:null};let W=O.href,j=_.baseURL?oO(_.baseURL):F1();if(j){if(O.protocol=j.protocol,O.host=j.host,_.baseURL)O.pathname=`${j.pathname.replace(/\/$/,"")}${O.pathname}`}if(O.pathname.endsWith("/v1/messages")&&!O.searchParams.has("beta"))O.searchParams.set("beta","true");if(O.href===W)return{input:D,url:O};return{input:D instanceof Request?new Request(O.toString(),D):O,url:O}}function H1(D){let W=D.split(/\n\n+/).filter((j)=>{if(j.includes(qO))return!1;for(let $ of kO)if(j.includes($))return!1;return!0}).join(`
1
+ import{$ as OW,$a as Ij,A as y4,Aa as Gj,B as F1,Ba as Xj,C as h4,Ca as XW,D as T1,Da as Vj,E as m4,Ea as C0,F as b4,Fa as Kj,G as i4,Ga as VW,H as p4,Ha as f1,I as d4,Ia as _j,J as WW,Ja as KW,K as x1,Ka as N1,L as l4,La as _W,M as u4,Ma as R1,N as k0,Na as A1,O as jW,Oa as zj,P as c4,Pa as zW,Q as E1,Qa as PW,R as n4,Ra as Pj,S as o4,Sa as wW,T as r4,Ta as wj,U as NW,Ua as UW,V as t4,Va as u0,W as S1,Wa as $4,X as W1,Xa as O1,Y as s4,Ya as Uj,Z as J1,Za as Qj,_ as a4,_a as Cj,a as rW,aa as e4,ab as Y4,b as tW,ba as Wj,bb as Z4,c as n0,ca as jj,cb as G4,d as o0,da as Nj,db as X4,e as sW,ea as JW,eb as Mj,f as b0,fa as Oj,fb as QW,g as v4,gb as Lj,h as aW,ha as Jj,hb as Hj,i as eW,ia as DW,ib as CW,j as W4,ja as i0,k as f4,ka as p0,kb as Bj,l as L1,la as j1,m as H1,ma as Dj,mb as IW,n as X0,na as v1,nb as q1,o as t0,oa as j4,ob as Fj,p as B1,pa as N4,pb as Tj,q as A4,qa as $W,qb as MW,r as q4,ra as O4,s as Q0,sa as J4,t as f,ta as D4,ua as YW,v as s0,va as $j,w as k4,wa as Yj,x as a0,xa as ZW,y as e0,ya as Zj,z as g4,za as GW}from"./index-z03wayzs.js";import{Bb as b,Cb as r,sb as R4}from"./index-6gdd6e4s.js";import{Eb as Ej,Ib as Sj}from"./index-bxs26mw4.js";import{Rb as gW}from"./index-jkbar3k3.js";import{Ub as xj}from"./index-qejbx8c9.js";import"./index-qsaph2g4.js";import{randomUUID as e1}from"node:crypto";var FW="claude-opus-4-8",hj=10,mj=128,bj=86400000;function TW(W){return typeof W==="string"&&(W===u0||W.startsWith(`${u0}-`))}function ij(W){try{let N=JSON.parse(W);return typeof N.model==="string"?{body:N,model:N.model}:null}catch{return null}}class p1{now;sessions=new Map;nextCycle=1;constructor(W=Date.now){this.now=W}prune(){let W=this.now();for(let[N,j]of this.sessions)if(W-j.updatedAt>=bj)this.sessions.delete(N);while(this.sessions.size>mj){let N=this.sessions.keys().next().value;if(typeof N!=="string")break;this.sessions.delete(N)}}plan(W,N){if(!W||typeof N!=="string")return null;let j=ij(N);if(!j||!TW(j.model))return null;this.prune();let O=this.sessions.get(W);if(!O||O.remaining<=0)return{sessionId:W,requestedModel:j.model,effectiveModel:j.model,bodyText:N,downgraded:!1,standbyCacheAnchor:O?.standbyCacheAnchor};return O.updatedAt=this.now(),O.nextRequestSequence++,this.sessions.delete(W),this.sessions.set(W,O),j.body.model=FW,{sessionId:W,requestedModel:O.model,effectiveModel:FW,bodyText:JSON.stringify(j.body),downgraded:!0,cycle:O.cycle,cacheAccountId:O.cacheAccountId,standbyCacheAnchor:O.standbyCacheAnchor,requestSequence:O.nextRequestSequence}}activate(W,N){if(W.downgraded||!TW(W.requestedModel))return this.remaining(W.sessionId);let j={model:W.requestedModel,remaining:hj,cycle:this.nextCycle++,cacheAccountId:N,standbyCacheAnchor:W.standbyCacheAnchor,nextRequestSequence:0,standbyAnchorSequence:0,updatedAt:this.now()};return this.sessions.delete(W.sessionId),this.sessions.set(W.sessionId,j),this.prune(),j.remaining}complete(W,N){if(!W.downgraded||W.cycle==null||W.completed)return{counted:!1,remaining:this.remaining(W.sessionId)};W.completed=!0;let j=this.sessions.get(W.sessionId);if(!j||j.cycle!==W.cycle||j.remaining<=0)return{counted:!1,remaining:j?.remaining??0};if(j.remaining--,N&&W.requestSequence!=null&&W.requestSequence>=j.standbyAnchorSequence)j.standbyCacheAnchor=N,j.standbyAnchorSequence=W.requestSequence;return j.updatedAt=this.now(),this.sessions.delete(W.sessionId),this.sessions.set(W.sessionId,j),{counted:!0,remaining:j.remaining}}remaining(W){return this.prune(),this.sessions.get(W)?.remaining??0}}function m0(W){return typeof W==="object"&&W!==null}function pj(W){if(Array.isArray(W))return W;if(m0(W)&&Array.isArray(W.data))return W.data;return[]}function fW(W){if(!m0(W)||!m0(W.info))return;return W.info}function xW(W){let N=fW(W);return typeof N?.role==="string"?N.role:void 0}function dj(W){let N=fW(W);return typeof N?.id==="string"?N.id:void 0}function EW(W){if(!m0(W)||!m0(W.info))return null;let N=W.info,j=m0(N.model)?N.model:void 0,O=typeof N.agent==="string"?N.agent:void 0,D=typeof j?.providerID==="string"?j.providerID:typeof N.providerID==="string"?N.providerID:void 0,Z=typeof j?.modelID==="string"?j.modelID:typeof N.modelID==="string"?N.modelID:void 0,X=typeof j?.variant==="string"?j.variant:typeof N.variant==="string"?N.variant:void 0;if(!O&&(!D||!Z)&&!X)return null;let U={};if(O)U.agent=O;if(D&&Z)U.model={providerID:D,modelID:Z};if(X)U.variant=X;return U}function SW(W,N){return{agent:W.agent??N.agent,model:W.model??N.model,variant:W.variant??N.variant,latestAssistantMessageId:W.latestAssistantMessageId??N.latestAssistantMessageId,latestUserMessageId:W.latestUserMessageId??N.latestUserMessageId}}function vW(W){return Boolean(W.agent&&W.model&&W.variant)}async function RW(W,N){if(!W||!N)return null;let j=W;if(typeof j.session?.messages!=="function")return null;let O=[];try{O=pj(await Promise.resolve(j.session.messages({path:{id:N},query:{limit:100}})))}catch{return null}if(O.length===0)return null;let D,Z;for(let U of O){let q=dj(U);if(!q)continue;let h=xW(U);if(h==="assistant"&&(!D||q>D))D=q;if(h==="user"&&(!Z||q>Z))Z=q}let X={latestAssistantMessageId:D,latestUserMessageId:Z};for(let U=O.length-1;U>=0;U--){if(xW(O[U])!=="assistant")continue;let q=EW(O[U]);if(!q)continue;if(X=SW(X,q),vW(X))return X}for(let U=O.length-1;U>=0;U--){let q=EW(O[U]);if(!q)continue;if(X=SW(X,q),vW(X))return X}if(!X.agent&&!X.model&&!X.variant&&!X.latestAssistantMessageId&&!X.latestUserMessageId)return null;return X}var T0=[],lj=1,d1=0,AW=new Map;function qW(W,N){if(T0.push({id:lj++,type:"open-dialog",payload:W,sessionId:N}),T0.length>100)T0=T0.slice(T0.length-100)}function kW(W=0,N){let j=Date.now();if(d1=j,N!==void 0)AW.set(N,j);let O=(D)=>N===void 0||D.sessionId===void 0||D.sessionId===N;if(W>0)T0=T0.filter((D)=>{if(D.id>W)return!0;if(N===void 0)return!1;return D.sessionId!==N});return T0.filter((D)=>D.id>W&&O(D))}function l1(W){let N=Date.now();if(W!==void 0){let j=AW.get(W)??0;return j>0&&N-j<3000}return d1>0&&N-d1<3000}import{randomBytes as uj,timingSafeEqual as cj}from"node:crypto";import{unlink as nj}from"node:fs/promises";import{createServer as oj}from"node:http";import{join as rj}from"node:path";function tj(W){return new Promise((N,j)=>{let O=[],D=0;W.on("data",(Z)=>{if(D+=Z.length,D>1e6){W.destroy(),j(Error("body too large"));return}O.push(Z)}),W.on("end",()=>N(Buffer.concat(O).toString("utf8"))),W.on("error",j)})}function sj(W,N){if(!W?.startsWith("Bearer "))return!1;let j=Buffer.from(W.slice(7)),O=Buffer.from(N);return j.length===O.length&&cj(j,O)}async function yW(W){let N=uj(32).toString("hex"),j=oj((Z,X)=>{O(Z,X)});async function O(Z,X){let U=(q,h)=>{X.writeHead(q,{"content-type":"application/json"}),X.end(JSON.stringify(h))};try{let q=Z.url??"";if(Z.method==="GET"&&q==="/health")return U(200,{ok:!0});if(Z.method!=="POST"||!q.startsWith("/rpc/"))return U(404,{error:"not found"});if(!sj(Z.headers.authorization,N))return U(401,{error:"unauthorized"});let h=q.slice(5),d=JSON.parse(await tj(Z)||"{}");if(h==="pending-notifications"){let C=W.drain(Number(d.lastReceivedId??0),typeof d.sessionId==="string"?d.sessionId:void 0);return U(200,{messages:C})}if(h==="apply"){let C=await W.apply(d);return U(200,C)}return U(404,{error:"unknown method"})}catch(q){if(!X.headersSent&&!X.writableEnded&&!X.destroyed)U(500,{error:q instanceof Error?q.message:String(q)})}}let D=await new Promise((Z,X)=>{j.on("error",X),j.listen(0,"127.0.0.1",()=>{let U=j.address();if(U&&typeof U==="object")Z(U.port);else X(Error("no port"))})});j.unref();try{await gW(W.dir,{port:D,token:N,pid:process.pid})}catch(Z){throw await new Promise((X)=>j.close(()=>X())),Z}return{port:D,token:N,async stop(){await new Promise((Z)=>j.close(()=>Z())),await nj(rj(W.dir,`port-${process.pid}.json`)).catch(()=>{})}}}import{createHash as aj}from"node:crypto";function hW(W,N){let j=new Map,O=0,D=0,Z=0,X=0,U=0,q=(C)=>{let s=performance.now(),Y0=W(C);return U+=performance.now()-s,Z++,Y0};return{call:(C)=>{if(!N.enabled())return q(C);let s=j.get(C);if(s!==void 0)return D++,j.delete(C),j.set(C,s),s;let Y0=q(C),P0=C.length+Y0.length;if(P0>N.maxBytes)return Y0;j.set(C,Y0),O+=P0;while(O>N.maxBytes&&j.size>1){let O0=j.keys().next().value,B0=j.get(O0)??"";j.delete(O0),O-=O0.length+B0.length,X++}return Y0},stats:()=>({hits:D,misses:Z,evictions:X,entries:j.size,cacheBytes:O,computeMsTotal:U})}}function mW(W){return`${rW}${W.charAt(0).toUpperCase()}${W.slice(1)}`}function V4(W){if(W==="StructuredOutput")return W;return`${W.charAt(0).toLowerCase()}${W.slice(1)}`}var ej=new Set(["callgraph","conflicts","delete","import","inspect","move","navigate","outline","refactor","safety","search","transform","zoom"]);function bW(W){let N=V4(W);if(N.startsWith("aft_"))return N;if(ej.has(N))return`aft_${N}`;return null}function U1(W,N){let j=new Headers;if(W instanceof Request)W.headers.forEach((D,Z)=>{j.set(Z,D)});let O=N?.headers;if(O){if(O instanceof Headers)O.forEach((D,Z)=>{j.set(Z,D)});else if(Array.isArray(O))for(let D of O){let[Z,X]=D;if(typeof X<"u")j.set(Z,String(X))}else for(let[D,Z]of Object.entries(O))if(typeof Z<"u")j.set(D,String(Z))}return j}function Q1(W){return W.set("anthropic-beta",n0(W.get("anthropic-beta"),[tW])),W}function r0(W,N,j={}){return J4(W,N,j)}function WN(W){if(W.tools&&Array.isArray(W.tools))W.tools=W.tools.map((N)=>({...N,name:N.name?mW(N.name):N.name}));if(W.messages&&Array.isArray(W.messages))W.messages=W.messages.map((N)=>{if(N.content&&Array.isArray(N.content))N.content=N.content.map((j)=>{if(j.type==="tool_use"&&j.name)return{...j,name:mW(j.name)};return j});return N});return JSON.stringify(D4(W))}function u1(W){return W.replace(/"name"\s*:\s*"(mcp_)?([^"]+)"/g,(N,j,O)=>{if(j)return`"name": "${bW(O)??V4(O)}"`;let D=bW(O);return D?`"name": "${D}"`:N})}function iW(W,N=!1){if(N)return{ready:u1(W),pending:""};let j=W.length,O='"name"',D=Math.max(0,W.length-O.length+1);for(let X=D;X<W.length;X++)if(O.startsWith(W.slice(X))){j=Math.min(j,X);break}let Z=W.lastIndexOf(O);if(Z!==-1){let X=W.slice(Z);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(X))j=Math.min(j,Z)}if(j<W.length)return{ready:u1(W.slice(0,j)),pending:W.slice(j)};return{ready:u1(W),pending:""}}function o1(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let W=process.env.ANTHROPIC_INSECURE?.trim();return W==="1"||W==="true"}function K4(W){let N=W?.trim();if(!N)return null;try{let j=new URL(N);if(j.protocol!=="http:"&&j.protocol!=="https:"||j.username||j.password)return null;return j}catch{return null}}function jN(){return K4(process.env.ANTHROPIC_BASE_URL)}function r1(W,N={}){let j=null;try{if(typeof W==="string"||W instanceof URL)j=new URL(W.toString());else if(W instanceof Request)j=new URL(W.url)}catch{j=null}if(!j)return{input:W,url:null};let O=j.href,D=N.baseURL?K4(N.baseURL):jN();if(D){if(j.protocol=D.protocol,j.host=D.host,N.baseURL)j.pathname=`${D.pathname.replace(/\/$/,"")}${j.pathname}`}if(j.pathname.endsWith("/v1/messages")&&!j.searchParams.has("beta"))j.searchParams.set("beta","true");if(j.href===O)return{input:W,url:j};return{input:W instanceof Request?new Request(j.toString(),W):j,url:j}}function NN(W){let O=W.split(/\n\n+/).filter((D)=>{if(D.includes(sW))return!1;for(let Z of eW)if(D.includes(Z))return!1;return!0}).join(`
2
2
 
3
- `);for(let j of yO)W=W.replace(j.match,j.replacement);return W.trim()}var f1=8388608;function x1(){return process.env.OPENCODE_ANTHROPIC_AUTH_MEMO!=="0"}var E1=QO(H1,{maxBytes:f1,enabled:x1});function JD(D){return E1.call(D)}function d(D){return D!=null&&typeof D==="object"&&!Array.isArray(D)}function T1(D){let _={type:"text",text:v0};if(D==null)return[_];if(typeof D==="string"){let W=JD(D);if(W===v0)return[_];return[_,{type:"text",text:W}]}if(d(D)){let W=typeof D.type==="string"?D.type:"text",j=typeof D.text==="string"?D.text:"";return[_,{...D,type:W,text:JD(j)}]}if(!Array.isArray(D))return[_];let O=D.map((W)=>{if(typeof W==="string")return{type:"text",text:JD(W)};if(d(W)&&W.type==="text"&&typeof W.text==="string")return{...W,type:"text",text:JD(W.text)};return{type:"text",text:String(W)}});if(O[0]?.text===v0)return O;return[_,...O]}var rO={type:"ephemeral",ttl:"1h"},R1=20;function A1(D){if(d(D.cache_control))return D.cache_control;if(d(D.cacheControl))return D.cacheControl;return null}function m0(D,_){if(!d(D))return!1;return delete D.cacheControl,D.cache_control=_?{...rO}:{type:"ephemeral"},!0}function HO(D){if(!d(D))return;delete D.cache_control,delete D.cacheControl}function S1(D){if(Array.isArray(D))return D;if(typeof D==="string")return[{type:"text",text:D}];return null}function PD(D,_){if(!d(D))return;let O=A1(D);if(O?.type!=="ephemeral")return;if(_)O.ttl="1h";else delete O.ttl}function fO(D,_){if(Array.isArray(D.system))for(let O of D.system)PD(O,_);else PD(D.system,_);if(!Array.isArray(D.messages))return;for(let O of D.messages)if(PD(O,_),d(O)&&Array.isArray(O.content))for(let W of O.content)PD(W,_)}function q1(D,_){if(Array.isArray(D.system))for(let O of D.system)_(O);else _(D.system);if(!Array.isArray(D.messages))return;for(let O of D.messages)if(_(O),d(O)&&Array.isArray(O.content))for(let W of O.content)_(W)}function tO(D){HO(D),q1(D,HO)}function v1(D){tO(D),D.cache_control={...rO}}function k1(D){return d(D)&&D.type!=="thinking"&&D.type!=="redacted_thinking"}function ZD(D){let _=S1(D.content);if(!_?.length)return;let O=_.filter(k1);if(!O.length)return;return{content:_,cacheableBlocks:O}}function y1(D){if(!d(D))return!1;let _=ZD(D);if(!_)return!1;return D.content=_.content,m0(_.cacheableBlocks[0],!0)}function h1(D){if(!d(D))return!1;let _=ZD(D);if(!_||_.cacheableBlocks.length<2)return!1;return D.content=_.content,m0(_.cacheableBlocks[1],!0)}function $D(D){if(!d(D))return!1;let _=ZD(D);if(!_)return!1;let O=_.cacheableBlocks[_.cacheableBlocks.length-1];return D.content=_.content,m0(O,!0)}function b1(D){if(!d(D))return!1;return(ZD(D)?.cacheableBlocks.length??0)>1}function g1(D){if(!d(D))return 0;let _=D.content;if(Array.isArray(_))return _.length;if(_==null)return 0;return 1}function m1(D){let _=[],O=0;return D.forEach((W,j)=>{let $=g1(W);if(d(W)&&W.role==="user"&&$>0)_.push({index:j,blockPosition:O+$-1});O+=$}),_}function i1(D){let _=m1(D),O=[..._].reverse().find((z)=>z.index>1);if(!O)return{latest:void 0,bridge:void 0};let W=[..._].reverse().find((z)=>z.index<O.index),j=W?O.blockPosition-W.blockPosition+1:0,$=W&&W.index>1&&j>R1?W:void 0;return{latest:O,bridge:$}}function kD(D){return d(D)&&typeof D.text==="string"?D.text:""}function p1(D){if(!Array.isArray(D.system))return;let _=D.system,O=0;if(kD(_[O]).startsWith("x-anthropic-billing-header:"))O++;if(kD(_[O])===v0)O++;let W=O+1;if(W>=_.length-1)return;let j=_[W];if(!d(j))return;let $=_.slice(W).map(kD).join(`
4
- `);_.splice(W,_.length-W,{...j,type:"text",text:$})}function xO(D){if(Array.isArray(D.system)){let _=D.system.findIndex((j)=>d(j)&&j.text===v0),O=D.system.slice(_>=0?_+1:0).filter(d),W=O[O.length-1];m0(W,!0)}else m0(D.system,!0)}function l1(D){if(tO(D),p1(D),!Array.isArray(D.messages)){xO(D);return}let{latest:_,bridge:O}=i1(D.messages);if(!O)xO(D);if(b1(D.messages[0]))y1(D.messages[0]),h1(D.messages[0]);else $D(D.messages[0]),$D(D.messages[1]);if(O)$D(D.messages[O.index]);if(_)$D(D.messages[_.index])}function d1(D){if(!Array.isArray(D.messages))return 0;let _=0;return D.messages=D.messages.filter((O)=>{if(!d(O)||!Array.isArray(O.content))return!0;if(O.role!=="assistant")return!0;let W=O.content.filter((j)=>{if(!d(j)||j.type!=="thinking")return!0;if(!uO(j.signature))return!0;return _+=1,!1});if(W.length===O.content.length)return!0;return O.content=W,W.length>0}),_}function n1(D){if(!lO(D.model))return null;let _=Object.hasOwn(D,"thinking");return D.thinking={...pO},{replacedExisting:_}}function u1(D){if(!nO(D.model))return null;let _=Object.hasOwn(D,"thinking"),O=D.thinking;if(d(O)&&O.type==="disabled")return D.thinking={type:"disabled"},{replacedExisting:_,display:"disabled"};return D.thinking={...dO},{replacedExisting:_,display:"summarized"}}function c1(D,_){if(!_.enabled){fO(D,!1),delete D.cache_control,delete D.cacheControl;return}if(_.mode==="automatic"){v1(D);return}if(_.mode==="hybrid"){l1(D);return}fO(D,!0),delete D.cacheControl}function o1(D){if(!Array.isArray(D.messages))return;while(D.messages.length){let _=D.messages[D.messages.length-1];if(!d(_)||_.role!=="assistant")break;D.messages.pop()}}function b(){return performance.now()}function Z0(D){return Math.round(D*10)/10}function EO(D){let _=0,O=0,W=0,j=Array.isArray(D.messages)?D.messages:[];_=j.length;for(let $ of j){if(!$||typeof $!=="object")continue;let z=$.content;if(!Array.isArray(z))continue;O+=z.length;for(let A of z)if(A&&typeof A==="object"&&A.type==="tool_use")W++}return{messageCount:_,contentBlockCount:O,toolDefinitionCount:Array.isArray(D.tools)?D.tools.length:0,toolUseCount:W,systemBlockCount:Array.isArray(D.system)?D.system.length:0}}async function gD(D,_={}){try{let O=b(),W=JSON.parse(D);_.perf?.("parse",{ms:Z0(b()-O),inputBytes:D.length,...EO(W)});let j=b(),$=Array.isArray(W.messages)?W.messages.length:void 0;o1(W);let z=Array.isArray(W.messages)?W.messages.length:void 0;_.perf?.("strip_trailing_assistant",{ms:Z0(b()-j),removedMessages:typeof $==="number"&&typeof z==="number"?$-z:void 0});let A=b(),i=d1(W),y=n1(W),L=u1(W);_.perf?.("model_normalize",{ms:Z0(b()-A),model:typeof W.model==="string"?W.model:void 0,fableMythosThinkingDisplay:y?"summarized":void 0,replacedFableMythosThinking:y?.replacedExisting??!1,sonnet5ThinkingDisplay:L?.display,replacedSonnet5Thinking:L?.replacedExisting??!1,removedNonAnthropicThinking:i,hasOutputConfig:Object.hasOwn(W,"output_config")});let h=b(),o=Array.isArray(W.messages)&&W.messages.some((e)=>e.role==="user")?bO(W.messages,void 0,vO):null;_.perf?.("billing_header",{ms:Z0(b()-h),hasBillingHeader:Boolean(o)});let j0=b();if(W.system=T1(W.system),_.perf?.("system_identity",{ms:Z0(b()-j0),systemBlockCount:Array.isArray(W.system)?W.system.length:0}),o&&Array.isArray(W.system))W.system.unshift({type:"text",text:o});let I0=b();if(c1(W,{enabled:_.cache1hEnabled??!1,mode:_.cache1hMode??"explicit"}),_.perf?.("cache_strategy",{ms:Z0(b()-I0),enabled:_.cache1hEnabled??!1,mode:_.cache1hMode??"explicit"}),_.fastModeEnabled&&p0(W.model))W.speed="fast";else if(W.speed==="fast")delete W.speed;let r=b();if(_.identity)gO(W,_.identity);_.perf?.("metadata",{ms:Z0(b()-r),hasAccountUuid:Boolean(_.identity?.accountUuid)});let L0=b(),W0=M1(W);_.perf?.("prefix_tools_stringify",{ms:Z0(b()-L0),outputBytesBeforeSign:W0.length,...EO(W)});let F0=b(),Y0=await hO(W0);return _.perf?.("cch_sign",{ms:Z0(b()-F0),outputBytes:Y0.length}),Y0}catch{return D}}var r1=new TextEncoder;function t1(){return{pending:"",events:0,parseErrors:0,eventCounts:{},typeCounts:{},deltaTypeCounts:{},contentBlockTypeCounts:{},textDeltaBytes:0,thinkingDeltaBytes:0,inputJsonDeltaBytes:0,signatureDeltaBytes:0,redactedThinkingBytes:0}}function XD(D,_){if(!_)return;D[_]=(D[_]??0)+1}function f0(D){return r1.encode(D).byteLength}function M0(D){return D&&typeof D==="object"&&!Array.isArray(D)?D:void 0}function J0(D,_){let O=D?.[_];return typeof O==="string"?O:void 0}function s1(D,_){let O=D?.[_];return typeof O==="number"?O:void 0}function a1(D){if(!D.trim())return null;let _,O=[];for(let h of D.split(/\r?\n/)){if(h.startsWith("event:")){_=h.slice(6).trim();continue}if(h.startsWith("data:")){let o=h.slice(5);O.push(o.startsWith(" ")?o.slice(1):o)}}let W=O.join(`
5
- `),j={event:_,rawBytes:f0(D),dataBytes:f0(W)};if(!W||W==="[DONE]")return j.type=W==="[DONE]"?"done":void 0,j.event??=j.type,j;let $;try{$=JSON.parse(W)}catch{return j}let z=M0($),A=M0(z?.delta),i=M0(z?.content_block),y=M0(z?.message),L=M0(z?.usage)??M0(y?.usage);if(j.type=J0(z,"type"),j.event??=j.type,j.index=s1(z,"index"),j.contentBlockType=J0(i,"type"),j.deltaType=J0(A,"type"),j.stopReason=J0(z,"stop_reason"),j.deltaType==="text_delta")j.textDeltaBytes=f0(J0(A,"text")??"");if(j.deltaType==="thinking_delta")j.thinkingDeltaBytes=f0(J0(A,"thinking")??"");if(j.deltaType==="input_json_delta")j.inputJsonDeltaBytes=f0(J0(A,"partial_json")??"");if(j.deltaType==="signature_delta")j.signatureDeltaBytes=f0(J0(A,"signature")??"");if(j.contentBlockType==="redacted_thinking")j.redactedThinkingBytes=f0(J0(i,"data")??"");if(L)j.stopReason??=J0(y,"stop_reason");return j}function sO(D){let _=D.indexOf(`
3
+ `);for(let D of W4)O=O.replace(D.match,D.replacement);return O.trim()}var ON=8388608;function JN(){return process.env.OPENCODE_ANTHROPIC_AUTH_MEMO!=="0"}var DN=hW(NN,{maxBytes:ON,enabled:JN});function _1(W){return DN.call(W)}function l(W){return W!=null&&typeof W==="object"&&!Array.isArray(W)}function $N(W){let N={type:"text",text:b0};if(W==null)return[N];if(typeof W==="string"){let O=_1(W);if(O===b0)return[N];return[N,{type:"text",text:O}]}if(l(W)){let O=typeof W.type==="string"?W.type:"text",D=typeof W.text==="string"?W.text:"";return[N,{...W,type:O,text:_1(D)}]}if(!Array.isArray(W))return[N];let j=W.map((O)=>{if(typeof O==="string")return{type:"text",text:_1(O)};if(l(O)&&O.type==="text"&&typeof O.text==="string")return{...O,type:"text",text:_1(O.text)};return{type:"text",text:String(O)}});if(j[0]?.text===b0)return j;return[N,...j]}var _4={type:"ephemeral",ttl:"1h"},pW=20;function z4(W){if(l(W.cache_control))return W.cache_control;if(l(W.cacheControl))return W.cacheControl;return null}function c0(W,N){if(!l(W))return!1;return delete W.cacheControl,W.cache_control=N?{..._4}:{type:"ephemeral"},!0}function dW(W){if(!l(W))return;delete W.cache_control,delete W.cacheControl}function t1(W){if(Array.isArray(W))return W;if(typeof W==="string")return[{type:"text",text:W}];return null}function n1(W){if(Array.isArray(W))return W.map(n1);if(!l(W))return W;let N={};for(let j of Object.keys(W).sort()){if(j==="cache_control"||j==="cacheControl")continue;N[j]=n1(W[j])}return N}function P4(W){if(!l(W))return;let N=t1(W.content);if(!N?.length)return;let j=n1({...W,content:N});return aj("sha256").update(JSON.stringify(j)).digest("hex")}function YN(W){if(!l(W))return!1;let N=t1(W.content);return Boolean(N?.some((j)=>l(j)&&z4(j)?.type==="ephemeral"))}function w4(W){try{let N=JSON.parse(W);if(!Array.isArray(N.messages))return;for(let j=N.messages.length-1;j>1;j--){let O=N.messages[j];if(!l(O)||O.role!=="user"||!YN(O))continue;let D=P4(O);if(!D)return;return{fingerprint:D,messageIndex:j,messageCount:N.messages.length}}return}catch{return}}function z1(W,N){if(!l(W))return;let j=z4(W);if(j?.type!=="ephemeral")return;if(N)j.ttl="1h";else delete j.ttl}function lW(W,N){if(Array.isArray(W.system))for(let j of W.system)z1(j,N);else z1(W.system,N);if(!Array.isArray(W.messages))return;for(let j of W.messages)if(z1(j,N),l(j)&&Array.isArray(j.content))for(let O of j.content)z1(O,N)}function ZN(W,N){if(Array.isArray(W.system))for(let j of W.system)N(j);else N(W.system);if(!Array.isArray(W.messages))return;for(let j of W.messages)if(N(j),l(j)&&Array.isArray(j.content))for(let O of j.content)N(O)}function U4(W){dW(W),ZN(W,dW)}function GN(W){U4(W),W.cache_control={..._4}}function XN(W){return l(W)&&W.type!=="thinking"&&W.type!=="redacted_thinking"}function C1(W){let N=t1(W.content);if(!N?.length)return;let j=N.filter(XN);if(!j.length)return;return{content:N,cacheableBlocks:j}}function VN(W){if(!l(W))return!1;let N=C1(W);if(!N)return!1;return W.content=N.content,c0(N.cacheableBlocks[0],!0)}function KN(W){if(!l(W))return!1;let N=C1(W);if(!N||N.cacheableBlocks.length<2)return!1;return W.content=N.content,c0(N.cacheableBlocks[1],!0)}function P1(W){if(!l(W))return!1;let N=C1(W);if(!N)return!1;let j=N.cacheableBlocks[N.cacheableBlocks.length-1];return W.content=N.content,c0(j,!0)}function _N(W){if(!l(W))return!1;return(C1(W)?.cacheableBlocks.length??0)>1}function zN(W){if(!l(W))return 0;let N=W.content;if(Array.isArray(N))return N.length;if(N==null)return 0;return 1}function PN(W){let N=[],j=0;return W.forEach((O,D)=>{let Z=zN(O);if(l(O)&&O.role==="user"&&Z>0)N.push({index:D,blockPosition:j+Z-1});j+=Z}),N}function wN(W,N,j,O){if(!O)return;let D=[],Z=N.find((X)=>X.index===O.messageIndex&&X.index>1&&X.index<j.index);if(Z)D.push(Z);for(let X of[...N].reverse()){if(X.index<=1||X.index>=j.index||X.index===Z?.index)continue;D.push(X)}for(let X of D)if(P4(W[X.index])===O.fingerprint)return X;return}function UN(W,N){let j=PN(W),O=[...j].reverse().find((d)=>d.index>1);if(!O)return{latest:void 0,bridge:void 0,standbyAnchorMatched:!1,standbyBridgeApplied:!1};let D=wN(W,j,O,N),Z=D?O.blockPosition-D.blockPosition+1:void 0,X=D&&Z!=null&&Z>pW?D:void 0,U=[...j].reverse().find((d)=>d.index<O.index),q=U?O.blockPosition-U.blockPosition+1:0,h=U&&U.index>1&&q>pW?U:void 0;return{latest:O,bridge:X??h,standbyAnchorMatched:Boolean(D),standbyDistanceBlocks:Z,standbyBridgeApplied:Boolean(X)}}function c1(W){return l(W)&&typeof W.text==="string"?W.text:""}function QN(W){if(!Array.isArray(W.system))return;let N=W.system,j=0;if(c1(N[j]).startsWith("x-anthropic-billing-header:"))j++;if(c1(N[j])===b0)j++;let O=j+1;if(O>=N.length-1)return;let D=N[O];if(!l(D))return;let Z=N.slice(O).map(c1).join(`
4
+ `);N.splice(O,N.length-O,{...D,type:"text",text:Z})}function uW(W){if(Array.isArray(W.system)){let N=W.system.findIndex((D)=>l(D)&&D.text===b0),j=W.system.slice(N>=0?N+1:0).filter(l),O=j[j.length-1];c0(O,!0)}else c0(W.system,!0)}function CN(W,N){if(U4(W),QN(W),!Array.isArray(W.messages))return uW(W),{standbyAnchorMatched:!1,standbyBridgeApplied:!1};let{latest:j,bridge:O,standbyAnchorMatched:D,standbyDistanceBlocks:Z,standbyBridgeApplied:X}=UN(W.messages,N);if(!O)uW(W);if(_N(W.messages[0]))VN(W.messages[0]),KN(W.messages[0]);else P1(W.messages[0]),P1(W.messages[1]);if(O)P1(W.messages[O.index]);if(j)P1(W.messages[j.index]);return{standbyAnchorMatched:D,standbyDistanceBlocks:Z,standbyBridgeApplied:X,...X&&O?{standbyBridgeMessageIndex:O.index}:{}}}function IN(W){if(!Array.isArray(W.messages))return 0;let N=0;return W.messages=W.messages.filter((j)=>{if(!l(j)||!Array.isArray(j.content))return!0;if(j.role!=="assistant")return!0;let O=j.content.filter((D)=>{if(!l(D)||D.type!=="thinking")return!0;if(!X4(D.signature))return!0;return N+=1,!1});if(O.length===j.content.length)return!0;return j.content=O,O.length>0}),N}function Q4(W){if(!Y4(W.model))return null;let N=Object.hasOwn(W,"thinking");return W.thinking={...$4},{replacedExisting:N}}function MN(W){if(!G4(W.model))return null;let N=Object.hasOwn(W,"thinking"),j=W.thinking;if(l(j)&&j.type==="disabled")return W.thinking={type:"disabled"},{replacedExisting:N,display:"disabled"};return W.thinking={...Z4},{replacedExisting:N,display:"summarized"}}function C4(W,N=u0){try{let j=JSON.parse(W);return j.model=N,delete j.speed,Q4(j),{ok:!0,bodyText:JSON.stringify(j)}}catch{return{ok:!1,reason:"body is not valid JSON"}}}function LN(W,N){if(!N.enabled)return lW(W,!1),delete W.cache_control,delete W.cacheControl,{};if(N.mode==="automatic")return GN(W),{};if(N.mode==="hybrid")return CN(W,N.hybridStandbyAnchor);return lW(W,!0),delete W.cacheControl,{}}function HN(W){if(!Array.isArray(W.messages))return;while(W.messages.length){let N=W.messages[W.messages.length-1];if(!l(N)||N.role!=="assistant")break;W.messages.pop()}}function u(){return performance.now()}function z0(W){return Math.round(W*10)/10}function cW(W){let N=0,j=0,O=0,D=Array.isArray(W.messages)?W.messages:[];N=D.length;for(let Z of D){if(!Z||typeof Z!=="object")continue;let X=Z.content;if(!Array.isArray(X))continue;j+=X.length;for(let U of X)if(U&&typeof U==="object"&&U.type==="tool_use")O++}return{messageCount:N,contentBlockCount:j,toolDefinitionCount:Array.isArray(W.tools)?W.tools.length:0,toolUseCount:O,systemBlockCount:Array.isArray(W.system)?W.system.length:0}}async function s1(W,N={}){try{let j=u(),O=JSON.parse(W);N.perf?.("parse",{ms:z0(u()-j),inputBytes:W.length,...cW(O)});let D=u(),Z=Array.isArray(O.messages)?O.messages.length:void 0;HN(O);let X=Array.isArray(O.messages)?O.messages.length:void 0;N.perf?.("strip_trailing_assistant",{ms:z0(u()-D),removedMessages:typeof Z==="number"&&typeof X==="number"?Z-X:void 0});let U=u(),q=IN(O),h=Q4(O),d=MN(O);N.perf?.("model_normalize",{ms:z0(u()-U),model:typeof O.model==="string"?O.model:void 0,fableMythosThinkingDisplay:h?"summarized":void 0,replacedFableMythosThinking:h?.replacedExisting??!1,sonnet5ThinkingDisplay:d?.display,replacedSonnet5Thinking:d?.replacedExisting??!1,removedNonAnthropicThinking:q,hasOutputConfig:Object.hasOwn(O,"output_config")});let C=u(),s=Array.isArray(O.messages)&&O.messages.some((V0)=>V0.role==="user")?N4(O.messages,void 0,aW):null;N.perf?.("billing_header",{ms:z0(u()-C),hasBillingHeader:Boolean(s)});let Y0=u();if(O.system=$N(O.system),N.perf?.("system_identity",{ms:z0(u()-Y0),systemBlockCount:Array.isArray(O.system)?O.system.length:0}),s&&Array.isArray(O.system))O.system.unshift({type:"text",text:s});let P0=u(),O0=LN(O,{enabled:N.cache1hEnabled??!1,mode:N.cache1hMode??"explicit",hybridStandbyAnchor:N.hybridStandbyAnchor});if(N.perf?.("cache_strategy",{ms:z0(u()-P0),enabled:N.cache1hEnabled??!1,mode:N.cache1hMode??"explicit",...O0}),N.fastModeEnabled&&o0(O.model))O.speed="fast";else if(O.speed==="fast")delete O.speed;let B0=u();if(N.identity)O4(O,N.identity);N.perf?.("metadata",{ms:z0(u()-B0),hasAccountUuid:Boolean(N.identity?.accountUuid)});let E0=u(),D0=WN(O);N.perf?.("prefix_tools_stringify",{ms:z0(u()-E0),outputBytesBeforeSign:D0.length,...cW(O)});let I0=u(),Z0=await j4(D0);return N.perf?.("cch_sign",{ms:z0(u()-I0),outputBytes:Z0.length}),Z0}catch{return W}}var BN=new TextEncoder;function FN(){return{pending:"",events:0,parseErrors:0,eventCounts:{},typeCounts:{},deltaTypeCounts:{},contentBlockTypeCounts:{},textDeltaBytes:0,thinkingDeltaBytes:0,inputJsonDeltaBytes:0,signatureDeltaBytes:0,redactedThinkingBytes:0}}function w1(W,N){if(!N)return;W[N]=(W[N]??0)+1}function q0(W){return BN.encode(W).byteLength}function x0(W){return W&&typeof W==="object"&&!Array.isArray(W)?W:void 0}function $0(W,N){let j=W?.[N];return typeof j==="string"?j:void 0}function TN(W,N){let j=W?.[N];return typeof j==="number"?j:void 0}function I4(W){if(!W.trim())return null;let N,j=[];for(let C of W.split(/\r?\n/)){if(C.startsWith("event:")){N=C.slice(6).trim();continue}if(C.startsWith("data:")){let s=C.slice(5);j.push(s.startsWith(" ")?s.slice(1):s)}}let O=j.join(`
5
+ `),D={event:N,rawBytes:q0(W),dataBytes:q0(O)};if(!O||O==="[DONE]")return D.type=O==="[DONE]"?"done":void 0,D.event??=D.type,D;let Z;try{Z=JSON.parse(O)}catch{return D}let X=x0(Z),U=x0(X?.delta),q=x0(X?.content_block),h=x0(X?.message),d=x0(X?.usage)??x0(h?.usage);if(D.type=$0(X,"type"),D.event??=D.type,D.index=TN(X,"index"),D.contentBlockType=$0(q,"type"),D.deltaType=$0(U,"type"),D.stopReason=$0(U,"stop_reason")??$0(X,"stop_reason"),D.deltaType==="text_delta")D.textDeltaBytes=q0($0(U,"text")??"");if(D.deltaType==="thinking_delta")D.thinkingDeltaBytes=q0($0(U,"thinking")??"");if(D.deltaType==="input_json_delta")D.inputJsonDeltaBytes=q0($0(U,"partial_json")??"");if(D.deltaType==="signature_delta")D.signatureDeltaBytes=q0($0(U,"signature")??"");if(D.contentBlockType==="redacted_thinking")D.redactedThinkingBytes=q0($0(q,"data")??"");if(d)D.stopReason??=$0(h,"stop_reason");return D}function a1(W){let N=W.indexOf(`
6
6
 
7
- `),O=D.indexOf(`\r
7
+ `),j=W.indexOf(`\r
8
8
  \r
9
- `);if(_===-1)return O===-1?null:{index:O,length:4};if(O===-1||_<O)return{index:_,length:2};return{index:O,length:4}}function TO(D,_){if(!_)return;D.pending+=_;while(!0){let O=sO(D.pending);if(!O)break;let W=D.pending.slice(0,O.index);D.pending=D.pending.slice(O.index+O.length);let j=a1(W);if(!j)continue;if(D.events++,XD(D.eventCounts,j.event??"unknown"),XD(D.typeCounts,j.type),XD(D.deltaTypeCounts,j.deltaType),XD(D.contentBlockTypeCounts,j.contentBlockType),D.textDeltaBytes+=j.textDeltaBytes??0,D.thinkingDeltaBytes+=j.thinkingDeltaBytes??0,D.inputJsonDeltaBytes+=j.inputJsonDeltaBytes??0,D.signatureDeltaBytes+=j.signatureDeltaBytes??0,D.redactedThinkingBytes+=j.redactedThinkingBytes??0,D.last=j,j.dataBytes>0&&!j.type&&!j.event)D.parseErrors++}}function e1(){return{pending:""}}function DW(D,_){let O=D?.toLowerCase(),W=_.toLowerCase();return O==="api_error"||O==="overloaded_error"||O==="server_error"||O==="internal_server_error"||W.includes("internal server error")||W.includes("server overloaded")}function OW(D,_){let O=D?`${D}: ${_}`:_,W=Error(`Anthropic stream error: ${O}`);if(W.code="ECONNRESET",W.syscall="anthropic-sse",D)W.providerErrorType=D;return W}function _W(D){if(!D.includes("error"))return null;let _,O=[];for(let y of D.split(/\r?\n/)){if(y.startsWith("event:")){_=y.slice(6).trim();continue}if(y.startsWith("data:")){let L=y.slice(5);O.push(L.startsWith(" ")?L.slice(1):L)}}let W=O.join(`
10
- `);if(!W||W==="[DONE]")return null;let j;try{j=JSON.parse(W)}catch{return null}let $=M0(j);if(_!=="error"&&J0($,"type")!=="error")return null;let z=M0($?.error),A=J0(z,"type")??J0(z,"code")??void 0,i=J0(z,"message")??J0($,"message")??A??"Anthropic stream error";if(!DW(A,i))return null;return OW(A,i)}function RO(D,_){if(!_)return null;D.pending+=_;while(!0){let O=sO(D.pending);if(!O)break;let W=D.pending.slice(0,O.index);D.pending=D.pending.slice(O.index+O.length);let j=_W(W);if(j)return j}return null}function WW(D){return{sseEvents:D.events,ssePendingChars:D.pending.length,sseParseErrors:D.parseErrors,sseEventCounts:{...D.eventCounts},sseTypeCounts:{...D.typeCounts},sseDeltaTypeCounts:{...D.deltaTypeCounts},sseContentBlockTypeCounts:{...D.contentBlockTypeCounts},sseTextDeltaBytes:D.textDeltaBytes,sseThinkingDeltaBytes:D.thinkingDeltaBytes,sseInputJsonDeltaBytes:D.inputJsonDeltaBytes,sseSignatureDeltaBytes:D.signatureDeltaBytes,sseRedactedThinkingBytes:D.redactedThinkingBytes,sseLastEvent:D.last?{...D.last}:void 0}}function d0(D,_={}){if(!D.body)return D;let O=D.body.getReader(),W=new TextDecoder,j=new TextEncoder,$="",z=0,A=0,i=0,y=0,L=0,h=!1,o=!1,j0=b(),I0=b(),r=_.perf?t1():void 0,L0=e1(),W0=()=>{if(o)return;o=!0,O.releaseLock()},F0=(N0={})=>({chunks:z,pulls:A,inputBytes:i,outputBytes:y,pendingChars:$.length,rewriteMs:Z0(L),totalMs:Z0(b()-I0),...r?WW(r):{},...N0}),Y0=(N0,K0={})=>{_.perf?.(N0,F0(K0))};_.perf?.("stream_tool_prefix_wrapper_created",{status:D.status,hasBody:!0});let e=new ReadableStream({async pull(N0){if(A++,!h)h=!0,Y0("stream_tool_prefix_first_pull");let K0=b();try{let{done:G0,value:E0}=await O.read(),h0=Z0(b()-K0);if(G0){let U0=W.decode();if(r)TO(r,U0);let A0=RO(L0,U0);if(A0)throw Y0("stream_tool_prefix_retryable_error",{error:A0.message,providerErrorType:A0.providerErrorType}),W0(),A0;let TD=b(),_D=FO(`${$}${U0}`,!0);if(L+=b()-TD,_D.ready){let g0=j.encode(_D.ready);y+=g0.byteLength,N0.enqueue(g0)}Y0("stream_tool_prefix_rewrite",{readMs:h0}),W0(),N0.close();return}z++,i+=E0.byteLength;let T0=W.decode(E0,{stream:!0});if(r)TO(r,T0);let R0=RO(L0,T0);if(R0)throw Y0("stream_tool_prefix_retryable_error",{error:R0.message,providerErrorType:R0.providerErrorType,readMs:h0,lastChunkBytes:E0.byteLength}),W0(),R0;let DD=$+T0,ED=b(),b0=FO(DD);if(L+=b()-ED,$=b0.pending,b0.ready){let U0=j.encode(b0.ready);y+=U0.byteLength,N0.enqueue(U0)}let OD=b();if(z===1||z%25===0||OD-j0>5000)j0=OD,Y0("stream_tool_prefix_progress",{readMs:h0,lastChunkBytes:E0.byteLength})}catch(G0){throw Y0("stream_tool_prefix_error",{error:G0 instanceof Error?G0.message:String(G0)}),W0(),G0}},async cancel(N0){Y0("stream_tool_prefix_cancel",{reason:N0 instanceof Error?N0.message:String(N0)});try{await O.cancel(N0)}finally{W0()}}});return new Response(e,{status:D.status,statusText:D.statusText,headers:D.headers})}var NW="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",aO="~effect/http/HttpServerResponse",eO="~effect/http/Cookies",D_="~effect/http/HttpBody",jW="~effect/ErrorReporter/ignore",JW=60000,PW=60000,$W=5000,O_=200,j1=240,XW=j1;function YW(D){let _=Math.floor(D.retryAfterSeconds/60),O=D.retryAfterSeconds%60,W=`Retry in ${_}m ${O}s.`;return D.modelName?`${D.modelName} weekly limit reached, no routable accounts. ${W}`:`Killswitch: no routable accounts. ${W}`}function ZW(D){if(!D.requestModelId)return{isScopedDriven:!1};if(!e0(D.mainQuota,D.storage))return{isScopedDriven:!1};let _=F_(D.mainQuota,D.requestModelId);if(!_)return{isScopedDriven:!1};if(!Number.isFinite(_.remainingPercent))return{isScopedDriven:!1};let O=f_(D.storage);if(_.remainingPercent<=O.scoped)return{isScopedDriven:!0,modelName:_.modelName,modelId:D.requestModelId};return{isScopedDriven:!1}}var GW=1,__=!1;function xD(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function x(){return performance.now()}function m(D){return Math.round(D*10)/10}function W_(D){return Math.floor(Math.random()*Math.max(0,D))}function GD(D){if(typeof D==="string")return D;if(D instanceof URL)return D.toString();return D.url}function VD(D,_){return _?.method??(D instanceof Request?D.method:void 0)}function N_(D){return D instanceof Error?D.message:String(D)}function VW(){if(__||!1||!xD())return;__=!0;let D=100,_=250,O=x()+D;setInterval(()=>{let W=x(),j=W-O;if(O=W+D,j<_)return;p("[perf] opencode event_loop_lag",{lagMs:m(j),thresholdMs:_})},D).unref?.()}function KW(D){let _=x(),O={requestId:String(GW++),start:_,last:_,mark(W,j){let $=x();if(xD())p("[perf] opencode request stage",{requestId:O.requestId,stage:W,deltaMs:m($-O.last),totalMs:m($-O.start),...j});O.last=$},done(W,j){let $=x();if(xD())p("[perf] opencode request done",{requestId:O.requestId,stage:W,deltaMs:m($-O.last),totalMs:m($-O.start),...j});O.last=$}};if(xD())p("[perf] opencode request start",{requestId:O.requestId,...D});return O}async function wW(D,_,O){let W=D.client.session,j=await KO(D.client,_),$={path:{id:_},body:{noReply:!0,parts:[{type:"text",text:O,ignored:!0}]}};if(j?.agent)$.body.agent=j.agent;if(j?.model)$.body.model=j.model;if(j?.variant)$.body.variant=j.variant;if(typeof W?.promptAsync==="function"){await W.promptAsync($);return}if(typeof W?.prompt==="function"){await Promise.resolve(W.prompt($));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function zW(){let D=Error(NW);throw D[aO]=aO,D[jW]=!0,D.status=204,D.statusText=void 0,D.headers={},D.cookies={[eO]:eO,cookies:{}},D.body={[D_]:D_,_tag:"Empty"},D}function IW(D){if(D.sessionID==null)return!1;let _=D.model;return _?.providerID==="anthropic"||_?.api?.npm==="@ai-sdk/anthropic"||_?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function CW(D){if(D.some((_)=>_.includes("<use_parallel_tool_calls>")))return!1;return D.push(j_),!0}var LW={input:0,output:0,cache:{read:0,write:0}};function UW(D){let _=D["claude-opus-4-8"]??D["claude-opus-4-5"]??Object.values(D)[0];if(!_)return D;return{...D,...Object.fromEntries(Object.values(r_).map((O)=>[O.id,{..._,id:O.id,name:O.name,api:_.api?{..._.api,id:O.id}:void 0,cost:{input:a0.input,output:a0.output,cache:{read:a0.cacheRead,write:a0.cacheWrite5m}},limit:{..._.limit??{},context:u_,output:c_},capabilities:{..._.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:o_}]))}}function QW(D){return Object.fromEntries(Object.entries(D).map(([_,O])=>[_,{...O,cost:LW}]))}var lW=async(D)=>{VW();let{client:_}=D,O=X_(),W=600000,j=50,$=new Map;function z(){let N=Date.now();for(let[J,X]of $)if(N-X.createdAt>W)$.delete(J)}function A(N,J){if(z(),$.size>=j){let X="",I=1/0;for(let[P,E]of $)if(E.createdAt<I)I=E.createdAt,X=P;if(X)$.delete(X)}$.set(N,J)}function i(N){z();let J=$.get(N);if(!J)return;if(Date.now()-J.createdAt>W){$.delete(N);return}return J}let y;try{y=await T(O)}catch(N){let J=N instanceof Error?N.message:String(N);throw Error(`Failed to load account store: ${J}`,{cause:N instanceof Error?N:void 0})}let L=new t_({storage:y,onMainQuotaFetched:async(N,J,X,I)=>{try{let P=await T(O)??V0(),E=M_(P);if(E&&E.checkedAt>=I&&S_(E.quota,P,E.checkedAt)>Date.now()){L.seedMainFromStorage(P);return}P.quota=P.quota??{},P.quota.mainQuota=N,P.quota.mainQuotaCheckedAt=J,P.quota.mainQuotaToken=X,P.quota.mainLastQuotaApiError=void 0,await u0(P,O,{mainQuota:!0})}catch(P){c.warn("quota","failed to persist main quota",{error:P instanceof Error?P.message:String(P)})}},onApiError:async(N)=>{try{let J=await T(O)??V0();J.quota=J.quota??{},J.quota.mainLastQuotaApiError=N,await u0(J,O,{mainQuota:!0})}catch(J){c.warn("quota","failed to persist backoff state",{error:J instanceof Error?J.message:String(J)})}}}),h=new q_({quotaManager:L,onFallbackStorageChanged:()=>{F0().catch(()=>{})}});h.startBackgroundRefresh();let o=null,j0=new g_({loadStorage:()=>T(O),prepareHeaders:async(N,J)=>{let X,I=J.oauthAccountId;if(I&&I!=="main"){let P=await T(O),E=P?.accounts.find((B)=>B.id===I&&B.enabled!==!1&&$0(B));if(E&&P){let B=E;try{B=await h.refreshAccount(E,P)}catch(U){c.warn("cachekeep","fallback token refresh failed",{accountId:I,error:U instanceof Error?U.message:String(U)})}X=B.access}X??=N.get("authorization")?.match(/^Bearer\s+(.+)$/i)?.[1]}else{if(!e)return N;let P=await e();if(P.type!=="oauth")return N;if(!P.access||P.expires&&P.expires<Date.now()){if(!o)return N;P.access=await o()}X=P.access}if(!X)return N;try{let P=JSON.parse(J.bodyText),E=await cD(X,typeof P.model==="string"?P.model:void 0);if(N.delete("anthropic-beta"),l0(N,X,{body:P,identity:E}),N.set("anthropic-beta",i0(N.get("anthropic-beta"),[k_])),P.speed==="fast")YD(N)}catch{l0(N,X)}return N}});if(t0({enabled:c0(y),mode:o0(y)}),MD(ID(y)),HD(CD(y)),!process.env.OPENCODE_ANTHROPIC_AUTH_LOG_LEVEL)P_(UD(y)??"info");let I0=null;if(D.directory){let N=globalThis;if(N.__anthropicAuthRpcServer)await N.__anthropicAuthRpcServer.stop().catch(()=>{}),N.__anthropicAuthRpcServer=void 0;try{I0=await UO({dir:_1(D.directory),drain:IO,apply:J1}),N.__anthropicAuthRpcServer=I0}catch(J){c.warn("rpc","failed to start",{error:J instanceof Error?J.message:String(J)})}}let r={activeId:"main",route:"main"},L0=W1();function W0(N,J){r={activeId:J.activeId,route:J.route},L.updateStorage(N),L.seedMainFromStorage(N,J.mainAccessToken),L.seedFallbacksFromAccounts((N?.accounts??[]).filter($0));let X=L.getMain(J.mainAccessToken),I=L.getLastApiError(),P=N?.refresh?.mainLastRefreshError,E={main:{quota:X?.quota??null,quotaBackedOff:L.isBackedOff(),quotaBackoffUntil:I?.nextRetryAt,refreshBackedOff:P?x0(P,J.mainRefreshToken,Date.now()):!1,refreshBackoffUntil:P?.nextRetryAt},fallbacks:(N?.accounts??[]).filter((B)=>B.enabled!==!1&&$0(B)).map((B)=>({id:B.id,label:B.label,quota:B.access?L.getFallback(B.id,B.access)?.quota??null:null,needsReauth:B.lastRefreshError!=null&&x0(B.lastRefreshError,B.refresh,Date.now())&&U_(B.lastRefreshError),enabled:B.enabled!==!1})),activeId:J.activeId,route:J.route,relay:(()=>{let B=JO(N);return B?{enabled:!0,transport:B.transport??"http"}:null})(),fastMode:FD(),cacheKeep:{enabled:tD(N),window:N?.cacheKeep?.startHour!=null&&N?.cacheKeep?.endHour!=null?`${N.cacheKeep.startHour}-${N.cacheKeep.endHour}`:void 0,trackedSessions:j0.trackedCount()},lastUpdated:Date.now()};return N1(E,L0).catch((B)=>c.warn("sidebar","state write failed",{error:B instanceof Error?B.message:String(B)}))}async function F0(){let N=await T(O),J,X;if(e)try{let I=await e();J=I.access,X=I.refresh}catch{}W0(N,{activeId:r.activeId,route:r.route,mainAccessToken:J,mainRefreshToken:X})}function Y0(N,J){if(!J)return;if(N?.quota?.enabled!==!0)return;if(L.getMain(J))return;if(N0)return;N0=!0,L.refreshMain(J).then(()=>F0()).catch(()=>{}).finally(()=>{N0=!1})}let e=null,N0=!1,K0=null,G0=0;function E0(N){let J=N?.refresh?.refreshBeforeExpiryMinutes??XW;return Math.max(j1,J)*60000}function h0(N){return N?.refresh?.enabled!==!1}async function T0(N){if(!N)return;let J=await T(O),X=J?.refresh?.mainLastRefreshError;if(!J?.refresh||!X?.tokenHash)return;let I=LD(N);if(X.tokenHash===I)return;if(X.nextRetryAt&&X.nextRetryAt>Date.now()){p("[refresh] opencode main oauth keeping backoff despite token rotation",{nextRetryAt:X.nextRetryAt,retryCount:X.retryCount,remainingMs:X.nextRetryAt-Date.now()});return}J.refresh.mainLastRefreshError=void 0,await u0(J,O,{mainRefresh:!0}),p("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:X.checkedAt,previousNextRetryAt:X.nextRetryAt,previousRetryCount:X.retryCount})}async function R0(){let N=[];if(e)try{let P=await e();if(P.type==="oauth"&&P.access){let E=await L.refreshMain(P.access);N.push({name:"OpenCode anthropic",role:"main",quota:E})}else if(P.type==="oauth")N.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(P){let E=P instanceof Error?P.message:String(P);N.push({name:"OpenCode anthropic",role:"main",error:E.includes("429")?"Usage API rate limited — try again in a moment":E})}let{storage:J,errors:X}=await h.refreshQuotaForAllAccounts({force:!0}),I=new Map(X.map((P)=>[P.accountId,P.message]));if(N.push(...s_(J,I)),!e)N.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return a_({accounts:N,refreshedAt:Date.now()})}async function DD(N){if(e)try{let J=await e();W0(N,{activeId:r.activeId,route:r.route,mainAccessToken:J.access,mainRefreshToken:J.refresh})}catch{}}async function ED(N){let J=v_(N);if(J.type==="enable"||J.type==="disable"){let E=J.type==="enable",B=await Z_(E),U=o0(B);return t0({enabled:E,mode:U}),c.info("commands","cache enabled changed",{enabled:E}),BD({argumentsText:N,enabled:E,mode:U})}if(J.type==="mode"){let E=await G_(J.mode),B=c0(E);return t0({enabled:B,mode:J.mode}),c.info("commands","cache mode changed",{mode:J.mode}),BD({argumentsText:N,enabled:B,mode:J.mode})}let X=await T(O),I=c0(X),P=o0(X);return t0({enabled:I,mode:P}),BD({argumentsText:N,enabled:I,mode:P})}async function b0(N){let J=y_(N),X=await T(O);if(J.type==="window")X=await w_(J.startHour,J.endHour),c.info("commands","cachekeep enabled changed",{enabled:!0});else if(J.type==="disable")X=await z_(!1),c.info("commands","cachekeep enabled changed",{enabled:!1});else if(J.type==="subagents")X=await C_(J.enabled),c.info("commands","cachekeep subagents changed",{subagents:J.enabled});let I=rD(X),P=j0.stats(I);return b_({argumentsText:N,enabled:h_(X),window:I,hybridActive:tD(X),trackedSessions:P.trackedSessions,nextPrewarmAt:P.nextPrewarmAt})}async function OD(N){let J=p_(N);if(J.type==="enable"||J.type==="disable"){let P=J.type==="enable";return await V_(P),MD(P),c.info("commands","dump changed",{enabled:P}),eD({argumentsText:N,enabled:P})}let X=await T(O),I=ID(X);return MD(I),eD({argumentsText:N,enabled:I})}async function U0(N){let J=l_(N);if(J.type==="enable"||J.type==="disable"){let P=J.type==="enable";return await K_(P),HD(P),c.info("commands","fast mode changed",{enabled:P}),OO({argumentsText:N,enabled:P})}let X=await T(O),I=CD(X);return HD(I),OO({argumentsText:N,enabled:I})}async function A0(N){let J=O1(N);if(J.type==="mode")return await D1(J.mode),c.info("commands","routing mode changed",{mode:J.mode}),$O({argumentsText:N,mode:J.mode});let X=await T();return $O({argumentsText:N,mode:fD(X)})}async function TD(N){let J=n_(N);if(J.type==="level")return await B_(J.level),c.info("commands","log level changed",{level:J.level}),NO({argumentsText:N,level:J.level});let X=await T(O),I=UD(X)??"info";return NO({argumentsText:N,level:I})}async function _D(N,J){let X=m_(N);if(X.type==="add-apikey"){if(!X.apiKey)return{text:"API key is required",accounts:z0(await T(O)??V0())};let U=X.label?.trim()||void 0,M=Date.now(),g=X.baseURL?.trim()||"https://api.kie.ai/claude";if(!zD(g))return{text:"Invalid base URL. Must be an http(s) URL without embedded credentials.",accounts:z0(await T(O)??V0())};let t=X.authHeader??"authorization-bearer",a={id:U||mD(),label:U||void 0,type:"api",apiKey:X.apiKey,baseURL:g,authHeader:t,enabled:!0,addedAt:M,lastUsed:M};await nD(a,O),c.info("commands","account added",{id:a.id,label:a.label,type:"apikey"});let X0=await T(O);await DD(X0);let S0=z0(X0??{version:1,accounts:[]});return{text:`API key account "${a.label??a.id}" added.`,accounts:S0}}if(X.type==="add-oauth-start"){let U=await KD("max"),M={state:U.state,verifier:U.verifier,redirectUri:U.redirectUri,createdAt:Date.now()};return A(J??"default",M),{text:`Open this URL in your browser:
11
- ${U.url}`,knobs:{oauthUrl:U.url},accounts:z0(await T(O)??V0())}}if(X.type==="add-oauth-finish"){let U=J??"default",M=i(U);if(!M)return{text:"OAuth session expired. Please start again.",accounts:z0(await T(O)??V0())};try{let g=await wD(X.code,M.verifier,M.redirectUri,M.state);if(g.type==="failed")return{text:"OAuth authentication failed. Please check the code and try again.",accounts:z0(await T(O)??V0())};let t=Date.now(),a={id:mD(),type:"oauth",label:X.label||void 0,access:g.access,refresh:g.refresh,expires:g.expires,enabled:!0,addedAt:t,lastUsed:t,lastRefreshedAt:t};await nD(a,O),c.info("commands","account added",{id:a.id,label:a.label,type:"oauth"});let X0=await T(O);return await DD(X0),{text:"OAuth account added.",accounts:z0(X0??V0())}}catch{return{text:"OAuth exchange failed due to a network error. Please try again.",accounts:z0(await T(O)??V0())}}finally{$.delete(U)}}let I=await T(O),P=i_({argumentsText:N,storage:I??{version:1,accounts:[]}});if(P.updated){if(P.updated.action==="enable"||P.updated.action==="disable"){let M=P.updated.action==="enable";await A_(P.updated.id,M,O);let g=P.updated.id,t=I?.accounts.find((a)=>a.id===g);c.info("commands",`account ${P.updated.action}d`,{id:g,label:t?.label,enabled:M})}else if(P.updated.action==="remove"){await T_(P.updated.id,O);let M=P.updated.id,g=I?.accounts.find((t)=>t.id===M);c.info("commands","account removed",{id:M,label:g?.label})}else if(P.updated.action==="reorder"){await R_(P.updated.newOrder??P.updated.previousOrder??[],O);let M=P.updated.id,g=I?.accounts.find((t)=>t.id===M);c.info("commands","account reordered",{id:M,label:g?.label})}let U=await T(O);if(e)try{let M=await e();W0(U,{activeId:r.activeId,route:r.route,mainAccessToken:M.access,mainRefreshToken:M.refresh})}catch{}}let E=await T(O),B=z0(E??{version:1,accounts:[]});return{text:P.text,accounts:B}}async function g0(N,J,X){if(N==="claude-quota")return{command:N,text:await R0(),knobs:{}};if(N==="claude-logging"){let U=await TD(J),M=await T(O);return{command:N,text:U,knobs:{level:UD(M)??"info"}}}if(N==="claude-account"){let U=await _D(J,X),M={accounts:U.accounts};if("knobs"in U&&U.knobs)Object.assign(M,U.knobs);return{command:N,text:U.text,knobs:M}}if(N==="claude-routing"){let U=await A0(J),M=await T(O);return{command:N,text:U,knobs:{mode:fD(M)}}}if(N==="claude-fast"){let U=await U0(J),M=await T(O);return{command:N,text:U,knobs:{enabled:CD(M)}}}if(N==="claude-dump"){let U=await OD(J),M=await T(O);return{command:N,text:U,knobs:{enabled:ID(M)}}}if(N==="claude-cache"){let U=await ED(J),M=await T(O);return{command:N,text:U,knobs:{enabled:c0(M),mode:o0(M)}}}if(N==="claude-cachekeep"){let U=await b0(J),M=await T(O);return{command:N,text:U,knobs:{window:rD(M)}}}let I=await T(),P=dD(I),E=(I?.accounts??[]).filter((U)=>U.enabled!==!1).map((U)=>U.id),B=d_({argumentsText:J,config:P,accountIds:E});if(B.updatedConfig){if(await E_(B.updatedConfig),P.enabled!==B.updatedConfig.enabled)c.info("commands","killswitch changed",{enabled:B.updatedConfig.enabled===!0});if(JSON.stringify(P.main)!==JSON.stringify(B.updatedConfig.main)||JSON.stringify(P.accounts)!==JSON.stringify(B.updatedConfig.accounts))c.info("commands","killswitch thresholds changed",{thresholds:B.updatedConfig.main??B.updatedConfig.accounts})}return{command:N,text:B.text,knobs:{config:dD(await T()),accountIds:E}}}async function J1(N){let J=await g0(N.command,N.arguments,N.sessionId);return{text:J.text,knobs:J.knobs}}function P1(N,J=10){let X=Math.max(0,Math.min(Math.round(N/100*J),J));return"█".repeat(X)+"░".repeat(J-X)}function WD(N,J){return`${N} ${P1(J)} ${String(Math.round(J)).padStart(3)}%`}function XO(N){if(!N)return"";let J=new Date(N).getTime();if(Number.isNaN(J))return"";let X=J-Date.now();if(X<=0)return"resets now";let I=Math.floor(X/60000);if(I<1)return"resets <1m";if(I<60)return`resets ${I}m`;let P=Math.floor(I/60),E=I%60;return E>0?`resets ${P}h${E}m`:`resets ${P}h`}function $1(N,J,X){let I=[],P=0;if(N){let{five_hour:U,seven_day:M}=N;if(U||M){let t=X==="main"?"active":"idle",a=XO(U?.resetsAt),X0=[`main · ${t}${a?` (${a})`:""}`];if(U)X0.push(WD("5h",U.usedPercent)),P=Math.max(P,U.usedPercent);if(M)X0.push(WD("7d",M.usedPercent)),P=Math.max(P,M.usedPercent);I.push(X0.join(`
12
- `))}}if(J?.length)for(let U of J){let M=U.quota;if(!M)continue;let{five_hour:g,seven_day:t}=M;if(!g&&!t)continue;let a=U.label||"alt",S0=X===U.id?"active":"idle",Q0=XO(g?.resetsAt),H0=[`${a} · ${S0}${Q0?` (${Q0})`:""}`];if(g)H0.push(WD("5h",g.usedPercent)),P=Math.max(P,g.usedPercent);if(t)H0.push(WD("7d",t.usedPercent)),P=Math.max(P,t.usedPercent);I.push(H0.join(`
13
- `))}if(!I.length)return;let E=I.join(`
9
+ `);if(N===-1)return j===-1?null:{index:j,length:4};if(j===-1||N<j)return{index:N,length:2};return{index:j,length:4}}function nW(W,N){if(!N)return;W.pending+=N;while(!0){let j=a1(W.pending);if(!j)break;let O=W.pending.slice(0,j.index);W.pending=W.pending.slice(j.index+j.length);let D=I4(O);if(!D)continue;if(W.events++,w1(W.eventCounts,D.event??"unknown"),w1(W.typeCounts,D.type),w1(W.deltaTypeCounts,D.deltaType),w1(W.contentBlockTypeCounts,D.contentBlockType),W.textDeltaBytes+=D.textDeltaBytes??0,W.thinkingDeltaBytes+=D.thinkingDeltaBytes??0,W.inputJsonDeltaBytes+=D.inputJsonDeltaBytes??0,W.signatureDeltaBytes+=D.signatureDeltaBytes??0,W.redactedThinkingBytes+=D.redactedThinkingBytes??0,W.last=D,D.dataBytes>0&&!D.type&&!D.event)W.parseErrors++}}function xN(){return{pending:"",completed:!1}}function EN(W,N){if(!N||W.completed)return null;W.pending+=N;while(!0){let j=a1(W.pending);if(!j)return null;let O=W.pending.slice(0,j.index);W.pending=W.pending.slice(j.index+j.length);let D=I4(O);if(D?.type!=="message_delta"||!D.stopReason)continue;return W.completed=!0,D.stopReason==="refusal"?{type:"content-filter"}:{type:"complete",finishReason:D.stopReason}}}function SN(){return{pending:""}}function vN(W,N){let j=W?.toLowerCase(),O=N.toLowerCase();return j==="api_error"||j==="overloaded_error"||j==="server_error"||j==="internal_server_error"||O.includes("internal server error")||O.includes("server overloaded")}function fN(W,N){let j=W?`${W}: ${N}`:N,O=Error(`Anthropic stream error: ${j}`);if(O.code="ECONNRESET",O.syscall="anthropic-sse",W)O.providerErrorType=W;return O}function RN(){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 AN(W){if(!W.includes("error"))return null;let N,j=[];for(let h of W.split(/\r?\n/)){if(h.startsWith("event:")){N=h.slice(6).trim();continue}if(h.startsWith("data:")){let d=h.slice(5);j.push(d.startsWith(" ")?d.slice(1):d)}}let O=j.join(`
10
+ `);if(!O||O==="[DONE]")return null;let D;try{D=JSON.parse(O)}catch{return null}let Z=x0(D);if(N!=="error"&&$0(Z,"type")!=="error")return null;let X=x0(Z?.error),U=$0(X,"type")??$0(X,"code")??void 0,q=$0(X,"message")??$0(Z,"message")??U??"Anthropic stream error";if(!vN(U,q))return null;return fN(U,q)}function oW(W,N){if(!N)return null;W.pending+=N;while(!0){let j=a1(W.pending);if(!j)break;let O=W.pending.slice(0,j.index);W.pending=W.pending.slice(j.index+j.length);let D=AN(O);if(D)return D}return null}function qN(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 M4(W,N={}){if(!W.body)return W;let j=W.body.getReader(),O=new TextDecoder,D=new TextEncoder,Z="",X=0,U=0,q=0,h=0,d=0,C=!1,s=!1,Y0=u(),P0=u(),O0=N.perf?FN():void 0,B0=SN(),E0=N.onContentFilter||N.onComplete?xN():void 0,D0=(i)=>{if(!E0)return null;let U0=EN(E0,i);if(U0?.type==="content-filter"&&N.onContentFilter)return N.onContentFilter()===!1?null:RN();if(U0?.type==="complete")N.onComplete?.(U0.finishReason);return null},I0=()=>{if(s)return;s=!0,j.releaseLock()},Z0=async(i)=>{try{await j.cancel(i)}catch{}finally{I0()}},V0=(i={})=>({chunks:X,pulls:U,inputBytes:q,outputBytes:h,pendingChars:Z.length,rewriteMs:z0(d),totalMs:z0(u()-P0),...O0?qN(O0):{},...i}),w0=(i,U0={})=>{N.perf?.(i,V0(U0))};N.perf?.("stream_tool_prefix_wrapper_created",{status:W.status,hasBody:!0});let g1=new ReadableStream({async pull(i){if(U++,!C)C=!0,w0("stream_tool_prefix_first_pull");let U0=u();try{let{done:G0,value:M0}=await j.read(),d0=z0(u()-U0);if(G0){let L0=O.decode();if(O0)nW(O0,L0);let f0=oW(B0,L0)??D0(L0);if(f0)throw w0("stream_tool_prefix_retryable_error",{error:f0.message,providerErrorType:f0.providerErrorType}),await Z0(f0),f0;let h1=u(),Y1=iW(`${Z}${L0}`,!0);if(d+=u()-h1,Y1.ready){let Z1=D.encode(Y1.ready);h+=Z1.byteLength,i.enqueue(Z1)}w0("stream_tool_prefix_rewrite",{readMs:d0}),I0(),i.close();return}X++,q+=M0.byteLength;let g0=O.decode(M0,{stream:!0});if(O0)nW(O0,g0);let S0=oW(B0,g0)??D0(g0);if(S0)throw w0("stream_tool_prefix_retryable_error",{error:S0.message,providerErrorType:S0.providerErrorType,readMs:d0,lastChunkBytes:M0.byteLength}),I0(),S0;let y1=Z+g0,D1=u(),v0=iW(y1);if(d+=u()-D1,Z=v0.pending,v0.ready){let L0=D.encode(v0.ready);h+=L0.byteLength,i.enqueue(L0)}let $1=u();if(X===1||X%25===0||$1-Y0>5000)Y0=$1,w0("stream_tool_prefix_progress",{readMs:d0,lastChunkBytes:M0.byteLength})}catch(G0){throw w0("stream_tool_prefix_error",{error:G0 instanceof Error?G0.message:String(G0)}),I0(),G0}},async cancel(i){w0("stream_tool_prefix_cancel",{reason:i instanceof Error?i.message:String(i)});try{await j.cancel(i)}finally{I0()}}});return new Response(g1,{status:W.status,statusText:W.statusText,headers:W.headers})}var kN="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",L4="~effect/http/HttpServerResponse",H4="~effect/http/Cookies",B4="~effect/http/HttpBody",gN="~effect/ErrorReporter/ignore",yN=60000,hN=60000,mN=5000,F4=200,vj=240,bN=vj;function iN(W){let N=Math.floor(W.retryAfterSeconds/60),j=W.retryAfterSeconds%60,O=`Retry in ${N}m ${j}s.`;return W.modelName?`${W.modelName} weekly limit reached, no routable accounts. ${O}`:`Killswitch: no routable accounts. ${O}`}function pN(W){if(!W.requestModelId)return{isScopedDriven:!1};if(!J1(W.mainQuota,W.storage))return{isScopedDriven:!1};let N=r4(W.mainQuota,W.requestModelId);if(!N)return{isScopedDriven:!1};if(!Number.isFinite(N.remainingPercent))return{isScopedDriven:!1};let j=s4(W.storage);if(N.remainingPercent<=j.scoped)return{isScopedDriven:!0,modelName:N.modelName,modelId:W.requestModelId};return{isScopedDriven:!1}}var dN=1,T4=!1;function k1(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function S(){return performance.now()}function o(W){return Math.round(W*10)/10}function x4(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 M1(W,N){return N?.method??(W instanceof Request?W.method:void 0)}function E4(W){return W instanceof Error?W.message:String(W)}function lN(){if(T4||!1||!k1())return;T4=!0;let W=100,N=250,j=S()+W;setInterval(()=>{let O=S(),D=O-j;if(j=O+W,D<N)return;r("[perf] opencode event_loop_lag",{lagMs:o(D),thresholdMs:N})},W).unref?.()}function uN(W){let N=S(),j={requestId:String(dN++),start:N,last:N,mark(O,D){let Z=S();if(k1())r("[perf] opencode request stage",{requestId:j.requestId,stage:O,deltaMs:o(Z-j.last),totalMs:o(Z-j.start),...D});j.last=Z},done(O,D){let Z=S();if(k1())r("[perf] opencode request done",{requestId:j.requestId,stage:O,deltaMs:o(Z-j.last),totalMs:o(Z-j.start),...D});j.last=Z}};if(k1())r("[perf] opencode request start",{requestId:j.requestId,...W});return j}function cN(W,N){let j=/^msg_([0-9a-fA-F]{12})/.exec(W);if(!j)return;let O=BigInt(`0x${j[1]}`);if(O<=0n)return;let Z=`msg_${(O-1n).toString(16).padStart(12,"0")}${"z".repeat(14)}`;if(N&&Z<=N)return;return Z}async function S4(W,N,j,O={}){let D=W.client.session,Z=await RW(W.client,N),X={path:{id:N},body:{noReply:O.noReply??!0,parts:[{type:"text",text:j,ignored:!0}]}};if(O.beforeActiveAssistant){let U=Z?.latestAssistantMessageId?cN(Z.latestAssistantMessageId,Z.latestUserMessageId):void 0;if(!U)throw Error("OpenCode active assistant ordering is unavailable for an immediate notification.");X.body.messageID=U}if(Z?.agent)X.body.agent=Z.agent;if(Z?.model)X.body.model=Z.model;if(Z?.variant)X.body.variant=Z.variant;if(typeof D?.promptAsync==="function"){await D.promptAsync(X);return}if(typeof D?.prompt==="function"){await Promise.resolve(D.prompt(X));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function nN(){let W=Error(kN);throw W[L4]=L4,W[gN]=!0,W.status=204,W.statusText=void 0,W.headers={},W.cookies={[H4]:H4,cookies:{}},W.body={[B4]:B4,_tag:"Empty"},W}function oN(W){if(W.sessionID==null)return!1;let N=W.model;return N?.providerID==="anthropic"||N?.api?.npm==="@ai-sdk/anthropic"||N?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function rN(W){if(W.some((N)=>N.includes("<use_parallel_tool_calls>")))return!1;return W.push(v4),!0}var tN={input:0,output:0,cache:{read:0,write:0}},sN="Fable content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Fable cache warm.",aN="Fable recovery window complete. Returning to Fable 5.";function eN(W){let N=W["claude-opus-4-8"]??W["claude-opus-4-5"]??Object.values(W)[0];if(!N)return W;return{...W,...Object.fromEntries(Object.values(Ij).map((j)=>[j.id,{...N,id:j.id,name:j.name,api:N.api?{...N.api,id:j.id}:void 0,cost:{input:O1.input,output:O1.output,cache:{read:O1.cacheRead,write:O1.cacheWrite5m}},limit:{...N.limit??{},context:Uj,output:Qj},capabilities:{...N.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:Cj}]))}}function WO(W){return Object.fromEntries(Object.entries(W).map(([N,j])=>[N,{...j,cost:tN}]))}var TO=async(W)=>{lN();let{client:N}=W,j=q4(),O=600000,D=50,Z=new Map;function X(){let J=Date.now();for(let[$,G]of Z)if(J-G.createdAt>O)Z.delete($)}function U(J,$){if(X(),Z.size>=D){let G="",w=1/0;for(let[Y,x]of Z)if(x.createdAt<w)w=x.createdAt,G=Y;if(G)Z.delete(G)}Z.set(J,$)}function q(J){X();let $=Z.get(J);if(!$)return;if(Date.now()-$.createdAt>O){Z.delete(J);return}return $}let h;try{h=await f(j)}catch(J){let $=J instanceof Error?J.message:String(J);throw Error(`Failed to load account store: ${$}`,{cause:J instanceof Error?J:void 0})}let d=new p1,C=new Mj({storage:h,onMainQuotaFetched:async(J,$,G,w)=>{try{let Y=await f(j)??Q0(),x=o4(Y);if(x&&x.checkedAt>=w&&Oj(x.quota,Y,x.checkedAt)>Date.now()){C.seedMainFromStorage(Y);return}Y.quota=Y.quota??{},Y.quota.mainQuota=J,Y.quota.mainQuotaCheckedAt=$,Y.quota.mainQuotaToken=G,Y.quota.mainLastQuotaApiError=void 0,await s0(Y,j,{mainQuota:!0})}catch(Y){b.warn("quota","failed to persist main quota",{error:Y instanceof Error?Y.message:String(Y)})}},onApiError:async(J)=>{try{let $=await f(j)??Q0();$.quota=$.quota??{},$.quota.mainLastQuotaApiError=J,await s0($,j,{mainQuota:!0})}catch($){b.warn("quota","failed to persist backoff state",{error:$ instanceof Error?$.message:String($)})}}}),s=new Jj({quotaManager:C,onFallbackStorageChanged:()=>{w0().catch(()=>{})}});s.startBackgroundRefresh();let Y0=null,P0=new Xj({loadStorage:()=>f(j),prepareHeaders:async(J,$)=>{let G,w=$.oauthAccountId;if(w&&w!=="main"){let Y=await f(j),x=Y?.accounts.find((z)=>z.id===w&&z.enabled!==!1&&X0(z));if(!x||!Y)throw Error(`OAuth account ${w} is unavailable for cache prewarm`);let H=x;try{H=await s.refreshAccount(x,Y)}catch(z){b.warn("cachekeep","fallback token refresh failed",{accountId:w,error:z instanceof Error?z.message:String(z)})}if(G=H.access,!G)throw Error(`OAuth account ${w} has no access token for cache prewarm`)}else{if(!i)return J;let Y=await i();if(Y.type!=="oauth")return J;if(!Y.access||Y.expires&&Y.expires<Date.now()){if(!Y0)return J;Y.access=await Y0()}G=Y.access}if(!G)return J;try{let Y=JSON.parse($.bodyText),x=await $W(G,typeof Y.model==="string"?Y.model:void 0);if(J.delete("anthropic-beta"),r0(J,G,{body:Y,identity:x}),J.set("anthropic-beta",n0(J.get("anthropic-beta"),[$j])),Y.speed==="fast")Q1(J)}catch{r0(J,G)}return J}}),O0=new Map;function B0(J){let $=J.plan.sessionId,G=async()=>{let x=J.warmTarget;if(!x){b.debug("fable-fallback","cache warm skipped",{session:$,reason:"Opus response was not served by an OAuth route"});return}let H=C4(x.bodyText,J.plan.requestedModel);if(!H.ok){b.warn("fable-fallback","cache warm skipped",{session:$,reason:H.reason});return}try{let z=await P0.prewarmNow({sessionId:$,url:x.url,headers:x.headers,bodyText:H.bodyText,oauthAccountId:J.plan.cacheAccountId??x.oauthAccountId});if(z.ok){b.debug("fable-fallback","Fable cache warmed",{session:$,remaining:d.remaining($),...z.usage&&{usage:z.usage}});return}b.warn("fable-fallback","Fable cache warm skipped",{session:$,status:z.status,reason:z.reason})}catch(z){b.warn("fable-fallback","Fable cache warm failed",{session:$,error:z instanceof Error?z.message:String(z)})}},Y=(O0.get($)??Promise.resolve()).then(G,G);return O0.set($,Y),Y.finally(()=>{if(O0.get($)===Y)O0.delete($)}),Y}if(j1({enabled:a0(h),mode:e0(h)}),f1(F1(h)),A1(T1(h)),!process.env.OPENCODE_ANTHROPIC_AUTH_LOG_LEVEL)R4(E1(h)??"info");let E0=null;if(W.directory){let J=globalThis;if(J.__anthropicAuthRpcServer)await J.__anthropicAuthRpcServer.stop().catch(()=>{}),J.__anthropicAuthRpcServer=void 0;try{E0=await yW({dir:xj(W.directory),drain:kW,apply:Aj}),J.__anthropicAuthRpcServer=E0}catch($){b.warn("rpc","failed to start",{error:$ instanceof Error?$.message:String($)})}}let D0={activeId:"main",route:"main"},I0=Ej(),Z0=new Map;function V0(J,$){D0={activeId:$.activeId,route:$.route},C.updateStorage(J),C.seedMainFromStorage(J,$.mainAccessToken),C.seedFallbacksFromAccounts((J?.accounts??[]).filter(X0));let G=C.getMain($.mainAccessToken),w=C.getLastApiError(),Y=J?.refresh?.mainLastRefreshError,x={main:{quota:G?.quota??null,quotaBackedOff:C.isBackedOff(),quotaBackoffUntil:w?.nextRetryAt,refreshBackedOff:Y?k0(Y,$.mainRefreshToken,Date.now()):!1,refreshBackoffUntil:Y?.nextRetryAt},fallbacks:(J?.accounts??[]).filter((H)=>H.enabled!==!1&&X0(H)).map((H)=>({id:H.id,label:H.label,quota:H.access?C.getFallback(H.id,H.access)?.quota??null:null,needsReauth:H.lastRefreshError!=null&&k0(H.lastRefreshError,H.refresh,Date.now())&&u4(H.lastRefreshError),enabled:H.enabled!==!1})),activeId:$.activeId,route:$.route,relay:(()=>{let H=CW(J);return H?{enabled:!0,transport:H.transport??"http"}:null})(),fastMode:R1(),cacheKeep:{enabled:GW(J),window:J?.cacheKeep?.startHour!=null&&J?.cacheKeep?.endHour!=null?`${J.cacheKeep.startHour}-${J.cacheKeep.endHour}`:void 0,trackedSessions:P0.trackedCount()},fableRecoveries:Z0.size>0?[...Z0.values()]:void 0,lastUpdated:Date.now()};return Sj(x,I0).catch((H)=>b.warn("sidebar","state write failed",{error:H instanceof Error?H.message:String(H)}))}async function w0(){let J=await f(j),$,G;if(i)try{let w=await i();$=w.access,G=w.refresh}catch{}V0(J,{activeId:D0.activeId,route:D0.route,mainAccessToken:$,mainRefreshToken:G})}function g1(J,$){if(!$)return;if(J?.quota?.enabled!==!0)return;if(C.getMain($))return;if(U0)return;U0=!0,C.refreshMain($).then(()=>w0()).catch(()=>{}).finally(()=>{U0=!1})}let i=null,U0=!1,G0=null,M0=0;function d0(J){let $=J?.refresh?.refreshBeforeExpiryMinutes??bN;return Math.max(vj,$)*60000}function g0(J){return J?.refresh?.enabled!==!1}async function S0(J){if(!J)return;let $=await f(j),G=$?.refresh?.mainLastRefreshError;if(!$?.refresh||!G?.tokenHash)return;let w=x1(J);if(G.tokenHash===w)return;if(G.nextRetryAt&&G.nextRetryAt>Date.now()){r("[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}),r("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:G.checkedAt,previousNextRetryAt:G.nextRetryAt,previousRetryCount:G.retryCount})}async function y1(){let J=[];if(i)try{let Y=await i();if(Y.type==="oauth"&&Y.access){let x=await C.refreshMain(Y.access);J.push({name:"OpenCode anthropic",role:"main",quota:x})}else if(Y.type==="oauth")J.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(Y){let x=Y instanceof Error?Y.message:String(Y);J.push({name:"OpenCode anthropic",role:"main",error:x.includes("429")?"Usage API rate limited — try again in a moment":x})}let{storage:$,errors:G}=await s.refreshQuotaForAllAccounts({force:!0}),w=new Map(G.map((Y)=>[Y.accountId,Y.message]));if(J.push(...Lj($,w)),!i)J.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return Hj({accounts:J,refreshedAt:Date.now()})}async function D1(J){if(i)try{let $=await i();V0(J,{activeId:D0.activeId,route:D0.route,mainAccessToken:$.access,mainRefreshToken:$.refresh})}catch{}}function v0(J,$,G,w){if(Z0.delete(J.sessionId),Z0.set(J.sessionId,{...J,changedAt:Date.now()}),Z0.size>128){let Y=Z0.keys().next().value;if(Y)Z0.delete(Y)}if(V0($,{activeId:D0.activeId,route:D0.route,mainAccessToken:G.access,mainRefreshToken:G.refresh}),!w||l1(J.sessionId))return;S4(W,J.sessionId,w,{noReply:!0,beforeActiveAssistant:!0}).catch((Y)=>{b.warn("fable-fallback","Desktop notification failed",{session:J.sessionId,error:Y instanceof Error?Y.message:String(Y)})})}function $1(J,$,G){if(!J||!Z0.delete(J))return;V0($,{activeId:D0.activeId,route:D0.route,mainAccessToken:G.access,mainRefreshToken:G.refresh})}async function L0(J){let $=Dj(J);if($.type==="enable"||$.type==="disable"){let x=$.type==="enable",H=await g4(x),z=e0(H);return j1({enabled:x,mode:z}),b.info("commands","cache enabled changed",{enabled:x}),v1({argumentsText:J,enabled:x,mode:z})}if($.type==="mode"){let x=await y4($.mode),H=a0(x);return j1({enabled:H,mode:$.mode}),b.info("commands","cache mode changed",{mode:$.mode}),v1({argumentsText:J,enabled:H,mode:$.mode})}let G=await f(j),w=a0(G),Y=e0(G);return j1({enabled:w,mode:Y}),v1({argumentsText:J,enabled:w,mode:Y})}async function f0(J){let $=Yj(J),G=await f(j);if($.type==="window")G=await b4($.startHour,$.endHour),b.info("commands","cachekeep enabled changed",{enabled:!0});else if($.type==="disable")G=await i4(!1),b.info("commands","cachekeep enabled changed",{enabled:!1});else if($.type==="subagents")G=await d4($.enabled),b.info("commands","cachekeep subagents changed",{subagents:$.enabled});let w=ZW(G),Y=P0.stats(w);return Gj({argumentsText:J,enabled:Zj(G),window:w,hybridActive:GW(G),trackedSessions:Y.trackedSessions,nextPrewarmAt:Y.nextPrewarmAt})}async function h1(J){let $=_j(J);if($.type==="enable"||$.type==="disable"){let Y=$.type==="enable";return await h4(Y),f1(Y),b.info("commands","dump changed",{enabled:Y}),KW({argumentsText:J,enabled:Y})}let G=await f(j),w=F1(G);return f1(w),KW({argumentsText:J,enabled:w})}async function Y1(J){let $=zj(J);if($.type==="enable"||$.type==="disable"){let Y=$.type==="enable";return await m4(Y),A1(Y),b.info("commands","fast mode changed",{enabled:Y}),zW({argumentsText:J,enabled:Y})}let G=await f(j),w=T1(G);return A1(w),zW({argumentsText:J,enabled:w})}async function Z1(J){let $=Tj(J);if($.type==="mode")return await Fj($.mode),b.info("commands","routing mode changed",{mode:$.mode}),MW({argumentsText:J,mode:$.mode});let G=await f();return MW({argumentsText:J,mode:q1(G)})}async function fj(J){let $=wj(J);if($.type==="level")return await n4($.level),b.info("commands","log level changed",{level:$.level}),UW({argumentsText:J,level:$.level});let G=await f(j),w=E1(G)??"info";return UW({argumentsText:J,level:w})}async function Rj(J,$){let G=Vj(J);if(G.type==="add-apikey"){if(!G.apiKey)return{text:"API key is required",accounts:C0(await f(j)??Q0())};let z=G.label?.trim()||void 0,F=Date.now(),c=G.baseURL?.trim()||"https://api.kie.ai/claude";if(!B1(c))return{text:"Invalid base URL. Must be an http(s) URL without embedded credentials.",accounts:C0(await f(j)??Q0())};let W0=G.authHeader??"authorization-bearer",j0={id:z||e1(),label:z||void 0,type:"api",apiKey:G.apiKey,baseURL:c,authHeader:W0,enabled:!0,addedAt:F,lastUsed:F};await JW(j0,j),b.info("commands","account added",{id:j0.id,label:j0.label,type:"apikey"});let K0=await f(j);await D1(K0);let y0=C0(K0??{version:1,accounts:[]});return{text:`API key account "${j0.label??j0.id}" added.`,accounts:y0}}if(G.type==="add-oauth-start"){let z=await L1("max"),F={state:z.state,verifier:z.verifier,redirectUri:z.redirectUri,createdAt:Date.now()};return U($??"default",F),{text:`Open this URL in your browser:
11
+ ${z.url}`,knobs:{oauthUrl:z.url},accounts:C0(await f(j)??Q0())}}if(G.type==="add-oauth-finish"){let z=$??"default",F=q(z);if(!F)return{text:"OAuth session expired. Please start again.",accounts:C0(await f(j)??Q0())};try{let c=await H1(G.code,F.verifier,F.redirectUri,F.state);if(c.type==="failed")return{text:"OAuth authentication failed. Please check the code and try again.",accounts:C0(await f(j)??Q0())};let W0=Date.now(),j0={id:e1(),type:"oauth",label:G.label||void 0,access:c.access,refresh:c.refresh,expires:c.expires,enabled:!0,addedAt:W0,lastUsed:W0,lastRefreshedAt:W0};await JW(j0,j),b.info("commands","account added",{id:j0.id,label:j0.label,type:"oauth"});let K0=await f(j);return await D1(K0),{text:"OAuth account added.",accounts:C0(K0??Q0())}}catch{return{text:"OAuth exchange failed due to a network error. Please try again.",accounts:C0(await f(j)??Q0())}}finally{Z.delete(z)}}let w=await f(j),Y=Kj({argumentsText:J,storage:w??{version:1,accounts:[]}});if(Y.updated){if(Y.updated.action==="enable"||Y.updated.action==="disable"){let F=Y.updated.action==="enable";await Nj(Y.updated.id,F,j);let c=Y.updated.id,W0=w?.accounts.find((j0)=>j0.id===c);b.info("commands",`account ${Y.updated.action}d`,{id:c,label:W0?.label,enabled:F})}else if(Y.updated.action==="remove"){await Wj(Y.updated.id,j);let F=Y.updated.id,c=w?.accounts.find((W0)=>W0.id===F);b.info("commands","account removed",{id:F,label:c?.label})}else if(Y.updated.action==="reorder"){await jj(Y.updated.newOrder??Y.updated.previousOrder??[],j);let F=Y.updated.id,c=w?.accounts.find((W0)=>W0.id===F);b.info("commands","account reordered",{id:F,label:c?.label})}let z=await f(j);if(i)try{let F=await i();V0(z,{activeId:D0.activeId,route:D0.route,mainAccessToken:F.access,mainRefreshToken:F.refresh})}catch{}}let x=await f(j),H=C0(x??{version:1,accounts:[]});return{text:Y.text,accounts:H}}async function LW(J,$,G){if(J==="claude-quota")return{command:J,text:await y1(),knobs:{}};if(J==="claude-logging"){let z=await fj($),F=await f(j);return{command:J,text:z,knobs:{level:E1(F)??"info"}}}if(J==="claude-account"){let z=await Rj($,G),F={accounts:z.accounts};if("knobs"in z&&z.knobs)Object.assign(F,z.knobs);return{command:J,text:z.text,knobs:F}}if(J==="claude-routing"){let z=await Z1($),F=await f(j);return{command:J,text:z,knobs:{mode:q1(F)}}}if(J==="claude-fast"){let z=await Y1($),F=await f(j);return{command:J,text:z,knobs:{enabled:T1(F)}}}if(J==="claude-dump"){let z=await h1($),F=await f(j);return{command:J,text:z,knobs:{enabled:F1(F)}}}if(J==="claude-cache"){let z=await L0($),F=await f(j);return{command:J,text:z,knobs:{enabled:a0(F),mode:e0(F)}}}if(J==="claude-cachekeep"){let z=await f0($),F=await f(j);return{command:J,text:z,knobs:{window:ZW(F)}}}let w=await f(),Y=OW(w),x=(w?.accounts??[]).filter((z)=>z.enabled!==!1).map((z)=>z.id),H=Pj({argumentsText:$,config:Y,accountIds:x});if(H.updatedConfig){if(await e4(H.updatedConfig),Y.enabled!==H.updatedConfig.enabled)b.info("commands","killswitch changed",{enabled:H.updatedConfig.enabled===!0});if(JSON.stringify(Y.main)!==JSON.stringify(H.updatedConfig.main)||JSON.stringify(Y.accounts)!==JSON.stringify(H.updatedConfig.accounts))b.info("commands","killswitch thresholds changed",{thresholds:H.updatedConfig.main??H.updatedConfig.accounts})}return{command:J,text:H.text,knobs:{config:OW(await f()),accountIds:x}}}async function Aj(J){let $=await LW(J.command,J.arguments,J.sessionId);return{text:$.text,knobs:$.knobs}}function qj(J,$=10){let G=Math.max(0,Math.min(Math.round(J/100*$),$));return"█".repeat(G)+"░".repeat($-G)}function G1(J,$){return`${J} ${qj($)} ${String(Math.round($)).padStart(3)}%`}function HW(J){if(!J)return"";let $=new Date(J).getTime();if(Number.isNaN($))return"";let G=$-Date.now();if(G<=0)return"resets now";let w=Math.floor(G/60000);if(w<1)return"resets <1m";if(w<60)return`resets ${w}m`;let Y=Math.floor(w/60),x=w%60;return x>0?`resets ${Y}h${x}m`:`resets ${Y}h`}function kj(J,$,G){let w=[],Y=0;if(J){let{five_hour:z,seven_day:F}=J;if(z||F){let W0=G==="main"?"active":"idle",j0=HW(z?.resetsAt),K0=[`main · ${W0}${j0?` (${j0})`:""}`];if(z)K0.push(G1("5h",z.usedPercent)),Y=Math.max(Y,z.usedPercent);if(F)K0.push(G1("7d",F.usedPercent)),Y=Math.max(Y,F.usedPercent);w.push(K0.join(`
12
+ `))}}if($?.length)for(let z of $){let F=z.quota;if(!F)continue;let{five_hour:c,seven_day:W0}=F;if(!c&&!W0)continue;let j0=z.label||"alt",y0=G===z.id?"active":"idle",F0=HW(c?.resetsAt),R0=[`${j0} · ${y0}${F0?` (${F0})`:""}`];if(c)R0.push(G1("5h",c.usedPercent)),Y=Math.max(Y,c.usedPercent);if(W0)R0.push(G1("7d",W0.usedPercent)),Y=Math.max(Y,W0.usedPercent);w.push(R0.join(`
13
+ `))}if(!w.length)return;let x=w.join(`
14
14
 
15
- `),B=P>=90?"error":P>=70?"warning":"info";_.tui?.showToast?.({body:{title:"Claude Quota",message:E,variant:B,duration:B==="error"?8000:5000}})?.catch?.(()=>{})}return{config:async(N)=>{N.command={...N.command??{},[uD]:{template:uD,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[sD]:{template:sD,description:"Manage fallback accounts — list, enable/disable, reorder, remove, or add (API key or OAuth)."},[oD]:{template:oD,description:"Keep hybrid Claude cache warm for recently used sessions during a local time window."},[jO]:{template:jO,description:"Show current Claude OAuth quota usage for all accounts."},[aD]:{template:aD,description:"Show or toggle Anthropic request dump capture for debugging."},[DO]:{template:DO,description:"Show or toggle Anthropic fast mode for supported Opus models."},[WO]:{template:WO,description:"Show or set the plugin log level (error, warn, info, debug, trace)."},[PO]:{template:PO,description:"Show or change Claude account routing between main-first and fallback-first."},[_O]:{template:_O,description:"Manage killswitch — hard-block requests when quota drops below per-account thresholds."}}},"experimental.chat.system.transform":async(N,J)=>{if(!IW(N))return;CW(J.system)},provider:{id:"anthropic",async models(N,J){let X=UW(N.models);if(J.auth?.type!=="oauth"||!$_(y??{}))return X;return QW(X)}},"command.execute.before":async(N)=>{if(!["claude-account","claude-cache","claude-cachekeep","claude-quota","claude-dump","claude-fast","claude-routing","claude-killswitch","claude-logging"].includes(N.command))return;let X=N.command,I=await g0(X,N.arguments,N.sessionID);if(X==="claude-quota"){let P=await T(),E=e?await e().catch(()=>{return}):void 0;W0(P,{activeId:"main",route:"main",mainAccessToken:E?.access,mainRefreshToken:E?.refresh})}if(CO(N.sessionID))zO(I,N.sessionID);else await wW(D,N.sessionID,I.text);zW()},auth:{provider:"anthropic",async loader(N,J){e=N;let X=await N();if(X.type==="oauth"){let E=function(){if(K0)clearInterval(K0),K0=null;let Y=async()=>{try{let w=await T(O);if(!h0(w))return;let S=await N();if(S.type!=="oauth")return;if(await T0(S.refresh),!S.expires)return;let C=S.expires-Date.now(),R=E0(w);if(C>R)return;if(p("[refresh] opencode main oauth background due",{expiresInMs:C,refreshBeforeMs:R}),S.refresh&&x0(w?.refresh?.mainLastRefreshError,S.refresh,Date.now())){p("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:w?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:w?.refresh?.mainLastRefreshError?.retryCount,expiresInMs:C});return}if(S.refresh&&w?.refresh?.mainRefreshLeaseUntil&&w.refresh.mainRefreshLeaseUntil>Date.now()&&w.refresh.mainRefreshLeaseTokenHash===LD(S.refresh))return;await P();let Z=await N();p("[refresh] opencode main oauth refreshed in background",{newExpiresInMs:Z.expires?Z.expires-Date.now():void 0})}catch(w){c.warn("refresh","opencode main oauth refresh failed",{message:w instanceof Error?w.message:String(w)})}};if(K0=setInterval(()=>{Y()},JW+W_(PW)),"unref"in K0)K0.unref()},B=function(Y,w){if(Y instanceof Request&&Y.body)return!1;return w==null||typeof w==="string"},U=function(Y){if(typeof Y!=="string")return;try{let w=JSON.parse(Y);return typeof w.model==="string"?w.model:void 0}catch{return}},M=function(Y){return Y.has("x-parent-session-id")},g=function(Y){return Y.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(Y)},t=function(Y){return Y?.quota?.enabled===!0},X0=function(Y,w){if(Y.delete("authorization"),Y.delete("x-api-key"),w.authHeader==="x-api-key")Y.set("x-api-key",w.apiKey??"");else Y.set("Authorization",`Bearer ${w.apiKey??""}`);Y.set("Content-Type","application/json")},H0=function(Y){return L.getFallback(Y.id,Y.access)?.quota??Y.quota},RD=function(Y){return["five_hour","seven_day"].some((w)=>(Y?.[w]?.remainingPercent??1)<=0)},YO=function(Y,w){return Y.status===429||w},AD=function(Y){if(!Y)return!1;let w=L.getMain(Y);return Boolean(w&&w.refreshAfter>Date.now()&&RD(w.quota))},I=null;async function P(){if(!I)I=(async()=>{let S=null,C=null,R=null;async function Z(K){let q=await T(O)??V0();q.refresh=q.refresh??{},K(q),await u0(q,O,{mainRefresh:!0})}async function n(K){let q=Date.now()+$W;while(Date.now()<q){await new Promise((H)=>setTimeout(H,O_+W_(O_)));let V=await N();if(V.type!=="oauth"||!V.access)continue;if((V.access!==K.access||V.refresh!==K.refresh||(V.expires??0)>(K.expires??0)+60000)&&(!V.expires||V.expires>Date.now()))return p("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:V.expires?V.expires-Date.now():void 0}),V.access}return null}for(let K=0;K<=2;K++){let q=null;try{if(K>0){let k=500*2**(K-1);await new Promise((u)=>setTimeout(u,k))}if(q=await N(),!q.refresh)throw Error("Token refresh failed: missing refresh token");let V=await T(O),G=LD(q.refresh),H=V?.refresh?.mainLastRefreshError;if(p("[refresh] opencode main oauth refresh check",{attempt:K,expiresInMs:q.expires?q.expires-Date.now():void 0,hasBackoff:Boolean(H),backoffActive:H?x0(H,q.refresh,Date.now()):!1,retryCount:H?.retryCount,nextRetryAt:H?.nextRetryAt}),H&&x0(H,q.refresh,Date.now()))throw p("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:H.nextRetryAt,retryCount:H.retryCount}),Error(pD(H,Date.now()));if(V?.refresh?.mainRefreshLeaseUntil&&V.refresh.mainRefreshLeaseUntil>Date.now()&&V.refresh.mainRefreshLeaseTokenHash===G){p("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:V.refresh.mainRefreshLeaseUntil});let k=await n(q);if(k)return k;throw Error("Claude OAuth refresh is already in progress")}let v=await Y_({name:"opencode-main-oauth-refresh",ttlMs:120000,renew:!0});if(!v){p("[refresh] opencode main oauth refresh skipped file lock");let k=await n(q);if(k)return k;throw Error("Claude OAuth refresh is already in progress")}R=v.release,S=mD(),C=G,await Z((k)=>{k.refresh=k.refresh??{},k.refresh.mainRefreshLeaseId=S??void 0,k.refresh.mainRefreshLeaseUntil=Date.now()+120000,k.refresh.mainRefreshLeaseTokenHash=G});let f=await T(O);if(p("[refresh] opencode main oauth refresh lease acquired",{attempt:K,leaseUntil:Date.now()+120000}),f?.refresh?.mainRefreshLeaseId!==S||f.refresh.mainRefreshLeaseTokenHash!==G)throw Error("Claude OAuth refresh is already in progress");p("[refresh] opencode main oauth refresh request start",{attempt:K});let D0=await J_({refreshToken:q.refresh,maxRetries:0});return await _.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:D0.refresh,access:D0.access,expires:D0.expires}}),await Z((k)=>{if(!k?.refresh)return;if(k.refresh.mainLastRefreshError=void 0,k.refresh.mainRefreshLeaseId===S)k.refresh.mainRefreshLeaseId=void 0,k.refresh.mainRefreshLeaseUntil=void 0,k.refresh.mainRefreshLeaseTokenHash=void 0}),p("[refresh] opencode main oauth refresh succeeded",{attempt:K,expiresInMs:D0.expires-Date.now()}),D0.access}catch(V){let G=V instanceof Error&&(V.message.includes("fetch failed")||("code"in V)&&(V.code==="ECONNRESET"||V.code==="ECONNREFUSED"||V.code==="ETIMEDOUT"||V.code==="UND_ERR_CONNECT_TIMEOUT"));if(K<2&&(G||(()=>{let v=V.status;return typeof v==="number"&&v>=500})()))continue;p("[refresh] opencode main oauth refresh attempt failed",{attempt:K,error:V instanceof Error?V.message:String(V),transient:G});let H=q?.refresh;if(H&&V.isRefreshError)await Z((v)=>{v.refresh=v.refresh??{},v.refresh.mainLastRefreshError=L_({error:V,now:Date.now(),refreshToken:H,previous:v.refresh.mainLastRefreshError})});throw V}finally{if(S)await Z((V)=>{if(!V?.refresh)return;if(V.refresh.mainRefreshLeaseId===S&&V.refresh.mainRefreshLeaseTokenHash===C)V.refresh.mainRefreshLeaseId=void 0,V.refresh.mainRefreshLeaseUntil=void 0,V.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await R?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})().finally(()=>{I=null});return I}o=P,E(),L.seedFallbacksFromAccounts((y?.accounts??[]).filter($0)),W0(y,{activeId:"main",route:"main",mainAccessToken:X.access,mainRefreshToken:X.refresh});async function a(Y,w){if(!Y.body||Y.status!==200)return w?.mark("inspect_stream_skip",{status:Y.status}),{response:Y,rateLimited:!1};if(Y.headers.get("x-cortexkit-relay-optimistic")==="true")return w?.mark("inspect_stream_skip",{status:Y.status,reason:"optimistic_relay"}),{response:Y,rateLimited:!1};let S=x(),C=Y.body.getReader(),R=[],Z=new TextDecoder,n="",K=0;while(!n.includes(`
15
+ `),H=Y>=90?"error":Y>=70?"warning":"info";N.tui?.showToast?.({body:{title:"Claude Quota",message:x,variant:H,duration:H==="error"?8000:5000}})?.catch?.(()=>{})}return{event:async({event:J})=>{let $=J,G=$.properties?.sessionID??$.properties?.info?.id;if(!G)return;if($.type==="session.deleted")Z0.delete(G)},config:async(J)=>{J.command={...J.command??{},[DW]:{template:DW,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[XW]:{template:XW,description:"Manage fallback accounts — list, enable/disable, reorder, remove, or add (API key or OAuth)."},[YW]:{template:YW,description:"Keep hybrid Claude cache warm for recently used sessions during a local time window."},[QW]:{template:QW,description:"Show current Claude OAuth quota usage for all accounts."},[VW]:{template:VW,description:"Show or toggle Anthropic request dump capture for debugging."},[_W]:{template:_W,description:"Show or toggle Anthropic fast mode for supported Opus models."},[wW]:{template:wW,description:"Show or set the plugin log level (error, warn, info, debug, trace)."},[IW]:{template:IW,description:"Show or change Claude account routing between main-first and fallback-first."},[PW]:{template:PW,description:"Manage killswitch — hard-block requests when quota drops below per-account thresholds."}}},"experimental.chat.system.transform":async(J,$)=>{if(!oN(J))return;rN($.system)},provider:{id:"anthropic",async models(J,$){let G=eN(J.models);if($.auth?.type!=="oauth"||!A4(h??{}))return G;return WO(G)}},"command.execute.before":async(J)=>{if(!["claude-account","claude-cache","claude-cachekeep","claude-quota","claude-dump","claude-fast","claude-routing","claude-killswitch","claude-logging"].includes(J.command))return;let G=J.command,w=await LW(G,J.arguments,J.sessionID);if(G==="claude-quota"){let Y=await f(),x=i?await i().catch(()=>{return}):void 0;V0(Y,{activeId:"main",route:"main",mainAccessToken:x?.access,mainRefreshToken:x?.refresh})}if(l1(J.sessionID))qW(w,J.sessionID);else await S4(W,J.sessionID,w.text);nN()},auth:{provider:"anthropic",async loader(J,$){i=J;let G=await J();if(G.type==="oauth"){let x=function(){if(G0)clearInterval(G0),G0=null;let K=async()=>{try{let _=await f(j);if(!g0(_))return;let R=await J();if(R.type!=="oauth")return;if(await S0(R.refresh),!R.expires)return;let k=R.expires-Date.now(),I=d0(_);if(k>I)return;if(r("[refresh] opencode main oauth background due",{expiresInMs:k,refreshBeforeMs:I}),R.refresh&&k0(_?.refresh?.mainLastRefreshError,R.refresh,Date.now())){r("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:_?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:_?.refresh?.mainLastRefreshError?.retryCount,expiresInMs:k});return}if(R.refresh&&_?.refresh?.mainRefreshLeaseUntil&&_.refresh.mainRefreshLeaseUntil>Date.now()&&_.refresh.mainRefreshLeaseTokenHash===x1(R.refresh))return;await Y();let E=await J();r("[refresh] opencode main oauth refreshed in background",{newExpiresInMs:E.expires?E.expires-Date.now():void 0})}catch(_){b.warn("refresh","opencode main oauth refresh failed",{message:_ instanceof Error?_.message:String(_)})}};if(G0=setInterval(()=>{K()},yN+x4(hN)),"unref"in G0)G0.unref()},H=function(K,_){if(K instanceof Request&&K.body)return!1;return _==null||typeof _==="string"},z=function(K){if(typeof K!=="string")return;try{let _=JSON.parse(K);return typeof _.model==="string"?_.model:void 0}catch{return}},F=function(K){return K.has("x-parent-session-id")},c=function(K){return K.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(K)},W0=function(K){return K?.quota?.enabled===!0},K0=function(K,_){if(K.delete("authorization"),K.delete("x-api-key"),_.authHeader==="x-api-key")K.set("x-api-key",_.apiKey??"");else K.set("Authorization",`Bearer ${_.apiKey??""}`);K.set("Content-Type","application/json")},R0=function(K){return C.getFallback(K.id,K.access)?.quota??K.quota},m1=function(K){return["five_hour","seven_day"].some((_)=>(K?.[_]?.remainingPercent??1)<=0)},BW=function(K,_){return K.status===429||_},b1=function(K){if(!K)return!1;let _=C.getMain(K);return Boolean(_&&_.refreshAfter>Date.now()&&m1(_.quota))},w=null;async function Y(){if(!w)w=(async()=>{let R=null,k=null,I=null;async function E(M){let T=await f(j)??Q0();T.refresh=T.refresh??{},M(T),await s0(T,j,{mainRefresh:!0})}async function p(M){let T=Date.now()+mN;while(Date.now()<T){await new Promise((P)=>setTimeout(P,F4+x4(F4)));let Q=await J();if(Q.type!=="oauth"||!Q.access)continue;if((Q.access!==M.access||Q.refresh!==M.refresh||(Q.expires??0)>(M.expires??0)+60000)&&(!Q.expires||Q.expires>Date.now()))return r("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:Q.expires?Q.expires-Date.now():void 0}),Q.access}return null}for(let M=0;M<=2;M++){let T=null;try{if(M>0){let y=500*2**(M-1);await new Promise((a)=>setTimeout(a,y))}if(T=await J(),!T.refresh)throw Error("Token refresh failed: missing refresh token");let Q=await f(j),V=x1(T.refresh),P=Q?.refresh?.mainLastRefreshError;if(r("[refresh] opencode main oauth refresh check",{attempt:M,expiresInMs:T.expires?T.expires-Date.now():void 0,hasBackoff:Boolean(P),backoffActive:P?k0(P,T.refresh,Date.now()):!1,retryCount:P?.retryCount,nextRetryAt:P?.nextRetryAt}),P&&k0(P,T.refresh,Date.now()))throw r("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:P.nextRetryAt,retryCount:P.retryCount}),Error(jW(P,Date.now()));if(Q?.refresh?.mainRefreshLeaseUntil&&Q.refresh.mainRefreshLeaseUntil>Date.now()&&Q.refresh.mainRefreshLeaseTokenHash===V){r("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:Q.refresh.mainRefreshLeaseUntil});let y=await p(T);if(y)return y;throw Error("Claude OAuth refresh is already in progress")}let L=await k4({name:"opencode-main-oauth-refresh",ttlMs:120000,renew:!0});if(!L){r("[refresh] opencode main oauth refresh skipped file lock");let y=await p(T);if(y)return y;throw Error("Claude OAuth refresh is already in progress")}I=L.release,R=e1(),k=V,await E((y)=>{y.refresh=y.refresh??{},y.refresh.mainRefreshLeaseId=R??void 0,y.refresh.mainRefreshLeaseUntil=Date.now()+120000,y.refresh.mainRefreshLeaseTokenHash=V});let m=await f(j);if(r("[refresh] opencode main oauth refresh lease acquired",{attempt:M,leaseUntil:Date.now()+120000}),m?.refresh?.mainRefreshLeaseId!==R||m.refresh.mainRefreshLeaseTokenHash!==V)throw Error("Claude OAuth refresh is already in progress");r("[refresh] opencode main oauth refresh request start",{attempt:M});let B=await f4({refreshToken:T.refresh,maxRetries:0});return await N.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:B.refresh,access:B.access,expires:B.expires}}),await E((y)=>{if(!y?.refresh)return;if(y.refresh.mainLastRefreshError=void 0,y.refresh.mainRefreshLeaseId===R)y.refresh.mainRefreshLeaseId=void 0,y.refresh.mainRefreshLeaseUntil=void 0,y.refresh.mainRefreshLeaseTokenHash=void 0}),r("[refresh] opencode main oauth refresh succeeded",{attempt:M,expiresInMs:B.expires-Date.now()}),B.access}catch(Q){let V=Q instanceof Error&&(Q.message.includes("fetch failed")||("code"in Q)&&(Q.code==="ECONNRESET"||Q.code==="ECONNREFUSED"||Q.code==="ETIMEDOUT"||Q.code==="UND_ERR_CONNECT_TIMEOUT"));if(M<2&&(V||(()=>{let L=Q.status;return typeof L==="number"&&L>=500})()))continue;r("[refresh] opencode main oauth refresh attempt failed",{attempt:M,error:Q instanceof Error?Q.message:String(Q),transient:V});let P=T?.refresh;if(P&&Q.isRefreshError)await E((L)=>{L.refresh=L.refresh??{},L.refresh.mainLastRefreshError=l4({error:Q,now:Date.now(),refreshToken:P,previous:L.refresh.mainLastRefreshError})});throw Q}finally{if(R)await E((Q)=>{if(!Q?.refresh)return;if(Q.refresh.mainRefreshLeaseId===R&&Q.refresh.mainRefreshLeaseTokenHash===k)Q.refresh.mainRefreshLeaseId=void 0,Q.refresh.mainRefreshLeaseUntil=void 0,Q.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await I?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})().finally(()=>{w=null});return w}Y0=Y,x(),C.seedFallbacksFromAccounts((h?.accounts??[]).filter(X0)),V0(h,{activeId:"main",route:"main",mainAccessToken:G.access,mainRefreshToken:G.refresh});async function j0(K,_){if(!K.body||K.status!==200)return _?.mark("inspect_stream_skip",{status:K.status}),{response:K,rateLimited:!1};if(K.headers.get("x-cortexkit-relay-optimistic")==="true")return _?.mark("inspect_stream_skip",{status:K.status,reason:"optimistic_relay"}),{response:K,rateLimited:!1};let R=S(),k=K.body.getReader(),I=[],E=new TextDecoder,p="",M=0;while(!p.includes(`
16
16
 
17
- `)&&n.length<65536){let{done:V,value:G}=await C.read();if(V)break;if(R.push(G),K+=G.byteLength,n+=Z.decode(G,{stream:!0}),g(n))break}if(g(n)){await C.cancel().catch(()=>{});try{C.releaseLock()}catch{}let V=new ReadableStream({start(G){for(let H of R)G.enqueue(H);G.close()}});return w?.mark("inspect_stream_first_event",{ms:m(x()-S),bytes:K,rateLimited:!0}),{response:new Response(V,{status:Y.status,statusText:Y.statusText,headers:Y.headers}),rateLimited:!0}}let q=new ReadableStream({start(V){for(let G of R)V.enqueue(G)},async pull(V){let{done:G,value:H}=await C.read();if(G){V.close();return}V.enqueue(H)},cancel(V){return C.cancel(V)}});return w?.mark("inspect_stream_first_event",{ms:m(x()-S),bytes:K,rateLimited:!1}),{response:new Response(q,{status:Y.status,statusText:Y.statusText,headers:Y.headers}),rateLimited:!1}}async function S0(Y,w,S,C,R="api_fallback",Z){let n=x(),K=yD(Y,w),q=K.get("x-session-affinity")||K.get("x-opencode-session"),V=M(K);K.delete("x-parent-session-id"),K.delete("x-session-affinity"),K.delete("x-opencode-session");let G=w?.body,H=typeof G==="string"?G.length:void 0;if(G&&typeof G==="string"){let k=x(),u=(()=>{if(!FD())return!1;try{return p0(JSON.parse(G).model)}catch{return!1}})();if(G=await gD(G,{cache1hEnabled:!V&&k0(),cache1hMode:y0(),fastModeEnabled:u,perf:(Q,F)=>C?.mark(`rewrite_body_${Q}`,{route:R,...F})}),X0(K,S),K.set("anthropic-beta",i0(K.get("anthropic-beta"),[])),u)YD(K);C?.mark("rewrite_body",{route:R,ms:m(x()-k),originalBytes:H,rewrittenBytes:G.length,cacheEnabled:!V&&k0(),cacheMode:y0(),fastModeEnabled:u,subagent:V})}else X0(K,S);let v=bD(Y,{baseURL:S.baseURL}),f=x(),D0;try{D0=await fetch(v.input,{...w,body:G,headers:K,...hD()&&{tls:{rejectUnauthorized:!1}}})}catch(k){if(typeof G==="string")await s0({affinity:q,route:R,error:N_(k),bodyText:G,url:v.url?.toString()??GD(v.input),method:VD(Y,w),headers:K});throw k}if(typeof G==="string")await s0({affinity:q,route:R,status:D0.status,bodyText:G,url:v.url?.toString()??GD(v.input),method:VD(Y,w),headers:K});return C?.mark("send_headers_received",{route:R,ms:m(x()-f),status:D0.status,relayConfigured:!1,totalSendWithAccessMs:m(x()-n),baseURL:S.baseURL}),D0}async function Q0(Y,w,S,C,R="unknown",Z,n="main"){let K=x(),q=Z,V=async()=>{return q??=await T(O),q},G=yD(Y,w),H=G.get("x-session-affinity")||G.get("x-opencode-session"),v=M(G);G.delete("x-parent-session-id"),G.delete("x-session-affinity"),G.delete("x-opencode-session");let f=w?.body,D0;if(f&&typeof f==="string"){let _0=x();try{let s=JSON.parse(f);if(typeof s.model==="string")D0=s.model}catch{}C?.mark("model_parse_for_identity",{route:R,ms:m(x()-_0),bodyBytes:f.length})}let k=x(),u=await cD(S,D0);C?.mark("resolve_claude_code_identity",{route:R,ms:m(x()-k),hasAccountUuid:Boolean(u.accountUuid)});let Q=typeof f==="string"?f.length:void 0;if(f&&typeof f==="string"){let _0=x(),s=(()=>{if(!FD())return!1;try{return p0(JSON.parse(f).model)}catch{return!1}})();f=await gD(f,{cache1hEnabled:!v&&k0(),cache1hMode:y0(),fastModeEnabled:s,identity:u,perf:(SD,Z1)=>C?.mark(`rewrite_body_${SD}`,{route:R,...Z1})});let w0=x();try{l0(G,S,{body:JSON.parse(f),identity:u}),C?.mark("set_oauth_headers_body_parse",{route:R,ms:m(x()-w0),bodyBytes:f.length,parsed:!0})}catch{l0(G,S,{identity:u}),C?.mark("set_oauth_headers_body_parse",{route:R,ms:m(x()-w0),bodyBytes:f.length,parsed:!1})}if(s)YD(G);C?.mark("rewrite_body",{route:R,ms:m(x()-_0),originalBytes:Q,rewrittenBytes:f.length,cacheEnabled:!v&&k0(),cacheMode:y0(),fastModeEnabled:s,subagent:v})}let F=bD(Y);if(typeof f==="string"&&k0()&&y0()==="hybrid"){let _0=await V();if(!v||I_(_0)){let s=x(),w0=j0.track({sessionId:H,url:F.url?.toString()??F.input.toString(),headers:G,bodyText:f,storage:_0,cacheMode:"hybrid",oauthAccountId:n});C?.mark("cachekeep_track",{session:H,ms:m(x()-s),tracked:w0.tracked,reason:w0.tracked?void 0:w0.reason,bodyBytes:f.length})}}let l=async()=>{try{let _0=await fetch(F.input,{...w,body:f,headers:G,...hD()&&{tls:{rejectUnauthorized:!1}}});if(typeof f==="string")await s0({affinity:H,route:R,status:_0.status,bodyText:f,url:F.url?.toString()??GD(F.input),method:VD(Y,w),headers:G});return _0}catch(_0){if(typeof f==="string")await s0({affinity:H,route:R,error:N_(_0),bodyText:f,url:F.url?.toString()??GD(F.input),method:VD(Y,w),headers:G});throw _0}},P0=JO(await V()),O0=x(),C0=await e_({config:P0,input:F.input,init:w,headers:G,body:f,fallback:l,affinity:H,optimisticResponse:P0?.transport==="websocket"});return C?.mark("send_headers_received",{route:R,ms:m(x()-O0),status:C0.status,relayConfigured:P0!=null,totalSendWithAccessMs:m(x()-K)}),C0}async function X1(Y){if(!Y)return!1;try{return await L.refreshMain(Y),AD(Y)}catch{return!1}}async function ND(Y,w={}){let S=await h.getUsableFallbackAccounts(Y,{modelId:w.modelId}),C=new Map(S.map((Z)=>[Z.id,Z])),R=[];for(let Z of Y?.accounts??[]){if($0(Z)){let n=C.get(Z.id);if(n)R.push(n);continue}if(w.includeApiRoutes===!0&&n0(Z)&&Z.enabled!==!1&&Z.apiKey&&zD(Z.baseURL))R.push(Z)}if(!r0(Y))return R;return R.filter((Z)=>$0(Z)?e0(H0(Z),Y,Z.id,w.modelId):!0)}async function jD(Y,w,S,C,R,Z,n){if(!S.length)return R??null;let K=n?.returnLastOnExhausted??!0;await R?.body?.cancel().catch(()=>{});let q=R??null;for(let[V,G]of S.entries()){let H;if(n0(G)){if(!G.apiKey)continue;H=await S0(Y,w,G,Z,`api_fallback_${V}`,C)}else{let f=G.access;if(!f)continue;H=await Q0(Y,w,f,Z,`fallback_${V}`,C,G.id)}q=H;let v=iD(H.status,C);if(!v){let f=await a(H,Z);H=f.response,q=H,v=f.rateLimited}if(!v){if(await h.markUsed(G),await n?.onSuccess?.(G),$0(G)&&G.access&&L.shouldRefreshOnRequestCount(G0))L.refreshFallback(G.id,G.access).then(()=>n?.onSuccess?.(G)).catch(()=>{});return H}if(V<S.length-1||!K)await H.body?.cancel().catch(()=>{})}return K?q:null}async function Y1(Y,w,S,C,R,Z,n,K,q){if(!B(Y,w?.body))return S;let V=x(),G=Z??await T(O);if(R?.mark("fallback_load_storage",{ms:m(x()-V),cached:!!Z}),!(G?.accounts??[]).some((Q)=>Q.enabled!==!1&&($0(Q)||n0(Q)&&Boolean(Q.apiKey)&&zD(Q.baseURL))))return S;let v=S,f=iD(v.status,G),D0=YO(v,!1);if(!f){let Q=await a(v,R);v=Q.response,f=Q.rateLimited,D0=YO(v,Q.rateLimited)}if(!f)return v;let k=!1;if(C)k=C.some(n0);else if(D0)k=await X1(n);let u=C;if(!u){let Q=x();u=await ND(G,{includeApiRoutes:k,modelId:q}),R?.mark("fallback_get_accounts",{ms:m(x()-Q),accounts:u.length})}if(r0(G)){let Q=u.length;if(u=u.filter((F)=>$0(F)?e0(H0(F),G,F.id,q):!0),u.length<Q)p("[killswitch] filtered fallbacks",{before:Q,after:u.length})}return await jD(Y,w,u,G,v,R,{onSuccess:K})??v}return{apiKey:"",async fetch(Y,w){let S=w?.body,C=KW({bodyBytes:typeof S==="string"?S.length:void 0}),R=x(),Z=await N();if(C.mark("get_auth",{ms:m(x()-R),authType:Z.type,hasAccess:Boolean(Z.access)}),Z.type!=="oauth"){let Q=await fetch(Y,w);return C.done("non_oauth_passthrough",{status:Q.status}),Q}await T0(Z.refresh);let n=x(),K=await T();C.mark("load_storage",{ms:m(x()-n)}),L.updateStorage(K),L.seedMainFromStorage(K,Z.access),L.seedFallbacksFromAccounts((K?.accounts??[]).filter($0));let q=B(Y,w?.body),V=U(w?.body);if(q)G0++;if(q&&Z.access&&(!Z.expires||Z.expires>Date.now()))Y0(K,Z.access);let G=(Q,F)=>W0(K,{activeId:Q,route:F,mainAccessToken:Z.access,mainRefreshToken:Z.refresh}),H;if(q&&fD(K)==="fallback-first")try{let Q=x();H=await ND(K,{includeApiRoutes:AD(Z.access),modelId:V}),C.mark("fallback_first_get_accounts",{ms:m(x()-Q),accounts:H.length});let F=await jD(Y,w,H,K,void 0,C,{returnLastOnExhausted:!1,onSuccess:(l)=>G(l.id,"fallback-first")});if(F)return C.done("return_fallback_first",{status:F.status}),d0(F,{perf:(l,P0)=>C.mark(l,P0)});H=void 0}catch(Q){C.mark("fallback_first_error",{error:Q instanceof Error?Q.message:String(Q)})}if(!Z.access||!Z.expires||Z.expires<Date.now()){let F=(await T())?.refresh?.mainLastRefreshError;if(Z.refresh&&F&&x0(F,Z.refresh,Date.now()))throw p("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:F.nextRetryAt,retryCount:F.retryCount,expiresInMs:Z.expires?Z.expires-Date.now():void 0}),Error(pD(F,Date.now()));p("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(Z.access),expiresInMs:Z.expires?Z.expires-Date.now():void 0,expiredAgoMs:Z.expires&&Z.expires<Date.now()?Date.now()-Z.expires:void 0});let l=x();Z.access=await P(),C.mark("refresh_main_access",{ms:m(x()-l)})}if(!Z.access)throw C.done("missing_access_error"),Error("OAuth access token is missing after refresh");function v(){if(K?.quota?.showToasts!==!0)return;let Q=L.getMain();if(!Q)return;let F=(K?.accounts??[]).filter((O0)=>O0.enabled!==!1&&$0(O0)).map((O0)=>({...O0,quota:L.getFallback(O0.id,O0.access)?.quota??O0.quota})),l=QD(Q.quota,K),P0;if(l)P0="main";else P0=F.find((O0)=>QD(O0.quota,K))?.id??"main";$1(Q.quota,F,P0)}if(q&&t(K))try{let Q=x(),F=L.getMain(Z.access),l=F?.quota;if(!l)l=await L.refreshMain(Z.access),F=L.getMain(Z.access),v();else if(L.needsRefresh(G0))if(RD(l)||lD(l,V))l=await L.refreshMain(Z.access),F=L.getMain(Z.access);else L.refreshMain(Z.access).then(()=>{F0().catch(()=>{}),v()}).catch(()=>{});W0(K,{activeId:"main",route:"main",mainAccessToken:Z.access,mainRefreshToken:Z.refresh});let P0=QD(l,K)&&H_(l,V);if(C.mark("main_quota_for_routing",{ms:m(x()-Q),passes:P0,model:V,modelScopedExhausted:lD(l,V)}),!P0){let O0=x();H=await ND(K,{includeApiRoutes:Boolean(F&&F.refreshAfter>Date.now()&&RD(F.quota)),modelId:V}),C.mark("preselect_fallback_accounts",{ms:m(x()-O0),accounts:H.length});let C0=await jD(Y,w,H,K,void 0,C,{onSuccess:(_0)=>G(_0.id,"fallback")});if(C0)return C.done("return_preselected_fallback",{status:C0.status}),d0(C0,{perf:(_0,s)=>C.mark(_0,s)})}}catch(Q){C.mark("main_quota_for_routing_error",{error:Q instanceof Error?Q.message:String(Q)})}let f=L.getMain(Z.access)?.quota;if(K?.quota?.failClosedOnUnknownQuota&&!f&&L.isBackedOff()){let Q=L.getLastApiError(),F=Q?Q_(Q,Date.now()):"Quota API unavailable";return p("[quota] blocked: quota API backed off (failClosed)",{nextRetryAt:Q?.nextRetryAt,retryCount:Q?.retryCount}),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:F}}),{status:429,headers:{"content-type":"application/json","retry-after":String(Q?.nextRetryAt?Math.max(1,Math.ceil((Q.nextRetryAt-Date.now())/1000)):60)}})}if(r0(K)){if(L.needsRefresh(G0))try{let F=(K?.accounts??[]).filter((l)=>l.enabled!==!1&&$0(l)&&Boolean(l.access));await Promise.all([L.refreshMain(Z.access),L.refreshAllFallbacks(F)])}catch(F){p("[quota] killswitch refresh failed",{error:F instanceof Error?F.message:String(F),backedOff:L.isBackedOff()})}f=L.getMain(Z.access)?.quota}if(r0(K)&&!e0(f,K,void 0,V)){let F=B(Y,w?.body)?await ND(K,{includeApiRoutes:AD(Z.access),modelId:V}):[];if(F.length>0){p("[route] skipping main (killswitch), trying fallbacks");let s=await jD(Y,w,F,K,void 0,C,{onSuccess:(w0)=>G(w0.id,"fallback")});if(s)return C.done("return_killswitch_fallback",{status:s.status}),d0(s,{perf:(w0,SD)=>C.mark(w0,SD)})}let l=Date.now(),P0=(K?.accounts??[]).filter((s)=>s.enabled!==!1&&$0(s)).map((s)=>({...s,quota:H0(s)})),O0=ZW({mainQuota:f,requestModelId:V,storage:K}),C0=x_(f,P0,l,O0.isScopedDriven?O0.modelId:void 0),_0=YW({retryAfterSeconds:C0,...O0.isScopedDriven&&{modelName:O0.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(C0)}})}let D0=await Q0(Y,w,Z.access,C,"main",K),k=!1,u=await Y1(Y,w,D0,H,C,K,Z.access,(Q)=>{k=!0,G(Q.id,"fallback")},V);if(!k)G("main","main");return C.done("return_response",{status:u.status}),d0(u,{perf:(Q,F)=>C.mark(Q,F)})}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let N=await KD("max");return{url:N.url,instructions:"Paste the authorization code here:",method:"code",callback:async(J)=>{return wD(J,N.verifier,N.redirectUri,N.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let N=await KD("console");return{url:N.url,instructions:"Paste the authorization code here:",method:"code",callback:async(J)=>{let X=await wD(J,N.verifier,N.redirectUri,N.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((P)=>P.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}};export{ZW as resolveScopedDrivenBlock,YW as formatKillswitchBlockMessage,lW as AnthropicAuthPlugin};
17
+ `)&&p.length<65536){let{done:Q,value:V}=await k.read();if(Q)break;if(I.push(V),M+=V.byteLength,p+=E.decode(V,{stream:!0}),c(p))break}if(c(p)){await k.cancel().catch(()=>{});try{k.releaseLock()}catch{}let Q=new ReadableStream({start(V){for(let P of I)V.enqueue(P);V.close()}});return _?.mark("inspect_stream_first_event",{ms:o(S()-R),bytes:M,rateLimited:!0}),{response:new Response(Q,{status:K.status,statusText:K.statusText,headers:K.headers}),rateLimited:!0}}let T=new ReadableStream({start(Q){for(let V of I)Q.enqueue(V)},async pull(Q){let{done:V,value:P}=await k.read();if(V){Q.close();return}Q.enqueue(P)},cancel(Q){return k.cancel(Q)}});return _?.mark("inspect_stream_first_event",{ms:o(S()-R),bytes:M,rateLimited:!1}),{response:new Response(T,{status:K.status,statusText:K.statusText,headers:K.headers}),rateLimited:!1}}async function y0(K,_,R,k,I="api_fallback",E,p){if(p?.plan.downgraded)p.warmTarget=void 0,p.opusCacheAnchor=void 0;let M=S(),T=U1(K,_),Q=T.get("x-session-affinity")||T.get("x-opencode-session"),V=F(T);T.delete("x-parent-session-id"),T.delete("x-session-affinity"),T.delete("x-opencode-session");let P=_?.body,L=typeof P==="string"?P.length:void 0;if(P&&typeof P==="string"){let a=S(),e=(()=>{if(!R1())return!1;try{return o0(JSON.parse(P).model)}catch{return!1}})();if(P=await s1(P,{cache1hEnabled:!V&&i0(),cache1hMode:p0(),fastModeEnabled:e,perf:(t,J0)=>k?.mark(`rewrite_body_${t}`,{route:I,...J0})}),K0(T,R),T.set("anthropic-beta",n0(T.get("anthropic-beta"),[])),e)Q1(T);k?.mark("rewrite_body",{route:I,ms:o(S()-a),originalBytes:L,rewrittenBytes:P.length,cacheEnabled:!V&&i0(),cacheMode:p0(),fastModeEnabled:e,subagent:V})}else K0(T,R);let m=r1(K,{baseURL:R.baseURL}),B=S(),y;try{y=await fetch(m.input,{..._,body:P,headers:T,...o1()&&{tls:{rejectUnauthorized:!1}}})}catch(a){if(typeof P==="string")await N1({affinity:Q,route:I,error:E4(a),bodyText:P,url:m.url?.toString()??I1(m.input),method:M1(K,_),headers:T});throw a}if(typeof P==="string")await N1({affinity:Q,route:I,status:y.status,bodyText:P,url:m.url?.toString()??I1(m.input),method:M1(K,_),headers:T});return k?.mark("send_headers_received",{route:I,ms:o(S()-B),status:y.status,relayConfigured:!1,totalSendWithAccessMs:o(S()-M),baseURL:R.baseURL}),y}async function F0(K,_,R,k,I="unknown",E,p="main",M){let T=S(),Q=E,V=async()=>{return Q??=await f(j),Q},P=U1(K,_),L=P.get("x-session-affinity")||P.get("x-opencode-session"),m=F(P);P.delete("x-parent-session-id"),P.delete("x-session-affinity"),P.delete("x-opencode-session");let B=_?.body,y;if(B&&typeof B==="string"){let A=S();try{let N0=JSON.parse(B);if(typeof N0.model==="string")y=N0.model}catch{}k?.mark("model_parse_for_identity",{route:I,ms:o(S()-A),bodyBytes:B.length})}let a=S(),e=await $W(R,y);k?.mark("resolve_claude_code_identity",{route:I,ms:o(S()-a),hasAccountUuid:Boolean(e.accountUuid)});let t=typeof B==="string"?B.length:void 0;if(B&&typeof B==="string"){let A=S(),N0=(()=>{if(!R1())return!1;try{return o0(JSON.parse(B).model)}catch{return!1}})(),n=!m&&i0(),H0=p0(),l0=M?.plan.downgraded&&M.plan.standbyCacheAnchor?.oauthAccountId===p?M.plan.standbyCacheAnchor:void 0;if(B=await s1(B,{cache1hEnabled:n,cache1hMode:H0,fastModeEnabled:N0,identity:e,hybridStandbyAnchor:l0,perf:(A0,i1)=>{if(k?.mark(`rewrite_body_${A0}`,{route:I,...i1}),A0==="cache_strategy"&&i1?.standbyBridgeApplied===!0&&M&&!M.standbyBridgeLogged)M.standbyBridgeLogged=!0,b.info("fable-fallback","restored standby Opus cache bridge",{session:M.plan.sessionId,distanceBlocks:i1?.standbyDistanceBlocks})}}),M?.plan.downgraded&&n&&H0==="hybrid"){let A0=w4(B);M.opusCacheAnchor=A0?{...A0,oauthAccountId:p}:void 0}let _0=S();try{r0(P,R,{body:JSON.parse(B),identity:e}),k?.mark("set_oauth_headers_body_parse",{route:I,ms:o(S()-_0),bodyBytes:B.length,parsed:!0})}catch{r0(P,R,{identity:e}),k?.mark("set_oauth_headers_body_parse",{route:I,ms:o(S()-_0),bodyBytes:B.length,parsed:!1})}if(N0)Q1(P);k?.mark("rewrite_body",{route:I,ms:o(S()-A),originalBytes:t,rewrittenBytes:B.length,cacheEnabled:!m&&i0(),cacheMode:p0(),fastModeEnabled:N0,subagent:m})}let J0=r1(K);if(M&&typeof B==="string")M.warmTarget={url:J0.url?.toString()??J0.input.toString(),headers:new Headers(P),bodyText:B,oauthAccountId:p};if(typeof B==="string"&&i0()&&p0()==="hybrid"){let A=await V();if(!m||p4(A)){let N0=S(),n=P0.track({sessionId:L,url:J0.url?.toString()??J0.input.toString(),headers:P,bodyText:B,storage:A,cacheMode:"hybrid",oauthAccountId:p});k?.mark("cachekeep_track",{session:L,ms:o(S()-N0),tracked:n.tracked,reason:n.tracked?void 0:n.reason,bodyBytes:B.length})}}let K1=async()=>{try{let A=await fetch(J0.input,{..._,body:B,headers:P,...o1()&&{tls:{rejectUnauthorized:!1}}});if(typeof B==="string")await N1({affinity:L,route:I,status:A.status,bodyText:B,url:J0.url?.toString()??I1(J0.input),method:M1(K,_),headers:P});return A}catch(A){if(typeof B==="string")await N1({affinity:L,route:I,error:E4(A),bodyText:B,url:J0.url?.toString()??I1(J0.input),method:M1(K,_),headers:P});throw A}},h0=CW(await V()),g=S(),v=await Bj({config:h0,input:J0.input,init:_,headers:P,body:B,fallback:K1,affinity:L,optimisticResponse:h0?.transport==="websocket"});return k?.mark("send_headers_received",{route:I,ms:o(S()-g),status:v.status,relayConfigured:h0!=null,totalSendWithAccessMs:o(S()-T)}),v}async function gj(K){if(!K)return!1;try{return await C.refreshMain(K),b1(K)}catch{return!1}}async function X1(K,_={}){let R=await s.getUsableFallbackAccounts(K,{modelId:_.modelId}),k=new Map(R.map((E)=>[E.id,E])),I=[];for(let E of K?.accounts??[]){if(X0(E)){let p=k.get(E.id);if(p)I.push(p);continue}if(_.includeApiRoutes===!0&&t0(E)&&E.enabled!==!1&&E.apiKey&&B1(E.baseURL))I.push(E)}if(!W1(K))return I;return I.filter((E)=>X0(E)?J1(R0(E),K,E.id,_.modelId):!0)}async function V1(K,_,R,k,I,E,p){if(!R.length)return I??null;let M=p?.returnLastOnExhausted??!0;await I?.body?.cancel().catch(()=>{});let T=I??null;for(let[Q,V]of R.entries()){let P;if(t0(V)){if(!V.apiKey)continue;P=await y0(K,_,V,E,`api_fallback_${Q}`,k,p?.fableRequest)}else{let m=V.access;if(!m)continue;P=await F0(K,_,m,E,`fallback_${Q}`,k,V.id,p?.fableRequest)}T=P;let L=WW(P.status,k);if(!L){let m=await j0(P,E);P=m.response,T=P,L=m.rateLimited}if(!L){if(await s.markUsed(V),await p?.onSuccess?.(V),X0(V)&&V.access&&C.shouldRefreshOnRequestCount(M0))C.refreshFallback(V.id,V.access).then(()=>p?.onSuccess?.(V)).catch(()=>{});return P}if(Q<R.length-1||!M)await P.body?.cancel().catch(()=>{})}return M?T:null}async function yj(K,_,R,k,I,E,p,M,T,Q){if(!H(K,_?.body))return R;let V=S(),P=E??await f(j);if(I?.mark("fallback_load_storage",{ms:o(S()-V),cached:!!E}),!(P?.accounts??[]).some((t)=>t.enabled!==!1&&(X0(t)||t0(t)&&Boolean(t.apiKey)&&B1(t.baseURL))))return R;let m=R,B=WW(m.status,P),y=BW(m,!1);if(!B){let t=await j0(m,I);m=t.response,B=t.rateLimited,y=BW(m,t.rateLimited)}if(!B)return m;let a=!1;if(k)a=k.some(t0);else if(y)a=await gj(p);let e=k;if(!e){let t=S();e=await X1(P,{includeApiRoutes:a,modelId:T}),I?.mark("fallback_get_accounts",{ms:o(S()-t),accounts:e.length})}if(W1(P)){let t=e.length;if(e=e.filter((J0)=>X0(J0)?J1(R0(J0),P,J0.id,T):!0),e.length<t)r("[killswitch] filtered fallbacks",{before:t,after:e.length})}return await V1(K,_,e,P,m,I,{onSuccess:M,fableRequest:Q})??m}return{apiKey:"",async fetch(K,_){let R=U1(K,_),k=R.get("x-session-affinity")||R.get("x-opencode-session"),I=d.plan(k,_?.body);if(I&&!I.downgraded){let g=O0.get(I.sessionId);if(g)await g,I=d.plan(k,_?.body)}let E=I?{plan:I}:void 0;if(I?.downgraded)_={..._,body:I.bodyText};let p=_?.body,M=uN({bodyBytes:typeof p==="string"?p.length:void 0}),T=(g)=>M4(g,{perf:(v,A)=>M.mark(v,A),...!I?.downgraded&&I?{onContentFilter:()=>{if(!E?.warmTarget)return b.debug("fable-fallback","content filter recovery unavailable for non-OAuth route",{session:I.sessionId}),!1;let v=d.activate(I,E.warmTarget.oauthAccountId);b.info("fable-fallback","content filter detected; switching session to Opus 4.8",{session:I.sessionId,remaining:v}),v0({sessionId:I.sessionId,mode:"opus",remaining:v},L,V,sN)}}:{},...I?.downgraded&&E?{onComplete:(v)=>{let A=d.complete(I,E.opusCacheAnchor);if(!A.counted)return;b.info("fable-fallback","Opus 4.8 turn completed",{session:I.sessionId,finishReason:v,remaining:A.remaining}),v0({sessionId:I.sessionId,mode:"opus",remaining:A.remaining},L,V);let N0=B0(E);if(A.remaining===0){let n=()=>{if(d.remaining(I.sessionId)!==0)return;v0({sessionId:I.sessionId,mode:"fable",remaining:0},L,V,aN)};N0.then(n,n)}}}:{}}),Q=S(),V=await J();if(M.mark("get_auth",{ms:o(S()-Q),authType:V.type,hasAccess:Boolean(V.access)}),V.type!=="oauth"){let g=await fetch(K,_);return M.done("non_oauth_passthrough",{status:g.status}),g}await S0(V.refresh);let P=S(),L=await f();if(M.mark("load_storage",{ms:o(S()-P)}),C.updateStorage(L),C.seedMainFromStorage(L,V.access),C.seedFallbacksFromAccounts((L?.accounts??[]).filter(X0)),!I)$1(k,L,V);let m=H(K,_?.body),B=z(_?.body);if(m)M0++;if(m&&V.access&&(!V.expires||V.expires>Date.now()))g1(L,V.access);let y=(g,v)=>V0(L,{activeId:g,route:v,mainAccessToken:V.access,mainRefreshToken:V.refresh}),a;if(m&&q1(L)==="fallback-first")try{let g=S();a=await X1(L,{includeApiRoutes:b1(V.access),modelId:B}),M.mark("fallback_first_get_accounts",{ms:o(S()-g),accounts:a.length});let v=await V1(K,_,a,L,void 0,M,{returnLastOnExhausted:!1,onSuccess:(A)=>y(A.id,"fallback-first"),fableRequest:E});if(v)return M.done("return_fallback_first",{status:v.status}),T(v);a=void 0}catch(g){M.mark("fallback_first_error",{error:g instanceof Error?g.message:String(g)})}if(!V.access||!V.expires||V.expires<Date.now()){let v=(await f())?.refresh?.mainLastRefreshError;if(V.refresh&&v&&k0(v,V.refresh,Date.now()))throw r("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:v.nextRetryAt,retryCount:v.retryCount,expiresInMs:V.expires?V.expires-Date.now():void 0}),Error(jW(v,Date.now()));r("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(V.access),expiresInMs:V.expires?V.expires-Date.now():void 0,expiredAgoMs:V.expires&&V.expires<Date.now()?Date.now()-V.expires:void 0});let A=S();V.access=await Y(),M.mark("refresh_main_access",{ms:o(S()-A)})}if(!V.access)throw M.done("missing_access_error"),Error("OAuth access token is missing after refresh");function e(){if(L?.quota?.showToasts!==!0)return;let g=C.getMain();if(!g)return;let v=(L?.accounts??[]).filter((n)=>n.enabled!==!1&&X0(n)).map((n)=>({...n,quota:C.getFallback(n.id,n.access)?.quota??n.quota})),A=S1(g.quota,L),N0;if(A)N0="main";else N0=v.find((n)=>S1(n.quota,L))?.id??"main";kj(g.quota,v,N0)}if(m&&W0(L))try{let g=S(),v=C.getMain(V.access),A=v?.quota;if(!A)A=await C.refreshMain(V.access),v=C.getMain(V.access),e();else if(C.needsRefresh(M0))if(m1(A)||NW(A,B))A=await C.refreshMain(V.access),v=C.getMain(V.access);else C.refreshMain(V.access).then(()=>{w0().catch(()=>{}),e()}).catch(()=>{});V0(L,{activeId:"main",route:"main",mainAccessToken:V.access,mainRefreshToken:V.refresh});let N0=S1(A,L)&&t4(A,B);if(M.mark("main_quota_for_routing",{ms:o(S()-g),passes:N0,model:B,modelScopedExhausted:NW(A,B)}),!N0){let n=S();a=await X1(L,{includeApiRoutes:Boolean(v&&v.refreshAfter>Date.now()&&m1(v.quota)),modelId:B}),M.mark("preselect_fallback_accounts",{ms:o(S()-n),accounts:a.length});let H0=await V1(K,_,a,L,void 0,M,{onSuccess:(l0)=>y(l0.id,"fallback"),fableRequest:E});if(H0)return M.done("return_preselected_fallback",{status:H0.status}),T(H0)}}catch(g){M.mark("main_quota_for_routing_error",{error:g instanceof Error?g.message:String(g)})}let t=C.getMain(V.access)?.quota;if(L?.quota?.failClosedOnUnknownQuota&&!t&&C.isBackedOff()){let g=C.getLastApiError(),v=g?c4(g,Date.now()):"Quota API unavailable";return r("[quota] blocked: quota API backed off (failClosed)",{nextRetryAt:g?.nextRetryAt,retryCount:g?.retryCount}),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:v}}),{status:429,headers:{"content-type":"application/json","retry-after":String(g?.nextRetryAt?Math.max(1,Math.ceil((g.nextRetryAt-Date.now())/1000)):60)}})}if(W1(L)){if(C.needsRefresh(M0))try{let v=(L?.accounts??[]).filter((A)=>A.enabled!==!1&&X0(A)&&Boolean(A.access));await Promise.all([C.refreshMain(V.access),C.refreshAllFallbacks(v)])}catch(v){r("[quota] killswitch refresh failed",{error:v instanceof Error?v.message:String(v),backedOff:C.isBackedOff()})}t=C.getMain(V.access)?.quota}if(W1(L)&&!J1(t,L,void 0,B)){let v=H(K,_?.body)?await X1(L,{includeApiRoutes:b1(V.access),modelId:B}):[];if(v.length>0){r("[route] skipping main (killswitch), trying fallbacks");let _0=await V1(K,_,v,L,void 0,M,{onSuccess:(A0)=>y(A0.id,"fallback")});if(_0)return M.done("return_killswitch_fallback",{status:_0.status}),T(_0)}let A=Date.now(),N0=(L?.accounts??[]).filter((_0)=>_0.enabled!==!1&&X0(_0)).map((_0)=>({..._0,quota:R0(_0)})),n=pN({mainQuota:t,requestModelId:B,storage:L}),H0=a4(t,N0,A,n.isScopedDriven?n.modelId:void 0),l0=iN({retryAfterSeconds:H0,...n.isScopedDriven&&{modelName:n.modelName}});return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:l0}}),{status:429,headers:{"content-type":"application/json","retry-after":String(H0)}})}let J0=await F0(K,_,V.access,M,"main",L,"main",E),K1=!1,h0=await yj(K,_,J0,a,M,L,V.access,(g)=>{K1=!0,y(g.id,"fallback")},B,E);if(!K1)y("main","main");return M.done("return_response",{status:h0.status}),T(h0)}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let J=await L1("max");return{url:J.url,instructions:"Paste the authorization code here:",method:"code",callback:async($)=>{return H1($,J.verifier,J.redirectUri,J.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let J=await L1("console");return{url:J.url,instructions:"Paste the authorization code here:",method:"code",callback:async($)=>{let G=await H1($,J.verifier,J.redirectUri,J.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((Y)=>Y.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}};export{pN as resolveScopedDrivenBlock,iN as formatKillswitchBlockMessage,TO as AnthropicAuthPlugin};
@@ -1 +1 @@
1
- import{Ab as k,Bb as l,Cb as m,qb as a,rb as b,sb as c,tb as d,ub as e,vb as f,wb as g,xb as h,yb as i,zb as j}from"./index-se4sd5kz.js";import"./index-1gc9eney.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{Ab as j,Bb as k,Cb as l,Db as m,rb as a,sb as b,tb as c,ub as d,vb as e,wb as f,xb as g,yb as h,zb as i}from"./index-6gdd6e4s.js";import"./index-qsaph2g4.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};
@@ -4,8 +4,9 @@
4
4
  * OpenCode records even ignored/noReply prompt messages as user messages. If a
5
5
  * plugin sends one without the previous model/variant, OpenCode's next prompt
6
6
  * can inherit the synthetic message's default model/variant and change usage or
7
- * cache attribution. Resolve the most recent assistant context and pass it
8
- * through on hidden command replies.
7
+ * cache attribution. Resolve the most recent assistant context and message IDs
8
+ * so hidden replies preserve model state and active-run notifications can be
9
+ * ordered before the assistant without becoming pending user work.
9
10
  */
10
11
  export interface ResolvedPromptContext {
11
12
  agent?: string;
@@ -14,5 +15,7 @@ export interface ResolvedPromptContext {
14
15
  modelID: string;
15
16
  };
16
17
  variant?: string;
18
+ latestAssistantMessageId?: string;
19
+ latestUserMessageId?: string;
17
20
  }
18
21
  export declare function resolvePromptContext(client: unknown, sessionId: string): Promise<ResolvedPromptContext | null>;
@@ -1 +1 @@
1
- import{Pb as a,Qb as b}from"../index-ha0gz07d.js";import"../index-1gc9eney.js";export{a as writePortFile,b as discoverPortFile};
1
+ import{Rb as a,Sb as b}from"../index-jkbar3k3.js";import"../index-qsaph2g4.js";export{a as writePortFile,b as discoverPortFile};
@@ -1 +1 @@
1
- import{Qb as l}from"../index-ha0gz07d.js";import"../index-1gc9eney.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{Sb as l}from"../index-jkbar3k3.js";import"../index-qsaph2g4.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{Rb as a,Sb as b}from"../index-97vmbv5w.js";import"../index-1gc9eney.js";export{a as tmpdir,b as getRpcDir};
1
+ import{Tb as a,Ub as b}from"../index-qejbx8c9.js";import"../index-qsaph2g4.js";export{a as tmpdir,b as getRpcDir};
@@ -21,6 +21,12 @@ export interface SidebarAccountState {
21
21
  enabled: boolean;
22
22
  needsReauth: boolean;
23
23
  }
24
+ export interface FableRecoverySidebarState {
25
+ sessionId: string;
26
+ mode: 'opus' | 'fable';
27
+ remaining: number;
28
+ changedAt: number;
29
+ }
24
30
  export interface SidebarState {
25
31
  main: {
26
32
  quota: AccountQuota | null;
@@ -42,6 +48,7 @@ export interface SidebarState {
42
48
  window?: string;
43
49
  trackedSessions?: number;
44
50
  };
51
+ fableRecoveries?: FableRecoverySidebarState[];
45
52
  lastUpdated: number;
46
53
  }
47
54
  export declare function getSidebarStateFile(): string;
@@ -56,6 +63,7 @@ export declare function resolveActiveAccount(state: SidebarState): {
56
63
  quota: AccountQuota | null;
57
64
  };
58
65
  export declare function formatScopedQuotaLabel(title: string): string;
66
+ export declare function getFableRecoverySummary(state: SidebarState, sessionId: string): string | undefined;
59
67
  export declare function getCollapsedQuotaSummary(quota: AccountQuota | null): {
60
68
  fiveHourUsedPercent: number | null;
61
69
  sevenDayUsedPercent: number | null;
@@ -1 +1 @@
1
- import{Db as a,Eb as b,Fb as c,Gb as d,Hb as e,Ib as f,Jb as g,Kb as h,Lb as i,Mb as j,Nb as k,Ob as l}from"./index-8meqn6xw.js";import"./index-1gc9eney.js";export{e as setSidebarState,g as resolveActiveAccount,c as normalizeSidebarState,a as getSidebarStateFile,d as getSidebarState,i as getCollapsedQuotaSummary,h as formatScopedQuotaLabel,f as drainSidebarWrites,l as computeQuotaPacing,k as SEVEN_DAY_MS,j as FIVE_HOUR_MS,b as DEFAULT_SIDEBAR_STATE};
1
+ import{Eb as a,Fb as b,Gb as c,Hb as d,Ib as e,Jb as f,Kb as g,Lb as h,Mb as i,Nb as j,Ob as k,Pb as l,Qb as m}from"./index-bxs26mw4.js";import"./index-qsaph2g4.js";export{e as setSidebarState,g as resolveActiveAccount,c as normalizeSidebarState,a as getSidebarStateFile,d as getSidebarState,i as getFableRecoverySummary,j as getCollapsedQuotaSummary,h as formatScopedQuotaLabel,f as drainSidebarWrites,m as computeQuotaPacing,l as SEVEN_DAY_MS,k as FIVE_HOUR_MS,b as DEFAULT_SIDEBAR_STATE};
@@ -60,6 +60,19 @@ type SystemBlock = {
60
60
  * Handles all Anthropic API system formats: undefined, string, or array of text blocks.
61
61
  */
62
62
  export declare function prependClaudeCodeIdentity(system: unknown): SystemBlock[];
63
+ export type HybridMessageCacheAnchor = {
64
+ fingerprint: string;
65
+ messageIndex: number;
66
+ messageCount: number;
67
+ };
68
+ export declare function extractLatestHybridMessageCacheAnchor(bodyText: string): HybridMessageCacheAnchor | undefined;
69
+ export declare function prepareFableCacheWarmSource(bodyText: string, fableModel?: string): {
70
+ ok: true;
71
+ bodyText: string;
72
+ } | {
73
+ ok: false;
74
+ reason: string;
75
+ };
63
76
  /**
64
77
  * Rewrite the full request body: sanitize system prompt and prefix tool names.
65
78
  */
@@ -70,11 +83,14 @@ export declare function rewriteRequestBody(body: string, options?: {
70
83
  fastModeEnabled?: boolean;
71
84
  identity?: ClaudeCodeIdentity;
72
85
  perf?: RewritePerfCallback;
86
+ hybridStandbyAnchor?: HybridMessageCacheAnchor;
73
87
  }): Promise<string>;
74
88
  /**
75
89
  * Create a streaming response that strips the tool prefix from tool names.
76
90
  */
77
91
  export declare function createStrippedStream(response: Response, options?: {
78
92
  perf?: RewritePerfCallback;
93
+ onContentFilter?: () => boolean | undefined;
94
+ onComplete?: (finishReason: string) => void;
79
95
  }): Response;
80
96
  export {};
@@ -1,4 +1,4 @@
1
- import{Tb as c,Ub as C,Vb as h}from"./index-1gc9eney.js";var m=C((v,k)=>{(function(Q){if(typeof k==="object"&&typeof k.exports==="object"){var J=Q(h,v);if(J!==void 0)k.exports=J}else if(typeof define==="function"&&define.amd)define(["require","exports","./impl/format","./impl/edit","./impl/scanner","./impl/parser"],Q)})(function(Q,J){Object.defineProperty(J,"__esModule",{value:!0}),J.applyEdits=J.modify=J.format=J.printParseErrorCode=J.ParseErrorCode=J.stripComments=J.visit=J.getNodeValue=J.getNodePath=J.findNodeAtOffset=J.findNodeAtLocation=J.parseTree=J.parse=J.getLocation=J.SyntaxKind=J.ScanError=J.createScanner=void 0;let X=Q("./impl/format"),Z=Q("./impl/edit"),$=Q("./impl/scanner"),G=Q("./impl/parser");J.createScanner=$.createScanner;var V;(function(z){z[z.None=0]="None",z[z.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",z[z.UnexpectedEndOfString=2]="UnexpectedEndOfString",z[z.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",z[z.InvalidUnicode=4]="InvalidUnicode",z[z.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",z[z.InvalidCharacter=6]="InvalidCharacter"})(V||(J.ScanError=V={}));var Y;(function(z){z[z.OpenBraceToken=1]="OpenBraceToken",z[z.CloseBraceToken=2]="CloseBraceToken",z[z.OpenBracketToken=3]="OpenBracketToken",z[z.CloseBracketToken=4]="CloseBracketToken",z[z.CommaToken=5]="CommaToken",z[z.ColonToken=6]="ColonToken",z[z.NullKeyword=7]="NullKeyword",z[z.TrueKeyword=8]="TrueKeyword",z[z.FalseKeyword=9]="FalseKeyword",z[z.StringLiteral=10]="StringLiteral",z[z.NumericLiteral=11]="NumericLiteral",z[z.LineCommentTrivia=12]="LineCommentTrivia",z[z.BlockCommentTrivia=13]="BlockCommentTrivia",z[z.LineBreakTrivia=14]="LineBreakTrivia",z[z.Trivia=15]="Trivia",z[z.Unknown=16]="Unknown",z[z.EOF=17]="EOF"})(Y||(J.SyntaxKind=Y={})),J.getLocation=G.getLocation,J.parse=G.parse,J.parseTree=G.parseTree,J.findNodeAtLocation=G.findNodeAtLocation,J.findNodeAtOffset=G.findNodeAtOffset,J.getNodePath=G.getNodePath,J.getNodeValue=G.getNodeValue,J.visit=G.visit,J.stripComments=G.stripComments;var L;(function(z){z[z.InvalidSymbol=1]="InvalidSymbol",z[z.InvalidNumberFormat=2]="InvalidNumberFormat",z[z.PropertyNameExpected=3]="PropertyNameExpected",z[z.ValueExpected=4]="ValueExpected",z[z.ColonExpected=5]="ColonExpected",z[z.CommaExpected=6]="CommaExpected",z[z.CloseBraceExpected=7]="CloseBraceExpected",z[z.CloseBracketExpected=8]="CloseBracketExpected",z[z.EndOfFileExpected=9]="EndOfFileExpected",z[z.InvalidCommentToken=10]="InvalidCommentToken",z[z.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",z[z.UnexpectedEndOfString=12]="UnexpectedEndOfString",z[z.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",z[z.InvalidUnicode=14]="InvalidUnicode",z[z.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",z[z.InvalidCharacter=16]="InvalidCharacter"})(L||(J.ParseErrorCode=L={}));function B(z){switch(z){case 1:return"InvalidSymbol";case 2:return"InvalidNumberFormat";case 3:return"PropertyNameExpected";case 4:return"ValueExpected";case 5:return"ColonExpected";case 6:return"CommaExpected";case 7:return"CloseBraceExpected";case 8:return"CloseBracketExpected";case 9:return"EndOfFileExpected";case 10:return"InvalidCommentToken";case 11:return"UnexpectedEndOfComment";case 12:return"UnexpectedEndOfString";case 13:return"UnexpectedEndOfNumber";case 14:return"InvalidUnicode";case 15:return"InvalidEscapeCharacter";case 16:return"InvalidCharacter"}return"<unknown ParseErrorCode>"}J.printParseErrorCode=B;function j(z,H,N){return X.format(z,H,N)}J.format=j;function A(z,H,N,R){return Z.setProperty(z,H,N,R)}J.modify=A;function O(z,H){let N=H.slice(0).sort((U,D)=>{let T=U.offset-D.offset;if(T===0)return U.length-D.length;return T}),R=z.length;for(let U=N.length-1;U>=0;U--){let D=N[U];if(D.offset+D.length<=R)z=Z.applyEdit(z,D);else throw Error("Overlapping edit");R=D.offset}return z}J.applyEdits=O})});var q=c(m(),1);import{watch as y}from"node:fs";import{mkdir as S,readFile as w,rename as E,writeFile as p}from"node:fs/promises";import{homedir as l}from"node:os";import{basename as x,dirname as P,join as _}from"node:path";import{clearTimeout as F,setTimeout as f}from"node:timers";var i="OPENCODE_TUI_PREFERENCES_FILE",s="tui-preferences.jsonc";function b(){let Q=process.env[i];if(Q)return Q;let J=process.env.OPENCODE_CONFIG_DIR||_(process.env.XDG_CONFIG_HOME||_(l(),".config"),"opencode");return _(J,s)}function I(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}async function Vz(){try{let Q=await w(b(),"utf8"),J=[],X=q.parse(Q,J,{allowTrailingComma:!0});if(J.length>0)return{};return I(X)?X:{}}catch{return{}}}var d="anthropic-auth",n=160,u={forceToTop:!1,order:n,startCollapsed:!1,rememberCollapsed:!0,collapsed:null,pollMs:1500,refreshDebounceMs:200,header:{label:"CLAUDE",showVersion:!0},sections:{quota:!0,fallbackAccounts:!0,routing:!0,cache:!0,health:!0,pacing:!0},appearance:{barWidth:10,barFilledChar:"█",barEmptyChar:"░",warnThreshold:50,errorThreshold:80}};function W(Q,J){return typeof Q==="boolean"?Q:J}function M(Q,J,X,Z){if(typeof Q!=="number"||!Number.isFinite(Q))return J;return Math.min(Math.max(Math.round(Q),X),Z)}function a(Q,J,X){if(typeof Q!=="string"||Q.length===0)return J;return Q.slice(0,X)}function K(Q,J){if(typeof Q!=="string")return J;return[...Q][0]??J}function Yz(Q){let J=Q[d];if(!I(J))return structuredClone(u);let X=u,Z=I(J.header)?J.header:{},$=I(J.sections)?J.sections:{},G=I(J.appearance)?J.appearance:{},V=M(G.warnThreshold,X.appearance.warnThreshold,0,99),Y=Math.max(M(G.errorThreshold,X.appearance.errorThreshold,0,100),Math.min(V+1,100));return{forceToTop:W(J.forceToTop,X.forceToTop),order:M(J.order,X.order,-1e4,1e4),startCollapsed:W(J.startCollapsed,X.startCollapsed),rememberCollapsed:W(J.rememberCollapsed,X.rememberCollapsed),collapsed:typeof J.collapsed==="boolean"?J.collapsed:null,pollMs:M(J.pollMs,X.pollMs,500,30000),refreshDebounceMs:M(J.refreshDebounceMs,X.refreshDebounceMs,50,5000),header:{label:a(Z.label,X.header.label,20),showVersion:W(Z.showVersion,X.header.showVersion)},sections:{quota:W($.quota,X.sections.quota),fallbackAccounts:W($.fallbackAccounts,X.sections.fallbackAccounts),routing:W($.routing,X.sections.routing),cache:W($.cache,X.sections.cache),health:W($.health,X.sections.health),pacing:W($.pacing,X.sections.pacing)},appearance:{barWidth:M(G.barWidth,X.appearance.barWidth,4,40),barFilledChar:K(G.barFilledChar,X.appearance.barFilledChar),barEmptyChar:K(G.barEmptyChar,X.appearance.barEmptyChar),warnThreshold:V,errorThreshold:Y}}}var t=-1e5;function Hz(Q,J,X){let Z=Q[J];if(!I(Z))return X;if(Z.forceToTop===!0)return t+Object.keys(Q).indexOf(J);return M(Z.order,X,-1e4,1e4)}var o=`// Shared preferences for opencode TUI plugins.
1
+ import{Vb as c,Wb as C,Xb as h}from"./index-qsaph2g4.js";var m=C((v,k)=>{(function(Q){if(typeof k==="object"&&typeof k.exports==="object"){var J=Q(h,v);if(J!==void 0)k.exports=J}else if(typeof define==="function"&&define.amd)define(["require","exports","./impl/format","./impl/edit","./impl/scanner","./impl/parser"],Q)})(function(Q,J){Object.defineProperty(J,"__esModule",{value:!0}),J.applyEdits=J.modify=J.format=J.printParseErrorCode=J.ParseErrorCode=J.stripComments=J.visit=J.getNodeValue=J.getNodePath=J.findNodeAtOffset=J.findNodeAtLocation=J.parseTree=J.parse=J.getLocation=J.SyntaxKind=J.ScanError=J.createScanner=void 0;let X=Q("./impl/format"),Z=Q("./impl/edit"),$=Q("./impl/scanner"),G=Q("./impl/parser");J.createScanner=$.createScanner;var V;(function(z){z[z.None=0]="None",z[z.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",z[z.UnexpectedEndOfString=2]="UnexpectedEndOfString",z[z.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",z[z.InvalidUnicode=4]="InvalidUnicode",z[z.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",z[z.InvalidCharacter=6]="InvalidCharacter"})(V||(J.ScanError=V={}));var Y;(function(z){z[z.OpenBraceToken=1]="OpenBraceToken",z[z.CloseBraceToken=2]="CloseBraceToken",z[z.OpenBracketToken=3]="OpenBracketToken",z[z.CloseBracketToken=4]="CloseBracketToken",z[z.CommaToken=5]="CommaToken",z[z.ColonToken=6]="ColonToken",z[z.NullKeyword=7]="NullKeyword",z[z.TrueKeyword=8]="TrueKeyword",z[z.FalseKeyword=9]="FalseKeyword",z[z.StringLiteral=10]="StringLiteral",z[z.NumericLiteral=11]="NumericLiteral",z[z.LineCommentTrivia=12]="LineCommentTrivia",z[z.BlockCommentTrivia=13]="BlockCommentTrivia",z[z.LineBreakTrivia=14]="LineBreakTrivia",z[z.Trivia=15]="Trivia",z[z.Unknown=16]="Unknown",z[z.EOF=17]="EOF"})(Y||(J.SyntaxKind=Y={})),J.getLocation=G.getLocation,J.parse=G.parse,J.parseTree=G.parseTree,J.findNodeAtLocation=G.findNodeAtLocation,J.findNodeAtOffset=G.findNodeAtOffset,J.getNodePath=G.getNodePath,J.getNodeValue=G.getNodeValue,J.visit=G.visit,J.stripComments=G.stripComments;var L;(function(z){z[z.InvalidSymbol=1]="InvalidSymbol",z[z.InvalidNumberFormat=2]="InvalidNumberFormat",z[z.PropertyNameExpected=3]="PropertyNameExpected",z[z.ValueExpected=4]="ValueExpected",z[z.ColonExpected=5]="ColonExpected",z[z.CommaExpected=6]="CommaExpected",z[z.CloseBraceExpected=7]="CloseBraceExpected",z[z.CloseBracketExpected=8]="CloseBracketExpected",z[z.EndOfFileExpected=9]="EndOfFileExpected",z[z.InvalidCommentToken=10]="InvalidCommentToken",z[z.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",z[z.UnexpectedEndOfString=12]="UnexpectedEndOfString",z[z.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",z[z.InvalidUnicode=14]="InvalidUnicode",z[z.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",z[z.InvalidCharacter=16]="InvalidCharacter"})(L||(J.ParseErrorCode=L={}));function B(z){switch(z){case 1:return"InvalidSymbol";case 2:return"InvalidNumberFormat";case 3:return"PropertyNameExpected";case 4:return"ValueExpected";case 5:return"ColonExpected";case 6:return"CommaExpected";case 7:return"CloseBraceExpected";case 8:return"CloseBracketExpected";case 9:return"EndOfFileExpected";case 10:return"InvalidCommentToken";case 11:return"UnexpectedEndOfComment";case 12:return"UnexpectedEndOfString";case 13:return"UnexpectedEndOfNumber";case 14:return"InvalidUnicode";case 15:return"InvalidEscapeCharacter";case 16:return"InvalidCharacter"}return"<unknown ParseErrorCode>"}J.printParseErrorCode=B;function j(z,H,N){return X.format(z,H,N)}J.format=j;function A(z,H,N,R){return Z.setProperty(z,H,N,R)}J.modify=A;function O(z,H){let N=H.slice(0).sort((U,D)=>{let T=U.offset-D.offset;if(T===0)return U.length-D.length;return T}),R=z.length;for(let U=N.length-1;U>=0;U--){let D=N[U];if(D.offset+D.length<=R)z=Z.applyEdit(z,D);else throw Error("Overlapping edit");R=D.offset}return z}J.applyEdits=O})});var q=c(m(),1);import{watch as y}from"node:fs";import{mkdir as S,readFile as w,rename as E,writeFile as p}from"node:fs/promises";import{homedir as l}from"node:os";import{basename as x,dirname as P,join as _}from"node:path";import{clearTimeout as F,setTimeout as f}from"node:timers";var i="OPENCODE_TUI_PREFERENCES_FILE",s="tui-preferences.jsonc";function b(){let Q=process.env[i];if(Q)return Q;let J=process.env.OPENCODE_CONFIG_DIR||_(process.env.XDG_CONFIG_HOME||_(l(),".config"),"opencode");return _(J,s)}function I(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}async function Vz(){try{let Q=await w(b(),"utf8"),J=[],X=q.parse(Q,J,{allowTrailingComma:!0});if(J.length>0)return{};return I(X)?X:{}}catch{return{}}}var d="anthropic-auth",n=160,u={forceToTop:!1,order:n,startCollapsed:!1,rememberCollapsed:!0,collapsed:null,pollMs:1500,refreshDebounceMs:200,header:{label:"CLAUDE",showVersion:!0},sections:{quota:!0,fallbackAccounts:!0,routing:!0,cache:!0,health:!0,pacing:!0},appearance:{barWidth:10,barFilledChar:"█",barEmptyChar:"░",warnThreshold:50,errorThreshold:80}};function W(Q,J){return typeof Q==="boolean"?Q:J}function M(Q,J,X,Z){if(typeof Q!=="number"||!Number.isFinite(Q))return J;return Math.min(Math.max(Math.round(Q),X),Z)}function a(Q,J,X){if(typeof Q!=="string"||Q.length===0)return J;return Q.slice(0,X)}function K(Q,J){if(typeof Q!=="string")return J;return[...Q][0]??J}function Yz(Q){let J=Q[d];if(!I(J))return structuredClone(u);let X=u,Z=I(J.header)?J.header:{},$=I(J.sections)?J.sections:{},G=I(J.appearance)?J.appearance:{},V=M(G.warnThreshold,X.appearance.warnThreshold,0,99),Y=Math.max(M(G.errorThreshold,X.appearance.errorThreshold,0,100),Math.min(V+1,100));return{forceToTop:W(J.forceToTop,X.forceToTop),order:M(J.order,X.order,-1e4,1e4),startCollapsed:W(J.startCollapsed,X.startCollapsed),rememberCollapsed:W(J.rememberCollapsed,X.rememberCollapsed),collapsed:typeof J.collapsed==="boolean"?J.collapsed:null,pollMs:M(J.pollMs,X.pollMs,500,30000),refreshDebounceMs:M(J.refreshDebounceMs,X.refreshDebounceMs,50,5000),header:{label:a(Z.label,X.header.label,20),showVersion:W(Z.showVersion,X.header.showVersion)},sections:{quota:W($.quota,X.sections.quota),fallbackAccounts:W($.fallbackAccounts,X.sections.fallbackAccounts),routing:W($.routing,X.sections.routing),cache:W($.cache,X.sections.cache),health:W($.health,X.sections.health),pacing:W($.pacing,X.sections.pacing)},appearance:{barWidth:M(G.barWidth,X.appearance.barWidth,4,40),barFilledChar:K(G.barFilledChar,X.appearance.barFilledChar),barEmptyChar:K(G.barEmptyChar,X.appearance.barEmptyChar),warnThreshold:V,errorThreshold:Y}}}var t=-1e5;function Hz(Q,J,X){let Z=Q[J];if(!I(Z))return X;if(Z.forceToTop===!0)return t+Object.keys(Q).indexOf(J);return M(Z.order,X,-1e4,1e4)}var o=`// Shared preferences for opencode TUI plugins.
2
2
  // One top-level key per plugin (short name). See each plugin's README for
3
3
  // its supported settings. This file is safe to hand-edit; plugins update
4
4
  // individual keys in place and preserve comments.