@cortexkit/opencode-anthropic-auth 1.19.1 → 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 +113 -2
- 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-075t8qec.js → index-hmebes3f.js} +1 -1
- package/dist/index-j3323dyj.js +2 -0
- package/dist/{index-2k47hc8b.js → index-jjx6dbj3.js} +1 -1
- package/dist/{index-dzs7w297.js → index-nqs7chg0.js} +1 -1
- package/dist/{index-dex8fs0m.js → index-vkecgsm3.js} +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +22 -18
- package/dist/lane-start.d.ts +17 -0
- package/dist/{logger-n49md99d.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 +2 -0
- package/dist/sidebar-state.d.ts +26 -1
- package/dist/sidebar-state.js +1 -1
- package/dist/transform.d.ts +9 -0
- package/dist/tui/command-dialogs.d.ts +16 -1
- package/dist/tui-preferences.js +1 -1
- 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.tsx +43 -1
- package/src/tui.tsx +28 -0
- package/dist/index-a13w4gm9.js +0 -2
- package/dist/index-vwgzgh5x.js +0 -422
package/dist/index.js
CHANGED
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
import{a as uJ,f as B4,h as dJ,i as lJ}from"./index-a13w4gm9.js";import{$ as rW,$a as LJ,$b as bJ,A as JW,Aa as GJ,Ab as SJ,B as NW,Ba as XJ,Bb as qJ,C as hW,Ca as n4,Cb as AJ,D as Z4,Da as P1,Db as fJ,E as Y4,Ea as H1,Eb as XW,F as D4,Fa as h1,Fb as VW,G as D0,Ga as VJ,Gb as zW,H as w1,Ha as U4,Hb as KW,I as G4,Ia as OW,Ib as f0,J as mW,Ja as $W,Jb as _W,K as bW,Ka as o4,Kb as Dj,L as x0,La as ZW,Lb as vJ,M as v,Ma as YW,Mb as RJ,Na as DW,Nb as Gj,O as $1,Oa as r4,P as pW,Pa as zJ,Pb as kJ,Q as iW,Qa as KJ,R as R1,Ra as s4,Rb as Xj,S as k1,Sa as t4,Sb as L1,T as cW,Ta as _J,Tb as gJ,U as uW,Ua as a4,Ub as hJ,V as X4,Va as UJ,Vb as Vj,W as dW,Wa as QJ,Wb as y0,X as V4,Xa as wJ,Xb as yJ,Y as lW,Ya as PJ,Yb as C1,Z as nW,Za as HJ,Zb as mJ,_ as oW,_a as CJ,_b as L4,aa as sW,ab as BJ,ac as pJ,ba as tW,bb as Q4,bc as iJ,ca as z4,cb as e4,da as K4,db as w4,ea as aW,eb as jj,fa as s0,fb as IJ,ga as Z1,gb as h0,ha as i4,hb as MJ,ia as eW,ib as Wj,ja as _4,jb as P4,ka as jJ,kb as TJ,la as WJ,lb as Jj,ma as JJ,mb as y1,na as c4,nb as Nj,oa as u4,ob as H4,pa as g1,pb as C4,qa as Y1,qb as xJ,ra as NJ,rb as Oj,s as aj,sa as D1,sb as $j,t as ej,ta as OJ,tb as FJ,u as A1,ua as d4,ub as Zj,v as f1,va as $J,vb as EJ,w as jW,wa as ZJ,wb as Yj,x as Q1,xa as YJ,xb as S1,y as gW,ya as DJ,yb as GW,z as WW,za as l4,zb as m1}from"./index-vwgzgh5x.js";import{dc as yW,mc as k,nc as O0}from"./index-dex8fs0m.js";import{pc as vj}from"./index-2k47hc8b.js";import{sc as cJ}from"./index-075t8qec.js";import"./index-dzs7w297.js";import{randomUUID as p4}from"node:crypto";var Ij="claude-opus-4-8",K3=10,_3=128,U3=86400000;function g0(j){if(typeof j!=="string")return null;if(f0(j))return"opus-5";if(j===S1||j.startsWith(`${S1}-`))return"fable-5";return null}function z1(j){return g0(j)!==null}function Q3(j,W){let J=g0(W);return J?`${j}\x00${J}`:null}function w3(j){try{let W=JSON.parse(j);return typeof W.model==="string"?{body:W,model:W.model}:null}catch{return null}}class q4{now;recoveries=new Map;nextCycle=1;constructor(j=Date.now){this.now=j}prune(){let j=this.now();for(let[W,J]of this.recoveries)if(j-J.updatedAt>=U3)this.recoveries.delete(W);while(this.recoveries.size>_3){let W=this.recoveries.keys().next().value;if(typeof W!=="string")break;this.recoveries.delete(W)}}plan(j,W){if(!j||typeof W!=="string")return null;let J=w3(W);if(!J||!z1(J.model))return null;let O=Q3(j,J.model);if(!O)return null;this.prune();let Z=this.recoveries.get(O);if(!Z||Z.remaining<=0)return{sessionId:j,recoveryKey:O,requestedModel:J.model,effectiveModel:J.model,bodyText:W,downgraded:!1,standbyCacheAnchor:Z?.standbyCacheAnchor};return Z.updatedAt=this.now(),Z.nextRequestSequence++,this.recoveries.delete(O),this.recoveries.set(O,Z),J.body.model=Ij,{sessionId:j,recoveryKey:O,requestedModel:Z.model,effectiveModel:Ij,bodyText:JSON.stringify(J.body),downgraded:!0,cycle:Z.cycle,cacheAccountId:Z.cacheAccountId,standbyCacheAnchor:Z.standbyCacheAnchor,requestSequence:Z.nextRequestSequence}}recoveryAccount(j){if(j.cycle===void 0)return j.cacheAccountId;let W=this.recoveries.get(j.recoveryKey);return W?.cycle===j.cycle?W.cacheAccountId:j.cacheAccountId}bindRecoveryAccount(j,W){if(!j.downgraded||j.cycle===void 0)return!1;let J=this.recoveries.get(j.recoveryKey);if(!J||J.cycle!==j.cycle)return!1;if(J.cacheAccountId===W)return!1;return J.cacheAccountId=W,J.standbyCacheAnchor=void 0,J.standbyAnchorSequence=0,J.updatedAt=this.now(),j.cacheAccountId=W,j.standbyCacheAnchor=void 0,!0}activate(j,W){if(j.downgraded||!z1(j.requestedModel))return this.remaining(j);let J={model:j.requestedModel,remaining:K3,cycle:this.nextCycle++,cacheAccountId:W,standbyCacheAnchor:j.standbyCacheAnchor,nextRequestSequence:0,standbyAnchorSequence:0,updatedAt:this.now()};return this.recoveries.delete(j.recoveryKey),this.recoveries.set(j.recoveryKey,J),this.prune(),J.remaining}complete(j,W){if(!j.downgraded||j.cycle==null||j.completed)return{counted:!1,remaining:this.remaining(j)};j.completed=!0;let J=this.recoveries.get(j.recoveryKey);if(!J||J.cycle!==j.cycle||J.remaining<=0)return{counted:!1,remaining:J?.remaining??0};if(J.remaining--,W&&(!J.cacheAccountId||W.oauthAccountId===J.cacheAccountId)&&j.requestSequence!=null&&j.requestSequence>=J.standbyAnchorSequence)J.standbyCacheAnchor=W,J.standbyAnchorSequence=j.requestSequence;return J.updatedAt=this.now(),this.recoveries.delete(j.recoveryKey),this.recoveries.set(j.recoveryKey,J),{counted:!0,remaining:J.remaining}}remaining(j){return this.prune(),this.recoveries.get(j.recoveryKey)?.remaining??0}}function K1(j){return typeof j==="object"&&j!==null}function P3(j){if(Array.isArray(j))return j;if(K1(j)&&Array.isArray(j.data))return j.data;return[]}function Ej(j){if(!K1(j)||!K1(j.info))return;return j.info}function Mj(j){let W=Ej(j);return typeof W?.role==="string"?W.role:void 0}function H3(j){let W=Ej(j);return typeof W?.id==="string"?W.id:void 0}function Tj(j){if(!K1(j)||!K1(j.info))return null;let W=j.info,J=K1(W.model)?W.model:void 0,O=typeof W.agent==="string"?W.agent:void 0,Z=typeof J?.providerID==="string"?J.providerID:typeof W.providerID==="string"?W.providerID:void 0,Y=typeof J?.modelID==="string"?J.modelID:typeof W.modelID==="string"?W.modelID:void 0,z=typeof J?.variant==="string"?J.variant:typeof W.variant==="string"?W.variant:void 0;if(!O&&(!Z||!Y)&&!z)return null;let B={};if(O)B.agent=O;if(Z&&Y)B.model={providerID:Z,modelID:Y};if(z)B.variant=z;return B}function xj(j,W){return{agent:j.agent??W.agent,model:j.model??W.model,variant:j.variant??W.variant,latestAssistantMessageId:j.latestAssistantMessageId??W.latestAssistantMessageId,latestUserMessageId:j.latestUserMessageId??W.latestUserMessageId}}function Fj(j){return Boolean(j.agent&&j.model&&j.variant)}async function Sj(j,W){if(!j||!W)return null;let J=j;if(typeof J.session?.messages!=="function")return null;let O=[];try{O=P3(await Promise.resolve(J.session.messages({path:{id:W},query:{limit:100}})))}catch{return null}if(O.length===0)return null;let Z,Y;for(let B of O){let x=H3(B);if(!x)continue;let r=Mj(B);if(r==="assistant"&&(!Z||x>Z))Z=x;if(r==="user"&&(!Y||x>Y))Y=x}let z={latestAssistantMessageId:Z,latestUserMessageId:Y};for(let B=O.length-1;B>=0;B--){if(Mj(O[B])!=="assistant")continue;let x=Tj(O[B]);if(!x)continue;if(z=xj(z,x),Fj(z))return z}for(let B=O.length-1;B>=0;B--){let x=Tj(O[B]);if(!x)continue;if(z=xj(z,x),Fj(z))return z}if(!z.agent&&!z.model&&!z.variant&&!z.latestAssistantMessageId&&!z.latestUserMessageId)return null;return z}var o0=[],C3=1,A4=0,qj=new Map;function Aj(j,W){if(o0.push({id:C3++,type:"open-dialog",payload:j,sessionId:W}),o0.length>100)o0=o0.slice(o0.length-100)}function fj(j=0,W){let J=Date.now();if(A4=J,W!==void 0)qj.set(W,J);let O=(Z)=>W===void 0||Z.sessionId===void 0||Z.sessionId===W;if(j>0)o0=o0.filter((Z)=>{if(Z.id>j)return!0;if(W===void 0)return!1;return Z.sessionId!==W});return o0.filter((Z)=>Z.id>j&&O(Z))}function f4(j){let W=Date.now();if(j!==void 0){let J=qj.get(j)??0;return J>0&&W-J<3000}return A4>0&&W-A4<3000}import{randomBytes as L3,timingSafeEqual as B3}from"node:crypto";import{unlink as I3}from"node:fs/promises";import{createServer as M3}from"node:http";import{join as T3}from"node:path";function x3(j){return new Promise((W,J)=>{let O=[],Z=0;j.on("data",(Y)=>{if(Z+=Y.length,Z>1e6){j.destroy(),J(Error("body too large"));return}O.push(Y)}),j.on("end",()=>W(Buffer.concat(O).toString("utf8"))),j.on("error",J)})}function F3(j,W){if(!j?.startsWith("Bearer "))return!1;let J=Buffer.from(j.slice(7)),O=Buffer.from(W);return J.length===O.length&&B3(J,O)}async function Rj(j){let W=L3(32).toString("hex"),J=M3((Y,z)=>{O(Y,z)});async function O(Y,z){let B=(x,r)=>{z.writeHead(x,{"content-type":"application/json"}),z.end(JSON.stringify(r))};try{let x=Y.url??"";if(Y.method==="GET"&&x==="/health")return B(200,{ok:!0});if(Y.method!=="POST"||!x.startsWith("/rpc/"))return B(404,{error:"not found"});if(!F3(Y.headers.authorization,W))return B(401,{error:"unauthorized"});let r=x.slice(5),o=JSON.parse(await x3(Y)||"{}");if(r==="pending-notifications"){let s=j.drain(Number(o.lastReceivedId??0),typeof o.sessionId==="string"?o.sessionId:void 0);return B(200,{messages:s})}if(r==="apply"){let s=await j.apply(o);return B(200,s)}return B(404,{error:"unknown method"})}catch(x){if(!z.headersSent&&!z.writableEnded&&!z.destroyed)B(500,{error:x instanceof Error?x.message:String(x)})}}let Z=await new Promise((Y,z)=>{J.on("error",z),J.listen(0,"127.0.0.1",()=>{let B=J.address();if(B&&typeof B==="object")Y(B.port);else z(Error("no port"))})});J.unref();try{await vj(j.dir,{port:Z,token:W,pid:process.pid})}catch(Y){throw await new Promise((z)=>J.close(()=>z())),Y}return{port:Z,token:W,async stop(){await new Promise((Y)=>J.close(()=>Y())),await I3(T3(j.dir,`port-${process.pid}.json`)).catch(()=>{})}}}var gj="server-side-fallback-2026-07-01",hj="",s1="cortexkit-server-fallback-v1:";function v0(j){return j!==null&&typeof j==="object"&&!Array.isArray(j)?j:void 0}function _1(j,W){let J=j?.[W];return typeof J==="string"?J:void 0}function U1(j){return typeof j==="string"&&j.length>0&&j.length<=128&&/^claude-[a-z0-9-]+$/i.test(j)}function E3(j){return`${s1}${j.fromModel}|${j.toModel}`}function S3(j){if(typeof j!=="string"||!j.startsWith(s1))return null;let W=j.slice(s1.length),J=W.indexOf("|");if(J<=0||J!==W.lastIndexOf("|"))return null;let O=W.slice(0,J),Z=W.slice(J+1);if(!U1(O)||!U1(Z))return null;return{fromModel:O,toModel:Z}}function q3(j){if(j.type!=="fallback")return null;let W=_1(v0(j.from),"model"),J=_1(v0(j.to),"model");if(!U1(W)||!U1(J))return null;return{fromModel:W,toModel:J}}function A3(j){return{type:"fallback",from:{model:j.fromModel},to:{model:j.toModel}}}function f3(j,W){let J=0,O=0;if(!Array.isArray(j.messages))return{restoredMarkers:J,droppedMarkers:O};for(let Z of j.messages){let Y=v0(Z);if(Y?.role!=="assistant"||!Array.isArray(Y.content))continue;let z=[];for(let B of Y.content){let x=v0(B);if(!(x?.type==="thinking"&&(x.thinking===hj||x.thinking==="")&&typeof x.signature==="string"&&x.signature.startsWith(s1))){z.push(B);continue}let o=S3(x.signature);if(W&&o)z.push(A3(o)),J++;else O++}Y.content=z}return{restoredMarkers:J,droppedMarkers:O}}function yj(j){return j?.trim().toLowerCase()==="legacy"?"legacy":"server"}function mj(j,W){let J=W&&z1(j.model),O=f3(j,J);if(J)j.fallbacks="default";else if(j.fallbacks==="default")delete j.fallbacks;return{enabled:J,...O}}function v3(j){let W,J=[];for(let Z of j.split(/\r?\n/))if(Z.startsWith("event:"))W=Z.slice(6).trim();else if(Z.startsWith("data:")){let Y=Z.slice(5);J.push(Y.startsWith(" ")?Y.slice(1):Y)}let O=J.join(`
|
|
2
|
-
`);if(!
|
|
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
|
|
10
|
-
`:""}${
|
|
11
|
-
`:""}${
|
|
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(`
|
|
12
12
|
|
|
13
|
-
`);for(let
|
|
14
|
-
`);W.splice(
|
|
15
|
-
`),
|
|
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(`
|
|
16
16
|
|
|
17
|
-
`)
|
|
17
|
+
`),$=N.indexOf(`\r
|
|
18
18
|
\r
|
|
19
|
-
`);if(W===-1)return
|
|
20
|
-
`);if(!O||O==="[DONE]")return null;let Z;try{Z=JSON.parse(O)}catch{return null}let Y=r0(Z);if(W!=="error"&&M0(Y,"type")!=="error")return null;let z=r0(Y?.error),B=M0(z,"type")??M0(z,"code")??void 0,x=M0(z,"message")??M0(Y,"message")??B??"Anthropic stream error";if(!Q7(B,x))return null;return w7(B,x)}function tj(j,W){if(!W)return null;j.pending+=W;while(!0){let J=b4(j.pending);if(!J)break;let O=j.pending.slice(0,J.index);j.pending=j.pending.slice(J.index+J.length);let Z=H7(O);if(Z)return Z}return null}function C7(j){return{sseEvents:j.events,ssePendingChars:j.pending.length,sseParseErrors:j.parseErrors,sseEventCounts:{...j.eventCounts},sseTypeCounts:{...j.typeCounts},sseDeltaTypeCounts:{...j.deltaTypeCounts},sseContentBlockTypeCounts:{...j.contentBlockTypeCounts},sseTextDeltaBytes:j.textDeltaBytes,sseThinkingDeltaBytes:j.thinkingDeltaBytes,sseInputJsonDeltaBytes:j.inputJsonDeltaBytes,sseSignatureDeltaBytes:j.signatureDeltaBytes,sseRedactedThinkingBytes:j.redactedThinkingBytes,sseLastEvent:j.last?{...j.last}:void 0}}function xW(j,W={}){if(!j.body)return j;let J=j.body.getReader(),O=new TextDecoder,Z=new TextEncoder,Y="",z=0,B=0,x=0,r=0,o=0,s=!1,h=!1,u=a(),e=a(),m=W.perf?V7():void 0,G0=U7(),$0=W.onContentFilter||W.onComplete?K7():void 0,Z0=!1,E=!1,m0=(X0=!1)=>{if(!W.onContentFilter)return!1;if(!Z0)Z0=!0,E=W.onContentFilter({completedToolUse:X0})!==!1;return E},A0=W.serverSideFallbackModel?bj({requestedModel:W.serverSideFallbackModel,onOutcome:W.onServerSideFallbackOutcome,onRefusalAfterToolUse:W.onContentFilter?()=>m0(!0):void 0}):void 0,b0=(X0)=>{if(!$0)return null;let L0=_7($0,X0);if(L0?.type==="content-filter"&&W.onContentFilter)return m0()?P7(W.contentFilterModel):null;if(L0?.type==="complete")W.onComplete?.(L0.finishReason);return null},E0=()=>{if(h)return;h=!0,J.releaseLock()},G1=async(X0)=>{try{await J.cancel(X0)}catch{}finally{E0()}},M4=(X0={})=>({chunks:z,pulls:B,inputBytes:x,outputBytes:r,pendingChars:Y.length,rewriteMs:q0(o),totalMs:q0(a()-e),...m?C7(m):{},...X0}),p0=(X0,L0={})=>{W.perf?.(X0,M4(L0))};W.perf?.("stream_tool_prefix_wrapper_created",{status:j.status,hasBody:!0});let T4=new ReadableStream({async pull(X0){if(B++,!s)s=!0,p0("stream_tool_prefix_first_pull");while(!0){let L0=a();try{let{done:R0,value:d0}=await J.read(),l0=q0(a()-L0);if(R0){let K0=O.decode();if(m)sj(m,K0);let x4=a(),B1=A0?A0.push(K0)+A0.flush():K0,B0=tj(G0,K0)??b0(B1);if(B0)throw p0("stream_tool_prefix_retryable_error",{error:B0.message,providerErrorType:B0.providerErrorType}),await G1(B0),B0;let a0=uj(`${Y}${B1}`,!0);if(o+=a()-x4,a0.ready){let c1=Z.encode(a0.ready);r+=c1.byteLength,X0.enqueue(c1)}p0("stream_tool_prefix_rewrite",{readMs:l0}),E0(),X0.close();return}z++,x+=d0.byteLength;let i0=O.decode(d0,{stream:!0});if(m)sj(m,i0);let t0=a(),b1=A0?A0.push(i0):i0,X1=tj(G0,i0)??b0(b1);if(X1)throw p0("stream_tool_prefix_retryable_error",{error:X1.message,providerErrorType:X1.providerErrorType,readMs:l0,lastChunkBytes:d0.byteLength}),E0(),X1;let p1=Y+b1,z0=uj(p1);if(o+=a()-t0,Y=z0.pending,z0.ready){let K0=Z.encode(z0.ready);r+=K0.byteLength,X0.enqueue(K0)}let i1=a();if(z===1||z%25===0||i1-u>5000)u=i1,p0("stream_tool_prefix_progress",{readMs:l0,lastChunkBytes:d0.byteLength});if(z0.ready)return}catch(R0){throw p0("stream_tool_prefix_error",{error:R0 instanceof Error?R0.message:String(R0)}),E0(),R0}}},async cancel(X0){p0("stream_tool_prefix_cancel",{reason:X0 instanceof Error?X0.message:String(X0)});try{await J.cancel(X0)}finally{E0()}}});return new Response(T4,{status:j.status,statusText:j.statusText,headers:j.headers})}var L7="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",FW="~effect/http/HttpServerResponse",EW="~effect/http/Cookies",SW="~effect/http/HttpBody",B7="~effect/ErrorReporter/ignore",I7=60000,M7=60000,T7=5000,qW=200,nJ=240,x7=nJ,F7=600000;function E7(j,W){return(j?.accounts??[]).some((J)=>J.id===W&&J.enabled!==!1&&D0(J))}function S7(j){let W=(j?.accounts??[]).find((J)=>J.enabled!==!1&&D0(J));if(L1(j)==="fallback-first"&&W)return{activeId:W.id,route:"fallback-first"};return{activeId:"main",route:"main"}}function AW(j,W){if(j?.activeId==="main"||j?.activeId&&E7(W,j.activeId))return j;return S7(W)}function oJ(j,W,J){let O=Date.now()-j.lastUpdated;if(!j.activeId||O<0||O>F7)return AW(J,W);return AW(j,W)}async function q7(j,W,J){let O;try{O=await W()}catch(Z){return k.warn("sidebar","account storage reload failed; routing preserved",{message:Z instanceof Error?Z.message:String(Z)}),{...j.activeId?{activeId:j.activeId,route:j.route}:J??{activeId:"main",route:"main"},freshStorage:null}}return{...oJ(j,O,J),freshStorage:O}}async function A7(j){await B4()?.beforeStorageLoad?.();let W;try{W=await v(j)}catch{return{activeId:"main",route:"main",freshStorage:null}}finally{await B4()?.afterStorageLoad?.()}await B4()?.beforeSidebarRead?.();let J=await dJ();return{...oJ(J,W),freshStorage:W}}function f7(j){let W=Math.floor(j.retryAfterSeconds/60),J=j.retryAfterSeconds%60,O=`Retry in ${W}m ${J}s.`;return j.modelName?`${j.modelName} weekly limit reached, no routable accounts. ${O}`:`Killswitch: no routable accounts. ${O}`}function v7(j){if(!j.requestModelId)return{isScopedDriven:!1};if(!D1(j.mainQuota,j.storage))return{isScopedDriven:!1};let W=JJ(j.mainQuota,j.requestModelId);if(!W)return{isScopedDriven:!1};if(!Number.isFinite(W.remainingPercent))return{isScopedDriven:!1};let J=NJ(j.storage);if(W.remainingPercent<=J.scoped)return{isScopedDriven:!0,modelName:W.modelName,modelId:j.requestModelId};return{isScopedDriven:!1}}var R7=1,fW=!1;function I4(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function g(){return performance.now()}function W0(j){return Math.round(j*10)/10}function vW(j){return Math.floor(Math.random()*Math.max(0,j))}function O4(j){if(typeof j==="string")return j;if(j instanceof URL)return j.toString();return j.url}function $4(j,W){return W?.method??(j instanceof Request?j.method:void 0)}function RW(j){return j instanceof Error?j.message:String(j)}function k7(){if(fW||!1||!I4())return;fW=!0;let j=100,W=250,J=g()+j;setInterval(()=>{let O=g(),Z=O-J;if(J=O+j,Z<W)return;O0("[perf] opencode event_loop_lag",{lagMs:W0(Z),thresholdMs:W})},j).unref?.()}function g7(j){let W=g(),J={requestId:String(R7++),start:W,last:W,mark(O,Z){let Y=g();if(I4())O0("[perf] opencode request stage",{requestId:J.requestId,stage:O,deltaMs:W0(Y-J.last),totalMs:W0(Y-J.start),...Z});J.last=Y},done(O,Z){let Y=g();if(I4())O0("[perf] opencode request done",{requestId:J.requestId,stage:O,deltaMs:W0(Y-J.last),totalMs:W0(Y-J.start),...Z});J.last=Y}};if(I4())O0("[perf] opencode request start",{requestId:J.requestId,...j});return J}function h7(j,W){let J=/^msg_([0-9a-fA-F]{12})/.exec(j);if(!J)return;let O=BigInt(`0x${J[1]}`);if(O<=0n)return;let Y=`msg_${(O-1n).toString(16).padStart(12,"0")}${"z".repeat(14)}`;if(W&&Y<=W)return;return Y}async function kW(j,W,J,O={}){let Z=j.client.session,Y=await Sj(j.client,W),z={path:{id:W},body:{noReply:O.noReply??!0,parts:[{type:"text",text:J,ignored:!0}]}};if(O.beforeActiveAssistant){let B=Y?.latestAssistantMessageId?h7(Y.latestAssistantMessageId,Y.latestUserMessageId):void 0;if(!B)throw Error("OpenCode assistant ordering is unavailable for the fallback notification.");z.body.messageID=B}if(Y?.agent)z.body.agent=Y.agent;if(Y?.model)z.body.model=Y.model;if(Y?.variant)z.body.variant=Y.variant;if(typeof Z?.promptAsync==="function"){await Z.promptAsync(z);return}if(typeof Z?.prompt==="function"){await Promise.resolve(Z.prompt(z));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function y7(){let j=Error(L7);throw j[FW]=FW,j[B7]=!0,j.status=204,j.statusText=void 0,j.headers={},j.cookies={[EW]:EW,cookies:{}},j.body={[SW]:SW,_tag:"Empty"},j}function m7(j){if(j.sessionID==null)return!1;let W=j.model;return W?.providerID==="anthropic"||W?.api?.npm==="@ai-sdk/anthropic"||W?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function b7(j){if(j.some((W)=>W.includes("<use_parallel_tool_calls>")))return!1;return j.push(gW),!0}var p7={input:0,output:0,cache:{read:0,write:0}},i7="Fable content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Fable cache warm.",c7="Fable recovery window complete. Returning to Fable 5.";function u7(j){if(f0(j))return"Opus 5 content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Opus 5 cache warm.";return i7}function d7(j){if(f0(j))return"Opus 5 recovery window complete. Returning to Opus 5.";return c7}function zj(j){if(f0(j))return"Opus 5";if(j==="claude-fable-5"||j.startsWith("claude-fable-5-"))return"Fable 5";if(j==="claude-opus-4-8"||j.startsWith("claude-opus-4-8-"))return"Opus 4.8";return j}function l7(j,W){return`Anthropic safety fallback active: ${zj(j)} → ${zj(W)}. Follow-up requests may remain on the fallback model for about one hour.`}function n7(j){return`Anthropic safety fallback ended. Returning to ${zj(j)}.`}function o7(j){let W=j["claude-opus-4-8"]??j["claude-opus-4-5"]??Object.values(j)[0];if(!W)return j;return{...j,...Object.fromEntries(Object.values(fJ).map((J)=>[J.id,{...W,id:J.id,name:J.name,api:W.api?{...W.api,id:J.id}:void 0,cost:{input:m1.input,output:m1.output,cache:{read:m1.cacheRead,write:m1.cacheWrite5m}},limit:{...W.limit??{},context:SJ,output:qJ},capabilities:{...W.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:AJ}]))}}var r7=["low","medium","high","xhigh","max"];function s7(){return Object.fromEntries(r7.map((j)=>[j,{thinking:{type:"adaptive",display:"summarized"},effort:j}]))}function t7(j){return Object.fromEntries(Object.entries(j).map(([W,J])=>{let O=J.api?.id??J.id??W;return[W,f0(O)?{...J,variants:s7()}:J]}))}function a7(j){return Object.fromEntries(Object.entries(j).map(([W,J])=>[W,{...J,cost:p7}]))}var e7=async(j,W={})=>{let J={setTimeout:globalThis.setTimeout,setInterval:globalThis.setInterval,clearInterval:globalThis.clearInterval,...W};k7();let{client:O}=j,Z=globalThis.fetch,Y=bW(),z=600000,B=50,x=new Map;function r(){let N=Date.now();for(let[$,D]of x)if(N-D.createdAt>z)x.delete($)}function o(N,$){if(r(),x.size>=B){let D="",X=1/0;for(let[G,K]of x)if(K.createdAt<X)X=K.createdAt,D=G;if(D)x.delete(D)}x.set(N,$)}function s(N){r();let $=x.get(N);if(!$)return;if(Date.now()-$.createdAt>z){x.delete(N);return}return $}let h;try{h=await v(Y)}catch(N){let $=N instanceof Error?N.message:String(N);throw Error(`Failed to load account store: ${$}`,{cause:N instanceof Error?N:void 0})}let u=yj(process.env.OPENCODE_ANTHROPIC_AUTH_FALLBACK_MODE),e=new q4,m=new Map,G0=new Map,$0=new Map,Z0=new iJ({path:process.env.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE||bJ(Y)}),E=new LJ({storage:h,onMainQuotaFetched:async(N,$,D,X)=>{try{let G=await v(Y)??x0(),K=WJ(G);if(K&&K.checkedAt>=X&&GJ(K.quota,G,K.checkedAt)>Date.now()){E.seedMainFromStorage(G);return}G.quota=G.quota??{},G.quota.mainQuota=N,G.quota.mainQuotaCheckedAt=$,G.quota.mainQuotaToken=D,G.quota.mainLastQuotaApiError=void 0,await $1(G,Y,{mainQuota:!0})}catch(G){k.warn("quota","failed to persist main quota",{error:G instanceof Error?G.message:String(G)})}},onApiError:async(N)=>{try{let $=await v(Y)??x0();$.quota=$.quota??{},$.quota.mainLastQuotaApiError=N,await $1($,Y,{mainQuota:!0})}catch($){k.warn("quota","failed to persist backoff state",{error:$ instanceof Error?$.message:String($)})}}}),m0=new Map;async function A0(N,$,D){if(D?.aborted)return;let X=`${N}:${D4($)}`,G=m0.get(X);if(!G){let K=BJ({accessToken:$,fetchImpl:Z,signal:D}).catch((T)=>{k.debug("quota","failed to hydrate account profile",{account:N,error:T instanceof Error?T.message:String(T)});return}).finally(()=>{if(m0.get(X)===K)m0.delete(X)});G=K,m0.set(X,G)}if(!D)return G;return new Promise((K)=>{let T=!1,_=(b)=>{if(T)return;T=!0,D.removeEventListener("abort",I),K(b)},I=()=>_(void 0);if(D.addEventListener("abort",I,{once:!0}),D.aborted)I();G.then(_)})}async function b0(N){try{if(N.accountId==="main"){let $=await U0?.();if($?.type!=="oauth"||$.access!==N.accessToken)return!1}return await pW({accountId:N.accountId,profile:N.profile,expectedTokenFingerprint:D4(N.accessToken)},Y)}catch($){k.debug("quota","failed to persist account profile",{account:N.accountId,error:$ instanceof Error?$.message:String($)});return}}async function E0(N,$,D){if(process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION==="1")return N;let X=Date.now();if($&&N.main?.profile&&!Q4(N.main.profile,$))N.main.profile=void 0,b0({accountId:"main",accessToken:$,profile:void 0}).catch(()=>{});if($&&!e4(N.main?.profile,X)){let G=await A0("main",$,D);if(G)N.main={type:"opencode",provider:"anthropic",profile:G},b0({accountId:"main",accessToken:$,profile:G}).catch(()=>{})}for(let G of N.accounts){if(D?.aborted)break;if(!D0(G)||!G.access)continue;let K=G.access;if(G.profile&&!Q4(G.profile,K))G.profile=void 0,b0({accountId:G.id,accessToken:K,profile:void 0}).catch(()=>{});if(e4(G.profile,X))continue;let T=await A0(G.id,K,D);if(T)G.profile=T,b0({accountId:G.id,accessToken:K,profile:T}).catch(()=>{})}return N}let G1=new Set;async function M4(N,$){let D=await v(Y)??x0();if(N.accountId==="main"){let G;try{let K=await U0?.();if(K?.type==="oauth")G=K.access}catch{}if(G!==N.accessToken){k.trace("quota","skipped stale main response quota persistence");return}D.quota=D.quota??{},D.quota.mainQuota=$.quota,D.quota.mainQuotaCheckedAt=$.checkedAt,D.quota.mainQuotaToken=D4(N.accessToken),await $1(D,Y,{mainQuota:!0});return}let X=D.accounts.find((G)=>G.id===N.accountId&&D0(G)&&G.access===N.accessToken);if(!X)return;X.quota=$.quota,await $1(D,Y,{accounts:[N.accountId]})}function p0(N){k.warn("quota","failed to persist harvested response quota",{error:N instanceof Error?N.message:String(N)})}function T4(N){let $=N instanceof Error?N.name:typeof N,D=N instanceof Error?N.message:String(N),X=`${$}:${D}`;if(G1.has(X))return;G1.add(X),k.warn("quota","failed to normalize response quota headers",{error:D})}function X0(N,$){try{if(!HJ(N)){k.trace("quota","skipped non-quota response headers",{account:$.accountId});return}let D=CJ(N),X=$.accountId==="main"?E.pushMainFromHeaders($.accessToken,D):E.pushFallbackFromHeaders($.accountId,$.accessToken,D);M4($,X).catch(p0),a0().catch(()=>{}),k.debug("quota","harvested response quota",{account:$.accountId,fiveHourPercent:X.quota.five_hour?.usedPercent,sevenDayPercent:X.quota.seven_day?.usedPercent,source:"headers"})}catch(D){T4(D)}}let L0=new XJ({quotaManager:E,setIntervalImpl:J.setInterval,clearIntervalImpl:J.clearInterval,onFallbackStorageChanged:()=>{a0().catch(()=>{})}});L0.startBackgroundRefresh();let R0=null,d0=new PJ({directory:process.env.OPENCODE_ANTHROPIC_AUTH_CACHEKEEP_REGISTRY_DIR||wJ("opencode")}),l0=[],i0=new QJ({loadStorage:()=>v(Y),setIntervalImpl:J.setInterval,clearIntervalImpl:J.clearInterval,onTrackedSessionsChanged:async(N)=>{await d0.publish(N),l0=await d0.list(N)},prepareHeaders:async(N,$)=>{let D,X=$.oauthAccountId;if(X&&X!=="main"){let G=await v(Y),K=G?.accounts.find((_)=>_.id===X&&_.enabled!==!1&&D0(_));if(!K||!G)throw Error(`OAuth account ${X} is unavailable for cache prewarm`);let T=K;try{T=await L0.refreshAccount(K,G)}catch(_){k.warn("cachekeep","fallback token refresh failed",{accountId:X,error:_ instanceof Error?_.message:String(_)})}if(D=T.access,!D)throw Error(`OAuth account ${X} has no access token for cache prewarm`)}else{if(!U0)return N;let G=await U0();if(G.type!=="oauth")return N;if(!G.access||G.expires&&G.expires<Date.now()){if(!R0)return N;G.access=await R0()}D=G.access}if(!D)return N;try{let G=JSON.parse($.bodyText),K=await o4(D,typeof G.model==="string"?G.model:void 0);if(N.delete("anthropic-beta"),v1(N,D,{body:G,identity:K}),N.set("anthropic-beta",A1(N.get("anthropic-beta"),[zJ])),G.speed==="fast")J4(N)}catch{v1(N,D)}return N}}),t0=new Map;function b1(N){let $=N.plan.sessionId,D=f0(N.plan.requestedModel)?"Opus 5":"Fable",X=async()=>{let _=N.warmTarget;if(!_){k.debug("fable-fallback","cache warm skipped",{session:$,reason:"Opus response was not served by an OAuth route"});return}let I=MW(_.bodyText,N.plan.requestedModel);if(!I.ok){k.warn("fable-fallback","cache warm skipped",{session:$,reason:I.reason});return}try{let b=await i0.prewarmNow({sessionId:$,url:_.url,headers:_.headers,bodyText:I.bodyText,oauthAccountId:e.recoveryAccount(N.plan)??_.oauthAccountId});if(b.ok){k.debug("fable-fallback",`${D} cache warmed`,{session:$,remaining:e.remaining(N.plan),...b.usage&&{usage:b.usage}});return}k.warn("fable-fallback",`${D} cache warm skipped`,{session:$,status:b.status,reason:b.reason})}catch(b){k.warn("fable-fallback",`${D} cache warm failed`,{session:$,error:b instanceof Error?b.message:String(b)})}},{recoveryKey:G}=N.plan,T=(t0.get(G)??Promise.resolve()).then(X,X);return t0.set(G,T),T.finally(()=>{if(t0.get(G)===T)t0.delete(G)}),T}async function X1(){return l0=await d0.list(i0.trackedSessions()),l0}if(h1({enabled:R1(h),mode:k1(h)}),P4(X4(h)),C4(V4(h)),!process.env.OPENCODE_ANTHROPIC_AUTH_LOG_LEVEL)yW(_4(h)??"info");let p1=null;if(j.directory){let N=globalThis;if(N.__anthropicAuthRpcServer)await N.__anthropicAuthRpcServer.stop().catch(()=>{}),N.__anthropicAuthRpcServer=void 0;try{p1=await Rj({dir:cJ(j.directory),drain:fj,apply:D3}),N.__anthropicAuthRpcServer=p1}catch($){k.warn("rpc","failed to start",{error:$ instanceof Error?$.message:String($)})}}let z0={activeId:"main",route:"main"},i1=uJ(),K0=new Map;function x4(N,$,D){if(!N||!$)return N;let X={...N,accounts:N.accounts.map((T)=>{let _=$.accounts.find((I)=>I.id===T.id);if(!D0(T)||!_||!D0(_)||!T.access||_.access!==T.access)return T;return{...T,profile:_.profile}})},G=N.main?.profile,K=N.main??$.main;if(D&&K&&(!G||Q4(G,D)))X.main={...K,profile:$.main?.profile};return X}function B1(N,$){E.updateStorage(N),E.seedMainFromStorage(N,$.mainAccessToken),E.seedFallbacksFromAccounts((N?.accounts??[]).filter(D0));let D=E.getMain($.mainAccessToken),X=E.getLastApiError(),G=N?.refresh?.mainLastRefreshError;return{main:{quota:D?.quota??null,tierLabel:w4(N?.main?.profile),quotaBackedOff:E.isBackedOff(),quotaBackoffUntil:X?.nextRetryAt,refreshBackedOff:G?Z1(G,$.mainRefreshToken,Date.now()):!1,refreshBackoffUntil:G?.nextRetryAt},fallbacks:(N?.accounts??[]).filter((K)=>K.enabled!==!1&&D0(K)).map((K)=>({id:K.id,label:K.label,tierLabel:w4(K.profile),quota:K.access?E.getFallback(K.id,K.access)?.quota??null:null,needsReauth:K.lastRefreshError!=null&&Z1(K.lastRefreshError,K.refresh,Date.now())&&s0(K.lastRefreshError),enabled:K.enabled!==!1})),activeId:$.activeId,route:$.route,relay:(()=>{let K=Gj(N);return K?{enabled:!0,transport:K.transport??"http"}:null})(),fastMode:H4(),cacheKeep:{enabled:a4(N),window:t4(N)?"always":N?.cacheKeep?.startHour!=null&&N?.cacheKeep?.endHour!=null?`${N.cacheKeep.startHour}-${N.cacheKeep.endHour}`:void 0,trackedSessions:l0.length},fableRecoveries:K0.size>0?[...K0.values()]:void 0,lastUpdated:Date.now()}}function B0(N,$){let D=$.routingAuthoritative!==!1;if(D)z0={activeId:$.activeId,route:$.route};let X=B1(N,$);return lJ(X,i1,{routingAuthoritative:D,resolvePreservedRouting:D?void 0:async(G)=>{let K=await q7(G,()=>v(Y),{activeId:X.activeId,route:X.route}),T=$.useHydratedProfiles?x4(K.freshStorage,N,$.mainAccessToken):K.freshStorage;return{activeId:K.activeId,route:K.route,state:B1(T,{...$,activeId:K.activeId,route:K.route})}},onRoutingResolved:D?void 0:(G)=>{z0=G}}).catch((G)=>k.warn("sidebar","state write failed",{error:G instanceof Error?G.message:String(G)}))}async function a0(){let N=await v(Y),$,D;if(U0)try{let X=await U0();$=X.access,D=X.refresh}catch{}B0(N,{activeId:z0.activeId,route:z0.route,mainAccessToken:$,mainRefreshToken:D,routingAuthoritative:!1})}function c1(N,$){if(!$)return;if(N?.quota?.enabled!==!0)return;if(E.getMain($))return;if(F4)return;F4=!0,E.refreshMain($).then(()=>a0()).catch(()=>{}).finally(()=>{F4=!1})}let U0=null,F4=!1,V1=null,u1=0;function rJ(N){let $=N?.refresh?.refreshBeforeExpiryMinutes??x7;return Math.max(nJ,$)*60000}function sJ(N){return N?.refresh?.enabled!==!1}async function Kj(N){if(!N)return;let $=await v(Y),D=$?.refresh?.mainLastRefreshError;if(!$?.refresh||!D?.tokenHash)return;let X=K4(N);if(D.tokenHash===X)return;if(!s0(D)&&D.nextRetryAt&&D.nextRetryAt>Date.now()){O0("[refresh] opencode main oauth keeping backoff despite token rotation",{nextRetryAt:D.nextRetryAt,retryCount:D.retryCount,remainingMs:D.nextRetryAt-Date.now()});return}$.refresh.mainLastRefreshError=void 0,await $1($,Y,{mainRefresh:!0}),O0("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:D.checkedAt,previousNextRetryAt:D.nextRetryAt,previousRetryCount:D.retryCount})}async function tJ(){let N=[],$;if(U0)try{let _=await U0();if(_.type==="oauth"&&_.access){$=_.access;let I=await E.refreshMain(_.access);N.push({name:"OpenCode anthropic",role:"main",quota:I})}else if(_.type==="oauth")N.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(_){let I=_ instanceof Error?_.message:String(_);N.push({name:"OpenCode anthropic",role:"main",error:I.includes("429")?"Usage API rate limited — try again in a moment":I})}let{storage:D,errors:X}=await L0.refreshQuotaForAllAccounts({force:!0}),G=await E0(D??x0(),$,AbortSignal.timeout(3000)),K=N.find((_)=>_.role==="main");if(K)K.tierLabel=w4(G.main?.profile);let T=new Map(X.map((_)=>[_.accountId,_.message]));if(N.push(...vJ(G,T)),!U0)N.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return RJ({accounts:N,refreshedAt:Date.now()})}async function _j(N){if(U0)try{let $=await U0();B0(N,{activeId:z0.activeId,route:z0.route,mainAccessToken:$.access,mainRefreshToken:$.refresh,routingAuthoritative:!1})}catch{}}function I1(N,$,D,X){if(K0.delete(N.sessionId),K0.set(N.sessionId,{...N,changedAt:Date.now()}),K0.size>128){let K=K0.keys().next().value;if(K)K0.delete(K)}if(B0($,{activeId:z0.activeId,route:z0.route,mainAccessToken:D.access,mainRefreshToken:D.refresh,routingAuthoritative:!1}),!X||f4(N.sessionId))return;let G=G0.get(N.sessionId)??[];if(G.push(X),G.length>4)G.splice(0,G.length-4);G0.delete(N.sessionId),G0.set(N.sessionId,G);while(G0.size>128){let K=G0.keys().next().value;if(K)G0.delete(K);else break}aJ(N.sessionId)}async function aJ(N){let $=j.client.session;if(typeof $?.status!=="function")return;try{let D=await Promise.resolve($.status()),X=D!==null&&typeof D==="object"?D:void 0,G=X&&Object.hasOwn(X,"data")?X.data:X;if(G===null||typeof G!=="object"||Array.isArray(G))return;let K=G[N];if(K===void 0){await d1(N);return}if(K!==null&&typeof K==="object"&&K.type==="idle")await d1(N)}catch{}}function d1(N){let $=$0.get(N);if($)return $;let D=(async()=>{while(!0){let G=G0.get(N)?.shift();if(!G){G0.delete(N);return}try{await kW(j,N,G,{noReply:!0,beforeActiveAssistant:!0})}catch(K){k.warn("fable-fallback","Desktop notification failed",{session:N,error:K instanceof Error?K.message:String(K)})}}})();return $0.set(N,D),D.finally(()=>{if($0.get(N)===D)$0.delete(N)}),D}function eJ(N,$,D,X){if($.fallback&&$.targetModel){let G=m.get(N.recoveryKey);m.delete(N.recoveryKey),m.set(N.recoveryKey,$.targetModel);while(m.size>128){let T=m.keys().next().value;if(T)m.delete(T);else break}let K=K0.get(N.sessionId);if(G===$.targetModel&&K?.mode==="server"&&g0(K.requestedModelId)===g0(N.requestedModel)&&K.targetModelId===$.targetModel)return;k.info("fable-fallback","Anthropic server-side safety fallback active",{session:N.sessionId,requestedModel:N.requestedModel,targetModel:$.targetModel,handoff:$.handoff}),I1({sessionId:N.sessionId,mode:"server",remaining:0,requestedModelId:N.requestedModel,targetModelId:$.targetModel},D,X,l7(N.requestedModel,$.targetModel));return}if($.stopReason==="refusal"||!m.delete(N.recoveryKey))return;k.info("fable-fallback","Anthropic server-side safety fallback ended",{session:N.sessionId,requestedModel:N.requestedModel}),I1({sessionId:N.sessionId,mode:"fable",remaining:0,requestedModelId:N.requestedModel},D,X,n7(N.requestedModel))}function j3(N,$,D){if(!N)return;for(let X of m.keys())if(X.startsWith(`${N}\x00`))m.delete(X);if(!K0.delete(N))return;B0($,{activeId:z0.activeId,route:z0.route,mainAccessToken:D.access,mainRefreshToken:D.refresh,routingAuthoritative:!1})}async function W3(N){let $=VJ(N);if($.type==="enable"||$.type==="disable"){let K=$.type==="enable",T=await cW(K),_=k1(T);return h1({enabled:K,mode:_}),k.info("commands","cache enabled changed",{enabled:K}),U4({argumentsText:N,enabled:K,mode:_})}if($.type==="mode"){let K=await uW($.mode),T=R1(K);return h1({enabled:T,mode:$.mode}),k.info("commands","cache mode changed",{mode:$.mode}),U4({argumentsText:N,enabled:T,mode:$.mode})}let D=await v(Y),X=R1(D),G=k1(D);return h1({enabled:X,mode:G}),U4({argumentsText:N,enabled:X,mode:G})}async function J3(N){let $=KJ(N),D=await v(Y);if($.type==="window")D=await nW($.startHour,$.endHour),k.info("commands","cachekeep schedule changed",{schedule:`${$.startHour}-${$.endHour}`});else if($.type==="always")D=await oW(),k.info("commands","cachekeep schedule changed",{schedule:"always"});else if($.type==="disable")D=await rW(!1),k.info("commands","cachekeep enabled changed",{enabled:!1});else if($.type==="subagents")D=await tW($.enabled),k.info("commands","cachekeep subagents changed",{subagents:$.enabled});let X=s4(D),G=await X1(),K=G.length?Math.min(...G.map((T)=>T.nextPrewarmAt)):void 0;return UJ({argumentsText:N,enabled:_J(D),always:t4(D),window:X,hybridActive:a4(D),trackedSessions:G.length,trackedSessionDetails:G,nextPrewarmAt:K})}async function N3(N){let $=TJ(N);if($.type==="enable"||$.type==="disable"){let G=$.type==="enable";return await dW(G),P4(G),k.info("commands","dump changed",{enabled:G}),Jj({argumentsText:N,enabled:G})}let D=await v(Y),X=X4(D);return P4(X),Jj({argumentsText:N,enabled:X})}async function O3(N){let $=xJ(N);if($.type==="enable"||$.type==="disable"){let G=$.type==="enable";return await lW(G),C4(G),k.info("commands","fast mode changed",{enabled:G}),Oj({argumentsText:N,enabled:G})}let D=await v(Y),X=V4(D);return C4(X),Oj({argumentsText:N,enabled:X})}async function $3(N,$){let D=hJ(N);if(D.type==="mode")return await gJ(D.mode,Y),k.info("commands","routing mode changed",{mode:D.mode}),Vj({argumentsText:N,mode:D.mode});if(D.type==="reset"&&$)await Z0.clear($),k.info("commands","sticky routing assignment reset");let X=await v(Y);return Vj({argumentsText:N,mode:L1(X)})}async function Z3(N){let $=EJ(N);if($.type==="level")return await jJ($.level),k.info("commands","log level changed",{level:$.level}),Yj({argumentsText:N,level:$.level});let D=await v(Y),X=_4(D)??"info";return Yj({argumentsText:N,level:X})}async function Y3(N,$){let D=IJ(N);if(D.type==="add-apikey"){if(!D.apiKey)return{text:"API key is required",accounts:h0(await v(Y)??x0())};let _=D.label?.trim()||void 0,I=Date.now(),b=D.baseURL?.trim()||"https://api.kie.ai/claude";if(!G4(b))return{text:"Invalid base URL. Must be an http(s) URL without embedded credentials.",accounts:h0(await v(Y)??x0())};let V0=D.authHeader??"authorization-bearer",Q0={id:_||p4(),label:_||void 0,type:"api",apiKey:D.apiKey,baseURL:b,authHeader:V0,enabled:!0,addedAt:I,lastUsed:I};await l4(Q0,Y),k.info("commands","account added",{id:Q0.id,label:Q0.label,type:"apikey"});let T0=await v(Y);await _j(T0);let e0=h0(T0??{version:1,accounts:[]});return{text:`API key account "${Q0.label??Q0.id}" added.`,accounts:e0}}if(D.type==="add-oauth-start"){let _=await Z4("max"),I={state:_.state,verifier:_.verifier,redirectUri:_.redirectUri,createdAt:Date.now()};return o($??"default",I),{text:`Open this URL in your browser:
|
|
21
|
-
${_.url}`,knobs:{oauthUrl:_.url},accounts:h0(await v(Y)??x0())}}if(D.type==="add-oauth-finish"){let _=$??"default",I=s(_);if(!I)return{text:"OAuth session expired. Please start again.",accounts:h0(await v(Y)??x0())};try{let b=await Y4(D.code,I.verifier,I.redirectUri,I.state);if(b.type==="failed")return{text:"OAuth authentication failed. Please check the code and try again.",accounts:h0(await v(Y)??x0())};let V0=Date.now(),Q0={id:p4(),type:"oauth",label:D.label||void 0,access:b.access,refresh:b.refresh,expires:b.expires,enabled:!0,addedAt:V0,lastUsed:V0,lastRefreshedAt:V0};await l4(Q0,Y),k.info("commands","account added",{id:Q0.id,label:Q0.label,type:"oauth"});let T0=await v(Y);return await _j(T0),{text:"OAuth account added.",accounts:h0(T0??x0())}}catch{return{text:"OAuth exchange failed due to a network error. Please try again.",accounts:h0(await v(Y)??x0())}}finally{x.delete(_)}}let X=await v(Y);if(D.type==="status"&&X){let _;if(U0)try{let I=await U0();if(I.type==="oauth")_=I.access}catch{}X=await E0(X,_,AbortSignal.timeout(3000))}let G=MJ({argumentsText:N,storage:X??{version:1,accounts:[]}});if(G.updated){if(G.updated.action==="enable"||G.updated.action==="disable"){let I=G.updated.action==="enable";await DJ(G.updated.id,I,Y);let b=G.updated.id,V0=X?.accounts.find((Q0)=>Q0.id===b);k.info("commands",`account ${G.updated.action}d`,{id:b,label:V0?.label,enabled:I})}else if(G.updated.action==="remove"){await ZJ(G.updated.id,Y);let I=G.updated.id,b=X?.accounts.find((V0)=>V0.id===I);k.info("commands","account removed",{id:I,label:b?.label})}else if(G.updated.action==="reorder"){await YJ(G.updated.newOrder??G.updated.previousOrder??[],Y);let I=G.updated.id,b=X?.accounts.find((V0)=>V0.id===I);k.info("commands","account reordered",{id:I,label:b?.label})}let _=await v(Y);if(U0)try{let I=await U0();B0(_,{activeId:z0.activeId,route:z0.route,mainAccessToken:I.access,mainRefreshToken:I.refresh,routingAuthoritative:!1})}catch{}}let K=await v(Y),T=h0(K??{version:1,accounts:[]});return{text:G.text,accounts:T}}async function Uj(N,$,D){if(N==="claude-quota")return{command:N,text:await tJ(),knobs:{}};if(N==="claude-logging"){let _=await Z3($),I=await v(Y);return{command:N,text:_,knobs:{level:_4(I)??"info"}}}if(N==="claude-account"){let _=await Y3($,D),I={accounts:_.accounts};if("knobs"in _&&_.knobs)Object.assign(I,_.knobs);return{command:N,text:_.text,knobs:I}}if(N==="claude-routing"){let _=await $3($,D),I=await v(Y);return{command:N,text:_,knobs:{mode:L1(I)}}}if(N==="claude-fast"){let _=await O3($),I=await v(Y);return{command:N,text:_,knobs:{enabled:V4(I)}}}if(N==="claude-dump"){let _=await N3($),I=await v(Y);return{command:N,text:_,knobs:{enabled:X4(I)}}}if(N==="claude-cache"){let _=await W3($),I=await v(Y);return{command:N,text:_,knobs:{enabled:R1(I),mode:k1(I)}}}if(N==="claude-cachekeep"){let _=await J3($),I=await v(Y);return{command:N,text:_,knobs:{window:s4(I)}}}let X=await v(),G=d4(X),K=(X?.accounts??[]).filter((_)=>_.enabled!==!1).map((_)=>_.id),T=FJ({argumentsText:$,config:G,accountIds:K});if(T.updatedConfig){if(await $J(T.updatedConfig),G.enabled!==T.updatedConfig.enabled)k.info("commands","killswitch changed",{enabled:T.updatedConfig.enabled===!0});if(JSON.stringify(G.main)!==JSON.stringify(T.updatedConfig.main)||JSON.stringify(G.accounts)!==JSON.stringify(T.updatedConfig.accounts))k.info("commands","killswitch thresholds changed",{thresholds:T.updatedConfig.main??T.updatedConfig.accounts})}return{command:N,text:T.text,knobs:{config:d4(await v()),accountIds:K}}}async function D3(N){let $=await Uj(N.command,N.arguments,N.sessionId);return{text:$.text,knobs:$.knobs}}function G3(N,$=10){let D=Math.max(0,Math.min(Math.round(N/100*$),$));return"█".repeat(D)+"░".repeat($-D)}function l1(N,$){return`${N} ${G3($)} ${String(Math.round($)).padStart(3)}%`}function Qj(N){if(!N)return"";let $=new Date(N).getTime();if(Number.isNaN($))return"";let D=$-Date.now();if(D<=0)return"resets now";let X=Math.floor(D/60000);if(X<1)return"resets <1m";if(X<60)return`resets ${X}m`;let G=Math.floor(X/60),K=X%60;return K>0?`resets ${G}h${K}m`:`resets ${G}h`}function X3(N,$,D){let X=[],G=0;if(N){let{five_hour:_,seven_day:I}=N;if(_||I){let V0=D==="main"?"active":"idle",Q0=Qj(_?.resetsAt),T0=[`main · ${V0}${Q0?` (${Q0})`:""}`];if(_)T0.push(l1("5h",_.usedPercent)),G=Math.max(G,_.usedPercent);if(I)T0.push(l1("7d",I.usedPercent)),G=Math.max(G,I.usedPercent);X.push(T0.join(`
|
|
22
|
-
`))}}if($?.length)for(let _ of $){let I=_.quota;if(!I)continue;let{five_hour:b,seven_day:V0}=I;if(!b&&!V0)continue;let Q0=_.label||"alt",e0=D===_.id?"active":"idle",j1=Qj(b?.resetsAt),W1=[`${Q0} · ${e0}${j1?` (${j1})`:""}`];if(b)W1.push(l1("5h",b.usedPercent)),G=Math.max(G,b.usedPercent);if(V0)W1.push(l1("7d",V0.usedPercent)),G=Math.max(G,V0.usedPercent);X.push(W1.join(`
|
|
23
|
-
`))}if(!X.length)return;let K=X.join(`
|
|
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
|
|
24
21
|
|
|
25
|
-
|
|
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
|
|
26
23
|
|
|
27
|
-
`)&&p.length<65536){let{done:U,value:C}=await A.read();if(U)break;if(M.push(C),S+=C.byteLength,p+=P.decode(C,{stream:!0}),V0(p))break}if(V0(p)){await A.cancel().catch(()=>{});try{A.releaseLock()}catch{}let U=new ReadableStream({start(C){for(let H of M)C.enqueue(H);C.close()}});return w?.mark("inspect_stream_first_event",{ms:W0(g()-R),bytes:S,rateLimited:!0}),{response:new Response(U,{status:V.status,statusText:V.statusText,headers:V.headers}),rateLimited:!0}}let f=new ReadableStream({start(U){for(let C of M)U.enqueue(C)},async pull(U){let{done:C,value:H}=await A.read();if(C){U.close();return}U.enqueue(H)},cancel(U){return A.cancel(U)}});return w?.mark("inspect_stream_first_event",{ms:W0(g()-R),bytes:S,rateLimited:!1}),{response:new Response(f,{status:V.status,statusText:V.statusText,headers:V.headers}),rateLimited:!1}}async function j1(V,w,R,A,M="api_fallback",P,p){if(p?.plan.downgraded)p.warmTarget=void 0,p.opusCacheAnchor=void 0;let S=g(),f=W4(V,w),U=f.get("x-session-affinity")||f.get("x-opencode-session"),C=b(f);f.delete("x-parent-session-id"),f.delete("x-session-affinity"),f.delete("x-opencode-session");let H=w?.body,Q=typeof H==="string"?H.length:void 0;if(H&&typeof H==="string"){let w0=g(),n=(()=>{if(!H4())return!1;try{return f1(JSON.parse(H).model)}catch{return!1}})();if(H=await m4(H,{cache1hEnabled:!C&&P1(),cache1hMode:H1(),fastModeEnabled:n,perf:(j0,J0)=>A?.mark(`rewrite_body_${j0}`,{route:M,...J0})}),e0(f,R),f.set("anthropic-beta",A1(f.get("anthropic-beta"),[])),n)J4(f);A?.mark("rewrite_body",{route:M,ms:W0(g()-w0),originalBytes:Q,rewrittenBytes:H.length,cacheEnabled:!C&&P1(),cacheMode:H1(),fastModeEnabled:n,subagent:C})}else e0(f,R);let d=h4(V,{baseURL:R.baseURL}),L=g(),l;try{l=await fetch(d.input,{...w,body:H,headers:f,...g4()&&{tls:{rejectUnauthorized:!1}}})}catch(w0){if(typeof H==="string")await y1({affinity:U,route:M,error:RW(w0),bodyText:H,url:d.url?.toString()??O4(d.input),method:$4(V,w),headers:f});throw w0}if(typeof H==="string")await y1({affinity:U,route:M,status:l.status,bodyText:H,url:d.url?.toString()??O4(d.input),method:$4(V,w),headers:f});return A?.mark("send_headers_received",{route:M,ms:W0(g()-L),status:l.status,relayConfigured:!1,totalSendWithAccessMs:W0(g()-S),baseURL:R.baseURL}),l}async function W1(V,w,R,A,M="unknown",P,p="main",S){let f=g(),U=P,C=async()=>{return U??=await v(Y),U},H=W4(V,w),Q=H.get("x-session-affinity")||H.get("x-opencode-session"),d=b(H);H.delete("x-parent-session-id"),H.delete("x-session-affinity"),H.delete("x-opencode-session");let L=w?.body,l;if(L&&typeof L==="string"){let F=g();try{let y=JSON.parse(L);if(typeof y.model==="string")l=y.model}catch{}A?.mark("model_parse_for_identity",{route:M,ms:W0(g()-F),bodyBytes:L.length})}let w0=g(),n=await o4(R,l);A?.mark("resolve_claude_code_identity",{route:M,ms:W0(g()-w0),hasAccountUuid:Boolean(n.accountUuid)});let j0=typeof L==="string"?L.length:void 0;if(L&&typeof L==="string"){let F=g(),y=(()=>{if(!H4())return!1;try{return f1(JSON.parse(L).model)}catch{return!1}})(),_0=!d&&P1(),N0=H1(),i=S?.plan.downgraded&&S.plan.standbyCacheAnchor?.oauthAccountId===p?S.plan.standbyCacheAnchor:void 0;if(L=await m4(L,{cache1hEnabled:_0,cache1hMode:N0,fastModeEnabled:y,identity:n,hybridStandbyAnchor:i,serverSideFallbackEnabled:u==="server",perf:(C0,N1)=>{if(A?.mark(`rewrite_body_${C0}`,{route:M,...N1}),C0==="cache_strategy"&&N1?.standbyBridgeApplied===!0&&S&&!S.standbyBridgeLogged)S.standbyBridgeLogged=!0,k.info("fable-fallback","restored standby Opus cache bridge",{session:S.plan.sessionId,distanceBlocks:N1?.standbyDistanceBlocks})}}),S?.plan.downgraded&&_0&&N0==="hybrid"){let C0=CW(L);S.opusCacheAnchor=C0?{...C0,oauthAccountId:p}:void 0}let S0=g();try{v1(H,R,{body:JSON.parse(L),identity:n}),A?.mark("set_oauth_headers_body_parse",{route:M,ms:W0(g()-S0),bodyBytes:L.length,parsed:!0})}catch{v1(H,R,{identity:n}),A?.mark("set_oauth_headers_body_parse",{route:M,ms:W0(g()-S0),bodyBytes:L.length,parsed:!1})}if(y)J4(H);A?.mark("rewrite_body",{route:M,ms:W0(g()-F),originalBytes:j0,rewrittenBytes:L.length,cacheEnabled:!d&&P1(),cacheMode:H1(),fastModeEnabled:y,subagent:d})}let J0=h4(V);if(S&&typeof L==="string")S.warmTarget={url:J0.url?.toString()??J0.input.toString(),headers:new Headers(H),bodyText:L,oauthAccountId:p};if(typeof L==="string"&&P1()&&H1()==="hybrid"){let F=await C();if(!d||sW(F)){let y=g(),_0=i0.track({sessionId:Q,url:J0.url?.toString()??J0.input.toString(),headers:H,bodyText:L,storage:F,cacheMode:"hybrid",oauthAccountId:p});A?.mark("cachekeep_track",{session:Q,ms:W0(g()-y),tracked:_0.tracked,reason:_0.tracked?void 0:_0.reason,bodyBytes:L.length})}}let x1=!1,J1=async()=>{x1=!0;try{let F=await fetch(J0.input,{...w,body:L,headers:H,...g4()&&{tls:{rejectUnauthorized:!1}}});if(typeof L==="string")await y1({affinity:Q,route:M,status:F.status,bodyText:L,url:J0.url?.toString()??O4(J0.input),method:$4(V,w),headers:H});return F}catch(F){if(typeof L==="string")await y1({affinity:Q,route:M,error:RW(F),bodyText:L,url:J0.url?.toString()??O4(J0.input),method:$4(V,w),headers:H});throw F}},F1=Gj(await C()),E1={accountId:p,accessToken:R},r1=g(),q=await kJ({config:F1,input:J0.input,init:w,headers:H,body:L,fallback:J1,affinity:Q,optimisticResponse:F1?.transport==="websocket",onResponseHeaders:(F)=>X0(F,E1)});if(A?.mark("send_headers_received",{route:M,ms:W0(g()-r1),status:q.status,relayConfigured:F1!=null,totalSendWithAccessMs:W0(g()-f)}),x1)X0(q.headers,E1);return q}async function V3(V){if(!V)return!1;try{return await E.refreshMain(V),o1(V)}catch{return!1}}async function M1(V,w={}){let R=await L0.getUsableFallbackAccounts(V,{modelId:w.modelId}),A=new Map(R.map((P)=>[P.id,P])),M=[];for(let P of V?.accounts??[]){if(D0(P)){let p=A.get(P.id);if(p)M.push(p);continue}if(w.includeApiRoutes===!0&&w1(P)&&P.enabled!==!1&&P.apiKey&&G4(P.baseURL))M.push(P)}if(!Y1(V))return M;return M.filter((P)=>D0(P)?D1(n1(P),V,P.id,w.modelId):!0)}async function Pj(V){let w=E.getMain(V.mainAccessToken),R=w?.quota;if(!C1(w?.quota,V.storage,Date.now(),V.requestedModelId))try{R=await E.refreshMain(V.mainAccessToken)}catch{}let A=await L0.getUsableFallbackAccounts(V.storage,{modelId:V.requestedModelId}),M=await v(Y)??V.storage,P=new Map(A.map((C)=>[C.id,C])),p=[];if(!s0(M?.refresh?.mainLastRefreshError))p.push({id:y0,access:V.mainAccessToken,quota:R,order:0});for(let[C,H]of(M?.accounts??[]).entries()){if(H.enabled===!1||!D0(H))continue;let Q=P.get(H.id)??H;if(!Q.access||s0(Q.lastRefreshError))continue;let d=n1(Q);if(!C1(d,M,Date.now(),V.requestedModelId))try{d=await E.refreshFallback(Q.id,Q.access)}catch{}p.push({id:Q.id,access:Q.access,quota:d,order:C+1,account:Q})}let S=new Set(p.flatMap((C)=>{let H=C.id===y0?M?.refresh?.mainLastRefreshError:C.account?.lastRefreshError;if(s0(H))return[];if(C1(C.quota,M,Date.now(),V.requestedModelId)&&L4({quota:C.quota,modelId:V.requestedModelId}).action==="migrate")return[];if(Y1(M)&&!D1(C.quota,M,C.id===y0?void 0:C.id,V.requestedModelId))return[];return[C.id]})),f=new Set(A.map((C)=>C.id)),U=p.flatMap((C)=>{if(!C.quota)return[];let H=C.id===y0?void 0:C.id;return g1(C.quota,M)&&u4(C.quota,V.requestedModelId)&&(!Y1(M)||D1(C.quota,M,H,V.requestedModelId))&&(C.id===y0||f.has(C.id))?[{accountId:C.id,quota:C.quota,order:C.order}]:[]});return{storage:M,allRoutes:p,candidates:U,retainAccountIds:S}}async function Hj(V,w,R,A=!1){let M=new Headers(V.headers);if(M.set("retry-after",String(pJ(w,R))),A)return await V.body?.cancel().catch(()=>{}),M.set("content-type","application/json"),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account five-hour quota resets shortly; retaining session affinity."}}),{status:429,headers:M});return new Response(V.body,{status:V.status,statusText:V.statusText,headers:M})}async function T1(V,w,R,A,M,P,p){if(!R.length)return M??null;let S=p?.returnLastOnExhausted??!0;await M?.body?.cancel().catch(()=>{});let f=M??null;for(let[U,C]of R.entries()){let H;if(w1(C)){if(!C.apiKey)continue;H=await j1(V,w,C,P,`api_fallback_${U}`,A,p?.fableRequest)}else{let d=C.access;if(!d)continue;H=await W1(V,w,d,P,`fallback_${U}`,A,C.id,p?.fableRequest)}f=H;let Q=z4(H.status,A);if(!Q){let d=await T0(H,P);H=d.response,f=H,Q=d.rateLimited}if(!Q){if(await L0.markUsed(C),await p?.onSuccess?.(C),D0(C)&&C.access&&E.shouldRefreshOnRequestCount(u1))E.refreshFallback(C.id,C.access).then(()=>p?.onSuccess?.(C)).catch(()=>{});return H}if(U<R.length-1||!S)await H.body?.cancel().catch(()=>{})}return S?f:null}async function z3(V,w,R,A,M,P,p,S,f,U){if(!_(V,w?.body))return R;let C=g(),H=P??await v(Y);if(M?.mark("fallback_load_storage",{ms:W0(g()-C),cached:!!P}),!(H?.accounts??[]).some((j0)=>j0.enabled!==!1&&(D0(j0)||w1(j0)&&Boolean(j0.apiKey)&&G4(j0.baseURL))))return R;let d=R,L=z4(d.status,H),l=wj(d,!1);if(!L){let j0=await T0(d,M);d=j0.response,L=j0.rateLimited,l=wj(d,j0.rateLimited)}if(!L)return d;let w0=!1;if(A)w0=A.some(w1);else if(l)w0=await V3(p);let n=A;if(!n){let j0=g();n=await M1(H,{includeApiRoutes:w0,modelId:f}),M?.mark("fallback_get_accounts",{ms:W0(g()-j0),accounts:n.length})}if(Y1(H)){let j0=n.length;if(n=n.filter((J0)=>D0(J0)?D1(n1(J0),H,J0.id,f):!0),n.length<j0)O0("[killswitch] filtered fallbacks",{before:j0,after:n.length})}return await T1(V,w,n,H,d,M,{onSuccess:S,fableRequest:U})??d}return{apiKey:"",async fetch(V,w){let R=W4(V,w),A=R.get("x-session-affinity")||R.get("x-opencode-session"),M=I(w?.body),P=e.plan(A,w?.body);if(P&&!P.downgraded){let q=t0.get(P.recoveryKey);if(q)await q,P=e.plan(A,w?.body)}let p=u==="server"&&z1(P?.effectiveModel??M)?P?.effectiveModel??M:void 0,S=P?{plan:P}:void 0;if(P?.downgraded)w={...w,body:P.bodyText};let f=w?.body,U=g7({bodyBytes:typeof f==="string"?f.length:void 0}),C=(q)=>xW(q,{perf:(F,y)=>U.mark(F,y),contentFilterModel:P?.requestedModel,...!P?.downgraded&&P?{onContentFilter:(F)=>{if(!S?.warmTarget)return k.debug("fable-fallback","content filter recovery unavailable for non-OAuth route",{session:P.sessionId}),!1;let y=e.activate(P,S.warmTarget.oauthAccountId);m.delete(P.recoveryKey),k.info("fable-fallback","content filter detected; switching session to Opus 4.8",{session:P.sessionId,requestedModel:P.requestedModel,completedToolUse:F?.completedToolUse===!0,remaining:y}),I1({sessionId:P.sessionId,mode:"opus",remaining:y,requestedModelId:P.requestedModel},L,Q,u7(P.requestedModel))}}:{},...P?.downgraded&&S?{onComplete:(F)=>{let y=e.complete(P,S.opusCacheAnchor);if(!y.counted)return;k.info("fable-fallback","Opus 4.8 turn completed",{session:P.sessionId,requestedModel:P.requestedModel,finishReason:F,remaining:y.remaining}),I1({sessionId:P.sessionId,mode:"opus",remaining:y.remaining,requestedModelId:P.requestedModel},L,Q);let _0=b1(S);if(y.remaining===0){let N0=()=>{if(e.remaining(P)!==0)return;I1({sessionId:P.sessionId,mode:"fable",remaining:0,requestedModelId:P.requestedModel},L,Q,d7(P.requestedModel))};_0.then(N0,N0)}}}:{},...p?{serverSideFallbackModel:p,...P?{onServerSideFallbackOutcome:(F)=>eJ(P,F,L,Q)}:{}}:{}}),H=g(),Q=await N();if(U.mark("get_auth",{ms:W0(g()-H),authType:Q.type,hasAccess:Boolean(Q.access)}),Q.type!=="oauth"){let q=await fetch(V,w);return U.done("non_oauth_passthrough",{status:q.status}),q}await Kj(Q.refresh);let d=g(),L=await v();U.mark("load_storage",{ms:W0(g()-d)}),E.updateStorage(L),E.seedMainFromStorage(L,Q.access),E.seedFallbacksFromAccounts((L?.accounts??[]).filter(D0));let l=A?K0.get(A):void 0;if(!P||u==="server"&&l?.requestedModelId&&g0(l.requestedModelId)!==g0(P.requestedModel))j3(A,L,Q);let w0=_(V,w?.body),n=I(w?.body);if(w0)u1++;if(w0&&Q.access&&(!Q.expires||Q.expires>Date.now()))c1(L,Q.access);let j0=(q,F)=>B0(L,{activeId:q,route:F,mainAccessToken:Q.access,mainRefreshToken:Q.refresh}),J0;if(w0&&A&&L1(L)==="sticky-balanced"&&Q.access){let q=P?.effectiveModel??n,F=mJ(q),y=i0.trackedOAuthRoute(A),_0=P?.cacheAccountId??(y?y.oauthAccountId??y0:void 0),N0=!1;try{let i=await Pj({storage:L,mainAccessToken:Q.access,requestedModelId:q}),S0=(F0)=>Z0.resolve({sessionId:A,family:F,modelId:q,candidates:i.candidates,retainAccountIds:i.retainAccountIds,storage:i.storage,inputBytes:typeof w?.body==="string"?Buffer.byteLength(w.body):1,preferredAccountId:_0,excludeAccountIds:F0}),C0=s0(i.storage?.refresh?.mainLastRefreshError),N1=i.allRoutes.length===0&&!C0||i.allRoutes.some((F0)=>!F0.quota||!C1(F0.quota,i.storage,Date.now(),q)),c0=await S0();if(!c0&&N1)throw Error("Sticky-balanced routing is waiting for current OAuth quota snapshots");if(!c0){let F0=yJ({mainRefreshError:i.storage?.refresh?.mainLastRefreshError,routeQuotas:i.allRoutes.flatMap((u0)=>u0.quota?[u0.quota]:[]),modelId:q});return U.done("return_sticky_no_route",{status:F0.status}),F0}let t=i.allRoutes.find((F0)=>F0.id===c0?.accountId);if(c0&&t){if(N0=!0,P?.downgraded&&e.bindRecoveryAccount(P,t.id))k.info("fable-fallback","rebound recovery to migrated sticky account",{accountId:t.id});let F0=(Y0)=>W1(V,w,Y0.access,U,`sticky:${Y0.id}`,i.storage,Y0.id,S),u0=async(Y0,H0,I0=!0)=>{if(I0&&Y0.account)await L0.markUsed(Y0.account);return j0(Y0.id,"sticky-balanced"),U.done("return_sticky_balanced",{status:H0.status,accountId:Y0.id,created:c0?.created,migrated:c0?.migrated}),C(H0)},Cj=async(Y0)=>{let H0=Y0,I0=z4(Y0.status,i.storage),k0=!1;if(!I0){let n0=await T0(Y0,U);H0=n0.response,k0=n0.rateLimited,I0=n0.rateLimited}return{response:H0,routeFailure:I0,streamingRateLimit:k0}},Lj=C1(t.quota,i.storage,Date.now(),q)?L4({quota:t.quota,modelId:q}):void 0;if(Lj?.action==="hold")return u0(t,await Hj(new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account five-hour quota resets shortly; retaining session affinity."}}),{status:429,headers:{"content-type":"application/json"}}),A,Lj.retryAfterSeconds),!1);let P0=await Cj(await F0(t)),S4=!1;if(!P0.routeFailure)return u0(t,P0.response);if(P0.response.status===401){let Y0=t.id;try{if(Y0===y0)Q.access=await G(),t={...t,access:Q.access};else if(t.account&&i.storage){let H0=await L0.refreshAccount(t.account,i.storage,{force:!0});if(H0.access)t={...t,access:H0.access,account:H0}}if(await P0.response.body?.cancel().catch(()=>{}),P0=await Cj(await F0(t)),!P0.routeFailure)return u0(t,P0.response);S4=P0.response.status===401}catch(H0){let I0=await v(Y),k0=Y0===y0?I0?.refresh?.mainLastRefreshError:I0?.accounts.find((n0)=>n0.id===Y0&&D0(n0))?.lastRefreshError;if(!s0(k0))throw H0;S4=!0}}let Bj=P0.response.status===403||S4;if(P0.response.status===429||P0.streamingRateLimit){let Y0;try{Y0=t.id===y0?await E.refreshMain(t.access):await E.refreshFallback(t.id,t.access)}catch{Y0=void 0}let H0=L4({quota:Y0,modelId:q});if(U.mark("sticky_quota_failure",{accountId:t.id,action:H0.action,reason:H0.reason}),H0.action==="hold")return u0(t,await Hj(P0.response,A,H0.retryAfterSeconds,P0.streamingRateLimit));Bj=H0.action==="migrate"}if(Bj){let Y0=t.id;if(i=await Pj({storage:i.storage,mainAccessToken:Q.access,requestedModelId:q}),i.candidates.filter((I0)=>I0.accountId!==Y0).length>0){await P0.response.body?.cancel().catch(()=>{}),c0=await S0(new Set([Y0]));let I0=i.allRoutes.find((k0)=>k0.id===c0?.accountId);if(c0&&I0){if(t=I0,P?.downgraded)e.bindRecoveryAccount(P,t.id);return u0(t,await F0(t))}}else if((P0.response.status===429||P0.streamingRateLimit)&&o1(Q.access)){let I0=(await M1(i.storage,{includeApiRoutes:!0,modelId:q})).filter(w1);if(I0.length>0){let k0=await T1(V,w,I0,i.storage,P0.response,U,{onSuccess:(n0)=>j0(n0.id,"sticky-balanced"),fableRequest:S});if(k0)return U.done("return_sticky_api_fallback",{status:k0.status}),C(k0)}}}return u0(t,P0.response)}}catch(i){if(U.mark("sticky_balanced_error",{error:i instanceof Error?i.message:String(i)}),N0)throw i;let S0=i instanceof Error?i:Error(String(i));throw Object.assign(S0,{code:"ECONNRESET",syscall:"sticky-routing"}),S0}}if(w0&&L1(L)==="fallback-first")try{let q=g();J0=await M1(L,{includeApiRoutes:o1(Q.access),modelId:n}),U.mark("fallback_first_get_accounts",{ms:W0(g()-q),accounts:J0.length});let F=await T1(V,w,J0,L,void 0,U,{returnLastOnExhausted:!1,onSuccess:(y)=>j0(y.id,"fallback-first"),fableRequest:S});if(F)return U.done("return_fallback_first",{status:F.status}),C(F);J0=void 0}catch(q){U.mark("fallback_first_error",{error:q instanceof Error?q.message:String(q)})}if(!Q.access||!Q.expires||Q.expires<Date.now()){let F=(await v())?.refresh?.mainLastRefreshError;if(Q.refresh&&F&&Z1(F,Q.refresh,Date.now()))throw O0("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:F.nextRetryAt,retryCount:F.retryCount,expiresInMs:Q.expires?Q.expires-Date.now():void 0}),Error(i4(F,Date.now()));O0("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(Q.access),expiresInMs:Q.expires?Q.expires-Date.now():void 0,expiredAgoMs:Q.expires&&Q.expires<Date.now()?Date.now()-Q.expires:void 0});let y=g();Q.access=await G(),U.mark("refresh_main_access",{ms:W0(g()-y)})}if(!Q.access)throw U.done("missing_access_error"),Error("OAuth access token is missing after refresh");function x1(){if(L?.quota?.showToasts!==!0)return;let q=E.getMain();if(!q)return;let F=(L?.accounts??[]).filter((N0)=>N0.enabled!==!1&&D0(N0)).map((N0)=>({...N0,quota:E.getFallback(N0.id,N0.access)?.quota??N0.quota})),y=g1(q.quota,L),_0;if(y)_0="main";else _0=F.find((N0)=>g1(N0.quota,L))?.id??"main";X3(q.quota,F,_0)}if(w0&&Q0(L))try{let q=g(),F=E.getMain(Q.access),y=F?.quota;if(!y)y=await E.refreshMain(Q.access),F=E.getMain(Q.access),x1();else if(E.needsRefresh(u1,n))if(E4(y)||c4(y,n))y=await E.refreshMain(Q.access),F=E.getMain(Q.access);else E.refreshMain(Q.access).then(()=>{a0().catch(()=>{}),x1()}).catch(()=>{});B0(L,{activeId:"main",route:"main",mainAccessToken:Q.access,mainRefreshToken:Q.refresh});let _0=g1(y,L)&&u4(y,n);if(U.mark("main_quota_for_routing",{ms:W0(g()-q),passes:_0,model:n,modelScopedExhausted:c4(y,n)}),!_0){let N0=g();J0=await M1(L,{includeApiRoutes:Boolean(F&&F.refreshAfter>Date.now()&&E4(F.quota)),modelId:n}),U.mark("preselect_fallback_accounts",{ms:W0(g()-N0),accounts:J0.length});let i=await T1(V,w,J0,L,void 0,U,{onSuccess:(S0)=>j0(S0.id,"fallback"),fableRequest:S});if(i)return U.done("return_preselected_fallback",{status:i.status}),C(i)}}catch(q){U.mark("main_quota_for_routing_error",{error:q instanceof Error?q.message:String(q)})}let J1=E.getMain(Q.access)?.quota;if(L?.quota?.failClosedOnUnknownQuota&&!J1&&E.isBackedOff()){let q=E.getLastApiError(),F=q?eW(q,Date.now()):"Quota API unavailable";return O0("[quota] blocked: quota API backed off (failClosed)",{nextRetryAt:q?.nextRetryAt,retryCount:q?.retryCount}),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:F}}),{status:429,headers:{"content-type":"application/json","retry-after":String(q?.nextRetryAt?Math.max(1,Math.ceil((q.nextRetryAt-Date.now())/1000)):60)}})}if(Y1(L)){if(E.needsRefresh(u1,n))try{let F=(L?.accounts??[]).filter((y)=>y.enabled!==!1&&D0(y)&&Boolean(y.access));await Promise.all([E.refreshMain(Q.access),E.refreshAllFallbacks(F)])}catch(F){O0("[quota] killswitch refresh failed",{error:F instanceof Error?F.message:String(F),backedOff:E.isBackedOff()})}J1=E.getMain(Q.access)?.quota}if(Y1(L)&&!D1(J1,L,void 0,n)){let F=_(V,w?.body)?await M1(L,{includeApiRoutes:o1(Q.access),modelId:n}):[];if(F.length>0){O0("[route] skipping main (killswitch), trying fallbacks");let C0=await T1(V,w,F,L,void 0,U,{onSuccess:(N1)=>j0(N1.id,"fallback")});if(C0)return U.done("return_killswitch_fallback",{status:C0.status}),C(C0)}let y=Date.now(),_0=(L?.accounts??[]).filter((C0)=>C0.enabled!==!1&&D0(C0)).map((C0)=>({...C0,quota:n1(C0)})),N0=v7({mainQuota:J1,requestModelId:n,storage:L}),i=OJ(J1,_0,y,N0.isScopedDriven?N0.modelId:void 0),S0=f7({retryAfterSeconds:i,...N0.isScopedDriven&&{modelName:N0.modelName}});return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:S0}}),{status:429,headers:{"content-type":"application/json","retry-after":String(i)}})}let F1=await W1(V,w,Q.access,U,"main",L,"main",S),E1=!1,r1=await z3(V,w,F1,J0,U,L,Q.access,(q)=>{E1=!0,j0(q.id,"fallback")},n,S);if(!E1)j0("main","main");return U.done("return_response",{status:r1.status}),C(r1)}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let N=await Z4("max");return{url:N.url,instructions:"Paste the authorization code here:",method:"code",callback:async($)=>{return Y4($,N.verifier,N.redirectUri,N.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let N=await Z4("console");return{url:N.url,instructions:"Paste the authorization code here:",method:"code",callback:async($)=>{let D=await Y4($,N.verifier,N.redirectUri,N.state);if(D.type==="failed")return D;return{type:"success",key:(await fetch("https://api.anthropic.com/api/oauth/claude_cli/create_api_key",{method:"POST",headers:{"Content-Type":"application/json",authorization:`Bearer ${D.access}`}}).then((G)=>G.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}},SN=e7;export{v7 as resolveScopedDrivenBlock,f7 as formatKillswitchBlockMessage,SN as AnthropicAuthPlugin};
|
|
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};
|