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