@cortexkit/opencode-anthropic-auth 2.4.2 → 2.4.4

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.
@@ -0,0 +1,45 @@
1
+ import{r as M8}from"./index-sg0knfec.js";import{t as R8}from"./index-hc7bm3yf.js";import{D as x8}from"./index-naff9h33.js";import{H as I8,M as d9,O as f8,P as k8}from"./index-j2cv839v.js";import{ga as _7}from"./index-gvswxab8.js";import{randomUUID as NZ}from"node:crypto";import{existsSync as q2,readFileSync as M2}from"node:fs";import{dirname as R2,join as x2}from"node:path";import{fileURLToPath as I2}from"node:url";import{ANTHROPIC_OAUTH_ORIGIN_REFUSAL as f2,acquireNativeAccountRuntime as k2,applyCustomHeaders as u7,assertNotCustodyTombstone as v2,authorize as l7,buildAccountList as o$,buildClaudeQuotaSummary as h2,buildFallbackQuotaSummaries as b2,buildPrimeRequestBody as g2,CACHE_KEEP_EXTENDED_TTL_BETA as y2,CacheKeepManager as m2,CacheKeepSessionRegistry as c2,CLAUDE_FABLE_MYTHOS_5_MODEL_SPECS as p2,CLAUDE_HAIKU_4_5_MODEL_ID as d7,CLAUDE_HAIKU_5_5_CONTEXT_WINDOW as u2,CLAUDE_HAIKU_5_5_LONG_CONTEXT_PRICING as q9,CLAUDE_HAIKU_5_5_LONG_CONTEXT_THRESHOLD as l2,CLAUDE_HAIKU_5_5_MAX_OUTPUT_TOKENS as d2,CLAUDE_HAIKU_5_5_MODEL_ID as M9,CLAUDE_HAIKU_5_5_PRICING as R9,CLAUDE_HAIKU_5_5_RELEASE_DATE as i2,CLAUDE_OPUS_5_5_CONTEXT_WINDOW as n2,CLAUDE_OPUS_5_5_MAX_OUTPUT_TOKENS as o2,CLAUDE_OPUS_5_5_MODEL_ID as x9,CLAUDE_OPUS_5_5_PRICING as I9,CLAUDE_OPUS_5_5_RELEASE_DATE as r2,CLAUDE_SONNET_5_5_CONTEXT_WINDOW as s2,CLAUDE_SONNET_5_5_MAX_OUTPUT_TOKENS as a2,CLAUDE_SONNET_5_5_MODEL_ID as f9,CLAUDE_SONNET_5_5_PRICING as k9,CLAUDE_SONNET_5_5_RELEASE_DATE as t2,CLAUSTRUM_OPENCODE_ENROLLMENT_NAME as DZ,cacheKeepSourceWarmIdleCap as e2,cacheWarmCacheablePrefixFingerprint as i7,computeXxhash64Hex as $6,configuredAnthropicOAuthAccountCount as J6,createEmptyStorage as Y1,createNativeUsagePublisher as Z6,createProviderErrorResponseScope as v9,createSseFramer as Y6,createStickyNoRouteResponse as X6,custodyTombstoneOAuth as HZ,decideOpenCodeStateLayoutOnce as G6,decideStickyQuotaFailure as UZ,decodeSseFrame as W6,detectClaustrumConnection as n7,dumpDirectRequest as h9,dumpResponseArtifact as QZ,effectiveRelayStatus as z6,exchange as BZ,executeAccountCommand as V6,executeCache1hCommand as FZ,executeCacheKeepCommand as j6,executeDumpCommand as o7,executeFastModeCommand as r7,executeKillswitchCommand as s7,executeLaneStartCommand as a7,executeLoggingCommand as t7,executePrimeCommand as K6,executeRoutingCommand as e7,FALLBACK_BACKGROUND_TICK_MS as _6,fallbackAccountUuidForLineage as L6,formatEnrollmentStatus as $8,formatNativeAccountState as wZ,formatOAuthAccountTier as f4,formatQuotaBackoffMessage as J8,formatRefreshBackoffMessage as O6,getAccountStoragePath as N6,getCache1hMode as n1,getCache1hPersistentMode as k4,getCacheKeepWindow as Z8,getClaudeCodeIdentityForVerifiedAccount as D6,getClaudeModelCatalogue as H6,getClaustrumMode as v4,getDefaultCacheKeepRegistryDirectory as U6,getFallbackReauthLabels as Q6,getHostClaustrumEnrollmentPaths as b9,getKillswitchConfig as TZ,getPersistedLogLevel as CZ,getQuotaCheckIntervalMs as Y8,getQuotaNextRefreshAt as A1,getRequestGzipLatch as B6,getRequestGzipLatchPath as F6,getRoutingMode as V1,getScopedQuotaWindowForModel as w6,getThinkingPrefixMismatchBehavior as T6,inspectNativeHostAuthEntry as C6,isApiKeyAccount as o1,isCache1hEnabled as r1,isCache1hPersistentlyEnabled as g9,isCacheKeepAlways as X8,isCacheKeepHybridActive as G8,isCacheKeepPersistentlyEnabled as W8,isCacheKeepSubagentsEnabled as E6,isClaudeFableOrMythos51Model as S6,isClaudeOpus5Model as A6,isClaudeOpus55Model as P6,isCostZeroingEnabled as q6,isCustodyTombstoneOAuth as EZ,isDumpPersistentlyEnabled as SZ,isFastModeEnabled as AZ,isFastModePersistentlyEnabled as PZ,isFastModeSupportedModel as z8,isKillswitchEnabled as X1,isNativeTransientAccountError as P1,isOAuthAccount as T0,isPermanentRefreshError as G1,isPrimePersistentlyEnabled as y9,isQuotaBearingHeaderFrame as M6,isValidApiBaseURL as qZ,killswitchPassesPolicy as W1,killswitchRetryAfterSeconds as V8,log as r$,logger as f,mergeAnthropicBetas as j8,mergeHeaderQuotaForPersistence as K8,NativeAccountRefusal as q1,NativeCustodyError as R6,NativeRuntimeError as x6,NativeVaultNoAccountError as MZ,nativeAccountCanServe as v0,nativeAccountRefusal as I6,nativeLocalAccountRefusal as f6,nativeLocalQuotaLineage as k6,nativeMigrationAuthorityPhase as _8,normalizeQuotaHeaders as v6,oauthProfileIsFresh as m9,oauthProfileMatchesIdentity as h6,PARALLEL_TOOL_CALLS_SYSTEM_PROMPT as b6,PrimeManager as g6,parseAccountCommandAction as y6,parseCache1hCommandAction as m6,parseCacheKeepCommandAction as c6,parseDumpCommandAction as p6,parseFastModeCommandAction as u6,parseLaneStartCommandAction as l6,parseLoggingCommandAction as d6,parsePrimeCommandAction as i6,parseRoutingCommandAction as n6,parseSseFrame as o6,QUOTA_HEADER_FEED_SCHEMA_VERSION as c9,QuotaHeaderFeedRegistry as r6,QuotaManager as s6,quotaSnapshotCheckedAt as M1,quotaSnapshotHasStandardWindows as RZ,quotaSnapshotModelScopeIsExhausted as p9,quotaSnapshotPassesModelScope as u9,quotaSnapshotPassesPolicy as s1,readClaustrumEnrollmentStatus as L8,readNativeAccountsForRequest as a6,readNativeEnrollmentMode as R1,readNativeHostAuthKind as t6,readNativeMigrationJournal as O8,refreshBackoffActive as x1,remapRequestBodyModel as e6,resetClaustrumEnrollmentState as $G,resolveClaudeModelCapabilities as JG,resolveNativePoolPaths as ZG,STICKY_ROUTING_MAIN_ACCOUNT_ID as G$,StickySessionRouter as YG,sendViaRelay as XG,sendWithRequestGzip as GG,setCache1hState as l9,setDumpEnabled as xZ,setFastModeEnabled as IZ,setLogLevel as WG,shouldFallbackStatus as zG,snapshotHasServableLocalOAuth as N8,stateRefusalPublicMessage as VG,stickyQuotaSnapshotIsFresh as I1,stickyRouteFamilyForModel as jG,TrailingAssistantHistoryError as D8,tokenFingerprint as z1}from"@cortexkit/anthropic-auth-core";import{randomUUID as U3}from"node:crypto";import{isValidAnthropicRequestId as Q3,isValidBillingPromptId as SY}from"@cortexkit/anthropic-auth-core";var U4="x-cortexkit-billing-lineage",AY=4096,PY=4096,qY=1024,B3=new Set(["title","summary","compaction"]),MY="[lane start] — automated cache warm; no response needed.";function RY($){let J=$.info?.sessionID??$.info?.sessionId;return typeof J==="string"&&J.length>0?J:void 0}function xY($){if($.info?.synthetic===!0||$.info?.ignored===!0||typeof $.info?.agent==="string"&&B3.has($.info.agent))return!0;for(let J of $.parts??[]){if(J.type==="compaction"||J.synthetic===!0||J.ignored===!0)return!0;if(J.metadata?.compaction_continue===!0)return!0;if(J.type==="text"&&J.text===MY)return!0}return!1}function C1($,J){while($.size>J){let Y=$.keys().next().value;if(Y===void 0)return;$.delete(Y)}}function PJ($){let J=$.get("request-id")??$.get("x-request-id");return J&&Q3(J)?J:void 0}class qJ{#$;#_;#j;#L;#X;#J=new Map;#Y=new Map;#Z=new Map;#G=new Map;#W=new Map;#z=new Map;#V=new Map;constructor($={}){this.#$=$.createPromptId??U3,this.#_=$.createRequestToken??U3,this.#j=$.maxPrompts??AY,this.#L=$.maxRequests??PY,this.#X=$.maxSessions??qY}observeMessages($){let J;for(let D=$.length-1;D>=0;D-=1)if($[D]?.info?.role==="user"){J=$[D];break}if(!J)return;let Y=RY(J),X=J.info?.id;if(!Y||typeof X!=="string"||X.length===0)return;let z=this.#K(Y,X);if(xY(J)){this.#Y.delete(z),this.#Y.set(z,!0),C1(this.#Y,this.#j),this.#J.delete(z);return}this.#Y.delete(z);let V=this.#J.get(z);if(V){this.#J.delete(z),this.#J.set(z,V);return}let K=this.#$();if(!SY(K))return;this.#J.set(z,K),C1(this.#J,this.#j)}markHeaders($){let J=this.#K($.sessionId,$.messageId);if(B3.has($.agent??"")||this.#Y.has(J))return!1;let Y=this.#J.get(J);if(!Y)return!1;let X=this.#_();if(!X||/[\r\n]/.test(X))return!1;let z={sessionId:$.sessionId,messageId:$.messageId,promptId:Y,requestToken:X,generation:this.#W.get($.sessionId)??0,sequence:0};return this.#Z.set(X,z),C1(this.#Z,this.#L),$.headers[U4]=X,!0}resolveHeader($){if(!$)return;let J=this.#Z.get($);if(!J)return;this.#Z.delete($),this.#Z.set($,J);let Y=(this.#z.get(J.sessionId)??0)+1;this.#z.delete(J.sessionId),this.#z.set(J.sessionId,Y),C1(this.#z,this.#X);let X={...J,previousRequestId:this.#G.get(J.sessionId),sequence:Y};if(X.previousRequestId===void 0)delete X.previousRequestId;return X}commit($,J){if(!$||!J||!Q3(J))return!1;if((this.#W.get($.sessionId)??0)!==$.generation)return!1;let Y=this.#Z.get($.requestToken);if(!Y||Y.sessionId!==$.sessionId||Y.messageId!==$.messageId||Y.promptId!==$.promptId||Y.generation!==$.generation)return!1;if(this.#J.get(this.#K($.sessionId,$.messageId))!==$.promptId)return!1;if($.sequence<(this.#V.get($.sessionId)??0))return!1;return this.#V.delete($.sessionId),this.#V.set($.sessionId,$.sequence),C1(this.#V,this.#X),this.#G.delete($.sessionId),this.#G.set($.sessionId,J),C1(this.#G,this.#X),!0}clearSession($){this.#W.set($,(this.#W.get($)??0)+1),this.#G.delete($),this.#z.delete($),this.#V.delete($);let J=`${$}\x00`;for(let Y of this.#J.keys())if(Y.startsWith(J))this.#J.delete(Y);for(let Y of this.#Y.keys())if(Y.startsWith(J))this.#Y.delete(Y);for(let[Y,X]of this.#Z)if(X.sessionId===$)this.#Z.delete(Y);C1(this.#W,this.#X)}#K($,J){return`${$}\x00${J}`}}import{setBounded as w3,stickyRetryAfterWithJitter as IY}from"@cortexkit/anthropic-auth-core";var B4="cache-diagnosis-2026-04-07",fY="MC-CACHE-DIAG ",kY=1000,vY=300000,hY={turn:!1,start:!0,prewarm_cachekeep:!0},bY=1000;class MJ{entries=new Map;previousFor($){return this.entries.get($)??null}capture($,J,Y){w3(this.entries,$,{messageId:J,receivedAt:Y},kY)}}class RJ{hashes=new Map;capture($,J){if(this.hashes.has($))return null;return w3(this.hashes,$,!0,bY),`MC-CACHE-DIAG-BETAS ${JSON.stringify({hash:$,betas:[...J].sort()})}`}}function G9($,J,Y){let X=$.get(J);if(X)$.set(Y,X)}async function xJ($,J,Y,X,z){let V=new Headers($.headers);if(V.set("retry-after",String(IY(J,Y))),X)return await $.body?.cancel().catch(()=>{}),V.set("content-type","application/json"),new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account quota resets shortly; retaining session affinity."}}),{status:429,headers:V});let K=new Response($.body,{status:$.status,statusText:$.statusText,headers:V});return G9(z,$,K),K}function W9($,J){$.diagnostics={previous_message_id:J}}function J1($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gY($){return J1($)&&$.type==="ephemeral"}function T3($,J){if(!gY($))return;J.push($.ttl==="1h"?"1h":"5m")}function F3($,J){if(!Array.isArray($))return;for(let Y of $)if(J1(Y))T3(Y.cache_control,J)}function z9($){if(!J1($))return null;let J=[];if(T3($.cache_control,J),F3($.system,J),Array.isArray($.messages)){for(let Y of $.messages)if(J1(Y))F3(Y.content,J)}return J.at(-1)??null}function yY($){if(!Object.hasOwn($,"diagnostics"))return{state:"absent"};let J=$.diagnostics;if(J===null)return{state:"server_null"};if(!J1(J))return null;if(!Object.hasOwn(J,"cache_miss_reason"))return null;let Y=J.cache_miss_reason;if(Y===null)return{state:"pending"};if(!J1(Y)||typeof Y.type!=="string"||!Y.type)return null;let X=Y.cache_missed_input_tokens;if(X!==void 0&&typeof X!=="number")return null;return{state:"populated",missReason:Y.type,cacheMissedInputTokens:X}}function Q4($,J){let Y=$[J];return typeof Y==="number"&&Number.isFinite(Y)&&Y>=0?Y:null}function C3($){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=hY[$.source];if(J!==void 0&&J!==$.synthetic)$.onWarning?.(`cache diagnostics source/synthetic mismatch: source=${$.source} expected=${J} actual=${$.synthetic}`);let Y=Math.trunc($.receivedAt);if(!Number.isFinite($.receivedAt)||Y!==$.receivedAt)return{};if(!J1($.message))return{};let X=$.message.id,z=$.message.model,V=$.message.usage;if(typeof X!=="string"||X.length===0)return{};if(typeof z!=="string"||z.length===0||!J1(V))return{};let K=Q4(V,"input_tokens"),D=Q4(V,"cache_read_input_tokens"),F=Q4(V,"cache_creation_input_tokens"),P=V.cache_creation;if(K===null||D===null||F===null||!J1(P))return{};let q=Q4(P,"ephemeral_5m_input_tokens"),v=Q4(P,"ephemeral_1h_input_tokens");if(q===null||v===null)return{};let r=yY($.message);if(!r)return{};let n={v:2,source:$.source,account_id:$.accountId,synthetic:$.synthetic,betas_hash:$.betasHash,session_id:$.request.sessionId,ts_ms_received:Y,model:z,is_subagent:$.request.isSubagent,ttl_sent:$.request.ttlSent,cache_read:D,cache_creation:F,input_tokens:K,ephemeral_5m_tokens:q,ephemeral_1h_tokens:v,message_id:X,previous_message_id:$.request.previousMessageId,diag_state:r.state};if(r.missReason!==void 0)n.miss_reason=r.missReason;if(r.cacheMissedInputTokens!==void 0)n.cache_missed_input_tokens=r.cacheMissedInputTokens;if($.requestedModel!==void 0&&$.requestedModel!==z)n.requested_model=$.requestedModel;let D0=r.missReason==="previous_message_not_found"&&$.request.previousMessageId!==null&&$.request.previousMessageReceivedAt!==void 0&&$.receivedAt-$.request.previousMessageReceivedAt<vY&&$.receivedAt>=$.request.previousMessageReceivedAt?{messageId:X,previousMessageId:$.request.previousMessageId}:void 0;return{record:n,messageId:X,...D0?{canary:D0}:{}}}function E3($){return`${fY}${JSON.stringify($)}`}import{getClaustrumMode as V9,hasNoLocalCredential as IJ,isCustodyTombstoneOAuth as mY,isOAuthAccount as fJ,nativeAccountCanServe as kJ}from"@cortexkit/anthropic-auth-core";function F4($,J){if(V9(J)!=="claustrum"||!J?.claustrum?.scopedRoster)return!1;let Y=J.accounts.find((X)=>X.id===$);return Boolean(Y&&fJ(Y)&&kJ(Y)&&Y.claustrumScopedCredentialId&&Y.anthropicAccountUuid&&IJ(Y))}function S3($){if(V9($)!=="claustrum")return{fallbacks:"R",evidence:"V"};if(!$?.claustrum?.scopedRoster)return{fallbacks:"M",evidence:"N"};return{fallbacks:$.accounts.filter((Y)=>kJ(Y)&&fJ(Y)).every((Y)=>Boolean(Y.claustrumScopedCredentialId&&Y.anthropicAccountUuid&&IJ(Y)))?"T":"R",evidence:"V"}}function vJ($){if(mY($,"anthropic"))return"T";if($.type==="oauth"&&$.access&&$.refresh)return"R";return"X"}function hJ($,J){if($.role==="main"){if(V9(J)!=="claustrum")return"na";let X=J?.claustrum?.scopedRoster?J.claustrum.primaryAccount:void 0;if(!X)return"unknown-identity";if(X.state==="needs_reauth")return"on-vault-reauth";return kJ(X)?"on-vault-served":"on-cold"}if(V9(J)!=="claustrum")return"off";let Y=J?.accounts.find((X)=>X.id===$.id);if(!Y||!fJ(Y)||!Y.claustrumScopedCredentialId||!Y.anthropicAccountUuid||!IJ(Y))return"off";if(Y.claustrumScopedState==="needs_reauth")return"on-vault-reauth";return F4($.id,J)?"on-vault-served":"on-cold"}class w4 extends Error{verdict;dimensions;code="custody_state_mismatch";constructor($,J){super(`custody state mismatch: ${$}`);this.verdict=$;this.dimensions=J}toJSON(){return{code:this.code,verdict:this.verdict,dimensions:this.dimensions}}}function A3($){if($.authority!=="committed"&&$.authority!=="retired")throw new w4("MIGRATION_REQUIRED",$);if($.mode==="L"&&$.main==="R"&&$.evidence==="V"&&$.localOAuthServable===!0)return{verdict:"LOCAL_SERVE"};if($.mode==="L"&&$.main==="T"&&$.fallbacks==="R"&&$.evidence==="V")return{verdict:"LOCAL_SERVE"};if($.mode==="C"&&$.main==="T"&&$.fallbacks==="T"&&$.evidence==="V")return{verdict:"CLAUSTRUM_SERVE"};throw new w4("FAIL_CLOSED",$)}import{createHash as cY}from"node:crypto";import{defaultAdaptiveEffort as pY,logger as uY,normalizeAdaptiveEffort as lY,pinsEffortOnEveryRequest as P3,resolveClaudeModelCapabilities as dY,supportsPerMessageEffort as iY}from"@cortexkit/anthropic-auth-core";var I3=512,nY=1024,oY=4096,T4=32,C4=32,K9="[A-Za-z0-9_-]{1,128}",rY="<cortexkit-internal-effort ",sY="<cortexkit-internal-effort-plan ",f3=/^\s*(?:§[0-9]+§\s*)+$/,E4={low:"l",medium:"m",high:"h",xhigh:"x",max:"z"},mJ=Object.fromEntries(Object.entries(E4).map(([$,J])=>[J,$])),cJ="<cortexkit-internal-effort-v2 ",pJ="<cortexkit-internal-effort-anchor-v1 ",c1="x-cortexkit-effort-plan";class E0 extends Error{check;details;constructor($,J="unspecified",Y={}){super($);this.check=J;this.details=Y;this.name="EffortMarkerCorrelationError"}}function e0($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function aY($){let J=dY($);if(!J||J.effortMarkers==="none")return;return J.id.replace(/^claude-/,"")}function bJ($){if($?.info?.role!=="user")return;if($.info.model?.providerID!=="anthropic")return;return aY($.info.model.modelID)}function q3($){return lY($.info?.model?.variant)??pY($.info?.model?.modelID)}function M3($){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 i$($){return cY("sha256").update($).digest("hex")}function tY($){return i$(`scope:${$}`).slice(0,C4)}function _9($){return i$(`cortexkit-effort-v2:${$}`).slice(0,T4)}function eY($,J,Y){let X=E4[Y],z=`transition:${$}:${J}:${X}`;return`${cJ}scope="${$}" boundary="${J}" effort="${X}" check="${_9(z)}"/>`}function k3($){let J=$.match(new RegExp(`^${cJ}scope="([0-9a-f]{${C4}})" boundary="(${K9})" effort="([lmhxz])" check="([0-9a-f]{${T4}})"/>$`));if(!J)return null;let[,Y,X,z,V]=J,K=mJ[z??""];if(!Y||!X||!z||!V||!K)return null;let D=`transition:${Y}:${X}:${z}`;if(_9(D)!==V)return null;return{scope:Y,boundary:X,effort:K,token:$}}function $5($,J,Y,X){let z=E4[Y],V=`anchor:${$}:${J}:${z}:${X}`;return`${pJ}scope="${$}" boundary="${J}" effort="${z}" digest="${X}" check="${_9(V)}"/>`}function v3($){let J=$.match(new RegExp(`^${pJ}scope="([0-9a-f]{${C4}})" boundary="(${K9})" effort="([lmhxz])" digest="([0-9a-f]{64})" check="([0-9a-f]{${T4}})"/>$`));if(!J)return null;let[,Y,X,z,V,K]=J,D=mJ[z??""];if(!Y||!X||!z||!V||!K||!D)return null;let F=`anchor:${Y}:${X}:${z}:${V}`;if(_9(F)!==K)return null;return{scope:Y,boundary:X,effort:D,digest:V,token:$}}function gJ($){return $.trim()===""||f3.test($)}function R3(){return new RegExp(`(?:${sY}nonce="[^"]+" baseline="[^"]+" count="[^"]+" sig="[0-9a-f]+"/>|${rY}nonce="[^"]+" effort="[^"]+" sig="[0-9a-f]+"/>)`,"g")}function J5(){return new RegExp(`${cJ}scope="[0-9a-f]{${C4}}" boundary="${K9}" effort="[lmhxz]" check="[0-9a-f]{${T4}}"/>`,"g")}function Z5(){return new RegExp(`${pJ}scope="[0-9a-f]{${C4}}" boundary="${K9}" effort="[lmhxz]" digest="[0-9a-f]{64}" check="[0-9a-f]{${T4}}"/>`,"g")}function h3($,J,Y){let X=0,z=$,V=$.replace(R3(),"");if(V!==$&&f3.test(V))X+=[...$.matchAll(R3())].length,z=V;return z=z.replace(J5(),(K)=>{let D=k3(K);if(!D)return K;return J?.(D),X++,""}),z=z.replace(Z5(),(K)=>{let D=v3(K);if(!D)return K;return Y?.(D),X++,""}),{text:z,removed:X}}function Y5($){for(let J of $){if(!Array.isArray(J.parts))continue;J.parts=J.parts.flatMap((Y)=>{if(Y.type!=="text"||typeof Y.text!=="string"||!Y.text.includes("<cortexkit-internal-effort"))return[Y];let X=h3(Y.text);if(X.removed===0)return[Y];if(gJ(X.text))return[];return Y.text=X.text,[Y]})}}function j9($,J,Y,X,z){let V=z?`:${z}`:"",K=`plan:${$}:${E4[J]}:${Y.toString(36)}${V}`;return i$([K,...X].join(`
2
+ `))}function X5($){return["v2",$.scope,E4[$.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[,Y,X,z,V]=J,K=mJ[X??""],D=Number.parseInt(z??"",36);if(!Y||!K||!V||!Number.isSafeInteger(D)||D<0||D>I3)return null;return{scope:Y,baseline:K,markerCount:D,digest:V}}function b3($){let J=$.findLast((n)=>n.info?.role==="user"),Y=bJ(J);if(!J||!Y)return null;if(Y5($),!Array.isArray(J.parts)||!M3(J))return null;let X=J.info?.sessionID,z=J.info?.id;if(typeof X!=="string"||typeof z!=="string")throw new E0("Cannot correlate per-message effort markers without session and message IDs");let V=tY(X),K=$.findLast((n)=>n.info?.role==="user"&&n.parts?.some((D0)=>D0.type==="compaction")),D=typeof K?.info?.id==="string"?K.info.id:void 0,F,P;if(K&&bJ(K)===Y)F=q3(K),P=F;let q=[];for(let n of $){let D0=n.info;if(D0?.role!=="user")continue;if(D&&typeof D0.id==="string"&&D0.id<=D)continue;if(bJ(n)!==Y||!M3(n))continue;let g=q3(n);if(!F){F=g,P=g;continue}if(g===P)continue;if(q.length>=I3)throw new E0("Too many per-message effort changes in the active context");if(!Array.isArray(n.parts)||typeof D0.id!=="string")throw new E0("Cannot mark a per-message effort change without message identity");let z0=eY(V,D0.id,g);n.parts.push({type:"text",text:z0}),q.push(z0),P=g}if(!F)return null;let v=j9(V,F,q.length,q,q.length>0?z:void 0),r=q.length>0?$5(V,z,P??F,v):void 0;if(r)J.parts.push({type:"text",text:r});return{scope:V,baseline:F,markerCount:q.length,digest:v,transitionTokens:q,anchorToken:r,sessionId:X,messageId:z}}function W5($){let J=Array.isArray($.messages)?$.messages:[],Y=[];for(let X of J){let z=[],V=[];if(!e0(X)||X.role!=="user"){Y.push({value:X,transitions:z,anchors:V});continue}let K=(D)=>h3(D,(F)=>z.push(F),(F)=>V.push(F));if(typeof X.content==="string"){let D=K(X.content);X.content=D.removed>0&&gJ(D.text)?"":D.text}else if(Array.isArray(X.content))X.content=X.content.flatMap((D)=>{if(!e0(D)||D.type!=="text"||typeof D.text!=="string")return[D];let F=K(D.text);if(F.removed>0&&gJ(F.text))return[];return[{...D,text:F.text}]});Y.push({value:X,transitions:z,anchors:V})}return $.messages=Y.map((X)=>X.value),{messages:Y}}function z5($,J){let Y=$[J]?.value,X=$[J-1]?.value;if(!e0(Y)||Y.role!=="user"||!Array.isArray(Y.content)||Y.content.length===0||!e0(X)||X.role!=="assistant"||!Array.isArray(X.content))return!1;let z=new Set(X.content.flatMap((V)=>e0(V)&&V.type==="tool_use"&&typeof V.id==="string"?[V.id]:[]));return Y.content.every((V)=>e0(V)&&V.type==="tool_result"&&typeof V.tool_use_id==="string"&&z.has(V.tool_use_id))}function V5($,J){if(J<0)return!1;let Y=$.flatMap((X,z)=>z>J&&e0(X.value)&&X.value.role==="user"?[z]:[]);return Y.length>0&&Y.every((X)=>z5($,X))}function x3($){if(!e0($))return null;if(typeof $.id==="string")return $.id;return typeof $.message_id==="string"?$.message_id:null}function g3($,J){if(!J)return null;if(J.scope!==$.scope||J.baseline!==$.baseline||J.markerCount!==$.markerCount||J.digest!==$.digest||J.transitionTokens.length!==$.markerCount)throw new E0("Per-message effort marker request plan mismatch");let Y=J.transitionTokens.map((V)=>k3(V)),X=J.anchorToken?v3(J.anchorToken):null,z=Y.at(-1)?.effort??$.baseline;if(Y.some((V)=>V===null)||Y.some((V)=>V?.scope!==$.scope)||$.markerCount>0&&(!X||X.scope!==$.scope||X.boundary!==J.messageId||X.effort!==z||X.digest!==$.digest)||$.markerCount===0&&X!==null||$.digest!==j9($.scope,$.baseline,$.markerCount,J.transitionTokens,J.markerCount>0?J.messageId:void 0))throw new E0("Per-message effort marker request plan mismatch");return{transitions:Y,anchor:X}}function yJ($,J,Y,X){let z=Y.flatMap((v)=>v.transitions),V=z.length,K=$.length-V;if(K<0)throw new E0(`Per-message effort marker correlation failed: expected ${$.length}, found ${V}`);let D=$.slice(K);if(z.some((v,r)=>v.token!==D[r]?.token))throw new E0("Per-message effort marker non-prefix loss");let F=$.slice(0,K);if(X&&F.some((v)=>v.boundary===X.boundary))throw new E0("Per-message effort marker non-prefix loss");let P=[],q=0;return Y.forEach((v,r)=>{if(v.transitions.length===0)return;q+=v.transitions.length,P.push(`${r}:${D[q-1]?.effort}`)}),{effectiveBaseline:F.at(-1)?.effort??J,systemMarkers:P}}function j5($,J){let[Y,X]=$.transitions.length>=J.transitions.length?[$,J]:[J,$],z=Y.transitions.length-X.transitions.length;if(X.transitions.some((K,D)=>K.token!==Y.transitions[z+D]?.token))return!1;let V=z>0?Y.transitions[z-1]?.effort:Y.baseline;return X.baseline===V}function K5($){let{anchor:J,headerPlan:Y,headerAnchor:X}=$;if($.anchorCount!==1||J.scope!==X.scope||J.boundary!==X.boundary)return null;let z=$.recordedVersions.find((V)=>V.sessionId===Y.sessionId&&V.messageId===Y.messageId&&V.digest!==Y.digest&&V.anchorToken===J.token);if(!z)return null;try{let V=g3({scope:z.scope,baseline:z.baseline,markerCount:z.markerCount,digest:z.digest},z);if(!V?.anchor||V.anchor.token!==J.token||V.anchor.effort!==X.effort||!j5({baseline:Y.baseline,transitions:$.headerTransitions},{baseline:z.baseline,transitions:V.transitions}))return null;let K=yJ($.headerTransitions,Y.baseline,$.messages,J),D=yJ(V.transitions,z.baseline,$.messages,J);if(K.effectiveBaseline!==D.effectiveBaseline||K.systemMarkers.join(`
3
+ `)!==D.systemMarkers.join(`
4
+ `))return null}catch(V){if(V instanceof E0)return null;throw V}return z}function y3($,J,Y,X,z=[]){if(!Array.isArray($.messages))return{found:0,inserted:0};let V=G5(Y);if(Y&&!V)throw new E0("Missing or invalid internal per-message effort request plan");let K=V?g3(V,X):null,D=K?.transitions??null;if(!$.messages.some((d)=>{if(!e0(d)||d.role!=="user")return!1;if(typeof d.content==="string"&&d.content.includes("<cortexkit-internal-effort"))return!0;return Array.isArray(d.content)&&d.content.some((M0)=>e0(M0)&&M0.type==="text"&&typeof M0.text==="string"&&M0.text.includes("<cortexkit-internal-effort"))})){if(!V)return{found:0,inserted:0};if(V.markerCount!==0){let d=$.messages.findLastIndex((f0)=>e0(f0)&&f0.role==="user"),M0=$.messages[d],W$=e0(M0)&&Array.isArray(M0.content)?M0.content:[];throw new E0(`Per-message effort marker correlation failed: expected ${V.markerCount}, found 0`,"missing_all_markers",{markerCount:V.markerCount,resolvedPlan:K!==null,plannedBoundaryId:K?.anchor?.boundary??null,expectedAnchorHash:K?.anchor?i$(K.anchor.token):null,retainedMessageCount:$.messages.length,retainedUserMessageCount:$.messages.filter((f0)=>e0(f0)&&f0.role==="user").length,lastUserMessageIndex:d,lastUserTextBlockCount:W$.filter((f0)=>e0(f0)&&f0.type==="text").length,lastUserToolResultBlockCount:W$.filter((f0)=>e0(f0)&&f0.type==="tool_result").length})}if(!D&&V.digest!==j9(V.scope,V.baseline,0,[]))throw new E0("Per-message effort marker request plan mismatch");if(J&&P3($.model)){let d=e0($.output_config)?{...$.output_config}:{};d.effort=D?.at(-1)?.effort??V.baseline,$.output_config=d}return{found:0,inserted:0}}let P=W5($),q=P.messages.flatMap((d)=>d.transitions),v=P.messages.flatMap((d)=>d.anchors),r=q.length;if(!V){if(r===0)return{found:0,inserted:0};throw new E0("Missing or invalid internal per-message effort request plan")}for(let d of P.messages){for(let M0 of d.transitions)if(M0.scope!==V.scope)throw new E0("Per-message effort marker scope mismatch");if(d.anchors.length>1)throw new E0("Multiple internal per-message effort anchors on one user boundary")}let n=P.messages.findIndex((d)=>d.anchors.length===1),D0=P.messages.findLastIndex((d)=>e0(d.value)&&d.value.role==="user"),g=v[0],z0=P.messages[D0]?.value,S=V5(P.messages,n);if(V.markerCount>0&&(v.length!==1||n!==D0&&!S||!g||g.scope!==V.scope))throw new E0("Missing or invalid internal per-message effort anchor placement","anchor_placement",{anchorBoundaryId:g?.boundary??null,plannedBoundaryId:K?.anchor?.boundary??null,lastUserMessageId:x3(z0),anchorMessageIndex:n,lastUserMessageIndex:D0,validToolContinuationSuffix:S,anchorsFound:v.length,markerCount:V.markerCount,scope:V.scope,foundScope:g?.scope??null,expectedAnchorHash:K?.anchor?i$(K.anchor.token):null,foundAnchorHash:g?i$(g.token):null,anchorMatchesExpected:K?.anchor!=null&&g?.token===K.anchor.token});if(V.markerCount===0&&v.length!==0)throw new E0("Unexpected internal per-message effort anchor");if(K?.anchor&&g?.token!==K.anchor.token){let d=g&&X&&D?K5({anchor:g,anchorCount:v.length,headerPlan:X,headerTransitions:D,headerAnchor:K.anchor,recordedVersions:z,messages:P.messages}):null;if(!d)throw new E0("Mismatched internal per-message effort anchor token","anchor_token",{anchorBoundaryId:g?.boundary??null,plannedBoundaryId:K.anchor.boundary,lastUserMessageId:x3(z0),anchorMessageIndex:n,lastUserMessageIndex:D0,anchorsFound:v.length,markerCount:V.markerCount,scope:V.scope,foundScope:g?.scope??null,expectedAnchorHash:i$(K.anchor.token),foundAnchorHash:g?i$(g.token):null,anchorMatchesExpected:!1});uY.warn("effort-history","accepted an earlier effort anchor whose plan gives the same efforts",{check:"anchor_token_equivalent_plan",plannedBoundaryId:K.anchor.boundary,markerCount:V.markerCount,foundPlanMarkerCount:d.markerCount,markersFound:r,expectedAnchorHash:i$(K.anchor.token),foundAnchorHash:g?i$(g.token):null})}let J0=V.baseline;if(D)J0=yJ(D,V.baseline,P.messages,g).effectiveBaseline;else{if(r!==V.markerCount)throw new E0(`Per-message effort marker correlation failed: expected ${V.markerCount}, found ${r}`);let d=j9(V.scope,V.baseline,V.markerCount,q.map((W$)=>W$.token),g?.boundary);if(V.digest!==d)throw new E0("Per-message effort marker request plan mismatch");let M0=q.at(-1)?.effort??V.baseline;if(g&&(g.effort!==M0||g.digest!==V.digest))throw new E0("Missing or invalid internal per-message effort anchor")}let h0=J&&iY($),O0=0,B0=[];for(let d of P.messages){let M0=d.transitions.at(-1);if(M0&&h0)B0.push({role:"system",content:[],output_config:{effort:M0.effort}}),O0++;B0.push(d.value)}if($.messages=B0,h0&&(O0>0||P3($.model))){let d=e0($.output_config)?{...$.output_config}:{};d.effort=J0,$.output_config=d}return{found:r,inserted:O0}}class uJ{plans=new Map;history=new Map;historyByMessage=new Map;record($){let J=this.key($.sessionId,$.messageId),Y={...$,transitionTokens:[...$.transitionTokens]};this.remember(J,Y),this.plans.delete(J),this.plans.set(J,Y);while(this.plans.size>nY){let X=this.plans.keys().next().value;if(typeof X!=="string")break;this.plans.delete(X)}}clear($,J){let Y=this.key($,J);this.plans.delete(Y);for(let X of this.historyByMessage.get(Y)??[])this.history.delete(X);this.historyByMessage.delete(Y)}markHeaders($){let J=this.key($.sessionId,$.messageId),Y=this.plans.get(J);if(!Y)return!1;return $.headers[c1]=this.remember(J,Y),this.plans.delete(J),this.plans.set(J,Y),!0}resolveHeader($){return $?this.history.get($):void 0}versionsFor($,J){return[...this.historyByMessage.get(this.key($,J))??[]].flatMap((X)=>{let z=this.history.get(X);return z?[z]:[]})}remember($,J){let Y=X5(J),X=this.history.get(Y);if(X&&this.key(X.sessionId,X.messageId)!==$){if(X.markerCount!==0||J.markerCount!==0||X.sessionId!==J.sessionId)throw new E0("Per-message effort plan header collision");let V=this.key(X.sessionId,X.messageId),K=this.historyByMessage.get(V);if(K?.delete(Y),K?.size===0)this.historyByMessage.delete(V)}this.history.delete(Y),this.history.set(Y,J);let z=this.historyByMessage.get($)??new Set;z.add(Y),this.historyByMessage.set($,z);while(this.history.size>oY){let V=this.history.entries().next().value;if(!V)break;let[K,D]=V;this.history.delete(K);let F=this.key(D.sessionId,D.messageId),P=this.historyByMessage.get(F);if(P?.delete(K),P?.size===0)this.historyByMessage.delete(F)}return Y}key($,J){return`${$}\x00${J}`}}import{resolveClaudeModelCapabilities as _5}from"@cortexkit/anthropic-auth-core";var m3="claude-opus-4-8",lJ=10,iJ="source-warm:";function p1($,J){return`${iJ}${$}:${J}`}function S4($){if(!$.startsWith(iJ))return null;let J=$.slice(iJ.length),Y=J.lastIndexOf(":");if(Y<=0)return null;let X=J.slice(0,Y),z=J.slice(Y+1);if(z!=="fable-5"&&z!=="fable-5-1"&&z!=="opus-5"&&z!=="opus-5-5")return null;return{sessionId:X,family:z}}function dJ($,J){return`${$}\x00${J}`}var c3=128,L5=86400000;function Y$($){return _5($)?.refusalRecoveryFamily??null}function L9($){return Y$($)!==null}function O5($,J){let Y=Y$(J);return Y?`${$}\x00${Y}`:null}function N5($){try{let J=JSON.parse($);return typeof J.model==="string"?{body:J,model:J.model}:null}catch{return null}}class nJ{now;recoveries=new Map;selectedModels=new Map;nextCycle=1;constructor($=Date.now){this.now=$}prune(){let $=this.now();for(let[J,Y]of this.recoveries)if($-Y.updatedAt>=L5)this.recoveries.delete(J);while(this.recoveries.size>c3){let J=this.recoveries.keys().next().value;if(typeof J!=="string")break;this.recoveries.delete(J)}}clearSession($){this.selectedModels.delete($);for(let J of this.recoveries.keys())if(J.startsWith(`${$}\x00`))this.recoveries.delete(J)}resetForModelChange($,J){let Y=this.selectedModels.get($),X=Y!==void 0&&Y!==J;if(X)this.clearSession($);this.selectedModels.delete($),this.selectedModels.set($,J);while(this.selectedModels.size>c3){let z=this.selectedModels.keys().next().value;if(z===void 0)break;this.selectedModels.delete(z)}return X}plan($,J){if(!$||typeof J!=="string")return null;this.prune();for(let[V,K]of[...this.recoveries]){if(!V.startsWith(`${$}\x00`))continue;K.updatedAt=this.now(),this.recoveries.delete(V),this.recoveries.set(V,K)}let Y=N5(J);if(!Y||!L9(Y.model))return null;let X=O5($,Y.model);if(!X)return null;let z=this.recoveries.get(X);if(z)z.nextRequestSequence++;if(!z||z.remaining<=0)return{sessionId:$,recoveryKey:X,requestedModel:Y.model,effectiveModel:Y.model,bodyText:J,downgraded:!1,cycle:z?.cycle,standbyCacheAnchor:z?.standbyCacheAnchor};return z.updatedAt=this.now(),this.recoveries.delete(X),this.recoveries.set(X,z),Y.body.model=m3,{sessionId:$,recoveryKey:X,requestedModel:z.model,effectiveModel:m3,bodyText:JSON.stringify(Y.body),downgraded:!0,cycle:z.cycle,cacheAccountId:z.cacheAccountId,standbyCacheAnchor:z.standbyCacheAnchor,requestSequence:z.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 Y=this.recoveries.get($.recoveryKey);if(!Y||Y.cycle!==$.cycle)return!1;if(Y.cacheAccountId===J)return!1;return Y.cacheAccountId=J,Y.standbyCacheAnchor=void 0,Y.standbyAnchorSequence=0,Y.sourceWarm=void 0,Y.updatedAt=this.now(),$.cacheAccountId=J,$.standbyCacheAnchor=void 0,!0}activate($,J,Y){if($.downgraded||!L9($.requestedModel))return this.remaining($);let X=this.recoveries.get($.recoveryKey),z=X&&X.sourceSuccesses<lJ?X.reRefusals+1:0,V={model:$.requestedModel,remaining:lJ*2**Math.min(z,2),reRefusals:z,sourceSuccesses:0,cycle:this.nextCycle++,cacheAccountId:J,standbyCacheAnchor:$.standbyCacheAnchor,sourceWarm:Y?{...Y,warmsSinceUserTurn:0}:void 0,nextRequestSequence:0,standbyAnchorSequence:0,updatedAt:this.now()};return this.recoveries.delete($.recoveryKey),this.recoveries.set($.recoveryKey,V),this.prune(),V.remaining}sourceWarmFor($){return this.recoveries.get($)?.sourceWarm}sourceWarmForTarget($){let J=S4($);if(!J)return;return this.sourceWarmFor(dJ(J.sessionId,J.family))}hasSourceWarmForSession($){for(let J of this.recoveries.keys())if(J.startsWith(`${$}\x00`)&&this.recoveries.get(J)?.sourceWarm)return!0;return!1}sourceWarmsForSession($){let J=[];for(let[Y,X]of this.recoveries)if(Y.startsWith(`${$}\x00`)&&X.sourceWarm)J.push({recoveryKey:Y,warm:X.sourceWarm});return J}dropSourceWarm($){let J=this.recoveries.get($);if(!J?.sourceWarm)return!1;return J.sourceWarm=void 0,J.updatedAt=this.now(),!0}dropSourceWarmForTarget($){let J=S4($);if(!J)return!1;return this.dropSourceWarm(dJ(J.sessionId,J.family))}noteSourceWarmSent($){let J=this.recoveries.get($)?.sourceWarm;if(!J)return;return J.warmsSinceUserTurn++,J.warmsSinceUserTurn}noteSourceWarmSentForTarget($){let J=S4($);if(!J)return;return this.noteSourceWarmSent(dJ(J.sessionId,J.family))}noteSourceWarmUserTurn($,J){let Y=!1;for(let[X,z]of this.recoveries){let V=X.startsWith(`${$}\x00`)?z.sourceWarm:void 0;if(!V)continue;if(V.lastUserTurnKey===void 0){V.lastUserTurnKey=J;continue}if(V.lastUserTurnKey!==J)V.lastUserTurnKey=J,V.warmsSinceUserTurn=0,Y=!0}return Y}completeSource($,J=!0){if($.downgraded||$.cycle==null||$.completed)return!1;$.completed=!0;let Y=this.recoveries.get($.recoveryKey);if(!Y||Y.cycle!==$.cycle||Y.remaining>0)return!1;if(!J)return Y.sourceSuccesses=0,!1;return Y.sourceSuccesses=Math.min(Y.sourceSuccesses+1,lJ),Y.updatedAt=this.now(),Y.sourceWarm=void 0,!0}complete($,J){if(!$.downgraded||$.cycle==null||$.completed)return{counted:!1,remaining:this.remaining($)};$.completed=!0;let Y=this.recoveries.get($.recoveryKey);if(!Y||Y.cycle!==$.cycle||Y.remaining<=0)return{counted:!1,remaining:Y?.remaining??0};if(Y.remaining--,J&&(!Y.cacheAccountId||J.oauthAccountId===Y.cacheAccountId)&&$.requestSequence!=null&&$.requestSequence>=Y.standbyAnchorSequence)Y.standbyCacheAnchor=J,Y.standbyAnchorSequence=$.requestSequence;return Y.updatedAt=this.now(),this.recoveries.delete($.recoveryKey),this.recoveries.set($.recoveryKey,Y),{counted:!0,remaining:Y.remaining}}remaining($){return this.prune(),this.recoveries.get($.recoveryKey)?.remaining??0}}function Z1($){return typeof $==="object"&&$!==null}function D5($){if(Array.isArray($))return $;if(Z1($)&&Array.isArray($.data))return $.data;return[]}function l3($){if(!Z1($)||!Z1($.info))return;return $.info}function p3($){let J=l3($);return typeof J?.role==="string"?J.role:void 0}function H5($){let J=l3($);return typeof J?.id==="string"?J.id:void 0}function oJ($){if(!Z1($)||!Z1($.info))return null;let J=$.info,Y=Z1(J.model)?J.model:void 0,X=typeof J.agent==="string"?J.agent:void 0,z=typeof Y?.providerID==="string"?Y.providerID:typeof J.providerID==="string"?J.providerID:void 0,V=typeof Y?.modelID==="string"?Y.modelID:typeof Y?.id==="string"?Y.id:typeof J.modelID==="string"?J.modelID:void 0,K=typeof Y?.variant==="string"?Y.variant:typeof J.variant==="string"?J.variant:void 0;if(!X&&(!z||!V)&&!K)return null;let D={};if(X)D.agent=X;if(z&&V)D.model={providerID:z,modelID:V};if(K)D.variant=K;return D}function rJ($,J){return{agent:$.agent??J.agent,model:$.model??J.model,variant:$.variant??J.variant,latestAssistantMessageId:$.latestAssistantMessageId??J.latestAssistantMessageId,latestUserMessageId:$.latestUserMessageId??J.latestUserMessageId}}function u3($){return Boolean($.agent&&$.model&&$.variant)}async function O9($,J){if(!$||!J)return null;let Y=$,X=[];if(typeof Y.session?.messages==="function")try{X=D5(await Promise.resolve(Y.session.messages({path:{id:J},query:{limit:100}})))}catch{X=[]}let z,V;for(let D of X){let F=H5(D);if(!F)continue;let P=p3(D);if(P==="assistant"&&(!z||F>z))z=F;if(P==="user"&&(!V||F>V))V=F}let K={latestAssistantMessageId:z,latestUserMessageId:V};for(let D=X.length-1;D>=0;D--){if(p3(X[D])!=="assistant")continue;let F=oJ(X[D]);if(!F)continue;if(K=rJ(K,F),u3(K))return K}for(let D=X.length-1;D>=0;D--){let F=oJ(X[D]);if(!F)continue;if(K=rJ(K,F),u3(K))return K}if(typeof Y.session?.get==="function")try{let D=await Promise.resolve(Y.session.get({path:{id:J}})),F=Z1(D)&&Z1(D.data)?D.data:Z1(D)?D:void 0,P=F?oJ({info:F}):null;if(P)K=rJ(K,P)}catch{}if(!K.agent&&!K.model&&!K.variant&&!K.latestAssistantMessageId&&!K.latestUserMessageId)return null;return K}var d3="[lane start] — automated cache warm; no response needed.",N9="x-cortexkit-lane-start",U5=1000;function Q5($){if(!$||typeof $!=="object")return!1;let J=$;return J.type==="text"&&J.text===d3&&J.synthetic===!0}async function i3($,J){let Y=$?.session;if(typeof Y?.promptAsync!=="function")throw Error("OpenCode plugin client does not support session.promptAsync");let X=await O9($,J),z={noReply:!1,parts:[{type:"text",text:d3,synthetic:!0}]};if(X?.agent)z.agent=X.agent;if(X?.model)z.model=X.model;if(X?.variant)z.variant=X.variant;await Promise.resolve(Y.promptAsync({path:{id:J},body:z}))}class sJ{#$=new Map;observeSyntheticMessage($){if(!$.parts.some(Q5))return!1;let J=`${$.sessionId}\x00${$.messageId}`;if(!this.#$.has(J)&&this.#$.size>=U5){let Y=this.#$.keys().next().value;if(Y!==void 0)this.#$.delete(Y)}return this.#$.set(J,$.sessionId),!0}markHeaders($){let J=`${$.sessionId}\x00${$.messageId}`;if(!this.#$.has(J))return!1;return this.#$.delete(J),$.headers[N9]="1",!0}clearSession($){for(let[J,Y]of this.#$)if(Y===$)this.#$.delete(J)}}import{createNativeUi as B5,disconnectNativeVaultForHost as F5,readNativeEnrollmentMode as w5}from"@cortexkit/anthropic-auth-core";function n3($){if(!$?.trim())throw TypeError("sessionId is required");return $}function o3($){if($.host!=="opencode")throw TypeError("OpenCode host is required");let J=B5({...$,readMode:$.readMode??(()=>w5("opencode",process.env)),disconnectVault:$.disconnectVault??(()=>F5({host:"opencode",env:process.env}))});return{menu:J,open(Y){return J.open({sessionId:n3(Y),notify(){}})},apply(Y){return J.apply(Y,{sessionId:n3(Y.sessionId),notify(){}})}}}import{createAnthropicOAuthFetch as T5,logger as r3,requireAnthropicOAuthOrigin as C5}from"@cortexkit/anthropic-auth-core";var aJ="ANTHROPIC_AUTH_TEST_OAUTH_LOOPBACK_ORIGIN",E5=new Set(["127.0.0.1","[::1]","localhost"]),s3;function S5(){let $=process.env[aJ];if(!$)return;let J=A5($);if(s3!==$)if(s3=$,J)r3.warn("oauth-destination","test-only loopback origin is allowed for Claude OAuth requests",{env:aJ});else r3.warn("oauth-destination","ignored an invalid test-only loopback origin; Claude OAuth requests stay limited to https://api.anthropic.com",{env:aJ});return J}function A5($){let J;try{J=new URL($)}catch{return}if(J.protocol!=="http:"&&J.protocol!=="https:")return;if(J.username||J.password||J.search||J.hash)return;if(!E5.has(J.hostname))return;if(!J.port)return;if($!==J.origin)return;return J.origin}function a3(){let $=S5();return $?{extraOrigin:$}:{}}function D9($){return C5($,a3())}function tJ($){try{return D9($),!0}catch{return!1}}var A4=T5(a3);var t3;import{primeStorageFingerprint as P5}from"@cortexkit/anthropic-auth-core";var H9=new Map,U9=new Map;function e3($,J){let Y=U9.get($);if(Y?.fingerprint!==J.fingerprint||Y.marker!==J.marker)return;let X=H9.get(J.fingerprint);if(X?.slots.delete($),X?.slots.size===0)X.manager.stop(),H9.delete(J.fingerprint);U9.delete($)}function $7($,J,Y){let X=P5($),z=H9.get(X),V=z?.manager??J();if(z)Y.rebind(V);let K=U9.get(Y.slot);if(K&&K.fingerprint!==X)e3(Y.slot,K);let D=z??{manager:V,slots:new Set};if(!z)H9.set(X,D);let F={fingerprint:X,marker:Symbol(Y.slot)};return D.slots.add(Y.slot),U9.set(Y.slot,F),{manager:V,release:()=>e3(Y.slot,F)}}import{classifySafeErrorForLog as q5,logger as M5}from"@cortexkit/anthropic-auth-core";function J7($,J,Y){M5.warn("quota","fallback quota preflight could not obtain a reading",{accountId:$,requiredByPolicy:J,...q5(Y)})}var eJ="x-cortexkit-request-class",R5=new Set(["title","summary","prime"]);function Z7($){return typeof $==="string"&&R5.has($)}function Y7($){let J=$.get("x-cortexkit-request-class");return $.delete("x-cortexkit-request-class"),J==="auxiliary"?"auxiliary":"main"}import{getKillswitchThresholdsForAccount as x5,getScopedQuotaWindowForModel as I5,killswitchPassesPolicy as f5}from"@cortexkit/anthropic-auth-core";function X7($){let J=Math.floor($.retryAfterSeconds/60),Y=$.retryAfterSeconds%60,X=`Retry in ${J}m ${Y}s.`;return $.modelName?`${$.modelName} weekly limit reached, no routable accounts. ${X}`:`Killswitch: no routable accounts. ${X}`}function G7($){if(!$.requestModelId)return{isScopedDriven:!1};if(!f5($.mainQuota,$.storage))return{isScopedDriven:!1};let J=I5($.mainQuota,$.requestModelId);if(!J)return{isScopedDriven:!1};if(!Number.isFinite(J.remainingPercent))return{isScopedDriven:!1};let Y=x5($.storage);if(J.remainingPercent<=Y.scoped)return{isScopedDriven:!0,modelName:J.modelName,modelId:$.requestModelId};return{isScopedDriven:!1}}var g$=[],k5=1,W7=new Map,Q9=new Map,E1=new Set,v5=1000;function z7($){if(typeof $!=="string"||$.length===0)throw TypeError("sessionId is required")}function $Z($,J){z7(J);let Y=k5++;if("menu"in $){if($.command!=="claude"||$.menu.command!=="claude")throw TypeError("Only the claude menu is supported");g$.push({id:Y,type:"open-menu",payload:$,sessionId:J})}else g$.push({id:Y,type:"open-dialog",payload:$,sessionId:J});if(g$.length>100)g$=g$.slice(g$.length-100);return Y}function V7($,J,Y){let X=$Z($,J);return new Promise((z)=>{let V;Q9.set(X,{picked(){if(V!==void 0)Y.clearTimeout(V);z(!0)},cancel(){if(V!==void 0)Y.clearTimeout(V);z(!1)}}),V=Y.setTimeout(()=>{if(!Q9.delete(X))return;if(g$=g$.filter((K)=>K.id!==X),E1.delete(J),E1.add(J),E1.size>v5){let K=E1.values().next().value;if(K!==void 0)E1.delete(K)}z(!1)},Y.timeoutMs)})}function j7($){return E1.has($)}function K7($,J){if(z7(J),W7.set(J,Date.now()),E1.delete(J),$>0)g$=g$.filter((X)=>X.id>$||X.sessionId!==J);let Y=g$.filter((X)=>X.id>$&&X.sessionId===J);for(let X of Y){let z=Q9.get(X.id);if(!z)continue;Q9.delete(X.id),z.picked()}return Y}function B9($){let J=Date.now(),Y=W7.get($)??0;return Y>0&&J-Y<3000}import{randomBytes as h5,timingSafeEqual as b5}from"node:crypto";import{readFile as g5,unlink as y5}from"node:fs/promises";import{createServer as m5}from"node:http";import{join as c5}from"node:path";import{parseApplyRequest as p5}from"@cortexkit/anthropic-auth-core";function u5($){return new Promise((J,Y)=>{let X=[],z=0;$.on("data",(V)=>{if(z+=V.length,z>1e6){$.destroy(),Y(Error("body too large"));return}X.push(V)}),$.on("end",()=>J(Buffer.concat(X).toString("utf8"))),$.on("error",Y)})}function l5($,J){if(!$?.startsWith("Bearer "))return!1;let Y=Buffer.from($.slice(7)),X=Buffer.from(J);return Y.length===X.length&&b5(Y,X)}async function L7($){let J=h5(32).toString("hex"),Y=m5((V,K)=>{X(V,K)});async function X(V,K){let D=(F,P)=>{K.writeHead(F,{"content-type":"application/json"}),K.end(JSON.stringify(P))};try{let F=V.url??"";if(V.method==="GET"&&F==="/health")return D(200,{ok:!0});if(V.method!=="POST"||!F.startsWith("/rpc/"))return D(404,{error:"not found"});if(!l5(V.headers.authorization,J))return D(401,{error:"unauthorized"});let P=F.slice(5),q=JSON.parse(await u5(V)||"{}");if(P==="pending-notifications"){if(typeof q.sessionId!=="string"||q.sessionId.length===0)return D(400,{error:"sessionId is required"});let v=$.drain(Number(q.lastReceivedId??0),q.sessionId);return D(200,{messages:v})}if(P==="apply"){if(!$.apply)return D(501,{error:"text apply unavailable"});let v=await $.apply(q);return D(200,v)}if(P==="apply-menu"){let v=p5(q);if(v?.command!=="claude"||!v.sessionId?.trim())return D(400,{error:"invalid menu request"});if(!$.applyMenu)return D(501,{error:"menu unavailable"});return D(200,await $.applyMenu(v))}return D(404,{error:"unknown method"})}catch{if(!K.headersSent&&!K.writableEnded&&!K.destroyed)D(500,{error:"RPC request failed"})}}let z=await new Promise((V,K)=>{Y.on("error",K),Y.listen(0,"127.0.0.1",()=>{let D=Y.address();if(D&&typeof D==="object")V(D.port);else K(Error("no port"))})});Y.unref();try{await _7($.dir,{port:z,token:J,pid:process.pid})}catch(V){throw await new Promise((K)=>Y.close(()=>K())),V}return{port:z,token:J,async stop(){await new Promise((V)=>Y.close(()=>V()));try{let V=c5($.dir,`port-${process.pid}.json`),K=JSON.parse(await g5(V,"utf8"));if(K.port===z&&K.pid===process.pid)await y5(V)}catch{}}}}async function O7($,J){let Y=globalThis,X=Y.__anthropicAuthRpcServers??new Map,z=Y.__anthropicAuthRpcServersPending??new Map;Y.__anthropicAuthRpcServers=X,Y.__anthropicAuthRpcServersPending=z;let V=z.get($)??Promise.resolve(),K,D=V.catch(()=>{}).then(async()=>{let P=X.get($);if(P){if(await P.stop(),X.get($)===P)X.delete($)}K=await J(),X.set($,K)});z.set($,D);try{await D}finally{if(z.get($)===D)z.delete($)}let F=K;if(!F)throw Error("RPC server failed to start");return{server:F,release:async()=>{if(X.get($)!==F)return;if(await F.stop(),X.get($)===F)X.delete($)}}}import{resolveClaudeModelCapabilities as d5}from"@cortexkit/anthropic-auth-core";var H7="server-side-fallback-2026-07-01",U7="⁠",F9="cortexkit-server-fallback-v1:";function y$($){return $!==null&&typeof $==="object"&&!Array.isArray($)?$:void 0}function u1($,J){let Y=$?.[J];return typeof Y==="string"?Y:void 0}function l1($){return typeof $==="string"&&$.length>0&&$.length<=128&&/^claude-[a-z0-9-]+$/i.test($)}function i5($){return`${F9}${$.fromModel}|${$.toModel}`}function n5($){if(typeof $!=="string"||!$.startsWith(F9))return null;let J=$.slice(F9.length),Y=J.indexOf("|");if(Y<=0||Y!==J.lastIndexOf("|"))return null;let X=J.slice(0,Y),z=J.slice(Y+1);if(!l1(X)||!l1(z))return null;return{fromModel:X,toModel:z}}function o5($){if($.type!=="fallback")return null;let J=u1(y$($.from),"model"),Y=u1(y$($.to),"model");if(!l1(J)||!l1(Y))return null;return{fromModel:J,toModel:Y}}function r5($){return{type:"fallback",from:{model:$.fromModel},to:{model:$.toModel}}}function s5($,J){let Y=0,X=0;if(!Array.isArray($.messages))return{restoredMarkers:Y,droppedMarkers:X};for(let z of $.messages){let V=y$(z);if(V?.role!=="assistant"||!Array.isArray(V.content))continue;let K=[];for(let D of V.content){let F=y$(D);if(!(F?.type==="thinking"&&(F.thinking===U7||F.thinking==="")&&typeof F.signature==="string"&&F.signature.startsWith(F9))){K.push(D);continue}let q=n5(F.signature);if(J&&q)K.push(r5(q)),Y++;else X++}V.content=K}return{restoredMarkers:Y,droppedMarkers:X}}function Q7($){return $?.trim().toLowerCase()==="legacy"?"legacy":"server"}function B7($,J){let Y=J&&d5($.model)?.serverSideFallback===!0,X=s5($,Y);if(Y)$.fallbacks="default";else if($.fallbacks==="default")delete $.fallbacks;return{enabled:Y,...X}}function a5($){let J,Y=[];for(let z of $.split(/\r?\n/))if(z.startsWith("event:"))J=z.slice(6).trim();else if(z.startsWith("data:")){let V=z.slice(5);Y.push(V.startsWith(" ")?V.slice(1):V)}let X=Y.join(`
5
+ `);if(!X||X==="[DONE]")return{event:J};try{return{event:J,data:y$(JSON.parse(X))}}catch{return{event:J}}}function N7($){let J=$.indexOf(`
6
+
7
+ `),Y=$.indexOf(`\r
8
+ \r
9
+ `);if(J===-1)return Y===-1?null:{index:Y,length:4};if(Y===-1||J<Y)return{index:J,length:2};return{index:Y,length:4}}function D7($,J){return`event: ${$}
10
+ data: ${JSON.stringify(J)}
11
+
12
+ `}function t5($,J){return D7("content_block_start",{type:"content_block_start",index:$,content_block:{type:"thinking",thinking:U7}})+D7("content_block_delta",{type:"content_block_delta",index:$,delta:{type:"signature_delta",signature:i5(J)}})}function e5($,J){let Y=Y$($),X=Y$(J);if(Y&&X)return Y===X;return $===J}function F7($){let J="",Y=0,X=!1,z="",V,K,D,F=!1,P=!1,q=new Set,v=(g)=>{if(!Array.isArray(g?.iterations))return;for(let z0 of g.iterations){let S=y$(z0);if(S?.type!=="fallback_message")continue;let J0=u1(S,"model");if(l1(J0))D=J0}},r=(g)=>{if(F)return;F=!0;let z0=K?.toModel??D??(V&&!e5($.requestedModel,V)?V:void 0);$.onOutcome?.({requestedModel:$.requestedModel,servedModel:V,targetModel:z0,fallback:Boolean(z0),handoff:Boolean(K),stopReason:g})},n=(g,z0)=>{let S=a5(g),J0=S.data,h0=u1(J0,"type")??S.event;if(h0==="message_start"){let O0=y$(J0?.message),B0=u1(O0,"model");if(l1(B0))V=B0;v(y$(O0?.usage))}else if(h0==="content_block_start"){let O0=y$(J0?.content_block),B0=J0?.index;if(O0?.type==="tool_use"&&typeof B0==="number"&&Number.isInteger(B0)&&B0>=0)q.add(B0);let d=O0?o5(O0):null;if(d){if(K=d,typeof B0==="number"&&Number.isInteger(B0)&&B0>=0)return t5(B0,d)}}else if(h0==="content_block_stop"){let O0=J0?.index;if(typeof O0==="number"&&q.delete(O0))P=!0}else if(h0==="message_delta"){v(y$(J0?.usage));let O0=y$(J0?.delta),B0=u1(O0,"stop_reason");if(B0)r(B0);if(B0==="refusal"&&P&&q.size===0&&O0&&$.onRefusalAfterToolUse&&$.onRefusalAfterToolUse()!==!1)return O0.stop_reason="tool_use",`${S.event?`event: ${S.event}
13
+ `:""}${J0?`data: ${JSON.stringify(J0)}
14
+ `:""}${z0}`}return g+z0},D0=()=>{let g="";while(!0){let z0=N7(J);if(!z0)break;let S=J.slice(0,z0.index),J0=J.slice(z0.index,z0.index+z0.length);J=J.slice(z0.index+z0.length),Y=new TextEncoder().encode(J).byteLength,g+=n(S,J0)}return g};return{pendingLength(){return Y},push(g){let z0="";if(X){let J0=z+g,h0=N7(J0);if(!h0)return z=J0.slice(-3),g;let O0=h0.index+h0.length;z0=g.slice(0,Math.max(0,O0-z.length)),g=J0.slice(O0),X=!1,z=""}if(!g)return z0;let S=new TextEncoder().encode(g).byteLength;if(J+=g,Y+=S,z0+=D0(),$.maxPendingBytes!==void 0&&Y>$.maxPendingBytes){let J0=J;return J="",Y=0,X=!0,z=J0.slice(-3),z0+J0}return z0},flush(){if(X)return z="","";let g=D0();if(!J)return g;let z0=n(J,"");return J="",Y=0,g+z0}}}import{createHash as $X}from"node:crypto";import{applyClaudeCodeHeaders as JX,applyClaudeCodeMetadata as ZX,applyThinkingBindingControls as YX,applyTurnEndNotes as XX,assertNotCustodyTombstone as GX,buildBillingHeaderValue as WX,CLAUDE_CODE_ENTRYPOINT as zX,CLAUDE_CODE_IDENTITY as q4,CLAUDE_FABLE_MYTHOS_5_SUMMARIZED_THINKING as VX,CLAUDE_HAIKU_5_5_ADAPTIVE_THINKING as jX,CLAUDE_OPUS_5_5_ADAPTIVE_THINKING as KX,CLAUDE_OPUS_5_ADAPTIVE_THINKING as _X,CLAUDE_SONNET_5_5_ADAPTIVE_THINKING as LX,CLAUDE_SONNET_5_ADAPTIVE_THINKING as OX,ClaudeCodeFirstUserTextTracker as NX,countUserPrompts as DX,createSseFramer as HX,FAST_MODE_BETA as UX,isClaudeFableOrMythos5Model as QX,isClaudeHaiku55Model as BX,isClaudeOpus5Model as M7,isClaudeOpus55Model as FX,isClaudeSonnet5Model as wX,isClaudeSonnet55Model as TX,isFastModeSupportedModel as CX,isOpenAIReasoningSignature as EX,mergeAnthropicBetas as SX,OPENCODE_IDENTITY_PREFIX as AX,orderClaudeCodeBody as PX,PARAGRAPH_REMOVAL_ANCHORS as qX,parseSseFrame as MX,REQUIRED_BETAS as hW,remapRequestBodyModel as RX,resolveClaudeModelCapabilities as xX,SseFrameTooLargeError as R7,selectClaudeCodeBetas as IX,signRequestBody as fX,stripEmptyTrailingAssistantMessages as kX,TEXT_REPLACEMENTS as vX,TOOL_PREFIX as x7,TrailingAssistantHistoryError as hX}from"@cortexkit/anthropic-auth-core";import{applyEdits as I7,parseTree as bX}from"jsonc-parser";function w7($,J){let Y=new Map,X=0,z=0,V=0,K=0,D=0,F=(v)=>{let r=performance.now(),n=$(v);return D+=performance.now()-r,V++,n};return{call:(v)=>{if(!J.enabled())return F(v);let r=Y.get(v);if(r!==void 0)return z++,Y.delete(v),Y.set(v,r),r;let n=F(v),D0=v.length+n.length;if(D0>J.maxBytes)return n;Y.set(v,n),X+=D0;while(X>J.maxBytes&&Y.size>1){let g=Y.keys().next().value,z0=Y.get(g)??"";Y.delete(g),X-=g.length+z0.length,K++}return n},stats:()=>({hits:z,misses:V,evictions:K,entries:Y.size,cacheBytes:X,computeMsTotal:D})}}var m$=8388608;function E9($){return`${x7}${$.charAt(0).toUpperCase()}${$.slice(1)}`}function gX($){if($==="StructuredOutput")return $;return`${$.charAt(0).toLowerCase()}${$.slice(1)}`}class R4 extends Error{retryable=!1;isRetryable=!1;constructor(){super("Response tool-name mapping could not be validated safely");this.name="UnsafeToolNameResponseError"}}function M4($){if($?.hazardousWireNames.size)throw new R4}function XZ($,J){return $ instanceof R7&&J?.hazardousWireNames.size?new R4:$}async function GZ($,J){try{$.cancel(J).catch(()=>{})}catch{}try{await Promise.allSettled([$.closed])}finally{try{$.releaseLock()}catch{}}}function yX($){let J=new Set;if(Array.isArray($)){for(let V of $)if(G0(V)&&typeof V.name==="string"&&V.name)J.add(V.name)}let Y=new Map,X=(V,K,D)=>{V.set(K,V.has(K)&&V.get(K)!==D?null:D)},z=new Map;for(let V of J){let K=V.split("_");for(let D=0;D<K.length;D++){let F=K.slice(D).join("_");if(!F)continue;for(let P of new Set([F,gX(F),F.charAt(0).toUpperCase()+F.slice(1)]))X(Y,P,V),X(Y,`${x7}${P}`,V)}X(z,E9(V),V)}for(let V of J)Y.set(V,V);for(let[V,K]of z)Y.set(V,K);return Object.assign(Y,{declaredHostNames:J,hazardousWireNames:new Set([...z.keys()].filter((V)=>J.has(V)))})}function x4($,J){let Y=new Headers;if($ instanceof Request)$.headers.forEach((z,V)=>{Y.set(V,z)});let X=J?.headers;if(X){if(X instanceof Headers)X.forEach((z,V)=>{Y.set(V,z)});else if(Array.isArray(X))for(let z of X){let[V,K]=z;if(typeof K<"u")Y.set(V,String(K))}else for(let[z,V]of Object.entries(X))if(typeof V<"u")Y.set(z,String(V))}return Y}function A9($){return $.set("anthropic-beta",SX($.get("anthropic-beta"),[UX])),$}function i1($,J,Y={}){return GX(J,"anthropic"),JX($,J,{...Y,extraBetas:[...Y.body?.fallbacks==="default"?[H7]:[]]})}function mX($){if($.tools&&Array.isArray($.tools))$.tools=$.tools.map((Y)=>({...Y,name:Y.name?E9(Y.name):Y.name}));let J=$.tool_choice;if(G0(J)&&J.type==="tool"&&typeof J.name==="string")$.tool_choice={...J,name:E9(J.name)};if($.messages&&Array.isArray($.messages))$.messages=$.messages.map((Y)=>{if(Y.content&&Array.isArray(Y.content))Y.content=Y.content.map((X)=>{if(X.type==="tool_use"&&X.name)return{...X,name:E9(X.name)};return X});return Y});return JSON.stringify(PX($))}function cX($,J){return I7($,f7($,J,!1))}function P4($,J){if($?.type!=="object")return;return $.children?.filter((X)=>X.children?.[0]?.value===J)?.at(-1)?.children?.[1]}function f7($,J,Y,X=!0){if(!J?.size)return[];let z=$.charCodeAt(0)===65279?1:0,V=[],K;try{K=bX($.slice(z),V,{disallowComments:!0,allowTrailingComma:!1})}catch{return M4(J),[]}if(V.length||K?.type!=="object")return M4(J),[];let D=P4(K,"type")?.value,F;if(Y){X&&=D==="content_block_start";let q=P4(K,"content_block");F=q?[q]:[]}else{X&&=D===void 0||D==="message";let q=P4(K,"content");F=q?.type==="array"?q.children??[]:[]}let P=[];for(let q of F){if(P4(q,"type")?.value!=="tool_use")continue;let v=P4(q,"name");if(v?.type!=="string")continue;let r=J.get(v.value);if(J.hazardousWireNames.has(v.value)&&(!X||r===null))throw new R4;if(!X)continue;if(r&&r!==v.value)P.push({offset:z+v.offset,length:v.length,content:JSON.stringify(r)})}return P}function pX($,J){let Y=$.charCodeAt(0)===65279?1:0,X=MX($.slice(Y));if(X.data===void 0)return $;let z=f7(X.data,J,!0,X.event===void 0||X.event==="content_block_start");if(!z.length)return $;let V=[],K=0;for(let F of $.slice(Y).matchAll(/([^\r\n]*)(?:\r\n|\r|\n|$)/g)){let P=/^data(?:: ?(.*))?$/.exec(F[1]??"");if(!P)continue;let q=P[1]?.length??0;V.push({dataOffset:K,frameOffset:Y+(F.index??0)+P[0].length-q,length:q}),K+=q+1}let D=[];for(let F of z){let P=V.find((q)=>F.offset>=q.dataOffset&&F.offset+F.length<=q.dataOffset+q.length);if(!P)return M4(J),$;D.push({...F,offset:P.frameOffset+F.offset-P.dataOffset})}return I7($,D)}function uX($,J){let Y=new TextEncoder,X=new TextDecoder("utf-8",{ignoreBOM:!0}),z=HX({maxFrameBytes:m$}),V="",K=0,D=!$?.size;return{pendingLength:()=>V.length,push(F,P=!1){if(D||!$)return F;let q=V+F;if(J){if(K+=Y.encode(F).byteLength,K>m$)return D=!0,V="",M4($),q;return V=P?"":q,P?cX(q,$):""}let v;try{v=z.push(Y.encode(F))}catch(n){if(!(n instanceof R7))throw n;return D=!0,V="",M4($),q}let r=v.map((n)=>X.decode(n));if(V=q.slice(r.reduce((n,D0)=>n+D0.length,0)),P){let n=z.finish();if(n)r.push(X.decode(n));V=""}return r.map((n)=>pX(n,$)).join("")}}}function WZ(){if(!process.env.ANTHROPIC_BASE_URL?.trim())return!1;let $=process.env.ANTHROPIC_INSECURE?.trim();return $==="1"||$==="true"}function k7($){let J=$?.trim();if(!J)return null;try{let Y=new URL(J);if(Y.protocol!=="http:"&&Y.protocol!=="https:"||Y.username||Y.password)return null;return Y}catch{return null}}function lX(){return k7(process.env.ANTHROPIC_BASE_URL)}function I4($,J={}){let Y=null;try{if(typeof $==="string"||$ instanceof URL)Y=new URL($.toString());else if($ instanceof Request)Y=new URL($.url)}catch{Y=null}if(!Y)return{input:$,url:null};let X=Y.href,z=J.baseURL?k7(J.baseURL):lX();if(z){let K=z.pathname.replace(/\/$/,""),D=Y.pathname;if(Y.protocol=z.protocol,Y.host=z.host,!(D===K||K!==""&&D.startsWith(`${K}/`))){let P=/\/v\d[^/]*$/.test(K);if(D==="/messages")Y.pathname=P?`${K}/messages`:`${K}/v1/messages`;else if(D==="/v1/messages"&&P)Y.pathname=`${K}/messages`;else Y.pathname=`${K}${D}`}else if(D===`${K}/messages`){if(!/\/v\d[^/]*$/.test(K))Y.pathname=`${K}/v1/messages`}}if(Y.pathname.endsWith("/v1/messages")&&!Y.searchParams.has("beta"))Y.searchParams.set("beta","true");if(Y.href===X)return{input:$,url:Y};return{input:$ instanceof Request?new Request(Y.toString(),$):Y,url:Y}}function dX($){let X=$.split(/\n\n+/).filter((z)=>{if(z.includes(AX))return!1;for(let V of qX)if(z.includes(V))return!1;return!0}).join(`
15
+
16
+ `);for(let z of vX)X=X.replace(z.match,z.replacement);return X.trim()}var iX=8388608;function nX(){return process.env.OPENCODE_ANTHROPIC_AUTH_MEMO!=="0"}var oX=w7(dX,{maxBytes:iX,enabled:nX});function w9($){return oX.call($)}function G0($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function rX($){let J={type:"text",text:q4};if($==null)return[J];if(typeof $==="string"){let X=w9($);if(X===q4)return[J];return[J,{type:"text",text:X}]}if(G0($)){let X=typeof $.type==="string"?$.type:"text",z=typeof $.text==="string"?$.text:"";return[J,{...$,type:X,text:w9(z)}]}if(!Array.isArray($))return[J];let Y=$.map((X)=>{if(typeof X==="string")return{type:"text",text:w9(X)};if(G0(X)&&X.type==="text"&&typeof X.text==="string")return{...X,type:"text",text:w9(X.text)};return{type:"text",text:String(X)}});if(Y[0]?.text===q4)return Y;return[J,...Y]}var v7={type:"ephemeral",ttl:"1h"},T7=20;function zZ($){if(G0($.cache_control))return $.cache_control;if(G0($.cacheControl))return $.cacheControl;return null}function S9($,J){if(!G0($))return!1;return delete $.cacheControl,$.cache_control=J?{...v7}:{type:"ephemeral"},!0}function ZZ($){if(!G0($))return;delete $.cache_control,delete $.cacheControl}function VZ($){if(Array.isArray($))return $;if(typeof $==="string")return[{type:"text",text:$}];return null}function YZ($){if(Array.isArray($))return $.map(YZ);if(!G0($))return $;let J={};for(let Y of Object.keys($).sort()){if(Y==="cache_control"||Y==="cacheControl")continue;J[Y]=YZ($[Y])}return J}function jZ($){if(!G0($))return;let J=VZ($.content);if(!J?.length)return;let Y=YZ({...$,content:J});return $X("sha256").update(JSON.stringify(Y)).digest("hex")}function h7($){if(!G0($))return!1;let J=VZ($.content);return Boolean(J?.some((Y)=>G0(Y)&&zZ(Y)?.type==="ephemeral"))}function b7($){try{let J=JSON.parse($);if(!Array.isArray(J.messages))return;for(let Y=J.messages.length-1;Y>1;Y--){let X=J.messages[Y];if(!G0(X)||X.role!=="user"||!h7(X))continue;let z=jZ(X);if(!z)return;return{fingerprint:z,messageIndex:Y,messageCount:J.messages.length}}return}catch{return}}function KZ($){try{let J=JSON.parse($);if(!Array.isArray(J.messages))return[];let Y=[];for(let X of J.messages){if(!G0(X)||X.role!=="user"||!h7(X))continue;let z=jZ(X);if(z)Y.push(z)}return Y}catch{return[]}}function g7($,J){if(!G0($))return;let Y=zZ($);if(Y?.type!=="ephemeral")return;if(J)Y.ttl="1h";else delete Y.ttl}function C7($,J){_Z($,(Y)=>g7(Y,J))}function _Z($,J){if(Array.isArray($.tools))for(let Y of $.tools)J(Y);if(Array.isArray($.system))for(let Y of $.system)J(Y);else J($.system);if(!Array.isArray($.messages))return;for(let Y of $.messages)if(J(Y),G0(Y)&&Array.isArray(Y.content))for(let X of Y.content)J(X)}function y7($){ZZ($),_Z($,ZZ)}function sX($){y7($),$.cache_control={...v7}}function aX($){return G0($)&&$.type!=="thinking"&&$.type!=="redacted_thinking"}function m7($){let J=VZ($.content);if(!J?.length)return;let Y=J.filter(aX);if(!Y.length)return;return{content:J,cacheableBlocks:Y}}function tX($){if(!G0($))return!1;let J=m7($);if(!J||J.cacheableBlocks.length<2)return!1;let[Y,X,z]=J.content,K=$.role==="user"&&G0(Y)&&Y.type==="text"&&typeof Y.text==="string"&&G0(X)&&X.type==="image"&&G0(z)&&z.type==="text"&&typeof z.text==="string"&&/<memory-mural>[\s\S]*?<\/memory-mural>/.test(Y.text)?[X,z]:J.cacheableBlocks.slice(0,2);$.content=J.content;for(let D of K)S9(D,!0);return!0}function T9($){if(!G0($))return!1;let J=m7($);if(!J)return!1;let Y=J.cacheableBlocks[J.cacheableBlocks.length-1];return $.content=J.content,S9(Y,!0)}function eX($){if(!G0($))return 0;let J=$.content;if(Array.isArray(J))return J.length;if(J==null)return 0;return 1}function $2($){let J=[],Y=0;return $.forEach((X,z)=>{let V=eX(X);if(G0(X)&&X.role==="user"&&V>0)J.push({index:z,blockPosition:Y+V-1});Y+=V}),J}function J2($,J,Y,X){if(!X)return;let z=[],V=J.find((K)=>K.index===X.messageIndex&&K.index>1&&K.index<Y.index);if(V)z.push(V);for(let K of[...J].reverse()){if(K.index<=1||K.index>=Y.index||K.index===V?.index)continue;z.push(K)}for(let K of z)if(jZ($[K.index])===X.fingerprint)return K;return}function Z2($,J){let Y=$2($),X=[...Y].reverse().find((q)=>q.index>1);if(!X)return{latest:void 0,bridge:void 0,standbyAnchorMatched:!1,standbyBridgeApplied:!1};let z=J2($,Y,X,J),V=z?X.blockPosition-z.blockPosition+1:void 0,K=z&&V!=null&&V>T7?z:void 0,D=[...Y].reverse().find((q)=>q.index<X.index),F=D?X.blockPosition-D.blockPosition+1:0,P=D&&D.index>1&&F>T7?D:void 0;return{latest:X,bridge:K??P,standbyAnchorMatched:Boolean(z),standbyDistanceBlocks:V,standbyBridgeApplied:Boolean(K)}}function JZ($){return G0($)&&typeof $.text==="string"?$.text:""}function Y2($){if(!Array.isArray($.system))return;let J=$.system,Y=0;if(JZ(J[Y]).startsWith("x-anthropic-billing-header:"))Y++;if(JZ(J[Y])===q4)Y++;let X=Y+1;if(X>=J.length-1)return;let z=J[X];if(!G0(z))return;let V=J.slice(X).map(JZ).join(`
17
+ `);J.splice(X,J.length-X,{...z,type:"text",text:V})}function E7($){if(Array.isArray($.system)){let J=$.system.findIndex((z)=>G0(z)&&z.text===q4),Y=$.system.slice(J>=0?J+1:0).filter(G0),X=Y[Y.length-1];S9(X,!0)}else S9($.system,!0)}function X2($,J){if(y7($),Y2($),!Array.isArray($.messages))return E7($),{standbyAnchorMatched:!1,standbyBridgeApplied:!1};let{latest:Y,bridge:X,standbyAnchorMatched:z,standbyDistanceBlocks:V,standbyBridgeApplied:K}=Z2($.messages,J);if(!X)E7($);if(!tX($.messages[0]))T9($.messages[0]),T9($.messages[1]);if(X)T9($.messages[X.index]);if(Y)T9($.messages[Y.index]);return{standbyAnchorMatched:z,standbyDistanceBlocks:V,standbyBridgeApplied:K,...K&&X?{standbyBridgeMessageIndex:X.index}:{}}}function G2($){if(!Array.isArray($.messages))return 0;let J=0;return $.messages=$.messages.filter((Y)=>{if(!G0(Y)||!Array.isArray(Y.content))return!0;if(Y.role!=="assistant")return!0;let X=Y.content.filter((z)=>{if(!G0(z)||z.type!=="thinking")return!0;if(!EX(z.signature))return!0;return J+=1,!1});if(X.length===Y.content.length)return!0;return Y.content=X,X.length>0}),J}function LZ($){let J=$.tool_choice;if(G0(J)&&(J.type==="any"||J.type==="tool"))delete $.tool_choice}function W2($){if(!QX($.model))return null;let J=Object.hasOwn($,"thinking");if($.thinking={...VX},xX($.model)?.rejectsForcedToolChoice)LZ($);return{replacedExisting:J}}function z2($){if(TX($.model)){LZ($);let X=Object.hasOwn($,"thinking"),z=$.thinking;if(G0(z)&&(z.type==="disabled"||z.type==="between_tools")){$.thinking={type:"between_tools"};let V=$.output_config;if(G0(V)&&(V.effort==="xhigh"||V.effort==="max"))V.effort="high";return{replacedExisting:X,display:"between_tools"}}return $.thinking={...LX},{replacedExisting:X,display:"summarized"}}if(!wX($.model))return null;let J=Object.hasOwn($,"thinking"),Y=$.thinking;if(G0(Y)&&Y.type==="disabled")return $.thinking={type:"disabled"},{replacedExisting:J,display:"disabled"};return $.thinking={...OX},{replacedExisting:J,display:"summarized"}}function V2($){if(FX($.model)){LZ($);let X=Object.hasOwn($,"thinking");return $.thinking={...KX},{replacedExisting:X,display:"summarized"}}if(!M7($.model))return null;let J=Object.hasOwn($,"thinking"),Y=$.thinking;if(G0(Y)&&Y.type==="disabled"){$.thinking={type:"disabled"};let X=$.output_config;if(G0(X)&&X.effort==="xhigh")X.effort="high";else if(G0(X)&&X.effort==="max")X.effort="high";return{replacedExisting:J,display:"disabled"}}return $.thinking={..._X},{replacedExisting:J,display:"summarized"}}function j2($){if(!BX($.model))return null;delete $.temperature,delete $.top_p,delete $.top_k;let J=Object.hasOwn($,"thinking");if(G0($.thinking)&&$.thinking.type==="disabled"){$.thinking={type:"disabled"};let Y=$.output_config;if(G0(Y)&&(Y.effort==="xhigh"||Y.effort==="max"))Y.effort="high";return{replacedExisting:J,display:"disabled"}}return $.thinking={...jX},{replacedExisting:J,display:"summarized"}}function K2($,J){if(!J.enabled)return C7($,!1),delete $.cache_control,delete $.cacheControl,{};if(J.mode==="automatic")return sX($),{};if(J.mode==="hybrid")return X2($,J.hybridStandbyAnchor);C7($,!0),delete $.cacheControl;let Y=[];if(_Z($,(X)=>{if(G0(X)&&zZ(X))Y.push(X)}),G0($.cache_control))g7($,!0),Y.push($);for(let X of Y.slice(0,-4))ZZ(X);return{}}function _2($){if(!Array.isArray($.messages))return 0;for(let J=$.messages.length-1;J>=0;J--){let Y=$.messages[J];if(!G0(Y)||Y.role!=="assistant")continue;if(!Array.isArray(Y.content))return 0;if(!Y.content.some((z)=>G0(z)&&z.type==="tool_use"))return 0;let X=0;while(Y.content.length){let z=Y.content[Y.content.length-1];if(!G0(z)||z.type!=="text"||typeof z.text!=="string"||z.text.trim())break;Y.content.pop(),X++}return X}return 0}var L2=1000,O2=new NX(L2);function N2($,J,Y){return O2.resolve($,J,!Y)}function S0(){return performance.now()}function M$($){return Math.round($*10)/10}function S7($){let J=0,Y=0,X=0,z=Array.isArray($.messages)?$.messages:[];J=z.length;for(let V of z){if(!V||typeof V!=="object")continue;let K=V.content;if(!Array.isArray(K))continue;Y+=K.length;for(let D of K)if(D&&typeof D==="object"&&D.type==="tool_use")X++}return{messageCount:J,contentBlockCount:Y,toolDefinitionCount:Array.isArray($.tools)?$.tools.length:0,toolUseCount:X,systemBlockCount:Array.isArray($.system)?$.system.length:0}}async function P9($,J={}){try{let Y=S0(),X=JSON.parse($);J.perf?.("parse",{ms:M$(S0()-Y),inputBytes:$.length,...S7(X)});let z=S0(),V=Array.isArray(X.messages)?X.messages.length:void 0;kX(X.messages);let K=_2(X),D=Array.isArray(X.messages)?X.messages.length:void 0;J.perf?.("strip_trailing_assistant",{ms:M$(S0()-z),removedMessages:typeof V==="number"&&typeof D==="number"?V-D:void 0,removedWhitespaceBlocks:K});let F=S0(),P=G2(X),q=B7(X,J.serverSideFallbackEnabled===!0),v=W2(X),r=z2(X),n=V2(X),D0=j2(X);if(J.perf?.("model_normalize",{ms:M$(S0()-F),model:typeof X.model==="string"?X.model:void 0,fableMythosThinkingDisplay:v?"summarized":void 0,replacedFableMythosThinking:v?.replacedExisting??!1,sonnet5ThinkingDisplay:r?.display,replacedSonnet5Thinking:r?.replacedExisting??!1,opus5ThinkingDisplay:n?.display,replacedOpus5Thinking:n?.replacedExisting??!1,haiku55ThinkingDisplay:D0?.display,replacedHaiku55Thinking:D0?.replacedExisting??!1,removedNonAnthropicThinking:P,serverSideFallbackEnabled:q.enabled,serverFallbackMarkersRestored:q.restoredMarkers,serverFallbackMarkersDropped:q.droppedMarkers,hasOutputConfig:Object.hasOwn(X,"output_config")}),J.laneStart===!0)X.max_tokens=1,delete X.thinking;if(y3(X,J.midConversationEffortEnabled===!0,J.midConversationEffortPlan,J.midConversationEffortResolvedPlan,J.midConversationEffortPlanVersions),YX(X,J.thinkingPrefixMismatchBehavior??"account-default"),J.turnEndNoteEnabled)XX(X,{tools:J.turnEndNote?.tools});let g=S0(),z0=Array.isArray(X.messages)&&X.messages.some((p)=>p.role==="user")?WX(X.messages,void 0,zX,J.sessionId?N2(J.sessionId,X.messages,J.laneStart===!0):void 0,J.billingLineage?.promptId?{...J.billingLineage,promptIndex:J.billingLineage.promptIndex??DX(X.messages)}:J.billingLineage):null;J.perf?.("billing_header",{ms:M$(S0()-g),hasBillingHeader:Boolean(z0)});let S=S0();if(X.system=rX(X.system),J.perf?.("system_identity",{ms:M$(S0()-S),systemBlockCount:Array.isArray(X.system)?X.system.length:0}),z0&&Array.isArray(X.system))X.system.unshift({type:"text",text:z0});let J0=S0(),h0=K2(X,{enabled:J.cache1hEnabled??!1,mode:J.cache1hMode??"explicit",hybridStandbyAnchor:J.hybridStandbyAnchor});if(J.perf?.("cache_strategy",{ms:M$(S0()-J0),enabled:J.cache1hEnabled??!1,mode:J.cache1hMode??"explicit",...h0}),J.fastModeEnabled&&CX(X.model))X.speed="fast";else if(X.speed==="fast")delete X.speed;if(J.cacheDiagnosticsPreviousMessageId!==void 0&&IX(X).split(",").includes(B4))W9(X,J.cacheDiagnosticsPreviousMessageId);let O0=S0();if(J.identity)ZX(X,J.identity);J.perf?.("metadata",{ms:M$(S0()-O0),hasAccountUuid:Boolean(J.identity?.accountUuid)});let B0=S0();if(J.modelRemapEnabled===!0)RX(X);let d=yX(X.tools),M0=mX(X);J.perf?.("prefix_tools_stringify",{ms:M$(S0()-B0),outputBytesBeforeSign:M0.length,...S7(X)});let W$=S0(),f0=await fX(M0);return J.perf?.("cch_sign",{ms:M$(S0()-W$),outputBytes:f0.length}),J.onToolNameMap?.(d),f0}catch(Y){if(Y instanceof E0||Y instanceof hX)throw Y;return $}}var c7=new TextEncoder;function D2(){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 C9($,J){if(!J)return;$[J]=($[J]??0)+1}function S1($){return c7.encode($).byteLength}function n$($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function $$($,J){let Y=$?.[J];return typeof Y==="string"?Y:void 0}function H2($,J){let Y=$?.[J];return typeof Y==="number"?Y:void 0}function OZ($){if(!$.trim())return null;let J,Y=[];for(let v of $.split(/\r?\n/)){if(v.startsWith("event:")){J=v.slice(6).trim();continue}if(v.startsWith("data:")){let r=v.slice(5);Y.push(r.startsWith(" ")?r.slice(1):r)}}let X=Y.join(`
18
+ `),z={event:J,rawBytes:S1($),dataBytes:S1(X)};if(!X||X==="[DONE]")return z.type=X==="[DONE]"?"done":void 0,z.event??=z.type,z;let V;try{V=JSON.parse(X)}catch{return z}let K=n$(V),D=n$(K?.delta),F=n$(K?.content_block),P=n$(K?.message),q=n$(K?.usage)??n$(P?.usage);if(z.type=$$(K,"type"),z.event??=z.type,z.index=H2(K,"index"),z.contentBlockType=$$(F,"type"),z.deltaType=$$(D,"type"),z.stopReason=$$(D,"stop_reason")??$$(K,"stop_reason"),z.deltaType==="text_delta")z.textDeltaBytes=S1($$(D,"text")??"");if(z.deltaType==="thinking_delta")z.thinkingDeltaBytes=S1($$(D,"thinking")??"");if(z.deltaType==="input_json_delta")z.inputJsonDeltaBytes=S1($$(D,"partial_json")??"");if(z.deltaType==="signature_delta")z.signatureDeltaBytes=S1($$(D,"signature")??"");if(z.contentBlockType==="redacted_thinking")z.redactedThinkingBytes=S1($$(F,"data")??"");if(q)z.usage=q,z.stopReason??=$$(P,"stop_reason");if(z.type==="message_start"&&P)z.message=P;return z}function d1($){let J=$.indexOf(`
19
+
20
+ `),Y=$.indexOf(`\r
21
+ \r
22
+ `);if(J===-1)return Y===-1?null:{index:Y,length:4};if(Y===-1||J<Y)return{index:J,length:2};return{index:Y,length:4}}function A7($,J,Y,X){if(!J||$.disabled)return;$.pending+=J;while(!0){let z=d1($.pending);if(!z)break;let V=$.pending.slice(0,z.index);$.pending=$.pending.slice(z.index+z.length);let K=OZ(V);if(!K)continue;if($.events++,C9($.eventCounts,K.event??"unknown"),C9($.typeCounts,K.type),C9($.deltaTypeCounts,K.deltaType),C9($.contentBlockTypeCounts,K.contentBlockType),$.textDeltaBytes+=K.textDeltaBytes??0,$.thinkingDeltaBytes+=K.thinkingDeltaBytes??0,$.inputJsonDeltaBytes+=K.inputJsonDeltaBytes??0,$.signatureDeltaBytes+=K.signatureDeltaBytes??0,$.redactedThinkingBytes+=K.redactedThinkingBytes??0,$.last=K,X?.(K),K.dataBytes>0&&!K.type&&!K.event)$.parseErrors++}if(c7.encode($.pending).byteLength>Y)$.pending="",$.disabled=!0,$.pendingOverflowCount++}function U2(){return{pending:"",completed:!1,disabled:!1,resyncCarry:""}}function Q2($,J,Y){if(!J||$.completed)return null;if($.disabled){let z=$.resyncCarry+J,V=d1(z);if(!V)return $.resyncCarry=z.slice(-3),null;if($.disabled=!1,$.resyncCarry="",J=z.slice(V.index+V.length),!J)return null}$.pending+=J;let X=null;while(!0){let z=d1($.pending);if(!z)break;let V=$.pending.slice(0,z.index);$.pending=$.pending.slice(z.index+z.length);let K=OZ(V);if(K?.type!=="message_delta"||!K.stopReason)continue;$.completed=!0,X??=K.stopReason==="refusal"?{type:"content-filter"}:{type:"complete",finishReason:K.stopReason}}if(new TextEncoder().encode($.pending).byteLength>Y){let z=$.pending;$.pending="",$.disabled=!0,$.resyncCarry=z.slice(-3)}return X}function B2(){return{pending:"",disabled:!1}}function P7($){let J=OZ($);if(J?.type!=="message_delta"||J.stopReason!=="max_tokens")return $;return $.replace(/("stop_reason"\s*:\s*)"max_tokens"/,'$1"end_turn"')}function F2($,J,Y,X=!1){if(!J&&!X)return"";if($.disabled)return J;if(new TextEncoder().encode($.pending+J).byteLength>Y){let V=$.pending+J;return $.pending="",$.disabled=!0,V}$.pending+=J;let z="";while(!0){let V=d1($.pending);if(!V)break;let K=$.pending.slice(0,V.index),D=$.pending.slice(V.index,V.index+V.length);$.pending=$.pending.slice(V.index+V.length),z+=P7(K),z+=D}if(X&&$.pending)z+=P7($.pending),$.pending="";return z}function w2(){return{pending:"",disabled:!1,resyncCarry:""}}function T2($,J){let Y=$?.toLowerCase(),X=J.toLowerCase();return Y==="api_error"||Y==="overloaded_error"||Y==="server_error"||Y==="internal_server_error"||X.includes("internal server error")||X.includes("server overloaded")}function C2($,J){let Y=$?`${$}: ${J}`:J,X=Error(`Anthropic stream error: ${Y}`);if(X.code="ECONNRESET",X.syscall="anthropic-sse",$)X.providerErrorType=$;return X}function E2($){let J=M7($)?"Opus 5":"Fable",Y=Error(`${J} response was blocked by the provider content filter; retrying with Opus 4.8`);return Y.code="ECONNRESET",Y.syscall="anthropic-sse",Y.providerErrorType="refusal",Y}function S2($){if(!$.includes("error"))return null;let J,Y=[];for(let P of $.split(/\r?\n/)){if(P.startsWith("event:")){J=P.slice(6).trim();continue}if(P.startsWith("data:")){let q=P.slice(5);Y.push(q.startsWith(" ")?q.slice(1):q)}}let X=Y.join(`
23
+ `);if(!X||X==="[DONE]")return null;let z;try{z=JSON.parse(X)}catch{return null}let V=n$(z);if(J!=="error"&&$$(V,"type")!=="error")return null;let K=n$(V?.error),D=$$(K,"type")??$$(K,"code")??void 0,F=$$(K,"message")??$$(V,"message")??D??"Anthropic stream error";if(!T2(D,F))return null;return C2(D,F)}function A2($){if(!$.includes("relay_upstream_error"))return;let J=[];for(let Y of $.split(/\r?\n/))if(Y.startsWith("data:")){let X=Y.slice(5);J.push(X.startsWith(" ")?X.slice(1):X)}if(!J.length)return;try{let Y=n$(JSON.parse(J.join(`
24
+ `))),X=n$(Y?.error);if($$(X,"type")!=="relay_upstream_error")return;let z=X?.status;if(typeof z==="number"&&Number.isInteger(z))return{status:z,source:"relay_status_field"};let K=$$(X,"message")?.match(/HTTP\s+(\d{3})\b/i);return K?{status:Number(K[1]),source:"relay_message_parse"}:void 0}catch{return}}function q7($,J,Y,X){if(!J)return null;if($.disabled){let V=$.resyncCarry+J,K=d1(V);if(!K)return $.resyncCarry=V.slice(-3),null;if($.disabled=!1,$.resyncCarry="",J=V.slice(K.index+K.length),!J)return null}$.pending+=J;let z=null;while(!0){let V=d1($.pending);if(!V)break;let K=$.pending.slice(0,V.index);$.pending=$.pending.slice(V.index+V.length);let D=A2(K);if(D!==void 0)X?.(D);let F=S2(K);z??=F}if(new TextEncoder().encode($.pending).byteLength>Y){let V=$.pending;$.pending="",$.disabled=!0,$.resyncCarry=V.slice(-3)}return z}function P2($){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 p7($,J={}){if(!$.body)return $;let Y=$.body.getReader(),X=new TextDecoder("utf-8",{ignoreBOM:!0}),z=new TextEncoder,V=J.responseMode==="json",K=uX(J.toolNameMap,V),D=!0,F="",P=0,q=0,v=0,r=0,n=0,D0=!1,g=!1,z0=S0(),S=S0(),J0=J.perf||J.onMessageStart||J.onMessageDelta?D2():void 0,h0="",O0=0,B0=!1,d=(k0)=>{if(!k0)return;try{k0()}catch{}},M0=w2(),W$=J.onContentFilter||J.onComplete?U2():void 0,f0=J.laneStart&&J.laneStartOAuthServed!==!1?B2():void 0,p=!1,w$=!1,y4=(k0=!1)=>{if(!J.onContentFilter)return!1;if(!p)p=!0,w$=J.onContentFilter({completedToolUse:k0})!==!1;return w$},j1=J.serverSideFallbackModel?F7({requestedModel:J.serverSideFallbackModel,maxPendingBytes:m$,onOutcome:J.onServerSideFallbackOutcome,onRefusalAfterToolUse:J.onContentFilter?()=>y4(!0):void 0}):void 0,k1=(k0)=>{if(!W$)return null;let x$=Q2(W$,k0,m$);if(x$?.type==="content-filter"&&J.onContentFilter)return y4()?E2(J.contentFilterModel):null;if(x$?.type==="complete")J.onComplete?.(x$.finishReason);return null},m4=(k0,x$=!1)=>f0?F2(f0,k0,m$,x$):k0,H1=()=>{if(g)return;g=!0,Y.releaseLock()},r9=async(k0)=>{try{await Y.cancel(k0)}catch{}finally{H1()}},s9=(k0={})=>({chunks:P,pulls:q,inputBytes:v,outputBytes:r,pendingChars:K.pendingLength(),sseErrorPending:M0.pending.length,sseFinishPending:W$?.pending.length??0,sseFinishDisabled:W$?.disabled??!1,serverFallbackPending:j1?.pendingLength()??0,rewriteMs:M$(n),totalMs:M$(S0()-S),...J0?P2(J0):{},...k0}),s$=(k0,x$={})=>{J.perf?.(k0,s9(x$))};J.perf?.("stream_tool_prefix_wrapper_created",{status:$.status,hasBody:!0});let a9=new ReadableStream({async pull(k0){if(q++,!D0)D0=!0,s$("stream_tool_prefix_first_pull");while(!0){let x$=S0();try{let{done:t1,value:I$}=await Y.read(),e1=M$(S0()-x$);if(t1){let A0=X.decode();if(J0&&!V)A7(J0,A0,m$,(b0)=>{let X4=b0.message;if(b0.type==="message_start"&&X4)d(()=>J.onMessageStart?.(X4));if(b0.type==="message_delta"&&(b0.usage||b0.stopReason))d(()=>J.onMessageDelta?.({...b0.usage?{usage:b0.usage}:{},...b0.stopReason?{stopReason:b0.stopReason}:{}}))});if(V){let b0=z.encode(A0).byteLength;if(O0+b0<=m$)h0+=A0,O0+=b0;else B0=!0}if(V&&!B0)try{let b0=JSON.parse(h0);if(b0&&typeof b0==="object"&&!Array.isArray(b0))d(()=>J.onMessageResponse?.(b0))}catch{}let c$=S0(),Z4=j1?j1.push(A0)+j1.flush():A0,C$=m4(Z4,!0),C0=V?k1(C$):q7(M0,A0,m$,J.onRelayUpstreamError)??k1(C$);if(C0)throw s$("stream_tool_prefix_retryable_error",{providerErrorType:C0.providerErrorType}),await r9(C0),C0;let Y4=K.push(C$,!0);if(n+=S0()-c$,Y4||F){let b0=z.encode(F+Y4);F="",r+=b0.byteLength,k0.enqueue(b0)}if(s$("stream_tool_prefix_rewrite",{readMs:e1}),H1(),J.onStreamEnd)try{await J.onStreamEnd()}catch{}k0.close();return}P++,v+=I$.byteLength;let T$=X.decode(I$,{stream:!0});if(D&&T$){if(D=!1,T$.charCodeAt(0)===65279)F=T$[0]??"",T$=T$.slice(1)}if(V){let A0=I$.byteLength;if(O0+A0<=m$)h0+=T$,O0+=A0;else B0=!0}if(J0&&!V)A7(J0,T$,m$,(A0)=>{let c$=A0.message;if(A0.type==="message_start"&&c$)d(()=>J.onMessageStart?.(c$));if(A0.type==="message_delta"&&(A0.usage||A0.stopReason))d(()=>J.onMessageDelta?.({...A0.usage?{usage:A0.usage}:{},...A0.stopReason?{stopReason:A0.stopReason}:{}}))});let z$=S0(),O$=j1?j1.push(T$):T$,$4=m4(O$),U1=V?k1($4):q7(M0,T$,m$,J.onRelayUpstreamError)??k1($4);if(U1)throw s$("stream_tool_prefix_retryable_error",{providerErrorType:U1.providerErrorType,readMs:e1,lastChunkBytes:I$.byteLength}),H1(),U1;let J4=K.push($4);if(n+=S0()-z$,J4){let A0=z.encode(F+J4);F="",r+=A0.byteLength,k0.enqueue(A0)}let N$=S0();if(P===1||P%25===0||N$-z0>5000)z0=N$,s$("stream_tool_prefix_progress",{readMs:e1,lastChunkBytes:I$.byteLength});if(J4)return}catch(t1){let I$=XZ(t1,J.toolNameMap);if(s$("stream_tool_prefix_error"),I$ instanceof R4)await GZ(Y,I$),g=!0,d(J.onToolNameRefusal);else H1();throw I$}}},async cancel(k0){s$("stream_tool_prefix_cancel");try{await Y.cancel(k0)}finally{H1()}}});return new Response(a9,{status:$.status,statusText:$.statusText,headers:$.headers})}import{mergeNativeSettingsSection as lG,nativeCacheKeepAlways as dG,nativeSettingsRecord as iG}from"@cortexkit/anthropic-auth-core";var H8="physical send failed before a response",KG="__OPENCODE_ANTHROPIC_AUTH_COMMAND_HANDLED__",U8="~effect/http/HttpServerResponse",Q8="~effect/http/Cookies",B8="~effect/http/HttpBody",_G="~effect/ErrorReporter/ignore",LG="https://api.anthropic.com/v1/messages",v8=new WeakSet;function o9($){let J=new Response(JSON.stringify({type:"error",error:{type:"invalid_request_error",message:$}}),{status:400,headers:{"content-type":"application/json"}});return v8.add(J),J}async function F8($,J){if(!J?.aborted)return;await $.body?.cancel().catch(()=>{}),J.throwIfAborted()}function fZ($,J){return($.status!==400||!v8.has($))&&zG($.status,J)}function w8($){return f.warn("effort-history","refused uncorrelated per-message effort request",{check:$.check,...$.details}),o9($.message)}function T8($){return f.warn("transform","refused request ending on assistant history",{check:$.check,...$.details}),o9($.message)}var OG=60000,C8=60000,h8=240,NG=h8,DG=600000;function HG($,J){return($?.accounts??[]).some((Y)=>Y.id===J&&v0(Y)&&T0(Y))}function UG($){let J=($?.accounts??[]).find((Y)=>v0(Y)&&T0(Y));if(V1($)==="fallback-first"&&J)return{activeId:J.id,route:"fallback-first"};return{activeId:"main",route:"main"}}function E8($,J){if($?.activeId==="main"||$?.activeId&&HG(J,$.activeId))return{activeId:$.activeId,route:$.route};return UG(J)}function b8($,J,Y){let X=Date.now()-$.lastUpdated;if(!$.activeId||X<0||X>DG)return E8(Y,J);return E8({activeId:$.activeId,route:$.route},J)}async function QG($,J,Y){let X;try{X=await J()}catch(z){return f.warn("sidebar","account storage reload failed; routing preserved",{message:z instanceof Error?z.message:String(z)}),{...$.activeId?{activeId:$.activeId,route:$.route}:Y??{activeId:"main",route:"main"},freshStorage:null}}return{...b8($,X,Y),freshStorage:X}}async function BG($){await d9()?.beforeStorageLoad?.();let J;try{J=await $()}catch{return{activeId:"main",route:"main",freshStorage:null}}finally{await d9()?.afterStorageLoad?.()}await d9()?.beforeSidebarRead?.();let Y=await f8();return{...b8(Y,J),freshStorage:J}}var FG=4,wG=25,TG=1,S8=!1;function i9(){return process.env.OPENCODE_ANTHROPIC_AUTH_PERF==="1"}function Z0(){return performance.now()}function q0($){return Math.round($*10)/10}function A8($){return Math.floor(Math.random()*Math.max(0,$))}function a1($){if(typeof $==="string")return $;if($ instanceof URL)return $.toString();return $.url}function f1($,J){return J?.method??($ instanceof Request?$.method:void 0)}async function h4($,J){if(J?.body!==void 0)return J.body;if(!($ instanceof Request)||$.body===null)return;try{return await $.clone().text()}catch{return}}function CG(){if(S8||!1||!i9())return;S8=!0;let $=100,J=250,Y=Z0()+$;setInterval(()=>{let X=Z0(),z=X-Y;if(Y=X+$,z<J)return;r$("[perf] opencode event_loop_lag",{lagMs:q0(z),thresholdMs:J})},$).unref?.()}function EG($){let J=Z0(),Y={requestId:String(TG++),start:J,last:J,mark(X,z){let V=Z0();if(i9())r$("[perf] opencode request stage",{requestId:Y.requestId,stage:X,deltaMs:q0(V-Y.last),totalMs:q0(V-Y.start),...z});Y.last=V},done(X,z){let V=Z0();if(i9())r$("[perf] opencode request done",{requestId:Y.requestId,stage:X,deltaMs:q0(V-Y.last),totalMs:q0(V-Y.start),...z});Y.last=V}};if(i9())r$("[perf] opencode request start",{requestId:Y.requestId,...$});return Y}function g8($,J){let Y=/^msg_([0-9a-fA-F]{12})/.exec($);if(!Y)return;let X=BigInt(`0x${Y[1]}`);if(X<=0n)return;let V=`msg_${(X-1n).toString(16).padStart(12,"0")}${"z".repeat(14)}`,K=J&&V<=J?`${J}z`:V;if(K.length>128||K>=$)return;return K}async function P8($,J,Y,X={}){let z=$.client.session,V=await O9($.client,J),K={path:{id:J},body:{noReply:X.noReply??!0,parts:[{type:"text",text:Y,ignored:!0}]}};if(X.beforeActiveAssistant){let D=X.latestPreparedMessageId?.(),F=V?.latestUserMessageId,P=D&&(!F||D>F)?D:F,q=V?.latestAssistantMessageId?g8(V.latestAssistantMessageId,P):void 0;if(!q)return!1;K.body.messageID=q}if(V?.agent)K.body.agent=V.agent;if(V?.model)K.body.model=V.model;if(V?.variant)K.body.variant=V.variant;if(X.canSend&&!X.canSend())return!1;if(K.body.messageID)X.onPreparedMessageId?.(K.body.messageID);if(typeof z?.promptAsync==="function")return await z.promptAsync(K),!0;if(typeof z?.prompt==="function")return await Promise.resolve(z.prompt(K)),!0;throw Error("OpenCode session prompt API is unavailable for ignored replies.")}function SG(){throw Object.assign(Error(KG),{[U8]:U8,[_G]:!0,status:204,statusText:void 0,headers:{},cookies:{[Q8]:Q8,cookies:{}},body:{[B8]:B8,_tag:"Empty"}})}function AG($){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 PG($){if($.some((J)=>J.includes("<use_parallel_tool_calls>")))return!1;return $.push(b6),!0}var qG={input:0,output:0,cache:{read:0,write:0}},MG=1000;function R$($){return $}function RG($,J){let Y=g4($);return`${Y} content filter detected. Switched to Opus 4.8 for a ${J}-response recovery window before trying ${Y} again.`}function xG($){let J=g4($);return`${J} recovery window complete. Returning to ${J}.`}function g4($){if(P6($))return"Opus 5.5";if(A6($))return"Opus 5";if(S6($)){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 IG($,J){return`Anthropic safety fallback active: ${g4($)} → ${g4(J)}. Follow-up requests may remain on the fallback model for about one hour.`}function fG($){return`Anthropic safety fallback ended. Returning to ${g4($)}.`}function kG(){return{input:R9.input,output:R9.output,cache:{read:R9.cacheRead,write:R9.cacheWrite5m},tiers:[{tier:{type:"context",size:l2},input:q9.input,output:q9.output,cache:{read:q9.cacheRead,write:q9.cacheWrite5m}}]}}function vG($){let J=$["claude-opus-4-8"]??$["claude-opus-4-5"]??Object.values($)[0];if(!J)return $;return{...$,...Object.fromEntries(Object.values(p2).map((Y)=>{let X=H6(Y.id),z=X.pricing;return[Y.id,{...J,id:Y.id,name:Y.name,api:J.api?{...J.api,id:Y.id}:void 0,cost:{input:z.input,output:z.output,cache:{read:z.cacheRead,write:z.cacheWrite5m}},limit:{...J.limit??{},context:X.contextWindow,output:X.maxOutputTokens},capabilities:{...J.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:X.releaseDate}]})),...$[M9]?{}:{[M9]:{...J,id:M9,name:"Claude Haiku 5.5",api:J.api?{...J.api,id:M9}:void 0,cost:kG(),limit:{...J.limit??{},context:u2,output:d2},capabilities:{...J.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:i2,variants:n9()}},...$[f9]?{}:{[f9]:{...J,id:f9,name:"Claude Sonnet 5.5",api:J.api?{...J.api,id:f9}:void 0,cost:{input:k9.input,output:k9.output,cache:{read:k9.cacheRead,write:k9.cacheWrite5m}},limit:{...J.limit??{},context:s2,output:a2},capabilities:{...J.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:t2,variants:n9()}},...$[x9]?{}:{[x9]:{...J,id:x9,name:"Claude Opus 5.5",api:J.api?{...J.api,id:x9}:void 0,cost:{input:I9.input,output:I9.output,cache:{read:I9.cacheRead,write:I9.cacheWrite5m}},limit:{...J.limit??{},context:n2,output:o2},capabilities:{...J.capabilities??{},reasoning:!0,attachment:!0,toolcall:!0},release_date:r2,variants:n9()}}}}var hG=["low","medium","high","xhigh","max"];function n9($=hG){return Object.fromEntries($.map((J)=>[J,{thinking:{type:"adaptive",display:"summarized"},effort:J}]))}function bG($){return Object.fromEntries(Object.entries($).map(([J,Y])=>{let X=Y.api?.id??Y.id??J,z=JG(X)?.efforts.variants;return[J,z?{...Y,variants:n9(z)}:Y]}))}function gG($){return Object.fromEntries(Object.entries($).map(([J,Y])=>[J,{...Y,cost:qG}]))}var yG=2000,kZ="@cortexkit/opencode-anthropic-auth",b4;function mG(){if(b4!==void 0)return b4;b4=kZ;try{let $=JSON.parse(M2(x2(R2(I2(import.meta.url)),"..","package.json"),"utf8"));if($.name===kZ&&typeof $.version==="string"&&$.version.trim())b4=`${kZ}@${$.version.trim()}`}catch{}return b4}function cG(){return["The Claude menu opens in OpenCode's terminal window when the plugin's TUI part is loaded.",`In the terminal, add "${mG()}" to the plugin list in tui.json (or rerun setup), then restart OpenCode.`,"In OpenCode Desktop, use the text menu below."].join(`
25
+ `)}function pG(){return process.env.OPENCODE_CLIENT==="desktop"}function q8(){return process.env.OPENCODE_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE?.trim()||process.env.CLAUSTRUM_SUBC_CONNECTION?.trim()||void 0}var uG=async($,J={})=>{let Y={setTimeout:globalThis.setTimeout,clearTimeout:globalThis.clearTimeout,setInterval:globalThis.setInterval,clearInterval:globalThis.clearInterval,...J},X=J.authorize??l7;CG();let{client:z}=$,V=globalThis.fetch,K=N6(),D=B6(F6(K)),F=600000,P=50,q=new Map;function v(){let Z=Date.now();for(let[G,W]of q)if(Z-W.createdAt>F)q.delete(G)}function r(Z,G){if(v(),q.size>=P){let W="",j=1/0;for(let[_,L]of q)if(L.createdAt<j)j=L.createdAt,W=_;if(W)q.delete(W)}q.set(Z,G)}function n(Z){v();let G=q.get(Z);if(!G)return;if(Date.now()-G.createdAt>F){q.delete(Z);return}return G}let D0;try{D0=await G6({role:"opencode1",onLockEvent:J.nativeLocal?.onLockEvent})}catch(Z){let G=VG(Z);if(G)throw Error(G,{cause:Z});throw Z}let g=await ZG(K,void 0,D0.layout),z0=D0.kind==="state-home"?void 0:D0.registration,S=k2({paths:g,host:"opencode",local:J.nativeLocal,vault:J.claustrumScopedConnect?{connect:J.claustrumScopedConnect}:void 0}),J0=S.quotaObservations,h0=null;function O0(Z){return k6(Z)}function B0(Z,G){return Z?O0(Z.binding):G?JSON.stringify([G.credentialId,G.accountIdentity,G.recordVersion]):void 0}function d(Z,G,W,j=h0){let _=J0.get(Z);if(!_||!G||_.lineage!==G||_.accountUuid!==W||A1(_.entry.quota,j,_.entry.checkedAt)<=Date.now())return;return _}function M0(Z,G,W,j,_=h0){let L=d(Z,G,W,_);if(!L)return j;if(!j)return{...L.entry,refreshAfter:A1(L.entry.quota,_,L.entry.checkedAt)};let N=L.entry.quota.source!=="headers"&&M1(j.quota)>M1(L.entry.quota)?j.quota:K8(j.quota,L.entry.quota);return{...L.entry,quota:N,refreshAfter:A1(N,_,M1(N))}}function W$(Z,G,W){if(!J0.has(Z.id))return Z.quota;let j=Z.binding?O0(Z.binding):B0(void 0,W),_=M1(Z.quota);return M0(Z.id,j,Z.accountIdentity,Z.quota?{quota:Z.quota,checkedAt:_,refreshAfter:A1(Z.quota,G,_)}:null,G)?.quota}let f0;async function p(Z=K){if(Z!==K)throw Error("Native account storage mismatch");let G=await S.read();if(h0=G.policyStorage,!f0){let _=G.accounts.find((L)=>L.id==="main")?.binding;if(_)f0={rowId:_.rowId,credentialEpoch:_.credentialEpoch}}if(G.mode!=="claustrum")return G.policyStorage;let W=G.accounts.find((_)=>_.id==="main"&&_.source==="vault"),j=R$(W?.accountIdentity);return{...G.policyStorage,claustrum:{...G.policyStorage.claustrum,mode:"claustrum",scopedRoster:!0,primaryAccount:W?.credentialId&&j?{credentialId:W.credentialId,accountId:j,state:W.state??"cold",enabled:W.enabled}:void 0}}}async function w$(Z,G){return await S.updateSettings((W)=>lG(W,Z,G)),p()}let y4=async(Z)=>{return await S.updateSettings((G)=>({...G,claudeCache:{...iG(G.claudeCache),enabled:Z,mode:k4({...G,version:1,accounts:[]})}})),p()},j1=(Z)=>w$("claudeCache",{mode:Z}),k1=(Z)=>w$("cacheKeep",{enabled:Z}),m4=async()=>{return await S.updateSettings(dG),p()},H1=(Z,G)=>w$("cacheKeep",{enabled:!0,always:!1,startHour:Z,endHour:G}),r9=(Z)=>w$("cacheKeep",{subagents:Z}),s9=(Z)=>w$("dump",{enabled:Z}),s$=(Z)=>w$("claudeFast",{enabled:Z}),a9=async(Z)=>{return await S.setLoggingLevel(Z),p()},k0=(Z,G=K)=>w$("prime",{enabled:Z}),x$=(Z,G=K)=>w$("routing",{mode:Z}),t1=(Z)=>w$("killswitch",Z),I$=(Z,G,W=K)=>S.setEnabled(Z,G),e1=(Z,G=K)=>S.remove(Z),T$=(Z,G=K,W)=>S.reorder(Z,W),z$=null;try{z$=await p()}catch{}function O$(Z){return Boolean(Z&&v4(Z)==="claustrum"&&Z.claustrum?.scopedRoster===!0)}function $4(Z=K,G=$.directory){if(Z!==K)throw Error("Native vault storage mismatch");return S.vault}let U1=Z6("native-auth");async function J4(Z=K){KJ?.close(),await U1.drain(),await S.drainQuotaPublications(),await Promise.all([...YJ.values()].map((G)=>G.drain())),await S.drainRoutingPublications(),await S.close()}function N$(){if(process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("Native OAuth cannot serve while OPENCODE_AUTH_CONTENT is set")}function A0(Z){let G=R$(Z);if(!G)throw Error("Native wire identity requires an admitted provider account");return D6(G,G)}class c$ extends Error{account;checkIntervalMs;constructor(Z,G){super("OAuth account cannot serve the requested model under current quota policy");this.account=Z;this.checkIntervalMs=G}}class Z4 extends Error{constructor(){super("Native OAuth requires a Claude Pro/Max credential. An API key belongs in OpenCode stock Anthropic authentication.")}}class C$ extends Error{account;tokenRefreshFailed;failure;constructor(Z,G,W=!1,j){super(j?.kind==="provider"&&j.status!==void 0?`Claude OAuth refresh failed: ${j.status} — ${j.classification==="invalid-grant"?"invalid_grant":"OAuth operation failed"}`:`Native OAuth authorization refused: ${G}`);this.account=Z;this.tokenRefreshFailed=W;this.failure=j}}async function C0(Z,G,W,j,_="serve",L){N$(),G?.throwIfAborted();let N=L??await S.read(),O=N.accounts.find((c)=>c.id===Z);if(_==="cachekeep"&&(O?.type!=="oauth"||!v0(O)))throw new q1("account-unavailable");if(O?.state==="unsupported-access")throw new Z4;if(O?.source==="vault"&&!v0(O))throw new C$(O,"not-active");if(O?.type!=="oauth"||!v0(O))throw Error("Native OAuth account is unavailable");let U=(c,i,L0)=>{let g0=W$(c,i,L0),P0=_==="last-main"&&Z==="main"&&V1(i)!=="sticky-balanced";if(j&&(X1(i)&&!W1(g0,i,Z==="main"?void 0:Z,j)||!P0&&!u9(g0,j)))throw _==="cachekeep"?new q1("account-policy"):new c$(c,Y8(i))};U(O,N.policyStorage);let H;if(O.source==="vault"){let c=await S.authorizeVault(Z,G).catch((i)=>{if(G?.throwIfAborted(),_==="cachekeep"){let L0=I6(i);if(L0)throw L0}if(i instanceof R6&&["not-active","route-declined","route-unavailable"].includes(i.code))throw new C$(O,i.code);throw i});H={accessToken:c.accessToken,expires:c.expiresAtMs??void 0,accountIdentity:c.accountIdentity,scopedAttempt:c}}else{let c=await S.authorizeLocal(Z,{signal:G,rejectedAccessToken:W,intent:W?"refresh":_==="last-main"||_==="cachekeep"?"serve":_});if(c.status!=="usable"){if(_==="cachekeep"){let i=f6(c);if(i)throw i}throw new C$(O,c.status,c.status==="failed"&&c.failure.kind==="provider",c.status==="failed"?c.failure:void 0)}H={accessToken:c.access,expires:c.expires,accountIdentity:c.binding.identity,localSubject:c.subject,localSource:c.source}}let A=await S.read(),y=A.accounts.find((c)=>c.id===Z);if(G?.aborted)throw G.reason??Error("Request aborted");if(!y||!v0(y)||y.source!==O.source||y.accountIdentity!==H.accountIdentity)throw _==="cachekeep"?new q1("credential-changed"):Error("Native OAuth account changed before dispatch");if(H.localSubject&&(!y.binding||y.binding.storageId!==H.localSubject.binding.storageId||y.binding.rowId!==H.localSubject.binding.rowId||y.binding.credentialEpoch!==H.localSubject.binding.credentialEpoch||y.binding.identity!==H.localSubject.binding.identity))throw _==="cachekeep"?new q1("credential-changed"):Error("Native local account binding changed before dispatch");if(H.scopedAttempt&&y.credentialId!==H.scopedAttempt.credentialId)throw _==="cachekeep"?new q1("credential-changed"):Error("Native vault credential binding changed before dispatch");return U(y,A.policyStorage,H.scopedAttempt),H}async function Y4(Z,G){let j=(await S.read()).accounts.find((L)=>L.id===Z);if(j?.type!=="oauth")throw Error("Native OAuth account is unavailable");let _=j.source==="vault"?await S.authorizeVault(Z,G):await S.captureLocalSubject(Z);if(!await S.resetBackoff(Z,_))throw Error("Native reset fence changed")}let b0=new WeakMap,X4=new WeakSet;async function t9(Z,G){if(X4.has(Z))return;X4.add(Z),await S.vault.reportFailure(Z,401,G).catch(()=>{f.warn("claustrum","native auth-failure report unavailable")})}async function c4(Z,G,W){let j=await S.vault.prepareRetry(Z,W,G);return j.retry?j.receipt:void 0}let e9=Q7(process.env.OPENCODE_ANTHROPIC_AUTH_FALLBACK_MODE),R0=new nJ,K1=new Map;function $J(Z){for(let{recoveryKey:G}of R0.sourceWarmsForSession(Z))R0.dropSourceWarm(G);for(let G of t0.trackedSessions()){let W=S4(G.id);if(W&&W.sessionId===Z)t0.untrack(G.id)}for(let G of[...K1.keys()])if(G.startsWith(`${Z}\x00`))K1.delete(G)}let JJ=new sJ,Q1=new uJ,v1=new qJ,p$=new Map,E$=new Map,f$=new Map,p4=new Map,V$=new Set,ZJ=new Map,u4=new Map,a$=new Map,G4=new Map,YJ=new Map;async function vZ(){let Z=await S.read(),G=Z.routingPath;if(!G)throw Error(Z.mode==="claustrum"?"Vault routing storage is unavailable":"Native routing storage is unavailable");let W;if(Z.mode==="claustrum"){W=new Map;for(let _ of Z.accounts)if(_.source==="vault"&&_.accountIdentity)W.set(_.id,_.accountIdentity)}let j=YJ.get(G);if(!j)j=new YG({path:G,vaultSeed:Z.routingSeed,onLockEvent:S.onLockEvent,relocationGuard:S.relocationGuard,localRecoveryPath:Z.mode==="local"?Z.routingRecoveryPath:void 0}),YJ.set(G,j);return j.setVaultSeed(Z.routingSeed),{router:j,...W&&{accountIdentities:W}}}let h=new s6({storage:z$,pauseBetweenQuotaCalls:J.quotaCallPause,fetchQuotaSnapshot:(Z,G)=>{N$();let W=Z.kind==="main"?"main":Z.accountId;if(!W)throw Error("Quota request has no account identity");return S.fetchQuota(W,void 0,void 0,G,Z.purpose)}});function W4(Z){return["five_hour","seven_day"].some((G)=>(Z?.[G]?.remainingPercent??1)<=0)}function hZ(Z,G,W=!1){if(!Z||Z.quota?.enabled===!1||!G||V1(Z)==="sticky-balanced"||G1(Z.refresh?.mainLastRefreshError))return;let j=Date.now(),_=Z.quota?.mainLastQuotaApiError;if(_&&_.accountIdentity===G&&_.nextRetryAt!==void 0&&_.nextRetryAt>j)return{message:J8(_,j),retryAfter:Math.max(1,Math.ceil((_.nextRetryAt-j)/1000))};let L=Z.quota?.mainQuota,N=M1(L);if(L?.accountIdentity!==G||L.source==="headers"&&!W||!W4(L)||N<=0||N>j||A1(L,Z,N)<=j)return;let O=["five_hour","seven_day"].flatMap((U)=>{let H=L[U],A=H?.resetsAt?Date.parse(H.resetsAt):Number.NaN;return H&&H.remainingPercent<=0&&Number.isFinite(A)&&A>j?[A]:[]});return{message:"Claude OAuth quota is exhausted for this account.",retryAfter:Math.max(1,Math.ceil(((O.length?Math.max(...O):j+Y8(Z))-j)/1000))}}async function bZ(Z,G,W){if(QJ===Z&&S$===G)return;let j=g1!==void 0&&W!==void 0&&g1!==W;QJ=Z,S$=G,h.setMainQuotaAccountIdentity(G,!0,j)}async function z4(Z,G,W,j){let _=Z,L=e4.get(_);if(L){let O=await L.promise;return j===L.recordVersion?O:{...O,stale:!0}}let N=(async()=>{let O=++J3,U=j4,H=await S.read(),A=H.policyStorage,y=H.accounts.find((N1)=>N1.id==="main")?.accountIdentity,c=A0(W??y),i=H.mode==="claustrum",L0=i?A?.claustrum?.primaryAccount?.accountId:void 0;if(W!==void 0&&W!==y||i&&W===void 0)return{quotaKey:void 0,providerAccountUuid:void 0,generation:h.getMainQuotaIdentityGeneration(),stale:!0,state:"on-identity-mismatch"};let g0=y??L0??U,P0=A?.main?.profile?.providerAccountUuid??A?.main?.profile?.accountIdentity,y0=R$(W)??R$(c.accountUuid),H0=W?y0:Z.startsWith("sk-ant-oat")?y0??R$(P0):void 0,D$=v4(A)!=="claustrum"?"na":P0===void 0||y0===void 0?"unknown-identity":P0!==void 0&&y0!==void 0&&P0!==y0?"on-identity-mismatch":"on-vault-served";if(O!==J3){let N1=QJ!==Z||S$!==g0;return{quotaKey:g0,providerAccountUuid:H0,generation:h.getMainQuotaIdentityGeneration(),stale:N1,state:D$}}if(await bZ(Z,g0,H0),Z.startsWith("sk-ant-oat")&&H0===void 0)h.clearMain();if(g1=H0,Z.startsWith("sk-ant-oat"))K4=Z;return{quotaKey:g0,providerAccountUuid:H0,generation:h.getMainQuotaIdentityGeneration(),stale:!1,state:D$}})();e4.set(_,{promise:N,recordVersion:j});try{return await N}finally{if(e4.get(_)?.promise===N)e4.delete(_)}}let XJ=z$?.quotaHeaderFeed?.enabled===!0?new r6:null,t$=new Map,gZ=new Map,_1=new Set,L1=new AbortController,yZ=!1;function l4(Z,G){return JSON.stringify([Z,G??null])}function GJ(Z){let G=Z.binding;if(Z.source!=="local"||!G)return;return JSON.stringify([G.storageId,G.rowId,G.credentialEpoch])}function WJ(Z,G){return Z.lineage!==void 0&&Z.lineage===GJ(G)&&(!Z.profile||Z.profile.accountIdentity===G.accountIdentity)}async function d4(Z,G){if(!Z?.profile||!m9(Z.profile,G)||!await Z.isCurrent?.())return;return Z.persistence==="refused"?void 0:Z.profile}function mZ(Z){if(!Z)return[];let G=new Set([...Z.main?["main"]:[],...(Z.accounts??[]).filter((W)=>T0(W)&&(W.enabled!==!1||Boolean(W.claustrumScopedCredentialId))).map((W)=>W.id)]);return[...new Set(t$.values())].filter((W)=>W.persistence==="failed"&&W.profile!==void 0&&G.has(W.accountId))}async function y8(Z,G,W,j){let _=G.accountId,L=W.accounts.find((U)=>U.id===_),N=L?.source==="local"?WJ(G,L):L?.source==="vault"&&L.accountIdentity===j.accountIdentity;if(L?.type!=="oauth"||!v0(L)||L.accountIdentity!==j.accountIdentity||!N||await d4(G,Date.now())!==j)return Z;if(_==="main")return Z.main?{...Z,main:{...Z.main,profile:j}}:Z;let O=Z.accounts?.find((U)=>U.id===_);if(!O||!T0(O))return Z;return{...Z,accounts:Z.accounts.map((U)=>U.id===_&&T0(U)?{...U,profile:j}:U)}}async function cZ(Z,G,W=mZ(Z)){if(!Z||W.length===0)return Z;let j=[];for(let N of W){let O=await d4(N,Date.now());if(O)j.push({hydration:N,profile:O})}if(!j.length)return Z;let _=G??await S.read(),L=Z;for(let N of j)L=await y8(L,N.hydration,_,N.profile);return L}function m8(Z,G,W){N$();let j=!1,_=Object.assign((N,O)=>{return j=!0,V(N,O)},{preconnect:V.preconnect}),L={accountId:Z.id,fetched:Promise.resolve(),lineage:GJ(Z),...W&&{deadline:W}};return L.fetched=S.fetchProfileForDisplay(Z.id,_,AbortSignal.any([L1.signal,...W?[W]:[]])).then(({profile:N,persisted:O,isCurrent:U})=>{if(L.settled=!0,N.accountIdentity!==void 0)gZ.set(l4(Z.id,N.accountIdentity),N);if(Z.accountIdentity===void 0||N.accountIdentity===Z.accountIdentity)L.profile=N,L.isCurrent=U,L.persistence="pending";let H=O.then(async(A)=>{if(L.persistence=A,A==="failed")f.warn("quota","failed to persist account profile",{account:Z.id});else if(A==="refused")f.debug("quota","refused account profile publication",{account:Z.id});if((A==="saved"||A==="failed")&&!L1.signal.aborted){let y=A==="failed"&&await d4(L,Date.now());if(A==="saved"||y)try{let c=await S.read();if(!L1.signal.aborted)await v$(c.policyStorage,{...X$,routingAuthoritative:!1},c)}catch{f.debug("quota","failed to publish account profile to sidebar",{account:Z.id})}}});_1.add(H),H.then(()=>_1.delete(H))},(N)=>{if(L.settled=!0,L.failed=j,f.debug("quota","failed to hydrate account profile",{account:Z.id,error:N instanceof Error?N.message:String(N)}),!j&&t$.get(G)===L)t$.delete(G)}),_1.add(L.fetched),L.fetched.then(()=>_1.delete(L.fetched)),L}function c8(Z,G){let W=[G,Z.deadline].filter((_)=>_!==void 0);if(!W.length)return Z.fetched;let j=AbortSignal.any(W);if(j.aborted)return Promise.resolve();return new Promise((_)=>{let L=()=>{j.removeEventListener("abort",L),_()};j.addEventListener("abort",L,{once:!0}),Z.fetched.then(L)})}function pZ(Z,G){return m9(Z.profile,G)&&h6(Z.profile,Z.accountIdentity)}async function i4(Z){let G=await S.read();if(process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION==="1")return G;let W=Date.now(),j=[],_=new Map;for(let O of G.accounts){if(O.type!=="oauth"||!v0(O)||pZ(O,W))continue;let U=l4(O.id,O.accountIdentity),H=t$.get(U);if(H&&O.accountIdentity===void 0&&(H.lineage===void 0||H.lineage!==GJ(O)))H=void 0;if(!H&&O.accountIdentity!==void 0){let A=t$.get(l4(O.id));if(A&&WJ(A,O))H=A,_.set(O.id,A)}if(H?.failed)continue;if(!H&&m9(gZ.get(U),W))continue;if(!H||!H.profile&&(H.deadline?.aborted||H.settled)||H.profile&&!m9(H.profile,W)){if(Z?.aborted||L1.signal.aborted)continue;H=m8(O,U,Z),t$.set(U,H)}if(O.accountIdentity===void 0)_.set(O.id,H);j.push(c8(H,Z))}if(!j.length)return G;await Promise.all(j);let L=await S.read(),N=Date.now();for(let O of L.accounts){if(O.type!=="oauth"||!v0(O))continue;let U=l4(O.id,O.accountIdentity),H=_.get(O.id);if(H&&O.accountIdentity!==void 0&&!t$.has(U)&&WJ(H,O))t$.set(U,H);if(pZ(O,N))continue;let A=await d4(t$.get(U),N);if(!A||A.accountIdentity!==O.accountIdentity)continue;if(O.profile=A,O.id==="main"){if(L.policyStorage.main)L.policyStorage.main.profile=A}else for(let y of L.policyStorage.accounts)if(y.id===O.id&&T0(y))y.profile=A}return L}async function p8(Z,G,W,j){if(process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION==="1")return Z;return(await i4(W)).policyStorage}let uZ=new Set;async function u8(Z,G,W){let _=(await S.read()).accounts.find((H)=>H.id===Z.accountId);if(!_||!Z.anthropicAccountUuid||_.accountIdentity!==Z.anthropicAccountUuid)return null;let L={...K8(_.quota,G.quota),accountIdentity:_.accountIdentity};if(!(Z.scopedAttempt?await S.vault.publish(Z.scopedAttempt,{quota:L}):Z.localSubject?await S.publishLocal(Z.localSubject,{quota:L}):!1)){if(Z.accountId==="main"){if(h.getMain(Z.mainQuotaIdentity?.quotaKey)===W)h.clearMain()}else if(h.getAllFallbacks().get(Z.accountId)===W)h.clearFallback(Z.accountId);return f.debug("quota","native quota publication refused",{accountId:Z.accountId}),f.warn("quota","Quota publication discarded"),null}let O=await S.read(),U=O.accounts.find((H)=>H.id===Z.accountId);if(!U?.quota||U.accountIdentity!==Z.anthropicAccountUuid||U.source!==_.source)return null;if(Z.localSubject&&U.binding?.credentialEpoch!==Z.localSubject.binding.credentialEpoch)return null;if(Z.scopedAttempt&&U.credentialId!==Z.scopedAttempt.credentialId)return null;return{...G,quota:U.quota,refreshAfter:A1(U.quota,O.policyStorage,G.checkedAt)}}function l8(Z){f.warn("quota","failed to persist harvested response quota",{error:Z instanceof Error?Z.message:String(Z)})}function d8(Z){let G=Z instanceof Error?Z.name:typeof Z,W=Z instanceof Error?Z.message:String(Z),j=`${G}:${W}`;if(uZ.has(j))return;uZ.add(j),f.warn("quota","failed to normalize response quota headers",{error:W})}function i8(Z){if(!Z||typeof Z!=="object")return;let G=Z,W=G.credential_id;if(typeof W==="string"&&W&&W!=="main")return W;let j=G.vault;if(j&&typeof j==="object"){let _=j.credential_id;if(typeof _==="string"&&_&&_!=="main")return _}return}async function n8(Z,G){if(!XJ)return;if(Z.accountId==="main"&&!Z.mainQuotaIdentity?.quotaKey)return;let W=await p(K)??Y1(),_=(await O1?.())?.type==="oauth",L=Z.accountId==="main"?W.main:W.accounts.find((c)=>c.id===Z.accountId),N=i8(L),O=J6({storage:W,mainOAuthConfigured:_}),U=G.checkedAt,H={five_hour:G.quota.five_hour,seven_day:G.quota.seven_day,bindingWindow:G.quota.bindingWindow,fallbackAdvised:G.quota.fallbackAdvised,scoped:G.quota.scoped,extraUsage:G.quota.extraUsage,fieldSources:G.quota.fieldSources},A=N??(Z.accountId==="main"?Z.mainQuotaIdentity?.quotaKey??"main":Z.accountId),y=N?{identity_source:"credential_id",credential_id:N,schema_version:c9,provider:"anthropic",configured_account_count:O,observed_at_ms:U,anthropic_account_uuid:Z.anthropicAccountUuid??null,quota:H,accountKey:A}:Z.accountId==="main"&&Z.mainQuotaIdentity?.quotaKey?{identity_source:"account_ref",account_ref:Z.mainQuotaIdentity.quotaKey,schema_version:c9,provider:"anthropic",configured_account_count:O,observed_at_ms:U,anthropic_account_uuid:Z.anthropicAccountUuid??null,quota:H,accountKey:A}:Z.accountId==="main"?{identity_source:"none",schema_version:c9,provider:"anthropic",configured_account_count:O,observed_at_ms:U,anthropic_account_uuid:Z.anthropicAccountUuid??null,quota:H,accountKey:A}:{identity_source:"account_ref",account_ref:Z.accountId,schema_version:c9,provider:"anthropic",configured_account_count:O,observed_at_ms:U,anthropic_account_uuid:Z.anthropicAccountUuid??null,quota:H,accountKey:A};await XJ.publish(y)}function o8(Z){f.debug("quota","failed to publish quota header feed",{error:Z instanceof Error?Z.message:String(Z)})}function lZ(Z,G){try{if(!M6(Z)){f.trace("quota","skipped non-quota response headers",{account:G.accountId});return}let W=v6(Z),j=G.accountId==="main"?G.mainQuotaIdentity:void 0;if(G.accountId==="main"){if(!j||h.getMainQuotaIdentityGeneration()!==j.generation){f.trace("quota","discarded stale main quota headers",{boundIdentity:j?.quotaKey,currentGeneration:h.getMainQuotaIdentityGeneration()});return}}let _=G.accountId==="main"?h.getMain(j?.quotaKey):h.getAllFallbacks().get(G.accountId),L=W.checkedAt??Date.now(),N=B0(G.localSubject,G.scopedAttempt),O=N&&G.anthropicAccountUuid?{lineage:N,accountUuid:G.anthropicAccountUuid,entry:{quota:{...W,accountIdentity:G.anthropicAccountUuid},checkedAt:L,refreshAfter:L},generalExhausted:["five_hour","seven_day"].some((U)=>{let H=Z.get(U==="five_hour"?"anthropic-ratelimit-unified-5h-utilization":"anthropic-ratelimit-unified-7d-utilization");return W[U]!==void 0&&H!==null&&Number.isFinite(Number(H))&&Number(H)>=1})}:void 0;if(O){if(J0.delete(G.accountId),J0.size>=MG){let U=J0.keys().next().value;if(U!==void 0)J0.delete(U)}J0.set(G.accountId,O)}(async()=>{let U=!1;try{let H;try{H=await u8(G,{quota:W,checkedAt:L,refreshAfter:L},_)}catch(y){l8(y);return}if(H===null)return;if(G.accountId==="main"&&h.getMainQuotaIdentityGeneration()!==j?.generation)return;let A=H;if(O&&J0.get(G.accountId)===O)O.entry=A,U=!0;if(G.accountId==="main")h.setMain(j?.quotaKey,A);else h.setFallback(G.accountId,A,{authLineageId:G.authLineageId});b1().catch(()=>{}),await n8(G,A),f.debug("quota","harvested response quota",{account:G.accountId,fiveHourPercent:A.quota.five_hour?.usedPercent,sevenDayPercent:A.quota.seven_day?.usedPercent,source:"headers"})}finally{if(!U&&O&&J0.get(G.accountId)===O)J0.delete(G.accountId),f.debug("quota","discarded pending response quota",{accountId:G.accountId})}})().catch(o8),f.trace("quota","response quota awaiting publication",{account:G.accountId})}catch(W){d8(W)}}let dZ=Promise.resolve();function B1(Z=!1,G=!1,W,j){let _=dZ.then(()=>r8(Z,G,W,j));return dZ=_.then(()=>{},()=>{}),_}async function r8(Z,G,W,j){let _=await S.read(),L=new Set;if(!Z&&!G&&_.policyStorage.quota?.enabled===!1)return L;for(let N of _.accounts){if(N.id==="main"||N.type!=="oauth")continue;if(!v0(N)){if(G)L.add(N.id);continue}if(!Z&&A1(N.quota,_.policyStorage,M1(N.quota))>Date.now()&&(!W||I1(N.quota,_.policyStorage,Date.now(),W)))continue;try{if(!await h.refreshFallback(N.id,"",_.policyStorage.accounts.find((U)=>U.id===N.id&&T0(U)),Z?void 0:j))L.add(N.id),f.debug("quota","fallback quota preflight returned no reading",{accountId:N.id,requiredByPolicy:G})}catch(O){if(G&&P1(O))throw O;L.add(N.id),J7(N.id,G,O)}}return b1().catch(()=>{}),L}let zJ={refreshQuotaForDueAccounts:async()=>{await B1()},refreshQuotaForAllAccounts:async(Z)=>{await B1(!0)},refreshAccount:async(Z,G,W)=>{let j=await C0(Z.id,void 0,W?.force?Z.access:void 0);return{...Z,access:j.accessToken,expires:j.expires}},refreshAccountQuota:async(Z,G)=>{N$();let W=await S.fetchQuota(Z.id);return{account:{...Z,quota:W},fetched:!0}},getUsableFallbackAccounts:async(Z,G)=>{Z=Z??null;let W=[],j=Z?.accounts.some((_)=>T0(_)&&J0.has(_.id))?(await S.read()).accounts:[];for(let _ of Z?.accounts??[]){if(!T0(_)||!v0(_))continue;let L=j.find((U)=>U.id===_.id),N=h.getFallback(_.id,L?.binding?{authLineageId:JSON.stringify(L.binding)}:_)?.quota??L?.quota??_.quota,O=L&&Z?W$({...L,quota:N},Z):N;if(!s1(O,Z)||!u9(O,G?.modelId)||X1(Z)&&!W1(O,Z,_.id,G?.modelId))continue;if(O$(Z)){if(F4(_.id,Z))W.push(_);continue}try{let U=await C0(_.id,void 0,void 0,G?.modelId);W.push({..._,access:U.accessToken,expires:U.expires})}catch(U){if(P1(U))throw U}}return W}};async function VJ(){N$();let Z=await S.read();if(Z.mode==="local"&&Z.policyStorage.refresh?.enabled!==!1)for(let G of Z.accounts){if(G.id==="main"||G.type!=="oauth"||!v0(G))continue;try{let W=await C0(G.id);if(x1(G.lastRefreshError,G.accountIdentity,Date.now(),void 0))continue;if(W.localSource!=="rotated"&&W.localSource!=="adopted"&&(!W.expires||W.expires-Date.now()<=Z3(Z.policyStorage)))await C0(G.id,void 0,void 0,void 0,"refresh")}catch{}}await B1(!1,!1,void 0,"background")}let jJ=z$!==null&&process.env.OPENCODE_AUTH_CONTENT===void 0,iZ=new Set;async function s8(){let Z=await S.read(),G=new Set(Z.accounts.filter((j)=>j.id!=="main"&&j.source==="vault"&&j.type==="oauth"&&v0(j)).map((j)=>j.id)),W=[...G].some((j)=>!iZ.has(j));if(iZ=G,W)await B1(!1,!1,void 0,"background");await b1()}let KJ=jJ&&O$(z$)?S.vault.watch({intervalMs:J.scopedRosterPollIntervalMs??2000,shouldRefresh:()=>process.env.OPENCODE_AUTH_CONTENT===void 0,onRefresh:s8,setInterval:Y.setInterval,clearInterval:Y.clearInterval}):void 0,a8=jJ?(KJ?KJ.ready.then(()=>VJ()):VJ()).catch(()=>{}):Promise.resolve(),_J=jJ?Y.setInterval(()=>{VJ().catch(()=>{})},_6+A8(C8)):null;_J?.unref?.();let t8=(Z,G)=>{let W=hJ({id:Z,role:"fallback"},G);return W==="na"?"off":W},LJ=new MJ,e8=new RJ,e$=new WeakMap,V4=new Map;async function OJ(Z){let G=(Z.get("anthropic-beta")??"").split(",").map((W)=>W.trim()).filter(Boolean).sort();return{betas:G,betasHash:await $6(G.join(","))}}function nZ(Z){try{if(!Z.request)return;let G=C3({request:Z.request,source:Z.source,accountId:Z.accountId,synthetic:Z.synthetic,betasHash:Z.betasHash,requestedModel:Z.requestedModel,onWarning:(j)=>f.warn("cache-diagnostics",j),message:Z.message,receivedAt:Z.receivedAt});if(!G.record||!G.messageId){f.debug("cache-diagnostics","skipped invalid response envelope",{status:Z.status});return}f.debug("cache-diagnostics",E3(G.record));let W=e8.capture(Z.betasHash,Z.betas);if(W)f.debug("cache-diagnostics",W);if(G.canary)f.warn("cache-diagnostics","short-gap previous_message_not_found",{message_id:G.canary.messageId,previous_message_id:G.canary.previousMessageId});if(Z.trackSessionId)LJ.capture(Z.trackSessionId,G.messageId,Z.receivedAt)}catch(G){f.debug("cache-diagnostics","response observation failed",{status:Z.status,error:G instanceof Error?G.message:String(G)})}}function oZ(Z,G,W=!0){let j=e$.get(Z);if(!j)return;if(G&&typeof G==="object"&&!Array.isArray(G)&&!W)j.messageStart=G;j.dumpWrite=j.dumpWrite.then(()=>QZ(j.dump,{status:j.status,message:G,complete:W})).catch(()=>{}),nZ({...j,message:G,receivedAt:Date.now()})}function $Y(Z,G){let W=e$.get(Z);if(!W)return;let j=W.messageStart??{},_=j.usage&&typeof j.usage==="object"&&!Array.isArray(j.usage)?j.usage:{},L={...j,...G.usage?{usage:{..._,...G.usage}}:{},...G.stopReason?{stop_reason:G.stopReason}:{}};W.dumpWrite=W.dumpWrite.then(()=>QZ(W.dump,{status:W.status,message:L,complete:!0})).catch(()=>{})}function rZ(Z,G){let W=Promise.resolve(QZ(G.dump,{status:G.status,message:null,complete:!1})).catch(()=>{});e$.set(Z,{...G,dumpWrite:W})}let $1=null,n4=null;function o4(Z){return Z!==null&&typeof Z==="object"&&vJ(Z)==="R"}function JY(Z){let G=HZ("anthropic");if(!Z||typeof Z!=="object")return!1;let W=Z;return W.type===G.type&&W.access===G.access&&W.refresh===G.refresh&&W.expires===G.expires}async function ZY(){if(n4){let Z=await n4();return C6("opencode",Z===void 0?{}:{anthropic:Z}).kind}if(process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("OpenCode logins cannot be checked while OPENCODE_AUTH_CONTENT is set");return t6("opencode",x8())}async function sZ(){if(await R1("opencode")!=="claustrum")throw Error("This host is not connected to the credential vault; run setup to connect it first");if(await ZY()!=="absent")throw Error("OpenCode already holds an Anthropic login; remove it before choosing the vault login")}let YY={label:"Claude via credential vault",type:"oauth",authorize:async()=>{return await sZ(),{url:"",instructions:"Claude requests use the credential vault this host is connected to. OpenCode stores only a placeholder, never a credential.",method:"auto",callback:async()=>{await sZ();let Z=HZ("anthropic");return{type:"success",access:Z.access,refresh:Z.refresh,expires:Z.expires}}}}},NJ=new c2({directory:process.env.OPENCODE_ANTHROPIC_AUTH_CACHEKEEP_REGISTRY_DIR||U6("opencode")}),r4=[],h1=new Map,t0=new m2({loadStorage:()=>p(K),fetchImpl:A4,setIntervalImpl:Y.setInterval,clearIntervalImpl:Y.clearInterval,onTrackedSessionsChanged:async(Z)=>{await NJ.publish(Z),r4=await NJ.list(Z)},prepareBody:(Z,G)=>{if(!new Headers(G.headers).get("anthropic-beta")?.split(",").map((W)=>W.trim()).includes(B4))return Z;try{let W=JSON.parse(Z),j=LJ.previousFor(G.id),_=j?.messageId??null;return W9(W,_),V4.set(G.id,{sessionId:G.id,previousMessageId:_,...j?{previousMessageReceivedAt:j.receivedAt}:{},isSubagent:G.isSubagent,ttlSent:z9(W),accountId:G.oauthAccountId??"main",synthetic:!0,requestedModel:typeof W.model==="string"?W.model:void 0}),JSON.stringify(W)}catch{return Z}},onResponse:async({target:Z,bodyText:G,status:W,data:j,receivedAt:_,attempt:L})=>{let N=h1.get(L.id);if(W===401&&N?.scopedAttempt)await t9(N.scopedAttempt,"direct");if(Z.sourceWarm&&W>=200&&W<300)R0.noteSourceWarmSentForTarget(Z.id);let O=V4.get(Z.id);if(!O?.betasHash||!O.betas){V4.delete(Z.id);return}try{let U=JSON.parse(G),H=U&&typeof U==="object"&&!Array.isArray(U)?U.diagnostics:void 0,A=H&&typeof H==="object"&&!Array.isArray(H)&&H.previous_message_id===O.previousMessageId?O.previousMessageId:void 0;if(A===void 0)return;nZ({source:"prewarm_cachekeep",accountId:O.accountId,synthetic:O.synthetic,betasHash:O.betasHash,betas:O.betas,requestedModel:O.requestedModel,request:{...O,previousMessageId:A,ttlSent:z9(U)},trackSessionId:Z.id,status:W,message:j,receivedAt:_})}catch{}finally{V4.delete(Z.id)}},onComplete:({attempt:Z})=>{h1.delete(Z.id)},retryOnUnauthorized:async({target:Z,headers:G,attempt:W})=>{let j=h1.get(W.id);if(!j)return;let _;try{let O=JSON.parse(Z.bodyText);if(typeof O.model==="string")_=O.model}catch{}if(j.scopedAttempt&&!await c4(j.scopedAttempt,"cachekeep",W.signal))return;let L=await C0(Z.oauthAccountId??"main",W.signal,j.scopedAttempt?void 0:j.accessToken,_,"cachekeep");if(L.accountIdentity!==j.accountIdentity||Boolean(L.scopedAttempt)!==Boolean(j.scopedAttempt))return;if(j.scopedAttempt&&(!L.scopedAttempt||L.scopedAttempt.credentialId!==j.scopedAttempt.credentialId||L.scopedAttempt.recordVersion<=j.scopedAttempt.recordVersion))return;if(!j.scopedAttempt&&L.accessToken===j.accessToken)return;let N=new Headers(G);return N.set("authorization",`Bearer ${L.accessToken}`),h1.set(W.id,L),N},prepareHeaders:async(Z,G,W)=>{if(!tJ(G.url))return;let j=G.oauthAccountId??"main",_;try{let U=JSON.parse(G.bodyText);if(typeof U.model==="string")_=U.model}catch{}let L=await C0(j,W.signal,void 0,_,"cachekeep");if(G.oauthAccountIdentity&&L.accountIdentity!==G.oauthAccountIdentity)throw new q1("credential-changed");let N=L.accessToken;h1.set(W.id,L);try{let U=JSON.parse(G.bodyText),H=A0(L.accountIdentity);if(Z.delete("anthropic-beta"),i1(Z,N,{body:U,identity:H}),Z.set("anthropic-beta",j8(Z.get("anthropic-beta"),[y2])),U.speed==="fast")A9(Z);let A=V4.get(G.id);if(A){let{betas:y,betasHash:c}=await OJ(Z);A.betas=y,A.betasHash=c}}catch{i1(Z,N)}let O=await C0(j,W.signal,void 0,_,"cachekeep");if(O.accountIdentity!==L.accountIdentity||Boolean(O.scopedAttempt)!==Boolean(L.scopedAttempt))throw new q1("credential-changed");if(Z.set("authorization",`Bearer ${O.accessToken}`),h1.set(W.id,O),G.sourceWarm){let U=R0.sourceWarmForTarget(G.id);if(!U||U.oauthAccountId!==G.oauthAccountId||U.accountIdentity!==void 0&&O.accountIdentity!==U.accountIdentity){R0.dropSourceWarmForTarget(G.id),t0.untrack(G.id),f.warn("cachekeep","source warm refused: bound account changed",{session:G.id,reason:"source-warm-account-changed"});return}}return Z},validatePrewarm:({target:Z,warmBodyText:G})=>{if(!Z.sourceWarm)return{ok:!0};let W=R0.sourceWarmForTarget(Z.id);if(!W)return t0.untrack(Z.id),{ok:!1,reason:"source-round-ended"};if(W.warmsSinceUserTurn>=e2(W.model))return R0.dropSourceWarmForTarget(Z.id),{ok:!1,reason:"source-warm-idle-cap"};let j=i7(G),_=i7(W.bodyText);if(!j||!_||j!==_)return R0.dropSourceWarmForTarget(Z.id),{ok:!1,reason:"source-prefix-mismatch"};return{ok:!0}}});async function XY(Z){let G=Y$(Z.requestedModel);if(!G)return;let W=p1(Z.sessionId,G),j=R0.sourceWarmFor(Z.recoveryKey);if(!j){t0.untrack(W);return}let _;try{_=await p()}catch{return}if(!t0.track({sessionId:W,url:j.url,headers:new Headers(j.headers),bodyText:j.bodyText,storage:_,cacheMode:"hybrid",oauthAccountId:j.oauthAccountId,...j.accountIdentity!==void 0&&{oauthAccountIdentity:j.accountIdentity},isSubagent:j.subagent??!1,sourceWarm:!0}).tracked)R0.dropSourceWarm(Z.recoveryKey)}async function GY(Z){if(!$1||!(await $1()).active)throw Error("Native main OAuth activation is not available");let G=await C0("main",Z);return{...G,credentialAccountId:R$(G.accountIdentity)}}async function WY(){let Z=await GY();if((await z4(Z.accessToken,void 0,Z.credentialAccountId)).stale&&Z.credentialAccountId!==void 0)throw Error("Main account identity changed before the prime refresh");let W=await h.refreshMainWithMetadata(S$,Z.accessToken);return{quota:W.quota,fresh:W.fetched}}async function zY(Z){N$();let G=await p(K),W=G?.accounts.find((_)=>_.id===Z&&v0(_)&&T0(_));if(!W||!G)throw Error(`prime: OAuth account ${Z} is unavailable`);let j=await zJ.refreshAccountQuota(W,G);return{quota:j.account.quota??{},fresh:j.fetched}}let DJ=new Map;async function VY(Z){let G=performance.now(),W,j,_,L="",N;try{if(Z==="main"&&(!$1||!(await $1()).active))throw Error("Native main OAuth activation is not available");let O=I4(LG,{baseURL:""}),U=O.url?.toString()??O.input.toString();D9(U);let H=await C0(Z,void 0,void 0,d7);if(W=H.accessToken,_=H.scopedAttempt,j=d7,!W)return{ok:!1,error:"prime: no access token available"};let A=g2(),y=A0(H.accountIdentity),c=await P9(JSON.stringify(A),{identity:y}),i=new Headers({"content-type":"application/json"});i1(i,W,{body:JSON.parse(c),identity:y,requestClass:"auxiliary"}),i.delete("content-length"),i.delete("transfer-encoding");let L0=AbortSignal.timeout(30000),g0={method:"POST",headers:i,body:c,signal:L0},P0=await C0(Z,L0,void 0,j);if(P0.accountIdentity!==H.accountIdentity||Boolean(P0.scopedAttempt)!==Boolean(H.scopedAttempt))throw Error("Prime credential authority changed before dispatch");_=P0.scopedAttempt,L=P0.accessToken,i.set("authorization",`Bearer ${L}`);let y0=async()=>{let F0=v9([L],"http");return N=F0,F0.redactResponse(await A4(U,g0))},H0=await y0();if(H0.status===401&&_&&!L0.aborted){let F0;try{F0=await c4(_,"prime",L0)}catch{}if(F0){N?.dispose(),await H0.body?.cancel().catch(()=>{}),f.info("claustrum","retrying Prime after scoped credential rotation",{accountId:Z,previousVersion:_.recordVersion,newVersion:F0.recordVersion}),P0=await C0(Z,L0,void 0,j);let m0=P0.scopedAttempt;if(!m0||m0.credentialId!==_.credentialId||m0.accountIdentity!==_.accountIdentity||m0.recordVersion<=_.recordVersion)throw Error("Prime vault retry lost its strict newer receipt");_=m0,L=m0.accessToken,i.set("authorization",`Bearer ${L}`),H0=await y0()}}if(H0.status===401&&!P0.scopedAttempt&&!L0.aborted){let F0=P0.accessToken,m0=await C0(Z,L0,F0,j).catch(()=>{return});if(m0&&m0.accessToken!==F0&&m0.accountIdentity===H.accountIdentity&&!m0.scopedAttempt){if(N?.dispose(),await H0.body?.cancel().catch(()=>{}),P0=await C0(Z,L0,void 0,j),P0.scopedAttempt||P0.accountIdentity!==H.accountIdentity)throw Error("Prime local authority changed before retry");L=P0.accessToken,i.set("authorization",`Bearer ${L}`),H0=await y0()}}let D$=Math.round(performance.now()-G);if(!H0.ok){let F0;try{F0=await H0.text().catch(()=>"")||`HTTP ${H0.status}`}finally{N?.dispose()}if(H0.status===401&&_)await t9(_,"direct");return{ok:!1,status:H0.status,ms:D$,error:F0}}let A$=(await H0.json().catch(()=>null))?.usage,P$=A$&&(Number.isFinite(A$.input_tokens)||Number.isFinite(A$.output_tokens))?{inputTokens:Number.isFinite(A$.input_tokens)?A$.input_tokens:void 0,outputTokens:Number.isFinite(A$.output_tokens)?A$.output_tokens:void 0}:void 0;return DJ.set(Z,P0),{ok:!0,status:H0.status,ms:D$,...P$&&{usage:P$}}}catch(O){N?.dispose();let U=v9([L],"http"),H=U.redactError(O);return U.dispose(),{ok:!1,...O instanceof C$&&O.tokenRefreshFailed&&{reason:"token-refresh"},ms:Math.round(performance.now()-G),error:H instanceof Error?H.message:String(H)}}}let aZ={storagePath:K,loadStorage:()=>p(K),getAccountFingerprint:async(Z)=>{if(Z==="main"&&(!$1||!(await $1()).active))return;let G=await C0(Z),W=G.scopedAttempt??G.localSubject;if(!W)return;let j=await S.getOrCreateAuthLineage(Z,W);return j?z1(j):void 0},refreshQuota:async(Z)=>{if(Z==="main")return WY();return zY(Z)},sendPrime:VY,recordSuccess:async(Z,G)=>{let W=DJ.get(Z);DJ.delete(Z);let j=W?.scopedAttempt??W?.localSubject;if(!j||!await S.incrementPrimeUsage(Z,j,G))throw Error("Prime usage publication lost its native credential fence");let _=(await S.read()).accounts.find((L)=>L.id===Z)?.prime;if(!_)throw Error("Prime usage counters are unavailable after publication");return _},setIntervalImpl:Y.setInterval,clearIntervalImpl:Y.clearInterval,setTimeoutImpl:Y.setTimeout,clearTimeoutImpl:Y.clearTimeout},tZ=$7(K,()=>new g6(aZ),{slot:$.directory??"default",rebind:(Z)=>Z.updateOptions(aZ)}),F1=tZ.manager;if(y9(z$))F1.start();async function s4(){return r4=await NJ.list(t0.trackedSessions()),r4}let eZ=J.cacheKeepAggregateRefreshIntervalMs??1e4,HJ=eZ>0?Y.setInterval(()=>{s4().catch(()=>{})},eZ):void 0;if(HJ?.unref?.(),l9({enabled:g9(z$),mode:k4(z$)}),xZ(SZ(z$)),IZ(PZ(z$)),!process.env.OPENCODE_ANTHROPIC_AUTH_LOG_LEVEL)WG(CZ(z$)??"info");let UJ=null,jY=async()=>{z0?.close(),L1.abort();while(_1.size)await Promise.all([..._1]);try{await J4(K)}catch(Z){f.warn("claustrum","failed to close scoped runtime",{error:Z instanceof Error?Z.message:String(Z)})}try{h.close()}catch{}try{await XJ?.dispose()}catch(Z){f.warn("quota-header-feed","failed to dispose",{error:Z instanceof Error?Z.message:String(Z)})}try{if(w1)Y.clearInterval(w1),w1=null}catch(Z){f.warn("main-background","failed to stop",{error:Z instanceof Error?Z.message:String(Z)})}try{if(_J)Y.clearInterval(_J)}catch(Z){f.warn("fallback-background","failed to stop",{error:Z instanceof Error?Z.message:String(Z)})}try{if(HJ!==void 0)Y.clearInterval(HJ)}catch(Z){f.warn("cachekeep","failed to stop aggregate refresh",{error:Z instanceof Error?Z.message:String(Z)})}try{t0.stop()}catch(Z){f.warn("cachekeep","failed to stop",{error:Z instanceof Error?Z.message:String(Z)})}try{tZ.release()}catch(Z){f.warn("prime","failed to release slot",{error:Z instanceof Error?Z.message:String(Z)})}if(!UJ)return;try{await UJ.release()}catch(Z){f.warn("rpc","failed to stop",{error:Z instanceof Error?Z.message:String(Z)})}},X$={activeId:"main",route:"main"},KY=I8(),k$=new Map;function a4(Z,G){if(h.updateStorage(Z),h.seedMainFromStorage(Z,S$),!G.skipFallbackQuotaSeed)h.seedFallbacksFromAccounts((Z?.accounts??[]).filter(T0));let W=h.getMain(S$),j=h.getLastApiError(),_=Z?.refresh?.mainLastRefreshError,L=Z?.claustrum?.primaryAccount,N=O$(Z)&&!v0(L)?wZ({source:"vault",enabled:L?.enabled,state:L?.state}):void 0;return{main:{quota:W?.quota??null,enabled:L?.enabled,tierLabel:f4(Z?.main?.profile),quotaBackedOff:h.isBackedOff(),quotaBackoffUntil:j?.nextRetryAt,refreshBackedOff:_?x1(_,j4??Z?.mainAccountId,Date.now(),G.mainRefreshToken?z1(G.mainRefreshToken):void 0):!1,refreshBackoffUntil:_?.nextRetryAt,stateLine:N,quotaDated:Boolean(N)},fallbacks:(Z?.accounts??[]).filter((O)=>T0(O)&&(O.enabled!==!1||Boolean(O.claustrumScopedCredentialId))).map((O)=>{let U=F4(O.id,Z),H=t8(O.id,Z),A=O.claustrumScopedCredentialId&&!U?wZ({source:"vault",enabled:O.enabled!==!1,state:O.claustrumScopedState}):void 0;return{id:O.id,label:O.label,tierLabel:f4(O.profile),quota:G.skipFallbackQuotaSeed?null:h.getFallback(O.id,O)?.quota??O.quota??null,needsReauth:O.lastRefreshError!=null&&x1(O.lastRefreshError,O.id,Date.now(),z1(O.refresh))&&G1(O.lastRefreshError),vaultReauth:H==="on-vault-reauth",vaultServed:U,custodyState:H,enabled:O.enabled!==!1,stateLine:A,quotaDated:Boolean(A)}}),activeId:G.activeId,route:G.route,relay:z6(Z?.relay),fastMode:AZ(),cacheKeep:{enabled:G8(Z),window:X8(Z)?"always":Z?.cacheKeep?.startHour!=null&&Z?.cacheKeep?.endHour!=null?`${Z.cacheKeep.startHour}-${Z.cacheKeep.endHour}`:void 0,trackedSessions:r4.length},prime:y9(Z)?{enabled:!0,accounts:F1.stats(Z)}:void 0,fableRecoveries:k$.size>0?[...k$.values()]:void 0,lastUpdated:Date.now()}}function v$(Z,G,W){let j=G.routingAuthoritative!==!1;if(j)X$={activeId:G.activeId,route:G.route};function _(L){return k8(L,KY,{routingAuthoritative:j,resolvePreservedRouting:j?void 0:async(N)=>{let O=await QG(N,()=>p(K),{activeId:L.activeId,route:L.route}),U=await cZ(O.freshStorage,W);return{activeId:O.activeId,route:O.route,state:a4(U,{...G,activeId:O.activeId,route:O.route})}},onRoutingResolved:j?void 0:(N)=>{X$=N}}).catch((N)=>f.warn("sidebar","state write failed",{error:N instanceof Error?N.message:String(N)}))}if(j){let L=mZ(Z);if(L.length>0)return cZ(Z,W,L).then((N)=>_(a4(N,G))).catch(()=>{return f.debug("quota","failed to recheck account profile for sidebar"),_(a4(Z,G))})}return _(a4(Z,G))}async function $3(){return{storage:await p(K),access:void 0}}async function b1(){await s4().catch(()=>{});let{storage:Z,access:G}=await $3();v$(Z,{activeId:X$.activeId,route:X$.route,mainAccessToken:G,mainRefreshToken:void 0,routingAuthoritative:!1})}function _Y(Z,G,W){if(!G)return;if(Z?.quota?.enabled!==!0)return;let j=W?.quotaKey??S$;if(h.getMain(j))return;if(BJ)return;BJ=!0,h.refreshMain(j,G,W?.generation).then(()=>b1()).catch(()=>{}).finally(()=>{BJ=!1})}let O1=null,t4,j4,S$,K4,g1,QJ,J3=0,e4=new Map,BJ=!1,w1=null,$9=0;function Z3(Z){let G=Z?.refresh?.refreshBeforeExpiryMinutes??NG;return Math.max(h8,G)*60000}function LY(Z){return Z?.refresh?.enabled!==!1}async function Y3(Z=!1){let G=new Map;if(Z){if($1&&(await $1()).active)try{await S.fetchQuota("main")}catch{G.set("main","Native primary usage refresh unavailable")}await B1(!0)}let W=await i4(AbortSignal.timeout(3000));h.updateStorage(W.policyStorage),h.seedMainFromStorage(W.policyStorage,S$),h.seedFallbacksFromAccounts(W.policyStorage.accounts.filter(T0));let j=[],_=W.accounts.find((N)=>N.id==="main"&&N.type==="oauth");if(_)j.push({name:_.label??"OpenCode anthropic",role:"main",quota:_.quota,tierLabel:f4(_.profile),error:G.get("main")??_.lastQuotaRefreshError?.message});j.push(...b2(W.policyStorage,G));let L=Math.max(0,...W.accounts.map((N)=>M1(N.quota)));return h2({accounts:j,refreshedAt:L||void 0})}async function FJ(Z){await s4().catch(()=>{}),await v$(Z,{activeId:X$.activeId,route:X$.route,routingAuthoritative:!1})}function _4(Z,G,W,j){if(k$.delete(Z.sessionId),k$.set(Z.sessionId,{...Z,changedAt:Date.now()}),k$.size>128){let _=k$.keys().next().value;if(_)k$.delete(_)}if(v$(G,{activeId:X$.activeId,route:X$.route,mainAccessToken:W.access,mainRefreshToken:W.refresh,routingAuthoritative:!1}),j)W3(Z.sessionId,j)}function X3(Z,G){let W=a$.get(Z)??new Set;W.delete(G),W.add(G);while(W.size>4){let j=W.values().next().value;if(typeof j!=="string")break;W.delete(j)}a$.delete(Z),a$.set(Z,W);while(a$.size>128){let j=a$.keys().next().value;if(typeof j!=="string")break;a$.delete(j)}}function G3(Z,G){return typeof G==="string"&&a$.get(Z)?.has(G)===!0}function W3(Z,G){if(B9(Z))return;E$.delete(Z),E$.set(Z,[G]);while(E$.size>128){let W=E$.keys().next().value;if(W)E$.delete(W);else break}if(V$.has(Z))wJ(Z)}function wJ(Z,G=0){if(!E$.has(Z)||G4.has(Z))return;G4.set(Z,G);let W=()=>{if(G4.get(Z)!==G)return;G4.delete(Z),OY(Z,G)};if(G===0)setImmediate(W);else setTimeout(W,wG*G)}function TJ(Z,G){if(G+1<FG)wJ(Z,G+1)}async function OY(Z,G){if(!V$.has(Z)||!E$.has(Z))return;let W=$.client.session;if(typeof W?.status==="function")try{let j=await Promise.resolve(W.status()),_=j!==null&&typeof j==="object"?j:void 0,L=_&&Object.hasOwn(_,"data")?_.data:_;if(L===null||typeof L!=="object"||Array.isArray(L)){TJ(Z,G);return}let N=L[Z];if(N!==void 0&&(!N||typeof N!=="object"||N.type!=="idle")){TJ(Z,G);return}}catch{TJ(Z,G);return}if(!V$.has(Z))return;await NY(Z)}function NY(Z){let G=p4.get(Z);if(G)return G;let W=(async()=>{while(!0){let j=E$.get(Z),_=j?.[0];if(!_){E$.delete(Z);return}try{let L=()=>E$.get(Z)===j&&j[0]===_;if(!await P8($,Z,_,{noReply:!0,beforeActiveAssistant:!0,canSend:()=>V$.has(Z)&&L(),onPreparedMessageId:(O)=>X3(Z,O),latestPreparedMessageId:()=>[...a$.get(Z)??[]].at(-1)})){if(V$.has(Z)&&!L())continue;return}if(L())j.shift()}catch(L){f.warn("fable-fallback","Desktop notification failed",{session:Z,error:L instanceof Error?L.message:String(L)})}}})();return p4.set(Z,W),W.finally(()=>{if(p4.get(Z)===W)p4.delete(Z)}),W}function DY(Z,G,W,j){if(G.fallback&&G.targetModel){let _=p$.get(Z.recoveryKey);p$.delete(Z.recoveryKey),p$.set(Z.recoveryKey,G.targetModel);while(p$.size>128){let N=p$.keys().next().value;if(N)p$.delete(N);else break}let L=k$.get(Z.sessionId);if(_===G.targetModel&&L?.mode==="server"&&Y$(L.requestedModelId)===Y$(Z.requestedModel)&&L.targetModelId===G.targetModel)return;f.info("fable-fallback","Anthropic server-side safety fallback active",{session:Z.sessionId,requestedModel:Z.requestedModel,targetModel:G.targetModel,handoff:G.handoff}),_4({sessionId:Z.sessionId,mode:"server",remaining:0,requestedModelId:Z.requestedModel,targetModelId:G.targetModel},W,j,IG(Z.requestedModel,G.targetModel));return}if(G.stopReason==="refusal"||!p$.delete(Z.recoveryKey))return;f.info("fable-fallback","Anthropic server-side safety fallback ended",{session:Z.sessionId,requestedModel:Z.requestedModel}),_4({sessionId:Z.sessionId,mode:"fable",remaining:0,requestedModelId:Z.requestedModel},W,j,fG(Z.requestedModel))}function HY(Z,G,W){if(!Z)return;for(let j of p$.keys())if(j.startsWith(`${Z}\x00`))p$.delete(j);if(!k$.delete(Z))return;v$(G,{activeId:X$.activeId,route:X$.route,mainAccessToken:W.access,mainRefreshToken:W.refresh,routingAuthoritative:!1})}async function CJ(Z){let G=m6(Z);if(G.type==="enable"||G.type==="disable"){let L=G.type==="enable",N=await y4(L),O=k4(N);return l9({enabled:L,mode:O}),f.info("commands","cache enabled changed",{enabled:L}),FZ({argumentsText:Z,enabled:L,mode:O,settingsPath:await S.getSettingsPath()})}if(G.type==="mode"){let L=await j1(G.mode),N=g9(L);return l9({enabled:N,mode:G.mode}),f.info("commands","cache mode changed",{mode:G.mode}),FZ({argumentsText:Z,enabled:N,mode:G.mode,settingsPath:await S.getSettingsPath()})}let W=await p(K),j=g9(W),_=k4(W);return l9({enabled:j,mode:_}),FZ({argumentsText:Z,enabled:j,mode:_})}async function L4(Z){let G=c6(Z),W=await p(K);if(G.type==="window")W=await H1(G.startHour,G.endHour),f.info("commands","cachekeep schedule changed",{schedule:`${G.startHour}-${G.endHour}`});else if(G.type==="always")W=await m4(),f.info("commands","cachekeep schedule changed",{schedule:"always"});else if(G.type==="disable")W=await k1(!1),f.info("commands","cachekeep enabled changed",{enabled:!1});else if(G.type==="subagents")W=await r9(G.enabled),f.info("commands","cachekeep subagents changed",{subagents:G.enabled});let j=Z8(W),_=await s4(),L=_.length?Math.min(..._.map((N)=>N.nextPrewarmAt)):void 0;return j6({argumentsText:Z,enabled:W8(W),always:X8(W),window:j,hybridActive:G8(W),trackedSessions:_.length,trackedSessionDetails:_,nextPrewarmAt:L})}async function z3(Z){let G=p6(Z);if(G.type==="enable"||G.type==="disable"){let _=G.type==="enable";return await s9(_),xZ(_),f.info("commands","dump changed",{enabled:_}),o7({argumentsText:Z,enabled:_,settingsPath:await S.getSettingsPath()})}let W=await p(K),j=SZ(W);return xZ(j),o7({argumentsText:Z,enabled:j})}async function V3(Z){let G=u6(Z);if(G.type==="enable"||G.type==="disable"){let _=G.type==="enable";return await s$(_),IZ(_),f.info("commands","fast mode changed",{enabled:_}),r7({argumentsText:Z,enabled:_,settingsPath:await S.getSettingsPath()})}let W=await p(K),j=PZ(W);return IZ(j),r7({argumentsText:Z,enabled:j})}async function j3(Z,G){if(l6(Z).type==="fire"){if(!G)return`## Claude Start Failed
26
+
27
+ - OpenCode did not provide a session ID.`;try{return await i3($.client,G),a7({argumentsText:Z}).text}catch(j){return`## Claude Start Failed
28
+
29
+ - ${j instanceof Error?j.message:String(j)}`}}return a7({argumentsText:Z}).text}async function EJ(Z,G){let W=n6(Z);if(W.type==="mode")return await x$(W.mode,K),f.info("commands","routing mode changed",{mode:W.mode}),e7({argumentsText:Z,mode:W.mode});if(W.type==="reset"&&G)await(await vZ()).router.clear(G),f.info("commands","sticky routing assignment reset");let j=await p(K);return e7({argumentsText:Z,mode:V1(j)})}async function K3(Z){let G=d6(Z);if(G.type==="level")return await a9(G.level),t7({argumentsText:Z,level:G.level,settingsPath:await S.getSettingsPath()});let W=await p(K),j=CZ(W)??"info";return t7({argumentsText:Z,level:j,settingsPath:await S.getSettingsPath()})}async function _3(Z){let G=i6(Z),W=y9(await p(K)),j=W;if(G.type==="enable"){if(j=!0,!W)await k0(!0,K),F1.start(),f.info("commands","prime changed",{enabled:!0})}else if(G.type==="disable"){if(j=!1,W)await k0(!1,K),F1.stop(),f.info("commands","prime changed",{enabled:!1})}if(G.type==="enable"||G.type==="disable"){let L=await p(K);if(L&&O1)try{let N=await O1().catch(()=>{return});await v$(L,{activeId:X$.activeId,route:X$.route,mainAccessToken:N?.access,routingAuthoritative:!1})}catch(N){f.warn("sidebar","prime-toggle sidebar write failed",{error:N instanceof Error?N.message:String(N)})}}let _=await p(K);return K6({argumentsText:Z,enabled:j,accounts:F1.stats(_)}).text}async function O4(Z,G,W){let j=W??y6(Z);if(j.type==="add-apikey"){if(!j.apiKey)return{text:"API key is required",accounts:o$(await p(K)??Y1())};let H=j.label?.trim()||void 0,A=Date.now(),y=j.baseURL?.trim()||"https://api.kie.ai/claude";if(!qZ(y))return{text:"Invalid base URL. Must be an http(s) URL without embedded credentials.",accounts:o$(await p(K)??Y1())};let c=j.authHeader??"authorization-bearer",i={id:H||NZ(),label:H||void 0,type:"api",apiKey:j.apiKey,baseURL:y,authHeader:c,enabled:!0,addedAt:A,lastUsed:A};await S.addApi({routeId:i.id,apiKey:j.apiKey,label:i.label,baseURL:y,authHeader:c});let L0=await p(K);await FJ(L0);let g0=o$(L0??{version:1,accounts:[]});return{text:`API key account "${i.label??i.id}" added.`,accounts:g0}}if(j.type==="add-oauth-start"){if(await R1("opencode",process.env)!=="local")throw Error("Disconnect from the vault first.");let H=await X("max"),A={state:H.state,verifier:H.verifier,redirectUri:H.redirectUri,createdAt:Date.now()};return r(G??"default",A),{text:`Open this URL in your browser:
30
+ ${H.url}`,knobs:{oauthUrl:H.url},accounts:o$(await p(K)??Y1())}}if(j.type==="add-oauth-finish"){let H=G??"default",A=n(H);if(!A)return{text:"OAuth session expired. Please start again.",accounts:o$(await p(K)??Y1())};try{let y=await BZ(j.code,A.verifier,A.redirectUri,A.state);if(y.type==="failed")return{text:"OAuth authentication failed. Please check the code and try again.",accounts:o$(await p(K)??Y1())};let c=Date.now(),i={id:NZ(),type:"oauth",authLineageId:NZ(),label:j.label||void 0,access:y.access,refresh:y.refresh,expires:y.expires,enabled:!0,addedAt:c,lastUsed:c,lastRefreshedAt:c};N$(),await S.loginOAuth({routeId:i.id,label:i.label,credential:{access:y.access,refresh:y.refresh,expires:y.expires}});let L0=await p(K);return await FJ(L0),{text:"OAuth account added.",accounts:o$(L0??Y1())}}catch{return{text:"OAuth exchange failed due to a network error. Please try again.",accounts:o$(await p(K)??Y1())}}finally{q.delete(H)}}let _=await p(K);if(j.type==="status"&&_){let H;if(O1)try{let A=await O1();if(A.type==="oauth")H=K4??A.access}catch{}_=await p8(_,H,AbortSignal.timeout(3000),g1)}let L=j.type==="status"?await L3(_):void 0,N=await V6({argumentsText:Z,storage:_??{version:1,accounts:[]},path:K,claustrum:j.type==="status"&&!L?await n7(q8()):void 0,statusProjection:L,transition:async(H)=>({text:H==="claustrum"?"Run `npx @cortexkit/opencode-anthropic-auth setup` to enroll and activate scoped custody safely while OpenCode is stopped.":"Local exit requires replacing the OpenCode auth tombstone with a verified local OAuth login while OpenCode is stopped. Do not change custody mode alone."}),resetEnrollment:async()=>{switch(await $G(b9("opencode"),DZ)){case"reset":return{text:"Terminal Claustrum enrollment state cleared. Run setup to enroll OpenCode again."};case"idle":return{text:"No Claustrum enrollment state to reset. Run setup to enroll OpenCode."};case"refused-pending":return{text:"An enrollment request may still be in progress. Quit OpenCode and run setup again; it picks up the same request."};case"refused-approved":return{text:"Claustrum enrollment is already approved. Revoke it in Claustrum before removing local enrollment state."};case"busy":return{text:"Another process is updating Claustrum enrollment; retry shortly."}}}});if(N.updated){if(N.updated.action==="enable"||N.updated.action==="disable")await I$(N.updated.id,N.updated.action==="enable",K);else if(N.updated.action==="remove")await e1(N.updated.id,K);else if(N.updated.action==="reorder")await T$(N.updated.newOrder??N.updated.previousOrder??[],K,N.updated.id);else if(N.updated.action==="reset-backoff")await Y4("main"),h.clearMainBackoff(),f.info("commands","native main refresh and quota backoff cleared");let H=await p(K);if(O1)try{let A=await O1();v$(H,{activeId:X$.activeId,route:X$.route,mainAccessToken:A.access,mainRefreshToken:A.refresh,routingAuthoritative:!1})}catch{}}let O=await p(K),U=o$(O??{version:1,accounts:[]});return{text:N.text,accounts:U,statusProjection:L}}async function L3(Z){let G=Z??await p(K),W=G??Y1(),j=o$(W).map((O)=>{let U=W.accounts.find((y)=>y.id===O.id),H=O.role==="main"?"na":U&&T0(U)&&F4(U.id,W)?"on":"off",A=hJ(O,G);return{id:O.id,label:O.label,role:O.role,enabled:O.enabled,quotaPercent:O.quotaPercent,...O.tierLabel&&{tierLabel:O.tierLabel},claustrumGate:H,custodyState:A,vaultServed:A==="on-vault-served",vaultReauth:A==="on-vault-reauth"}}),_=await n7(q8()),L=v4(W),N=L==="claustrum"?await L8(b9("opencode"),DZ):void 0;return{accounts:j,claustrumDetection:_.status,custodyMode:L,...N&&{claustrumEnrollment:N}}}async function UY(Z,G,W){if(Z==="claude-quota")return{command:Z,text:await Y3(),knobs:{}};if(Z==="claude-start"){let O=await j3(G,W);return{command:Z,text:O,knobs:{}}}if(Z==="claude-logging"){let O=await K3(G),U=await p(K);return{command:Z,text:O,knobs:{level:CZ(U)??"info"}}}if(Z==="claude-account"){let O=await O4(G,W),U=O.statusProjection??await L3(),H={accounts:U.accounts,claustrumDetection:U.claustrumDetection,custodyMode:U.custodyMode,custodyModeKnown:!0,...U.claustrumEnrollment&&{enrollmentStatus:$8(U.claustrumEnrollment,U.accounts.some((A)=>A.role==="main"&&A.vaultServed)).join(`
31
+ `)}};if("knobs"in O&&O.knobs)Object.assign(H,O.knobs);return{command:Z,text:t4?`${O.text}
32
+
33
+ - Custody startup mismatch: ${t4}`:O.text,knobs:H}}if(Z==="claude-routing"){let O=await EJ(G,W),U=await p(K);return{command:Z,text:O,knobs:{mode:V1(U)}}}if(Z==="claude-fast"){let O=await V3(G),U=await p(K);return{command:Z,text:O,knobs:{enabled:PZ(U)}}}if(Z==="claude-dump"){let O=await z3(G),U=await p(K);return{command:Z,text:O,knobs:{enabled:SZ(U)}}}if(Z==="claude-cache"){let O=await CJ(G),U=await p(K);return{command:Z,text:O,knobs:{enabled:g9(U),mode:k4(U)}}}if(Z==="claude-cachekeep"){let O=await L4(G),U=await p(K);return{command:Z,text:O,knobs:{window:Z8(U)}}}if(Z==="claude-prime"){let O=await _3(G),U=await p(K),H=y9(U);return{command:Z,text:O,knobs:{enabled:H,accounts:F1.stats(U)}}}if(Z!=="claude-killswitch")throw Error(`Unhandled command modal: ${Z}`);let j=await p(),_=TZ(j),L=(j?.accounts??[]).filter((O)=>O.enabled!==!1).map((O)=>O.id),N=s7({argumentsText:G,config:_,accountIds:L});if(N.updatedConfig)await t1(N.updatedConfig);return{command:Z,text:N.text,knobs:{config:TZ(await p()),accountIds:L}}}async function QY(Z){return{text:"Open /claude to manage native Claude settings.",knobs:{}}}let BY=async(Z,G)=>{if(G.signal?.aborted)throw G.signal.reason??Error("Menu action aborted");let W;switch(Z.action){case"enable":case"disable":await S.setEnabled(Z.values.id,Z.action==="enable"),W=`Account ${Z.values.id} ${Z.action}d.`;break;case"remove":await S.remove(Z.values.id),W=`Account ${Z.values.id} removed.`;break;case"move-up":case"move-down":{let j=(await S.read()).accounts.filter((N)=>N.id!=="main").map((N)=>N.id),_=j.indexOf(Z.values.id);if(_<0)throw Error("Native account not found");let L=_+(Z.action==="move-up"?-1:1);if(L>=0&&L<j.length){let N=j[L];if(N===void 0)throw Error("Native account order changed");j[L]=Z.values.id,j[_]=N,await S.reorder(j,Z.values.id)}W="Native account order updated.";break}case"add-apikey":W=(await O4("",Z.sessionId,{type:"add-apikey",apiKey:Z.values.apiKey,label:Z.values.label??void 0,baseURL:Z.values.baseURL??void 0,authHeader:Z.values.authHeader??void 0})).text;break;case"add-oauth-start":W=(await O4("",Z.sessionId,{type:"add-oauth-start"})).text;break;case"add-oauth-finish":W=(await O4("",Z.sessionId,{type:"add-oauth-finish",...Z.values})).text;break;case"reset-backoff":{await Y4("main",G.signal),h.clearMainBackoff(),W="Native main refresh and quota backoff cleared; credential validation and quarantine are unchanged.";break}case"enrollment-reset":W=(await O4("enrollment-reset")).text;break;case"quota-refresh":W=await Y3(!0);break;case"routing-mode":W=await EJ(Z.values.mode);break;case"routing-reset":W=await EJ("reset",Z.sessionId);break;case"cache-on":case"cache-off":W=await CJ(Z.action==="cache-on"?"on":"off");break;case"cache-mode":W=await CJ(`mode ${Z.values.mode}`);break;case"cachekeep-always":W=await L4("always");break;case"cachekeep-off":W=await L4("off");break;case"cachekeep-window":W=await L4(`${Z.values.startHour}-${Z.values.endHour}`);break;case"cachekeep-subagents":W=await L4(`subagents ${Z.values.enabled}`);break;case"dump-on":case"dump-off":W=await z3(Z.action==="dump-on"?"on":"off");break;case"fast-on":case"fast-off":W=await V3(Z.action==="fast-on"?"on":"off");break;case"prime-on":case"prime-off":W=await _3(Z.action==="prime-on"?"on":"off");break;case"logging-level":W=await K3(Z.values.level);break;case"killswitch-on":case"killswitch-off":case"killswitch-set":{let _=(await S.read()).accounts.filter((L)=>L.id!=="main").map((L)=>L.id);await S.updateSettings((L)=>{let N=TZ({...L,version:1,accounts:[]});if(Z.action!=="killswitch-set"){let H=s7({argumentsText:Z.action==="killswitch-on"?"on":"off",config:N,accountIds:_});return{...L,killswitch:H.updatedConfig??N}}let O={...N.accounts},U={...N,enabled:!0,accounts:O};for(let H of Z.values.entries){let A={five_hour:H.fh,seven_day:H.sd,...H.scoped===void 0?{}:{scoped:H.scoped}};if(H.account==="main"||H.account==="all")U.main=A;if(H.account==="all")for(let y of _)O[y]=A;else if(H.account!=="main")O[H.account]=A}return{...L,killswitch:U}}),W="Native killswitch policy updated.";break}case"start-fire":W=await j3("",Z.sessionId);break;default:throw Error(`Unsupported native menu action: ${Z}`)}return FJ(await p()).catch(()=>{}),{ok:!0,text:W.split(`
34
+ `).filter((j)=>!j.includes("/claude-")).join(`
35
+ `)}},FY=async(Z,G)=>{if(Z==="account"){let _=await i4(AbortSignal.timeout(3000)),L=_.mode==="claustrum"?await L8(b9("opencode"),DZ):void 0;return[`Custody mode: ${_.mode}`,...L?$8(L,_.accounts.some((N)=>N.id==="main"&&N.source==="vault"&&v0(N))):[],..._.accounts.map((N)=>`${N.label??N.id} [${N.id==="main"?"main":"fallback"}] ${N.enabled?"enabled":"disabled"} — ${N.source}${N.state?` (${wZ(N)})`:""}${f4(N.profile)?` — ${f4(N.profile)}`:""}`)].join(`
36
+ `)}return(await UY({account:"claude-account",quota:"claude-quota",routing:"claude-routing",killswitch:"claude-killswitch",cache:"claude-cache",cachekeep:"claude-cachekeep",dump:"claude-dump",logging:"claude-logging",fast:"claude-fast",prime:"claude-prime"}[Z],"",G.sessionId)).text.split(`
37
+ `).filter((_)=>!_.includes("/claude-")).join(`
38
+ `)},SJ=new Map;function O3(Z){let G=B9(Z),W=SJ.get(Z);if(!W||W.interactive!==G)W={interactive:G,command:o3({host:"opencode",dispatch:BY,readStatus:FY,readAccounts:()=>S.read(),readSeparateHostLoginNotice:async()=>{if(await R1("opencode")!=="local")return!1;let j=await S.read(),_=_8(await O8(g));return j.mode==="local"&&(_==="committed"||_==="retired")&&N8(j)&&o4(await n4?.())},interactive:G})},SJ.set(Z,W);return W.command}function wY(Z,G=10){let W=Math.max(0,Math.min(Math.round(Z/100*G),G));return"█".repeat(W)+"░".repeat(G-W)}function J9(Z,G){return`${Z} ${wY(G)} ${String(Math.round(G)).padStart(3)}%`}function N3(Z){if(!Z)return"";let G=new Date(Z).getTime();if(Number.isNaN(G))return"";let W=G-Date.now();if(W<=0)return"resets now";let j=Math.floor(W/60000);if(j<1)return"resets <1m";if(j<60)return`resets ${j}m`;let _=Math.floor(j/60),L=j%60;return L>0?`resets ${_}h${L}m`:`resets ${_}h`}function TY(Z,G,W){let j=[],_=0;if(Z){let{five_hour:O,seven_day:U}=Z;if(O||U){let A=W==="main"?"active":"idle",y=N3(O?.resetsAt),c=[`main · ${A}${y?` (${y})`:""}`];if(O)c.push(J9("5h",O.usedPercent)),_=Math.max(_,O.usedPercent);if(U)c.push(J9("7d",U.usedPercent)),_=Math.max(_,U.usedPercent);j.push(c.join(`
39
+ `))}}if(G?.length)for(let O of G){let U=O.quota;if(!U)continue;let{five_hour:H,seven_day:A}=U;if(!H&&!A)continue;let y=O.label||"alt",i=W===O.id?"active":"idle",L0=N3(H?.resetsAt),g0=[`${y} · ${i}${L0?` (${L0})`:""}`];if(H)g0.push(J9("5h",H.usedPercent)),_=Math.max(_,H.usedPercent);if(A)g0.push(J9("7d",A.usedPercent)),_=Math.max(_,A.usedPercent);j.push(g0.join(`
40
+ `))}if(!j.length)return;let L=j.join(`
41
+
42
+ `),N=_>=90?"error":_>=70?"warning":"info";z.tui?.showToast?.({body:{title:"Claude Quota",message:L,variant:N,duration:N==="error"?8000:5000}})?.catch?.(()=>{})}if($.directory){let Z=R8($.directory);try{UJ=await O7(Z,()=>L7({dir:Z,drain:K7,apply:QY,applyMenu:(G)=>O3(G.sessionId??"").apply(G)}))}catch{f.warn("rpc","native menu server unavailable")}}let D3={"experimental.chat.messages.transform":async(Z,G)=>{let W=G.messages;v1.observeMessages(W);let j=b3(W);if(j){Q1.record(j);return}let _=W.findLast((O)=>O.info?.role==="user"),L=_?.info?.sessionID,N=_?.info?.id;if(typeof L==="string"&&typeof N==="string")Q1.clear(L,N)},"chat.message":async({sessionID:Z},G)=>{JJ.observeSyntheticMessage({sessionId:Z,messageId:G.message.id,parts:G.parts})},"chat.headers":async({sessionID:Z,agent:G,message:W},j)=>{if(Z7(G))j.headers[eJ]="auxiliary";JJ.markHeaders({sessionId:Z,messageId:W.id,headers:j.headers}),Q1.markHeaders({sessionId:Z,messageId:W.id,headers:j.headers}),v1.markHeaders({sessionId:Z,messageId:W.id,headers:j.headers})},event:async({event:Z})=>{let G=Z,W=G.properties?.info,j=G.properties?.sessionID??W?.sessionID??W?.id;if(!j)return;if(G.type==="message.updated"&&W?.role==="user"&&!G3(j,W.id))if(typeof W.id==="string"){if(ZJ.set(j,W.id),V$.has(j)&&u4.get(j)!==W.id)V$.delete(j)}else V$.delete(j);if(G.type==="session.status"&&G.properties?.status?.type!=="idle")V$.delete(j);if(G.type==="session.idle"){let _=ZJ.get(j);if(_)u4.set(j,_);else u4.delete(j);V$.add(j);while(V$.size>128){let L=V$.values().next().value;if(L)V$.delete(L);else break}wJ(j)}if(G.type==="session.deleted"||G.type==="message.removed")v1.clearSession(j);if(G.type==="session.deleted"){R0.clearSession(j),$J(j),SJ.delete(j),q.delete(j),JJ.clearSession(j),k$.delete(j),E$.delete(j),V$.delete(j),ZJ.delete(j),u4.delete(j),a$.delete(j);for(let _ of f$.keys())if(_.startsWith(`${j}\x00`))f$.delete(_);G4.delete(j)}},config:async(Z)=>{let G={...Z.command??{}};for(let W of M8)delete G[W];Z.command={...G,claude:{template:"claude",description:"Manage Claude accounts, quotas, routing, and cache settings."}}},"experimental.chat.system.transform":async(Z,G)=>{if(!AG(Z))return;PG(G.system)},provider:{id:"anthropic",async models(Z,G){let W=bG(vG(Z.models));if(G.auth?.type!=="oauth"||!q6(z$??{}))return W;return gG(W)}},"command.execute.before":async(Z)=>{if(Z.command!=="claude")return;let G=await O3(Z.sessionID).open(Z.sessionID),W=B9(Z.sessionID),j=!1;if(W)$Z(G,Z.sessionID);else if(!pG()&&!j7(Z.sessionID))W=await V7(G,Z.sessionID,{timeoutMs:J.tuiPickupTimeoutMs??yG,setTimeout:Y.setTimeout,clearTimeout:Y.clearTimeout}),j=!W;if(!W){let _=[...j?[cG(),""]:[],G.menu.title,...G.menu.sections.flatMap((L)=>[`
43
+ ## ${L.title}`,...L.lines,...L.items.map((N)=>`${N.label}${N.detail?` — ${N.detail}`:""}`)])].join(`
44
+ `);await P8($,Z.sessionID,_)}SG()},auth:{provider:"anthropic",async loader(Z,G){$1=async()=>{let U=await Z();return{type:U.type,active:EZ(U,"anthropic")}},n4=Z;let W=await Z();if(W.type!=="oauth")return{};let j=await R1("opencode").catch(()=>{return});if(!yZ&&EZ(W,"anthropic")&&process.env.OPENCODE_ANTHROPIC_AUTH_DISABLE_PROFILE_HYDRATION!=="1"){yZ=!0;let U=i4(L1.signal).then((H)=>{if(!L1.signal.aborted)return v$(H.policyStorage,{...X$,routingAuthoritative:!1})}).catch(()=>{if(!L1.signal.aborted)f.debug("quota","startup account profile hydration failed")});_1.add(U),U.then(()=>_1.delete(U))}function _(U,H=!1){if(!EZ(U,"anthropic")&&!(H&&o4(U)))throw Error("Native OAuth requires inert OpenCode activation; run offline setup")}async function L(U){_(await Z(),U&&await R1("opencode")==="local")}let N=async(U,H,A=!1)=>{let y=await Z();if(y.type!=="oauth")return{type:y.type,access:"",expires:0,refresh:void 0,nativeAccountIdentity:void 0,nativeRoutingLineage:void 0,nativeLocalSource:void 0,nativeScopedAttempt:void 0,modelDenied:!1,credentialUnavailable:!1,credentialFailure:void 0,deferred:!1};let c=await R1("opencode");if(c==="claustrum"&&!JY(y))throw Error("This host uses the credential vault, but OpenCode holds a separate Anthropic login. Remove it and choose the vault login, or disconnect from the vault.");N$();let i=await a6(S,H),L0=c==="claustrum"?"committed":_8(await O8(g)),g0=N8(i);if(_(y,c==="local"&&(L0==="committed"||L0==="retired")&&g0),c==="claustrum"&&!i.accounts.some((x0)=>x0.type==="oauth"&&v0(x0)))throw new MZ;let P0=S3(i.policyStorage);try{A3({mode:c==="claustrum"?"C":"L",main:vJ(y),fallbacks:c==="claustrum"?"T":P0.fallbacks,evidence:"V",authority:L0,localOAuthServable:g0}),t4=void 0}catch(x0){if(x0 instanceof w4)t4=x0.verdict;throw x0}h0=i.policyStorage;let y0=i.accounts.find((x0)=>x0.id==="main"),H0=y0?.binding,D$=y0?W$(y0,i.policyStorage):void 0,N1=D$&&D$!==y0?.quota?{...i.policyStorage,quota:{...i.policyStorage.quota,mainQuota:D$}}:i.policyStorage,A$=d("main",O0(H0),y0?.accountIdentity,i.policyStorage),P$=Boolean(H0&&A$?.lineage===O0(H0)&&A$?.generalExhausted===!0);if(y0&&H0&&(!f0||H0.rowId!==f0.rowId||H0.credentialEpoch>f0.credentialEpoch))h.clearMain(),h.setMainQuotaAccountIdentity(y0.accountIdentity),f0={rowId:H0.rowId,credentialEpoch:H0.credentialEpoch};if(A&&(V1(i.policyStorage)==="fallback-first"||hZ(N1,y0?.accountIdentity,P$))){let x0=i.accounts.find((K$)=>K$.id==="main");return H?.throwIfAborted(),{type:"oauth",access:"",expires:0,refresh:void 0,nativeAccountIdentity:x0?.accountIdentity,nativeRoutingLineage:x0?.binding?O0(x0.binding):void 0,nativeLocalSource:void 0,nativeScopedAttempt:void 0,modelDenied:!1,credentialUnavailable:!1,credentialFailure:void 0,deferred:!0}}let F0,m0,H$,u$;try{F0=await C0("main",H,void 0,U,"serve",i)}catch(x0){if(x0 instanceof Z4)throw x0;if(P1(x0))throw x0;if(x0 instanceof c$){m0=x0.account;let K$=w6(m0.quota,U);if(K$!==void 0&&(!Number.isFinite(K$.checkedAt)||(K$.checkedAt??0)+x0.checkIntervalMs<=Date.now())||!RZ(m0.quota)&&!p9(m0.quota,U))try{await S.fetchQuota("main",void 0,H),F0=await C0("main",H,void 0,U),m0=void 0}catch(l$){if(P1(l$))throw l$;if(l$ instanceof c$)m0=l$.account;else if(l$ instanceof C$)H$=l$.account,u$=l$}}else if(x0 instanceof C$)H$=x0.account,u$=x0}return H?.throwIfAborted(),{type:"oauth",access:F0?.accessToken??"",expires:F0?.expires??0,refresh:void 0,nativeRoutingLineage:B0(F0?.localSubject,F0?.scopedAttempt)??(y0?.binding?O0(y0.binding):void 0),nativeAccountIdentity:F0?.accountIdentity??m0?.accountIdentity??H$?.accountIdentity,modelDenied:Boolean(m0),credentialUnavailable:Boolean(H$),credentialFailure:u$,deferred:!1,nativeLocalSource:F0?.localSource,nativeScopedAttempt:F0?.scopedAttempt}};O1=N;let O={type:"oauth",access:"",expires:0};if(O.type==="oauth"){let y=function(){if(w1)Y.clearInterval(w1);let Q=async()=>{try{let B=await p(K);if(!LY(B))return;let x=await N();if(x.type!=="oauth")return;if(x.nativeLocalSource==="rotated"||x.nativeLocalSource==="adopted")return;if(x.expires&&x.expires-Date.now()>Z3(B))return;await A()}catch{f.warn("refresh","native main OAuth background refresh unavailable")}};w1=Y.setInterval(()=>{Q()},OG+A8(C8)),w1.unref?.()},i=function(Q,B){if(Q instanceof Request&&Q.body)return!1;return B==null||typeof B==="string"},L0=function(Q){if(typeof Q!=="string")return;try{let B=JSON.parse(Q);return typeof B.model==="string"?B.model:void 0}catch{return}},g0=function(Q){return Q.has("x-parent-session-id")},P0=function(Q){let B;try{B=JSON.parse(Q)}catch{return!1}if(typeof B!=="object"||B===null)return!1;let x=Reflect.get(B,"error");return Reflect.get(B,"type")==="error"&&typeof x==="object"&&x!==null&&Reflect.get(x,"type")==="rate_limit_error"},y0=function(Q){return Q?.quota?.enabled===!0},D$=function(Q,B){if(Q.delete("authorization"),Q.delete("x-api-key"),B.authHeader==="x-api-key")Q.set("x-api-key",B.apiKey??"");else Q.set("Authorization",`Bearer ${B.apiKey??""}`);Q.set("Content-Type","application/json"),u7(Q)},F0=function(Q){return h.getFallback(Q.id,Q)?.quota??Q.quota},m0=function(Q,B){return Q.status===429||B},H$=function(Q,B=h0){return M0("main",Q?.routingLineage,Q?.providerAccountUuid,h.getMain(Q?.quotaKey??S$),B)},u$=function(Q,B){if(!Q&&!B?.providerAccountUuid)return!1;let x=H$(B);return Boolean(x&&(Q||x.quota.accountIdentity===B?.providerAccountUuid)&&x.refreshAfter>Date.now()&&W4(x.quota)&&(x.quota.source!=="headers"||d("main",B?.routingLineage,B?.providerAccountUuid)?.generalExhausted===!0||["five_hour","seven_day"].some((b)=>x.quota.fieldSources?.[b]==="poll"&&(x.quota[b]?.remainingPercent??1)<=0)))},H=(await S.read().catch(()=>{return}))?.accounts.find((Q)=>Q.id==="main");if(j4=H?.binding?.rowId??H?.accountIdentity,S$??=H?.accountIdentity??j4,O.access)await z4(O.access);async function A(Q,B,x){let b=o4(await Z());await L(b),x?.throwIfAborted();let u=await C0("main",x,Q,B,"refresh");return await L(b),x?.throwIfAborted(),u.accessToken}if(j==="local")y();h.seedFallbacksFromAccounts((z$?.accounts??[]).filter(T0));let c=await BG(()=>p(K)).catch(()=>({freshStorage:null,activeId:void 0,route:"main"}));await v$(c.freshStorage,{activeId:c.activeId,route:c.route,mainAccessToken:O.access,routingAuthoritative:!1});async function H0(Q,B){if(!Q.body||Q.status!==200)return B?.mark("inspect_stream_skip",{status:Q.status}),{response:Q,rateLimited:!1};if(Q.headers.get("x-cortexkit-relay-optimistic")==="true")return B?.mark("inspect_stream_skip",{status:Q.status,reason:"optimistic_relay"}),{response:Q,rateLimited:!1};let x=Z0(),b=Q.body.getReader(),u=[],e=0,m=Y6({maxFrameBytes:65536}),T=!1,_0=!1,Y0=!0;while(!_0&&e<65536){let{done:M,value:o}=await b.read().catch(async(w)=>{let E=XZ(w,e$.get(Q)?.toolNameMap);if(E!==w)await GZ(b,E);throw E});if(M)break;u.push(o),e+=o.byteLength;let X0;try{X0=m.push(o)}catch{break}for(let w of X0){let E=o6(W6(w,{streamStart:Y0}));if(Y0=!1,E.data===void 0)continue;T=P0(E.data),_0=!0;break}}if(T){await b.cancel().catch(()=>{});try{b.releaseLock()}catch{}let M=new ReadableStream({start(X0){for(let w of u)X0.enqueue(w);X0.close()}});B?.mark("inspect_stream_first_event",{ms:q0(Z0()-x),bytes:e,rateLimited:!0});let o=new Response(M,{status:Q.status,statusText:Q.statusText,headers:Q.headers});return G9(e$,Q,o),{response:o,rateLimited:!0}}let W0=new ReadableStream({start(M){for(let o of u)M.enqueue(o)},async pull(M){let{done:o,value:X0}=await b.read();if(o){M.close();return}M.enqueue(X0)},cancel(M){return b.cancel(M)}});B?.mark("inspect_stream_first_event",{ms:q0(Z0()-x),bytes:e,rateLimited:!1});let C=new Response(W0,{status:Q.status,statusText:Q.statusText,headers:Q.headers});return G9(e$,Q,C),{response:C,rateLimited:!1}}async function N1(Q,B,x,b){if(N$(),!B){let m=H$(x);if(!x?.providerAccountUuid||!m||m.refreshAfter<=Date.now()||!W4(m.quota))throw Error("API fallback requires fresh general primary OAuth exhaustion");let T=await C0("main",b);if(T.accountIdentity!==x.providerAccountUuid||x.routingLineage&&B0(T.localSubject,T.scopedAttempt)!==x.routingLineage)throw Error("Primary identity changed before API fallback");B=T.accessToken}let u=await S.authorizeApi(Q,b),e=(await S.read()).accounts.find((m)=>m.id==="main");if(e?.binding&&O0(e.binding)!==x?.routingLineage)throw Error("Primary identity changed before API fallback");if(!u$(B,x))throw Error("API fallback requires fresh general primary OAuth exhaustion");return u}async function A$(Q,B,x,b,u="api_fallback",e,m,T,_0){if(m)m.oauthAccountId=void 0,m.opusCacheAnchor=void 0;let Y0=Z0(),W0=x4(Q,B),C=W0.get("x-session-affinity")||W0.get("x-opencode-session"),M=g0(W0),o=W0.get(c1)??void 0,X0=Q1.resolveHeader(o),w=X0?Q1.versionsFor(X0.sessionId,X0.messageId):void 0;W0.delete("x-parent-session-id"),W0.delete("x-session-affinity"),W0.delete("x-opencode-session"),W0.delete("x-opencode-session-id"),W0.delete("x-opencode-parent-session-id"),W0.delete(c1),W0.delete(U4),W0.delete(eJ);let E=await h4(Q,B),l=!1,Q0=null,k,d0=typeof E==="string"?E.length:void 0;if(E&&typeof E==="string"){let V0=Z0(),i0=(()=>{if(!AZ())return!1;try{return z8(JSON.parse(E).model)}catch{return!1}})();try{E=await P9(E,{onToolNameMap:(p0)=>{k=p0},cache1hEnabled:!M&&r1(),cache1hMode:n1(),fastModeEnabled:i0,sessionId:C||void 0,midConversationEffortEnabled:!1,midConversationEffortPlan:o,midConversationEffortResolvedPlan:X0,midConversationEffortPlanVersions:w,modelRemapEnabled:!0,perf:(p0,T1)=>b?.mark(`rewrite_body_${p0}`,{route:u,...T1})})}catch(p0){if(p0 instanceof E0)return w8(p0);if(p0 instanceof D8)return T8(p0);throw p0}if(D$(W0,x),W0.set("anthropic-beta",j8(W0.get("anthropic-beta"),[])),i0)A9(W0);try{l=JSON.parse(E).stream===!0}catch{}b?.mark("rewrite_body",{route:u,ms:q0(Z0()-V0),originalBytes:d0,rewrittenBytes:E.length,cacheEnabled:!M&&r1(),cacheMode:n1(),fastModeEnabled:i0,subagent:M})}else D$(W0,x);let U$=await OJ(W0),Q$=await N1(x.id,T,_0,B?.signal??void 0);x={...x,...Q$},D$(W0,x);let c0=I4(Q,{baseURL:x.baseURL}),y1=Z0(),B$=v9([x.apiKey??""],l?"event-stream":"http"),_$;try{_$=B$.redactResponse(await fetch(c0.input,{...B,body:E,headers:W0,...WZ()&&{tls:{rejectUnauthorized:!1}}}))}catch(V0){let i0=B$.redactError(V0);if(B$.dispose(),typeof E==="string")await h9({affinity:C,route:u,error:H8,bodyText:E,url:c0.url?.toString()??a1(c0.input),method:f1(Q,B),headers:W0});throw i0}if(typeof E==="string")Q0=await h9({affinity:C,route:u,status:_$.status,bodyText:E,url:c0.url?.toString()??a1(c0.input),method:f1(Q,B),headers:W0});if(rZ(_$,{source:"turn",toolNameMap:k,accountId:x.id,synthetic:!1,...U$,requestedModel:L0(E),dump:Q0,status:_$.status,streaming:l}),b?.mark("send_headers_received",{route:u,ms:q0(Z0()-y1),status:_$.status,relayConfigured:!1,totalSendWithAccessMs:q0(Z0()-Y0),baseURL:x.baseURL}),_$.ok)U1.publish(()=>S.publishApi(Q$.subject,{lastUsed:Date.now()}));return _$}async function P$(Q,B,x,b,u="unknown",e,m="main",T,_0,Y0=!1,W0,C){v2(x,"anthropic");let M=I4(Q);if(!tJ(M.url?.toString()??a1(M.input)))return f.warn("oauth-destination","refused a Claude OAuth request to a non-Anthropic origin; nothing was sent",{route:u}),o9(f2);let o=o4(await Z()),X0=Z0(),w=e,E=async()=>{return w??=await p(K),w},l=x4(Q,B),Q0=l.get("x-session-affinity")||l.get("x-opencode-session"),k=g0(l),d0=l.get(c1)??void 0,U$=Q1.resolveHeader(d0),Q$=U$?Q1.versionsFor(U$.sessionId,U$.messageId):void 0,c0=l.get(U4)??void 0,y1=v1.resolveHeader(c0),B$=!k&&!Y0?y1:void 0;l.delete("x-parent-session-id"),l.delete("x-session-affinity"),l.delete("x-opencode-session"),l.delete("x-opencode-session-id"),l.delete("x-opencode-parent-session-id"),l.delete(c1),l.delete(U4);let _$=Y7(l),V0=await h4(Q,B),i0=Q0?LJ.previousFor(Q0):null,p0=i0?.messageId??null,T1,q$=!1,Z9=null,N4=null,D4,R;if(V0&&typeof V0==="string"){let $0=Z0();try{let U0=JSON.parse(V0);if(typeof U0.model==="string")R=U0.model}catch{}b?.mark("model_parse_for_identity",{route:u,ms:q0(Z0()-$0),bodyBytes:V0.length})}let I=await C0(m,B?.signal??void 0,void 0,R,m==="main"?"last-main":"serve");if(x=I.accessToken,m==="main"&&W0?.providerAccountUuid&&I.accountIdentity!==W0.providerAccountUuid)throw Error("Main account identity changed after request routing");C=I.scopedAttempt;let a=Z0(),j0=A0(I.accountIdentity);b?.mark("resolve_claude_code_identity",{route:u,ms:q0(Z0()-a),hasAccountUuid:Boolean(j0.accountUuid)});let s=typeof V0==="string"?V0.length:void 0;if(V0&&typeof V0==="string"){let $0=Z0(),U0=(()=>{if(!AZ())return!1;try{return z8(JSON.parse(V0).model)}catch{return!1}})(),a0=!k&&r1(),j$=n1(),d$=_0?.plan.downgraded&&_0.plan.standbyCacheAnchor?.oauthAccountId===m?_0.plan.standbyCacheAnchor:void 0;try{V0=await P9(V0,{onToolNameMap:(I0)=>{D4=I0},cache1hEnabled:a0,cache1hMode:j$,fastModeEnabled:U0,identity:j0,sessionId:Q0||void 0,thinkingPrefixMismatchBehavior:T6(await E()),midConversationEffortEnabled:!0,turnEndNoteEnabled:!0,turnEndNote:(await E())?.turnEndNote,midConversationEffortPlan:d0,midConversationEffortResolvedPlan:U$,midConversationEffortPlanVersions:Q$,hybridStandbyAnchor:d$,serverSideFallbackEnabled:e9==="server",laneStart:Y0,billingLineage:B$,cacheDiagnosticsPreviousMessageId:p0,perf:(I0,b$)=>{if(b?.mark(`rewrite_body_${I0}`,{route:u,...b$}),I0==="cache_strategy"&&b$?.standbyBridgeApplied===!0&&_0&&!_0.standbyBridgeLogged)_0.standbyBridgeLogged=!0,f.info("fable-fallback","restored standby Opus cache bridge",{session:_0.plan.sessionId,distanceBlocks:b$?.standbyDistanceBlocks})}})}catch(I0){if(I0 instanceof E0)return w8(I0);if(I0 instanceof D8)return T8(I0);throw I0}if(_0?.plan.downgraded&&a0&&j$==="hybrid"){let I0=b7(V0);_0.opusCacheAnchor=I0?{...I0,oauthAccountId:m}:void 0}let H4=Z0();try{let I0=JSON.parse(V0);i1(l,x,{body:I0,identity:j0,requestClass:_$});let b$=I0.diagnostics,H3=b$&&typeof b$==="object"&&!Array.isArray(b$)&&b$.previous_message_id===p0?p0:void 0;if(H3!==void 0&&l.get("anthropic-beta")?.split(",").map((EY)=>EY.trim()).includes(B4))T1={sessionId:Q0??"session-unknown",previousMessageId:H3,...i0?{previousMessageReceivedAt:i0.receivedAt}:{},isSubagent:k,ttlSent:z9(I0)};q$=I0.stream===!0,b?.mark("set_oauth_headers_body_parse",{route:u,ms:q0(Z0()-H4),bodyBytes:V0.length,parsed:!0})}catch{i1(l,x,{identity:j0,requestClass:_$}),b?.mark("set_oauth_headers_body_parse",{route:u,ms:q0(Z0()-H4),bodyBytes:V0.length,parsed:!1})}if(U0)A9(l);b?.mark("rewrite_body",{route:u,ms:q0(Z0()-$0),originalBytes:s,rewrittenBytes:V0.length,cacheEnabled:!k&&r1(),cacheMode:n1(),fastModeEnabled:U0,subagent:k})}let t=await OJ(l);if(_0)_0.oauthAccountId=m;if(_0)_0.subagent=k;if(typeof V0==="string"){let $0=await E();if(r1()&&n1()==="hybrid"&&(!k||E6($0))){let U0=Z0(),a0=t0.track({sessionId:Q0,url:M.url?.toString()??M.input.toString(),headers:l,bodyText:V0,storage:$0,cacheMode:"hybrid",oauthAccountId:m,oauthAccountIdentity:I?.accountIdentity,isSubagent:k});if(b?.mark("cachekeep_track",{session:Q0,ms:q0(Z0()-U0),tracked:a0.tracked,reason:a0.tracked?void 0:a0.reason,bodyBytes:V0.length}),Q0&&_0&&!_0.plan.downgraded&&a0.tracked){K1.set(_0.plan.recoveryKey,{...I.accountIdentity!==void 0&&{accountIdentity:I.accountIdentity},sentAt:Date.now()});while(K1.size>128){let j$=K1.keys().next().value;if(j$===void 0)break;K1.delete(j$)}}}if(Q0&&!k&&R0.hasSourceWarmForSession(Q0)){if(B$&&B$.sessionId===Q0)R0.noteSourceWarmUserTurn(Q0,B$.promptId);if(!W8($0)||!r1()||n1()!=="hybrid")$J(Q0);else{let U0=KZ(V0),a0=new Set(t0.trackedSessions().map((j$)=>j$.id));for(let{recoveryKey:j$,warm:d$}of R0.sourceWarmsForSession(Q0)){let H4=Y$(d$.model),I0=H4?p1(Q0,H4):void 0;if(I0!==void 0&&!a0.has(I0)&&Date.now()-d$.sentAt>30000){R0.dropSourceWarm(j$);continue}if(d$.oauthAccountId!=="main"&&!$0?.accounts.some((b$)=>b$.id===d$.oauthAccountId&&v0(b$))){if(R0.dropSourceWarm(j$),I0!==void 0)t0.untrack(I0);f.info("fable-fallback","source warm stopped: bound account unavailable",{session:Q0,reason:"account-unavailable"});continue}if(d$.firstAnchorFingerprint!==void 0&&!U0.includes(d$.firstAnchorFingerprint)){if(R0.dropSourceWarm(j$),I0!==void 0)t0.untrack(I0);f.warn("fable-fallback","source warm stopped: history no longer starts with the kept prefix",{session:Q0,reason:"source-prefix-changed"})}}}}}let n0=I,o0,h$=async($0)=>{await L(o),B?.signal?.throwIfAborted();let U0=await C0(m,B?.signal??void 0,$0,R,m==="main"?"last-main":"serve");if(await L(o),B?.signal?.throwIfAborted(),U0.accountIdentity!==n0.accountIdentity||Boolean(U0.scopedAttempt)!==Boolean(n0.scopedAttempt))throw Error("Native credential authority changed during the request");if(o0&&(!U0.scopedAttempt||U0.scopedAttempt.credentialId!==o0.credentialId||U0.scopedAttempt.accountIdentity!==o0.accountIdentity||U0.scopedAttempt.recordVersion<=o0.recordVersion))throw Error("Native vault retry has no strict newer same-account receipt");return U0},r0=!1,N0=C,u0=async()=>{r0=!0,I=await h$(),N0=I.scopedAttempt,l.set("authorization",`Bearer ${I.accessToken}`),F$={...F$,accessToken:I.accessToken,anthropicAccountUuid:R$(I.accountIdentity),localSubject:I.localSubject,scopedAttempt:I.scopedAttempt};let $0=v9([I.accessToken],q$?"event-stream":"http");try{let U0=(j$,d$)=>A4(M.input,{...B,body:j$,headers:d$,...WZ()&&{tls:{rejectUnauthorized:!1}}}),a0=$0.redactResponse(typeof V0==="string"?await GG({url:M.url?.toString()??a1(M.input),body:V0,headers:l,latch:D,send:U0}):await U0(V0,l));if(typeof V0==="string")Z9=await h9({affinity:Q0,route:u,status:a0.status,bodyText:V0,url:M.url?.toString()??a1(M.input),method:f1(Q,B),headers:l,tag:Y0?"start":void 0});return a0}catch(U0){let a0=$0.redactError(U0);if($0.dispose(),typeof V0==="string")await h9({affinity:Q0,route:u,error:H8,bodyText:V0,url:M.url?.toString()??a1(M.input),method:f1(Q,B),headers:l,tag:Y0?"start":void 0});throw a0}},L$=await E(),m1;try{m1=await S.getRelayConfig()}catch($0){if($0 instanceof x6&&$0.code==="relay-inconsistent")return o9($0.message);throw $0}let Y9=m==="main"?void 0:L$?.accounts.find(($0)=>$0.id===m&&T0($0)),J$=L6(Y9,T),F$={accountId:m,accessToken:x,authLineageId:T,anthropicAccountUuid:R$(C?.accountIdentity)??(m==="main"?W0?.providerAccountUuid:R$(j0.accountUuid)??R$(J$)),localSubject:I.localSubject,scopedAttempt:I.scopedAttempt,...m==="main"&&W0?{mainQuotaIdentity:W0}:{}},X9=Z0(),K0,s0=!1,l0=t9,Z$=()=>XG({config:m1,input:M.input,requireUpstreamUrl:D9,init:B,headers:l,body:V0,fallback:u0,affinity:Q0,optimisticResponse:m1?.transport==="websocket",authorizeAttempt:async()=>{let $0=await h$(),U0=$0.scopedAttempt;I=$0,F$={...F$,accessToken:$0.accessToken,anthropicAccountUuid:R$($0.accountIdentity),localSubject:$0.localSubject,scopedAttempt:U0};let a0=new Headers(l);return a0.set("authorization",`Bearer ${$0.accessToken}`),{headers:a0,errorSecrets:[$0.accessToken],onUpstreamStatus:(j$)=>{if(j$!==401||!U0)return;if(K0=U0,s0)l0(U0,"relay_status_field")}}},onResponseHeaders:($0)=>{lZ($0,F$),v1.commit(B$,PJ($0))},onDumpCreated:($0)=>{N4=$0},dumpTag:Y0?"start":void 0}),w0=await Z$();if(!r0&&K0&&w0.status===401&&typeof V0==="string"&&(f1(Q,B)??"").toUpperCase()==="POST"&&!B?.signal?.aborted){let $0;try{$0=await c4(K0,"model-relay",B?.signal??void 0)}catch{}if($0)await w0.body?.cancel().catch(()=>{}),f.info("claustrum","retrying after scoped credential rotation",{accountId:m,previousVersion:K0.recordVersion,newVersion:$0.recordVersion,transport:"relay"}),o0=K0,K0=void 0,w0=await Z$()}if(r0&&N0&&w0.status===401&&typeof V0==="string"&&(f1(Q,B)??"").toUpperCase()==="POST"&&!B?.signal?.aborted){let $0;try{$0=await c4(N0,"model",B?.signal??void 0)}catch{}if($0)await w0.body?.cancel().catch(()=>{}),f.info("claustrum","retrying after scoped credential rotation",{accountId:m,previousVersion:N0.recordVersion,newVersion:$0.recordVersion,transport:"direct"}),o0=N0,w0=await u0()}if(w0.status===401&&!I.scopedAttempt&&typeof V0==="string"&&(f1(Q,B)??"").toUpperCase()==="POST"&&!B?.signal?.aborted){let $0=I.accessToken,U0;try{U0=await h$($0)}catch(a0){b0.set(w0,a0)}if(U0&&U0.accessToken!==$0)await w0.body?.cancel().catch(()=>{}),w0=r0?await u0():await Z$()}if(b?.mark("send_headers_received",{route:u,ms:q0(Z0()-X9),status:w0.status,relayConfigured:m1!=null,totalSendWithAccessMs:q0(Z0()-X0)}),r0)lZ(w0.headers,F$),v1.commit(B$,PJ(w0.headers));if(rZ(w0,{source:Y0?"start":"turn",toolNameMap:D4,accountId:m,synthetic:Y0,...t,requestedModel:L0(V0),request:T1,trackSessionId:Q0??void 0,dump:r0?Z9:N4,status:w0.status,streaming:q$}),r0&&N0&&w0.status===401)await l0(N0,"direct");if(s0=!0,!r0&&K0)await l0(K0,"relay_status_field");if(w0.status===401)await F8(w0,B?.signal);if(w0.ok)U1.publish(async()=>{if(F$.scopedAttempt)await S.vault.publish(F$.scopedAttempt,{lastUsed:Date.now()});else if(F$.localSubject)await S.publishLocal(F$.localSubject,{lastUsed:Date.now()})});return w0}async function x0(Q,B){if(!Q)return!1;try{return await h.refreshMain(B?.quotaKey??S$,Q,B?.generation),u$(Q,B)}catch{return!1}}async function K$(Q,B={}){let x=X1(Q),b=await B1(!1,x,B.modelId,"admission");if(Q=await p(K),x){if(Q&&b.size)Q={...Q,accounts:Q.accounts.filter((T)=>!b.has(T.id)||W1(void 0,Q,T.id,B.modelId))}}let u=await zJ.getUsableFallbackAccounts(Q,{modelId:B.modelId}),e=new Map(u.map((T)=>[T.id,T])),m=[];for(let T of Q?.accounts??[]){if(Q&&T0(T)){if(O$(Q)){let Y0=e.get(T.id);if(Y0)m.push(Y0);continue}if(v4(Q)!=="local")continue;let _0=e.get(T.id);if(_0)m.push(_0);else if(T.access&&(!T.expires||T.expires>Date.now())&&!G1(T.lastRefreshError)&&!x1(T.lastRefreshError,T.id,Date.now(),z1(T.refresh))&&Q?.quota?.failClosedOnUnknownQuota!==!0&&!RZ(F0(T)))m.push(T);continue}if(B.includeApiRoutes===!0&&o1(T)&&v0(T)&&qZ(T.baseURL))m.push(T)}if(!X1(Q))return m;return m.filter((T)=>T0(T)?W1(F0(T),Q,T.id,B.modelId):!0)}async function AJ(Q){let B=Q.mainQuotaIdentity?.quotaKey,x=h.getMain(B),b=x?.quota;if(!I1(x?.quota,Q.storage,Date.now(),Q.requestedModelId))try{b=await h.refreshMain(B,Q.mainAccessToken,Q.mainQuotaIdentity?.generation,"admission")}catch{}let u=await zJ.getUsableFallbackAccounts(Q.storage,{modelId:Q.requestedModelId}),e=await p(K)??Q.storage,m=[],T=O$(e);if(T){let C=e?.claustrum?.primaryAccount;if(C!==void 0&&v0(C)&&!e?.claustrum?.disabledAccountIdentities?.includes(C.accountId))m.push({id:G$,access:"",quota:b,identity:C?{kind:"known",accountId:C.accountId}:{kind:"unknown"},order:0,scoped:!0})}else if((Q.mainAccessToken||Q.mainPolicyDenied)&&!G1(e?.refresh?.mainLastRefreshError))m.push({id:G$,access:Q.mainAccessToken,quota:b,identity:B?{kind:"known",accountId:B}:{kind:"unknown"},order:0});if(T)for(let[C,M]of(e?.accounts??[]).entries()){if(!v0(M)||!T0(M))continue;if(M.claustrumScopedCredentialId){let o=F0(M);if(!I1(o,e,Date.now(),Q.requestedModelId))try{o=await h.refreshFallback(M.id,"",M)}catch{}m.push({id:M.id,access:"",quota:o,identity:{kind:"known",accountId:M.id},order:C+1,account:M,scoped:!0})}}else{let C=new Map(u.map((M)=>[M.id,M]));for(let[M,o]of(e?.accounts??[]).entries()){if(!v0(o)||!T0(o))continue;let X0=C.get(o.id)??o;if(G1(X0.lastRefreshError))continue;let w=F0(X0);if(!I1(w,e,Date.now(),Q.requestedModelId))try{w=await h.refreshFallback(X0.id,X0.access??"",X0)}catch{}m.push({id:X0.id,access:X0.access??"",quota:w,identity:{kind:"known",accountId:X0.id},order:M+1,account:X0})}}let _0=new Set(u.map((C)=>C.id)),Y0=new Set(m.flatMap((C)=>{let M=C.id===G$?e?.refresh?.mainLastRefreshError:C.account?.lastRefreshError,o=!C.scoped,X0=C.identity.kind==="known"?C.identity.accountId:void 0;if(o&&G1(M))return[];if(o&&x1(M,X0,Date.now(),C.id===G$?Q.mainRefreshToken?z1(Q.mainRefreshToken):void 0:C.account?.refresh?z1(C.account.refresh):void 0)&&(C.id===G$||!_0.has(C.id)))return[];if(I1(C.quota,e,Date.now(),Q.requestedModelId)&&UZ({quota:C.quota,modelId:Q.requestedModelId}).action==="migrate")return[];if(X1(e)&&!W1(C.quota,e,C.id===G$?void 0:C.id,Q.requestedModelId))return[];return[C.id]})),W0=m.flatMap((C)=>{let M=C.id===G$?e?.refresh?.mainLastRefreshError:C.account?.lastRefreshError,o=!C.scoped,X0=C.identity.kind==="known"?C.identity.accountId:void 0;if(o&&G1(M)||o&&x1(M,X0,Date.now(),C.id===G$?Q.mainRefreshToken?z1(Q.mainRefreshToken):void 0:C.account?.refresh?z1(C.account.refresh):void 0)&&(C.id===G$||!_0.has(C.id)))return[];let w=C.id===G$?void 0:C.id,E=RZ(C.quota)?C.quota:void 0,l=E?{kind:"known",quota:E}:{kind:"unknown"};return(!X1(e)||W1(l.kind==="known"?l.quota:void 0,e,w,Q.requestedModelId))&&s1(l.kind==="known"?l.quota:void 0,e)&&(l.kind==="unknown"||u9(l.quota,Q.requestedModelId)&&(C.id===G$||_0.has(C.id)||Boolean(C.scoped)))?[{accountId:C.id,quota:l,order:C.order}]:[]});return{storage:e,allRoutes:m,candidates:W0,retainAccountIds:Y0}}let l$=new WeakMap;async function D1(Q,B,x,b,u,e,m){if(!x.length)return u??null;let T=m?.returnLastOnExhausted??!0,_0=u??null,Y0=!1,W0=async()=>{if(Y0)return;Y0=!0,await u?.body?.cancel().catch(()=>{})};for(let[C,M]of x.entries()){let o;if(o1(M))await W0(),o=await A$(Q,B,M,e,`api_fallback_${C}`,b,m?.fableRequest,m?.mainAccessToken,m?.mainQuotaIdentity);else if(O$(b)&&M.claustrumScopedCredentialId){let w;try{w=await C0(M.id,B?.signal??void 0,void 0,L0(await h4(Q,B)))}catch(l){if(l instanceof c$)continue;throw l}let E=w.scopedAttempt;if(!E)throw Error("Native vault fallback credential is unavailable");await W0(),o=await P$(Q,B,E.accessToken,e,`fallback_${C}`,b,M.id,M.authLineageId,m?.fableRequest,m?.laneStartRequest,void 0,E)}else if(v4(b)==="local"&&M.access)await W0(),o=await P$(Q,B,M.access,e,`fallback_${C}`,b,M.id,M.authLineageId,m?.fableRequest,m?.laneStartRequest);else continue;_0=o;let X0=fZ(o,b);if(!X0){let w=await H0(o,e);o=w.response,_0=o,X0=w.rateLimited}if(!X0){if(l$.set(o,o1(M)?"api":"oauth"),await m?.onSuccess?.(M),T0(M)&&y0(b)&&h.shouldRefreshOnRequestCount($9)){if(O$(b)||M.access)h.refreshFallback(M.id,O$(b)?"":M.access??"",M).then(()=>m?.onSuccess?.(M)).catch(()=>{})}return o}if(C<x.length-1||!T)await o.body?.cancel().catch(()=>{})}return T?_0:null}async function CY(Q,B,x,b,u,e,m,T,_0,Y0,W0=!1,C){if(!i(Q,B?.body))return x;let M=Z0(),o=e??await p(K);if(u?.mark("fallback_load_storage",{ms:q0(Z0()-M),cached:!!e}),!(o?.accounts??[]).some((d0)=>v0(d0)&&(T0(d0)||o1(d0)&&qZ(d0.baseURL))))return x;let w=x,E=fZ(w,o),l=m0(w,!1);if(!E){let d0=await H0(w,u);w=d0.response,E=d0.rateLimited,l=m0(w,d0.rateLimited)}if(!E)return w;let Q0=!1;if(b)Q0=b.some(o1);else if(l)Q0=await x0(m,C);let k=b;if(!k){let d0=Z0();k=await K$(o,{includeApiRoutes:Q0,modelId:_0}),u?.mark("fallback_get_accounts",{ms:q0(Z0()-d0),accounts:k.length})}if(X1(o)){let d0=k.length;if(k=k.filter((U$)=>T0(U$)?W1(F0(U$),o,U$.id,_0):!0),k.length<d0)r$("[killswitch] filtered fallbacks",{before:d0,after:k.length})}return await D1(Q,B,k,o,w,u,{onSuccess:T,mainAccessToken:m,mainQuotaIdentity:C,fableRequest:Y0,laneStartRequest:W0})??w}return{apiKey:"",async fetch(Q,B){if(Q instanceof Request&&B?.signal===void 0)B={...B,signal:Q.signal};let x=x4(Q,B),b=x.get(N9)==="1";x.delete(N9),B={...B,headers:x};let u=x.get("x-session-affinity")||x.get("x-opencode-session"),e=L0(B?.body),m=Boolean(u&&e&&!g0(x)&&R0.resetForModelChange(u,e));if(m&&u){for(let R of f$.keys())if(R.startsWith(`${u}\x00`))f$.delete(R);E$.delete(u),$J(u)}let T=R0.plan(u,B?.body),_0=e9==="server"&&L9(T?.effectiveModel??e)?T?.effectiveModel??e:void 0,Y0=T?{plan:T}:void 0;if(T?.downgraded)B={...B,body:T.bodyText};let W0=B?.body,C=EG({bodyBytes:typeof W0==="string"?W0.length:void 0}),M=(R)=>{let I=e$.get(R);return p7(R,{toolNameMap:I?.toolNameMap,perf:(a,j0)=>C.mark(a,j0),laneStart:b,laneStartOAuthServed:l$.get(R)!=="api",...I?I.streaming?{onMessageStart:(a)=>oZ(R,a,!1),onMessageDelta:(a)=>$Y(R,a),onStreamEnd:()=>I.dumpWrite}:{onMessageResponse:(a)=>oZ(R,a),onStreamEnd:()=>I.dumpWrite,responseMode:"json"}:{},contentFilterModel:T?.requestedModel,...!T?.downgraded&&T?{onContentFilter:(a)=>{if(!Y0?.oauthAccountId)return f.debug("fable-fallback","content filter recovery unavailable for non-OAuth route",{session:T.sessionId}),!1;let j0=K1.get(T.recoveryKey);K1.delete(T.recoveryKey);let s=t0.trackedRequest(T.sessionId),t;if(s)try{let u0=JSON.parse(s.bodyText);if(typeof u0.model==="string")t=u0.model}catch{}let n0=t?Y$(t):null,o0=Y$(T.requestedModel),h$=s?.oauthAccountId,r0=j0&&s&&h$!==void 0&&n0!==null&&n0===o0&&h$===Y0.oauthAccountId?{bodyText:s.bodyText,oauthAccountId:h$,...j0.accountIdentity!==void 0&&{accountIdentity:j0.accountIdentity},sentAt:j0.sentAt,model:T.requestedModel,firstAnchorFingerprint:KZ(s.bodyText)[0],url:s.url,headers:s.headers,...Y0.subagent&&{subagent:!0}}:void 0,N0=R0.activate(T,Y0.oauthAccountId,r0);XY(T).catch(()=>{f.warn("fable-fallback","source warm sync failed",{session:T.sessionId})}),f$.delete(T.recoveryKey),f$.set(T.recoveryKey,RG(T.requestedModel,N0));while(f$.size>128){let u0=f$.keys().next().value;if(u0)f$.delete(u0);else break}p$.delete(T.recoveryKey),f.info("fable-fallback","content filter detected; switching session to Opus 4.8",{session:T.sessionId,requestedModel:T.requestedModel,completedToolUse:a?.completedToolUse===!0,remaining:N0}),_4({sessionId:T.sessionId,mode:"opus",remaining:N0,requestedModelId:T.requestedModel},E,w)}}:{},...T&&Y0?{onComplete:(a)=>{if(!T.downgraded){if(R0.completeSource(T,!Y0.serverFallback)){let n0=Y$(T.requestedModel);if(n0)t0.untrack(p1(T.sessionId,n0))}return}let j0=R0.complete(T,Y0.opusCacheAnchor);if(!j0.counted)return;let s=f$.get(T.recoveryKey);if(s)f$.delete(T.recoveryKey),V$.delete(T.sessionId),W3(T.sessionId,s);if(f.info("fable-fallback","Opus 4.8 turn completed",{session:T.sessionId,requestedModel:T.requestedModel,finishReason:a,remaining:j0.remaining}),_4({sessionId:T.sessionId,mode:"opus",remaining:j0.remaining,requestedModelId:T.requestedModel},E,w),j0.remaining===0)_4({sessionId:T.sessionId,mode:"fable",remaining:0,requestedModelId:T.requestedModel},E,w,xG(T.requestedModel))}}:{},..._0?{serverSideFallbackModel:_0,...T?{onServerSideFallbackOutcome:(a)=>{if(Y0)Y0.serverFallback=a.fallback;DY(T,a,E,w)}}:{}}:{}})},o=Z0(),X0=T?.effectiveModel??L0(await h4(Q,B)),w=await N(X0,B?.signal??void 0,!0);if(C.mark("get_auth",{ms:q0(Z0()-o),authType:w.type,hasAccess:Boolean(w.access)}),w.type!=="oauth"){let R=I4(Q),I=x4(Q,B);u7(I);let a=await h4(Q,B);if(typeof a==="string")try{let s=JSON.parse(a);if(e6(s))a=JSON.stringify(s)}catch{}let j0=await fetch(R.input,{...B,body:a,headers:I});return C.done("non_oauth_passthrough",{status:j0.status}),j0}let E=await p(),l=R$(w.nativeAccountIdentity),Q0=w.nativeScopedAttempt,k;if(w.access){let R=await z4(w.access,L0(B?.body),l,Q0?.recordVersion);if(R.stale)throw Error("Main OAuth identity changed while resolving request credentials");if(k={...R,routingLineage:w.nativeRoutingLineage},l)K4=w.access,g1=R.providerAccountUuid}else if((w.modelDenied||w.credentialUnavailable||w.deferred)&&l)await bZ("",l,l),k={quotaKey:l,providerAccountUuid:l,generation:h.getMainQuotaIdentityGeneration(),routingLineage:w.nativeRoutingLineage,stale:!1,state:O$(E)?"on-cold":"na"};let d0=Z0();C.mark("load_storage",{ms:q0(Z0()-d0)}),h.updateStorage(E),h.seedMainFromStorage(E,S$),h.seedFallbacksFromAccounts((E?.accounts??[]).filter(T0));let U$=u?k$.get(u):void 0;if(m||!T||e9==="server"&&U$?.requestedModelId&&Y$(U$.requestedModelId)!==Y$(T.requestedModel))HY(u,E,w);let Q$=i(Q,B?.body),c0=L0(B?.body)??X0,y1=H$(k,E),B$=d("main",k?.routingLineage,l,E),_$=w.deferred?hZ(y1&&E?{...E,accounts:E?.accounts??[],quota:{...E?.quota,mainQuota:y1.quota}}:E,l,B$?.lineage===k?.routingLineage&&B$?.generalExhausted===!0):void 0;if(_$){let R=Q$?await K$(E,{includeApiRoutes:u$(void 0,k),modelId:c0}):[],I=await D1(Q,B,R,E,void 0,C,{onSuccess:(a)=>i0(a.id,"fallback"),mainQuotaIdentity:k,fableRequest:Y0,laneStartRequest:b});if(I)return M(I);return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:_$.message}}),{status:429,headers:{"content-type":"application/json","retry-after":String(_$.retryAfter)}})}let V0=()=>{let R=V8(h.getMain(k?.quotaKey)?.quota,(E?.accounts??[]).filter(T0),Date.now(),X0);return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"No enabled OAuth route can serve the requested model under current quota policy."}}),{status:429,headers:{"content-type":"application/json","retry-after":String(R)}})};if(Q$)$9++;if(Q$&&w.access&&(!w.expires||w.expires>Date.now()))_Y(E,w.access,k);async function i0(R,I){let a=E,j0=!1;if((E?.accounts??[]).some((s)=>T0(s)&&s.quota))try{let s=await p(K);if(s)a=s;else j0=!0}catch{j0=!0}v$(a,{activeId:R,route:I,mainAccessToken:w.access,skipFallbackQuotaSeed:j0})}let p0;if(Q$&&u&&V1(E)==="sticky-balanced"){let R=T?.effectiveModel??c0,I=jG(R),a=t0.trackedOAuthRoute(u),j0=T?.cacheAccountId??(a?a.oauthAccountId??G$:void 0),s=!1;try{let t=await AJ({storage:E,mainAccessToken:w.access,mainRefreshToken:w.refresh,mainPolicyDenied:w.modelDenied||w.credentialUnavailable,requestedModelId:R,mainQuotaIdentity:k}),n0=async(u0)=>{let L$=await vZ();return L$.router.resolve({sessionId:u,family:I,modelId:R,affinityModelId:e,candidates:t.candidates,retainAccountIds:t.retainAccountIds,storage:t.storage,inputBytes:typeof B?.body==="string"?Buffer.byteLength(B.body):1,preferredAccountId:j0,excludeAccountIds:u0,...L$.accountIdentities&&{accountIdentities:L$.accountIdentities}})},o0=G1(t.storage?.refresh?.mainLastRefreshError),h$=t.allRoutes.length===0&&!o0||t.allRoutes.some((u0)=>!u0.quota||!I1(u0.quota,t.storage,Date.now(),R)),r0=await n0();if(!r0&&h$){if(w.modelDenied)return V0();throw Error("Sticky-balanced routing is waiting for current OAuth quota snapshots")}if(!r0){if(w.modelDenied)return V0();if(O$(E))throw new MZ;let u0=X6({mainRefreshError:t.storage?.refresh?.mainLastRefreshError,fallbackReauthLabels:Q6(t.storage),routeQuotas:t.allRoutes.flatMap((L$)=>L$.quota?[L$.quota]:[]),modelId:R});return C.done("return_sticky_no_route",{status:u0.status}),u0}let N0=t.allRoutes.find((u0)=>u0.id===r0?.accountId);if(r0&&N0){if(s=!0,T?.downgraded&&R0.bindRecoveryAccount(T,N0.id)){let K0=Y$(T.requestedModel);if(K0)t0.untrack(p1(T.sessionId,K0));f.info("fable-fallback","rebound recovery to migrated sticky account",{accountId:N0.id})}let u0=async(K0)=>{if(K0.scoped){let l0=(await C0(K0.id,B?.signal??void 0,void 0,R)).scopedAttempt;if(!l0)throw Error("Native vault sticky credential is unavailable");return P$(Q,B,l0.accessToken,C,`sticky:${K0.id}`,t.storage,K0.id,K0.account?.authLineageId,Y0,b,K0.id===G$?k:void 0,l0)}return P$(Q,B,K0.access??"",C,`sticky:${K0.id}`,t.storage,K0.id,K0.account?.authLineageId,Y0,b,K0.id===G$?k:void 0)},L$=async(K0,s0,l0=!0)=>{return await i0(K0.id,"sticky-balanced"),C.done("return_sticky_balanced",{status:s0.status,accountId:K0.id,created:r0?.created,migrated:r0?.migrated}),M(s0)},m1=async(K0)=>{let s0=K0,l0=fZ(K0,t.storage),Z$=!1;if(!l0){let w0=await H0(K0,C);s0=w0.response,Z$=w0.rateLimited,l0=w0.rateLimited}return{response:s0,routeFailure:l0,streamingRateLimit:Z$}},Y9=I1(N0.quota,t.storage,Date.now(),R)?UZ({quota:N0.quota,modelId:R}):void 0;if(Y9?.action==="hold")return L$(N0,await xJ(new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:"Sticky OAuth account quota resets shortly; retaining session affinity."}}),{status:429,headers:{"content-type":"application/json"}}),u,Y9.retryAfterSeconds,!1,e$),!1);let J$=await m1(await u0(N0)),F$=!1;if(!J$.routeFailure)return L$(N0,J$.response);if(J$.response.status===401){let K0=b0.get(J$.response);if(K0){let s0=await p(K),l0=N0.id,Z$=N0.id===G$?s0?.refresh?.mainLastRefreshError:s0?.accounts.find((w0)=>w0.id===l0&&T0(w0))?.lastRefreshError;if(!G1(Z$))throw K0}F$=!0}let X9=J$.response.status===403||F$;if(J$.response.status===429||J$.streamingRateLimit){let K0;try{K0=N0.id===G$?await h.refreshMain(k?.quotaKey,N0.access??"",k?.generation):await h.refreshFallback(N0.id,N0.access??"",N0.account)}catch{K0=void 0}let s0=UZ({quota:K0,modelId:R});if(C.mark("sticky_quota_failure",{accountId:N0.id,action:s0.action,reason:s0.reason}),s0.action==="hold")return L$(N0,await xJ(J$.response,u,s0.retryAfterSeconds,J$.streamingRateLimit,e$));X9=s0.action==="migrate"}if(X9){await F8(J$.response,B?.signal);let K0=N0.id;if(t=await AJ({storage:t.storage,mainAccessToken:w.access,mainRefreshToken:w.refresh,mainPolicyDenied:w.modelDenied||w.credentialUnavailable,requestedModelId:R,mainQuotaIdentity:k}),t.candidates.filter((l0)=>l0.accountId!==K0).length>0){await J$.response.body?.cancel().catch(()=>{}),r0=await n0(new Set([K0]));let l0=t.allRoutes.find((Z$)=>Z$.id===r0?.accountId);if(r0&&l0){if(N0=l0,T?.downgraded&&R0.bindRecoveryAccount(T,N0.id)){let Z$=Y$(T.requestedModel);if(Z$)t0.untrack(p1(T.sessionId,Z$))}return L$(N0,await u0(N0))}}else if((J$.response.status===429||J$.streamingRateLimit)&&u$(w.access,k)){let l0=(await K$(t.storage,{includeApiRoutes:!0,modelId:R})).filter(o1);if(l0.length>0){let Z$=await D1(Q,B,l0,t.storage,J$.response,C,{onSuccess:(w0)=>i0(w0.id,"sticky-balanced"),mainAccessToken:w.access,mainQuotaIdentity:k,fableRequest:Y0,laneStartRequest:b});if(Z$)return C.done("return_sticky_api_fallback",{status:Z$.status}),M(Z$)}}}return L$(N0,J$.response)}}catch(t){if(C.mark("sticky_balanced_error",{error:t instanceof Error?t.message:String(t)}),s||P1(t))throw t;let n0=t instanceof Error?t:Error(String(t));throw Object.assign(n0,{code:"ECONNRESET",syscall:"sticky-routing"}),n0}}if(Q$&&V1(E)==="fallback-first")try{let R=Z0();p0=await K$(E,{includeApiRoutes:u$(w.access,k),modelId:c0}),C.mark("fallback_first_get_accounts",{ms:q0(Z0()-R),accounts:p0.length});let I=await D1(Q,B,p0,E,void 0,C,{returnLastOnExhausted:!1,mainAccessToken:w.access,mainQuotaIdentity:k,onSuccess:(a)=>i0(a.id,"fallback-first"),fableRequest:Y0,laneStartRequest:b});if(I)return C.done("return_fallback_first",{status:I.status}),M(I);p0=void 0}catch(R){if(C.mark("fallback_first_error",{error:R instanceof Error?R.message:String(R)}),P1(R))throw R}if(w.deferred){if(Object.assign(w,await N(X0,B?.signal??void 0)),w.access){let R=await z4(w.access,X0,w.nativeAccountIdentity,w.nativeScopedAttempt?.recordVersion);if(R.stale)throw Error("Main OAuth identity changed while resolving request credentials");k={...R,routingLineage:w.nativeRoutingLineage},K4=w.access,g1=R.providerAccountUuid}}if(!w.modelDenied&&(!w.access||!w.expires||w.expires<Date.now())){if(O$(E))try{let s=(await C0("main",B?.signal??void 0,void 0,X0)).scopedAttempt;if(!s)throw Error("Native vault main credential is unavailable");K4=s.accessToken;let t=await P$(Q,B,s.accessToken,C,"main",E,"main",void 0,Y0,b,k,s);return M(t)}catch(j0){let s=Q$?await K$(E,{modelId:c0}):[],t=await D1(Q,B,s,E,void 0,C,{onSuccess:(n0)=>i0(n0.id,"fallback"),mainAccessToken:w.access,mainQuotaIdentity:k,fableRequest:Y0,laneStartRequest:b});if(t)return M(t);if(j0 instanceof C$)throw new MZ;throw j0}if(w.credentialFailure?.tokenRefreshFailed)throw w.credentialFailure;let R=await p(),I=R?.refresh?.mainLastRefreshError;if(I&&x1(I,w.nativeAccountIdentity??j4??R?.mainAccountId,Date.now(),w.refresh?z1(w.refresh):void 0))throw r$("[refresh] opencode main oauth request skipped backoff",{nextRetryAt:I.nextRetryAt,retryCount:I.retryCount,expiresInMs:w.expires?w.expires-Date.now():void 0}),Error(O6(I,Date.now()));r$("[refresh] opencode main oauth refresh required for request",{hasAccess:Boolean(w.access),expiresInMs:w.expires?w.expires-Date.now():void 0,expiredAgoMs:w.expires&&w.expires<Date.now()?Date.now()-w.expires:void 0});let a=Z0();w.access=await A(void 0,X0,B?.signal??void 0),C.mark("refresh_main_access",{ms:q0(Z0()-a)})}if(!w.access&&!w.modelDenied)throw C.done("missing_access_error"),Error("OAuth access token is missing after refresh");function T1(){if(E?.quota?.showToasts!==!0)return;let R=h.getMain(k?.quotaKey);if(!R)return;let I=(E?.accounts??[]).filter((s)=>s.enabled!==!1&&T0(s)).map((s)=>({...s,quota:h.getFallback(s.id,s)?.quota??s.quota})),a=s1(R.quota,E),j0;if(a)j0="main";else j0=I.find((s)=>s1(s.quota,E))?.id??"main";TY(R.quota,I,j0)}if(Q$&&y0(E))try{let R=Z0(),I=H$(k,E),a=I?.quota;if(!a)a=await h.refreshMain(k?.quotaKey,w.access,k?.generation,"admission"),I=H$(k,E),T1();else if(h.needsRefresh($9,c0))if(W4(a)||p9(a,c0))a=await h.refreshMain(k?.quotaKey,w.access,k?.generation),I=H$(k,E);else h.refreshMain(k?.quotaKey,w.access,k?.generation).then(()=>{b1().catch(()=>{}),T1()}).catch(()=>{});v$(E,{activeId:"main",route:"main",mainAccessToken:w.access});let j0=s1(a,E)&&u9(a,c0);if(C.mark("main_quota_for_routing",{ms:q0(Z0()-R),passes:j0,model:c0,modelScopedExhausted:p9(a,c0)}),!j0){let s=Z0();p0=await K$(E,{includeApiRoutes:Boolean(I&&I.refreshAfter>Date.now()&&W4(I.quota)),modelId:c0}),C.mark("preselect_fallback_accounts",{ms:q0(Z0()-s),accounts:p0.length});let t=await D1(Q,B,p0,E,void 0,C,{onSuccess:(n0)=>i0(n0.id,"fallback"),mainAccessToken:w.access,mainQuotaIdentity:k,fableRequest:Y0,laneStartRequest:b});if(t)return C.done("return_preselected_fallback",{status:t.status}),M(t)}}catch(R){if(C.mark("main_quota_for_routing_error",{error:R instanceof Error?R.message:String(R)}),P1(R))throw R}let q$=H$(k,E)?.quota;if(E?.quota?.failClosedOnUnknownQuota&&(q$===void 0||w.access.startsWith("sk-ant-oat")&&k?.providerAccountUuid===void 0)&&h.isBackedOff()){let R=h.getLastApiError(),I=R?J8(R,Date.now()):"Quota API unavailable";return r$("[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:I}}),{status:429,headers:{"content-type":"application/json","retry-after":String(R?.nextRetryAt?Math.max(1,Math.ceil((R.nextRetryAt-Date.now())/1000)):60)}})}if(X1(E)){if(h.needsRefresh($9,c0))try{await Promise.all([h.refreshMain(k?.quotaKey,w.access,k?.generation),B1(!1,!0,void 0,"admission")])}catch(I){r$("[quota] killswitch refresh failed",{error:I instanceof Error?I.message:String(I),backedOff:h.isBackedOff()})}q$=H$(k,E)?.quota}if(X1(E)&&!W1(q$,E,void 0,c0)){let I=i(Q,B?.body)?await K$(E,{includeApiRoutes:u$(w.access),modelId:c0}):[];if(I.length>0){r$("[route] skipping main (killswitch), trying fallbacks");let o0=await D1(Q,B,I,E,void 0,C,{onSuccess:(h$)=>i0(h$.id,"fallback"),mainAccessToken:w.access,mainQuotaIdentity:k,laneStartRequest:b});if(o0)return C.done("return_killswitch_fallback",{status:o0.status}),M(o0)}let a=Date.now(),j0=(E?.accounts??[]).filter((o0)=>v0(o0)&&T0(o0)).map((o0)=>({...o0,quota:F0(o0)})),s=G7({mainQuota:q$,requestModelId:c0,storage:E}),t=V8(q$,j0,a,s.isScopedDriven?s.modelId:void 0),n0=X7({retryAfterSeconds:t,...s.isScopedDriven&&{modelName:s.modelName}});return new Response(JSON.stringify({type:"error",error:{type:"rate_limit_error",message:n0}}),{status:429,headers:{"content-type":"application/json","retry-after":String(t)}})}if(w.modelDenied){let R=V0(),I=Q$?await K$(E,{modelId:X0}):[],a=await D1(Q,B,I,E,void 0,C,{onSuccess:(s)=>i0(s.id,"fallback"),fableRequest:Y0,laneStartRequest:b,mainAccessToken:w.access,mainQuotaIdentity:k});if(a)return M(a);if(!(V1(E)!=="sticky-balanced"&&p9(q$,X0)&&s1(q$,E)&&W1(q$,E,void 0,X0)))return M(R);return M(await P$(Q,B,"",C,"main",E,"main",void 0,Y0,b,k))}let Z9=await P$(Q,B,w.access,C,"main",E,"main",void 0,Y0,b,k,Q0),N4=!1,D4=await CY(Q,B,Z9,p0,C,E,w.access,(R)=>{return N4=!0,i0(R.id,"fallback")},c0,Y0,b,k);if(!N4)await i0("main","main");return C.done("return_response",{status:D4.status}),M(D4)}}}return{}},get methods(){return[...q2(b9("opencode").tokenPath)?[YY]:[],{label:"Claude Pro/Max",type:"oauth",authorize:async()=>{if(await R1("opencode",process.env)!=="local")throw Error("Disconnect from the vault first.");if(await S.read(),process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("Local login cannot be verified while OPENCODE_AUTH_CONTENT is set");let Z=await X("max");return{url:Z.url,instructions:"Paste the authorization code here:",method:"code",callback:async(G)=>{let W=await BZ(G,Z.verifier,Z.redirectUri,Z.state);if(W.type==="failed")return W;N$(),await S.loginOAuth({routeId:"main",replace:!0,credential:{access:W.access,refresh:W.refresh,expires:W.expires}});let j=HZ("anthropic");return{type:"success",access:j.access,refresh:j.refresh,expires:j.expires}}}}},{label:"Create an API Key",type:"oauth",authorize:async()=>{let Z=await l7("console");return{url:Z.url,instructions:"Paste the authorization code here:",method:"code",callback:async(G)=>{let W=await BZ(G,Z.verifier,Z.redirectUri,Z.state);if(W.type==="failed")return W;return{type:"success",key:(await A4("https://api.anthropic.com/api/oauth/claude_cli/create_api_key",{method:"POST",headers:{"Content-Type":"application/json",authorization:`Bearer ${W.access}`}}).then((_)=>_.json())).raw_key}}}}},{provider:"anthropic",label:"Manually enter API Key",type:"api"}]}},dispose:jY};return t3?.set(D3,{primeManager:F1,quotaManager:h,cacheKeepManager:t0,fableFallbackManager:R0,resolveMainQuotaIdentity:z4,resolveSidebarQuotaAccess:$3,refreshSidebarQuota:b1,fallbackRefreshReady:a8,get scopedRuntime(){return $4(K,$.directory)},notificationMessageIdBeforeAssistant:g8,trackDesktopNoticeMessageId:X3,isDesktopNoticeMessage:G3}),D3},Qz=uG;
45
+ export{U4 as a,PJ as b,qJ as c,c1 as d,E0 as e,d3 as f,N9 as g,D9 as h,Z7 as i,H7 as j,Q7 as k,B7 as l,i1 as m,I4 as n,P9 as o,p7 as p,Qz as q};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{q as a}from"./index-nbwx1dph.js";import"./index-sg0knfec.js";import"./index-hc7bm3yf.js";import"./index-naff9h33.js";import"./index-12km9x91.js";import"./index-gvswxab8.js";import"./index-71temqvq.js";export{a as AnthropicAuthPlugin};
1
+ import{q as a}from"./index-j3mytf5r.js";import"./index-sg0knfec.js";import"./index-hc7bm3yf.js";import"./index-naff9h33.js";import"./index-j2cv839v.js";import"./index-gvswxab8.js";import"./index-71temqvq.js";export{a as AnthropicAuthPlugin};
@@ -1,8 +1,10 @@
1
1
  import type { AccountStorage, acquireNativeAccountRuntime, CacheKeepManager, CustodyStatusState, PrimeManager, ProviderAccountUuid, QuotaManager } from '@cortexkit/anthropic-auth-core';
2
+ import type { FableFallbackManager } from './fable-fallback.ts';
2
3
  export interface PluginTestHandles {
3
4
  primeManager: PrimeManager;
4
5
  quotaManager: QuotaManager;
5
6
  cacheKeepManager: CacheKeepManager;
7
+ fableFallbackManager: FableFallbackManager;
6
8
  resolveMainQuotaIdentity: (accessToken: string, model?: string, credentialAccountUuid?: string, credentialRecordVersion?: number) => Promise<{
7
9
  quotaKey: string | undefined;
8
10
  providerAccountUuid: ProviderAccountUuid | undefined;
@@ -234,6 +234,7 @@ export declare function getCollapsedAccounts(state: SidebarState, showFallbacks?
234
234
  quota: AccountQuota | null;
235
235
  quotaDated: boolean | undefined;
236
236
  active: boolean;
237
+ blocked: boolean;
237
238
  }[];
238
239
  export declare const FIVE_HOUR_MS: number;
239
240
  export declare const SEVEN_DAY_MS: number;
@@ -1 +1 @@
1
- import{$ as u,H as a,I as b,J as c,K as d,L as e,M as f,N as g,O as h,P as i,Q as j,R as k,S as l,T as m,U as n,V as o,W as p,X as q,Y as r,Z as s,_ as t,aa as v,ba as w,ca as x,da as y,ea as z,fa as A}from"./index-12km9x91.js";import"./index-71temqvq.js";export{i as setSidebarState,r as scopedQuotaShortNames,k as resolveActiveAccount,s as quotaLabelColumnWidth,c as normalizeSidebarState,a as getSidebarStateFile,h as getSidebarState,f as getInitialSidebarRoutingTestHooks,p as getFableRecoverySummary,w as getCollapsedQuotaSummary,x as getCollapsedAccounts,q as formatQuotaRowLabel,m as formatPrimeTime,n as formatPrimeCost,o as formatPrimeAccountValue,l as formatFallbackModelLabel,u as fitQuotaRow,v as fitPaceLine,j as drainSidebarWrites,A as computeQuotaPacing,d as __setSidebarStateWriteTestHooks,e as __setInitialSidebarRoutingTestHooks,g as __acquireSidebarStateLockForTest,z as SEVEN_DAY_MS,t as QUOTA_BAR_MIN_CELLS,y as FIVE_HOUR_MS,b as DEFAULT_SIDEBAR_STATE};
1
+ import{$ as u,H as a,I as b,J as c,K as d,L as e,M as f,N as g,O as h,P as i,Q as j,R as k,S as l,T as m,U as n,V as o,W as p,X as q,Y as r,Z as s,_ as t,aa as v,ba as w,ca as x,da as y,ea as z,fa as A}from"./index-j2cv839v.js";import"./index-71temqvq.js";export{i as setSidebarState,r as scopedQuotaShortNames,k as resolveActiveAccount,s as quotaLabelColumnWidth,c as normalizeSidebarState,a as getSidebarStateFile,h as getSidebarState,f as getInitialSidebarRoutingTestHooks,p as getFableRecoverySummary,w as getCollapsedQuotaSummary,x as getCollapsedAccounts,q as formatQuotaRowLabel,m as formatPrimeTime,n as formatPrimeCost,o as formatPrimeAccountValue,l as formatFallbackModelLabel,u as fitQuotaRow,v as fitPaceLine,j as drainSidebarWrites,A as computeQuotaPacing,d as __setSidebarStateWriteTestHooks,e as __setInitialSidebarRoutingTestHooks,g as __acquireSidebarStateLockForTest,z as SEVEN_DAY_MS,t as QUOTA_BAR_MIN_CELLS,y as FIVE_HOUR_MS,b as DEFAULT_SIDEBAR_STATE};
@@ -82,6 +82,15 @@ export type HybridMessageCacheAnchor = {
82
82
  messageCount: number;
83
83
  };
84
84
  export declare function extractLatestHybridMessageCacheAnchor(bodyText: string): HybridMessageCacheAnchor | undefined;
85
+ /**
86
+ * Fingerprints of every user message carrying a wire cache anchor, in
87
+ * history order. A recovery-round source warm stays valid while the kept
88
+ * request's earliest anchored message is still among them: compaction or a
89
+ * history edit drops or rewrites that message, while later turns only append
90
+ * after it. Membership (not position) is compared so an extra bridge anchor
91
+ * on a longer history does not count as a prefix change.
92
+ */
93
+ export declare function hybridUserMessageCacheAnchorFingerprints(bodyText: string): string[];
85
94
  /**
86
95
  * Rewrite the full request body: sanitize system prompt and prefix tool names.
87
96
  */