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