@cortexkit/opencode-anthropic-auth 1.9.1 → 1.9.2

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 (2) hide show
  1. package/dist/index.js +8 -8
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
- import{$ as $j,A as Uj,Aa as lj,B as Bj,Ba as ij,C as F1,Ca as uj,D as Cj,Da as nj,E as x1,Ea as Kj,F as Hj,Fa as cj,G as Fj,Ga as O1,H as xj,Ha as oj,I as T1,Ia as rj,J as e0,Ja as A1,K as Tj,L as B0,La as sj,M as q1,N as qj,Na as P1,O as k0,Oa as f1,P as y0,Pa as tj,Q as j1,Qa as aj,R as Ej,Ra as k1,S as Rj,T as vj,U as Sj,V as J1,W as C0,X as H0,Y as b0,Z as Aj,_ as $1,a as s1,aa as Vj,b as t1,ba as E1,c as E0,ca as Wj,d as R0,da as Xj,e as a1,ea as Gj,f as q0,fa as V1,g as _j,ga as fj,h as e1,ha as kj,i as jj,ia as yj,j as Jj,ja as bj,k as U1,ka as R1,l as Lj,la as hj,m as B1,ma as mj,n as C1,na as W1,o as q,oa as X1,p as j0,pa as gj,q as A0,qa as v1,r as H1,ra as G1,s as Qj,sa as Z1,t as wj,ta as K1,u as b,ua as pj,va as S1,w as f0,wa as Y1,x as Mj,xa as dj,y as t0,ya as Zj,z as a0,za as h0}from"./index-hjkkewsy.js";import{Va as ej}from"./index-99mvcpj7.js";import{randomUUID as yJ}from"node:crypto";function M0(j){return typeof j==="object"&&j!==null}function XJ(j){if(Array.isArray(j))return j;if(M0(j)&&Array.isArray(j.data))return j.data;return[]}function GJ(j){if(!M0(j)||!M0(j.info))return;return typeof j.info.role==="string"?j.info.role:void 0}function b1(j){if(!M0(j)||!M0(j.info))return null;let $=j.info,J=M0($.model)?$.model:void 0,W=typeof $.agent==="string"?$.agent:void 0,V=typeof J?.providerID==="string"?J.providerID:typeof $.providerID==="string"?$.providerID:void 0,O=typeof J?.modelID==="string"?J.modelID:typeof $.modelID==="string"?$.modelID:void 0,Q=typeof J?.variant==="string"?J.variant:typeof $.variant==="string"?$.variant:void 0;if(!W&&(!V||!O)&&!Q)return null;let v={};if(W)v.agent=W;if(V&&O)v.model={providerID:V,modelID:O};if(Q)v.variant=Q;return v}function h1(j,$){return{agent:j.agent??$.agent,model:j.model??$.model,variant:j.variant??$.variant}}function m1(j){return Boolean(j.agent&&j.model&&j.variant)}async function g1(j,$){if(!j||!$)return null;let J=j;if(typeof J.session?.messages!=="function")return null;let W=[];try{W=XJ(await Promise.resolve(J.session.messages({path:{id:$},query:{limit:100}})))}catch{return null}if(W.length===0)return null;let V={};for(let O=W.length-1;O>=0;O--){if(GJ(W[O])!=="assistant")continue;let Q=b1(W[O]);if(!Q)continue;if(V=h1(V,Q),m1(V))return V}for(let O=W.length-1;O>=0;O--){let Q=b1(W[O]);if(!Q)continue;if(V=h1(V,Q),m1(V))return V}if(!V.agent&&!V.model&&!V.variant)return null;return V}function p1(j,$){let J=new Map,W=0,V=0,O=0,Q=0,v=0,u=(h)=>{let A=performance.now(),c=j(h);return v+=performance.now()-A,O++,c};return{call:(h)=>{if(!$.enabled())return u(h);let A=J.get(h);if(A!==void 0)return V++,J.delete(h),J.set(h,A),A;let c=u(h),t=h.length+c.length;if(t>$.maxBytes)return c;J.set(h,c),W+=t;while(W>$.maxBytes&&J.size>1){let p=J.keys().next().value,G0=J.get(p)??"";J.delete(p),W-=p.length+G0.length,Q++}return c},stats:()=>({hits:V,misses:O,evictions:Q,entries:J.size,cacheBytes:W,computeMsTotal:v})}}function d1(j){return`${s1}${j.charAt(0).toUpperCase()}${j.slice(1)}`}function Yj(j){if(j==="StructuredOutput")return j;return`${j.charAt(0).toLowerCase()}${j.slice(1)}`}var ZJ=new Set(["callgraph","conflicts","delete","import","inspect","move","navigate","outline","refactor","safety","search","transform","zoom"]);function l1(j){let $=Yj(j);if($.startsWith("aft_"))return $;if(ZJ.has($))return`aft_${$}`;return null}function _1(j,$){let J=new Headers;if(j instanceof Request)j.headers.forEach((V,O)=>{J.set(O,V)});let W=$?.headers;if(W){if(W instanceof Headers)W.forEach((V,O)=>{J.set(O,V)});else if(Array.isArray(W))for(let V of W){let[O,Q]=V;if(typeof Q<"u")J.set(O,String(Q))}else for(let[V,O]of Object.entries(W))if(typeof O<"u")J.set(V,String(O))}return J}function s0(j){return j.set("anthropic-beta",E0(j.get("anthropic-beta"),[t1])),j}function v0(j,$,J={}){return Xj(j,$,J)}function KJ(j){if(j.tools&&Array.isArray(j.tools))j.tools=j.tools.map(($)=>({...$,name:$.name?d1($.name):$.name}));if(j.messages&&Array.isArray(j.messages))j.messages=j.messages.map(($)=>{if($.content&&Array.isArray($.content))$.content=$.content.map((J)=>{if(J.type==="tool_use"&&J.name)return{...J,name:d1(J.name)};return J});return $});return JSON.stringify(Gj(j))}function I1(j){return j.replace(/"name"\s*:\s*"(mcp_)?([^"]+)"/g,($,J,W)=>{if(J)return`"name": "${l1(W)??Yj(W)}"`;let V=l1(W);return V?`"name": "${V}"`:$})}function i1(j,$=!1){if($)return{ready:I1(j),pending:""};let J=j.length,W='"name"',V=Math.max(0,j.length-W.length+1);for(let Q=V;Q<j.length;Q++)if(W.startsWith(j.slice(Q))){J=Math.min(J,Q);break}let O=j.lastIndexOf(W);if(O!==-1){let Q=j.slice(O);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(Q))J=Math.min(J,O)}if(J<j.length)return{ready:I1(j.slice(0,J)),pending:j.slice(J)};return{ready:I1(j),pending:""}}function L1(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let j=process.env.ANTHROPIC_INSECURE?.trim();return j==="1"||j==="true"}function Oj(j){let $=j?.trim();if(!$)return null;try{let J=new URL($);if(J.protocol!=="http:"&&J.protocol!=="https:"||J.username||J.password)return null;return J}catch{return null}}function YJ(){return Oj(process.env.ANTHROPIC_BASE_URL)}function Q1(j,$={}){let J=null;try{if(typeof j==="string"||j instanceof URL)J=new URL(j.toString());else if(j instanceof Request)J=new URL(j.url)}catch{J=null}if(!J)return{input:j,url:null};let W=J.href,V=$.baseURL?Oj($.baseURL):YJ();if(V){if(J.protocol=V.protocol,J.host=V.host,$.baseURL)J.pathname=`${V.pathname.replace(/\/$/,"")}${J.pathname}`}if(J.pathname.endsWith("/v1/messages")&&!J.searchParams.has("beta"))J.searchParams.set("beta","true");if(J.href===W)return{input:j,url:J};return{input:j instanceof Request?new Request(J.toString(),j):J,url:J}}function OJ(j){let W=j.split(/\n\n+/).filter((V)=>{if(V.includes(a1))return!1;for(let O of jj)if(V.includes(O))return!1;return!0}).join(`
1
+ import{$ as $j,A as Uj,Aa as lj,B as Bj,Ba as ij,C as C1,Ca as uj,D as Hj,Da as nj,E as x1,Ea as Kj,F as Fj,Fa as cj,G as Cj,Ga as O1,H as xj,Ha as oj,I as T1,Ia as rj,J as j1,Ja as A1,K as Tj,L as B0,La as sj,M as q1,N as qj,Na as z1,O as y0,Oa as f1,P as b0,Pa as tj,Q as J1,Qa as aj,R as Ej,Ra as k1,S as Rj,T as vj,U as Sj,V as $1,W as H0,X as F0,Y as h0,Z as Aj,_ as V1,a as s1,aa as Vj,b as t1,ba as E1,c as R0,ca as Wj,d as v0,da as Xj,e as a1,ea as Gj,f as q0,fa as W1,g as _j,ga as fj,h as e1,ha as kj,i as jj,ia as yj,j as Jj,ja as bj,k as U1,ka as R1,l as Lj,la as hj,m as B1,ma as gj,n as H1,na as X1,o as q,oa as G1,p as j0,pa as mj,q as f0,qa as v1,r as F1,ra as Z1,s as Qj,sa as K1,t as wj,ta as Y1,u as b,ua as pj,va as S1,w as k0,wa as P1,x as Mj,xa as dj,y as a0,ya as Zj,z as e0,za as g0}from"./index-hjkkewsy.js";import{Va as ej}from"./index-99mvcpj7.js";import{randomUUID as bJ}from"node:crypto";function M0(j){return typeof j==="object"&&j!==null}function XJ(j){if(Array.isArray(j))return j;if(M0(j)&&Array.isArray(j.data))return j.data;return[]}function GJ(j){if(!M0(j)||!M0(j.info))return;return typeof j.info.role==="string"?j.info.role:void 0}function b1(j){if(!M0(j)||!M0(j.info))return null;let J=j.info,$=M0(J.model)?J.model:void 0,W=typeof J.agent==="string"?J.agent:void 0,V=typeof $?.providerID==="string"?$.providerID:typeof J.providerID==="string"?J.providerID:void 0,P=typeof $?.modelID==="string"?$.modelID:typeof J.modelID==="string"?J.modelID:void 0,Q=typeof $?.variant==="string"?$.variant:typeof J.variant==="string"?J.variant:void 0;if(!W&&(!V||!P)&&!Q)return null;let v={};if(W)v.agent=W;if(V&&P)v.model={providerID:V,modelID:P};if(Q)v.variant=Q;return v}function h1(j,J){return{agent:j.agent??J.agent,model:j.model??J.model,variant:j.variant??J.variant}}function g1(j){return Boolean(j.agent&&j.model&&j.variant)}async function m1(j,J){if(!j||!J)return null;let $=j;if(typeof $.session?.messages!=="function")return null;let W=[];try{W=XJ(await Promise.resolve($.session.messages({path:{id:J},query:{limit:100}})))}catch{return null}if(W.length===0)return null;let V={};for(let P=W.length-1;P>=0;P--){if(GJ(W[P])!=="assistant")continue;let Q=b1(W[P]);if(!Q)continue;if(V=h1(V,Q),g1(V))return V}for(let P=W.length-1;P>=0;P--){let Q=b1(W[P]);if(!Q)continue;if(V=h1(V,Q),g1(V))return V}if(!V.agent&&!V.model&&!V.variant)return null;return V}function p1(j,J){let $=new Map,W=0,V=0,P=0,Q=0,v=0,u=(h)=>{let A=performance.now(),c=j(h);return v+=performance.now()-A,P++,c};return{call:(h)=>{if(!J.enabled())return u(h);let A=$.get(h);if(A!==void 0)return V++,$.delete(h),$.set(h,A),A;let c=u(h),t=h.length+c.length;if(t>J.maxBytes)return c;$.set(h,c),W+=t;while(W>J.maxBytes&&$.size>1){let d=$.keys().next().value,G0=$.get(d)??"";$.delete(d),W-=d.length+G0.length,Q++}return c},stats:()=>({hits:V,misses:P,evictions:Q,entries:$.size,cacheBytes:W,computeMsTotal:v})}}function d1(j){return`${s1}${j.charAt(0).toUpperCase()}${j.slice(1)}`}function Yj(j){if(j==="StructuredOutput")return j;return`${j.charAt(0).toLowerCase()}${j.slice(1)}`}var ZJ=new Set(["callgraph","conflicts","delete","import","inspect","move","navigate","outline","refactor","safety","search","transform","zoom"]);function l1(j){let J=Yj(j);if(J.startsWith("aft_"))return J;if(ZJ.has(J))return`aft_${J}`;return null}function L1(j,J){let $=new Headers;if(j instanceof Request)j.headers.forEach((V,P)=>{$.set(P,V)});let W=J?.headers;if(W){if(W instanceof Headers)W.forEach((V,P)=>{$.set(P,V)});else if(Array.isArray(W))for(let V of W){let[P,Q]=V;if(typeof Q<"u")$.set(P,String(Q))}else for(let[V,P]of Object.entries(W))if(typeof P<"u")$.set(V,String(P))}return $}function s0(j){return j.set("anthropic-beta",R0(j.get("anthropic-beta"),[t1])),j}function S0(j,J,$={}){return Xj(j,J,$)}function KJ(j){if(j.tools&&Array.isArray(j.tools))j.tools=j.tools.map((J)=>({...J,name:J.name?d1(J.name):J.name}));if(j.messages&&Array.isArray(j.messages))j.messages=j.messages.map((J)=>{if(J.content&&Array.isArray(J.content))J.content=J.content.map(($)=>{if($.type==="tool_use"&&$.name)return{...$,name:d1($.name)};return $});return J});return JSON.stringify(Gj(j))}function _1(j){return j.replace(/"name"\s*:\s*"(mcp_)?([^"]+)"/g,(J,$,W)=>{if($)return`"name": "${l1(W)??Yj(W)}"`;let V=l1(W);return V?`"name": "${V}"`:J})}function i1(j,J=!1){if(J)return{ready:_1(j),pending:""};let $=j.length,W='"name"',V=Math.max(0,j.length-W.length+1);for(let Q=V;Q<j.length;Q++)if(W.startsWith(j.slice(Q))){$=Math.min($,Q);break}let P=j.lastIndexOf(W);if(P!==-1){let Q=j.slice(P);if(/^"name"\s*(?::\s*(?:"[^"]*)?)?$/.test(Q))$=Math.min($,P)}if($<j.length)return{ready:_1(j.slice(0,$)),pending:j.slice($)};return{ready:_1(j),pending:""}}function Q1(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let j=process.env.ANTHROPIC_INSECURE?.trim();return j==="1"||j==="true"}function Pj(j){let J=j?.trim();if(!J)return null;try{let $=new URL(J);if($.protocol!=="http:"&&$.protocol!=="https:"||$.username||$.password)return null;return $}catch{return null}}function YJ(){return Pj(process.env.ANTHROPIC_BASE_URL)}function w1(j,J={}){let $=null;try{if(typeof j==="string"||j instanceof URL)$=new URL(j.toString());else if(j instanceof Request)$=new URL(j.url)}catch{$=null}if(!$)return{input:j,url:null};let W=$.href,V=J.baseURL?Pj(J.baseURL):YJ();if(V){if($.protocol=V.protocol,$.host=V.host,J.baseURL)$.pathname=`${V.pathname.replace(/\/$/,"")}${$.pathname}`}if($.pathname.endsWith("/v1/messages")&&!$.searchParams.has("beta"))$.searchParams.set("beta","true");if($.href===W)return{input:j,url:$};return{input:j instanceof Request?new Request($.toString(),j):$,url:$}}function PJ(j){let W=j.split(/\n\n+/).filter((V)=>{if(V.includes(a1))return!1;for(let P of jj)if(V.includes(P))return!1;return!0}).join(`
2
2
 
3
- `);for(let V of Jj)W=W.replace(V.match,V.replacement);return W.trim()}var PJ=8388608;function zJ(){return process.env.OPENCODE_ANTHROPIC_AUTH_MEMO!=="0"}var DJ=p1(OJ,{maxBytes:PJ,enabled:zJ});function u0(j){return DJ.call(j)}function d(j){return j!=null&&typeof j==="object"&&!Array.isArray(j)}function NJ(j){let $={type:"text",text:q0};if(j==null)return[$];if(typeof j==="string"){let W=u0(j);if(W===q0)return[$];return[$,{type:"text",text:W}]}if(d(j)){let W=typeof j.type==="string"?j.type:"text",V=typeof j.text==="string"?j.text:"";return[$,{...j,type:W,text:u0(V)}]}if(!Array.isArray(j))return[$];let J=j.map((W)=>{if(typeof W==="string")return{type:"text",text:u0(W)};if(d(W)&&W.type==="text"&&typeof W.text==="string")return{...W,type:"text",text:u0(W.text)};return{type:"text",text:String(W)}});if(J[0]?.text===q0)return J;return[$,...J]}var Pj={type:"ephemeral",ttl:"1h"},IJ=20;function _J(j){if(d(j.cache_control))return j.cache_control;if(d(j.cacheControl))return j.cacheControl;return null}function r0(j,$){if(!d(j))return!1;return delete j.cacheControl,j.cache_control=$?{...Pj}:{type:"ephemeral"},!0}function u1(j){if(!d(j))return;delete j.cache_control,delete j.cacheControl}function LJ(j){if(Array.isArray(j))return j;if(typeof j==="string")return[{type:"text",text:j}];return null}function n0(j,$){if(!d(j))return;let J=_J(j);if(J?.type!=="ephemeral")return;if($)J.ttl="1h";else delete J.ttl}function n1(j,$){if(Array.isArray(j.system))for(let J of j.system)n0(J,$);else n0(j.system,$);if(!Array.isArray(j.messages))return;for(let J of j.messages)if(n0(J,$),d(J)&&Array.isArray(J.content))for(let W of J.content)n0(W,$)}function QJ(j,$){if(Array.isArray(j.system))for(let J of j.system)$(J);else $(j.system);if(!Array.isArray(j.messages))return;for(let J of j.messages)if($(J),d(J)&&Array.isArray(J.content))for(let W of J.content)$(W)}function zj(j){u1(j),QJ(j,u1)}function wJ(j){zj(j),j.cache_control={...Pj}}function MJ(j){return d(j)&&j.type!=="thinking"&&j.type!=="redacted_thinking"}function w1(j){let $=LJ(j.content);if(!$?.length)return;let J=$.filter(MJ);if(!J.length)return;return{content:$,cacheableBlocks:J}}function UJ(j){if(!d(j))return!1;let $=w1(j);if(!$)return!1;return j.content=$.content,r0($.cacheableBlocks[0],!0)}function c0(j){if(!d(j))return!1;let $=w1(j);if(!$)return!1;let J=$.cacheableBlocks[$.cacheableBlocks.length-1];return j.content=$.content,r0(J,!0)}function BJ(j){if(!d(j))return!1;return(w1(j)?.cacheableBlocks.length??0)>1}function CJ(j){if(!d(j))return 0;let $=j.content;if(Array.isArray($))return $.length;if($==null)return 0;return 1}function HJ(j){let $=[],J=0;return j.forEach((W,V)=>{let O=CJ(W);if(d(W)&&W.role==="user"&&O>0)$.push({index:V,blockPosition:J+O-1});J+=O}),$}function FJ(j){let $=HJ(j),J=[...$].reverse().find((Q)=>Q.index>1);if(!J)return{latest:void 0,bridge:void 0};let W=[...$].reverse().find((Q)=>Q.index<J.index),V=W?J.blockPosition-W.blockPosition+1:0,O=W&&W.index>1&&V>IJ?W:void 0;return{latest:J,bridge:O}}function c1(j){if(Array.isArray(j.system)){let $=j.system.findIndex((V)=>d(V)&&V.text===q0),J=j.system.slice($>=0?$+1:0).filter(d),W=J[J.length-1];r0(W,!0)}else r0(j.system,!0)}function xJ(j){if(zj(j),!Array.isArray(j.messages)){c1(j);return}let{latest:$,bridge:J}=FJ(j.messages);if(!J)c1(j);let W=BJ(j.messages[0]);if(W)UJ(j.messages[0]);if(c0(j.messages[0]),!W)c0(j.messages[1]);if(J)c0(j.messages[J.index]);if($)c0(j.messages[$.index])}function TJ(j){if(!Kj(j.model))return null;let $=Object.hasOwn(j,"thinking");return j.thinking={...Zj},{replacedExisting:$}}function qJ(j,$){if(!$.enabled){n1(j,!1),delete j.cache_control,delete j.cacheControl;return}if($.mode==="automatic"){wJ(j);return}if($.mode==="hybrid"){xJ(j);return}n1(j,!0),delete j.cacheControl}function EJ(j){if(!Array.isArray(j.messages))return;while(j.messages.length){let $=j.messages[j.messages.length-1];if(!d($)||$.role!=="assistant")break;j.messages.pop()}}function R(){return performance.now()}function e(j){return Math.round(j*10)/10}function o1(j){let $=0,J=0,W=0,V=Array.isArray(j.messages)?j.messages:[];$=V.length;for(let O of V){if(!O||typeof O!=="object")continue;let Q=O.content;if(!Array.isArray(Q))continue;J+=Q.length;for(let v of Q)if(v&&typeof v==="object"&&v.type==="tool_use")W++}return{messageCount:$,contentBlockCount:J,toolDefinitionCount:Array.isArray(j.tools)?j.tools.length:0,toolUseCount:W,systemBlockCount:Array.isArray(j.system)?j.system.length:0}}async function M1(j,$={}){try{let J=R(),W=JSON.parse(j);$.perf?.("parse",{ms:e(R()-J),inputBytes:j.length,...o1(W)});let V=R(),O=Array.isArray(W.messages)?W.messages.length:void 0;EJ(W);let Q=Array.isArray(W.messages)?W.messages.length:void 0;$.perf?.("strip_trailing_assistant",{ms:e(R()-V),removedMessages:typeof O==="number"&&typeof Q==="number"?O-Q:void 0});let v=R(),u=TJ(W);$.perf?.("model_normalize",{ms:e(R()-v),model:typeof W.model==="string"?W.model:void 0,fableMythosThinkingDisplay:u?"summarized":void 0,replacedFableMythosThinking:u?.replacedExisting??!1,hasOutputConfig:Object.hasOwn(W,"output_config")});let n=R(),r=Array.isArray(W.messages)&&W.messages.some((V0)=>V0.role==="user")?Vj(W.messages,void 0,e1):null;$.perf?.("billing_header",{ms:e(R()-n),hasBillingHeader:Boolean(r)});let h=R();if(W.system=NJ(W.system),$.perf?.("system_identity",{ms:e(R()-h),systemBlockCount:Array.isArray(W.system)?W.system.length:0}),r&&Array.isArray(W.system))W.system.unshift({type:"text",text:r});let A=R();if(qJ(W,{enabled:$.cache1hEnabled??!1,mode:$.cache1hMode??"explicit"}),$.perf?.("cache_strategy",{ms:e(R()-A),enabled:$.cache1hEnabled??!1,mode:$.cache1hMode??"explicit"}),$.fastModeEnabled&&R0(W.model))W.speed="fast";else if(W.speed==="fast")delete W.speed;let c=R();if($.identity)Wj(W,$.identity);$.perf?.("metadata",{ms:e(R()-c),hasAccountUuid:Boolean($.identity?.accountUuid)});let t=R(),p=KJ(W);$.perf?.("prefix_tools_stringify",{ms:e(R()-t),outputBytesBeforeSign:p.length,...o1(W)});let G0=R(),I0=await $j(p);return $.perf?.("cch_sign",{ms:e(R()-G0),outputBytes:I0.length}),I0}catch{return j}}var RJ=new TextEncoder;function vJ(){return{pending:"",events:0,parseErrors:0,eventCounts:{},typeCounts:{},deltaTypeCounts:{},contentBlockTypeCounts:{},textDeltaBytes:0,thinkingDeltaBytes:0,inputJsonDeltaBytes:0,signatureDeltaBytes:0,redactedThinkingBytes:0}}function o0(j,$){if(!$)return;j[$]=(j[$]??0)+1}function z0(j){return RJ.encode(j).byteLength}function U0(j){return j&&typeof j==="object"&&!Array.isArray(j)?j:void 0}function X0(j,$){let J=j?.[$];return typeof J==="string"?J:void 0}function SJ(j,$){let J=j?.[$];return typeof J==="number"?J:void 0}function AJ(j){if(!j.trim())return null;let $,J=[];for(let h of j.split(/\r?\n/)){if(h.startsWith("event:")){$=h.slice(6).trim();continue}if(h.startsWith("data:")){let A=h.slice(5);J.push(A.startsWith(" ")?A.slice(1):A)}}let W=J.join(`
4
- `),V={event:$,rawBytes:z0(j),dataBytes:z0(W)};if(!W||W==="[DONE]")return V.type=W==="[DONE]"?"done":void 0,V.event??=V.type,V;let O;try{O=JSON.parse(W)}catch{return V}let Q=U0(O),v=U0(Q?.delta),u=U0(Q?.content_block),n=U0(Q?.message),r=U0(Q?.usage)??U0(n?.usage);if(V.type=X0(Q,"type"),V.event??=V.type,V.index=SJ(Q,"index"),V.contentBlockType=X0(u,"type"),V.deltaType=X0(v,"type"),V.stopReason=X0(Q,"stop_reason"),V.deltaType==="text_delta")V.textDeltaBytes=z0(X0(v,"text")??"");if(V.deltaType==="thinking_delta")V.thinkingDeltaBytes=z0(X0(v,"thinking")??"");if(V.deltaType==="input_json_delta")V.inputJsonDeltaBytes=z0(X0(v,"partial_json")??"");if(V.deltaType==="signature_delta")V.signatureDeltaBytes=z0(X0(v,"signature")??"");if(V.contentBlockType==="redacted_thinking")V.redactedThinkingBytes=z0(X0(u,"data")??"");if(r)V.stopReason??=X0(n,"stop_reason");return V}function fJ(j){let $=j.indexOf(`
3
+ `);for(let V of Jj)W=W.replace(V.match,V.replacement);return W.trim()}var OJ=8388608;function zJ(){return process.env.OPENCODE_ANTHROPIC_AUTH_MEMO!=="0"}var DJ=p1(PJ,{maxBytes:OJ,enabled:zJ});function n0(j){return DJ.call(j)}function p(j){return j!=null&&typeof j==="object"&&!Array.isArray(j)}function NJ(j){let J={type:"text",text:q0};if(j==null)return[J];if(typeof j==="string"){let W=n0(j);if(W===q0)return[J];return[J,{type:"text",text:W}]}if(p(j)){let W=typeof j.type==="string"?j.type:"text",V=typeof j.text==="string"?j.text:"";return[J,{...j,type:W,text:n0(V)}]}if(!Array.isArray(j))return[J];let $=j.map((W)=>{if(typeof W==="string")return{type:"text",text:n0(W)};if(p(W)&&W.type==="text"&&typeof W.text==="string")return{...W,type:"text",text:n0(W.text)};return{type:"text",text:String(W)}});if($[0]?.text===q0)return $;return[J,...$]}var Oj={type:"ephemeral",ttl:"1h"},IJ=20;function _J(j){if(p(j.cache_control))return j.cache_control;if(p(j.cacheControl))return j.cacheControl;return null}function E0(j,J){if(!p(j))return!1;return delete j.cacheControl,j.cache_control=J?{...Oj}:{type:"ephemeral"},!0}function u1(j){if(!p(j))return;delete j.cache_control,delete j.cacheControl}function LJ(j){if(Array.isArray(j))return j;if(typeof j==="string")return[{type:"text",text:j}];return null}function c0(j,J){if(!p(j))return;let $=_J(j);if($?.type!=="ephemeral")return;if(J)$.ttl="1h";else delete $.ttl}function n1(j,J){if(Array.isArray(j.system))for(let $ of j.system)c0($,J);else c0(j.system,J);if(!Array.isArray(j.messages))return;for(let $ of j.messages)if(c0($,J),p($)&&Array.isArray($.content))for(let W of $.content)c0(W,J)}function QJ(j,J){if(Array.isArray(j.system))for(let $ of j.system)J($);else J(j.system);if(!Array.isArray(j.messages))return;for(let $ of j.messages)if(J($),p($)&&Array.isArray($.content))for(let W of $.content)J(W)}function zj(j){u1(j),QJ(j,u1)}function wJ(j){zj(j),j.cache_control={...Oj}}function MJ(j){return p(j)&&j.type!=="thinking"&&j.type!=="redacted_thinking"}function t0(j){let J=LJ(j.content);if(!J?.length)return;let $=J.filter(MJ);if(!$.length)return;return{content:J,cacheableBlocks:$}}function UJ(j){if(!p(j))return!1;let J=t0(j);if(!J)return!1;return j.content=J.content,E0(J.cacheableBlocks[0],!0)}function BJ(j){if(!p(j))return!1;let J=t0(j);if(!J||J.cacheableBlocks.length<2)return!1;return j.content=J.content,E0(J.cacheableBlocks[1],!0)}function o0(j){if(!p(j))return!1;let J=t0(j);if(!J)return!1;let $=J.cacheableBlocks[J.cacheableBlocks.length-1];return j.content=J.content,E0($,!0)}function HJ(j){if(!p(j))return!1;return(t0(j)?.cacheableBlocks.length??0)>1}function FJ(j){if(!p(j))return 0;let J=j.content;if(Array.isArray(J))return J.length;if(J==null)return 0;return 1}function CJ(j){let J=[],$=0;return j.forEach((W,V)=>{let P=FJ(W);if(p(W)&&W.role==="user"&&P>0)J.push({index:V,blockPosition:$+P-1});$+=P}),J}function xJ(j){let J=CJ(j),$=[...J].reverse().find((Q)=>Q.index>1);if(!$)return{latest:void 0,bridge:void 0};let W=[...J].reverse().find((Q)=>Q.index<$.index),V=W?$.blockPosition-W.blockPosition+1:0,P=W&&W.index>1&&V>IJ?W:void 0;return{latest:$,bridge:P}}function c1(j){if(Array.isArray(j.system)){let J=j.system.findIndex((V)=>p(V)&&V.text===q0),$=j.system.slice(J>=0?J+1:0).filter(p),W=$[$.length-1];E0(W,!0)}else E0(j.system,!0)}function TJ(j){if(zj(j),!Array.isArray(j.messages)){c1(j);return}let{latest:J,bridge:$}=xJ(j.messages);if(!$)c1(j);if(HJ(j.messages[0]))UJ(j.messages[0]),BJ(j.messages[0]);else o0(j.messages[0]),o0(j.messages[1]);if($)o0(j.messages[$.index]);if(J)o0(j.messages[J.index])}function qJ(j){if(!Kj(j.model))return null;let J=Object.hasOwn(j,"thinking");return j.thinking={...Zj},{replacedExisting:J}}function EJ(j,J){if(!J.enabled){n1(j,!1),delete j.cache_control,delete j.cacheControl;return}if(J.mode==="automatic"){wJ(j);return}if(J.mode==="hybrid"){TJ(j);return}n1(j,!0),delete j.cacheControl}function RJ(j){if(!Array.isArray(j.messages))return;while(j.messages.length){let J=j.messages[j.messages.length-1];if(!p(J)||J.role!=="assistant")break;j.messages.pop()}}function R(){return performance.now()}function e(j){return Math.round(j*10)/10}function o1(j){let J=0,$=0,W=0,V=Array.isArray(j.messages)?j.messages:[];J=V.length;for(let P of V){if(!P||typeof P!=="object")continue;let Q=P.content;if(!Array.isArray(Q))continue;$+=Q.length;for(let v of Q)if(v&&typeof v==="object"&&v.type==="tool_use")W++}return{messageCount:J,contentBlockCount:$,toolDefinitionCount:Array.isArray(j.tools)?j.tools.length:0,toolUseCount:W,systemBlockCount:Array.isArray(j.system)?j.system.length:0}}async function M1(j,J={}){try{let $=R(),W=JSON.parse(j);J.perf?.("parse",{ms:e(R()-$),inputBytes:j.length,...o1(W)});let V=R(),P=Array.isArray(W.messages)?W.messages.length:void 0;RJ(W);let Q=Array.isArray(W.messages)?W.messages.length:void 0;J.perf?.("strip_trailing_assistant",{ms:e(R()-V),removedMessages:typeof P==="number"&&typeof Q==="number"?P-Q:void 0});let v=R(),u=qJ(W);J.perf?.("model_normalize",{ms:e(R()-v),model:typeof W.model==="string"?W.model:void 0,fableMythosThinkingDisplay:u?"summarized":void 0,replacedFableMythosThinking:u?.replacedExisting??!1,hasOutputConfig:Object.hasOwn(W,"output_config")});let n=R(),r=Array.isArray(W.messages)&&W.messages.some((V0)=>V0.role==="user")?Vj(W.messages,void 0,e1):null;J.perf?.("billing_header",{ms:e(R()-n),hasBillingHeader:Boolean(r)});let h=R();if(W.system=NJ(W.system),J.perf?.("system_identity",{ms:e(R()-h),systemBlockCount:Array.isArray(W.system)?W.system.length:0}),r&&Array.isArray(W.system))W.system.unshift({type:"text",text:r});let A=R();if(EJ(W,{enabled:J.cache1hEnabled??!1,mode:J.cache1hMode??"explicit"}),J.perf?.("cache_strategy",{ms:e(R()-A),enabled:J.cache1hEnabled??!1,mode:J.cache1hMode??"explicit"}),J.fastModeEnabled&&v0(W.model))W.speed="fast";else if(W.speed==="fast")delete W.speed;let c=R();if(J.identity)Wj(W,J.identity);J.perf?.("metadata",{ms:e(R()-c),hasAccountUuid:Boolean(J.identity?.accountUuid)});let t=R(),d=KJ(W);J.perf?.("prefix_tools_stringify",{ms:e(R()-t),outputBytesBeforeSign:d.length,...o1(W)});let G0=R(),I0=await $j(d);return J.perf?.("cch_sign",{ms:e(R()-G0),outputBytes:I0.length}),I0}catch{return j}}var vJ=new TextEncoder;function SJ(){return{pending:"",events:0,parseErrors:0,eventCounts:{},typeCounts:{},deltaTypeCounts:{},contentBlockTypeCounts:{},textDeltaBytes:0,thinkingDeltaBytes:0,inputJsonDeltaBytes:0,signatureDeltaBytes:0,redactedThinkingBytes:0}}function r0(j,J){if(!J)return;j[J]=(j[J]??0)+1}function z0(j){return vJ.encode(j).byteLength}function U0(j){return j&&typeof j==="object"&&!Array.isArray(j)?j:void 0}function X0(j,J){let $=j?.[J];return typeof $==="string"?$:void 0}function AJ(j,J){let $=j?.[J];return typeof $==="number"?$:void 0}function fJ(j){if(!j.trim())return null;let J,$=[];for(let h of j.split(/\r?\n/)){if(h.startsWith("event:")){J=h.slice(6).trim();continue}if(h.startsWith("data:")){let A=h.slice(5);$.push(A.startsWith(" ")?A.slice(1):A)}}let W=$.join(`
4
+ `),V={event:J,rawBytes:z0(j),dataBytes:z0(W)};if(!W||W==="[DONE]")return V.type=W==="[DONE]"?"done":void 0,V.event??=V.type,V;let P;try{P=JSON.parse(W)}catch{return V}let Q=U0(P),v=U0(Q?.delta),u=U0(Q?.content_block),n=U0(Q?.message),r=U0(Q?.usage)??U0(n?.usage);if(V.type=X0(Q,"type"),V.event??=V.type,V.index=AJ(Q,"index"),V.contentBlockType=X0(u,"type"),V.deltaType=X0(v,"type"),V.stopReason=X0(Q,"stop_reason"),V.deltaType==="text_delta")V.textDeltaBytes=z0(X0(v,"text")??"");if(V.deltaType==="thinking_delta")V.thinkingDeltaBytes=z0(X0(v,"thinking")??"");if(V.deltaType==="input_json_delta")V.inputJsonDeltaBytes=z0(X0(v,"partial_json")??"");if(V.deltaType==="signature_delta")V.signatureDeltaBytes=z0(X0(v,"signature")??"");if(V.contentBlockType==="redacted_thinking")V.redactedThinkingBytes=z0(X0(u,"data")??"");if(r)V.stopReason??=X0(n,"stop_reason");return V}function kJ(j){let J=j.indexOf(`
5
5
 
6
- `),J=j.indexOf(`\r
6
+ `),$=j.indexOf(`\r
7
7
  \r
8
- `);if($===-1)return J===-1?null:{index:J,length:4};if(J===-1||$<J)return{index:$,length:2};return{index:J,length:4}}function r1(j,$){if(!$)return;j.pending+=$;while(!0){let J=fJ(j.pending);if(!J)break;let W=j.pending.slice(0,J.index);j.pending=j.pending.slice(J.index+J.length);let V=AJ(W);if(!V)continue;if(j.events++,o0(j.eventCounts,V.event??"unknown"),o0(j.typeCounts,V.type),o0(j.deltaTypeCounts,V.deltaType),o0(j.contentBlockTypeCounts,V.contentBlockType),j.textDeltaBytes+=V.textDeltaBytes??0,j.thinkingDeltaBytes+=V.thinkingDeltaBytes??0,j.inputJsonDeltaBytes+=V.inputJsonDeltaBytes??0,j.signatureDeltaBytes+=V.signatureDeltaBytes??0,j.redactedThinkingBytes+=V.redactedThinkingBytes??0,j.last=V,V.dataBytes>0&&!V.type&&!V.event)j.parseErrors++}}function kJ(j){return{sseEvents:j.events,ssePendingChars:j.pending.length,sseParseErrors:j.parseErrors,sseEventCounts:{...j.eventCounts},sseTypeCounts:{...j.typeCounts},sseDeltaTypeCounts:{...j.deltaTypeCounts},sseContentBlockTypeCounts:{...j.contentBlockTypeCounts},sseTextDeltaBytes:j.textDeltaBytes,sseThinkingDeltaBytes:j.thinkingDeltaBytes,sseInputJsonDeltaBytes:j.inputJsonDeltaBytes,sseSignatureDeltaBytes:j.signatureDeltaBytes,sseRedactedThinkingBytes:j.redactedThinkingBytes,sseLastEvent:j.last?{...j.last}:void 0}}function S0(j,$={}){if(!j.body)return j;let J=j.body.getReader(),W=new TextDecoder,V=new TextEncoder,O="",Q=0,v=0,u=0,n=0,r=0,h=!1,A=!1,c=R(),t=R(),p=$.perf?vJ():void 0,G0=()=>{if(A)return;A=!0,J.releaseLock()},I0=(s={})=>({chunks:Q,pulls:v,inputBytes:u,outputBytes:n,pendingChars:O.length,rewriteMs:e(r),totalMs:e(R()-t),...p?kJ(p):{},...s}),V0=(s,F0={})=>{$.perf?.(s,I0(F0))};$.perf?.("stream_tool_prefix_wrapper_created",{status:j.status,hasBody:!0});let D1=new ReadableStream({async pull(s){if(v++,!h)h=!0,V0("stream_tool_prefix_first_pull");let F0=R();try{let{done:K0,value:x0}=await J.read(),m0=e(R()-F0);if(K0){let G=W.decode();if(p)r1(p,G);let P=R(),N=i1(`${O}${G}`,!0);if(r+=R()-P,N.ready){let I=V.encode(N.ready);n+=I.byteLength,s.enqueue(I)}V0("stream_tool_prefix_rewrite",{readMs:m0}),G0(),s.close();return}Q++,u+=x0.byteLength;let g0=W.decode(x0,{stream:!0});if(p)r1(p,g0);let _0=O+g0,p0=R(),T0=i1(_0);if(r+=R()-p0,O=T0.pending,T0.ready){let G=V.encode(T0.ready);n+=G.byteLength,s.enqueue(G)}let X=R();if(Q===1||Q%25===0||X-c>5000)c=X,V0("stream_tool_prefix_progress",{readMs:m0,lastChunkBytes:x0.byteLength})}catch(K0){throw V0("stream_tool_prefix_error",{error:K0 instanceof Error?K0.message:String(K0)}),G0(),K0}},async cancel(s){V0("stream_tool_prefix_cancel",{reason:s instanceof Error?s.message:String(s)});try{await J.cancel(s)}finally{G0()}}});return new Response(D1,{status:j.status,statusText:j.statusText,headers:j.headers})}var bJ="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",hJ=60000,mJ=60000,gJ=5000,Dj=200,jJ=240,pJ=jJ,dJ=1,Nj=!1;function z1(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function U(){return performance.now()}function S(j){return Math.round(j*10)/10}function Ij(j){return Math.floor(Math.random()*Math.max(0,j))}function lJ(){if(Nj||!1||!z1())return;Nj=!0;let j=100,$=250,J=U()+j;setInterval(()=>{let W=U(),V=W-J;if(J=W+j,V<$)return;q("[perf] opencode event_loop_lag",{lagMs:S(V),thresholdMs:$})},j).unref?.()}function iJ(j){let $=U(),J={requestId:String(dJ++),start:$,last:$,mark(W,V){let O=U();if(z1())q("[perf] opencode request stage",{requestId:J.requestId,stage:W,deltaMs:S(O-J.last),totalMs:S(O-J.start),...V});J.last=O},done(W,V){let O=U();if(z1())q("[perf] opencode request done",{requestId:J.requestId,stage:W,deltaMs:S(O-J.last),totalMs:S(O-J.start),...V});J.last=O}};if(z1())q("[perf] opencode request start",{requestId:J.requestId,...j});return J}async function D0(j,$,J){let W=j.client.session,V=await g1(j.client,$),O={path:{id:$},body:{noReply:!0,parts:[{type:"text",text:J,ignored:!0}]}};if(V?.agent)O.body.agent=V.agent;if(V?.model)O.body.model=V.model;if(V?.variant)O.body.variant=V.variant;if(typeof W?.promptAsync==="function"){await W.promptAsync(O);return}if(typeof W?.prompt==="function"){await Promise.resolve(W.prompt(O));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function N0(){throw Error(bJ)}function uJ(j){if(j.sessionID==null)return!1;let $=j.model;return $?.providerID==="anthropic"||$?.api?.npm==="@ai-sdk/anthropic"||$?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function nJ(j){if(j.some(($)=>$.includes("<use_parallel_tool_calls>")))return!1;return j.push(_j),!0}var cJ={input:0,output:0,cache:{read:0,write:0}};function oJ(j){let $=j["claude-opus-4-8"]??j["claude-opus-4-5"]??Object.values(j)[0];if(!$)return j;return{...j,...Object.fromEntries(Object.values(nj).map((J)=>[J.id,{...$,id:J.id,name:J.name,api:$.api?{...$.api,id:J.id}:void 0,cost:{input:h0.input,output:h0.output,cache:{read:h0.cacheRead,write:h0.cacheWrite5m}},limit:{...$.limit??{},context:lj,output:ij},capabilities:{...$.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:uj}]))}}function rJ(j){return Object.fromEntries(Object.entries(j).map(([$,J])=>[$,{...J,cost:cJ}]))}var Z3=async(j)=>{lJ();let{client:$}=j,J=wj(),W=await b(J),V=new cj({storage:W,onMainQuotaFetched:async(X,G,P)=>{try{let N=await b(J)??{version:1,accounts:[]};N.quota=N.quota??{},N.quota.mainQuota=X,N.quota.mainQuotaCheckedAt=G,N.quota.mainQuotaToken=P,N.quota.mainLastQuotaApiError=void 0,await f0(N,J,{mainQuota:!0})}catch(N){q("[quota] failed to persist main quota",{error:N instanceof Error?N.message:String(N)})}},onApiError:async(X)=>{try{let G=await b(J)??{version:1,accounts:[]};G.quota=G.quota??{},G.quota.mainLastQuotaApiError=X,await f0(G,J,{mainQuota:!0})}catch(G){q("[quota] failed to persist backoff state",{error:G instanceof Error?G.message:String(G)})}}}),O=new Sj({quotaManager:V,onFallbackStorageChanged:()=>{r()}});O.startBackgroundRefresh();let Q=null,v=new mj({loadStorage:()=>b(J),prepareHeaders:async(X,G)=>{if(!A)return X;let P=await A();if(P.type!=="oauth")return X;if(!P.access||P.expires&&P.expires<Date.now()){if(!Q)return X;P.access=await Q()}if(!P.access)return X;try{let N=JSON.parse(G.bodyText),I=await E1(P.access,typeof N.model==="string"?N.model:void 0);if(X.delete("anthropic-beta"),v0(X,P.access,{body:N,identity:I}),X.set("anthropic-beta",E0(X.get("anthropic-beta"),[fj])),N.speed==="fast")s0(X)}catch{v0(X,P.access)}return X},log:q});b0({enabled:t0(W),mode:a0(W)}),X1(F1(W)),K1(x1(W));let u={activeId:"main",route:"main"};function n(X,G){u={activeId:G.activeId,route:G.route};let P=V.getMain(G.mainAccessToken),N=V.getLastApiError(),I=X?.refresh?.mainLastRefreshError,f={main:{quota:P?.quota??null,quotaBackedOff:V.isBackedOff(),quotaBackoffUntil:N?.nextRetryAt,refreshBackedOff:I?B0(I,G.mainRefreshToken,Date.now()):!1,refreshBackoffUntil:I?.nextRetryAt},fallbacks:(X?.accounts??[]).filter((E)=>E.enabled!==!1&&j0(E)).map((E)=>({id:E.id,label:E.label,quota:E.access?V.getFallback(E.id,E.access)?.quota??null:null,enabled:E.enabled!==!1})),activeId:G.activeId,route:G.route,relay:(()=>{let E=A1(X);return E?{enabled:!0,transport:E.transport??"http"}:null})(),fastMode:Z1(),cacheKeep:{enabled:R1(X),window:X?.cacheKeep?.startHour!=null&&X?.cacheKeep?.endHour!=null?`${X.cacheKeep.startHour}-${X.cacheKeep.endHour}`:void 0,trackedSessions:v.trackedCount()},lastUpdated:Date.now()};ej(f).catch((E)=>q("[sidebar] state write failed",{error:E instanceof Error?E.message:String(E)}))}async function r(){let X=await b(J),G,P;if(A)try{let N=await A();G=N.access,P=N.refresh}catch{}n(X,{activeId:u.activeId,route:u.route,mainAccessToken:G,mainRefreshToken:P})}function h(X,G){if(!G)return;if(X?.quota?.enabled!==!0)return;if(V.getMain(G))return;if(c)return;c=!0,V.refreshMain(G).then(()=>r()).catch(()=>{}).finally(()=>{c=!1})}let A=null,c=!1,t=null,p=0;function G0(X){let G=X?.refresh?.refreshBeforeExpiryMinutes??pJ;return Math.max(jJ,G)*60000}function I0(X){return X?.refresh?.enabled!==!1}async function V0(X){if(!X)return;let G=await b(J),P=G?.refresh?.mainLastRefreshError;if(!G?.refresh||!P?.tokenHash)return;let N=e0(X);if(P.tokenHash===N)return;if(P.nextRetryAt&&P.nextRetryAt>Date.now()){q("[refresh] opencode main oauth keeping backoff despite token rotation",{nextRetryAt:P.nextRetryAt,retryCount:P.retryCount,remainingMs:P.nextRetryAt-Date.now()});return}G.refresh.mainLastRefreshError=void 0,await f0(G,J,{mainRefresh:!0}),q("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:P.checkedAt,previousNextRetryAt:P.nextRetryAt,previousRetryCount:P.retryCount})}async function D1(){let X=[];if(A)try{let I=await A();if(I.type==="oauth"&&I.access){let f=await V.refreshMain(I.access);X.push({name:"OpenCode anthropic",role:"main",quota:f})}else if(I.type==="oauth")X.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(I){let f=I instanceof Error?I.message:String(I);X.push({name:"OpenCode anthropic",role:"main",error:f.includes("429")?"Usage API rate limited — try again in a moment":f})}let{storage:G,errors:P}=await O.refreshQuotaForAllAccounts({force:!0}),N=new Map(P.map((I)=>[I.accountId,I.message]));if(X.push(...oj(G,N)),!A)X.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return rj({accounts:X,refreshedAt:Date.now()})}async function s(X){let G=Aj(X);if(G.type==="enable"||G.type==="disable"){let f=G.type==="enable",E=await Uj(f),o=a0(E);return b0({enabled:f,mode:o}),$1({argumentsText:X,enabled:f,mode:o})}if(G.type==="mode"){let f=await Bj(G.mode),E=t0(f);return b0({enabled:E,mode:G.mode}),$1({argumentsText:X,enabled:E,mode:G.mode})}let P=await b(J),N=t0(P),I=a0(P);return b0({enabled:N,mode:I}),$1({argumentsText:X,enabled:N,mode:I})}async function F0(X){let G=kj(X),P=await b(J);if(G.type==="window")P=await Fj(G.startHour,G.endHour);else if(G.type==="disable")P=await xj(!1);let N=yj(P),I=v.stats(N);return hj({argumentsText:X,enabled:bj(P),window:N,hybridActive:R1(P),trackedSessions:I.trackedSessions,nextPrewarmAt:I.nextPrewarmAt})}async function K0(X){let G=gj(X);if(G.type==="enable"||G.type==="disable"){let I=G.type==="enable";return await Cj(I),X1(I),v1({argumentsText:X,enabled:I})}let P=await b(J),N=F1(P);return X1(N),v1({argumentsText:X,enabled:N})}async function x0(X){let G=pj(X);if(G.type==="enable"||G.type==="disable"){let I=G.type==="enable";return await Hj(I),K1(I),S1({argumentsText:X,enabled:I})}let P=await b(J),N=x1(P);return K1(N),S1({argumentsText:X,enabled:N})}async function m0(X){let G=aj(X);if(G.type==="mode")return await tj(G.mode),k1({argumentsText:X,mode:G.mode});let P=await b();return k1({argumentsText:X,mode:f1(P)})}function g0(X,G=10){let P=Math.max(0,Math.min(Math.round(X/100*G),G));return"█".repeat(P)+"░".repeat(G-P)}function _0(X,G){return`${X} ${g0(G)} ${String(Math.round(G)).padStart(3)}%`}function p0(X){if(!X)return"";let G=new Date(X).getTime();if(Number.isNaN(G))return"";let P=G-Date.now();if(P<=0)return"resets now";let N=Math.floor(P/60000);if(N<1)return"resets <1m";if(N<60)return`resets ${N}m`;let I=Math.floor(N/60),f=N%60;return f>0?`resets ${I}h${f}m`:`resets ${I}h`}function T0(X,G,P){let N=[],I=0;if(X){let{five_hour:o,seven_day:J0}=X;if(o||J0){let Z0=P==="main"?"active":"idle",O0=p0(o?.resetsAt),L0=[`main · ${Z0}${O0?` (${O0})`:""}`];if(o)L0.push(_0("5h",o.usedPercent)),I=Math.max(I,o.usedPercent);if(J0)L0.push(_0("7d",J0.usedPercent)),I=Math.max(I,J0.usedPercent);N.push(L0.join(`
9
- `))}}if(G?.length)for(let o of G){let J0=o.quota;if(!J0)continue;let{five_hour:Y0,seven_day:Z0}=J0;if(!Y0&&!Z0)continue;let O0=o.label||"alt",d0=P===o.id?"active":"idle",Q0=p0(Y0?.resetsAt),P0=[`${O0} · ${d0}${Q0?` (${Q0})`:""}`];if(Y0)P0.push(_0("5h",Y0.usedPercent)),I=Math.max(I,Y0.usedPercent);if(Z0)P0.push(_0("7d",Z0.usedPercent)),I=Math.max(I,Z0.usedPercent);N.push(P0.join(`
8
+ `);if(J===-1)return $===-1?null:{index:$,length:4};if($===-1||J<$)return{index:J,length:2};return{index:$,length:4}}function r1(j,J){if(!J)return;j.pending+=J;while(!0){let $=kJ(j.pending);if(!$)break;let W=j.pending.slice(0,$.index);j.pending=j.pending.slice($.index+$.length);let V=fJ(W);if(!V)continue;if(j.events++,r0(j.eventCounts,V.event??"unknown"),r0(j.typeCounts,V.type),r0(j.deltaTypeCounts,V.deltaType),r0(j.contentBlockTypeCounts,V.contentBlockType),j.textDeltaBytes+=V.textDeltaBytes??0,j.thinkingDeltaBytes+=V.thinkingDeltaBytes??0,j.inputJsonDeltaBytes+=V.inputJsonDeltaBytes??0,j.signatureDeltaBytes+=V.signatureDeltaBytes??0,j.redactedThinkingBytes+=V.redactedThinkingBytes??0,j.last=V,V.dataBytes>0&&!V.type&&!V.event)j.parseErrors++}}function yJ(j){return{sseEvents:j.events,ssePendingChars:j.pending.length,sseParseErrors:j.parseErrors,sseEventCounts:{...j.eventCounts},sseTypeCounts:{...j.typeCounts},sseDeltaTypeCounts:{...j.deltaTypeCounts},sseContentBlockTypeCounts:{...j.contentBlockTypeCounts},sseTextDeltaBytes:j.textDeltaBytes,sseThinkingDeltaBytes:j.thinkingDeltaBytes,sseInputJsonDeltaBytes:j.inputJsonDeltaBytes,sseSignatureDeltaBytes:j.signatureDeltaBytes,sseRedactedThinkingBytes:j.redactedThinkingBytes,sseLastEvent:j.last?{...j.last}:void 0}}function A0(j,J={}){if(!j.body)return j;let $=j.body.getReader(),W=new TextDecoder,V=new TextEncoder,P="",Q=0,v=0,u=0,n=0,r=0,h=!1,A=!1,c=R(),t=R(),d=J.perf?SJ():void 0,G0=()=>{if(A)return;A=!0,$.releaseLock()},I0=(s={})=>({chunks:Q,pulls:v,inputBytes:u,outputBytes:n,pendingChars:P.length,rewriteMs:e(r),totalMs:e(R()-t),...d?yJ(d):{},...s}),V0=(s,C0={})=>{J.perf?.(s,I0(C0))};J.perf?.("stream_tool_prefix_wrapper_created",{status:j.status,hasBody:!0});let N1=new ReadableStream({async pull(s){if(v++,!h)h=!0,V0("stream_tool_prefix_first_pull");let C0=R();try{let{done:K0,value:x0}=await $.read(),m0=e(R()-C0);if(K0){let G=W.decode();if(d)r1(d,G);let O=R(),N=i1(`${P}${G}`,!0);if(r+=R()-O,N.ready){let I=V.encode(N.ready);n+=I.byteLength,s.enqueue(I)}V0("stream_tool_prefix_rewrite",{readMs:m0}),G0(),s.close();return}Q++,u+=x0.byteLength;let p0=W.decode(x0,{stream:!0});if(d)r1(d,p0);let _0=P+p0,d0=R(),T0=i1(_0);if(r+=R()-d0,P=T0.pending,T0.ready){let G=V.encode(T0.ready);n+=G.byteLength,s.enqueue(G)}let X=R();if(Q===1||Q%25===0||X-c>5000)c=X,V0("stream_tool_prefix_progress",{readMs:m0,lastChunkBytes:x0.byteLength})}catch(K0){throw V0("stream_tool_prefix_error",{error:K0 instanceof Error?K0.message:String(K0)}),G0(),K0}},async cancel(s){V0("stream_tool_prefix_cancel",{reason:s instanceof Error?s.message:String(s)});try{await $.cancel(s)}finally{G0()}}});return new Response(N1,{status:j.status,statusText:j.statusText,headers:j.headers})}var hJ="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",gJ=60000,mJ=60000,pJ=5000,Dj=200,jJ=240,dJ=jJ,lJ=1,Nj=!1;function D1(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function U(){return performance.now()}function S(j){return Math.round(j*10)/10}function Ij(j){return Math.floor(Math.random()*Math.max(0,j))}function iJ(){if(Nj||!1||!D1())return;Nj=!0;let j=100,J=250,$=U()+j;setInterval(()=>{let W=U(),V=W-$;if($=W+j,V<J)return;q("[perf] opencode event_loop_lag",{lagMs:S(V),thresholdMs:J})},j).unref?.()}function uJ(j){let J=U(),$={requestId:String(lJ++),start:J,last:J,mark(W,V){let P=U();if(D1())q("[perf] opencode request stage",{requestId:$.requestId,stage:W,deltaMs:S(P-$.last),totalMs:S(P-$.start),...V});$.last=P},done(W,V){let P=U();if(D1())q("[perf] opencode request done",{requestId:$.requestId,stage:W,deltaMs:S(P-$.last),totalMs:S(P-$.start),...V});$.last=P}};if(D1())q("[perf] opencode request start",{requestId:$.requestId,...j});return $}async function D0(j,J,$){let W=j.client.session,V=await m1(j.client,J),P={path:{id:J},body:{noReply:!0,parts:[{type:"text",text:$,ignored:!0}]}};if(V?.agent)P.body.agent=V.agent;if(V?.model)P.body.model=V.model;if(V?.variant)P.body.variant=V.variant;if(typeof W?.promptAsync==="function"){await W.promptAsync(P);return}if(typeof W?.prompt==="function"){await Promise.resolve(W.prompt(P));return}throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function N0(){throw Error(hJ)}function nJ(j){if(j.sessionID==null)return!1;let J=j.model;return J?.providerID==="anthropic"||J?.api?.npm==="@ai-sdk/anthropic"||J?.api?.npm==="@ai-sdk/google-vertex/anthropic"}function cJ(j){if(j.some((J)=>J.includes("<use_parallel_tool_calls>")))return!1;return j.push(_j),!0}var oJ={input:0,output:0,cache:{read:0,write:0}};function rJ(j){let J=j["claude-opus-4-8"]??j["claude-opus-4-5"]??Object.values(j)[0];if(!J)return j;return{...j,...Object.fromEntries(Object.values(nj).map(($)=>[$.id,{...J,id:$.id,name:$.name,api:J.api?{...J.api,id:$.id}:void 0,cost:{input:g0.input,output:g0.output,cache:{read:g0.cacheRead,write:g0.cacheWrite5m}},limit:{...J.limit??{},context:lj,output:ij},capabilities:{...J.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:uj}]))}}function sJ(j){return Object.fromEntries(Object.entries(j).map(([J,$])=>[J,{...$,cost:oJ}]))}var K3=async(j)=>{iJ();let{client:J}=j,$=wj(),W=await b($),V=new cj({storage:W,onMainQuotaFetched:async(X,G,O)=>{try{let N=await b($)??{version:1,accounts:[]};N.quota=N.quota??{},N.quota.mainQuota=X,N.quota.mainQuotaCheckedAt=G,N.quota.mainQuotaToken=O,N.quota.mainLastQuotaApiError=void 0,await k0(N,$,{mainQuota:!0})}catch(N){q("[quota] failed to persist main quota",{error:N instanceof Error?N.message:String(N)})}},onApiError:async(X)=>{try{let G=await b($)??{version:1,accounts:[]};G.quota=G.quota??{},G.quota.mainLastQuotaApiError=X,await k0(G,$,{mainQuota:!0})}catch(G){q("[quota] failed to persist backoff state",{error:G instanceof Error?G.message:String(G)})}}}),P=new Sj({quotaManager:V,onFallbackStorageChanged:()=>{r()}});P.startBackgroundRefresh();let Q=null,v=new gj({loadStorage:()=>b($),prepareHeaders:async(X,G)=>{if(!A)return X;let O=await A();if(O.type!=="oauth")return X;if(!O.access||O.expires&&O.expires<Date.now()){if(!Q)return X;O.access=await Q()}if(!O.access)return X;try{let N=JSON.parse(G.bodyText),I=await E1(O.access,typeof N.model==="string"?N.model:void 0);if(X.delete("anthropic-beta"),S0(X,O.access,{body:N,identity:I}),X.set("anthropic-beta",R0(X.get("anthropic-beta"),[fj])),N.speed==="fast")s0(X)}catch{S0(X,O.access)}return X},log:q});h0({enabled:a0(W),mode:e0(W)}),G1(C1(W)),Y1(x1(W));let u={activeId:"main",route:"main"};function n(X,G){u={activeId:G.activeId,route:G.route};let O=V.getMain(G.mainAccessToken),N=V.getLastApiError(),I=X?.refresh?.mainLastRefreshError,f={main:{quota:O?.quota??null,quotaBackedOff:V.isBackedOff(),quotaBackoffUntil:N?.nextRetryAt,refreshBackedOff:I?B0(I,G.mainRefreshToken,Date.now()):!1,refreshBackoffUntil:I?.nextRetryAt},fallbacks:(X?.accounts??[]).filter((E)=>E.enabled!==!1&&j0(E)).map((E)=>({id:E.id,label:E.label,quota:E.access?V.getFallback(E.id,E.access)?.quota??null:null,enabled:E.enabled!==!1})),activeId:G.activeId,route:G.route,relay:(()=>{let E=A1(X);return E?{enabled:!0,transport:E.transport??"http"}:null})(),fastMode:K1(),cacheKeep:{enabled:R1(X),window:X?.cacheKeep?.startHour!=null&&X?.cacheKeep?.endHour!=null?`${X.cacheKeep.startHour}-${X.cacheKeep.endHour}`:void 0,trackedSessions:v.trackedCount()},lastUpdated:Date.now()};ej(f).catch((E)=>q("[sidebar] state write failed",{error:E instanceof Error?E.message:String(E)}))}async function r(){let X=await b($),G,O;if(A)try{let N=await A();G=N.access,O=N.refresh}catch{}n(X,{activeId:u.activeId,route:u.route,mainAccessToken:G,mainRefreshToken:O})}function h(X,G){if(!G)return;if(X?.quota?.enabled!==!0)return;if(V.getMain(G))return;if(c)return;c=!0,V.refreshMain(G).then(()=>r()).catch(()=>{}).finally(()=>{c=!1})}let A=null,c=!1,t=null,d=0;function G0(X){let G=X?.refresh?.refreshBeforeExpiryMinutes??dJ;return Math.max(jJ,G)*60000}function I0(X){return X?.refresh?.enabled!==!1}async function V0(X){if(!X)return;let G=await b($),O=G?.refresh?.mainLastRefreshError;if(!G?.refresh||!O?.tokenHash)return;let N=j1(X);if(O.tokenHash===N)return;if(O.nextRetryAt&&O.nextRetryAt>Date.now()){q("[refresh] opencode main oauth keeping backoff despite token rotation",{nextRetryAt:O.nextRetryAt,retryCount:O.retryCount,remainingMs:O.nextRetryAt-Date.now()});return}G.refresh.mainLastRefreshError=void 0,await k0(G,$,{mainRefresh:!0}),q("[refresh] opencode main oauth cleared stale backoff after token rotation",{previousCheckedAt:O.checkedAt,previousNextRetryAt:O.nextRetryAt,previousRetryCount:O.retryCount})}async function N1(){let X=[];if(A)try{let I=await A();if(I.type==="oauth"&&I.access){let f=await V.refreshMain(I.access);X.push({name:"OpenCode anthropic",role:"main",quota:f})}else if(I.type==="oauth")X.push({name:"OpenCode anthropic",role:"main",error:"missing access token; send a request first or reconnect auth"})}catch(I){let f=I instanceof Error?I.message:String(I);X.push({name:"OpenCode anthropic",role:"main",error:f.includes("429")?"Usage API rate limited — try again in a moment":f})}let{storage:G,errors:O}=await P.refreshQuotaForAllAccounts({force:!0}),N=new Map(O.map((I)=>[I.accountId,I.message]));if(X.push(...oj(G,N)),!A)X.unshift({name:"OpenCode anthropic",role:"main",error:"auth loader has not run yet; send a request first"});return rj({accounts:X,refreshedAt:Date.now()})}async function s(X){let G=Aj(X);if(G.type==="enable"||G.type==="disable"){let f=G.type==="enable",E=await Uj(f),o=e0(E);return h0({enabled:f,mode:o}),V1({argumentsText:X,enabled:f,mode:o})}if(G.type==="mode"){let f=await Bj(G.mode),E=a0(f);return h0({enabled:E,mode:G.mode}),V1({argumentsText:X,enabled:E,mode:G.mode})}let O=await b($),N=a0(O),I=e0(O);return h0({enabled:N,mode:I}),V1({argumentsText:X,enabled:N,mode:I})}async function C0(X){let G=kj(X),O=await b($);if(G.type==="window")O=await Cj(G.startHour,G.endHour);else if(G.type==="disable")O=await xj(!1);let N=yj(O),I=v.stats(N);return hj({argumentsText:X,enabled:bj(O),window:N,hybridActive:R1(O),trackedSessions:I.trackedSessions,nextPrewarmAt:I.nextPrewarmAt})}async function K0(X){let G=mj(X);if(G.type==="enable"||G.type==="disable"){let I=G.type==="enable";return await Hj(I),G1(I),v1({argumentsText:X,enabled:I})}let O=await b($),N=C1(O);return G1(N),v1({argumentsText:X,enabled:N})}async function x0(X){let G=pj(X);if(G.type==="enable"||G.type==="disable"){let I=G.type==="enable";return await Fj(I),Y1(I),S1({argumentsText:X,enabled:I})}let O=await b($),N=x1(O);return Y1(N),S1({argumentsText:X,enabled:N})}async function m0(X){let G=aj(X);if(G.type==="mode")return await tj(G.mode),k1({argumentsText:X,mode:G.mode});let O=await b();return k1({argumentsText:X,mode:f1(O)})}function p0(X,G=10){let O=Math.max(0,Math.min(Math.round(X/100*G),G));return"█".repeat(O)+"░".repeat(G-O)}function _0(X,G){return`${X} ${p0(G)} ${String(Math.round(G)).padStart(3)}%`}function d0(X){if(!X)return"";let G=new Date(X).getTime();if(Number.isNaN(G))return"";let O=G-Date.now();if(O<=0)return"resets now";let N=Math.floor(O/60000);if(N<1)return"resets <1m";if(N<60)return`resets ${N}m`;let I=Math.floor(N/60),f=N%60;return f>0?`resets ${I}h${f}m`:`resets ${I}h`}function T0(X,G,O){let N=[],I=0;if(X){let{five_hour:o,seven_day:J0}=X;if(o||J0){let Z0=O==="main"?"active":"idle",P0=d0(o?.resetsAt),L0=[`main · ${Z0}${P0?` (${P0})`:""}`];if(o)L0.push(_0("5h",o.usedPercent)),I=Math.max(I,o.usedPercent);if(J0)L0.push(_0("7d",J0.usedPercent)),I=Math.max(I,J0.usedPercent);N.push(L0.join(`
9
+ `))}}if(G?.length)for(let o of G){let J0=o.quota;if(!J0)continue;let{five_hour:Y0,seven_day:Z0}=J0;if(!Y0&&!Z0)continue;let P0=o.label||"alt",l0=O===o.id?"active":"idle",Q0=d0(Y0?.resetsAt),O0=[`${P0} · ${l0}${Q0?` (${Q0})`:""}`];if(Y0)O0.push(_0("5h",Y0.usedPercent)),I=Math.max(I,Y0.usedPercent);if(Z0)O0.push(_0("7d",Z0.usedPercent)),I=Math.max(I,Z0.usedPercent);N.push(O0.join(`
10
10
  `))}if(!N.length)return;let f=N.join(`
11
11
 
12
- `),E=I>=90?"error":I>=70?"warning":"info";$.tui?.showToast?.({body:{title:"Claude Quota",message:f,variant:E,duration:E==="error"?8000:5000}})?.catch?.(()=>{})}return{config:async(X)=>{X.command={...X.command??{},[J1]:{template:J1,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[V1]:{template:V1,description:"Keep hybrid Claude cache warm for recently used sessions during a local time window."},[O1]:{template:O1,description:"Show current Claude OAuth quota usage for all accounts."},[W1]:{template:W1,description:"Show or toggle Anthropic request dump capture for debugging."},[G1]:{template:G1,description:"Show or toggle Anthropic fast mode for supported Opus models."},[P1]:{template:P1,description:"Show or change Claude account routing between main-first and fallback-first."},[Y1]:{template:Y1,description:"Manage killswitch — hard-block requests when quota drops below per-account thresholds."}}},"experimental.chat.system.transform":async(X,G)=>{if(!uJ(X))return;nJ(G.system)},provider:{id:"anthropic",async models(X,G){let P=oJ(X.models);if(G.auth?.type!=="oauth"||!Qj(W??{}))return P;return rJ(P)}},"command.execute.before":async(X)=>{if(X.command===J1)await D0(j,X.sessionID,await s(X.arguments)),N0();if(X.command===V1)await D0(j,X.sessionID,await F0(X.arguments)),N0();if(X.command===O1){await D0(j,X.sessionID,await D1());let G=await b(),P=A?await A().catch(()=>{return}):void 0;n(G,{activeId:"main",route:"main",mainAccessToken:P?.access,mainRefreshToken:P?.refresh}),N0()}if(X.command===W1)await D0(j,X.sessionID,await K0(X.arguments)),N0();if(X.command===G1)await D0(j,X.sessionID,await x0(X.arguments)),N0();if(X.command===P1)await D0(j,X.sessionID,await m0(X.arguments)),N0();if(X.command===Y1){let G=await b(),P=Rj(G),N=(G?.accounts??[]).filter((f)=>f.enabled!==!1).map((f)=>f.id),I=dj({argumentsText:X.arguments,config:P,accountIds:N});if(I.updatedConfig)await vj(I.updatedConfig);await D0(j,X.sessionID,I.text),N0()}},auth:{provider:"anthropic",async loader(X,G){A=X;let P=await X();if(P.type==="oauth"){let f=function(){if(t)clearInterval(t),t=null;let Y=async()=>{try{let D=await b(J);if(!I0(D))return;let F=await X();if(F.type!=="oauth")return;if(await V0(F.refresh),!F.expires)return;let _=F.expires-Date.now(),T=G0(D);if(_>T)return;if(q("[refresh] opencode main oauth background due",{expiresInMs:_,refreshBeforeMs:T}),F.refresh&&B0(D?.refresh?.mainLastRefreshError,F.refresh,Date.now())){q("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:D?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:D?.refresh?.mainLastRefreshError?.retryCount,expiresInMs:_});return}if(F.refresh&&D?.refresh?.mainRefreshLeaseUntil&&D.refresh.mainRefreshLeaseUntil>Date.now()&&D.refresh.mainRefreshLeaseTokenHash===e0(F.refresh))return;await I();let K=await X();q("[refresh] opencode main oauth refreshed in background",{newExpiresInMs:K.expires?K.expires-Date.now():void 0})}catch(D){q("[refresh] opencode main oauth refresh failed",{message:D instanceof Error?D.message:String(D)})}};if(t=setInterval(()=>{Y()},hJ+Ij(mJ)),"unref"in t)t.unref()},E=function(Y,D){if(Y instanceof Request&&Y.body)return!1;return D==null||typeof D==="string"},o=function(Y){return Y.has("x-parent-session-id")},J0=function(Y){return Y.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(Y)},Y0=function(Y){return Y?.quota?.enabled===!0},O0=function(Y,D){if(Y.delete("authorization"),Y.delete("x-api-key"),D.authHeader==="x-api-key")Y.set("x-api-key",D.apiKey??"");else Y.set("Authorization",`Bearer ${D.apiKey??""}`);Y.set("Content-Type","application/json")},Q0=function(Y){return V.getFallback(Y.id,Y.access)?.quota??Y.quota},P0=function(Y){return Object.values(Y??{}).some((D)=>D&&D.remainingPercent<=0)},y1=function(Y,D){return Y.status===429||D},N1=function(Y){if(!Y)return!1;let D=V.getMain(Y);return Boolean(D&&D.refreshAfter>Date.now()&&P0(D.quota))},N=null;async function I(){if(!N)N=(async()=>{let F=null,_=null,T=null;async function K(z){let x=await b(J)??{version:1,main:{type:"opencode",provider:"anthropic"},accounts:[]};x.refresh=x.refresh??{},z(x),await f0(x,J,{mainRefresh:!0})}async function k(z){let x=Date.now()+gJ;while(Date.now()<x){await new Promise((w)=>setTimeout(w,Dj+Ij(Dj)));let Z=await X();if(Z.type!=="oauth"||!Z.access)continue;if((Z.access!==z.access||Z.refresh!==z.refresh||(Z.expires??0)>(z.expires??0)+60000)&&(!Z.expires||Z.expires>Date.now()))return q("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:Z.expires?Z.expires-Date.now():void 0}),Z.access}return null}for(let z=0;z<=2;z++){let x=null;try{if(z>0){let H=500*2**(z-1);await new Promise((L)=>setTimeout(L,H))}if(x=await X(),!x.refresh)throw Error("Token refresh failed: missing refresh token");let Z=await b(J),B=e0(x.refresh),w=Z?.refresh?.mainLastRefreshError;if(q("[refresh] opencode main oauth refresh check",{attempt:z,expiresInMs:x.expires?x.expires-Date.now():void 0,hasBackoff:Boolean(w),backoffActive:w?B0(w,x.refresh,Date.now()):!1,retryCount:w?.retryCount,nextRetryAt:w?.nextRetryAt}),w&&B0(w,x.refresh,Date.now()))throw q("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:w.nextRetryAt,retryCount:w.retryCount}),Error(q1(w,Date.now()));if(Z?.refresh?.mainRefreshLeaseUntil&&Z.refresh.mainRefreshLeaseUntil>Date.now()&&Z.refresh.mainRefreshLeaseTokenHash===B){q("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:Z.refresh.mainRefreshLeaseUntil});let H=await k(x);if(H)return H;throw Error("Claude OAuth refresh is already in progress")}let C=await Mj({name:"opencode-main-oauth-refresh",ttlMs:120000,renew:!0});if(!C){q("[refresh] opencode main oauth refresh skipped file lock");let H=await k(x);if(H)return H;throw Error("Claude OAuth refresh is already in progress")}T=C.release,F=yJ(),_=B,await K((H)=>{H.refresh=H.refresh??{},H.refresh.mainRefreshLeaseId=F??void 0,H.refresh.mainRefreshLeaseUntil=Date.now()+120000,H.refresh.mainRefreshLeaseTokenHash=B});let m=await b(J);if(q("[refresh] opencode main oauth refresh lease acquired",{attempt:z,leaseUntil:Date.now()+120000}),m?.refresh?.mainRefreshLeaseId!==F||m.refresh.mainRefreshLeaseTokenHash!==B)throw Error("Claude OAuth refresh is already in progress");q("[refresh] opencode main oauth refresh request start",{attempt:z});let l=await Lj({refreshToken:x.refresh,maxRetries:0});return await $.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:l.refresh,access:l.access,expires:l.expires}}),await K((H)=>{if(!H?.refresh)return;if(H.refresh.mainLastRefreshError=void 0,H.refresh.mainRefreshLeaseId===F)H.refresh.mainRefreshLeaseId=void 0,H.refresh.mainRefreshLeaseUntil=void 0,H.refresh.mainRefreshLeaseTokenHash=void 0}),q("[refresh] opencode main oauth refresh succeeded",{attempt:z,expiresInMs:l.expires-Date.now()}),l.access}catch(Z){let B=Z instanceof Error&&(Z.message.includes("fetch failed")||("code"in Z)&&(Z.code==="ECONNRESET"||Z.code==="ECONNREFUSED"||Z.code==="ETIMEDOUT"||Z.code==="UND_ERR_CONNECT_TIMEOUT"));if(z<2&&(B||Z instanceof U1&&Z.status>=500))continue;q("[refresh] opencode main oauth refresh attempt failed",{attempt:z,error:Z instanceof Error?Z.message:String(Z),transient:B});let w=x?.refresh;if(w&&Z instanceof U1)await K((C)=>{C.refresh=C.refresh??{},C.refresh.mainLastRefreshError=Tj({error:Z,now:Date.now(),refreshToken:w,previous:C.refresh.mainLastRefreshError})});throw Z}finally{if(F)await K((Z)=>{if(!Z?.refresh)return;if(Z.refresh.mainRefreshLeaseId===F&&Z.refresh.mainRefreshLeaseTokenHash===_)Z.refresh.mainRefreshLeaseId=void 0,Z.refresh.mainRefreshLeaseUntil=void 0,Z.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await T?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})().finally(()=>{N=null});return N}Q=I,f(),V.seedFallbacksFromAccounts((W?.accounts??[]).filter(j0)),n(W,{activeId:"main",route:"main",mainAccessToken:P.access,mainRefreshToken:P.refresh});async function Z0(Y,D){if(!Y.body||Y.status!==200)return D?.mark("inspect_stream_skip",{status:Y.status}),{response:Y,rateLimited:!1};if(Y.headers.get("x-cortexkit-relay-optimistic")==="true")return D?.mark("inspect_stream_skip",{status:Y.status,reason:"optimistic_relay"}),{response:Y,rateLimited:!1};let F=U(),_=Y.body.getReader(),T=[],K=new TextDecoder,k="",z=0;while(!k.includes(`
12
+ `),E=I>=90?"error":I>=70?"warning":"info";J.tui?.showToast?.({body:{title:"Claude Quota",message:f,variant:E,duration:E==="error"?8000:5000}})?.catch?.(()=>{})}return{config:async(X)=>{X.command={...X.command??{},[$1]:{template:$1,description:"Show or toggle 1-hour Anthropic ephemeral prompt cache TTL."},[W1]:{template:W1,description:"Keep hybrid Claude cache warm for recently used sessions during a local time window."},[O1]:{template:O1,description:"Show current Claude OAuth quota usage for all accounts."},[X1]:{template:X1,description:"Show or toggle Anthropic request dump capture for debugging."},[Z1]:{template:Z1,description:"Show or toggle Anthropic fast mode for supported Opus models."},[z1]:{template:z1,description:"Show or change Claude account routing between main-first and fallback-first."},[P1]:{template:P1,description:"Manage killswitch — hard-block requests when quota drops below per-account thresholds."}}},"experimental.chat.system.transform":async(X,G)=>{if(!nJ(X))return;cJ(G.system)},provider:{id:"anthropic",async models(X,G){let O=rJ(X.models);if(G.auth?.type!=="oauth"||!Qj(W??{}))return O;return sJ(O)}},"command.execute.before":async(X)=>{if(X.command===$1)await D0(j,X.sessionID,await s(X.arguments)),N0();if(X.command===W1)await D0(j,X.sessionID,await C0(X.arguments)),N0();if(X.command===O1){await D0(j,X.sessionID,await N1());let G=await b(),O=A?await A().catch(()=>{return}):void 0;n(G,{activeId:"main",route:"main",mainAccessToken:O?.access,mainRefreshToken:O?.refresh}),N0()}if(X.command===X1)await D0(j,X.sessionID,await K0(X.arguments)),N0();if(X.command===Z1)await D0(j,X.sessionID,await x0(X.arguments)),N0();if(X.command===z1)await D0(j,X.sessionID,await m0(X.arguments)),N0();if(X.command===P1){let G=await b(),O=Rj(G),N=(G?.accounts??[]).filter((f)=>f.enabled!==!1).map((f)=>f.id),I=dj({argumentsText:X.arguments,config:O,accountIds:N});if(I.updatedConfig)await vj(I.updatedConfig);await D0(j,X.sessionID,I.text),N0()}},auth:{provider:"anthropic",async loader(X,G){A=X;let O=await X();if(O.type==="oauth"){let f=function(){if(t)clearInterval(t),t=null;let Y=async()=>{try{let D=await b($);if(!I0(D))return;let C=await X();if(C.type!=="oauth")return;if(await V0(C.refresh),!C.expires)return;let _=C.expires-Date.now(),T=G0(D);if(_>T)return;if(q("[refresh] opencode main oauth background due",{expiresInMs:_,refreshBeforeMs:T}),C.refresh&&B0(D?.refresh?.mainLastRefreshError,C.refresh,Date.now())){q("[refresh] opencode main oauth background skipped backoff",{nextRetryAt:D?.refresh?.mainLastRefreshError?.nextRetryAt,retryCount:D?.refresh?.mainLastRefreshError?.retryCount,expiresInMs:_});return}if(C.refresh&&D?.refresh?.mainRefreshLeaseUntil&&D.refresh.mainRefreshLeaseUntil>Date.now()&&D.refresh.mainRefreshLeaseTokenHash===j1(C.refresh))return;await I();let K=await X();q("[refresh] opencode main oauth refreshed in background",{newExpiresInMs:K.expires?K.expires-Date.now():void 0})}catch(D){q("[refresh] opencode main oauth refresh failed",{message:D instanceof Error?D.message:String(D)})}};if(t=setInterval(()=>{Y()},gJ+Ij(mJ)),"unref"in t)t.unref()},E=function(Y,D){if(Y instanceof Request&&Y.body)return!1;return D==null||typeof D==="string"},o=function(Y){return Y.has("x-parent-session-id")},J0=function(Y){return Y.includes("rate_limit_error")||/exceed your account'?s rate limit/i.test(Y)},Y0=function(Y){return Y?.quota?.enabled===!0},P0=function(Y,D){if(Y.delete("authorization"),Y.delete("x-api-key"),D.authHeader==="x-api-key")Y.set("x-api-key",D.apiKey??"");else Y.set("Authorization",`Bearer ${D.apiKey??""}`);Y.set("Content-Type","application/json")},Q0=function(Y){return V.getFallback(Y.id,Y.access)?.quota??Y.quota},O0=function(Y){return Object.values(Y??{}).some((D)=>D&&D.remainingPercent<=0)},y1=function(Y,D){return Y.status===429||D},I1=function(Y){if(!Y)return!1;let D=V.getMain(Y);return Boolean(D&&D.refreshAfter>Date.now()&&O0(D.quota))},N=null;async function I(){if(!N)N=(async()=>{let C=null,_=null,T=null;async function K(z){let x=await b($)??{version:1,main:{type:"opencode",provider:"anthropic"},accounts:[]};x.refresh=x.refresh??{},z(x),await k0(x,$,{mainRefresh:!0})}async function k(z){let x=Date.now()+pJ;while(Date.now()<x){await new Promise((w)=>setTimeout(w,Dj+Ij(Dj)));let Z=await X();if(Z.type!=="oauth"||!Z.access)continue;if((Z.access!==z.access||Z.refresh!==z.refresh||(Z.expires??0)>(z.expires??0)+60000)&&(!Z.expires||Z.expires>Date.now()))return q("[refresh] opencode main oauth joined concurrent refresh",{expiresInMs:Z.expires?Z.expires-Date.now():void 0}),Z.access}return null}for(let z=0;z<=2;z++){let x=null;try{if(z>0){let F=500*2**(z-1);await new Promise((L)=>setTimeout(L,F))}if(x=await X(),!x.refresh)throw Error("Token refresh failed: missing refresh token");let Z=await b($),B=j1(x.refresh),w=Z?.refresh?.mainLastRefreshError;if(q("[refresh] opencode main oauth refresh check",{attempt:z,expiresInMs:x.expires?x.expires-Date.now():void 0,hasBackoff:Boolean(w),backoffActive:w?B0(w,x.refresh,Date.now()):!1,retryCount:w?.retryCount,nextRetryAt:w?.nextRetryAt}),w&&B0(w,x.refresh,Date.now()))throw q("[refresh] opencode main oauth refresh skipped backoff",{nextRetryAt:w.nextRetryAt,retryCount:w.retryCount}),Error(q1(w,Date.now()));if(Z?.refresh?.mainRefreshLeaseUntil&&Z.refresh.mainRefreshLeaseUntil>Date.now()&&Z.refresh.mainRefreshLeaseTokenHash===B){q("[refresh] opencode main oauth refresh skipped lease",{leaseUntil:Z.refresh.mainRefreshLeaseUntil});let F=await k(x);if(F)return F;throw Error("Claude OAuth refresh is already in progress")}let H=await Mj({name:"opencode-main-oauth-refresh",ttlMs:120000,renew:!0});if(!H){q("[refresh] opencode main oauth refresh skipped file lock");let F=await k(x);if(F)return F;throw Error("Claude OAuth refresh is already in progress")}T=H.release,C=bJ(),_=B,await K((F)=>{F.refresh=F.refresh??{},F.refresh.mainRefreshLeaseId=C??void 0,F.refresh.mainRefreshLeaseUntil=Date.now()+120000,F.refresh.mainRefreshLeaseTokenHash=B});let g=await b($);if(q("[refresh] opencode main oauth refresh lease acquired",{attempt:z,leaseUntil:Date.now()+120000}),g?.refresh?.mainRefreshLeaseId!==C||g.refresh.mainRefreshLeaseTokenHash!==B)throw Error("Claude OAuth refresh is already in progress");q("[refresh] opencode main oauth refresh request start",{attempt:z});let l=await Lj({refreshToken:x.refresh,maxRetries:0});return await J.auth.set({path:{id:"anthropic"},body:{type:"oauth",refresh:l.refresh,access:l.access,expires:l.expires}}),await K((F)=>{if(!F?.refresh)return;if(F.refresh.mainLastRefreshError=void 0,F.refresh.mainRefreshLeaseId===C)F.refresh.mainRefreshLeaseId=void 0,F.refresh.mainRefreshLeaseUntil=void 0,F.refresh.mainRefreshLeaseTokenHash=void 0}),q("[refresh] opencode main oauth refresh succeeded",{attempt:z,expiresInMs:l.expires-Date.now()}),l.access}catch(Z){let B=Z instanceof Error&&(Z.message.includes("fetch failed")||("code"in Z)&&(Z.code==="ECONNRESET"||Z.code==="ECONNREFUSED"||Z.code==="ETIMEDOUT"||Z.code==="UND_ERR_CONNECT_TIMEOUT"));if(z<2&&(B||Z instanceof U1&&Z.status>=500))continue;q("[refresh] opencode main oauth refresh attempt failed",{attempt:z,error:Z instanceof Error?Z.message:String(Z),transient:B});let w=x?.refresh;if(w&&Z instanceof U1)await K((H)=>{H.refresh=H.refresh??{},H.refresh.mainLastRefreshError=Tj({error:Z,now:Date.now(),refreshToken:w,previous:H.refresh.mainLastRefreshError})});throw Z}finally{if(C)await K((Z)=>{if(!Z?.refresh)return;if(Z.refresh.mainRefreshLeaseId===C&&Z.refresh.mainRefreshLeaseTokenHash===_)Z.refresh.mainRefreshLeaseId=void 0,Z.refresh.mainRefreshLeaseUntil=void 0,Z.refresh.mainRefreshLeaseTokenHash=void 0}).catch(()=>{});await T?.().catch(()=>{})}}throw Error("Token refresh exhausted all retries")})().finally(()=>{N=null});return N}Q=I,f(),V.seedFallbacksFromAccounts((W?.accounts??[]).filter(j0)),n(W,{activeId:"main",route:"main",mainAccessToken:O.access,mainRefreshToken:O.refresh});async function Z0(Y,D){if(!Y.body||Y.status!==200)return D?.mark("inspect_stream_skip",{status:Y.status}),{response:Y,rateLimited:!1};if(Y.headers.get("x-cortexkit-relay-optimistic")==="true")return D?.mark("inspect_stream_skip",{status:Y.status,reason:"optimistic_relay"}),{response:Y,rateLimited:!1};let C=U(),_=Y.body.getReader(),T=[],K=new TextDecoder,k="",z=0;while(!k.includes(`
13
13
 
14
- `)&&k.length<65536){let{done:Z,value:B}=await _.read();if(Z)break;if(T.push(B),z+=B.byteLength,k+=K.decode(B,{stream:!0}),J0(k))break}if(J0(k))return await _.cancel().catch(()=>{}),D?.mark("inspect_stream_first_event",{ms:S(U()-F),bytes:z,rateLimited:!0}),{response:Y,rateLimited:!0};let x=new ReadableStream({start(Z){for(let B of T)Z.enqueue(B)},async pull(Z){let{done:B,value:w}=await _.read();if(B){Z.close();return}Z.enqueue(w)},cancel(Z){return _.cancel(Z)}});return D?.mark("inspect_stream_first_event",{ms:S(U()-F),bytes:z,rateLimited:!1}),{response:new Response(x,{status:Y.status,statusText:Y.statusText,headers:Y.headers}),rateLimited:!1}}async function L0(Y,D,F,_,T="api_fallback",K){let k=U(),z=_1(Y,D),x=o(z);z.delete("x-parent-session-id"),z.delete("x-session-affinity"),z.delete("x-opencode-session");let Z=D?.body,B=typeof Z==="string"?Z.length:void 0;if(Z&&typeof Z==="string"){let l=U(),H=(()=>{if(!Z1())return!1;try{return R0(JSON.parse(Z).model)}catch{return!1}})();if(Z=await M1(Z,{cache1hEnabled:!x&&C0(),cache1hMode:H0(),fastModeEnabled:H,perf:(L,M)=>_?.mark(`rewrite_body_${L}`,{route:T,...M})}),O0(z,F),z.set("anthropic-beta",E0(z.get("anthropic-beta"),[])),H)s0(z);_?.mark("rewrite_body",{route:T,ms:S(U()-l),originalBytes:B,rewrittenBytes:Z.length,cacheEnabled:!x&&C0(),cacheMode:H0(),fastModeEnabled:H,subagent:x})}else O0(z,F);let w=Q1(Y,{baseURL:F.baseURL}),C=U(),m=await fetch(w.input,{...D,body:Z,headers:z,...L1()&&{tls:{rejectUnauthorized:!1}}});return _?.mark("send_headers_received",{route:T,ms:S(U()-C),status:m.status,relayConfigured:!1,totalSendWithAccessMs:S(U()-k),baseURL:F.baseURL}),m}async function d0(Y,D,F,_,T="unknown",K){let k=U(),z=K,x=async()=>{return z??=await b(J),z},Z=_1(Y,D),B=Z.get("x-session-affinity")||Z.get("x-opencode-session"),w=o(Z);Z.delete("x-parent-session-id"),Z.delete("x-session-affinity"),Z.delete("x-opencode-session");let C=D?.body,m;if(C&&typeof C==="string"){let $0=U();try{let W0=JSON.parse(C);if(typeof W0.model==="string")m=W0.model}catch{}_?.mark("model_parse_for_identity",{route:T,ms:S(U()-$0),bodyBytes:C.length})}let l=U(),H=await E1(F,m);_?.mark("resolve_claude_code_identity",{route:T,ms:S(U()-l),hasAccountUuid:Boolean(H.accountUuid)});let L=typeof C==="string"?C.length:void 0;if(C&&typeof C==="string"){let $0=U(),W0=(()=>{if(!Z1())return!1;try{return R0(JSON.parse(C).model)}catch{return!1}})();C=await M1(C,{cache1hEnabled:!w&&C0(),cache1hMode:H0(),fastModeEnabled:W0,identity:H,perf:(VJ,WJ)=>_?.mark(`rewrite_body_${VJ}`,{route:T,...WJ})});let w0=U();try{v0(Z,F,{body:JSON.parse(C),identity:H}),_?.mark("set_oauth_headers_body_parse",{route:T,ms:S(U()-w0),bodyBytes:C.length,parsed:!0})}catch{v0(Z,F,{identity:H}),_?.mark("set_oauth_headers_body_parse",{route:T,ms:S(U()-w0),bodyBytes:C.length,parsed:!1})}if(W0)s0(Z);_?.mark("rewrite_body",{route:T,ms:S(U()-$0),originalBytes:L,rewrittenBytes:C.length,cacheEnabled:!w&&C0(),cacheMode:H0(),fastModeEnabled:W0,subagent:w})}let M=Q1(Y);if(T==="main"&&typeof C==="string"&&!w&&C0()&&H0()==="hybrid"){let $0=await x(),W0=U(),w0=v.track({sessionId:B,url:M.url?.toString()??M.input.toString(),headers:Z,bodyText:C,storage:$0,cacheMode:"hybrid"});_?.mark("cachekeep_track",{session:B,ms:S(U()-W0),tracked:w0.tracked,reason:w0.tracked?void 0:w0.reason,bodyBytes:C.length})}let y=()=>fetch(M.input,{...D,body:C,headers:Z,...L1()&&{tls:{rejectUnauthorized:!1}}}),a=A1(await x()),g=U(),i=await sj({config:a,input:M.input,init:D,headers:Z,body:C,fallback:y,affinity:B,optimisticResponse:a?.transport==="websocket"});return _?.mark("send_headers_received",{route:T,ms:S(U()-g),status:i.status,relayConfigured:a!=null,totalSendWithAccessMs:S(U()-k)}),i}async function JJ(Y){if(!Y)return!1;try{return await V.refreshMain(Y),N1(Y)}catch{return!1}}async function l0(Y,D={}){let F=await O.getUsableFallbackAccounts(Y),_=new Map(F.map((K)=>[K.id,K])),T=[];for(let K of Y?.accounts??[]){if(j0(K)){let k=_.get(K.id);if(k)T.push(k);continue}if(D.includeApiRoutes===!0&&A0(K)&&K.enabled!==!1&&K.apiKey&&H1(K.baseURL))T.push(K)}if(!y0(Y))return T;return T.filter((K)=>j0(K)?j1(Q0(K),Y,K.id):!0)}async function i0(Y,D,F,_,T,K,k){if(!F.length)return T??null;let z=k?.returnLastOnExhausted??!0;await T?.body?.cancel().catch(()=>{});let x=T??null;for(let[Z,B]of F.entries()){let w;if(A0(B)){if(!B.apiKey)continue;w=await L0(Y,D,B,K,`api_fallback_${Z}`,_)}else{let m=B.access;if(!m)continue;w=await d0(Y,D,m,K,`fallback_${Z}`,_)}x=w;let C=T1(w.status,_);if(!C){let m=await Z0(w,K);w=m.response,x=w,C=m.rateLimited}if(!C){if(await O.markUsed(B),k?.onSuccess?.(B),j0(B)&&B.access&&V.shouldRefreshOnRequestCount(p))V.refreshFallback(B.id,B.access).then(()=>k?.onSuccess?.(B)).catch(()=>{});return w}if(Z<F.length-1||!z)await w.body?.cancel().catch(()=>{})}return z?x:null}async function $J(Y,D,F,_,T,K,k,z){if(!E(Y,D?.body))return F;let x=U(),Z=K??await b(J);if(T?.mark("fallback_load_storage",{ms:S(U()-x),cached:!!K}),!(Z?.accounts??[]).some((L)=>L.enabled!==!1&&(j0(L)||A0(L)&&Boolean(L.apiKey)&&H1(L.baseURL))))return F;let w=F,C=T1(w.status,Z),m=y1(w,!1);if(!C){let L=await Z0(w,T);w=L.response,C=L.rateLimited,m=y1(w,L.rateLimited)}if(!C)return w;let l=!1;if(_)l=_.some(A0);else if(m)l=await JJ(k);let H=_;if(!H){let L=U();H=await l0(Z,{includeApiRoutes:l}),T?.mark("fallback_get_accounts",{ms:S(U()-L),accounts:H.length})}if(y0(Z)){let L=H.length;if(H=H.filter((M)=>j0(M)?j1(Q0(M),Z,M.id):!0),H.length<L)q("[killswitch] filtered fallbacks",{before:L,after:H.length})}return await i0(Y,D,H,Z,w,T,{onSuccess:z})??w}return{apiKey:"",async fetch(Y,D){let F=D?.body,_=iJ({bodyBytes:typeof F==="string"?F.length:void 0}),T=U(),K=await X();if(_.mark("get_auth",{ms:S(U()-T),authType:K.type,hasAccess:Boolean(K.access)}),K.type!=="oauth"){let L=await fetch(Y,D);return _.done("non_oauth_passthrough",{status:L.status}),L}await V0(K.refresh);let k=U(),z=await b();_.mark("load_storage",{ms:S(U()-k)}),V.updateStorage(z),V.seedFallbacksFromAccounts((z?.accounts??[]).filter(j0));let x=E(Y,D?.body);if(x)p++;if(x&&K.access&&(!K.expires||K.expires>Date.now()))h(z,K.access);let Z=(L,M)=>n(z,{activeId:L,route:M,mainAccessToken:K.access,mainRefreshToken:K.refresh}),B;if(x&&f1(z)==="fallback-first")try{let L=U();B=await l0(z,{includeApiRoutes:N1(K.access)}),_.mark("fallback_first_get_accounts",{ms:S(U()-L),accounts:B.length});let M=await i0(Y,D,B,z,void 0,_,{returnLastOnExhausted:!1,onSuccess:(y)=>Z(y.id,"fallback-first")});if(M)return _.done("return_fallback_first",{status:M.status}),S0(M,{perf:(y,a)=>_.mark(y,a)});B=void 0}catch(L){_.mark("fallback_first_error",{error:L instanceof Error?L.message:String(L)})}if(!K.access||!K.expires||K.expires<Date.now()){let M=(await b())?.refresh?.mainLastRefreshError;if(K.refresh&&M&&B0(M,K.refresh,Date.now()))throw q("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:M.nextRetryAt,retryCount:M.retryCount,expiresInMs:K.expires?K.expires-Date.now():void 0}),Error(q1(M,Date.now()));q("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(K.access),expiresInMs:K.expires?K.expires-Date.now():void 0,expiredAgoMs:K.expires&&K.expires<Date.now()?Date.now()-K.expires:void 0});let y=U();K.access=await I(),_.mark("refresh_main_access",{ms:S(U()-y)})}if(!K.access)throw _.done("missing_access_error"),Error("OAuth access token is missing after refresh");function w(){if(z?.quota?.showToasts!==!0)return;let L=V.getMain();if(!L)return;let M=(z?.accounts??[]).filter((g)=>g.enabled!==!1&&j0(g)).map((g)=>({...g,quota:V.getFallback(g.id,g.access)?.quota??g.quota})),y=k0(L.quota,z),a;if(y)a="main";else a=M.find((g)=>k0(g.quota,z))?.id??"main";T0(L.quota,M,a)}if(x&&Y0(z))try{let L=U(),M=V.getMain(K.access),y=M?.quota;if(!y)y=await V.refreshMain(K.access),M=V.getMain(K.access),w();else if(V.needsRefresh(p))if(P0(y))y=await V.refreshMain(K.access),M=V.getMain(K.access);else V.refreshMain(K.access).then(()=>{r(),w()}).catch(()=>{});if(n(z,{activeId:"main",route:"main",mainAccessToken:K.access,mainRefreshToken:K.refresh}),_.mark("main_quota_for_routing",{ms:S(U()-L),passes:k0(y,z)}),!k0(y,z)){let a=U();B=await l0(z,{includeApiRoutes:Boolean(M&&M.refreshAfter>Date.now()&&P0(M.quota))}),_.mark("preselect_fallback_accounts",{ms:S(U()-a),accounts:B.length});let g=await i0(Y,D,B,z,void 0,_,{onSuccess:(i)=>Z(i.id,"fallback")});if(g)return _.done("return_preselected_fallback",{status:g.status}),S0(g,{perf:(i,$0)=>_.mark(i,$0)})}}catch(L){_.mark("main_quota_for_routing_error",{error:L instanceof Error?L.message:String(L)})}let C=V.getMain(K.access)?.quota;if(z?.quota?.failClosedOnUnknownQuota&&!C&&V.isBackedOff()){let L=V.getLastApiError(),M=L?qj(L,Date.now()):"Quota API unavailable";return q("[quota] blocked: quota API backed off (failClosed)",{nextRetryAt:L?.nextRetryAt,retryCount:L?.retryCount}),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:M}}),{status:429,headers:{"content-type":"application/json","retry-after":String(L?.nextRetryAt?Math.max(1,Math.ceil((L.nextRetryAt-Date.now())/1000)):60)}})}if(y0(z)){if(V.needsRefresh(p))try{let M=(z?.accounts??[]).filter((y)=>y.enabled!==!1&&j0(y)&&Boolean(y.access));await Promise.all([V.refreshMain(K.access),V.refreshAllFallbacks(M)])}catch(M){q("[quota] killswitch refresh failed",{error:M instanceof Error?M.message:String(M),backedOff:V.isBackedOff()})}C=V.getMain(K.access)?.quota}if(y0(z)&&!j1(C,z)){let M=E(Y,D?.body)?await l0(z,{includeApiRoutes:N1(K.access)}):[];if(M.length>0){q("[route] skipping main (killswitch), trying fallbacks");let i=await i0(Y,D,M,z,void 0,_,{onSuccess:($0)=>Z($0.id,"fallback")});if(i)return _.done("return_killswitch_fallback",{status:i.status}),S0(i,{perf:($0,W0)=>_.mark($0,W0)})}let y=Date.now(),a=(z?.accounts??[]).filter((i)=>i.enabled!==!1&&j0(i)).map((i)=>({...i,quota:Q0(i)})),g=Ej(C,a,y);return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:`Killswitch: no routable accounts. Retry in ${Math.floor(g/60)}m ${g%60}s.`}}),{status:429,headers:{"content-type":"application/json","retry-after":String(g)}})}let m=await d0(Y,D,K.access,_,"main",z),l=!1,H=await $J(Y,D,m,B,_,z,K.access,(L)=>{l=!0,Z(L.id,"fallback")});if(!l)Z("main","main");return _.done("return_response",{status:H.status}),S0(H,{perf:(L,M)=>_.mark(L,M)})}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let X=await B1("max");return{url:X.url,instructions:"Paste the authorization code here:",method:"code",callback:async(G)=>{return C1(G,X.verifier,X.redirectUri,X.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let X=await B1("console");return{url:X.url,instructions:"Paste the authorization code here:",method:"code",callback:async(G)=>{let P=await C1(G,X.verifier,X.redirectUri,X.state);if(P.type==="failed")return P;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 ${P.access}`}}).then((I)=>I.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}};export{Z3 as AnthropicAuthPlugin};
14
+ `)&&k.length<65536){let{done:Z,value:B}=await _.read();if(Z)break;if(T.push(B),z+=B.byteLength,k+=K.decode(B,{stream:!0}),J0(k))break}if(J0(k))return await _.cancel().catch(()=>{}),D?.mark("inspect_stream_first_event",{ms:S(U()-C),bytes:z,rateLimited:!0}),{response:Y,rateLimited:!0};let x=new ReadableStream({start(Z){for(let B of T)Z.enqueue(B)},async pull(Z){let{done:B,value:w}=await _.read();if(B){Z.close();return}Z.enqueue(w)},cancel(Z){return _.cancel(Z)}});return D?.mark("inspect_stream_first_event",{ms:S(U()-C),bytes:z,rateLimited:!1}),{response:new Response(x,{status:Y.status,statusText:Y.statusText,headers:Y.headers}),rateLimited:!1}}async function L0(Y,D,C,_,T="api_fallback",K){let k=U(),z=L1(Y,D),x=o(z);z.delete("x-parent-session-id"),z.delete("x-session-affinity"),z.delete("x-opencode-session");let Z=D?.body,B=typeof Z==="string"?Z.length:void 0;if(Z&&typeof Z==="string"){let l=U(),F=(()=>{if(!K1())return!1;try{return v0(JSON.parse(Z).model)}catch{return!1}})();if(Z=await M1(Z,{cache1hEnabled:!x&&H0(),cache1hMode:F0(),fastModeEnabled:F,perf:(L,M)=>_?.mark(`rewrite_body_${L}`,{route:T,...M})}),P0(z,C),z.set("anthropic-beta",R0(z.get("anthropic-beta"),[])),F)s0(z);_?.mark("rewrite_body",{route:T,ms:S(U()-l),originalBytes:B,rewrittenBytes:Z.length,cacheEnabled:!x&&H0(),cacheMode:F0(),fastModeEnabled:F,subagent:x})}else P0(z,C);let w=w1(Y,{baseURL:C.baseURL}),H=U(),g=await fetch(w.input,{...D,body:Z,headers:z,...Q1()&&{tls:{rejectUnauthorized:!1}}});return _?.mark("send_headers_received",{route:T,ms:S(U()-H),status:g.status,relayConfigured:!1,totalSendWithAccessMs:S(U()-k),baseURL:C.baseURL}),g}async function l0(Y,D,C,_,T="unknown",K){let k=U(),z=K,x=async()=>{return z??=await b($),z},Z=L1(Y,D),B=Z.get("x-session-affinity")||Z.get("x-opencode-session"),w=o(Z);Z.delete("x-parent-session-id"),Z.delete("x-session-affinity"),Z.delete("x-opencode-session");let H=D?.body,g;if(H&&typeof H==="string"){let $0=U();try{let W0=JSON.parse(H);if(typeof W0.model==="string")g=W0.model}catch{}_?.mark("model_parse_for_identity",{route:T,ms:S(U()-$0),bodyBytes:H.length})}let l=U(),F=await E1(C,g);_?.mark("resolve_claude_code_identity",{route:T,ms:S(U()-l),hasAccountUuid:Boolean(F.accountUuid)});let L=typeof H==="string"?H.length:void 0;if(H&&typeof H==="string"){let $0=U(),W0=(()=>{if(!K1())return!1;try{return v0(JSON.parse(H).model)}catch{return!1}})();H=await M1(H,{cache1hEnabled:!w&&H0(),cache1hMode:F0(),fastModeEnabled:W0,identity:F,perf:(VJ,WJ)=>_?.mark(`rewrite_body_${VJ}`,{route:T,...WJ})});let w0=U();try{S0(Z,C,{body:JSON.parse(H),identity:F}),_?.mark("set_oauth_headers_body_parse",{route:T,ms:S(U()-w0),bodyBytes:H.length,parsed:!0})}catch{S0(Z,C,{identity:F}),_?.mark("set_oauth_headers_body_parse",{route:T,ms:S(U()-w0),bodyBytes:H.length,parsed:!1})}if(W0)s0(Z);_?.mark("rewrite_body",{route:T,ms:S(U()-$0),originalBytes:L,rewrittenBytes:H.length,cacheEnabled:!w&&H0(),cacheMode:F0(),fastModeEnabled:W0,subagent:w})}let M=w1(Y);if(T==="main"&&typeof H==="string"&&!w&&H0()&&F0()==="hybrid"){let $0=await x(),W0=U(),w0=v.track({sessionId:B,url:M.url?.toString()??M.input.toString(),headers:Z,bodyText:H,storage:$0,cacheMode:"hybrid"});_?.mark("cachekeep_track",{session:B,ms:S(U()-W0),tracked:w0.tracked,reason:w0.tracked?void 0:w0.reason,bodyBytes:H.length})}let y=()=>fetch(M.input,{...D,body:H,headers:Z,...Q1()&&{tls:{rejectUnauthorized:!1}}}),a=A1(await x()),m=U(),i=await sj({config:a,input:M.input,init:D,headers:Z,body:H,fallback:y,affinity:B,optimisticResponse:a?.transport==="websocket"});return _?.mark("send_headers_received",{route:T,ms:S(U()-m),status:i.status,relayConfigured:a!=null,totalSendWithAccessMs:S(U()-k)}),i}async function JJ(Y){if(!Y)return!1;try{return await V.refreshMain(Y),I1(Y)}catch{return!1}}async function i0(Y,D={}){let C=await P.getUsableFallbackAccounts(Y),_=new Map(C.map((K)=>[K.id,K])),T=[];for(let K of Y?.accounts??[]){if(j0(K)){let k=_.get(K.id);if(k)T.push(k);continue}if(D.includeApiRoutes===!0&&f0(K)&&K.enabled!==!1&&K.apiKey&&F1(K.baseURL))T.push(K)}if(!b0(Y))return T;return T.filter((K)=>j0(K)?J1(Q0(K),Y,K.id):!0)}async function u0(Y,D,C,_,T,K,k){if(!C.length)return T??null;let z=k?.returnLastOnExhausted??!0;await T?.body?.cancel().catch(()=>{});let x=T??null;for(let[Z,B]of C.entries()){let w;if(f0(B)){if(!B.apiKey)continue;w=await L0(Y,D,B,K,`api_fallback_${Z}`,_)}else{let g=B.access;if(!g)continue;w=await l0(Y,D,g,K,`fallback_${Z}`,_)}x=w;let H=T1(w.status,_);if(!H){let g=await Z0(w,K);w=g.response,x=w,H=g.rateLimited}if(!H){if(await P.markUsed(B),k?.onSuccess?.(B),j0(B)&&B.access&&V.shouldRefreshOnRequestCount(d))V.refreshFallback(B.id,B.access).then(()=>k?.onSuccess?.(B)).catch(()=>{});return w}if(Z<C.length-1||!z)await w.body?.cancel().catch(()=>{})}return z?x:null}async function $J(Y,D,C,_,T,K,k,z){if(!E(Y,D?.body))return C;let x=U(),Z=K??await b($);if(T?.mark("fallback_load_storage",{ms:S(U()-x),cached:!!K}),!(Z?.accounts??[]).some((L)=>L.enabled!==!1&&(j0(L)||f0(L)&&Boolean(L.apiKey)&&F1(L.baseURL))))return C;let w=C,H=T1(w.status,Z),g=y1(w,!1);if(!H){let L=await Z0(w,T);w=L.response,H=L.rateLimited,g=y1(w,L.rateLimited)}if(!H)return w;let l=!1;if(_)l=_.some(f0);else if(g)l=await JJ(k);let F=_;if(!F){let L=U();F=await i0(Z,{includeApiRoutes:l}),T?.mark("fallback_get_accounts",{ms:S(U()-L),accounts:F.length})}if(b0(Z)){let L=F.length;if(F=F.filter((M)=>j0(M)?J1(Q0(M),Z,M.id):!0),F.length<L)q("[killswitch] filtered fallbacks",{before:L,after:F.length})}return await u0(Y,D,F,Z,w,T,{onSuccess:z})??w}return{apiKey:"",async fetch(Y,D){let C=D?.body,_=uJ({bodyBytes:typeof C==="string"?C.length:void 0}),T=U(),K=await X();if(_.mark("get_auth",{ms:S(U()-T),authType:K.type,hasAccess:Boolean(K.access)}),K.type!=="oauth"){let L=await fetch(Y,D);return _.done("non_oauth_passthrough",{status:L.status}),L}await V0(K.refresh);let k=U(),z=await b();_.mark("load_storage",{ms:S(U()-k)}),V.updateStorage(z),V.seedFallbacksFromAccounts((z?.accounts??[]).filter(j0));let x=E(Y,D?.body);if(x)d++;if(x&&K.access&&(!K.expires||K.expires>Date.now()))h(z,K.access);let Z=(L,M)=>n(z,{activeId:L,route:M,mainAccessToken:K.access,mainRefreshToken:K.refresh}),B;if(x&&f1(z)==="fallback-first")try{let L=U();B=await i0(z,{includeApiRoutes:I1(K.access)}),_.mark("fallback_first_get_accounts",{ms:S(U()-L),accounts:B.length});let M=await u0(Y,D,B,z,void 0,_,{returnLastOnExhausted:!1,onSuccess:(y)=>Z(y.id,"fallback-first")});if(M)return _.done("return_fallback_first",{status:M.status}),A0(M,{perf:(y,a)=>_.mark(y,a)});B=void 0}catch(L){_.mark("fallback_first_error",{error:L instanceof Error?L.message:String(L)})}if(!K.access||!K.expires||K.expires<Date.now()){let M=(await b())?.refresh?.mainLastRefreshError;if(K.refresh&&M&&B0(M,K.refresh,Date.now()))throw q("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:M.nextRetryAt,retryCount:M.retryCount,expiresInMs:K.expires?K.expires-Date.now():void 0}),Error(q1(M,Date.now()));q("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(K.access),expiresInMs:K.expires?K.expires-Date.now():void 0,expiredAgoMs:K.expires&&K.expires<Date.now()?Date.now()-K.expires:void 0});let y=U();K.access=await I(),_.mark("refresh_main_access",{ms:S(U()-y)})}if(!K.access)throw _.done("missing_access_error"),Error("OAuth access token is missing after refresh");function w(){if(z?.quota?.showToasts!==!0)return;let L=V.getMain();if(!L)return;let M=(z?.accounts??[]).filter((m)=>m.enabled!==!1&&j0(m)).map((m)=>({...m,quota:V.getFallback(m.id,m.access)?.quota??m.quota})),y=y0(L.quota,z),a;if(y)a="main";else a=M.find((m)=>y0(m.quota,z))?.id??"main";T0(L.quota,M,a)}if(x&&Y0(z))try{let L=U(),M=V.getMain(K.access),y=M?.quota;if(!y)y=await V.refreshMain(K.access),M=V.getMain(K.access),w();else if(V.needsRefresh(d))if(O0(y))y=await V.refreshMain(K.access),M=V.getMain(K.access);else V.refreshMain(K.access).then(()=>{r(),w()}).catch(()=>{});if(n(z,{activeId:"main",route:"main",mainAccessToken:K.access,mainRefreshToken:K.refresh}),_.mark("main_quota_for_routing",{ms:S(U()-L),passes:y0(y,z)}),!y0(y,z)){let a=U();B=await i0(z,{includeApiRoutes:Boolean(M&&M.refreshAfter>Date.now()&&O0(M.quota))}),_.mark("preselect_fallback_accounts",{ms:S(U()-a),accounts:B.length});let m=await u0(Y,D,B,z,void 0,_,{onSuccess:(i)=>Z(i.id,"fallback")});if(m)return _.done("return_preselected_fallback",{status:m.status}),A0(m,{perf:(i,$0)=>_.mark(i,$0)})}}catch(L){_.mark("main_quota_for_routing_error",{error:L instanceof Error?L.message:String(L)})}let H=V.getMain(K.access)?.quota;if(z?.quota?.failClosedOnUnknownQuota&&!H&&V.isBackedOff()){let L=V.getLastApiError(),M=L?qj(L,Date.now()):"Quota API unavailable";return q("[quota] blocked: quota API backed off (failClosed)",{nextRetryAt:L?.nextRetryAt,retryCount:L?.retryCount}),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:M}}),{status:429,headers:{"content-type":"application/json","retry-after":String(L?.nextRetryAt?Math.max(1,Math.ceil((L.nextRetryAt-Date.now())/1000)):60)}})}if(b0(z)){if(V.needsRefresh(d))try{let M=(z?.accounts??[]).filter((y)=>y.enabled!==!1&&j0(y)&&Boolean(y.access));await Promise.all([V.refreshMain(K.access),V.refreshAllFallbacks(M)])}catch(M){q("[quota] killswitch refresh failed",{error:M instanceof Error?M.message:String(M),backedOff:V.isBackedOff()})}H=V.getMain(K.access)?.quota}if(b0(z)&&!J1(H,z)){let M=E(Y,D?.body)?await i0(z,{includeApiRoutes:I1(K.access)}):[];if(M.length>0){q("[route] skipping main (killswitch), trying fallbacks");let i=await u0(Y,D,M,z,void 0,_,{onSuccess:($0)=>Z($0.id,"fallback")});if(i)return _.done("return_killswitch_fallback",{status:i.status}),A0(i,{perf:($0,W0)=>_.mark($0,W0)})}let y=Date.now(),a=(z?.accounts??[]).filter((i)=>i.enabled!==!1&&j0(i)).map((i)=>({...i,quota:Q0(i)})),m=Ej(H,a,y);return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:`Killswitch: no routable accounts. Retry in ${Math.floor(m/60)}m ${m%60}s.`}}),{status:429,headers:{"content-type":"application/json","retry-after":String(m)}})}let g=await l0(Y,D,K.access,_,"main",z),l=!1,F=await $J(Y,D,g,B,_,z,K.access,(L)=>{l=!0,Z(L.id,"fallback")});if(!l)Z("main","main");return _.done("return_response",{status:F.status}),A0(F,{perf:(L,M)=>_.mark(L,M)})}}}return{}},methods:[{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{let X=await B1("max");return{url:X.url,instructions:"Paste the authorization code here:",method:"code",callback:async(G)=>{return H1(G,X.verifier,X.redirectUri,X.state)}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let X=await B1("console");return{url:X.url,instructions:"Paste the authorization code here:",method:"code",callback:async(G)=>{let O=await H1(G,X.verifier,X.redirectUri,X.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((I)=>I.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}}};export{K3 as AnthropicAuthPlugin};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/opencode-anthropic-auth",
3
- "version": "1.9.1",
3
+ "version": "1.9.2",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -51,7 +51,7 @@
51
51
  "@opencode-ai/plugin": "*"
52
52
  },
53
53
  "dependencies": {
54
- "@cortexkit/anthropic-auth-core": "1.9.1",
54
+ "@cortexkit/anthropic-auth-core": "1.9.2",
55
55
  "@opentui/core": ">=0.3.1",
56
56
  "@opentui/solid": ">=0.3.1",
57
57
  "solid-js": "^1.9.10"