@cortexkit/opencode-anthropic-auth 2.2.5 → 2.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,56 +1,56 @@
1
1
  #!/usr/bin/env node
2
- import{x as e1}from"./index-0kxy8k2c.js";import{A as B4,B as r$,C as o$,D as t$,E as e$,F as D4,z as F4}from"./index-b1dvkp15.js";import{ha as X4,ia as M5,ja as U3}from"./index-62x1p34p.js";var I2=M5((oH,Z4)=>{var _2={to($,Z){if(!Z)return`\x1B[${$+1}G`;return`\x1B[${Z+1};${$+1}H`},move($,Z){let J="";if($<0)J+=`\x1B[${-$}D`;else if($>0)J+=`\x1B[${$}C`;if(Z<0)J+=`\x1B[${-Z}A`;else if(Z>0)J+=`\x1B[${Z}B`;return J},up:($=1)=>`\x1B[${$}A`,down:($=1)=>`\x1B[${$}B`,forward:($=1)=>`\x1B[${$}C`,backward:($=1)=>`\x1B[${$}D`,nextLine:($=1)=>"\x1B[E".repeat($),prevLine:($=1)=>"\x1B[F".repeat($),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},V5={up:($=1)=>"\x1B[S".repeat($),down:($=1)=>"\x1B[T".repeat($)},F5={screen:"\x1B[2J",up:($=1)=>"\x1B[1J".repeat($),down:($=1)=>"\x1B[J".repeat($),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines($){let Z="";for(let J=0;J<$;J++)Z+=this.line+(J<$-1?_2.up():"");if($)Z+=_2.left;return Z}};Z4.exports={cursor:_2,scroll:V5,erase:F5,beep:"\x07"}});import{stdin as r5,stdout as o5}from"node:process";import{createInterface as t5}from"node:readline/promises";import{authorize as e5,createNativeAccountRuntime as $Z,exchange as ZZ,formatNativeAccountState as JZ,generateRelayToken as zZ,getAccountStoragePath as XZ,isValidApiBaseURL as GZ,readNativeEnrollmentMode as QZ,resolveNativePoolPaths as WZ,WORKER_SCRIPT as HZ}from"@cortexkit/anthropic-auth-core";import{randomUUID as y8}from"node:crypto";import{constants as h1}from"node:fs";import{lstat as h8,mkdir as v8,open as m8}from"node:fs/promises";import{homedir as w8}from"node:os";import{isAbsolute as K9,join as H2}from"node:path";import{types as U2}from"node:util";import{createProviderErrorRedactor as F9,createWindowsOwnerOnly as u8,ensureWindowsOwnerOnlyDirectory as c8,formatLogLine as p8,isOwnerOnly as d8,isSecretKey as l8,NativeMigrationError as a8,NativePiAuthSlotError as s8,PRIVATE_FILES_UNAVAILABLE_MESSAGE as B9,setupEnrollment as n8}from"@cortexkit/anthropic-auth-core";import{readFile as I8}from"node:fs/promises";import{assertHostsStopped as A8,createNativeAccountRuntime as R8,discoverNativeVaultInventory as S8,inspectNativeHostAuthEntry as z2,NativePiAuthSlotError as b8,nativePiAuthSlotPaths as k8,openNativePiAuthSlot as G2,readNativeEnrollmentMode as T8,requireNoSupervisedAuthContentSnapshot as E8}from"@cortexkit/anthropic-auth-core";import{dirname as e7}from"node:path";import{CLAUSTRUM_OPENCODE_ENROLLMENT_NAME as $8,CLAUSTRUM_PI_ENROLLMENT_NAME as Z8,getHostClaustrumEnrollmentPaths as J8,resolveClaustrumConnectionPath as z8}from"@cortexkit/anthropic-auth-core";import{writeEnrollmentTokenFile as AX}from"@cortexkit/claustrum-client";import{ClaustrumClient as WX}from"@cortexkit/claustrum-client";import{resolve as f2}from"node:path";import{storeIdentity as RZ}from"@cortexkit/claustrum-client";import{SubcClient as bZ}from"@cortexkit/subc-client";import{ClaustrumCredentialError as C4}from"@cortexkit/claustrum-client";import{SocketClosedError as P4,SocketTimeoutError as O4,SubcCallError as _4}from"@cortexkit/subc-client";class _ extends Error{kind;constructor($,Z){super(Z);this.name="ClaustrumConsumerError",this.kind=$}}var X3=Object.freeze({ECONNREFUSED:"unreachable",ENOENT:"unreachable",ECONNRESET:"unreachable",EPIPE:"unreachable",ETIMEDOUT:"unreachable",transport_error:"unreachable",unavailable:"unreachable",timeout:"unreachable",route_closed:"unreachable",daemon_draining:"unreachable",connection_closed:"unreachable",connection_dropped:"unreachable",request_deadline:"unreachable",deadline_exceeded_no_drop_observed:"unreachable",module_reloading:"unreachable",module_warming:"unreachable",target_unavailable:"unreachable",module_timeout:"unreachable",invalid_response:"answered",invalid_record_version:"answered",invalid_expiry:"answered",invalid_status:"answered",invalid_params:"answered",ttl_unsatisfiable:"answered",not_found:"answered",enrollment_revoked:"answered",enrollment_invalid:"answered",grant_denied:"answered",credential_unavailable:"answered",needs_reauth:"answered",declined:"answered",disabled:"answered",identity_changed:"answered",closed:"answered",client_closed:"answered",pending_exists:"answered",pending_queue_full:"answered",already_consumed:"answered",superseded:"answered",stale_generation:"answered",missing_identity:"answered",invalid_control_body:"answered",unknown_module:"answered",module_removed:"answered",capability_denied:"answered",unknown_channel:"unreachable",stale_route_epoch:"unreachable",capability_forbidden:"answered",capability_unprovided:"answered",capability_ambiguous:"answered",invalid_capability_identifier:"answered",binary_body_required:"answered",binary_call_requires_call_binary:"answered",corr_exhausted:"answered",late_route_cleanup_failed:"answered",reverse_request_capability_not_declared:"answered",stale_route_handle:"answered",reverse_request_unhandled:"answered",handler_error:"answered",health_error:"answered",duplicate_module_id:"answered",route_rejected:"answered",lock_busy:"answered",owner_invalid:"answered",renewal_failed:"answered",unsupported_platform:"answered",EACCES:"answered",EPERM:"answered",ERR_PRIVATE_FILES_SECURITY:"answered"});class P0 extends _{constructor(){super("unavailable","Claustrum scoped operation unavailable");this.name="ClaustrumUnreachableError"}}function M0($){if($ instanceof P0||$ instanceof P4||$ instanceof O4)return"unreachable";let Z=$ instanceof C4||$ instanceof _4?$.code:$ instanceof Error&&("code"in $)?$.code:void 0;if(typeof Z!=="string"||!Object.hasOwn(X3,Z))return"answered";return X3[Z]}var G3=300000,D1=300000,Q3=1000;class $1{#$;#z=0;restart(){this.#z=0}continuous($){let Z=$.kind==="changed"&&$.seq===this.#z+1&&(this.#$===void 0||$.epoch===this.#$);return this.#$=$.epoch,this.#z=$.seq,Z}}class N1{#$;#z;#J;#X=!1;constructor($,Z){this.#$=$,this.#z=Z}get running(){return this.#J}request(){if(this.#J)return this.#X=!0,this.#J;return this.#J=(async()=>{do{this.#X=!1;try{await this.#$()}catch($){this.#z($)}}while(this.#X)})().finally(()=>{this.#J=void 0}),this.#J}}class L1{#$;#z=new $1;#J;#X="polling";#H;#G;#Z=!1;#Y;#K=!1;#W=0;constructor($){this.#$=$,this.#J=new N1(async()=>{let Z=this.#K;if(this.#K=!1,Z||this.#Y!==this.#$.view())await this.#$.discover(this.#Y??"")},(Z)=>{if(!this.#Z)this.#$.onError?.(Z)})}get mode(){return this.#X}start(){if(this.#Z||this.#H||this.#G)return;if(typeof this.#$.client.watchScoped!=="function"){this.#Q("fallback","client-without-watch");return}this.#M(!1)}stop(){if(this.#Z)return;if(this.#Z=!0,this.#G)(this.#$.clearTimeoutImpl??clearTimeout)(this.#G);this.#G=void 0;let $=this.#H;this.#H=void 0,$?.handle.stop()}#Q($,Z){if(this.#X===$)return;this.#X=$,this.#$.logger?.debug("claustrum vault watch",{mode:$,reason:Z}),this.#$.onMode?.($)}#U($,Z){this.#G=(this.#$.setTimeoutImpl??setTimeout)(()=>{if(this.#G=void 0,!this.#Z)Z()},$),this.#G.unref?.()}async#M($){let Z;try{Z=await this.#$.enrollmentToken()}catch(Q){if(this.#Z)return;this.#$.onError?.(Q),this.#F("token-unreadable");return}let J=this.#$.client.watchScoped;if(this.#Z||this.#H||!J)return;this.#z.restart(),this.#K=$;let z,X;try{X=J.call(this.#$.client,(Q)=>{if(this.#Z||!z||this.#H!==z)return;if(z.notices++,z.notices===1)this.#$.onReachable?.(),z.acceptedAt=(this.#$.now??Date.now)(),this.#Q("watching","accepted");if(!this.#z.continuous(Q))this.#K=!0;this.#Y=Q.view,this.#J.request()},{enrollmentToken:Z})}catch(Q){this.#$.onError?.(Q),this.#F("watch-failed");return}z={handle:X,notices:0},this.#H=z,this.#Q("polling",$?"resubscribing":"opening");let G=z;X.closed.then((Q)=>this.#j(G,Q),(Q)=>this.#j(G,{kind:"transport_lost",error:Q}))}#j($,Z){if(this.#Z||this.#H!==$)return;if(this.#H=void 0,Z.kind==="stopped")return;if(Z.kind==="transport_lost")this.#$.onTransportLost?.();if(Z.kind==="unsupported"){this.#Q("fallback","vault-without-watch");return}if(Z.kind==="refused"){this.#F("refused");try{this.#$.onRefused(Z.error)}catch(J){this.#$.onError?.(J)}return}if($.notices>0){let J=(this.#$.now??Date.now)();if($.acceptedAt!==void 0&&J-$.acceptedAt>=300000)this.#W=0;let z=Math.min(1000*2**Math.min(this.#W,16),300000);this.#W++,this.#Q("polling","resubscribing"),this.#U(z,()=>void this.#M(!0));return}this.#F(Z.kind)}#F($){this.#Q("fallback",$),this.#U(300000,()=>void this.#M(!1))}}var P1=60000,g2=4*P1,I4=2*P1,W3=new Map,C1=new Map;function Z1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function A4($){let Z;try{Z=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode($))}catch{return}if(!Z1(Z)||typeof Z.kind!=="string"||typeof Z.epoch!=="string"||Z.epoch.length===0||typeof Z.seq!=="number"||!Number.isSafeInteger(Z.seq)||Z.seq<1||Z.provider!==void 0&&typeof Z.provider!=="string")return;return{kind:Z.kind,epoch:Z.epoch,seq:Z.seq,...typeof Z.provider==="string"&&{provider:Z.provider}}}function R4($){return $ instanceof Error&&"code"in $&&typeof $.code==="string"?$.code:void 0}class x2{transport;key;#$=[];#z=!1;#J=new Set;#X=new Map;#H=new N1(async()=>{try{let $=await this.transport.getUsage();if(!Z1($)||!Array.isArray($.result)||$.error!==void 0)throw Error("unavailable insula usage");this.#$=$.result.filter((Z)=>Z1(Z)&&typeof Z.provider==="string"),this.#z=this.#$.length===$.result.length&&($.completeProviders===void 0||Array.isArray($.completeProviders)&&$.completeProviders.every((Z)=>typeof Z==="string")),this.#J=new Set(this.#z&&Array.isArray($.completeProviders)?$.completeProviders:[]);for(let Z of this.#J)this.#X.delete(Z)}catch{this.#$=[],this.#z=!1,this.#J.clear()}},()=>{});#G=new $1;#Z="polling";#Y=0;#K=0;#W=new Map;#Q;#U;#M={};#j=0;constructor($,Z){this.transport=$,this.key=Z}refresh($){if(this.#H.running)return this.#H.running;if(this.#Z==="watching")return Promise.resolve();for(let[J,z]of C1)if($-z>=P1)C1.delete(J);let Z=C1.get(this.key);if(Z!==void 0&&$-Z<P1)return Promise.resolve();return C1.set(this.key,$),this.#H.request()}watchMode(){return this.#Z}watch($={}){this.#Y++;let Z=$.provider;if(Z===void 0)this.#K++;else this.#W.set(Z,(this.#W.get(Z)??0)+1);if(this.#Y===1)this.#M=$,this.#q();let J=!1;return()=>{if(J)return;if(J=!0,Z===void 0)this.#K--;else{let z=(this.#W.get(Z)??1)-1;if(z>0)this.#W.set(Z,z);else this.#W.delete(Z)}if(--this.#Y===0)this.#F()}}#F(){if(this.#U)(this.#M.clearTimeoutImpl??clearTimeout)(this.#U);this.#U=void 0;let $=this.#Q;this.#Q=void 0,$?.handle?.stop(),this.#Z="polling"}#V($){this.#U=(this.#M.setTimeoutImpl??setTimeout)(()=>{if(this.#U=void 0,this.#Y>0&&!this.#Q)this.#q()},$),this.#U.unref?.()}#q(){let $=this.transport.watchUsage;if(!$){this.#Z="fallback";return}this.#Z="polling",this.#G.restart();let Z={notices:0};this.#Q=Z;let J;try{J=$.call(this.transport,(z)=>this.#B(Z,z))}catch(z){this.#D(Z,z);return}Z.handle=J,J.closed.then(()=>this.#D(Z,void 0),(z)=>this.#D(Z,z))}#B($,Z){if(this.#Q!==$)return;if($.notices++,$.notices===1)this.#Z="watching";if($.notices===2)this.#j=0;let J=A4(Z);if(!J)this.#G.restart();if(!(J?this.#G.continuous(J):!1)||J?.provider===void 0||this.#K>0||this.#W.has(J.provider))this.#H.request()}#D($,Z){if(this.#Q!==$)return;this.#Q=void 0;let J=R4(Z);if(J==="unknown_method"||J==="usage_watch_limit"){this.#Z="fallback";return}if($.notices>0){let z=Math.min(Q3*2**Math.min(this.#j,16),D1);this.#j++,this.#Z="polling",this.#V(z);return}if(this.#Z="fallback",this.#H.request(),Z===void 0||M0(Z)==="unreachable")this.#V(D1)}current($,Z,J){for(let z of this.#$){if(z.provider!==$||typeof z.account!=="string"||z.account.trim()!==Z)continue;if(z.stale!==void 0||z.errorClass!==void 0||!Z1(z.usage))continue;let X=typeof z.fetchedAt==="string"?Date.parse(z.fetchedAt):Number.NaN;if(!Number.isFinite(X)||J-X>=g2)continue;return{entry:z,context:{fetchedAt:X,...typeof z.source==="string"&&{source:z.source}}}}return}lookup($,Z,J){if(!this.#z)return{miss:"unreachable"};let z=this.#$.find((Q)=>Q.provider===$&&typeof Q.account==="string"&&Q.account.trim()===Z),X=(z??this.#$.find((Q)=>Q.provider===$&&Q.account===void 0&&Q.errorClass!==void 0))?.errorClass;if(X==="upstream_failed")return{miss:"upstream-failed"};if(X==="credential_absent"||X==="credential_unusable"||X==="credential_rejected")return{miss:"credential"};if(X!==void 0)return{miss:"unreachable"};if(z){let Q=typeof z.fetchedAt==="string"?Date.parse(z.fetchedAt):Number.NaN;if(!Z1(z.usage)||!Number.isFinite(Q))return{miss:"unreachable"};let W={entry:z,context:{fetchedAt:Q,...typeof z.source==="string"&&{source:z.source}}};return J>=Q+g2||z.stale!==void 0?{miss:"stale",reading:W}:{reading:W}}if(this.#J.has($))return{miss:"absent"};let G=this.#X.get($)??J;return this.#X.set($,G),{miss:J-G>=I4?"unreachable":"cold"}}}function H3($,Z){let J=JSON.stringify([f2($.connectionFile),f2(Z)]),z=W3.get(J);if(!z)z={source:new x2($,J),refs:0},W3.set(J,z);z.refs++;let X=!1;return{source:z.source,release(){if(X)return;if(X=!0,--z.refs===0)W3.delete(J)}}}import{ClaustrumCredentialError as qX}from"@cortexkit/claustrum-client";import{appendFileSync as w4,chmodSync as u4,existsSync as K3,renameSync as a2,statSync as c4}from"node:fs";import{open as p4}from"node:fs/promises";import{dirname as d4,resolve as l4}from"node:path";import{randomUUID as m2}from"node:crypto";import{lstat as w2,readFile as u2,rename as S4,unlink as y2}from"node:fs/promises";import{tmpdir as b4}from"node:os";import{dirname as V0,join as k4,resolve as i}from"node:path";var I=process.platform==="win32",h2=new Set;function Y3($){if($?.reason==="io-error"){if($.win32Code===2||$.win32Code===3)return"ENOENT";if($.win32Code===80||$.win32Code===183)return"EEXIST"}return $?.code??"ERR_PRIVATE_FILE"}var v2;var c2="native-addon-unavailable";function p2($){return Object.assign(Error("Windows private-files native addon is unavailable",{cause:$}),{code:"ERR_PRIVATE_FILES_UNAVAILABLE",reason:c2})}function T4($,Z){return Z instanceof $.PrivateFilesUnavailableError||Z?.code==="ERR_PRIVATE_FILES_UNAVAILABLE"}async function E4($){try{await $.verifyPrivatePath(k4(b4(),`.common-auth-private-files-probe-${m2()}`),"file")}catch(Z){if(T4($,Z))throw p2(Z)}}function h0(){return v2??=import("@cortexkit/private-files").then(async($)=>{if(I)await E4($);return $},($)=>{throw I?p2($):$}),v2}class u extends Error{path;stage;code;win32Code;reason;published=!1;durabilityConfirmed=!1;fileDurable=!1;attempts=0;elapsedMs=0;orphanPath;constructor($,Z,J){let z=J;super(z?.code==="ERR_PRIVATE_FILES_UNAVAILABLE"?`Private file refused at ${Z}: ${$} (${c2}). The Windows native addon of @cortexkit/private-files could not be loaded, so owner-only access cannot be enforced and nothing was read or written. Reinstall the plugin so the private-files Windows prebuild for this architecture is present; Windows has no safe fallback to permission bits.`:`Private file refused at ${Z}: ${$} (${z?.reason??z?.code??"io-error"}). Keep this file in a folder that only you, the system or administrators can change, such as a folder in your home directory. If other users could read the file before, sign in again to replace the credentials it held. On Windows the file must also be on a local drive that keeps Windows file permissions, such as NTFS.`,{cause:J});this.path=$,this.stage=Z,this.name="PrivateFileError",this.code=Y3(z),this.win32Code=z?.win32Code,this.reason=z?.reason}}async function s($,Z,J){try{return await J()}catch(z){if(z instanceof u)throw z;throw new u($,Z,z)}}var f4;async function W0($,Z){$=i($),Z??=f4,await s($,"safe-parent",async()=>{let J=await(await h0()).verifySafeParent($,Z);if(J.ok===!1){if(J.reason==="io-error"||J.reason==="wrong-kind")await w2($);throw new u(J.level??J.path,"safe-parent",{...J,code:"ERR_PRIVATE_FILES_SECURITY"})}})}async function p($,Z,J=!1){if($=i($),Z==="directory")return W0($);await s($,"verify",async()=>{let z=await h0(),X=await z.verifyOwnerOnly($),G=!1;if(!X.ok){let{reason:Q}=X.refusal;if(Q==="io-error")await z.verifyPrivatePath($,Z);if(J&&[z.EXTRA_ACE,z.NOT_PROTECTED,z.NULL_DACL,z.EMPTY_DACL].includes(Q))await W0(V0($)),await z.securePrivatePath($,Z),G=!0;else throw Object.assign(Error("Owner-only verification refused"),{reason:Q,code:"ERR_PRIVATE_FILES_SECURITY"})}if(await z.verifyPrivatePath($,Z),G&&!h2.has($))h2.add($),process.emitWarning(`Private permissions tightened: ${$}. This object may have been readable before; rotate credentials if needed.`,"PrivateFileMigration")})}async function J0($,Z=!1,J){$=i($),await s($,"directory",async()=>{let z=await h0();try{return await w2($),await W0($,J)}catch(G){if(Y3(G)!=="ENOENT")throw G}let X=V0($);if(X===$)throw Object.assign(Error("Missing root"),{code:"ENOENT"});await J0(X,!1,J);try{await z.createOwnerOnly($,{kind:"dir"})}catch(G){if(Y3(G)!=="EEXIST")throw G}await W0($,J)})}async function e($,Z=!1){if(!I)return u2($,"utf8");return(await g4($,Z)).toString("utf8")}async function g4($,Z=!1){if(!I)return u2($);if($=i($),Z)await W0(V0($)),await p($,"file",!0);return s($,"read",async()=>(await h0()).readOwnerOnly($))}async function v0($,Z){await W0(V0(i($))),await s($,"create",async()=>{await(await h0()).createPrivateFile(i($),Z)})}async function d2($){await W0(V0(i($))),await s($,"directory-create",async()=>{await(await h0()).createOwnerOnly(i($),{kind:"dir"})})}async function q3($,Z,J={}){$=i($),Z=i(Z);let z=J.now??(()=>performance.now()),X=z(),G=J.deadline??1/0,Q,W=[0,10,20,40,80,100],H,U=0;for(let K of W){let F=Math.min(Q??1/0,G);if(z()>=F)break;if(K)await(J.sleep??((P)=>new Promise((C)=>setTimeout(C,P))))(Math.min(K,Math.max(0,F-z())));if(z()>=F)break;let B=z();if(await J.beforeRename?.(),Q!==void 0)Q+=z()-B;if(z()>=G)break;U++;try{return await(J.rename??S4)($,Z),{attempts:U,elapsedMs:z()-X}}catch(P){H??=P;let C=P;if(!(C.win32Code!==void 0?C.win32Code===32||C.win32Code===33:["EBUSY","EPERM","EACCES"].includes(C.code??"")&&!C.reason))break;Q??=z()+500}}let q=new u(Z,"rename",H??Object.assign(Error("Publication deadline expired"),{code:"ETIMEDOUT"}));throw q.attempts=U,q.elapsedMs=z()-X,q}async function m0($,Z,J={}){$=i($),await J0(V0($));try{await p($,"file",!0)}catch(U){if(U.code!=="ENOENT")throw U}let z=i(J.stagePath??`${$}.${m2()}.tmp`);if(V0(z)!==V0($))throw new u($,"stage-directory",{code:"EXDEV"});let X=!1,G=!1,Q={attempts:0,elapsedMs:0},W="stage-create",H=(U)=>{try{J.onOutcome?.({path:$,stage:U?.stage??"published",published:G,fileDurable:G,durabilityConfirmed:!1,attempts:U?.attempts??Q.attempts,elapsedMs:U?.elapsedMs??Q.elapsedMs,...U&&{code:U.code,win32Code:U.win32Code}})}catch{}};try{if(await v0(z,Z),X=!0,W="before-rename",Q=await q3(z,$,J),X=!1,G=!0,W="published-callback",J.onRenamed?.(),W="published-verify",await p($,"file"),J.durable&&J.durability!=="file-only-on-windows")throw new u($,"directory-sync-unsupported",{code:"ENOTSUP"});H()}catch(U){let q=U instanceof u?U:new u($,W,U);if(q.published=G,q.fileDurable=G,G)Object.assign(q,Q);if(X){try{await y2(z)}catch{q.orphanPath=z}X=!1}throw H(q),q}finally{if(X)await y2(z).catch(()=>{})}}var x4=/^(authorization|x-api-key|cookie|set-cookie|refresh|access|token)$/i,y4=/\b(Bearer\s+[\w.-]+|sk-[\w-]+|eyJ[\w.-]+)\b|ckh_[A-Za-z0-9_-]{20,}/g;function h4($){return $ instanceof Error||Object.prototype.toString.call($)==="[object Error]"}function w0($={}){let Z=[y4,...$.extraValuePatterns??[]].map((G)=>new RegExp(G.source,G.flags.includes("g")?G.flags:`${G.flags}g`));function J(G){let Q=G.toLowerCase().replace(/[-_]/g,"");return x4.test(G)||Q.includes("apikey")||Q.endsWith("secret")||Q.endsWith("password")||Q.endsWith("token")&&!Q.endsWith("tokens")||!!$.extraSecretKeys?.(Q)}function z(G){let Q=G,W=[["name",G.name],["message",G.message],["stack",G.stack]];for(let U of["code","status","cause"])if(Q[U]!==void 0)W.push([U,Q[U]]);let H=new Set(W.map(([U])=>U));for(let U of Object.entries(G))if(!H.has(U[0]))W.push(U);return W}function X(G,Q,W,H=0){if(typeof G==="string")return Z.reduce((U,q)=>U.replace(q,"***REDACTED***"),G);if(!G||typeof G!=="object")return G;if(W.has(G))return"[Circular]";W.add(G);try{if(Array.isArray(G))return G.map((K)=>X(K,Q,W,H));let U=h4(G);if(U&&H>=8)return"[Truncated]";let q=U?H+1:H;return Object.fromEntries((U?z(G):Object.entries(G)).map(([K,F])=>[K,Q&&J(K)?"***REDACTED***":X(F,Q,W,q)]))}finally{W.delete(G)}}return{redact:(G)=>X(G,!0,new WeakSet),redactStrings:(G)=>X(G,!1,new WeakSet)}}var l2=w0(),v4=l2.redact,m4=l2.redactStrings;var O1={error:0,warn:1,info:2,debug:3,trace:4},n2=5242880,i2=3;function j3($){try{u4($,384)}catch{}}function a4($){try{if(!(K3($)&&c4($).size>=n2))return;for(let J=i2-1;J>=1;J--)if(K3(`${$}.${J}`)){let z=`${$}.${J+1}`;a2(`${$}.${J}`,z),j3(z)}let Z=`${$}.1`;a2($,Z),j3(Z)}catch{}}async function H0($){let{file:Z,handle:J}=$;if($.file=void 0,$.handle=void 0,Z&&J)await s(Z,"log-close",()=>J.close())}async function s2($,Z){await J0(d4(Z));try{await p(Z,"file",!0)}catch(J){if(J.code!=="ENOENT")throw J;try{await v0(Z,"")}catch(z){if(z.code!=="EEXIST")throw z;await p(Z,"file",!0)}}return $.handle=await s(Z,"log-open",()=>p4(Z,"a")),$.file=Z,$.handle}async function s4($,Z,J){Z=l4(Z);try{if($.file!==Z)await H0($);let z=$.handle??await s2($,Z);if((await s(Z,"log-stat",()=>z.stat())).size>=n2){await H0($);for(let G=i2-1;G>=0;G--){let Q=G===0?Z:`${Z}.${G}`,W=`${Z}.${G+1}`;try{await p(Q,"file",!0)}catch(H){if(H.code==="ENOENT")continue;throw H}try{await p(W,"file",!0)}catch(H){if(H.code!=="ENOENT")throw H}await q3(Q,W),await p(W,"file")}z=await s2($,Z)}await s(Z,"log-append",()=>z.appendFile(J,"utf8"))}catch(z){throw await H0($).catch(()=>{}),z}}function n4($){try{return` ${JSON.stringify($)}`}catch{return" [unserializable]"}}function i4($){let Z,J,z,X=w0(),G,Q=[],W,H=Promise.resolve(),U,q={};function K(Y){let j=H.then(Y);return H=j.catch((M)=>{U=M}),j}function F(Y){if(I&&Y.file!==Z)K(()=>H0(q)).catch(()=>{});Z=Y.file,J=Y.level,X=w0(Y),G=Y.captureSink}function B(Y){if(Y===void 0||Y in O1)z=Y}function P(){if(Z===void 0)return;return(typeof Z==="function"?Z():Z)||void 0}function C(){if(z)return z;let Y=typeof J==="function"?J():J;if(Y&&Y in O1)return Y;return"info"}function D(Y=!0){if(W)clearTimeout(W),W=void 0;if(!Q.length){if(I)return K(async()=>{if(Y)await H0(q);if(U)throw U});return}let j;try{j=P()}catch{if(Q=[],I&&Y)return K(()=>H0(q));return}let M=Q.join("");if(Q=[],!j){if(I&&Y)return K(()=>H0(q));return}if(I)return K(async()=>{try{await s4(q,j,M)}finally{if(Y)await H0(q)}});try{if(a4(j),K3(j))j3(j);w4(j,M,{encoding:"utf8",mode:384})}catch{}}function R(){if(!W)W=setTimeout(()=>{W=void 0;let Y=D(!1);if(Y instanceof Promise)Y.catch(()=>{})},500)}function S(Y,j,M,b){if(Z===void 0&&G===void 0)return;try{if(O1[j]>O1[C()])return;let g=X.redactStrings(M),k;try{k=X.redact(b)}catch{k="[unserializable]"}let m=`[${new Date().toISOString()}] ${j.toUpperCase()} [${Y}] ${g}`+(b===void 0?"":n4(k))+`
3
- `;try{G?.({channel:Y,level:j,message:g,data:k})}catch{}if(Z===void 0)return;if(Q.push(m),Q.length>=50){let n=D(!1);if(n instanceof Promise)n.catch(()=>{})}else R()}catch{}}function y(Y){return{error:(j,M)=>S(Y,"error",j,M),warn:(j,M)=>S(Y,"warn",j,M),info:(j,M)=>S(Y,"info",j,M),debug:(j,M)=>S(Y,"debug",j,M),trace:(j,M)=>S(Y,"trace",j,M)}}function N(){if(I)K(()=>H0(q)).catch(()=>{});if(U=void 0,Q=[],W)clearTimeout(W),W=void 0;Z=void 0,J=void 0,z=void 0,X=w0(),G=void 0}if($)F($);return{configure:F,createLogger:y,setLogLevel:B,flushLogs:D,reset:N}}var r4=i4();function O0($){return r4.createLogger($)}function M3($){let Z=new AbortController,J=[],z=!1,X=()=>{if(z)return;z=!0;for(let{source:W,listener:H}of J)W.removeEventListener("abort",H);J.length=0},G=(W)=>{if(z||Z.signal.aborted)return;Z.abort(W),X()},Q=$.find((W)=>W.aborted);if(Q)return Z.abort(Q.reason),{signal:Z.signal,dispose:X};for(let W of $){if(Z.signal.aborted)break;let H=()=>G(W.reason);if(J.push({source:W,listener:H}),W.addEventListener("abort",H,{once:!0}),W.aborted)G(W.reason)}return{signal:Z.signal,dispose:X}}import{ClaustrumCredentialError as O$}from"@cortexkit/claustrum-client";import{createHash as X7,randomBytes as G7,randomUUID as Q7}from"node:crypto";import{constants as H$}from"node:fs";import{chmod as W7,mkdir as H7,open as q$,readFile as D3,realpath as Y7,rename as U7,stat as K$,unlink as L3}from"node:fs/promises";import{basename as q7,dirname as R0,extname as SJ,isAbsolute as bJ,join as K7,resolve as kJ}from"node:path";import{ClaustrumCredentialError as j7,ClaustrumClient as EJ,writeEnrollmentTokenFile as M7}from"@cortexkit/claustrum-client";import{randomUUID as r2}from"node:crypto";import{mkdir as o4,open as o2,rename as t4,rm as e4}from"node:fs/promises";import{dirname as t2}from"node:path";class _1 extends Error{constructor($){super("file or directory sync failed",{cause:$});this.name="AtomicSyncError"}}async function J1($,Z,J={}){await e2($,Z,J)}async function e2($,Z,J,z){if(I)return m0($,J.serialize?J.serialize(Z):`${JSON.stringify(Z,null,2)}
4
- `,{beforeRename:J.beforeRename,stagePath:`${$}.${(J.stageName??r2)()}.tmp`,onRenamed:z,durable:J.durable,durability:J.durability,onOutcome:J.onOutcome});await o4(t2($),{recursive:!0});let X=`${$}.${(J.stageName??r2)()}.tmp`,G,Q=!1;try{if(G=await o2(X,"wx",384),Q=!0,await G.writeFile(J.serialize?J.serialize(Z):`${JSON.stringify(Z,null,2)}
5
- `,"utf8"),await G.chmod(384),J.durable)try{await G.sync()}catch(W){throw new _1(W)}if(await G.close(),G=void 0,await J.beforeRename?.(),await t4(X,$),Q=!1,z?.(),J.durable){let W=await o2(t2($),"r");try{await W.sync()}catch(H){throw new _1(H)}finally{await W.close()}}}finally{if(await G?.close().catch(()=>{}),Q)await e4(X,{force:!0}).catch(()=>{})}}var $7=Object.freeze({sidebar:Object.freeze({name:"sidebar-write",ttlMs:1e4,timeoutMs:15000,renew:!0}),preferences:Object.freeze({name:"preferences",ttlMs:1e4,timeoutMs:2000,renew:!0})});import{randomUUID as I1}from"node:crypto";import{mkdir as $$,open as Q$,readFile as Z$,rename as J$,rm as A1,stat as z$}from"node:fs/promises";import{dirname as B3,join as X$}from"node:path";function V3($,Z){return`${$}.${Z}.lock`}class _0 extends Error{details;constructor($){super(`Timed out acquiring ${$.name} lock for ${$.target}`);this.name="LockContentionError",this.details=$}}class I0 extends Error{details;constructor($){super(`Lost ${$.name} lock for ${$.target}`);this.name="LockOwnershipError",this.details=$}}async function F3($,Z,J){let z=performance.now();for(;;){Z.signal?.throwIfAborted();let X=await Y0({path:$,name:Z.name,ttlMs:Z.ttlMs,renew:Z.renew??!1,...Z.onStep?{onStep:Z.onStep}:{},...Z.onRenewalTimer?{onRenewalTimer:Z.onRenewalTimer}:{}});if(X)try{return Z.signal?.throwIfAborted(),await J(X)}finally{await X.release()}let G=Z.timeoutMs-(performance.now()-z);if(G<=0)throw new _0({target:$,name:Z.name,timeoutMs:Z.timeoutMs});await new Promise((Q)=>setTimeout(Q,Math.min(25,Math.ceil(G))))}}async function G$($,Z){let J=await Q$($,"wx",384);try{await J.writeFile(Z,"utf8")}finally{await J.close()}}var Z7=globalThis.setTimeout.bind(globalThis),J7=globalThis.clearTimeout.bind(globalThis);function W$($){let Z=$?.code;return Z==="ENOENT"||!I&&(Z==="EINVAL"||Z==="ENOTDIR")}function Y0($){return z7({...$,now:Date.now})}async function z7($){let Z=V3($.path,$.name),J=X$(Z,"owner.json"),z=I1(),X=$.now??Date.now,G=null,Q=!1,W=!1,H,U,q=new Promise((V)=>{U=V});function K(V){try{let L=$.onRenewalTimer?.(V);if(L&&(typeof L==="object"||typeof L==="function")&&"then"in L&&typeof L.then==="function")Promise.resolve(L).catch(()=>{})}catch{}}function F(){if(!G)return;J7(G),G=null,K("cancelled")}function B(V,L){if(H||Q)return;H=Object.freeze({reason:V,expectedOwnerId:z,...typeof L?.ownerId==="string"?{observedOwnerId:L.ownerId}:{},...typeof L?.expiresAt==="number"?{observedExpiresAt:L.expiresAt}:{}}),F(),U(H)}let P,C=null,D=`${Z}.evicting`,R=X$(D,"owner.json"),S=I1(),y=5000,N=8;async function Y(){if(I)try{return JSON.parse(await e(Z,!0))}catch(V){if(V.code!=="EISDIR"&&V.reason!=="wrong-kind")throw V;return await p(Z,"directory",!0),JSON.parse(await e(J,!0))}try{return JSON.parse(await Z$(Z,"utf8"))}catch(V){if(V.code!=="EISDIR")throw V;return JSON.parse(await Z$(J,"utf8"))}}async function j(){if(I){let x=await Y(),w=Number(x?.expiresAt)-X();await m0(Z,`${JSON.stringify({ownerId:z,expiresAt:X()+$.ttlMs})}
6
- `,{deadline:performance.now()+Math.max(0,w),beforeRename:async()=>{let B1=await Y();if(B1?.ownerId!==z||!(Number(B1?.expiresAt)>X())||!await h())throw new I0({target:$.path,name:$.name})}});return}let V=`${Z}.${I1()}.tmp`,L,O=!1;try{L=await Q$(V,"wx",384),O=!0,await L.writeFile(`${JSON.stringify({ownerId:z,expiresAt:X()+$.ttlMs})}
7
- `,"utf8"),await L.chmod(384),await L.close(),L=void 0;let x=await Y();if(x?.ownerId!==z||!(Number(x?.expiresAt)>X())||!await h())throw new I0({target:$.path,name:$.name});await J$(V,Z),O=!1}finally{if(await L?.close().catch(()=>{}),O)await A1(V,{force:!0}).catch(()=>{})}}async function M(){let V=`${JSON.stringify({ownerId:z,expiresAt:X()+$.ttlMs})}
8
- `;if(I)await v0(Z,V);else await G$(Z,V)}async function b(V){let L=V.code;if(L==="EEXIST"){if(I)await Y();return!0}if(L==="EISDIR"){if(I)await p(Z,"directory",!0),await e(J,!0);return!0}return!1}async function g(){if(I)await J0(B3(Z));try{return await M(),!0}catch(V){let L=V.code;if(await b(V))return!1;if(L==="ENOENT"){if(I)await J0(B3(Z));else await $$(B3(Z),{recursive:!0});try{return await M(),!0}catch(O){if(await b(O))return!1;throw O}}throw V}}async function k(){await new Promise((V)=>setTimeout(V,Math.floor(Math.random()*4)))}async function m(V=!0){if(V&&$.onStep)await $.onStep("lock-read-ready");let L;try{L=await Y()}catch(x){if(I&&x.code!=="ENOENT")throw x}let O=Number(L?.expiresAt);if(Number.isFinite(O)&&O>X())return{status:"live"};if(typeof L?.ownerId==="string"&&Number.isFinite(O))return{status:"stale",identity:{kind:"owner",ownerId:L.ownerId,expiresAt:O}};try{let x=await z$(Z),w=Number.isFinite(O)?O:x.mtimeMs+$.ttlMs;if(w>X())return{status:"live"};return{status:"stale",identity:{kind:"stat",dev:x.dev,ino:x.ino,mtimeMs:x.mtimeMs,expiresAt:w}}}catch(x){if(x.code==="ENOENT"){if($.onStep)await $.onStep("lock-missing");return{status:"missing"}}throw x}}function n(V,L){if(L.status!=="stale")return!1;let O=L.identity;if(V.kind==="owner"&&O.kind==="owner")return V.ownerId===O.ownerId&&V.expiresAt===O.expiresAt;return V.kind==="stat"&&O.kind==="stat"&&V.dev===O.dev&&V.ino===O.ino&&V.mtimeMs===O.mtimeMs&&V.expiresAt===O.expiresAt}async function h(){try{return JSON.parse(await e(R,I))?.ownerId===S}catch(V){if(I&&V.code!=="ENOENT")throw V;return!1}}async function c(V){if(I)await s(V,"remove",()=>A1(V,{recursive:!0,force:!0}));else await A1(V,{recursive:!0,force:!0}).catch(()=>{})}async function t(){if(await h())await c(D)}async function V1(){if(I)await d2(D);else await $$(D);try{let V=`${JSON.stringify({ownerId:S,createdAt:X()})}
9
- `;if(I)await v0(R,V);else await G$(R,V)}catch(V){if(W$(V))return!1;throw await t(),V}if($.onStep)await $.onStep("eviction-marker-acquired");return!0}async function y0(){let V;try{V=await z$(D)}catch(O){if(O.code==="ENOENT")return"missing";throw O}if(I)await p(D,"directory",!0);if(V.mtimeMs+y>X())return"fresh";if($.onStep)await $.onStep("stale-marker-stat");let L=`${D}.${I1()}`;try{await J$(D,L)}catch(O){if(O.code==="ENOENT")return"missing";throw O}if($.onStep)await $.onStep("stale-marker-claimed");return await c(L),"recovered"}async function F1(V){try{if(!await V1())return!1}catch(L){if(L.code==="EEXIST"){if(I){await p(D,"directory",!0);try{await e(R,!0)}catch(O){if(O.code!=="ENOENT")throw O}}return!1}throw L}try{await V()}finally{await t()}return!0}async function T(){for(let V=0;V<N;V++){if($.onStep)await $.onStep("relinquish-read");let L;try{L=await Y()}catch(O){if(I)throw O;return}if(L?.ownerId!==z)return;try{await A1(Z,{recursive:!0,force:!0});return}catch(O){if(I)throw O;await k()}}}function Q0(){if(!$.renew||Q||H)return;let V=$.renewIntervalMs??Math.max(1000,Math.floor($.ttlMs/3));if(G=Z7(()=>{G=null;let L=(async()=>{let O=!Q;try{if(!await F1(async()=>{let w=await Y(),B1=X();if(Q||H){O=!1;return}if(w?.ownerId!==z){B("taken-over",w),O=!1;return}if(!(Number(w?.expiresAt)>B1)){B("expired",w),O=!1;return}if($.onStep)await $.onStep("renewal-owner-confirmed");if(Q||H){O=!1;return}if(!await h())return;if($.onStep)await $.onStep("renewal-write-fenced");if(Q||H){O=!1;return}if(!await h())return;if($.onStep)await $.onStep("renewal-write-ready");if(Q||H){O=!1;return}if(await j(),$.onStep)await $.onStep("renewal-write-finished");if(!await h()){B("marker-lost"),O=!1,await T();return}})&&$.onStep)await $.onStep("renewal-marker-unavailable")}catch(x){if(I&&x instanceof u)P=x,B("renewal-failed"),O=!1;try{let w=await Y();if(w?.ownerId!==z)B("taken-over",w);else if(!(Number(w?.expiresAt)>X()))B("expired",w)}catch{B("renewal-failed")}}finally{if($.onStep)try{await $.onStep("renewal-finished")}catch{}if(O&&!Q&&!H)Q0()}})();C=L,L.finally(()=>{if(C===L)C=null})},V),"unref"in G)G.unref();K("scheduled")}function E2(){try{let V=$.onContended?.();if(V&&(typeof V==="object"||typeof V==="function")&&"then"in V&&typeof V.then==="function")Promise.resolve(V).catch(()=>{})}catch{}return null}let C0=await g();if(!C0)for(let V=0;V<N;V++){if(C0=await g(),C0)break;let L=await m();if(L.status==="live")return E2();if(L.status==="missing")continue;if($.onStep)await $.onStep("stale-lock-observed");try{if(!await V1()){await k();continue}}catch(O){if(O.code!=="EEXIST")throw O;if(await y0()==="fresh")return null;await k();continue}try{let O=await m();if(O.status==="live")return E2();if(!n(L.identity,O))continue;if(!await h())return null;if($.onStep)await $.onStep("stale-lock-confirmed");if(!await h())return null;let x=await m(!1);if(!n(L.identity,x))continue;if(await c(Z),!await h())return null;if($.onStep)await $.onStep("stale-lock-removed");if(C0=await g(),!C0)return null;if($.onStep)await $.onStep("stale-lock-recreated");if(!await h())return await T(),C0=!1,null;break}finally{await t()}}if(!C0)return null;return Q0(),{ownerId:z,whenLost:()=>q,hasLost:()=>H!==void 0,assertOwned:async()=>{if(P)throw P;let V;try{let L=await Y();if(V=L,!Q&&!H&&L?.ownerId===z&&Number(L?.expiresAt)>X())return;B(L?.ownerId!==z?"taken-over":"expired",L)}catch(L){if(B("unreadable"),I&&L instanceof u)throw L}throw new I0({target:$.path,name:$.name,expectedOwnerId:z,...typeof V?.ownerId==="string"?{observedOwnerId:V.ownerId}:{},...typeof V?.expiresAt==="number"?{observedExpiresAt:V.expiresAt}:{}})},release:async()=>{if(I&&W)return;Q=!0,F(),await C;for(let V=0;V<N;V++){try{let L=!1;if(await F1(async()=>{let x;try{x=await Y()}catch(w){if(I&&w.code==="ENOENT"){L=!0;return}throw w}if(x?.ownerId!==z){L=!0;return}if($.onStep)await $.onStep("release-owner-confirmed");if(!await h())return;await c(Z),L=!0})){if(I&&!L)throw new u(Z,"release-not-confirmed",{code:"EIO"});W=L;return}await y0()}catch(L){if(I)throw L;return}await k()}if(I)throw new u(Z,"release-not-confirmed",{code:"ETIMEDOUT"})}}}var V7=1,S1=16384,j$=30000,C3=/^[0-9a-f]{64}$/,M$="unknown_method",V$=new Set([M$,"invalid_params","pending_exists","not_found","already_consumed","superseded","stale_generation"]),F$=new Set(["pending_queue_full"]);function N3($){if(!($ instanceof j7))return;if(V$.has($.code))return{code:$.code,disposition:"terminal"};if(F$.has($.code))return{code:$.code,disposition:"retry"};return{code:$.code,disposition:$.action==="retry"?"retry":"terminal"}}function B$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function R1($){return typeof $==="number"&&Number.isSafeInteger($)&&$>=0}function D$($){return typeof $==="number"&&Number.isSafeInteger($)&&$>=1}function z1(){return new _("invalid-state","invalid Claustrum enrollment state")}function P3($){if(!B$($)||$.version!==V7||typeof $.proposedName!=="string"||$.proposedName.length===0)throw z1();if($.phase==="pending"){if(!C3.test(String($.requestSecret??""))||$.requestId!==void 0&&(typeof $.requestId!=="string"||$.requestId.length===0)||!R1($.createdAt)||!R1($.updatedAt))throw z1();return{version:1,phase:"pending",proposedName:$.proposedName,requestSecret:$.requestSecret,...$.requestId!==void 0&&{requestId:$.requestId},createdAt:$.createdAt,updatedAt:$.updatedAt}}if($.phase==="approved"){if($.approvedName!==void 0&&(typeof $.approvedName!=="string"||$.approvedName.length===0)||!D$($.tokenGeneration)||!R1($.updatedAt))throw z1();return{version:1,phase:"approved",proposedName:$.proposedName,...$.approvedName!==void 0&&{approvedName:$.approvedName},tokenGeneration:$.tokenGeneration,updatedAt:$.updatedAt}}if($.phase==="denied"||$.phase==="blocked"){if($.errorCode!==void 0&&typeof $.errorCode!=="string"||!R1($.updatedAt))throw z1();return{version:1,phase:$.phase,proposedName:$.proposedName,...$.errorCode!==void 0&&{errorCode:$.errorCode},updatedAt:$.updatedAt}}throw z1()}function O3($){if(!B$($)||!C3.test(String($.token??""))||!D$($.token_generation))throw new _("invalid-token","invalid Claustrum enrollment token file");return{token:$.token,token_generation:$.token_generation}}function F7($){if(!$.isFile())throw new _("unsafe-file","Claustrum enrollment file must be a regular file");if(($.mode&63)!==0)throw new _("unsafe-file","Claustrum enrollment file must be owner-only");let Z=process.geteuid?.();if(Z!==void 0&&$.uid!==Z)throw new _("unsafe-file","Claustrum enrollment file must be owned by the current user")}function Y$($){try{return JSON.parse($)}catch{throw new _("invalid-state","Claustrum enrollment file is not valid JSON")}}async function S0($){if(I)try{await J0(R0($));let J=await e($,!0);if(Buffer.byteLength(J)>S1)throw new _("unsafe-file","Claustrum enrollment file is too large");return Y$(J)}catch(J){if(J.code==="ENOENT")return;throw J}let Z;try{Z=await q$($,H$.O_RDONLY|H$.O_NOFOLLOW)}catch(J){if(J.code==="ENOENT")return;throw new _("unsafe-file","Claustrum enrollment file could not be opened safely")}try{F7(await Z.stat());let J=Buffer.alloc(S1+1),{bytesRead:z}=await Z.read(J,0,J.byteLength,0);if(z>S1)throw new _("unsafe-file","Claustrum enrollment file is too large");return Y$(J.subarray(0,z).toString("utf8"))}finally{await Z.close()}}function U$($,Z){let J=[];for(let z of $.split(`
10
- `)){if(z.trim()===""||z.startsWith("#"))continue;let X=z.split(":");if(X.length!==Z||!/^[^\s:,]+$/.test(X[0]??"")||!/^\d+$/.test(X[2]??"")||!Number.isSafeInteger(Number(X[2]))||Z===7&&(!/^\d+$/.test(X[3]??"")||!Number.isSafeInteger(Number(X[3])))||Z===4&&X[3]!==""&&!/^[^\s:,]+(?:,[^\s:,]+)*$/.test(X[3]??""))return;J.push(X)}return J}async function B7($,Z,J){try{let[z,X]=await Promise.all([D3(J.passwdPath??"/etc/passwd","utf8"),D3(J.groupPath??"/etc/group","utf8")]),G=U$(z,7),Q=U$(X,4);if(!G||!Q)return!1;let W=G.filter((K)=>Number(K[2])===$),H=Q.filter((K)=>Number(K[2])===Z);if(W.length!==1||H.length!==1)return!1;let U=W[0]?.[0],q=H[0]?.[3]??"";return(q===""||q.split(",").every((K)=>K===U))&&!G.some((K)=>Number(K[2])!==$&&Number(K[3])===Z)}catch{return!1}}function N$($){if(!$.passwdPath&&!$.groupPath)return;return{fs:{readFile:(Z)=>D3(Z==="/etc/passwd"?$.passwdPath??Z:Z==="/etc/group"?$.groupPath??Z:Z)}}}async function L$($,Z={}){if(!I){let J=process.geteuid?.();if(J===void 0)return;let z=process.getegid?.(),X;try{X=await Y7($)}catch{return}let G;for(;;){let Q=await K$(X).catch(()=>{return});if(Q&&(Q.mode&18)!==0&&(Q.mode&512)===0){if(G===void 0)G=z!==void 0&&await B7(J,z,Z);if((Q.mode&2)!==0||Q.uid!==J||Q.gid!==z||!G)throw new _("unsafe-file",`Claustrum enrollment path has a writable ancestor: ${X}. Another user could replace it. Run: chmod g-w,o-w ${X}`)}let W=R0(X);if(W===X)return;X=W}}try{await W0($,N$(Z))}catch(J){if(!(J instanceof u))throw J;throw new _("unsafe-file",`Claustrum enrollment parent refused: ${J.path} (${J.reason??J.code}). Use a folder that other users cannot write or replace.`)}}async function b1($,Z={}){if(I){await J0($,!1,N$(Z));return}await H7($,{recursive:!0,mode:448});let J=await K$($),z=process.geteuid?.();if(z!==void 0&&J.uid!==z)throw new _("unsafe-file","Claustrum enrollment directory must be owned by the current user");if((J.mode&63)!==0)await W7($,448)}async function A0($,Z,J={}){let z=R0($);await b1(z,J),await L$(z,J);let X=`${JSON.stringify(Z)}
11
- `;if(Buffer.byteLength(X)>S1)throw new _("invalid-state","Claustrum enrollment state is too large");if(I)return m0($,X);let G=K7(z,`.${q7($)}.${process.pid}.${Q7()}.tmp`),Q,W=!1;try{Q=await q$(G,"wx",384),W=!0,await Q.writeFile(X,"utf8"),await Q.chmod(384),await Q.sync(),await Q.close(),Q=void 0,await U7(G,$),W=!1}finally{if(await Q?.close().catch(()=>{}),W)await L3(G).catch(()=>{})}}async function _3($,Z){let J=await S0($.tokenPath),z=J===void 0?void 0:O3(J),X=await S0($.statePath),G=X===void 0?void 0:P3(X);if(z)return{state:"approved",proposedName:G?.proposedName??Z,...G?.phase==="approved"&&G.approvedName!==void 0&&{approvedName:G.approvedName},tokenGeneration:z.token_generation};if(!G)return{state:"idle"};if(G.phase==="approved")return{state:"blocked",proposedName:G.proposedName,code:"missing_token"};return F0(G)}async function B0($){let Z=await S0($);if(Z===void 0)throw new _("not-enrolled","Claustrum enrollment is not configured");return O3(Z)}function F0($){if($.phase==="pending")return{state:"pending",proposedName:$.proposedName,...$.requestId!==void 0&&{requestId:$.requestId}};if($.phase==="approved")return{state:"approved",proposedName:$.proposedName,...$.approvedName!==void 0&&{approvedName:$.approvedName},tokenGeneration:$.tokenGeneration};if($.phase==="denied")return{state:"denied",proposedName:$.proposedName};return{state:"blocked",proposedName:$.proposedName,code:$.errorCode??"unknown"}}function C$(){return new _("wrong-consumer","Claustrum enrollment state belongs to a different consumer")}class I3{#$;#z;#J;#X;#H;#G;#Z;constructor($){this.#Z=$.ancestorOptions??{},this.#$=$.client,this.#z=$.paths,this.#J=$.proposedName,this.#X=$.now??Date.now,this.#H=$.mintSecret??(()=>G7(32).toString("hex")),this.#G=$.writeTokenFile??M7}async status(){return _3(this.#z,this.#J)}async resetTerminal(){return P$(this.#z,this.#J)}async#Y($,Z){let J={version:1,phase:"blocked",proposedName:$.proposedName,errorCode:Z,updatedAt:this.#X()};return await A0(this.#z.statePath,J,this.#Z),F0(J)}async reconcile(){await b1(R0(this.#z.statePath),this.#Z);let $=await Y0({name:"ceremony",path:this.#z.statePath,ttlMs:j$,renew:!0});if(!$)return{state:"busy"};try{let Z=await S0(this.#z.tokenPath),J=Z===void 0?void 0:O3(Z),z=await S0(this.#z.statePath),X=z===void 0?void 0:P3(z);if(X&&X.proposedName!==this.#J)throw C$();if(J){if(!X||X.phase==="pending"){let Q={version:1,phase:"approved",proposedName:X?.proposedName??this.#J,tokenGeneration:J.token_generation,updatedAt:this.#X()};await A0(this.#z.statePath,Q,this.#Z),X=Q}return{state:"approved",proposedName:X.proposedName,...X.phase==="approved"&&X.approvedName!==void 0&&{approvedName:X.approvedName},tokenGeneration:J.token_generation}}if(X?.phase==="approved"){let Q={version:1,phase:"blocked",proposedName:X.proposedName,errorCode:"missing_token",updatedAt:this.#X()};return await A0(this.#z.statePath,Q,this.#Z),F0(Q)}if(X&&X.phase!=="pending")return F0(X);if(!X){let Q=this.#X();if(X={version:1,phase:"pending",proposedName:this.#J,requestSecret:this.#H(),createdAt:Q,updatedAt:Q},!C3.test(X.requestSecret))throw new _("invalid-state","invalid minted Claustrum enrollment secret");await A0(this.#z.statePath,X,this.#Z)}if(!X.requestId)try{let Q=X7("sha256").update(Buffer.from(X.requestSecret,"hex")).digest("hex"),W=await this.#$.enrollPropose({name:X.proposedName,requestSecretHash:Q});X={...X,requestId:W.requestId,updatedAt:this.#X()},await A0(this.#z.statePath,X,this.#Z)}catch(Q){let W=N3(Q);if(!W)throw Q;if(W.disposition==="retry")return{state:"pending",proposedName:X.proposedName,retryCode:W.code};if(W.code===M$)return await $.assertOwned(),await L3(this.#z.statePath).catch((H)=>{if(H.code!=="ENOENT")throw H}),{state:"unavailable",proposedName:X.proposedName,code:W.code};return this.#Y(X,W.code)}let G=X.requestId;if(!G)return F0(X);try{let Q=await this.#$.enrollPoll({requestId:G,requestSecret:X.requestSecret});if(Q.status==="pending")return F0(X);if(Q.status==="denied"){let H={version:1,phase:"denied",proposedName:X.proposedName,updatedAt:this.#X()};return await A0(this.#z.statePath,H,this.#Z),F0(H)}await b1(R0(this.#z.tokenPath),this.#Z),await L$(R0(this.#z.tokenPath),this.#Z),await this.#G(this.#z.tokenPath,{token:Q.token,token_generation:Q.tokenGeneration});let W={version:1,phase:"approved",proposedName:X.proposedName,approvedName:Q.name,tokenGeneration:Q.tokenGeneration,updatedAt:this.#X()};return await A0(this.#z.statePath,W,this.#Z),F0(W)}catch(Q){let W=N3(Q);if(!W)throw Q;if(W.disposition==="retry")return{state:"pending",proposedName:X.proposedName,requestId:G,retryCode:W.code};return this.#Y(X,W.code)}}finally{await $.release()}}}async function P$($,Z){await b1(R0($.statePath));let J=await Y0({name:"ceremony",path:$.statePath,ttlMs:j$,renew:!0});if(!J)return"busy";try{if(await S0($.tokenPath)!==void 0)return"refused-approved";let z=await S0($.statePath);if(z===void 0)return"idle";let X=P3(z);if(X.proposedName!==Z)throw C$();if(X.phase==="pending")return"refused-pending";return await J.assertOwned(),await L3($.statePath),"reset"}finally{await J.release()}}var A3="claustrum-tombstone:v1:";function _$($,Z){return Z!==void 0&&!Z.fromKeptReceipt&&!$.fromKeptReceipt&&Z.credentialId===$.credentialId&&Z.accountIdentity===$.accountIdentity&&Z.recordVersion!==$.recordVersion}function D7($,Z){if(Z===void 0)return"reauthorize-failed";if(Z.credentialId!==$.credentialId)return"credential-changed";if(Z.accountIdentity!==$.accountIdentity)return"account-changed";if(Z.recordVersion===$.recordVersion)return"version-unchanged";return"rotated"}var S3=O0("claustrum");function k3($,Z,J,z=S3){let X=_$(Z,J);return z.debug("scoped 401 re-authorized",{site:$,credentialId:Z.credentialId,servedVersion:Z.recordVersion,currentVersion:J?.recordVersion??null,retry:X,reason:D7(Z,J)}),X}var b3=300000,I$=60000;function R3(){return new _("invalid-material","Claustrum returned invalid credential material")}function N7($){let Z=$.trim();if(Z.startsWith("{")){let J;try{J=JSON.parse(Z)}catch{throw R3()}if(!J||typeof J!=="object")throw R3();let z=J,X=z.access_token??z.access;Z=typeof X==="string"?X:""}if(!/^[\x21-\x7e]+$/.test(Z)||Z.startsWith(A3))throw R3();return Z}function L7($,Z){if(!$.operations.includes("read"))return;if(!$.categories.includes(Z.category))return;if($.credentialType==="oauth")return $.refreshAdapter===Z.refreshAdapter?"oauth":void 0;if($.credentialType==="api_key"&&Z.apiKeys)return $.refreshAdapter===void 0?"api_key":void 0;return}function C7($){let{grants:Z,grantTuples:J}=$;if(Z===void 0||J===void 0)return;return Object.freeze({grants:Z,tuples:Object.freeze(J.map(({selectorKind:z,selector:X,operation:G})=>Object.freeze({selectorKind:z,selector:X,operation:G})))})}class k1{#$;#z;#J;#X;#H;#G;#Z;#Y=new WeakMap;#K=new WeakMap;#W=new Map;#Q=new WeakMap;#U;#M;#j=!1;#F=new P0;#V;#q=!1;#B=-1/0;#D=2000;#N=!1;#C;#P=new Set;constructor($){let Z=$.tokenPath;if($.readToken)this.#z=$.readToken;else if(Z)this.#z=()=>B0(Z);else throw new _("not-enrolled","Claustrum enrollment token path is required");this.#$=$.client,this.#X=$.family,this.#H=$.parseIdentity,this.#G=$.requireAssertion??!1,this.#J=$.now??Date.now,this.#Z=$.logger??S3,this.#U=$.setTimeoutImpl??setTimeout,this.#M=$.clearTimeoutImpl??clearTimeout}transportLost($){if(this.#N||this.#j)return;this.#j=!0,this.#F=$ instanceof O$?$:new P0,this.#Z.warn("serving kept vault receipt",{reason:"unreachable"}),this.#O()}reachable(){if(this.#N||!this.#j)return;if(this.#j=!1,this.#V)this.#M(this.#V);this.#V=void 0,this.#D=2000;for(let $ of this.#W.values())$.since=null;(this.#Z.info??S3.info)("vault receipt serving resumed",{reason:"reachable"})}#O(){if(this.#N||!this.#j||this.#V||this.#q)return;this.#V=this.#U(()=>{this.#V=void 0,this.#_(!0)},this.#D),this.#V.unref?.()}#_($=!1){if(this.#N||!this.#j||this.#q)return;if(this.#J()-this.#B<1000){this.#O();return}this.#B=this.#J(),this.#q=!0,this.#R().catch(()=>{if($&&this.#j)this.#D=Math.min(this.#D*2,30000)}).finally(()=>{this.#q=!1,this.#O()})}#L($){if(this.#N)throw new _("closed","Claustrum scoped custody is closed");$?.throwIfAborted()}async#I($){this.#L($);let Z=await this.#z();if(this.#L($),!/^[0-9a-f]{64}$/.test(Z.token)||!Number.isSafeInteger(Z.token_generation)||Z.token_generation<1)throw new _("invalid-token","Invalid Claustrum enrollment token");return Z.token}async#A($,Z){this.#L(Z);let J,z;try{let X=$();J=Z?await Promise.race([X,new Promise((G,Q)=>{let W=()=>Q(Z.reason);if(Z.addEventListener("abort",W,{once:!0}),z=()=>Z.removeEventListener("abort",W),Z.aborted)W()})]):await X}catch(X){if(this.#L(Z),M0(X)==="unreachable")this.transportLost(X);else this.reachable();if(X instanceof O$)throw X;if(M0(X)==="unreachable")throw new P0;throw new _("unavailable","Claustrum scoped operation unavailable")}finally{z?.()}return this.#L(Z),this.reachable(),J}async discover($){let Z=await this.#R($);return this.#C=Z.view,Z}async#R($){let Z,J;try{J=await this.#I($)}catch(H){throw this.#W.clear(),H}try{Z=await this.#A(()=>this.#$.listScoped(J),$)}catch(H){throw this.listFailed(H),H}let z=[],X=[],G=new Map;for(let H of Z.rows){let U=L7(H,this.#X);if(!U)continue;X.push({row:H,type:U}),G.set(H.id,(G.get(H.id)??0)+1)}let Q=[];for(let{row:H,type:U}of X){let q;if(!H.id.trim())q="empty credential id";else if((G.get(H.id)??0)>1)q="duplicate credential id";else if(H.accountId!==void 0&&!H.accountId.trim())q="blank account identity";else if(!H.state.trim())q="empty state";if(q){z.push({...H.id.trim()&&{credentialId:H.id},reason:q});continue}Q.push(Object.freeze({credentialId:H.id,credentialType:U,...H.accountId!==void 0&&{accountIdentity:H.accountId},state:H.state,...H.email!==void 0&&{email:H.email},...H.orgName!==void 0&&{orgName:H.orgName}}))}for(let H of z)this.#Z.warn("skipped malformed vault record",H);let W=C7(Z);return{view:Z.view,credentials:Object.freeze(Q),skipped:Object.freeze(z),...W&&{grantReach:W}}}listFailed($){if(M0($)==="unreachable")this.transportLost($);else this.reachable(),this.#W.clear()}forget($){this.#W.delete($)}retain($){let Z=new Map($.map((J)=>[J.credentialId,J]));for(let[J,z]of this.#W){let X=Z.get(J);if(!X?.enabled||X.state!=="active"||X.credentialType!==z.attempt.credentialType||X.accountIdentity!==z.attempt.expectedAccountIdentity)this.forget(J)}}keptReceiptState(){let $=null;for(let[Z,J]of this.#W){if(!this.#S(J.attempt)){this.forget(Z);continue}if(J.since!==null)$=Math.min($??J.since,J.since)}return Object.freeze({active:$!==null,since:$})}#S($){return $.expiresAtMs===null?$.credentialType==="api_key":$.expiresAtMs-this.#J()>I$}async authorize($,Z,J="vault"){this.#L(Z);let{credentialId:z,credentialType:X,accountIdentity:G}=$,Q=this.#W.get(z);if(Q&&(Q.attempt.credentialType!==X||Q.attempt.expectedAccountIdentity!==G))this.forget(z),Q=void 0;let W;try{W=await this.#I(Z)}catch(H){throw this.#W.clear(),H}if(this.#j&&Q)return this.#_(),this.#b(z,Q,W,J);try{let H=await this.#k({credentialId:z,credentialType:X,accountIdentity:G},W,Z);return this.#W.set(z,{attempt:H,routeId:J,since:null}),H}catch(H){if(this.#L(Z),M0(H)!=="unreachable")throw this.forget(z),H;return this.#b(z,Q,W,J,H)}}#b($,Z,J,z,X=this.#F){if(!Z||this.#W.get($)!==Z||!this.#S(Z.attempt))throw this.forget($),X;if(Z.since===null)Z.since=this.#J();let G=Object.freeze(Object.defineProperty({...Z.attempt,fromKeptReceipt:!0},"accessToken",{value:Z.attempt.accessToken,enumerable:!1}));return this.#Y.set(G,J),this.#Q.set(G,z),G}async#k($,Z,J){if(!$.credentialId)throw new _("route-unavailable","Claustrum dispatch requires a credential id");let{credentialId:z,credentialType:X,accountIdentity:G}=$;if(this.#G&&G===void 0)throw new _("identity-unasserted","Claustrum dispatch requires a known account identity");let Q=await this.#A(()=>this.#$.getScoped({credentialId:z,enrollmentToken:Z,...X==="oauth"&&{minTtlMs:b3}}),J);if(Q.credentialId!==void 0&&Q.credentialId!==z)throw new _("identity-changed","Claustrum served credential identity changed");let W=Q.expiresAtMs;if(!Number.isSafeInteger(Q.recordVersion)||Q.recordVersion<0||W===null&&X==="oauth"||W!==null&&(!Number.isFinite(W)||W-this.#J()<b3))throw new _("insufficient-validity","Claustrum served credential has insufficient validity");let H=N7(Q.material),U=Q.accountId?.trim()?Q.accountId:void 0;if(this.#G&&(Q.credentialId===void 0||U===void 0))throw new _("identity-unasserted","Claustrum served credential did not assert its identity");let q=U===void 0?this.#H?.(H):void 0,K=U??q;if(G!==void 0&&K!==void 0&&K!==G)throw new _("identity-changed","Claustrum served credential identity changed");let F=K??G,P=Object.freeze(Object.defineProperty({credentialId:z,credentialType:X,...F!==void 0&&{accountIdentity:F},accountIdentitySource:U!==void 0?"asserted":q!==void 0?"parsed":G!==void 0?"expected":"none",...G!==void 0&&{expectedAccountIdentity:G},...Q.credentialId!==void 0&&{assertedCredentialId:Q.credentialId},...U!==void 0&&{assertedAccountIdentity:U},...Q.projectId!==void 0&&{projectId:Q.projectId},recordVersion:Q.recordVersion,expiresAtMs:W},"accessToken",{value:H,enumerable:!1}));return this.#Y.set(P,Z),P}async reportFailure($,Z,J){if(Z!==401)return;this.#L();let z=this.#Y.get($);if(!z)throw new _("no-receipt","Claustrum failure report requires an original dispatch receipt");let X=this.#Q.get($);if(X!==void 0){this.forget($.credentialId),this.#Z.debug("scoped 401 not reported",{routeId:X,reason:"kept-receipt"});return}let G=this.#W.get($.credentialId);if(G&&G.attempt.recordVersion===$.recordVersion)this.forget($.credentialId);let Q=this.#K.get($);if(Q)return Q;let W=this.#A(()=>this.#$.reportAuthFailureScoped({credentialId:$.credentialId,enrollmentToken:z,providerStatus:401,recordVersion:$.recordVersion,reporterSource:J}));this.#K.set($,W);try{await W,this.#Z.debug("scoped 401 reported",{credentialId:$.credentialId,recordVersion:$.recordVersion,reporterSource:J})}catch(H){throw this.#K.delete($),H}}watchRoster($){this.#L();let Z=new L1({client:this.#$,enrollmentToken:()=>this.#I(),view:$.view??(()=>this.#C),discover:async(J)=>{await $.onView(J)},onRefused:(J)=>{this.listFailed(J),$.onRefused?.(J)},onTransportLost:()=>this.transportLost(),onReachable:()=>this.reachable(),onError:$.onError,onMode:$.onMode,logger:this.#Z,now:this.#J,setTimeoutImpl:this.#U,clearTimeoutImpl:this.#M});return this.#P.add(Z),Z.start(),{get mode(){return Z.mode},close:()=>{this.#P.delete(Z),Z.stop()}}}close(){if(this.#N)return;if(this.#N=!0,this.#V)this.#M(this.#V);this.#V=void 0;for(let $ of this.#P)$.stop();this.#P.clear(),this.#W.clear(),this.#$.close()}}import{resolve as a3}from"node:path";var b0="all",P7=Object.freeze(["primary"]);function R$($){return $.kind==="retired"?$.retiredAt:$.checkedAt}function c0($,Z){return JSON.stringify([$,Z])}function D0($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function d($){return typeof $==="number"&&Number.isFinite($)}function A$($){return typeof $==="string"&&$.length>0}function l($,Z,J){return $[Z]===void 0||J($[Z])}function O7($){return d($)&&$>0}function T3($){return typeof $==="string"}function _7($){if(!D0($)||!A$($.scope)||!A$($.label))return!1;switch($.kind){case"reading":return d($.checkedAt)&&d($.usedPercent)&&l($,"resetsAt",T3)&&l($,"windowMinutes",O7);case"retired":return d($.retiredAt);case"absent":return d($.checkedAt);default:return!1}}function I7($){if(!D0($)||!d($.checkedAt))return!1;if($.kind==="cleared")return!0;return $.kind==="reading"&&typeof $.reached==="boolean"&&l($,"remainingPercent",d)&&l($,"usedPercent",d)&&l($,"resetsAt",T3)&&l($,"limit",d)&&l($,"used",d)&&l($,"remaining",d)&&l($,"unit",T3)}function S$($){return D0($)&&d($.value)&&Number.isInteger($.value)&&$.value>=0&&d($.checkedAt)}function E3($){return D0($)&&Object.values($).every(S$)}function A7($){return typeof $==="boolean"}function p0($){return D0($)&&typeof $.hasCredits==="boolean"&&typeof $.unlimited==="boolean"&&l($,"balance",d)&&l($,"overageLimitReached",A7)&&d($.checkedAt)}function b$($){if(!D0($))return;let Z=Object.entries($).filter(([,J])=>S$(J));return Z.length===0?void 0:Object.fromEntries(Z)}function k0($){if(u0($))return $;if(!D0($))return;let{counters:Z,credits:J,...z}=$;if(!u0(z))return;let X=b$(Z),G=p0(J)?J:void 0;return{...z,...X===void 0?{}:{counters:X},...G===void 0?{}:{credits:G}}}function u0($){if(!D0($)||!Array.isArray($.limits))return!1;let Z=new Set;for(let J of $.limits){if(!_7(J))return!1;let z=c0(J.scope,J.label);if(Z.has(z))return!1;Z.add(z)}return l($,"budget",I7)&&l($,"counters",E3)&&l($,"credits",p0)}class T1 extends TypeError{constructor($){super($);this.name="QuotaCodecError"}}function f1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function E1($){return typeof $==="number"&&Number.isFinite($)}function k$($){return $===void 0||typeof $==="string"&&$!==""}function T$($){return typeof $==="string"&&$!==""}function X1($,Z){return $[Z]===void 0||E1($[Z])}function f3($,Z){return $[Z]===void 0||typeof $[Z]==="string"}function R7($){return f1($)&&k$($.scope)&&T$($.label)&&E1($.usedPercent)&&f3($,"resetsAt")&&($.windowMinutes===void 0||E1($.windowMinutes)&&$.windowMinutes>0)}function S7($){return f1($)&&k$($.scope)&&T$($.label)}function b7($){if(!f1($))return!1;if($.kind==="cleared")return!0;return $.kind==="reading"&&typeof $.reached==="boolean"&&X1($,"remainingPercent")&&X1($,"usedPercent")&&f3($,"resetsAt")&&X1($,"limit")&&X1($,"used")&&X1($,"remaining")&&f3($,"unit")}function d0($){if(!f1($)||!E1($.checkedAt))return!1;let Z=$.readings??[],J=$.coverage??[];if(!Array.isArray(Z)||!Array.isArray(J))return!1;let z=new Set;for(let X of Z){if(!R7(X))return!1;let G=c0(X.scope??b0,X.label);if(z.has(G))return!1;z.add(G)}if(!J.every(S7))return!1;return($.budget===void 0||b7($.budget))&&($.counters===void 0||E3($.counters))&&($.credits===void 0||p0($.credits))}function k7($,Z){if($.scope!==Z.scope)return $.scope<Z.scope?-1:1;if($.label!==Z.label)return $.label<Z.label?-1:1;return 0}function T7($,Z,J){if(Z===void 0)return $;if($!==void 0&&J<$.checkedAt)return $;return{...Z,checkedAt:J}}function E7($,Z){let J=new Map(Object.entries($??{}));for(let[z,X]of Object.entries(Z??{})){let G=J.get(z);if(G===void 0||X.checkedAt>=G.checkedAt)J.set(z,X)}return J.size===0?void 0:Object.fromEntries(J)}function f7($,Z){if(Z===void 0)return $;if($!==void 0&&Z.checkedAt<$.checkedAt)return $;return{...Z}}function G1($,Z){let J=$===void 0?void 0:k0($);if($!==void 0&&J===void 0)throw new T1("stored quota map is malformed");if(!d0(Z))throw new T1("quota observation is malformed");let z=J??{limits:[]},X=Z.checkedAt,G=new Map;for(let D of z.limits)G.set(c0(D.scope,D.label),D);let Q=(D)=>{let R=G.get(D);return R===void 0||X>=R$(R)},W=new Set;for(let D of Z.readings??[]){let R=D.scope??b0,S=c0(R,D.label);if(W.add(S),!Q(S))continue;G.set(S,{scope:R,label:D.label,kind:"reading",checkedAt:X,usedPercent:D.usedPercent,...D.resetsAt===void 0?{}:{resetsAt:D.resetsAt},...D.windowMinutes===void 0?{}:{windowMinutes:D.windowMinutes}})}for(let D of Z.coverage??[]){let R=D.scope??b0,S=c0(R,D.label);if(W.has(S)||!Q(S))continue;let y=G.get(S);G.set(S,y===void 0||y.kind==="absent"?{scope:R,label:D.label,kind:"absent",checkedAt:X}:{scope:R,label:D.label,kind:"retired",retiredAt:X})}let{limits:H,budget:U,counters:q,credits:K,...F}=z,B=T7(z.budget,Z.budget,X),P=E7(z.counters,Z.counters),C=f7(z.credits,Z.credits);return{...F,limits:[...G.values()].sort(k7),...B===void 0?{}:{budget:B},...P===void 0?{}:{counters:P},...C===void 0?{}:{credits:C}}}var g7=Object.freeze({validate:u0,decode:k0,merge:G1});import{createHash as v7}from"node:crypto";import{resolve as g$}from"node:path";function E$($,Z,J){if($.accountIdentity!==void 0&&J!==void 0)return $.accountIdentity===J;return $.credentialId===Z}function g3($,Z,J){return $.some((z)=>E$(z,Z,J))}function x3($,Z,J){let z={credentialId:Z,...J!==void 0&&{accountIdentity:J}};return[...$.filter((X)=>X.credentialId!==Z||X.accountIdentity!==J),z]}function y3($,Z,J){return $.filter((z)=>!Z.some((X)=>E$(z,X,J)))}var x$="vault:";function m7($){return v7("sha256").update($).digest("hex")}function w7($){let Z=$.credentialId.split(":");return(Z.length>=3?Z.slice(2).join(":").trim():void 0)||$.email||$.credentialId}function u7($){return $.identity!==void 0?`identity:${$.identity}`:`credential:${$.credential.credentialId}`}function N0($){return[$.credentialId,...$.aliases??[]]}function y$($,Z,J={}){let z=J.now??Date.now(),X=J.routePrefix??x$,G=J.reservedRouteIds??new Set,Q=$?.rows??[],W=[...$?.declined??[]],H=Z.skipped.length===0,U=new Set(Z.credentials.map((N)=>N.credentialId)),q=new Set(Z.skipped.flatMap((N)=>N.credentialId===void 0?[]:[N.credentialId])),K=Z.skipped.some((N)=>N.credentialId===void 0),F=(N)=>!U.has(N)&&(q.has(N)||K),B=new Map;for(let N of Q){if(N.accountIdentity===void 0)continue;for(let Y of N0(N))if(!B.has(Y))B.set(Y,N.accountIdentity)}let P=new Map;for(let N of Z.credentials){let Y=N.accountIdentity!==void 0?{credential:N,identity:N.accountIdentity,claimed:!0}:{credential:N,identity:B.get(N.credentialId),claimed:!1},j=u7(Y),M=P.get(j)??[];M.push(Y),P.set(j,M)}let C=new Set,D=new Set(G),R=[],S=(N,Y)=>N.credential.credentialId.localeCompare(Y.credential.credentialId),y=[...P.values()].map((N)=>N.toSorted(S)).sort((N,Y)=>N[0]&&Y[0]?S(N[0],Y[0]):0);for(let N of y){let Y=N[0]?.identity,j=N.filter((T)=>T.credential.state==="active"),M=j.length?j:N,b=M.filter((T)=>T.claimed),g=b.length?b:M,k=new Set(N.map((T)=>T.credential.credentialId)),m=Q.find((T)=>!C.has(T)&&N0(T).some((Q0)=>k.has(Q0))&&(T.accountIdentity===void 0||T.accountIdentity===Y)),n=g.find((T)=>T.credential.credentialId===m?.credentialId)??g[0];if(!n)continue;let h=n.credential,c=m??(Y===void 0?void 0:Q.find((T)=>!C.has(T)&&T.accountIdentity===Y));if(c)C.add(c);let t=c?.routeId;if(!t||G.has(t)){let T=`${X}${h.credentialId}${Y===void 0?"":`~${m7(Y).slice(0,10)}`}`;t=T;for(let Q0=2;D.has(t);Q0++)t=`${T}~${Q0}`}D.add(t);let V1=c?N0(c).filter(F):[],y0=[...new Set([...N.map((T)=>T.credential.credentialId),...V1])].filter((T)=>T!==h.credentialId).sort((T,Q0)=>T.localeCompare(Q0)),F1=J.mapAccount?.(h)??{};R.push({previousIndex:c?Q.indexOf(c):1/0,row:{routeId:t,credentialId:h.credentialId,credentialType:h.credentialType,...Y!==void 0&&{accountIdentity:Y},...y0.length&&{aliases:y0},state:h.state,label:F1.label?.trim()||w7(h),...h.email!==void 0&&{email:h.email},...h.orgName!==void 0&&{orgName:h.orgName},enabled:![h.credentialId,...y0].some((T)=>g3(W,T,Y)),addedAt:c?.addedAt??z,...c?.quota!==void 0&&{quota:c.quota},...!n.claimed&&Y!==void 0&&{unclaimed:!0}}})}return Q.forEach((N,Y)=>{if(C.has(N)||!N0(N).some(F))return;if(D.has(N.routeId))return;let[j,...M]=N0(N).filter((k)=>!U.has(k));if(j===void 0)return;D.add(N.routeId);let{aliases:b,...g}=N;R.push({previousIndex:Y,row:{...g,credentialId:j,...M.length&&{aliases:M},stale:!0}})}),R.sort((N,Y)=>N.previousIndex===Y.previousIndex?N.row.credentialId.localeCompare(Y.row.credentialId):N.previousIndex-Y.previousIndex),{version:1,view:Z.view,complete:H,...!H&&{rejected:Z.skipped.map((N)=>({...N.credentialId!==void 0&&{credentialId:N.credentialId},reason:N.reason}))},rows:R.map((N)=>N.row),declined:W}}function h3($){return($?.rows??[]).filter((Z)=>Z.enabled&&Z.state==="active").map((Z)=>({id:Z.routeId,kind:Z.credentialType==="oauth"?"oauth":"api-key",...Z.quota!==void 0&&{quota:Z.quota}}))}function Q1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function l0($){return $===void 0||typeof $==="string"}function c7($){let Z=Q1($)?k0($.quota):void 0;if(!Q1($)||typeof $.routeId!=="string"||typeof $.credentialId!=="string"||$.credentialType!=="oauth"&&$.credentialType!=="api_key"||typeof $.state!=="string"||typeof $.label!=="string"||typeof $.enabled!=="boolean"||typeof $.addedAt!=="number"||!l0($.accountIdentity)||!l0($.email)||!l0($.orgName)||$.aliases!==void 0&&(!Array.isArray($.aliases)||!$.aliases.every((J)=>typeof J==="string"))||$.quota!==void 0&&Z===void 0||$.stale!==void 0&&$.stale!==!0||$.unclaimed!==void 0&&$.unclaimed!==!0)return;return{...$,...Z===void 0?{}:{quota:Z}}}var p7=new Set(["empty credential id","duplicate credential id","blank account identity","empty state"]);function f$($){if(!Array.isArray($))return;let Z=[];for(let J of $){if(!Q1(J)||!l0(J.credentialId)||typeof J.reason!=="string"||!p7.has(J.reason))return;Z.push(J)}return Z}function d7($){if(!Q1($)||$.version!==1||!l0($.view)||!Array.isArray($.rows)||!Array.isArray($.declined)||$.complete!==void 0&&typeof $.complete!=="boolean"||$.rejected!==void 0&&!f$($.rejected))throw new _("invalid-state","Claustrum roster file is not valid");let Z=[];for(let X of $.rows){let G=c7(X);if(!G)throw new _("invalid-state","Claustrum roster file is not valid");Z.push(G)}let J=[];for(let X of $.declined){if(!Q1(X)||typeof X.credentialId!=="string"||!l0(X.accountIdentity))throw new _("invalid-state","Claustrum roster file is not valid");J.push(X)}let z=f$($.rejected);return{version:1,...typeof $.view==="string"&&{view:$.view},complete:$.complete!==!1,...z&&{rejected:z},rows:Z,declined:J}}async function r($){let Z;try{Z=await e($,I)}catch(z){if(z.code==="ENOENT")return;throw z}let J;try{J=JSON.parse(Z)}catch{throw new _("invalid-state","Claustrum roster file is not valid")}return d7(J)}var l7={name:"claustrum-roster-write",ttlMs:1e4,timeoutMs:5000,renew:!0},a7={name:"claustrum-roster",ttlMs:30000};async function T0($,Z,J={}){return F3($,{...l7,signal:J.signal},async(z)=>{let X=await r($),{next:G,result:Q}=await Z(X,{assertOwned:()=>z.assertOwned()});if(G)await z.assertOwned(),await J1($,G,{beforeRename:async()=>{await J.beforePublish?.(),J.signal?.throwIfAborted(),await z.assertOwned()}});return Q})}function v3($,Z){return T0($,(J)=>{let z=J?.rows.find((G)=>G.routeId===Z);if(!J||!z)throw new _("route-unavailable","Claustrum route is not in the roster");let X=x3(J.declined,z.credentialId,z.accountIdentity);return{next:{...J,declined:X,rows:J.rows.map((G)=>G===z?{...G,enabled:!1}:G)},result:void 0}})}function m3($,Z){return T0($,(J)=>{let z=J?.rows.find((X)=>X.routeId===Z);if(!J||!z)throw new _("route-unavailable","Claustrum route is not in the roster");return{next:{...J,declined:y3(J.declined,N0(z),z.accountIdentity),rows:J.rows.map((X)=>X===z?{...X,enabled:!0}:X)},result:void 0}})}function s7($){return new _("invalid-order",$)}function n7($,Z){if(!Array.isArray(Z))return"route ids must be an array of route ids";let J=new Set($.map((G)=>G.routeId)),z=new Set;for(let G of Z){if(typeof G!=="string")return"route ids must be an array of route ids";if(z.has(G))return`route id ${G} appears more than once`;if(!J.has(G))return`route id ${G} is not in the roster`;z.add(G)}let X=[...J].filter((G)=>!z.has(G)).length;if(X>0)return`the order leaves out ${X} roster route id${X===1?"":"s"}`;return}function w3($,Z,J={}){return T0($,(z)=>{let X=z?.rows??[],G=n7(X,Z);if(G)throw s7(G);let Q=new Map;for(let U of X){let q=Q.get(U.routeId);if(q)q.push(U);else Q.set(U.routeId,[U])}let W=[...Z],H=W.flatMap((U)=>Q.get(U)??[]);if(!z||H.every((U,q)=>U===X[q]))return{result:{ids:W,outcome:"unchanged"}};return{next:{...z,rows:H},result:{ids:W,outcome:"reordered"}}},{...J.signal&&{signal:J.signal}})}function i7($,Z){if(!N0($).includes(Z.credentialId))return"refuse";if($.unclaimed&&(Z.accountIdentitySource==="expected"||Z.accountIdentitySource==="none"))return"refuse";if($.accountIdentity===Z.accountIdentity)return"hold";if($.accountIdentity===void 0&&Z.expectedAccountIdentity===void 0&&Z.accountIdentity!==void 0&&(Z.accountIdentitySource==="asserted"||Z.accountIdentitySource==="parsed")&&N0($).length===1)return"bind";return"refuse"}async function u3($,Z){let{routeId:J,observation:z,...X}=Z;return h$($,{routeId:J,observation:z,accountIdentity:X.accountIdentity,receipt:X})}async function h$($,Z){if(!d0(Z.observation))return!1;let J=z0($,await r($));if(!L0(J,Z).kept)return!1;return v$($,Z)}function c3($,Z){return h$($,Z)}function L0($,Z){let J=$?.rows.find((Q)=>Q.routeId===Z.routeId),z=!J?"refuse":Z.receipt?i7(J,Z.receipt):J.accountIdentity!==void 0&&J.accountIdentity===Z.accountIdentity?"hold":"refuse";if(!$||!J||z==="refuse")return{roster:$,kept:!1};let X=G1(J.quota,Z.observation),G=z==="bind"?{accountIdentity:Z.accountIdentity,unclaimed:!0}:{};return{roster:{...$,rows:$.rows.map((Q)=>Q===J?{...Q,...G,quota:X}:Q)},kept:!0}}var g1=new Map;function p3($){g1.delete(g$($))}async function d3($){$.signal?.throwIfAborted();let Z=async()=>await $.isActive?.()??!0;if(!await Z()){p3($.path);return}let J=await Y0({...a7,path:$.path,renew:!0});if(!J){let G=await r($.path);if($.signal?.throwIfAborted(),!G?.view)throw new _("roster-busy","Claustrum account discovery is already in progress");return G}let z=g$($.path),X;try{let G=await r($.path),Q=g1.get(z);X=Q&&(Q.previousView===G?.view||Q.inventory.view===G?.view)?Q:{inventory:await $.custody.discover($.signal),previousView:G?.view},g1.delete(z);let{inventory:W}=X;return $.onInventory?.(W),$.signal?.throwIfAborted(),await T0($.path,async(H)=>{if(!await Z())return{result:void 0};$.signal?.throwIfAborted(),await J.assertOwned();let U=typeof $.projection==="function"?$.projection():$.projection,q=y$(H,W,U);return{...JSON.stringify(H)!==JSON.stringify(q)&&{next:q},result:q}},{beforePublish:async()=>{$.signal?.throwIfAborted(),await J.assertOwned()}})}catch(G){if(G instanceof _0&&X&&!$.signal?.aborted&&await Z())g1.set(z,X);throw G}finally{await J.release()}}var a0=new Map,r7=O0("claustrum"),m$=100;function w$($){let Z=a3($),J=a0.get(Z);if(!J)J={path:Z,pending:new Map,listeners:new Set,wake:new Set,abort:new AbortController,failures:0,draining:!1,order:0},a0.set(Z,J);return J}function u$($,Z){let J=w$($);J.listeners.add(Z);let z;return()=>z??=(()=>{return J.listeners.delete(Z),J.listeners.size?Promise.resolve():l3($)})()}function o7($){let Z=new Map,{observation:J}=$,z=JSON.stringify([$.routeId,$.receipt?.credentialId,$.receipt?.accountIdentitySource,$.receipt?.expectedAccountIdentity]),X=(W,H,U)=>Z.set(`${z}:${W}`,{at:H,order:0,publication:{...$,observation:U}}),G=(W,H)=>JSON.stringify([W??"all",H]),Q=new Set;for(let W of J.readings??[]){let H=G(W.scope,W.label);Q.add(H),X(H,J.checkedAt,{checkedAt:J.checkedAt,readings:[{...W}]})}for(let W of J.coverage??[]){let H=G(W.scope,W.label);if(!Q.has(H))X(H,J.checkedAt,{checkedAt:J.checkedAt,coverage:[{...W}]})}if(J.budget)X("budget",J.checkedAt,{checkedAt:J.checkedAt,budget:{...J.budget}});for(let[W,H]of Object.entries(J.counters??{}))X(`counter:${W}`,H.checkedAt,{checkedAt:J.checkedAt,counters:{[W]:{...H}}});if(J.credits)X("credits",J.credits.checkedAt,{checkedAt:J.checkedAt,credits:{...J.credits}});if(!Z.size)X("empty",J.checkedAt,{checkedAt:J.checkedAt});return Z}function v$($,Z){if(!d0(Z.observation))return Promise.resolve(!1);let J=w$($),z=JSON.stringify([Z.accountIdentity??null,Z.accountIdentity===void 0?Z.routeId:null]),X=J.pending.get(z)??new Map;for(let[G,Q]of o7(Z)){let W=X.get(G);if(!W||Q.at>=W.at){if(Q.order=++J.order,Q.publication.observation.coverage)Q.priorReading=W?.publication.observation.readings?W.publication:W?.priorReading;X.set(G,Q)}}if(X.size)J.pending.set(z,X);for(let G of J.listeners)G(Z);return p$(J,m$),Promise.resolve(!0)}function c$($){return[...$.values()].flatMap((Z)=>[...Z.values()]).sort((Z,J)=>Z.order-J.order)}function z0($,Z){let J=a0.get(a3($));if(J)for(let z of c$(J.pending)){if(z.priorReading)Z=L0(Z,z.priorReading).roster;Z=L0(Z,z.publication).roster}return Z}function p$($,Z){if($.running||$.timer||!$.pending.size||$.abort.signal.aborted)return;if($.timer=setTimeout(()=>{$.timer=void 0,d$($)},Z),!$.draining)$.timer.unref?.()}function d$($){if($.running||$.abort.signal.aborted)return;let Z=new Map([...$.pending].map(([J,z])=>[J,new Map(z)]));$.running=(async()=>{try{await T0($.path,(J)=>{let z=J;for(let X of c$(Z)){if(X.priorReading)z=L0(z,X.priorReading).roster;z=L0(z,X.publication).roster}return{...z!==J&&{next:z},result:void 0}},{signal:$.abort.signal});for(let[J,z]of Z){let X=$.pending.get(J);for(let[G,Q]of z)if(X?.get(G)===Q)X.delete(G);if(!X?.size)$.pending.delete(J)}$.failures=0}catch(J){if(!$.abort.signal.aborted&&$.failures++===0)r7.warn("vault quota publication delayed; retrying",{error:J instanceof Error?J.message:String(J)})}finally{$.running=void 0;for(let z of $.wake)z();let J=$.failures?Math.min(5000,100*2**Math.min($.failures,6))*(0.5+Math.random()):m$;p$($,J)}})()}async function l3($,Z=1000){let J=a3($),z=a0.get(J);if(!z)return;z.draining=!0,clearTimeout(z.timer),z.timer=void 0;let X,G,Q=new Promise((W)=>{G=()=>{if(!z.pending.size||z.abort.signal.aborted)W()},z.wake.add(G),G()});try{if(z.pending.size)d$(z);await Promise.race([Q,new Promise((W)=>{X=setTimeout(W,Math.max(0,Z))})])}finally{if(clearTimeout(X),G)z.wake.delete(G);if(z.draining=!1,!z.listeners.size){if(z.abort.abort(),clearTimeout(z.timer),z.pending.clear(),a0.get(J)===z)a0.delete(J)}}}class l${#$;#z=new AbortController;#J;#X;#H;#G;#Z;#Y;#K;#W=!1;#Q;#U;#M;#j=new Map;#F;#V;constructor($){this.#$=$,this.#J=$.logger??O0("claustrum"),this.#V=u$($.rosterPath,(Z)=>{this.#Z=L0(this.#Z,Z).roster})}#q($){this.#z.signal.throwIfAborted(),$?.throwIfAborted()}async#B(){return await this.#$.isCustodyActive?.()??!0}#D($,Z){let J=M3([this.#z.signal,...Z?[Z]:[]]);return new Promise((z,X)=>{let G=()=>{J.signal.removeEventListener("abort",Q),J.dispose()},Q=()=>{G(),X(J.signal.reason)};if(J.signal.addEventListener("abort",Q,{once:!0}),$.then((W)=>{if(G(),J.signal.aborted)X(J.signal.reason);else z(W)},(W)=>{G(),X(W)}),J.signal.aborted)Q()})}async#N(){if(this.#q(),this.#X)return this.#X;if(!this.#H)this.#H=this.#$.connect().then(($)=>{if(this.#z.signal.aborted)$.close(),this.#q();if(this.#X=new k1({client:$,family:this.#$.family,tokenPath:this.#$.tokenPath,parseIdentity:this.#$.parseIdentity,requireAssertion:this.#$.requireAssertion,now:this.#$.now,logger:this.#J,setTimeoutImpl:this.#$.setTimeoutImpl,clearTimeoutImpl:this.#$.clearTimeoutImpl}),this.#$.insula&&$.insula)this.#Q=H3($.insula,this.#$.tokenPath);return this.#X}).finally(()=>{this.#H=void 0});return this.#D(this.#H)}snapshot(){return this.#Z}grantReach(){let $=this.#Y;return $&&this.#Z?.view===$.view?$.reach:void 0}watchState(){return Object.freeze({vault:this.#U?.mode??"polling",...this.#$.insula&&{insula:this.#Q?.source.watchMode()??"polling"}})}#C(){this.#U?.close(),this.#U=void 0,this.#M?.(),this.#M=void 0}keptReceiptState(){return this.#X?.keptReceiptState()??Object.freeze({active:!1,since:null})}routingRows(){return h3(this.#Z)}refresh(){if(this.#q(),this.#G)return this.#G;return this.#G=(async()=>{if(!await this.#B()){this.#Z=void 0,this.#Y=void 0,this.#C(),this.#X?.close(),this.#X=void 0,this.#Q?.release(),this.#Q=void 0;return}let $=await this.#N(),Z,J=await d3({path:this.#$.rosterPath,custody:$,onInventory:(X)=>{Z=X},isActive:()=>this.#B(),signal:this.#z.signal,projection:()=>({reservedRouteIds:new Set(this.#$.reservedRouteIds?.()??[]),routePrefix:this.#$.routePrefix,mapAccount:this.#$.mapAccount,now:(this.#$.now??Date.now)()})});this.#q();let z=J?.view!==this.#Z?.view;if(this.#Z=z0(this.#$.rosterPath,J),$.retain(J?.rows??[]),Z&&J?.view!==void 0)this.#Y=Z.grantReach?{view:J.view,reach:Z.grantReach}:void 0;if(J&&z)this.#$.onRoster?.(J);return this.#F=(this.#$.now??Date.now)(),J})().finally(()=>{this.#G=void 0}),this.#G}start(){if(this.#W)return;this.#q(),this.#W=!0;let $=async()=>{try{if(await this.#P())await this.refresh();await this.refreshInsulaQuota(),this.#O()}catch(J){if(!this.#z.signal.aborted)this.#$.onError?.(J)}if(this.#z.signal.aborted)return;let Z=this.#$.pollIntervalMs??5000;if(Z<=0)return;this.#K=(this.#$.setTimeoutImpl??setTimeout)(()=>{this.#K=void 0,$()},Z),this.#K.unref?.()};$()}async#P(){if(this.#U?.mode!=="watching")return!0;let $=(this.#$.now??Date.now)();if(this.#F===void 0||$-this.#F>=G3)return!0;return!await this.#B()}#O(){let $=this.#X;if(this.#z.signal.aborted||!$)return;if(this.#U??=$.watchRoster({view:()=>this.#Z?.view,onView:async()=>{while(this.#G)await this.#G.catch(()=>{});await this.refresh()},onRefused:(Z)=>this.#$.onError?.(Z),onError:(Z)=>{if(!this.#z.signal.aborted)this.#$.onError?.(Z)}}),this.#$.insula&&this.#Q&&!this.#M)this.#M=this.#Q.source.watch({provider:this.#$.insula.provider,setTimeoutImpl:this.#$.setTimeoutImpl,clearTimeoutImpl:this.#$.clearTimeoutImpl})}async refreshInsulaQuota(){if(!this.#$.insula||this.#z.signal.aborted||!await this.#B())return;try{await B0(this.#$.tokenPath),await this.#N(),await this.#Q?.source.refresh((this.#$.now??Date.now)())}catch{}}async cachedInsulaQuota($){if(!this.#$.insula||this.#z.signal.aborted||!await this.#B())return;try{return await B0(this.#$.tokenPath),this.#_($.assertedAccountIdentity)}catch{return}}async cachedInsulaQuotaForRoute($){if(!this.#$.insula||this.#z.signal.aborted||!await this.#B())return;try{await B0(this.#$.tokenPath);let J=z0(this.#$.rosterPath,await r(this.#$.rosterPath))?.rows.find((z)=>z.routeId===$);return this.#_(J?.accountIdentity)}catch{return}}async lookupInsulaQuotaForRoute($){let Z=this.#$.insula;if(!Z||this.#z.signal.aborted||!await this.#B())return{miss:"unreachable"};try{await B0(this.#$.tokenPath);let z=z0(this.#$.rosterPath,await r(this.#$.rosterPath))?.rows.find((Q)=>Q.routeId===$)?.accountIdentity;if(!z||!this.#Q)return{miss:"unreachable"};let X=this.#Q.source.lookup(Z.provider,z,(this.#$.now??Date.now)()),G=X.reading&&Z.normalize(X.reading.entry,X.reading.context);if(X.miss)return{miss:X.miss,...G!==void 0&&{reading:G}};return G===void 0?{miss:"unreachable"}:{reading:G}}catch{return{miss:"unreachable"}}}async pollInsulaQuotaForRoute($,Z){let J=await this.lookupInsulaQuotaForRoute($);if(J.miss==="cold"||J.miss==="upstream-failed"){if(this.#j.get($)!==J.miss)this.#j.set($,J.miss),this.#J.warn("skipped insula provider poll",{reason:J.miss});return}return this.#j.delete($),J.miss?Z():J.reading}#_($){if(!this.#$.insula||!$)return;let Z=this.#Q?.source.current(this.#$.insula.provider,$,(this.#$.now??Date.now)());return Z?this.#$.insula.normalize(Z.entry,Z.context):void 0}async authorize($,Z){this.#q(Z);let J=this.#Z??await this.#D(this.refresh(),Z);if(!J||!await this.#B())throw this.#X?.close(),this.#X=void 0,this.#C(),this.#Q?.release(),this.#Q=void 0,new _("not-active","Claustrum scoped custody is not active");let z=z0(this.#$.rosterPath,await r(this.#$.rosterPath));this.#q(Z);let X=J.rows.find((H)=>H.routeId===$),G=z?.rows.find((H)=>H.routeId===$);if(G&&!G.enabled){if(X)this.#X?.forget(X.credentialId);throw new _("route-declined","Claustrum route is disabled")}if(!X||!G||G.state!=="active"||G.credentialId!==X.credentialId||G.accountIdentity!==X.accountIdentity||G.credentialType!==X.credentialType){if(X)this.#X?.forget(X.credentialId);throw new _("route-unavailable","Claustrum route is disabled, removed or changed")}let Q=await this.#D(this.#N(),Z),W=M3([this.#z.signal,...Z?[Z]:[]]);try{return await Q.authorize({credentialId:G.credentialId,credentialType:G.credentialType,...G.accountIdentity!==void 0&&{accountIdentity:G.accountIdentity}},W.signal,$)}finally{W.dispose()}}async reportFailure($,Z,J){if(this.#q(),!this.#X)throw new _("no-receipt","Claustrum dispatch receipt has no active owner");await this.#X.reportFailure($,Z,J)}async send($,Z,J){let z=J.signal,X=await this.authorize($,z),G=await Z(X,z);if(G.status===401&&X.fromKeptReceipt)return await this.reportFailure(X,401,J.reporterSource??"direct"),G;if(G.status===401&&!z?.aborted){let Q;try{Q=await this.authorize($,z),z?.throwIfAborted()}catch(W){if(z?.aborted)throw W}if(k3(J.site,X,Q,this.#J))await G.body?.cancel().catch(()=>{}),X=Q,G=await Z(Q,z)}if(G.status===401)await this.reportFailure(X,401,J.reporterSource??"direct").catch((Q)=>this.#$.onError?.(Q)),Promise.resolve().then(()=>this.refresh()).catch((Q)=>{if(!this.#z.signal.aborted)this.#$.onError?.(Q)});return G}async decline($){this.#q(),await v3(this.#$.rosterPath,$),this.#Z=z0(this.#$.rosterPath,await r(this.#$.rosterPath)),this.#X?.retain(this.#Z?.rows??[])}async accept($){this.#q(),await m3(this.#$.rosterPath,$),this.#Z=z0(this.#$.rosterPath,await r(this.#$.rosterPath))}async reorder($){this.#q();let Z=await w3(this.#$.rosterPath,$);return this.#Z=z0(this.#$.rosterPath,await r(this.#$.rosterPath)),Z}async recordQuota($,Z,J){return this.#q(),u3(this.#$.rosterPath,{routeId:$,observation:Z,credentialId:J.credentialId,accountIdentitySource:J.accountIdentitySource,...J.accountIdentity!==void 0&&{accountIdentity:J.accountIdentity},...J.expectedAccountIdentity!==void 0&&{expectedAccountIdentity:J.expectedAccountIdentity}})}async recordAccountQuota($,Z,J){return this.#q(),c3(this.#$.rosterPath,{routeId:$,accountIdentity:Z,observation:J})}close(){if(this.#z.signal.aborted)return;if(this.#z.abort(new _("closed","Claustrum consumer is closed")),this.#K)(this.#$.clearTimeoutImpl??clearTimeout)(this.#K);this.#K=void 0,this.#C(),this.#X?.close(),this.#Q?.release(),this.#Q=void 0,this.#Z=void 0,this.#Y=void 0,this.#V(),p3(this.#$.rosterPath)}async dispose(){this.close(),await this.#V()}}var s0={opencode:$8,pi:Z8};function s3($,Z){let{tokenPath:J}=J8($,Z);return{stateDir:e7(J),host:$,override:J}}function n3($,Z){return z8($==="pi"?Z.PI_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE:void 0,$==="pi"?{...Z,OPENCODE_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE:void 0}:Z)}class W1 extends Error{code;constructor($){super($==="permission-refused"?"Native vault setup: permission-refused. Could not grant this host read access to native Claude accounts. An older ck may refuse a grant that already exists. Update CortexKit tools and run setup again.":`Native vault setup: ${$}`);this.code=$;this.name="NativeVaultEnrollmentError"}}function i3($){return["auth","grant","--principal",`enrolled:${s0[$]}`,"--selector-kind","category","--selector","anthropic-native","--operation","read"]}async function a$($,Z){try{if(await Z.processFence(),(await Z.runner.run(Z.ckBinary??"ck",i3($),{env:Z.env})).exitCode!==0)throw new W1("permission-refused")}catch{throw new W1("permission-refused")}}import{createHash as U8}from"node:crypto";import{lstat as q8,mkdir as K8,readFile as z9}from"node:fs/promises";import{dirname as j8}from"node:path";import{assertHostsStopped as M8,canonicalPath as o3,createNativeAccountRuntime as V8,custodyTombstoneOAuth as F8,inspectNativeHostAuthEntry as X9,NativeMigrationError as E0,nativeJournalMayAdoptLaterHostLogin as B8,nativePoolHoldsAccountData as D8,prepareNativeMigration as N8,readNativeEnrollmentMode as G9,readNativeMigrationJournal as L8,releaseNativeMigrationPreflight as C8,requireNoSupervisedAuthContentSnapshot as P8,runNativeMigration as O8,writeNativeHostAuth as _8}from"@cortexkit/anthropic-auth-core";import{dirname as X8,join as s$,resolve as r3}from"node:path";import{ACCOUNT_FILE_NAME as n$,ACCOUNT_STATE_FILE_NAME as G8,canonicalPath as i$,getStickyRoutingStatePath as Q8,resolveLocalRoutingDestination as W8,resolveNativePoolPaths as H8}from"@cortexkit/anthropic-auth-core";async function U0($,Z){let J=$==="pi"?t$(Z):r$(Z),z=$==="pi"?Z.PI_ANTHROPIC_AUTH_FILE?.trim():Z.OPENCODE_ANTHROPIC_AUTH_FILE?.trim(),X=r3(z||s$(J,n$)),G=r3(Z.OPENCODE_ANTHROPIC_AUTH_STATE_FILE?.trim()||(X.endsWith(n$)?s$(X8(X),G8):`${X}.state.json`)),Q=await H8(X,G),W=$==="pi"?Z.PI_ANTHROPIC_AUTH_ROUTING_STATE_FILE?.trim():Z.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE?.trim();return{host:$,paths:Q,legacyConfigPath:X,legacyStatePath:G,hostAuthPath:$==="pi"?e$(Z):o$(Z),routingSourcePath:r3(W||Q8(X)),routingDestinationPath:W8($,Q,Z)}}async function $9($){let Z=new Map;for(let J of $){let z=new Set;for(let[X,G]of[J.paths.legacyConfig,J.paths.legacyState,J.paths.config,J.paths.state,J.paths.runtime,J.paths.roster,J.paths.journal,J.hostAuthPath,J.routingSourcePath,J.routingDestinationPath].entries()){let Q=await i$(G);if(z.has(Q)&&!(X===9&&Q===await i$(J.routingSourcePath)))throw Error("Native setup storage paths overlap");let W=Z.get(Q);if(W!==void 0&&W!==J.host)throw Error("Native setup storage paths overlap between selected hosts");Z.set(Q,J.host),z.add(Q)}}}import{types as Y8}from"node:util";var Z9=new WeakMap;function J9($){return typeof $==="object"&&$!==null?Z9.get($):void 0}function x1($){if(!$||typeof $!=="object"||Y8.isProxy($))return;if(Object.getOwnPropertyDescriptor($,"name")?.value==="ProcessInspectionError"&&Object.getOwnPropertyDescriptor($,"code")?.value==="process-inspection-failed")return"Process inspection failed; setup cannot prove hosts are stopped.";return}class a extends Error{constructor($){super($);this.name="SetupRefusal",Z9.set(this,$)}}var t3="OpenCode's separate Anthropic login is not used. Add that account through /claude Accounts if needed, or remove the separate login from OpenCode.";function Q9($){let Z=$==="opencode"?"OpenCode":"Pi";return`${Z} is still connected to the vault. Old local settings do not disconnect it. In ${Z}, run /claude → Accounts → Disconnect from the vault. Then run local setup again.`}async function e3($,Z){let J=[];for(let z of $)if(await G9(z,Z)!=="local")J.push(Q9(z));if(J.length)throw new a(J.join(`
12
- `))}function f0($,Z){return async()=>{P8(Z.env);try{await M8(Z.fence,Z.env)}catch(J){let z=x1(J);if(z)throw new a(z);throw J}await e3([$],Z.env)}}async function $2($){try{return U8("sha256").update(await z9($)).digest("hex")}catch(Z){if(Z.code==="ENOENT")return"absent";throw new E0("unsafe-source")}}async function H1($,Z){let J;try{J=JSON.parse(await z9(Z,"utf8"))}catch(G){if(G.code!=="ENOENT")throw new E0("unsafe-source")}let z=X9($,J),X=J?.anthropic;return{...z,realLogin:z.kind==="oauth"&&Boolean(X?.access&&X.refresh)}}async function y1($,Z){let{paths:J}=$,z=$.generation2?void 0:await H1(J.host,J.hostAuthPath),X=await Promise.all([J.paths.config,J.paths.state,J.paths.runtime,J.paths.roster,J.paths.journal,J.routingDestinationPath].map($2));return JSON.stringify([await G9(J.host,Z),z?.digest,...X])}async function Z2($,Z,J){let z=Z.paths??await U0($,Z.env),X=f0($,Z);await X();let G=await L8(z.paths);if(G&&G.host!==$)throw new E0("invalid-source");let Q=G?.phase==="committed"||G?.phase==="retired";if(G&&G.kind!=="empty-init"&&(G.hostAuthPath!==await o3(z.hostAuthPath)||G.routingPaths.source!==await o3(z.routingSourcePath)||G.routingPaths.destination!==await o3(z.routingDestinationPath)))throw new E0("invalid-source");let W={paths:z,generation2:J,action:"migration",notice:!1,fingerprint:"",authorityPhase:G?.phase??"absent",poolPopulation:"not-evaluated"};if(J){if(G&&!Q)throw new E0("invalid-source");if(W.action=G?"reuse":"empty-init",!G){let H=[z.paths.config,z.paths.state,z.paths.runtime,z.paths.roster];if(!Z.env.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE)H.push(z.routingDestinationPath);for(let U of H){try{await q8(U)}catch(q){if(q.code==="ENOENT")continue;throw new E0("unsafe-source")}throw new E0("invalid-source")}}}else{W.slot=await H1($,z.hostAuthPath);let H=B8(G,$)&&W.slot.kind==="oauth";W.poolPopulation=G?.kind==="empty-init"||H?await D8({paths:z.paths}):"not-evaluated";let U=W.poolPopulation===!0;if($==="opencode"&&(U||Q&&G?.kind!=="empty-init"&&!H&&W.slot.kind==="oauth"))W.action="skip",W.notice=W.slot.realLogin;else W.preflight=await N8({...z,env:Z.env,processFence:X,removePiAnthropicAuth:Z.removePiAnthropicAuth})}return W.fingerprint=await y1(W,Z.env),W}async function n0($,Z){await f0($.paths.host,Z)();let J=await Z2($.paths.host,{...Z,paths:$.paths},$.generation2);try{if(J.fingerprint!==$.fingerprint||J.action!==$.action)throw new a("Setup inputs changed. Rerun setup with all hosts stopped.")}finally{if(J.preflight)C8(J.preflight)}}async function J2($,Z){if($.paths.host!=="opencode"||$.slot?.kind!=="absent")return;let J=f0("opencode",Z);await J(),await K8(j8($.paths.hostAuthPath),{recursive:!0,mode:448}),await _8({host:"opencode",authPath:$.paths.hostAuthPath,sourceDigest:"absent",expectedDigest:X9("opencode",{anthropic:F8("anthropic")}).digest,env:Z.env,removePiAnthropicAuth:!1,processFence:J})}async function W9($,Z){let J={...Z.env},z=f0($,{...Z,env:J});await z();let X=Z.paths??await U0($,J),G=await Z.login?.($);if(G&&!/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(G.accountIdentity))throw Error("Claude sign-in did not establish an account UUID");if(await z(),await Z.beforeCommit?.(),!Z.skipMigration)await O8({paths:X.paths,legacyConfigPath:X.legacyConfigPath,legacyStatePath:X.legacyStatePath,host:$,hostAuthPath:X.hostAuthPath,routingSourcePath:X.routingSourcePath,routingDestinationPath:X.routingDestinationPath,env:J,processFence:z,removePiAnthropicAuth:Z.removePiAnthropicAuth,preflight:Z.preflight});if(G){let Q=V8({paths:X.paths,host:$,vault:{env:J},beforePoolWrite:z});try{if((await Q.read()).mode!=="local")throw new a(Q9($));await z(),await Q.loginOAuth({routeId:"main",replace:!0,...G})}finally{Q.close()}}if(Z.skipMigration){let Q=await H1($,X.hostAuthPath);await J2({paths:X,slot:Q},Z)}}var H9={opencode:"OpenCode",pi:"Pi"};function f8($,Z){switch($){case"auth-content-refused":return"Run setup without OPENCODE_AUTH_CONTENT in the environment.";case"host-auth-invalid":return"The host auth file could not be read safely.";case"primary-conflict":return"Pi has a stored Anthropic API key, which would take precedence over the vault account. Remove it in Pi, then rerun setup.";case"consent-required":return"Pi has stored Anthropic authentication. Explicit consent is required to move it aside for vault use.";case"primary-unverified":return"The vault has no verified default Claude account. Sign in through the vault and rerun setup.";case"no-read-grant":return`${H9[Z]} has no read grant in the vault, so setup cannot see any Claude login. Run ${["ck",...i3(Z)].join(" ")}, then rerun setup.`;case"grant-reaches-nothing":return`${H9[Z]}'s vault read grant reaches no Claude login: no vault login carries the anthropic-native category, which logins saved before vault categories existed lack. Run ck auth reclassify --from-registry, check the logins with ck auth status, then rerun setup.`}}class X0 extends Error{code;constructor($,Z="opencode"){super(f8($,Z));this.name="NativeVaultActivationError",this.code=$}}function g8($){let Z=$?.grantReach;if(!Z||$.credentials.length>0||$.skipped.length>0)return"primary-unverified";return Z.grants===0?"no-read-grant":"grant-reaches-nothing"}async function X2($){try{return JSON.parse(await I8($,"utf8"))}catch(Z){if(Z.code==="ENOENT")return;throw new X0("host-auth-invalid")}}async function Y1($,Z){if($==="opencode")return"opencode";let J=Z.paths??await U0($,Z.env),z=z2($,await X2(J.hostAuthPath)),X=G2({env:Z.env,authPath:J.hostAuthPath}),{stashPath:G}=k8({env:Z.env,authPath:J.hostAuthPath});return JSON.stringify([z.digest,await X.inspect(),await $2(G)])}async function Y9($){try{E8($.env)}catch{throw new X0("auth-content-refused")}try{await A8($.fence,$.env)}catch(Z){let J=x1(Z);if(J)throw new a(J);throw Z}}async function U9($,Z){let J={...Z.env};await(()=>Y9({...Z,env:J}))();let X=Z.paths??await U0($,J),G=$==="opencode"&&Z.inspectOpenCodeAuth!==!1&&z2("opencode",await X2(X.hostAuthPath)).kind==="oauth";if($==="pi"){let Q=z2("pi",await X2(X.hostAuthPath)),W=await G2({env:J,authPath:X.hostAuthPath}).inspect();if(W.slot==="placeholder"&&W.stash==="missing")throw new b8("missing-stash");if(Q.kind!=="absent"&&W.slot!=="placeholder"&&!Z.removePiAnthropicAuth)throw new X0("consent-required")}return{priorMode:await T8($,J),fingerprint:await Y1($,{...Z,env:J}),separateOpenCodeLogin:G}}async function q9($,Z,J){let z={...Z.env},X=()=>Y9({...Z,env:z});await X();let G=Z.paths??await U0($,z);if(await Y1($,Z)!==J.fingerprint)throw new X0("host-auth-invalid");await a$($,{env:z,runner:Z.runner,processFence:X,ckBinary:Z.enrollment?.ckBinary});let Q=Z.discover??(()=>S8({paths:G.paths,host:$,env:$==="pi"?{...z,OPENCODE_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE:z.PI_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE}:z})),W,H=async()=>{return W=await Q(),W},U=R8({paths:G.paths,host:$,vault:{env:z,discover:H}});try{await X(),await U.vault.refresh();let q=await U.read(),K=q.accounts.find((F)=>F.id==="main");if(q.mode!=="claustrum"||!K?.accountIdentity||K.source!=="vault"){let F=g8(W);throw F==="primary-unverified"?new X0(F):new X0(F,$)}if(await X(),$==="pi")await G2({env:z,authPath:G.hostAuthPath}).enterVault();return J.priorMode==="claustrum"?"already-vault":"committed"}finally{U.close()}}var x8=/(?:^|[/\\])(opencode|litecode|opencode2|pi)(?:\.exe)?(?=$|\s|")/i;class Q2 extends Error{activeHosts;constructor($){let Z=$.map((z)=>({pid:z.pid,command:x8.exec(z.command)?.[1]??"host"})),J=Z.map((z)=>` - PID ${z.pid}: ${z.command}`).join(`
2
+ import{x as $3}from"./index-0kxy8k2c.js";import{A as D4,B as o$,C as t$,D as e$,E as $9,F as L4,z as B4}from"./index-b1dvkp15.js";import{ha as G4,ia as M5,ja as q3}from"./index-62x1p34p.js";var I2=M5((oH,J4)=>{var _2={to($,Z){if(!Z)return`\x1B[${$+1}G`;return`\x1B[${Z+1};${$+1}H`},move($,Z){let J="";if($<0)J+=`\x1B[${-$}D`;else if($>0)J+=`\x1B[${$}C`;if(Z<0)J+=`\x1B[${-Z}A`;else if(Z>0)J+=`\x1B[${Z}B`;return J},up:($=1)=>`\x1B[${$}A`,down:($=1)=>`\x1B[${$}B`,forward:($=1)=>`\x1B[${$}C`,backward:($=1)=>`\x1B[${$}D`,nextLine:($=1)=>"\x1B[E".repeat($),prevLine:($=1)=>"\x1B[F".repeat($),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},V5={up:($=1)=>"\x1B[S".repeat($),down:($=1)=>"\x1B[T".repeat($)},F5={screen:"\x1B[2J",up:($=1)=>"\x1B[1J".repeat($),down:($=1)=>"\x1B[J".repeat($),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines($){let Z="";for(let J=0;J<$;J++)Z+=this.line+(J<$-1?_2.up():"");if($)Z+=_2.left;return Z}};J4.exports={cursor:_2,scroll:V5,erase:F5,beep:"\x07"}});import{stdin as r5,stdout as o5}from"node:process";import{createInterface as t5}from"node:readline/promises";import{authorize as e5,createNativeAccountRuntime as $Z,exchange as ZZ,formatNativeAccountState as JZ,generateRelayToken as zZ,getAccountStoragePath as XZ,isValidApiBaseURL as GZ,readNativeEnrollmentMode as QZ,resolveNativePoolPaths as WZ,WORKER_SCRIPT as HZ}from"@cortexkit/anthropic-auth-core";import{randomUUID as y8}from"node:crypto";import{constants as v1}from"node:fs";import{lstat as h8,mkdir as v8,open as m8}from"node:fs/promises";import{homedir as w8}from"node:os";import{isAbsolute as j9,join as H2}from"node:path";import{types as U2}from"node:util";import{createProviderErrorRedactor as B9,createWindowsOwnerOnly as u8,ensureWindowsOwnerOnlyDirectory as c8,formatLogLine as p8,isOwnerOnly as d8,isSecretKey as l8,NativeMigrationError as a8,NativePiAuthSlotError as s8,PRIVATE_FILES_UNAVAILABLE_MESSAGE as D9,setupEnrollment as n8}from"@cortexkit/anthropic-auth-core";import{readFile as I8}from"node:fs/promises";import{assertHostsStopped as A8,createNativeAccountRuntime as R8,discoverNativeVaultInventory as S8,inspectNativeHostAuthEntry as z2,NativePiAuthSlotError as b8,nativePiAuthSlotPaths as k8,openNativePiAuthSlot as G2,readNativeEnrollmentMode as T8,requireNoSupervisedAuthContentSnapshot as E8}from"@cortexkit/anthropic-auth-core";import{dirname as $8}from"node:path";import{CLAUSTRUM_OPENCODE_ENROLLMENT_NAME as Z8,CLAUSTRUM_PI_ENROLLMENT_NAME as J8,getHostClaustrumEnrollmentPaths as a$,resolveClaustrumConnectionPath as z8}from"@cortexkit/anthropic-auth-core";import{writeEnrollmentTokenFile as AX}from"@cortexkit/claustrum-client";import{ClaustrumClient as WX}from"@cortexkit/claustrum-client";import{resolve as f2}from"node:path";import{storeIdentity as RZ}from"@cortexkit/claustrum-client";import{SubcClient as bZ}from"@cortexkit/subc-client";import{ClaustrumCredentialError as P4}from"@cortexkit/claustrum-client";import{SocketClosedError as O4,SocketTimeoutError as _4,SubcCallError as I4}from"@cortexkit/subc-client";class _ extends Error{kind;constructor($,Z){super(Z);this.name="ClaustrumConsumerError",this.kind=$}}var G3=Object.freeze({ECONNREFUSED:"unreachable",ENOENT:"unreachable",ECONNRESET:"unreachable",EPIPE:"unreachable",ETIMEDOUT:"unreachable",transport_error:"unreachable",unavailable:"unreachable",timeout:"unreachable",route_closed:"unreachable",daemon_draining:"unreachable",connection_closed:"unreachable",connection_dropped:"unreachable",request_deadline:"unreachable",deadline_exceeded_no_drop_observed:"unreachable",module_reloading:"unreachable",module_warming:"unreachable",target_unavailable:"unreachable",module_timeout:"unreachable",invalid_response:"answered",invalid_record_version:"answered",invalid_expiry:"answered",invalid_status:"answered",invalid_params:"answered",ttl_unsatisfiable:"answered",not_found:"answered",enrollment_revoked:"answered",enrollment_invalid:"answered",grant_denied:"answered",credential_unavailable:"answered",needs_reauth:"answered",declined:"answered",disabled:"answered",identity_changed:"answered",closed:"answered",client_closed:"answered",pending_exists:"answered",pending_queue_full:"answered",already_consumed:"answered",superseded:"answered",stale_generation:"answered",missing_identity:"answered",invalid_control_body:"answered",unknown_module:"answered",module_removed:"answered",capability_denied:"answered",unknown_channel:"unreachable",stale_route_epoch:"unreachable",capability_forbidden:"answered",capability_unprovided:"answered",capability_ambiguous:"answered",invalid_capability_identifier:"answered",binary_body_required:"answered",binary_call_requires_call_binary:"answered",corr_exhausted:"answered",late_route_cleanup_failed:"answered",reverse_request_capability_not_declared:"answered",stale_route_handle:"answered",reverse_request_unhandled:"answered",handler_error:"answered",health_error:"answered",duplicate_module_id:"answered",route_rejected:"answered",lock_busy:"answered",owner_invalid:"answered",renewal_failed:"answered",unsupported_platform:"answered",EACCES:"answered",EPERM:"answered",ERR_PRIVATE_FILES_SECURITY:"answered"});class P0 extends _{constructor(){super("unavailable","Claustrum scoped operation unavailable");this.name="ClaustrumUnreachableError"}}function M0($){if($ instanceof P0||$ instanceof O4||$ instanceof _4)return"unreachable";let Z=$ instanceof P4||$ instanceof I4?$.code:$ instanceof Error&&("code"in $)?$.code:void 0;if(typeof Z!=="string"||!Object.hasOwn(G3,Z))return"answered";return G3[Z]}var Q3=300000,D1=300000,W3=1000;class Z1{#$;#z=0;restart(){this.#z=0}continuous($){let Z=$.kind==="changed"&&$.seq===this.#z+1&&(this.#$===void 0||$.epoch===this.#$);return this.#$=$.epoch,this.#z=$.seq,Z}}class L1{#$;#z;#J;#X=!1;constructor($,Z){this.#$=$,this.#z=Z}get running(){return this.#J}request(){if(this.#J)return this.#X=!0,this.#J;return this.#J=(async()=>{do{this.#X=!1;try{await this.#$()}catch($){this.#z($)}}while(this.#X)})().finally(()=>{this.#J=void 0}),this.#J}}class N1{#$;#z=new Z1;#J;#X="polling";#H;#G;#Z=!1;#Y;#K=!1;#W=0;constructor($){this.#$=$,this.#J=new L1(async()=>{let Z=this.#K;if(this.#K=!1,Z||this.#Y!==this.#$.view())await this.#$.discover(this.#Y??"")},(Z)=>{if(!this.#Z)this.#$.onError?.(Z)})}get mode(){return this.#X}start(){if(this.#Z||this.#H||this.#G)return;if(typeof this.#$.client.watchScoped!=="function"){this.#Q("fallback","client-without-watch");return}this.#M(!1)}stop(){if(this.#Z)return;if(this.#Z=!0,this.#G)(this.#$.clearTimeoutImpl??clearTimeout)(this.#G);this.#G=void 0;let $=this.#H;this.#H=void 0,$?.handle.stop()}#Q($,Z){if(this.#X===$)return;this.#X=$,this.#$.logger?.debug("claustrum vault watch",{mode:$,reason:Z}),this.#$.onMode?.($)}#U($,Z){this.#G=(this.#$.setTimeoutImpl??setTimeout)(()=>{if(this.#G=void 0,!this.#Z)Z()},$),this.#G.unref?.()}async#M($){let Z;try{Z=await this.#$.enrollmentToken()}catch(Q){if(this.#Z)return;this.#$.onError?.(Q),this.#F("token-unreadable");return}let J=this.#$.client.watchScoped;if(this.#Z||this.#H||!J)return;this.#z.restart(),this.#K=$;let z,X;try{X=J.call(this.#$.client,(Q)=>{if(this.#Z||!z||this.#H!==z)return;if(z.notices++,z.notices===1)this.#$.onReachable?.(),z.acceptedAt=(this.#$.now??Date.now)(),this.#Q("watching","accepted");if(!this.#z.continuous(Q))this.#K=!0;this.#Y=Q.view,this.#J.request()},{enrollmentToken:Z})}catch(Q){this.#$.onError?.(Q),this.#F("watch-failed");return}z={handle:X,notices:0},this.#H=z,this.#Q("polling",$?"resubscribing":"opening");let G=z;X.closed.then((Q)=>this.#j(G,Q),(Q)=>this.#j(G,{kind:"transport_lost",error:Q}))}#j($,Z){if(this.#Z||this.#H!==$)return;if(this.#H=void 0,Z.kind==="stopped")return;if(Z.kind==="transport_lost")this.#$.onTransportLost?.();if(Z.kind==="unsupported"){this.#Q("fallback","vault-without-watch");return}if(Z.kind==="refused"){this.#F("refused");try{this.#$.onRefused(Z.error)}catch(J){this.#$.onError?.(J)}return}if($.notices>0){let J=(this.#$.now??Date.now)();if($.acceptedAt!==void 0&&J-$.acceptedAt>=300000)this.#W=0;let z=Math.min(1000*2**Math.min(this.#W,16),300000);this.#W++,this.#Q("polling","resubscribing"),this.#U(z,()=>void this.#M(!0));return}this.#F(Z.kind)}#F($){this.#Q("fallback",$),this.#U(300000,()=>void this.#M(!1))}}var P1=60000,g2=4*P1,A4=2*P1,H3=new Map,C1=new Map;function J1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function R4($){let Z;try{Z=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode($))}catch{return}if(!J1(Z)||typeof Z.kind!=="string"||typeof Z.epoch!=="string"||Z.epoch.length===0||typeof Z.seq!=="number"||!Number.isSafeInteger(Z.seq)||Z.seq<1||Z.provider!==void 0&&typeof Z.provider!=="string")return;return{kind:Z.kind,epoch:Z.epoch,seq:Z.seq,...typeof Z.provider==="string"&&{provider:Z.provider}}}function S4($){return $ instanceof Error&&"code"in $&&typeof $.code==="string"?$.code:void 0}class x2{transport;key;#$=[];#z=!1;#J=new Set;#X=new Map;#H=new L1(async()=>{try{let $=await this.transport.getUsage();if(!J1($)||!Array.isArray($.result)||$.error!==void 0)throw Error("unavailable insula usage");this.#$=$.result.filter((Z)=>J1(Z)&&typeof Z.provider==="string"),this.#z=this.#$.length===$.result.length&&($.completeProviders===void 0||Array.isArray($.completeProviders)&&$.completeProviders.every((Z)=>typeof Z==="string")),this.#J=new Set(this.#z&&Array.isArray($.completeProviders)?$.completeProviders:[]);for(let Z of this.#J)this.#X.delete(Z)}catch{this.#$=[],this.#z=!1,this.#J.clear()}},()=>{});#G=new Z1;#Z="polling";#Y=0;#K=0;#W=new Map;#Q;#U;#M={};#j=0;constructor($,Z){this.transport=$,this.key=Z}refresh($){if(this.#H.running)return this.#H.running;if(this.#Z==="watching")return Promise.resolve();for(let[J,z]of C1)if($-z>=P1)C1.delete(J);let Z=C1.get(this.key);if(Z!==void 0&&$-Z<P1)return Promise.resolve();return C1.set(this.key,$),this.#H.request()}watchMode(){return this.#Z}watch($={}){this.#Y++;let Z=$.provider;if(Z===void 0)this.#K++;else this.#W.set(Z,(this.#W.get(Z)??0)+1);if(this.#Y===1)this.#M=$,this.#q();let J=!1;return()=>{if(J)return;if(J=!0,Z===void 0)this.#K--;else{let z=(this.#W.get(Z)??1)-1;if(z>0)this.#W.set(Z,z);else this.#W.delete(Z)}if(--this.#Y===0)this.#F()}}#F(){if(this.#U)(this.#M.clearTimeoutImpl??clearTimeout)(this.#U);this.#U=void 0;let $=this.#Q;this.#Q=void 0,$?.handle?.stop(),this.#Z="polling"}#V($){this.#U=(this.#M.setTimeoutImpl??setTimeout)(()=>{if(this.#U=void 0,this.#Y>0&&!this.#Q)this.#q()},$),this.#U.unref?.()}#q(){let $=this.transport.watchUsage;if(!$){this.#Z="fallback";return}this.#Z="polling",this.#G.restart();let Z={notices:0};this.#Q=Z;let J;try{J=$.call(this.transport,(z)=>this.#B(Z,z))}catch(z){this.#D(Z,z);return}Z.handle=J,J.closed.then(()=>this.#D(Z,void 0),(z)=>this.#D(Z,z))}#B($,Z){if(this.#Q!==$)return;if($.notices++,$.notices===1)this.#Z="watching";if($.notices===2)this.#j=0;let J=R4(Z);if(!J)this.#G.restart();if(!(J?this.#G.continuous(J):!1)||J?.provider===void 0||this.#K>0||this.#W.has(J.provider))this.#H.request()}#D($,Z){if(this.#Q!==$)return;this.#Q=void 0;let J=S4(Z);if(J==="unknown_method"||J==="usage_watch_limit"){this.#Z="fallback";return}if($.notices>0){let z=Math.min(W3*2**Math.min(this.#j,16),D1);this.#j++,this.#Z="polling",this.#V(z);return}if(this.#Z="fallback",this.#H.request(),Z===void 0||M0(Z)==="unreachable")this.#V(D1)}current($,Z,J){for(let z of this.#$){if(z.provider!==$||typeof z.account!=="string"||z.account.trim()!==Z)continue;if(z.stale!==void 0||z.errorClass!==void 0||!J1(z.usage))continue;let X=typeof z.fetchedAt==="string"?Date.parse(z.fetchedAt):Number.NaN;if(!Number.isFinite(X)||J-X>=g2)continue;return{entry:z,context:{fetchedAt:X,...typeof z.source==="string"&&{source:z.source}}}}return}lookup($,Z,J){if(!this.#z)return{miss:"unreachable"};let z=this.#$.find((Q)=>Q.provider===$&&typeof Q.account==="string"&&Q.account.trim()===Z),X=(z??this.#$.find((Q)=>Q.provider===$&&Q.account===void 0&&Q.errorClass!==void 0))?.errorClass;if(X==="upstream_failed")return{miss:"upstream-failed"};if(X==="credential_absent"||X==="credential_unusable"||X==="credential_rejected")return{miss:"credential"};if(X!==void 0)return{miss:"unreachable"};if(z){let Q=typeof z.fetchedAt==="string"?Date.parse(z.fetchedAt):Number.NaN;if(!J1(z.usage)||!Number.isFinite(Q))return{miss:"unreachable"};let W={entry:z,context:{fetchedAt:Q,...typeof z.source==="string"&&{source:z.source}}};return J>=Q+g2||z.stale!==void 0?{miss:"stale",reading:W}:{reading:W}}if(this.#J.has($))return{miss:"absent"};let G=this.#X.get($)??J;return this.#X.set($,G),{miss:J-G>=A4?"unreachable":"cold"}}}function Y3($,Z){let J=JSON.stringify([f2($.connectionFile),f2(Z)]),z=H3.get(J);if(!z)z={source:new x2($,J),refs:0},H3.set(J,z);z.refs++;let X=!1;return{source:z.source,release(){if(X)return;if(X=!0,--z.refs===0)H3.delete(J)}}}import{ClaustrumCredentialError as qX}from"@cortexkit/claustrum-client";import{appendFileSync as u4,chmodSync as c4,existsSync as j3,renameSync as a2,statSync as p4}from"node:fs";import{open as d4}from"node:fs/promises";import{dirname as l4,resolve as a4}from"node:path";import{randomUUID as m2}from"node:crypto";import{lstat as w2,readFile as u2,rename as b4,unlink as y2}from"node:fs/promises";import{tmpdir as k4}from"node:os";import{dirname as V0,join as T4,resolve as i}from"node:path";var I=process.platform==="win32",h2=new Set;function U3($){if($?.reason==="io-error"){if($.win32Code===2||$.win32Code===3)return"ENOENT";if($.win32Code===80||$.win32Code===183)return"EEXIST"}return $?.code??"ERR_PRIVATE_FILE"}var v2;var c2="native-addon-unavailable";function p2($){return Object.assign(Error("Windows private-files native addon is unavailable",{cause:$}),{code:"ERR_PRIVATE_FILES_UNAVAILABLE",reason:c2})}function E4($,Z){return Z instanceof $.PrivateFilesUnavailableError||Z?.code==="ERR_PRIVATE_FILES_UNAVAILABLE"}async function f4($){try{await $.verifyPrivatePath(T4(k4(),`.common-auth-private-files-probe-${m2()}`),"file")}catch(Z){if(E4($,Z))throw p2(Z)}}function m0(){return v2??=import("@cortexkit/private-files").then(async($)=>{if(I)await f4($);return $},($)=>{throw I?p2($):$}),v2}class u extends Error{path;stage;code;win32Code;reason;published=!1;durabilityConfirmed=!1;fileDurable=!1;attempts=0;elapsedMs=0;orphanPath;constructor($,Z,J){let z=J;super(z?.code==="ERR_PRIVATE_FILES_UNAVAILABLE"?`Private file refused at ${Z}: ${$} (${c2}). The Windows native addon of @cortexkit/private-files could not be loaded, so owner-only access cannot be enforced and nothing was read or written. Reinstall the plugin so the private-files Windows prebuild for this architecture is present; Windows has no safe fallback to permission bits.`:`Private file refused at ${Z}: ${$} (${z?.reason??z?.code??"io-error"}). Keep this file in a folder that only you, the system or administrators can change, such as a folder in your home directory. If other users could read the file before, sign in again to replace the credentials it held. On Windows the file must also be on a local drive that keeps Windows file permissions, such as NTFS.`,{cause:J});this.path=$,this.stage=Z,this.name="PrivateFileError",this.code=U3(z),this.win32Code=z?.win32Code,this.reason=z?.reason}}async function s($,Z,J){try{return await J()}catch(z){if(z instanceof u)throw z;throw new u($,Z,z)}}var g4;async function W0($,Z){$=i($),Z??=g4,await s($,"safe-parent",async()=>{let J=await(await m0()).verifySafeParent($,Z);if(J.ok===!1){if(J.reason==="io-error"||J.reason==="wrong-kind")await w2($);throw new u(J.level??J.path,"safe-parent",{...J,code:"ERR_PRIVATE_FILES_SECURITY"})}})}async function p($,Z,J=!1){if($=i($),Z==="directory")return W0($);await s($,"verify",async()=>{let z=await m0(),X=await z.verifyOwnerOnly($),G=!1;if(!X.ok){let{reason:Q}=X.refusal;if(Q==="io-error")await z.verifyPrivatePath($,Z);if(J&&[z.EXTRA_ACE,z.NOT_PROTECTED,z.NULL_DACL,z.EMPTY_DACL].includes(Q))await W0(V0($)),await z.securePrivatePath($,Z),G=!0;else throw Object.assign(Error("Owner-only verification refused"),{reason:Q,code:"ERR_PRIVATE_FILES_SECURITY"})}if(await z.verifyPrivatePath($,Z),G&&!h2.has($))h2.add($),process.emitWarning(`Private permissions tightened: ${$}. This object may have been readable before; rotate credentials if needed.`,"PrivateFileMigration")})}async function z0($,Z=!1,J){$=i($),await s($,"directory",async()=>{let z=await m0();try{return await w2($),await W0($,J)}catch(G){if(U3(G)!=="ENOENT")throw G}let X=V0($);if(X===$)throw Object.assign(Error("Missing root"),{code:"ENOENT"});await z0(X,!1,J);try{await z.createOwnerOnly($,{kind:"dir"})}catch(G){if(U3(G)!=="EEXIST")throw G}await W0($,J)})}async function e($,Z=!1){if(!I)return u2($,"utf8");return(await x4($,Z)).toString("utf8")}async function x4($,Z=!1){if(!I)return u2($);if($=i($),Z)await W0(V0($)),await p($,"file",!0);return s($,"read",async()=>(await m0()).readOwnerOnly($))}async function w0($,Z){await W0(V0(i($))),await s($,"create",async()=>{await(await m0()).createPrivateFile(i($),Z)})}async function d2($){await W0(V0(i($))),await s($,"directory-create",async()=>{await(await m0()).createOwnerOnly(i($),{kind:"dir"})})}async function K3($,Z,J={}){$=i($),Z=i(Z);let z=J.now??(()=>performance.now()),X=z(),G=J.deadline??1/0,Q,W=[0,10,20,40,80,100],H,U=0;for(let K of W){let B=Math.min(Q??1/0,G);if(z()>=B)break;if(K)await(J.sleep??((P)=>new Promise((C)=>setTimeout(C,P))))(Math.min(K,Math.max(0,B-z())));if(z()>=B)break;let F=z();if(await J.beforeRename?.(),Q!==void 0)Q+=z()-F;if(z()>=G)break;U++;try{return await(J.rename??b4)($,Z),{attempts:U,elapsedMs:z()-X}}catch(P){H??=P;let C=P;if(!(C.win32Code!==void 0?C.win32Code===32||C.win32Code===33:["EBUSY","EPERM","EACCES"].includes(C.code??"")&&!C.reason))break;Q??=z()+500}}let q=new u(Z,"rename",H??Object.assign(Error("Publication deadline expired"),{code:"ETIMEDOUT"}));throw q.attempts=U,q.elapsedMs=z()-X,q}async function u0($,Z,J={}){$=i($),await z0(V0($));try{await p($,"file",!0)}catch(U){if(U.code!=="ENOENT")throw U}let z=i(J.stagePath??`${$}.${m2()}.tmp`);if(V0(z)!==V0($))throw new u($,"stage-directory",{code:"EXDEV"});let X=!1,G=!1,Q={attempts:0,elapsedMs:0},W="stage-create",H=(U)=>{try{J.onOutcome?.({path:$,stage:U?.stage??"published",published:G,fileDurable:G,durabilityConfirmed:!1,attempts:U?.attempts??Q.attempts,elapsedMs:U?.elapsedMs??Q.elapsedMs,...U&&{code:U.code,win32Code:U.win32Code}})}catch{}};try{if(await w0(z,Z),X=!0,W="before-rename",Q=await K3(z,$,J),X=!1,G=!0,W="published-callback",J.onRenamed?.(),W="published-verify",await p($,"file"),J.durable&&J.durability!=="file-only-on-windows")throw new u($,"directory-sync-unsupported",{code:"ENOTSUP"});H()}catch(U){let q=U instanceof u?U:new u($,W,U);if(q.published=G,q.fileDurable=G,G)Object.assign(q,Q);if(X){try{await y2(z)}catch{q.orphanPath=z}X=!1}throw H(q),q}finally{if(X)await y2(z).catch(()=>{})}}var y4=/^(authorization|x-api-key|cookie|set-cookie|refresh|access|token)$/i,h4=/\b(Bearer\s+[\w.-]+|sk-[\w-]+|eyJ[\w.-]+)\b|ckh_[A-Za-z0-9_-]{20,}/g;function v4($){return $ instanceof Error||Object.prototype.toString.call($)==="[object Error]"}function c0($={}){let Z=[h4,...$.extraValuePatterns??[]].map((G)=>new RegExp(G.source,G.flags.includes("g")?G.flags:`${G.flags}g`));function J(G){let Q=G.toLowerCase().replace(/[-_]/g,"");return y4.test(G)||Q.includes("apikey")||Q.endsWith("secret")||Q.endsWith("password")||Q.endsWith("token")&&!Q.endsWith("tokens")||!!$.extraSecretKeys?.(Q)}function z(G){let Q=G,W=[["name",G.name],["message",G.message],["stack",G.stack]];for(let U of["code","status","cause"])if(Q[U]!==void 0)W.push([U,Q[U]]);let H=new Set(W.map(([U])=>U));for(let U of Object.entries(G))if(!H.has(U[0]))W.push(U);return W}function X(G,Q,W,H=0){if(typeof G==="string")return Z.reduce((U,q)=>U.replace(q,"***REDACTED***"),G);if(!G||typeof G!=="object")return G;if(W.has(G))return"[Circular]";W.add(G);try{if(Array.isArray(G))return G.map((K)=>X(K,Q,W,H));let U=v4(G);if(U&&H>=8)return"[Truncated]";let q=U?H+1:H;return Object.fromEntries((U?z(G):Object.entries(G)).map(([K,B])=>[K,Q&&J(K)?"***REDACTED***":X(B,Q,W,q)]))}finally{W.delete(G)}}return{redact:(G)=>X(G,!0,new WeakSet),redactStrings:(G)=>X(G,!1,new WeakSet)}}var l2=c0(),m4=l2.redact,w4=l2.redactStrings;var O1={error:0,warn:1,info:2,debug:3,trace:4},n2=5242880,i2=3;function M3($){try{c4($,384)}catch{}}function s4($){try{if(!(j3($)&&p4($).size>=n2))return;for(let J=i2-1;J>=1;J--)if(j3(`${$}.${J}`)){let z=`${$}.${J+1}`;a2(`${$}.${J}`,z),M3(z)}let Z=`${$}.1`;a2($,Z),M3(Z)}catch{}}async function H0($){let{file:Z,handle:J}=$;if($.file=void 0,$.handle=void 0,Z&&J)await s(Z,"log-close",()=>J.close())}async function s2($,Z){await z0(l4(Z));try{await p(Z,"file",!0)}catch(J){if(J.code!=="ENOENT")throw J;try{await w0(Z,"")}catch(z){if(z.code!=="EEXIST")throw z;await p(Z,"file",!0)}}return $.handle=await s(Z,"log-open",()=>d4(Z,"a")),$.file=Z,$.handle}async function n4($,Z,J){Z=a4(Z);try{if($.file!==Z)await H0($);let z=$.handle??await s2($,Z);if((await s(Z,"log-stat",()=>z.stat())).size>=n2){await H0($);for(let G=i2-1;G>=0;G--){let Q=G===0?Z:`${Z}.${G}`,W=`${Z}.${G+1}`;try{await p(Q,"file",!0)}catch(H){if(H.code==="ENOENT")continue;throw H}try{await p(W,"file",!0)}catch(H){if(H.code!=="ENOENT")throw H}await K3(Q,W),await p(W,"file")}z=await s2($,Z)}await s(Z,"log-append",()=>z.appendFile(J,"utf8"))}catch(z){throw await H0($).catch(()=>{}),z}}function i4($){try{return` ${JSON.stringify($)}`}catch{return" [unserializable]"}}function r4($){let Z,J,z,X=c0(),G,Q=[],W,H=Promise.resolve(),U,q={};function K(Y){let j=H.then(Y);return H=j.catch((M)=>{U=M}),j}function B(Y){if(I&&Y.file!==Z)K(()=>H0(q)).catch(()=>{});Z=Y.file,J=Y.level,X=c0(Y),G=Y.captureSink}function F(Y){if(Y===void 0||Y in O1)z=Y}function P(){if(Z===void 0)return;return(typeof Z==="function"?Z():Z)||void 0}function C(){if(z)return z;let Y=typeof J==="function"?J():J;if(Y&&Y in O1)return Y;return"info"}function D(Y=!0){if(W)clearTimeout(W),W=void 0;if(!Q.length){if(I)return K(async()=>{if(Y)await H0(q);if(U)throw U});return}let j;try{j=P()}catch{if(Q=[],I&&Y)return K(()=>H0(q));return}let M=Q.join("");if(Q=[],!j){if(I&&Y)return K(()=>H0(q));return}if(I)return K(async()=>{try{await n4(q,j,M)}finally{if(Y)await H0(q)}});try{if(s4(j),j3(j))M3(j);u4(j,M,{encoding:"utf8",mode:384})}catch{}}function R(){if(!W)W=setTimeout(()=>{W=void 0;let Y=D(!1);if(Y instanceof Promise)Y.catch(()=>{})},500)}function S(Y,j,M,b){if(Z===void 0&&G===void 0)return;try{if(O1[j]>O1[C()])return;let x=X.redactStrings(M),k;try{k=X.redact(b)}catch{k="[unserializable]"}let m=`[${new Date().toISOString()}] ${j.toUpperCase()} [${Y}] ${x}`+(b===void 0?"":i4(k))+`
3
+ `;try{G?.({channel:Y,level:j,message:x,data:k})}catch{}if(Z===void 0)return;if(Q.push(m),Q.length>=50){let n=D(!1);if(n instanceof Promise)n.catch(()=>{})}else R()}catch{}}function h(Y){return{error:(j,M)=>S(Y,"error",j,M),warn:(j,M)=>S(Y,"warn",j,M),info:(j,M)=>S(Y,"info",j,M),debug:(j,M)=>S(Y,"debug",j,M),trace:(j,M)=>S(Y,"trace",j,M)}}function L(){if(I)K(()=>H0(q)).catch(()=>{});if(U=void 0,Q=[],W)clearTimeout(W),W=void 0;Z=void 0,J=void 0,z=void 0,X=c0(),G=void 0}if($)B($);return{configure:B,createLogger:h,setLogLevel:F,flushLogs:D,reset:L}}var o4=r4();function O0($){return o4.createLogger($)}function V3($){let Z=new AbortController,J=[],z=!1,X=()=>{if(z)return;z=!0;for(let{source:W,listener:H}of J)W.removeEventListener("abort",H);J.length=0},G=(W)=>{if(z||Z.signal.aborted)return;Z.abort(W),X()},Q=$.find((W)=>W.aborted);if(Q)return Z.abort(Q.reason),{signal:Z.signal,dispose:X};for(let W of $){if(Z.signal.aborted)break;let H=()=>G(W.reason);if(J.push({source:W,listener:H}),W.addEventListener("abort",H,{once:!0}),W.aborted)G(W.reason)}return{signal:Z.signal,dispose:X}}import{ClaustrumCredentialError as O$}from"@cortexkit/claustrum-client";import{createHash as G7,randomBytes as Q7,randomUUID as W7}from"node:crypto";import{constants as H$}from"node:fs";import{chmod as H7,mkdir as Y7,open as q$,readFile as L3,realpath as U7,rename as q7,stat as K$,unlink as C3}from"node:fs/promises";import{basename as K7,dirname as R0,extname as SJ,isAbsolute as bJ,join as j7,resolve as kJ}from"node:path";import{ClaustrumCredentialError as M7,ClaustrumClient as EJ,writeEnrollmentTokenFile as V7}from"@cortexkit/claustrum-client";import{randomUUID as r2}from"node:crypto";import{mkdir as t4,open as o2,rename as e4,rm as $7}from"node:fs/promises";import{dirname as t2}from"node:path";class _1 extends Error{constructor($){super("file or directory sync failed",{cause:$});this.name="AtomicSyncError"}}async function z1($,Z,J={}){await e2($,Z,J)}async function e2($,Z,J,z){if(I)return u0($,J.serialize?J.serialize(Z):`${JSON.stringify(Z,null,2)}
4
+ `,{beforeRename:J.beforeRename,stagePath:`${$}.${(J.stageName??r2)()}.tmp`,onRenamed:z,durable:J.durable,durability:J.durability,onOutcome:J.onOutcome});await t4(t2($),{recursive:!0});let X=`${$}.${(J.stageName??r2)()}.tmp`,G,Q=!1;try{if(G=await o2(X,"wx",384),Q=!0,await G.writeFile(J.serialize?J.serialize(Z):`${JSON.stringify(Z,null,2)}
5
+ `,"utf8"),await G.chmod(384),J.durable)try{await G.sync()}catch(W){throw new _1(W)}if(await G.close(),G=void 0,await J.beforeRename?.(),await e4(X,$),Q=!1,z?.(),J.durable){let W=await o2(t2($),"r");try{await W.sync()}catch(H){throw new _1(H)}finally{await W.close()}}}finally{if(await G?.close().catch(()=>{}),Q)await $7(X,{force:!0}).catch(()=>{})}}var Z7=Object.freeze({sidebar:Object.freeze({name:"sidebar-write",ttlMs:1e4,timeoutMs:15000,renew:!0}),preferences:Object.freeze({name:"preferences",ttlMs:1e4,timeoutMs:2000,renew:!0})});import{randomUUID as I1}from"node:crypto";import{mkdir as $$,open as Q$,readFile as Z$,rename as J$,rm as A1,stat as z$}from"node:fs/promises";import{dirname as D3,join as X$}from"node:path";function F3($,Z){return`${$}.${Z}.lock`}class _0 extends Error{details;constructor($){super(`Timed out acquiring ${$.name} lock for ${$.target}`);this.name="LockContentionError",this.details=$}}class I0 extends Error{details;constructor($){super(`Lost ${$.name} lock for ${$.target}`);this.name="LockOwnershipError",this.details=$}}async function B3($,Z,J){let z=performance.now();for(;;){Z.signal?.throwIfAborted();let X=await Y0({path:$,name:Z.name,ttlMs:Z.ttlMs,renew:Z.renew??!1,...Z.onStep?{onStep:Z.onStep}:{},...Z.onRenewalTimer?{onRenewalTimer:Z.onRenewalTimer}:{}});if(X)try{return Z.signal?.throwIfAborted(),await J(X)}finally{await X.release()}let G=Z.timeoutMs-(performance.now()-z);if(G<=0)throw new _0({target:$,name:Z.name,timeoutMs:Z.timeoutMs});await new Promise((Q)=>setTimeout(Q,Math.min(25,Math.ceil(G))))}}async function G$($,Z){let J=await Q$($,"wx",384);try{await J.writeFile(Z,"utf8")}finally{await J.close()}}var J7=globalThis.setTimeout.bind(globalThis),z7=globalThis.clearTimeout.bind(globalThis);function W$($){let Z=$?.code;return Z==="ENOENT"||!I&&(Z==="EINVAL"||Z==="ENOTDIR")}function Y0($){return X7({...$,now:Date.now})}async function X7($){let Z=F3($.path,$.name),J=X$(Z,"owner.json"),z=I1(),X=$.now??Date.now,G=null,Q=!1,W=!1,H,U,q=new Promise((V)=>{U=V});function K(V){try{let N=$.onRenewalTimer?.(V);if(N&&(typeof N==="object"||typeof N==="function")&&"then"in N&&typeof N.then==="function")Promise.resolve(N).catch(()=>{})}catch{}}function B(){if(!G)return;z7(G),G=null,K("cancelled")}function F(V,N){if(H||Q)return;H=Object.freeze({reason:V,expectedOwnerId:z,...typeof N?.ownerId==="string"?{observedOwnerId:N.ownerId}:{},...typeof N?.expiresAt==="number"?{observedExpiresAt:N.expiresAt}:{}}),B(),U(H)}let P,C=null,D=`${Z}.evicting`,R=X$(D,"owner.json"),S=I1(),h=5000,L=8;async function Y(){if(I)try{return JSON.parse(await e(Z,!0))}catch(V){if(V.code!=="EISDIR"&&V.reason!=="wrong-kind")throw V;return await p(Z,"directory",!0),JSON.parse(await e(J,!0))}try{return JSON.parse(await Z$(Z,"utf8"))}catch(V){if(V.code!=="EISDIR")throw V;return JSON.parse(await Z$(J,"utf8"))}}async function j(){if(I){let y=await Y(),w=Number(y?.expiresAt)-X();await u0(Z,`${JSON.stringify({ownerId:z,expiresAt:X()+$.ttlMs})}
6
+ `,{deadline:performance.now()+Math.max(0,w),beforeRename:async()=>{let B1=await Y();if(B1?.ownerId!==z||!(Number(B1?.expiresAt)>X())||!await v())throw new I0({target:$.path,name:$.name})}});return}let V=`${Z}.${I1()}.tmp`,N,O=!1;try{N=await Q$(V,"wx",384),O=!0,await N.writeFile(`${JSON.stringify({ownerId:z,expiresAt:X()+$.ttlMs})}
7
+ `,"utf8"),await N.chmod(384),await N.close(),N=void 0;let y=await Y();if(y?.ownerId!==z||!(Number(y?.expiresAt)>X())||!await v())throw new I0({target:$.path,name:$.name});await J$(V,Z),O=!1}finally{if(await N?.close().catch(()=>{}),O)await A1(V,{force:!0}).catch(()=>{})}}async function M(){let V=`${JSON.stringify({ownerId:z,expiresAt:X()+$.ttlMs})}
8
+ `;if(I)await w0(Z,V);else await G$(Z,V)}async function b(V){let N=V.code;if(N==="EEXIST"){if(I)await Y();return!0}if(N==="EISDIR"){if(I)await p(Z,"directory",!0),await e(J,!0);return!0}return!1}async function x(){if(I)await z0(D3(Z));try{return await M(),!0}catch(V){let N=V.code;if(await b(V))return!1;if(N==="ENOENT"){if(I)await z0(D3(Z));else await $$(D3(Z),{recursive:!0});try{return await M(),!0}catch(O){if(await b(O))return!1;throw O}}throw V}}async function k(){await new Promise((V)=>setTimeout(V,Math.floor(Math.random()*4)))}async function m(V=!0){if(V&&$.onStep)await $.onStep("lock-read-ready");let N;try{N=await Y()}catch(y){if(I&&y.code!=="ENOENT")throw y}let O=Number(N?.expiresAt);if(Number.isFinite(O)&&O>X())return{status:"live"};if(typeof N?.ownerId==="string"&&Number.isFinite(O))return{status:"stale",identity:{kind:"owner",ownerId:N.ownerId,expiresAt:O}};try{let y=await z$(Z),w=Number.isFinite(O)?O:y.mtimeMs+$.ttlMs;if(w>X())return{status:"live"};return{status:"stale",identity:{kind:"stat",dev:y.dev,ino:y.ino,mtimeMs:y.mtimeMs,expiresAt:w}}}catch(y){if(y.code==="ENOENT"){if($.onStep)await $.onStep("lock-missing");return{status:"missing"}}throw y}}function n(V,N){if(N.status!=="stale")return!1;let O=N.identity;if(V.kind==="owner"&&O.kind==="owner")return V.ownerId===O.ownerId&&V.expiresAt===O.expiresAt;return V.kind==="stat"&&O.kind==="stat"&&V.dev===O.dev&&V.ino===O.ino&&V.mtimeMs===O.mtimeMs&&V.expiresAt===O.expiresAt}async function v(){try{return JSON.parse(await e(R,I))?.ownerId===S}catch(V){if(I&&V.code!=="ENOENT")throw V;return!1}}async function c(V){if(I)await s(V,"remove",()=>A1(V,{recursive:!0,force:!0}));else await A1(V,{recursive:!0,force:!0}).catch(()=>{})}async function t(){if(await v())await c(D)}async function V1(){if(I)await d2(D);else await $$(D);try{let V=`${JSON.stringify({ownerId:S,createdAt:X()})}
9
+ `;if(I)await w0(R,V);else await G$(R,V)}catch(V){if(W$(V))return!1;throw await t(),V}if($.onStep)await $.onStep("eviction-marker-acquired");return!0}async function v0(){let V;try{V=await z$(D)}catch(O){if(O.code==="ENOENT")return"missing";throw O}if(I)await p(D,"directory",!0);if(V.mtimeMs+h>X())return"fresh";if($.onStep)await $.onStep("stale-marker-stat");let N=`${D}.${I1()}`;try{await J$(D,N)}catch(O){if(O.code==="ENOENT")return"missing";throw O}if($.onStep)await $.onStep("stale-marker-claimed");return await c(N),"recovered"}async function F1(V){try{if(!await V1())return!1}catch(N){if(N.code==="EEXIST"){if(I){await p(D,"directory",!0);try{await e(R,!0)}catch(O){if(O.code!=="ENOENT")throw O}}return!1}throw N}try{await V()}finally{await t()}return!0}async function T(){for(let V=0;V<L;V++){if($.onStep)await $.onStep("relinquish-read");let N;try{N=await Y()}catch(O){if(I)throw O;return}if(N?.ownerId!==z)return;try{await A1(Z,{recursive:!0,force:!0});return}catch(O){if(I)throw O;await k()}}}function Q0(){if(!$.renew||Q||H)return;let V=$.renewIntervalMs??Math.max(1000,Math.floor($.ttlMs/3));if(G=J7(()=>{G=null;let N=(async()=>{let O=!Q;try{if(!await F1(async()=>{let w=await Y(),B1=X();if(Q||H){O=!1;return}if(w?.ownerId!==z){F("taken-over",w),O=!1;return}if(!(Number(w?.expiresAt)>B1)){F("expired",w),O=!1;return}if($.onStep)await $.onStep("renewal-owner-confirmed");if(Q||H){O=!1;return}if(!await v())return;if($.onStep)await $.onStep("renewal-write-fenced");if(Q||H){O=!1;return}if(!await v())return;if($.onStep)await $.onStep("renewal-write-ready");if(Q||H){O=!1;return}if(await j(),$.onStep)await $.onStep("renewal-write-finished");if(!await v()){F("marker-lost"),O=!1,await T();return}})&&$.onStep)await $.onStep("renewal-marker-unavailable")}catch(y){if(I&&y instanceof u)P=y,F("renewal-failed"),O=!1;try{let w=await Y();if(w?.ownerId!==z)F("taken-over",w);else if(!(Number(w?.expiresAt)>X()))F("expired",w)}catch{F("renewal-failed")}}finally{if($.onStep)try{await $.onStep("renewal-finished")}catch{}if(O&&!Q&&!H)Q0()}})();C=N,N.finally(()=>{if(C===N)C=null})},V),"unref"in G)G.unref();K("scheduled")}function E2(){try{let V=$.onContended?.();if(V&&(typeof V==="object"||typeof V==="function")&&"then"in V&&typeof V.then==="function")Promise.resolve(V).catch(()=>{})}catch{}return null}let C0=await x();if(!C0)for(let V=0;V<L;V++){if(C0=await x(),C0)break;let N=await m();if(N.status==="live")return E2();if(N.status==="missing")continue;if($.onStep)await $.onStep("stale-lock-observed");try{if(!await V1()){await k();continue}}catch(O){if(O.code!=="EEXIST")throw O;if(await v0()==="fresh")return null;await k();continue}try{let O=await m();if(O.status==="live")return E2();if(!n(N.identity,O))continue;if(!await v())return null;if($.onStep)await $.onStep("stale-lock-confirmed");if(!await v())return null;let y=await m(!1);if(!n(N.identity,y))continue;if(await c(Z),!await v())return null;if($.onStep)await $.onStep("stale-lock-removed");if(C0=await x(),!C0)return null;if($.onStep)await $.onStep("stale-lock-recreated");if(!await v())return await T(),C0=!1,null;break}finally{await t()}}if(!C0)return null;return Q0(),{ownerId:z,whenLost:()=>q,hasLost:()=>H!==void 0,assertOwned:async()=>{if(P)throw P;let V;try{let N=await Y();if(V=N,!Q&&!H&&N?.ownerId===z&&Number(N?.expiresAt)>X())return;F(N?.ownerId!==z?"taken-over":"expired",N)}catch(N){if(F("unreadable"),I&&N instanceof u)throw N}throw new I0({target:$.path,name:$.name,expectedOwnerId:z,...typeof V?.ownerId==="string"?{observedOwnerId:V.ownerId}:{},...typeof V?.expiresAt==="number"?{observedExpiresAt:V.expiresAt}:{}})},release:async()=>{if(I&&W)return;Q=!0,B(),await C;for(let V=0;V<L;V++){try{let N=!1;if(await F1(async()=>{let y;try{y=await Y()}catch(w){if(I&&w.code==="ENOENT"){N=!0;return}throw w}if(y?.ownerId!==z){N=!0;return}if($.onStep)await $.onStep("release-owner-confirmed");if(!await v())return;await c(Z),N=!0})){if(I&&!N)throw new u(Z,"release-not-confirmed",{code:"EIO"});W=N;return}await v0()}catch(N){if(I)throw N;return}await k()}if(I)throw new u(Z,"release-not-confirmed",{code:"ETIMEDOUT"})}}}var F7=1,S1=16384,j$=30000,P3=/^[0-9a-f]{64}$/,M$="unknown_method",V$=new Set([M$,"invalid_params","pending_exists","not_found","already_consumed","superseded","stale_generation"]),F$=new Set(["pending_queue_full"]);function N3($){if(!($ instanceof M7))return;if(V$.has($.code))return{code:$.code,disposition:"terminal"};if(F$.has($.code))return{code:$.code,disposition:"retry"};return{code:$.code,disposition:$.action==="retry"?"retry":"terminal"}}function B$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function R1($){return typeof $==="number"&&Number.isSafeInteger($)&&$>=0}function D$($){return typeof $==="number"&&Number.isSafeInteger($)&&$>=1}function X1(){return new _("invalid-state","invalid Claustrum enrollment state")}function O3($){if(!B$($)||$.version!==F7||typeof $.proposedName!=="string"||$.proposedName.length===0)throw X1();if($.phase==="pending"){if(!P3.test(String($.requestSecret??""))||$.requestId!==void 0&&(typeof $.requestId!=="string"||$.requestId.length===0)||!R1($.createdAt)||!R1($.updatedAt))throw X1();return{version:1,phase:"pending",proposedName:$.proposedName,requestSecret:$.requestSecret,...$.requestId!==void 0&&{requestId:$.requestId},createdAt:$.createdAt,updatedAt:$.updatedAt}}if($.phase==="approved"){if($.approvedName!==void 0&&(typeof $.approvedName!=="string"||$.approvedName.length===0)||!D$($.tokenGeneration)||!R1($.updatedAt))throw X1();return{version:1,phase:"approved",proposedName:$.proposedName,...$.approvedName!==void 0&&{approvedName:$.approvedName},tokenGeneration:$.tokenGeneration,updatedAt:$.updatedAt}}if($.phase==="denied"||$.phase==="blocked"){if($.errorCode!==void 0&&typeof $.errorCode!=="string"||!R1($.updatedAt))throw X1();return{version:1,phase:$.phase,proposedName:$.proposedName,...$.errorCode!==void 0&&{errorCode:$.errorCode},updatedAt:$.updatedAt}}throw X1()}function _3($){if(!B$($)||!P3.test(String($.token??""))||!D$($.token_generation))throw new _("invalid-token","invalid Claustrum enrollment token file");return{token:$.token,token_generation:$.token_generation}}function B7($){if(!$.isFile())throw new _("unsafe-file","Claustrum enrollment file must be a regular file");if(($.mode&63)!==0)throw new _("unsafe-file","Claustrum enrollment file must be owner-only");let Z=process.geteuid?.();if(Z!==void 0&&$.uid!==Z)throw new _("unsafe-file","Claustrum enrollment file must be owned by the current user")}function Y$($){try{return JSON.parse($)}catch{throw new _("invalid-state","Claustrum enrollment file is not valid JSON")}}async function S0($){if(I)try{await z0(R0($));let J=await e($,!0);if(Buffer.byteLength(J)>S1)throw new _("unsafe-file","Claustrum enrollment file is too large");return Y$(J)}catch(J){if(J.code==="ENOENT")return;throw J}let Z;try{Z=await q$($,H$.O_RDONLY|H$.O_NOFOLLOW)}catch(J){if(J.code==="ENOENT")return;throw new _("unsafe-file","Claustrum enrollment file could not be opened safely")}try{B7(await Z.stat());let J=Buffer.alloc(S1+1),{bytesRead:z}=await Z.read(J,0,J.byteLength,0);if(z>S1)throw new _("unsafe-file","Claustrum enrollment file is too large");return Y$(J.subarray(0,z).toString("utf8"))}finally{await Z.close()}}function U$($,Z){let J=[];for(let z of $.split(`
10
+ `)){if(z.trim()===""||z.startsWith("#"))continue;let X=z.split(":");if(X.length!==Z||!/^[^\s:,]+$/.test(X[0]??"")||!/^\d+$/.test(X[2]??"")||!Number.isSafeInteger(Number(X[2]))||Z===7&&(!/^\d+$/.test(X[3]??"")||!Number.isSafeInteger(Number(X[3])))||Z===4&&X[3]!==""&&!/^[^\s:,]+(?:,[^\s:,]+)*$/.test(X[3]??""))return;J.push(X)}return J}async function D7($,Z,J){try{let[z,X]=await Promise.all([L3(J.passwdPath??"/etc/passwd","utf8"),L3(J.groupPath??"/etc/group","utf8")]),G=U$(z,7),Q=U$(X,4);if(!G||!Q)return!1;let W=G.filter((K)=>Number(K[2])===$),H=Q.filter((K)=>Number(K[2])===Z);if(W.length!==1||H.length!==1)return!1;let U=W[0]?.[0],q=H[0]?.[3]??"";return(q===""||q.split(",").every((K)=>K===U))&&!G.some((K)=>Number(K[2])!==$&&Number(K[3])===Z)}catch{return!1}}function L$($){if(!$.passwdPath&&!$.groupPath)return;return{fs:{readFile:(Z)=>L3(Z==="/etc/passwd"?$.passwdPath??Z:Z==="/etc/group"?$.groupPath??Z:Z)}}}async function N$($,Z={}){if(!I){let J=process.geteuid?.();if(J===void 0)return;let z=process.getegid?.(),X;try{X=await U7($)}catch{return}let G;for(;;){let Q=await K$(X).catch(()=>{return});if(Q&&(Q.mode&18)!==0&&(Q.mode&512)===0){if(G===void 0)G=z!==void 0&&await D7(J,z,Z);if((Q.mode&2)!==0||Q.uid!==J||Q.gid!==z||!G)throw new _("unsafe-file",`Claustrum enrollment path has a writable ancestor: ${X}. Another user could replace it. Run: chmod g-w,o-w ${X}`)}let W=R0(X);if(W===X)return;X=W}}try{await W0($,L$(Z))}catch(J){if(!(J instanceof u))throw J;throw new _("unsafe-file",`Claustrum enrollment parent refused: ${J.path} (${J.reason??J.code}). Use a folder that other users cannot write or replace.`)}}async function b1($,Z={}){if(I){await z0($,!1,L$(Z));return}await Y7($,{recursive:!0,mode:448});let J=await K$($),z=process.geteuid?.();if(z!==void 0&&J.uid!==z)throw new _("unsafe-file","Claustrum enrollment directory must be owned by the current user");if((J.mode&63)!==0)await H7($,448)}async function A0($,Z,J={}){let z=R0($);await b1(z,J),await N$(z,J);let X=`${JSON.stringify(Z)}
11
+ `;if(Buffer.byteLength(X)>S1)throw new _("invalid-state","Claustrum enrollment state is too large");if(I)return u0($,X);let G=j7(z,`.${K7($)}.${process.pid}.${W7()}.tmp`),Q,W=!1;try{Q=await q$(G,"wx",384),W=!0,await Q.writeFile(X,"utf8"),await Q.chmod(384),await Q.sync(),await Q.close(),Q=void 0,await q7(G,$),W=!1}finally{if(await Q?.close().catch(()=>{}),W)await C3(G).catch(()=>{})}}async function k1($,Z){let J=await S0($.tokenPath),z=J===void 0?void 0:_3(J),X=await S0($.statePath),G=X===void 0?void 0:O3(X);if(z)return{state:"approved",proposedName:G?.proposedName??Z,...G?.phase==="approved"&&G.approvedName!==void 0&&{approvedName:G.approvedName},tokenGeneration:z.token_generation};if(!G)return{state:"idle"};if(G.phase==="approved")return{state:"blocked",proposedName:G.proposedName,code:"missing_token"};return F0(G)}async function B0($){let Z=await S0($);if(Z===void 0)throw new _("not-enrolled","Claustrum enrollment is not configured");return _3(Z)}function F0($){if($.phase==="pending")return{state:"pending",proposedName:$.proposedName,...$.requestId!==void 0&&{requestId:$.requestId}};if($.phase==="approved")return{state:"approved",proposedName:$.proposedName,...$.approvedName!==void 0&&{approvedName:$.approvedName},tokenGeneration:$.tokenGeneration};if($.phase==="denied")return{state:"denied",proposedName:$.proposedName};return{state:"blocked",proposedName:$.proposedName,code:$.errorCode??"unknown"}}function C$(){return new _("wrong-consumer","Claustrum enrollment state belongs to a different consumer")}class I3{#$;#z;#J;#X;#H;#G;#Z;constructor($){this.#Z=$.ancestorOptions??{},this.#$=$.client,this.#z=$.paths,this.#J=$.proposedName,this.#X=$.now??Date.now,this.#H=$.mintSecret??(()=>Q7(32).toString("hex")),this.#G=$.writeTokenFile??V7}async status(){return k1(this.#z,this.#J)}async resetTerminal(){return P$(this.#z,this.#J)}async#Y($,Z){let J={version:1,phase:"blocked",proposedName:$.proposedName,errorCode:Z,updatedAt:this.#X()};return await A0(this.#z.statePath,J,this.#Z),F0(J)}async reconcile(){await b1(R0(this.#z.statePath),this.#Z);let $=await Y0({name:"ceremony",path:this.#z.statePath,ttlMs:j$,renew:!0});if(!$)return{state:"busy"};try{let Z=await S0(this.#z.tokenPath),J=Z===void 0?void 0:_3(Z),z=await S0(this.#z.statePath),X=z===void 0?void 0:O3(z);if(X&&X.proposedName!==this.#J)throw C$();if(J){if(!X||X.phase==="pending"){let Q={version:1,phase:"approved",proposedName:X?.proposedName??this.#J,tokenGeneration:J.token_generation,updatedAt:this.#X()};await A0(this.#z.statePath,Q,this.#Z),X=Q}return{state:"approved",proposedName:X.proposedName,...X.phase==="approved"&&X.approvedName!==void 0&&{approvedName:X.approvedName},tokenGeneration:J.token_generation}}if(X?.phase==="approved"){let Q={version:1,phase:"blocked",proposedName:X.proposedName,errorCode:"missing_token",updatedAt:this.#X()};return await A0(this.#z.statePath,Q,this.#Z),F0(Q)}if(X&&X.phase!=="pending")return F0(X);if(!X){let Q=this.#X();if(X={version:1,phase:"pending",proposedName:this.#J,requestSecret:this.#H(),createdAt:Q,updatedAt:Q},!P3.test(X.requestSecret))throw new _("invalid-state","invalid minted Claustrum enrollment secret");await A0(this.#z.statePath,X,this.#Z)}if(!X.requestId)try{let Q=G7("sha256").update(Buffer.from(X.requestSecret,"hex")).digest("hex"),W=await this.#$.enrollPropose({name:X.proposedName,requestSecretHash:Q});X={...X,requestId:W.requestId,updatedAt:this.#X()},await A0(this.#z.statePath,X,this.#Z)}catch(Q){let W=N3(Q);if(!W)throw Q;if(W.disposition==="retry")return{state:"pending",proposedName:X.proposedName,retryCode:W.code};if(W.code===M$)return await $.assertOwned(),await C3(this.#z.statePath).catch((H)=>{if(H.code!=="ENOENT")throw H}),{state:"unavailable",proposedName:X.proposedName,code:W.code};return this.#Y(X,W.code)}let G=X.requestId;if(!G)return F0(X);try{let Q=await this.#$.enrollPoll({requestId:G,requestSecret:X.requestSecret});if(Q.status==="pending")return F0(X);if(Q.status==="denied"){let H={version:1,phase:"denied",proposedName:X.proposedName,updatedAt:this.#X()};return await A0(this.#z.statePath,H,this.#Z),F0(H)}await b1(R0(this.#z.tokenPath),this.#Z),await N$(R0(this.#z.tokenPath),this.#Z),await this.#G(this.#z.tokenPath,{token:Q.token,token_generation:Q.tokenGeneration});let W={version:1,phase:"approved",proposedName:X.proposedName,approvedName:Q.name,tokenGeneration:Q.tokenGeneration,updatedAt:this.#X()};return await A0(this.#z.statePath,W,this.#Z),F0(W)}catch(Q){let W=N3(Q);if(!W)throw Q;if(W.disposition==="retry")return{state:"pending",proposedName:X.proposedName,requestId:G,retryCode:W.code};return this.#Y(X,W.code)}}finally{await $.release()}}}async function P$($,Z){await b1(R0($.statePath));let J=await Y0({name:"ceremony",path:$.statePath,ttlMs:j$,renew:!0});if(!J)return"busy";try{if(await S0($.tokenPath)!==void 0)return"refused-approved";let z=await S0($.statePath);if(z===void 0)return"idle";let X=O3(z);if(X.proposedName!==Z)throw C$();if(X.phase==="pending")return"refused-pending";return await J.assertOwned(),await C3($.statePath),"reset"}finally{await J.release()}}var A3="claustrum-tombstone:v1:";function _$($,Z){return Z!==void 0&&!Z.fromKeptReceipt&&!$.fromKeptReceipt&&Z.credentialId===$.credentialId&&Z.accountIdentity===$.accountIdentity&&Z.recordVersion!==$.recordVersion}function L7($,Z){if(Z===void 0)return"reauthorize-failed";if(Z.credentialId!==$.credentialId)return"credential-changed";if(Z.accountIdentity!==$.accountIdentity)return"account-changed";if(Z.recordVersion===$.recordVersion)return"version-unchanged";return"rotated"}var S3=O0("claustrum");function k3($,Z,J,z=S3){let X=_$(Z,J);return z.debug("scoped 401 re-authorized",{site:$,credentialId:Z.credentialId,servedVersion:Z.recordVersion,currentVersion:J?.recordVersion??null,retry:X,reason:L7(Z,J)}),X}var b3=300000,I$=60000;function R3(){return new _("invalid-material","Claustrum returned invalid credential material")}function N7($){let Z=$.trim();if(Z.startsWith("{")){let J;try{J=JSON.parse(Z)}catch{throw R3()}if(!J||typeof J!=="object")throw R3();let z=J,X=z.access_token??z.access;Z=typeof X==="string"?X:""}if(!/^[\x21-\x7e]+$/.test(Z)||Z.startsWith(A3))throw R3();return Z}function C7($,Z){if(!$.operations.includes("read"))return;if(!$.categories.includes(Z.category))return;if($.credentialType==="oauth")return $.refreshAdapter===Z.refreshAdapter?"oauth":void 0;if($.credentialType==="api_key"&&Z.apiKeys)return $.refreshAdapter===void 0?"api_key":void 0;return}function P7($){let{grants:Z,grantTuples:J}=$;if(Z===void 0||J===void 0)return;return Object.freeze({grants:Z,tuples:Object.freeze(J.map(({selectorKind:z,selector:X,operation:G})=>Object.freeze({selectorKind:z,selector:X,operation:G})))})}class T1{#$;#z;#J;#X;#H;#G;#Z;#Y=new WeakMap;#K=new WeakMap;#W=new Map;#Q=new WeakMap;#U;#M;#j=!1;#F=new P0;#V;#q=!1;#B=-1/0;#D=2000;#L=!1;#C;#P=new Set;constructor($){let Z=$.tokenPath;if($.readToken)this.#z=$.readToken;else if(Z)this.#z=()=>B0(Z);else throw new _("not-enrolled","Claustrum enrollment token path is required");this.#$=$.client,this.#X=$.family,this.#H=$.parseIdentity,this.#G=$.requireAssertion??!1,this.#J=$.now??Date.now,this.#Z=$.logger??S3,this.#U=$.setTimeoutImpl??setTimeout,this.#M=$.clearTimeoutImpl??clearTimeout}transportLost($){if(this.#L||this.#j)return;this.#j=!0,this.#F=$ instanceof O$?$:new P0,this.#Z.warn("serving kept vault receipt",{reason:"unreachable"}),this.#O()}reachable(){if(this.#L||!this.#j)return;if(this.#j=!1,this.#V)this.#M(this.#V);this.#V=void 0,this.#D=2000;for(let $ of this.#W.values())$.since=null;(this.#Z.info??S3.info)("vault receipt serving resumed",{reason:"reachable"})}#O(){if(this.#L||!this.#j||this.#V||this.#q)return;this.#V=this.#U(()=>{this.#V=void 0,this.#_(!0)},this.#D),this.#V.unref?.()}#_($=!1){if(this.#L||!this.#j||this.#q)return;if(this.#J()-this.#B<1000){this.#O();return}this.#B=this.#J(),this.#q=!0,this.#R().catch(()=>{if($&&this.#j)this.#D=Math.min(this.#D*2,30000)}).finally(()=>{this.#q=!1,this.#O()})}#N($){if(this.#L)throw new _("closed","Claustrum scoped custody is closed");$?.throwIfAborted()}async#I($){this.#N($);let Z=await this.#z();if(this.#N($),!/^[0-9a-f]{64}$/.test(Z.token)||!Number.isSafeInteger(Z.token_generation)||Z.token_generation<1)throw new _("invalid-token","Invalid Claustrum enrollment token");return Z.token}async#A($,Z){this.#N(Z);let J,z;try{let X=$();J=Z?await Promise.race([X,new Promise((G,Q)=>{let W=()=>Q(Z.reason);if(Z.addEventListener("abort",W,{once:!0}),z=()=>Z.removeEventListener("abort",W),Z.aborted)W()})]):await X}catch(X){if(this.#N(Z),M0(X)==="unreachable")this.transportLost(X);else this.reachable();if(X instanceof O$)throw X;if(M0(X)==="unreachable")throw new P0;throw new _("unavailable","Claustrum scoped operation unavailable")}finally{z?.()}return this.#N(Z),this.reachable(),J}async discover($){let Z=await this.#R($);return this.#C=Z.view,Z}async#R($){let Z,J;try{J=await this.#I($)}catch(H){throw this.#W.clear(),H}try{Z=await this.#A(()=>this.#$.listScoped(J),$)}catch(H){throw this.listFailed(H),H}let z=[],X=[],G=new Map;for(let H of Z.rows){let U=C7(H,this.#X);if(!U)continue;X.push({row:H,type:U}),G.set(H.id,(G.get(H.id)??0)+1)}let Q=[];for(let{row:H,type:U}of X){let q;if(!H.id.trim())q="empty credential id";else if((G.get(H.id)??0)>1)q="duplicate credential id";else if(H.accountId!==void 0&&!H.accountId.trim())q="blank account identity";else if(!H.state.trim())q="empty state";if(q){z.push({...H.id.trim()&&{credentialId:H.id},reason:q});continue}Q.push(Object.freeze({credentialId:H.id,credentialType:U,...H.accountId!==void 0&&{accountIdentity:H.accountId},state:H.state,...H.email!==void 0&&{email:H.email},...H.orgName!==void 0&&{orgName:H.orgName}}))}for(let H of z)this.#Z.warn("skipped malformed vault record",H);let W=P7(Z);return{view:Z.view,credentials:Object.freeze(Q),skipped:Object.freeze(z),...W&&{grantReach:W}}}listFailed($){if(M0($)==="unreachable")this.transportLost($);else this.reachable(),this.#W.clear()}forget($){this.#W.delete($)}retain($){let Z=new Map($.map((J)=>[J.credentialId,J]));for(let[J,z]of this.#W){let X=Z.get(J);if(!X?.enabled||X.state!=="active"||X.credentialType!==z.attempt.credentialType||X.accountIdentity!==z.attempt.expectedAccountIdentity)this.forget(J)}}keptReceiptState(){let $=null;for(let[Z,J]of this.#W){if(!this.#S(J.attempt)){this.forget(Z);continue}if(J.since!==null)$=Math.min($??J.since,J.since)}return Object.freeze({active:$!==null,since:$})}#S($){return $.expiresAtMs===null?$.credentialType==="api_key":$.expiresAtMs-this.#J()>I$}async authorize($,Z,J="vault"){this.#N(Z);let{credentialId:z,credentialType:X,accountIdentity:G}=$,Q=this.#W.get(z);if(Q&&(Q.attempt.credentialType!==X||Q.attempt.expectedAccountIdentity!==G))this.forget(z),Q=void 0;let W;try{W=await this.#I(Z)}catch(H){throw this.#W.clear(),H}if(this.#j&&Q)return this.#_(),this.#b(z,Q,W,J);try{let H=await this.#k({credentialId:z,credentialType:X,accountIdentity:G},W,Z);return this.#W.set(z,{attempt:H,routeId:J,since:null}),H}catch(H){if(this.#N(Z),M0(H)!=="unreachable")throw this.forget(z),H;return this.#b(z,Q,W,J,H)}}#b($,Z,J,z,X=this.#F){if(!Z||this.#W.get($)!==Z||!this.#S(Z.attempt))throw this.forget($),X;if(Z.since===null)Z.since=this.#J();let G=Object.freeze(Object.defineProperty({...Z.attempt,fromKeptReceipt:!0},"accessToken",{value:Z.attempt.accessToken,enumerable:!1}));return this.#Y.set(G,J),this.#Q.set(G,z),G}async#k($,Z,J){if(!$.credentialId)throw new _("route-unavailable","Claustrum dispatch requires a credential id");let{credentialId:z,credentialType:X,accountIdentity:G}=$;if(this.#G&&G===void 0)throw new _("identity-unasserted","Claustrum dispatch requires a known account identity");let Q=await this.#A(()=>this.#$.getScoped({credentialId:z,enrollmentToken:Z,...X==="oauth"&&{minTtlMs:b3}}),J);if(Q.credentialId!==void 0&&Q.credentialId!==z)throw new _("identity-changed","Claustrum served credential identity changed");let W=Q.expiresAtMs;if(!Number.isSafeInteger(Q.recordVersion)||Q.recordVersion<0||W===null&&X==="oauth"||W!==null&&(!Number.isFinite(W)||W-this.#J()<b3))throw new _("insufficient-validity","Claustrum served credential has insufficient validity");let H=N7(Q.material),U=Q.accountId?.trim()?Q.accountId:void 0;if(this.#G&&(Q.credentialId===void 0||U===void 0))throw new _("identity-unasserted","Claustrum served credential did not assert its identity");let q=U===void 0?this.#H?.(H):void 0,K=U??q;if(G!==void 0&&K!==void 0&&K!==G)throw new _("identity-changed","Claustrum served credential identity changed");let B=K??G,P=Object.freeze(Object.defineProperty({credentialId:z,credentialType:X,...B!==void 0&&{accountIdentity:B},accountIdentitySource:U!==void 0?"asserted":q!==void 0?"parsed":G!==void 0?"expected":"none",...G!==void 0&&{expectedAccountIdentity:G},...Q.credentialId!==void 0&&{assertedCredentialId:Q.credentialId},...U!==void 0&&{assertedAccountIdentity:U},...Q.projectId!==void 0&&{projectId:Q.projectId},recordVersion:Q.recordVersion,expiresAtMs:W},"accessToken",{value:H,enumerable:!1}));return this.#Y.set(P,Z),P}async reportFailure($,Z,J){if(Z!==401)return;this.#N();let z=this.#Y.get($);if(!z)throw new _("no-receipt","Claustrum failure report requires an original dispatch receipt");let X=this.#Q.get($);if(X!==void 0){this.forget($.credentialId),this.#Z.debug("scoped 401 not reported",{routeId:X,reason:"kept-receipt"});return}let G=this.#W.get($.credentialId);if(G&&G.attempt.recordVersion===$.recordVersion)this.forget($.credentialId);let Q=this.#K.get($);if(Q)return Q;let W=this.#A(()=>this.#$.reportAuthFailureScoped({credentialId:$.credentialId,enrollmentToken:z,providerStatus:401,recordVersion:$.recordVersion,reporterSource:J}));this.#K.set($,W);try{await W,this.#Z.debug("scoped 401 reported",{credentialId:$.credentialId,recordVersion:$.recordVersion,reporterSource:J})}catch(H){throw this.#K.delete($),H}}watchRoster($){this.#N();let Z=new N1({client:this.#$,enrollmentToken:()=>this.#I(),view:$.view??(()=>this.#C),discover:async(J)=>{await $.onView(J)},onRefused:(J)=>{this.listFailed(J),$.onRefused?.(J)},onTransportLost:()=>this.transportLost(),onReachable:()=>this.reachable(),onError:$.onError,onMode:$.onMode,logger:this.#Z,now:this.#J,setTimeoutImpl:this.#U,clearTimeoutImpl:this.#M});return this.#P.add(Z),Z.start(),{get mode(){return Z.mode},close:()=>{this.#P.delete(Z),Z.stop()}}}close(){if(this.#L)return;if(this.#L=!0,this.#V)this.#M(this.#V);this.#V=void 0;for(let $ of this.#P)$.stop();this.#P.clear(),this.#W.clear(),this.#$.close()}}import{resolve as a3}from"node:path";var b0="all",O7=Object.freeze(["primary"]);function R$($){return $.kind==="retired"?$.retiredAt:$.checkedAt}function d0($,Z){return JSON.stringify([$,Z])}function D0($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function d($){return typeof $==="number"&&Number.isFinite($)}function A$($){return typeof $==="string"&&$.length>0}function l($,Z,J){return $[Z]===void 0||J($[Z])}function _7($){return d($)&&$>0}function T3($){return typeof $==="string"}function I7($){if(!D0($)||!A$($.scope)||!A$($.label))return!1;switch($.kind){case"reading":return d($.checkedAt)&&d($.usedPercent)&&l($,"resetsAt",T3)&&l($,"windowMinutes",_7);case"retired":return d($.retiredAt);case"absent":return d($.checkedAt);default:return!1}}function A7($){if(!D0($)||!d($.checkedAt))return!1;if($.kind==="cleared")return!0;return $.kind==="reading"&&typeof $.reached==="boolean"&&l($,"remainingPercent",d)&&l($,"usedPercent",d)&&l($,"resetsAt",T3)&&l($,"limit",d)&&l($,"used",d)&&l($,"remaining",d)&&l($,"unit",T3)}function S$($){return D0($)&&d($.value)&&Number.isInteger($.value)&&$.value>=0&&d($.checkedAt)}function E3($){return D0($)&&Object.values($).every(S$)}function R7($){return typeof $==="boolean"}function l0($){return D0($)&&typeof $.hasCredits==="boolean"&&typeof $.unlimited==="boolean"&&l($,"balance",d)&&l($,"overageLimitReached",R7)&&d($.checkedAt)}function b$($){if(!D0($))return;let Z=Object.entries($).filter(([,J])=>S$(J));return Z.length===0?void 0:Object.fromEntries(Z)}function k0($){if(p0($))return $;if(!D0($))return;let{counters:Z,credits:J,...z}=$;if(!p0(z))return;let X=b$(Z),G=l0(J)?J:void 0;return{...z,...X===void 0?{}:{counters:X},...G===void 0?{}:{credits:G}}}function p0($){if(!D0($)||!Array.isArray($.limits))return!1;let Z=new Set;for(let J of $.limits){if(!I7(J))return!1;let z=d0(J.scope,J.label);if(Z.has(z))return!1;Z.add(z)}return l($,"budget",A7)&&l($,"counters",E3)&&l($,"credits",l0)}class E1 extends TypeError{constructor($){super($);this.name="QuotaCodecError"}}function g1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function f1($){return typeof $==="number"&&Number.isFinite($)}function k$($){return $===void 0||typeof $==="string"&&$!==""}function T$($){return typeof $==="string"&&$!==""}function G1($,Z){return $[Z]===void 0||f1($[Z])}function f3($,Z){return $[Z]===void 0||typeof $[Z]==="string"}function S7($){return g1($)&&k$($.scope)&&T$($.label)&&f1($.usedPercent)&&f3($,"resetsAt")&&($.windowMinutes===void 0||f1($.windowMinutes)&&$.windowMinutes>0)}function b7($){return g1($)&&k$($.scope)&&T$($.label)}function k7($){if(!g1($))return!1;if($.kind==="cleared")return!0;return $.kind==="reading"&&typeof $.reached==="boolean"&&G1($,"remainingPercent")&&G1($,"usedPercent")&&f3($,"resetsAt")&&G1($,"limit")&&G1($,"used")&&G1($,"remaining")&&f3($,"unit")}function a0($){if(!g1($)||!f1($.checkedAt))return!1;let Z=$.readings??[],J=$.coverage??[];if(!Array.isArray(Z)||!Array.isArray(J))return!1;let z=new Set;for(let X of Z){if(!S7(X))return!1;let G=d0(X.scope??b0,X.label);if(z.has(G))return!1;z.add(G)}if(!J.every(b7))return!1;return($.budget===void 0||k7($.budget))&&($.counters===void 0||E3($.counters))&&($.credits===void 0||l0($.credits))}function T7($,Z){if($.scope!==Z.scope)return $.scope<Z.scope?-1:1;if($.label!==Z.label)return $.label<Z.label?-1:1;return 0}function E7($,Z,J){if(Z===void 0)return $;if($!==void 0&&J<$.checkedAt)return $;return{...Z,checkedAt:J}}function f7($,Z){let J=new Map(Object.entries($??{}));for(let[z,X]of Object.entries(Z??{})){let G=J.get(z);if(G===void 0||X.checkedAt>=G.checkedAt)J.set(z,X)}return J.size===0?void 0:Object.fromEntries(J)}function g7($,Z){if(Z===void 0)return $;if($!==void 0&&Z.checkedAt<$.checkedAt)return $;return{...Z}}function Q1($,Z){let J=$===void 0?void 0:k0($);if($!==void 0&&J===void 0)throw new E1("stored quota map is malformed");if(!a0(Z))throw new E1("quota observation is malformed");let z=J??{limits:[]},X=Z.checkedAt,G=new Map;for(let D of z.limits)G.set(d0(D.scope,D.label),D);let Q=(D)=>{let R=G.get(D);return R===void 0||X>=R$(R)},W=new Set;for(let D of Z.readings??[]){let R=D.scope??b0,S=d0(R,D.label);if(W.add(S),!Q(S))continue;G.set(S,{scope:R,label:D.label,kind:"reading",checkedAt:X,usedPercent:D.usedPercent,...D.resetsAt===void 0?{}:{resetsAt:D.resetsAt},...D.windowMinutes===void 0?{}:{windowMinutes:D.windowMinutes}})}for(let D of Z.coverage??[]){let R=D.scope??b0,S=d0(R,D.label);if(W.has(S)||!Q(S))continue;let h=G.get(S);G.set(S,h===void 0||h.kind==="absent"?{scope:R,label:D.label,kind:"absent",checkedAt:X}:{scope:R,label:D.label,kind:"retired",retiredAt:X})}let{limits:H,budget:U,counters:q,credits:K,...B}=z,F=E7(z.budget,Z.budget,X),P=f7(z.counters,Z.counters),C=g7(z.credits,Z.credits);return{...B,limits:[...G.values()].sort(T7),...F===void 0?{}:{budget:F},...P===void 0?{}:{counters:P},...C===void 0?{}:{credits:C}}}var x7=Object.freeze({validate:p0,decode:k0,merge:Q1});import{createHash as m7}from"node:crypto";import{resolve as g$}from"node:path";function E$($,Z,J){if($.accountIdentity!==void 0&&J!==void 0)return $.accountIdentity===J;return $.credentialId===Z}function g3($,Z,J){return $.some((z)=>E$(z,Z,J))}function x3($,Z,J){let z={credentialId:Z,...J!==void 0&&{accountIdentity:J}};return[...$.filter((X)=>X.credentialId!==Z||X.accountIdentity!==J),z]}function y3($,Z,J){return $.filter((z)=>!Z.some((X)=>E$(z,X,J)))}var x$="vault:";function w7($){return m7("sha256").update($).digest("hex")}function u7($){let Z=$.credentialId.split(":");return(Z.length>=3?Z.slice(2).join(":").trim():void 0)||$.email||$.credentialId}function c7($){return $.identity!==void 0?`identity:${$.identity}`:`credential:${$.credential.credentialId}`}function L0($){return[$.credentialId,...$.aliases??[]]}function y$($,Z,J={}){let z=J.now??Date.now(),X=J.routePrefix??x$,G=J.reservedRouteIds??new Set,Q=$?.rows??[],W=[...$?.declined??[]],H=Z.skipped.length===0,U=new Set(Z.credentials.map((L)=>L.credentialId)),q=new Set(Z.skipped.flatMap((L)=>L.credentialId===void 0?[]:[L.credentialId])),K=Z.skipped.some((L)=>L.credentialId===void 0),B=(L)=>!U.has(L)&&(q.has(L)||K),F=new Map;for(let L of Q){if(L.accountIdentity===void 0)continue;for(let Y of L0(L))if(!F.has(Y))F.set(Y,L.accountIdentity)}let P=new Map;for(let L of Z.credentials){let Y=L.accountIdentity!==void 0?{credential:L,identity:L.accountIdentity,claimed:!0}:{credential:L,identity:F.get(L.credentialId),claimed:!1},j=c7(Y),M=P.get(j)??[];M.push(Y),P.set(j,M)}let C=new Set,D=new Set(G),R=[],S=(L,Y)=>L.credential.credentialId.localeCompare(Y.credential.credentialId),h=[...P.values()].map((L)=>L.toSorted(S)).sort((L,Y)=>L[0]&&Y[0]?S(L[0],Y[0]):0);for(let L of h){let Y=L[0]?.identity,j=L.filter((T)=>T.credential.state==="active"),M=j.length?j:L,b=M.filter((T)=>T.claimed),x=b.length?b:M,k=new Set(L.map((T)=>T.credential.credentialId)),m=Q.find((T)=>!C.has(T)&&L0(T).some((Q0)=>k.has(Q0))&&(T.accountIdentity===void 0||T.accountIdentity===Y)),n=x.find((T)=>T.credential.credentialId===m?.credentialId)??x[0];if(!n)continue;let v=n.credential,c=m??(Y===void 0?void 0:Q.find((T)=>!C.has(T)&&T.accountIdentity===Y));if(c)C.add(c);let t=c?.routeId;if(!t||G.has(t)){let T=`${X}${v.credentialId}${Y===void 0?"":`~${w7(Y).slice(0,10)}`}`;t=T;for(let Q0=2;D.has(t);Q0++)t=`${T}~${Q0}`}D.add(t);let V1=c?L0(c).filter(B):[],v0=[...new Set([...L.map((T)=>T.credential.credentialId),...V1])].filter((T)=>T!==v.credentialId).sort((T,Q0)=>T.localeCompare(Q0)),F1=J.mapAccount?.(v)??{};R.push({previousIndex:c?Q.indexOf(c):1/0,row:{routeId:t,credentialId:v.credentialId,credentialType:v.credentialType,...Y!==void 0&&{accountIdentity:Y},...v0.length&&{aliases:v0},state:v.state,label:F1.label?.trim()||u7(v),...v.email!==void 0&&{email:v.email},...v.orgName!==void 0&&{orgName:v.orgName},enabled:![v.credentialId,...v0].some((T)=>g3(W,T,Y)),addedAt:c?.addedAt??z,...c?.quota!==void 0&&{quota:c.quota},...!n.claimed&&Y!==void 0&&{unclaimed:!0}}})}return Q.forEach((L,Y)=>{if(C.has(L)||!L0(L).some(B))return;if(D.has(L.routeId))return;let[j,...M]=L0(L).filter((k)=>!U.has(k));if(j===void 0)return;D.add(L.routeId);let{aliases:b,...x}=L;R.push({previousIndex:Y,row:{...x,credentialId:j,...M.length&&{aliases:M},stale:!0}})}),R.sort((L,Y)=>L.previousIndex===Y.previousIndex?L.row.credentialId.localeCompare(Y.row.credentialId):L.previousIndex-Y.previousIndex),{version:1,view:Z.view,complete:H,...!H&&{rejected:Z.skipped.map((L)=>({...L.credentialId!==void 0&&{credentialId:L.credentialId},reason:L.reason}))},rows:R.map((L)=>L.row),declined:W}}function h3($){return($?.rows??[]).filter((Z)=>Z.enabled&&Z.state==="active").map((Z)=>({id:Z.routeId,kind:Z.credentialType==="oauth"?"oauth":"api-key",...Z.quota!==void 0&&{quota:Z.quota}}))}function W1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function s0($){return $===void 0||typeof $==="string"}function p7($){let Z=W1($)?k0($.quota):void 0;if(!W1($)||typeof $.routeId!=="string"||typeof $.credentialId!=="string"||$.credentialType!=="oauth"&&$.credentialType!=="api_key"||typeof $.state!=="string"||typeof $.label!=="string"||typeof $.enabled!=="boolean"||typeof $.addedAt!=="number"||!s0($.accountIdentity)||!s0($.email)||!s0($.orgName)||$.aliases!==void 0&&(!Array.isArray($.aliases)||!$.aliases.every((J)=>typeof J==="string"))||$.quota!==void 0&&Z===void 0||$.stale!==void 0&&$.stale!==!0||$.unclaimed!==void 0&&$.unclaimed!==!0)return;return{...$,...Z===void 0?{}:{quota:Z}}}var d7=new Set(["empty credential id","duplicate credential id","blank account identity","empty state"]);function f$($){if(!Array.isArray($))return;let Z=[];for(let J of $){if(!W1(J)||!s0(J.credentialId)||typeof J.reason!=="string"||!d7.has(J.reason))return;Z.push(J)}return Z}function l7($){if(!W1($)||$.version!==1||!s0($.view)||!Array.isArray($.rows)||!Array.isArray($.declined)||$.complete!==void 0&&typeof $.complete!=="boolean"||$.rejected!==void 0&&!f$($.rejected))throw new _("invalid-state","Claustrum roster file is not valid");let Z=[];for(let X of $.rows){let G=p7(X);if(!G)throw new _("invalid-state","Claustrum roster file is not valid");Z.push(G)}let J=[];for(let X of $.declined){if(!W1(X)||typeof X.credentialId!=="string"||!s0(X.accountIdentity))throw new _("invalid-state","Claustrum roster file is not valid");J.push(X)}let z=f$($.rejected);return{version:1,...typeof $.view==="string"&&{view:$.view},complete:$.complete!==!1,...z&&{rejected:z},rows:Z,declined:J}}async function r($){let Z;try{Z=await e($,I)}catch(z){if(z.code==="ENOENT")return;throw z}let J;try{J=JSON.parse(Z)}catch{throw new _("invalid-state","Claustrum roster file is not valid")}return l7(J)}var a7={name:"claustrum-roster-write",ttlMs:1e4,timeoutMs:5000,renew:!0},s7={name:"claustrum-roster",ttlMs:30000};async function T0($,Z,J={}){return B3($,{...a7,signal:J.signal},async(z)=>{let X=await r($),{next:G,result:Q}=await Z(X,{assertOwned:()=>z.assertOwned()});if(G)await z.assertOwned(),await z1($,G,{beforeRename:async()=>{await J.beforePublish?.(),J.signal?.throwIfAborted(),await z.assertOwned()}});return Q})}function v3($,Z){return T0($,(J)=>{let z=J?.rows.find((G)=>G.routeId===Z);if(!J||!z)throw new _("route-unavailable","Claustrum route is not in the roster");let X=x3(J.declined,z.credentialId,z.accountIdentity);return{next:{...J,declined:X,rows:J.rows.map((G)=>G===z?{...G,enabled:!1}:G)},result:void 0}})}function m3($,Z){return T0($,(J)=>{let z=J?.rows.find((X)=>X.routeId===Z);if(!J||!z)throw new _("route-unavailable","Claustrum route is not in the roster");return{next:{...J,declined:y3(J.declined,L0(z),z.accountIdentity),rows:J.rows.map((X)=>X===z?{...X,enabled:!0}:X)},result:void 0}})}function n7($){return new _("invalid-order",$)}function i7($,Z){if(!Array.isArray(Z))return"route ids must be an array of route ids";let J=new Set($.map((G)=>G.routeId)),z=new Set;for(let G of Z){if(typeof G!=="string")return"route ids must be an array of route ids";if(z.has(G))return`route id ${G} appears more than once`;if(!J.has(G))return`route id ${G} is not in the roster`;z.add(G)}let X=[...J].filter((G)=>!z.has(G)).length;if(X>0)return`the order leaves out ${X} roster route id${X===1?"":"s"}`;return}function w3($,Z,J={}){return T0($,(z)=>{let X=z?.rows??[],G=i7(X,Z);if(G)throw n7(G);let Q=new Map;for(let U of X){let q=Q.get(U.routeId);if(q)q.push(U);else Q.set(U.routeId,[U])}let W=[...Z],H=W.flatMap((U)=>Q.get(U)??[]);if(!z||H.every((U,q)=>U===X[q]))return{result:{ids:W,outcome:"unchanged"}};return{next:{...z,rows:H},result:{ids:W,outcome:"reordered"}}},{...J.signal&&{signal:J.signal}})}function r7($,Z){if(!L0($).includes(Z.credentialId))return"refuse";if($.unclaimed&&(Z.accountIdentitySource==="expected"||Z.accountIdentitySource==="none"))return"refuse";if($.accountIdentity===Z.accountIdentity)return"hold";if($.accountIdentity===void 0&&Z.expectedAccountIdentity===void 0&&Z.accountIdentity!==void 0&&(Z.accountIdentitySource==="asserted"||Z.accountIdentitySource==="parsed")&&L0($).length===1)return"bind";return"refuse"}async function u3($,Z){let{routeId:J,observation:z,...X}=Z;return h$($,{routeId:J,observation:z,accountIdentity:X.accountIdentity,receipt:X})}async function h$($,Z){if(!a0(Z.observation))return!1;let J=X0($,await r($));if(!N0(J,Z).kept)return!1;return v$($,Z)}function c3($,Z){return h$($,Z)}function N0($,Z){let J=$?.rows.find((Q)=>Q.routeId===Z.routeId),z=!J?"refuse":Z.receipt?r7(J,Z.receipt):J.accountIdentity!==void 0&&J.accountIdentity===Z.accountIdentity?"hold":"refuse";if(!$||!J||z==="refuse")return{roster:$,kept:!1};let X=Q1(J.quota,Z.observation),G=z==="bind"?{accountIdentity:Z.accountIdentity,unclaimed:!0}:{};return{roster:{...$,rows:$.rows.map((Q)=>Q===J?{...Q,...G,quota:X}:Q)},kept:!0}}var x1=new Map;function p3($){x1.delete(g$($))}async function d3($){$.signal?.throwIfAborted();let Z=async()=>await $.isActive?.()??!0;if(!await Z()){p3($.path);return}let J=await Y0({...s7,path:$.path,renew:!0});if(!J){let G=await r($.path);if($.signal?.throwIfAborted(),!G?.view)throw new _("roster-busy","Claustrum account discovery is already in progress");return G}let z=g$($.path),X;try{let G=await r($.path),Q=x1.get(z);X=Q&&(Q.previousView===G?.view||Q.inventory.view===G?.view)?Q:{inventory:await $.custody.discover($.signal),previousView:G?.view},x1.delete(z);let{inventory:W}=X;return $.onInventory?.(W),$.signal?.throwIfAborted(),await T0($.path,async(H)=>{if(!await Z())return{result:void 0};$.signal?.throwIfAborted(),await J.assertOwned();let U=typeof $.projection==="function"?$.projection():$.projection,q=y$(H,W,U);return{...JSON.stringify(H)!==JSON.stringify(q)&&{next:q},result:q}},{beforePublish:async()=>{$.signal?.throwIfAborted(),await J.assertOwned()}})}catch(G){if(G instanceof _0&&X&&!$.signal?.aborted&&await Z())x1.set(z,X);throw G}finally{await J.release()}}var n0=new Map,o7=O0("claustrum"),m$=100;function w$($){let Z=a3($),J=n0.get(Z);if(!J)J={path:Z,pending:new Map,listeners:new Set,wake:new Set,abort:new AbortController,failures:0,draining:!1,order:0},n0.set(Z,J);return J}function u$($,Z){let J=w$($);J.listeners.add(Z);let z;return()=>z??=(()=>{return J.listeners.delete(Z),J.listeners.size?Promise.resolve():l3($)})()}function t7($){let Z=new Map,{observation:J}=$,z=JSON.stringify([$.routeId,$.receipt?.credentialId,$.receipt?.accountIdentitySource,$.receipt?.expectedAccountIdentity]),X=(W,H,U)=>Z.set(`${z}:${W}`,{at:H,order:0,publication:{...$,observation:U}}),G=(W,H)=>JSON.stringify([W??"all",H]),Q=new Set;for(let W of J.readings??[]){let H=G(W.scope,W.label);Q.add(H),X(H,J.checkedAt,{checkedAt:J.checkedAt,readings:[{...W}]})}for(let W of J.coverage??[]){let H=G(W.scope,W.label);if(!Q.has(H))X(H,J.checkedAt,{checkedAt:J.checkedAt,coverage:[{...W}]})}if(J.budget)X("budget",J.checkedAt,{checkedAt:J.checkedAt,budget:{...J.budget}});for(let[W,H]of Object.entries(J.counters??{}))X(`counter:${W}`,H.checkedAt,{checkedAt:J.checkedAt,counters:{[W]:{...H}}});if(J.credits)X("credits",J.credits.checkedAt,{checkedAt:J.checkedAt,credits:{...J.credits}});if(!Z.size)X("empty",J.checkedAt,{checkedAt:J.checkedAt});return Z}function v$($,Z){if(!a0(Z.observation))return Promise.resolve(!1);let J=w$($),z=JSON.stringify([Z.accountIdentity??null,Z.accountIdentity===void 0?Z.routeId:null]),X=J.pending.get(z)??new Map;for(let[G,Q]of t7(Z)){let W=X.get(G);if(!W||Q.at>=W.at){if(Q.order=++J.order,Q.publication.observation.coverage)Q.priorReading=W?.publication.observation.readings?W.publication:W?.priorReading;X.set(G,Q)}}if(X.size)J.pending.set(z,X);for(let G of J.listeners)G(Z);return p$(J,m$),Promise.resolve(!0)}function c$($){return[...$.values()].flatMap((Z)=>[...Z.values()]).sort((Z,J)=>Z.order-J.order)}function X0($,Z){let J=n0.get(a3($));if(J)for(let z of c$(J.pending)){if(z.priorReading)Z=N0(Z,z.priorReading).roster;Z=N0(Z,z.publication).roster}return Z}function p$($,Z){if($.running||$.timer||!$.pending.size||$.abort.signal.aborted)return;if($.timer=setTimeout(()=>{$.timer=void 0,d$($)},Z),!$.draining)$.timer.unref?.()}function d$($){if($.running||$.abort.signal.aborted)return;let Z=new Map([...$.pending].map(([J,z])=>[J,new Map(z)]));$.running=(async()=>{try{await T0($.path,(J)=>{let z=J;for(let X of c$(Z)){if(X.priorReading)z=N0(z,X.priorReading).roster;z=N0(z,X.publication).roster}return{...z!==J&&{next:z},result:void 0}},{signal:$.abort.signal});for(let[J,z]of Z){let X=$.pending.get(J);for(let[G,Q]of z)if(X?.get(G)===Q)X.delete(G);if(!X?.size)$.pending.delete(J)}$.failures=0}catch(J){if(!$.abort.signal.aborted&&$.failures++===0)o7.warn("vault quota publication delayed; retrying",{error:J instanceof Error?J.message:String(J)})}finally{$.running=void 0;for(let z of $.wake)z();let J=$.failures?Math.min(5000,100*2**Math.min($.failures,6))*(0.5+Math.random()):m$;p$($,J)}})()}async function l3($,Z=1000){let J=a3($),z=n0.get(J);if(!z)return;z.draining=!0,clearTimeout(z.timer),z.timer=void 0;let X,G,Q=new Promise((W)=>{G=()=>{if(!z.pending.size||z.abort.signal.aborted)W()},z.wake.add(G),G()});try{if(z.pending.size)d$(z);await Promise.race([Q,new Promise((W)=>{X=setTimeout(W,Math.max(0,Z))})])}finally{if(clearTimeout(X),G)z.wake.delete(G);if(z.draining=!1,!z.listeners.size){if(z.abort.abort(),clearTimeout(z.timer),z.pending.clear(),n0.get(J)===z)n0.delete(J)}}}class l${#$;#z=new AbortController;#J;#X;#H;#G;#Z;#Y;#K;#W=!1;#Q;#U;#M;#j=new Map;#F;#V;constructor($){this.#$=$,this.#J=$.logger??O0("claustrum"),this.#V=u$($.rosterPath,(Z)=>{this.#Z=N0(this.#Z,Z).roster})}#q($){this.#z.signal.throwIfAborted(),$?.throwIfAborted()}async#B(){return await this.#$.isCustodyActive?.()??!0}#D($,Z){let J=V3([this.#z.signal,...Z?[Z]:[]]);return new Promise((z,X)=>{let G=()=>{J.signal.removeEventListener("abort",Q),J.dispose()},Q=()=>{G(),X(J.signal.reason)};if(J.signal.addEventListener("abort",Q,{once:!0}),$.then((W)=>{if(G(),J.signal.aborted)X(J.signal.reason);else z(W)},(W)=>{G(),X(W)}),J.signal.aborted)Q()})}async#L(){if(this.#q(),this.#X)return this.#X;if(!this.#H)this.#H=this.#$.connect().then(($)=>{if(this.#z.signal.aborted)$.close(),this.#q();if(this.#X=new T1({client:$,family:this.#$.family,tokenPath:this.#$.tokenPath,parseIdentity:this.#$.parseIdentity,requireAssertion:this.#$.requireAssertion,now:this.#$.now,logger:this.#J,setTimeoutImpl:this.#$.setTimeoutImpl,clearTimeoutImpl:this.#$.clearTimeoutImpl}),this.#$.insula&&$.insula)this.#Q=Y3($.insula,this.#$.tokenPath);return this.#X}).finally(()=>{this.#H=void 0});return this.#D(this.#H)}snapshot(){return this.#Z}grantReach(){let $=this.#Y;return $&&this.#Z?.view===$.view?$.reach:void 0}watchState(){return Object.freeze({vault:this.#U?.mode??"polling",...this.#$.insula&&{insula:this.#Q?.source.watchMode()??"polling"}})}#C(){this.#U?.close(),this.#U=void 0,this.#M?.(),this.#M=void 0}keptReceiptState(){return this.#X?.keptReceiptState()??Object.freeze({active:!1,since:null})}routingRows(){return h3(this.#Z)}refresh(){if(this.#q(),this.#G)return this.#G;return this.#G=(async()=>{if(!await this.#B()){this.#Z=void 0,this.#Y=void 0,this.#C(),this.#X?.close(),this.#X=void 0,this.#Q?.release(),this.#Q=void 0;return}let $=await this.#L(),Z,J=await d3({path:this.#$.rosterPath,custody:$,onInventory:(X)=>{Z=X},isActive:()=>this.#B(),signal:this.#z.signal,projection:()=>({reservedRouteIds:new Set(this.#$.reservedRouteIds?.()??[]),routePrefix:this.#$.routePrefix,mapAccount:this.#$.mapAccount,now:(this.#$.now??Date.now)()})});this.#q();let z=J?.view!==this.#Z?.view;if(this.#Z=X0(this.#$.rosterPath,J),$.retain(J?.rows??[]),Z&&J?.view!==void 0)this.#Y=Z.grantReach?{view:J.view,reach:Z.grantReach}:void 0;if(J&&z)this.#$.onRoster?.(J);return this.#F=(this.#$.now??Date.now)(),J})().finally(()=>{this.#G=void 0}),this.#G}start(){if(this.#W)return;this.#q(),this.#W=!0;let $=async()=>{try{if(await this.#P())await this.refresh();await this.refreshInsulaQuota(),this.#O()}catch(J){if(!this.#z.signal.aborted)this.#$.onError?.(J)}if(this.#z.signal.aborted)return;let Z=this.#$.pollIntervalMs??5000;if(Z<=0)return;this.#K=(this.#$.setTimeoutImpl??setTimeout)(()=>{this.#K=void 0,$()},Z),this.#K.unref?.()};$()}async#P(){if(this.#U?.mode!=="watching")return!0;let $=(this.#$.now??Date.now)();if(this.#F===void 0||$-this.#F>=Q3)return!0;return!await this.#B()}#O(){let $=this.#X;if(this.#z.signal.aborted||!$)return;if(this.#U??=$.watchRoster({view:()=>this.#Z?.view,onView:async()=>{while(this.#G)await this.#G.catch(()=>{});await this.refresh()},onRefused:(Z)=>this.#$.onError?.(Z),onError:(Z)=>{if(!this.#z.signal.aborted)this.#$.onError?.(Z)}}),this.#$.insula&&this.#Q&&!this.#M)this.#M=this.#Q.source.watch({provider:this.#$.insula.provider,setTimeoutImpl:this.#$.setTimeoutImpl,clearTimeoutImpl:this.#$.clearTimeoutImpl})}async refreshInsulaQuota(){if(!this.#$.insula||this.#z.signal.aborted||!await this.#B())return;try{await B0(this.#$.tokenPath),await this.#L(),await this.#Q?.source.refresh((this.#$.now??Date.now)())}catch{}}async cachedInsulaQuota($){if(!this.#$.insula||this.#z.signal.aborted||!await this.#B())return;try{return await B0(this.#$.tokenPath),this.#_($.assertedAccountIdentity)}catch{return}}async cachedInsulaQuotaForRoute($){if(!this.#$.insula||this.#z.signal.aborted||!await this.#B())return;try{await B0(this.#$.tokenPath);let J=X0(this.#$.rosterPath,await r(this.#$.rosterPath))?.rows.find((z)=>z.routeId===$);return this.#_(J?.accountIdentity)}catch{return}}async lookupInsulaQuotaForRoute($){let Z=this.#$.insula;if(!Z||this.#z.signal.aborted||!await this.#B())return{miss:"unreachable"};try{await B0(this.#$.tokenPath);let z=X0(this.#$.rosterPath,await r(this.#$.rosterPath))?.rows.find((Q)=>Q.routeId===$)?.accountIdentity;if(!z||!this.#Q)return{miss:"unreachable"};let X=this.#Q.source.lookup(Z.provider,z,(this.#$.now??Date.now)()),G=X.reading&&Z.normalize(X.reading.entry,X.reading.context);if(X.miss)return{miss:X.miss,...G!==void 0&&{reading:G}};return G===void 0?{miss:"unreachable"}:{reading:G}}catch{return{miss:"unreachable"}}}async pollInsulaQuotaForRoute($,Z){let J=await this.lookupInsulaQuotaForRoute($);if(J.miss==="cold"||J.miss==="upstream-failed"){if(this.#j.get($)!==J.miss)this.#j.set($,J.miss),this.#J.warn("skipped insula provider poll",{reason:J.miss});return}return this.#j.delete($),J.miss?Z():J.reading}#_($){if(!this.#$.insula||!$)return;let Z=this.#Q?.source.current(this.#$.insula.provider,$,(this.#$.now??Date.now)());return Z?this.#$.insula.normalize(Z.entry,Z.context):void 0}async authorize($,Z){this.#q(Z);let J=this.#Z??await this.#D(this.refresh(),Z);if(!J||!await this.#B())throw this.#X?.close(),this.#X=void 0,this.#C(),this.#Q?.release(),this.#Q=void 0,new _("not-active","Claustrum scoped custody is not active");let z=X0(this.#$.rosterPath,await r(this.#$.rosterPath));this.#q(Z);let X=J.rows.find((H)=>H.routeId===$),G=z?.rows.find((H)=>H.routeId===$);if(G&&!G.enabled){if(X)this.#X?.forget(X.credentialId);throw new _("route-declined","Claustrum route is disabled")}if(!X||!G||G.state!=="active"||G.credentialId!==X.credentialId||G.accountIdentity!==X.accountIdentity||G.credentialType!==X.credentialType){if(X)this.#X?.forget(X.credentialId);throw new _("route-unavailable","Claustrum route is disabled, removed or changed")}let Q=await this.#D(this.#L(),Z),W=V3([this.#z.signal,...Z?[Z]:[]]);try{return await Q.authorize({credentialId:G.credentialId,credentialType:G.credentialType,...G.accountIdentity!==void 0&&{accountIdentity:G.accountIdentity}},W.signal,$)}finally{W.dispose()}}async reportFailure($,Z,J){if(this.#q(),!this.#X)throw new _("no-receipt","Claustrum dispatch receipt has no active owner");await this.#X.reportFailure($,Z,J)}async send($,Z,J){let z=J.signal,X=await this.authorize($,z),G=await Z(X,z);if(G.status===401&&X.fromKeptReceipt)return await this.reportFailure(X,401,J.reporterSource??"direct"),G;if(G.status===401&&!z?.aborted){let Q;try{Q=await this.authorize($,z),z?.throwIfAborted()}catch(W){if(z?.aborted)throw W}if(k3(J.site,X,Q,this.#J))await G.body?.cancel().catch(()=>{}),X=Q,G=await Z(Q,z)}if(G.status===401)await this.reportFailure(X,401,J.reporterSource??"direct").catch((Q)=>this.#$.onError?.(Q)),Promise.resolve().then(()=>this.refresh()).catch((Q)=>{if(!this.#z.signal.aborted)this.#$.onError?.(Q)});return G}async decline($){this.#q(),await v3(this.#$.rosterPath,$),this.#Z=X0(this.#$.rosterPath,await r(this.#$.rosterPath)),this.#X?.retain(this.#Z?.rows??[])}async accept($){this.#q(),await m3(this.#$.rosterPath,$),this.#Z=X0(this.#$.rosterPath,await r(this.#$.rosterPath))}async reorder($){this.#q();let Z=await w3(this.#$.rosterPath,$);return this.#Z=X0(this.#$.rosterPath,await r(this.#$.rosterPath)),Z}async recordQuota($,Z,J){return this.#q(),u3(this.#$.rosterPath,{routeId:$,observation:Z,credentialId:J.credentialId,accountIdentitySource:J.accountIdentitySource,...J.accountIdentity!==void 0&&{accountIdentity:J.accountIdentity},...J.expectedAccountIdentity!==void 0&&{expectedAccountIdentity:J.expectedAccountIdentity}})}async recordAccountQuota($,Z,J){return this.#q(),c3(this.#$.rosterPath,{routeId:$,accountIdentity:Z,observation:J})}close(){if(this.#z.signal.aborted)return;if(this.#z.abort(new _("closed","Claustrum consumer is closed")),this.#K)(this.#$.clearTimeoutImpl??clearTimeout)(this.#K);this.#K=void 0,this.#C(),this.#X?.close(),this.#Q?.release(),this.#Q=void 0,this.#Z=void 0,this.#Y=void 0,this.#V(),p3(this.#$.rosterPath)}async dispose(){this.close(),await this.#V()}}var f0={opencode:Z8,pi:J8};function s3($,Z){let{tokenPath:J}=a$($,Z);return{stateDir:$8(J),host:$,override:J}}function n3($,Z){return z8($==="pi"?Z.PI_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE:void 0,$==="pi"?{...Z,OPENCODE_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE:void 0}:Z)}class E0 extends Error{code;constructor($){super($==="permission-refused"?"Native vault setup: permission-refused. Could not grant this host read access to native Claude accounts. An older ck may refuse a grant that already exists. Update CortexKit tools and run setup again.":`Native vault setup: ${$}`);this.code=$;this.name="NativeVaultEnrollmentError"}}function i3($,Z){let J=Z??f0[$];if(typeof J!=="string"||!/^[A-Za-z0-9_-]{1,128}$/.test(J))throw new E0("permission-refused");return["auth","grant","--principal",`enrolled:${J}`,"--selector-kind","category","--selector","anthropic-native","--operation","read"]}async function s$($,Z){try{await Z.processFence();let J=await k1(Z.paths??a$($,Z.env),f0[$]);if(J.state==="blocked")throw new E0("permission-refused");let z=J.state==="approved"?J.approvedName:void 0,X=i3($,z);if((await Z.runner.run(Z.ckBinary??"ck",X,{env:Z.env})).exitCode!==0)throw new E0("permission-refused");return z}catch{throw new E0("permission-refused")}}import{createHash as U8}from"node:crypto";import{lstat as q8,mkdir as K8,readFile as X9}from"node:fs/promises";import{dirname as j8}from"node:path";import{assertHostsStopped as M8,canonicalPath as o3,createNativeAccountRuntime as V8,custodyTombstoneOAuth as F8,inspectNativeHostAuthEntry as G9,NativeMigrationError as g0,nativeJournalMayAdoptLaterHostLogin as B8,nativePoolHoldsAccountData as D8,prepareNativeMigration as L8,readNativeEnrollmentMode as Q9,readNativeMigrationJournal as N8,releaseNativeMigrationPreflight as C8,requireNoSupervisedAuthContentSnapshot as P8,runNativeMigration as O8,writeNativeHostAuth as _8}from"@cortexkit/anthropic-auth-core";import{dirname as X8,join as n$,resolve as r3}from"node:path";import{ACCOUNT_FILE_NAME as i$,ACCOUNT_STATE_FILE_NAME as G8,canonicalPath as r$,getStickyRoutingStatePath as Q8,resolveLocalRoutingDestination as W8,resolveNativePoolPaths as H8}from"@cortexkit/anthropic-auth-core";async function U0($,Z){let J=$==="pi"?e$(Z):o$(Z),z=$==="pi"?Z.PI_ANTHROPIC_AUTH_FILE?.trim():Z.OPENCODE_ANTHROPIC_AUTH_FILE?.trim(),X=r3(z||n$(J,i$)),G=r3(Z.OPENCODE_ANTHROPIC_AUTH_STATE_FILE?.trim()||(X.endsWith(i$)?n$(X8(X),G8):`${X}.state.json`)),Q=await H8(X,G),W=$==="pi"?Z.PI_ANTHROPIC_AUTH_ROUTING_STATE_FILE?.trim():Z.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE?.trim();return{host:$,paths:Q,legacyConfigPath:X,legacyStatePath:G,hostAuthPath:$==="pi"?$9(Z):t$(Z),routingSourcePath:r3(W||Q8(X)),routingDestinationPath:W8($,Q,Z)}}async function Z9($){let Z=new Map;for(let J of $){let z=new Set;for(let[X,G]of[J.paths.legacyConfig,J.paths.legacyState,J.paths.config,J.paths.state,J.paths.runtime,J.paths.roster,J.paths.journal,J.hostAuthPath,J.routingSourcePath,J.routingDestinationPath].entries()){let Q=await r$(G);if(z.has(Q)&&!(X===9&&Q===await r$(J.routingSourcePath)))throw Error("Native setup storage paths overlap");let W=Z.get(Q);if(W!==void 0&&W!==J.host)throw Error("Native setup storage paths overlap between selected hosts");Z.set(Q,J.host),z.add(Q)}}}import{types as Y8}from"node:util";var J9=new WeakMap;function z9($){return typeof $==="object"&&$!==null?J9.get($):void 0}function y1($){if(!$||typeof $!=="object"||Y8.isProxy($))return;if(Object.getOwnPropertyDescriptor($,"name")?.value==="ProcessInspectionError"&&Object.getOwnPropertyDescriptor($,"code")?.value==="process-inspection-failed")return"Process inspection failed; setup cannot prove hosts are stopped.";return}class a extends Error{constructor($){super($);this.name="SetupRefusal",J9.set(this,$)}}var t3="OpenCode's separate Anthropic login is not used. Add that account through /claude Accounts if needed, or remove the separate login from OpenCode.";function W9($){let Z=$==="opencode"?"OpenCode":"Pi";return`${Z} is still connected to the vault. Old local settings do not disconnect it. In ${Z}, run /claude → Accounts → Disconnect from the vault. Then run local setup again.`}async function e3($,Z){let J=[];for(let z of $)if(await Q9(z,Z)!=="local")J.push(W9(z));if(J.length)throw new a(J.join(`
12
+ `))}function x0($,Z){return async()=>{P8(Z.env);try{await M8(Z.fence,Z.env)}catch(J){let z=y1(J);if(z)throw new a(z);throw J}await e3([$],Z.env)}}async function $2($){try{return U8("sha256").update(await X9($)).digest("hex")}catch(Z){if(Z.code==="ENOENT")return"absent";throw new g0("unsafe-source")}}async function H1($,Z){let J;try{J=JSON.parse(await X9(Z,"utf8"))}catch(G){if(G.code!=="ENOENT")throw new g0("unsafe-source")}let z=G9($,J),X=J?.anthropic;return{...z,realLogin:z.kind==="oauth"&&Boolean(X?.access&&X.refresh)}}async function h1($,Z){let{paths:J}=$,z=$.generation2?void 0:await H1(J.host,J.hostAuthPath),X=await Promise.all([J.paths.config,J.paths.state,J.paths.runtime,J.paths.roster,J.paths.journal,J.routingDestinationPath].map($2));return JSON.stringify([await Q9(J.host,Z),z?.digest,...X])}async function Z2($,Z,J){let z=Z.paths??await U0($,Z.env),X=x0($,Z);await X();let G=await N8(z.paths);if(G&&G.host!==$)throw new g0("invalid-source");let Q=G?.phase==="committed"||G?.phase==="retired";if(G&&G.kind!=="empty-init"&&(G.hostAuthPath!==await o3(z.hostAuthPath)||G.routingPaths.source!==await o3(z.routingSourcePath)||G.routingPaths.destination!==await o3(z.routingDestinationPath)))throw new g0("invalid-source");let W={paths:z,generation2:J,action:"migration",notice:!1,fingerprint:"",authorityPhase:G?.phase??"absent",poolPopulation:"not-evaluated"};if(J){if(G&&!Q)throw new g0("invalid-source");if(W.action=G?"reuse":"empty-init",!G){let H=[z.paths.config,z.paths.state,z.paths.runtime,z.paths.roster];if(!Z.env.OPENCODE_ANTHROPIC_AUTH_ROUTING_STATE_FILE)H.push(z.routingDestinationPath);for(let U of H){try{await q8(U)}catch(q){if(q.code==="ENOENT")continue;throw new g0("unsafe-source")}throw new g0("invalid-source")}}}else{W.slot=await H1($,z.hostAuthPath);let H=B8(G,$)&&W.slot.kind==="oauth";W.poolPopulation=G?.kind==="empty-init"||H?await D8({paths:z.paths}):"not-evaluated";let U=W.poolPopulation===!0;if($==="opencode"&&(U||Q&&G?.kind!=="empty-init"&&!H&&W.slot.kind==="oauth"))W.action="skip",W.notice=W.slot.realLogin;else W.preflight=await L8({...z,env:Z.env,processFence:X,removePiAnthropicAuth:Z.removePiAnthropicAuth})}return W.fingerprint=await h1(W,Z.env),W}async function i0($,Z){await x0($.paths.host,Z)();let J=await Z2($.paths.host,{...Z,paths:$.paths},$.generation2);try{if(J.fingerprint!==$.fingerprint||J.action!==$.action)throw new a("Setup inputs changed. Rerun setup with all hosts stopped.")}finally{if(J.preflight)C8(J.preflight)}}async function J2($,Z){if($.paths.host!=="opencode"||$.slot?.kind!=="absent")return;let J=x0("opencode",Z);await J(),await K8(j8($.paths.hostAuthPath),{recursive:!0,mode:448}),await _8({host:"opencode",authPath:$.paths.hostAuthPath,sourceDigest:"absent",expectedDigest:G9("opencode",{anthropic:F8("anthropic")}).digest,env:Z.env,removePiAnthropicAuth:!1,processFence:J})}async function H9($,Z){let J={...Z.env},z=x0($,{...Z,env:J});await z();let X=Z.paths??await U0($,J),G=await Z.login?.($);if(G&&!/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(G.accountIdentity))throw Error("Claude sign-in did not establish an account UUID");if(await z(),await Z.beforeCommit?.(),!Z.skipMigration)await O8({paths:X.paths,legacyConfigPath:X.legacyConfigPath,legacyStatePath:X.legacyStatePath,host:$,hostAuthPath:X.hostAuthPath,routingSourcePath:X.routingSourcePath,routingDestinationPath:X.routingDestinationPath,env:J,processFence:z,removePiAnthropicAuth:Z.removePiAnthropicAuth,preflight:Z.preflight});if(G){let Q=V8({paths:X.paths,host:$,vault:{env:J},beforePoolWrite:z});try{if((await Q.read()).mode!=="local")throw new a(W9($));await z(),await Q.loginOAuth({routeId:"main",replace:!0,...G})}finally{Q.close()}}if(Z.skipMigration){let Q=await H1($,X.hostAuthPath);await J2({paths:X,slot:Q},Z)}}var Y9={opencode:"OpenCode",pi:"Pi"};function f8($,Z,J){switch($){case"auth-content-refused":return"Run setup without OPENCODE_AUTH_CONTENT in the environment.";case"host-auth-invalid":return"The host auth file could not be read safely.";case"primary-conflict":return"Pi has a stored Anthropic API key, which would take precedence over the vault account. Remove it in Pi, then rerun setup.";case"consent-required":return"Pi has stored Anthropic authentication. Explicit consent is required to move it aside for vault use.";case"primary-unverified":return"The vault has no verified default Claude account. Sign in through the vault and rerun setup.";case"no-read-grant":return`${Y9[Z]} has no read grant in the vault, so setup cannot see any Claude login. Run ${["ck",...i3(Z,J)].join(" ")}, then rerun setup.`;case"grant-reaches-nothing":return`${Y9[Z]}'s vault read grant reaches no Claude login: no vault login carries the anthropic-native category, which logins saved before vault categories existed lack. Run ck auth reclassify --from-registry, check the logins with ck auth status, then rerun setup.`}}class $0 extends Error{host;approvedName;code;constructor($,Z="opencode",J){super(f8($,Z,J));this.host=Z;this.approvedName=J;this.name="NativeVaultActivationError",this.code=$}}function g8($){let Z=$?.grantReach;if(!Z||$.credentials.length>0||$.skipped.length>0)return"primary-unverified";return Z.grants===0?"no-read-grant":"grant-reaches-nothing"}async function X2($){try{return JSON.parse(await I8($,"utf8"))}catch(Z){if(Z.code==="ENOENT")return;throw new $0("host-auth-invalid")}}async function Y1($,Z){if($==="opencode")return"opencode";let J=Z.paths??await U0($,Z.env),z=z2($,await X2(J.hostAuthPath)),X=G2({env:Z.env,authPath:J.hostAuthPath}),{stashPath:G}=k8({env:Z.env,authPath:J.hostAuthPath});return JSON.stringify([z.digest,await X.inspect(),await $2(G)])}async function U9($){try{E8($.env)}catch{throw new $0("auth-content-refused")}try{await A8($.fence,$.env)}catch(Z){let J=y1(Z);if(J)throw new a(J);throw Z}}async function q9($,Z){let J={...Z.env};await(()=>U9({...Z,env:J}))();let X=Z.paths??await U0($,J),G=$==="opencode"&&Z.inspectOpenCodeAuth!==!1&&z2("opencode",await X2(X.hostAuthPath)).kind==="oauth";if($==="pi"){let Q=z2("pi",await X2(X.hostAuthPath)),W=await G2({env:J,authPath:X.hostAuthPath}).inspect();if(W.slot==="placeholder"&&W.stash==="missing")throw new b8("missing-stash");if(Q.kind!=="absent"&&W.slot!=="placeholder"&&!Z.removePiAnthropicAuth)throw new $0("consent-required")}return{priorMode:await T8($,J),fingerprint:await Y1($,{...Z,env:J}),separateOpenCodeLogin:G}}async function K9($,Z,J){let z={...Z.env},X=()=>U9({...Z,env:z});await X();let G=Z.paths??await U0($,z);if(await Y1($,Z)!==J.fingerprint)throw new $0("host-auth-invalid");let Q=await s$($,{env:z,runner:Z.runner,processFence:X,ckBinary:Z.enrollment?.ckBinary,paths:Z.enrollment?.paths}),W=Z.discover??(()=>S8({paths:G.paths,host:$,env:$==="pi"?{...z,OPENCODE_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE:z.PI_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE}:z})),H,U=async()=>{return H=await W(),H},q=R8({paths:G.paths,host:$,vault:{env:z,discover:U}});try{await X(),await q.vault.refresh();let K=await q.read(),B=K.accounts.find((F)=>F.id==="main");if(K.mode!=="claustrum"||!B?.accountIdentity||B.source!=="vault"){let F=g8(H);throw F==="primary-unverified"?new $0(F):new $0(F,$,Q)}if(await X(),$==="pi")await G2({env:z,authPath:G.hostAuthPath}).enterVault();return J.priorMode==="claustrum"?"already-vault":"committed"}finally{q.close()}}var x8=/(?:^|[/\\])(opencode|litecode|opencode2|pi)(?:\.exe)?(?=$|\s|")/i;class Q2 extends Error{activeHosts;constructor($){let Z=$.map((z)=>({pid:z.pid,command:x8.exec(z.command)?.[1]??"host"})),J=Z.map((z)=>` - PID ${z.pid}: ${z.command}`).join(`
13
13
  `);super(`OpenCode or Pi processes are currently running:
14
14
  ${J}
15
15
 
16
- Please quit all OpenCode, LiteCode, and Pi processes before running setup.`);this.activeHosts=Z,this.name="ProcessFenceViolationError"}}var i8={"setup-activation":"Vault custody setup","setup-opencode-config":"OpenCode configuration","setup-pi-install":"Pi extension installation","setup-pi":"Pi setup","setup-process-check":"Host process check","cli-setup":"Setup","cli-login":"Login","cli-api-add":"API route setup","cli-list":"Account listing","cli-relay-setup":"Relay setup","cli-relay-workers-dev":"Workers.dev enablement","cli-command":"Command"};function U1(){return($)=>$}var Y2=["opencode","pi"],r8=new Set(["enrolled","not-enrolled","unknown"]),D9=U1()(["auth-content-refused","host-auth-invalid","primary-conflict","consent-required","primary-unverified","no-read-grant","grant-reaches-nothing"]),N9=U1()(["enrollment-refused","enrollment-reset","approval-refused","permission-refused"]),L9=U1()(["invalid-source","unsafe-source","consent-required","primary-unverified","migration-busy","ownership-lost","retirement-refused","pool-populated","host-login-present","settings-changed"]),C9=U1()(["invalid-options","invalid-auth","invalid-stash","unsafe-path","missing-stash","conflict","lock-timeout","lock-compromised","io"]),P9=U1()(["closed","not-enrolled","invalid-token","unavailable","identity-changed","identity-unasserted","insufficient-validity","invalid-material","not-active","route-unavailable","route-declined","no-receipt","unsafe-file","invalid-state","wrong-consumer","roster-busy","host-slot-login","host-slot-placeholder","placeholder-refresh","invalid-order"]),o8={name:new Set(["Error","TypeError","SyntaxError","RangeError","AggregateError","AbortError","PrivateFileError","PrivateFilesUnavailableError","DiagnosticFileError","NativeRuntimeError","NativeAuthorityError","NativeMigrationError","NativeMigrationSourceError","NativeHostAuthError","NativeHostAuthWriteError","NativePiAuthSlotError","NativeCustodyError","NativeVaultActivationError","NativeVaultEnrollmentError","SetupCommandError","HostNotEnrolledError","ProcessFenceViolationError","ProcessInspectionError","LockOwnershipError","LockContentionError","ClaustrumConsumerError","ClaustrumCredentialError"]),code:new Set([...D9,...N9,...L9,...C9,...P9,"EACCES","EPERM","ENOENT","EEXIST","ENOTDIR","EISDIR","ENOTEMPTY","EBUSY","ETIMEDOUT","ECONNREFUSED","ECONNRESET","ECANCELED","EIO","EINVAL","ENOTSUP","ENOSYS","ENOMEM","EMFILE","ENFILE","ELOOP","EROFS","EXDEV","ENAMETOOLONG","EBADF","EPIPE","ENOSPC","EINTR","ERR_INVALID_ARG_TYPE","ERR_INVALID_ARG_VALUE","ERR_OUT_OF_RANGE","ERR_FEATURE_UNAVAILABLE_ON_PLATFORM","ERR_PRIVATE_FILES_SECURITY","ERR_PRIVATE_FILES_UNAVAILABLE","ERR_PRIVATE_FILE","ERR_DIAGNOSTICS_DIRECTORY_UNAVAILABLE","ERR_DIAGNOSTICS_NOT_DIRECTORY","ERR_DIAGNOSTICS_NOT_OWNER_ONLY","unsafe-runtime","invalid-runtime","runtime-io","runtime-conflict","publication-refused","invalid-journal","source-io","source-changed","source-too-large","write-io"]),stage:new Set(["safe-parent","verify","directory","read","create","directory-create","rename","stage-directory","stage-create","before-rename","published-callback","published-verify","directory-sync-unsupported"]),reason:new Set(["wrong-owner","extra-ace","not-protected","null-dacl","empty-dacl","reparse-point","unsupported-filesystem","native-addon-unavailable","unsafe-ancestor","wrong-kind","io-error","mode","writable-by-others"])},t8=new Set([...D9.flatMap(($)=>$==="no-read-grant"||$==="grant-reaches-nothing"?Y2.map((Z)=>new X0($,Z).message):[new X0($).message]),...N9.map(($)=>new W1($).message),...L9.map(($)=>new a8($).message),...C9.map(($)=>new s8($).message),...P9.map(($)=>`Native custody refused: ${$}`),B9,"Disconnect from the vault first.","Native account changes require offline setup without OPENCODE_AUTH_CONTENT","Local login cannot be verified while OPENCODE_AUTH_CONTENT is set","Authentication failed","API fallback base URL must be an http(s) URL without embedded credentials","API key is required","Vault routes cannot be replaced with a local API key","Cloudflare API token is required","Cloudflare account ID is required","Relay Worker URL is required","--claustrum and --no-claustrum cannot be used together.","Setup requires a TTY or --yes.","Multiple OpenCode generations found. Choose --opencode=1|2|both before running noninteractive setup.","Claustrum is not available. Start ck or use --no-claustrum for local sign-in.","Claude sign-in did not establish an account UUID","Native setup storage paths overlap between selected hosts","Anthropic account storage paths overlap; migration requires separate files","Anthropic account migration is required. Stop OpenCode, LiteCode and Pi, then run npx @cortexkit/opencode-anthropic-auth setup","Anthropic account migration is incomplete; resume setup","Anthropic account migration journal is invalid","Anthropic account migration journal changed","Anthropic runtime state is invalid","Anthropic runtime file is not owner-only regular storage","Anthropic runtime storage is unavailable","Anthropic runtime observation is older than persisted state","Anthropic runtime publication was refused","Claustrum connection failed; start ck and rerun setup.","Claustrum enrollment refused; inspect its status with ck before rerunning setup.","Invalid enrollment request id.","This Claustrum vault does not support connecting plugins yet, so setup cannot connect to it. Run setup without --claustrum to use local accounts.",'This Claustrum vault is too old to connect plugins. Run ck upgrade to move to Claustrum v0.2.0 or newer (read "Upgrading from v0.1.3" in its release notes first), or run setup without --claustrum to use local accounts.',"OAuth metadata read failed"]),e8=Object.values(s0).join("|"),$6="Claustrum enrollment did not complete. Inspect and approve with ck, then rerun setup.",Z6=[new RegExp(`^Claustrum approval is still pending\\. In another terminal, run: ck auth enroll approve --request-id [A-Za-z0-9_-]{1,128} --name (?:${e8}) and then rerun setup\\.$`),/^The vault never created the enrollment request \(last error: [a-z][a-z0-9_]{0,63}\)\. Check that ck is running, then rerun setup\.$/],J6=new Set(["opencode","litecode","opencode2","pi","host"]),z6=64,X6=256,G6=4096,W2=65536,Q6=4096,W6=3,j9="[output beyond the diagnostic limit omitted]",H6="[output withheld: no line break within the inspected window]",Y6="[detail withheld: the known credentials could not be read safely]",q2=new TextEncoder,O9=new TextDecoder;function v($,Z){let J=Object.getOwnPropertyDescriptor($,Z);return J!==void 0&&"value"in J?J.value:void 0}function q0($){return $!==null&&(typeof $==="object"||typeof $==="function")&&!U2.isProxy($)}function K2($,Z){if(!q0($)||!Array.isArray($))return;let J=v($,"length");if(typeof J!=="number"||J>Z)return;let z=[];for(let X=0;X<J;X+=1){let G=Object.getOwnPropertyDescriptor($,String(X));if(G===void 0||!("value"in G))return;z.push(G.value)}return z}function U6($){let Z=K2($,z6);if(Z===void 0||Z.length===0)return;let J=[];for(let z of Z){if(!q0(z))return;let X=v(z,"pid"),G=v(z,"command");if(typeof X!=="number"||!Number.isSafeInteger(X)||X<0)return;if(typeof G!=="string"||!J6.has(G.toLowerCase()))return;J.push({pid:X,command:G})}return J}function j2($){try{if(!q0($))return;if(v($,"name")==="ProcessInspectionError")return"";let Z=v($,"message");if(typeof Z!=="string")return;if(v($,"name")==="HostNotEnrolledError"&&Z===$6)return Z;if(t8.has(Z))return Z;if(Z.startsWith("Unknown setup argument: "))return Z;if(v($,"name")==="HostNotEnrolledError"&&Z6.some((X)=>X.test(Z)))return Z;if(v($,"code")==="ERR_PRIVATE_FILES_UNAVAILABLE")return B9;let J=v($,"status");if(typeof J==="number"&&Number.isInteger(J)&&J>=100&&J<=599&&Z===`OAuth metadata read failed: ${J}`)return Z;let z=U6(v($,"activeHosts"));if(z){let X=new Q2(z).message;if(Z===X)return X}}catch{}return}function _9($){try{if(!q0($))return;let Z=K2(n8($),Y2.length);if(Z===void 0)return;let J=[];for(let z of Z){if(!q0(z))return;let X=Y2.find((Q)=>Q===v(z,"host")),G=v(z,"outcome");if(X===void 0||!r8.has(G))return;J.push({host:X,outcome:G})}return J}catch{return}}function q6($,Z=[]){try{let J=new Set,z=K2(Z,X6);if(z===void 0)return;for(let G of z){if(typeof G!=="string")return;if(G!=="")J.add(G)}if(!q0($))return;let X=Reflect.ownKeys($);if(X.length>G6)return;for(let G of X){if(typeof G!=="string"||!l8(G))continue;let Q=Object.getOwnPropertyDescriptor($,G);if(Q===void 0)continue;if(!("value"in Q))return;if(Q.value===void 0||Q.value==="")continue;if(typeof Q.value!=="string")return;J.add(Q.value)}return[...J]}catch{return}}function K6($,Z){let J=q2.encode($);if(J.length<=Z)return $;let z=Math.max(0,Z);while(z>0&&((J[z]??0)&192)===128)z-=1;return O9.decode(J.subarray(0,z))}function j6($,Z){let J=q2.encode($);if(J.length<=Z)return $;let z=J.length-Math.max(0,Z);while(z<J.length&&((J[z]??0)&192)===128)z+=1;return O9.decode(J.subarray(z))}function M6($,Z,J){let z=$,X=!1;if($.length>W2){if(X=!0,J==="tail"){let H=$.indexOf(`
16
+ Please quit all OpenCode, LiteCode, and Pi processes before running setup.`);this.activeHosts=Z,this.name="ProcessFenceViolationError"}}var i8={"setup-activation":"Vault custody setup","setup-opencode-config":"OpenCode configuration","setup-pi-install":"Pi extension installation","setup-pi":"Pi setup","setup-process-check":"Host process check","cli-setup":"Setup","cli-login":"Login","cli-api-add":"API route setup","cli-list":"Account listing","cli-relay-setup":"Relay setup","cli-relay-workers-dev":"Workers.dev enablement","cli-command":"Command"};function U1(){return($)=>$}var Y2=["opencode","pi"],r8=new Set(["enrolled","not-enrolled","unknown"]),L9=U1()(["auth-content-refused","host-auth-invalid","primary-conflict","consent-required","primary-unverified","no-read-grant","grant-reaches-nothing"]),N9=U1()(["enrollment-refused","enrollment-reset","approval-refused","permission-refused"]),C9=U1()(["invalid-source","unsafe-source","consent-required","primary-unverified","migration-busy","ownership-lost","retirement-refused","pool-populated","host-login-present","settings-changed"]),P9=U1()(["invalid-options","invalid-auth","invalid-stash","unsafe-path","missing-stash","conflict","lock-timeout","lock-compromised","io"]),O9=U1()(["closed","not-enrolled","invalid-token","unavailable","identity-changed","identity-unasserted","insufficient-validity","invalid-material","not-active","route-unavailable","route-declined","no-receipt","unsafe-file","invalid-state","wrong-consumer","roster-busy","host-slot-login","host-slot-placeholder","placeholder-refresh","invalid-order"]),o8={name:new Set(["Error","TypeError","SyntaxError","RangeError","AggregateError","AbortError","PrivateFileError","PrivateFilesUnavailableError","DiagnosticFileError","NativeRuntimeError","NativeAuthorityError","NativeMigrationError","NativeMigrationSourceError","NativeHostAuthError","NativeHostAuthWriteError","NativePiAuthSlotError","NativeCustodyError","NativeVaultActivationError","NativeVaultEnrollmentError","SetupCommandError","HostNotEnrolledError","ProcessFenceViolationError","ProcessInspectionError","LockOwnershipError","LockContentionError","ClaustrumConsumerError","ClaustrumCredentialError"]),code:new Set([...L9,...N9,...C9,...P9,...O9,"EACCES","EPERM","ENOENT","EEXIST","ENOTDIR","EISDIR","ENOTEMPTY","EBUSY","ETIMEDOUT","ECONNREFUSED","ECONNRESET","ECANCELED","EIO","EINVAL","ENOTSUP","ENOSYS","ENOMEM","EMFILE","ENFILE","ELOOP","EROFS","EXDEV","ENAMETOOLONG","EBADF","EPIPE","ENOSPC","EINTR","ERR_INVALID_ARG_TYPE","ERR_INVALID_ARG_VALUE","ERR_OUT_OF_RANGE","ERR_FEATURE_UNAVAILABLE_ON_PLATFORM","ERR_PRIVATE_FILES_SECURITY","ERR_PRIVATE_FILES_UNAVAILABLE","ERR_PRIVATE_FILE","ERR_DIAGNOSTICS_DIRECTORY_UNAVAILABLE","ERR_DIAGNOSTICS_NOT_DIRECTORY","ERR_DIAGNOSTICS_NOT_OWNER_ONLY","unsafe-runtime","invalid-runtime","runtime-io","runtime-conflict","publication-refused","invalid-journal","source-io","source-changed","source-too-large","write-io"]),stage:new Set(["safe-parent","verify","directory","read","create","directory-create","rename","stage-directory","stage-create","before-rename","published-callback","published-verify","directory-sync-unsupported"]),reason:new Set(["wrong-owner","extra-ace","not-protected","null-dacl","empty-dacl","reparse-point","unsupported-filesystem","native-addon-unavailable","unsafe-ancestor","wrong-kind","io-error","mode","writable-by-others"])},t8=new Set([...L9.flatMap(($)=>$==="no-read-grant"||$==="grant-reaches-nothing"?Y2.map((Z)=>new $0($,Z).message):[new $0($).message]),...N9.map(($)=>new E0($).message),...C9.map(($)=>new a8($).message),...P9.map(($)=>new s8($).message),...O9.map(($)=>`Native custody refused: ${$}`),D9,"Disconnect from the vault first.","Native account changes require offline setup without OPENCODE_AUTH_CONTENT","Local login cannot be verified while OPENCODE_AUTH_CONTENT is set","Authentication failed","API fallback base URL must be an http(s) URL without embedded credentials","API key is required","Vault routes cannot be replaced with a local API key","Cloudflare API token is required","Cloudflare account ID is required","Relay Worker URL is required","--claustrum and --no-claustrum cannot be used together.","Setup requires a TTY or --yes.","Multiple OpenCode generations found. Choose --opencode=1|2|both before running noninteractive setup.","Claustrum is not available. Start ck or use --no-claustrum for local sign-in.","Claude sign-in did not establish an account UUID","Native setup storage paths overlap between selected hosts","Anthropic account storage paths overlap; migration requires separate files","Anthropic account migration is required. Stop OpenCode, LiteCode and Pi, then run npx @cortexkit/opencode-anthropic-auth setup","Anthropic account migration is incomplete; resume setup","Anthropic account migration journal is invalid","Anthropic account migration journal changed","Anthropic runtime state is invalid","Anthropic runtime file is not owner-only regular storage","Anthropic runtime storage is unavailable","Anthropic runtime observation is older than persisted state","Anthropic runtime publication was refused","Claustrum connection failed; start ck and rerun setup.","Claustrum enrollment refused; inspect its status with ck before rerunning setup.","Invalid enrollment request id.","This Claustrum vault does not support connecting plugins yet, so setup cannot connect to it. Run setup without --claustrum to use local accounts.",'This Claustrum vault is too old to connect plugins. Run ck upgrade to move to Claustrum v0.2.0 or newer (read "Upgrading from v0.1.3" in its release notes first), or run setup without --claustrum to use local accounts.',"OAuth metadata read failed"]),e8=Object.values(f0).join("|"),$6="Claustrum enrollment did not complete. Inspect and approve with ck, then rerun setup.",Z6=[new RegExp(`^Claustrum approval is still pending\\. In another terminal, run: ck auth enroll approve --request-id [A-Za-z0-9_-]{1,128} --name (?:${e8}) and then rerun setup\\.$`),/^The vault never created the enrollment request \(last error: [a-z][a-z0-9_]{0,63}\)\. Check that ck is running, then rerun setup\.$/],J6=new Set(["opencode","litecode","opencode2","pi","host"]),z6=64,X6=256,G6=4096,W2=65536,Q6=4096,W6=3,M9="[output beyond the diagnostic limit omitted]",H6="[output withheld: no line break within the inspected window]",Y6="[detail withheld: the known credentials could not be read safely]",q2=new TextEncoder,_9=new TextDecoder;function g($,Z){let J=Object.getOwnPropertyDescriptor($,Z);return J!==void 0&&"value"in J?J.value:void 0}function q0($){return $!==null&&(typeof $==="object"||typeof $==="function")&&!U2.isProxy($)}function K2($,Z){if(!q0($)||!Array.isArray($))return;let J=g($,"length");if(typeof J!=="number"||J>Z)return;let z=[];for(let X=0;X<J;X+=1){let G=Object.getOwnPropertyDescriptor($,String(X));if(G===void 0||!("value"in G))return;z.push(G.value)}return z}function U6($){let Z=K2($,z6);if(Z===void 0||Z.length===0)return;let J=[];for(let z of Z){if(!q0(z))return;let X=g(z,"pid"),G=g(z,"command");if(typeof X!=="number"||!Number.isSafeInteger(X)||X<0)return;if(typeof G!=="string"||!J6.has(G.toLowerCase()))return;J.push({pid:X,command:G})}return J}function j2($){try{if(!q0($))return;if(g($,"name")==="ProcessInspectionError")return"";let Z=g($,"message");if(typeof Z!=="string")return;if(g($,"name")==="HostNotEnrolledError"&&Z===$6)return Z;if(t8.has(Z))return Z;if(g($,"name")==="NativeVaultActivationError"&&g($,"code")==="no-read-grant"){let X=g($,"host"),G=g($,"approvedName");if((X==="opencode"||X==="pi")&&typeof G==="string"){let Q=new $0("no-read-grant",X,G).message;if(Z===Q)return Q}}if(Z.startsWith("Unknown setup argument: "))return Z;if(g($,"name")==="HostNotEnrolledError"&&Z6.some((X)=>X.test(Z)))return Z;if(g($,"code")==="ERR_PRIVATE_FILES_UNAVAILABLE")return D9;let J=g($,"status");if(typeof J==="number"&&Number.isInteger(J)&&J>=100&&J<=599&&Z===`OAuth metadata read failed: ${J}`)return Z;let z=U6(g($,"activeHosts"));if(z){let X=new Q2(z).message;if(Z===X)return X}}catch{}return}function I9($){try{if(!q0($))return;let Z=K2(n8($),Y2.length);if(Z===void 0)return;let J=[];for(let z of Z){if(!q0(z))return;let X=Y2.find((Q)=>Q===g(z,"host")),G=g(z,"outcome");if(X===void 0||!r8.has(G))return;J.push({host:X,outcome:G})}return J}catch{return}}function q6($,Z=[]){try{let J=new Set,z=K2(Z,X6);if(z===void 0)return;for(let G of z){if(typeof G!=="string")return;if(G!=="")J.add(G)}if(!q0($))return;let X=Reflect.ownKeys($);if(X.length>G6)return;for(let G of X){if(typeof G!=="string"||!l8(G))continue;let Q=Object.getOwnPropertyDescriptor($,G);if(Q===void 0)continue;if(!("value"in Q))return;if(Q.value===void 0||Q.value==="")continue;if(typeof Q.value!=="string")return;J.add(Q.value)}return[...J]}catch{return}}function K6($,Z){let J=q2.encode($);if(J.length<=Z)return $;let z=Math.max(0,Z);while(z>0&&((J[z]??0)&192)===128)z-=1;return _9.decode(J.subarray(0,z))}function j6($,Z){let J=q2.encode($);if(J.length<=Z)return $;let z=J.length-Math.max(0,Z);while(z<J.length&&((J[z]??0)&192)===128)z+=1;return _9.decode(J.subarray(z))}function M6($,Z,J){let z=$,X=!1;if($.length>W2){if(X=!0,J==="tail"){let H=$.indexOf(`
17
17
  `,$.length-W2);z=H===-1?"":$.slice(H+1)}else{let H=$.lastIndexOf(`
18
- `,W2);z=H===-1?"":$.slice(0,H)}if(z==="")return[H6]}let G=Z.redactText(z).split(/\r?\n/);if(G.length>1&&G[G.length-1]==="")G.pop();if(J==="tail")G.reverse();let Q=[],W=Q6;for(let H of G){let U=q2.encode(H).length+1;if(U<=W){Q.push(H),W-=U;continue}if(Q.length===0)Q.push(J==="tail"?j6(H,W-1):K6(H,W-1));X=!0;break}if(J==="tail")Q.reverse();if(X)if(J==="tail")Q.unshift(j9);else Q.push(j9);return Q}function I9($){let Z=$;for(let J=0;Z!==null&&J<8;J+=1){if(U2.isProxy(Z))break;let z=v(Z,"name");if(typeof z==="string")return z;Z=Object.getPrototypeOf(Z)}return"object"}function M9($,Z){let J={};if(Z===void 0)return J;try{if(!q0($))return J;let z=F9(Z);try{for(let X of["name","code","stage","reason"]){let G=X==="name"?I9($):v($,X);if(typeof G==="string"&&o8[X].has(G)&&z.redactText(G)===G)J[X]=G}}finally{z.dispose()}}catch{return{}}return J}function V6($){if(!q0($))return;let Z=v($,"step"),J=v($,"exitCode"),z=v($,"signal"),X=v($,"stderrTail");if(typeof Z!=="string"||Z.length===0||!(J===null||typeof J==="number"&&Number.isInteger(J))||!(z===null||typeof z==="string")||typeof X!=="string")return;return{step:Z,exitCode:J,signal:z,stderrTail:X}}function A9($,Z){if($===null||typeof $!=="object"&&typeof $!=="function")return[`thrown ${typeof $}: ${String($)}`];if(U2.isProxy($))return["thrown proxy (not inspected)"];let J=[],z=I9($),X=v($,"message");J.push(typeof X==="string"?`${z}: ${X}`:`${z} (no message)`);let G=v($,"code");if(typeof G==="string"||typeof G==="number")J.push(`code: ${G}`);let Q=v($,"stack");if(typeof Q==="string")J.push(Q);let W=v($,"cause");if(W!==void 0)if(Z>=W6)J.push("caused by: [not described]");else J.push("caused by:",...A9(W,Z+1));return J}function V9($,Z){let J=v($,Z);return typeof J==="string"&&J!==""?J:void 0}function F6($){if(!q0($))return;let Z=V9($,"XDG_STATE_HOME"),J=V9($,"HOME"),z=Z&&K9(Z)?Z:H2(J&&K9(J)?J:w8(),".local","state");return H2(z,"cortexkit","anthropic-auth","diagnostics")}async function B6($,Z,J,z={}){let X=(G)=>({error:{name:"DiagnosticFileError",code:G}});try{let G=F6($);if(G===void 0)return X("ERR_DIAGNOSTICS_DIRECTORY_UNAVAILABLE");if(!await c8(G,z)){await v8(G,{recursive:!0,mode:448});let H=await h8(G);if(!H.isDirectory())return X("ERR_DIAGNOSTICS_NOT_DIRECTORY");if(!await d8(G,()=>(H.mode&63)===0&&H.uid===process.getuid?.(),z))return X("ERR_DIAGNOSTICS_NOT_OWNER_ONLY")}let Q=H2(G,`${Z}-${Date.now()}-${process.pid}-${y8()}.log`);if(await u8(Q,J,z))return{path:Q};let W=await m8(Q,h1.O_WRONLY|h1.O_CREAT|h1.O_EXCL|(h1.O_NOFOLLOW??0),384);try{await W.writeFile(J,"utf8")}finally{await W.close()}return{path:Q}}catch(G){return{error:G}}}async function D6($,Z,J,z,X,G,Q,W={}){let H,U=q6(J,z);if(U===void 0)H=[Y6];else try{let P=F9(U);try{let{text:C,keep:D}=G();H=M6(C,P,D)}finally{P.dispose()}}catch{H=["[failure detail could not be recorded]"]}let q=i8[$],K=p8("error","cli",`${q} failed`,{stage:$,code:Z,...X}),F=await B6(J,$,`${[K,...H].join(`
18
+ `,W2);z=H===-1?"":$.slice(0,H)}if(z==="")return[H6]}let G=Z.redactText(z).split(/\r?\n/);if(G.length>1&&G[G.length-1]==="")G.pop();if(J==="tail")G.reverse();let Q=[],W=Q6;for(let H of G){let U=q2.encode(H).length+1;if(U<=W){Q.push(H),W-=U;continue}if(Q.length===0)Q.push(J==="tail"?j6(H,W-1):K6(H,W-1));X=!0;break}if(J==="tail")Q.reverse();if(X)if(J==="tail")Q.unshift(M9);else Q.push(M9);return Q}function A9($){let Z=$;for(let J=0;Z!==null&&J<8;J+=1){if(U2.isProxy(Z))break;let z=g(Z,"name");if(typeof z==="string")return z;Z=Object.getPrototypeOf(Z)}return"object"}function V9($,Z){let J={};if(Z===void 0)return J;try{if(!q0($))return J;let z=B9(Z);try{for(let X of["name","code","stage","reason"]){let G=X==="name"?A9($):g($,X);if(typeof G==="string"&&o8[X].has(G)&&z.redactText(G)===G)J[X]=G}}finally{z.dispose()}}catch{return{}}return J}function V6($){if(!q0($))return;let Z=g($,"step"),J=g($,"exitCode"),z=g($,"signal"),X=g($,"stderrTail");if(typeof Z!=="string"||Z.length===0||!(J===null||typeof J==="number"&&Number.isInteger(J))||!(z===null||typeof z==="string")||typeof X!=="string")return;return{step:Z,exitCode:J,signal:z,stderrTail:X}}function R9($,Z){if($===null||typeof $!=="object"&&typeof $!=="function")return[`thrown ${typeof $}: ${String($)}`];if(U2.isProxy($))return["thrown proxy (not inspected)"];let J=[],z=A9($),X=g($,"message");J.push(typeof X==="string"?`${z}: ${X}`:`${z} (no message)`);let G=g($,"code");if(typeof G==="string"||typeof G==="number")J.push(`code: ${G}`);let Q=g($,"stack");if(typeof Q==="string")J.push(Q);let W=g($,"cause");if(W!==void 0)if(Z>=W6)J.push("caused by: [not described]");else J.push("caused by:",...R9(W,Z+1));return J}function F9($,Z){let J=g($,Z);return typeof J==="string"&&J!==""?J:void 0}function F6($){if(!q0($))return;let Z=F9($,"XDG_STATE_HOME"),J=F9($,"HOME"),z=Z&&j9(Z)?Z:H2(J&&j9(J)?J:w8(),".local","state");return H2(z,"cortexkit","anthropic-auth","diagnostics")}async function B6($,Z,J,z={}){let X=(G)=>({error:{name:"DiagnosticFileError",code:G}});try{let G=F6($);if(G===void 0)return X("ERR_DIAGNOSTICS_DIRECTORY_UNAVAILABLE");if(!await c8(G,z)){await v8(G,{recursive:!0,mode:448});let H=await h8(G);if(!H.isDirectory())return X("ERR_DIAGNOSTICS_NOT_DIRECTORY");if(!await d8(G,()=>(H.mode&63)===0&&H.uid===process.getuid?.(),z))return X("ERR_DIAGNOSTICS_NOT_OWNER_ONLY")}let Q=H2(G,`${Z}-${Date.now()}-${process.pid}-${y8()}.log`);if(await u8(Q,J,z))return{path:Q};let W=await m8(Q,v1.O_WRONLY|v1.O_CREAT|v1.O_EXCL|(v1.O_NOFOLLOW??0),384);try{await W.writeFile(J,"utf8")}finally{await W.close()}return{path:Q}}catch(G){return{error:G}}}async function D6($,Z,J,z,X,G,Q,W={}){let H,U=q6(J,z);if(U===void 0)H=[Y6];else try{let P=B9(U);try{let{text:C,keep:D}=G();H=M6(C,P,D)}finally{P.dispose()}}catch{H=["[failure detail could not be recorded]"]}let q=i8[$],K=p8("error","cli",`${q} failed`,{stage:$,code:Z,...X}),B=await B6(J,$,`${[K,...H].join(`
19
19
  `)}
20
- `,W.ownership),B=F.path;if(B===void 0){let P={error:M9(Q,U),saveError:M9(F.error,U)};try{(W.stderr??((D)=>process.stderr.write(D)))(`CLI failure metadata: ${JSON.stringify(P)}
21
- `)}catch{}}return B===void 0?`${q} failed (${Z}). Details could not be saved to a private diagnostics file.`:`${q} failed (${Z}). Details were written to ${B}`}async function q1($,Z,J,z=[],X={}){let G=j2(Z);if(G!==void 0)return G;let Q=V6(Z);return D6($,`${$}/unexpected-error`,J,z,{},()=>({text:[...Q?[`step: ${Q.step}`,`exitCode: ${Q.exitCode}`,`signal: ${Q.signal}`]:[],...A9(Z,0),...Q?[`stderrTail:
20
+ `,W.ownership),F=B.path;if(F===void 0){let P={error:V9(Q,U),saveError:V9(B.error,U)};try{(W.stderr??((D)=>process.stderr.write(D)))(`CLI failure metadata: ${JSON.stringify(P)}
21
+ `)}catch{}}return F===void 0?`${q} failed (${Z}). Details could not be saved to a private diagnostics file.`:`${q} failed (${Z}). Details were written to ${F}`}async function q1($,Z,J,z=[],X={}){let G=j2(Z);if(G!==void 0)return G;let Q=V6(Z);return D6($,`${$}/unexpected-error`,J,z,{},()=>({text:[...Q?[`step: ${Q.step}`,`exitCode: ${Q.exitCode}`,`signal: ${Q.signal}`]:[],...R9(Z,0),...Q?[`stderrTail:
22
22
  ${Q.stderrTail}`]:[]].join(`
23
- `),keep:"head"}),Z,X)}import{createProcessFence as c5,NativePiAuthSlotError as p5,openNativePiAuthSlot as d5,publishNativeEmptyInit as l5,readNativeEnrollmentMode as a5,releaseNativeMigrationPreflight as s5,requireNoSupervisedAuthContentSnapshot as n5,runSetup as i5}from"@cortexkit/anthropic-auth-core";import{AsyncLocalStorage as L6}from"node:async_hooks";var KG=new L6;var R9=Object.freeze({ttlMs:1e4,timeoutMs:15000,retryMs:50,renew:!0});var i0="commonAuthPool";var c6=Object.freeze(["version","accounts",i0]);var A={hide:"\x1B[?25l",show:"\x1B[?25h",up:($=1)=>`\x1B[${$}A`,clearLine:"\x1B[2K",clearScreen:"\x1B[2J",moveTo:($,Z)=>`\x1B[${$};${Z}H`,cyan:"\x1B[36m",green:"\x1B[32m",red:"\x1B[31m",dim:"\x1B[2m",reset:"\x1B[0m"};function L2($){let Z=$.toString(),J=[];for(let z=0;z<Z.length;){let X=Z[z];if(X==="\x1B"){let G=Z.slice(z,z+3),Q=G[1]==="["||G[1]==="O"?G[2]:void 0;if(Q&&"ABCD".includes(Q)){let H={A:"up",B:"down",C:"right",D:"left"}[Q];if(H)J.push(H);z+=3}else if(z+1===Z.length){if(z===0)J.push("escape-start");z+=1}else if((Z[z+1]==="["||Z[z+1]==="O")&&z+2>=Z.length)break;else z+=1;continue}if(X==="\r"||X===`
24
- `)J.push("enter");else if(X==="\x03")J.push("escape");else if(X&&X>=" ")J.push("char");z+=1}return J}var v9=`${String.fromCharCode(27)}\\[[0-9;]*m`,p6=new RegExp(v9,"g"),d6=new RegExp(`^${v9}`);function m9($){return $.replace(p6,"")}function g0($,Z){if(Z<=0)return"";if(m9($).length<=Z)return $;let J=Z>=3?"...":".".repeat(Z),z=Math.max(0,Z-J.length),X="",G=0,Q=0;while(G<$.length&&Q<z){if($[G]==="\x1B"){let W=$.slice(G).match(d6);if(W){X+=W[0],G+=W[0].length;continue}}X+=$[G],G+=1,Q+=1}return X.includes("\x1B[")?`${X}${A.reset}${J}`:X+J}function o0($){return $.input.isTTY===!0}var l6=50;function a6($){if($==="red")return A.red;if($==="cyan")return A.cyan;return""}async function p1($,Z,J){if(!o0($))throw Error("Interactive select requires a TTY terminal");if(Z.length===0)throw Error("No menu items provided");let{input:z,output:X,signals:G}=$,Q=0,W=null,H=!1,U=0,q=()=>{let K=X.columns??80,F=X.rows??24,B=U;if(J.clearScreen)X.write(A.clearScreen+A.moveTo(1,1));else if(B>0)X.write(A.up(B));let P=0,C=(j)=>{X.write(`${A.clearLine}${j}
25
- `),P+=1},D=J.lines??[],R=1+(J.subtitle?3:0)+D.length+(D.length?1:0),S=Math.max(1,Math.min(Z.length,F-R-2-1)),y=Math.max(0,Math.min(Q-Math.floor(S/2),Math.max(0,Z.length-S))),N=Z.slice(y,y+S);if(C(`${A.dim}┌ ${A.reset}${g0(J.message,Math.max(1,K-4))}`),J.subtitle)C(`${A.dim}│${A.reset}`),C(`${A.cyan}◆${A.reset} ${g0(J.subtitle,Math.max(1,K-4))}`),C("");for(let j of D)C(`${A.cyan}│${A.reset} ${g0(j,Math.max(1,K-4))}`);if(D.length)C(`${A.cyan}│${A.reset}`);for(let j=0;j<N.length;j++){let M=N[j];if(!M)continue;let b=y+j===Q,g=a6(M.color),k=g?`${b?"":A.dim}${g}${M.label}${A.reset}`:b?M.label:`${A.dim}${M.label}${A.reset}`;if(M.hint)k+=` ${A.dim}${M.hint}${A.reset}`;k=g0(k,Math.max(1,K-8)),C(b?`${A.cyan}│${A.reset} ${A.green}●${A.reset} ${k}`:`${A.cyan}│${A.reset} ${A.dim}○${A.reset} ${k}`)}let Y=N.length<Z.length?` (${y+1}-${y+N.length}/${Z.length})`:"";C(`${A.cyan}│${A.reset} ${A.dim}${g0(`Up/Down to select | Enter: confirm | Esc: back${Y}`,Math.max(1,K-6))}${A.reset}`),C(`${A.cyan}└${A.reset}`);for(let j=P;j<B;j++)C("");U=P};return new Promise((K)=>{let F=z.isRaw??!1,B=()=>{if(H)return;if(H=!0,W)clearTimeout(W);z.removeListener("data",D);try{z.setRawMode(F),z.pause(),X.write(A.show)}catch{}G?.removeListener("SIGINT",C),G?.removeListener("SIGTERM",C)},P=(R)=>{B(),K(R)},C=()=>P(null),D=(R)=>{for(let S of L2(R)){if(H)break;if(W)clearTimeout(W),W=null;switch(S){case"up":Q=(Q-1+Z.length)%Z.length,q();break;case"down":Q=(Q+1)%Z.length,q();break;case"enter":P(Z[Q]?.value??null);break;case"escape":P(null);break;case"escape-start":W=setTimeout(()=>P(null),l6);break;default:break}}};G?.once("SIGINT",C),G?.once("SIGTERM",C);try{z.setRawMode(!0)}catch{B(),K(null);return}z.resume(),X.write(A.hide),q(),z.on("data",D)})}async function d1($,Z,J=!1){if(!o0($))return!1;return await p1($,J?[{label:"Yes",value:!0},{label:"No",value:!1}]:[{label:"No",value:!1},{label:"Yes",value:!0}],{message:Z})??!1}import{execFile as t6}from"node:child_process";import{promisify as e6}from"node:util";var $5=e6(t6),w9={async run($,Z,J={}){try{let z=J.env?{...process.env,...J.env}:process.env,{stdout:X,stderr:G}=await $5($,Z,{env:z,timeout:J.timeoutMs??15000,maxBuffer:10485760});return{exitCode:0,stdout:typeof X==="string"?X:String(X),stderr:typeof G==="string"?G:String(G)}}catch(z){let X=z;return{exitCode:typeof X?.code==="number"?X.code:1,signal:typeof X?.signal==="string"?X.signal:null,...typeof X?.syscall==="string"&&(X.syscall==="spawn"||X.syscall.startsWith("spawn "))?{spawnError:!0}:{},stdout:typeof X?.stdout==="string"?X.stdout:X?.stdout!=null?String(X.stdout):"",stderr:typeof X?.stderr==="string"?X.stderr:X?.stderr!=null?String(X.stderr):String(X?.message??z)}}}};import{styleText as r1}from"node:util";import{stdout as B5,stdin as D5}from"node:process";import N5 from"node:readline";var u9=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(Z)=>{let J=0;$.lastIndex=0;while($.test(Z))J+=1;return Z.length-J}})(),c9=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},p9=($)=>{return $===8987||$===9001||$>=12272&&$<=12287||$>=12289&&$<=12350||$>=12441&&$<=12543||$>=12549&&$<=12591||$>=12593&&$<=12686||$>=12688&&$<=12771||$>=12783&&$<=12830||$>=12832&&$<=12871||$>=12880&&$<=19903||$>=65040&&$<=65049||$>=65072&&$<=65106||$>=65108&&$<=65126||$>=65128&&$<=65131||$>=127488&&$<=127490||$>=127504&&$<=127547||$>=127552&&$<=127560||$>=131072&&$<=196605||$>=196608&&$<=262141};var Z5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,J5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,d9=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,z5=/\t{1,1000}/y,l9=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,X5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,G5=/\p{M}+/gu,Q5={limit:1/0,ellipsis:""},a9=($,Z={},J={})=>{let z=Z.limit??1/0,X=Z.ellipsis??"",G=Z?.ellipsisWidth??(X?a9(X,Q5,J).width:0),Q=0,W=J.controlWidth??0,H=J.tabWidth??8,U=J.emojiWidth??2,q=2,K=J.regularWidth??1,F=J.wideWidth??2,B=[[X5,K],[Z5,0],[J5,W],[z5,H],[l9,U],[d9,F]],P=0,C=0,D=$.length,R=0,S=!1,y=D,N=Math.max(0,z-G),Y=0,j=0,M=0,b=0;$:while(!0){if(j>Y||C>=D&&C>P){let g=$.slice(Y,j)||$.slice(P,C);R=0;for(let k of g.replaceAll(G5,"")){let m=k.codePointAt(0)||0;if(c9(m))b=2;else if(p9(m))b=F;else b=K;if(M+b>N)y=Math.min(y,Math.max(Y,P)+R);if(M+b>z){S=!0;break $}R+=k.length,M+=b}Y=j=0}if(C>=D)break $;for(let g=0,k=B.length;g<k;g++){let[m,n]=B[g];if(m.lastIndex=C,m.test($)){if(R=m===d9?u9($.slice(C,m.lastIndex)):m===l9?1:m.lastIndex-C,b=R*n,M+b>N)y=Math.min(y,C+Math.floor((N-M)/n));if(M+b>z){S=!0;break $}M+=b,Y=P,j=C,C=P=m.lastIndex;continue $}}C+=1}return{width:S?N:M,index:S?y:D,truncated:S,ellipsed:S&&z>=G}},s9=a9;var W5={limit:1/0,ellipsis:"",ellipsisWidth:0},H5=($,Z={})=>{return s9($,W5,Z).width},G0=H5;var l1="\x1B",t9="›",Y5=39,P2="\x07",e9="[",U5="]",$4="m",O2=`${U5}8;;`,n9=new RegExp(`(?:\\${e9}(?<code>\\d+)m|\\${O2}(?<uri>.*)${P2})`,"y"),i9=($)=>{if($>=30&&$<=37)return 39;if($>=90&&$<=97)return 39;if($>=40&&$<=47)return 49;if($>=100&&$<=107)return 49;if($===1||$===2)return 22;if($===3)return 23;if($===4)return 24;if($===7)return 27;if($===8)return 28;if($===9)return 29;if($===0)return 0;return},r9=($)=>`${l1}${e9}${$}${$4}`,o9=($)=>`${l1}${O2}${$}${P2}`,C2=($,Z,J)=>{let z=Z[Symbol.iterator](),X=!1,G=!1,Q=$.at(-1),W=Q===void 0?0:G0(Q),H=z.next(),U=z.next(),q=0;while(!H.done){let K=H.value,F=G0(K);if(W+F<=J)$[$.length-1]+=K;else $.push(K),W=0;if(K===l1||K===t9)X=!0,G=Z.startsWith(O2,q+1);if(X){if(G){if(K===P2)X=!1,G=!1}else if(K===$4)X=!1}else if(W+=F,W===J&&!U.done)$.push(""),W=0;H=U,U=z.next(),q+=K.length}if(Q=$.at(-1),!W&&Q!==void 0&&Q.length&&$.length>1)$[$.length-2]+=$.pop()},q5=($)=>{let Z=$.split(" "),J=Z.length;while(J){if(G0(Z[J-1]))break;J--}if(J===Z.length)return $;return Z.slice(0,J).join(" ")+Z.slice(J).join("")},K5=($,Z,J={})=>{if(J.trim!==!1&&$.trim()==="")return"";let z="",X,G,Q=$.split(" "),W=[""],H=0;for(let K=0;K<Q.length;K++){let F=Q[K];if(J.trim!==!1){let P=W.at(-1)??"",C=P.trimStart();if(P.length!==C.length)W[W.length-1]=C,H=G0(C)}if(K!==0){if(H>=Z&&(J.wordWrap===!1||J.trim===!1))W.push(""),H=0;if(H||J.trim===!1)W[W.length-1]+=" ",H++}let B=G0(F);if(J.hard&&B>Z){let P=Z-H,C=1+Math.floor((B-P-1)/Z);if(Math.floor((B-1)/Z)<C)W.push("");C2(W,F,Z),H=G0(W.at(-1)??"");continue}if(H+B>Z&&H&&B){if(J.wordWrap===!1&&H<Z){C2(W,F,Z),H=G0(W.at(-1)??"");continue}W.push(""),H=0}if(H+B>Z&&J.wordWrap===!1){C2(W,F,Z),H=G0(W.at(-1)??"");continue}W[W.length-1]+=F,H+=B}if(J.trim!==!1)W=W.map((K)=>q5(K));let U=W.join(`
26
- `),q=!1;for(let K=0;K<U.length;K++){let F=U[K];if(z+=F,!q){if(q=F>="\uD800"&&F<="\uDBFF",q)continue}else q=!1;if(F===l1||F===t9){n9.lastIndex=K+1;let P=n9.exec(U)?.groups;if(P?.code!==void 0){let C=Number.parseFloat(P.code);X=C===Y5?void 0:C}else if(P?.uri!==void 0)G=P.uri.length===0?void 0:P.uri}if(U[K+1]===`
27
- `){if(G)z+=o9("");let B=X?i9(X):void 0;if(X&&B)z+=r9(B)}else if(F===`
28
- `){if(X&&i9(X))z+=r9(X);if(G)z+=o9(G)}}return z},j5=/\r?\n/;function a1($,Z,J){return String($).normalize().split(j5).map((z)=>K5(z,Z,J)).join(`
29
- `)}var o=X4(I2(),1);function R2($,Z,J){if(!J.some((Q)=>!Q.disabled))return $;let z=$+Z,X=Math.max(J.length-1,0),G=z<0?X:z>X?0:z;return J[G]?.disabled?R2(G,Z<0?-1:1,J):G}function s1($,Z,J,z){let X=z.split(`
30
- `),G=0,Q=$;for(let H of X){if(Q<=H.length)break;Q-=H.length+1,G++}for(G=Math.max(0,Math.min(X.length-1,G+J)),Q=Math.min(Q,X[G].length)+Z;Q<0&&G>0;)G--,Q+=X[G].length+1;for(;Q>X[G].length&&G<X.length-1;)Q-=X[G].length+1,G++;Q=Math.max(0,Math.min(X[G].length,Q));let W=0;for(let H=0;H<G;H++)W+=X[H].length+1;return W+Q}var L5=["up","down","left","right","space","enter","cancel"],C5=["January","February","March","April","May","June","July","August","September","October","November","December"],$0={actions:new Set(L5),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,accessible:void 0,date:{monthNames:[...C5],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:($,Z)=>`There are only ${$} days in ${Z}`,afterMin:($)=>`Date must be on or after ${$.toISOString().slice(0,10)}`,beforeMax:($)=>`Date must be on or before ${$.toISOString().slice(0,10)}`}}};function P5($){if($!==void 0)return $;if($0.accessible!==void 0)return $0.accessible;let Z=process.env.ACCESSIBLE;return Z!==void 0&&Z!==""&&Z!=="0"&&Z!=="false"}function G4($,Z){if(typeof $=="string")return $0.aliases.get($)===Z;for(let J of $)if(J!==void 0&&G4(J,Z))return!0;return!1}function O5($,Z){if($===Z)return;let J=$.split(`
23
+ `),keep:"head"}),Z,X)}import{createProcessFence as c5,NativePiAuthSlotError as p5,openNativePiAuthSlot as d5,publishNativeEmptyInit as l5,readNativeEnrollmentMode as a5,releaseNativeMigrationPreflight as s5,requireNoSupervisedAuthContentSnapshot as n5,runSetup as i5}from"@cortexkit/anthropic-auth-core";import{AsyncLocalStorage as N6}from"node:async_hooks";var KG=new N6;var S9=Object.freeze({ttlMs:1e4,timeoutMs:15000,retryMs:50,renew:!0});var r0="commonAuthPool";var c6=Object.freeze(["version","accounts",r0]);var A={hide:"\x1B[?25l",show:"\x1B[?25h",up:($=1)=>`\x1B[${$}A`,clearLine:"\x1B[2K",clearScreen:"\x1B[2J",moveTo:($,Z)=>`\x1B[${$};${Z}H`,cyan:"\x1B[36m",green:"\x1B[32m",red:"\x1B[31m",dim:"\x1B[2m",reset:"\x1B[0m"};function N2($){let Z=$.toString(),J=[];for(let z=0;z<Z.length;){let X=Z[z];if(X==="\x1B"){let G=Z.slice(z,z+3),Q=G[1]==="["||G[1]==="O"?G[2]:void 0;if(Q&&"ABCD".includes(Q)){let H={A:"up",B:"down",C:"right",D:"left"}[Q];if(H)J.push(H);z+=3}else if(z+1===Z.length){if(z===0)J.push("escape-start");z+=1}else if((Z[z+1]==="["||Z[z+1]==="O")&&z+2>=Z.length)break;else z+=1;continue}if(X==="\r"||X===`
24
+ `)J.push("enter");else if(X==="\x03")J.push("escape");else if(X&&X>=" ")J.push("char");z+=1}return J}var m9=`${String.fromCharCode(27)}\\[[0-9;]*m`,p6=new RegExp(m9,"g"),d6=new RegExp(`^${m9}`);function w9($){return $.replace(p6,"")}function y0($,Z){if(Z<=0)return"";if(w9($).length<=Z)return $;let J=Z>=3?"...":".".repeat(Z),z=Math.max(0,Z-J.length),X="",G=0,Q=0;while(G<$.length&&Q<z){if($[G]==="\x1B"){let W=$.slice(G).match(d6);if(W){X+=W[0],G+=W[0].length;continue}}X+=$[G],G+=1,Q+=1}return X.includes("\x1B[")?`${X}${A.reset}${J}`:X+J}function t0($){return $.input.isTTY===!0}var l6=50;function a6($){if($==="red")return A.red;if($==="cyan")return A.cyan;return""}async function d1($,Z,J){if(!t0($))throw Error("Interactive select requires a TTY terminal");if(Z.length===0)throw Error("No menu items provided");let{input:z,output:X,signals:G}=$,Q=0,W=null,H=!1,U=0,q=()=>{let K=X.columns??80,B=X.rows??24,F=U;if(J.clearScreen)X.write(A.clearScreen+A.moveTo(1,1));else if(F>0)X.write(A.up(F));let P=0,C=(j)=>{X.write(`${A.clearLine}${j}
25
+ `),P+=1},D=J.lines??[],R=1+(J.subtitle?3:0)+D.length+(D.length?1:0),S=Math.max(1,Math.min(Z.length,B-R-2-1)),h=Math.max(0,Math.min(Q-Math.floor(S/2),Math.max(0,Z.length-S))),L=Z.slice(h,h+S);if(C(`${A.dim}┌ ${A.reset}${y0(J.message,Math.max(1,K-4))}`),J.subtitle)C(`${A.dim}│${A.reset}`),C(`${A.cyan}◆${A.reset} ${y0(J.subtitle,Math.max(1,K-4))}`),C("");for(let j of D)C(`${A.cyan}│${A.reset} ${y0(j,Math.max(1,K-4))}`);if(D.length)C(`${A.cyan}│${A.reset}`);for(let j=0;j<L.length;j++){let M=L[j];if(!M)continue;let b=h+j===Q,x=a6(M.color),k=x?`${b?"":A.dim}${x}${M.label}${A.reset}`:b?M.label:`${A.dim}${M.label}${A.reset}`;if(M.hint)k+=` ${A.dim}${M.hint}${A.reset}`;k=y0(k,Math.max(1,K-8)),C(b?`${A.cyan}│${A.reset} ${A.green}●${A.reset} ${k}`:`${A.cyan}│${A.reset} ${A.dim}○${A.reset} ${k}`)}let Y=L.length<Z.length?` (${h+1}-${h+L.length}/${Z.length})`:"";C(`${A.cyan}│${A.reset} ${A.dim}${y0(`Up/Down to select | Enter: confirm | Esc: back${Y}`,Math.max(1,K-6))}${A.reset}`),C(`${A.cyan}└${A.reset}`);for(let j=P;j<F;j++)C("");U=P};return new Promise((K)=>{let B=z.isRaw??!1,F=()=>{if(H)return;if(H=!0,W)clearTimeout(W);z.removeListener("data",D);try{z.setRawMode(B),z.pause(),X.write(A.show)}catch{}G?.removeListener("SIGINT",C),G?.removeListener("SIGTERM",C)},P=(R)=>{F(),K(R)},C=()=>P(null),D=(R)=>{for(let S of N2(R)){if(H)break;if(W)clearTimeout(W),W=null;switch(S){case"up":Q=(Q-1+Z.length)%Z.length,q();break;case"down":Q=(Q+1)%Z.length,q();break;case"enter":P(Z[Q]?.value??null);break;case"escape":P(null);break;case"escape-start":W=setTimeout(()=>P(null),l6);break;default:break}}};G?.once("SIGINT",C),G?.once("SIGTERM",C);try{z.setRawMode(!0)}catch{F(),K(null);return}z.resume(),X.write(A.hide),q(),z.on("data",D)})}async function l1($,Z,J=!1){if(!t0($))return!1;return await d1($,J?[{label:"Yes",value:!0},{label:"No",value:!1}]:[{label:"No",value:!1},{label:"Yes",value:!0}],{message:Z})??!1}import{execFile as t6}from"node:child_process";import{promisify as e6}from"node:util";var $5=e6(t6),u9={async run($,Z,J={}){try{let z=J.env?{...process.env,...J.env}:process.env,{stdout:X,stderr:G}=await $5($,Z,{env:z,timeout:J.timeoutMs??15000,maxBuffer:10485760});return{exitCode:0,stdout:typeof X==="string"?X:String(X),stderr:typeof G==="string"?G:String(G)}}catch(z){let X=z;return{exitCode:typeof X?.code==="number"?X.code:1,signal:typeof X?.signal==="string"?X.signal:null,...typeof X?.syscall==="string"&&(X.syscall==="spawn"||X.syscall.startsWith("spawn "))?{spawnError:!0}:{},stdout:typeof X?.stdout==="string"?X.stdout:X?.stdout!=null?String(X.stdout):"",stderr:typeof X?.stderr==="string"?X.stderr:X?.stderr!=null?String(X.stderr):String(X?.message??z)}}}};import{styleText as o1}from"node:util";import{stdout as B5,stdin as D5}from"node:process";import L5 from"node:readline";var c9=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(Z)=>{let J=0;$.lastIndex=0;while($.test(Z))J+=1;return Z.length-J}})(),p9=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},d9=($)=>{return $===8987||$===9001||$>=12272&&$<=12287||$>=12289&&$<=12350||$>=12441&&$<=12543||$>=12549&&$<=12591||$>=12593&&$<=12686||$>=12688&&$<=12771||$>=12783&&$<=12830||$>=12832&&$<=12871||$>=12880&&$<=19903||$>=65040&&$<=65049||$>=65072&&$<=65106||$>=65108&&$<=65126||$>=65128&&$<=65131||$>=127488&&$<=127490||$>=127504&&$<=127547||$>=127552&&$<=127560||$>=131072&&$<=196605||$>=196608&&$<=262141};var Z5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,J5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,l9=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,z5=/\t{1,1000}/y,a9=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,X5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,G5=/\p{M}+/gu,Q5={limit:1/0,ellipsis:""},s9=($,Z={},J={})=>{let z=Z.limit??1/0,X=Z.ellipsis??"",G=Z?.ellipsisWidth??(X?s9(X,Q5,J).width:0),Q=0,W=J.controlWidth??0,H=J.tabWidth??8,U=J.emojiWidth??2,q=2,K=J.regularWidth??1,B=J.wideWidth??2,F=[[X5,K],[Z5,0],[J5,W],[z5,H],[a9,U],[l9,B]],P=0,C=0,D=$.length,R=0,S=!1,h=D,L=Math.max(0,z-G),Y=0,j=0,M=0,b=0;$:while(!0){if(j>Y||C>=D&&C>P){let x=$.slice(Y,j)||$.slice(P,C);R=0;for(let k of x.replaceAll(G5,"")){let m=k.codePointAt(0)||0;if(p9(m))b=2;else if(d9(m))b=B;else b=K;if(M+b>L)h=Math.min(h,Math.max(Y,P)+R);if(M+b>z){S=!0;break $}R+=k.length,M+=b}Y=j=0}if(C>=D)break $;for(let x=0,k=F.length;x<k;x++){let[m,n]=F[x];if(m.lastIndex=C,m.test($)){if(R=m===l9?c9($.slice(C,m.lastIndex)):m===a9?1:m.lastIndex-C,b=R*n,M+b>L)h=Math.min(h,C+Math.floor((L-M)/n));if(M+b>z){S=!0;break $}M+=b,Y=P,j=C,C=P=m.lastIndex;continue $}}C+=1}return{width:S?L:M,index:S?h:D,truncated:S,ellipsed:S&&z>=G}},n9=s9;var W5={limit:1/0,ellipsis:"",ellipsisWidth:0},H5=($,Z={})=>{return n9($,W5,Z).width},G0=H5;var a1="\x1B",e9="›",Y5=39,P2="\x07",$4="[",U5="]",Z4="m",O2=`${U5}8;;`,i9=new RegExp(`(?:\\${$4}(?<code>\\d+)m|\\${O2}(?<uri>.*)${P2})`,"y"),r9=($)=>{if($>=30&&$<=37)return 39;if($>=90&&$<=97)return 39;if($>=40&&$<=47)return 49;if($>=100&&$<=107)return 49;if($===1||$===2)return 22;if($===3)return 23;if($===4)return 24;if($===7)return 27;if($===8)return 28;if($===9)return 29;if($===0)return 0;return},o9=($)=>`${a1}${$4}${$}${Z4}`,t9=($)=>`${a1}${O2}${$}${P2}`,C2=($,Z,J)=>{let z=Z[Symbol.iterator](),X=!1,G=!1,Q=$.at(-1),W=Q===void 0?0:G0(Q),H=z.next(),U=z.next(),q=0;while(!H.done){let K=H.value,B=G0(K);if(W+B<=J)$[$.length-1]+=K;else $.push(K),W=0;if(K===a1||K===e9)X=!0,G=Z.startsWith(O2,q+1);if(X){if(G){if(K===P2)X=!1,G=!1}else if(K===Z4)X=!1}else if(W+=B,W===J&&!U.done)$.push(""),W=0;H=U,U=z.next(),q+=K.length}if(Q=$.at(-1),!W&&Q!==void 0&&Q.length&&$.length>1)$[$.length-2]+=$.pop()},q5=($)=>{let Z=$.split(" "),J=Z.length;while(J){if(G0(Z[J-1]))break;J--}if(J===Z.length)return $;return Z.slice(0,J).join(" ")+Z.slice(J).join("")},K5=($,Z,J={})=>{if(J.trim!==!1&&$.trim()==="")return"";let z="",X,G,Q=$.split(" "),W=[""],H=0;for(let K=0;K<Q.length;K++){let B=Q[K];if(J.trim!==!1){let P=W.at(-1)??"",C=P.trimStart();if(P.length!==C.length)W[W.length-1]=C,H=G0(C)}if(K!==0){if(H>=Z&&(J.wordWrap===!1||J.trim===!1))W.push(""),H=0;if(H||J.trim===!1)W[W.length-1]+=" ",H++}let F=G0(B);if(J.hard&&F>Z){let P=Z-H,C=1+Math.floor((F-P-1)/Z);if(Math.floor((F-1)/Z)<C)W.push("");C2(W,B,Z),H=G0(W.at(-1)??"");continue}if(H+F>Z&&H&&F){if(J.wordWrap===!1&&H<Z){C2(W,B,Z),H=G0(W.at(-1)??"");continue}W.push(""),H=0}if(H+F>Z&&J.wordWrap===!1){C2(W,B,Z),H=G0(W.at(-1)??"");continue}W[W.length-1]+=B,H+=F}if(J.trim!==!1)W=W.map((K)=>q5(K));let U=W.join(`
26
+ `),q=!1;for(let K=0;K<U.length;K++){let B=U[K];if(z+=B,!q){if(q=B>="\uD800"&&B<="\uDBFF",q)continue}else q=!1;if(B===a1||B===e9){i9.lastIndex=K+1;let P=i9.exec(U)?.groups;if(P?.code!==void 0){let C=Number.parseFloat(P.code);X=C===Y5?void 0:C}else if(P?.uri!==void 0)G=P.uri.length===0?void 0:P.uri}if(U[K+1]===`
27
+ `){if(G)z+=t9("");let F=X?r9(X):void 0;if(X&&F)z+=o9(F)}else if(B===`
28
+ `){if(X&&r9(X))z+=o9(X);if(G)z+=t9(G)}}return z},j5=/\r?\n/;function s1($,Z,J){return String($).normalize().split(j5).map((z)=>K5(z,Z,J)).join(`
29
+ `)}var o=G4(I2(),1);function R2($,Z,J){if(!J.some((Q)=>!Q.disabled))return $;let z=$+Z,X=Math.max(J.length-1,0),G=z<0?X:z>X?0:z;return J[G]?.disabled?R2(G,Z<0?-1:1,J):G}function n1($,Z,J,z){let X=z.split(`
30
+ `),G=0,Q=$;for(let H of X){if(Q<=H.length)break;Q-=H.length+1,G++}for(G=Math.max(0,Math.min(X.length-1,G+J)),Q=Math.min(Q,X[G].length)+Z;Q<0&&G>0;)G--,Q+=X[G].length+1;for(;Q>X[G].length&&G<X.length-1;)Q-=X[G].length+1,G++;Q=Math.max(0,Math.min(X[G].length,Q));let W=0;for(let H=0;H<G;H++)W+=X[H].length+1;return W+Q}var N5=["up","down","left","right","space","enter","cancel"],C5=["January","February","March","April","May","June","July","August","September","October","November","December"],Z0={actions:new Set(N5),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,accessible:void 0,date:{monthNames:[...C5],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:($,Z)=>`There are only ${$} days in ${Z}`,afterMin:($)=>`Date must be on or after ${$.toISOString().slice(0,10)}`,beforeMax:($)=>`Date must be on or before ${$.toISOString().slice(0,10)}`}}};function P5($){if($!==void 0)return $;if(Z0.accessible!==void 0)return Z0.accessible;let Z=process.env.ACCESSIBLE;return Z!==void 0&&Z!==""&&Z!=="0"&&Z!=="false"}function Q4($,Z){if(typeof $=="string")return Z0.aliases.get($)===Z;for(let J of $)if(J!==void 0&&Q4(J,Z))return!0;return!1}function O5($,Z){if($===Z)return;let J=$.split(`
31
31
  `),z=Z.split(`
32
- `),X=Math.max(J.length,z.length),G=[];for(let Q=0;Q<X;Q++)J[Q]!==z[Q]&&G.push(Q);return{lines:G,numLinesBefore:J.length,numLinesAfter:z.length,numLines:X}}var JY=globalThis.process.platform.startsWith("win"),o1=Symbol("clack:cancel");function t1($){return $===o1}function n1($,Z){let J=$;J.isTTY&&J.setRawMode(Z)}var Q4=($)=>("rows"in $)&&typeof $.rows=="number"?$.rows:20;function W4($,Z){if("~standard"in $){let J=$["~standard"].validate(Z);return J instanceof Promise?J.then((z)=>z.issues?.at(0)?.message):J.issues?.at(0)?.message}return $(Z)}class t0{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";get accessible(){return P5(this.opts.accessible)}constructor($,Z=!0){let{input:J=D5,output:z=B5,render:X,signal:G,...Q}=$;this.opts=Q,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=X.bind(this),this._track=Z,this._abortSignal=G,this.input=J,this.output=z}unsubscribe(){this._subscribers.clear()}setSubscriber($,Z){let J=this._subscribers.get($)??[];J.push(Z),this._subscribers.set($,J)}on($,Z){this.setSubscriber($,{cb:Z})}once($,Z){this.setSubscriber($,{cb:Z,once:!0})}emit($,...Z){let J=this._subscribers.get($)??[],z=[];for(let X of J)X.cb(...Z),X.once&&z.push(()=>J.splice(J.indexOf(X),1));for(let X of z)X()}prompt(){return new Promise(($)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),$(o1);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=N5.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),n1(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(o.cursor.show),this.output.off("resize",this.render),n1(this.input,!1),$(this.value)}),this.once("cancel",()=>{this.output.write(o.cursor.show),this.output.off("resize",this.render),n1(this.input,!1),$(o1)})})}_isActionKey($,Z){return $==="\t"}_shouldSubmit($,Z){return!0}_setValue($){this.value=$,this.emit("value",this.value)}_setUserInput($,Z){this.userInput=$??"",this.emit("userInput",this.userInput),Z&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}async onKeypress($,Z){if(this.state!=="validating"){if(this._track&&Z.name!=="return"&&(Z.name&&this._isActionKey($,Z)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),Z?.name&&(!this._track&&$0.aliases.has(Z.name)&&this.emit("cursor",$0.aliases.get(Z.name)),$0.actions.has(Z.name)&&this.emit("cursor",Z.name)),$&&($.toLowerCase()==="y"||$.toLowerCase()==="n")&&this.emit("confirm",$.toLowerCase()==="y"),this.emit("key",$,Z),Z?.name==="return"&&this._shouldSubmit($,Z)){if(this.opts.validate){let J=W4(this.opts.validate,this.value),z;J instanceof Promise?(this.state="validating",this.render(),z=await J):z=J,z&&(this.error=z instanceof Error?z.message:z,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}G4([$,Z?.name,Z?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
33
- `),n1(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let $=a1(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
34
- `).length-1;this.output.write(o.cursor.move(-999,$*-1))}render(){let $=a1(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if($!==this._prevFrame){if(this.state==="initial")this.output.write(o.cursor.hide);else{let Z=O5(this._prevFrame,$),J=Q4(this.output);if(this.restoreCursor(),Z){let z=Math.max(0,Z.numLinesAfter-J),X=Math.max(0,Z.numLinesBefore-J),G=Z.lines.find((Q)=>Q>=z);if(G===void 0){this._prevFrame=$;return}if(Z.lines.length===1){this.output.write(o.cursor.move(0,G-X)),this.output.write(o.erase.lines(1));let Q=$.split(`
32
+ `),X=Math.max(J.length,z.length),G=[];for(let Q=0;Q<X;Q++)J[Q]!==z[Q]&&G.push(Q);return{lines:G,numLinesBefore:J.length,numLinesAfter:z.length,numLines:X}}var JY=globalThis.process.platform.startsWith("win"),t1=Symbol("clack:cancel");function e1($){return $===t1}function i1($,Z){let J=$;J.isTTY&&J.setRawMode(Z)}var W4=($)=>("rows"in $)&&typeof $.rows=="number"?$.rows:20;function H4($,Z){if("~standard"in $){let J=$["~standard"].validate(Z);return J instanceof Promise?J.then((z)=>z.issues?.at(0)?.message):J.issues?.at(0)?.message}return $(Z)}class e0{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";get accessible(){return P5(this.opts.accessible)}constructor($,Z=!0){let{input:J=D5,output:z=B5,render:X,signal:G,...Q}=$;this.opts=Q,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=X.bind(this),this._track=Z,this._abortSignal=G,this.input=J,this.output=z}unsubscribe(){this._subscribers.clear()}setSubscriber($,Z){let J=this._subscribers.get($)??[];J.push(Z),this._subscribers.set($,J)}on($,Z){this.setSubscriber($,{cb:Z})}once($,Z){this.setSubscriber($,{cb:Z,once:!0})}emit($,...Z){let J=this._subscribers.get($)??[],z=[];for(let X of J)X.cb(...Z),X.once&&z.push(()=>J.splice(J.indexOf(X),1));for(let X of z)X()}prompt(){return new Promise(($)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),$(t1);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=L5.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),i1(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(o.cursor.show),this.output.off("resize",this.render),i1(this.input,!1),$(this.value)}),this.once("cancel",()=>{this.output.write(o.cursor.show),this.output.off("resize",this.render),i1(this.input,!1),$(t1)})})}_isActionKey($,Z){return $==="\t"}_shouldSubmit($,Z){return!0}_setValue($){this.value=$,this.emit("value",this.value)}_setUserInput($,Z){this.userInput=$??"",this.emit("userInput",this.userInput),Z&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}async onKeypress($,Z){if(this.state!=="validating"){if(this._track&&Z.name!=="return"&&(Z.name&&this._isActionKey($,Z)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),Z?.name&&(!this._track&&Z0.aliases.has(Z.name)&&this.emit("cursor",Z0.aliases.get(Z.name)),Z0.actions.has(Z.name)&&this.emit("cursor",Z.name)),$&&($.toLowerCase()==="y"||$.toLowerCase()==="n")&&this.emit("confirm",$.toLowerCase()==="y"),this.emit("key",$,Z),Z?.name==="return"&&this._shouldSubmit($,Z)){if(this.opts.validate){let J=H4(this.opts.validate,this.value),z;J instanceof Promise?(this.state="validating",this.render(),z=await J):z=J,z&&(this.error=z instanceof Error?z.message:z,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Q4([$,Z?.name,Z?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
33
+ `),i1(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let $=s1(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
34
+ `).length-1;this.output.write(o.cursor.move(-999,$*-1))}render(){let $=s1(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if($!==this._prevFrame){if(this.state==="initial")this.output.write(o.cursor.hide);else{let Z=O5(this._prevFrame,$),J=W4(this.output);if(this.restoreCursor(),Z){let z=Math.max(0,Z.numLinesAfter-J),X=Math.max(0,Z.numLinesBefore-J),G=Z.lines.find((Q)=>Q>=z);if(G===void 0){this._prevFrame=$;return}if(Z.lines.length===1){this.output.write(o.cursor.move(0,G-X)),this.output.write(o.erase.lines(1));let Q=$.split(`
35
35
  `);this.output.write(Q[G]),this._prevFrame=$,this.output.write(o.cursor.move(0,Q.length-G-1));return}else if(Z.lines.length>1){if(z<X)G=z;else{let W=G-X;W>0&&this.output.write(o.cursor.move(0,W))}this.output.write(o.erase.down());let Q=$.split(`
36
36
  `).slice(G);this.output.write(Q.join(`
37
- `)),this._prevFrame=$;return}}this.output.write(o.erase.down())}this.output.write($),this.state==="initial"&&(this.state="active"),this._prevFrame=$}}}function _5($,Z){if($===void 0||Z.length===0)return 0;let J=Z.findIndex((z)=>z.value===$);return J!==-1?J:0}function I5($,Z){return(Z.label??String(Z.value)).toLowerCase().includes($.toLowerCase())}function A5($,Z){if(Z)return $?Z:Z[0]}var R5=class extends t0{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#z="";#J;#X;#H;#G;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return r1(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let Z=this.userInput.slice(0,this.cursor),J=this.userInput.slice(this.cursor,this.cursor+1),z=this.userInput.slice(this.cursor+1);return`${Z}${r1("inverse",J)}${z}`}get options(){return typeof this.#X=="function"?this.#X():this.#X}constructor(Z){super(Z),this.#X=Z.options,this.#H=Z.placeholder,this.#G=Z.completeOnTab===!0;let J=this.options;this.filteredOptions=[...J],this.multiple=Z.multiple===!0,this.#J=typeof Z.options=="function"?Z.filter:Z.filter??I5;let z;if(Z.initialValue&&Array.isArray(Z.initialValue)?this.multiple?z=Z.initialValue:z=Z.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(z=[this.options[0]?.value]),z)for(let X of z){let G=J.findIndex((Q)=>Q.value===X);G!==-1&&(this.toggleSelected(X),this.#$=G)}this.focusedValue=this.options[this.#$]?.value,this.on("key",(X,G)=>this.#Z(X,G)),this.on("userInput",(X)=>this.#Y(X))}_isActionKey(Z,J){return Z==="\t"||this.multiple&&this.isNavigating&&J.name==="space"&&Z!==void 0&&Z!==""}#Z(Z,J){let z=J.name==="up",X=J.name==="down",G=J.name==="return",Q=this.userInput===""||this.userInput==="\t",W=this.#H,H=this.options,U=W!==void 0&&W!==""&&H.some((q)=>!q.disabled&&(this.#J?this.#J(W,q):!0));if(J.name==="tab"&&Q&&U){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(W,!0),this.isNavigating=!1;return}if(J.name==="tab"&&this.#G&&!this.multiple&&this.focusedValue!==void 0){let q=String(this.focusedValue);this._clearUserInput(),this._setUserInput(q,!0),this.isNavigating=!1;return}z||X?(this.#$=R2(this.#$,z?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#$]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):G?this.value=A5(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(J.name==="tab"||this.isNavigating&&J.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(Z){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(Z)?this.selectedValues=this.selectedValues.filter((J)=>J!==Z):this.selectedValues=[...this.selectedValues,Z]:this.selectedValues=[Z])}#Y(Z){if(Z!==this.#z){this.#z=Z;let J=this.options;Z&&this.#J?this.filteredOptions=J.filter((G)=>this.#J?.(Z,G)):this.filteredOptions=[...J];let z=_5(this.focusedValue,this.filteredOptions);this.#$=R2(z,0,this.filteredOptions);let X=this.filteredOptions[this.#$];X&&!X.disabled?this.focusedValue=X.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};var S5={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function J4($){return[...$].map((Z)=>S5[Z])}function b5($){let Z=new Intl.DateTimeFormat($,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),J=[],z="/";for(let X of Z)X.type==="literal"?z=X.value.trim()||X.value:(X.type==="year"||X.type==="month"||X.type==="day")&&J.push({type:X.type,len:X.type==="year"?4:2});return{segments:J,separator:z}}function A2($){return Number.parseInt(($||"0").replace(/_/g,"0"),10)||0}function i1($){return{year:A2($.year),month:A2($.month),day:A2($.day)}}function S2($,Z){return new Date($||2001,Z||1,0).getDate()}function H4($){let{year:Z,month:J,day:z}=i1($);if(!Z||Z<0||Z>9999||!J||J<1||J>12||!z||z<1)return;let X=new Date(Date.UTC(Z,J-1,z));if(!(X.getUTCFullYear()!==Z||X.getUTCMonth()!==J-1||X.getUTCDate()!==z))return{year:Z,month:J,day:z}}function z4($){let Z=H4($);return Z?new Date(Date.UTC(Z.year,Z.month-1,Z.day)):void 0}function k5($,Z,J,z){let X=J?{year:J.getUTCFullYear(),month:J.getUTCMonth()+1,day:J.getUTCDate()}:null,G=z?{year:z.getUTCFullYear(),month:z.getUTCMonth()+1,day:z.getUTCDate()}:null;return $==="year"?{min:X?.year??1,max:G?.year??9999}:$==="month"?{min:X&&Z.year===X.year?X.month:1,max:G&&Z.year===G.year?G.month:12}:{min:X&&Z.year===X.year&&Z.month===X.month?X.day:1,max:G&&Z.year===G.year&&Z.month===G.month?G.day:S2(Z.year,Z.month)}}class Y4 extends t0{#$;#z;#J;#X;#H;#G={segmentIndex:0,positionInSegment:0};#Z=!0;#Y=null;inlineError="";get segmentCursor(){return{...this.#G}}get segmentValues(){return{...this.#J}}get segments(){return this.#$}get separator(){return this.#z}get formattedValue(){return this.#K(this.#J)}#K($){return this.#$.map((Z)=>$[Z.type]).join(this.#z)}#W(){this._setUserInput(this.#K(this.#J)),this._setValue(z4(this.#J)??void 0)}constructor($){let Z=$.format?{segments:J4($.format),separator:$.separator??"/"}:b5($.locale),J=$.separator??Z.separator,z=$.format?J4($.format):Z.segments,X=$.initialValue??$.defaultValue,G=X?{year:String(X.getUTCFullYear()).padStart(4,"0"),month:String(X.getUTCMonth()+1).padStart(2,"0"),day:String(X.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},Q=z.map((W)=>G[W.type]).join(J);super({...$,initialUserInput:Q},!1),this.#$=z,this.#z=J,this.#J=G,this.#X=$.minDate,this.#H=$.maxDate,this.#W(),this.on("cursor",(W)=>this.#j(W)),this.on("key",(W,H)=>this.#F(W,H)),this.on("finalize",()=>this.#q($))}#Q(){let $=Math.max(0,Math.min(this.#G.segmentIndex,this.#$.length-1)),Z=this.#$[$];if(Z)return this.#G.positionInSegment=Math.max(0,Math.min(this.#G.positionInSegment,Z.len-1)),{segment:Z,index:$}}#U($){this.inlineError="",this.#Y=null;let Z=this.#Q();Z&&(this.#G.segmentIndex=Math.max(0,Math.min(this.#$.length-1,Z.index+$)),this.#G.positionInSegment=0,this.#Z=!0)}#M($){let Z=this.#Q();if(!Z)return;let{segment:J}=Z,z=this.#J[J.type],X=!z||z.replace(/_/g,"")==="",G=Number.parseInt((z||"0").replace(/_/g,"0"),10)||0,Q=k5(J.type,i1(this.#J),this.#X,this.#H),W;X?W=$===1?Q.min:Q.max:W=Math.max(Math.min(Q.max,G+$),Q.min),this.#J={...this.#J,[J.type]:W.toString().padStart(J.len,"0")},this.#Z=!0,this.#Y=null,this.#W()}#j($){if($)switch($){case"right":return this.#U(1);case"left":return this.#U(-1);case"up":return this.#M(1);case"down":return this.#M(-1)}}#F($,Z){if(Z?.name==="backspace"||Z?.sequence===""||Z?.sequence==="\b"||$===""||$==="\b"){this.inlineError="";let J=this.#Q();if(!J)return;if(!this.#J[J.segment.type].replace(/_/g,"")){this.#U(-1);return}this.#J[J.segment.type]="_".repeat(J.segment.len),this.#Z=!0,this.#G.positionInSegment=0,this.#W();return}if(Z?.name==="tab"){this.inlineError="";let J=this.#Q();if(!J)return;let z=Z.shift?-1:1,X=J.index+z;X>=0&&X<this.#$.length&&(this.#G.segmentIndex=X,this.#G.positionInSegment=0,this.#Z=!0);return}if($&&/^[0-9]$/.test($)){let J=this.#Q();if(!J)return;let{segment:z}=J,X=!this.#J[z.type].replace(/_/g,"");if(this.#Z&&this.#Y!==null&&!X){let F=this.#Y+$,B={...this.#J,[z.type]:F},P=this.#V(B,z);if(P){this.inlineError=P,this.#Y=null,this.#Z=!1;return}this.inlineError="",this.#J[z.type]=F,this.#Y=null,this.#Z=!1,this.#W(),J.index<this.#$.length-1&&(this.#G.segmentIndex=J.index+1,this.#G.positionInSegment=0,this.#Z=!0);return}this.#Z&&!X&&(this.#J[z.type]="_".repeat(z.len),this.#G.positionInSegment=0),this.#Z=!1,this.#Y=null;let G=this.#J[z.type],Q=G.indexOf("_"),W=Q>=0?Q:Math.min(this.#G.positionInSegment,z.len-1);if(W<0||W>=z.len)return;let H=G.slice(0,W)+$+G.slice(W+1),U=!1;if(W===0&&G==="__"&&(z.type==="month"||z.type==="day")){let F=Number.parseInt($,10);H=`0${$}`,U=F<=(z.type==="month"?1:2)}if(z.type==="year"&&(H=(G.replace(/_/g,"")+$).padStart(z.len,"_")),!H.includes("_")){let F={...this.#J,[z.type]:H},B=this.#V(F,z);if(B){this.inlineError=B;return}}this.inlineError="",this.#J[z.type]=H;let q=H.includes("_")?void 0:H4(this.#J);if(q){let{year:F,month:B}=q,P=S2(F,B);this.#J={year:String(Math.max(0,Math.min(9999,F))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,B))).padStart(2,"0"),day:String(Math.max(1,Math.min(P,q.day))).padStart(2,"0")}}this.#W();let K=H.indexOf("_");U?(this.#Z=!0,this.#Y=$):K>=0?this.#G.positionInSegment=K:Q>=0&&J.index<this.#$.length-1?(this.#G.segmentIndex=J.index+1,this.#G.positionInSegment=0,this.#Z=!0):this.#G.positionInSegment=Math.min(W+1,z.len-1)}}#V($,Z){let{month:J,day:z}=i1($);if(Z.type==="month"&&(J<0||J>12))return $0.date.messages.invalidMonth;if(Z.type==="day"&&(z<0||z>31))return $0.date.messages.invalidDay(31,"any month")}#q($){let{year:Z,month:J,day:z}=i1(this.#J);if(Z&&J&&z){let X=S2(Z,J);this.#J={...this.#J,day:String(Math.min(z,X)).padStart(2,"0")}}this.value=z4(this.#J)??$.defaultValue??void 0}}var T5=class extends t0{options;cursor=0;#$;getGroupItems(Z){return this.options.filter((J)=>J.group===Z)}isGroupSelected(Z){let J=this.getGroupItems(Z),z=this.value;return z===void 0?!1:J.every((X)=>z.includes(X.value))}toggleValue(){let Z=this.options[this.cursor];if(Z!==void 0)if(this.value===void 0&&(this.value=[]),Z.group===!0){let J=Z.value,z=this.getGroupItems(J);this.isGroupSelected(J)?this.value=this.value.filter((X)=>z.findIndex((G)=>G.value===X)===-1):this.value=[...this.value,...z.map((X)=>X.value)],this.value=Array.from(new Set(this.value))}else{let J=this.value.includes(Z.value);this.value=J?this.value.filter((z)=>z!==Z.value):[...this.value,Z.value]}}constructor(Z){super(Z,!1);let{options:J}=Z;this.#$=Z.selectableGroups!==!1,this.options=Object.entries(J).flatMap(([z,X])=>[{value:z,group:!0,label:z},...X.map((G)=>({...G,group:z}))]),this.value=[...Z.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:z})=>z===Z.cursorAt),this.#$?0:1),this.on("cursor",(z)=>{switch(z){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let X=this.options[this.cursor]?.group===!0;!this.#$&&X&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let X=this.options[this.cursor]?.group===!0;!this.#$&&X&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},E5=new Set(["up","down","left","right"]);class U4 extends t0{#$=!1;#z;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let $=this.userInput;if(this.cursor>=$.length)return`${$}█`;let Z=$.slice(0,this.cursor),J=$.slice(this.cursor,this.cursor+1),z=$.slice(this.cursor+1);return J===`
37
+ `)),this._prevFrame=$;return}}this.output.write(o.erase.down())}this.output.write($),this.state==="initial"&&(this.state="active"),this._prevFrame=$}}}function _5($,Z){if($===void 0||Z.length===0)return 0;let J=Z.findIndex((z)=>z.value===$);return J!==-1?J:0}function I5($,Z){return(Z.label??String(Z.value)).toLowerCase().includes($.toLowerCase())}function A5($,Z){if(Z)return $?Z:Z[0]}var R5=class extends e0{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#z="";#J;#X;#H;#G;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return o1(["inverse","hidden"],"_");if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let Z=this.userInput.slice(0,this.cursor),J=this.userInput.slice(this.cursor,this.cursor+1),z=this.userInput.slice(this.cursor+1);return`${Z}${o1("inverse",J)}${z}`}get options(){return typeof this.#X=="function"?this.#X():this.#X}constructor(Z){super(Z),this.#X=Z.options,this.#H=Z.placeholder,this.#G=Z.completeOnTab===!0;let J=this.options;this.filteredOptions=[...J],this.multiple=Z.multiple===!0,this.#J=typeof Z.options=="function"?Z.filter:Z.filter??I5;let z;if(Z.initialValue&&Array.isArray(Z.initialValue)?this.multiple?z=Z.initialValue:z=Z.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(z=[this.options[0]?.value]),z)for(let X of z){let G=J.findIndex((Q)=>Q.value===X);G!==-1&&(this.toggleSelected(X),this.#$=G)}this.focusedValue=this.options[this.#$]?.value,this.on("key",(X,G)=>this.#Z(X,G)),this.on("userInput",(X)=>this.#Y(X))}_isActionKey(Z,J){return Z==="\t"||this.multiple&&this.isNavigating&&J.name==="space"&&Z!==void 0&&Z!==""}#Z(Z,J){let z=J.name==="up",X=J.name==="down",G=J.name==="return",Q=this.userInput===""||this.userInput==="\t",W=this.#H,H=this.options,U=W!==void 0&&W!==""&&H.some((q)=>!q.disabled&&(this.#J?this.#J(W,q):!0));if(J.name==="tab"&&Q&&U){this.userInput==="\t"&&this._clearUserInput(),this._setUserInput(W,!0),this.isNavigating=!1;return}if(J.name==="tab"&&this.#G&&!this.multiple&&this.focusedValue!==void 0){let q=String(this.focusedValue);this._clearUserInput(),this._setUserInput(q,!0),this.isNavigating=!1;return}z||X?(this.#$=R2(this.#$,z?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#$]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):G?this.value=A5(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(J.name==="tab"||this.isNavigating&&J.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(Z){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(Z)?this.selectedValues=this.selectedValues.filter((J)=>J!==Z):this.selectedValues=[...this.selectedValues,Z]:this.selectedValues=[Z])}#Y(Z){if(Z!==this.#z){this.#z=Z;let J=this.options;Z&&this.#J?this.filteredOptions=J.filter((G)=>this.#J?.(Z,G)):this.filteredOptions=[...J];let z=_5(this.focusedValue,this.filteredOptions);this.#$=R2(z,0,this.filteredOptions);let X=this.filteredOptions[this.#$];X&&!X.disabled?this.focusedValue=X.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}};var S5={Y:{type:"year",len:4},M:{type:"month",len:2},D:{type:"day",len:2}};function z4($){return[...$].map((Z)=>S5[Z])}function b5($){let Z=new Intl.DateTimeFormat($,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2000,0,15)),J=[],z="/";for(let X of Z)X.type==="literal"?z=X.value.trim()||X.value:(X.type==="year"||X.type==="month"||X.type==="day")&&J.push({type:X.type,len:X.type==="year"?4:2});return{segments:J,separator:z}}function A2($){return Number.parseInt(($||"0").replace(/_/g,"0"),10)||0}function r1($){return{year:A2($.year),month:A2($.month),day:A2($.day)}}function S2($,Z){return new Date($||2001,Z||1,0).getDate()}function Y4($){let{year:Z,month:J,day:z}=r1($);if(!Z||Z<0||Z>9999||!J||J<1||J>12||!z||z<1)return;let X=new Date(Date.UTC(Z,J-1,z));if(!(X.getUTCFullYear()!==Z||X.getUTCMonth()!==J-1||X.getUTCDate()!==z))return{year:Z,month:J,day:z}}function X4($){let Z=Y4($);return Z?new Date(Date.UTC(Z.year,Z.month-1,Z.day)):void 0}function k5($,Z,J,z){let X=J?{year:J.getUTCFullYear(),month:J.getUTCMonth()+1,day:J.getUTCDate()}:null,G=z?{year:z.getUTCFullYear(),month:z.getUTCMonth()+1,day:z.getUTCDate()}:null;return $==="year"?{min:X?.year??1,max:G?.year??9999}:$==="month"?{min:X&&Z.year===X.year?X.month:1,max:G&&Z.year===G.year?G.month:12}:{min:X&&Z.year===X.year&&Z.month===X.month?X.day:1,max:G&&Z.year===G.year&&Z.month===G.month?G.day:S2(Z.year,Z.month)}}class U4 extends e0{#$;#z;#J;#X;#H;#G={segmentIndex:0,positionInSegment:0};#Z=!0;#Y=null;inlineError="";get segmentCursor(){return{...this.#G}}get segmentValues(){return{...this.#J}}get segments(){return this.#$}get separator(){return this.#z}get formattedValue(){return this.#K(this.#J)}#K($){return this.#$.map((Z)=>$[Z.type]).join(this.#z)}#W(){this._setUserInput(this.#K(this.#J)),this._setValue(X4(this.#J)??void 0)}constructor($){let Z=$.format?{segments:z4($.format),separator:$.separator??"/"}:b5($.locale),J=$.separator??Z.separator,z=$.format?z4($.format):Z.segments,X=$.initialValue??$.defaultValue,G=X?{year:String(X.getUTCFullYear()).padStart(4,"0"),month:String(X.getUTCMonth()+1).padStart(2,"0"),day:String(X.getUTCDate()).padStart(2,"0")}:{year:"____",month:"__",day:"__"},Q=z.map((W)=>G[W.type]).join(J);super({...$,initialUserInput:Q},!1),this.#$=z,this.#z=J,this.#J=G,this.#X=$.minDate,this.#H=$.maxDate,this.#W(),this.on("cursor",(W)=>this.#j(W)),this.on("key",(W,H)=>this.#F(W,H)),this.on("finalize",()=>this.#q($))}#Q(){let $=Math.max(0,Math.min(this.#G.segmentIndex,this.#$.length-1)),Z=this.#$[$];if(Z)return this.#G.positionInSegment=Math.max(0,Math.min(this.#G.positionInSegment,Z.len-1)),{segment:Z,index:$}}#U($){this.inlineError="",this.#Y=null;let Z=this.#Q();Z&&(this.#G.segmentIndex=Math.max(0,Math.min(this.#$.length-1,Z.index+$)),this.#G.positionInSegment=0,this.#Z=!0)}#M($){let Z=this.#Q();if(!Z)return;let{segment:J}=Z,z=this.#J[J.type],X=!z||z.replace(/_/g,"")==="",G=Number.parseInt((z||"0").replace(/_/g,"0"),10)||0,Q=k5(J.type,r1(this.#J),this.#X,this.#H),W;X?W=$===1?Q.min:Q.max:W=Math.max(Math.min(Q.max,G+$),Q.min),this.#J={...this.#J,[J.type]:W.toString().padStart(J.len,"0")},this.#Z=!0,this.#Y=null,this.#W()}#j($){if($)switch($){case"right":return this.#U(1);case"left":return this.#U(-1);case"up":return this.#M(1);case"down":return this.#M(-1)}}#F($,Z){if(Z?.name==="backspace"||Z?.sequence===""||Z?.sequence==="\b"||$===""||$==="\b"){this.inlineError="";let J=this.#Q();if(!J)return;if(!this.#J[J.segment.type].replace(/_/g,"")){this.#U(-1);return}this.#J[J.segment.type]="_".repeat(J.segment.len),this.#Z=!0,this.#G.positionInSegment=0,this.#W();return}if(Z?.name==="tab"){this.inlineError="";let J=this.#Q();if(!J)return;let z=Z.shift?-1:1,X=J.index+z;X>=0&&X<this.#$.length&&(this.#G.segmentIndex=X,this.#G.positionInSegment=0,this.#Z=!0);return}if($&&/^[0-9]$/.test($)){let J=this.#Q();if(!J)return;let{segment:z}=J,X=!this.#J[z.type].replace(/_/g,"");if(this.#Z&&this.#Y!==null&&!X){let B=this.#Y+$,F={...this.#J,[z.type]:B},P=this.#V(F,z);if(P){this.inlineError=P,this.#Y=null,this.#Z=!1;return}this.inlineError="",this.#J[z.type]=B,this.#Y=null,this.#Z=!1,this.#W(),J.index<this.#$.length-1&&(this.#G.segmentIndex=J.index+1,this.#G.positionInSegment=0,this.#Z=!0);return}this.#Z&&!X&&(this.#J[z.type]="_".repeat(z.len),this.#G.positionInSegment=0),this.#Z=!1,this.#Y=null;let G=this.#J[z.type],Q=G.indexOf("_"),W=Q>=0?Q:Math.min(this.#G.positionInSegment,z.len-1);if(W<0||W>=z.len)return;let H=G.slice(0,W)+$+G.slice(W+1),U=!1;if(W===0&&G==="__"&&(z.type==="month"||z.type==="day")){let B=Number.parseInt($,10);H=`0${$}`,U=B<=(z.type==="month"?1:2)}if(z.type==="year"&&(H=(G.replace(/_/g,"")+$).padStart(z.len,"_")),!H.includes("_")){let B={...this.#J,[z.type]:H},F=this.#V(B,z);if(F){this.inlineError=F;return}}this.inlineError="",this.#J[z.type]=H;let q=H.includes("_")?void 0:Y4(this.#J);if(q){let{year:B,month:F}=q,P=S2(B,F);this.#J={year:String(Math.max(0,Math.min(9999,B))).padStart(4,"0"),month:String(Math.max(1,Math.min(12,F))).padStart(2,"0"),day:String(Math.max(1,Math.min(P,q.day))).padStart(2,"0")}}this.#W();let K=H.indexOf("_");U?(this.#Z=!0,this.#Y=$):K>=0?this.#G.positionInSegment=K:Q>=0&&J.index<this.#$.length-1?(this.#G.segmentIndex=J.index+1,this.#G.positionInSegment=0,this.#Z=!0):this.#G.positionInSegment=Math.min(W+1,z.len-1)}}#V($,Z){let{month:J,day:z}=r1($);if(Z.type==="month"&&(J<0||J>12))return Z0.date.messages.invalidMonth;if(Z.type==="day"&&(z<0||z>31))return Z0.date.messages.invalidDay(31,"any month")}#q($){let{year:Z,month:J,day:z}=r1(this.#J);if(Z&&J&&z){let X=S2(Z,J);this.#J={...this.#J,day:String(Math.min(z,X)).padStart(2,"0")}}this.value=X4(this.#J)??$.defaultValue??void 0}}var T5=class extends e0{options;cursor=0;#$;getGroupItems(Z){return this.options.filter((J)=>J.group===Z)}isGroupSelected(Z){let J=this.getGroupItems(Z),z=this.value;return z===void 0?!1:J.every((X)=>z.includes(X.value))}toggleValue(){let Z=this.options[this.cursor];if(Z!==void 0)if(this.value===void 0&&(this.value=[]),Z.group===!0){let J=Z.value,z=this.getGroupItems(J);this.isGroupSelected(J)?this.value=this.value.filter((X)=>z.findIndex((G)=>G.value===X)===-1):this.value=[...this.value,...z.map((X)=>X.value)],this.value=Array.from(new Set(this.value))}else{let J=this.value.includes(Z.value);this.value=J?this.value.filter((z)=>z!==Z.value):[...this.value,Z.value]}}constructor(Z){super(Z,!1);let{options:J}=Z;this.#$=Z.selectableGroups!==!1,this.options=Object.entries(J).flatMap(([z,X])=>[{value:z,group:!0,label:z},...X.map((G)=>({...G,group:z}))]),this.value=[...Z.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:z})=>z===Z.cursorAt),this.#$?0:1),this.on("cursor",(z)=>{switch(z){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let X=this.options[this.cursor]?.group===!0;!this.#$&&X&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let X=this.options[this.cursor]?.group===!0;!this.#$&&X&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},E5=new Set(["up","down","left","right"]);class q4 extends e0{#$=!1;#z;focused="editor";get userInputWithCursor(){if(this.state==="submit")return this.userInput;let $=this.userInput;if(this.cursor>=$.length)return`${$}█`;let Z=$.slice(0,this.cursor),J=$.slice(this.cursor,this.cursor+1),z=$.slice(this.cursor+1);return J===`
38
38
  `?`${Z}█
39
- ${z}`:`${Z}${r1("inverse",J)}${z}`}get cursor(){return this._cursor}#J($){if(this.userInput.length===0){this._setUserInput($);return}this._setUserInput(this.userInput.slice(0,this.cursor)+$+this.userInput.slice(this.cursor))}#X($){let Z=this.value??"";switch($){case"up":this._cursor=s1(this._cursor,0,-1,Z);return;case"down":this._cursor=s1(this._cursor,0,1,Z);return;case"left":this._cursor=s1(this._cursor,-1,0,Z);return;case"right":this._cursor=s1(this._cursor,1,0,Z);return}}_shouldSubmit($,Z){if(this.#z)return this.focused==="submit"?!0:(this.#J(`
39
+ ${z}`:`${Z}${o1("inverse",J)}${z}`}get cursor(){return this._cursor}#J($){if(this.userInput.length===0){this._setUserInput($);return}this._setUserInput(this.userInput.slice(0,this.cursor)+$+this.userInput.slice(this.cursor))}#X($){let Z=this.value??"";switch($){case"up":this._cursor=n1(this._cursor,0,-1,Z);return;case"down":this._cursor=n1(this._cursor,0,1,Z);return;case"left":this._cursor=n1(this._cursor,-1,0,Z);return;case"right":this._cursor=n1(this._cursor,1,0,Z);return}}_shouldSubmit($,Z){if(this.#z)return this.focused==="submit"?!0:(this.#J(`
40
40
  `),this._cursor++,!1);let J=this.#$;return this.#$=!0,J&&this.cursor===this.userInput.length?(this.userInput[this.cursor-1]===`
41
41
  `&&(this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--),!0):(this.#J(`
42
- `),this._cursor++,!1)}constructor($){let Z=$.initialUserInput??$.initialValue;super({...$,initialUserInput:Z},!1),Z!==void 0&&(this._cursor=Z.length),this.#z=$.showSubmit??!1,this.on("key",(J,z)=>{if(z?.name&&E5.has(z.name)){this.#$=!1,this.#X(z.name);return}if(J==="\t"&&this.#z){this.focused=this.focused==="editor"?"submit":"editor";return}if(z?.name!=="return"){if(this.#$=!1,z?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(z?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}J&&(this.#z&&this.focused==="submit"&&(this.focused="editor"),this.#J(J??""),this._cursor++)}}),this.on("userInput",(J)=>{this._setValue(J)}),this.on("finalize",()=>{this.value||(this.value=$.defaultValue),this.value===void 0&&(this.value="")})}}class b2 extends t0{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let $=this.userInput;if(this.cursor>=$.length)return`${this.userInput}█`;let Z=$.slice(0,this.cursor),J=$.slice(this.cursor,this.cursor+1),z=$.slice(this.cursor+1);return`${Z}${r1("inverse",J)}${z}`}get cursor(){return this._cursor}constructor($){super({...$,initialUserInput:$.initialUserInput??$.initialValue}),this.on("userInput",(Z)=>{this._setValue(Z)}),this.on("finalize",()=>{this.value||(this.value=$.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as E,stripVTControlCharacters as VY}from"node:util";import Z0 from"node:process";var K4=X4(I2(),1);function f5(){if(Z0.platform!=="win32")return Z0.env.TERM!=="linux";return Boolean(Z0.env.CI)||Boolean(Z0.env.WT_SESSION)||Boolean(Z0.env.TERMINUS_SUBLIME)||Z0.env.ConEmuTask==="{cmd::Cmder}"||Z0.env.TERM_PROGRAM==="Terminus-Sublime"||Z0.env.TERM_PROGRAM==="vscode"||Z0.env.TERM==="xterm-256color"||Z0.env.TERM==="alacritty"||Z0.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var g5=f5();var f=($,Z)=>g5?$:Z,q4=f("◆","*"),x5=f("■","x"),y5=f("▲","x"),h5=f("◇","o"),NY=f("┌","T"),x0=f("│","|"),k2=f("└","—"),LY=f("┐","T"),CY=f("┘","—"),PY=f("●",">"),OY=f("○"," "),_Y=f("◻","[•]"),IY=f("◼","[+]"),AY=f("◻","[ ]"),RY=f("▪","•"),SY=f("─","-"),bY=f("╮","+"),kY=f("├","+"),TY=f("╯","+"),EY=f("╰","+"),fY=f("╭","+"),gY=f("●","•"),xY=f("◆","*"),yY=f("▲","!"),hY=f("■","x"),v5=($)=>{switch($){case"initial":case"active":return E("cyan",q4);case"cancel":return E("red",x5);case"error":return E("yellow",y5);case"submit":return E("green",h5);case"validating":return E("dim",q4)}};var vY=[`${E("dim","↑/↓")} to navigate`,`${E("dim","Space:")} select`,`${E("dim","Enter:")} confirm`];var mY={light:f("─","-"),heavy:f("━","="),block:f("█","#")};var wY=[`${E("dim","↑/↓")} to navigate`,`${E("dim","Enter:")} confirm`];var uY=`${E("gray",x0)} `;var j4=($)=>new b2({validate:$.validate,placeholder:$.placeholder,defaultValue:$.defaultValue,initialValue:$.initialValue,output:$.output,signal:$.signal,input:$.input,render(){let Z=$?.withGuide??$0.withGuide,J=`${`${Z?`${E("gray",x0)}
42
+ `),this._cursor++,!1)}constructor($){let Z=$.initialUserInput??$.initialValue;super({...$,initialUserInput:Z},!1),Z!==void 0&&(this._cursor=Z.length),this.#z=$.showSubmit??!1,this.on("key",(J,z)=>{if(z?.name&&E5.has(z.name)){this.#$=!1,this.#X(z.name);return}if(J==="\t"&&this.#z){this.focused=this.focused==="editor"?"submit":"editor";return}if(z?.name!=="return"){if(this.#$=!1,z?.name==="backspace"&&this.cursor>0){this._setUserInput(this.userInput.slice(0,this.cursor-1)+this.userInput.slice(this.cursor)),this._cursor--;return}if(z?.name==="delete"&&this.cursor<this.userInput.length){this._setUserInput(this.userInput.slice(0,this.cursor)+this.userInput.slice(this.cursor+1));return}J&&(this.#z&&this.focused==="submit"&&(this.focused="editor"),this.#J(J??""),this._cursor++)}}),this.on("userInput",(J)=>{this._setValue(J)}),this.on("finalize",()=>{this.value||(this.value=$.defaultValue),this.value===void 0&&(this.value="")})}}class b2 extends e0{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let $=this.userInput;if(this.cursor>=$.length)return`${this.userInput}█`;let Z=$.slice(0,this.cursor),J=$.slice(this.cursor,this.cursor+1),z=$.slice(this.cursor+1);return`${Z}${o1("inverse",J)}${z}`}get cursor(){return this._cursor}constructor($){super({...$,initialUserInput:$.initialUserInput??$.initialValue}),this.on("userInput",(Z)=>{this._setValue(Z)}),this.on("finalize",()=>{this.value||(this.value=$.defaultValue),this.value===void 0&&(this.value="")})}}import{styleText as E,stripVTControlCharacters as VY}from"node:util";import J0 from"node:process";var j4=G4(I2(),1);function f5(){if(J0.platform!=="win32")return J0.env.TERM!=="linux";return Boolean(J0.env.CI)||Boolean(J0.env.WT_SESSION)||Boolean(J0.env.TERMINUS_SUBLIME)||J0.env.ConEmuTask==="{cmd::Cmder}"||J0.env.TERM_PROGRAM==="Terminus-Sublime"||J0.env.TERM_PROGRAM==="vscode"||J0.env.TERM==="xterm-256color"||J0.env.TERM==="alacritty"||J0.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var g5=f5();var f=($,Z)=>g5?$:Z,K4=f("◆","*"),x5=f("■","x"),y5=f("▲","x"),h5=f("◇","o"),LY=f("┌","T"),h0=f("│","|"),k2=f("└","—"),NY=f("┐","T"),CY=f("┘","—"),PY=f("●",">"),OY=f("○"," "),_Y=f("◻","[•]"),IY=f("◼","[+]"),AY=f("◻","[ ]"),RY=f("▪","•"),SY=f("─","-"),bY=f("╮","+"),kY=f("├","+"),TY=f("╯","+"),EY=f("╰","+"),fY=f("╭","+"),gY=f("●","•"),xY=f("◆","*"),yY=f("▲","!"),hY=f("■","x"),v5=($)=>{switch($){case"initial":case"active":return E("cyan",K4);case"cancel":return E("red",x5);case"error":return E("yellow",y5);case"submit":return E("green",h5);case"validating":return E("dim",K4)}};var vY=[`${E("dim","↑/↓")} to navigate`,`${E("dim","Space:")} select`,`${E("dim","Enter:")} confirm`];var mY={light:f("─","-"),heavy:f("━","="),block:f("█","#")};var wY=[`${E("dim","↑/↓")} to navigate`,`${E("dim","Enter:")} confirm`];var uY=`${E("gray",h0)} `;var M4=($)=>new b2({validate:$.validate,placeholder:$.placeholder,defaultValue:$.defaultValue,initialValue:$.initialValue,output:$.output,signal:$.signal,input:$.input,render(){let Z=$?.withGuide??Z0.withGuide,J=`${`${Z?`${E("gray",h0)}
43
43
  `:""}${v5(this.state)} `}${$.message}
44
- `,z=$.placeholder&&$.placeholder.length>0?E("inverse",$.placeholder[0])+E("dim",$.placeholder.slice(1)):E(["inverse","hidden"],"_"),X=this.userInput?this.userInputWithCursor:z,G=this.value??"";switch(this.state){case"validating":{let Q=Z?`${E("cyan",x0)} `:"",W=Z?E("cyan",k2):"",H=E("dim",X),U=E("dim","Validating...");return`${J}${Q}${H}
44
+ `,z=$.placeholder&&$.placeholder.length>0?E("inverse",$.placeholder[0])+E("dim",$.placeholder.slice(1)):E(["inverse","hidden"],"_"),X=this.userInput?this.userInputWithCursor:z,G=this.value??"";switch(this.state){case"validating":{let Q=Z?`${E("cyan",h0)} `:"",W=Z?E("cyan",k2):"",H=E("dim",X),U=E("dim","Validating...");return`${J}${Q}${H}
45
45
  ${W} ${U}
46
- `}case"error":{let Q=this.error?` ${E("yellow",this.error)}`:"",W=Z?`${E("yellow",x0)} `:"",H=Z?E("yellow",k2):"";return`${J.trim()}
46
+ `}case"error":{let Q=this.error?` ${E("yellow",this.error)}`:"",W=Z?`${E("yellow",h0)} `:"",H=Z?E("yellow",k2):"";return`${J.trim()}
47
47
  ${W}${X}
48
48
  ${H}${Q}
49
- `}case"submit":{let Q=G?`${Z?" ":""}${E("dim",G)}`:"",W=Z?E("gray",x0):"";return`${J}${W}${Q}`}case"cancel":{let Q=G?` ${E(["strikethrough","dim"],G)}`:"",W=Z?E("gray",x0):"";return`${J}${W}${Q}${G.trim()?`
50
- ${W}`:""}`}default:{let Q=Z?`${E("cyan",x0)} `:"",W=Z?E("cyan",k2):"";return`${J}${Q}${X}
49
+ `}case"submit":{let Q=G?`${Z?" ":""}${E("dim",G)}`:"",W=Z?E("gray",h0):"";return`${J}${W}${Q}`}case"cancel":{let Q=G?` ${E(["strikethrough","dim"],G)}`:"",W=Z?E("gray",h0):"";return`${J}${W}${Q}${G.trim()?`
50
+ ${W}`:""}`}default:{let Q=Z?`${E("cyan",h0)} `:"",W=Z?E("cyan",k2):"";return`${J}${Q}${X}
51
51
  ${W}
52
- `}}}}).prompt();import{authorize as m5,exchange as w5,resolveClaudeCodeIdentity as u5}from"@cortexkit/anthropic-auth-core";async function M4($,Z={authorize:m5,exchange:w5,resolveClaudeCodeIdentity:u5,text:j4,isCancel:t1,print:console.log}){let J=await Z.authorize("max");Z.print(`Claude sign-in for ${$==="pi"?"Pi":"OpenCode"}`),Z.print(J.url);let z=await Z.text({message:"Paste the Claude callback URL or authorization code:"});if(Z.isCancel(z))throw Error("Claude sign-in cancelled");let X=await Z.exchange(z,J.verifier,J.redirectUri,J.state);if(X.type!=="success")throw Error("Claude sign-in failed");let G=await Z.resolveClaudeCodeIdentity(X.access,void 0,void 0);if(!G.accountUuid)throw Error("Claude sign-in did not establish an account UUID");return{accountIdentity:G.accountUuid,credential:{type:"oauth",access:X.access,refresh:X.refresh,expires:X.expires}}}var V4='Warning: OpenCode holds a separate Anthropic OAuth login. Remove the separate OpenCode Anthropic login, then choose "Claude via credential vault". Setup has left that login unchanged.';function j0($,Z){let J=$.get(Z);if(!J)throw Error("Missing setup plan");return J}async function N4($=[],Z={}){let J={...Z.env??process.env},z=Z.terminal??{input:process.stdin,output:process.stdout,signals:process},X=(Y)=>z.output.write(`${Y}
53
- `),G=$.filter((Y)=>Y!=="--remove-pi-auth").map((Y)=>Y==="-y"?"--yes":Y),Q=G.includes("--login");if(Q&&G.includes("--claustrum"))return X("Local sign-in and vault setup are two separate choices. Use --login or --claustrum, not both."),1;if(Q&&G.includes("--opencode=2"))return X(e1),1;let W=Z.runner??w9,H=Z.fence??c5(W,{platform:Z.platform}),U=Z.migrateLocal??W9,q=new Map,K=new Map,F=new Map,B=new Map,P=!1,C="setup-process-check",D=(Y)=>({env:J,fence:H,paths:F.get(Y),removePiAnthropicAuth:B.get(Y)??!1}),R=(Y)=>({...D(Y),runner:W});async function S(Y){if(!Y.hosts.includes("pi"))return;let j=j0(F,"pi");if((await H1("pi",j.hostAuthPath)).kind==="absent")return;{let k=await d5({env:J,authPath:j.hostAuthPath}).inspect();if(k.slot==="placeholder"&&k.stash==="missing")throw new p5("missing-stash");if(Y.mode==="claustrum"){if(k.slot==="placeholder")return}}if($.includes("--remove-pi-auth")){B.set("pi",!0);return}let b=Y.mode==="claustrum"?"Pi has stored Anthropic authentication. Rerun with --remove-pi-auth to preserve it privately during vault use and restore it on disconnect.":"Pi has a stored Anthropic login. Rerun with --remove-pi-auth to move it into the native account pool.";if(G.includes("--yes")||!z.input.isTTY)throw new a(b);if(!await d1(z,Y.mode==="claustrum"?"Move Pi authentication aside privately for vault use, then restore it on disconnect?":"Move the Pi Anthropic OAuth login into the native account pool and remove its stored copy?"))throw new a("Native account-pool setup cannot finish while the stored Pi OAuth token takes precedence.");B.set("pi",!0)}async function y(Y,j){let M=j0(K,Y);if(await a5(Y,J)!==(j?"claustrum":M.priorMode)||await Y1(Y,R(Y))!==M.fingerprint)throw new a("Setup inputs changed. Rerun setup with all hosts stopped.")}let N={packages:{opencode:F4,pi:B4},version:await D4(),displayName:"CortexKit Anthropic Auth",slashCommand:"/claude",vault:{connectionFile:n3(J.PI_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE&&!J.OPENCODE_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE?"pi":"opencode",J),hosts:{opencode:{name:s0.opencode,paths:s3("opencode",J)},pi:{name:s0.pi,paths:s3("pi",J)}}},async beforeSignIn(Y,j){if(C=j.mode==="claustrum"?"setup-activation":"cli-setup",!P){n5(J);for(let M of j.hosts)F.set(M,await U0(M,J));if(await $9([...F.values()]),j.mode==="claustrum"){let M=j.hosts.map((g)=>n3(g,J)),b=M[0];if(new Set(M).size!==1||!b)throw new a("Selected hosts use different vault connection files.");N.vault.connectionFile=b}if(j.mode==="local"&&Q&&j.hosts.includes("opencode")&&j.opencodeGeneration==="2")throw new a(e1);if(j.mode==="local"){await e3(j.hosts,J);for(let M of j.hosts)await f0(M,D(M))()}await S(j);for(let M of j.hosts)if(j.mode==="claustrum"){if(K.set(M,await(Z.vaultPreflight??U9)(M,{...R(M),inspectOpenCodeAuth:j.opencodeGeneration!=="2"})),j0(K,M).separateOpenCodeLogin)X(V4)}else q.set(M,await Z2(M,D(M),M==="opencode"&&j.opencodeGeneration==="2"));P=!0}else if(j.mode==="claustrum")await y(Y,!1);else await n0(j0(q,Y),D(Y))},async signInLocal(Y){let j=j0(q,Y);if(!Q){if(j.generation2)X(e1);return}if(await n0(j,D(Y)),await U(Y,{...D(Y),login:Z.localLogin??M4,preflight:j.preflight,skipMigration:j.action==="skip",beforeCommit:()=>n0(j,D(Y))}),j.fingerprint=await y1(j,J),j.notice)X(t3)},async beforeRegister(Y,j){if(j==="local")await n0(j0(q,Y),D(Y));else await y(Y,!0),await(Z.vaultActivate??q9)(Y,R(Y),j0(K,Y)),j0(K,Y).fingerprint=await Y1(Y,R(Y))},async migrate(Y,j){if(j.mode==="claustrum"){if(await y(Y,!0),Y===j.hosts.at(-1)&&K.get("opencode")?.separateOpenCodeLogin)X(V4);return}let M=j0(q,Y);if(await n0(M,D(Y)),Q)return;if(M.action==="migration")await U(Y,{...D(Y),preflight:M.preflight});else if(M.action==="empty-init")await l5({paths:M.paths.paths,routingDestinationPath:M.paths.routingDestinationPath,env:J,processFence:f0(Y,D(Y))});else if(M.action==="skip"){if(await J2(M,D(Y)),M.notice)X(t3)}M.fingerprint=await y1(M,J)}};try{return await i5(N,G,{...Z,env:J,terminal:z,runner:W,fence:H}),0}catch(Y){let M=J9(Y)??j2(Y)??await q1(C,Y,J);if(M)X(M);for(let{host:b,outcome:g}of _9(Y)??[]){if(g!=="enrolled")continue;let k=b==="opencode"?"OpenCode":"Pi";X(`${k} stays connected to the vault. In ${k}, run /claude → Accounts → Disconnect from the vault to undo it. Or run setup again to finish connecting.`)}return 1}finally{for(let Y of q.values())if(Y.preflight)s5(Y.preflight)}}async function e0($){if(process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("Native account changes require offline setup without OPENCODE_AUTH_CONTENT");let Z=await WZ(),J=$Z({paths:Z,host:"opencode"});try{return await J.read(),await $(J)}finally{J.close()}}async function $3(){if(await QZ("opencode",process.env)!=="local")throw Error("Disconnect from the vault first.")}function L4(){console.log(`Usage:
52
+ `}}}}).prompt();import{authorize as m5,exchange as w5,resolveClaudeCodeIdentity as u5}from"@cortexkit/anthropic-auth-core";async function V4($,Z={authorize:m5,exchange:w5,resolveClaudeCodeIdentity:u5,text:M4,isCancel:e1,print:console.log}){let J=await Z.authorize("max");Z.print(`Claude sign-in for ${$==="pi"?"Pi":"OpenCode"}`),Z.print(J.url);let z=await Z.text({message:"Paste the Claude callback URL or authorization code:"});if(Z.isCancel(z))throw Error("Claude sign-in cancelled");let X=await Z.exchange(z,J.verifier,J.redirectUri,J.state);if(X.type!=="success")throw Error("Claude sign-in failed");let G=await Z.resolveClaudeCodeIdentity(X.access,void 0,void 0);if(!G.accountUuid)throw Error("Claude sign-in did not establish an account UUID");return{accountIdentity:G.accountUuid,credential:{type:"oauth",access:X.access,refresh:X.refresh,expires:X.expires}}}var F4='Warning: OpenCode holds a separate Anthropic OAuth login. Remove the separate OpenCode Anthropic login, then choose "Claude via credential vault". Setup has left that login unchanged.';function j0($,Z){let J=$.get(Z);if(!J)throw Error("Missing setup plan");return J}async function N4($=[],Z={}){let J={...Z.env??process.env},z=Z.terminal??{input:process.stdin,output:process.stdout,signals:process},X=(Y)=>z.output.write(`${Y}
53
+ `),G=$.filter((Y)=>Y!=="--remove-pi-auth").map((Y)=>Y==="-y"?"--yes":Y),Q=G.includes("--login");if(Q&&G.includes("--claustrum"))return X("Local sign-in and vault setup are two separate choices. Use --login or --claustrum, not both."),1;if(Q&&G.includes("--opencode=2"))return X($3),1;let W=Z.runner??u9,H=Z.fence??c5(W,{platform:Z.platform}),U=Z.migrateLocal??H9,q=new Map,K=new Map,B=new Map,F=new Map,P=!1,C="setup-process-check",D=(Y)=>({env:J,fence:H,paths:B.get(Y),removePiAnthropicAuth:F.get(Y)??!1}),R=(Y)=>({...D(Y),runner:W});async function S(Y){if(!Y.hosts.includes("pi"))return;let j=j0(B,"pi");if((await H1("pi",j.hostAuthPath)).kind==="absent")return;{let k=await d5({env:J,authPath:j.hostAuthPath}).inspect();if(k.slot==="placeholder"&&k.stash==="missing")throw new p5("missing-stash");if(Y.mode==="claustrum"){if(k.slot==="placeholder")return}}if($.includes("--remove-pi-auth")){F.set("pi",!0);return}let b=Y.mode==="claustrum"?"Pi has stored Anthropic authentication. Rerun with --remove-pi-auth to preserve it privately during vault use and restore it on disconnect.":"Pi has a stored Anthropic login. Rerun with --remove-pi-auth to move it into the native account pool.";if(G.includes("--yes")||!z.input.isTTY)throw new a(b);if(!await l1(z,Y.mode==="claustrum"?"Move Pi authentication aside privately for vault use, then restore it on disconnect?":"Move the Pi Anthropic OAuth login into the native account pool and remove its stored copy?"))throw new a("Native account-pool setup cannot finish while the stored Pi OAuth token takes precedence.");F.set("pi",!0)}async function h(Y,j){let M=j0(K,Y);if(await a5(Y,J)!==(j?"claustrum":M.priorMode)||await Y1(Y,R(Y))!==M.fingerprint)throw new a("Setup inputs changed. Rerun setup with all hosts stopped.")}let L={packages:{opencode:B4,pi:D4},version:await L4(),displayName:"CortexKit Anthropic Auth",slashCommand:"/claude",vault:{connectionFile:n3(J.PI_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE&&!J.OPENCODE_ANTHROPIC_AUTH_CLAUSTRUM_CONNECTION_FILE?"pi":"opencode",J),hosts:{opencode:{name:f0.opencode,paths:s3("opencode",J)},pi:{name:f0.pi,paths:s3("pi",J)}}},async beforeSignIn(Y,j){if(C=j.mode==="claustrum"?"setup-activation":"cli-setup",!P){n5(J);for(let M of j.hosts)B.set(M,await U0(M,J));if(await Z9([...B.values()]),j.mode==="claustrum"){let M=j.hosts.map((x)=>n3(x,J)),b=M[0];if(new Set(M).size!==1||!b)throw new a("Selected hosts use different vault connection files.");L.vault.connectionFile=b}if(j.mode==="local"&&Q&&j.hosts.includes("opencode")&&j.opencodeGeneration==="2")throw new a($3);if(j.mode==="local"){await e3(j.hosts,J);for(let M of j.hosts)await x0(M,D(M))()}await S(j);for(let M of j.hosts)if(j.mode==="claustrum"){if(K.set(M,await(Z.vaultPreflight??q9)(M,{...R(M),inspectOpenCodeAuth:j.opencodeGeneration!=="2"})),j0(K,M).separateOpenCodeLogin)X(F4)}else q.set(M,await Z2(M,D(M),M==="opencode"&&j.opencodeGeneration==="2"));P=!0}else if(j.mode==="claustrum")await h(Y,!1);else await i0(j0(q,Y),D(Y))},async signInLocal(Y){let j=j0(q,Y);if(!Q){if(j.generation2)X($3);return}if(await i0(j,D(Y)),await U(Y,{...D(Y),login:Z.localLogin??V4,preflight:j.preflight,skipMigration:j.action==="skip",beforeCommit:()=>i0(j,D(Y))}),j.fingerprint=await h1(j,J),j.notice)X(t3)},async beforeRegister(Y,j){if(j==="local")await i0(j0(q,Y),D(Y));else await h(Y,!0),await(Z.vaultActivate??K9)(Y,R(Y),j0(K,Y)),j0(K,Y).fingerprint=await Y1(Y,R(Y))},async migrate(Y,j){if(j.mode==="claustrum"){if(await h(Y,!0),Y===j.hosts.at(-1)&&K.get("opencode")?.separateOpenCodeLogin)X(F4);return}let M=j0(q,Y);if(await i0(M,D(Y)),Q)return;if(M.action==="migration")await U(Y,{...D(Y),preflight:M.preflight});else if(M.action==="empty-init")await l5({paths:M.paths.paths,routingDestinationPath:M.paths.routingDestinationPath,env:J,processFence:x0(Y,D(Y))});else if(M.action==="skip"){if(await J2(M,D(Y)),M.notice)X(t3)}M.fingerprint=await h1(M,J)}};try{return await i5(L,G,{...Z,env:J,terminal:z,runner:W,fence:H}),0}catch(Y){let M=z9(Y)??j2(Y)??await q1(C,Y,J);if(M)X(M);for(let{host:b,outcome:x}of I9(Y)??[]){if(x!=="enrolled")continue;let k=b==="opencode"?"OpenCode":"Pi";X(`${k} stays connected to the vault. In ${k}, run /claude → Accounts → Disconnect from the vault to undo it. Or run setup again to finish connecting.`)}return 1}finally{for(let Y of q.values())if(Y.preflight)s5(Y.preflight)}}async function $1($){if(process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("Native account changes require offline setup without OPENCODE_AUTH_CONTENT");let Z=await WZ(),J=$Z({paths:Z,host:"opencode"});try{return await J.read(),await $(J)}finally{J.close()}}async function Z3(){if(await QZ("opencode",process.env)!=="local")throw Error("Disconnect from the vault first.")}function C4(){console.log(`Usage:
54
54
  opencode-anthropic-auth setup [--yes] [--dry-run]
55
55
  opencode-anthropic-auth login [label]
56
56
  opencode-anthropic-auth api add [label]
@@ -60,9 +60,9 @@ ${W}
60
60
  Setup --yes selects every found host, including Pi. Run setup without --yes to choose hosts.
61
61
  Native credentials are managed by the offline setup migration.
62
62
  Legacy import source:
63
- ${XZ()}`)}function T2($,Z){let J=$?.trim();if(!J)throw Error(`${Z} is required`);return J}async function z3($){let J=await($.fetchImpl??fetch)(`https://api.cloudflare.com/client/v4${$.path}`,{method:$.method,headers:{authorization:`Bearer ${$.token}`,...$.body instanceof FormData?{}:{"content-type":"application/json"},...$.headers},body:$.body}),z=await J.text(),X;try{X=JSON.parse(z)}catch{throw Error(`Cloudflare API returned ${J.status}: ${z}`)}if(!J.ok||X.success===!1){let G=X.errors?.map((Q)=>Q.message).filter(Boolean).join("; ");throw Error(G||`Cloudflare API returned ${J.status}`)}return X.result}async function YZ($,Z,J,z){return z3({token:$,method:"POST",path:`/accounts/${Z}/storage/kv/namespaces`,body:JSON.stringify({title:J}),fetchImpl:z})}async function UZ($){let Z={main_module:"worker.js",compatibility_date:"2026-04-28",bindings:[{type:"kv_namespace",name:"RELAY_STATE",namespace_id:$.kvNamespaceId},{type:"secret_text",name:"RELAY_TOKEN",text:$.relayToken}]},J=new FormData;return J.set("metadata",JSON.stringify(Z)),J.set("worker.js",new Blob([HZ],{type:"application/javascript+module"}),"worker.js"),z3({token:$.token,method:"PUT",path:`/accounts/${$.accountId}/workers/scripts/${$.scriptName}`,body:J,fetchImpl:$.fetchImpl})}async function qZ($,Z,J,z){await z3({token:$,method:"POST",path:`/accounts/${Z}/workers/scripts/${J}/subdomain`,body:JSON.stringify({enabled:!0,previews_enabled:!1}),fetchImpl:z})}async function KZ($,Z,J){return z3({token:$,method:"GET",path:`/accounts/${Z}/workers/subdomain`,fetchImpl:J}).catch(()=>null)}async function jZ($={}){await e0((B)=>B.read());let Z=$.fetchImpl??fetch,J=$.prompt??J3,z=$.warn??((B)=>console.warn(B)),X=T2(process.env.CLOUDFLARE_API_TOKEN?.trim()||await J("Cloudflare API token: "),"Cloudflare API token");$.secrets?.push(X);let G=T2(process.env.CLOUDFLARE_ACCOUNT_ID||await J("Cloudflare account ID: "),"Cloudflare account ID"),Q=await J("Worker name [opencode-anthropic-relay]: ")||"opencode-anthropic-relay",W=`${Q}-state`,H=zZ();$.secrets?.push(H),console.log("Creating Cloudflare KV namespace...");let U=await YZ(X,G,W,Z);console.log("Uploading relay Worker..."),await UZ({token:X,accountId:G,scriptName:Q,kvNamespaceId:U.id,relayToken:H,fetchImpl:Z}),await qZ(X,G,Q,Z).catch(async(B)=>{z(await q1("cli-relay-workers-dev",B,process.env,[X,H]))});let q=await KZ(X,G,Z),F=(q?.subdomain?`https://${Q}.${q.subdomain}.workers.dev`:"")||T2(await J3("Relay Worker URL: "),"Relay Worker URL");await e0((B)=>B.updateRelay({enabled:!0,url:F,token:H,fallbackToDirect:!0,transport:"http"})),console.log(`Relay enabled at ${F}`),console.log("Relay settings saved to the native account store.")}var Z3=null;async function J3($){return Z3??=t5({input:r5,output:o5}),(await Z3.question($)).trim()}function MZ(){Z3?.close(),Z3=null}async function VZ($,Z={}){if(process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("Local login cannot be verified while OPENCODE_AUTH_CONTENT is set");let J=Z.prompt??J3,z=Z.authorize??e5,X=Z.exchange??ZZ;await $3(),await e0(async(G)=>{let Q=await G.read(),W=$?.trim()||await J("Fallback account label (optional): "),H=await z("max");console.log(`
63
+ ${XZ()}`)}function T2($,Z){let J=$?.trim();if(!J)throw Error(`${Z} is required`);return J}async function X3($){let J=await($.fetchImpl??fetch)(`https://api.cloudflare.com/client/v4${$.path}`,{method:$.method,headers:{authorization:`Bearer ${$.token}`,...$.body instanceof FormData?{}:{"content-type":"application/json"},...$.headers},body:$.body}),z=await J.text(),X;try{X=JSON.parse(z)}catch{throw Error(`Cloudflare API returned ${J.status}: ${z}`)}if(!J.ok||X.success===!1){let G=X.errors?.map((Q)=>Q.message).filter(Boolean).join("; ");throw Error(G||`Cloudflare API returned ${J.status}`)}return X.result}async function YZ($,Z,J,z){return X3({token:$,method:"POST",path:`/accounts/${Z}/storage/kv/namespaces`,body:JSON.stringify({title:J}),fetchImpl:z})}async function UZ($){let Z={main_module:"worker.js",compatibility_date:"2026-04-28",bindings:[{type:"kv_namespace",name:"RELAY_STATE",namespace_id:$.kvNamespaceId},{type:"secret_text",name:"RELAY_TOKEN",text:$.relayToken}]},J=new FormData;return J.set("metadata",JSON.stringify(Z)),J.set("worker.js",new Blob([HZ],{type:"application/javascript+module"}),"worker.js"),X3({token:$.token,method:"PUT",path:`/accounts/${$.accountId}/workers/scripts/${$.scriptName}`,body:J,fetchImpl:$.fetchImpl})}async function qZ($,Z,J,z){await X3({token:$,method:"POST",path:`/accounts/${Z}/workers/scripts/${J}/subdomain`,body:JSON.stringify({enabled:!0,previews_enabled:!1}),fetchImpl:z})}async function KZ($,Z,J){return X3({token:$,method:"GET",path:`/accounts/${Z}/workers/subdomain`,fetchImpl:J}).catch(()=>null)}async function jZ($={}){await $1((F)=>F.read());let Z=$.fetchImpl??fetch,J=$.prompt??z3,z=$.warn??((F)=>console.warn(F)),X=T2(process.env.CLOUDFLARE_API_TOKEN?.trim()||await J("Cloudflare API token: "),"Cloudflare API token");$.secrets?.push(X);let G=T2(process.env.CLOUDFLARE_ACCOUNT_ID||await J("Cloudflare account ID: "),"Cloudflare account ID"),Q=await J("Worker name [opencode-anthropic-relay]: ")||"opencode-anthropic-relay",W=`${Q}-state`,H=zZ();$.secrets?.push(H),console.log("Creating Cloudflare KV namespace...");let U=await YZ(X,G,W,Z);console.log("Uploading relay Worker..."),await UZ({token:X,accountId:G,scriptName:Q,kvNamespaceId:U.id,relayToken:H,fetchImpl:Z}),await qZ(X,G,Q,Z).catch(async(F)=>{z(await q1("cli-relay-workers-dev",F,process.env,[X,H]))});let q=await KZ(X,G,Z),B=(q?.subdomain?`https://${Q}.${q.subdomain}.workers.dev`:"")||T2(await z3("Relay Worker URL: "),"Relay Worker URL");await $1((F)=>F.updateRelay({enabled:!0,url:B,token:H,fallbackToDirect:!0,transport:"http"})),console.log(`Relay enabled at ${B}`),console.log("Relay settings saved to the native account store.")}var J3=null;async function z3($){return J3??=t5({input:r5,output:o5}),(await J3.question($)).trim()}function MZ(){J3?.close(),J3=null}async function VZ($,Z={}){if(process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("Local login cannot be verified while OPENCODE_AUTH_CONTENT is set");let J=Z.prompt??z3,z=Z.authorize??e5,X=Z.exchange??ZZ;await Z3(),await $1(async(G)=>{let Q=await G.read(),W=$?.trim()||await J("Fallback account label (optional): "),H=await z("max");console.log(`
64
64
  Open this URL in your browser and complete Claude sign-in:
65
65
  `),console.log(`${H.url}
66
- `);let U=await J("Paste the full callback URL or authorization code here: ");Z.secrets?.push(U);let q=await X(U,H.verifier,H.redirectUri,H.state);if(q.type==="failed")throw Error("Authentication failed");if(Z.secrets?.push(q.access,q.refresh),process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("Local login cannot be verified while OPENCODE_AUTH_CONTENT is set");await $3();let K=W&&W!=="main"?W:crypto.randomUUID(),F=Q.accounts.some((B)=>B.id===K&&B.source==="local");await G.loginOAuth({routeId:K,replace:F,label:W||void 0,credential:{access:q.access,refresh:q.refresh,expires:q.expires}}),console.log(`
67
- Saved native fallback account${W?` "${W}"`:""}.`)})}async function FZ($,Z={}){await $3(),await e0((H)=>H.read());let J=Z.prompt??J3,z=$?.trim()||await J("API fallback label (optional): "),X=process.env.OPENCODE_ANTHROPIC_AUTH_API_BASE_URL?.trim()||(await J("Anthropic-compatible base URL [https://api.kie.ai/claude]: ")).trim()||"https://api.kie.ai/claude";if(!GZ(X))throw Error("API fallback base URL must be an http(s) URL without embedded credentials");let G=process.env.OPENCODE_ANTHROPIC_AUTH_API_KEY?.trim()||await J("API key: ");if(!G.trim())throw Error("API key is required");Z.secrets?.push(G.trim());let W=(process.env.OPENCODE_ANTHROPIC_AUTH_API_AUTH_HEADER?.trim()||await J("Auth header [authorization-bearer|x-api-key] (default authorization-bearer): ")).trim().toLowerCase()==="x-api-key"?"x-api-key":"authorization-bearer";await e0(async(H)=>{await $3();let U=await H.read(),q=z&&z!=="main"?z:crypto.randomUUID(),K=U.accounts.find((F)=>F.id===q);if(K?.source==="vault")throw Error("Vault routes cannot be replaced with a local API key");await H.addApi({routeId:q,replace:Boolean(K),label:z||void 0,apiKey:G.trim(),baseURL:X,authHeader:W})}),console.log(`
68
- Saved API fallback route${z?` "${z}"`:""} (${X}).`)}async function BZ(){await e0(async($)=>{let Z=(await $.read()).accounts.filter((J)=>J.id!=="main");if(!Z.length){console.log("No native fallback accounts found.");return}for(let[J,z]of Z.entries()){let X=z.label||z.id,G=z.enabled?"enabled":"disabled";if(z.type==="api"){console.log(`${J+1}. ${X} (${G}) — API route ${z.baseURL}`);continue}let Q=z.quota?.five_hour?.remainingPercent,W=z.quota?.seven_day?.remainingPercent,H=Q===void 0&&W===void 0?"quota unknown":`5h ${Q??"?"}%, 1w ${W??"?"}% remaining`;console.log(`${J+1}. ${X} (${G}) — ${H}${z.state?` — ${JZ(z)}`:""}`)}})}async function DZ($){let[Z,J,z]=process.argv.slice(2);if(!Z||Z==="help"||Z==="--help"||Z==="-h"){L4();return}if(Z==="setup"){$.stage="cli-setup";let X=await N4(process.argv.slice(3));if(X!==0)process.exitCode=X;return}if(Z==="login"){$.stage="cli-login",await VZ(J,{secrets:$.secrets});return}if(Z==="api"&&J==="add"){$.stage="cli-api-add",await FZ(z,{secrets:$.secrets});return}if(Z==="list"){$.stage="cli-list",await BZ();return}if(Z==="relay"&&J==="setup"){$.stage="cli-relay-setup",await jZ({secrets:$.secrets});return}L4(),process.exitCode=1}if(U3.main==U3.module){let $={stage:"cli-command",secrets:[]};try{await DZ($)}catch(Z){console.error(await q1($.stage,Z,process.env,$.secrets)),process.exitCode=1}finally{MZ()}}export{N4 as runSetupCommand,jZ as relaySetup,VZ as login,FZ as addApiRoute};
66
+ `);let U=await J("Paste the full callback URL or authorization code here: ");Z.secrets?.push(U);let q=await X(U,H.verifier,H.redirectUri,H.state);if(q.type==="failed")throw Error("Authentication failed");if(Z.secrets?.push(q.access,q.refresh),process.env.OPENCODE_AUTH_CONTENT!==void 0)throw Error("Local login cannot be verified while OPENCODE_AUTH_CONTENT is set");await Z3();let K=W&&W!=="main"?W:crypto.randomUUID(),B=Q.accounts.some((F)=>F.id===K&&F.source==="local");await G.loginOAuth({routeId:K,replace:B,label:W||void 0,credential:{access:q.access,refresh:q.refresh,expires:q.expires}}),console.log(`
67
+ Saved native fallback account${W?` "${W}"`:""}.`)})}async function FZ($,Z={}){await Z3(),await $1((H)=>H.read());let J=Z.prompt??z3,z=$?.trim()||await J("API fallback label (optional): "),X=process.env.OPENCODE_ANTHROPIC_AUTH_API_BASE_URL?.trim()||(await J("Anthropic-compatible base URL [https://api.kie.ai/claude]: ")).trim()||"https://api.kie.ai/claude";if(!GZ(X))throw Error("API fallback base URL must be an http(s) URL without embedded credentials");let G=process.env.OPENCODE_ANTHROPIC_AUTH_API_KEY?.trim()||await J("API key: ");if(!G.trim())throw Error("API key is required");Z.secrets?.push(G.trim());let W=(process.env.OPENCODE_ANTHROPIC_AUTH_API_AUTH_HEADER?.trim()||await J("Auth header [authorization-bearer|x-api-key] (default authorization-bearer): ")).trim().toLowerCase()==="x-api-key"?"x-api-key":"authorization-bearer";await $1(async(H)=>{await Z3();let U=await H.read(),q=z&&z!=="main"?z:crypto.randomUUID(),K=U.accounts.find((B)=>B.id===q);if(K?.source==="vault")throw Error("Vault routes cannot be replaced with a local API key");await H.addApi({routeId:q,replace:Boolean(K),label:z||void 0,apiKey:G.trim(),baseURL:X,authHeader:W})}),console.log(`
68
+ Saved API fallback route${z?` "${z}"`:""} (${X}).`)}async function BZ(){await $1(async($)=>{let Z=(await $.read()).accounts.filter((J)=>J.id!=="main");if(!Z.length){console.log("No native fallback accounts found.");return}for(let[J,z]of Z.entries()){let X=z.label||z.id,G=z.enabled?"enabled":"disabled";if(z.type==="api"){console.log(`${J+1}. ${X} (${G}) — API route ${z.baseURL}`);continue}let Q=z.quota?.five_hour?.remainingPercent,W=z.quota?.seven_day?.remainingPercent,H=Q===void 0&&W===void 0?"quota unknown":`5h ${Q??"?"}%, 1w ${W??"?"}% remaining`;console.log(`${J+1}. ${X} (${G}) — ${H}${z.state?` — ${JZ(z)}`:""}`)}})}async function DZ($){let[Z,J,z]=process.argv.slice(2);if(!Z||Z==="help"||Z==="--help"||Z==="-h"){C4();return}if(Z==="setup"){$.stage="cli-setup";let X=await N4(process.argv.slice(3));if(X!==0)process.exitCode=X;return}if(Z==="login"){$.stage="cli-login",await VZ(J,{secrets:$.secrets});return}if(Z==="api"&&J==="add"){$.stage="cli-api-add",await FZ(z,{secrets:$.secrets});return}if(Z==="list"){$.stage="cli-list",await BZ();return}if(Z==="relay"&&J==="setup"){$.stage="cli-relay-setup",await jZ({secrets:$.secrets});return}C4(),process.exitCode=1}if(q3.main==q3.module){let $={stage:"cli-command",secrets:[]};try{await DZ($)}catch(Z){console.error(await q1($.stage,Z,process.env,$.secrets)),process.exitCode=1}finally{MZ()}}export{N4 as runSetupCommand,jZ as relaySetup,VZ as login,FZ as addApiRoute};