@cortexkit/opencode-anthropic-auth 1.20.0 → 1.22.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.
Files changed (36) hide show
  1. package/README.md +42 -8
  2. package/dist/cli.js +1 -1
  3. package/dist/effort-history.d.ts +58 -0
  4. package/dist/fable-fallback.d.ts +6 -7
  5. package/dist/{index-hmebes3f.js → index-7f57ewkp.js} +1 -1
  6. package/dist/{index-vkecgsm3.js → index-8aga2zwv.js} +1 -1
  7. package/dist/{index-jjx6dbj3.js → index-926t2bzc.js} +1 -1
  8. package/dist/{index-j3323dyj.js → index-bx5hsgf8.js} +1 -1
  9. package/dist/{index-nqs7chg0.js → index-cgez4m0h.js} +1 -1
  10. package/dist/index-d3f8g6ve.js +428 -0
  11. package/dist/index-sh51yqxs.js +2 -0
  12. package/dist/index.d.ts +0 -38
  13. package/dist/index.js +23 -21
  14. package/dist/{logger-8b9bz0g8.js → logger-jrkranbz.js} +1 -1
  15. package/dist/request-policy.d.ts +25 -0
  16. package/dist/rpc/port-file.js +1 -1
  17. package/dist/rpc/protocol.d.ts +15 -0
  18. package/dist/rpc/protocol.js +1 -1
  19. package/dist/rpc/rpc-client.js +1 -1
  20. package/dist/rpc/rpc-dir.js +1 -1
  21. package/dist/sidebar-state.d.ts +2 -1
  22. package/dist/sidebar-state.js +1 -1
  23. package/dist/transform.d.ts +17 -1
  24. package/dist/tui/command-dialogs.d.ts +2 -8
  25. package/dist/tui-preferences.js +1 -1
  26. package/package.json +4 -4
  27. package/src/rpc/protocol.ts +17 -0
  28. package/src/sidebar-state.ts +16 -1
  29. package/src/tui/command-dialogs.tsx +40 -41
  30. package/src/tui-compiled/rpc/protocol.ts +17 -0
  31. package/src/tui-compiled/sidebar-state.ts +16 -1
  32. package/src/tui-compiled/tui/command-dialogs.tsx +49 -33
  33. package/src/tui-compiled/tui.tsx +7 -3
  34. package/src/tui.tsx +17 -3
  35. package/dist/index-afyr2g77.js +0 -2
  36. package/dist/index-ebq5g321.js +0 -427
