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