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