package/dist/index.js CHANGED
@@ -1,31 +1,33 @@
1
- import{a as N3,f as YW,h as W3,i as $3}from"./index-afyr2g77.js";import{$ as dN,$a as hW,$b as gJ,A as b1,Aa as F1,Ab as IJ,B as h$,Ba as GJ,Bb as iW,C as N$,Ca as S1,Cb as $W,D as W$,Da as OJ,Db as JW,E as $$,Ea as RW,Eb as xJ,F as y$,Fa as XJ,Fb as dW,G as cN,Ga as VJ,Gb as nW,H as uN,Ha as zJ,Hb as fJ,I as YN,Ia as _J,Ib as oW,J as z0,Ja as vW,Jb as RJ,K as T1,Ka as KJ,Kb as rW,L as lN,La as QJ,Lb as WN,M as g$,Ma as kW,Mb as sW,N as m$,Na as p1,Nb as X$,O as y0,Oa as c1,Ob as _N,P as x,Pa as VN,Pb as vJ,Q as p$,Qa as HJ,Qb as kJ,Ra as aN,Rb as hJ,S as E1,Sa as DJ,Sb as yJ,T as c$,Ta as J$,Tb as V$,U as u$,Ua as Z$,Ub as z$,V as jN,Va as KW,Vb as _$,W as GN,Wa as tN,Wb as K$,X as l$,Xa as Y$,Xb as d0,Y as i$,Ya as j$,Yb as Q$,Z as iN,Za as G$,Zb as aW,_ as d$,_a as O$,_b as bJ,aa as n$,ab as eN,ac as mJ,ba as o$,bb as UJ,bc as q4,ca as r$,cb as yW,cc as pJ,da as s$,db as zN,dc as tW,ea as a$,eb as bW,ec as cJ,fa as t$,fb as gW,fc as uJ,ga as ON,gb as LJ,gc as eW,ha as MW,hb as PJ,ia as e$,ib as mW,ic as lJ,ja as nN,jb as pW,ka as NJ,kb as wJ,kc as N4,la as oN,lb as cW,lc as l1,ma as rN,mb as BJ,mc as iJ,na as WJ,nb as CJ,nc as dJ,oa as Q1,ob as TJ,oc as W4,pa as q1,pb as EJ,pc as $4,qa as IW,qb as qJ,qc as nJ,ra as $J,rb as FJ,rc as J4,sa as JJ,sb as SJ,sc as $1,ta as sN,tb as AJ,tc as oJ,ua as ZJ,ub as NW,uc as u1,v as a4,va as YJ,vb as uW,vc as rJ,w as t4,wa as jJ,wb as WW,wc as ZW,x as JN,xa as xW,xb as lW,xc as sJ,y as ZN,ya as fW,yb as MJ,yc as Q4,z as e4,za as XN,zb as W1,zc as aJ}from"./index-ebq5g321.js";import{Bc as b$,Kc as M,Lc as X0}from"./index-vkecgsm3.js";import{Nc as I4}from"./index-jjx6dbj3.js";import{Pc as tJ}from"./index-j3323dyj.js";import{Rc as eJ}from"./index-hmebes3f.js";import"./index-nqs7chg0.js";import{randomUUID as gN}from"node:crypto";var NN="cache-diagnosis-2026-04-07",M3="MC-CACHE-DIAG ",I3=1000,x3=300000,f3={turn:!1,start:!0,prewarm_cachekeep:!0},R3=1000;class QW{entries=new Map;previousFor(N){return this.entries.get(N)??null}capture(N,W,$){KW(this.entries,N,{messageId:W,receivedAt:$},I3)}}class HW{hashes=new Map;capture(N,W){if(this.hashes.has(N))return null;return KW(this.hashes,N,!0,R3),`MC-CACHE-DIAG-BETAS ${JSON.stringify({hash:N,betas:[...W].sort()})}`}}function TN(N,W,$){let Y=N.get(W);if(Y)N.set($,Y)}async function DW(N,W,$,Y,G){let j=new Headers(N.headers);if(j.set("retry-after",String(Q4(W,$))),Y)return await N.body?.cancel().catch(()=>{}),j.set("content-type","application/json"),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account five-hour quota resets shortly; retaining session affinity."}}),{status:429,headers:j});let z=new Response(N.body,{status:N.status,statusText:N.statusText,headers:j});return TN(G,N,z),z}function EN(N,W){N.diagnostics={previous_message_id:W}}function G1(N){return N!=null&&typeof N==="object"&&!Array.isArray(N)}function v3(N){return G1(N)&&N.type==="ephemeral"}function H4(N,W){if(!v3(N))return;W.push(N.ttl==="1h"?"1h":"5m")}function K4(N,W){if(!Array.isArray(N))return;for(let $ of N)if(G1($))H4($.cache_control,W)}function qN(N){if(!G1(N))return null;let W=[];if(H4(N.cache_control,W),K4(N.system,W),Array.isArray(N.messages)){for(let $ of N.messages)if(G1($))K4($.content,W)}return W.at(-1)??null}function k3(N){if(!Object.hasOwn(N,"diagnostics"))return{state:"absent"};let W=N.diagnostics;if(W===null)return{state:"server_null"};if(!G1(W))return null;if(!Object.hasOwn(W,"cache_miss_reason"))return null;let $=W.cache_miss_reason;if($===null)return{state:"pending"};if(!G1($)||typeof $.type!=="string"||!$.type)return null;let Y=$.cache_missed_input_tokens;if(Y!==void 0&&typeof Y!=="number")return null;return{state:"populated",missReason:$.type,cacheMissedInputTokens:Y}}function e1(N,W){let $=N[W];return typeof $==="number"&&Number.isFinite($)&&$>=0?$:null}function D4(N){if(typeof N.source!=="string"||N.source.length===0||typeof N.accountId!=="string"||N.accountId.length===0||typeof N.synthetic!=="boolean"||typeof N.betasHash!=="string"||N.betasHash.length===0)return{};let W=f3[N.source];if(W!==void 0&&W!==N.synthetic)N.onWarning?.(`cache diagnostics source/synthetic mismatch: source=${N.source} expected=${W} actual=${N.synthetic}`);let $=Math.trunc(N.receivedAt);if(!Number.isFinite(N.receivedAt)||$!==N.receivedAt)return{};if(!G1(N.message))return{};let Y=N.message.id,G=N.message.model,j=N.message.usage;if(typeof Y!=="string"||Y.length===0)return{};if(typeof G!=="string"||G.length===0||!G1(j))return{};let z=e1(j,"input_tokens"),U=e1(j,"cache_read_input_tokens"),q=e1(j,"cache_creation_input_tokens"),c=j.cache_creation;if(z===null||U===null||q===null||!G1(c))return{};let n=e1(c,"ephemeral_5m_input_tokens"),a=e1(c,"ephemeral_1h_input_tokens");if(n===null||a===null)return{};let i=k3(N.message);if(!i)return{};let V0={v:2,source:N.source,account_id:N.accountId,synthetic:N.synthetic,betas_hash:N.betasHash,session_id:N.request.sessionId,ts_ms_received:$,model:G,is_subagent:N.request.isSubagent,ttl_sent:N.request.ttlSent,cache_read:U,cache_creation:q,input_tokens:z,ephemeral_5m_tokens:n,ephemeral_1h_tokens:a,message_id:Y,previous_message_id:N.request.previousMessageId,diag_state:i.state};if(i.missReason!==void 0)V0.miss_reason=i.missReason;if(i.cacheMissedInputTokens!==void 0)V0.cache_missed_input_tokens=i.cacheMissedInputTokens;if(N.requestedModel!==void 0&&N.requestedModel!==G)V0.requested_model=N.requestedModel;let _0=i.missReason==="previous_message_not_found"&&N.request.previousMessageId!==null&&N.request.previousMessageReceivedAt!==void 0&&N.receivedAt-N.request.previousMessageReceivedAt<x3&&N.receivedAt>=N.request.previousMessageReceivedAt?{messageId:Y,previousMessageId:N.request.previousMessageId}:void 0;return{record:V0,messageId:Y,..._0?{canary:_0}:{}}}function U4(N){return`${M3}${JSON.stringify(N)}`}var L4="claude-opus-4-8",h3=10,y3=128,b3=86400000;function N1(N){if(typeof N!=="string")return null;if(d0(N))return"opus-5";if(N===WN||N.startsWith(`${WN}-`))return"fable-5";return null}function k1(N){return N1(N)!==null}function g3(N,W){let $=N1(W);return $?`${N}\x00${$}`:null}function m3(N){try{let W=JSON.parse(N);return typeof W.model==="string"?{body:W,model:W.model}:null}catch{return null}}class UW{now;recoveries=new Map;nextCycle=1;constructor(N=Date.now){this.now=N}prune(){let N=this.now();for(let[W,$]of this.recoveries)if(N-$.updatedAt>=b3)this.recoveries.delete(W);while(this.recoveries.size>y3){let W=this.recoveries.keys().next().value;if(typeof W!=="string")break;this.recoveries.delete(W)}}plan(N,W){if(!N||typeof W!=="string")return null;let $=m3(W);if(!$||!k1($.model))return null;let Y=g3(N,$.model);if(!Y)return null;this.prune();let G=this.recoveries.get(Y);if(!G||G.remaining<=0)return{sessionId:N,recoveryKey:Y,requestedModel:$.model,effectiveModel:$.model,bodyText:W,downgraded:!1,standbyCacheAnchor:G?.standbyCacheAnchor};return G.updatedAt=this.now(),G.nextRequestSequence++,this.recoveries.delete(Y),this.recoveries.set(Y,G),$.body.model=L4,{sessionId:N,recoveryKey:Y,requestedModel:G.model,effectiveModel:L4,bodyText:JSON.stringify($.body),downgraded:!0,cycle:G.cycle,cacheAccountId:G.cacheAccountId,standbyCacheAnchor:G.standbyCacheAnchor,requestSequence:G.nextRequestSequence}}recoveryAccount(N){if(N.cycle===void 0)return N.cacheAccountId;let W=this.recoveries.get(N.recoveryKey);return W?.cycle===N.cycle?W.cacheAccountId:N.cacheAccountId}bindRecoveryAccount(N,W){if(!N.downgraded||N.cycle===void 0)return!1;let $=this.recoveries.get(N.recoveryKey);if(!$||$.cycle!==N.cycle)return!1;if($.cacheAccountId===W)return!1;return $.cacheAccountId=W,$.standbyCacheAnchor=void 0,$.standbyAnchorSequence=0,$.updatedAt=this.now(),N.cacheAccountId=W,N.standbyCacheAnchor=void 0,!0}activate(N,W){if(N.downgraded||!k1(N.requestedModel))return this.remaining(N);let $={model:N.requestedModel,remaining:h3,cycle:this.nextCycle++,cacheAccountId:W,standbyCacheAnchor:N.standbyCacheAnchor,nextRequestSequence:0,standbyAnchorSequence:0,updatedAt:this.now()};return this.recoveries.delete(N.recoveryKey),this.recoveries.set(N.recoveryKey,$),this.prune(),$.remaining}complete(N,W){if(!N.downgraded||N.cycle==null||N.completed)return{counted:!1,remaining:this.remaining(N)};N.completed=!0;let $=this.recoveries.get(N.recoveryKey);if(!$||$.cycle!==N.cycle||$.remaining<=0)return{counted:!1,remaining:$?.remaining??0};if($.remaining--,W&&(!$.cacheAccountId||W.oauthAccountId===$.cacheAccountId)&&N.requestSequence!=null&&N.requestSequence>=$.standbyAnchorSequence)$.standbyCacheAnchor=W,$.standbyAnchorSequence=N.requestSequence;return $.updatedAt=this.now(),this.recoveries.delete(N.recoveryKey),this.recoveries.set(N.recoveryKey,$),{counted:!0,remaining:$.remaining}}remaining(N){return this.prune(),this.recoveries.get(N.recoveryKey)?.remaining??0}}function O1(N){return typeof N==="object"&&N!==null}function p3(N){if(Array.isArray(N))return N;if(O1(N)&&Array.isArray(N.data))return N.data;return[]}function B4(N){if(!O1(N)||!O1(N.info))return;return N.info}function P4(N){let W=B4(N);return typeof W?.role==="string"?W.role:void 0}function c3(N){let W=B4(N);return typeof W?.id==="string"?W.id:void 0}function LW(N){if(!O1(N)||!O1(N.info))return null;let W=N.info,$=O1(W.model)?W.model:void 0,Y=typeof W.agent==="string"?W.agent:void 0,G=typeof $?.providerID==="string"?$.providerID:typeof W.providerID==="string"?W.providerID:void 0,j=typeof $?.modelID==="string"?$.modelID:typeof $?.id==="string"?$.id:typeof W.modelID==="string"?W.modelID:void 0,z=typeof $?.variant==="string"?$.variant:typeof W.variant==="string"?W.variant:void 0;if(!Y&&(!G||!j)&&!z)return null;let U={};if(Y)U.agent=Y;if(G&&j)U.model={providerID:G,modelID:j};if(z)U.variant=z;return U}function PW(N,W){return{agent:N.agent??W.agent,model:N.model??W.model,variant:N.variant??W.variant,latestAssistantMessageId:N.latestAssistantMessageId??W.latestAssistantMessageId,latestUserMessageId:N.latestUserMessageId??W.latestUserMessageId}}function w4(N){return Boolean(N.agent&&N.model&&N.variant)}async function FN(N,W){if(!N||!W)return null;let $=N,Y=[];if(typeof $.session?.messages==="function")try{Y=p3(await Promise.resolve($.session.messages({path:{id:W},query:{limit:100}})))}catch{Y=[]}let G,j;for(let U of Y){let q=c3(U);if(!q)continue;let c=P4(U);if(c==="assistant"&&(!G||q>G))G=q;if(c==="user"&&(!j||q>j))j=q}let z={latestAssistantMessageId:G,latestUserMessageId:j};for(let U=Y.length-1;U>=0;U--){if(P4(Y[U])!=="assistant")continue;let q=LW(Y[U]);if(!q)continue;if(z=PW(z,q),w4(z))return z}for(let U=Y.length-1;U>=0;U--){let q=LW(Y[U]);if(!q)continue;if(z=PW(z,q),w4(z))return z}if(typeof $.session?.get==="function")try{let U=await Promise.resolve($.session.get({path:{id:W}})),q=O1(U)&&O1(U.data)?U.data:O1(U)?U:void 0,c=q?LW({info:q}):null;if(c)z=PW(z,c)}catch{}if(!z.agent&&!z.model&&!z.variant&&!z.latestAssistantMessageId&&!z.latestUserMessageId)return null;return z}var C4="[lane start] — automated cache warm; no response needed.",SN="x-cortexkit-lane-start",u3=1000;function l3(N){if(!N||typeof N!=="object")return!1;let W=N;return W.type==="text"&&W.text===C4&&W.synthetic===!0}async function T4(N,W){let $=N?.session;if(typeof $?.promptAsync!=="function")throw Error("OpenCode plugin client does not support session.promptAsync");let Y=await FN(N,W),G={noReply:!1,parts:[{type:"text",text:C4,synthetic:!0}]};if(Y?.agent)G.agent=Y.agent;if(Y?.model)G.model=Y.model;if(Y?.variant)G.variant=Y.variant;await Promise.resolve($.promptAsync({path:{id:W},body:G}))}class wW{#N=new Map;observeSyntheticMessage(N){if(!N.parts.some(l3))return!1;let W=`${N.sessionId}\x00${N.messageId}`;if(!this.#N.has(W)&&this.#N.size>=u3){let $=this.#N.keys().next().value;if($!==void 0)this.#N.delete($)}return this.#N.set(W,N.sessionId),!0}markHeaders(N){let W=`${N.sessionId}\x00${N.messageId}`;if(!this.#N.has(W))return!1;return this.#N.delete(W),N.headers[SN]="1",!0}clearSession(N){for(let[W,$]of this.#N)if($===N)this.#N.delete(W)}}var AN=new Map,E4=new Map;function F4(N,W,$){let Y=q4(N),G=E4.get($.slot);if(G&&G!==Y){let U=AN.get(G);if(U){if(U.slots.delete($.slot),U.slots.size===0)U.manager.stop(),AN.delete(G)}}E4.set($.slot,Y);let j=AN.get(Y);if(j)return j.slots.add($.slot),$.rebind(j.manager),j.manager;let z=W();return AN.set(Y,{manager:z,slots:new Set([$.slot])}),z}var _1=[],i3=1,BW=0,S4=new Map;function A4(N,W){if(_1.push({id:i3++,type:"open-dialog",payload:N,sessionId:W}),_1.length>100)_1=_1.slice(_1.length-100)}function M4(N=0,W){let $=Date.now();if(BW=$,W!==void 0)S4.set(W,$);let Y=(G)=>W===void 0||G.sessionId===void 0||G.sessionId===W;if(N>0)_1=_1.filter((G)=>{if(G.id>N)return!0;if(W===void 0)return!1;return G.sessionId!==W});return _1.filter((G)=>G.id>N&&Y(G))}function CW(N){let W=Date.now();if(N!==void 0){let $=S4.get(N)??0;return $>0&&W-$<3000}return BW>0&&W-BW<3000}import{randomBytes as d3,timingSafeEqual as n3}from"node:crypto";import{unlink as o3}from"node:fs/promises";import{createServer as r3}from"node:http";import{join as s3}from"node:path";function a3(N){return new Promise((W,$)=>{let Y=[],G=0;N.on("data",(j)=>{if(G+=j.length,G>1e6){N.destroy(),$(Error("body too large"));return}Y.push(j)}),N.on("end",()=>W(Buffer.concat(Y).toString("utf8"))),N.on("error",$)})}function t3(N,W){if(!N?.startsWith("Bearer "))return!1;let $=Buffer.from(N.slice(7)),Y=Buffer.from(W);return $.length===Y.length&&n3($,Y)}async function x4(N){let W=d3(32).toString("hex"),$=r3((j,z)=>{Y(j,z)});async function Y(j,z){let U=(q,c)=>{z.writeHead(q,{"content-type":"application/json"}),z.end(JSON.stringify(c))};try{let q=j.url??"";if(j.method==="GET"&&q==="/health")return U(200,{ok:!0});if(j.method!=="POST"||!q.startsWith("/rpc/"))return U(404,{error:"not found"});if(!t3(j.headers.authorization,W))return U(401,{error:"unauthorized"});let c=q.slice(5),n=JSON.parse(await a3(j)||"{}");if(c==="pending-notifications"){let a=N.drain(Number(n.lastReceivedId??0),typeof n.sessionId==="string"?n.sessionId:void 0);return U(200,{messages:a})}if(c==="apply"){let a=await N.apply(n);return U(200,a)}return U(404,{error:"unknown method"})}catch(q){if(!z.headersSent&&!z.writableEnded&&!z.destroyed)U(500,{error:q instanceof Error?q.message:String(q)})}}let G=await new Promise((j,z)=>{$.on("error",z),$.listen(0,"127.0.0.1",()=>{let U=$.address();if(U&&typeof U==="object")j(U.port);else z(Error("no port"))})});$.unref();try{await I4(N.dir,{port:G,token:W,pid:process.pid})}catch(j){throw await new Promise((z)=>$.close(()=>z())),j}return{port:G,token:W,async stop(){await new Promise((j)=>$.close(()=>j())),await o3(s3(N.dir,`port-${process.pid}.json`)).catch(()=>{})}}}var v4="server-side-fallback-2026-07-01",k4="⁠",MN="cortexkit-server-fallback-v1:";function n0(N){return N!==null&&typeof N==="object"&&!Array.isArray(N)?N:void 0}function h1(N,W){let $=N?.[W];return typeof $==="string"?$:void 0}function y1(N){return typeof N==="string"&&N.length>0&&N.length<=128&&/^claude-[a-z0-9-]+$/i.test(N)}function e3(N){return`${MN}${N.fromModel}|${N.toModel}`}function N7(N){if(typeof N!=="string"||!N.startsWith(MN))return null;let W=N.slice(MN.length),$=W.indexOf("|");if($<=0||$!==W.lastIndexOf("|"))return null;let Y=W.slice(0,$),G=W.slice($+1);if(!y1(Y)||!y1(G))return null;return{fromModel:Y,toModel:G}}function W7(N){if(N.type!=="fallback")return null;let W=h1(n0(N.from),"model"),$=h1(n0(N.to),"model");if(!y1(W)||!y1($))return null;return{fromModel:W,toModel:$}}function $7(N){return{type:"fallback",from:{model:N.fromModel},to:{model:N.toModel}}}function J7(N,W){let $=0,Y=0;if(!Array.isArray(N.messages))return{restoredMarkers:$,droppedMarkers:Y};for(let G of N.messages){let j=n0(G);if(j?.role!=="assistant"||!Array.isArray(j.content))continue;let z=[];for(let U of j.content){let q=n0(U);if(!(q?.type==="thinking"&&(q.thinking===k4||q.thinking==="")&&typeof q.signature==="string"&&q.signature.startsWith(MN))){z.push(U);continue}let n=N7(q.signature);if(W&&n)z.push($7(n)),$++;else Y++}j.content=z}return{restoredMarkers:$,droppedMarkers:Y}}function h4(N){return N?.trim().toLowerCase()==="legacy"?"legacy":"server"}function y4(N,W){let $=W&&k1(N.model),Y=J7(N,$);if($)N.fallbacks="default";else if(N.fallbacks==="default")delete N.fallbacks;return{enabled:$,...Y}}function Z7(N){let W,$=[];for(let G of N.split(/\r?\n/))if(G.startsWith("event:"))W=G.slice(6).trim();else if(G.startsWith("data:")){let j=G.slice(5);$.push(j.startsWith(" ")?j.slice(1):j)}let Y=$.join(`
2
- `);if(!Y||Y==="[DONE]")return{event:W};try{return{event:W,data:n0(JSON.parse(Y))}}catch{return{event:W}}}function f4(N){let W=N.indexOf(`
1
+ import{a as vZ,f as v$,h as hZ,i as kZ}from"./index-sh51yqxs.js";import{$a as j4,$b as NZ,$c as g7,A as U7,Aa as w1,Ab as s8,Ac as wZ,B as L7,Ba as Y1,Bb as a8,Bc as nJ,C as M4,Ca as SJ,Cb as t8,Cc as PZ,D as I4,Da as v8,Db as e8,Dc as TZ,E as Q7,Ea as h8,Eb as $Z,Ec as oJ,F as a1,Fa as A$,Fb as I$,G as K8,Ga as k8,Gb as gJ,Gc as FZ,H as _7,Ha as b8,Hb as x$,I as B7,Ia as p3,Ib as yJ,Ic as rJ,J as w7,Ja as AJ,Jb as JZ,Jc as Y4,K as H8,Ka as qJ,Kb as V1,Kc as SZ,L as B$,La as v4,Lb as ZZ,Lc as AZ,M as w$,Ma as CJ,Mb as mJ,Mc as sJ,N as h0,Na as y1,Nb as E$,Nc as aJ,O as W0,Oa as c3,Ob as R$,Oc as qZ,P as b1,Pa as A1,Pb as jZ,Pc as tJ,Q as P$,Qa as g8,Qb as pJ,Qc as y0,R as D8,Ra as MJ,Rb as cJ,Rc as CZ,S as U8,Sa as y8,Sb as WZ,Sc as W4,T as L8,Ta as m8,Tb as lJ,Tc as MZ,U as R0,Ua as p8,Ub as YZ,Uc as f$,V as x4,Va as c8,Vb as dJ,Vc as IZ,W as BJ,Wa as IJ,Wb as A4,Wc as B3,X as x,Xa as xJ,Xb as jJ,Xc as xZ,Y as wJ,Ya as l8,Yb as uJ,Yc as k7,Z as Q8,Za as EJ,Zb as M7,Zc as EZ,_ as g1,_a as Z4,_b as VZ,_c as b7,aa as _8,ab as h4,ac as GZ,ba as W1,bb as d8,bc as XZ,ca as B8,cb as q$,cc as zZ,da as w8,db as P7,dc as I7,ea as P8,eb as u8,ec as k1,fa as E4,fb as T7,fc as S1,ga as R4,gb as F7,gc as OZ,ha as T8,hb as d$,hc as x7,ia as F8,ib as k4,ic as E7,ja as T$,jb as S7,jc as R7,ka as S8,kb as A7,kc as Z1,la as F$,lb as q7,lc as f7,ma as A8,mb as C7,mc as v7,na as q8,nb as RJ,nc as r$,oa as C8,ob as C$,oc as h7,pa as M8,pb as i8,pc as iJ,qa as I8,qb as fJ,qc as KZ,ra as x8,rb as b4,rc as HZ,sa as f4,sb as M$,sc as DZ,ta as PJ,tb as vJ,tc as q4,ua as E8,ub as n8,uc as UZ,v as LJ,va as R8,vb as o8,vc as g4,w as z8,wa as S$,wb as hJ,wc as LZ,x as O8,xa as TJ,xb as kJ,xc as QZ,y as QJ,ya as FJ,yb as r8,yc as _Z,z as _J,za as f8,zb as bJ,zc as BZ}from"./index-d3f8g6ve.js";import{bd as X8,kd as S,ld as L0}from"./index-8aga2zwv.js";import{nd as o3}from"./index-926t2bzc.js";import{pd as RZ}from"./index-bx5hsgf8.js";import{rd as fZ}from"./index-7f57ewkp.js";import"./index-cgez4m0h.js";import{randomUUID as U$}from"node:crypto";var S4="cache-diagnosis-2026-04-07",P5="MC-CACHE-DIAG ",T5=1000,F5=300000,S5={turn:!1,start:!0,prewarm_cachekeep:!0},A5=1000;class u${entries=new Map;previousFor($){return this.entries.get($)??null}capture($,J,j){d$(this.entries,$,{messageId:J,receivedAt:j},T5)}}class i${hashes=new Map;capture($,J){if(this.hashes.has($))return null;return d$(this.hashes,$,!0,A5),`MC-CACHE-DIAG-BETAS ${JSON.stringify({hash:$,betas:[...J].sort()})}`}}function t4($,J,j){let Y=$.get(J);if(Y)$.set(j,Y)}async function n$($,J,j,Y,G){let K=new Headers($.headers);if(K.set("retry-after",String(B3(J,j))),Y)return await $.body?.cancel().catch(()=>{}),K.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:K});let H=new Response($.body,{status:$.status,statusText:$.statusText,headers:K});return t4(G,$,H),H}function e4($,J){$.diagnostics={previous_message_id:J}}function Q1($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function q5($){return Q1($)&&$.type==="ephemeral"}function w3($,J){if(!q5($))return;J.push($.ttl==="1h"?"1h":"5m")}function _3($,J){if(!Array.isArray($))return;for(let j of $)if(Q1(j))w3(j.cache_control,J)}function $$($){if(!Q1($))return null;let J=[];if(w3($.cache_control,J),_3($.system,J),Array.isArray($.messages)){for(let j of $.messages)if(Q1(j))_3(j.content,J)}return J.at(-1)??null}function C5($){if(!Object.hasOwn($,"diagnostics"))return{state:"absent"};let J=$.diagnostics;if(J===null)return{state:"server_null"};if(!Q1(J))return null;if(!Object.hasOwn(J,"cache_miss_reason"))return null;let j=J.cache_miss_reason;if(j===null)return{state:"pending"};if(!Q1(j)||typeof j.type!=="string"||!j.type)return null;let Y=j.cache_missed_input_tokens;if(Y!==void 0&&typeof Y!=="number")return null;return{state:"populated",missReason:j.type,cacheMissedInputTokens:Y}}function F4($,J){let j=$[J];return typeof j==="number"&&Number.isFinite(j)&&j>=0?j:null}function P3($){if(typeof $.source!=="string"||$.source.length===0||typeof $.accountId!=="string"||$.accountId.length===0||typeof $.synthetic!=="boolean"||typeof $.betasHash!=="string"||$.betasHash.length===0)return{};let J=S5[$.source];if(J!==void 0&&J!==$.synthetic)$.onWarning?.(`cache diagnostics source/synthetic mismatch: source=${$.source} expected=${J} actual=${$.synthetic}`);let j=Math.trunc($.receivedAt);if(!Number.isFinite($.receivedAt)||j!==$.receivedAt)return{};if(!Q1($.message))return{};let Y=$.message.id,G=$.message.model,K=$.message.usage;if(typeof Y!=="string"||Y.length===0)return{};if(typeof G!=="string"||G.length===0||!Q1(K))return{};let H=F4(K,"input_tokens"),z=F4(K,"cache_read_input_tokens"),q=F4(K,"cache_creation_input_tokens"),l=K.cache_creation;if(H===null||z===null||q===null||!Q1(l))return{};let h=F4(l,"ephemeral_5m_input_tokens"),d=F4(l,"ephemeral_1h_input_tokens");if(h===null||d===null)return{};let b=C5($.message);if(!b)return{};let t={v:2,source:$.source,account_id:$.accountId,synthetic:$.synthetic,betas_hash:$.betasHash,session_id:$.request.sessionId,ts_ms_received:j,model:G,is_subagent:$.request.isSubagent,ttl_sent:$.request.ttlSent,cache_read:z,cache_creation:q,input_tokens:H,ephemeral_5m_tokens:h,ephemeral_1h_tokens:d,message_id:Y,previous_message_id:$.request.previousMessageId,diag_state:b.state};if(b.missReason!==void 0)t.miss_reason=b.missReason;if(b.cacheMissedInputTokens!==void 0)t.cache_missed_input_tokens=b.cacheMissedInputTokens;if($.requestedModel!==void 0&&$.requestedModel!==G)t.requested_model=$.requestedModel;let G0=b.missReason==="previous_message_not_found"&&$.request.previousMessageId!==null&&$.request.previousMessageReceivedAt!==void 0&&$.receivedAt-$.request.previousMessageReceivedAt<F5&&$.receivedAt>=$.request.previousMessageReceivedAt?{messageId:Y,previousMessageId:$.request.previousMessageId}:void 0;return{record:t,messageId:Y,...G0?{canary:G0}:{}}}function T3($){return`${P5}${JSON.stringify($)}`}import{createHash as M5}from"node:crypto";var A3=512,I5=1024,t$=32,e$=32,q3="[A-Za-z0-9_-]{1,128}",x5="<cortexkit-internal-effort ",E5="<cortexkit-internal-effort-plan ",C3=/^\s*(?:§[0-9]+§\s*)+$/,J$={low:"l",medium:"m",high:"h",xhigh:"x",max:"z"},M3=Object.fromEntries(Object.entries(J$).map(([$,J])=>[J,$])),$J="<cortexkit-internal-effort-v2 ",n1="x-cortexkit-effort-plan";class v0 extends Error{constructor($){super($);this.name="EffortMarkerCorrelationError"}}function i1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function o$($){return $?.info?.role==="user"&&$.info.model?.providerID==="anthropic"&&S1($.info.model.modelID)}function F3($){return $.parts?.some((J)=>{if(J.type==="text")return J.ignored!==!0&&J.text!=="";if(J.type==="file")return J.mime!=="text/plain"&&J.mime!=="application/x-directory";return J.type==="compaction"||J.type==="subtask"})??!1}function JJ($){return M5("sha256").update($).digest("hex")}function R5($){return JJ(`scope:${$}`).slice(0,e$)}function I3($){return JJ(`cortexkit-effort-v2:${$}`).slice(0,t$)}function f5($,J,j){let Y=J$[j],G=`transition:${$}:${J}:${Y}`;return`${$J}scope="${$}" boundary="${J}" effort="${Y}" check="${I3(G)}"/>`}function v5($){let J=$.match(new RegExp(`^${$J}scope="([0-9a-f]{${e$}})" boundary="(${q3})" effort="([lmhxz])" check="([0-9a-f]{${t$}})"/>$`));if(!J)return null;let[,j,Y,G,K]=J,H=M3[G??""];if(!j||!Y||!G||!K||!H)return null;let z=`transition:${j}:${Y}:${G}`;if(I3(z)!==K)return null;return{scope:j,boundary:Y,effort:H,token:$}}function s$($){return $.trim()===""||C3.test($)}function S3(){return new RegExp(`(?:${E5}nonce="[^"]+" baseline="[^"]+" count="[^"]+" sig="[0-9a-f]+"/>|${x5}nonce="[^"]+" effort="[^"]+" sig="[0-9a-f]+"/>)`,"g")}function h5(){return new RegExp(`${$J}scope="[0-9a-f]{${e$}}" boundary="${q3}" effort="[lmhxz]" check="[0-9a-f]{${t$}}"/>`,"g")}function x3($,J){let j=0,Y=$,G=$.replace(S3(),"");if(G!==$&&C3.test(G))j+=[...$.matchAll(S3())].length,Y=G;return Y=Y.replace(h5(),(K)=>{let H=v5(K);if(!H)return K;return J?.(H),j++,""}),{text:Y,removed:j}}function k5($){for(let J of $){if(!Array.isArray(J.parts))continue;J.parts=J.parts.flatMap((j)=>{if(j.type!=="text"||typeof j.text!=="string"||!j.text.includes("<cortexkit-internal-effort"))return[j];let Y=x3(j.text);if(Y.removed===0)return[j];if(s$(Y.text))return[];return j.text=Y.text,[j]})}}function a$($,J,j,Y){let G=`plan:${$}:${J$[J]}:${j.toString(36)}`;return JJ([G,...Y].join(`
2
+ `))}function b5($){return["v2",$.scope,J$[$.baseline],$.markerCount.toString(36),$.digest].join(".")}function g5($){if(!$)return null;let J=$.match(/^v2\.([0-9a-f]{32})\.([lmhxz])\.([0-9a-z]+)\.([0-9a-f]{64})$/);if(!J)return null;let[,j,Y,G,K]=J,H=M3[Y??""],z=Number.parseInt(G??"",36);if(!j||!H||!K||!Number.isSafeInteger(z)||z<0||z>A3)return null;return{scope:j,baseline:H,markerCount:z,digest:K}}function E3($){let J=$.findLast((h)=>h.info?.role==="user");if(!J||!o$(J))return null;if(k5($),!Array.isArray(J.parts)||!F3(J))return null;let j=J.info?.sessionID,Y=J.info?.id;if(typeof j!=="string"||typeof Y!=="string")throw new v0("Cannot correlate Fable 5.1 effort markers without session and message IDs");let G=R5(j),K=$.findLast((h)=>h.info?.role==="user"&&h.parts?.some((d)=>d.type==="compaction")),H=typeof K?.info?.id==="string"?K.info.id:void 0,z,q;if(K&&o$(K))z=r$(K.info?.model?.variant)??"high",q=z;let l=[];for(let h of $){let d=h.info;if(d?.role!=="user")continue;if(H&&typeof d.id==="string"&&d.id<=H)continue;if(!o$(h)||!F3(h))continue;let b=r$(d.model?.variant)??"high";if(!z){z=b,q=b;continue}if(b===q)continue;if(l.length>=A3)throw new v0("Too many Fable 5.1 effort changes in the active context");if(!Array.isArray(h.parts)||typeof d.id!=="string")throw new v0("Cannot mark a Fable 5.1 effort change without message identity");let t=f5(G,d.id,b);h.parts.push({type:"text",text:t}),l.push(t),q=b}if(!z)return null;return{scope:G,baseline:z,markerCount:l.length,digest:a$(G,z,l.length,l),sessionId:j,messageId:Y}}function y5($){let J=Array.isArray($.messages)?$.messages:[],j=[];for(let Y of J){let G=[];if(!i1(Y)||Y.role!=="user"){j.push({value:Y,transitions:G});continue}let K=(H)=>x3(H,(z)=>G.push(z));if(typeof Y.content==="string"){let H=K(Y.content);Y.content=H.removed>0&&s$(H.text)?"":H.text}else if(Array.isArray(Y.content))Y.content=Y.content.flatMap((H)=>{if(!i1(H)||H.type!=="text"||typeof H.text!=="string")return[H];let z=K(H.text);if(z.removed>0&&s$(z.text))return[];return[{...H,text:z.text}]});j.push({value:Y,transitions:G})}return $.messages=j.map((Y)=>Y.value),{messages:j}}function R3($,J,j){if(!Array.isArray($.messages))return{found:0,inserted:0};let Y=g5(j);if(j&&!Y)throw new v0("Missing or invalid internal Fable 5.1 effort request plan");if(!$.messages.some((b)=>{if(!i1(b)||b.role!=="user")return!1;if(typeof b.content==="string"&&b.content.includes("<cortexkit-internal-effort"))return!0;return Array.isArray(b.content)&&b.content.some((t)=>i1(t)&&t.type==="text"&&typeof t.text==="string"&&t.text.includes("<cortexkit-internal-effort"))})){if(!Y)return{found:0,inserted:0};if(Y.markerCount!==0)throw new v0(`Fable 5.1 effort marker correlation failed: expected ${Y.markerCount}, found 0`);if(Y.digest!==a$(Y.scope,Y.baseline,0,[]))throw new v0("Fable 5.1 effort marker request plan mismatch");if(J&&S1($.model)){let b=i1($.output_config)?{...$.output_config}:{};b.effort=Y.baseline,$.output_config=b}return{found:0,inserted:0}}let K=y5($),H=K.messages.flatMap((b)=>b.transitions),z=H.length;if(!Y){if(z===0)return{found:0,inserted:0};throw new v0("Missing or invalid internal Fable 5.1 effort request plan")}for(let b of K.messages){if(b.transitions.length>1)throw new v0("Multiple internal Fable 5.1 effort markers on one user boundary");let t=b.transitions[0];if(t&&t.scope!==Y.scope)throw new v0("Fable 5.1 effort marker scope mismatch")}if(z!==Y.markerCount)throw new v0(`Fable 5.1 effort marker correlation failed: expected ${Y.markerCount}, found ${z}`);let q=a$(Y.scope,Y.baseline,Y.markerCount,H.map((b)=>b.token));if(Y.digest!==q)throw new v0("Fable 5.1 effort marker request plan mismatch");let l=J&&S1($.model),h=0,d=[];for(let b of K.messages){let t=b.transitions[0];if(t&&l)d.push({role:"system",content:[],output_config:{effort:t.effort}}),h++;d.push(b.value)}if($.messages=d,l){let b=i1($.output_config)?{...$.output_config}:{};b.effort=Y.baseline,$.output_config=b}return{found:z,inserted:h}}class ZJ{plans=new Map;record($){let J=this.key($.sessionId,$.messageId);this.plans.delete(J),this.plans.set(J,b5($));while(this.plans.size>I5){let j=this.plans.keys().next().value;if(typeof j!=="string")break;this.plans.delete(j)}}clear($,J){this.plans.delete(this.key($,J))}markHeaders($){let J=this.key($.sessionId,$.messageId),j=this.plans.get(J);if(!j)return!1;return $.headers[n1]=j,this.plans.delete(J),!0}key($,J){return`${$}\x00${J}`}}var f3="claude-opus-4-8",m5=10,p5=128,c5=86400000;function O1($){if(typeof $!=="string")return null;if(Z1($))return"opus-5";if($===jJ||$.startsWith(`${jJ}-`))return"fable-5-1";if($===A4||$.startsWith(`${A4}-`))return"fable-5";return null}function o1($){return O1($)!==null}function l5($,J){let j=O1(J);return j?`${$}\x00${j}`:null}function d5($){try{let J=JSON.parse($);return typeof J.model==="string"?{body:J,model:J.model}:null}catch{return null}}class WJ{now;recoveries=new Map;nextCycle=1;constructor($=Date.now){this.now=$}prune(){let $=this.now();for(let[J,j]of this.recoveries)if($-j.updatedAt>=c5)this.recoveries.delete(J);while(this.recoveries.size>p5){let J=this.recoveries.keys().next().value;if(typeof J!=="string")break;this.recoveries.delete(J)}}plan($,J){if(!$||typeof J!=="string")return null;let j=d5(J);if(!j||!o1(j.model))return null;let Y=l5($,j.model);if(!Y)return null;this.prune();let G=this.recoveries.get(Y);if(!G||G.remaining<=0)return{sessionId:$,recoveryKey:Y,requestedModel:j.model,effectiveModel:j.model,bodyText:J,downgraded:!1,standbyCacheAnchor:G?.standbyCacheAnchor};return G.updatedAt=this.now(),G.nextRequestSequence++,this.recoveries.delete(Y),this.recoveries.set(Y,G),j.body.model=f3,{sessionId:$,recoveryKey:Y,requestedModel:G.model,effectiveModel:f3,bodyText:JSON.stringify(j.body),downgraded:!0,cycle:G.cycle,cacheAccountId:G.cacheAccountId,standbyCacheAnchor:G.standbyCacheAnchor,requestSequence:G.nextRequestSequence}}recoveryAccount($){if($.cycle===void 0)return $.cacheAccountId;let J=this.recoveries.get($.recoveryKey);return J?.cycle===$.cycle?J.cacheAccountId:$.cacheAccountId}bindRecoveryAccount($,J){if(!$.downgraded||$.cycle===void 0)return!1;let j=this.recoveries.get($.recoveryKey);if(!j||j.cycle!==$.cycle)return!1;if(j.cacheAccountId===J)return!1;return j.cacheAccountId=J,j.standbyCacheAnchor=void 0,j.standbyAnchorSequence=0,j.updatedAt=this.now(),$.cacheAccountId=J,$.standbyCacheAnchor=void 0,!0}activate($,J){if($.downgraded||!o1($.requestedModel))return this.remaining($);let j={model:$.requestedModel,remaining:m5,cycle:this.nextCycle++,cacheAccountId:J,standbyCacheAnchor:$.standbyCacheAnchor,nextRequestSequence:0,standbyAnchorSequence:0,updatedAt:this.now()};return this.recoveries.delete($.recoveryKey),this.recoveries.set($.recoveryKey,j),this.prune(),j.remaining}complete($,J){if(!$.downgraded||$.cycle==null||$.completed)return{counted:!1,remaining:this.remaining($)};$.completed=!0;let j=this.recoveries.get($.recoveryKey);if(!j||j.cycle!==$.cycle||j.remaining<=0)return{counted:!1,remaining:j?.remaining??0};if(j.remaining--,J&&(!j.cacheAccountId||J.oauthAccountId===j.cacheAccountId)&&$.requestSequence!=null&&$.requestSequence>=j.standbyAnchorSequence)j.standbyCacheAnchor=J,j.standbyAnchorSequence=$.requestSequence;return j.updatedAt=this.now(),this.recoveries.delete($.recoveryKey),this.recoveries.set($.recoveryKey,j),{counted:!0,remaining:j.remaining}}remaining($){return this.prune(),this.recoveries.get($.recoveryKey)?.remaining??0}}function _1($){return typeof $==="object"&&$!==null}function u5($){if(Array.isArray($))return $;if(_1($)&&Array.isArray($.data))return $.data;return[]}function k3($){if(!_1($)||!_1($.info))return;return $.info}function v3($){let J=k3($);return typeof J?.role==="string"?J.role:void 0}function i5($){let J=k3($);return typeof J?.id==="string"?J.id:void 0}function YJ($){if(!_1($)||!_1($.info))return null;let J=$.info,j=_1(J.model)?J.model:void 0,Y=typeof J.agent==="string"?J.agent:void 0,G=typeof j?.providerID==="string"?j.providerID:typeof J.providerID==="string"?J.providerID:void 0,K=typeof j?.modelID==="string"?j.modelID:typeof j?.id==="string"?j.id:typeof J.modelID==="string"?J.modelID:void 0,H=typeof j?.variant==="string"?j.variant:typeof J.variant==="string"?J.variant:void 0;if(!Y&&(!G||!K)&&!H)return null;let z={};if(Y)z.agent=Y;if(G&&K)z.model={providerID:G,modelID:K};if(H)z.variant=H;return z}function VJ($,J){return{agent:$.agent??J.agent,model:$.model??J.model,variant:$.variant??J.variant,latestAssistantMessageId:$.latestAssistantMessageId??J.latestAssistantMessageId,latestUserMessageId:$.latestUserMessageId??J.latestUserMessageId}}function h3($){return Boolean($.agent&&$.model&&$.variant)}async function Z$($,J){if(!$||!J)return null;let j=$,Y=[];if(typeof j.session?.messages==="function")try{Y=u5(await Promise.resolve(j.session.messages({path:{id:J},query:{limit:100}})))}catch{Y=[]}let G,K;for(let z of Y){let q=i5(z);if(!q)continue;let l=v3(z);if(l==="assistant"&&(!G||q>G))G=q;if(l==="user"&&(!K||q>K))K=q}let H={latestAssistantMessageId:G,latestUserMessageId:K};for(let z=Y.length-1;z>=0;z--){if(v3(Y[z])!=="assistant")continue;let q=YJ(Y[z]);if(!q)continue;if(H=VJ(H,q),h3(H))return H}for(let z=Y.length-1;z>=0;z--){let q=YJ(Y[z]);if(!q)continue;if(H=VJ(H,q),h3(H))return H}if(typeof j.session?.get==="function")try{let z=await Promise.resolve(j.session.get({path:{id:J}})),q=_1(z)&&_1(z.data)?z.data:_1(z)?z:void 0,l=q?YJ({info:q}):null;if(l)H=VJ(H,l)}catch{}if(!H.agent&&!H.model&&!H.variant&&!H.latestAssistantMessageId&&!H.latestUserMessageId)return null;return H}var b3="[lane start] — automated cache warm; no response needed.",j$="x-cortexkit-lane-start",n5=1000;function o5($){if(!$||typeof $!=="object")return!1;let J=$;return J.type==="text"&&J.text===b3&&J.synthetic===!0}async function g3($,J){let j=$?.session;if(typeof j?.promptAsync!=="function")throw Error("OpenCode plugin client does not support session.promptAsync");let Y=await Z$($,J),G={noReply:!1,parts:[{type:"text",text:b3,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(j.promptAsync({path:{id:J},body:G}))}class NJ{#$=new Map;observeSyntheticMessage($){if(!$.parts.some(o5))return!1;let J=`${$.sessionId}\x00${$.messageId}`;if(!this.#$.has(J)&&this.#$.size>=n5){let j=this.#$.keys().next().value;if(j!==void 0)this.#$.delete(j)}return this.#$.set(J,$.sessionId),!0}markHeaders($){let J=`${$.sessionId}\x00${$.messageId}`;if(!this.#$.has(J))return!1;return this.#$.delete(J),$.headers[j$]="1",!0}clearSession($){for(let[J,j]of this.#$)if(j===$)this.#$.delete(J)}}var W$=new Map,y3=new Map;function m3($,J,j){let Y=q4($),G=y3.get(j.slot);if(G&&G!==Y){let z=W$.get(G);if(z){if(z.slots.delete(j.slot),z.slots.size===0)z.manager.stop(),W$.delete(G)}}y3.set(j.slot,Y);let K=W$.get(Y);if(K)return K.slots.add(j.slot),j.rebind(K.manager),K.manager;let H=J();return W$.set(Y,{manager:H,slots:new Set([j.slot])}),H}function l3($){let J=Math.floor($.retryAfterSeconds/60),j=$.retryAfterSeconds%60,Y=`Retry in ${J}m ${j}s.`;return $.modelName?`${$.modelName} weekly limit reached, no routable accounts. ${Y}`:`Killswitch: no routable accounts. ${Y}`}function d3($){if(!$.requestModelId)return{isScopedDriven:!1};if(!A1($.mainQuota,$.storage))return{isScopedDriven:!1};let J=p3($.mainQuota,$.requestModelId);if(!J)return{isScopedDriven:!1};if(!Number.isFinite(J.remainingPercent))return{isScopedDriven:!1};let j=c3($.storage);if(J.remainingPercent<=j.scoped)return{isScopedDriven:!0,modelName:J.modelName,modelId:$.requestModelId};return{isScopedDriven:!1}}var q1=[],r5=1,GJ=0,u3=new Map;function i3($,J){if(q1.push({id:r5++,type:"open-dialog",payload:$,sessionId:J}),q1.length>100)q1=q1.slice(q1.length-100)}function n3($=0,J){let j=Date.now();if(GJ=j,J!==void 0)u3.set(J,j);let Y=(G)=>J===void 0||G.sessionId===void 0||G.sessionId===J;if($>0)q1=q1.filter((G)=>{if(G.id>$)return!0;if(J===void 0)return!1;return G.sessionId!==J});return q1.filter((G)=>G.id>$&&Y(G))}function XJ($){let J=Date.now();if($!==void 0){let j=u3.get($)??0;return j>0&&J-j<3000}return GJ>0&&J-GJ<3000}import{randomBytes as s5,timingSafeEqual as a5}from"node:crypto";import{unlink as t5}from"node:fs/promises";import{createServer as e5}from"node:http";import{join as $9}from"node:path";function J9($){return new Promise((J,j)=>{let Y=[],G=0;$.on("data",(K)=>{if(G+=K.length,G>1e6){$.destroy(),j(Error("body too large"));return}Y.push(K)}),$.on("end",()=>J(Buffer.concat(Y).toString("utf8"))),$.on("error",j)})}function Z9($,J){if(!$?.startsWith("Bearer "))return!1;let j=Buffer.from($.slice(7)),Y=Buffer.from(J);return j.length===Y.length&&a5(j,Y)}async function r3($){let J=s5(32).toString("hex"),j=e5((K,H)=>{Y(K,H)});async function Y(K,H){let z=(q,l)=>{H.writeHead(q,{"content-type":"application/json"}),H.end(JSON.stringify(l))};try{let q=K.url??"";if(K.method==="GET"&&q==="/health")return z(200,{ok:!0});if(K.method!=="POST"||!q.startsWith("/rpc/"))return z(404,{error:"not found"});if(!Z9(K.headers.authorization,J))return z(401,{error:"unauthorized"});let l=q.slice(5),h=JSON.parse(await J9(K)||"{}");if(l==="pending-notifications"){let d=$.drain(Number(h.lastReceivedId??0),typeof h.sessionId==="string"?h.sessionId:void 0);return z(200,{messages:d})}if(l==="apply"){let d=await $.apply(h);return z(200,d)}return z(404,{error:"unknown method"})}catch(q){if(!H.headersSent&&!H.writableEnded&&!H.destroyed)z(500,{error:q instanceof Error?q.message:String(q)})}}let G=await new Promise((K,H)=>{j.on("error",H),j.listen(0,"127.0.0.1",()=>{let z=j.address();if(z&&typeof z==="object")K(z.port);else H(Error("no port"))})});j.unref();try{await o3($.dir,{port:G,token:J,pid:process.pid})}catch(K){throw await new Promise((H)=>j.close(()=>H())),K}return{port:G,token:J,async stop(){await new Promise((K)=>j.close(()=>K())),await t5($9($.dir,`port-${process.pid}.json`)).catch(()=>{})}}}var t3="server-side-fallback-2026-07-01",e3="⁠",Y$="cortexkit-server-fallback-v1:";function j1($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:void 0}function r1($,J){let j=$?.[J];return typeof j==="string"?j:void 0}function s1($){return typeof $==="string"&&$.length>0&&$.length<=128&&/^claude-[a-z0-9-]+$/i.test($)}function j9($){return`${Y$}${$.fromModel}|${$.toModel}`}function W9($){if(typeof $!=="string"||!$.startsWith(Y$))return null;let J=$.slice(Y$.length),j=J.indexOf("|");if(j<=0||j!==J.lastIndexOf("|"))return null;let Y=J.slice(0,j),G=J.slice(j+1);if(!s1(Y)||!s1(G))return null;return{fromModel:Y,toModel:G}}function Y9($){if($.type!=="fallback")return null;let J=r1(j1($.from),"model"),j=r1(j1($.to),"model");if(!s1(J)||!s1(j))return null;return{fromModel:J,toModel:j}}function V9($){return{type:"fallback",from:{model:$.fromModel},to:{model:$.toModel}}}function N9($,J){let j=0,Y=0;if(!Array.isArray($.messages))return{restoredMarkers:j,droppedMarkers:Y};for(let G of $.messages){let K=j1(G);if(K?.role!=="assistant"||!Array.isArray(K.content))continue;let H=[];for(let z of K.content){let q=j1(z);if(!(q?.type==="thinking"&&(q.thinking===e3||q.thinking==="")&&typeof q.signature==="string"&&q.signature.startsWith(Y$))){H.push(z);continue}let h=W9(q.signature);if(J&&h)H.push(V9(h)),j++;else Y++}K.content=H}return{restoredMarkers:j,droppedMarkers:Y}}function $7($){return $?.trim().toLowerCase()==="legacy"?"legacy":"server"}function J7($,J){let j=J&&(o1($.model)||S1($.model)),Y=N9($,j);if(j)$.fallbacks="default";else if($.fallbacks==="default")delete $.fallbacks;return{enabled:j,...Y}}function G9($){let J,j=[];for(let G of $.split(/\r?\n/))if(G.startsWith("event:"))J=G.slice(6).trim();else if(G.startsWith("data:")){let K=G.slice(5);j.push(K.startsWith(" ")?K.slice(1):K)}let Y=j.join(`
3
+ `);if(!Y||Y==="[DONE]")return{event:J};try{return{event:J,data:j1(JSON.parse(Y))}}catch{return{event:J}}}function s3($){let J=$.indexOf(`
3
4
 
4
- `),$=N.indexOf(`\r
5
+ `),j=$.indexOf(`\r
5
6
  \r
6
- `);if(W===-1)return $===-1?null:{index:$,length:4};if($===-1||W<$)return{index:W,length:2};return{index:$,length:4}}function R4(N,W){return`event: ${N}
7
- data: ${JSON.stringify(W)}
7
+ `);if(J===-1)return j===-1?null:{index:j,length:4};if(j===-1||J<j)return{index:J,length:2};return{index:j,length:4}}function a3($,J){return`event: ${$}
8
+ data: ${JSON.stringify(J)}
8
9
 
9
- `}function Y7(N,W){return R4("content_block_start",{type:"content_block_start",index:N,content_block:{type:"thinking",thinking:k4}})+R4("content_block_delta",{type:"content_block_delta",index:N,delta:{type:"signature_delta",signature:e3(W)}})}function j7(N,W){let $=N1(N),Y=N1(W);if($&&Y)return $===Y;return N===W}function b4(N){let W="",$=0,Y=!1,G="",j,z,U,q=!1,c=!1,n=new Set,a=(o)=>{if(!Array.isArray(o?.iterations))return;for(let y of o.iterations){let N0=n0(y);if(N0?.type!=="fallback_message")continue;let l=h1(N0,"model");if(y1(l))U=l}},i=(o)=>{if(q)return;q=!0;let y=z?.toModel??U??(j&&!j7(N.requestedModel,j)?j:void 0);N.onOutcome?.({requestedModel:N.requestedModel,servedModel:j,targetModel:y,fallback:Boolean(y),handoff:Boolean(z),stopReason:o})},V0=(o,y)=>{let N0=Z7(o),l=N0.data,L0=h1(l,"type")??N0.event;if(L0==="message_start"){let s=n0(l?.message),$0=h1(s,"model");if(y1($0))j=$0;a(n0(s?.usage))}else if(L0==="content_block_start"){let s=n0(l?.content_block),$0=l?.index;if(s?.type==="tool_use"&&typeof $0==="number"&&Number.isInteger($0)&&$0>=0)n.add($0);let b0=s?W7(s):null;if(b0){if(z=b0,typeof $0==="number"&&Number.isInteger($0)&&$0>=0)return Y7($0,b0)}}else if(L0==="content_block_stop"){let s=l?.index;if(typeof s==="number"&&n.delete(s))c=!0}else if(L0==="message_delta"){a(n0(l?.usage));let s=n0(l?.delta),$0=h1(s,"stop_reason");if($0)i($0);if($0==="refusal"&&c&&n.size===0&&s&&N.onRefusalAfterToolUse&&N.onRefusalAfterToolUse()!==!1)return s.stop_reason="tool_use",`${N0.event?`event: ${N0.event}
10
- `:""}${l?`data: ${JSON.stringify(l)}
11
- `:""}${y}`}return o+y},_0=()=>{let o="";while(!0){let y=f4(W);if(!y)break;let N0=W.slice(0,y.index),l=W.slice(y.index,y.index+y.length);W=W.slice(y.index+y.length),$=new TextEncoder().encode(W).byteLength,o+=V0(N0,l)}return o};return{pendingLength(){return $},push(o){let y="";if(Y){let l=G+o,L0=f4(l);if(!L0)return G=l.slice(-3),o;let s=L0.index+L0.length;y=o.slice(0,Math.max(0,s-G.length)),o=l.slice(s),Y=!1,G=""}if(!o)return y;let N0=new TextEncoder().encode(o).byteLength;if(W+=o,$+=N0,y+=_0(),N.maxPendingBytes!==void 0&&$>N.maxPendingBytes){let l=W;return W="",$=0,Y=!0,G=l.slice(-3),y+l}return y},flush(){if(Y)return G="","";let o=_0();if(!W)return o;let y=V0(W,"");return W="",$=0,o+y}}}import{createHash as G7}from"node:crypto";function g4(N,W){let $=new Map,Y=0,G=0,j=0,z=0,U=0,q=(a)=>{let i=performance.now(),V0=N(a);return U+=performance.now()-i,j++,V0};return{call:(a)=>{if(!W.enabled())return q(a);let i=$.get(a);if(i!==void 0)return G++,$.delete(a),$.set(a,i),i;let V0=q(a),_0=a.length+V0.length;if(_0>W.maxBytes)return V0;$.set(a,V0),Y+=_0;while(Y>W.maxBytes&&$.size>1){let o=$.keys().next().value,y=$.get(o)??"";$.delete(o),Y-=o.length+y.length,z++}return V0},stats:()=>({hits:G,misses:j,evictions:z,entries:$.size,cacheBytes:Y,computeMsTotal:U})}}var X1=8388608;function m4(N){return`${a4}${N.charAt(0).toUpperCase()}${N.slice(1)}`}function H$(N){if(N==="StructuredOutput")return N;return`${N.charAt(0).toLowerCase()}${N.slice(1)}`}var O7=new Set(["callgraph","conflicts","delete","import","inspect","move","navigate","outline","refactor","safety","search","transform","zoom"]);function p4(N){let W=H$(N);if(W.startsWith("aft_"))return W;if(O7.has(W))return`aft_${W}`;return null}function vN(N,W){let $=new Headers;if(N instanceof Request)N.headers.forEach((G,j)=>{$.set(j,G)});let Y=W?.headers;if(Y){if(Y instanceof Headers)Y.forEach((G,j)=>{$.set(j,G)});else if(Array.isArray(Y))for(let G of Y){let[j,z]=G;if(typeof z<"u")$.set(j,String(z))}else for(let[G,j]of Object.entries(Y))if(typeof j<"u")$.set(G,String(j))}return $}function kN(N){return N.set("anthropic-beta",JN(N.get("anthropic-beta"),[t4])),N}function m1(N,W,$={}){return G$(N,W,{...$,extraBetas:$.body?.fallbacks==="default"?[v4]:void 0})}function X7(N){if(N.tools&&Array.isArray(N.tools))N.tools=N.tools.map((W)=>({...W,name:W.name?m4(W.name):W.name}));if(N.messages&&Array.isArray(N.messages))N.messages=N.messages.map((W)=>{if(W.content&&Array.isArray(W.content))W.content=W.content.map(($)=>{if($.type==="tool_use"&&$.name)return{...$,name:m4($.name)};return $});return W});return JSON.stringify(O$(N))}function TW(N){return N.replace(/"name"\s*:\s*"(mcp_)?([^"]+)"/g,(W,$,Y)=>{if($)return`"name": "${p4(Y)??H$(Y)}"`;let G=p4(Y);return G?`"name": "${G}"`:W})}function c4(N,W=!1){if(W)return{ready:TW(N),pending:""};let $=N.length,Y='"name"',G=Math.max(0,N.length-Y.length+1);for(let z=G;z<N.length;z++)if(Y.startsWith(N.slice(z))){$=Math.min($,z);break}let j=N.lastIndexOf(Y);if(j!==-1){let z=N.slice(j);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(z))$=Math.min($,j)}if($<N.length)return{ready:TW(N.slice(0,$)),pending:N.slice($)};return{ready:TW(N),pending:""}}function FW(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let N=process.env.ANTHROPIC_INSECURE?.trim();return N==="1"||N==="true"}function D$(N){let W=N?.trim();if(!W)return null;try{let $=new URL(W);if($.protocol!=="http:"&&$.protocol!=="https:"||$.username||$.password)return null;return $}catch{return null}}function V7(){return D$(process.env.ANTHROPIC_BASE_URL)}function hN(N,W={}){let $=null;try{if(typeof N==="string"||N instanceof URL)$=new URL(N.toString());else if(N instanceof Request)$=new URL(N.url)}catch{$=null}if(!$)return{input:N,url:null};let Y=$.href,G=W.baseURL?D$(W.baseURL):V7();if(G){if($.protocol=G.protocol,$.host=G.host,W.baseURL)$.pathname=`${G.pathname.replace(/\/$/,"")}${$.pathname}`}if($.pathname.endsWith("/v1/messages")&&!$.searchParams.has("beta"))$.searchParams.set("beta","true");if($.href===Y)return{input:N,url:$};return{input:N instanceof Request?new Request($.toString(),N):$,url:$}}function z7(N){let Y=N.split(/\n\n+/).filter((G)=>{if(G.includes(e4))return!1;for(let j of W$)if(G.includes(j))return!1;return!0}).join(`
10
+ `}function X9($,J){return a3("content_block_start",{type:"content_block_start",index:$,content_block:{type:"thinking",thinking:e3}})+a3("content_block_delta",{type:"content_block_delta",index:$,delta:{type:"signature_delta",signature:j9(J)}})}function z9($,J){let j=O1($),Y=O1(J);if(j&&Y)return j===Y;return $===J}function Z7($){let J="",j=0,Y=!1,G="",K,H,z,q=!1,l=!1,h=new Set,d=(Z0)=>{if(!Array.isArray(Z0?.iterations))return;for(let i of Z0.iterations){let F0=j1(i);if(F0?.type!=="fallback_message")continue;let Y0=r1(F0,"model");if(s1(Y0))z=Y0}},b=(Z0)=>{if(q)return;q=!0;let i=H?.toModel??z??(K&&!z9($.requestedModel,K)?K:void 0);$.onOutcome?.({requestedModel:$.requestedModel,servedModel:K,targetModel:i,fallback:Boolean(i),handoff:Boolean(H),stopReason:Z0})},t=(Z0,i)=>{let F0=G9(Z0),Y0=F0.data,_0=r1(Y0,"type")??F0.event;if(_0==="message_start"){let e=j1(Y0?.message),V0=r1(e,"model");if(s1(V0))K=V0;d(j1(e?.usage))}else if(_0==="content_block_start"){let e=j1(Y0?.content_block),V0=Y0?.index;if(e?.type==="tool_use"&&typeof V0==="number"&&Number.isInteger(V0)&&V0>=0)h.add(V0);let m0=e?Y9(e):null;if(m0){if(H=m0,typeof V0==="number"&&Number.isInteger(V0)&&V0>=0)return X9(V0,m0)}}else if(_0==="content_block_stop"){let e=Y0?.index;if(typeof e==="number"&&h.delete(e))l=!0}else if(_0==="message_delta"){d(j1(Y0?.usage));let e=j1(Y0?.delta),V0=r1(e,"stop_reason");if(V0)b(V0);if(V0==="refusal"&&l&&h.size===0&&e&&$.onRefusalAfterToolUse&&$.onRefusalAfterToolUse()!==!1)return e.stop_reason="tool_use",`${F0.event?`event: ${F0.event}
11
+ `:""}${Y0?`data: ${JSON.stringify(Y0)}
12
+ `:""}${i}`}return Z0+i},G0=()=>{let Z0="";while(!0){let i=s3(J);if(!i)break;let F0=J.slice(0,i.index),Y0=J.slice(i.index,i.index+i.length);J=J.slice(i.index+i.length),j=new TextEncoder().encode(J).byteLength,Z0+=t(F0,Y0)}return Z0};return{pendingLength(){return j},push(Z0){let i="";if(Y){let Y0=G+Z0,_0=s3(Y0);if(!_0)return G=Y0.slice(-3),Z0;let e=_0.index+_0.length;i=Z0.slice(0,Math.max(0,e-G.length)),Z0=Y0.slice(e),Y=!1,G=""}if(!Z0)return i;let F0=new TextEncoder().encode(Z0).byteLength;if(J+=Z0,j+=F0,i+=G0(),$.maxPendingBytes!==void 0&&j>$.maxPendingBytes){let Y0=J;return J="",j=0,Y=!0,G=Y0.slice(-3),i+Y0}return i},flush(){if(Y)return G="","";let Z0=G0();if(!J)return Z0;let i=t(J,"");return J="",j=0,Z0+i}}}import{createHash as O9}from"node:crypto";function j7($,J){let j=new Map,Y=0,G=0,K=0,H=0,z=0,q=(d)=>{let b=performance.now(),t=$(d);return z+=performance.now()-b,K++,t};return{call:(d)=>{if(!J.enabled())return q(d);let b=j.get(d);if(b!==void 0)return G++,j.delete(d),j.set(d,b),b;let t=q(d),G0=d.length+t.length;if(G0>J.maxBytes)return t;j.set(d,t),Y+=G0;while(Y>J.maxBytes&&j.size>1){let Z0=j.keys().next().value,i=j.get(Z0)??"";j.delete(Z0),Y-=Z0.length+i.length,H++}return t},stats:()=>({hits:G,misses:K,evictions:H,entries:j.size,cacheBytes:Y,computeMsTotal:z})}}var B1=8388608;function W7($){return`${U7}${$.charAt(0).toUpperCase()}${$.slice(1)}`}function y7($){if($==="StructuredOutput")return $;return`${$.charAt(0).toLowerCase()}${$.slice(1)}`}var K9=new Set(["callgraph","conflicts","delete","import","inspect","move","navigate","outline","refactor","safety","search","transform","zoom"]);function Y7($){let J=y7($);if(J.startsWith("aft_"))return J;if(K9.has(J))return`aft_${J}`;return null}function z$($,J){let j=new Headers;if($ instanceof Request)$.headers.forEach((G,K)=>{j.set(K,G)});let Y=J?.headers;if(Y){if(Y instanceof Headers)Y.forEach((G,K)=>{j.set(K,G)});else if(Array.isArray(Y))for(let G of Y){let[K,H]=G;if(typeof H<"u")j.set(K,String(H))}else for(let[G,K]of Object.entries(Y))if(typeof K<"u")j.set(G,String(K))}return j}function O$($){return $.set("anthropic-beta",M4($.get("anthropic-beta"),[L7])),$}function e1($,J,j={}){return q7($,J,{...j,extraBetas:[...j.body?.fallbacks==="default"?[t3]:[],...j.body&&g7(j.body)?[k7]:[],...j.body&&h7(j.body)?[v7]:[]]})}function H9($){if($.tools&&Array.isArray($.tools))$.tools=$.tools.map((J)=>({...J,name:J.name?W7(J.name):J.name}));if($.messages&&Array.isArray($.messages))$.messages=$.messages.map((J)=>{if(J.content&&Array.isArray(J.content))J.content=J.content.map((j)=>{if(j.type==="tool_use"&&j.name)return{...j,name:W7(j.name)};return j});return J});return JSON.stringify(C7($))}function zJ($){return $.replace(/"name"\s*:\s*"(mcp_)?([^"]+)"/g,(J,j,Y)=>{if(j)return`"name": "${Y7(Y)??y7(Y)}"`;let G=Y7(Y);return G?`"name": "${G}"`:J})}function V7($,J=!1){if(J)return{ready:zJ($),pending:""};let j=$.length,Y='"name"',G=Math.max(0,$.length-Y.length+1);for(let H=G;H<$.length;H++)if(Y.startsWith($.slice(H))){j=Math.min(j,H);break}let K=$.lastIndexOf(Y);if(K!==-1){let H=$.slice(K);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(H))j=Math.min(j,K)}if(j<$.length)return{ready:zJ($.slice(0,j)),pending:$.slice(j)};return{ready:zJ($),pending:""}}function HJ(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let $=process.env.ANTHROPIC_INSECURE?.trim();return $==="1"||$==="true"}function m7($){let J=$?.trim();if(!J)return null;try{let j=new URL(J);if(j.protocol!=="http:"&&j.protocol!=="https:"||j.username||j.password)return null;return j}catch{return null}}function D9(){return m7(process.env.ANTHROPIC_BASE_URL)}function K$($,J={}){let j=null;try{if(typeof $==="string"||$ instanceof URL)j=new URL($.toString());else if($ instanceof Request)j=new URL($.url)}catch{j=null}if(!j)return{input:$,url:null};let Y=j.href,G=J.baseURL?m7(J.baseURL):D9();if(G){if(j.protocol=G.protocol,j.host=G.host,J.baseURL)j.pathname=`${G.pathname.replace(/\/$/,"")}${j.pathname}`}if(j.pathname.endsWith("/v1/messages")&&!j.searchParams.has("beta"))j.searchParams.set("beta","true");if(j.href===Y)return{input:$,url:j};return{input:$ instanceof Request?new Request(j.toString(),$):j,url:j}}function U9($){let Y=$.split(/\n\n+/).filter((G)=>{if(G.includes(Q7))return!1;for(let K of B7)if(G.includes(K))return!1;return!0}).join(`
12
13
 
13
- `);for(let G of $$)Y=Y.replace(G.match,G.replacement);return Y.trim()}var _7=8388608;function K7(){return process.env.OPENCODE_ANTHROPIC_AUTH_MEMO!=="0"}var Q7=g4(z7,{maxBytes:_7,enabled:K7});function IN(N){return Q7.call(N)}function r(N){return N!=null&&typeof N==="object"&&!Array.isArray(N)}function H7(N){let W={type:"text",text:b1};if(N==null)return[W];if(typeof N==="string"){let Y=IN(N);if(Y===b1)return[W];return[W,{type:"text",text:Y}]}if(r(N)){let Y=typeof N.type==="string"?N.type:"text",G=typeof N.text==="string"?N.text:"";return[W,{...N,type:Y,text:IN(G)}]}if(!Array.isArray(N))return[W];let $=N.map((Y)=>{if(typeof Y==="string")return{type:"text",text:IN(Y)};if(r(Y)&&Y.type==="text"&&typeof Y.text==="string")return{...Y,type:"text",text:IN(Y.text)};return{type:"text",text:String(Y)}});if($[0]?.text===b1)return $;return[W,...$]}var U$={type:"ephemeral",ttl:"1h"},u4=20;function L$(N){if(r(N.cache_control))return N.cache_control;if(r(N.cacheControl))return N.cacheControl;return null}function $N(N,W){if(!r(N))return!1;return delete N.cacheControl,N.cache_control=W?{...U$}:{type:"ephemeral"},!0}function l4(N){if(!r(N))return;delete N.cache_control,delete N.cacheControl}function SW(N){if(Array.isArray(N))return N;if(typeof N==="string")return[{type:"text",text:N}];return null}function qW(N){if(Array.isArray(N))return N.map(qW);if(!r(N))return N;let W={};for(let $ of Object.keys(N).sort()){if($==="cache_control"||$==="cacheControl")continue;W[$]=qW(N[$])}return W}function P$(N){if(!r(N))return;let W=SW(N.content);if(!W?.length)return;let $=qW({...N,content:W});return G7("sha256").update(JSON.stringify($)).digest("hex")}function D7(N){if(!r(N))return!1;let W=SW(N.content);return Boolean(W?.some(($)=>r($)&&L$($)?.type==="ephemeral"))}function w$(N){try{let W=JSON.parse(N);if(!Array.isArray(W.messages))return;for(let $=W.messages.length-1;$>1;$--){let Y=W.messages[$];if(!r(Y)||Y.role!=="user"||!D7(Y))continue;let G=P$(Y);if(!G)return;return{fingerprint:G,messageIndex:$,messageCount:W.messages.length}}return}catch{return}}function xN(N,W){if(!r(N))return;let $=L$(N);if($?.type!=="ephemeral")return;if(W)$.ttl="1h";else delete $.ttl}function i4(N,W){if(Array.isArray(N.system))for(let $ of N.system)xN($,W);else xN(N.system,W);if(!Array.isArray(N.messages))return;for(let $ of N.messages)if(xN($,W),r($)&&Array.isArray($.content))for(let Y of $.content)xN(Y,W)}function U7(N,W){if(Array.isArray(N.system))for(let $ of N.system)W($);else W(N.system);if(!Array.isArray(N.messages))return;for(let $ of N.messages)if(W($),r($)&&Array.isArray($.content))for(let Y of $.content)W(Y)}function B$(N){l4(N),U7(N,l4)}function L7(N){B$(N),N.cache_control={...U$}}function P7(N){return r(N)&&N.type!=="thinking"&&N.type!=="redacted_thinking"}function yN(N){let W=SW(N.content);if(!W?.length)return;let $=W.filter(P7);if(!$.length)return;return{content:W,cacheableBlocks:$}}function w7(N){if(!r(N))return!1;let W=yN(N);if(!W)return!1;return N.content=W.content,$N(W.cacheableBlocks[0],!0)}function B7(N){if(!r(N))return!1;let W=yN(N);if(!W||W.cacheableBlocks.length<2)return!1;return N.content=W.content,$N(W.cacheableBlocks[1],!0)}function fN(N){if(!r(N))return!1;let W=yN(N);if(!W)return!1;let $=W.cacheableBlocks[W.cacheableBlocks.length-1];return N.content=W.content,$N($,!0)}function C7(N){if(!r(N))return!1;return(yN(N)?.cacheableBlocks.length??0)>1}function T7(N){if(!r(N))return 0;let W=N.content;if(Array.isArray(W))return W.length;if(W==null)return 0;return 1}function E7(N){let W=[],$=0;return N.forEach((Y,G)=>{let j=T7(Y);if(r(Y)&&Y.role==="user"&&j>0)W.push({index:G,blockPosition:$+j-1});$+=j}),W}function q7(N,W,$,Y){if(!Y)return;let G=[],j=W.find((z)=>z.index===Y.messageIndex&&z.index>1&&z.index<$.index);if(j)G.push(j);for(let z of[...W].reverse()){if(z.index<=1||z.index>=$.index||z.index===j?.index)continue;G.push(z)}for(let z of G)if(P$(N[z.index])===Y.fingerprint)return z;return}function F7(N,W){let $=E7(N),Y=[...$].reverse().find((n)=>n.index>1);if(!Y)return{latest:void 0,bridge:void 0,standbyAnchorMatched:!1,standbyBridgeApplied:!1};let G=q7(N,$,Y,W),j=G?Y.blockPosition-G.blockPosition+1:void 0,z=G&&j!=null&&j>u4?G:void 0,U=[...$].reverse().find((n)=>n.index<Y.index),q=U?Y.blockPosition-U.blockPosition+1:0,c=U&&U.index>1&&q>u4?U:void 0;return{latest:Y,bridge:z??c,standbyAnchorMatched:Boolean(G),standbyDistanceBlocks:j,standbyBridgeApplied:Boolean(z)}}function EW(N){return r(N)&&typeof N.text==="string"?N.text:""}function S7(N){if(!Array.isArray(N.system))return;let W=N.system,$=0;if(EW(W[$]).startsWith("x-anthropic-billing-header:"))$++;if(EW(W[$])===b1)$++;let Y=$+1;if(Y>=W.length-1)return;let G=W[Y];if(!r(G))return;let j=W.slice(Y).map(EW).join(`
14
- `);W.splice(Y,W.length-Y,{...G,type:"text",text:j})}function d4(N){if(Array.isArray(N.system)){let W=N.system.findIndex((G)=>r(G)&&G.text===b1),$=N.system.slice(W>=0?W+1:0).filter(r),Y=$[$.length-1];$N(Y,!0)}else $N(N.system,!0)}function A7(N,W){if(B$(N),S7(N),!Array.isArray(N.messages))return d4(N),{standbyAnchorMatched:!1,standbyBridgeApplied:!1};let{latest:$,bridge:Y,standbyAnchorMatched:G,standbyDistanceBlocks:j,standbyBridgeApplied:z}=F7(N.messages,W);if(!Y)d4(N);if(C7(N.messages[0]))w7(N.messages[0]),B7(N.messages[0]);else fN(N.messages[0]),fN(N.messages[1]);if(Y)fN(N.messages[Y.index]);if($)fN(N.messages[$.index]);return{standbyAnchorMatched:G,standbyDistanceBlocks:j,standbyBridgeApplied:z,...z&&Y?{standbyBridgeMessageIndex:Y.index}:{}}}function M7(N){if(!Array.isArray(N.messages))return 0;let W=0;return N.messages=N.messages.filter(($)=>{if(!r($)||!Array.isArray($.content))return!0;if($.role!=="assistant")return!0;let Y=$.content.filter((G)=>{if(!r(G)||G.type!=="thinking")return!0;if(!Q$(G.signature))return!0;return W+=1,!1});if(Y.length===$.content.length)return!0;return $.content=Y,Y.length>0}),W}function C$(N){if(!V$(N.model))return null;let W=Object.hasOwn(N,"thinking");return N.thinking={...X$},{replacedExisting:W}}function I7(N){if(!_$(N.model))return null;let W=Object.hasOwn(N,"thinking"),$=N.thinking;if(r($)&&$.type==="disabled")return N.thinking={type:"disabled"},{replacedExisting:W,display:"disabled"};return N.thinking={...z$},{replacedExisting:W,display:"summarized"}}function T$(N){if(!d0(N.model))return null;let W=Object.hasOwn(N,"thinking"),$=N.thinking;if(r($)&&$.type==="disabled"){N.thinking={type:"disabled"};let Y=N.output_config;if(r(Y)&&Y.effort==="xhigh")Y.effort="high";else if(r(Y)&&Y.effort==="max")Y.effort="high";return{replacedExisting:W,display:"disabled"}}return N.thinking={...K$},{replacedExisting:W,display:"summarized"}}function E$(N,W=WN){try{let $=JSON.parse(N);return $.model=W,delete $.speed,delete $.fallbacks,C$($),T$($),{ok:!0,bodyText:JSON.stringify($)}}catch{return{ok:!1,reason:"body is not valid JSON"}}}function x7(N,W){if(!W.enabled)return i4(N,!1),delete N.cache_control,delete N.cacheControl,{};if(W.mode==="automatic")return L7(N),{};if(W.mode==="hybrid")return A7(N,W.hybridStandbyAnchor);return i4(N,!0),delete N.cacheControl,{}}function f7(N){if(!Array.isArray(N.messages))return;while(N.messages.length){let W=N.messages[N.messages.length-1];if(!r(W)||W.role!=="assistant")break;N.messages.pop()}}function R7(N){if(!Array.isArray(N.messages))return 0;for(let W=N.messages.length-1;W>=0;W--){let $=N.messages[W];if(!r($)||$.role!=="assistant")continue;if(!Array.isArray($.content))return 0;if(!$.content.some((G)=>r(G)&&G.type==="tool_use"))return 0;let Y=0;while($.content.length){let G=$.content[$.content.length-1];if(!r(G)||G.type!=="text"||typeof G.text!=="string"||G.text.trim())break;$.content.pop(),Y++}return Y}return 0}function Z0(){return performance.now()}function c0(N){return Math.round(N*10)/10}function n4(N){let W=0,$=0,Y=0,G=Array.isArray(N.messages)?N.messages:[];W=G.length;for(let j of G){if(!j||typeof j!=="object")continue;let z=j.content;if(!Array.isArray(z))continue;$+=z.length;for(let U of z)if(U&&typeof U==="object"&&U.type==="tool_use")Y++}return{messageCount:W,contentBlockCount:$,toolDefinitionCount:Array.isArray(N.tools)?N.tools.length:0,toolUseCount:Y,systemBlockCount:Array.isArray(N.system)?N.system.length:0}}async function bN(N,W={}){try{let $=Z0(),Y=JSON.parse(N);W.perf?.("parse",{ms:c0(Z0()-$),inputBytes:N.length,...n4(Y)});let G=Z0(),j=Array.isArray(Y.messages)?Y.messages.length:void 0;f7(Y);let z=R7(Y),U=Array.isArray(Y.messages)?Y.messages.length:void 0;W.perf?.("strip_trailing_assistant",{ms:c0(Z0()-G),removedMessages:typeof j==="number"&&typeof U==="number"?j-U:void 0,removedWhitespaceBlocks:z});let q=Z0(),c=M7(Y),n=y4(Y,W.serverSideFallbackEnabled===!0),a=C$(Y),i=I7(Y),V0=T$(Y);if(W.perf?.("model_normalize",{ms:c0(Z0()-q),model:typeof Y.model==="string"?Y.model:void 0,fableMythosThinkingDisplay:a?"summarized":void 0,replacedFableMythosThinking:a?.replacedExisting??!1,sonnet5ThinkingDisplay:i?.display,replacedSonnet5Thinking:i?.replacedExisting??!1,opus5ThinkingDisplay:V0?.display,replacedOpus5Thinking:V0?.replacedExisting??!1,removedNonAnthropicThinking:c,serverSideFallbackEnabled:n.enabled,serverFallbackMarkersRestored:n.restoredMarkers,serverFallbackMarkersDropped:n.droppedMarkers,hasOutputConfig:Object.hasOwn(Y,"output_config")}),W.laneStart===!0)Y.max_tokens=1,delete Y.thinking;let _0=Z0(),o=Array.isArray(Y.messages)&&Y.messages.some((J1)=>J1.role==="user")?Z$(Y.messages,void 0,N$):null;W.perf?.("billing_header",{ms:c0(Z0()-_0),hasBillingHeader:Boolean(o)});let y=Z0();if(Y.system=H7(Y.system),W.perf?.("system_identity",{ms:c0(Z0()-y),systemBlockCount:Array.isArray(Y.system)?Y.system.length:0}),o&&Array.isArray(Y.system))Y.system.unshift({type:"text",text:o});let N0=Z0(),l=x7(Y,{enabled:W.cache1hEnabled??!1,mode:W.cache1hMode??"explicit",hybridStandbyAnchor:W.hybridStandbyAnchor});if(W.perf?.("cache_strategy",{ms:c0(Z0()-N0),enabled:W.cache1hEnabled??!1,mode:W.cache1hMode??"explicit",...l}),W.fastModeEnabled&&ZN(Y.model))Y.speed="fast";else if(Y.speed==="fast")delete Y.speed;if(W.cacheDiagnosticsPreviousMessageId!==void 0&&j$(Y).split(",").includes(NN))EN(Y,W.cacheDiagnosticsPreviousMessageId);let L0=Z0();if(W.identity)Y$(Y,W.identity);W.perf?.("metadata",{ms:c0(Z0()-L0),hasAccountUuid:Boolean(W.identity?.accountUuid)});let s=Z0(),$0=X7(Y);W.perf?.("prefix_tools_stringify",{ms:c0(Z0()-s),outputBytesBeforeSign:$0.length,...n4(Y)});let b0=Z0(),f=await J$($0);return W.perf?.("cch_sign",{ms:c0(Z0()-b0),outputBytes:f.length}),f}catch{return N}}var q$=new TextEncoder;function v7(){return{pending:"",pendingOverflowCount:0,disabled:!1,events:0,parseErrors:0,eventCounts:{},typeCounts:{},deltaTypeCounts:{},contentBlockTypeCounts:{},textDeltaBytes:0,thinkingDeltaBytes:0,inputJsonDeltaBytes:0,signatureDeltaBytes:0,redactedThinkingBytes:0}}function RN(N,W){if(!W)return;N[W]=(N[W]??0)+1}function C1(N){return q$.encode(N).byteLength}function K1(N){return N&&typeof N==="object"&&!Array.isArray(N)?N:void 0}function x0(N,W){let $=N?.[W];return typeof $==="string"?$:void 0}function k7(N,W){let $=N?.[W];return typeof $==="number"?$:void 0}function AW(N){if(!N.trim())return null;let W,$=[];for(let a of N.split(/\r?\n/)){if(a.startsWith("event:")){W=a.slice(6).trim();continue}if(a.startsWith("data:")){let i=a.slice(5);$.push(i.startsWith(" ")?i.slice(1):i)}}let Y=$.join(`
15
- `),G={event:W,rawBytes:C1(N),dataBytes:C1(Y)};if(!Y||Y==="[DONE]")return G.type=Y==="[DONE]"?"done":void 0,G.event??=G.type,G;let j;try{j=JSON.parse(Y)}catch{return G}let z=K1(j),U=K1(z?.delta),q=K1(z?.content_block),c=K1(z?.message),n=K1(z?.usage)??K1(c?.usage);if(G.type=x0(z,"type"),G.event??=G.type,G.index=k7(z,"index"),G.contentBlockType=x0(q,"type"),G.deltaType=x0(U,"type"),G.stopReason=x0(U,"stop_reason")??x0(z,"stop_reason"),G.deltaType==="text_delta")G.textDeltaBytes=C1(x0(U,"text")??"");if(G.deltaType==="thinking_delta")G.thinkingDeltaBytes=C1(x0(U,"thinking")??"");if(G.deltaType==="input_json_delta")G.inputJsonDeltaBytes=C1(x0(U,"partial_json")??"");if(G.deltaType==="signature_delta")G.signatureDeltaBytes=C1(x0(U,"signature")??"");if(G.contentBlockType==="redacted_thinking")G.redactedThinkingBytes=C1(x0(q,"data")??"");if(n)G.stopReason??=x0(c,"stop_reason");if(G.type==="message_start"&&c)G.message=c;return G}function g1(N){let W=N.indexOf(`
14
+ `);for(let G of w7)Y=Y.replace(G.match,G.replacement);return Y.trim()}var L9=8388608;function Q9(){return process.env.OPENCODE_ANTHROPIC_AUTH_MEMO!=="0"}var _9=j7(U9,{maxBytes:L9,enabled:Q9});function V$($){return _9.call($)}function J0($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function B9($){let J={type:"text",text:a1};if($==null)return[J];if(typeof $==="string"){let Y=V$($);if(Y===a1)return[J];return[J,{type:"text",text:Y}]}if(J0($)){let Y=typeof $.type==="string"?$.type:"text",G=typeof $.text==="string"?$.text:"";return[J,{...$,type:Y,text:V$(G)}]}if(!Array.isArray($))return[J];let j=$.map((Y)=>{if(typeof Y==="string")return{type:"text",text:V$(Y)};if(J0(Y)&&Y.type==="text"&&typeof Y.text==="string")return{...Y,type:"text",text:V$(Y.text)};return{type:"text",text:String(Y)}});if(j[0]?.text===a1)return j;return[J,...j]}var p7={type:"ephemeral",ttl:"1h"},N7=20;function c7($){if(J0($.cache_control))return $.cache_control;if(J0($.cacheControl))return $.cacheControl;return null}function C4($,J){if(!J0($))return!1;return delete $.cacheControl,$.cache_control=J?{...p7}:{type:"ephemeral"},!0}function G7($){if(!J0($))return;delete $.cache_control,delete $.cacheControl}function DJ($){if(Array.isArray($))return $;if(typeof $==="string")return[{type:"text",text:$}];return null}function KJ($){if(Array.isArray($))return $.map(KJ);if(!J0($))return $;let J={};for(let j of Object.keys($).sort()){if(j==="cache_control"||j==="cacheControl")continue;J[j]=KJ($[j])}return J}function l7($){if(!J0($))return;let J=DJ($.content);if(!J?.length)return;let j=KJ({...$,content:J});return O9("sha256").update(JSON.stringify(j)).digest("hex")}function w9($){if(!J0($))return!1;let J=DJ($.content);return Boolean(J?.some((j)=>J0(j)&&c7(j)?.type==="ephemeral"))}function d7($){try{let J=JSON.parse($);if(!Array.isArray(J.messages))return;for(let j=J.messages.length-1;j>1;j--){let Y=J.messages[j];if(!J0(Y)||Y.role!=="user"||!w9(Y))continue;let G=l7(Y);if(!G)return;return{fingerprint:G,messageIndex:j,messageCount:J.messages.length}}return}catch{return}}function N$($,J){if(!J0($))return;let j=c7($);if(j?.type!=="ephemeral")return;if(J)j.ttl="1h";else delete j.ttl}function X7($,J){if(Array.isArray($.system))for(let j of $.system)N$(j,J);else N$($.system,J);if(!Array.isArray($.messages))return;for(let j of $.messages)if(N$(j,J),J0(j)&&Array.isArray(j.content))for(let Y of j.content)N$(Y,J)}function P9($,J){if(Array.isArray($.system))for(let j of $.system)J(j);else J($.system);if(!Array.isArray($.messages))return;for(let j of $.messages)if(J(j),J0(j)&&Array.isArray(j.content))for(let Y of j.content)J(Y)}function u7($){G7($),P9($,G7)}function T9($){u7($),$.cache_control={...p7}}function F9($){return J0($)&&$.type!=="thinking"&&$.type!=="redacted_thinking"}function H$($){let J=DJ($.content);if(!J?.length)return;let j=J.filter(F9);if(!j.length)return;return{content:J,cacheableBlocks:j}}function S9($){if(!J0($))return!1;let J=H$($);if(!J)return!1;return $.content=J.content,C4(J.cacheableBlocks[0],!0)}function A9($){if(!J0($))return!1;let J=H$($);if(!J||J.cacheableBlocks.length<2)return!1;return $.content=J.content,C4(J.cacheableBlocks[1],!0)}function G$($){if(!J0($))return!1;let J=H$($);if(!J)return!1;let j=J.cacheableBlocks[J.cacheableBlocks.length-1];return $.content=J.content,C4(j,!0)}function q9($){if(!J0($))return!1;return(H$($)?.cacheableBlocks.length??0)>1}function C9($){if(!J0($))return 0;let J=$.content;if(Array.isArray(J))return J.length;if(J==null)return 0;return 1}function M9($){let J=[],j=0;return $.forEach((Y,G)=>{let K=C9(Y);if(J0(Y)&&Y.role==="user"&&K>0)J.push({index:G,blockPosition:j+K-1});j+=K}),J}function I9($,J,j,Y){if(!Y)return;let G=[],K=J.find((H)=>H.index===Y.messageIndex&&H.index>1&&H.index<j.index);if(K)G.push(K);for(let H of[...J].reverse()){if(H.index<=1||H.index>=j.index||H.index===K?.index)continue;G.push(H)}for(let H of G)if(l7($[H.index])===Y.fingerprint)return H;return}function x9($,J){let j=M9($),Y=[...j].reverse().find((h)=>h.index>1);if(!Y)return{latest:void 0,bridge:void 0,standbyAnchorMatched:!1,standbyBridgeApplied:!1};let G=I9($,j,Y,J),K=G?Y.blockPosition-G.blockPosition+1:void 0,H=G&&K!=null&&K>N7?G:void 0,z=[...j].reverse().find((h)=>h.index<Y.index),q=z?Y.blockPosition-z.blockPosition+1:0,l=z&&z.index>1&&q>N7?z:void 0;return{latest:Y,bridge:H??l,standbyAnchorMatched:Boolean(G),standbyDistanceBlocks:K,standbyBridgeApplied:Boolean(H)}}function OJ($){return J0($)&&typeof $.text==="string"?$.text:""}function E9($){if(!Array.isArray($.system))return;let J=$.system,j=0;if(OJ(J[j]).startsWith("x-anthropic-billing-header:"))j++;if(OJ(J[j])===a1)j++;let Y=j+1;if(Y>=J.length-1)return;let G=J[Y];if(!J0(G))return;let K=J.slice(Y).map(OJ).join(`
15
+ `);J.splice(Y,J.length-Y,{...G,type:"text",text:K})}function z7($){if(Array.isArray($.system)){let J=$.system.findIndex((G)=>J0(G)&&G.text===a1),j=$.system.slice(J>=0?J+1:0).filter(J0),Y=j[j.length-1];C4(Y,!0)}else C4($.system,!0)}function R9($,J){if(u7($),E9($),!Array.isArray($.messages))return z7($),{standbyAnchorMatched:!1,standbyBridgeApplied:!1};let{latest:j,bridge:Y,standbyAnchorMatched:G,standbyDistanceBlocks:K,standbyBridgeApplied:H}=x9($.messages,J);if(!Y)z7($);if(q9($.messages[0]))S9($.messages[0]),A9($.messages[0]);else G$($.messages[0]),G$($.messages[1]);if(Y)G$($.messages[Y.index]);if(j)G$($.messages[j.index]);return{standbyAnchorMatched:G,standbyDistanceBlocks:K,standbyBridgeApplied:H,...H&&Y?{standbyBridgeMessageIndex:Y.index}:{}}}function f9($){if(!Array.isArray($.messages))return 0;let J=0;return $.messages=$.messages.filter((j)=>{if(!J0(j)||!Array.isArray(j.content))return!0;if(j.role!=="assistant")return!0;let Y=j.content.filter((G)=>{if(!J0(G)||G.type!=="thinking")return!0;if(!f7(G.signature))return!0;return J+=1,!1});if(Y.length===j.content.length)return!0;return j.content=Y,Y.length>0}),J}function i7($){if(!I7($.model))return null;let J=Object.hasOwn($,"thinking");if($.thinking={...M7},k1($.model)){let j=$.tool_choice;if(J0(j)&&(j.type==="any"||j.type==="tool"))delete $.tool_choice}return{replacedExisting:J}}function v9($){if(!E7($.model))return null;let J=Object.hasOwn($,"thinking"),j=$.thinking;if(J0(j)&&j.type==="disabled")return $.thinking={type:"disabled"},{replacedExisting:J,display:"disabled"};return $.thinking={...x7},{replacedExisting:J,display:"summarized"}}function n7($){if(!Z1($.model))return null;let J=Object.hasOwn($,"thinking"),j=$.thinking;if(J0(j)&&j.type==="disabled"){$.thinking={type:"disabled"};let Y=$.output_config;if(J0(Y)&&Y.effort==="xhigh")Y.effort="high";else if(J0(Y)&&Y.effort==="max")Y.effort="high";return{replacedExisting:J,display:"disabled"}}return $.thinking={...R7},{replacedExisting:J,display:"summarized"}}function o7($,J=A4){try{let j=JSON.parse($);return j.model=J,delete j.speed,delete j.fallbacks,i7(j),n7(j),{ok:!0,bodyText:JSON.stringify(j)}}catch{return{ok:!1,reason:"body is not valid JSON"}}}function h9($,J){if(!J.enabled)return X7($,!1),delete $.cache_control,delete $.cacheControl,{};if(J.mode==="automatic")return T9($),{};if(J.mode==="hybrid")return R9($,J.hybridStandbyAnchor);return X7($,!0),delete $.cacheControl,{}}function k9($){if(!Array.isArray($.messages))return;while($.messages.length){let J=$.messages[$.messages.length-1];if(!J0(J)||J.role!=="assistant")break;$.messages.pop()}}function b9($){if(!Array.isArray($.messages))return 0;for(let J=$.messages.length-1;J>=0;J--){let j=$.messages[J];if(!J0(j)||j.role!=="assistant")continue;if(!Array.isArray(j.content))return 0;if(!j.content.some((G)=>J0(G)&&G.type==="tool_use"))return 0;let Y=0;while(j.content.length){let G=j.content[j.content.length-1];if(!J0(G)||G.type!=="text"||typeof G.text!=="string"||G.text.trim())break;j.content.pop(),Y++}return Y}return 0}var g9=1000,y9=new P7(g9);function m9($,J,j){return y9.resolve($,J,!j)}function z0(){return performance.now()}function s0($){return Math.round($*10)/10}function O7($){let J=0,j=0,Y=0,G=Array.isArray($.messages)?$.messages:[];J=G.length;for(let K of G){if(!K||typeof K!=="object")continue;let H=K.content;if(!Array.isArray(H))continue;j+=H.length;for(let z of H)if(z&&typeof z==="object"&&z.type==="tool_use")Y++}return{messageCount:J,contentBlockCount:j,toolDefinitionCount:Array.isArray($.tools)?$.tools.length:0,toolUseCount:Y,systemBlockCount:Array.isArray($.system)?$.system.length:0}}async function D$($,J={}){try{let j=z0(),Y=JSON.parse($);J.perf?.("parse",{ms:s0(z0()-j),inputBytes:$.length,...O7(Y)});let G=z0(),K=Array.isArray(Y.messages)?Y.messages.length:void 0;k9(Y);let H=b9(Y),z=Array.isArray(Y.messages)?Y.messages.length:void 0;J.perf?.("strip_trailing_assistant",{ms:s0(z0()-G),removedMessages:typeof K==="number"&&typeof z==="number"?K-z:void 0,removedWhitespaceBlocks:H});let q=z0(),l=f9(Y),h=J7(Y,J.serverSideFallbackEnabled===!0),d=i7(Y),b=v9(Y),t=n7(Y);if(J.perf?.("model_normalize",{ms:s0(z0()-q),model:typeof Y.model==="string"?Y.model:void 0,fableMythosThinkingDisplay:d?"summarized":void 0,replacedFableMythosThinking:d?.replacedExisting??!1,sonnet5ThinkingDisplay:b?.display,replacedSonnet5Thinking:b?.replacedExisting??!1,opus5ThinkingDisplay:t?.display,replacedOpus5Thinking:t?.replacedExisting??!1,removedNonAnthropicThinking:l,serverSideFallbackEnabled:h.enabled,serverFallbackMarkersRestored:h.restoredMarkers,serverFallbackMarkersDropped:h.droppedMarkers,hasOutputConfig:Object.hasOwn(Y,"output_config")}),J.laneStart===!0)Y.max_tokens=1,delete Y.thinking;R3(Y,J.midConversationEffortEnabled===!0,J.midConversationEffortPlan),b7(Y,J.thinkingPrefixMismatchBehavior??"account-default");let G0=z0(),Z0=Array.isArray(Y.messages)&&Y.messages.some((N1)=>N1.role==="user")?F7(Y.messages,void 0,_7,J.sessionId?m9(J.sessionId,Y.messages,J.laneStart===!0):void 0):null;J.perf?.("billing_header",{ms:s0(z0()-G0),hasBillingHeader:Boolean(Z0)});let i=z0();if(Y.system=B9(Y.system),J.perf?.("system_identity",{ms:s0(z0()-i),systemBlockCount:Array.isArray(Y.system)?Y.system.length:0}),Z0&&Array.isArray(Y.system))Y.system.unshift({type:"text",text:Z0});let F0=z0(),Y0=h9(Y,{enabled:J.cache1hEnabled??!1,mode:J.cache1hMode??"explicit",hybridStandbyAnchor:J.hybridStandbyAnchor});if(J.perf?.("cache_strategy",{ms:s0(z0()-F0),enabled:J.cache1hEnabled??!1,mode:J.cache1hMode??"explicit",...Y0}),J.fastModeEnabled&&I4(Y.model))Y.speed="fast";else if(Y.speed==="fast")delete Y.speed;if(J.cacheDiagnosticsPreviousMessageId!==void 0&&A7(Y).split(",").includes(S4))e4(Y,J.cacheDiagnosticsPreviousMessageId);let _0=z0();if(J.identity)S7(Y,J.identity);J.perf?.("metadata",{ms:s0(z0()-_0),hasAccountUuid:Boolean(J.identity?.accountUuid)});let e=z0(),V0=H9(Y);J.perf?.("prefix_tools_stringify",{ms:s0(z0()-e),outputBytesBeforeSign:V0.length,...O7(Y)});let m0=z0(),f0=await T7(V0);return J.perf?.("cch_sign",{ms:s0(z0()-m0),outputBytes:f0.length}),f0}catch(j){if(j instanceof v0)throw j;return $}}var r7=new TextEncoder;function p9(){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 X$($,J){if(!J)return;$[J]=($[J]??0)+1}function h1($){return r7.encode($).byteLength}function K1($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function E0($,J){let j=$?.[J];return typeof j==="string"?j:void 0}function c9($,J){let j=$?.[J];return typeof j==="number"?j:void 0}function UJ($){if(!$.trim())return null;let J,j=[];for(let d of $.split(/\r?\n/)){if(d.startsWith("event:")){J=d.slice(6).trim();continue}if(d.startsWith("data:")){let b=d.slice(5);j.push(b.startsWith(" ")?b.slice(1):b)}}let Y=j.join(`
16
+ `),G={event:J,rawBytes:h1($),dataBytes:h1(Y)};if(!Y||Y==="[DONE]")return G.type=Y==="[DONE]"?"done":void 0,G.event??=G.type,G;let K;try{K=JSON.parse(Y)}catch{return G}let H=K1(K),z=K1(H?.delta),q=K1(H?.content_block),l=K1(H?.message),h=K1(H?.usage)??K1(l?.usage);if(G.type=E0(H,"type"),G.event??=G.type,G.index=c9(H,"index"),G.contentBlockType=E0(q,"type"),G.deltaType=E0(z,"type"),G.stopReason=E0(z,"stop_reason")??E0(H,"stop_reason"),G.deltaType==="text_delta")G.textDeltaBytes=h1(E0(z,"text")??"");if(G.deltaType==="thinking_delta")G.thinkingDeltaBytes=h1(E0(z,"thinking")??"");if(G.deltaType==="input_json_delta")G.inputJsonDeltaBytes=h1(E0(z,"partial_json")??"");if(G.deltaType==="signature_delta")G.signatureDeltaBytes=h1(E0(z,"signature")??"");if(G.contentBlockType==="redacted_thinking")G.redactedThinkingBytes=h1(E0(q,"data")??"");if(h)G.usage=h,G.stopReason??=E0(l,"stop_reason");if(G.type==="message_start"&&l)G.message=l;return G}function t1($){let J=$.indexOf(`
16
17
 
17
- `),$=N.indexOf(`\r
18
+ `),j=$.indexOf(`\r
18
19
  \r
19
- `);if(W===-1)return $===-1?null:{index:$,length:4};if($===-1||W<$)return{index:W,length:2};return{index:$,length:4}}function o4(N,W,$,Y){if(!W||N.disabled)return;N.pending+=W;while(!0){let G=g1(N.pending);if(!G)break;let j=N.pending.slice(0,G.index);N.pending=N.pending.slice(G.index+G.length);let z=AW(j);if(!z)continue;if(N.events++,RN(N.eventCounts,z.event??"unknown"),RN(N.typeCounts,z.type),RN(N.deltaTypeCounts,z.deltaType),RN(N.contentBlockTypeCounts,z.contentBlockType),N.textDeltaBytes+=z.textDeltaBytes??0,N.thinkingDeltaBytes+=z.thinkingDeltaBytes??0,N.inputJsonDeltaBytes+=z.inputJsonDeltaBytes??0,N.signatureDeltaBytes+=z.signatureDeltaBytes??0,N.redactedThinkingBytes+=z.redactedThinkingBytes??0,N.last=z,Y?.(z),z.dataBytes>0&&!z.type&&!z.event)N.parseErrors++}if(q$.encode(N.pending).byteLength>$)N.pending="",N.disabled=!0,N.pendingOverflowCount++}function h7(){return{pending:"",completed:!1,disabled:!1,resyncCarry:""}}function y7(N,W,$){if(!W||N.completed)return null;if(N.disabled){let G=N.resyncCarry+W,j=g1(G);if(!j)return N.resyncCarry=G.slice(-3),null;if(N.disabled=!1,N.resyncCarry="",W=G.slice(j.index+j.length),!W)return null}N.pending+=W;let Y=null;while(!0){let G=g1(N.pending);if(!G)break;let j=N.pending.slice(0,G.index);N.pending=N.pending.slice(G.index+G.length);let z=AW(j);if(z?.type!=="message_delta"||!z.stopReason)continue;N.completed=!0,Y??=z.stopReason==="refusal"?{type:"content-filter"}:{type:"complete",finishReason:z.stopReason}}if(new TextEncoder().encode(N.pending).byteLength>$){let G=N.pending;N.pending="",N.disabled=!0,N.resyncCarry=G.slice(-3)}return Y}function b7(){return{pending:"",disabled:!1}}function r4(N){let W=AW(N);if(W?.type!=="message_delta"||W.stopReason!=="max_tokens")return N;return N.replace(/("stop_reason"\s*:\s*)"max_tokens"/,'$1"end_turn"')}function g7(N,W,$,Y=!1){if(!W&&!Y)return"";if(N.disabled)return W;if(new TextEncoder().encode(N.pending+W).byteLength>$){let j=N.pending+W;return N.pending="",N.disabled=!0,j}N.pending+=W;let G="";while(!0){let j=g1(N.pending);if(!j)break;let z=N.pending.slice(0,j.index),U=N.pending.slice(j.index,j.index+j.length);N.pending=N.pending.slice(j.index+j.length),G+=r4(z),G+=U}if(Y&&N.pending)G+=r4(N.pending),N.pending="";return G}function m7(){return{pending:"",disabled:!1,resyncCarry:""}}function p7(N,W){let $=N?.toLowerCase(),Y=W.toLowerCase();return $==="api_error"||$==="overloaded_error"||$==="server_error"||$==="internal_server_error"||Y.includes("internal server error")||Y.includes("server overloaded")}function c7(N,W){let $=N?`${N}: ${W}`:W,Y=Error(`Anthropic stream error: ${$}`);if(Y.code="ECONNRESET",Y.syscall="anthropic-sse",N)Y.providerErrorType=N;return Y}function u7(N){let W=d0(N)?"Opus 5":"Fable",$=Error(`${W} response was blocked by the provider content filter; retrying with Opus 4.8`);return $.code="ECONNRESET",$.syscall="anthropic-sse",$.providerErrorType="refusal",$}function l7(N){if(!N.includes("error"))return null;let W,$=[];for(let c of N.split(/\r?\n/)){if(c.startsWith("event:")){W=c.slice(6).trim();continue}if(c.startsWith("data:")){let n=c.slice(5);$.push(n.startsWith(" ")?n.slice(1):n)}}let Y=$.join(`
20
- `);if(!Y||Y==="[DONE]")return null;let G;try{G=JSON.parse(Y)}catch{return null}let j=K1(G);if(W!=="error"&&x0(j,"type")!=="error")return null;let z=K1(j?.error),U=x0(z,"type")??x0(z,"code")??void 0,q=x0(z,"message")??x0(j,"message")??U??"Anthropic stream error";if(!p7(U,q))return null;return c7(U,q)}function s4(N,W,$){if(!W)return null;if(N.disabled){let G=N.resyncCarry+W,j=g1(G);if(!j)return N.resyncCarry=G.slice(-3),null;if(N.disabled=!1,N.resyncCarry="",W=G.slice(j.index+j.length),!W)return null}N.pending+=W;let Y=null;while(!0){let G=g1(N.pending);if(!G)break;let j=N.pending.slice(0,G.index);N.pending=N.pending.slice(G.index+G.length);let z=l7(j);Y??=z}if(new TextEncoder().encode(N.pending).byteLength>$){let G=N.pending;N.pending="",N.disabled=!0,N.resyncCarry=G.slice(-3)}return Y}function i7(N){return{sseEvents:N.events,ssePendingChars:N.pending.length,ssePendingOverflowCount:N.pendingOverflowCount,sseParseErrors:N.parseErrors,sseEventCounts:{...N.eventCounts},sseTypeCounts:{...N.typeCounts},sseDeltaTypeCounts:{...N.deltaTypeCounts},sseContentBlockTypeCounts:{...N.contentBlockTypeCounts},sseTextDeltaBytes:N.textDeltaBytes,sseThinkingDeltaBytes:N.thinkingDeltaBytes,sseInputJsonDeltaBytes:N.inputJsonDeltaBytes,sseSignatureDeltaBytes:N.signatureDeltaBytes,sseRedactedThinkingBytes:N.redactedThinkingBytes,sseLastEvent:N.last?{...N.last}:void 0}}function F$(N,W={}){if(!N.body)return N;let $=N.body.getReader(),Y=new TextDecoder,G=new TextEncoder,j=W.responseMode==="json",z="",U=0,q=0,c=0,n=0,a=0,i=!1,V0=!1,_0=Z0(),o=Z0(),y=W.perf||W.onMessageStart?v7():void 0,N0="",l=0,L0=!1,s=(G0)=>{if(!G0)return;try{G0()}catch{}},$0=m7(),b0=W.onContentFilter||W.onComplete?h7():void 0,f=W.laneStart&&W.laneStartOAuthServed!==!1?b7():void 0,J1=!1,i1=!1,H1=(G0=!1)=>{if(!W.onContentFilter)return!1;if(!J1)J1=!0,i1=W.onContentFilter({completedToolUse:G0})!==!1;return i1},o0=W.serverSideFallbackModel?b4({requestedModel:W.serverSideFallbackModel,maxPendingBytes:X1,onOutcome:W.onServerSideFallbackOutcome,onRefusalAfterToolUse:W.onContentFilter?()=>H1(!0):void 0}):void 0,D1=(G0)=>{if(!b0)return null;let E0=y7(b0,G0,X1);if(E0?.type==="content-filter"&&W.onContentFilter)return H1()?u7(W.contentFilterModel):null;if(E0?.type==="complete")W.onComplete?.(E0.finishReason);return null},KN=(G0,E0=!1)=>f?g7(f,G0,X1,E0):G0,U1=()=>{if(V0)return;V0=!0,$.releaseLock()},GW=async(G0)=>{try{await $.cancel(G0)}catch{}finally{U1()}},QN=(G0={})=>({chunks:U,pulls:q,inputBytes:c,outputBytes:n,pendingChars:z.length,sseErrorPending:$0.pending.length,sseFinishPending:b0?.pending.length??0,sseFinishDisabled:b0?.disabled??!1,serverFallbackPending:o0?.pendingLength()??0,rewriteMs:c0(a),totalMs:c0(Z0()-o),...y?i7(y):{},...G0}),P0=(G0,E0={})=>{W.perf?.(G0,QN(E0))};W.perf?.("stream_tool_prefix_wrapper_created",{status:N.status,hasBody:!0});let d1=new ReadableStream({async pull(G0){if(q++,!i)i=!0,P0("stream_tool_prefix_first_pull");while(!0){let E0=Z0();try{let{done:p0,value:Z1}=await $.read(),A1=c0(Z0()-E0);if(p0){let q0=Y.decode();if(y&&!j)o4(y,q0,X1,(f0)=>{let o1=f0.message;if(f0.type==="message_start"&&o1)s(()=>W.onMessageStart?.(o1))});if(j){let f0=G.encode(q0).byteLength;if(l+f0<=X1)N0+=q0,l+=f0;else L0=!0}if(j&&!L0)try{let f0=JSON.parse(N0);if(f0&&typeof f0==="object"&&!Array.isArray(f0))s(()=>W.onMessageResponse?.(f0))}catch{}let I1=Z0(),OW=o0?o0.push(q0)+o0.flush():q0,x1=KN(OW,!0),g0=j?D1(x1):s4($0,q0,X1)??D1(x1);if(g0)throw P0("stream_tool_prefix_retryable_error",{error:g0.message,providerErrorType:g0.providerErrorType}),await GW(g0),g0;let DN=c4(`${z}${x1}`,!0);if(a+=Z0()-I1,DN.ready){let f0=G.encode(DN.ready);n+=f0.byteLength,G0.enqueue(f0)}if(P0("stream_tool_prefix_rewrite",{readMs:A1}),U1(),W.onStreamEnd)try{await W.onStreamEnd()}catch{}G0.close();return}U++,c+=Z1.byteLength;let V1=Y.decode(Z1,{stream:!0});if(j){let q0=Z1.byteLength;if(l+q0<=X1)N0+=V1,l+=q0;else L0=!0}if(y&&!j)o4(y,V1,X1,(q0)=>{let I1=q0.message;if(q0.type==="message_start"&&I1)s(()=>W.onMessageStart?.(I1))});let HN=Z0(),L1=o0?o0.push(V1):V1,P1=KN(L1),Y1=j?D1(P1):s4($0,V1,X1)??D1(P1);if(Y1)throw P0("stream_tool_prefix_retryable_error",{error:Y1.message,providerErrorType:Y1.providerErrorType,readMs:A1,lastChunkBytes:Z1.byteLength}),U1(),Y1;let M1=z+P1,r0=c4(M1);if(a+=Z0()-HN,z=r0.pending,r0.ready){let q0=G.encode(r0.ready);n+=q0.byteLength,G0.enqueue(q0)}let n1=Z0();if(U===1||U%25===0||n1-_0>5000)_0=n1,P0("stream_tool_prefix_progress",{readMs:A1,lastChunkBytes:Z1.byteLength});if(r0.ready)return}catch(p0){throw P0("stream_tool_prefix_error",{error:p0 instanceof Error?p0.message:String(p0)}),U1(),p0}}},async cancel(G0){P0("stream_tool_prefix_cancel",{reason:G0 instanceof Error?G0.message:String(G0)});try{await $.cancel(G0)}finally{U1()}}});return new Response(d1,{status:N.status,statusText:N.statusText,headers:N.headers})}var d7="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",S$="~effect/http/HttpServerResponse",A$="~effect/http/Cookies",M$="~effect/http/HttpBody",n7="~effect/ErrorReporter/ignore",o7="https://api.anthropic.com/v1/messages",r7=60000,s7=60000,a7=5000,I$=200,J3=240,t7=J3,e7=600000;function N8(N,W){return(N?.accounts??[]).some(($)=>$.id===W&&$.enabled!==!1&&z0($))}function W8(N){let W=(N?.accounts??[]).find(($)=>$.enabled!==!1&&z0($));if(l1(N)==="fallback-first"&&W)return{activeId:W.id,route:"fallback-first"};return{activeId:"main",route:"main"}}function x$(N,W){if(N?.activeId==="main"||N?.activeId&&N8(W,N.activeId))return N;return W8(W)}function Z3(N,W,$){let Y=Date.now()-N.lastUpdated;if(!N.activeId||Y<0||Y>e7)return x$($,W);return x$(N,W)}async function $8(N,W,$){let Y;try{Y=await W()}catch(G){return M.warn("sidebar","account storage reload failed; routing preserved",{message:G instanceof Error?G.message:String(G)}),{...N.activeId?{activeId:N.activeId,route:N.route}:$??{activeId:"main",route:"main"},freshStorage:null}}return{...Z3(N,Y,$),freshStorage:Y}}async function J8(N){await YW()?.beforeStorageLoad?.();let W;try{W=await x(N)}catch{return{activeId:"main",route:"main",freshStorage:null}}finally{await YW()?.afterStorageLoad?.()}await YW()?.beforeSidebarRead?.();let $=await W3();return{...Z3($,W),freshStorage:W}}function Z8(N){let W=Math.floor(N.retryAfterSeconds/60),$=N.retryAfterSeconds%60,Y=`Retry in ${W}m ${$}s.`;return N.modelName?`${N.modelName} weekly limit reached, no routable accounts. ${Y}`:`Killswitch: no routable accounts. ${Y}`}function Y8(N){if(!N.requestModelId)return{isScopedDriven:!1};if(!S1(N.mainQuota,N.storage))return{isScopedDriven:!1};let W=jJ(N.mainQuota,N.requestModelId);if(!W)return{isScopedDriven:!1};if(!Number.isFinite(W.remainingPercent))return{isScopedDriven:!1};let $=GJ(N.storage);if(W.remainingPercent<=$.scoped)return{isScopedDriven:!0,modelName:W.modelName,modelId:N.requestModelId};return{isScopedDriven:!1}}var j8=4,G8=25,O8=1,f$=!1;function jW(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function b(){return performance.now()}function O0(N){return Math.round(N*10)/10}function R$(N){return Math.floor(Math.random()*Math.max(0,N))}function mN(N){if(typeof N==="string")return N;if(N instanceof URL)return N.toString();return N.url}function pN(N,W){return W?.method??(N instanceof Request?N.method:void 0)}function v$(N){return N instanceof Error?N.message:String(N)}function X8(){if(f$||!1||!jW())return;f$=!0;let N=100,W=250,$=b()+N;setInterval(()=>{let Y=b(),G=Y-$;if($=Y+N,G<W)return;X0("[perf] opencode event_loop_lag",{lagMs:O0(G),thresholdMs:W})},N).unref?.()}function V8(N){let W=b(),$={requestId:String(O8++),start:W,last:W,mark(Y,G){let j=b();if(jW())X0("[perf] opencode request stage",{requestId:$.requestId,stage:Y,deltaMs:O0(j-$.last),totalMs:O0(j-$.start),...G});$.last=j},done(Y,G){let j=b();if(jW())X0("[perf] opencode request done",{requestId:$.requestId,stage:Y,deltaMs:O0(j-$.last),totalMs:O0(j-$.start),...G});$.last=j}};if(jW())X0("[perf] opencode request start",{requestId:$.requestId,...N});return $}function z8(N,W){let $=/^msg_([0-9a-fA-F]{12})/.exec(N);if(!$)return;let Y=BigInt(`0x${$[1]}`);if(Y<=0n)return;let j=`msg_${(Y-1n).toString(16).padStart(12,"0")}${"z".repeat(14)}`;if(W&&j<=W)return;return j}async function k$(N,W,$,Y={}){let G=N.client.session,j=await FN(N.client,W),z={path:{id:W},body:{noReply:Y.noReply??!0,parts:[{type:"text",text:$,ignored:!0}]}};if(Y.beforeActiveAssistant){let U=j?.latestAssistantMessageId?z8(j.latestAssistantMessageId,j.latestUserMessageId):void 0;if(U)z.body.messageID=U}if(j?.agent)z.body.agent=j.agent;if(j?.model)z.body.model=j.model;if(j?.variant)z.body.variant=j.variant;if(Y.canSend&&!Y.canSend())return!1;if(typeof G?.promptAsync==="function")return await G.promptAsync(z),!0;if(typeof G?.prompt==="function")return await Promise.resolve(G.prompt(z)),!0;throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function _8(){let N=Error(d7);throw N[S$]=S$,N[n7]=!0,N.status=204,N.statusText=void 0,N.headers={},N.cookies={[A$]:A$,cookies:{}},N.body={[M$]:M$,_tag:"Empty"},N}function K8(N){if(N.sessionID==null)return!1;let W=N.model;return W?.providerID==="anthropic"||W?.api?.npm==="@ai-sdk/anthropic"||W?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function Q8(N){if(N.some((W)=>W.includes("<use_parallel_tool_calls>")))return!1;return N.push(h$),!0}var H8={input:0,output:0,cache:{read:0,write:0}},D8="Fable content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Fable cache warm.",U8="Fable recovery window complete. Returning to Fable 5.";function L8(N){if(d0(N))return"Opus 5 content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Opus 5 cache warm.";return D8}function P8(N){if(d0(N))return"Opus 5 recovery window complete. Returning to Opus 5.";return U8}function Z4(N){if(d0(N))return"Opus 5";if(N==="claude-fable-5"||N.startsWith("claude-fable-5-"))return"Fable 5";if(N==="claude-opus-4-8"||N.startsWith("claude-opus-4-8-"))return"Opus 4.8";return N}function w8(N,W){return`Anthropic safety fallback active: ${Z4(N)} → ${Z4(W)}. Follow-up requests may remain on the fallback model for about one hour.`}function B8(N){return`Anthropic safety fallback ended. Returning to ${Z4(N)}.`}function C8(N){let W=N["claude-opus-4-8"]??N["claude-opus-4-5"]??Object.values(N)[0];if(!W)return N;return{...N,...Object.fromEntries(Object.values(yJ).map(($)=>[$.id,{...W,id:$.id,name:$.name,api:W.api?{...W.api,id:$.id}:void 0,cost:{input:_N.input,output:_N.output,cache:{read:_N.cacheRead,write:_N.cacheWrite5m}},limit:{...W.limit??{},context:vJ,output:kJ},capabilities:{...W.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:hJ}]))}}var T8=["low","medium","high","xhigh","max"];function E8(){return Object.fromEntries(T8.map((N)=>[N,{thinking:{type:"adaptive",display:"summarized"},effort:N}]))}function q8(N){return Object.fromEntries(Object.entries(N).map(([W,$])=>{let Y=$.api?.id??$.id??W;return[W,d0(Y)?{...$,variants:E8()}:$]}))}function F8(N){return Object.fromEntries(Object.entries(N).map(([W,$])=>[W,{...$,cost:H8}]))}function QZ(N,W){return p$(N)>W}var S8=async(N,W={})=>{let $={setTimeout:globalThis.setTimeout,setInterval:globalThis.setInterval,clearInterval:globalThis.clearInterval,...W};X8();let{client:Y}=N,G=globalThis.fetch,j=m$(),z=600000,U=50,q=new Map;function c(){let J=Date.now();for(let[Z,O]of q)if(J-O.createdAt>z)q.delete(Z)}function n(J,Z){if(c(),q.size>=U){let O="",V=1/0;for(let[X,_]of q)if(_.createdAt<V)V=_.createdAt,O=X;if(O)q.delete(O)}q.set(J,Z)}function a(J){c();let Z=q.get(J);if(!Z)return;if(Date.now()-Z.createdAt>z){q.delete(J);return}return Z}let i;try{i=await x(j)}catch(J){let Z=J instanceof Error?J.message:String(J);throw Error(`Failed to load account store: ${Z}`,{cause:J instanceof Error?J:void 0})}let V0=h4(process.env.OPENCODE_ANTHROPIC_AUTH_FALLBACK_MODE),_0=new UW,o=new wW,y=new Map,N0=new Map,l=new Map,L0=new Map,s=new Set,$0=new Map,b0=new aJ({path:process.env.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE||sJ(j)}),f=new SJ({storage:i,onMainQuotaFetched:async(J,Z,O,V)=>{try{let X=await x(j)??y0(),_=YJ(X);if(_&&_.checkedAt>=V&&KJ(_.quota,X,_.checkedAt)>Date.now()){f.seedMainFromStorage(X);return}X.quota=X.quota??{},X.quota.mainQuota=J,X.quota.mainQuotaCheckedAt=Z,X.quota.mainQuotaToken=O,X.quota.mainLastQuotaApiError=void 0,await E1(X,j,{mainQuota:!0})}catch(X){M.warn("quota","failed to persist main quota",{error:X instanceof Error?X.message:String(X)})}},onApiError:async(J)=>{try{let Z=await x(j)??y0();Z.quota=Z.quota??{},Z.quota.mainLastQuotaApiError=J,await E1(Z,j,{mainQuota:!0})}catch(Z){M.warn("quota","failed to persist backoff state",{error:Z instanceof Error?Z.message:String(Z)})}}}),J1=new Map;async function i1(J,Z,O){if(O?.aborted)return;let V=`${J}:${YN(Z)}`,X=J1.get(V);if(!X){let _=AJ({accessToken:Z,fetchImpl:G,signal:O}).catch((w)=>{M.debug("quota","failed to hydrate account profile",{account:J,error:w instanceof Error?w.message:String(w)});return}).finally(()=>{if(J1.get(V)===_)J1.delete(V)});X=_,J1.set(V,X)}if(!O)return X;return new Promise((_)=>{let w=!1,K=(g)=>{if(w)return;w=!0,O.removeEventListener("abort",C),_(g)},C=()=>K(void 0);if(O.addEventListener("abort",C,{once:!0}),O.aborted)C();X.then(K)})}async function H1(J){try{if(J.accountId==="main"){let Z=await K0?.();if(Z?.type!=="oauth"||Z.access!==J.accessToken)return!1}return await c$({accountId:J.accountId,profile:J.profile,expectedTokenFingerprint:YN(J.accessToken)},j)}catch(Z){M.debug("quota","failed to persist account profile",{account:J.accountId,error:Z instanceof Error?Z.message:String(Z)});return}}async function o0(J,Z,O){if(process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION==="1")return J;let V=Date.now();if(Z&&J.main?.profile&&!NW(J.main.profile,Z))J.main.profile=void 0,H1({accountId:"main",accessToken:Z,profile:void 0}).catch(()=>{});if(Z&&!uW(J.main?.profile,V)){let X=await i1("main",Z,O);if(X)J.main={type:"opencode",provider:"anthropic",profile:X},H1({accountId:"main",accessToken:Z,profile:X}).catch(()=>{})}for(let X of J.accounts){if(O?.aborted)break;if(!z0(X)||!X.access)continue;let _=X.access;if(X.profile&&!NW(X.profile,_))X.profile=void 0,H1({accountId:X.id,accessToken:_,profile:void 0}).catch(()=>{});if(uW(X.profile,V))continue;let w=await i1(X.id,_,O);if(w)X.profile=w,H1({accountId:X.id,accessToken:_,profile:w}).catch(()=>{})}return J}let D1=new Set;async function KN(J,Z){let O=await x(j)??y0();if(J.accountId==="main"){let X;try{let _=await K0?.();if(_?.type==="oauth")X=_.access}catch{}if(X!==J.accessToken){M.trace("quota","skipped stale main response quota persistence");return}O.quota=O.quota??{},O.quota.mainQuota=Z.quota,O.quota.mainQuotaCheckedAt=Z.checkedAt,O.quota.mainQuotaToken=YN(J.accessToken),await E1(O,j,{mainQuota:!0});return}let V=O.accounts.find((X)=>X.id===J.accountId&&z0(X)&&X.access===J.accessToken);if(!V)return;V.quota=Z.quota,await E1(O,j,{accounts:[J.accountId]})}function U1(J){M.warn("quota","failed to persist harvested response quota",{error:J instanceof Error?J.message:String(J)})}function GW(J){let Z=J instanceof Error?J.name:typeof J,O=J instanceof Error?J.message:String(J),V=`${Z}:${O}`;if(D1.has(V))return;D1.add(V),M.warn("quota","failed to normalize response quota headers",{error:O})}function QN(J,Z){try{if(!qJ(J)){M.trace("quota","skipped non-quota response headers",{account:Z.accountId});return}let O=FJ(J),V=Z.accountId==="main"?f.pushMainFromHeaders(Z.accessToken,O):f.pushFallbackFromHeaders(Z.accountId,Z.accessToken,O);KN(Z,V).catch(U1),UN().catch(()=>{}),M.debug("quota","harvested response quota",{account:Z.accountId,fiveHourPercent:V.quota.five_hour?.usedPercent,sevenDayPercent:V.quota.seven_day?.usedPercent,source:"headers"})}catch(O){GW(O)}}let P0=new QJ({quotaManager:f,setIntervalImpl:$.setInterval,clearIntervalImpl:$.clearInterval,onFallbackStorageChanged:()=>{UN().catch(()=>{})}});P0.startBackgroundRefresh();let d1=new QW,G0=new HW,E0=new WeakMap,p0=new Map;async function Z1(J){let Z=(J.get("anthropic-beta")??"").split(",").map((O)=>O.trim()).filter(Boolean).sort();return{betas:Z,betasHash:await DJ(Z.join(","))}}function A1(J){try{if(!J.request)return;let Z=D4({request:J.request,source:J.source,accountId:J.accountId,synthetic:J.synthetic,betasHash:J.betasHash,requestedModel:J.requestedModel,onWarning:(V)=>M.warn("cache-diagnostics",V),message:J.message,receivedAt:J.receivedAt});if(!Z.record||!Z.messageId){M.debug("cache-diagnostics","skipped invalid response envelope",{status:J.status});return}M.debug("cache-diagnostics",U4(Z.record));let O=G0.capture(J.betasHash,J.betas);if(O)M.debug("cache-diagnostics",O);if(Z.canary)M.warn("cache-diagnostics","short-gap previous_message_not_found",{message_id:Z.canary.messageId,previous_message_id:Z.canary.previousMessageId});if(J.trackSessionId)d1.capture(J.trackSessionId,Z.messageId,J.receivedAt)}catch(Z){M.debug("cache-diagnostics","response observation failed",{status:J.status,error:Z instanceof Error?Z.message:String(Z)})}}function V1(J,Z){let O=E0.get(J);if(!O)return;O.dumpWrite=O.dumpWrite.then(()=>bW(O.dump,{status:O.status,message:Z})).catch(()=>{}),A1({...O,message:Z,receivedAt:Date.now()})}function HN(J,Z){let O=Promise.resolve(bW(Z.dump,{status:Z.status,message:null})).catch(()=>{});E0.set(J,{...Z,dumpWrite:O})}let L1=null,P1=new EJ({directory:process.env.OPENCODE_ANTHROPIC_AUTH_CACHEKEEP_REGISTRY_DIR||TJ("opencode")}),Y1=[],M1=new CJ({loadStorage:()=>x(j),setIntervalImpl:$.setInterval,clearIntervalImpl:$.clearInterval,onTrackedSessionsChanged:async(J)=>{await P1.publish(J),Y1=await P1.list(J)},prepareBody:(J,Z)=>{if(!new Headers(Z.headers).get("anthropic-beta")?.split(",").map((O)=>O.trim()).includes(NN))return J;try{let O=JSON.parse(J),V=d1.previousFor(Z.id),X=V?.messageId??null;return EN(O,X),p0.set(Z.id,{sessionId:Z.id,previousMessageId:X,...V?{previousMessageReceivedAt:V.receivedAt}:{},isSubagent:Z.isSubagent,ttlSent:qN(O),accountId:Z.oauthAccountId??"main",synthetic:!0,requestedModel:typeof O.model==="string"?O.model:void 0}),JSON.stringify(O)}catch{return J}},onResponse:({target:J,bodyText:Z,status:O,data:V,receivedAt:X})=>{let _=p0.get(J.id);if(!_?.betasHash||!_.betas){p0.delete(J.id);return}try{let w=JSON.parse(Z),K=w&&typeof w==="object"&&!Array.isArray(w)?w.diagnostics:void 0,C=K&&typeof K==="object"&&!Array.isArray(K)&&K.previous_message_id===_.previousMessageId?_.previousMessageId:void 0;if(C===void 0)return;A1({source:"prewarm_cachekeep",accountId:_.accountId,synthetic:_.synthetic,betasHash:_.betasHash,betas:_.betas,requestedModel:_.requestedModel,request:{..._,previousMessageId:C,ttlSent:qN(w)},trackSessionId:J.id,status:O,message:V,receivedAt:X})}catch{}finally{p0.delete(J.id)}},prepareHeaders:async(J,Z)=>{let O,V=Z.oauthAccountId;if(V&&V!=="main"){let X=await x(j),_=X?.accounts.find((K)=>K.id===V&&K.enabled!==!1&&z0(K));if(!_||!X)throw Error(`OAuth account ${V} is unavailable for cache prewarm`);let w=_;try{w=await P0.refreshAccount(_,X)}catch(K){M.warn("cachekeep","fallback token refresh failed",{accountId:V,error:K instanceof Error?K.message:String(K)})}if(O=w.access,!O)throw Error(`OAuth account ${V} has no access token for cache prewarm`)}else{if(!K0)return J;let X=await K0();if(X.type!=="oauth")return J;if(!X.access||X.expires&&X.expires<Date.now()){if(!L1)return J;X.access=await L1()}O=X.access}if(!O)return J;try{let X=JSON.parse(Z.bodyText),_=await tN(O,typeof X.model==="string"?X.model:void 0);if(J.delete("anthropic-beta"),m1(J,O,{body:X,identity:_}),J.set("anthropic-beta",JN(J.get("anthropic-beta"),[LJ])),X.speed==="fast")kN(J);let w=p0.get(Z.id);if(w){let{betas:K,betasHash:C}=await Z1(J);w.betas=K,w.betasHash=C}}catch{m1(J,O)}return J}}),r0=new Map;async function n1(){if(!K0)throw Error("prime: main auth loader is not available");let J=await K0();if(J.type!=="oauth")throw Error("prime: main account is not an OAuth account");if(J.access&&(!J.expires||J.expires>Date.now()))return J.access;if(!L1)throw Error("prime: main token refresh unavailable");try{return await L1()}catch(Z){if(Z instanceof Error)Z.isPrimeTokenRefresh=!0;throw Z}}async function q0(){let J=await n1(),Z=await f.refreshMainWithMetadata(J);return{quota:Z.quota,fresh:Z.fetched}}async function I1(J){let Z=await x(j),O=Z?.accounts.find((X)=>X.id===J&&X.enabled!==!1&&z0(X));if(!O||!Z)throw Error(`prime: OAuth account ${J} is unavailable`);let V=await P0.refreshAccountQuota(O,Z);if(await P0.save(Z,[J]),!V.account.access)throw Error(`prime: OAuth account ${J} has no access token`);return{quota:V.account.quota??{},fresh:V.fetched}}async function OW(J){let Z=performance.now(),O,V;try{if(J==="main"){try{O=await n1()}catch(w0){return{ok:!1,...w0 instanceof Error&&w0.isPrimeTokenRefresh===!0&&{reason:"token-refresh"},error:w0 instanceof Error?w0.message:String(w0)}}V=sW}else{let w0=await x(j),j1=w0?.accounts.find((a0)=>a0.id===J&&a0.enabled!==!1&&z0(a0));if(!j1||!w0)return{ok:!1,error:`prime: OAuth account ${J} is unavailable`};let R1=j1;try{R1=await P0.refreshAccount(j1,w0)}catch(a0){return{ok:!1,reason:"token-refresh",error:a0 instanceof Error?a0.message:String(a0)}}O=R1.access,V=sW}if(!O)return{ok:!1,error:"prime: no access token available"};let X=mJ(),_=await tN(O,V),w=await bN(JSON.stringify(X),{identity:_}),K=new Headers({"content-type":"application/json"});m1(K,O,{body:JSON.parse(w),identity:_}),K.delete("content-length"),K.delete("transfer-encoding");let C=hN(o7,{baseURL:""}),g=C.url?.toString()??C.input.toString(),J0=await fetch(g,{method:"POST",headers:K,body:w,signal:AbortSignal.timeout(30000)}),D0=Math.round(performance.now()-Z);if(!J0.ok){let w0=await J0.text().catch(()=>"")||`HTTP ${J0.status}`;return{ok:!1,status:J0.status,ms:D0,error:w0}}let v0=(await J0.json().catch(()=>null))?.usage,s0=v0&&(Number.isFinite(v0.input_tokens)||Number.isFinite(v0.output_tokens))?{inputTokens:Number.isFinite(v0.input_tokens)?v0.input_tokens:void 0,outputTokens:Number.isFinite(v0.output_tokens)?v0.output_tokens:void 0}:void 0;return{ok:!0,status:J0.status,ms:D0,...s0&&{usage:s0}}}catch(X){return{ok:!1,ms:Math.round(performance.now()-Z),error:X instanceof Error?X.message:String(X)}}}let x1={storagePath:j,loadStorage:()=>x(j),getAccountFingerprint:async(J)=>{let Z;if(J==="main")try{let V=await K0?.();if(V?.type==="oauth")Z=V.refresh}catch{}let O=await e$(J,j,Z);return O?YN(O):void 0},refreshQuota:async(J)=>{if(J==="main")return q0();return I1(J)},sendPrime:OW,recordSuccess:(J,Z)=>NJ(J,Z,j)},g0=F4(j,()=>new pJ(x1),{slot:N.directory??"default",rebind:(J)=>J.updateOptions(x1)});if(ON(i))g0.start();function DN(J){let Z=J.plan.sessionId,O=d0(J.plan.requestedModel)?"Opus 5":"Fable",V=async()=>{let K=J.warmTarget;if(!K){M.debug("fable-fallback","cache warm skipped",{session:Z,reason:"Opus response was not served by an OAuth route"});return}let C=E$(K.bodyText,J.plan.requestedModel);if(!C.ok){M.warn("fable-fallback","cache warm skipped",{session:Z,reason:C.reason});return}try{let g=await M1.prewarmNow({sessionId:Z,url:K.url,headers:K.headers,bodyText:C.bodyText,oauthAccountId:_0.recoveryAccount(J.plan)??K.oauthAccountId});if(g.ok){M.debug("fable-fallback",`${O} cache warmed`,{session:Z,remaining:_0.remaining(J.plan),...g.usage&&{usage:g.usage}});return}M.warn("fable-fallback",`${O} cache warm skipped`,{session:Z,status:g.status,reason:g.reason})}catch(g){M.warn("fable-fallback",`${O} cache warm failed`,{session:Z,error:g instanceof Error?g.message:String(g)})}},{recoveryKey:X}=J.plan,w=(r0.get(X)??Promise.resolve()).then(V,V);return r0.set(X,w),w.finally(()=>{if(r0.get(X)===w)r0.delete(X)}),w}async function f0(){return Y1=await P1.list(M1.trackedSessions()),Y1}if(VN({enabled:jN(i),mode:GN(i)}),eN(iN(i)),JW(dN(i)),!process.env.OPENCODE_ANTHROPIC_AUTH_LOG_LEVEL)b$(sN(i)??"info");let o1=null;if(N.directory){let J=globalThis;if(J.__anthropicAuthRpcServer)await J.__anthropicAuthRpcServer.stop().catch(()=>{}),J.__anthropicAuthRpcServer=void 0;try{o1=await x4({dir:eJ(N.directory),drain:M4,apply:E3}),J.__anthropicAuthRpcServer=o1}catch(Z){M.warn("rpc","failed to start",{error:Z instanceof Error?Z.message:String(Z)})}}let A0={activeId:"main",route:"main"},Y3=N3(),u0=new Map;function j3(J,Z,O){if(!J||!Z)return J;let V={...J,accounts:J.accounts.map((w)=>{let K=Z.accounts.find((C)=>C.id===w.id);if(!z0(w)||!K||!z0(K)||!w.access||K.access!==w.access)return w;return{...w,profile:K.profile}})},X=J.main?.profile,_=J.main??Z.main;if(O&&_&&(!X||NW(X,O)))V.main={..._,profile:Z.main?.profile};return V}function Y4(J,Z){f.updateStorage(J),f.seedMainFromStorage(J,Z.mainAccessToken),f.seedFallbacksFromAccounts((J?.accounts??[]).filter(z0));let O=f.getMain(Z.mainAccessToken),V=f.getLastApiError(),X=J?.refresh?.mainLastRefreshError;return{main:{quota:O?.quota??null,tierLabel:WW(J?.main?.profile),quotaBackedOff:f.isBackedOff(),quotaBackoffUntil:V?.nextRetryAt,refreshBackedOff:X?q1(X,Z.mainRefreshToken,Date.now()):!1,refreshBackoffUntil:X?.nextRetryAt},fallbacks:(J?.accounts??[]).filter((_)=>_.enabled!==!1&&z0(_)).map((_)=>({id:_.id,label:_.label,tierLabel:WW(_.profile),quota:_.access?f.getFallback(_.id,_.access)?.quota??null:null,needsReauth:_.lastRefreshError!=null&&q1(_.lastRefreshError,_.refresh,Date.now())&&Q1(_.lastRefreshError),enabled:_.enabled!==!1})),activeId:Z.activeId,route:Z.route,relay:(()=>{let _=eW(J);return _?{enabled:!0,transport:_.transport??"http"}:null})(),fastMode:$W(),cacheKeep:{enabled:cW(J),window:pW(J)?"always":J?.cacheKeep?.startHour!=null&&J?.cacheKeep?.endHour!=null?`${J.cacheKeep.startHour}-${J.cacheKeep.endHour}`:void 0,trackedSessions:Y1.length},prime:ON(J)?{enabled:!0,accounts:g0.stats(J)}:void 0,fableRecoveries:u0.size>0?[...u0.values()]:void 0,lastUpdated:Date.now()}}function l0(J,Z){let O=Z.routingAuthoritative!==!1;if(O)A0={activeId:Z.activeId,route:Z.route};let V=Y4(J,Z);return $3(V,Y3,{routingAuthoritative:O,resolvePreservedRouting:O?void 0:async(X)=>{let _=await $8(X,()=>x(j),{activeId:V.activeId,route:V.route}),w=Z.useHydratedProfiles?j3(_.freshStorage,J,Z.mainAccessToken):_.freshStorage;return{activeId:_.activeId,route:_.route,state:Y4(w,{...Z,activeId:_.activeId,route:_.route})}},onRoutingResolved:O?void 0:(X)=>{A0=X}}).catch((X)=>M.warn("sidebar","state write failed",{error:X instanceof Error?X.message:String(X)}))}async function UN(){let J=await x(j),Z,O;if(K0)try{let V=await K0();Z=V.access,O=V.refresh}catch{}l0(J,{activeId:A0.activeId,route:A0.route,mainAccessToken:Z,mainRefreshToken:O,routingAuthoritative:!1})}function G3(J,Z){if(!Z)return;if(J?.quota?.enabled!==!0)return;if(f.getMain(Z))return;if(XW)return;XW=!0,f.refreshMain(Z).then(()=>UN()).catch(()=>{}).finally(()=>{XW=!1})}let K0=null,XW=!1,f1=null,LN=0;function O3(J){let Z=J?.refresh?.refreshBeforeExpiryMinutes??t7;return Math.max(J3,Z)*60000}function X3(J){return J?.refresh?.enabled!==!1}async function j4(J){if(!J)return;let Z=await x(j),O=Z?.refresh?.mainLastRefreshError;if(!Z?.refresh||!O?.tokenHash)return;let V=rN(J);if(O.tokenHash===V)return;if(!Q1(O)&&O.nextRetryAt&&O.nextRetryAt>Date.now()){X0("[refresh] opencode main oauth keeping backoff despite token rotation",{nextRetryAt:O.nextRetryAt,retryCount:O.retryCount,remainingMs:O.nextRetryAt-Date.now()});return}Z.refresh.mainLastRefreshError=void 0,await E1(Z,j,{mainRefresh:!0}),X0("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:O.checkedAt,previousNextRetryAt:O.nextRetryAt,previousRetryCount:O.retryCount})}async function V3(){let J=[],Z;if(K0)try{let K=await K0();if(K.type==="oauth"&&K.access){Z=K.access;let C=await f.refreshMain(K.access);J.push({name:"OpenCode anthropic",role:"main",quota:C})}else if(K.type==="oauth")J.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(K){let C=K instanceof Error?K.message:String(K);J.push({name:"OpenCode anthropic",role:"main",error:C.includes("429")?"Usage API rate limited — try again in a moment":C})}let{storage:O,errors:V}=await P0.refreshQuotaForAllAccounts({force:!0}),X=await o0(O??y0(),Z,AbortSignal.timeout(3000)),_=J.find((K)=>K.role==="main");if(_)_.tierLabel=WW(X.main?.profile);let w=new Map(V.map((K)=>[K.accountId,K.message]));if(J.push(...cJ(X,w)),!K0)J.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return uJ({accounts:J,refreshedAt:Date.now()})}async function G4(J){if(K0)try{let Z=await K0();await l0(J,{activeId:A0.activeId,route:A0.route,mainAccessToken:Z.access,mainRefreshToken:Z.refresh,routingAuthoritative:!1})}catch{}}function r1(J,Z,O,V){if(u0.delete(J.sessionId),u0.set(J.sessionId,{...J,changedAt:Date.now()}),u0.size>128){let X=u0.keys().next().value;if(X)u0.delete(X)}if(l0(Z,{activeId:A0.activeId,route:A0.route,mainAccessToken:O.access,mainRefreshToken:O.refresh,routingAuthoritative:!1}),V)O4(J.sessionId,V)}function O4(J,Z){if(CW(J))return;let O=N0.get(J)??[];if(O.push(Z),O.length>4)O.splice(0,O.length-4);N0.delete(J),N0.set(J,O);while(N0.size>128){let V=N0.keys().next().value;if(V)N0.delete(V);else break}if(s.has(J))VW(J)}function VW(J,Z=0){if(!N0.has(J)||$0.has(J))return;$0.set(J,Z);let O=()=>{if($0.get(J)!==Z)return;$0.delete(J),z3(J,Z)};if(Z===0)setImmediate(O);else setTimeout(O,G8*Z)}function zW(J,Z){if(Z+1<j8)VW(J,Z+1)}async function z3(J,Z){if(!s.has(J)||!N0.has(J))return;let O=N.client.session;if(typeof O?.status==="function")try{let V=await Promise.resolve(O.status()),X=V!==null&&typeof V==="object"?V:void 0,_=X&&Object.hasOwn(X,"data")?X.data:X;if(_===null||typeof _!=="object"||Array.isArray(_)){zW(J,Z);return}let w=_[J];if(w!==void 0&&(!w||typeof w!=="object"||w.type!=="idle")){zW(J,Z);return}}catch{zW(J,Z);return}if(!s.has(J))return;await _3(J)}function _3(J){let Z=L0.get(J);if(Z)return Z;let O=(async()=>{while(!0){let V=N0.get(J),X=V?.[0];if(!X){N0.delete(J);return}try{if(!await k$(N,J,X,{noReply:!0,beforeActiveAssistant:!0,canSend:()=>s.has(J)}))return;V.shift()}catch(_){M.warn("fable-fallback","Desktop notification failed",{session:J,error:_ instanceof Error?_.message:String(_)})}}})();return L0.set(J,O),O.finally(()=>{if(L0.get(J)===O)L0.delete(J)}),O}function K3(J,Z,O,V){if(Z.fallback&&Z.targetModel){let X=y.get(J.recoveryKey);y.delete(J.recoveryKey),y.set(J.recoveryKey,Z.targetModel);while(y.size>128){let w=y.keys().next().value;if(w)y.delete(w);else break}let _=u0.get(J.sessionId);if(X===Z.targetModel&&_?.mode==="server"&&N1(_.requestedModelId)===N1(J.requestedModel)&&_.targetModelId===Z.targetModel)return;M.info("fable-fallback","Anthropic server-side safety fallback active",{session:J.sessionId,requestedModel:J.requestedModel,targetModel:Z.targetModel,handoff:Z.handoff}),r1({sessionId:J.sessionId,mode:"server",remaining:0,requestedModelId:J.requestedModel,targetModelId:Z.targetModel},O,V,w8(J.requestedModel,Z.targetModel));return}if(Z.stopReason==="refusal"||!y.delete(J.recoveryKey))return;M.info("fable-fallback","Anthropic server-side safety fallback ended",{session:J.sessionId,requestedModel:J.requestedModel}),r1({sessionId:J.sessionId,mode:"fable",remaining:0,requestedModelId:J.requestedModel},O,V,B8(J.requestedModel))}function Q3(J,Z,O){if(!J)return;for(let V of y.keys())if(V.startsWith(`${J}\x00`))y.delete(V);if(!u0.delete(J))return;l0(Z,{activeId:A0.activeId,route:A0.route,mainAccessToken:O.access,mainRefreshToken:O.refresh,routingAuthoritative:!1})}async function H3(J){let Z=HJ(J);if(Z.type==="enable"||Z.type==="disable"){let _=Z.type==="enable",w=await l$(_),K=GN(w);return VN({enabled:_,mode:K}),M.info("commands","cache enabled changed",{enabled:_}),aN({argumentsText:J,enabled:_,mode:K})}if(Z.type==="mode"){let _=await i$(Z.mode),w=jN(_);return VN({enabled:w,mode:Z.mode}),M.info("commands","cache mode changed",{mode:Z.mode}),aN({argumentsText:J,enabled:w,mode:Z.mode})}let O=await x(j),V=jN(O),X=GN(O);return VN({enabled:V,mode:X}),aN({argumentsText:J,enabled:V,mode:X})}async function D3(J){let Z=PJ(J),O=await x(j);if(Z.type==="window")O=await o$(Z.startHour,Z.endHour),M.info("commands","cachekeep schedule changed",{schedule:`${Z.startHour}-${Z.endHour}`});else if(Z.type==="always")O=await r$(),M.info("commands","cachekeep schedule changed",{schedule:"always"});else if(Z.type==="disable")O=await s$(!1),M.info("commands","cachekeep enabled changed",{enabled:!1});else if(Z.type==="subagents")O=await t$(Z.enabled),M.info("commands","cachekeep subagents changed",{subagents:Z.enabled});let V=mW(O),X=await f0(),_=X.length?Math.min(...X.map((w)=>w.nextPrewarmAt)):void 0;return BJ({argumentsText:J,enabled:wJ(O),always:pW(O),window:V,hybridActive:cW(O),trackedSessions:X.length,trackedSessionDetails:X,nextPrewarmAt:_})}async function U3(J){let Z=UJ(J);if(Z.type==="enable"||Z.type==="disable"){let X=Z.type==="enable";return await d$(X),eN(X),M.info("commands","dump changed",{enabled:X}),yW({argumentsText:J,enabled:X})}let O=await x(j),V=iN(O);return eN(V),yW({argumentsText:J,enabled:V})}async function L3(J){let Z=xJ(J);if(Z.type==="enable"||Z.type==="disable"){let X=Z.type==="enable";return await n$(X),JW(X),M.info("commands","fast mode changed",{enabled:X}),dW({argumentsText:J,enabled:X})}let O=await x(j),V=dN(O);return JW(V),dW({argumentsText:J,enabled:V})}async function P3(J,Z){if(nJ(J).type==="fire"){if(!Z)return`## Claude Start Failed
20
+ `);if(J===-1)return j===-1?null:{index:j,length:4};if(j===-1||J<j)return{index:J,length:2};return{index:j,length:4}}function K7($,J,j,Y){if(!J||$.disabled)return;$.pending+=J;while(!0){let G=t1($.pending);if(!G)break;let K=$.pending.slice(0,G.index);$.pending=$.pending.slice(G.index+G.length);let H=UJ(K);if(!H)continue;if($.events++,X$($.eventCounts,H.event??"unknown"),X$($.typeCounts,H.type),X$($.deltaTypeCounts,H.deltaType),X$($.contentBlockTypeCounts,H.contentBlockType),$.textDeltaBytes+=H.textDeltaBytes??0,$.thinkingDeltaBytes+=H.thinkingDeltaBytes??0,$.inputJsonDeltaBytes+=H.inputJsonDeltaBytes??0,$.signatureDeltaBytes+=H.signatureDeltaBytes??0,$.redactedThinkingBytes+=H.redactedThinkingBytes??0,$.last=H,Y?.(H),H.dataBytes>0&&!H.type&&!H.event)$.parseErrors++}if(r7.encode($.pending).byteLength>j)$.pending="",$.disabled=!0,$.pendingOverflowCount++}function l9(){return{pending:"",completed:!1,disabled:!1,resyncCarry:""}}function d9($,J,j){if(!J||$.completed)return null;if($.disabled){let G=$.resyncCarry+J,K=t1(G);if(!K)return $.resyncCarry=G.slice(-3),null;if($.disabled=!1,$.resyncCarry="",J=G.slice(K.index+K.length),!J)return null}$.pending+=J;let Y=null;while(!0){let G=t1($.pending);if(!G)break;let K=$.pending.slice(0,G.index);$.pending=$.pending.slice(G.index+G.length);let H=UJ(K);if(H?.type!=="message_delta"||!H.stopReason)continue;$.completed=!0,Y??=H.stopReason==="refusal"?{type:"content-filter"}:{type:"complete",finishReason:H.stopReason}}if(new TextEncoder().encode($.pending).byteLength>j){let G=$.pending;$.pending="",$.disabled=!0,$.resyncCarry=G.slice(-3)}return Y}function u9(){return{pending:"",disabled:!1}}function H7($){let J=UJ($);if(J?.type!=="message_delta"||J.stopReason!=="max_tokens")return $;return $.replace(/("stop_reason"\s*:\s*)"max_tokens"/,'$1"end_turn"')}function i9($,J,j,Y=!1){if(!J&&!Y)return"";if($.disabled)return J;if(new TextEncoder().encode($.pending+J).byteLength>j){let K=$.pending+J;return $.pending="",$.disabled=!0,K}$.pending+=J;let G="";while(!0){let K=t1($.pending);if(!K)break;let H=$.pending.slice(0,K.index),z=$.pending.slice(K.index,K.index+K.length);$.pending=$.pending.slice(K.index+K.length),G+=H7(H),G+=z}if(Y&&$.pending)G+=H7($.pending),$.pending="";return G}function n9(){return{pending:"",disabled:!1,resyncCarry:""}}function o9($,J){let j=$?.toLowerCase(),Y=J.toLowerCase();return j==="api_error"||j==="overloaded_error"||j==="server_error"||j==="internal_server_error"||Y.includes("internal server error")||Y.includes("server overloaded")}function r9($,J){let j=$?`${$}: ${J}`:J,Y=Error(`Anthropic stream error: ${j}`);if(Y.code="ECONNRESET",Y.syscall="anthropic-sse",$)Y.providerErrorType=$;return Y}function s9($){let J=Z1($)?"Opus 5":"Fable",j=Error(`${J} response was blocked by the provider content filter; retrying with Opus 4.8`);return j.code="ECONNRESET",j.syscall="anthropic-sse",j.providerErrorType="refusal",j}function a9($){if(!$.includes("error"))return null;let J,j=[];for(let l of $.split(/\r?\n/)){if(l.startsWith("event:")){J=l.slice(6).trim();continue}if(l.startsWith("data:")){let h=l.slice(5);j.push(h.startsWith(" ")?h.slice(1):h)}}let Y=j.join(`
21
+ `);if(!Y||Y==="[DONE]")return null;let G;try{G=JSON.parse(Y)}catch{return null}let K=K1(G);if(J!=="error"&&E0(K,"type")!=="error")return null;let H=K1(K?.error),z=E0(H,"type")??E0(H,"code")??void 0,q=E0(H,"message")??E0(K,"message")??z??"Anthropic stream error";if(!o9(z,q))return null;return r9(z,q)}function t9($){if(!$.includes("relay_upstream_error"))return;let J=[];for(let j of $.split(/\r?\n/))if(j.startsWith("data:")){let Y=j.slice(5);J.push(Y.startsWith(" ")?Y.slice(1):Y)}if(!J.length)return;try{let j=K1(JSON.parse(J.join(`
22
+ `))),Y=K1(j?.error);if(E0(Y,"type")!=="relay_upstream_error")return;let G=Y?.status;if(typeof G==="number"&&Number.isInteger(G))return{status:G,source:"relay_status_field"};let H=E0(Y,"message")?.match(/HTTP\s+(\d{3})\b/i);return H?{status:Number(H[1]),source:"relay_message_parse"}:void 0}catch{return}}function D7($,J,j,Y){if(!J)return null;if($.disabled){let K=$.resyncCarry+J,H=t1(K);if(!H)return $.resyncCarry=K.slice(-3),null;if($.disabled=!1,$.resyncCarry="",J=K.slice(H.index+H.length),!J)return null}$.pending+=J;let G=null;while(!0){let K=t1($.pending);if(!K)break;let H=$.pending.slice(0,K.index);$.pending=$.pending.slice(K.index+K.length);let z=t9(H);if(z!==void 0)Y?.(z);let q=a9(H);G??=q}if(new TextEncoder().encode($.pending).byteLength>j){let K=$.pending;$.pending="",$.disabled=!0,$.resyncCarry=K.slice(-3)}return G}function e9($){return{sseEvents:$.events,ssePendingChars:$.pending.length,ssePendingOverflowCount:$.pendingOverflowCount,sseParseErrors:$.parseErrors,sseEventCounts:{...$.eventCounts},sseTypeCounts:{...$.typeCounts},sseDeltaTypeCounts:{...$.deltaTypeCounts},sseContentBlockTypeCounts:{...$.contentBlockTypeCounts},sseTextDeltaBytes:$.textDeltaBytes,sseThinkingDeltaBytes:$.thinkingDeltaBytes,sseInputJsonDeltaBytes:$.inputJsonDeltaBytes,sseSignatureDeltaBytes:$.signatureDeltaBytes,sseRedactedThinkingBytes:$.redactedThinkingBytes,sseLastEvent:$.last?{...$.last}:void 0}}function s7($,J={}){if(!$.body)return $;let j=$.body.getReader(),Y=new TextDecoder,G=new TextEncoder,K=J.responseMode==="json",H="",z=0,q=0,l=0,h=0,d=0,b=!1,t=!1,G0=z0(),Z0=z0(),i=J.perf||J.onMessageStart||J.onMessageDelta?p9():void 0,F0="",Y0=0,_0=!1,e=(O0)=>{if(!O0)return;try{O0()}catch{}},V0=n9(),m0=J.onContentFilter||J.onComplete?l9():void 0,f0=J.laneStart&&J.laneStartOAuthServed!==!1?u9():void 0,N1=!1,V4=!1,N4=(O0=!1)=>{if(!J.onContentFilter)return!1;if(!N1)N1=!0,V4=J.onContentFilter({completedToolUse:O0})!==!1;return V4},A=J.serverSideFallbackModel?Z7({requestedModel:J.serverSideFallbackModel,maxPendingBytes:B1,onOutcome:J.onServerSideFallbackOutcome,onRefusalAfterToolUse:J.onContentFilter?()=>N4(!0):void 0}):void 0,m1=(O0)=>{if(!m0)return null;let a0=d9(m0,O0,B1);if(a0?.type==="content-filter"&&J.onContentFilter)return N4()?s9(J.contentFilterModel):null;if(a0?.type==="complete")J.onComplete?.(a0.finishReason);return null},C1=(O0,a0=!1)=>f0?i9(f0,O0,B1,a0):O0,H1=()=>{if(t)return;t=!0,j.releaseLock()},p1=async(O0)=>{try{await j.cancel(O0)}catch{}finally{H1()}},m4=(O0={})=>({chunks:z,pulls:q,inputBytes:l,outputBytes:h,pendingChars:H.length,sseErrorPending:V0.pending.length,sseFinishPending:m0?.pending.length??0,sseFinishDisabled:m0?.disabled??!1,serverFallbackPending:A?.pendingLength()??0,rewriteMs:s0(d),totalMs:s0(z0()-Z0),...i?e9(i):{},...O0}),p0=(O0,a0={})=>{J.perf?.(O0,m4(a0))};J.perf?.("stream_tool_prefix_wrapper_created",{status:$.status,hasBody:!0});let G4=new ReadableStream({async pull(O0){if(q++,!b)b=!0,p0("stream_tool_prefix_first_pull");while(!0){let a0=z0();try{let{done:P1,value:M1}=await j.read(),X4=s0(z0()-a0);if(P1){let D0=Y.decode();if(i&&!K)K7(i,D0,B1,(B0)=>{let l1=B0.message;if(B0.type==="message_start"&&l1)e(()=>J.onMessageStart?.(l1));if(B0.type==="message_delta"&&(B0.usage||B0.stopReason))e(()=>J.onMessageDelta?.({...B0.usage?{usage:B0.usage}:{},...B0.stopReason?{stopReason:B0.stopReason}:{}}))});if(K){let B0=G.encode(D0).byteLength;if(Y0+B0<=B1)F0+=D0,Y0+=B0;else _0=!0}if(K&&!_0)try{let B0=JSON.parse(F0);if(B0&&typeof B0==="object"&&!Array.isArray(B0))e(()=>J.onMessageResponse?.(B0))}catch{}let U1=z0(),c4=A?A.push(D0)+A.flush():D0,x1=C1(c4,!0),T1=K?m1(x1):D7(V0,D0,B1,J.onRelayUpstreamError)??m1(x1);if(T1)throw p0("stream_tool_prefix_retryable_error",{error:T1.message,providerErrorType:T1.providerErrorType}),await p1(T1),T1;let O4=V7(`${H}${x1}`,!0);if(d+=z0()-U1,O4.ready){let B0=G.encode(O4.ready);h+=B0.byteLength,O0.enqueue(B0)}if(p0("stream_tool_prefix_rewrite",{readMs:X4}),H1(),J.onStreamEnd)try{await J.onStreamEnd()}catch{}O0.close();return}z++,l+=M1.byteLength;let I1=Y.decode(M1,{stream:!0});if(K){let D0=M1.byteLength;if(Y0+D0<=B1)F0+=I1,Y0+=D0;else _0=!0}if(i&&!K)K7(i,I1,B1,(D0)=>{let U1=D0.message;if(D0.type==="message_start"&&U1)e(()=>J.onMessageStart?.(U1));if(D0.type==="message_delta"&&(D0.usage||D0.stopReason))e(()=>J.onMessageDelta?.({...D0.usage?{usage:D0.usage}:{},...D0.stopReason?{stopReason:D0.stopReason}:{}}))});let k$=z0(),p4=A?A.push(I1):I1,q0=C1(p4),D1=K?m1(q0):D7(V0,I1,B1,J.onRelayUpstreamError)??m1(q0);if(D1)throw p0("stream_tool_prefix_retryable_error",{error:D1.message,providerErrorType:D1.providerErrorType,readMs:X4,lastChunkBytes:M1.byteLength}),H1(),D1;let z4=H+q0,t0=V7(z4);if(d+=z0()-k$,H=t0.pending,t0.ready){let D0=G.encode(t0.ready);h+=D0.byteLength,O0.enqueue(D0)}let c1=z0();if(z===1||z%25===0||c1-G0>5000)G0=c1,p0("stream_tool_prefix_progress",{readMs:X4,lastChunkBytes:M1.byteLength});if(t0.ready)return}catch(P1){throw p0("stream_tool_prefix_error",{error:P1 instanceof Error?P1.message:String(P1)}),H1(),P1}}},async cancel(O0){p0("stream_tool_prefix_cancel",{reason:O0 instanceof Error?O0.message:String(O0)});try{await j.cancel(O0)}finally{H1()}}});return new Response(G4,{status:$.status,statusText:$.statusText,headers:$.headers})}var $j="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",a7="~effect/http/HttpServerResponse",t7="~effect/http/Cookies",e7="~effect/http/HttpBody",Jj="~effect/ErrorReporter/ignore",Zj="https://api.anthropic.com/v1/messages";function $8($){return new Response(JSON.stringify({type:"error",error:{type:"invalid_request_error",message:$.message}}),{status:400,headers:{"content-type":"application/json"}})}var jj=60000,Wj=60000,Yj=5000,J8=200,bZ=240,Vj=bZ,Nj=600000,L$=new Map;function Gj($,J){return($?.accounts??[]).some((j)=>j.id===J&&j.enabled!==!1&&W0(j))}function Xj($){let J=($?.accounts??[]).find((j)=>j.enabled!==!1&&W0(j));if(Y4($)==="fallback-first"&&J)return{activeId:J.id,route:"fallback-first"};return{activeId:"main",route:"main"}}function Z8($,J){if($?.activeId==="main"||$?.activeId&&Gj(J,$.activeId))return $;return Xj(J)}function gZ($,J,j){let Y=Date.now()-$.lastUpdated;if(!$.activeId||Y<0||Y>Nj)return Z8(j,J);return Z8($,J)}async function zj($,J,j){let Y;try{Y=await J()}catch(G){return S.warn("sidebar","account storage reload failed; routing preserved",{message:G instanceof Error?G.message:String(G)}),{...$.activeId?{activeId:$.activeId,route:$.route}:j??{activeId:"main",route:"main"},freshStorage:null}}return{...gZ($,Y,j),freshStorage:Y}}async function Oj($){await v$()?.beforeStorageLoad?.();let J;try{J=await x($)}catch{return{activeId:"main",route:"main",freshStorage:null}}finally{await v$()?.afterStorageLoad?.()}await v$()?.beforeSidebarRead?.();let j=await hZ();return{...gZ(j,J),freshStorage:J}}var Kj=4,Hj=25,Dj=1,j8=!1;function h$(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function u(){return performance.now()}function Q0($){return Math.round($*10)/10}function W8($){return Math.floor(Math.random()*Math.max(0,$))}function Q$($){if(typeof $==="string")return $;if($ instanceof URL)return $.toString();return $.url}function _$($,J){return J?.method??($ instanceof Request?$.method:void 0)}function Y8($){return $ instanceof Error?$.message:String($)}function Uj(){if(j8||!1||!h$())return;j8=!0;let $=100,J=250,j=u()+$;setInterval(()=>{let Y=u(),G=Y-j;if(j=Y+$,G<J)return;L0("[perf] opencode event_loop_lag",{lagMs:Q0(G),thresholdMs:J})},$).unref?.()}function Lj($){let J=u(),j={requestId:String(Dj++),start:J,last:J,mark(Y,G){let K=u();if(h$())L0("[perf] opencode request stage",{requestId:j.requestId,stage:Y,deltaMs:Q0(K-j.last),totalMs:Q0(K-j.start),...G});j.last=K},done(Y,G){let K=u();if(h$())L0("[perf] opencode request done",{requestId:j.requestId,stage:Y,deltaMs:Q0(K-j.last),totalMs:Q0(K-j.start),...G});j.last=K}};if(h$())L0("[perf] opencode request start",{requestId:j.requestId,...$});return j}function Qj($,J){let j=/^msg_([0-9a-fA-F]{12})/.exec($);if(!j)return;let Y=BigInt(`0x${j[1]}`);if(Y<=0n)return;let K=`msg_${(Y-1n).toString(16).padStart(12,"0")}${"z".repeat(14)}`;if(J&&K<=J)return;return K}async function V8($,J,j,Y={}){let G=$.client.session,K=await Z$($.client,J),H={path:{id:J},body:{noReply:Y.noReply??!0,parts:[{type:"text",text:j,ignored:!0}]}};if(Y.beforeActiveAssistant){let z=K?.latestAssistantMessageId?Qj(K.latestAssistantMessageId,K.latestUserMessageId):void 0;if(z)H.body.messageID=z}if(K?.agent)H.body.agent=K.agent;if(K?.model)H.body.model=K.model;if(K?.variant)H.body.variant=K.variant;if(Y.canSend&&!Y.canSend())return!1;if(typeof G?.promptAsync==="function")return await G.promptAsync(H),!0;if(typeof G?.prompt==="function")return await Promise.resolve(G.prompt(H)),!0;throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function _j(){let $=Error($j);throw $[a7]=a7,$[Jj]=!0,$.status=204,$.statusText=void 0,$.headers={},$.cookies={[t7]:t7,cookies:{}},$.body={[e7]:e7,_tag:"Empty"},$}function Bj($){if($.sessionID==null)return!1;let J=$.model;return J?.providerID==="anthropic"||J?.api?.npm==="@ai-sdk/anthropic"||J?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function wj($){if($.some((J)=>J.includes("<use_parallel_tool_calls>")))return!1;return $.push(K8),!0}var Pj={input:0,output:0,cache:{read:0,write:0}},Tj="Fable content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Fable cache warm.",Fj="Fable recovery window complete. Returning to Fable 5.";function Sj($){if(Z1($))return"Opus 5 content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the Opus 5 cache warm.";if(k1($)){let J=y4($);return`${J} content filter detected. Switched to Opus 4.8 for a 10-response recovery window while keeping the ${J} cache warm.`}return Tj}function Aj($){if(Z1($))return"Opus 5 recovery window complete. Returning to Opus 5.";if(k1($))return`Recovery window complete. Returning to ${y4($)}.`;return Fj}function y4($){if(Z1($))return"Opus 5";if(k1($)){if($.startsWith("claude-mythos-5-1"))return"Mythos 5.1";if($.startsWith("claude-fable-5-1"))return"Fable 5.1"}if($==="claude-fable-5"||$.startsWith("claude-fable-5-"))return"Fable 5";if($==="claude-opus-4-8"||$.startsWith("claude-opus-4-8-"))return"Opus 4.8";return $}function qj($,J){return`Anthropic safety fallback active: ${y4($)} → ${y4(J)}. Follow-up requests may remain on the fallback model for about one hour.`}function Cj($){return`Anthropic safety fallback ended. Returning to ${y4($)}.`}function Mj($){let J=$["claude-opus-4-8"]??$["claude-opus-4-5"]??Object.values($)[0];if(!J)return $;return{...$,...Object.fromEntries(Object.values(zZ).map((j)=>{let Y=k1(j.id)?NZ:VZ;return[j.id,{...J,id:j.id,name:j.name,api:J.api?{...J.api,id:j.id}:void 0,cost:{input:Y.input,output:Y.output,cache:{read:Y.cacheRead,write:Y.cacheWrite5m}},limit:{...J.limit??{},context:GZ,output:XZ},capabilities:{...J.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:OZ(j.id)}]}))}}var Ij=["low","medium","high","xhigh","max"];function xj(){return Object.fromEntries(Ij.map(($)=>[$,{thinking:{type:"adaptive",display:"summarized"},effort:$}]))}function Ej($){return Object.fromEntries(Object.entries($).map(([J,j])=>{let Y=j.api?.id??j.id??J;return[J,Z1(Y)||S1(Y)?{...j,variants:xj()}:j]}))}function Rj($){return Object.fromEntries(Object.entries($).map(([J,j])=>[J,{...j,cost:Pj}]))}var N8=100,G8=5000,fj=U8;function $4(){return process.env.OPENCODE_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE?.trim()||void 0}function vj($){let J;try{J=JSON.parse($.payload)}catch{return $.payload.trim()||void 0}if(!J||typeof J!=="object")return;let j=J;if(typeof j.access_token==="string")return j.access_token;if(typeof j.access==="string")return j.access;return}function J4($,J){if(!$)return;let j=vj($);if(!j)return;if($.expiresAtMs!==null&&$.expiresAtMs<=J)return;return j}var hj=async($,J={})=>{let j={setTimeout:globalThis.setTimeout,setInterval:globalThis.setInterval,clearInterval:globalThis.clearInterval,...J},Y=J.claustrumNow??Date.now,G=J.clearClaustrumRefreshErrorPersistent??w8;Uj();let{client:K}=$,H=globalThis.fetch,z=L8(),q=600000,l=50,h=new Map;function d(){let Z=Date.now();for(let[W,V]of h)if(Z-V.createdAt>q)h.delete(W)}function b(Z,W){if(d(),h.size>=l){let V="",N=1/0;for(let[X,O]of h)if(O.createdAt<N)N=O.createdAt,V=X;if(V)h.delete(V)}h.set(Z,W)}function t(Z){d();let W=h.get(Z);if(!W)return;if(Date.now()-W.createdAt>q){h.delete(Z);return}return W}let G0;try{G0=await x(z)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to load account store: ${W}`,{cause:Z instanceof Error?Z:void 0})}let Z0=$7(process.env.OPENCODE_ANTHROPIC_AUTH_FALLBACK_MODE),i=new WJ,F0=new NJ,Y0=new ZJ,_0=new Map,e=new Map,V0=new Map,m0=new Map,f0=new Set,N1=new Map,V4=new xZ({path:process.env.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE||IZ(z)}),N4=async(Z,W)=>{try{let V=await x(z),N=V?.accounts.find((X)=>X.id===Z&&W0(X));if(!V||!N)return;if(N.lastQuotaRefreshError?.checkedAt!==void 0&&N.lastQuotaRefreshError.checkedAt>W.checkedAt)return;if(wJ(N.quota)>W.checkedAt)return;N.lastQuotaRefreshError=W,await W1(V,z,{accounts:[Z]})}catch(V){S.warn("quota","failed to persist fallback backoff state",{accountId:Z,error:V instanceof Error?V.message:String(V)})}},A=new wZ({storage:G0,onMainQuotaFetched:async(Z,W,V,N,X,O)=>{try{let U=await x(z)??R0(),D=b8(U);if(D&&D.checkedAt>=N&&xJ(D.quota,U,D.checkedAt)>Date.now()){A.seedMainFromStorage(U,c0);return}U.quota=U.quota??{},U.quota.mainQuota=Z,U.quota.mainQuotaCheckedAt=W,U.quota.mainQuotaToken=V,U.quota.mainLastQuotaApiError=void 0,U.quota.mainQuotaErrorGeneration=X,U.quota.mainQuotaErrorClearedAt=x4(U.quota.mainQuotaErrorClearedAt,O),await W1(U,z,{mainQuota:!0})}catch(U){S.warn("quota","failed to persist main quota",{error:U instanceof Error?U.message:String(U)})}},onApiError:async(Z,W)=>{try{let V=await x(z)??R0();V.quota=V.quota??{},V.quota.mainLastQuotaApiError=Z,V.quota.mainQuotaErrorGeneration=W,await W1(V,z,{mainQuota:!0})}catch(V){S.warn("quota","failed to persist backoff state",{error:V instanceof Error?V.message:String(V)})}},onFallbackQuotaFetched:async(Z,W,V,N)=>{try{let X=await x(z),O=X?.accounts.find((D)=>D.id===Z&&W0(D));if(!X||!O)return;let U=wJ(O.quota);if(U>=N&&xJ(O.quota,X,U)>Date.now()){A.seedFallbacksFromAccounts(X.accounts.filter(W0));return}if(O.lastQuotaRefreshError?.checkedAt!==void 0&&O.lastQuotaRefreshError.checkedAt>N)return;O.quota=W,O.lastQuotaRefreshError=void 0,await W1(X,z,{accounts:[Z]})}catch(X){S.warn("quota","failed to persist fallback quota",{accountId:Z,error:X instanceof Error?X.message:String(X)})}},onFallbackApiError:N4});async function m1(Z,W){if(L4===Z&&c0===W)return;L4=Z,c0=W;let V=A.setMainQuotaAccountIdentity(W,Z.startsWith("sk-ant-oat"));if(W===void 0)return;let N=await x(z),X=N?.quota?.mainLastQuotaApiError;if(!N||!X||X.accountIdentity===W||!Z.startsWith("sk-ant-oat")&&X.accountIdentity===void 0)return;N.quota=N.quota??{},N.quota.mainLastQuotaApiError=void 0,N.quota.mainQuotaErrorGeneration=Math.max(N.quota.mainQuotaErrorGeneration??0,V??A.getMainQuotaErrorGeneration()),N.quota.mainQuotaErrorClearedAt=x4(N.quota.mainQuotaErrorClearedAt,A.getMainQuotaErrorClearedAt()??Date.now()),await W1(N,z,{mainQuota:!0})}async function C1(Z,W){let V=n4.get(Z);if(V)return V;let N=(async()=>{let X=++X3,U=(await k4(Z,W,x0)).accountUuid??(!Z.startsWith("sk-ant-oat")?x0:void 0);if(X!==X3){let D=L4!==Z||c0!==U;return{accountIdentity:U,generation:A.getMainQuotaIdentityGeneration(),stale:D}}return await m1(Z,U),{accountIdentity:U,generation:A.getMainQuotaIdentityGeneration(),stale:!1}})();n4.set(Z,N);try{return await N}finally{if(n4.get(Z)===N)n4.delete(Z)}}let H1=G0?.quotaHeaderFeed?.enabled===!0?new QZ:null,p1=new Map;async function m4(Z,W,V,N){if(N?.aborted)return;let X=`${W??Z}`,O=p1.get(X);if(!O){let U=$Z({accessToken:V,accountIdentity:W,fetchImpl:H,signal:N}).catch((D)=>{S.debug("quota","failed to hydrate account profile",{account:Z,error:D instanceof Error?D.message:String(D)});return}).finally(()=>{if(p1.get(X)===U)p1.delete(X)});O=U,p1.set(X,O)}if(!N)return O;return new Promise((U)=>{let D=!1,w=(n)=>{if(D)return;D=!0,N.removeEventListener("abort",C),U(n)},C=()=>w(void 0);if(N.addEventListener("abort",C,{once:!0}),N.aborted)C();O.then(w)})}async function p0(Z){try{return await B8({accountId:Z.accountId,profile:Z.profile,accountIdentity:Z.accountIdentity},z)}catch(W){S.debug("quota","failed to persist account profile",{account:Z.accountId,error:W instanceof Error?W.message:String(W)});return}}async function G4(Z,W,V){if(process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION==="1")return Z;let N=Date.now(),X=c0;if(W&&Z.main?.profile&&!I$(Z.main.profile,X))Z.main.profile=void 0,p0({accountId:"main",accountIdentity:X,accessToken:W,profile:void 0}).catch(()=>{});if(W&&Z.main?.profile&&X!==void 0&&Z.main.profile.accountIdentity===void 0)Z.main.profile={...Z.main.profile,accountIdentity:X},p0({accountId:"main",accountIdentity:X,accessToken:W,profile:Z.main.profile}).catch(()=>{});if(W&&!gJ(Z.main?.profile,N)){let O=await m4("main",X,W,V);if(O)Z.main={type:"opencode",provider:"anthropic",profile:O},p0({accountId:"main",accountIdentity:X,accessToken:W,profile:O}).catch(()=>{})}for(let O of Z.accounts){if(V?.aborted)break;if(!W0(O)||!O.access)continue;let U=O.access;if(O.profile&&!I$(O.profile,O.id))O.profile=void 0,p0({accountId:O.id,accountIdentity:O.id,accessToken:U,profile:void 0}).catch(()=>{});if(O.profile&&O.profile.accountIdentity===void 0)O.profile={...O.profile,accountIdentity:O.id},p0({accountId:O.id,accountIdentity:O.id,accessToken:U,profile:O.profile}).catch(()=>{});if(gJ(O.profile,N))continue;let D=await m4(O.id,O.id,U,V);if(D)O.profile=D,p0({accountId:O.id,accountIdentity:O.id,accessToken:U,profile:D}).catch(()=>{})}return Z}let O0=new Set;async function a0(Z,W){let V=await x(z)??R0();if(Z.accountId==="main"){let X=Z.mainQuotaIdentity?.accountIdentity;if(!X||W.quota.accountIdentity!==X)return S.trace("quota","skipped quota persistence without verified main account identity"),null;V.quota=V.quota??{},V.quota.mainQuota={...W.quota,accountIdentity:X},V.quota.mainQuotaCheckedAt=W.checkedAt,await W1(V,z,{mainQuota:!0});let U=(await x(z))?.quota?.mainQuota,w=Boolean(U&&U.accountIdentity===X)?Q8(U,W.quota):W.quota;return U?{...W,quota:w,checkedAt:W.checkedAt}:W}let N=V.accounts.find((X)=>X.id===Z.accountId&&W0(X));if(!N)return null;if(N.authLineageId!==Z.authLineageId){if(S.trace("quota","skipped stale fallback quota persistence after lineage change",{accountId:Z.accountId,storedLineage:N.authLineageId,servedLineage:Z.authLineageId}),A.getAllFallbacks().get(Z.accountId)===W)A.clearFallback(Z.accountId);return null}return N.quota={...W.quota,accountIdentity:N.id},await W1(V,z,{accounts:[Z.accountId]}),W}function P1(Z){S.warn("quota","failed to persist harvested response quota",{error:Z instanceof Error?Z.message:String(Z)})}function M1(Z){let W=Z instanceof Error?Z.name:typeof Z,V=Z instanceof Error?Z.message:String(Z),N=`${W}:${V}`;if(O0.has(N))return;O0.add(N),S.warn("quota","failed to normalize response quota headers",{error:V})}function X4(Z){if(!Z||typeof Z!=="object")return;let W=Z,V=W.credential_id;if(typeof V==="string"&&V&&V!=="main")return V;let N=W.vault;if(N&&typeof N==="object"){let X=N.credential_id;if(typeof X==="string"&&X&&X!=="main")return X}return}async function I1(Z,W){if(!H1)return;if(Z.accountId==="main"&&!Z.mainQuotaIdentity?.accountIdentity)return;let V=await x(z)??R0(),X=(await S0?.())?.type==="oauth",O=Z.accountId==="main"?V.main:V.accounts.find((b0)=>b0.id===Z.accountId),U=X4(O),D=LZ({storage:V,mainOAuthConfigured:X}),w=W.checkedAt,C={five_hour:W.quota.five_hour,seven_day:W.quota.seven_day,bindingWindow:W.quota.bindingWindow,fallbackAdvised:W.quota.fallbackAdvised,scoped:W.quota.scoped,extraUsage:W.quota.extraUsage,fieldSources:W.quota.fieldSources},n=U??(Z.accountId==="main"?Z.mainQuotaIdentity?.accountIdentity??"main":Z.accountId),w0=U?{identity_source:"credential_id",credential_id:U,schema_version:g4,provider:"anthropic",configured_account_count:D,observed_at_ms:w,quota:C,accountKey:n}:Z.accountId==="main"&&Z.mainQuotaIdentity?.accountIdentity?{identity_source:"account_ref",account_ref:Z.mainQuotaIdentity.accountIdentity,schema_version:g4,provider:"anthropic",configured_account_count:D,observed_at_ms:w,quota:C,accountKey:n}:Z.accountId==="main"?{identity_source:"none",schema_version:g4,provider:"anthropic",configured_account_count:D,observed_at_ms:w,quota:C,accountKey:n}:{identity_source:"account_ref",account_ref:Z.accountId,schema_version:g4,provider:"anthropic",configured_account_count:D,observed_at_ms:w,quota:C,accountKey:n};await H1.publish(w0)}function k$(Z){S.debug("quota","failed to publish quota header feed",{error:Z instanceof Error?Z.message:String(Z)})}function p4(Z,W){try{if(!_Z(Z)){S.trace("quota","skipped non-quota response headers",{account:W.accountId});return}let V=BZ(Z),N=W.accountId==="main"?W.mainQuotaIdentity:void 0;if(W.accountId==="main"){if(!N||A.getMainQuotaIdentityGeneration()!==N.generation){S.trace("quota","discarded stale main quota headers",{boundIdentity:N?.accountIdentity,currentGeneration:A.getMainQuotaIdentityGeneration()});return}}let X=W.accountId==="main"?A.pushMainFromHeaders(N?.accountIdentity,V):A.pushFallbackFromHeaders(W.accountId,V,{authLineageId:W.authLineageId});if(!X)return;(async()=>{let O=X;try{let U=await a0(W,X);if(U===null)return;O=U}catch(U){P1(U)}U4().catch(()=>{}),await I1(W,O)})().catch(k$),S.debug("quota","harvested response quota",{account:W.accountId,fiveHourPercent:X.quota.five_hour?.usedPercent,sevenDayPercent:X.quota.seven_day?.usedPercent,source:"headers"})}catch(V){M1(V)}}let q0=null,D1=new Map,z4=new Map,t0=new Set,c1=new Set,D0=new Set,U1=new Map,c4=0,x1=G0?G0.accounts.filter((Z)=>W0(Z)&&Z.enabled!==!1&&Boolean(Z.claustrumHandle)&&g1(G0,Z.id)):[],T1=(Z,W)=>{if(!W||t0.has(Z))return!1;if(!g1(W,Z))return!1;let N=W.accounts.find((O)=>O.id===Z&&O.enabled!==!1&&W0(O))?.claustrumHandle;if(!N)return!1;let X=q0?.peek(N);return Boolean(X&&J4(X,Y()))};function O4(Z){let W=U1.get(Z);if(W===void 0)return!1;if(Y()>=W)return U1.delete(Z),!1;return!0}function B0(Z,W,V){let N=Z.claustrumHandle;if(!N||!W||!g1(W,Z.id)||t0.has(Z.id))return{accessToken:Z.access};let X=q0;if(!X){if(Z.access&&Z.expires!==void 0&&Z.expires>Y())return{accessToken:Z.access};return{}}let O=X.peek(N),U=J4(O,Y());if(O&&U){if((z4.get(N)??-1)>=O.recordVersion){if(!O4(N))eJ(Z.id,N);return{}}return{accessToken:U,served:{accountId:Z.id,handle:N,recordVersion:O.recordVersion}}}if(V?.warm!==!1&&!O4(N))eJ(Z.id,N);if(Z.access&&Z.expires!==void 0&&Z.expires>Y())return{accessToken:Z.access};return{}}function l1(Z,W,V){let N=B0(Z,W,V);if(!N.accessToken)return;return{token:N.accessToken,source:N.served?"vault":"sidecar"}}async function yZ(Z,W){let V=q0;if(!V)return;try{let N=await V.get(W);if(J4(N,Y()))await b$(Z,W)}catch(N){l4(Z,N,W),S.warn("claustrum","credential refresh failed",{accountId:Z,error:N instanceof Error?N.message:String(N)})}}function eJ(Z,W){if(D0.has(W))return;D0.add(W),j.setTimeout(()=>{D0.delete(W),yZ(Z,W)},0)}let n0=new l8({quotaManager:A,isFallbackAccountVaultServed:T1,resolveFallbackAccessToken:l1,isFallbackAccountVaultEnabled:(Z,W)=>{if(!g1(W,Z))return!1;let V=W.accounts.find((N)=>N.id===Z&&W0(N));return V?.enabled!==!1&&Boolean(V?.claustrumHandle)},onBackgroundRefresh:pZ,setIntervalImpl:j.setInterval,clearIntervalImpl:j.clearInterval,onFallbackStorageChanged:()=>{U4().catch(()=>{})}}),$3=async(Z,W)=>{await G(Z,W,z)},J3=(Z)=>{x(z).then((W)=>{if(!W?.accounts.find((N)=>N.id===Z.accountId&&W0(N))?.lastRefreshError)return;return $3(Z.accountId,Z.handle)}).catch((W)=>{S.warn("claustrum","failed to clear stale refresh error",{accountId:Z.accountId,error:W instanceof Error?W.message:String(W)})})},b$=async(Z,W)=>{if(t0.delete(Z),c1.delete(Z),W)U1.delete(W);if(W)await $3(Z,W).catch((V)=>{S.warn("claustrum","failed to clear stale refresh error",{accountId:Z,error:V instanceof Error?V.message:String(V)})})},l4=(Z,W,V)=>{if(!(W instanceof QJ))return;if(W.action==="gone")t0.add(Z);if(W.action==="reauth")c1.add(Z);if(W.action==="reduce_and_retry")q0?.reduceMinTtlMs();if((W.action==="retry"||W.action==="reauth")&&V)U1.set(V,Y()+(W.action==="reauth"?fj:G8))};async function mZ(){if(q0)return q0;let Z=Y();if(Z<c4)return null;c4=Z+G8;let W={project_root:$.directory??process.cwd(),harness:"opencode",session:`store-${q4(z)}`};try{return q0=await _J({enabled:!0,identity:W,...$4()&&{connectionFile:$4()},...J.claustrumConnector&&{connector:J.claustrumConnector},now:Y}),q0}catch(V){return S.warn("claustrum","credential cache unavailable",{error:V instanceof Error?V.message:String(V)}),q0=null,null}}async function pZ(Z=!1){let W=q0,V=await x(z);if(!V)return;let N=TJ(V)+1800000,X=!1;for(let O of V.accounts){if(O.enabled===!1||!W0(O)||!O.claustrumHandle||!g1(V,O.id))continue;let U=O.claustrumHandle;if(!W)W=await mZ();if(Z&&W&&J4(W.peek(U),Y()))continue;let D=!O.access||!O.expires||O.expires-Y()<=TJ(V),w=async(C)=>{if(Y1(O.lastRefreshError,O.id,Y(),O.refresh?h0(O.refresh):void 0))return;S.warn("refresh","custody override: local fallback refresh",{accountId:O.id,reason:C}),await n0.refreshAccount(O,V,{persistError:!0}).catch((n)=>{S.warn("refresh","custody override local refresh failed",{accountId:O.id,error:n instanceof Error?n.message:String(n)})})};if(!W){if(D)await w("vault unavailable");continue}if(Z&&!W.peek(U)){if(D)await w("vault warmup pending"),X=!0;continue}try{let C=await W.get(U,N);if(!J4(C,Y())){if(L0("[refresh] vault fallback credential unusable",{accountId:O.id,handle:U,minTtlMs:N}),D)await w("vault credential unavailable")}else await b$(O.id,U);X=!0}catch(C){l4(O.id,C,U),X=!0;let n=C instanceof QJ?C.action:"retry";if(n==="reauth"||D)await w(n==="reauth"?"vault reauth":"vault unavailable")}}if(X)U4().catch(()=>{})}if(x1.length>0)try{let Z={project_root:$.directory??process.cwd(),harness:"opencode",session:`store-${q4(z)}`};q0=await _J({enabled:!0,identity:Z,...$4()&&{connectionFile:$4()},...J.claustrumConnector&&{connector:J.claustrumConnector},now:Y});let W=q0;if(W){let V=Promise.all(x1.map(async(O)=>{let U=O.claustrumHandle;if(!U)return;try{let D=await W.get(U);if(J4(D,Y()))await b$(O.id,U)}catch(D){l4(O.id,D,U),S.warn("claustrum","credential warmup failed",{accountId:O.id,error:D instanceof Error?D.message:String(D)})}})),N=!1,X=new Promise((O)=>{let U=globalThis.setTimeout(()=>{N=!0,O()},N8);if("unref"in U)U.unref()});if(await Promise.race([V,X]),N)S.warn("claustrum","credential warmup timed out",{accounts:x1.length,timeoutMs:N8})}}catch(Z){S.warn("claustrum","credential cache unavailable",{error:Z instanceof Error?Z.message:String(Z)}),q0=null}let cZ=n0.startBackgroundRefresh(),g$=new u$,lZ=new i$,F1=new WeakMap,d4=new WeakMap,K4=new Map;async function y$(Z){let W=(Z.get("anthropic-beta")??"").split(",").map((V)=>V.trim()).filter(Boolean).sort();return{betas:W,betasHash:await u8(W.join(","))}}function Z3(Z){try{if(!Z.request)return;let W=P3({request:Z.request,source:Z.source,accountId:Z.accountId,synthetic:Z.synthetic,betasHash:Z.betasHash,requestedModel:Z.requestedModel,onWarning:(N)=>S.warn("cache-diagnostics",N),message:Z.message,receivedAt:Z.receivedAt});if(!W.record||!W.messageId){S.debug("cache-diagnostics","skipped invalid response envelope",{status:Z.status});return}S.debug("cache-diagnostics",T3(W.record));let V=lZ.capture(Z.betasHash,Z.betas);if(V)S.debug("cache-diagnostics",V);if(W.canary)S.warn("cache-diagnostics","short-gap previous_message_not_found",{message_id:W.canary.messageId,previous_message_id:W.canary.previousMessageId});if(Z.trackSessionId)g$.capture(Z.trackSessionId,W.messageId,Z.receivedAt)}catch(W){S.debug("cache-diagnostics","response observation failed",{status:Z.status,error:W instanceof Error?W.message:String(W)})}}function j3(Z,W,V=!0){let N=F1.get(Z);if(!N)return;if(W&&typeof W==="object"&&!Array.isArray(W)&&!V)N.messageStart=W;N.dumpWrite=N.dumpWrite.then(()=>M$(N.dump,{status:N.status,message:W,complete:V})).catch(()=>{}),Z3({...N,message:W,receivedAt:Date.now()})}function dZ(Z,W){let V=F1.get(Z);if(!V)return;let N=V.messageStart??{},X=N.usage&&typeof N.usage==="object"&&!Array.isArray(N.usage)?N.usage:{},O={...N,...W.usage?{usage:{...X,...W.usage}}:{},...W.stopReason?{stop_reason:W.stopReason}:{}};V.dumpWrite=V.dumpWrite.then(()=>M$(V.dump,{status:V.status,message:O,complete:!0})).catch(()=>{})}function W3(Z,W){let V=Promise.resolve(M$(W.dump,{status:W.status,message:null,complete:!1})).catch(()=>{});F1.set(Z,{...W,dumpWrite:V})}let H4=null,m$=new e8({directory:process.env.OPENCODE_ANTHROPIC_AUTH_CACHEKEEP_REGISTRY_DIR||t8("opencode")}),u4=[],i4=new a8({loadStorage:()=>x(z),setIntervalImpl:j.setInterval,clearIntervalImpl:j.clearInterval,onTrackedSessionsChanged:async(Z)=>{await m$.publish(Z),u4=await m$.list(Z)},prepareBody:(Z,W)=>{if(!new Headers(W.headers).get("anthropic-beta")?.split(",").map((V)=>V.trim()).includes(S4))return Z;try{let V=JSON.parse(Z),N=g$.previousFor(W.id),X=N?.messageId??null;return e4(V,X),K4.set(W.id,{sessionId:W.id,previousMessageId:X,...N?{previousMessageReceivedAt:N.receivedAt}:{},isSubagent:W.isSubagent,ttlSent:$$(V),accountId:W.oauthAccountId??"main",synthetic:!0,requestedModel:typeof V.model==="string"?V.model:void 0}),JSON.stringify(V)}catch{return Z}},onResponse:({target:Z,bodyText:W,status:V,data:N,receivedAt:X})=>{let O=K4.get(Z.id);if(!O?.betasHash||!O.betas){K4.delete(Z.id);return}try{let U=JSON.parse(W),D=U&&typeof U==="object"&&!Array.isArray(U)?U.diagnostics:void 0,w=D&&typeof D==="object"&&!Array.isArray(D)&&D.previous_message_id===O.previousMessageId?O.previousMessageId:void 0;if(w===void 0)return;Z3({source:"prewarm_cachekeep",accountId:O.accountId,synthetic:O.synthetic,betasHash:O.betasHash,betas:O.betas,requestedModel:O.requestedModel,request:{...O,previousMessageId:w,ttlSent:$$(U)},trackSessionId:Z.id,status:V,message:N,receivedAt:X})}catch{}finally{K4.delete(Z.id)}},prepareHeaders:async(Z,W)=>{let V,N=W.oauthAccountId;if(N&&N!=="main"){let X=await x(z),O=X?.accounts.find((D)=>D.id===N&&D.enabled!==!1&&W0(D));if(!O||!X)throw Error(`OAuth account ${N} is unavailable for cache prewarm`);let U=O;try{U=await n0.refreshAccount(O,X)}catch(D){S.warn("cachekeep","fallback token refresh failed",{accountId:N,error:D instanceof Error?D.message:String(D)})}if(V=U.access,!V)throw Error(`OAuth account ${N} has no access token for cache prewarm`)}else{if(!S0)return Z;let X=await S0();if(X.type!=="oauth")return Z;if(!X.access||X.expires&&X.expires<Date.now()){if(!H4)return Z;X.access=await H4()}V=X.access}if(!V)return Z;try{let X=JSON.parse(W.bodyText),O=await k4(V,typeof X.model==="string"?X.model:void 0,N==="main"?x0:N);if(Z.delete("anthropic-beta"),e1(Z,V,{body:X,identity:O}),Z.set("anthropic-beta",M4(Z.get("anthropic-beta"),[n8])),X.speed==="fast")O$(Z);let U=K4.get(W.id);if(U){let{betas:D,betasHash:w}=await y$(Z);U.betas=D,U.betasHash=w}}catch{e1(Z,V)}return Z}}),D4=new Map;async function Y3(){if(!S0)throw Error("prime: main auth loader is not available");let Z=await S0();if(Z.type!=="oauth")throw Error("prime: main account is not an OAuth account");if(Z.access&&(!Z.expires||Z.expires>Date.now()))return Z.access;if(!H4)throw Error("prime: main token refresh unavailable");try{return await H4()}catch(W){if(W instanceof Error)W.isPrimeTokenRefresh=!0;throw W}}async function uZ(){let Z=await Y3();await C1(Z);let W=await A.refreshMainWithMetadata(c0,Z);return{quota:W.quota,fresh:W.fetched}}async function iZ(Z){let W=await x(z),V=W?.accounts.find((X)=>X.id===Z&&X.enabled!==!1&&W0(X));if(!V||!W)throw Error(`prime: OAuth account ${Z} is unavailable`);let N=await n0.refreshAccountQuota(V,W);if(await n0.save(W,[Z]),!N.account.access)throw Error(`prime: OAuth account ${Z} has no access token`);return{quota:N.account.quota??{},fresh:N.fetched}}async function nZ(Z){let W=performance.now(),V,N;try{if(Z==="main"){try{V=await Y3()}catch(I0){return{ok:!1,...I0 instanceof Error&&I0.isPrimeTokenRefresh===!0&&{reason:"token-refresh"},error:I0 instanceof Error?I0.message:String(I0)}}N=uJ}else{let I0=await x(z),G1=I0?.accounts.find((X1)=>X1.id===Z&&X1.enabled!==!1&&W0(X1));if(!G1||!I0)return{ok:!1,error:`prime: OAuth account ${Z} is unavailable`};let u1=G1;try{u1=await n0.refreshAccount(G1,I0)}catch(X1){return{ok:!1,reason:"token-refresh",error:X1 instanceof Error?X1.message:String(X1)}}V=u1.access,N=uJ}if(!V)return{ok:!1,error:"prime: no access token available"};let X=DZ(),O=await k4(V,N,Z==="main"?x0:Z),U=await D$(JSON.stringify(X),{identity:O}),D=new Headers({"content-type":"application/json"});e1(D,V,{body:JSON.parse(U),identity:O}),D.delete("content-length"),D.delete("transfer-encoding");let w=K$(Zj,{baseURL:""}),C=w.url?.toString()??w.input.toString(),n=await fetch(C,{method:"POST",headers:D,body:U,signal:AbortSignal.timeout(30000)}),w0=Math.round(performance.now()-W);if(!n.ok){let I0=await n.text().catch(()=>"")||`HTTP ${n.status}`;return{ok:!1,status:n.status,ms:w0,error:I0}}let l0=(await n.json().catch(()=>null))?.usage,d0=l0&&(Number.isFinite(l0.input_tokens)||Number.isFinite(l0.output_tokens))?{inputTokens:Number.isFinite(l0.input_tokens)?l0.input_tokens:void 0,outputTokens:Number.isFinite(l0.output_tokens)?l0.output_tokens:void 0}:void 0;return{ok:!0,status:n.status,ms:w0,...d0&&{usage:d0}}}catch(X){return{ok:!1,ms:Math.round(performance.now()-W),error:X instanceof Error?X.message:String(X)}}}let V3={storagePath:z,loadStorage:()=>x(z),getAccountFingerprint:async(Z)=>{let W=await E8(Z,z);return W?h0(W):void 0},refreshQuota:async(Z)=>{if(Z==="main")return uZ();return iZ(Z)},sendPrime:nZ,recordSuccess:(Z,W)=>R8(Z,W,z)},E1=m3(z,()=>new UZ(V3),{slot:$.directory??"default",rebind:(Z)=>Z.updateOptions(V3)});if(f4(G0))E1.start();function oZ(Z){let W=Z.plan.sessionId,V=Z1(Z.plan.requestedModel)?"Opus 5":"Fable",N=async()=>{let D=Z.warmTarget;if(!D){S.debug("fable-fallback","cache warm skipped",{session:W,reason:"Opus response was not served by an OAuth route"});return}let w=o7(D.bodyText,Z.plan.requestedModel);if(!w.ok){S.warn("fable-fallback","cache warm skipped",{session:W,reason:w.reason});return}try{let C=await i4.prewarmNow({sessionId:W,url:D.url,headers:D.headers,bodyText:w.bodyText,oauthAccountId:i.recoveryAccount(Z.plan)??D.oauthAccountId});if(C.ok){S.debug("fable-fallback",`${V} cache warmed`,{session:W,remaining:i.remaining(Z.plan),...C.usage&&{usage:C.usage}});return}S.warn("fable-fallback",`${V} cache warm skipped`,{session:W,status:C.status,reason:C.reason})}catch(C){S.warn("fable-fallback",`${V} cache warm failed`,{session:W,error:C instanceof Error?C.message:String(C)})}},{recoveryKey:X}=Z.plan,U=(D4.get(X)??Promise.resolve()).then(N,N);return D4.set(X,U),U.finally(()=>{if(D4.get(X)===U)D4.delete(X)}),U}async function rZ(){return u4=await m$.list(i4.trackedSessions()),u4}if(h4({enabled:E4(G0),mode:R4(G0)}),C$(T$(G0)),R$(F$(G0)),!process.env.OPENCODE_ANTHROPIC_AUTH_LOG_LEVEL)X8(A$(G0)??"info");let N3=null;if($.directory){let Z=globalThis;if(Z.__anthropicAuthRpcServer)await Z.__anthropicAuthRpcServer.stop().catch(()=>{}),Z.__anthropicAuthRpcServer=void 0;try{N3=await r3({dir:fZ($.directory),drain:n3,apply:L5}),Z.__anthropicAuthRpcServer=N3}catch(W){S.warn("rpc","failed to start",{error:W instanceof Error?W.message:String(W)})}}let k0={activeId:"main",route:"main"},sZ=vZ(),e0=new Map;function aZ(Z,W,V){if(!Z||!W)return Z;let N={...Z,accounts:Z.accounts.map((U)=>{let D=W.accounts.find((w)=>w.id===U.id);if(!W0(U)||!D||!W0(D)||!U.access||D.access!==U.access)return U;return{...U,profile:D.profile}})},X=Z.main?.profile,O=Z.main??W.main;if(V&&O&&(!X||I$(X,x0)))N.main={...O,profile:W.main?.profile};return N}function G3(Z,W){if(A.updateStorage(Z),A.seedMainFromStorage(Z,c0),!W.skipFallbackQuotaSeed)A.seedFallbacksFromAccounts((Z?.accounts??[]).filter(W0));let V=A.getMain(c0),N=A.getLastApiError(),X=Z?.refresh?.mainLastRefreshError;return{main:{quota:V?.quota??null,tierLabel:x$(Z?.main?.profile),quotaBackedOff:A.isBackedOff(),quotaBackoffUntil:N?.nextRetryAt,refreshBackedOff:X?Y1(X,x0??Z?.mainAccountId,Date.now(),W.mainRefreshToken?h0(W.mainRefreshToken):void 0):!1,refreshBackoffUntil:X?.nextRetryAt},fallbacks:(Z?.accounts??[]).filter((O)=>O.enabled!==!1&&W0(O)).map((O)=>({id:O.id,label:O.label,tierLabel:x$(O.profile),quota:W.skipFallbackQuotaSeed?null:O.access?A.getFallback(O.id,O)?.quota??null:null,needsReauth:O.lastRefreshError!=null&&Y1(O.lastRefreshError,O.id,Date.now(),h0(O.refresh))&&w1(O.lastRefreshError),vaultReauth:c1.has(O.id)&&Boolean(O.access&&O.expires&&O.expires>Date.now()),enabled:O.enabled!==!1})),activeId:W.activeId,route:W.route,relay:(()=>{let O=oJ(Z);return O?{enabled:!0,transport:O.transport??"http"}:null})(),fastMode:E$(),cacheKeep:{enabled:bJ(Z),window:kJ(Z)?"always":Z?.cacheKeep?.startHour!=null&&Z?.cacheKeep?.endHour!=null?`${Z.cacheKeep.startHour}-${Z.cacheKeep.endHour}`:void 0,trackedSessions:u4.length},prime:f4(Z)?{enabled:!0,accounts:E1.stats(Z)}:void 0,fableRecoveries:e0.size>0?[...e0.values()]:void 0,lastUpdated:Date.now()}}function $1(Z,W){let V=W.routingAuthoritative!==!1;if(V)k0={activeId:W.activeId,route:W.route};let N=G3(Z,W);return kZ(N,sZ,{routingAuthoritative:V,resolvePreservedRouting:V?void 0:async(X)=>{let O=await zj(X,()=>x(z),{activeId:N.activeId,route:N.route}),U=W.useHydratedProfiles?aZ(O.freshStorage,Z,W.mainAccessToken):O.freshStorage;return{activeId:O.activeId,route:O.route,state:G3(U,{...W,activeId:O.activeId,route:O.route})}},onRoutingResolved:V?void 0:(X)=>{k0=X}}).catch((X)=>S.warn("sidebar","state write failed",{error:X instanceof Error?X.message:String(X)}))}async function U4(){let Z=await x(z),W;if(S0)try{W=(await S0()).access}catch{}$1(Z,{activeId:k0.activeId,route:k0.route,mainAccessToken:W,mainRefreshToken:void 0,routingAuthoritative:!1})}function tZ(Z,W,V){if(!W)return;if(Z?.quota?.enabled!==!0)return;let N=V?.accountIdentity??c0;if(A.getMain(N))return;if(p$)return;p$=!0,A.refreshMain(N,W,V?.generation).then(()=>U4()).catch(()=>{}).finally(()=>{p$=!1})}let S0=null,x0,c0,L4,X3=0,n4=new Map,p$=!1,d1=null,o4=0;function eZ(Z){let W=Z?.refresh?.refreshBeforeExpiryMinutes??Vj;return Math.max(bZ,W)*60000}function $5(Z){return Z?.refresh?.enabled!==!1}async function z3(Z,W){if(!Z)return;let V=await x(z),N=V?.refresh?.mainLastRefreshError;if(!V?.refresh||!N)return;let X=Boolean(N.accountIdentity)&&N.accountIdentity!==Z,O=Boolean(N.refreshTokenFingerprint)&&Boolean(W)&&N.refreshTokenFingerprint!==W;if(!X&&!O)return;if(V.refresh.mainLastRefreshError=void 0,V.refresh.mainRefreshErrorClearedAt=BJ(V.refresh.mainRefreshErrorClearedAt,Date.now()),!L4?.startsWith("sk-ant-oat")){let U=V.quota?.mainLastQuotaApiError;if(U&&U.accountIdentity!==c0){let D=A.clearMainBackoff();V.quota=V.quota??{},V.quota.mainLastQuotaApiError=void 0,V.quota.mainQuotaErrorGeneration=Math.max(V.quota.mainQuotaErrorGeneration??0,D??A.getMainQuotaErrorGeneration()),V.quota.mainQuotaErrorClearedAt=x4(V.quota.mainQuotaErrorClearedAt,A.getMainQuotaErrorClearedAt()??Date.now())}}await W1(V,z,{mainRefresh:!0,...!L4?.startsWith("sk-ant-oat")&&{mainQuota:!0}}),L0("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:N.checkedAt,previousNextRetryAt:N.nextRetryAt,previousRetryCount:N.retryCount})}async function J5(){let Z=[],W;if(S0)try{let D=await S0();if(D.type==="oauth"&&D.access){W=D.access,await C1(D.access);let w=await A.refreshMain(c0,D.access);Z.push({name:"OpenCode anthropic",role:"main",quota:w})}else if(D.type==="oauth")Z.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(D){let w=D instanceof Error?D.message:String(D);Z.push({name:"OpenCode anthropic",role:"main",error:w.includes("429")?"Usage API rate limited — try again in a moment":w})}let{storage:V,errors:N}=await n0.refreshQuotaForAllAccounts({force:!0}),X=await G4(V??R0(),W,AbortSignal.timeout(3000)),O=Z.find((D)=>D.role==="main");if(O)O.tierLabel=x$(X.main?.profile);let U=new Map(N.map((D)=>[D.accountId,D.message]));if(Z.push(...PZ(X,U)),!S0)Z.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return TZ({accounts:Z,refreshedAt:Date.now()})}async function O3(Z){if(S0)try{let W=await S0();await $1(Z,{activeId:k0.activeId,route:k0.route,mainAccessToken:W.access,mainRefreshToken:W.refresh,routingAuthoritative:!1})}catch{}}function Q4(Z,W,V,N){if(e0.delete(Z.sessionId),e0.set(Z.sessionId,{...Z,changedAt:Date.now()}),e0.size>128){let X=e0.keys().next().value;if(X)e0.delete(X)}if($1(W,{activeId:k0.activeId,route:k0.route,mainAccessToken:V.access,mainRefreshToken:V.refresh,routingAuthoritative:!1}),N)K3(Z.sessionId,N)}function K3(Z,W){if(XJ(Z))return;let V=e.get(Z)??[];if(V.push(W),V.length>4)V.splice(0,V.length-4);e.delete(Z),e.set(Z,V);while(e.size>128){let N=e.keys().next().value;if(N)e.delete(N);else break}if(f0.has(Z))c$(Z)}function c$(Z,W=0){if(!e.has(Z)||N1.has(Z))return;N1.set(Z,W);let V=()=>{if(N1.get(Z)!==W)return;N1.delete(Z),Z5(Z,W)};if(W===0)setImmediate(V);else setTimeout(V,Hj*W)}function l$(Z,W){if(W+1<Kj)c$(Z,W+1)}async function Z5(Z,W){if(!f0.has(Z)||!e.has(Z))return;let V=$.client.session;if(typeof V?.status==="function")try{let N=await Promise.resolve(V.status()),X=N!==null&&typeof N==="object"?N:void 0,O=X&&Object.hasOwn(X,"data")?X.data:X;if(O===null||typeof O!=="object"||Array.isArray(O)){l$(Z,W);return}let U=O[Z];if(U!==void 0&&(!U||typeof U!=="object"||U.type!=="idle")){l$(Z,W);return}}catch{l$(Z,W);return}if(!f0.has(Z))return;await j5(Z)}function j5(Z){let W=m0.get(Z);if(W)return W;let V=(async()=>{while(!0){let N=e.get(Z),X=N?.[0];if(!X){e.delete(Z);return}try{if(!await V8($,Z,X,{noReply:!0,beforeActiveAssistant:!0,canSend:()=>f0.has(Z)}))return;N.shift()}catch(O){S.warn("fable-fallback","Desktop notification failed",{session:Z,error:O instanceof Error?O.message:String(O)})}}})();return m0.set(Z,V),V.finally(()=>{if(m0.get(Z)===V)m0.delete(Z)}),V}function W5(Z,W,V,N){if(W.fallback&&W.targetModel){let X=_0.get(Z.recoveryKey);_0.delete(Z.recoveryKey),_0.set(Z.recoveryKey,W.targetModel);while(_0.size>128){let U=_0.keys().next().value;if(U)_0.delete(U);else break}let O=e0.get(Z.sessionId);if(X===W.targetModel&&O?.mode==="server"&&O1(O.requestedModelId)===O1(Z.requestedModel)&&O.targetModelId===W.targetModel)return;S.info("fable-fallback","Anthropic server-side safety fallback active",{session:Z.sessionId,requestedModel:Z.requestedModel,targetModel:W.targetModel,handoff:W.handoff}),Q4({sessionId:Z.sessionId,mode:"server",remaining:0,requestedModelId:Z.requestedModel,targetModelId:W.targetModel},V,N,qj(Z.requestedModel,W.targetModel));return}if(W.stopReason==="refusal"||!_0.delete(Z.recoveryKey))return;S.info("fable-fallback","Anthropic server-side safety fallback ended",{session:Z.sessionId,requestedModel:Z.requestedModel}),Q4({sessionId:Z.sessionId,mode:"fable",remaining:0,requestedModelId:Z.requestedModel},V,N,Cj(Z.requestedModel))}function Y5(Z,W,V){if(!Z)return;for(let N of _0.keys())if(N.startsWith(`${Z}\x00`))_0.delete(N);if(!e0.delete(Z))return;$1(W,{activeId:k0.activeId,route:k0.route,mainAccessToken:V.access,mainRefreshToken:V.refresh,routingAuthoritative:!1})}async function V5(Z){let W=d8(Z);if(W.type==="enable"||W.type==="disable"){let O=W.type==="enable",U=await T8(O),D=R4(U);return h4({enabled:O,mode:D}),S.info("commands","cache enabled changed",{enabled:O}),q$({argumentsText:Z,enabled:O,mode:D})}if(W.type==="mode"){let O=await F8(W.mode),U=E4(O);return h4({enabled:U,mode:W.mode}),S.info("commands","cache mode changed",{mode:W.mode}),q$({argumentsText:Z,enabled:U,mode:W.mode})}let V=await x(z),N=E4(V),X=R4(V);return h4({enabled:N,mode:X}),q$({argumentsText:Z,enabled:N,mode:X})}async function N5(Z){let W=o8(Z),V=await x(z);if(W.type==="window")V=await q8(W.startHour,W.endHour),S.info("commands","cachekeep schedule changed",{schedule:`${W.startHour}-${W.endHour}`});else if(W.type==="always")V=await C8(),S.info("commands","cachekeep schedule changed",{schedule:"always"});else if(W.type==="disable")V=await M8(!1),S.info("commands","cachekeep enabled changed",{enabled:!1});else if(W.type==="subagents")V=await x8(W.enabled),S.info("commands","cachekeep subagents changed",{subagents:W.enabled});let N=hJ(V),X=await rZ(),O=X.length?Math.min(...X.map((U)=>U.nextPrewarmAt)):void 0;return s8({argumentsText:Z,enabled:r8(V),always:kJ(V),window:N,hybridActive:bJ(V),trackedSessions:X.length,trackedSessionDetails:X,nextPrewarmAt:O})}async function G5(Z){let W=i8(Z);if(W.type==="enable"||W.type==="disable"){let X=W.type==="enable";return await S8(X),C$(X),S.info("commands","dump changed",{enabled:X}),fJ({argumentsText:Z,enabled:X})}let V=await x(z),N=T$(V);return C$(N),fJ({argumentsText:Z,enabled:N})}async function X5(Z){let W=jZ(Z);if(W.type==="enable"||W.type==="disable"){let X=W.type==="enable";return await A8(X),R$(X),S.info("commands","fast mode changed",{enabled:X}),pJ({argumentsText:Z,enabled:X})}let V=await x(z),N=F$(V);return R$(N),pJ({argumentsText:Z,enabled:N})}async function z5(Z,W){if(qZ(Z).type==="fire"){if(!W)return`## Claude Start Failed
21
23
 
22
- - OpenCode did not provide a session ID.`;try{return await T4(N.client,Z),J4({argumentsText:J}).text}catch(V){return`## Claude Start Failed
24
+ - OpenCode did not provide a session ID.`;try{return await g3($.client,W),tJ({argumentsText:Z}).text}catch(N){return`## Claude Start Failed
23
25
 
24
- - ${V instanceof Error?V.message:String(V)}`}}return J4({argumentsText:J}).text}async function w3(J,Z){let O=dJ(J);if(O.type==="mode")return await iJ(O.mode,j),M.info("commands","routing mode changed",{mode:O.mode}),W4({argumentsText:J,mode:O.mode});if(O.type==="reset"&&Z)await b0.clear(Z),M.info("commands","sticky routing assignment reset");let V=await x(j);return W4({argumentsText:J,mode:l1(V)})}async function B3(J){let Z=RJ(J);if(Z.type==="level")return await ZJ(Z.level),M.info("commands","log level changed",{level:Z.level}),rW({argumentsText:J,level:Z.level});let O=await x(j),V=sN(O)??"info";return rW({argumentsText:J,level:V})}async function C3(J){let Z=bJ(J),O=ON(await x(j)),V=O;if(Z.type==="enable"){if(V=!0,!O)await MW(!0,j),g0.start(),M.info("commands","prime changed",{enabled:!0})}else if(Z.type==="disable"){if(V=!1,O)await MW(!1,j),g0.stop(),M.info("commands","prime changed",{enabled:!1})}if(Z.type==="enable"||Z.type==="disable"){let _=await x(j);if(_&&K0)try{let w=await K0().catch(()=>{return});await l0(_,{activeId:A0.activeId,route:A0.route,mainAccessToken:w?.access,mainRefreshToken:w?.refresh,routingAuthoritative:!1})}catch(w){M.warn("sidebar","prime-toggle sidebar write failed",{error:w instanceof Error?w.message:String(w)})}}let X=await x(j);return gJ({argumentsText:J,enabled:V,accounts:g0.stats(X)}).text}async function T3(J,Z){let O=MJ(J);if(O.type==="add-apikey"){if(!O.apiKey)return{text:"API key is required",accounts:W1(await x(j)??y0())};let K=O.label?.trim()||void 0,C=Date.now(),g=O.baseURL?.trim()||"https://api.kie.ai/claude";if(!lN(g))return{text:"Invalid base URL. Must be an http(s) URL without embedded credentials.",accounts:W1(await x(j)??y0())};let J0=O.authHeader??"authorization-bearer",D0={id:K||gN(),label:K||void 0,type:"api",apiKey:O.apiKey,baseURL:g,authHeader:J0,enabled:!0,addedAt:C,lastUsed:C};await vW(D0,j),M.info("commands","account added",{id:D0.id,label:D0.label,type:"apikey"});let R0=await x(j);await G4(R0);let v0=W1(R0??{version:1,accounts:[]});return{text:`API key account "${D0.label??D0.id}" added.`,accounts:v0}}if(O.type==="add-oauth-start"){let K=await cN("max"),C={state:K.state,verifier:K.verifier,redirectUri:K.redirectUri,createdAt:Date.now()};return n(Z??"default",C),{text:`Open this URL in your browser:
25
- ${K.url}`,knobs:{oauthUrl:K.url},accounts:W1(await x(j)??y0())}}if(O.type==="add-oauth-finish"){let K=Z??"default",C=a(K);if(!C)return{text:"OAuth session expired. Please start again.",accounts:W1(await x(j)??y0())};try{let g=await uN(O.code,C.verifier,C.redirectUri,C.state);if(g.type==="failed")return{text:"OAuth authentication failed. Please check the code and try again.",accounts:W1(await x(j)??y0())};let J0=Date.now(),D0={id:gN(),type:"oauth",authLineageId:gN(),label:O.label||void 0,access:g.access,refresh:g.refresh,expires:g.expires,enabled:!0,addedAt:J0,lastUsed:J0,lastRefreshedAt:J0};await vW(D0,j),M.info("commands","account added",{id:D0.id,label:D0.label,type:"oauth"});let R0=await x(j);return await G4(R0),{text:"OAuth account added.",accounts:W1(R0??y0())}}catch{return{text:"OAuth exchange failed due to a network error. Please try again.",accounts:W1(await x(j)??y0())}}finally{q.delete(K)}}let V=await x(j);if(O.type==="status"&&V){let K;if(K0)try{let C=await K0();if(C.type==="oauth")K=C.access}catch{}V=await o0(V,K,AbortSignal.timeout(3000))}let X=IJ({argumentsText:J,storage:V??{version:1,accounts:[]}});if(X.updated){if(X.updated.action==="enable"||X.updated.action==="disable"){let C=X.updated.action==="enable";await _J(X.updated.id,C,j);let g=X.updated.id,J0=V?.accounts.find((D0)=>D0.id===g);M.info("commands",`account ${X.updated.action}d`,{id:g,label:J0?.label,enabled:C})}else if(X.updated.action==="remove"){await VJ(X.updated.id,j);let C=X.updated.id,g=V?.accounts.find((J0)=>J0.id===C);M.info("commands","account removed",{id:C,label:g?.label})}else if(X.updated.action==="reorder"){await zJ(X.updated.newOrder??X.updated.previousOrder??[],j);let C=X.updated.id,g=V?.accounts.find((J0)=>J0.id===C);M.info("commands","account reordered",{id:C,label:g?.label})}let K=await x(j);if(K0)try{let C=await K0();l0(K,{activeId:A0.activeId,route:A0.route,mainAccessToken:C.access,mainRefreshToken:C.refresh,routingAuthoritative:!1})}catch{}}let _=await x(j),w=W1(_??{version:1,accounts:[]});return{text:X.text,accounts:w}}async function X4(J,Z,O){if(J==="claude-quota")return{command:J,text:await V3(),knobs:{}};if(J==="claude-start"){let K=await P3(Z,O);return{command:J,text:K,knobs:{}}}if(J==="claude-logging"){let K=await B3(Z),C=await x(j);return{command:J,text:K,knobs:{level:sN(C)??"info"}}}if(J==="claude-account"){let K=await T3(Z,O),C={accounts:K.accounts};if("knobs"in K&&K.knobs)Object.assign(C,K.knobs);return{command:J,text:K.text,knobs:C}}if(J==="claude-routing"){let K=await w3(Z,O),C=await x(j);return{command:J,text:K,knobs:{mode:l1(C)}}}if(J==="claude-fast"){let K=await L3(Z),C=await x(j);return{command:J,text:K,knobs:{enabled:dN(C)}}}if(J==="claude-dump"){let K=await U3(Z),C=await x(j);return{command:J,text:K,knobs:{enabled:iN(C)}}}if(J==="claude-cache"){let K=await H3(Z),C=await x(j);return{command:J,text:K,knobs:{enabled:jN(C),mode:GN(C)}}}if(J==="claude-cachekeep"){let K=await D3(Z),C=await x(j);return{command:J,text:K,knobs:{window:mW(C)}}}if(J==="claude-prime"){let K=await C3(Z),C=await x(j),g=ON(C);return{command:J,text:K,knobs:{enabled:g,accounts:g0.stats(C)}}}if(J!=="claude-killswitch")throw Error(`Unhandled command modal: ${J}`);let V=await x(),X=RW(V),_=(V?.accounts??[]).filter((K)=>K.enabled!==!1).map((K)=>K.id),w=fJ({argumentsText:Z,config:X,accountIds:_});if(w.updatedConfig){if(await XJ(w.updatedConfig),X.enabled!==w.updatedConfig.enabled)M.info("commands","killswitch changed",{enabled:w.updatedConfig.enabled===!0});if(JSON.stringify(X.main)!==JSON.stringify(w.updatedConfig.main)||JSON.stringify(X.accounts)!==JSON.stringify(w.updatedConfig.accounts))M.info("commands","killswitch thresholds changed",{thresholds:w.updatedConfig.main??w.updatedConfig.accounts})}return{command:J,text:w.text,knobs:{config:RW(await x()),accountIds:_}}}async function E3(J){let Z=await X4(J.command,J.arguments,J.sessionId);return{text:Z.text,knobs:Z.knobs}}function q3(J,Z=10){let O=Math.max(0,Math.min(Math.round(J/100*Z),Z));return"█".repeat(O)+"░".repeat(Z-O)}function PN(J,Z){return`${J} ${q3(Z)} ${String(Math.round(Z)).padStart(3)}%`}function V4(J){if(!J)return"";let Z=new Date(J).getTime();if(Number.isNaN(Z))return"";let O=Z-Date.now();if(O<=0)return"resets now";let V=Math.floor(O/60000);if(V<1)return"resets <1m";if(V<60)return`resets ${V}m`;let X=Math.floor(V/60),_=V%60;return _>0?`resets ${X}h${_}m`:`resets ${X}h`}function F3(J,Z,O){let V=[],X=0;if(J){let{five_hour:K,seven_day:C}=J;if(K||C){let J0=O==="main"?"active":"idle",D0=V4(K?.resetsAt),R0=[`main · ${J0}${D0?` (${D0})`:""}`];if(K)R0.push(PN("5h",K.usedPercent)),X=Math.max(X,K.usedPercent);if(C)R0.push(PN("7d",C.usedPercent)),X=Math.max(X,C.usedPercent);V.push(R0.join(`
26
- `))}}if(Z?.length)for(let K of Z){let C=K.quota;if(!C)continue;let{five_hour:g,seven_day:J0}=C;if(!g&&!J0)continue;let D0=K.label||"alt",v0=O===K.id?"active":"idle",s0=V4(g?.resetsAt),w0=[`${D0} · ${v0}${s0?` (${s0})`:""}`];if(g)w0.push(PN("5h",g.usedPercent)),X=Math.max(X,g.usedPercent);if(J0)w0.push(PN("7d",J0.usedPercent)),X=Math.max(X,J0.usedPercent);V.push(w0.join(`
27
- `))}if(!V.length)return;let _=V.join(`
26
+ - ${N instanceof Error?N.message:String(N)}`}}return tJ({argumentsText:Z}).text}async function O5(Z,W){let V=AZ(Z);if(V.type==="mode")return await SZ(V.mode,z),S.info("commands","routing mode changed",{mode:V.mode}),sJ({argumentsText:Z,mode:V.mode});if(V.type==="reset"&&W)await V4.clear(W),S.info("commands","sticky routing assignment reset");let N=await x(z);return sJ({argumentsText:Z,mode:Y4(N)})}async function K5(Z){let W=YZ(Z);if(W.type==="level")return await k8(W.level),S.info("commands","log level changed",{level:W.level}),dJ({argumentsText:Z,level:W.level});let V=await x(z),N=A$(V)??"info";return dJ({argumentsText:Z,level:N})}async function H5(Z){let W=KZ(Z),V=f4(await x(z)),N=V;if(W.type==="enable"){if(N=!0,!V)await PJ(!0,z),E1.start(),S.info("commands","prime changed",{enabled:!0})}else if(W.type==="disable"){if(N=!1,V)await PJ(!1,z),E1.stop(),S.info("commands","prime changed",{enabled:!1})}if(W.type==="enable"||W.type==="disable"){let O=await x(z);if(O&&S0)try{let U=await S0().catch(()=>{return});await $1(O,{activeId:k0.activeId,route:k0.route,mainAccessToken:U?.access,routingAuthoritative:!1})}catch(U){S.warn("sidebar","prime-toggle sidebar write failed",{error:U instanceof Error?U.message:String(U)})}}let X=await x(z);return HZ({argumentsText:Z,enabled:N,accounts:E1.stats(X)}).text}async function D5(Z,W){let V=JZ(Z);if(V.type==="add-apikey"){if(!V.apiKey)return{text:"API key is required",accounts:V1(await x(z)??R0())};let D=V.label?.trim()||void 0,w=Date.now(),C=V.baseURL?.trim()||"https://api.kie.ai/claude";if(!P$(C))return{text:"Invalid base URL. Must be an http(s) URL without embedded credentials.",accounts:V1(await x(z)??R0())};let n=V.authHeader??"authorization-bearer",w0={id:D||U$(),label:D||void 0,type:"api",apiKey:V.apiKey,baseURL:C,authHeader:n,enabled:!0,addedAt:w,lastUsed:w};await IJ(w0,z),S.info("commands","account added",{id:w0.id,label:w0.label,type:"apikey"});let b0=await x(z);await O3(b0);let l0=V1(b0??{version:1,accounts:[]});return{text:`API key account "${w0.label??w0.id}" added.`,accounts:l0}}if(V.type==="add-oauth-start"){let D=await B$("max"),w={state:D.state,verifier:D.verifier,redirectUri:D.redirectUri,createdAt:Date.now()};return b(W??"default",w),{text:`Open this URL in your browser:
27
+ ${D.url}`,knobs:{oauthUrl:D.url},accounts:V1(await x(z)??R0())}}if(V.type==="add-oauth-finish"){let D=W??"default",w=t(D);if(!w)return{text:"OAuth session expired. Please start again.",accounts:V1(await x(z)??R0())};try{let C=await w$(V.code,w.verifier,w.redirectUri,w.state);if(C.type==="failed")return{text:"OAuth authentication failed. Please check the code and try again.",accounts:V1(await x(z)??R0())};let n=Date.now(),w0={id:U$(),type:"oauth",authLineageId:U$(),label:V.label||void 0,access:C.access,refresh:C.refresh,expires:C.expires,enabled:!0,addedAt:n,lastUsed:n,lastRefreshedAt:n};await IJ(w0,z),S.info("commands","account added",{id:w0.id,label:w0.label,type:"oauth"});let b0=await x(z);return await O3(b0),{text:"OAuth account added.",accounts:V1(b0??R0())}}catch{return{text:"OAuth exchange failed due to a network error. Please try again.",accounts:V1(await x(z)??R0())}}finally{h.delete(D)}}let N=await x(z);if(V.type==="status"&&N){let D;if(S0)try{let w=await S0();if(w.type==="oauth")D=w.access}catch{}N=await G4(N,D,AbortSignal.timeout(3000))}let X=ZZ({argumentsText:Z,storage:N??{version:1,accounts:[]},claustrum:V.type==="status"?await LJ($4()):void 0});if(X.updated){if(X.updated.action==="enable"||X.updated.action==="disable"){let w=X.updated.action==="enable";await c8(X.updated.id,w,z);let C=X.updated.id,n=N?.accounts.find((w0)=>w0.id===C);S.info("commands",`account ${X.updated.action}d`,{id:C,label:n?.label,enabled:w})}else if(X.updated.action==="remove"){await m8(X.updated.id,z);let w=X.updated.id,C=N?.accounts.find((n)=>n.id===w);S.info("commands","account removed",{id:w,label:C?.label})}else if(X.updated.action==="reorder"){await p8(X.updated.newOrder??X.updated.previousOrder??[],z);let w=X.updated.id,C=N?.accounts.find((n)=>n.id===w);S.info("commands","account reordered",{id:w,label:C?.label})}else if(X.updated.action==="reset-backoff"){let w=x0??N?.mainAccountId;N=N??R0(),N.refresh=N.refresh??{},N.refresh.mainLastRefreshError=void 0,N.refresh.mainRefreshErrorClearedAt=BJ(N.refresh.mainRefreshErrorClearedAt,Date.now());let C=N.quota?.mainLastQuotaApiError;if(!C?.accountIdentity||!w||C.accountIdentity===w){let n=A.clearMainBackoff();N.quota=N.quota??{},N.quota.mainLastQuotaApiError=void 0,N.quota.mainQuotaErrorGeneration=Math.max(N.quota.mainQuotaErrorGeneration??0,n??A.getMainQuotaErrorGeneration()),N.quota.mainQuotaErrorClearedAt=x4(N.quota.mainQuotaErrorClearedAt,A.getMainQuotaErrorClearedAt()??Date.now())}await W1(N,z,{mainRefresh:!0,mainQuota:!0}),S.info("commands","main OAuth refresh and quota backoff cleared",{mainIdentity:w})}let D=await x(z);if(S0)try{let w=await S0();$1(D,{activeId:k0.activeId,route:k0.route,mainAccessToken:w.access,mainRefreshToken:w.refresh,routingAuthoritative:!1})}catch{}}let O=await x(z),U=V1(O??{version:1,accounts:[]});return{text:X.text,accounts:U}}async function U5(){let Z=await x(z),W=V1(Z??R0()).map((N)=>({...N,claustrumGate:N.role==="main"?"na":g1(Z??R0(),N.id)?"on":"off",vaultServed:N.role==="fallback"&&T1(N.id,Z)})),V=await LJ($4());return{accounts:W,claustrumDetection:V.status}}async function H3(Z,W,V){if(Z==="claude-quota")return{command:Z,text:await J5(),knobs:{}};if(Z==="claude-start"){let D=await z5(W,V);return{command:Z,text:D,knobs:{}}}if(Z==="claude-logging"){let D=await K5(W),w=await x(z);return{command:Z,text:D,knobs:{level:A$(w)??"info"}}}if(Z==="claude-account"){let D=await D5(W,V),w=await U5(),C={accounts:w.accounts,claustrumDetection:w.claustrumDetection};if("knobs"in D&&D.knobs)Object.assign(C,D.knobs);return{command:Z,text:D.text,knobs:C}}if(Z==="claude-routing"){let D=await O5(W,V),w=await x(z);return{command:Z,text:D,knobs:{mode:Y4(w)}}}if(Z==="claude-fast"){let D=await X5(W),w=await x(z);return{command:Z,text:D,knobs:{enabled:F$(w)}}}if(Z==="claude-dump"){let D=await G5(W),w=await x(z);return{command:Z,text:D,knobs:{enabled:T$(w)}}}if(Z==="claude-cache"){let D=await V5(W),w=await x(z);return{command:Z,text:D,knobs:{enabled:E4(w),mode:R4(w)}}}if(Z==="claude-cachekeep"){let D=await N5(W),w=await x(z);return{command:Z,text:D,knobs:{window:hJ(w)}}}if(Z==="claude-prime"){let D=await H5(W),w=await x(z),C=f4(w);return{command:Z,text:D,knobs:{enabled:C,accounts:E1.stats(w)}}}if(Z!=="claude-killswitch")throw Error(`Unhandled command modal: ${Z}`);let N=await x(),X=MJ(N),O=(N?.accounts??[]).filter((D)=>D.enabled!==!1).map((D)=>D.id),U=WZ({argumentsText:W,config:X,accountIds:O});if(U.updatedConfig){if(await y8(U.updatedConfig),X.enabled!==U.updatedConfig.enabled)S.info("commands","killswitch changed",{enabled:U.updatedConfig.enabled===!0});if(JSON.stringify(X.main)!==JSON.stringify(U.updatedConfig.main)||JSON.stringify(X.accounts)!==JSON.stringify(U.updatedConfig.accounts))S.info("commands","killswitch thresholds changed",{thresholds:U.updatedConfig.main??U.updatedConfig.accounts})}return{command:Z,text:U.text,knobs:{config:MJ(await x()),accountIds:O}}}async function L5(Z){let W=await H3(Z.command,Z.arguments,Z.sessionId);return{text:W.text,knobs:W.knobs}}function Q5(Z,W=10){let V=Math.max(0,Math.min(Math.round(Z/100*W),W));return"█".repeat(V)+"░".repeat(W-V)}function r4(Z,W){return`${Z} ${Q5(W)} ${String(Math.round(W)).padStart(3)}%`}function D3(Z){if(!Z)return"";let W=new Date(Z).getTime();if(Number.isNaN(W))return"";let V=W-Date.now();if(V<=0)return"resets now";let N=Math.floor(V/60000);if(N<1)return"resets <1m";if(N<60)return`resets ${N}m`;let X=Math.floor(N/60),O=N%60;return O>0?`resets ${X}h${O}m`:`resets ${X}h`}function _5(Z,W,V){let N=[],X=0;if(Z){let{five_hour:D,seven_day:w}=Z;if(D||w){let n=V==="main"?"active":"idle",w0=D3(D?.resetsAt),b0=[`main · ${n}${w0?` (${w0})`:""}`];if(D)b0.push(r4("5h",D.usedPercent)),X=Math.max(X,D.usedPercent);if(w)b0.push(r4("7d",w.usedPercent)),X=Math.max(X,w.usedPercent);N.push(b0.join(`
28
+ `))}}if(W?.length)for(let D of W){let w=D.quota;if(!w)continue;let{five_hour:C,seven_day:n}=w;if(!C&&!n)continue;let w0=D.label||"alt",l0=V===D.id?"active":"idle",d0=D3(C?.resetsAt),I0=[`${w0} · ${l0}${d0?` (${d0})`:""}`];if(C)I0.push(r4("5h",C.usedPercent)),X=Math.max(X,C.usedPercent);if(n)I0.push(r4("7d",n.usedPercent)),X=Math.max(X,n.usedPercent);N.push(I0.join(`
29
+ `))}if(!N.length)return;let O=N.join(`
28
30
 
29
- `),w=X>=90?"error":X>=70?"warning":"info";Y.tui?.showToast?.({body:{title:"Claude Quota",message:_,variant:w,duration:w==="error"?8000:5000}})?.catch?.(()=>{})}return{"chat.message":async({sessionID:J},Z)=>{o.observeSyntheticMessage({sessionId:J,messageId:Z.message.id,parts:Z.parts})},"chat.headers":async({sessionID:J,message:Z},O)=>{o.markHeaders({sessionId:J,messageId:Z.id,headers:O.headers})},event:async({event:J})=>{let Z=J,O=Z.properties?.info,V=Z.properties?.sessionID??O?.sessionID??O?.id;if(!V)return;if(Z.type==="session.status"&&Z.properties?.status?.type!=="idle")s.delete(V);if(Z.type==="session.idle"){s.add(V);while(s.size>128){let X=s.values().next().value;if(X)s.delete(X);else break}VW(V)}if(Z.type==="session.deleted"){o.clearSession(V),u0.delete(V),N0.delete(V),s.delete(V);for(let X of l.keys())if(X.startsWith(`${V}\x00`))l.delete(X);$0.delete(V)}},config:async(J)=>{J.command={...J.command??{},[kW]:{template:kW,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[lW]:{template:lW,description:"Manage fallback accounts — list, enable/disable, reorder, remove, or add (API key or OAuth)."},[gW]:{template:gW,description:"Keep hybrid Claude cache warm always or during a local time window."},[aW]:{template:aW,description:"Start each OAuth account's five-hour quota window after reset."},[$4]:{template:$4,description:"Send a billed one-token synthetic turn to warm and renew the current Claude session cache."},[tW]:{template:tW,description:"Show current Claude OAuth quota usage for all accounts."},[hW]:{template:hW,description:"Show or toggle Anthropic request dump capture for debugging."},[iW]:{template:iW,description:"Show or toggle Anthropic fast mode for supported Opus models."},[oW]:{template:oW,description:"Show or set the plugin log level (error, warn, info, debug, trace)."},[N4]:{template:N4,description:"Show or change Claude account routing: main-first, fallback-first, or sticky-balanced."},[nW]:{template:nW,description:"Manage killswitch — hard-block requests when quota drops below per-account thresholds."}}},"experimental.chat.system.transform":async(J,Z)=>{if(!K8(J))return;Q8(Z.system)},provider:{id:"anthropic",async models(J,Z){let O=q8(C8(J.models));if(Z.auth?.type!=="oauth"||!g$(i??{}))return O;return F8(O)}},"command.execute.before":async(J)=>{if(!tJ.includes(J.command))return;let Z=J.command,O=await X4(Z,J.arguments,J.sessionID);if(Z==="claude-quota"){let V=await x(),X=K0?await K0().catch(()=>{return}):void 0;l0(V,{activeId:A0.activeId,route:A0.route,mainAccessToken:X?.access,mainRefreshToken:X?.refresh,routingAuthoritative:!1})}if(CW(J.sessionID))A4(O,J.sessionID);else await k$(N,J.sessionID,O.text);_8()},auth:{provider:"anthropic",async loader(J,Z){K0=J;let O=await J();if(O.type==="oauth"){let _=function(){if(f1)$.clearInterval(f1),f1=null;let Q=async()=>{try{let L=await x(j);if(!X3(L))return;let v=await J();if(v.type!=="oauth")return;if(await j4(v.refresh),!v.expires)return;let k=v.expires-Date.now(),F=O3(L);if(k>F)return;if(X0("[refresh] opencode main oauth background due",{expiresInMs:k,refreshBeforeMs:F}),v.refresh&&q1(L?.refresh?.mainLastRefreshError,v.refresh,Date.now())){X0("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:L?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:L?.refresh?.mainLastRefreshError?.retryCount,expiresInMs:k});return}if(v.refresh&&L?.refresh?.mainRefreshLeaseUntil&&L.refresh.mainRefreshLeaseUntil>Date.now()&&L.refresh.mainRefreshLeaseTokenHash===rN(v.refresh))return;await X();let p=await J();X0("[refresh] opencode main oauth refreshed in background",{newExpiresInMs:p.expires?p.expires-Date.now():void 0})}catch(L){M.warn("refresh","opencode main oauth refresh failed",{message:L instanceof Error?L.message:String(L)})}};if(f1=$.setInterval(()=>{Q()},r7+R$(s7)),"unref"in f1)f1.unref()},K=function(Q,L){if(Q instanceof Request&&Q.body)return!1;return L==null||typeof L==="string"},C=function(Q){if(typeof Q!=="string")return;try{let L=JSON.parse(Q);return typeof L.model==="string"?L.model:void 0}catch{return}},g=function(Q){return Q.has("x-parent-session-id")},J0=function(Q){return Q.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(Q)},D0=function(Q){return Q?.quota?.enabled===!0},v0=function(Q,L){if(Q.delete("authorization"),Q.delete("x-api-key"),L.authHeader==="x-api-key")Q.set("x-api-key",L.apiKey??"");else Q.set("Authorization",`Bearer ${L.apiKey??""}`);Q.set("Content-Type","application/json")},j1=function(Q){return f.getFallback(Q.id,Q.access)?.quota??Q.quota},R1=function(Q){return["five_hour","seven_day"].some((L)=>(Q?.[L]?.remainingPercent??1)<=0)},a0=function(Q,L){return Q.status===429||L},wN=function(Q){if(!Q)return!1;let L=f.getMain(Q);return Boolean(L&&L.refreshAfter>Date.now()&&R1(L.quota))},V=null;async function X(){if(!V)V=(async()=>{let v=null,k=null,F=null;async function p(h){let E=await x(j)??y0();E.refresh=E.refresh??{},h(E),await E1(E,j,{mainRefresh:!0})}async function P(h){let E=Date.now()+a7;while(Date.now()<E){await new Promise((T)=>$.setTimeout(T,I$+R$(I$)));let S=await J();if(S.type!=="oauth"||!S.access)continue;if((S.access!==h.access||S.refresh!==h.refresh||(S.expires??0)>(h.expires??0)+60000)&&(!S.expires||S.expires>Date.now())){if(h.refresh&&S.refresh)await nN({previousRefreshToken:h.refresh,currentRefreshToken:S.refresh},j);return X0("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:S.expires?S.expires-Date.now():void 0}),S.access}}return null}for(let h=0;h<=2;h++){let E=null;try{if(h>0){let D=500*2**(h-1);await new Promise((F0)=>$.setTimeout(F0,D))}if(E=await J(),!E.refresh)throw Error("Token refresh failed: missing refresh token");let S=await x(j),H=rN(E.refresh),T=S?.refresh?.mainLastRefreshError;if(X0("[refresh] opencode main oauth refresh check",{attempt:h,expiresInMs:E.expires?E.expires-Date.now():void 0,hasBackoff:Boolean(T),backoffActive:T?q1(T,E.refresh,Date.now()):!1,retryCount:T?.retryCount,nextRetryAt:T?.nextRetryAt}),T&&q1(T,E.refresh,Date.now()))throw X0("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:T.nextRetryAt,retryCount:T.retryCount}),Error(IW(T,Date.now()));if(S?.refresh?.mainRefreshLeaseUntil&&S.refresh.mainRefreshLeaseUntil>Date.now()&&S.refresh.mainRefreshLeaseTokenHash===H){X0("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:S.refresh.mainRefreshLeaseUntil});let D=await P(E);if(D)return D;throw Error("Claude OAuth refresh is already in progress")}let A=await u$({name:"opencode-main-oauth-refresh",ttlMs:120000,renew:!0});if(!A){X0("[refresh] opencode main oauth refresh skipped file lock");let D=await P(E);if(D)return D;throw Error("Claude OAuth refresh is already in progress")}F=A.release,v=gN(),k=H,await p((D)=>{D.refresh=D.refresh??{},D.refresh.mainRefreshLeaseId=v??void 0,D.refresh.mainRefreshLeaseUntil=Date.now()+120000,D.refresh.mainRefreshLeaseTokenHash=H});let B=await x(j);if(X0("[refresh] opencode main oauth refresh lease acquired",{attempt:h,leaseUntil:Date.now()+120000}),B?.refresh?.mainRefreshLeaseId!==v||B.refresh.mainRefreshLeaseTokenHash!==H)throw Error("Claude OAuth refresh is already in progress");X0("[refresh] opencode main oauth refresh request start",{attempt:h});let Y0=await y$({refreshToken:E.refresh,maxRetries:0});await nN({previousRefreshToken:E.refresh,currentRefreshToken:Y0.refresh},j);try{await Y.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:Y0.refresh,access:Y0.access,expires:Y0.expires}})}catch(D){throw await nN({previousRefreshToken:Y0.refresh,currentRefreshToken:E.refresh},j),D}return await p((D)=>{if(!D?.refresh)return;if(D.refresh.mainLastRefreshError=void 0,D.refresh.mainRefreshLeaseId===v)D.refresh.mainRefreshLeaseId=void 0,D.refresh.mainRefreshLeaseUntil=void 0,D.refresh.mainRefreshLeaseTokenHash=void 0}),X0("[refresh] opencode main oauth refresh succeeded",{attempt:h,expiresInMs:Y0.expires-Date.now()}),Y0.access}catch(S){let H=S instanceof Error&&(S.message.includes("fetch failed")||("code"in S)&&(S.code==="ECONNRESET"||S.code==="ECONNREFUSED"||S.code==="ETIMEDOUT"||S.code==="UND_ERR_CONNECT_TIMEOUT"));if(h<2&&(H||(()=>{let A=S.status;return typeof A==="number"&&A>=500})()))continue;X0("[refresh] opencode main oauth refresh attempt failed",{attempt:h,error:S instanceof Error?S.message:String(S),transient:H});let T=E?.refresh;if(T&&S.isRefreshError)await p((A)=>{A.refresh=A.refresh??{},A.refresh.mainLastRefreshError=WJ({error:S,now:Date.now(),refreshToken:T,previous:A.refresh.mainLastRefreshError})});throw S}finally{if(v)await p((S)=>{if(!S?.refresh)return;if(S.refresh.mainRefreshLeaseId===v&&S.refresh.mainRefreshLeaseTokenHash===k)S.refresh.mainRefreshLeaseId=void 0,S.refresh.mainRefreshLeaseUntil=void 0,S.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await F?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})().finally(()=>{V=null});return V}L1=X,_(),f.seedFallbacksFromAccounts((i?.accounts??[]).filter(z0));let w=await J8(j);if(await l0(w.freshStorage,{activeId:w.activeId,route:w.route,mainAccessToken:O.access,mainRefreshToken:O.refresh,routingAuthoritative:!1}),process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION!=="1")o0(i??y0(),O.access).then((Q)=>{l0(Q,{activeId:"main",route:"main",mainAccessToken:O.access,mainRefreshToken:O.refresh,routingAuthoritative:!1,useHydratedProfiles:!0})}).catch(()=>{});async function R0(Q,L){if(!Q.body||Q.status!==200)return L?.mark("inspect_stream_skip",{status:Q.status}),{response:Q,rateLimited:!1};if(Q.headers.get("x-cortexkit-relay-optimistic")==="true")return L?.mark("inspect_stream_skip",{status:Q.status,reason:"optimistic_relay"}),{response:Q,rateLimited:!1};let v=b(),k=Q.body.getReader(),F=[],p=new TextDecoder,P="",h=0;while(!P.includes(`
31
+ `),U=X>=90?"error":X>=70?"warning":"info";K.tui?.showToast?.({body:{title:"Claude Quota",message:O,variant:U,duration:U==="error"?8000:5000}})?.catch?.(()=>{})}return{"experimental.chat.messages.transform":async(Z,W)=>{let V=W.messages,N=E3(V);if(N){Y0.record(N);return}let X=V.findLast((D)=>D.info?.role==="user"),O=X?.info?.sessionID,U=X?.info?.id;if(typeof O==="string"&&typeof U==="string")Y0.clear(O,U)},"chat.message":async({sessionID:Z},W)=>{F0.observeSyntheticMessage({sessionId:Z,messageId:W.message.id,parts:W.parts})},"chat.headers":async({sessionID:Z,message:W},V)=>{F0.markHeaders({sessionId:Z,messageId:W.id,headers:V.headers}),Y0.markHeaders({sessionId:Z,messageId:W.id,headers:V.headers})},event:async({event:Z})=>{let W=Z,V=W.properties?.info,N=W.properties?.sessionID??V?.sessionID??V?.id;if(!N)return;if(W.type==="session.status"&&W.properties?.status?.type!=="idle")f0.delete(N);if(W.type==="session.idle"){f0.add(N);while(f0.size>128){let X=f0.values().next().value;if(X)f0.delete(X);else break}c$(N)}if(W.type==="session.deleted"){F0.clearSession(N),e0.delete(N),e.delete(N),f0.delete(N);for(let X of V0.keys())if(X.startsWith(`${N}\x00`))V0.delete(X);N1.delete(N)}},config:async(Z)=>{Z.command={...Z.command??{},[EJ]:{template:EJ,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[yJ]:{template:yJ,description:"Manage fallback accounts — list, enable/disable, reorder, remove, or add (API key or OAuth)."},[vJ]:{template:vJ,description:"Keep hybrid Claude cache warm always or during a local time window."},[iJ]:{template:iJ,description:"Start each OAuth account's five-hour quota window after reset."},[aJ]:{template:aJ,description:"Send a billed one-token synthetic turn to warm and renew the current Claude session cache."},[nJ]:{template:nJ,description:"Show current Claude OAuth quota usage for all accounts."},[RJ]:{template:RJ,description:"Show or toggle Anthropic request dump capture for debugging."},[mJ]:{template:mJ,description:"Show or toggle Anthropic fast mode for supported Opus models."},[lJ]:{template:lJ,description:"Show or set the plugin log level (error, warn, info, debug, trace)."},[rJ]:{template:rJ,description:"Show or change Claude account routing: main-first, fallback-first, or sticky-balanced."},[cJ]:{template:cJ,description:"Manage killswitch — hard-block requests when quota drops below per-account thresholds."}}},"experimental.chat.system.transform":async(Z,W)=>{if(!Bj(Z))return;wj(W.system)},provider:{id:"anthropic",async models(Z,W){let V=Ej(Mj(Z.models));if(W.auth?.type!=="oauth"||!D8(G0??{}))return V;return Rj(V)}},"command.execute.before":async(Z)=>{if(!RZ.includes(Z.command))return;let W=Z.command,V=await H3(W,Z.arguments,Z.sessionID);if(W==="claude-quota"){let N=await x(),X=S0?await S0().catch(()=>{return}):void 0;$1(N,{activeId:k0.activeId,route:k0.route,mainAccessToken:X?.access,routingAuthoritative:!1})}if(XJ(Z.sessionID))i3(V,Z.sessionID);else await V8($,Z.sessionID,V.text);_j()},auth:{provider:"anthropic",async loader(Z,W){S0=Z;let V=await Z();if(V.type==="oauth"){let X=function(){if(d1)j.clearInterval(d1),d1=null;let L=async()=>{try{let B=await x(z);if(!$5(B))return;let f=await Z();if(f.type!=="oauth")return;if(await z3(x0??B?.mainAccountId,f.refresh?h0(f.refresh):void 0),!f.expires)return;let y=f.expires-Date.now(),M=eZ(B);if(y>M)return;if(L0("[refresh] opencode main oauth background due",{expiresInMs:y,refreshBeforeMs:M}),Y1(B?.refresh?.mainLastRefreshError,x0??B?.mainAccountId,Date.now(),f.refresh?h0(f.refresh):void 0)){L0("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:B?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:B?.refresh?.mainLastRefreshError?.retryCount,expiresInMs:y});return}if(f.refresh&&B?.refresh?.mainRefreshLeaseUntil&&B.refresh.mainRefreshLeaseUntil>Date.now()&&B.refresh.mainRefreshLeaseTokenHash===FJ(f.refresh))return;await N();let I=await Z();L0("[refresh] opencode main oauth refreshed in background",{newExpiresInMs:I.expires?I.expires-Date.now():void 0})}catch(B){S.warn("refresh","opencode main oauth refresh failed",{message:B instanceof Error?B.message:String(B)})}};if(d1=j.setInterval(()=>{L()},jj+W8(Wj)),"unref"in d1)d1.unref()},U=function(L,B){if(L instanceof Request&&L.body)return!1;return B==null||typeof B==="string"},D=function(L){if(typeof L!=="string")return;try{let B=JSON.parse(L);return typeof B.model==="string"?B.model:void 0}catch{return}},w=function(L){return L.has("x-parent-session-id")},C=function(L){return L.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(L)},n=function(L){return L?.quota?.enabled===!0},b0=function(L,B){if(L.delete("authorization"),L.delete("x-api-key"),B.authHeader==="x-api-key")L.set("x-api-key",B.apiKey??"");else L.set("Authorization",`Bearer ${B.apiKey??""}`);L.set("Content-Type","application/json")},G1=function(L){return A.getFallback(L.id,L)?.quota??L.quota},u1=function(L){return["five_hour","seven_day"].some((B)=>(L?.[B]?.remainingPercent??1)<=0)},X1=function(L,B){return L.status===429||B},s4=function(L,B){if(!L)return!1;let f=A.getMain(B?.accountIdentity??c0);return Boolean(f&&f.refreshAfter>Date.now()&&u1(f.quota))};if(z8(V,"anthropic"))throw S.error("auth","custody tombstone on main slot; vault-served main not implemented"),new O8("anthropic");if(x0=await _8(z),V.access)await C1(V.access);async function N(L){if(L){let f=await Z();if(f.type==="oauth"&&f.access&&f.access!==L&&(!f.expires||f.expires>Date.now()))return L0("[refresh] opencode main oauth reused concurrently rotated access token",{expiresInMs:f.expires?f.expires-Date.now():void 0}),f.access}let B=L$.get(z);if(!B)B=(async()=>{let M=null,I=null,P=null;async function N0(s){let F=await x(z)??R0();F.refresh=F.refresh??{},s(F),await W1(F,z,{mainRefresh:!0})}async function k(s){let F=Date.now()+Yj;while(Date.now()<F){await new Promise((_)=>j.setTimeout(_,J8+W8(J8)));let Q=await Z();if(Q.type!=="oauth"||!Q.access)continue;if((Q.access!==s.access||Q.refresh!==s.refresh||(Q.expires??0)>(s.expires??0)+60000)&&(!Q.expires||Q.expires>Date.now()))return L0("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:Q.expires?Q.expires-Date.now():void 0}),Q.access}return null}for(let s=0;s<=2;s++){let F=null;try{if(s>0){let m=500*2**(s-1);await new Promise((A0)=>j.setTimeout(A0,m))}if(F=await Z(),!F.refresh)throw Error("Token refresh failed: missing refresh token");let Q=await x(z),E=FJ(F.refresh),_=Q?.refresh?.mainLastRefreshError;if(L0("[refresh] opencode main oauth refresh check",{attempt:s,expiresInMs:F.expires?F.expires-Date.now():void 0,hasBackoff:Boolean(_),backoffActive:_?Y1(_,x0??Q?.mainAccountId,Date.now(),h0(F.refresh)):!1,retryCount:_?.retryCount,nextRetryAt:_?.nextRetryAt}),_&&Y1(_,x0??Q?.mainAccountId,Date.now(),h0(F.refresh)))throw L0("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:_.nextRetryAt,retryCount:_.retryCount}),Error(SJ(_,Date.now()));if(Q?.refresh?.mainRefreshLeaseUntil&&Q.refresh.mainRefreshLeaseUntil>Date.now()&&Q.refresh.mainRefreshLeaseTokenHash===E){L0("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:Q.refresh.mainRefreshLeaseUntil});let m=await k(F);if(m)return m;throw Error("Claude OAuth refresh is already in progress")}let v=await P8({name:"opencode-main-oauth-refresh",ttlMs:120000,renew:!0});if(!v){L0("[refresh] opencode main oauth refresh skipped file lock");let m=await k(F);if(m)return m;throw Error("Claude OAuth refresh is already in progress")}P=v.release,M=U$(),I=E,await N0((m)=>{m.refresh=m.refresh??{},m.refresh.mainRefreshLeaseId=M??void 0,m.refresh.mainRefreshLeaseUntil=Date.now()+120000,m.refresh.mainRefreshLeaseTokenHash=E});let K0=await x(z);if(L0("[refresh] opencode main oauth refresh lease acquired",{attempt:s,leaseUntil:Date.now()+120000}),K0?.refresh?.mainRefreshLeaseId!==M||K0.refresh.mainRefreshLeaseTokenHash!==E)throw Error("Claude OAuth refresh is already in progress");L0("[refresh] opencode main oauth refresh request start",{attempt:s});let T=await H8({refreshToken:F.refresh,maxRetries:0});return await K.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:T.refresh,access:T.access,expires:T.expires}}),await N0((m)=>{if(!m?.refresh)return;if(m.refresh.mainLastRefreshError=void 0,m.refresh.mainRefreshLeaseId===M)m.refresh.mainRefreshLeaseId=void 0,m.refresh.mainRefreshLeaseUntil=void 0,m.refresh.mainRefreshLeaseTokenHash=void 0}),L0("[refresh] opencode main oauth refresh succeeded",{attempt:s,expiresInMs:T.expires-Date.now()}),T.access}catch(Q){let E=Q instanceof Error&&(Q.message.includes("fetch failed")||("code"in Q)&&(Q.code==="ECONNRESET"||Q.code==="ECONNREFUSED"||Q.code==="ETIMEDOUT"||Q.code==="UND_ERR_CONNECT_TIMEOUT"));if(s<2&&(E||(()=>{let v=Q.status;return typeof v==="number"&&v>=500})()))continue;L0("[refresh] opencode main oauth refresh attempt failed",{attempt:s,error:Q instanceof Error?Q.message:String(Q),transient:E});let _=F?.refresh;if(_&&Q.isRefreshError)await N0((v)=>{v.refresh=v.refresh??{},v.refresh.mainLastRefreshError=f8({error:Q,now:Date.now(),accountIdentity:x0??v.mainAccountId,refreshTokenFingerprint:h0(_),previous:v.refresh.mainLastRefreshError})});throw Q}finally{if(M)await N0((Q)=>{if(!Q?.refresh)return;if(Q.refresh.mainRefreshLeaseId===M&&Q.refresh.mainRefreshLeaseTokenHash===I)Q.refresh.mainRefreshLeaseId=void 0,Q.refresh.mainRefreshLeaseUntil=void 0,Q.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await P?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})(),L$.set(z,B);try{return await B}finally{if(L$.get(z)===B)L$.delete(z)}}H4=N,X(),A.seedFallbacksFromAccounts((G0?.accounts??[]).filter(W0));let O=await Oj(z);if(await $1(O.freshStorage,{activeId:O.activeId,route:O.route,mainAccessToken:V.access,routingAuthoritative:!1}),process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION!=="1")G4(G0??R0(),V.access).then((L)=>{$1(L,{activeId:"main",route:"main",mainAccessToken:V.access,routingAuthoritative:!1,useHydratedProfiles:!0})}).catch(()=>{});async function w0(L,B){if(!L.body||L.status!==200)return B?.mark("inspect_stream_skip",{status:L.status}),{response:L,rateLimited:!1};if(L.headers.get("x-cortexkit-relay-optimistic")==="true")return B?.mark("inspect_stream_skip",{status:L.status,reason:"optimistic_relay"}),{response:L,rateLimited:!1};let f=u(),y=L.body.getReader(),M=[],I=new TextDecoder,P="",N0=0;while(!P.includes(`
30
32
 
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};
33
+ `)&&P.length<65536){let{done:F,value:Q}=await y.read();if(F)break;if(M.push(Q),N0+=Q.byteLength,P+=I.decode(Q,{stream:!0}),C(P))break}if(C(P)){await y.cancel().catch(()=>{});try{y.releaseLock()}catch{}let F=new ReadableStream({start(E){for(let _ of M)E.enqueue(_);E.close()}});B?.mark("inspect_stream_first_event",{ms:Q0(u()-f),bytes:N0,rateLimited:!0});let Q=new Response(F,{status:L.status,statusText:L.statusText,headers:L.headers});return t4(F1,L,Q),{response:Q,rateLimited:!0}}let k=new ReadableStream({start(F){for(let Q of M)F.enqueue(Q)},async pull(F){let{done:Q,value:E}=await y.read();if(Q){F.close();return}F.enqueue(E)},cancel(F){return y.cancel(F)}});B?.mark("inspect_stream_first_event",{ms:Q0(u()-f),bytes:N0,rateLimited:!1});let s=new Response(k,{status:L.status,statusText:L.statusText,headers:L.headers});return t4(F1,L,s),{response:s,rateLimited:!1}}async function l0(L,B,f,y,M="api_fallback",I,P){if(P?.plan.downgraded)P.warmTarget=void 0,P.opusCacheAnchor=void 0;let N0=u(),k=z$(L,B),s=k.get("x-session-affinity")||k.get("x-opencode-session"),F=w(k),Q=k.get(n1)??void 0;k.delete("x-parent-session-id"),k.delete("x-session-affinity"),k.delete("x-opencode-session"),k.delete(n1);let E=B?.body,_=!1,v=null,K0=typeof E==="string"?E.length:void 0;if(E&&typeof E==="string"){let g=u(),C0=(()=>{if(!E$())return!1;try{return I4(JSON.parse(E).model)}catch{return!1}})();try{E=await D$(E,{cache1hEnabled:!F&&Z4(),cache1hMode:j4(),fastModeEnabled:C0,sessionId:s||void 0,midConversationEffortEnabled:!1,midConversationEffortPlan:Q,perf:(o0,z1)=>y?.mark(`rewrite_body_${o0}`,{route:M,...z1})})}catch(o0){if(o0 instanceof v0)return $8(o0);throw o0}if(b0(k,f),k.set("anthropic-beta",M4(k.get("anthropic-beta"),[])),C0)O$(k);try{_=JSON.parse(E).stream===!0}catch{}y?.mark("rewrite_body",{route:M,ms:Q0(u()-g),originalBytes:K0,rewrittenBytes:E.length,cacheEnabled:!F&&Z4(),cacheMode:j4(),fastModeEnabled:C0,subagent:F})}else b0(k,f);let T=await y$(k),m=K$(L,{baseURL:f.baseURL}),A0=u(),j0;try{j0=await fetch(m.input,{...B,body:E,headers:k,...HJ()&&{tls:{rejectUnauthorized:!1}}})}catch(g){if(typeof E==="string")await b4({affinity:s,route:M,error:Y8(g),bodyText:E,url:m.url?.toString()??Q$(m.input),method:_$(L,B),headers:k});throw g}if(typeof E==="string")v=await b4({affinity:s,route:M,status:j0.status,bodyText:E,url:m.url?.toString()??Q$(m.input),method:_$(L,B),headers:k});return W3(j0,{source:"turn",accountId:f.id,synthetic:!1,...T,requestedModel:D(E),dump:v,status:j0.status,streaming:_}),y?.mark("send_headers_received",{route:M,ms:Q0(u()-A0),status:j0.status,relayConfigured:!1,totalSendWithAccessMs:Q0(u()-N0),baseURL:f.baseURL}),j0}async function d0(L,B="direct"){let f=q0;if(!f)return;if(L.recordVersion<=(z4.get(L.handle)??-1))return;let y=f.peek(L.handle);if(!y||y.recordVersion!==L.recordVersion)return;let M=`${L.handle}\x00${L.recordVersion}`,I=D1.get(M);if(I){await I;return}let P=(async()=>{try{await f.reportAuthFailure(L.handle,401,{recordVersion:L.recordVersion},B),z4.set(L.handle,L.recordVersion)}catch(N0){l4(L.accountId,N0,L.handle),S.warn("claustrum","failed to report credential failure",{accountId:L.accountId,error:N0 instanceof Error?N0.message:String(N0)})}})();D1.set(M,P);try{await P}finally{if(D1.get(M)===P)D1.delete(M)}}async function I0(L,B,f,y,M="unknown",I,P="main",N0,k,s=!1,F,Q){let E=u(),_=Q?.served,v=I,K0=async()=>{return v??=await x(z),v},T=z$(L,B),m=T.get("x-session-affinity")||T.get("x-opencode-session"),A0=w(T),j0=T.get(n1)??void 0;T.delete("x-parent-session-id"),T.delete("x-session-affinity"),T.delete("x-opencode-session"),T.delete(n1);let g=B?.body,C0=m?g$.previousFor(m):null,o0=C0?.messageId??null,z1,a4=!1,w4=null,P4=null,R;if(g&&typeof g==="string"){let U0=u();try{let J1=JSON.parse(g);if(typeof J1.model==="string")R=J1.model}catch{}y?.mark("model_parse_for_identity",{route:M,ms:Q0(u()-U0),bodyBytes:g.length})}let r=u(),c=await k4(f,R,P==="main"?x0:P);y?.mark("resolve_claude_code_identity",{route:M,ms:Q0(u()-r),hasAccountUuid:Boolean(c.accountUuid)});let X0=typeof g==="string"?g.length:void 0;if(g&&typeof g==="string"){let U0=u(),J1=(()=>{if(!E$())return!1;try{return I4(JSON.parse(g).model)}catch{return!1}})(),L1=!A0&&Z4(),T0=j4(),f1=k?.plan.downgraded&&k.plan.standbyCacheAnchor?.oauthAccountId===P?k.plan.standbyCacheAnchor:void 0;try{g=await D$(g,{cache1hEnabled:L1,cache1hMode:T0,fastModeEnabled:J1,identity:c,sessionId:m||void 0,thinkingPrefixMismatchBehavior:EZ(await K0()),midConversationEffortEnabled:!0,midConversationEffortPlan:j0,hybridStandbyAnchor:f1,serverSideFallbackEnabled:Z0==="server",laneStart:s,cacheDiagnosticsPreviousMessageId:o0,perf:(o,P0)=>{if(y?.mark(`rewrite_body_${o}`,{route:M,...P0}),o==="cache_strategy"&&P0?.standbyBridgeApplied===!0&&k&&!k.standbyBridgeLogged)k.standbyBridgeLogged=!0,S.info("fable-fallback","restored standby Opus cache bridge",{session:k.plan.sessionId,distanceBlocks:P0?.standbyDistanceBlocks})}})}catch(o){if(o instanceof v0)return $8(o);throw o}if(k?.plan.downgraded&&L1&&T0==="hybrid"){let o=d7(g);k.opusCacheAnchor=o?{...o,oauthAccountId:P}:void 0}let T4=u();try{let o=JSON.parse(g);e1(T,f,{body:o,identity:c});let P0=o.diagnostics,H0=P0&&typeof P0==="object"&&!Array.isArray(P0)&&P0.previous_message_id===o0?o0:void 0;if(H0!==void 0&&T.get("anthropic-beta")?.split(",").map((i0)=>i0.trim()).includes(S4))z1={sessionId:m??"session-unknown",previousMessageId:H0,...C0?{previousMessageReceivedAt:C0.receivedAt}:{},isSubagent:A0,ttlSent:$$(o)};a4=o.stream===!0,y?.mark("set_oauth_headers_body_parse",{route:M,ms:Q0(u()-T4),bodyBytes:g.length,parsed:!0})}catch{e1(T,f,{identity:c}),y?.mark("set_oauth_headers_body_parse",{route:M,ms:Q0(u()-T4),bodyBytes:g.length,parsed:!1})}if(J1)O$(T);y?.mark("rewrite_body",{route:M,ms:Q0(u()-U0),originalBytes:X0,rewrittenBytes:g.length,cacheEnabled:!A0&&Z4(),cacheMode:j4(),fastModeEnabled:J1,subagent:A0})}let $0=await y$(T),p=K$(L);if(k&&typeof g==="string")k.warmTarget={url:p.url?.toString()??p.input.toString(),headers:new Headers(T),bodyText:g,oauthAccountId:P};if(typeof g==="string"&&Z4()&&j4()==="hybrid"){let U0=await K0();if(!A0||I8(U0)){let J1=u(),L1=i4.track({sessionId:m,url:p.url?.toString()??p.input.toString(),headers:T,bodyText:g,storage:U0,cacheMode:"hybrid",oauthAccountId:P,isSubagent:A0});y?.mark("cachekeep_track",{session:m,ms:Q0(u()-J1),tracked:L1.tracked,reason:L1.tracked?void 0:L1.reason,bodyBytes:g.length})}}let g0=!1,u0=async()=>{g0=!0;try{let U0=await fetch(p.input,{...B,body:g,headers:T,...HJ()&&{tls:{rejectUnauthorized:!1}}});if(typeof g==="string")w4=await b4({affinity:m,route:M,status:U0.status,bodyText:g,url:p.url?.toString()??Q$(p.input),method:_$(L,B),headers:T,tag:s?"start":void 0});return U0}catch(U0){if(typeof g==="string")await b4({affinity:m,route:M,error:Y8(U0),bodyText:g,url:p.url?.toString()??Q$(p.input),method:_$(L,B),headers:T,tag:s?"start":void 0});throw U0}},R1=oJ(await K0()),r0={accountId:P,accessToken:f,authLineageId:N0,...P==="main"&&F?{mainQuotaIdentity:F}:{}},a=u(),M0=await FZ({config:R1,input:p.input,init:B,headers:T,body:g,fallback:u0,affinity:m,optimisticResponse:R1?.transport==="websocket",onResponseHeaders:(U0)=>p4(U0,r0),onDumpCreated:(U0)=>{P4=U0},dumpTag:s?"start":void 0});if(y?.mark("send_headers_received",{route:M,ms:Q0(u()-a),status:M0.status,relayConfigured:R1!=null,totalSendWithAccessMs:Q0(u()-E)}),g0)p4(M0.headers,r0);if(W3(M0,{source:s?"start":"turn",accountId:P,synthetic:s,...$0,requestedModel:D(g),request:z1,trackSessionId:m??void 0,dump:g0?w4:P4,status:M0.status,streaming:a4}),_)d4.set(M0,_);return M0}async function B5(L,B){if(!L)return!1;try{return await A.refreshMain(B?.accountIdentity??c0,L,B?.generation),s4(L,B)}catch{return!1}}async function _4(L,B={}){let f=await n0.getUsableFallbackAccounts(L,{modelId:B.modelId}),y=new Map(f.map((I)=>[I.id,I])),M=[];for(let I of L?.accounts??[]){if(W0(I)){if(t0.has(I.id))continue;let P=y.get(I.id);if(P)M.push(P);else if(I.access&&(!I.expires||I.expires>Date.now())&&!w1(I.lastRefreshError)&&!Y1(I.lastRefreshError,I.id,Date.now(),h0(I.refresh))&&L?.quota?.failClosedOnUnknownQuota!==!0&&!CJ(G1(I)))M.push(I);continue}if(B.includeApiRoutes===!0&&b1(I)&&I.enabled!==!1&&I.apiKey&&P$(I.baseURL))M.push(I)}if(!y1(L))return M;return M.filter((I)=>W0(I)?A1(G1(I),L,I.id,B.modelId):!0)}async function U3(L){let B=L.mainQuotaIdentity?.accountIdentity,f=A.getMain(B),y=f?.quota;if(!W4(f?.quota,L.storage,Date.now(),L.requestedModelId))try{y=await A.refreshMain(B,L.mainAccessToken,L.mainQuotaIdentity?.generation)}catch{}let M=await n0.getUsableFallbackAccounts(L.storage,{modelId:L.requestedModelId}),I=await x(z)??L.storage,P=new Map(M.map((Q)=>[Q.id,Q])),N0=[];if(!w1(I?.refresh?.mainLastRefreshError))N0.push({id:y0,access:L.mainAccessToken,quota:y,identity:x0?{kind:"known",accountId:x0}:{kind:"unknown"},order:0});for(let[Q,E]of(I?.accounts??[]).entries()){if(E.enabled===!1||!W0(E))continue;if(t0.has(E.id))continue;let _=P.get(E.id)??E,v=B0(_,I),K0=Boolean(v.served);if(!v.accessToken||!K0&&w1(_.lastRefreshError))continue;let T=G1(_);if(!W4(T,I,Date.now(),L.requestedModelId))try{T=await A.refreshFallback(_.id,v.accessToken,_)}catch{}N0.push({id:_.id,access:v.accessToken,quota:T,identity:{kind:"known",accountId:_.id},order:Q+1,account:_,claustrum:v})}let k=new Set(M.map((Q)=>Q.id)),s=new Set(N0.flatMap((Q)=>{let E=Q.id===y0?I?.refresh?.mainLastRefreshError:Q.account?.lastRefreshError,_=!Q.claustrum?.served,v=Q.identity.kind==="known"?Q.identity.accountId:void 0;if(_&&w1(E))return[];if(_&&Y1(E,v,Date.now(),Q.id===y0?L.mainRefreshToken?h0(L.mainRefreshToken):void 0:Q.account?.refresh?h0(Q.account.refresh):void 0)&&(Q.id===y0||!k.has(Q.id)))return[];if(W4(Q.quota,I,Date.now(),L.requestedModelId)&&f$({quota:Q.quota,modelId:L.requestedModelId}).action==="migrate")return[];if(y1(I)&&!A1(Q.quota,I,Q.id===y0?void 0:Q.id,L.requestedModelId))return[];return[Q.id]})),F=N0.flatMap((Q)=>{let E=Q.id===y0?I?.refresh?.mainLastRefreshError:Q.account?.lastRefreshError,_=!Q.claustrum?.served,v=Q.identity.kind==="known"?Q.identity.accountId:void 0;if(_&&w1(E)||_&&Y1(E,v,Date.now(),Q.id===y0?L.mainRefreshToken?h0(L.mainRefreshToken):void 0:Q.account?.refresh?h0(Q.account.refresh):void 0)&&(Q.id===y0||!k.has(Q.id)))return[];let K0=Q.id===y0?void 0:Q.id,T=CJ(Q.quota)?Q.quota:void 0,m=T?{kind:"known",quota:T}:{kind:"unknown"};return(!y1(I)||A1(m.kind==="known"?m.quota:void 0,I,K0,L.requestedModelId))&&v4(m.kind==="known"?m.quota:void 0,I)&&(m.kind==="unknown"||qJ(m.quota,L.requestedModelId)&&(Q.id===y0||k.has(Q.id)||Boolean(Q.claustrum?.served)))?[{accountId:Q.id,quota:m,order:Q.order}]:[]});return{storage:I,allRoutes:N0,candidates:F,retainAccountIds:s}}let L3=new WeakMap;async function B4(L,B,f,y,M,I,P){if(!f.length)return M??null;let N0=P?.returnLastOnExhausted??!0,k=M??null,s=!1,F=async()=>{if(s)return;s=!0,await M?.body?.cancel().catch(()=>{})};for(let[Q,E]of f.entries()){let _;if(b1(E)){if(!E.apiKey)continue;await F(),_=await l0(L,B,E,I,`api_fallback_${Q}`,y,P?.fableRequest)}else{let T=B0(E,y);if(!T.accessToken)continue;await F(),_=await I0(L,B,T.accessToken,I,`fallback_${Q}`,y,E.id,E.authLineageId,P?.fableRequest,P?.laneStartRequest,void 0,T)}let v=d4.get(_);if(_.status===401&&v)await d0(v,"direct");k=_;let K0=S$(_.status,y);if(!K0){let T=await w0(_,I);_=T.response,k=_,K0=T.rateLimited}if(!K0){if(L3.set(_,b1(E)?"api":"oauth"),await n0.markUsed(E),v)J3(v);if(await P?.onSuccess?.(E),W0(E)&&n(y)&&A.shouldRefreshOnRequestCount(o4)){let T=l1(E,y,{warm:!1});if(T)A.refreshFallback(E.id,T.token,E).then(()=>P?.onSuccess?.(E)).catch(()=>{})}return _}if(Q<f.length-1||!N0)await _.body?.cancel().catch(()=>{})}return N0?k:null}async function w5(L,B,f,y,M,I,P,N0,k,s,F=!1,Q){if(!U(L,B?.body))return f;let E=u(),_=I??await x(z);if(M?.mark("fallback_load_storage",{ms:Q0(u()-E),cached:!!I}),!(_?.accounts??[]).some((g)=>g.enabled!==!1&&(W0(g)||b1(g)&&Boolean(g.apiKey)&&P$(g.baseURL))))return f;let K0=f,T=S$(K0.status,_),m=X1(K0,!1);if(!T){let g=await w0(K0,M);K0=g.response,T=g.rateLimited,m=X1(K0,g.rateLimited)}if(!T)return K0;let A0=!1;if(y)A0=y.some(b1);else if(m)A0=await B5(P,Q);let j0=y;if(!j0){let g=u();j0=await _4(_,{includeApiRoutes:A0,modelId:k}),M?.mark("fallback_get_accounts",{ms:Q0(u()-g),accounts:j0.length})}if(y1(_)){let g=j0.length;if(j0=j0.filter((C0)=>W0(C0)?A1(G1(C0),_,C0.id,k):!0),j0.length<g)L0("[killswitch] filtered fallbacks",{before:g,after:j0.length})}return await B4(L,B,j0,_,K0,M,{onSuccess:N0,fableRequest:s,laneStartRequest:F})??K0}return{apiKey:"",__reportClaustrumAuthFailureForTest:d0,async fetch(L,B){let f=z$(L,B),y=f.get(j$)==="1";f.delete(j$),B={...B,headers:f};let M=f.get("x-session-affinity")||f.get("x-opencode-session"),I=D(B?.body),P=i.plan(M,B?.body);if(P&&!P.downgraded){let R=D4.get(P.recoveryKey);if(R)await R,P=i.plan(M,B?.body)}let N0=Z0==="server"&&o1(P?.effectiveModel??I)?P?.effectiveModel??I:void 0,k=P?{plan:P}:void 0;if(P?.downgraded)B={...B,body:P.bodyText};let s=B?.body,F=Lj({bodyBytes:typeof s==="string"?s.length:void 0}),Q=(R)=>{let r=F1.get(R);return s7(R,{perf:(c,X0)=>F.mark(c,X0),laneStart:y,laneStartOAuthServed:L3.get(R)!=="api",...r?r.streaming?{onMessageStart:(c)=>j3(R,c,!1),onMessageDelta:(c)=>dZ(R,c),onStreamEnd:()=>r.dumpWrite}:{onMessageResponse:(c)=>j3(R,c),onStreamEnd:()=>r.dumpWrite,responseMode:"json"}:{},onRelayUpstreamError:({status:c,source:X0})=>{if(c!==401)return;let $0=d4.get(R);if($0)d0($0,X0)},contentFilterModel:P?.requestedModel,...!P?.downgraded&&P?{onContentFilter:(c)=>{if(!k?.warmTarget)return S.debug("fable-fallback","content filter recovery unavailable for non-OAuth route",{session:P.sessionId}),!1;let X0=i.activate(P,k.warmTarget.oauthAccountId);V0.delete(P.recoveryKey),V0.set(P.recoveryKey,Sj(P.requestedModel));while(V0.size>128){let $0=V0.keys().next().value;if($0)V0.delete($0);else break}_0.delete(P.recoveryKey),S.info("fable-fallback","content filter detected; switching session to Opus 4.8",{session:P.sessionId,requestedModel:P.requestedModel,completedToolUse:c?.completedToolUse===!0,remaining:X0}),Q4({sessionId:P.sessionId,mode:"opus",remaining:X0,requestedModelId:P.requestedModel},T,_)}}:{},...P?.downgraded&&k?{onComplete:(c)=>{let X0=i.complete(P,k.opusCacheAnchor);if(!X0.counted)return;let $0=V0.get(P.recoveryKey);if($0)V0.delete(P.recoveryKey),f0.delete(P.sessionId),K3(P.sessionId,$0);S.info("fable-fallback","Opus 4.8 turn completed",{session:P.sessionId,requestedModel:P.requestedModel,finishReason:c,remaining:X0.remaining}),Q4({sessionId:P.sessionId,mode:"opus",remaining:X0.remaining,requestedModelId:P.requestedModel},T,_);let p=oZ(k);if(X0.remaining===0){let g0=()=>{if(i.remaining(P)!==0)return;Q4({sessionId:P.sessionId,mode:"fable",remaining:0,requestedModelId:P.requestedModel},T,_,Aj(P.requestedModel))};p.then(g0,g0)}}}:{},...N0?{serverSideFallbackModel:N0,...P?{onServerSideFallbackOutcome:(c)=>W5(P,c,T,_)}:{}}:{}})},E=u(),_=await Z();if(F.mark("get_auth",{ms:Q0(u()-E),authType:_.type,hasAccess:Boolean(_.access)}),_.type!=="oauth"){let R=await fetch(L,B);return F.done("non_oauth_passthrough",{status:R.status}),R}let v;if(_.access){let R=await C1(_.access,D(B?.body));if(R.stale)throw Error("Main OAuth identity changed while resolving request credentials");v=R}await z3(x0,_.refresh?h0(_.refresh):void 0);let K0=u(),T=await x();F.mark("load_storage",{ms:Q0(u()-K0)}),A.updateStorage(T),A.seedMainFromStorage(T,c0),A.seedFallbacksFromAccounts((T?.accounts??[]).filter(W0));let m=M?e0.get(M):void 0;if(!P||Z0==="server"&&m?.requestedModelId&&O1(m.requestedModelId)!==O1(P.requestedModel))Y5(M,T,_);let A0=U(L,B?.body),j0=D(B?.body);if(A0)o4++;if(A0&&_.access&&(!_.expires||_.expires>Date.now()))tZ(T,_.access,v);let g=async(R,r)=>{let c=T,X0=!1;if((T?.accounts??[]).some(($0)=>W0($0)&&$0.quota))try{let $0=await x(z);if($0)c=$0;else X0=!0}catch{X0=!0}$1(c,{activeId:R,route:r,mainAccessToken:_.access,skipFallbackQuotaSeed:X0})},C0;if(A0&&M&&Y4(T)==="sticky-balanced"&&_.access){let R=P?.effectiveModel??j0,r=MZ(R),c=i4.trackedOAuthRoute(M),X0=P?.cacheAccountId??(c?c.oauthAccountId??y0:void 0),$0=!1;try{let p=await U3({storage:T,mainAccessToken:_.access,mainRefreshToken:_.refresh,requestedModelId:R,mainQuotaIdentity:v}),g0=(M0)=>V4.resolve({sessionId:M,family:r,modelId:R,candidates:p.candidates,retainAccountIds:p.retainAccountIds,storage:p.storage,inputBytes:typeof B?.body==="string"?Buffer.byteLength(B.body):1,preferredAccountId:X0,excludeAccountIds:M0}),u0=w1(p.storage?.refresh?.mainLastRefreshError),R1=p.allRoutes.length===0&&!u0||p.allRoutes.some((M0)=>!M0.quota||!W4(M0.quota,p.storage,Date.now(),R)),r0=await g0();if(!r0&&R1)throw Error("Sticky-balanced routing is waiting for current OAuth quota snapshots");if(!r0){let M0=CZ({mainRefreshError:p.storage?.refresh?.mainLastRefreshError,fallbackReauthLabels:v8(p.storage),routeQuotas:p.allRoutes.flatMap((U0)=>U0.quota?[U0.quota]:[]),modelId:R});return F.done("return_sticky_no_route",{status:M0.status}),M0}let a=p.allRoutes.find((M0)=>M0.id===r0?.accountId);if(r0&&a){if($0=!0,P?.downgraded&&i.bindRecoveryAccount(P,a.id))S.info("fable-fallback","rebound recovery to migrated sticky account",{accountId:a.id});let M0=(o)=>I0(L,B,o.access,F,`sticky:${o.id}`,p.storage,o.id,o.account?.authLineageId,k,y,o.id===y0?v:void 0,o.claustrum),U0=async(o,P0,H0=!0)=>{if(H0&&o.account)await n0.markUsed(o.account);if(H0&&o.claustrum?.served)J3(o.claustrum.served);return await g(o.id,"sticky-balanced"),F.done("return_sticky_balanced",{status:P0.status,accountId:o.id,created:r0?.created,migrated:r0?.migrated}),Q(P0)},J1=async(o)=>{let P0=o,H0=S$(o.status,p.storage),i0=!1;if(!H0){let v1=await w0(o,F);P0=v1.response,i0=v1.rateLimited,H0=v1.rateLimited}return{response:P0,routeFailure:H0,streamingRateLimit:i0}},L1=W4(a.quota,p.storage,Date.now(),R)?f$({quota:a.quota,modelId:R}):void 0;if(L1?.action==="hold")return U0(a,await n$(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"}}),M,L1.retryAfterSeconds,!1,F1),!1);let T0=await J1(await M0(a)),f1=!1;if(!T0.routeFailure)return U0(a,T0.response);if(T0.response.status===401){let o=a.id,P0=d4.get(T0.response);try{if(o===y0)_.access=await N(a.access),a={...a,access:_.access};else if(P0){await d0(P0,"direct");let H0=a.account?B0(a.account,p.storage):void 0;if(H0?.accessToken)a={...a,access:H0.accessToken,claustrum:H0};else f1=!0}else if(a.account&&p.storage){let H0=await n0.refreshAccount(a.account,p.storage,{force:!0});if(H0.access)a={...a,access:H0.access,account:H0}}if(!f1){if(await T0.response.body?.cancel().catch(()=>{}),T0=await J1(await M0(a)),!T0.routeFailure)return U0(a,T0.response);f1=T0.response.status===401}}catch(H0){let i0=await x(z),v1=o===y0?i0?.refresh?.mainLastRefreshError:i0?.accounts.find((Q3)=>Q3.id===o&&W0(Q3))?.lastRefreshError;if(!w1(v1))throw H0;f1=!0}}let T4=T0.response.status===403||f1;if(T0.response.status===429||T0.streamingRateLimit){let o;try{o=a.id===y0?await A.refreshMain(v?.accountIdentity,a.access,v?.generation):await A.refreshFallback(a.id,a.access,a.account)}catch{o=void 0}let P0=f$({quota:o,modelId:R});if(F.mark("sticky_quota_failure",{accountId:a.id,action:P0.action,reason:P0.reason}),P0.action==="hold")return U0(a,await n$(T0.response,M,P0.retryAfterSeconds,T0.streamingRateLimit,F1));T4=P0.action==="migrate"}if(T4){let o=a.id;if(p=await U3({storage:p.storage,mainAccessToken:_.access,mainRefreshToken:_.refresh,requestedModelId:R,mainQuotaIdentity:v}),p.candidates.filter((H0)=>H0.accountId!==o).length>0){await T0.response.body?.cancel().catch(()=>{}),r0=await g0(new Set([o]));let H0=p.allRoutes.find((i0)=>i0.id===r0?.accountId);if(r0&&H0){if(a=H0,P?.downgraded)i.bindRecoveryAccount(P,a.id);return U0(a,await M0(a))}}else if((T0.response.status===429||T0.streamingRateLimit)&&s4(_.access,v)){let H0=(await _4(p.storage,{includeApiRoutes:!0,modelId:R})).filter(b1);if(H0.length>0){let i0=await B4(L,B,H0,p.storage,T0.response,F,{onSuccess:(v1)=>g(v1.id,"sticky-balanced"),fableRequest:k,laneStartRequest:y});if(i0)return F.done("return_sticky_api_fallback",{status:i0.status}),Q(i0)}}}return U0(a,T0.response)}}catch(p){if(F.mark("sticky_balanced_error",{error:p instanceof Error?p.message:String(p)}),$0)throw p;let g0=p instanceof Error?p:Error(String(p));throw Object.assign(g0,{code:"ECONNRESET",syscall:"sticky-routing"}),g0}}if(A0&&Y4(T)==="fallback-first")try{let R=u();C0=await _4(T,{includeApiRoutes:s4(_.access,v),modelId:j0}),F.mark("fallback_first_get_accounts",{ms:Q0(u()-R),accounts:C0.length});let r=await B4(L,B,C0,T,void 0,F,{returnLastOnExhausted:!1,onSuccess:(c)=>g(c.id,"fallback-first"),fableRequest:k,laneStartRequest:y});if(r)return F.done("return_fallback_first",{status:r.status}),Q(r);C0=void 0}catch(R){F.mark("fallback_first_error",{error:R instanceof Error?R.message:String(R)})}if(!_.access||!_.expires||_.expires<Date.now()){let R=await x(),r=R?.refresh?.mainLastRefreshError;if(r&&Y1(r,x0??R?.mainAccountId,Date.now(),_.refresh?h0(_.refresh):void 0))throw L0("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:r.nextRetryAt,retryCount:r.retryCount,expiresInMs:_.expires?_.expires-Date.now():void 0}),Error(SJ(r,Date.now()));L0("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(_.access),expiresInMs:_.expires?_.expires-Date.now():void 0,expiredAgoMs:_.expires&&_.expires<Date.now()?Date.now()-_.expires:void 0});let c=u();_.access=await N(),F.mark("refresh_main_access",{ms:Q0(u()-c)})}if(!_.access)throw F.done("missing_access_error"),Error("OAuth access token is missing after refresh");function o0(){if(T?.quota?.showToasts!==!0)return;let R=A.getMain(v?.accountIdentity);if(!R)return;let r=(T?.accounts??[]).filter(($0)=>$0.enabled!==!1&&W0($0)).map(($0)=>({...$0,quota:A.getFallback($0.id,$0)?.quota??$0.quota})),c=v4(R.quota,T),X0;if(c)X0="main";else X0=r.find(($0)=>v4($0.quota,T))?.id??"main";_5(R.quota,r,X0)}if(A0&&n(T))try{let R=u(),r=A.getMain(v?.accountIdentity),c=r?.quota;if(!c)c=await A.refreshMain(v?.accountIdentity,_.access,v?.generation),r=A.getMain(v?.accountIdentity),o0();else if(A.needsRefresh(o4,j0))if(u1(c)||AJ(c,j0))c=await A.refreshMain(v?.accountIdentity,_.access,v?.generation),r=A.getMain(v?.accountIdentity);else A.refreshMain(v?.accountIdentity,_.access,v?.generation).then(()=>{U4().catch(()=>{}),o0()}).catch(()=>{});$1(T,{activeId:"main",route:"main",mainAccessToken:_.access});let X0=v4(c,T)&&qJ(c,j0);if(F.mark("main_quota_for_routing",{ms:Q0(u()-R),passes:X0,model:j0,modelScopedExhausted:AJ(c,j0)}),!X0){let $0=u();C0=await _4(T,{includeApiRoutes:Boolean(r&&r.refreshAfter>Date.now()&&u1(r.quota)),modelId:j0}),F.mark("preselect_fallback_accounts",{ms:Q0(u()-$0),accounts:C0.length});let p=await B4(L,B,C0,T,void 0,F,{onSuccess:(g0)=>g(g0.id,"fallback"),fableRequest:k,laneStartRequest:y});if(p)return F.done("return_preselected_fallback",{status:p.status}),Q(p)}}catch(R){F.mark("main_quota_for_routing_error",{error:R instanceof Error?R.message:String(R)})}let z1=A.getMain(v?.accountIdentity)?.quota;if(T?.quota?.failClosedOnUnknownQuota&&!z1&&A.isBackedOff()){let R=A.getLastApiError(),r=R?h8(R,Date.now()):"Quota API unavailable";return L0("[quota] blocked: quota API backed off (failClosed)",{nextRetryAt:R?.nextRetryAt,retryCount:R?.retryCount}),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:r}}),{status:429,headers:{"content-type":"application/json","retry-after":String(R?.nextRetryAt?Math.max(1,Math.ceil((R.nextRetryAt-Date.now())/1000)):60)}})}if(y1(T)){if(A.needsRefresh(o4,j0))try{let r=(T?.accounts??[]).filter((c)=>c.enabled!==!1&&W0(c)&&Boolean(c.access));await Promise.all([A.refreshMain(v?.accountIdentity,_.access,v?.generation),A.refreshAllFallbacks(r,(c)=>l1(c,T)?.token)])}catch(r){L0("[quota] killswitch refresh failed",{error:r instanceof Error?r.message:String(r),backedOff:A.isBackedOff()})}z1=A.getMain(v?.accountIdentity)?.quota}if(y1(T)&&!A1(z1,T,void 0,j0)){let r=U(L,B?.body)?await _4(T,{includeApiRoutes:s4(_.access),modelId:j0}):[];if(r.length>0){L0("[route] skipping main (killswitch), trying fallbacks");let u0=await B4(L,B,r,T,void 0,F,{onSuccess:(R1)=>g(R1.id,"fallback"),laneStartRequest:y});if(u0)return F.done("return_killswitch_fallback",{status:u0.status}),Q(u0)}let c=Date.now(),X0=(T?.accounts??[]).filter((u0)=>u0.enabled!==!1&&W0(u0)).map((u0)=>({...u0,quota:G1(u0)})),$0=d3({mainQuota:z1,requestModelId:j0,storage:T}),p=g8(z1,X0,c,$0.isScopedDriven?$0.modelId:void 0),g0=l3({retryAfterSeconds:p,...$0.isScopedDriven&&{modelName:$0.modelName}});return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:g0}}),{status:429,headers:{"content-type":"application/json","retry-after":String(p)}})}let a4=await I0(L,B,_.access,F,"main",T,"main",void 0,k,y,v),w4=!1,P4=await w5(L,B,a4,C0,F,T,_.access,(R)=>{return w4=!0,g(R.id,"fallback")},j0,k,y,v);if(!w4)await g("main","main");return F.done("return_response",{status:P4.status}),Q(P4)}}}return{}},dispose:async()=>{await H1?.dispose(),q0?.close()},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let Z=await B$("max");return{url:Z.url,instructions:"Paste the authorization code here:",method:"code",callback:async(W)=>{return w$(W,Z.verifier,Z.redirectUri,Z.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let Z=await B$("console");return{url:Z.url,instructions:"Paste the authorization code here:",method:"code",callback:async(W)=>{let V=await w$(W,Z.verifier,Z.redirectUri,Z.state);if(V.type==="failed")return V;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 ${V.access}`}}).then((X)=>X.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]},__primeManager:E1,__quotaManager:A,__persistFallbackQuotaErrorForTest:N4,__fallbackRefreshReady:cZ,__claustrumCredentialCache:q0}},EW=hj;export{EW as AnthropicAuthPlugin};