@aria-cli/cli 1.0.59 → 1.0.60
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/bin/aria.mjs +19 -18
- package/package.json +4 -4
package/bin/aria.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
#!/
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
":" //; NODE_PATH="$(dirname "$(dirname "$(realpath "$0")")")/node_modules:$(dirname "$(dirname "$(dirname "$(dirname "$(realpath "$0")")")")")/node_modules:${NODE_PATH:-}" exec bun "$0" "$@"
|
|
2
3
|
// @bun
|
|
3
|
-
var QG0=Object.create;var{getPrototypeOf:GG0,defineProperty:MK,getOwnPropertyNames:Au,getOwnPropertyDescriptor:VG0}=Object,qu=Object.prototype.hasOwnProperty;function Eu($){return this[$]}var WG0,HG0,U7=($,Z,J)=>{var X=$!=null&&typeof $==="object";if(X){var Y=Z?WG0??=new WeakMap:HG0??=new WeakMap,Q=Y.get($);if(Q)return Q}J=$!=null?QG0(GG0($)):{};let G=Z||!$||!$.__esModule?MK(J,"default",{value:$,enumerable:!0}):J;for(let V of Au($))if(!qu.call(G,V))MK(G,V,{get:Eu.bind($,V),enumerable:!0});if(X)Y.set($,G);return G},ZG=($)=>{var Z=(Lu??=new WeakMap).get($),J;if(Z)return Z;if(Z=MK({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function"){for(var X of Au($))if(!qu.call(Z,X))MK(Z,X,{get:Eu.bind($,X),enumerable:!(J=VG0($,X))||J.enumerable})}return Lu.set($,Z),Z},Lu,IZ=($,Z)=>()=>(Z||$((Z={exports:{}}).exports,Z),Z.exports);var KG0=($)=>$;function zG0($,Z){this[$]=KG0.bind(null,Z)}var A$=($,Z)=>{for(var J in Z)MK($,J,{get:Z[J],enumerable:!0,configurable:!0,set:zG0.bind(Z,J)})};var E=($,Z)=>()=>($&&(Z=$($=0)),Z);var s0=import.meta.require;function _u($){if($ instanceof RO)return!0;if(!$||typeof $!=="object")return!1;let Z=$;return Z.code==="ASK_USER_PAUSE_REQUIRED"||Z.name==="AskUserPauseRequiredError"&&Array.isArray(Z.questions)}var RO;var Mu=E(()=>{RO=class RO extends Error{code="ASK_USER_PAUSE_REQUIRED";questions;constructor($,Z="ask_user requires additional answers before this run can continue."){super(Z);this.name="AskUserPauseRequiredError",this.questions=$.map((J)=>({question:J.question,...Array.isArray(J.options)?{options:[...J.options]}:{}}))}}});import{z as $$}from"zod";var t8,G0,k8,P5,PK,j5,JG,jK,d2,wO,TK,Pu,B7,N4,f0,B$,d$,F7,x0,l4,M8,e8,XG,YG,CK,ju,Tu;var D7=E(()=>{t8=$$.string().trim().min(1),G0=t8.brand(),k8=t8.brand(),P5=$$.object({nodeId:G0,createdAt:t8,schemaVersion:$$.number().int().positive(),migratedFromLegacy:$$.boolean()}),PK=$$.number().int().nonnegative(),j5=$$.number().int().nonnegative(),JG=$$.number().int().nonnegative(),jK=$$.number().int().nonnegative(),d2=$$.enum(["local_operator_confirmed","remote_capability_authenticated"]),wO=$$.object({localNodeId:G0,targetNodeId:G0,revocationGeneration:jK,operatorConfirmation:d2}),TK=$$.number().int().positive(),Pu=$$.number().int().nonnegative(),B7=$$.object({schemaVersion:$$.number().int().positive(),nodeId:G0,ariaHome:t8,runtimePid:$$.number().int().positive(),runtimeId:k8,displayNameSnapshot:t8.optional(),runtimeSocket:t8,startedAt:t8,lastHeartbeat:t8,ownerGeneration:TK}).strict(),N4=t8.brand(),f0=t8.brand(),B$=t8.brand(),d$=t8.brand(),F7=t8.brand(),x0=t8.brand(),l4=$$.object({host:t8,port:$$.number().int().min(1).max(65535)}),M8=$$.discriminatedUnion("kind",[$$.object({kind:$$.literal("node"),nodeId:G0}),$$.object({kind:$$.literal("client"),clientId:N4})]),e8=$$.object({host:t8,port:$$.number().int().min(1).max(65535),tlsCaFingerprint:d$,tlsServerIdentity:f0,protocolVersion:$$.number().int().positive(),endpointRevision:j5.optional()}),XG=$$.object({nodeId:G0,principalFingerprint:f0,transportPublicKey:B$,publicationRevision:PK.optional(),controlEndpoint:e8.optional(),displayNameSnapshot:t8.optional()}),YG=$$.object({nodeId:G0,runtimeId:k8,lastHeartbeat:t8.optional(),controlEndpoint:e8.optional(),displayNameSnapshot:t8.optional()}),CK=t8.brand(),ju=$$.discriminatedUnion("status",[$$.object({status:$$.literal("pending"),queuedAt:$$.string(),nextAttemptAt:$$.string().optional(),attemptCount:$$.number()}),$$.object({status:$$.literal("delivered"),deliveredAt:$$.string()}),$$.object({status:$$.literal("expired"),reason:$$.literal("ttl_exceeded"),queuedAt:$$.string(),expiredAt:$$.string()}),$$.object({status:$$.literal("rejected"),reason:$$.enum(["recipient_revoked","recipient_unknown","envelope_invalid"])})]),Tu=$$.discriminatedUnion("status",[$$.object({status:$$.literal("accepted"),operationId:CK,queuedAt:$$.string()}),$$.object({status:$$.literal("rejected"),reason:$$.enum(["recipient_revoked","recipient_unknown","envelope_invalid"])})])});import{z as O7}from"zod";function UG0($,Z){if(!Z)return $.deliveryState==="rejected"?"rejected":"failed";if($.delivered)return"acked";if($.queued){if($.queuedReason==="awaiting_remote_ack"||$.deliveryState==="dispatching"||$.deliveryState==="sent")return"dispatching";return"queued_for_route"}if($.deliveryState==="expired")return"expired";return"sent"}function BG0($){if(!$.deliveryState)return;if($.deliveryState==="sent"&&$.queued&&$.queuedReason==="awaiting_remote_ack")return"dispatching";return $.deliveryState}function FG0($,Z){return Cu[$]<=Cu[Z]?$:Z}function DG0($,Z){if($==="local_runtime")return"none";switch(Z){case"queued_for_route":return"handshaking";case"dispatching":return"connected";case"failed":case"rejected":case"expired":return"none";case"acked":return"connected";case"accepted":case"sent":return"connected";default:return"none"}}function OG0($,Z,J){if($==="local_runtime")return"none";if(!Z)return J;return Ru[Z]<=Ru[J]?Z:J}function NG0($,Z,J){if(Z==="failed"||Z==="rejected")return"cannot_address";if($==="local_runtime"&&Z==="acked")return"can_queue_only";if(Z==="queued_for_route")return"can_queue_only";if(Z==="dispatching")return J==="reconnecting"?"can_queue_only":"can_send_now";if(Z==="expired")return"cannot_address";return J==="connected"?"can_send_now":"can_queue_only"}function LG0($,Z){if(!$)return Z;return wu[$]<=wu[Z]?$:Z}function AG0($,Z){if(Z==="rejected")return!1;return $.accepted??!0}function qG0($){return $==="queued_for_route"||$==="dispatching"}function EG0($,Z,J){if(!J)return;if($.queuedReason)return $.queuedReason;if(Z==="dispatching")return"awaiting_remote_ack";if(Z==="queued_for_route")return"route_not_established";return}function b9($){let Z=UG0($,$.accepted??!0),J=BG0($),X=J?FG0(J,Z):Z,Y=AG0($,X),Q=X==="acked",G=qG0(X),V=DG0($.transport,X),W=OG0($.transport,$.sessionState,V),H=NG0($.transport,X,W),K=LG0($.deliveryReadiness,H),z=EG0($,X,G);return{transport:$.transport,delivered:Q,queued:G,accepted:Y,deliveryState:X,sessionState:W,deliveryReadiness:K,...z?{queuedReason:z}:{}}}function N7($){return b9({transport:$.transport,delivered:!0,queued:!1,accepted:!0,deliveryState:"acked",...$.sessionState?{sessionState:$.sessionState}:{},...$.deliveryReadiness?{deliveryReadiness:$.deliveryReadiness}:{}})}function T5($){return b9({transport:$.transport,delivered:!1,queued:!0,accepted:!0,deliveryState:"queued_for_route",queuedReason:"route_not_established",...$.sessionState?{sessionState:$.sessionState}:{},...$.deliveryReadiness?{deliveryReadiness:$.deliveryReadiness}:{}})}function QG($){return b9({transport:$.transport,delivered:!1,queued:!0,accepted:!0,deliveryState:"dispatching",queuedReason:"awaiting_remote_ack",...$.sessionState?{sessionState:$.sessionState}:{},...$.deliveryReadiness?{deliveryReadiness:$.deliveryReadiness}:{}})}function tJ($){return b9({transport:$.transport,delivered:!1,queued:!1,accepted:!0,deliveryState:"sent",...$.sessionState?{sessionState:$.sessionState}:{},...$.deliveryReadiness?{deliveryReadiness:$.deliveryReadiness}:{}})}function GG($){switch($){case"queued":case"queued_for_route":return"queued_for_route";case"dispatching":case"acked":case"expired":return $;default:throw Error(`[delivery-receipts] Unsupported outbox status: ${$}`)}}var nJ,iJ,oJ,sJ,rJ,SO,Su,Cu,Ru,wu;var xT=E(()=>{nJ=O7.enum(["in_process","local_runtime","tunnel","relay"]),iJ=O7.enum(["accepted","queued_for_route","dispatching","sent","acked","expired","failed","rejected"]),oJ=O7.enum(["none","handshaking","connected","reconnecting","dead"]),sJ=O7.enum(["cannot_address","can_queue_only","can_send_now"]),rJ=O7.enum(["route_not_established","awaiting_remote_ack","transport_unavailable"]),SO=O7.enum(["queued_for_route","dispatching","acked","expired"]),Su=O7.object({transport:nJ,delivered:O7.boolean(),queued:O7.boolean(),accepted:O7.boolean().optional(),deliveryState:iJ.optional(),sessionState:oJ.optional(),deliveryReadiness:sJ.optional(),queuedReason:rJ.optional()}).strict(),Cu={rejected:0,failed:1,expired:2,queued_for_route:3,dispatching:4,accepted:5,sent:6,acked:7},Ru={dead:0,none:1,handshaking:2,reconnecting:3,connected:4},wu={cannot_address:0,can_queue_only:1,can_send_now:2}});import{z as eJ}from"zod";var Iu,_G0,VG,Q1;var gT=E(()=>{D7();D7();Iu=eJ.string().trim().min(1),_G0=eJ.record(eJ.string(),eJ.unknown()),VG=eJ.enum(["client_attached","client_detached","runtime_started","runtime_stopped","runtime_stale","runtime_restarted","model_snapshot_updated","pair_proposed","proof_committed","continuity_bound","revocation_committed","ingress_accepted","ingress_rejected","durable_send_queued","durable_send_dispatching","durable_send_acked","durable_send_expired"]),Q1=eJ.object({eventId:Iu,nodeId:G0,runtimeId:k8,kind:VG,revision:eJ.number().int().nonnegative().optional(),recordedAt:Iu,payload:_G0}).strict()});import{z as bu}from"zod";var MG0,$X;var mT=E(()=>{D7();MG0=bu.string().trim().min(1),$X=bu.object({nodeId:G0,principalFingerprint:f0,transportPublicKey:B$,bindingGeneration:JG,displayNameSnapshot:MG0.optional()}).strict()});import{z as y$}from"zod";function fu($){let Z=y$.toJSONSchema($);return delete Z.$schema,Z}function RK($){return $===a6}function bZ($,Z="network runtime"){if(!RK($))throw Error(`Unsupported ${Z} protocol version ${String($)}. Supported: ${a6}`);return $}var n$,PG0,ku,a6=1,L4,wK,IO,l2,ZX,WG,bO,C5,JX,kO,fO,SK,a2,IK,XX,YX,HG;var yO=E(()=>{D7();gT();mT();n$=y$.string().trim().min(1),PG0=y$.string().min(1).refine(($)=>$.trim().length>0),ku=y$.record(y$.string(),y$.unknown());L4=y$.literal(a6);wK=y$.object({protocolVersion:L4,messageId:n$,senderNodeId:G0,recipientNodeId:G0,storedAt:y$.number().int().nonnegative()}).strict(),IO=y$.object({nodeId:G0,audienceNodeId:G0.optional(),publicKey:B$,leaderDisplayNameSnapshot:n$.optional(),host:n$,port:y$.number().int().min(1).max(65535),controlEndpoint:e8.optional(),psk:n$,displayNameSnapshot:n$.optional(),signingPublicKey:x0.optional(),caCert:PG0.optional(),createdAt:y$.number().int().nonnegative(),expiresAt:y$.number().int().nonnegative(),tokenNonce:n$,coordinationUrl:n$.optional(),networkId:n$.optional()}).strict(),l2=y$.object({protocolVersion:L4,nodeId:G0,principalFingerprint:f0,peerPublicKey:B$,signingPublicKey:x0,transportEndpoint:l4,controlEndpoint:e8.optional(),displayNameSnapshot:n$.optional(),inviteTokenNonce:n$}).strict(),ZX=l2.extend({proofOfWork:n$}).strict(),WG=fu(ZX),bO=y$.union([y$.object({protocolVersion:L4,deliveryAck:wK}).strict(),y$.object({protocolVersion:L4,ariaMessage:y$.unknown()}).strict(),y$.object({protocolVersion:L4,joinRequest:l2}).strict()]),C5=XG.extend({protocolVersion:L4,publicationRevision:PK,signingPublicKey:x0,transportEndpoint:l4,advertisedHosts:y$.array(n$).min(1).optional()}).strict(),JX=y$.object({protocolVersion:L4,nodeId:G0,displayNameSnapshot:n$,principalFingerprint:f0,controlPort:y$.number().int().min(1).max(65535),advertisedHosts:y$.array(n$).min(1),tlsCaFingerprint:y$.string().trim().min(1).optional()}).strict(),kO=y$.object({protocolVersion:L4,nodeId:G0,transportPublicKey:B$,principalFingerprint:f0,endpointRevision:j5,controlEndpoint:e8.optional(),displayNameSnapshot:n$.optional()}).strict(),fO=y$.object({protocolVersion:L4,nodeId:G0,principalFingerprint:f0,transportPublicKey:B$,controlEndpoint:e8.optional(),displayNameSnapshot:n$.optional(),presharedKey:n$}).strict(),SK=y$.object({nodeId:G0,previousPrincipalFingerprint:f0,newPrincipalFingerprint:f0,newTransportPublicKey:B$.optional(),bindingGeneration:JG,revocationGeneration:jK.optional(),createdAt:n$}).strict(),a2=y$.object({statement:SK,delegationSignature:n$,acceptanceSignature:n$,previousPublicKey:n$,newPublicKey:n$}).strict(),IK=y$.enum(["network.register","network.revoke","network.list_peers","pair.direct","pair.relay","pair.relay_response","peer.update_capabilities","peer.update_trust_tier"]),XX=y$.object({version:L4,id:n$,operation:IK,principal:$X,target:$X,namespace:n$,policyEpoch:y$.number().int().nonnegative(),nonce:n$,timestamp:y$.number().int().nonnegative(),ttl:y$.number().int().positive(),contextHash:n$,payload:ku,signature:n$,method:n$.optional(),path:n$.optional(),metadata:ku.optional(),reason:n$.optional(),parentEnvelopeId:n$.optional()}).strict(),YX=y$.object({nodeId:G0,envelope:XX}).strict(),HG=fu(YX)});import{z as P8}from"zod";function vO($){let Z=P8.toJSONSchema($);return delete Z.$schema,Z}var L7,QX,hO,A4,xO,GX,gO,bK,KG,VX,zG;var cT=E(()=>{D7();yO();L7=P8.string().trim().min(1);QX=P8.object({displayNameSnapshot:L7,nodeId:G0,signingPublicKey:x0,port:P8.number().int().min(1).max(65535),ephemeralPublicKey:P8.string().max(512),ephemeralKeySignature:P8.string().max(512),caCert:P8.string().max(4096).optional(),protocolVersion:P8.number().min(1).max(100).optional(),wait:P8.boolean().optional()}).strict(),hO=vO(QX),A4=P8.object({inviteToken:L7,nodeId:G0,displayNameSnapshot:L7.optional(),transportEndpoint:l4,controlEndpoint:e8,continuity:a2.optional()}).strict(),xO=vO(A4),GX=P8.object({targetNodeId:G0,displayNameSnapshot:L7,nodeId:G0,signingPublicKey:x0,port:P8.number().int().min(1).max(65535),ephemeralPublicKey:P8.string().max(512),ephemeralKeySignature:P8.string().max(512),caCert:P8.string().max(4096).optional()}).strict(),gO=vO(GX),bK=P8.object({targetNodeId:G0,signingPublicKey:x0,signature:L7.max(512),timestamp:L7.max(20)}).strict(),KG=vO(bK),VX=P8.object({id:L7,nodeId:G0,displayNameSnapshot:L7.optional(),principalFingerprint:f0,signingPublicKey:x0,port:P8.number().int().min(1).max(65535),ingressHost:L7,responderControlHostHint:L7.optional(),ephemeralPublicKey:P8.string().max(512).optional(),ephemeralKeySignature:P8.string().max(512).optional(),caCert:P8.string().max(4096).optional(),expiresAt:P8.number().int().nonnegative()}).strict(),zG=P8.object({requests:VX.array()}).strict()});import{z as A7}from"zod";function yK($,Z){return jG0[$].includes(Z)}function n2($){let Z=fK.parse($),J=Boolean(Z.endpointHost&&Z.endpointPort),X=typeof Z.lastHandshake==="number"&&Number.isFinite(Z.lastHandshake)&&Z.lastHandshake>0,Y=Z.status==="pending"?"invited":Z.status==="revoked"?"revoked":Z.status==="active"?"verified":"paired_unverified",Q=(()=>{switch(Z.status){case"active":return X?"connected":J?"endpoint_known":"disconnected";case"pending_tunnel":return X?"connected":J?"connecting":"unknown";case"pending_verification":return X?"connected":J?"endpoint_known":"unknown";case"pending":return J?"endpoint_known":"unknown";case"revoked":return J?"disconnected":"unknown"}})();return vK.parse({identityState:Y,transportState:Q})}function cO($,Z,J={}){if($==="verified"&&Z==="paired_unverified")return J.viaContinuity===!0;return TG0[$].includes(Z)}function uO($,Z){return CG0[$].includes(Z)}function pO($,Z){return yu[$]-yu[Z]}var kK,WX,HX,mO,fK,jG0,vK,TG0,CG0,yu;var uT=E(()=>{kK=A7.enum(["active","pending","pending_tunnel","pending_verification","revoked"]),WX=A7.enum(["invited","joining","paired_unverified","verified","revoked"]),HX=A7.enum(["unknown","endpoint_known","connecting","connected","degraded","disconnected"]),mO=A7.enum(["repair","continuity","revocation"]),fK=A7.object({status:kK,endpointHost:A7.string().nullable().optional(),endpointPort:A7.number().int().nullable().optional(),lastHandshake:A7.number().int().nullable().optional()}),jG0={invited:["unknown","endpoint_known"],joining:["unknown","endpoint_known","connecting"],paired_unverified:["unknown","endpoint_known","connecting","connected","degraded","disconnected"],verified:["unknown","endpoint_known","connecting","connected","degraded","disconnected"],revoked:["unknown","disconnected"]};vK=A7.object({identityState:WX,transportState:HX}).superRefine(($,Z)=>{if(!yK($.identityState,$.transportState))Z.addIssue({code:A7.ZodIssueCode.custom,message:`invalid peer state combination: ${$.identityState}/${$.transportState}`})});TG0={invited:["invited","joining","revoked"],joining:["joining","paired_unverified","revoked"],paired_unverified:["paired_unverified","verified","revoked"],verified:["verified","revoked"],revoked:["revoked"]};CG0={unknown:["unknown","endpoint_known"],endpoint_known:["endpoint_known","connecting","disconnected"],connecting:["connecting","connected","endpoint_known","disconnected"],connected:["connected","degraded","disconnected"],degraded:["degraded","connected","disconnected"],disconnected:["disconnected","endpoint_known"]};yu={repair:0,continuity:1,revocation:2}});import{z as s}from"zod";function wG0($){let Z=s.toJSONSchema($);return delete Z.$schema,Z}function SG0($){if(!$||typeof $!=="object")return;let Z=$.message;if(typeof Z!=="string")return;let J=Z.trim();return J.length>0?J:void 0}function IG0($){let Z=$.trim().toLowerCase();return Z==="internal server error"||Z.startsWith("internal server error:")||Z.startsWith("http 500")}function G1($,Z){let J=typeof $==="string"&&$.trim().length>0?$:void 0,X=SG0(Z);if(!X)return J;if(!J||IG0(J))return X;return J}function R5($,Z){let J=G1($,Z)??"Trusted runtime error";return Object.assign(Error(J),{...Z===void 0?{}:{diagnostic:Z},...typeof $==="string"&&$.trim().length>0&&$!==J?{publicMessage:$}:{}})}function bG0(){return{status:"stopped",intervalMs:null,lastWakeTickAt:null,lastCheckpointResult:"never",safetyPolicySummary:{},ownerClientKind:null}}var y0,hu,dO,RG0,xu,j8,i2,k9,a4,E6,n4,i4,G8,q7,E7,r9,c8,q4,_6,UG,hK,vu,xK,f8,o2,M6,E4,_4,P6,o4,s4,r4,yl0,n6,V1,t4,e4,i6,o6,U9,BG,j6,M4,T6,$6,s6,FG,kZ,s2,r6,gu,DG,lO,r2,_7,w5,KX,OG,gK,kG0,W1,t6,zX,S5;var aO=E(()=>{D7();xT();cT();uT();y0=s.string().trim().min(1),hu=s.enum(["minimal","balanced","high","full"]),dO=s.array(s.string()).optional(),RG0=s.array(s.custom()).optional();xu=s.object({providers:s.array(y0).optional(),credentials:s.array(s.object({provider:y0,apiKey:y0,source:s.enum(["env","config"]).optional(),credentialType:s.enum(["api_key","oauth","token"]).optional()}).strict()).optional()}).strict(),j8=s.object({task:y0,arion:y0.optional(),cwd:y0.optional(),history:RG0,requestCredentialOverride:xu.optional(),requestedModel:y0.optional(),preferredTier:s.enum(["fast","balanced","powerful","ensemble"]).optional(),budget:s.number().positive().optional(),maxTurns:s.number().int().positive().optional(),autonomy:hu.optional(),allowedTools:dO,deniedTools:dO,noMemory:s.boolean().optional(),systemPrompt:s.string().optional(),approvalMode:s.enum(["pause","approve","deny"]).optional(),askUserAnswers:s.array(s.string()).optional()}).strict(),i2=s.lazy(()=>s.object({message:s.string(),name:s.string().optional(),stack:s.string().optional(),cause:i2.optional()}).catchall(s.unknown()));k9=s.object({success:s.boolean(),output:s.string().optional(),messages:s.array(s.unknown()).optional(),toolCalls:s.array(s.unknown()).optional(),usage:s.unknown().optional(),turnCount:s.number().int().nonnegative().optional(),thinking:s.array(s.unknown()).optional(),nativeToolResults:s.array(s.unknown()).optional(),traces:s.array(s.unknown()).optional(),pipelineTiming:s.unknown().optional(),guardrailEvents:s.array(s.unknown()).optional(),handoffs:s.array(s.unknown()).optional(),state:s.unknown().optional(),error:s.string().optional(),diagnostic:i2.optional()}).strict(),a4=s.object({state:s.unknown(),arion:y0.optional(),cwd:y0.optional(),requestCredentialOverride:xu.optional(),requestedModel:y0.optional(),preferredTier:s.enum(["fast","balanced","powerful","ensemble"]).optional(),budget:s.number().positive().optional(),maxTurns:s.number().int().positive().optional(),autonomy:hu.optional(),allowedTools:dO,deniedTools:dO,noMemory:s.boolean().optional(),systemPrompt:s.string().optional(),approvalMode:s.enum(["pause","approve","deny"]).optional(),askUserAnswers:s.array(s.string()).optional()}).strict(),E6=s.discriminatedUnion("type",[s.object({type:s.literal("text_delta"),content:s.string()}),s.object({type:s.literal("tool_start"),id:y0,name:y0,input:s.unknown().optional()}),s.object({type:s.literal("approval_needed"),toolName:y0,toolInput:s.unknown().optional(),riskLevel:s.string().optional(),issues:s.array(s.string()).optional()}),s.object({type:s.literal("tool_result"),id:y0,name:y0,durationMs:s.number().nonnegative(),result:s.unknown(),input:s.unknown().optional()}),s.object({type:s.literal("usage_update"),usage:s.unknown()}),s.object({type:s.literal("turn_complete"),turnNumber:s.number().int().nonnegative()}),s.object({type:s.literal("guardrail_rejected"),stage:s.enum(["input","output"]),message:s.string()}),s.object({type:s.literal("pipeline_timing"),report:s.unknown()}),s.object({type:s.literal("messages_snapshot"),messages:s.array(s.unknown())}),s.object({type:s.literal("error"),error:s.object({message:s.string(),diagnostic:i2.optional()})}),s.object({type:s.literal("native_tool_result"),metadata:s.unknown()}),s.object({type:s.literal("thinking_start")}),s.object({type:s.literal("thinking_delta"),content:s.string()}),s.object({type:s.literal("thinking_end"),blocks:s.array(s.unknown()),durationMs:s.number().nonnegative()}),s.object({type:s.literal("tool_args_delta"),id:y0,args:s.string()}),s.object({type:s.literal("span_start"),spanId:y0,spanType:y0,name:y0}),s.object({type:s.literal("span_end"),spanId:y0,durationMs:s.number().nonnegative()}),s.object({type:s.literal("handoff_start"),target:y0,id:y0}),s.object({type:s.literal("handoff_result"),target:y0,result:s.string(),id:y0}),s.object({type:s.literal("paused"),state:s.unknown()})]),n4=s.object(Su.shape).strict().transform(($)=>b9($)),i4=s.object({transport:nJ,delivered:s.boolean(),queued:s.boolean(),accepted:s.boolean().optional(),deliveryState:iJ.optional(),sessionState:oJ.optional(),deliveryReadiness:sJ.optional(),queuedReason:rJ.optional(),storedAt:s.number().int().nonnegative().optional()}).strict().transform(({storedAt:$,...Z})=>({...b9(Z),...$!==void 0?{storedAt:$}:{}})),G8=s.object({rawMessage:s.record(s.string(),s.unknown()),recipientInbox:M8.optional(),to:y0.optional(),content:s.string().optional(),type:y0.optional(),priority:s.number().int().optional(),correlationId:s.string().optional(),metadata:s.record(s.string(),s.unknown()).optional()}).strict().superRefine(($,Z)=>{if(!$.recipientInbox||$.to===void 0)return;if($.recipientInbox.kind==="client"){Z.addIssue({code:s.ZodIssueCode.custom,message:'OutboundMessage.to is a compatibility alias for node recipients only; omit it for recipientInbox.kind === "client"',path:["to"]});return}if($.recipientInbox.nodeId!==$.to)Z.addIssue({code:s.ZodIssueCode.custom,message:"OutboundMessage.recipientInbox.nodeId must match OutboundMessage.to when both are provided",path:["to"]})}),q7=s.object({afterRevision:s.number().int().nonnegative().optional()}).strict(),E7=s.object({afterCreatedAt:s.number().int().nonnegative().optional(),afterId:y0.optional()}).strict(),r9=s.object({cursor:E7.optional(),limit:s.number().int().positive().max(1000).optional(),unreadOnly:s.boolean().optional()}).strict(),c8=s.object({id:y0,senderNodeId:G0,senderDisplayNameSnapshot:y0.optional(),senderType:y0.optional(),senderClientId:s.string().nullable().optional(),recipientClientId:s.string().nullable().optional(),inboxAddress:M8,type:y0,content:s.string(),priority:s.number().int(),createdAt:s.number().int().nonnegative(),correlationId:s.string().nullable().optional(),replyTo:s.string().nullable().optional()}).strict(),q4=s.object({nodeId:G0,transportPublicKey:B$,displayNameSnapshot:y0.optional(),identityState:WX,transportState:HX,endpointRevision:j5,updatedAt:s.string(),lastSeenAt:s.string().optional()}).strict(),_6=s.object({displayNameSnapshot:y0,nodeId:G0,host:y0,port:s.number().int().min(1).max(65535),principalFingerprint:f0,version:y0,tlsCaFingerprint:d$.optional(),transport:s.enum(["lan","wan"]).optional(),status:s.enum(["discovered","connected"]).optional()}).strict(),UG=s.object({allowedToolCategories:s.array(y0).optional(),allowedShellCommands:s.array(y0).optional(),maxWriteOpsPerMinute:s.number().int().positive().optional(),maxGitPushesPerHour:s.number().int().positive().optional()}).strict(),hK=s.object({status:s.enum(["running","stopped"]),intervalMs:s.number().int().positive().nullable(),lastWakeTickAt:s.string().nullable(),lastCheckpointResult:s.enum(["success","error","never"]),safetyPolicySummary:UG,ownerClientKind:y0.nullable()}).strict(),vu=s.object({backend:s.literal("bun"),compatibilityBackend:s.enum(["better-sqlite3","node:sqlite"]).optional(),pragmas:s.boolean().optional(),fts5:s.boolean().optional(),sqliteVec:s.boolean().optional(),loadableExtensions:s.boolean(),customSQLiteConfigured:s.boolean(),customSQLitePath:y0.optional(),vectorSearchMode:s.enum(["sqlite-vec","javascript-fallback"]).optional(),vectorFallbackMaxRows:s.number().int().positive().optional()}).strict(),xK=s.object({memoria:vu.optional(),networkState:vu.optional()}).strict();f8=s.object({nodeId:G0,runtimeId:k8,port:s.number().int().min(1).max(65535),attachedClients:s.number().int().nonnegative().optional(),storage:xK.optional(),autonomousLoop:hK.optional().default(bG0())}).strict(),o2=s.object({intervalMs:s.number().int().positive().optional(),safetyPolicy:UG.optional()}).strict(),M6=s.object({id:y0,nodeId:G0,displayNameSnapshot:y0.optional(),principalFingerprint:f0}).strict(),E4=s.object({inviteId:y0,inviteLabel:y0.optional(),createdAt:y0,expiresAt:y0.nullable().optional()}).strict(),_4=s.object({requestId:y0,accepted:s.boolean()}).strict(),P6=s.object({accepted:s.boolean().optional(),inviteToken:s.string().optional(),error:s.string().optional()}).strict(),o4=s.object({inviteLabel:y0.optional(),durationMs:s.number().int().min(0).optional()}).strict(),s4=s.object({inviteToken:y0,pendingInvite:E4}).strict(),r4=s.object({nodeId:G0,displayName:y0,principalFingerprint:f0.optional(),controlEndpoint:e8,transportEndpoint:l4.optional(),transport:s.enum(["lan","wan"]).optional()}).strict(),yl0=s.enum(["pending_verification"]),n6=s.discriminatedUnion("mode",[s.object({nodeId:G0,displayNameSnapshot:y0.optional(),mode:s.literal("lan_direct"),pairingProofState:s.literal("pending_verification")}).strict(),s.object({nodeId:G0,displayNameSnapshot:y0.optional(),mode:s.literal("wan_pair"),pairingProofState:s.literal("pending_verification")}).strict()]),V1=s.object({success:s.boolean(),nodeId:G0,displayNameSnapshot:y0.optional()}).strict(),t4=s.object({inviteToken:y0}).strict(),e4=V1,i6=s.object({inviteId:y0}).strict(),o6=s.object({cancelled:s.boolean(),inviteId:y0}).strict(),U9=s.object({peerNodeId:G0,principalFingerprint:f0,peerDisplayName:y0.optional(),peerWgPubkey:B$,peerSigningPubkey:y0,transportEndpoint:l4,controlEndpoint:e8,psk:y0}).strict(),BG=wG0(U9),j6=s.object({received:s.literal(!0),pairingProofState:s.literal("pending_verification")}).strict(),M4=s.object({nodeId:G0,envelope:s.record(s.string(),s.unknown()).optional()}).strict(),T6=s.object({revoked:s.boolean(),nodeId:G0,displayNameSnapshot:y0.optional()}).strict(),$6=s.object({nodeId:G0,endpointHost:y0,endpointPort:s.number().int().min(1).max(65535),endpointRevision:j5}).strict(),s6=s.object({repaired:s.boolean(),nodeId:G0,endpointHost:y0,endpointPort:s.number().int().min(1).max(65535),endpointRevision:j5}).strict(),FG=s.enum(["tui","daemon-launcher","pipe","local-api"]),kZ=s.object({clientId:N4,clientKind:FG,displayLabel:y0,self:s.boolean(),attachedAt:y0,lastSeenAt:y0}).strict(),s2=s.object({clientId:N4,clientAuthToken:y0}).strict(),r6=s2,gu=s.object({provider:y0,apiKey:y0,source:s.enum(["env","config"]).optional(),credentialType:s.enum(["api_key","oauth","token"]).optional()}).strict(),DG=s.object({providers:s.array(y0).optional(),credentials:s.array(gu).optional()}).strict(),lO=s.object({providers:s.array(y0).optional(),credentials:s.array(gu).optional()}).strict(),r2=s.object({providers:s.array(y0)}).strict(),_7=s.object({clientKind:FG,lease:s.boolean().optional(),pid:s.number().optional(),displayName:s.string().optional()}).strict(),w5=s2,KX=s.object({clientId:N4}).strict(),OG=s.object({detached:s.boolean()}).strict(),gK=s.enum(["submitRun","resumeRun","streamRun","subscribeRuntimeEvents","sendBestEffort","sendDurable","listInbox","listDirectClientInbox","listPeers","listNearbyPeers","listAttachedClients","subscribeDirectClientInbox","getRuntimeStatus","getModelSnapshot","refreshModelSnapshot","setCurrentModel","getSessionCredentialOverlayState","setSessionCredentialOverlay","clearSessionCredentialOverlay","startAutonomousLoop","stopAutonomousLoop","getRuntimeBootstrap","listPendingPairRequests","respondToPairRequest","createInvite","listPendingInvites","acceptInviteToken","cancelInvite","invitePeer","acceptInvite","directPair","revokePeer","repairPeer","sessionAppendMessages","sessionMarkCompleted","sessionReplaceMessages","attachClient","detachClient","watchInbox"]),kG0=new Set(["listAttachedClients","listDirectClientInbox","subscribeDirectClientInbox"]),W1=s.object({id:y0,method:gK,payload:s.unknown().optional(),auth:r6.optional()}).strict().superRefine(($,Z)=>{if(kG0.has($.method)&&$.auth===void 0)Z.addIssue({code:s.ZodIssueCode.custom,message:`Local control socket method ${$.method} requires attached-client auth`,path:["auth"]})}),t6=s.object({id:y0,ok:s.literal(!0),payload:s.unknown().optional()}).strict(),zX=s.object({id:y0,ok:s.literal(!1),error:y0,reason:s.string().optional(),diagnostic:i2.optional()}).strict(),S5=s.discriminatedUnion("ok",[t6,zX])});import{z as d}from"zod";function vC($,Z,J,X){let Y=U1[$],Q=Z==="input"?Y.input:Z==="result"?Y.result:("event"in Y)?Y.event:void 0;if(!Q){X.addIssue({code:d.ZodIssueCode.custom,message:`Operation ${$} does not define a ${Z} payload`,path:[Z]});return}if(!Q.safeParse(J).success)X.addIssue({code:d.ZodIssueCode.custom,message:`Invalid ${Z} payload for operation ${$}`,path:[Z]})}var v0,fZ,K1,gl0,H1,I5,fG0,pT,pK,z1,dK,iO,dT,lT,aT,nT,iT,oT,sT,rT,tT,eT,$C,ZC,JC,XC,YC,QC,oO,GC,lK,VC,WC,sO,HC,nO,rO,tO,eO,yG0,mu,cu,uu,pu,du,lu,au,nu,KC,zC,UC,BC,FC,mK,DC,OC,iu,vG0,hG0,NC,LC,AC,qC,EC,xG0,_C,MC,PC,jC,TC,NG,gG0,CC,RC,wC,SC,IC,bC,$N,cK,ZN,JN,XN,YN,QN,GN,VN,WN,HN,KN,zN,UN,BN,FN,DN,uK,ON,NN,LN,AN,qN,EN,_N,MN,PN,jN,TN,CN,RN,ou,su,wN,SN,IN,bN,ru,kC,fC,U1,yC,tu,mG0,hC,xC,cG0,uG0,gC,eu,$p;var Zp=E(()=>{aO();v0=d.string().trim().min(1),fZ=d.number().int().positive(),K1=d.number().int().nonnegative(),gl0=d.object({}).catchall(d.unknown()),H1=d.object({}).strict(),I5=d.string().datetime({offset:!0}).or(d.string().min(1)),fG0=d.enum(["minimal","balanced","high","full"]),pT=["run.start","run.resume","run.abort","interaction.respond","session.list","session.read","session.load","session.fork","memory.remember","memory.recall","memory.list","memory.forget","memory.recall_knowledge","arion.list","arion.hatch","arion.become","arion.rest","arion.wake","arion.create","model.list","model.set","model.refresh","auth.status","auth.login","auth.logout","auth.clear_session","auth.import_env_session","peer.list","peer.list_nearby","peer.pending.list","peer.pending.respond","peer.invite","peer.connect","peer.accept_invite","peer.direct_pair","peer.repair","peer.revoke","client.list","client.inbox.list","message.send","message.inbox.list","config.theme.get","config.theme.set","config.autonomy.get","config.autonomy.set","system.restart","system.terminal_setup","daemon.start","daemon.status","daemon.stop","daemon.restart","hook.extract","hook.reflect","hook.consolidate","hook.ingest","hook.harvest"],pK=d.enum(pT),z1=v0,dK=v0,iO=d.enum(["run","auth","system","peer"]),dT=d.object({question:v0,options:d.array(v0).optional()}).strict(),lT=d.object({id:v0,label:v0,description:d.string().optional()}).strict(),aT=d.object({key:v0,label:v0,placeholder:d.string().optional(),secret:d.boolean().optional()}).strict(),nT=d.object({kind:d.literal("tool_approval"),prompt:d.string().optional(),toolName:v0,toolInput:d.unknown().optional(),riskLevel:d.string().optional(),issues:d.array(d.string()).optional()}).strict(),iT=d.object({kind:d.literal("questionnaire"),prompt:d.string().optional(),questions:d.array(dT).min(1)}).strict(),oT=d.object({kind:d.literal("selection"),prompt:v0,options:d.array(lT).min(1)}).strict(),sT=d.object({kind:d.literal("credential_input"),prompt:v0,provider:v0.optional(),mode:d.enum(["generic","oauth_authorization_code"]).optional(),authorizeUrl:v0.optional(),callbackMode:d.enum(["manual_code","local_callback"]).optional(),expectedState:v0.optional(),fields:d.array(aT).min(1)}).strict(),rT=d.object({kind:d.literal("oauth_device"),prompt:v0,provider:v0.optional(),profileLabel:v0.optional(),verificationUri:v0,userCode:v0,expiresAt:I5.optional(),intervalSeconds:fZ.optional()}).strict(),tT=d.object({kind:d.literal("confirm"),prompt:v0,detail:d.string().optional(),confirmLabel:d.string().optional(),denyLabel:d.string().optional(),defaultApproved:d.boolean().optional()}).strict(),eT=d.discriminatedUnion("kind",[nT,iT,oT,sT,rT,tT]),$C=d.object({kind:d.literal("confirm"),approved:d.boolean()}).strict(),ZC=d.object({kind:d.literal("questionnaire"),answers:d.array(d.string())}).strict(),JC=d.object({kind:d.literal("selection"),selected:v0}).strict(),XC=d.object({kind:d.literal("credential_input"),values:d.record(d.string(),d.string())}).strict(),YC=d.object({kind:d.literal("oauth_device"),acknowledged:d.boolean().optional(),verificationCode:d.string().optional()}).strict(),QC=d.object({kind:d.literal("cancel")}).strict(),oO=d.discriminatedUnion("kind",[$C,ZC,JC,XC,YC,QC]),GC=d.object({kind:d.literal("interaction.required"),requestId:z1,interactionId:dK,source:iO,interaction:eT}).strict(),lK=d.object({kind:d.literal("interaction.respond"),requestId:z1,interactionId:dK,response:oO}).strict(),VC=d.object({code:v0,message:v0,retryable:d.boolean().optional(),details:d.record(d.string(),d.unknown()).optional()}).strict(),WC=d.object({id:v0,createdAt:I5,updatedAt:I5,completedAt:I5.optional(),title:d.string().nullable(),arion:v0,model:v0,messageCount:K1,preview:d.string()}).strict(),sO=d.object({id:v0,arion:v0,model:v0,messages:d.array(d.unknown())}).strict(),HC=d.object({query:d.string().optional(),limit:fZ.max(200).optional(),offset:K1.optional()}).strict(),nO=d.object({sessionId:v0}).strict(),rO=d.object({sessions:d.array(WC)}).strict(),tO=d.object({session:sO}).strict(),eO=d.object({session:sO,loaded:d.literal(!0),runtimeState:d.object({sessionId:v0,stateStatus:d.enum(["idle","running","paused","completed"]),activeRunId:d.string().nullable(),pausedState:d.unknown().nullable(),policySnapshot:d.record(d.string(),d.unknown()).nullable(),lastEventSeq:K1,revision:K1,leaseOwner:d.string().nullable(),leaseExpiresAt:I5.nullable(),updatedAt:I5}).strict().nullable().optional(),pendingInteraction:d.object({interactionId:v0,sessionId:v0,requestId:v0,source:iO,kind:v0,status:d.enum(["pending","answered","applied","expired","canceled"]),prompt:d.record(d.string(),d.unknown()),response:d.record(d.string(),d.unknown()).nullable(),createdAt:I5,answeredAt:I5.nullable(),appliedAt:I5.nullable()}).strict().nullable().optional()}).strict(),yG0=d.object({sessionId:v0,messageLimit:d.number().int().nonnegative().optional()}).strict(),mu=d.object({newSessionId:v0,sourceSessionId:v0,messagesCopied:K1,title:d.string().nullable()}).strict(),cu=d.object({response:P6}).strict(),uu=d.object({invite:s4}).strict(),pu=d.object({invite:n6}).strict(),du=d.object({accepted:e4}).strict(),lu=d.object({pair:j6}).strict(),au=d.object({repair:s6}).strict(),nu=d.object({revoke:T6}).strict(),KC=d.object({text:v0}).strict(),zC=d.object({query:v0,limit:fZ.max(200).optional()}).strict(),UC=d.object({query:d.string().optional(),limit:fZ.max(200).optional(),offset:K1.optional()}).strict(),BC=d.object({id:v0}).strict(),FC=d.object({topic:v0,kind:d.enum(["skills","procedures","tools","all"]).optional(),limit:fZ.max(200).optional()}).strict(),mK=d.object({name:v0}).strict(),DC=d.object({name:v0,description:d.string().optional()}).strict(),OC=d.object({name:v0,description:d.string().optional(),emoji:d.string().optional(),profile:d.string().optional()}).strict(),iu=d.object({providers:d.array(v0).optional()}).strict(),vG0=iu,hG0=iu,NC=d.object({model:v0}).strict(),LC=d.object({args:d.string().optional(),provider:v0.optional(),credential:d.string().optional(),method:v0.optional(),profileLabel:v0.optional(),source:v0.optional()}).strict(),AC=d.object({args:d.string().optional(),provider:v0.optional()}).strict(),qC=r9,EC=r9,xG0=d.object({args:d.string().optional(),recipient:v0.optional(),content:d.string().trim().min(1).optional(),senderName:v0.optional()}).strict().refine(($)=>Boolean($.args||$.recipient&&$.content),{message:"message.send requires args or recipient/content"}),_C=d.union([G8,xG0]),MC=d.object({theme:v0}).strict(),PC=d.object({autonomy:fG0}).strict(),jC=d.object({reason:d.string().optional()}).strict(),TC=d.object({runId:v0.optional(),sessionId:v0.optional()}).strict().refine(($)=>Boolean($.runId||$.sessionId),{message:"run.abort requires runId or sessionId"}),NG=d.object({arion:v0.optional(),port:fZ.optional(),intervalMs:fZ.optional(),allowedToolCategories:d.array(v0).optional(),allowedShellCommands:d.array(v0).optional(),maxWriteOpsPerMinute:fZ.optional(),maxGitPushesPerHour:fZ.optional()}).strict(),gG0=d.object({running:d.boolean(),stopped:d.boolean(),pid:fZ.optional()}).strict(),CC=d.object({user:d.string(),assistant:d.string()}).strict(),RC=d.object({pairs:d.array(CC)}).strict(),wC=d.object({role:v0,content:d.unknown()}).strict(),SC=d.object({messages:d.array(wC).optional(),conversation:d.string().optional()}).strict().refine(($)=>Boolean($.messages||$.conversation),{message:"hook.reflect requires messages or conversation"}),IC=d.object({source:d.enum(["claude","codex","all"]).optional(),limit:fZ.optional()}).strict(),bC=d.object({preHarvest:d.boolean().optional(),feedback:d.boolean().optional(),extract:d.boolean().optional(),stats:d.boolean().optional(),cleanup:d.boolean().optional(),cost:d.boolean().optional(),all:d.boolean().optional(),limit:fZ.optional()}).strict(),$N=d.object({receipt:d.union([n4,i4]),message:d.string().optional()}).strict(),cK=d.object({events:d.array(c8)}).strict(),ZN=d.object({peers:d.array(q4)}).strict(),JN=d.object({peers:d.array(_6)}).strict(),XN=d.object({requests:d.array(M6)}).strict(),YN=d.object({clients:d.array(kZ)}).strict(),QN=d.object({extracted:d.array(d.object({user:d.string(),extracted:K1,error:d.string().optional()}).strict())}).strict(),GN=d.object({aborted:d.literal(!0),runId:v0.optional(),sessionId:v0.optional()}).strict(),VN=d.object({}).catchall(d.unknown()),WN=d.object({success:d.literal(!0),message:d.string(),data:d.object({id:d.string(),count:d.number()})}).strict(),HN=d.object({success:d.literal(!0),message:d.string(),count:K1,memories:d.array(d.unknown())}).strict(),KN=d.object({memories:d.array(d.unknown()),count:K1}).strict(),zN=d.object({success:d.literal(!0),message:d.string(),deleted:d.boolean()}).strict(),UN=d.object({tools:d.array(d.unknown()),count:K1}).strict(),BN=d.object({arions:d.array(d.unknown())}).strict(),FN=d.object({mode:d.string(),prompt:d.string(),name:v0,description:d.string().optional()}).strict(),DN=d.object({arion:d.unknown(),activeArion:d.string()}).strict(),uK=d.object({success:d.literal(!0),name:v0}).strict(),ON=d.object({arion:d.unknown()}).strict(),NN=d.object({models:d.array(d.unknown()),currentModel:d.unknown().optional()}).catchall(d.unknown()),LN=d.object({currentModel:v0}).catchall(d.unknown()),AN=d.object({models:d.array(d.unknown())}).catchall(d.unknown()),qN=d.object({providers:d.array(d.unknown()).optional(),sessionProviders:d.array(v0).optional()}).catchall(d.unknown()),EN=d.object({}).catchall(d.unknown()),_N=d.object({}).catchall(d.unknown()),MN=d.object({theme:d.unknown()}).strict(),PN=d.object({theme:d.string()}).catchall(d.unknown()),jN=d.object({autonomy:d.unknown()}).strict(),TN=d.object({autonomy:d.string()}).catchall(d.unknown()),CN=d.object({}).catchall(d.unknown()),RN=d.object({}).catchall(d.unknown()),ou=d.object({}).catchall(d.unknown()),su=d.object({}).catchall(d.unknown()),wN=d.object({}).catchall(d.unknown()),SN=d.object({}).catchall(d.unknown()),IN=d.object({}).catchall(d.unknown()),bN=d.object({}).catchall(d.unknown()),ru=d.union([k9,rO,tO,eO,mu,ZN,JN,XN,YN,cK,$N,f8,uu,du,cu,pu,lu,au,nu,QN,GN,VN,WN,HN,KN,zN,UN,BN,FN,DN,uK,ON,NN,LN,AN,qN,EN,_N,ou,su,MN,PN,jN,TN,CN,RN,wN,SN,IN,bN]),kC=j8.extend({sessionId:v0.optional()}),fC=a4.extend({sessionId:v0.optional()}),U1={"run.start":{input:kC,result:k9,event:E6},"run.resume":{input:fC,result:k9},"run.abort":{input:TC,result:GN},"interaction.respond":{input:d.object({interactionId:dK,response:oO}).strict(),result:VN},"session.list":{input:HC,result:rO},"session.read":{input:nO,result:tO},"session.load":{input:nO,result:eO},"session.fork":{input:yG0,result:mu},"memory.remember":{input:KC,result:WN},"memory.recall":{input:zC,result:HN},"memory.list":{input:UC,result:KN},"memory.forget":{input:BC,result:zN},"memory.recall_knowledge":{input:FC,result:UN},"arion.list":{input:H1,result:BN},"arion.hatch":{input:DC,result:FN},"arion.become":{input:mK,result:DN},"arion.rest":{input:mK,result:uK},"arion.wake":{input:mK,result:uK},"arion.create":{input:OC,result:ON},"model.list":{input:vG0,result:NN},"model.set":{input:NC,result:LN},"model.refresh":{input:hG0,result:AN},"auth.status":{input:H1,result:qN},"auth.login":{input:LC,result:EN},"auth.logout":{input:AC,result:_N},"auth.clear_session":{input:H1,result:ou},"auth.import_env_session":{input:d.object({providers:d.array(v0).optional()}).strict(),result:su},"peer.list":{input:H1,result:ZN},"peer.list_nearby":{input:H1,result:JN},"peer.pending.list":{input:H1,result:XN},"peer.pending.respond":{input:_4,result:cu},"peer.invite":{input:o4,result:uu},"peer.connect":{input:r4,result:pu},"peer.accept_invite":{input:t4,result:du},"peer.direct_pair":{input:U9,result:lu},"peer.repair":{input:$6,result:au},"peer.revoke":{input:M4,result:nu},"client.list":{input:H1,result:YN},"client.inbox.list":{input:qC,result:cK},"message.send":{input:_C,result:$N},"message.inbox.list":{input:EC,result:cK},"config.theme.get":{input:H1,result:MN},"config.theme.set":{input:MC,result:PN},"config.autonomy.get":{input:H1,result:jN},"config.autonomy.set":{input:PC,result:TN},"system.restart":{input:jC,result:CN},"system.terminal_setup":{input:H1,result:RN},"daemon.start":{input:NG,result:f8},"daemon.status":{input:NG,result:f8},"daemon.stop":{input:NG,result:gG0},"daemon.restart":{input:NG,result:f8},"hook.extract":{input:RC,result:QN},"hook.reflect":{input:SC,result:wN},"hook.consolidate":{input:H1,result:SN},"hook.ingest":{input:IC,result:IN},"hook.harvest":{input:bC,result:bN}},yC=["run.start"],tu=["run.start","run.resume","interaction.respond"],mG0=d.enum(yC);hC=d.object({kind:d.literal("request"),requestId:z1,op:pK,input:d.unknown()}).strict().superRefine(($,Z)=>{vC($.op,"input",$.input,Z)}),xC=d.object({kind:d.literal("event"),requestId:z1,seq:K1,op:mG0,event:d.unknown()}).strict().superRefine(($,Z)=>{vC($.op,"event",$.event,Z)}),cG0=d.object({kind:d.literal("result"),requestId:z1,op:pK,ok:d.literal(!0),result:d.unknown()}).strict().superRefine(($,Z)=>{vC($.op,"result",$.result,Z)}),uG0=d.object({kind:d.literal("result"),requestId:z1,op:d.union([pK,d.literal("unknown")]),ok:d.literal(!1),error:VC}).strict(),gC=d.union([cG0,uG0]),eu=d.union([hC,lK]),$p=d.union([xC,gC,GC])});import{z as y8}from"zod";var LG,pG0,aK,AG,nK,iK,kN,dG0,t2,u8;var Jp=E(()=>{aO();D7();yO();LG=y8.string().trim().min(1),pG0=y8.string().min(1).refine(($)=>$.trim().length>0),aK=y8.number().int().nonnegative(),AG=y8.enum(["starting","tls_bound","control_ready","network_ready","mesh_ready","degraded","stopped"]),nK=y8.object({host:LG,port:y8.number().int().min(1).max(65535)}).strict(),iK=y8.object({caFingerprint:d$,caCertPem:pG0,principalIdentity:f0,loopbackIdentity:F7}).strict(),kN=y8.object({signingPublicKey:x0,transportPublicKey:B$,transportEndpoint:l4,displayNameSnapshot:LG.optional()}).strict(),dG0=y8.object({provider:y8.string().min(1),status:y8.enum(["cached","refreshing","verified","requires_auth","unavailable","error"]),reason:y8.string().optional(),lastCheckedAt:y8.string().optional()}).strict(),t2=y8.object({models:y8.array(y8.unknown()),currentModel:y8.string().optional(),status:f8.optional(),lastRefreshAt:y8.string().optional(),stale:y8.boolean().optional(),refreshInFlight:y8.boolean().optional(),providerStatuses:y8.array(dG0).optional()}).strict(),u8=y8.object({nodeId:G0,runtimeId:k8,arionName:LG.optional(),ownerGeneration:TK,bootstrapRevision:aK,phase:AG,protocolVersion:L4,controlEndpoint:nK,displayNameSnapshot:LG.optional(),signingPublicKey:x0,transportPublicKey:B$,transportEndpoint:l4,tls:iK,publishedAt:LG,degradedReason:LG.optional(),failedPhase:AG.optional()}).strict()});function fN($){return $==="invited"||$==="joining"}function yN($,Z){return $==="paired_unverified"&&Z.proofValid}function vN($){return $==="joining"||$==="paired_unverified"||$==="verified"}function qG($){return $==="paired_unverified"||$==="verified"}function hN($,Z){if($==="revoked")return!1;return Z==="endpoint_known"||Z==="connecting"||Z==="connected"||Z==="degraded"}function xN($,Z){return $==="verified"&&Z==="connected"}function gN($){return $==="verified"}function lG0($){return $.trim().toLowerCase()}function oK($){let Z=lG0($);return Z==="localhost"||Z==="::1"||Z==="[::1]"||Z.endsWith(".localhost")||/^127\./.test(Z)}function b5($){let Z=$.endpointHost?.trim(),J=$.endpointPort;if(!Z||typeof J!=="number"||!Number.isFinite(J))return{};if(oK(Z))return{};return{endpointHost:Z,endpointPort:J}}function sK($){$.exec(`
|
|
4
|
+
var QG0=Object.create;var{getPrototypeOf:GG0,defineProperty:MK,getOwnPropertyNames:Au,getOwnPropertyDescriptor:VG0}=Object,qu=Object.prototype.hasOwnProperty;function Eu($){return this[$]}var WG0,HG0,U7=($,Z,J)=>{var X=$!=null&&typeof $==="object";if(X){var Y=Z?WG0??=new WeakMap:HG0??=new WeakMap,Q=Y.get($);if(Q)return Q}J=$!=null?QG0(GG0($)):{};let G=Z||!$||!$.__esModule?MK(J,"default",{value:$,enumerable:!0}):J;for(let V of Au($))if(!qu.call(G,V))MK(G,V,{get:Eu.bind($,V),enumerable:!0});if(X)Y.set($,G);return G},ZG=($)=>{var Z=(Lu??=new WeakMap).get($),J;if(Z)return Z;if(Z=MK({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function"){for(var X of Au($))if(!qu.call(Z,X))MK(Z,X,{get:Eu.bind($,X),enumerable:!(J=VG0($,X))||J.enumerable})}return Lu.set($,Z),Z},Lu,IZ=($,Z)=>()=>(Z||$((Z={exports:{}}).exports,Z),Z.exports);var KG0=($)=>$;function zG0($,Z){this[$]=KG0.bind(null,Z)}var A$=($,Z)=>{for(var J in Z)MK($,J,{get:Z[J],enumerable:!0,configurable:!0,set:zG0.bind(Z,J)})};var E=($,Z)=>()=>($&&(Z=$($=0)),Z);var r0=import.meta.require;function _u($){if($ instanceof RO)return!0;if(!$||typeof $!=="object")return!1;let Z=$;return Z.code==="ASK_USER_PAUSE_REQUIRED"||Z.name==="AskUserPauseRequiredError"&&Array.isArray(Z.questions)}var RO;var Mu=E(()=>{RO=class RO extends Error{code="ASK_USER_PAUSE_REQUIRED";questions;constructor($,Z="ask_user requires additional answers before this run can continue."){super(Z);this.name="AskUserPauseRequiredError",this.questions=$.map((J)=>({question:J.question,...Array.isArray(J.options)?{options:[...J.options]}:{}}))}}});import{z as $$}from"zod";var t8,G0,k8,P5,PK,j5,JG,jK,d2,wO,TK,Pu,B7,N4,f0,B$,d$,F7,x0,l4,M8,e8,XG,YG,CK,ju,Tu;var D7=E(()=>{t8=$$.string().trim().min(1),G0=t8.brand(),k8=t8.brand(),P5=$$.object({nodeId:G0,createdAt:t8,schemaVersion:$$.number().int().positive(),migratedFromLegacy:$$.boolean()}),PK=$$.number().int().nonnegative(),j5=$$.number().int().nonnegative(),JG=$$.number().int().nonnegative(),jK=$$.number().int().nonnegative(),d2=$$.enum(["local_operator_confirmed","remote_capability_authenticated"]),wO=$$.object({localNodeId:G0,targetNodeId:G0,revocationGeneration:jK,operatorConfirmation:d2}),TK=$$.number().int().positive(),Pu=$$.number().int().nonnegative(),B7=$$.object({schemaVersion:$$.number().int().positive(),nodeId:G0,ariaHome:t8,runtimePid:$$.number().int().positive(),runtimeId:k8,displayNameSnapshot:t8.optional(),runtimeSocket:t8,startedAt:t8,lastHeartbeat:t8,ownerGeneration:TK}).strict(),N4=t8.brand(),f0=t8.brand(),B$=t8.brand(),d$=t8.brand(),F7=t8.brand(),x0=t8.brand(),l4=$$.object({host:t8,port:$$.number().int().min(1).max(65535)}),M8=$$.discriminatedUnion("kind",[$$.object({kind:$$.literal("node"),nodeId:G0}),$$.object({kind:$$.literal("client"),clientId:N4})]),e8=$$.object({host:t8,port:$$.number().int().min(1).max(65535),tlsCaFingerprint:d$,tlsServerIdentity:f0,protocolVersion:$$.number().int().positive(),endpointRevision:j5.optional()}),XG=$$.object({nodeId:G0,principalFingerprint:f0,transportPublicKey:B$,publicationRevision:PK.optional(),controlEndpoint:e8.optional(),displayNameSnapshot:t8.optional()}),YG=$$.object({nodeId:G0,runtimeId:k8,lastHeartbeat:t8.optional(),controlEndpoint:e8.optional(),displayNameSnapshot:t8.optional()}),CK=t8.brand(),ju=$$.discriminatedUnion("status",[$$.object({status:$$.literal("pending"),queuedAt:$$.string(),nextAttemptAt:$$.string().optional(),attemptCount:$$.number()}),$$.object({status:$$.literal("delivered"),deliveredAt:$$.string()}),$$.object({status:$$.literal("expired"),reason:$$.literal("ttl_exceeded"),queuedAt:$$.string(),expiredAt:$$.string()}),$$.object({status:$$.literal("rejected"),reason:$$.enum(["recipient_revoked","recipient_unknown","envelope_invalid"])})]),Tu=$$.discriminatedUnion("status",[$$.object({status:$$.literal("accepted"),operationId:CK,queuedAt:$$.string()}),$$.object({status:$$.literal("rejected"),reason:$$.enum(["recipient_revoked","recipient_unknown","envelope_invalid"])})])});import{z as O7}from"zod";function UG0($,Z){if(!Z)return $.deliveryState==="rejected"?"rejected":"failed";if($.delivered)return"acked";if($.queued){if($.queuedReason==="awaiting_remote_ack"||$.deliveryState==="dispatching"||$.deliveryState==="sent")return"dispatching";return"queued_for_route"}if($.deliveryState==="expired")return"expired";return"sent"}function BG0($){if(!$.deliveryState)return;if($.deliveryState==="sent"&&$.queued&&$.queuedReason==="awaiting_remote_ack")return"dispatching";return $.deliveryState}function FG0($,Z){return Cu[$]<=Cu[Z]?$:Z}function DG0($,Z){if($==="local_runtime")return"none";switch(Z){case"queued_for_route":return"handshaking";case"dispatching":return"connected";case"failed":case"rejected":case"expired":return"none";case"acked":return"connected";case"accepted":case"sent":return"connected";default:return"none"}}function OG0($,Z,J){if($==="local_runtime")return"none";if(!Z)return J;return Ru[Z]<=Ru[J]?Z:J}function NG0($,Z,J){if(Z==="failed"||Z==="rejected")return"cannot_address";if($==="local_runtime"&&Z==="acked")return"can_queue_only";if(Z==="queued_for_route")return"can_queue_only";if(Z==="dispatching")return J==="reconnecting"?"can_queue_only":"can_send_now";if(Z==="expired")return"cannot_address";return J==="connected"?"can_send_now":"can_queue_only"}function LG0($,Z){if(!$)return Z;return wu[$]<=wu[Z]?$:Z}function AG0($,Z){if(Z==="rejected")return!1;return $.accepted??!0}function qG0($){return $==="queued_for_route"||$==="dispatching"}function EG0($,Z,J){if(!J)return;if($.queuedReason)return $.queuedReason;if(Z==="dispatching")return"awaiting_remote_ack";if(Z==="queued_for_route")return"route_not_established";return}function b9($){let Z=UG0($,$.accepted??!0),J=BG0($),X=J?FG0(J,Z):Z,Y=AG0($,X),Q=X==="acked",G=qG0(X),V=DG0($.transport,X),W=OG0($.transport,$.sessionState,V),H=NG0($.transport,X,W),K=LG0($.deliveryReadiness,H),z=EG0($,X,G);return{transport:$.transport,delivered:Q,queued:G,accepted:Y,deliveryState:X,sessionState:W,deliveryReadiness:K,...z?{queuedReason:z}:{}}}function N7($){return b9({transport:$.transport,delivered:!0,queued:!1,accepted:!0,deliveryState:"acked",...$.sessionState?{sessionState:$.sessionState}:{},...$.deliveryReadiness?{deliveryReadiness:$.deliveryReadiness}:{}})}function T5($){return b9({transport:$.transport,delivered:!1,queued:!0,accepted:!0,deliveryState:"queued_for_route",queuedReason:"route_not_established",...$.sessionState?{sessionState:$.sessionState}:{},...$.deliveryReadiness?{deliveryReadiness:$.deliveryReadiness}:{}})}function QG($){return b9({transport:$.transport,delivered:!1,queued:!0,accepted:!0,deliveryState:"dispatching",queuedReason:"awaiting_remote_ack",...$.sessionState?{sessionState:$.sessionState}:{},...$.deliveryReadiness?{deliveryReadiness:$.deliveryReadiness}:{}})}function tJ($){return b9({transport:$.transport,delivered:!1,queued:!1,accepted:!0,deliveryState:"sent",...$.sessionState?{sessionState:$.sessionState}:{},...$.deliveryReadiness?{deliveryReadiness:$.deliveryReadiness}:{}})}function GG($){switch($){case"queued":case"queued_for_route":return"queued_for_route";case"dispatching":case"acked":case"expired":return $;default:throw Error(`[delivery-receipts] Unsupported outbox status: ${$}`)}}var nJ,iJ,oJ,sJ,rJ,SO,Su,Cu,Ru,wu;var xT=E(()=>{nJ=O7.enum(["in_process","local_runtime","tunnel","relay"]),iJ=O7.enum(["accepted","queued_for_route","dispatching","sent","acked","expired","failed","rejected"]),oJ=O7.enum(["none","handshaking","connected","reconnecting","dead"]),sJ=O7.enum(["cannot_address","can_queue_only","can_send_now"]),rJ=O7.enum(["route_not_established","awaiting_remote_ack","transport_unavailable"]),SO=O7.enum(["queued_for_route","dispatching","acked","expired"]),Su=O7.object({transport:nJ,delivered:O7.boolean(),queued:O7.boolean(),accepted:O7.boolean().optional(),deliveryState:iJ.optional(),sessionState:oJ.optional(),deliveryReadiness:sJ.optional(),queuedReason:rJ.optional()}).strict(),Cu={rejected:0,failed:1,expired:2,queued_for_route:3,dispatching:4,accepted:5,sent:6,acked:7},Ru={dead:0,none:1,handshaking:2,reconnecting:3,connected:4},wu={cannot_address:0,can_queue_only:1,can_send_now:2}});import{z as eJ}from"zod";var Iu,_G0,VG,Q1;var gT=E(()=>{D7();D7();Iu=eJ.string().trim().min(1),_G0=eJ.record(eJ.string(),eJ.unknown()),VG=eJ.enum(["client_attached","client_detached","runtime_started","runtime_stopped","runtime_stale","runtime_restarted","model_snapshot_updated","pair_proposed","proof_committed","continuity_bound","revocation_committed","ingress_accepted","ingress_rejected","durable_send_queued","durable_send_dispatching","durable_send_acked","durable_send_expired"]),Q1=eJ.object({eventId:Iu,nodeId:G0,runtimeId:k8,kind:VG,revision:eJ.number().int().nonnegative().optional(),recordedAt:Iu,payload:_G0}).strict()});import{z as bu}from"zod";var MG0,$X;var mT=E(()=>{D7();MG0=bu.string().trim().min(1),$X=bu.object({nodeId:G0,principalFingerprint:f0,transportPublicKey:B$,bindingGeneration:JG,displayNameSnapshot:MG0.optional()}).strict()});import{z as y$}from"zod";function fu($){let Z=y$.toJSONSchema($);return delete Z.$schema,Z}function RK($){return $===a6}function bZ($,Z="network runtime"){if(!RK($))throw Error(`Unsupported ${Z} protocol version ${String($)}. Supported: ${a6}`);return $}var n$,PG0,ku,a6=1,L4,wK,IO,l2,ZX,WG,bO,C5,JX,kO,fO,SK,a2,IK,XX,YX,HG;var yO=E(()=>{D7();gT();mT();n$=y$.string().trim().min(1),PG0=y$.string().min(1).refine(($)=>$.trim().length>0),ku=y$.record(y$.string(),y$.unknown());L4=y$.literal(a6);wK=y$.object({protocolVersion:L4,messageId:n$,senderNodeId:G0,recipientNodeId:G0,storedAt:y$.number().int().nonnegative()}).strict(),IO=y$.object({nodeId:G0,audienceNodeId:G0.optional(),publicKey:B$,leaderDisplayNameSnapshot:n$.optional(),host:n$,port:y$.number().int().min(1).max(65535),controlEndpoint:e8.optional(),psk:n$,displayNameSnapshot:n$.optional(),signingPublicKey:x0.optional(),caCert:PG0.optional(),createdAt:y$.number().int().nonnegative(),expiresAt:y$.number().int().nonnegative(),tokenNonce:n$,coordinationUrl:n$.optional(),networkId:n$.optional()}).strict(),l2=y$.object({protocolVersion:L4,nodeId:G0,principalFingerprint:f0,peerPublicKey:B$,signingPublicKey:x0,transportEndpoint:l4,controlEndpoint:e8.optional(),displayNameSnapshot:n$.optional(),inviteTokenNonce:n$}).strict(),ZX=l2.extend({proofOfWork:n$}).strict(),WG=fu(ZX),bO=y$.union([y$.object({protocolVersion:L4,deliveryAck:wK}).strict(),y$.object({protocolVersion:L4,ariaMessage:y$.unknown()}).strict(),y$.object({protocolVersion:L4,joinRequest:l2}).strict()]),C5=XG.extend({protocolVersion:L4,publicationRevision:PK,signingPublicKey:x0,transportEndpoint:l4,advertisedHosts:y$.array(n$).min(1).optional()}).strict(),JX=y$.object({protocolVersion:L4,nodeId:G0,displayNameSnapshot:n$,principalFingerprint:f0,controlPort:y$.number().int().min(1).max(65535),advertisedHosts:y$.array(n$).min(1),tlsCaFingerprint:y$.string().trim().min(1).optional()}).strict(),kO=y$.object({protocolVersion:L4,nodeId:G0,transportPublicKey:B$,principalFingerprint:f0,endpointRevision:j5,controlEndpoint:e8.optional(),displayNameSnapshot:n$.optional()}).strict(),fO=y$.object({protocolVersion:L4,nodeId:G0,principalFingerprint:f0,transportPublicKey:B$,controlEndpoint:e8.optional(),displayNameSnapshot:n$.optional(),presharedKey:n$}).strict(),SK=y$.object({nodeId:G0,previousPrincipalFingerprint:f0,newPrincipalFingerprint:f0,newTransportPublicKey:B$.optional(),bindingGeneration:JG,revocationGeneration:jK.optional(),createdAt:n$}).strict(),a2=y$.object({statement:SK,delegationSignature:n$,acceptanceSignature:n$,previousPublicKey:n$,newPublicKey:n$}).strict(),IK=y$.enum(["network.register","network.revoke","network.list_peers","pair.direct","pair.relay","pair.relay_response","peer.update_capabilities","peer.update_trust_tier"]),XX=y$.object({version:L4,id:n$,operation:IK,principal:$X,target:$X,namespace:n$,policyEpoch:y$.number().int().nonnegative(),nonce:n$,timestamp:y$.number().int().nonnegative(),ttl:y$.number().int().positive(),contextHash:n$,payload:ku,signature:n$,method:n$.optional(),path:n$.optional(),metadata:ku.optional(),reason:n$.optional(),parentEnvelopeId:n$.optional()}).strict(),YX=y$.object({nodeId:G0,envelope:XX}).strict(),HG=fu(YX)});import{z as P8}from"zod";function vO($){let Z=P8.toJSONSchema($);return delete Z.$schema,Z}var L7,QX,hO,A4,xO,GX,gO,bK,KG,VX,zG;var cT=E(()=>{D7();yO();L7=P8.string().trim().min(1);QX=P8.object({displayNameSnapshot:L7,nodeId:G0,signingPublicKey:x0,port:P8.number().int().min(1).max(65535),ephemeralPublicKey:P8.string().max(512),ephemeralKeySignature:P8.string().max(512),caCert:P8.string().max(4096).optional(),protocolVersion:P8.number().min(1).max(100).optional(),wait:P8.boolean().optional()}).strict(),hO=vO(QX),A4=P8.object({inviteToken:L7,nodeId:G0,displayNameSnapshot:L7.optional(),transportEndpoint:l4,controlEndpoint:e8,continuity:a2.optional()}).strict(),xO=vO(A4),GX=P8.object({targetNodeId:G0,displayNameSnapshot:L7,nodeId:G0,signingPublicKey:x0,port:P8.number().int().min(1).max(65535),ephemeralPublicKey:P8.string().max(512),ephemeralKeySignature:P8.string().max(512),caCert:P8.string().max(4096).optional()}).strict(),gO=vO(GX),bK=P8.object({targetNodeId:G0,signingPublicKey:x0,signature:L7.max(512),timestamp:L7.max(20)}).strict(),KG=vO(bK),VX=P8.object({id:L7,nodeId:G0,displayNameSnapshot:L7.optional(),principalFingerprint:f0,signingPublicKey:x0,port:P8.number().int().min(1).max(65535),ingressHost:L7,responderControlHostHint:L7.optional(),ephemeralPublicKey:P8.string().max(512).optional(),ephemeralKeySignature:P8.string().max(512).optional(),caCert:P8.string().max(4096).optional(),expiresAt:P8.number().int().nonnegative()}).strict(),zG=P8.object({requests:VX.array()}).strict()});import{z as A7}from"zod";function yK($,Z){return jG0[$].includes(Z)}function n2($){let Z=fK.parse($),J=Boolean(Z.endpointHost&&Z.endpointPort),X=typeof Z.lastHandshake==="number"&&Number.isFinite(Z.lastHandshake)&&Z.lastHandshake>0,Y=Z.status==="pending"?"invited":Z.status==="revoked"?"revoked":Z.status==="active"?"verified":"paired_unverified",Q=(()=>{switch(Z.status){case"active":return X?"connected":J?"endpoint_known":"disconnected";case"pending_tunnel":return X?"connected":J?"connecting":"unknown";case"pending_verification":return X?"connected":J?"endpoint_known":"unknown";case"pending":return J?"endpoint_known":"unknown";case"revoked":return J?"disconnected":"unknown"}})();return vK.parse({identityState:Y,transportState:Q})}function cO($,Z,J={}){if($==="verified"&&Z==="paired_unverified")return J.viaContinuity===!0;return TG0[$].includes(Z)}function uO($,Z){return CG0[$].includes(Z)}function pO($,Z){return yu[$]-yu[Z]}var kK,WX,HX,mO,fK,jG0,vK,TG0,CG0,yu;var uT=E(()=>{kK=A7.enum(["active","pending","pending_tunnel","pending_verification","revoked"]),WX=A7.enum(["invited","joining","paired_unverified","verified","revoked"]),HX=A7.enum(["unknown","endpoint_known","connecting","connected","degraded","disconnected"]),mO=A7.enum(["repair","continuity","revocation"]),fK=A7.object({status:kK,endpointHost:A7.string().nullable().optional(),endpointPort:A7.number().int().nullable().optional(),lastHandshake:A7.number().int().nullable().optional()}),jG0={invited:["unknown","endpoint_known"],joining:["unknown","endpoint_known","connecting"],paired_unverified:["unknown","endpoint_known","connecting","connected","degraded","disconnected"],verified:["unknown","endpoint_known","connecting","connected","degraded","disconnected"],revoked:["unknown","disconnected"]};vK=A7.object({identityState:WX,transportState:HX}).superRefine(($,Z)=>{if(!yK($.identityState,$.transportState))Z.addIssue({code:A7.ZodIssueCode.custom,message:`invalid peer state combination: ${$.identityState}/${$.transportState}`})});TG0={invited:["invited","joining","revoked"],joining:["joining","paired_unverified","revoked"],paired_unverified:["paired_unverified","verified","revoked"],verified:["verified","revoked"],revoked:["revoked"]};CG0={unknown:["unknown","endpoint_known"],endpoint_known:["endpoint_known","connecting","disconnected"],connecting:["connecting","connected","endpoint_known","disconnected"],connected:["connected","degraded","disconnected"],degraded:["degraded","connected","disconnected"],disconnected:["disconnected","endpoint_known"]};yu={repair:0,continuity:1,revocation:2}});import{z as s}from"zod";function wG0($){let Z=s.toJSONSchema($);return delete Z.$schema,Z}function SG0($){if(!$||typeof $!=="object")return;let Z=$.message;if(typeof Z!=="string")return;let J=Z.trim();return J.length>0?J:void 0}function IG0($){let Z=$.trim().toLowerCase();return Z==="internal server error"||Z.startsWith("internal server error:")||Z.startsWith("http 500")}function G1($,Z){let J=typeof $==="string"&&$.trim().length>0?$:void 0,X=SG0(Z);if(!X)return J;if(!J||IG0(J))return X;return J}function R5($,Z){let J=G1($,Z)??"Trusted runtime error";return Object.assign(Error(J),{...Z===void 0?{}:{diagnostic:Z},...typeof $==="string"&&$.trim().length>0&&$!==J?{publicMessage:$}:{}})}function bG0(){return{status:"stopped",intervalMs:null,lastWakeTickAt:null,lastCheckpointResult:"never",safetyPolicySummary:{},ownerClientKind:null}}var y0,hu,dO,RG0,xu,j8,i2,k9,a4,E6,n4,i4,G8,q7,E7,r9,c8,q4,_6,UG,hK,vu,xK,f8,o2,M6,E4,_4,P6,o4,s4,r4,yl0,n6,V1,t4,e4,i6,o6,U9,BG,j6,M4,T6,$6,s6,FG,kZ,s2,r6,gu,DG,lO,r2,_7,w5,KX,OG,gK,kG0,W1,t6,zX,S5;var aO=E(()=>{D7();xT();cT();uT();y0=s.string().trim().min(1),hu=s.enum(["minimal","balanced","high","full"]),dO=s.array(s.string()).optional(),RG0=s.array(s.custom()).optional();xu=s.object({providers:s.array(y0).optional(),credentials:s.array(s.object({provider:y0,apiKey:y0,source:s.enum(["env","config"]).optional(),credentialType:s.enum(["api_key","oauth","token"]).optional()}).strict()).optional()}).strict(),j8=s.object({task:y0,arion:y0.optional(),cwd:y0.optional(),history:RG0,requestCredentialOverride:xu.optional(),requestedModel:y0.optional(),preferredTier:s.enum(["fast","balanced","powerful","ensemble"]).optional(),budget:s.number().positive().optional(),maxTurns:s.number().int().positive().optional(),autonomy:hu.optional(),allowedTools:dO,deniedTools:dO,noMemory:s.boolean().optional(),systemPrompt:s.string().optional(),approvalMode:s.enum(["pause","approve","deny"]).optional(),askUserAnswers:s.array(s.string()).optional()}).strict(),i2=s.lazy(()=>s.object({message:s.string(),name:s.string().optional(),stack:s.string().optional(),cause:i2.optional()}).catchall(s.unknown()));k9=s.object({success:s.boolean(),output:s.string().optional(),messages:s.array(s.unknown()).optional(),toolCalls:s.array(s.unknown()).optional(),usage:s.unknown().optional(),turnCount:s.number().int().nonnegative().optional(),thinking:s.array(s.unknown()).optional(),nativeToolResults:s.array(s.unknown()).optional(),traces:s.array(s.unknown()).optional(),pipelineTiming:s.unknown().optional(),guardrailEvents:s.array(s.unknown()).optional(),handoffs:s.array(s.unknown()).optional(),state:s.unknown().optional(),error:s.string().optional(),diagnostic:i2.optional()}).strict(),a4=s.object({state:s.unknown(),arion:y0.optional(),cwd:y0.optional(),requestCredentialOverride:xu.optional(),requestedModel:y0.optional(),preferredTier:s.enum(["fast","balanced","powerful","ensemble"]).optional(),budget:s.number().positive().optional(),maxTurns:s.number().int().positive().optional(),autonomy:hu.optional(),allowedTools:dO,deniedTools:dO,noMemory:s.boolean().optional(),systemPrompt:s.string().optional(),approvalMode:s.enum(["pause","approve","deny"]).optional(),askUserAnswers:s.array(s.string()).optional()}).strict(),E6=s.discriminatedUnion("type",[s.object({type:s.literal("text_delta"),content:s.string()}),s.object({type:s.literal("tool_start"),id:y0,name:y0,input:s.unknown().optional()}),s.object({type:s.literal("approval_needed"),toolName:y0,toolInput:s.unknown().optional(),riskLevel:s.string().optional(),issues:s.array(s.string()).optional()}),s.object({type:s.literal("tool_result"),id:y0,name:y0,durationMs:s.number().nonnegative(),result:s.unknown(),input:s.unknown().optional()}),s.object({type:s.literal("usage_update"),usage:s.unknown()}),s.object({type:s.literal("turn_complete"),turnNumber:s.number().int().nonnegative()}),s.object({type:s.literal("guardrail_rejected"),stage:s.enum(["input","output"]),message:s.string()}),s.object({type:s.literal("pipeline_timing"),report:s.unknown()}),s.object({type:s.literal("messages_snapshot"),messages:s.array(s.unknown())}),s.object({type:s.literal("error"),error:s.object({message:s.string(),diagnostic:i2.optional()})}),s.object({type:s.literal("native_tool_result"),metadata:s.unknown()}),s.object({type:s.literal("thinking_start")}),s.object({type:s.literal("thinking_delta"),content:s.string()}),s.object({type:s.literal("thinking_end"),blocks:s.array(s.unknown()),durationMs:s.number().nonnegative()}),s.object({type:s.literal("tool_args_delta"),id:y0,args:s.string()}),s.object({type:s.literal("span_start"),spanId:y0,spanType:y0,name:y0}),s.object({type:s.literal("span_end"),spanId:y0,durationMs:s.number().nonnegative()}),s.object({type:s.literal("handoff_start"),target:y0,id:y0}),s.object({type:s.literal("handoff_result"),target:y0,result:s.string(),id:y0}),s.object({type:s.literal("paused"),state:s.unknown()})]),n4=s.object(Su.shape).strict().transform(($)=>b9($)),i4=s.object({transport:nJ,delivered:s.boolean(),queued:s.boolean(),accepted:s.boolean().optional(),deliveryState:iJ.optional(),sessionState:oJ.optional(),deliveryReadiness:sJ.optional(),queuedReason:rJ.optional(),storedAt:s.number().int().nonnegative().optional()}).strict().transform(({storedAt:$,...Z})=>({...b9(Z),...$!==void 0?{storedAt:$}:{}})),G8=s.object({rawMessage:s.record(s.string(),s.unknown()),recipientInbox:M8.optional(),to:y0.optional(),content:s.string().optional(),type:y0.optional(),priority:s.number().int().optional(),correlationId:s.string().optional(),metadata:s.record(s.string(),s.unknown()).optional()}).strict().superRefine(($,Z)=>{if(!$.recipientInbox||$.to===void 0)return;if($.recipientInbox.kind==="client"){Z.addIssue({code:s.ZodIssueCode.custom,message:'OutboundMessage.to is a compatibility alias for node recipients only; omit it for recipientInbox.kind === "client"',path:["to"]});return}if($.recipientInbox.nodeId!==$.to)Z.addIssue({code:s.ZodIssueCode.custom,message:"OutboundMessage.recipientInbox.nodeId must match OutboundMessage.to when both are provided",path:["to"]})}),q7=s.object({afterRevision:s.number().int().nonnegative().optional()}).strict(),E7=s.object({afterCreatedAt:s.number().int().nonnegative().optional(),afterId:y0.optional()}).strict(),r9=s.object({cursor:E7.optional(),limit:s.number().int().positive().max(1000).optional(),unreadOnly:s.boolean().optional()}).strict(),c8=s.object({id:y0,senderNodeId:G0,senderDisplayNameSnapshot:y0.optional(),senderType:y0.optional(),senderClientId:s.string().nullable().optional(),recipientClientId:s.string().nullable().optional(),inboxAddress:M8,type:y0,content:s.string(),priority:s.number().int(),createdAt:s.number().int().nonnegative(),correlationId:s.string().nullable().optional(),replyTo:s.string().nullable().optional()}).strict(),q4=s.object({nodeId:G0,transportPublicKey:B$,displayNameSnapshot:y0.optional(),identityState:WX,transportState:HX,endpointRevision:j5,updatedAt:s.string(),lastSeenAt:s.string().optional()}).strict(),_6=s.object({displayNameSnapshot:y0,nodeId:G0,host:y0,port:s.number().int().min(1).max(65535),principalFingerprint:f0,version:y0,tlsCaFingerprint:d$.optional(),transport:s.enum(["lan","wan"]).optional(),status:s.enum(["discovered","connected"]).optional()}).strict(),UG=s.object({allowedToolCategories:s.array(y0).optional(),allowedShellCommands:s.array(y0).optional(),maxWriteOpsPerMinute:s.number().int().positive().optional(),maxGitPushesPerHour:s.number().int().positive().optional()}).strict(),hK=s.object({status:s.enum(["running","stopped"]),intervalMs:s.number().int().positive().nullable(),lastWakeTickAt:s.string().nullable(),lastCheckpointResult:s.enum(["success","error","never"]),safetyPolicySummary:UG,ownerClientKind:y0.nullable()}).strict(),vu=s.object({backend:s.literal("bun"),compatibilityBackend:s.enum(["better-sqlite3","node:sqlite"]).optional(),pragmas:s.boolean().optional(),fts5:s.boolean().optional(),sqliteVec:s.boolean().optional(),loadableExtensions:s.boolean(),customSQLiteConfigured:s.boolean(),customSQLitePath:y0.optional(),vectorSearchMode:s.enum(["sqlite-vec","javascript-fallback"]).optional(),vectorFallbackMaxRows:s.number().int().positive().optional()}).strict(),xK=s.object({memoria:vu.optional(),networkState:vu.optional()}).strict();f8=s.object({nodeId:G0,runtimeId:k8,port:s.number().int().min(1).max(65535),attachedClients:s.number().int().nonnegative().optional(),storage:xK.optional(),autonomousLoop:hK.optional().default(bG0())}).strict(),o2=s.object({intervalMs:s.number().int().positive().optional(),safetyPolicy:UG.optional()}).strict(),M6=s.object({id:y0,nodeId:G0,displayNameSnapshot:y0.optional(),principalFingerprint:f0}).strict(),E4=s.object({inviteId:y0,inviteLabel:y0.optional(),createdAt:y0,expiresAt:y0.nullable().optional()}).strict(),_4=s.object({requestId:y0,accepted:s.boolean()}).strict(),P6=s.object({accepted:s.boolean().optional(),inviteToken:s.string().optional(),error:s.string().optional()}).strict(),o4=s.object({inviteLabel:y0.optional(),durationMs:s.number().int().min(0).optional()}).strict(),s4=s.object({inviteToken:y0,pendingInvite:E4}).strict(),r4=s.object({nodeId:G0,displayName:y0,principalFingerprint:f0.optional(),controlEndpoint:e8,transportEndpoint:l4.optional(),transport:s.enum(["lan","wan"]).optional()}).strict(),yl0=s.enum(["pending_verification"]),n6=s.discriminatedUnion("mode",[s.object({nodeId:G0,displayNameSnapshot:y0.optional(),mode:s.literal("lan_direct"),pairingProofState:s.literal("pending_verification")}).strict(),s.object({nodeId:G0,displayNameSnapshot:y0.optional(),mode:s.literal("wan_pair"),pairingProofState:s.literal("pending_verification")}).strict()]),V1=s.object({success:s.boolean(),nodeId:G0,displayNameSnapshot:y0.optional()}).strict(),t4=s.object({inviteToken:y0}).strict(),e4=V1,i6=s.object({inviteId:y0}).strict(),o6=s.object({cancelled:s.boolean(),inviteId:y0}).strict(),U9=s.object({peerNodeId:G0,principalFingerprint:f0,peerDisplayName:y0.optional(),peerWgPubkey:B$,peerSigningPubkey:y0,transportEndpoint:l4,controlEndpoint:e8,psk:y0}).strict(),BG=wG0(U9),j6=s.object({received:s.literal(!0),pairingProofState:s.literal("pending_verification")}).strict(),M4=s.object({nodeId:G0,envelope:s.record(s.string(),s.unknown()).optional()}).strict(),T6=s.object({revoked:s.boolean(),nodeId:G0,displayNameSnapshot:y0.optional()}).strict(),$6=s.object({nodeId:G0,endpointHost:y0,endpointPort:s.number().int().min(1).max(65535),endpointRevision:j5}).strict(),s6=s.object({repaired:s.boolean(),nodeId:G0,endpointHost:y0,endpointPort:s.number().int().min(1).max(65535),endpointRevision:j5}).strict(),FG=s.enum(["tui","daemon-launcher","pipe","local-api"]),kZ=s.object({clientId:N4,clientKind:FG,displayLabel:y0,self:s.boolean(),attachedAt:y0,lastSeenAt:y0}).strict(),s2=s.object({clientId:N4,clientAuthToken:y0}).strict(),r6=s2,gu=s.object({provider:y0,apiKey:y0,source:s.enum(["env","config"]).optional(),credentialType:s.enum(["api_key","oauth","token"]).optional()}).strict(),DG=s.object({providers:s.array(y0).optional(),credentials:s.array(gu).optional()}).strict(),lO=s.object({providers:s.array(y0).optional(),credentials:s.array(gu).optional()}).strict(),r2=s.object({providers:s.array(y0)}).strict(),_7=s.object({clientKind:FG,lease:s.boolean().optional(),pid:s.number().optional(),displayName:s.string().optional()}).strict(),w5=s2,KX=s.object({clientId:N4}).strict(),OG=s.object({detached:s.boolean()}).strict(),gK=s.enum(["submitRun","resumeRun","streamRun","subscribeRuntimeEvents","sendBestEffort","sendDurable","listInbox","listDirectClientInbox","listPeers","listNearbyPeers","listAttachedClients","subscribeDirectClientInbox","getRuntimeStatus","getModelSnapshot","refreshModelSnapshot","setCurrentModel","getSessionCredentialOverlayState","setSessionCredentialOverlay","clearSessionCredentialOverlay","startAutonomousLoop","stopAutonomousLoop","getRuntimeBootstrap","listPendingPairRequests","respondToPairRequest","createInvite","listPendingInvites","acceptInviteToken","cancelInvite","invitePeer","acceptInvite","directPair","revokePeer","repairPeer","sessionAppendMessages","sessionMarkCompleted","sessionReplaceMessages","attachClient","detachClient","watchInbox"]),kG0=new Set(["listAttachedClients","listDirectClientInbox","subscribeDirectClientInbox"]),W1=s.object({id:y0,method:gK,payload:s.unknown().optional(),auth:r6.optional()}).strict().superRefine(($,Z)=>{if(kG0.has($.method)&&$.auth===void 0)Z.addIssue({code:s.ZodIssueCode.custom,message:`Local control socket method ${$.method} requires attached-client auth`,path:["auth"]})}),t6=s.object({id:y0,ok:s.literal(!0),payload:s.unknown().optional()}).strict(),zX=s.object({id:y0,ok:s.literal(!1),error:y0,reason:s.string().optional(),diagnostic:i2.optional()}).strict(),S5=s.discriminatedUnion("ok",[t6,zX])});import{z as d}from"zod";function vC($,Z,J,X){let Y=U1[$],Q=Z==="input"?Y.input:Z==="result"?Y.result:("event"in Y)?Y.event:void 0;if(!Q){X.addIssue({code:d.ZodIssueCode.custom,message:`Operation ${$} does not define a ${Z} payload`,path:[Z]});return}if(!Q.safeParse(J).success)X.addIssue({code:d.ZodIssueCode.custom,message:`Invalid ${Z} payload for operation ${$}`,path:[Z]})}var v0,fZ,K1,gl0,H1,I5,fG0,pT,pK,z1,dK,iO,dT,lT,aT,nT,iT,oT,sT,rT,tT,eT,$C,ZC,JC,XC,YC,QC,oO,GC,lK,VC,WC,sO,HC,nO,rO,tO,eO,yG0,mu,cu,uu,pu,du,lu,au,nu,KC,zC,UC,BC,FC,mK,DC,OC,iu,vG0,hG0,NC,LC,AC,qC,EC,xG0,_C,MC,PC,jC,TC,NG,gG0,CC,RC,wC,SC,IC,bC,$N,cK,ZN,JN,XN,YN,QN,GN,VN,WN,HN,KN,zN,UN,BN,FN,DN,uK,ON,NN,LN,AN,qN,EN,_N,MN,PN,jN,TN,CN,RN,ou,su,wN,SN,IN,bN,ru,kC,fC,U1,yC,tu,mG0,hC,xC,cG0,uG0,gC,eu,$p;var Zp=E(()=>{aO();v0=d.string().trim().min(1),fZ=d.number().int().positive(),K1=d.number().int().nonnegative(),gl0=d.object({}).catchall(d.unknown()),H1=d.object({}).strict(),I5=d.string().datetime({offset:!0}).or(d.string().min(1)),fG0=d.enum(["minimal","balanced","high","full"]),pT=["run.start","run.resume","run.abort","interaction.respond","session.list","session.read","session.load","session.fork","memory.remember","memory.recall","memory.list","memory.forget","memory.recall_knowledge","arion.list","arion.hatch","arion.become","arion.rest","arion.wake","arion.create","model.list","model.set","model.refresh","auth.status","auth.login","auth.logout","auth.clear_session","auth.import_env_session","peer.list","peer.list_nearby","peer.pending.list","peer.pending.respond","peer.invite","peer.connect","peer.accept_invite","peer.direct_pair","peer.repair","peer.revoke","client.list","client.inbox.list","message.send","message.inbox.list","config.theme.get","config.theme.set","config.autonomy.get","config.autonomy.set","system.restart","system.terminal_setup","daemon.start","daemon.status","daemon.stop","daemon.restart","hook.extract","hook.reflect","hook.consolidate","hook.ingest","hook.harvest"],pK=d.enum(pT),z1=v0,dK=v0,iO=d.enum(["run","auth","system","peer"]),dT=d.object({question:v0,options:d.array(v0).optional()}).strict(),lT=d.object({id:v0,label:v0,description:d.string().optional()}).strict(),aT=d.object({key:v0,label:v0,placeholder:d.string().optional(),secret:d.boolean().optional()}).strict(),nT=d.object({kind:d.literal("tool_approval"),prompt:d.string().optional(),toolName:v0,toolInput:d.unknown().optional(),riskLevel:d.string().optional(),issues:d.array(d.string()).optional()}).strict(),iT=d.object({kind:d.literal("questionnaire"),prompt:d.string().optional(),questions:d.array(dT).min(1)}).strict(),oT=d.object({kind:d.literal("selection"),prompt:v0,options:d.array(lT).min(1)}).strict(),sT=d.object({kind:d.literal("credential_input"),prompt:v0,provider:v0.optional(),mode:d.enum(["generic","oauth_authorization_code"]).optional(),authorizeUrl:v0.optional(),callbackMode:d.enum(["manual_code","local_callback"]).optional(),expectedState:v0.optional(),fields:d.array(aT).min(1)}).strict(),rT=d.object({kind:d.literal("oauth_device"),prompt:v0,provider:v0.optional(),profileLabel:v0.optional(),verificationUri:v0,userCode:v0,expiresAt:I5.optional(),intervalSeconds:fZ.optional()}).strict(),tT=d.object({kind:d.literal("confirm"),prompt:v0,detail:d.string().optional(),confirmLabel:d.string().optional(),denyLabel:d.string().optional(),defaultApproved:d.boolean().optional()}).strict(),eT=d.discriminatedUnion("kind",[nT,iT,oT,sT,rT,tT]),$C=d.object({kind:d.literal("confirm"),approved:d.boolean()}).strict(),ZC=d.object({kind:d.literal("questionnaire"),answers:d.array(d.string())}).strict(),JC=d.object({kind:d.literal("selection"),selected:v0}).strict(),XC=d.object({kind:d.literal("credential_input"),values:d.record(d.string(),d.string())}).strict(),YC=d.object({kind:d.literal("oauth_device"),acknowledged:d.boolean().optional(),verificationCode:d.string().optional()}).strict(),QC=d.object({kind:d.literal("cancel")}).strict(),oO=d.discriminatedUnion("kind",[$C,ZC,JC,XC,YC,QC]),GC=d.object({kind:d.literal("interaction.required"),requestId:z1,interactionId:dK,source:iO,interaction:eT}).strict(),lK=d.object({kind:d.literal("interaction.respond"),requestId:z1,interactionId:dK,response:oO}).strict(),VC=d.object({code:v0,message:v0,retryable:d.boolean().optional(),details:d.record(d.string(),d.unknown()).optional()}).strict(),WC=d.object({id:v0,createdAt:I5,updatedAt:I5,completedAt:I5.optional(),title:d.string().nullable(),arion:v0,model:v0,messageCount:K1,preview:d.string()}).strict(),sO=d.object({id:v0,arion:v0,model:v0,messages:d.array(d.unknown())}).strict(),HC=d.object({query:d.string().optional(),limit:fZ.max(200).optional(),offset:K1.optional()}).strict(),nO=d.object({sessionId:v0}).strict(),rO=d.object({sessions:d.array(WC)}).strict(),tO=d.object({session:sO}).strict(),eO=d.object({session:sO,loaded:d.literal(!0),runtimeState:d.object({sessionId:v0,stateStatus:d.enum(["idle","running","paused","completed"]),activeRunId:d.string().nullable(),pausedState:d.unknown().nullable(),policySnapshot:d.record(d.string(),d.unknown()).nullable(),lastEventSeq:K1,revision:K1,leaseOwner:d.string().nullable(),leaseExpiresAt:I5.nullable(),updatedAt:I5}).strict().nullable().optional(),pendingInteraction:d.object({interactionId:v0,sessionId:v0,requestId:v0,source:iO,kind:v0,status:d.enum(["pending","answered","applied","expired","canceled"]),prompt:d.record(d.string(),d.unknown()),response:d.record(d.string(),d.unknown()).nullable(),createdAt:I5,answeredAt:I5.nullable(),appliedAt:I5.nullable()}).strict().nullable().optional()}).strict(),yG0=d.object({sessionId:v0,messageLimit:d.number().int().nonnegative().optional()}).strict(),mu=d.object({newSessionId:v0,sourceSessionId:v0,messagesCopied:K1,title:d.string().nullable()}).strict(),cu=d.object({response:P6}).strict(),uu=d.object({invite:s4}).strict(),pu=d.object({invite:n6}).strict(),du=d.object({accepted:e4}).strict(),lu=d.object({pair:j6}).strict(),au=d.object({repair:s6}).strict(),nu=d.object({revoke:T6}).strict(),KC=d.object({text:v0}).strict(),zC=d.object({query:v0,limit:fZ.max(200).optional()}).strict(),UC=d.object({query:d.string().optional(),limit:fZ.max(200).optional(),offset:K1.optional()}).strict(),BC=d.object({id:v0}).strict(),FC=d.object({topic:v0,kind:d.enum(["skills","procedures","tools","all"]).optional(),limit:fZ.max(200).optional()}).strict(),mK=d.object({name:v0}).strict(),DC=d.object({name:v0,description:d.string().optional()}).strict(),OC=d.object({name:v0,description:d.string().optional(),emoji:d.string().optional(),profile:d.string().optional()}).strict(),iu=d.object({providers:d.array(v0).optional()}).strict(),vG0=iu,hG0=iu,NC=d.object({model:v0}).strict(),LC=d.object({args:d.string().optional(),provider:v0.optional(),credential:d.string().optional(),method:v0.optional(),profileLabel:v0.optional(),source:v0.optional()}).strict(),AC=d.object({args:d.string().optional(),provider:v0.optional()}).strict(),qC=r9,EC=r9,xG0=d.object({args:d.string().optional(),recipient:v0.optional(),content:d.string().trim().min(1).optional(),senderName:v0.optional()}).strict().refine(($)=>Boolean($.args||$.recipient&&$.content),{message:"message.send requires args or recipient/content"}),_C=d.union([G8,xG0]),MC=d.object({theme:v0}).strict(),PC=d.object({autonomy:fG0}).strict(),jC=d.object({reason:d.string().optional()}).strict(),TC=d.object({runId:v0.optional(),sessionId:v0.optional()}).strict().refine(($)=>Boolean($.runId||$.sessionId),{message:"run.abort requires runId or sessionId"}),NG=d.object({arion:v0.optional(),port:fZ.optional(),intervalMs:fZ.optional(),allowedToolCategories:d.array(v0).optional(),allowedShellCommands:d.array(v0).optional(),maxWriteOpsPerMinute:fZ.optional(),maxGitPushesPerHour:fZ.optional()}).strict(),gG0=d.object({running:d.boolean(),stopped:d.boolean(),pid:fZ.optional()}).strict(),CC=d.object({user:d.string(),assistant:d.string()}).strict(),RC=d.object({pairs:d.array(CC)}).strict(),wC=d.object({role:v0,content:d.unknown()}).strict(),SC=d.object({messages:d.array(wC).optional(),conversation:d.string().optional()}).strict().refine(($)=>Boolean($.messages||$.conversation),{message:"hook.reflect requires messages or conversation"}),IC=d.object({source:d.enum(["claude","codex","all"]).optional(),limit:fZ.optional()}).strict(),bC=d.object({preHarvest:d.boolean().optional(),feedback:d.boolean().optional(),extract:d.boolean().optional(),stats:d.boolean().optional(),cleanup:d.boolean().optional(),cost:d.boolean().optional(),all:d.boolean().optional(),limit:fZ.optional()}).strict(),$N=d.object({receipt:d.union([n4,i4]),message:d.string().optional()}).strict(),cK=d.object({events:d.array(c8)}).strict(),ZN=d.object({peers:d.array(q4)}).strict(),JN=d.object({peers:d.array(_6)}).strict(),XN=d.object({requests:d.array(M6)}).strict(),YN=d.object({clients:d.array(kZ)}).strict(),QN=d.object({extracted:d.array(d.object({user:d.string(),extracted:K1,error:d.string().optional()}).strict())}).strict(),GN=d.object({aborted:d.literal(!0),runId:v0.optional(),sessionId:v0.optional()}).strict(),VN=d.object({}).catchall(d.unknown()),WN=d.object({success:d.literal(!0),message:d.string(),data:d.object({id:d.string(),count:d.number()})}).strict(),HN=d.object({success:d.literal(!0),message:d.string(),count:K1,memories:d.array(d.unknown())}).strict(),KN=d.object({memories:d.array(d.unknown()),count:K1}).strict(),zN=d.object({success:d.literal(!0),message:d.string(),deleted:d.boolean()}).strict(),UN=d.object({tools:d.array(d.unknown()),count:K1}).strict(),BN=d.object({arions:d.array(d.unknown())}).strict(),FN=d.object({mode:d.string(),prompt:d.string(),name:v0,description:d.string().optional()}).strict(),DN=d.object({arion:d.unknown(),activeArion:d.string()}).strict(),uK=d.object({success:d.literal(!0),name:v0}).strict(),ON=d.object({arion:d.unknown()}).strict(),NN=d.object({models:d.array(d.unknown()),currentModel:d.unknown().optional()}).catchall(d.unknown()),LN=d.object({currentModel:v0}).catchall(d.unknown()),AN=d.object({models:d.array(d.unknown())}).catchall(d.unknown()),qN=d.object({providers:d.array(d.unknown()).optional(),sessionProviders:d.array(v0).optional()}).catchall(d.unknown()),EN=d.object({}).catchall(d.unknown()),_N=d.object({}).catchall(d.unknown()),MN=d.object({theme:d.unknown()}).strict(),PN=d.object({theme:d.string()}).catchall(d.unknown()),jN=d.object({autonomy:d.unknown()}).strict(),TN=d.object({autonomy:d.string()}).catchall(d.unknown()),CN=d.object({}).catchall(d.unknown()),RN=d.object({}).catchall(d.unknown()),ou=d.object({}).catchall(d.unknown()),su=d.object({}).catchall(d.unknown()),wN=d.object({}).catchall(d.unknown()),SN=d.object({}).catchall(d.unknown()),IN=d.object({}).catchall(d.unknown()),bN=d.object({}).catchall(d.unknown()),ru=d.union([k9,rO,tO,eO,mu,ZN,JN,XN,YN,cK,$N,f8,uu,du,cu,pu,lu,au,nu,QN,GN,VN,WN,HN,KN,zN,UN,BN,FN,DN,uK,ON,NN,LN,AN,qN,EN,_N,ou,su,MN,PN,jN,TN,CN,RN,wN,SN,IN,bN]),kC=j8.extend({sessionId:v0.optional()}),fC=a4.extend({sessionId:v0.optional()}),U1={"run.start":{input:kC,result:k9,event:E6},"run.resume":{input:fC,result:k9},"run.abort":{input:TC,result:GN},"interaction.respond":{input:d.object({interactionId:dK,response:oO}).strict(),result:VN},"session.list":{input:HC,result:rO},"session.read":{input:nO,result:tO},"session.load":{input:nO,result:eO},"session.fork":{input:yG0,result:mu},"memory.remember":{input:KC,result:WN},"memory.recall":{input:zC,result:HN},"memory.list":{input:UC,result:KN},"memory.forget":{input:BC,result:zN},"memory.recall_knowledge":{input:FC,result:UN},"arion.list":{input:H1,result:BN},"arion.hatch":{input:DC,result:FN},"arion.become":{input:mK,result:DN},"arion.rest":{input:mK,result:uK},"arion.wake":{input:mK,result:uK},"arion.create":{input:OC,result:ON},"model.list":{input:vG0,result:NN},"model.set":{input:NC,result:LN},"model.refresh":{input:hG0,result:AN},"auth.status":{input:H1,result:qN},"auth.login":{input:LC,result:EN},"auth.logout":{input:AC,result:_N},"auth.clear_session":{input:H1,result:ou},"auth.import_env_session":{input:d.object({providers:d.array(v0).optional()}).strict(),result:su},"peer.list":{input:H1,result:ZN},"peer.list_nearby":{input:H1,result:JN},"peer.pending.list":{input:H1,result:XN},"peer.pending.respond":{input:_4,result:cu},"peer.invite":{input:o4,result:uu},"peer.connect":{input:r4,result:pu},"peer.accept_invite":{input:t4,result:du},"peer.direct_pair":{input:U9,result:lu},"peer.repair":{input:$6,result:au},"peer.revoke":{input:M4,result:nu},"client.list":{input:H1,result:YN},"client.inbox.list":{input:qC,result:cK},"message.send":{input:_C,result:$N},"message.inbox.list":{input:EC,result:cK},"config.theme.get":{input:H1,result:MN},"config.theme.set":{input:MC,result:PN},"config.autonomy.get":{input:H1,result:jN},"config.autonomy.set":{input:PC,result:TN},"system.restart":{input:jC,result:CN},"system.terminal_setup":{input:H1,result:RN},"daemon.start":{input:NG,result:f8},"daemon.status":{input:NG,result:f8},"daemon.stop":{input:NG,result:gG0},"daemon.restart":{input:NG,result:f8},"hook.extract":{input:RC,result:QN},"hook.reflect":{input:SC,result:wN},"hook.consolidate":{input:H1,result:SN},"hook.ingest":{input:IC,result:IN},"hook.harvest":{input:bC,result:bN}},yC=["run.start"],tu=["run.start","run.resume","interaction.respond"],mG0=d.enum(yC);hC=d.object({kind:d.literal("request"),requestId:z1,op:pK,input:d.unknown()}).strict().superRefine(($,Z)=>{vC($.op,"input",$.input,Z)}),xC=d.object({kind:d.literal("event"),requestId:z1,seq:K1,op:mG0,event:d.unknown()}).strict().superRefine(($,Z)=>{vC($.op,"event",$.event,Z)}),cG0=d.object({kind:d.literal("result"),requestId:z1,op:pK,ok:d.literal(!0),result:d.unknown()}).strict().superRefine(($,Z)=>{vC($.op,"result",$.result,Z)}),uG0=d.object({kind:d.literal("result"),requestId:z1,op:d.union([pK,d.literal("unknown")]),ok:d.literal(!1),error:VC}).strict(),gC=d.union([cG0,uG0]),eu=d.union([hC,lK]),$p=d.union([xC,gC,GC])});import{z as y8}from"zod";var LG,pG0,aK,AG,nK,iK,kN,dG0,t2,u8;var Jp=E(()=>{aO();D7();yO();LG=y8.string().trim().min(1),pG0=y8.string().min(1).refine(($)=>$.trim().length>0),aK=y8.number().int().nonnegative(),AG=y8.enum(["starting","tls_bound","control_ready","network_ready","mesh_ready","degraded","stopped"]),nK=y8.object({host:LG,port:y8.number().int().min(1).max(65535)}).strict(),iK=y8.object({caFingerprint:d$,caCertPem:pG0,principalIdentity:f0,loopbackIdentity:F7}).strict(),kN=y8.object({signingPublicKey:x0,transportPublicKey:B$,transportEndpoint:l4,displayNameSnapshot:LG.optional()}).strict(),dG0=y8.object({provider:y8.string().min(1),status:y8.enum(["cached","refreshing","verified","requires_auth","unavailable","error"]),reason:y8.string().optional(),lastCheckedAt:y8.string().optional()}).strict(),t2=y8.object({models:y8.array(y8.unknown()),currentModel:y8.string().optional(),status:f8.optional(),lastRefreshAt:y8.string().optional(),stale:y8.boolean().optional(),refreshInFlight:y8.boolean().optional(),providerStatuses:y8.array(dG0).optional()}).strict(),u8=y8.object({nodeId:G0,runtimeId:k8,arionName:LG.optional(),ownerGeneration:TK,bootstrapRevision:aK,phase:AG,protocolVersion:L4,controlEndpoint:nK,displayNameSnapshot:LG.optional(),signingPublicKey:x0,transportPublicKey:B$,transportEndpoint:l4,tls:iK,publishedAt:LG,degradedReason:LG.optional(),failedPhase:AG.optional()}).strict()});function fN($){return $==="invited"||$==="joining"}function yN($,Z){return $==="paired_unverified"&&Z.proofValid}function vN($){return $==="joining"||$==="paired_unverified"||$==="verified"}function qG($){return $==="paired_unverified"||$==="verified"}function hN($,Z){if($==="revoked")return!1;return Z==="endpoint_known"||Z==="connecting"||Z==="connected"||Z==="degraded"}function xN($,Z){return $==="verified"&&Z==="connected"}function gN($){return $==="verified"}function lG0($){return $.trim().toLowerCase()}function oK($){let Z=lG0($);return Z==="localhost"||Z==="::1"||Z==="[::1]"||Z.endsWith(".localhost")||/^127\./.test(Z)}function b5($){let Z=$.endpointHost?.trim(),J=$.endpointPort;if(!Z||typeof J!=="number"||!Number.isFinite(J))return{};if(oK(Z))return{};return{endpointHost:Z,endpointPort:J}}function sK($){$.exec(`
|
|
4
5
|
CREATE TABLE IF NOT EXISTS owner_epoch (
|
|
5
6
|
scope TEXT PRIMARY KEY DEFAULT 'runtime',
|
|
6
7
|
owner_generation INTEGER NOT NULL
|
|
@@ -13,7 +14,7 @@ var QG0=Object.create;var{getPrototypeOf:GG0,defineProperty:MK,getOwnPropertyNam
|
|
|
13
14
|
`)});let F=()=>{H=!0,V.destroy(),B()};Y?.addEventListener("abort",F,{once:!0}),V.on("data",(D)=>{W+=D;while(!0){let O=W.indexOf(`
|
|
14
15
|
`);if(O===-1)break;let L=W.slice(0,O).trim();if(W=W.slice(O+1),L.length===0)continue;try{let q=S5.parse(JSON.parse(L));if(q.id!==G.id){K=Error("Local control socket response ID mismatch");break}if(!q.ok){let A=R5(q.error,q.diagnostic);if("reason"in q&&typeof q.reason==="string")A.reason=q.reason;K=A;break}z.push(X(q.payload))}catch(q){K=q;break}}B()}),V.once("error",(D)=>{K=D,B()}),V.once("end",()=>{H=!0,B()}),V.once("close",()=>{H=!0,B()});try{while(!0){if(z.length>0){yield z.shift();continue}if(K)throw K;if(H)return;await new Promise((D)=>{U=D})}}finally{Y?.removeEventListener("abort",F),V.destroy()}}}}function rK($){let Z=$.pollIntervalMs??1000,J=async(X)=>j$($.runtimeSocket,"listInbox",r9.optional().parse(X),(Y)=>c8.array().parse(Y));return{async submitRun(X){let Y=j8.parse(X);return Vp(j$($.runtimeSocket,"submitRun",Y,(Q)=>k9.parse(Q)))},async resumeRun(X){return j$($.runtimeSocket,"resumeRun",a4.parse(X),(Y)=>k9.parse(Y))},streamRun(X,Y){return cN($.runtimeSocket,"streamRun",j8.parse(X),(Q)=>E6.parse(Q),Y)},subscribeRuntimeEvents(X){return cN($.runtimeSocket,"subscribeRuntimeEvents",q7.optional().parse(X),(Y)=>Q1.parse(Y))},async sendBestEffort(X){return j$($.runtimeSocket,"sendBestEffort",G8.parse(X),(Y)=>n4.parse(Y))},async sendDurable(X){return j$($.runtimeSocket,"sendDurable",G8.parse(X),(Y)=>i4.parse(Y))},listInbox:J,subscribeInbox(X){return Qp(()=>J({limit:100,unreadOnly:!1}),{pollIntervalMs:Z,initialAfterCreatedAt:X?.afterCreatedAt??0})},async listPeers(){return j$($.runtimeSocket,"listPeers",void 0,(X)=>q4.array().parse(X))},async listNearbyPeers(){return j$($.runtimeSocket,"listNearbyPeers",void 0,(X)=>_6.array().parse(X))},subscribePeers(){return Qp(()=>j$($.runtimeSocket,"listPeers",void 0,(X)=>q4.array().parse(X)),{pollIntervalMs:Z,getVersionKey:(X)=>[X.updatedAt,X.endpointRevision,X.identityState,X.transportState,X.lastSeenAt??"",X.transportPublicKey,X.displayNameSnapshot??""].join("|")})},async getRuntimeStatus(){return j$($.runtimeSocket,"getRuntimeStatus",void 0,(X)=>f8.parse(X))},async getModelSnapshot(){return j$($.runtimeSocket,"getModelSnapshot",void 0,(X)=>t2.parse(X))},async refreshModelSnapshot(X){return j$($.runtimeSocket,"refreshModelSnapshot",X,(Y)=>t2.parse(Y))},async setCurrentModel(X){return j$($.runtimeSocket,"setCurrentModel",{model:X},(Y)=>t2.parse(Y))},async getSessionCredentialOverlayState(){return j$($.runtimeSocket,"getSessionCredentialOverlayState",void 0,(X)=>r2.parse(X))},async setSessionCredentialOverlay(X){return j$($.runtimeSocket,"setSessionCredentialOverlay",DG.parse(X),(Y)=>r2.parse(Y))},async clearSessionCredentialOverlay(){return j$($.runtimeSocket,"clearSessionCredentialOverlay",void 0,(X)=>r2.parse(X))},async startAutonomousLoop(X){return j$($.runtimeSocket,"startAutonomousLoop",o2.optional().parse(X),(Y)=>f8.parse(Y))},async stopAutonomousLoop(){return j$($.runtimeSocket,"stopAutonomousLoop",void 0,(X)=>f8.parse(X))},async getRuntimeBootstrap(){return j$($.runtimeSocket,"getRuntimeBootstrap",void 0,(X)=>u8.parse(X))},async listPendingPairRequests(){return j$($.runtimeSocket,"listPendingPairRequests",void 0,(X)=>M6.array().parse(X))},async respondToPairRequest(X){return j$($.runtimeSocket,"respondToPairRequest",_4.parse(X),(Y)=>P6.parse(Y))},async createInvite(X){return j$($.runtimeSocket,"createInvite",o4.parse(X),(Y)=>s4.parse(Y))},async listPendingInvites(){return j$($.runtimeSocket,"listPendingInvites",void 0,(X)=>E4.array().parse(X))},async acceptInviteToken(X){return j$($.runtimeSocket,"acceptInviteToken",t4.parse(X),(Y)=>e4.parse(Y))},async cancelInvite(X){return j$($.runtimeSocket,"cancelInvite",i6.parse(X),(Y)=>o6.parse(Y))},async invitePeer(X){return j$($.runtimeSocket,"invitePeer",r4.parse(X),(Y)=>n6.parse(Y))},async acceptInvite(X){return j$($.runtimeSocket,"acceptInvite",A4.parse(X),(Y)=>V1.parse(Y))},async directPair(X){return j$($.runtimeSocket,"directPair",U9.parse(X),(Y)=>j6.parse(Y))},async revokePeer(X){return j$($.runtimeSocket,"revokePeer",M4.parse(X),(Y)=>T6.parse(Y))},async repairPeer(X){return j$($.runtimeSocket,"repairPeer",$6.parse(X),(Y)=>s6.parse(Y))},async appendSessionMessages(X,Y){await j$($.runtimeSocket,"sessionAppendMessages",{sessionId:X,messages:Y},()=>{return})},async markSessionCompleted(X){await j$($.runtimeSocket,"sessionMarkCompleted",{sessionId:X},()=>{return})},async replaceSessionMessages(X,Y){await j$($.runtimeSocket,"sessionReplaceMessages",{sessionId:X,messages:Y},()=>{return})}}}function tK($){let Z=r6.parse($.auth);return{...rK({runtimeSocket:$.runtimeSocket,pollIntervalMs:$.pollIntervalMs}),async sendBestEffort(Y){return j$($.runtimeSocket,"sendBestEffort",G8.parse(Y),(Q)=>n4.parse(Q),Z)},async sendDurable(Y){return j$($.runtimeSocket,"sendDurable",G8.parse(Y),(Q)=>i4.parse(Q),Z)},async submitRun(Y){let Q=j8.parse(Y);return Vp(j$($.runtimeSocket,"submitRun",Q,(G)=>k9.parse(G),Z))},async resumeRun(Y){return j$($.runtimeSocket,"resumeRun",a4.parse(Y),(Q)=>k9.parse(Q),Z)},streamRun(Y,Q){return cN($.runtimeSocket,"streamRun",j8.parse(Y),(G)=>E6.parse(G),Q,Z)},async listAttachedClients(){return j$($.runtimeSocket,"listAttachedClients",void 0,(Y)=>kZ.array().parse(Y),Z)},listDirectClientInbox:async(Y)=>j$($.runtimeSocket,"listDirectClientInbox",r9.optional().parse(Y),(Q)=>c8.array().parse(Q),Z),subscribeDirectClientInbox(Y){return cN($.runtimeSocket,"subscribeDirectClientInbox",E7.optional().parse(Y),(Q)=>c8.parse(Q),void 0,Z)}}}var Wp=E(()=>{W8()});var EG="x-aria-local-client-id",_G="x-aria-local-client-proof";import{existsSync as Hp}from"fs";import{createRequire as nG0}from"module";import{join as iG0}from"path";function zp(){return lC("bun:sqlite")}function Up(){let $=process.env.ARIA_BUN_CUSTOM_SQLITE_PATH?.trim();if($)return Hp($)?$:null;if(process.platform==="darwin"){let J=["/opt/homebrew/opt/sqlite/lib/libsqlite3.dylib","/usr/local/opt/sqlite/lib/libsqlite3.dylib"].find((X)=>Hp(X));if(J)return J}return null}function aC(){let $=globalThis,Z=$[Kp];if(Z&&typeof Z==="object")return Z;let J={attempted:!1};return $[Kp]=J,J}function Bp(){let $=aC();if($.attempted)return;$.attempted=!0;let Z=Up();if(!Z)return;zp().Database.setCustomSQLite?.(Z),$.customPath=Z}function MG(){Bp()}function Fp($){if($&&typeof $==="object"){let Z=$;return{changes:typeof Z.changes==="number"?Z.changes:typeof Z.affectedRows==="number"?Z.affectedRows:0,lastInsertRowid:typeof Z.lastInsertRowid==="number"||typeof Z.lastInsertRowid==="bigint"?Z.lastInsertRowid:void 0}}return{changes:0}}function oG0($){return{run(...Z){return Fp($.run(...Z))},get(...Z){let J=$.get(...Z);return J===null?void 0:J},all(...Z){return $.all(...Z)}}}function sG0(){return lC("better-sqlite3")}function rG0($){return{run(...Z){let J=$.run(...Z);return{changes:J.changes,lastInsertRowid:J.lastInsertRowid}},get(...Z){return $.get(...Z)},all(...Z){return $.all(...Z)}}}function tG0($){let J=new(sG0())($.path,$.readonly?{readonly:!0}:void 0);return{kind:"better-sqlite3",nativeHandle:J,capabilities:{pragmas:!0,transactions:!0,preparedStatements:!0,loadableExtensions:!0,customSQLiteConfigured:!1},pragma(X,Y){let Q=X.trim();if(Q.includes("=")||/^wal_checkpoint/i.test(Q)){J.pragma(Q);return}if(Y?.simple)return J.pragma(Q,{simple:!0});return J.prepare(`PRAGMA ${Q}`).all()},exec(X){J.exec(X)},prepare(X){return rG0(J.prepare(X))},transaction(X){return J.transaction(X)},close(){J.close()},loadExtension:J.loadExtension?(X)=>{J.loadExtension(X)}:void 0}}function M7($){let Z;try{Z=zp()}catch(Y){if(process.env.VITEST||process.argv.some((Q)=>Q.includes("vitest"))||process.argv.some((Q)=>Q.includes("vite")))return P7($);throw Error(`[sqlite-open] bun:sqlite failed to load under Bun runtime: ${Y instanceof Error?Y.message:String(Y)}`)}Bp();let J=aC(),X=new Z.Database($.path,{create:!$.readonly,readonly:$.readonly??!1});return{kind:"bun",nativeHandle:X,capabilities:{pragmas:!0,transactions:!0,preparedStatements:!0,loadableExtensions:J.customPath!==void 0||process.platform!=="darwin",customSQLiteConfigured:J.customPath!==void 0,...J.customPath?{customSQLitePath:J.customPath}:{}},pragma(Y,Q){let G=Y.trim();if(G.includes("=")||/^wal_checkpoint/i.test(G)){X.exec(`PRAGMA ${G}`);return}let V=typeof X.query==="function"?X.query.bind(X):X.prepare?.bind(X);if(!V){X.exec(`PRAGMA ${G}`);return}if(Q?.simple){let W=V(`PRAGMA ${G}`).get();if(!W)return;let H=Object.values(W);return H.length===1?H[0]:W}return V(`PRAGMA ${G}`).all()},exec(Y){X.exec(Y)},prepare(Y){let Q=typeof X.prepare==="function"?X.prepare(Y):X.query?.(Y);if(!Q)throw Error("[sqlite] No prepare/query API available on bun:sqlite Database");return oG0(Q)},transaction(Y){return X.transaction(Y)},close(){X.close()},loadExtension:X.loadExtension?(Y)=>{X.loadExtension(Y)}:void 0}}function eG0(){return lC("node:sqlite")}function $V0($){return{run(...Z){return Fp($.run(...Z))},get(...Z){return $.get(...Z)},all(...Z){return $.all(...Z)}}}function ZV0($){let{DatabaseSync:Z}=eG0(),J=new Z($.path,{readOnly:$.readonly??!1,open:!0});return{kind:"node:sqlite",nativeHandle:J,capabilities:{pragmas:!0,transactions:!0,preparedStatements:!0,loadableExtensions:!1,customSQLiteConfigured:!1},pragma(X,Y){let Q=X.trim();if(Q.includes("=")||/^wal_checkpoint/i.test(Q)){J.exec(`PRAGMA ${Q}`);return}let G=J.prepare(`PRAGMA ${Q}`);if(Y?.simple){let V=G.get();if(!V)return;let W=Object.values(V);return W.length===1?W[0]:V}return G.all()},exec(X){J.exec(X)},prepare(X){return $V0(J.prepare(X))},transaction(X){return(...Y)=>{J.exec("BEGIN");try{let Q=X(...Y);return J.exec("COMMIT"),Q}catch(Q){throw J.exec("ROLLBACK"),Q}}},close(){J.close()}}}function P7($){try{return tG0($)}catch{return ZV0($)}}function uN(){return Up()}function pN(){return aC().customPath}var lC,Kp="__ARIA_BUN_SQLITE_CONFIG_STATE__";var nC=E(()=>{lC=nG0(iG0(process.cwd(),"__aria_module_loader__.js"))});import Dp from"fs";import JV0 from"os";import Op from"path";function Np($="test.db"){let Z=Dp.mkdtempSync(Op.join(JV0.tmpdir(),"aria-sqlite-test-")),J=Op.join(Z,$),X=P7({path:J});return{db:X,dbPath:J,tempDir:Z,cleanup(){try{X.close()}catch{}Dp.rmSync(Z,{recursive:!0,force:!0})}}}var Lp=E(()=>{nC()});var Ap={};A$(Ap,{openCompatSqliteDatabase:()=>P7,openBunRuntimeSqliteDatabase:()=>M7,getResolvedBunCustomSqlitePath:()=>uN,getConfiguredBunCustomSqlitePath:()=>pN,createTestDatabase:()=>Np,configureBunCustomSqlite:()=>MG});var PG=E(()=>{nC();Lp()});import{createHash as XV0}from"crypto";function e$($,Z){let J=XV0("sha256");if(typeof $==="string")if(Z)J.update($,Z);else J.update($);else J.update($);return J.digest("hex")}var qp=()=>{};import{EventEmitter as YV0}from"events";import{randomUUID as QV0}from"crypto";var FX;var iC=E(()=>{FX=class FX extends YV0{stdin;stdout;pending=new Map;buffer="";requestTimeout;constructor($={}){super();this.requestTimeout=$.timeout??30000}connect($,Z){this.stdin=$,this.stdout=Z,Z.on("data",(J)=>{this.buffer+=J.toString(),this.processBuffer()}),Z.on("error",(J)=>{this.emit("error",J)}),Z.on("end",()=>{this.emit("close")})}processBuffer(){let $;while(($=this.buffer.indexOf(`
|
|
15
16
|
`))!==-1){let Z=this.buffer.slice(0,$).trim();if(this.buffer=this.buffer.slice($+1),Z)try{this.handleMessage(JSON.parse(Z))}catch(J){this.emit("error",Error(`Invalid JSON: ${Z}`))}}}handleMessage($){if(typeof $!=="object"||$===null||!("jsonrpc"in $)||$.jsonrpc!=="2.0")return;let Z=$;if("id"in Z&&Z.id!==void 0){let J=Z,X=this.pending.get(String(J.id));if(X)if(this.pending.delete(String(J.id)),clearTimeout(X.timeout),J.error)X.reject(Error(`${J.error.code}: ${J.error.message}`));else X.resolve(J.result);return}if("method"in Z){let J=Z;this.emit(J.method,J.params),this.emit("notification",{method:J.method,params:J.params})}}async request($,Z){if(!this.stdin)throw Error("Not connected");let J=QV0(),X={jsonrpc:"2.0",id:J,method:$,params:Z};return new Promise((Y,Q)=>{let G=setTimeout(()=>{if(this.pending.has(J))this.pending.delete(J),Q(Error(`Request timeout: ${$}`))},this.requestTimeout);this.pending.set(J,{resolve:Y,reject:Q,timeout:G}),this.send(X)})}notify($,Z){let J={jsonrpc:"2.0",method:$,params:Z};this.send(J)}send($){if(!this.stdin)throw Error("Not connected");this.stdin.write(JSON.stringify($)+`
|
|
16
|
-
`)}close(){for(let[,$]of this.pending)clearTimeout($.timeout),$.reject(Error("Connection closed"));this.pending.clear(),this.buffer="",this.stdin=void 0,this.stdout?.removeAllListeners(),this.stdout=void 0}}});import{spawn as GV0}from"child_process";import{EventEmitter as VV0}from"events";import{PassThrough as WV0,Writable as HV0}from"stream";function Ep($=process.env){let Z={};for(let[J,X]of Object.entries($)){if(X===void 0)continue;if(J.toUpperCase().startsWith("GIT_"))continue;Z[J]=X}return Z}var KV0="1.0.
|
|
17
|
+
`)}close(){for(let[,$]of this.pending)clearTimeout($.timeout),$.reject(Error("Connection closed"));this.pending.clear(),this.buffer="",this.stdin=void 0,this.stdout?.removeAllListeners(),this.stdout=void 0}}});import{spawn as GV0}from"child_process";import{EventEmitter as VV0}from"events";import{PassThrough as WV0,Writable as HV0}from"stream";function Ep($=process.env){let Z={};for(let[J,X]of Object.entries($)){if(X===void 0)continue;if(J.toUpperCase().startsWith("GIT_"))continue;Z[J]=X}return Z}var KV0="1.0.60",zV0,B1;var oC=E(()=>{iC();zV0={name:"aria-cli",version:KV0};B1=class B1 extends VV0{config;process;transport="stdio";rpc;capabilities={};_initialized=!1;sseAbortController;sseStreamPromise;ssePostUrl;sseSessionId;sseOutput;_disconnecting=!1;_reconnecting=!1;_reconnectAttempts=0;static RECONNECT_BASE_DELAY_MS=1000;static RECONNECT_MAX_DELAY_MS=30000;static RECONNECT_MAX_ATTEMPTS=5;constructor($){super();this.config=$,this.rpc=new FX}get name(){return this.config.name}get initialized(){return this._initialized}async initialize(){if(!this._reconnecting)this._disconnecting=!1,this._reconnectAttempts=0;this.transport=this.config.transport??"stdio";try{if(this.transport==="stdio")await this.initializeStdioTransport();else await this.initializeSSETransport();this.rpc.on("notifications/tools/list_changed",()=>this.emit("tools/list_changed")),this.rpc.on("notifications/resources/list_changed",()=>this.emit("resources/list_changed")),this.rpc.on("notifications/prompts/list_changed",()=>this.emit("prompts/list_changed"));let $=await this.rpc.request("initialize",{protocolVersion:"2024-11-05",capabilities:{roots:{listChanged:!0}},clientInfo:zV0});return this.capabilities=$.capabilities||{},this._initialized=!0,this.rpc.notify("notifications/initialized",{}),this.capabilities}catch($){throw await this.cleanupAfterInitializeFailure(),$}}async attemptReconnect(){if(this._disconnecting||this._reconnecting)return;this._reconnecting=!0;while(this._reconnectAttempts<B1.RECONNECT_MAX_ATTEMPTS&&!this._disconnecting){this._reconnectAttempts++;let $=Math.min(B1.RECONNECT_BASE_DELAY_MS*Math.pow(2,this._reconnectAttempts-1),B1.RECONNECT_MAX_DELAY_MS);if(this.emit("log",{level:"info",message:`Reconnect attempt ${this._reconnectAttempts}/${B1.RECONNECT_MAX_ATTEMPTS} in ${$}ms`}),await new Promise((Z)=>setTimeout(Z,$)),this._disconnecting)break;try{this.rpc.close(),this.rpc=new FX,await this.initialize(),this._reconnectAttempts=0,this._reconnecting=!1,this.emit("reconnected");return}catch(Z){this.emit("log",{level:"error",message:`Reconnect attempt ${this._reconnectAttempts} failed: ${Z.message}`})}}if(this._reconnecting=!1,!this._disconnecting)this._initialized=!1,this.emit("error",Error(`Failed to reconnect after ${B1.RECONNECT_MAX_ATTEMPTS} attempts`))}async initializeStdioTransport(){if(!this.config.command)throw Error("Command required for stdio transport");if(this.process=GV0(this.config.command,this.config.args||[],{env:{...Ep(),...Ep(this.config.env??{})},stdio:["pipe","pipe","pipe"]}),!this.process.stdin||!this.process.stdout)throw Error("Failed to create stdio streams");this.rpc.connect(this.process.stdin,this.process.stdout),this.process.stderr?.on("data",($)=>{this.emit("log",{level:"error",message:$.toString()})}),this.process.on("exit",($)=>{if(this._initialized=!1,this.rpc.close(),this.emit("exit",$),!this._disconnecting)this.attemptReconnect()})}async initializeSSETransport(){let $=this.config.url;if(!$)throw Error("URL required for sse transport");let Z=new HV0({write:(Y,Q,G)=>{let V=Y.toString();this.postSSEMessages(V).then(()=>G()).catch((W)=>G(W))}}),J=new WV0;this.sseOutput=J,this.rpc.connect(Z,J),this.sseAbortController=new AbortController;let X=await fetch($,{method:"GET",headers:{Accept:"text/event-stream"},signal:this.sseAbortController.signal});if(!X.ok||!X.body){let Y=await X.text();throw Error(`Failed to connect SSE transport: ${X.status} ${X.statusText} ${Y}`)}this.sseSessionId=X.headers.get("mcp-session-id")??void 0,this.ssePostUrl=$,this.sseStreamPromise=this.consumeSSE(X.body,$)}async postSSEMessages($){let Z=$.trim();if(!Z)return;let J=this.ssePostUrl||this.config.url;if(!J)throw Error("SSE transport endpoint is not configured");let X=Z.split(`
|
|
17
18
|
`).map((Y)=>Y.trim()).filter((Y)=>Y.length>0);for(let Y of X){let Q=await fetch(J,{method:"POST",headers:{"Content-Type":"application/json",...this.sseSessionId?{"mcp-session-id":this.sseSessionId}:{}},body:Y});if(!Q.ok){let V=await Q.text();throw Error(`SSE transport POST failed: ${Q.status} ${Q.statusText} ${V}`)}let G=(await Q.text()).trim();if(!G||!this.sseOutput)continue;for(let V of G.split(`
|
|
18
19
|
`)){let W=V.trim();if(!W)continue;if(W.startsWith("{")&&W.endsWith("}"))this.sseOutput.write(`${W}
|
|
19
20
|
`)}}}async consumeSSE($,Z){let J=$.getReader(),X=new TextDecoder,Y="",Q="",G=[],V=()=>{if(G.length===0){Q="";return}let W=G.join(`
|
|
@@ -21,7 +22,7 @@ var QG0=Object.create;var{getPrototypeOf:GG0,defineProperty:MK,getOwnPropertyNam
|
|
|
21
22
|
`)};try{while(!0){let{done:W,value:H}=await J.read();if(W){V();break}Y+=X.decode(H,{stream:!0});let K=Y.split(/\r?\n/);Y=K.pop()||"";for(let z of K){if(z===""){V();continue}if(z.startsWith("event:")){Q=z.slice(6).trim();continue}if(z.startsWith("data:"))G.push(z.slice(5).trim())}}}catch(W){if(!(W instanceof DOMException&&W.name==="AbortError"))this.emit("log",{level:"error",message:`SSE stream error: ${W.message}`})}finally{if(this._initialized){if(this._initialized=!1,this.rpc.close(),this.emit("exit",0),!this._disconnecting)this.attemptReconnect()}}}async cleanupAfterInitializeFailure(){if(this.transport==="stdio"){if(this.process&&!this.process.killed)try{this.process.kill("SIGTERM")}catch{}this.process=void 0}else{this.sseAbortController?.abort();try{await this.sseStreamPromise}catch{}this.sseOutput?.end(),this.sseOutput=void 0}this.rpc.close()}async shutdown(){if(this._disconnecting=!0,!this._initialized)return;if(this._initialized=!1,this.transport==="sse"){try{await this.rpc.request("shutdown",{}),this.rpc.notify("notifications/exit",{})}catch{}this.sseAbortController?.abort();try{await this.sseStreamPromise}catch{}this.sseOutput?.end(),this.sseOutput=void 0,this.rpc.close();return}if(this.process){try{await this.rpc.request("shutdown",{}),this.rpc.notify("notifications/exit",{}),await new Promise(($)=>setTimeout($,500))}catch{}this.process.kill("SIGTERM"),await new Promise(($)=>{let Z=setTimeout(()=>{try{this.process?.kill("SIGKILL")}catch{}},5000);this.process.once("exit",()=>{clearTimeout(Z),this.rpc.close(),$()})})}else this.rpc.close()}async listTools(){return(await this.rpc.request("tools/list",{})).tools||[]}async callTool($,Z,J){if(J?.aborted)return{success:!1,message:"Tool execution cancelled by user."};try{let X=this.rpc.request("tools/call",{name:$,arguments:Z}),Y;if(J)Y=await new Promise((G,V)=>{let W=()=>V(new DOMException("Aborted","AbortError"));J.addEventListener("abort",W,{once:!0}),X.then((H)=>{J.removeEventListener("abort",W),G(H)},(H)=>{J.removeEventListener("abort",W),V(H)})});else Y=await X;let Q=Y.content?.filter((G)=>G.type==="text").map((G)=>G.text).join(`
|
|
22
23
|
`)||"";return{success:!Y.isError,message:Q,data:Y.content}}catch(X){if(X instanceof DOMException&&X.name==="AbortError")return{success:!1,message:"Tool execution cancelled by user."};return{success:!1,message:X.message}}}async listResources(){return(await this.rpc.request("resources/list",{})).resources||[]}async readResource($){return(await this.rpc.request("resources/read",{uri:$})).contents||[]}async listPrompts(){return(await this.rpc.request("prompts/list",{})).prompts||[]}async getPrompt($,Z){return(await this.rpc.request("prompts/get",{name:$,arguments:Z})).messages||[]}}});import{EventEmitter as UV0}from"events";var jG;var sC=E(()=>{oC();jG=class jG extends UV0{servers=new Map;serverConfigs=new Map;reconnectTimers=new Map;logger;constructor($){super();this.logger=$?.logger??console}async connect($){if(this.servers.has($.name))throw Error(`Server already connected: ${$.name}`);let Z=new B1($);return await Z.initialize(),Z.on("tools/list_changed",()=>this.emit("toolsChanged",$.name)),Z.on("resources/list_changed",()=>this.emit("resourcesChanged",$.name)),Z.on("prompts/list_changed",()=>this.emit("promptsChanged",$.name)),Z.on("exit",(J)=>{if(this.servers.delete($.name),this.emit("serverExit",$.name,J),J!==0&&this.serverConfigs.has($.name))this.reconnect($.name,$).catch((X)=>{this.logger.warn("[MCPClient] Reconnect failed:",X?.message)})}),this.servers.set($.name,Z),this.serverConfigs.set($.name,$),Z}async disconnect($){this.serverConfigs.delete($);let Z=this.reconnectTimers.get($);if(Z!==void 0)clearTimeout(Z),this.reconnectTimers.delete($);let J=this.servers.get($);if(J)this.servers.delete($),J.removeAllListeners(),await J.shutdown()}async reconnect($,Z,J=0){let Y=Math.min(1000*Math.pow(2,J),30000);if(J>=3)return;if(await new Promise((Q)=>{let G=setTimeout(Q,Y);this.reconnectTimers.set($,G)}),this.reconnectTimers.delete($),!this.serverConfigs.has($))return;if(this.servers.has($))return;try{await this.connect(Z)}catch{await this.reconnect($,Z,J+1)}}async disconnectAll(){let $=new Set([...this.servers.keys(),...this.reconnectTimers.keys()]);await Promise.all([...$].map((Z)=>this.disconnect(Z)))}getConnectedServers(){return[...this.servers.keys()]}async listAllTools(){return(await Promise.all([...this.servers.entries()].map(async([Z,J])=>{try{return(await J.listTools()).map((Y)=>({...Y,server:Z}))}catch{return[]}}))).flat()}async callTool($,Z,J,X){let Y=this.servers.get($);if(!Y)return{success:!1,message:`Server not connected: ${$}`};return Y.callTool(Z,J,X)}async listAllResources(){return(await Promise.all([...this.servers.entries()].map(async([Z,J])=>{try{return(await J.listResources()).map((Y)=>({...Y,server:Z}))}catch{return[]}}))).flat()}async readResource($,Z){let J=this.servers.get($);if(!J)throw Error(`Server not connected: ${$}`);return J.readResource(Z)}async listAllPrompts(){return(await Promise.all([...this.servers.entries()].map(async([Z,J])=>{try{return(await J.listPrompts()).map((Y)=>({...Y,server:Z}))}catch{return[]}}))).flat()}async getPrompt($,Z,J){let X=this.servers.get($);if(!X)throw Error(`Server not connected: ${$}`);return X.getPrompt(Z,J)}}});function k5($){return $.kind==="function"}function rC($){return $.kind==="native"}var _p=()=>{};function k0($){if($ instanceof Error)return $.message;if(typeof $==="string")return $;return String($)}function eK($){if(typeof $==="object"&&$!==null&&"statusCode"in $&&typeof $.statusCode==="number")return $.statusCode;return}function BV0($){return $ instanceof Error&&"code"in $&&typeof $.code==="string"}function FV0($){return!Mp($)}function Mp($){return["brave_search","computer","code_interpreter","text_editor","bash","dalle","file_search"].some((J)=>$.name.startsWith(J))}import{existsSync as Pp,mkdirSync as DV0,readFileSync as OV0,unlinkSync as NV0,writeFileSync as LV0}from"fs";import{homedir as AV0}from"os";import{dirname as qV0,join as tC}from"path";function EV0(){let $=process.env.ARIA_HOME?.trim();if($)return $;return tC(AV0(),".aria")}function jp(){return tC(EV0(),"relaunch-pending")}function lN($=process.pid){return tC(jp(),`${$}.json`)}function Zz($){try{let Z=lN($.pid);DV0(qV0(Z),{recursive:!0}),LV0(Z,JSON.stringify($),"utf-8")}catch{}}function eC($=process.pid){try{let Z=lN($);if(!Pp(Z))return null;let J=OV0(Z,"utf-8");return JSON.parse(J)}catch{return null}}function $R($=process.pid){try{let Z=lN($);if(Pp(Z))NV0(Z)}catch{}}var dN=199,$z="ARIA_NO_RELAUNCH",P4="ARIA_RESUME_SESSION_ID",e2="ARIA_RESUME_ARION",DX="ARIA_RESTART_KIND";var Tp=()=>{};function Cp(){return globalThis}function q$($){let Z=Cp();Z.__aria_stall_phase=$,Z.__aria_stall_phase_ts=performance.now()}function $9(){let $=Cp();$.__aria_stall_phase=void 0,$.__aria_stall_phase_ts=void 0}function _V0(){let $=typeof process<"u"?process.env.ARIA_LOG_LEVEL:void 0;if($&&$ in ZR)return $;return"info"}function aN($){return ZR[$]>=ZR[JR]}function MV0($){if(!$||typeof $!=="object")return!1;let Z=$;return Z.code==="EPIPE"||Z.code==="ERR_STREAM_DESTROYED"}function PV0($,Z){try{$(...Z)}catch(J){if(MV0(J))return;throw J}}function jV0($){if($.length===0)return $;let[Z,...J]=$;if(typeof Z!=="string")return $;if(!Z.startsWith("["))return $;return[`\x1B[2m\x1B[90m${Z}\x1B[0m`,...J]}function TV0($){if($.length===0)return $;let[Z,...J]=$;if(typeof Z!=="string")return $;if(!Z.startsWith("["))return $;return[`\x1B[36m${Z}\x1B[0m`,...J]}var ZR,JR,Rp,f5,P;var wp=E(()=>{ZR={debug:0,info:1,warn:2,error:3,silent:4};JR=_V0();Rp={write($,Z){let J,X;switch($){case"debug":J=jV0(Z),X=console.debug;break;case"info":J=TV0(Z),X=console.info;break;case"warn":J=Z,X=console.warn;break;default:J=Z,X=console.error;break}PV0(X,J)}},f5=[Rp],P={debug(...$){if(aN("debug"))for(let Z of f5)Z.write("debug",$)},info(...$){if(aN("info"))for(let Z of f5)Z.write("info",$)},warn(...$){if(aN("warn"))for(let Z of f5)Z.write("warn",$)},error(...$){if(aN("error"))for(let Z of f5)Z.write("error",$)},setLevel($){JR=$},getLevel(){return JR},addSink($){f5.push($)},removeSink($){let Z=f5.indexOf($);if(Z>=0)f5.splice(Z,1)},removeConsoleSink(){let $=f5.indexOf(Rp);if($>=0)f5.splice($,1)}}});var Sp={};A$(Sp,{writeRelaunchMarker:()=>Zz,setGlobalStallPhase:()=>q$,readRelaunchMarker:()=>eC,log:()=>P,isNodeError:()=>BV0,isNativeToolSchema:()=>rC,isNativeTool:()=>Mp,isFunctionToolSchema:()=>k5,isFunctionTool:()=>FV0,getRelaunchMarkerPath:()=>lN,getRelaunchMarkerDir:()=>jp,getErrorStatusCode:()=>eK,getErrorMessage:()=>k0,clearRelaunchMarker:()=>$R,clearGlobalStallPhase:()=>$9,RESUME_SESSION_ENV:()=>P4,RESUME_ARION_ENV:()=>e2,RESTART_KIND_ENV:()=>DX,RELAUNCH_EXIT_CODE:()=>dN,NO_RELAUNCH_ENV:()=>$z});var S0=E(()=>{wp();_p();Tp()});import*as TG from"path";function q0($,Z){return{success:!0,message:$,data:Z}}function p($,Z){return{success:!1,message:$,data:Z}}function y5($,Z){let J=TG.normalize($),X=TG.normalize(Z),Y=X.endsWith(TG.sep)?X:X+TG.sep;return J===X||J.startsWith(Y)}var B9=E(()=>{S0()});function XR($){let Z=Ip($),J=wV0(Z);return CG.some((X)=>X.test(J))}function Ip($){let Z=/<<-?\s*(?:'([^']+)'|"([^"]+)"|(\w+))/g,J=$,X,Y=[];while((X=Z.exec($))!==null){let Q=X[1]??X[2]??X[3]??"";if(!Q)continue;let G=$.indexOf(`
|
|
23
24
|
`,X.index);if(G===-1)continue;let V=G+1,W=new RegExp(`^\\s*${Q.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*$`,"m"),H=$.slice(V),K=W.exec(H);if(!K)continue;let z=V+K.index;Y.push({delimiter:Q,bodyStart:V,bodyEnd:z})}for(let Q=Y.length-1;Q>=0;Q--){let{bodyStart:G,bodyEnd:V}=Y[Q],W=J.slice(G,V);J=J.slice(0,G)+W.replace(/[^\n]/g," ")+J.slice(V)}return J}function wV0($){let Z="",J=!1,X=!1,Y=!1;for(let Q=0;Q<$.length;Q++){let G=$[Q];if(J){if(G==="'")J=!1,Z+=" ";else Z+=" ";continue}if(X){if(Y){Y=!1,Z+=" ";continue}if(G==="\\"){Y=!0,Z+=" ";continue}if(G==='"')X=!1,Z+=" ";else Z+=" ";continue}if(G==="'"){J=!0,Z+=" ";continue}if(G==='"'){X=!0,Z+=" ";continue}Z+=G}return Z}function bp($){let Z=$.lastIndexOf("/");return Z===-1?$:$.slice(Z+1)}function SV0($){let Z=!1,J=!1,X=!1;for(let Y=0;Y<$.length;Y++){let Q=$[Y],G=$[Y+1];if(Z){if(Q==="'")Z=!1;continue}if(J){if(X){X=!1;continue}if(Q==="\\"){X=!0;continue}if(Q==='"'){J=!1;continue}if(Q==="`"||Q==="$"&&G==="(")return!0;continue}if(X){X=!1;continue}if(Q==="\\"){X=!0;continue}if(Q==="'"){Z=!0;continue}if(Q==='"'){J=!0;continue}if(Q==="`"||Q==="$"&&G==="(")return!0}return!1}function IV0($){let Z=[],J="",X=!1,Y=!1,Q=!1;for(let G=0;G<$.length;G++){let V=$[G],W=$[G+1];if(X){if(J+=V,V==="'")X=!1;continue}if(Y){if(J+=V,Q){Q=!1;continue}if(V==="\\"){Q=!0;continue}if(V==='"')Y=!1;continue}if(Q){J+=V,Q=!1;continue}if(V==="\\"){J+=V,Q=!0;continue}if(V==="'"){J+=V,X=!0;continue}if(V==='"'){J+=V,Y=!0;continue}if(V===";"||V===`
|
|
24
|
-
`||V==="\r"||V==="&"&&W==="&"||V==="|"&&W==="|"){if(Z.push(J.trim()),J="",(V==="&"||V==="|")&&W===V)G+=1;continue}J+=V}return Z.push(J.trim()),Z}function bV0($){let Z=[],J="",X=!1,Y=!1,Q=!1;for(let G=0;G<$.length;G++){let V=$[G],W=$[G+1],H=G>0?$[G-1]:"";if(X){if(J+=V,V==="'")X=!1;continue}if(Y){if(J+=V,Q){Q=!1;continue}if(V==="\\"){Q=!0;continue}if(V==='"')Y=!1;continue}if(Q){J+=V,Q=!1;continue}if(V==="\\"){J+=V,Q=!0;continue}if(V==="'"){J+=V,X=!0;continue}if(V==='"'){J+=V,Y=!0;continue}if(V==="|"&&W!=="|"&&H!=="|"){Z.push(J.trim()),J="";continue}J+=V}return Z.push(J.trim()),Z}function fV0($){let Z=$.trim();if(Z==="")return!1;if(kV0.test(Z))return!1;for(let X of RV0)if(Z===X||Z.startsWith(X+" "))return!0;let J=Z.split(/\s+/)[0]??"";return CV0.has(bp(J))}function yZ($){let Z=$.trim();if(Z==="")return"moderate";let J=Ip(Z);if(XR(J))return"blocked";if(SV0(J))return"moderate";let X=IV0(J);for(let G of X)if(XR(G))return"blocked";let Y=[];for(let G of X){let V=bV0(G);for(let W of V){if(XR(W))return"blocked";Y.push(W)}}if(/^[A-Za-z_]\w*=/.test(Z))return"moderate";let Q=Y.filter((G)=>G.trim()!=="");if(Q.length>0&&Q.every(fV0))return"safe";return"moderate"}function YR($,Z=[]){let J=bp($).toLowerCase();if(yV0.has(J)&&Z[0]==="-c"&&typeof Z[1]==="string")return yZ(Z[1]);return yZ([$,...Z].join(" "))}var CV0,RV0,CG,kV0,yV0;var nN=E(()=>{CV0=new Set(["ls","cat","head","tail","wc","file","stat","grep","rg","find","which","whereis","echo","date","whoami","pwd","printenv","uname","hostname"]),RV0=["git stash list","git status","git log","git diff","git show","git blame","git branch","git remote","git tag","node --version","npm --version","bun --version","python --version","bun pm ls","npm list"],CG=[/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\/(?:\s|$)/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\/\*(?:\s|$)/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\.(?:\s|$)/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*~(?:[a-zA-Z]\w*)?(?:\/\*)?(?:\s|$)/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\$HOME\b/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\*(?:\s|$)/,/>\s*\/dev\/(?:sd[a-z]|nvme\d+|vd[a-z])\b/,/mkfs/,/dd\s+.*(?:if=|of=)/,/chmod\s+(?:-R\s+)?777\b/,/curl[\s\S]*\|\s*(ba)?sh/,/wget[\s\S]*\|\s*(ba)?sh/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*eval\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*shutdown\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*reboot\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*halt\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*init\s+0\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*systemctl\s+(?:poweroff|halt|reboot)\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*kill\s+(?:-\d+\s+|-[A-Z]+\s+)*\b1\b/,/:\(\)\{\s*:\|:&\s*\};:/,/\bsudo\b/,/git\s+push\s+.*--force(?!-with-lease)\b/,/git\s+push(?:\s+-[A-Za-z]*f[A-Za-z]*\b|\s+.*\s-[A-Za-z]*f[A-Za-z]*\b)/,/git\s+reset\s+--hard/];kV0=/(?:>>|(?:^|[^2])>(?!&)|2>(?!&)|&>)/;yV0=new Set(["sh","bash","zsh","ksh","dash","ash","fish"])});var kp={};A$(kp,{runInPTY:()=>iN,createPTYSession:()=>Jz,PTYTimeoutError:()=>OX,PTYSession:()=>Z3,PTYError:()=>$3});function vV0(){try{return
|
|
25
|
+
`||V==="\r"||V==="&"&&W==="&"||V==="|"&&W==="|"){if(Z.push(J.trim()),J="",(V==="&"||V==="|")&&W===V)G+=1;continue}J+=V}return Z.push(J.trim()),Z}function bV0($){let Z=[],J="",X=!1,Y=!1,Q=!1;for(let G=0;G<$.length;G++){let V=$[G],W=$[G+1],H=G>0?$[G-1]:"";if(X){if(J+=V,V==="'")X=!1;continue}if(Y){if(J+=V,Q){Q=!1;continue}if(V==="\\"){Q=!0;continue}if(V==='"')Y=!1;continue}if(Q){J+=V,Q=!1;continue}if(V==="\\"){J+=V,Q=!0;continue}if(V==="'"){J+=V,X=!0;continue}if(V==='"'){J+=V,Y=!0;continue}if(V==="|"&&W!=="|"&&H!=="|"){Z.push(J.trim()),J="";continue}J+=V}return Z.push(J.trim()),Z}function fV0($){let Z=$.trim();if(Z==="")return!1;if(kV0.test(Z))return!1;for(let X of RV0)if(Z===X||Z.startsWith(X+" "))return!0;let J=Z.split(/\s+/)[0]??"";return CV0.has(bp(J))}function yZ($){let Z=$.trim();if(Z==="")return"moderate";let J=Ip(Z);if(XR(J))return"blocked";if(SV0(J))return"moderate";let X=IV0(J);for(let G of X)if(XR(G))return"blocked";let Y=[];for(let G of X){let V=bV0(G);for(let W of V){if(XR(W))return"blocked";Y.push(W)}}if(/^[A-Za-z_]\w*=/.test(Z))return"moderate";let Q=Y.filter((G)=>G.trim()!=="");if(Q.length>0&&Q.every(fV0))return"safe";return"moderate"}function YR($,Z=[]){let J=bp($).toLowerCase();if(yV0.has(J)&&Z[0]==="-c"&&typeof Z[1]==="string")return yZ(Z[1]);return yZ([$,...Z].join(" "))}var CV0,RV0,CG,kV0,yV0;var nN=E(()=>{CV0=new Set(["ls","cat","head","tail","wc","file","stat","grep","rg","find","which","whereis","echo","date","whoami","pwd","printenv","uname","hostname"]),RV0=["git stash list","git status","git log","git diff","git show","git blame","git branch","git remote","git tag","node --version","npm --version","bun --version","python --version","bun pm ls","npm list"],CG=[/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\/(?:\s|$)/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\/\*(?:\s|$)/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\.(?:\s|$)/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*~(?:[a-zA-Z]\w*)?(?:\/\*)?(?:\s|$)/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\$HOME\b/,/rm\s+(?:--?[A-Za-z0-9-]+\s+)*\*(?:\s|$)/,/>\s*\/dev\/(?:sd[a-z]|nvme\d+|vd[a-z])\b/,/mkfs/,/dd\s+.*(?:if=|of=)/,/chmod\s+(?:-R\s+)?777\b/,/curl[\s\S]*\|\s*(ba)?sh/,/wget[\s\S]*\|\s*(ba)?sh/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*eval\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*shutdown\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*reboot\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*halt\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*init\s+0\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*systemctl\s+(?:poweroff|halt|reboot)\b/,/(?:^|[;&|]\s*|\$\(|`|\()\s*(?:(?:env|command)\s+)*kill\s+(?:-\d+\s+|-[A-Z]+\s+)*\b1\b/,/:\(\)\{\s*:\|:&\s*\};:/,/\bsudo\b/,/git\s+push\s+.*--force(?!-with-lease)\b/,/git\s+push(?:\s+-[A-Za-z]*f[A-Za-z]*\b|\s+.*\s-[A-Za-z]*f[A-Za-z]*\b)/,/git\s+reset\s+--hard/];kV0=/(?:>>|(?:^|[^2])>(?!&)|2>(?!&)|&>)/;yV0=new Set(["sh","bash","zsh","ksh","dash","ash","fish"])});var kp={};A$(kp,{runInPTY:()=>iN,createPTYSession:()=>Jz,PTYTimeoutError:()=>OX,PTYSession:()=>Z3,PTYError:()=>$3});function vV0(){try{return r0("node-pty")}catch{throw Error(`Interactive PTY sessions require node-pty (failed to load native addon).
|
|
25
26
|
Reinstall with: bun install
|
|
26
27
|
Or use non-interactive mode: spawn(interactive=false)`)}}class Z3{static MAX_OUTPUT=10485760;_output="";_isRunning=!0;_exitCode;_exitPromise;_exitResolve;_pty;_dataDisposable;_exitDisposable;constructor($){this._pty=$,this._exitPromise=new Promise((Z)=>{this._exitResolve=Z}),this._dataDisposable=$.onData((Z)=>{if(this._output+=Z,this._output.length>Z3.MAX_OUTPUT)this._output=this._output.slice(-Z3.MAX_OUTPUT)}),this._exitDisposable=$.onExit(({exitCode:Z})=>{this._isRunning=!1,this._exitCode=Z,this._exitResolve(Z)})}write($){if(!this._isRunning)throw new $3("Cannot write to a closed PTY session");this._pty.write($)}resize($,Z){if(!this._isRunning)throw new $3("Cannot resize a closed PTY session");this._pty.resize($,Z)}async waitFor($,Z=5000){let J=Date.now(),X=typeof $==="string"?new RegExp(hV0($)):$;if(X.test(this._output))return this._output;return new Promise((Y,Q)=>{let G,V,W=()=>{if(G)clearInterval(G);if(V)clearTimeout(V)},H=()=>{if(X.test(this._output))return W(),Y(this._output),!0;if(!this._isRunning)return W(),Q(new $3(`Process exited before pattern was found: ${$}`,this._output)),!0;return!1};if(H())return;G=setInterval(()=>{H()},10),V=setTimeout(()=>{W();let K=Date.now()-J;Q(new OX(`Timeout (${K}ms) waiting for pattern: ${$}`,this._output))},Z)})}async waitForExit($=30000){if(!this._isRunning)return this._output;return new Promise((Z,J)=>{let X;X=setTimeout(()=>{J(new OX(`Timeout (${$}ms) waiting for process to exit`,this._output))},$),this._exitPromise.then(()=>{if(X)clearTimeout(X);Z(this._output)}).catch(J)})}kill($){if(!this._isRunning)return;try{this._pty.kill($)}catch{}}close(){if(this._isRunning)this.kill("SIGKILL"),this._isRunning=!1,this._exitResolve(-1);this._dataDisposable.dispose(),this._exitDisposable.dispose()}get output(){return this._output}get isRunning(){return this._isRunning}get pid(){return this._pty.pid}get exitCode(){return this._exitCode}get cols(){return this._pty.cols}get rows(){return this._pty.rows}}async function Jz($){let X=vV0().spawn($.command,$.args??[],{name:"xterm-256color",cols:$.cols??80,rows:$.rows??24,cwd:$.cwd??process.cwd(),env:{...F1($.env),TERM:"xterm-256color"}});return new Z3(X)}async function iN($){let{timeoutMs:Z=30000,...J}=$,X=await Jz(J);try{return{output:await X.waitForExit(Z),exitCode:X.exitCode??0}}finally{X.close()}}function hV0($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var OX,$3;var QR=E(()=>{NX();OX=class OX extends Error{output;constructor($,Z){super($);this.output=Z,this.name="PTYTimeoutError"}};$3=class $3 extends Error{output;constructor($,Z){super($);this.output=Z,this.name="PTYError"}}});import{spawn as yp}from"child_process";import{constants as vp}from"os";function VR($){let Z=$.toUpperCase();if(xV0.has(Z))return!0;return gV0.some((J)=>Z.startsWith(J))}function sN($=process.env){let Z={};for(let[J,X]of Object.entries($)){if(X===void 0)continue;if(VR(J))continue;Z[J]=X}return Z}function xp($){return hp.has($.toUpperCase())||VR($)}function GR($){return mV0.has($.toUpperCase())||VR($)}function oN($,Z){let J=Z;if(Z){J={};for(let[Q,G]of Object.entries(Z)){if(GR(Q))continue;J[Q]=G}}let X=$.env;if($.env){X={};for(let[Q,G]of Object.entries($.env)){if(GR(Q))continue;X[Q]=G}}let Y={};for(let[Q,G]of Object.entries(process.env)){if(G===void 0)continue;if(xp(Q))continue;Y[Q]=G}return{...Y,...X,...J}}function F1($){let Z={};for(let[X,Y]of Object.entries(process.env)){if(Y===void 0)continue;if(xp(X))continue;Z[X]=Y}let J;if($){J={};for(let[X,Y]of Object.entries($)){if(GR(X))continue;J[X]=Y}}return{...Z,...J}}async function LX($,Z){if(yZ($.command)==="blocked")return p(`Command blocked by shell safety policy: ${$.command}`);if(Z.abortSignal?.aborted)return p("Command cancelled");let X=$.cwd??Z.workingDir,Y=oN(Z,$.env),Q=$.timeout??120000;return RG({program:"/bin/bash",args:["-lc",$.command],cwd:X,env:$.env,timeout:Q},{...Z,workingDir:X,env:Y})}function Xz($,Z,J){if(!$)return;if(J)try{process.kill(-$,Z);return}catch{}try{process.kill($,Z)}catch{}}function WR($,Z){if(!$)return!1;if(Z)try{return process.kill(-$,0),!0}catch{}try{return process.kill($,0),!0}catch{return!1}}async function cV0($,Z,J=1000){if(!$)return;let X=Date.now()+J;while(Date.now()<X){if(!WR($,Z))return;await new Promise((Y)=>setTimeout(Y,25))}}async function RG($,Z){let J=$.args??[],X=[$.program,...J].join(" ");if(YR($.program,J)==="blocked")return p(`Command blocked by shell safety policy: ${X}`,{stdout:"",stderr:"",exitCode:1});if(Z.abortSignal?.aborted)return p("Command cancelled",{stdout:"",stderr:"",exitCode:1});let Q=$.cwd??Z.workingDir,G=oN(Z,$.env),V=$.timeout??120000;return new Promise((W)=>{let H=process.platform!=="win32",K=yp($.program,J,{cwd:Q,env:G,detached:H});if(K.pid&&Z.processRegistry)Z.processRegistry.add(K.pid,{command:$.program,args:J,cwd:Q,interactive:!1});let z="",U="",B=!1,F=!1,D=!1,O,L,q=(N,_)=>{if(D)return;if(D=!0,O)clearTimeout(O);if(L)clearTimeout(L);if(Z.abortSignal&&A)Z.abortSignal.removeEventListener("abort",A);if(Z.processRegistry?.recordExitMetadata?.(K.pid??0,_),K.pid&&Z.processRegistry&&!(H&&WR(K.pid,H)))Z.processRegistry.remove(K.pid,_);W(N)},A;if(Z.abortSignal)A=()=>{F=!0,Xz(K.pid,"SIGTERM",H),L=setTimeout(()=>{Xz(K.pid,"SIGKILL",H)},1000)},Z.abortSignal.addEventListener("abort",A,{once:!0});if(V)O=setTimeout(()=>{B=!0,Xz(K.pid,"SIGTERM",H),L=setTimeout(()=>{Xz(K.pid,"SIGKILL",H)},1000)},V);K.stdout?.on("data",(N)=>{z+=N.toString()}),K.stderr?.on("data",(N)=>{U+=N.toString()}),K.on("error",(N)=>{let _=typeof N==="object"&&N&&"code"in N&&N.code==="ENOENT"?127:1;q(p(k0(N),{stdout:"",stderr:U,exitCode:_}))}),K.on("close",(N,_)=>{(async()=>{if(F||B){if(L)clearTimeout(L),L=void 0;Xz(K.pid,"SIGKILL",H),await cV0(K.pid,H)}if(F){q(p("Command cancelled",{stdout:z,stderr:U,exitCode:N??1}),{exitCode:N,signal:_});return}if(B){q(p("Command timed out",{stdout:z,stderr:U,exitCode:N??1}),{exitCode:N,signal:_});return}if(_){let T=vp.signals[_]??1;q(p(`Command exited due to signal ${_}`,{stdout:z,stderr:U,exitCode:N??T}),{exitCode:N,signal:_});return}let M=N??0;if(M===0)q(q0("Command executed successfully",{stdout:z,stderr:U,exitCode:M}),{exitCode:M,signal:_});else q(p(`Command exited with code ${M}`,{stdout:z,stderr:U,exitCode:M}),{exitCode:M,signal:_})})()})})}async function AX($,Z){let J=$.args??[],X=[$.program,...J].join(" ");if(YR($.program,J)==="blocked")return p(`Command blocked by shell safety policy: ${X}`);if(Z.abortSignal?.aborted)return p("Command cancelled");if($.interactive===!0){if(!Z.ptySessionStore)return p("PTY session store not available \u2014 interactive mode requires runner wiring");let{createPTYSession:V}=await Promise.resolve().then(() => (QR(),kp)),W=await V({command:$.program,args:$.args,cwd:$.cwd??Z.workingDir,env:oN(Z,$.env)}),H=W.pid;if(!H)return W.close(),p("Failed to start interactive session: no PID");if(Z.ptySessionStore.add(H,W),Z.processRegistry)Z.processRegistry.add(H,{command:$.program,args:$.args??[],cwd:$.cwd??Z.workingDir,interactive:!0});let K=()=>{if(Z.ptySessionStore?.remove(H),Z.processRegistry?.has(H))Z.processRegistry.remove(H,{exitCode:W.exitCode??null})};if(!W.isRunning)K();else{let z=setInterval(()=>{if(!W.isRunning)clearInterval(z),K()},50);if(z.unref?.(),Z.abortSignal){let U=()=>{clearInterval(z),W.close(),K()};Z.abortSignal.addEventListener("abort",U,{once:!0})}}return q0(`Started interactive session with PID ${H}`,{pid:H})}let Q=$.cwd??Z.workingDir,G=oN(Z,$.env);return new Promise((V)=>{let W=!1,H,K=(U)=>{if(W)return;if(W=!0,H)clearTimeout(H);V(U)},z;if(Z.abortSignal)Z.abortSignal.addEventListener("abort",()=>{if(z)try{process.kill(-z,"SIGTERM")}catch{try{process.kill(z,"SIGTERM")}catch{}}},{once:!0});try{let U=yp($.program,J,{cwd:Q,env:G,detached:!0,stdio:"ignore"});if(U.on("error",(B)=>{K(p(k0(B)))}),U.pid){if(z=U.pid,U.on("exit",(B,F)=>{if(Z.processRegistry?.recordExitMetadata?.(U.pid,{exitCode:B,signal:F}),Z.processRegistry&&!WR(U.pid,!0))Z.processRegistry.remove(U.pid,{exitCode:B,signal:F})}),Z.processRegistry)Z.processRegistry.add(U.pid,{command:$.program,args:J,cwd:Q,interactive:!1});U.unref(),K(q0(`Spawned process with PID ${U.pid}`,{pid:U.pid}))}else H=setTimeout(()=>{K(p("Failed to spawn process: no PID returned"))},100)}catch(U){K(p(k0(U)))}})}async function Yz($,Z){let J=$.signal??"SIGTERM";try{let X=dV0(J);if(X===void 0)return p(`Invalid signal: ${J}`);if(Z.processRegistry?.has($.pid))aV0($.pid,X);else process.kill($.pid,X);let Y=Z.processRegistry;if(Y?.waitForExit&&lV0(X))await Y.waitForExit($.pid,2000);let Q=typeof X==="number"?J:X;return q0(`Sent ${Q} to process ${$.pid}`,{pid:$.pid,signal:Q})}catch(X){if(X instanceof Error&&"code"in X){let Y=X;if(Y.code==="ESRCH")return p(`Process not found: ${$.pid}`);if(Y.code==="EPERM")return p(`Permission denied to kill process: ${$.pid}`)}return p(k0(X))}}function pV0($){return uV0.includes($.toUpperCase())}function dV0($){if(/^\d+$/.test($)){let J=parseInt($,10);if(J>=1&&J<=31)return J;return}let Z=$.toUpperCase();if(pV0(Z))return Z;return}function lV0($){if(typeof $==="number"){let Z=nV0($);if(!Z)return!1;return!fp.has(Z)}return!fp.has($)}function aV0($,Z){try{if($>0){process.kill(-$,Z);return}}catch{}process.kill($,Z)}function nV0($){for(let[Z,J]of Object.entries(vp.signals))if(J===$)return Z;return}function iV0($){return typeof $.getAll==="function"}async function Qz($,Z){let J=gp($),X=typeof J?.includeExited==="boolean"?J.includeExited:!1;if(!Z.processRegistry)return p("Process registry not available");let Y=Z.processRegistry,Q=typeof Y.listProcesses==="function"?Y.listProcesses({includeExited:X}):iV0(Y)?Y.getAll().map((G)=>({pid:G,command:null,args:[],cwd:null,interactive:!1,startedAt:new Date().toISOString(),runtimeMs:0,status:"running",exitCode:null,signal:null,endedAt:null})):[];return q0(`Found ${Q.length} tracked process${Q.length===1?"":"es"}`,{processes:Q,count:Q.length})}async function Gz($,Z){let J=gp($);if(!J)return p("Invalid input: expected an object");let X=typeof J.pid==="number"?J.pid:NaN;if(!X||X<=0||!Number.isInteger(X))return p("Invalid PID: must be a positive integer");if(X===process.pid)return p("Cannot wait on own process");let Y=J.timeoutMs;if(Y!==void 0&&(typeof Y!=="number"||Number.isNaN(Y)))return p("Invalid timeoutMs: must be a number");let Q=J.timeout;if(Q!==void 0&&(typeof Q!=="number"||Number.isNaN(Q)))return p("Invalid timeout: must be a number");let G=Math.min(Math.max(0,Y??Q??30000),300000);if(!Z.processRegistry)return p("Process registry not available");if(typeof Z.processRegistry.waitForExit!=="function")return p("Process registry does not support waiting");let V=Date.now(),W=await Z.processRegistry.waitForExit(X,G),H=Math.max(0,Date.now()-V);if(W.status==="not_found"||!W.process)return p(`Process not tracked: ${X}`,{pid:X,exited:!1,status:"not_found",timedOut:!1,waitedMs:H});let K=oV0(W,H);if(W.status==="running"||W.timedOut)return p(`Timed out waiting for process ${X}`,K);return q0(`Process ${X} exited`,K)}function oV0($,Z){let J=$.process,X=$.status==="exited"?"exited":"running";return{pid:$.pid,status:X,exited:X==="exited",timedOut:$.timedOut,waitedMs:Z,command:J.command,args:J.args,cwd:J.cwd,interactive:J.interactive,startedAt:J.startedAt,endedAt:J.endedAt,runtimeMs:J.runtimeMs,exitCode:J.exitCode,signal:J.signal}}function gp($){if(!$||typeof $!=="object")return;return $}async function Vz($,Z){if(!$||typeof $!=="object")return p("Invalid input: expected an object");let J=$,X=typeof J.pid==="number"?J.pid:NaN,Y=typeof J.input==="string"?J.input:void 0,Q=typeof J.timeout==="number"?J.timeout:void 0;if(!X||X<=0||!Number.isInteger(X))return p("Invalid PID: must be a positive integer");if(X===process.pid)return p("Cannot write to own process");if(Y===void 0)return p("Input must be a string");if(!Z.ptySessionStore)return p("PTY session store not available");if(!Z.ptySessionStore.has(X))return p(`No interactive session found for PID ${X}. Use spawn with interactive=true first.`);let G=Z.ptySessionStore.get(X);if(!G)return p(`No interactive session found for PID ${X}. Use spawn with interactive=true first.`);if(!G.isRunning)return p(`Process ${X} has exited (code: ${G.exitCode??"unknown"})`);try{let V=G.output.length;if(G.write(Y),Q&&Q>0){let z=Math.min(Q,30000),U=Date.now()+z,B=50;while(Date.now()<U){if(await new Promise((F)=>setTimeout(F,50)),G.output.length>V)break;if(!G.isRunning)break}}let H=G.output.slice(V),K=H.length>1e4?H.slice(-1e4):H;return q0(`Wrote ${Y.length} bytes to PID ${X}`,{output:K})}catch(V){let W=V instanceof Error?V.message:String(V);return p(`Failed to write to PID ${X}: ${W}`)}}var hp,xV0,gV0,mV0,uV0,fp;var NX=E(()=>{B9();nN();hp=new Set(["LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_FRAMEWORK_PATH","DYLD_LIBRARY_PATH","BASH_ENV","ENV","CDPATH","GLOBIGNORE","PROMPT_COMMAND","SHELLOPTS","BASHOPTS","GIT_DIR","GIT_WORK_TREE","GIT_INDEX_FILE","GIT_OBJECT_DIRECTORY","GIT_ALTERNATE_OBJECT_DIRECTORIES","GIT_COMMON_DIR","GIT_PREFIX","GIT_INTERNAL_SUPER_PREFIX","GIT_CONFIG","GIT_CONFIG_GLOBAL","GIT_CONFIG_SYSTEM","GIT_CONFIG_COUNT","GIT_CEILING_DIRECTORIES"]),xV0=new Set(["GIT_DIR","GIT_WORK_TREE","GIT_INDEX_FILE","GIT_INDEX_VERSION","GIT_COMMON_DIR","GIT_OBJECT_DIRECTORY","GIT_ALTERNATE_OBJECT_DIRECTORIES","GIT_CEILING_DIRECTORIES","GIT_DISCOVERY_ACROSS_FILESYSTEM","GIT_NAMESPACE","GIT_CONFIG","GIT_CONFIG_GLOBAL","GIT_CONFIG_SYSTEM","GIT_CONFIG_NOSYSTEM","GIT_CONFIG_COUNT","GIT_CONFIG_PARAMETERS"]),gV0=["GIT_CONFIG_KEY_","GIT_CONFIG_VALUE_","GIT_AUTHOR_","GIT_COMMITTER_"];mV0=new Set([...hp,"PATH","NODE_OPTIONS","NODE_PATH","PYTHONPATH","IFS","HOME","SHELL","EDITOR","VISUAL","JAVA_TOOL_OPTIONS","_JAVA_OPTIONS","CLASSPATH","RUBYOPT","GEM_HOME","GEM_PATH","PERL5OPT","PERL5LIB","PYTHONSTARTUP"]);uV0=["SIGHUP","SIGINT","SIGQUIT","SIGILL","SIGTRAP","SIGABRT","SIGBUS","SIGFPE","SIGKILL","SIGUSR1","SIGSEGV","SIGUSR2","SIGPIPE","SIGALRM","SIGTERM","SIGSTKFLT","SIGCHLD","SIGCONT","SIGSTOP","SIGTSTP","SIGTTIN","SIGTTOU","SIGURG","SIGXCPU","SIGXFSZ","SIGVTALRM","SIGPROF","SIGWINCH","SIGIO","SIGPWR","SIGSYS"],fp=new Set(["SIGCHLD","SIGCONT","SIGSTOP","SIGTSTP","SIGTTIN","SIGTTOU","SIGURG","SIGWINCH"])});function wG($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function sV0($){if($===null)return"null";if(Array.isArray($))return"array";return typeof $}function rV0($,Z){if(Z==="integer")return typeof $==="number"&&Number.isInteger($);if(Z==="number")return typeof $==="number";if(Z==="string")return typeof $==="string";if(Z==="boolean")return typeof $==="boolean";if(Z==="array")return Array.isArray($);if(Z==="object")return wG($);if(Z==="null")return $===null;return!0}function e6($){return $?`Property "${$}"`:"Value"}function rN($,Z,J){let X=Z.type;if(X){let Y=Array.isArray(X)?X:[X];if(!Y.some((G)=>rV0($,G)))return`${e6(J)} expected type ${Y.join(" | ")}; got ${sV0($)}`}if(Array.isArray(Z.enum)&&Z.enum.length>0){let Y=Z.enum;if(!Y.some((G)=>Object.is(G,$)))return`${e6(J)} must be one of: ${Y.map((G)=>String(G)).join(", ")}`}if("const"in Z&&!Object.is(Z.const,$))return`${e6(J)} must equal ${String(Z.const)}`;if(typeof $==="string"){if(typeof Z.minLength==="number"&&$.length<Z.minLength)return`${e6(J)} must have length >= ${Z.minLength}`;if(typeof Z.maxLength==="number"&&$.length>Z.maxLength)return`${e6(J)} must have length <= ${Z.maxLength}`;if(typeof Z.pattern==="string")try{if(!new RegExp(Z.pattern).test($))return`${e6(J)} does not match required pattern`}catch{}}if(typeof $==="number"){if(typeof Z.minimum==="number"&&$<Z.minimum)return`${e6(J)} must be >= ${Z.minimum}`;if(typeof Z.maximum==="number"&&$>Z.maximum)return`${e6(J)} must be <= ${Z.maximum}`;if(typeof Z.exclusiveMinimum==="number"&&$<=Z.exclusiveMinimum)return`${e6(J)} must be > ${Z.exclusiveMinimum}`;if(typeof Z.exclusiveMaximum==="number"&&$>=Z.exclusiveMaximum)return`${e6(J)} must be < ${Z.exclusiveMaximum}`;if(typeof Z.multipleOf==="number"&&Z.multipleOf>0){let Y=$/Z.multipleOf;if(!Number.isInteger(Y))return`${e6(J)} must be a multiple of ${Z.multipleOf}`}}if(Array.isArray($)){if(typeof Z.minItems==="number"&&$.length<Z.minItems)return`${e6(J)} must contain at least ${Z.minItems} item(s)`;if(typeof Z.maxItems==="number"&&$.length>Z.maxItems)return`${e6(J)} must contain at most ${Z.maxItems} item(s)`;if(wG(Z.items))for(let Y=0;Y<$.length;Y++){let Q=rN($[Y],Z.items,J?`${J}[${Y}]`:`[${Y}]`);if(Q)return Q}}if(wG($)){let Y=Array.isArray(Z.required)?Z.required.filter((V)=>typeof V==="string"):[];if(Y.length>0){let V=Y.filter((W)=>!(W in $)||$[W]===void 0);if(V.length>0)return`${J?`${J}: `:""}Missing required properties: ${V.join(", ")}`}let Q=wG(Z.properties)?Z.properties:void 0;if(Q)for(let[V,W]of Object.entries(Q)){if(!(V in $)||$[V]===void 0)continue;if(!wG(W))continue;let H=J?`${J}.${V}`:V,K=rN($[V],W,H);if(K)return K}let G=Z.additionalProperties;if(G===!1){let V=new Set(Q?Object.keys(Q):[]),W=Object.keys($).filter((H)=>!V.has(H));if(W.length>0){if(J)return`${J}: Unknown properties: ${W.join(", ")}`;return`Unknown properties: ${W.join(", ")}`}}else if(wG(G)){let V=new Set(Q?Object.keys(Q):[]);for(let[W,H]of Object.entries($)){if(V.has(W))continue;let K=J?`${J}.${W}`:W,z=rN(H,G,K);if(z)return z}}}return null}function qX($,Z,J=""){if(Z.type!=="object")return null;let X=J?`${J}: `:"";if($===null||$===void 0){let Y=Z.required;if(Y&&Y.length>0)return`${X}Expected an object with required properties: ${Y.join(", ")}; got ${$===null?"null":"undefined"}`;return null}if(typeof $!=="object"||Array.isArray($))return`${X}Expected an object; got ${Array.isArray($)?"array":typeof $}`;return rN($,Z,J)}function mp($){return $.annotations?.readOnlyHint===!0}function tV0($){if(!Array.isArray($))return;let Z=[];for(let J of $){if(typeof J==="string"){let Q=J.trim();if(Q)Z.push(Q);continue}if(!J||typeof J!=="object")continue;let X=J,Y=typeof X.error==="string"&&X.error.trim()?X.error.trim():typeof X.message==="string"&&X.message.trim()?X.message.trim():void 0;if(Y)Z.push(Y)}if(Z.length===0)return;return[...new Set(Z)]}function cp($){return $.trimStart().toLowerCase().startsWith("bash:")}function eV0($){return`'${$.replace(/'/g,`'"'"'`)}'`}function $W0($,Z,J){return $.replace(/\{\{(\w+)\}\}/g,(X,Y)=>{let Q=Z[Y];if(Q===void 0||Q===null)return"";let G=String(Q);return J?.escapeForShell?eV0(G):G})}var v5;var up=E(()=>{sC();NX();v5=class v5{tools=new Map;middleware=[];mcpClient;logger;constructor($){this.logger=$?.logger??console}use($){this.middleware.push($)}register($,Z={}){if(this.tools.has($.name)&&!Z.override)throw Error(`Tool "${$.name}" is already registered. Use { override: true } to replace.`);this.tools.set($.name,$)}get($){return this.tools.get($)}has($){return this.tools.has($)}list($){let Z=Array.from(this.tools.values());if(!$)return Z;return Z.filter((J)=>J.category===$)}unregister($){return this.tools.delete($)}get size(){return this.tools.size}clear(){this.tools.clear()}getAll(){return Array.from(this.tools.values())}snapshot(){let $=new v5({logger:this.logger});for(let[Z,J]of this.tools)$.tools.set(Z,J);for(let Z of this.middleware)$.middleware.push(Z);return $}async execute($,Z,J){let X=this.tools.get($);if(!X)return{success:!1,message:`Tool "${$}" is not registered.`};if(X.parameters&&typeof X.parameters==="object"){let Q=X.parameters,G=qX(Z,Q);if(G)return{success:!1,message:`Invalid input for tool "${$}": ${G}`}}if(this.middleware.length===0)return X.execute(Z,J);return this.middleware.reduceRight((Q,G)=>()=>G(X,Z,J,Q),()=>X.execute(Z,J))()}toolToInfo($){let Z=[];if($.parameters&&typeof $.parameters==="object"){let J=$.parameters;if(J.properties)for(let[X,Y]of Object.entries(J.properties))Z.push({name:X,type:String(Y.type||"unknown"),required:J.required?.includes(X)??!1,description:Y.description})}return{name:$.name,description:$.description,requiresConfirmation:$.requiresConfirmation??$.riskLevel==="dangerous",parameters:Z}}getToolInfos(){return this.getAll().map(($)=>this.toolToInfo($))}search($){let Z=$.toLowerCase();return Array.from(this.tools.values()).filter((J)=>J.name.toLowerCase().includes(Z)||J.description.toLowerCase().includes(Z))}async discoverFromMemoria($){let Z=0,J=0,X=0,Y=new Set,Q=200,G=250,V=new Set(["filesystem","code","shell","web","data","memory","meta","arion"]),W=new Set(["safe","moderate","dangerous"]);try{while(X<G){let H=await $.recallTools({query:"",limit:Q,offset:J,matchAll:!0,updateAccessStats:!1});if(X+=1,H.length===0)break;let K=H.map((z)=>String(z.id??z.name)).join("|");if(K&&Y.has(K)){this.logger.warn("Memoria discovery received a duplicate page; stopping to avoid pagination loop");break}if(K)Y.add(K);for(let z of H)try{if(typeof z.name!=="string"||z.name.trim().length===0){this.logger.warn("Skipping Memoria tool with missing name");continue}if(typeof z.description!=="string"||z.description.trim().length===0){this.logger.warn(`Skipping Memoria tool "${z.name}" with missing description`);continue}let U=typeof z.category==="string"&&V.has(z.category)?z.category:"meta";if(U==="meta"&&z.category!=="meta")this.logger.warn(`Memoria tool "${z.name}" has invalid/missing category; defaulting to "meta"`);let B=z.parameters&&typeof z.parameters==="object"?z.parameters:{type:"object",properties:{},additionalProperties:!0};if(!z.parameters||typeof z.parameters!=="object")this.logger.warn(`Memoria tool "${z.name}" has invalid/missing parameters; defaulting to permissive schema`);if(!(typeof z.responseTemplate==="string"&&z.responseTemplate.trim().length>0)){this.logger.warn(`Skipping Memoria tool "${z.name}" without executable responseTemplate`);continue}let D=typeof z.riskLevel==="string"&&W.has(z.riskLevel)?z.riskLevel:"moderate",L=typeof z.responseTemplate==="string"&&cp(z.responseTemplate)?"dangerous":D,q=tV0(z.failures),A={description:z.description,category:U,parameters:B,riskLevel:L};if(q&&q.length>0)A.issues=q;if(typeof z.responseTemplate==="string")A.responseTemplate=z.responseTemplate;let N={name:z.name,description:z.description,category:U,parameters:B,riskLevel:L,issues:q,loadingTier:"deferred",execute:this.createMemoriaToolExecutor(z.name,A)};if(this.tools.has(N.name))continue;this.register(N),Z++}catch{this.logger.warn(`Invalid tool definition in Memoria: ${z.name}`)}if(J+=H.length,H.length<Q)break}if(X>=G)this.logger.warn(`Stopped Memoria discovery after ${G} pages to avoid unbounded paging`)}catch(H){this.logger.error("Error discovering tools from Memoria:",H)}return Z}async saveToMemoria($,Z){let J=this.get($);if(!J)throw Error(`Tool "${$}" not found`);let X=Array.isArray(J.issues)&&J.issues.length>0?J.issues.map((W)=>typeof W==="string"?W.trim():"").filter(Boolean):[],Y=X.length>0?X.map((W)=>({timestamp:new Date,error:W})):void 0,Q=J.responseTemplate,G=typeof Q==="string"&&Q.trim().length>0?Q:void 0,V={name:J.name,description:J.description,category:J.category,parameters:J.parameters,riskLevel:J.riskLevel,...Y?{failures:Y}:{}};if(G)V.responseTemplate=G;await Z.rememberTool(V)}createMemoriaToolExecutor($,Z){return async(J,X)=>{try{let Y=J&&typeof J==="object"?J:{},Q=Z.parameters;if(Q&&typeof Q==="object"){let G=qX(J,Q);if(G)return{success:!1,message:`Invalid input for tool "${$}": ${G}`}}if(typeof Z.responseTemplate==="string"){let G=Z.responseTemplate,V=cp(G),W=$W0(G,Y,{escapeForShell:V});if(V){let H=W.toLowerCase().indexOf("bash:"),K=W.slice(H+5).trim();if(!K)return{success:!1,message:`Tool "${$}" has empty bash command template`};let z=await LX({command:K,cwd:X.workingDir,env:X.env,timeout:30000},X);if(!z.success)return{success:!1,message:`Tool "${$}" command failed: ${z.message}`};let U=z.data&&typeof z.data==="object"?z.data:void 0,B=[U?.stdout,U?.stderr].filter(Boolean).join(`
|
|
27
28
|
`).trim();return{success:!0,message:`Tool "${$}" executed command template.`,data:B}}return{success:!0,message:`Tool "${$}" executed with template response.`,data:W}}return{success:!1,message:`Tool "${$}" was loaded from Memoria but has no executable content. Add a "responseTemplate" field to the tool definition.`}}catch(Y){return{success:!1,message:`Tool "${$}" execution failed: ${Y instanceof Error?Y.message:String(Y)}`}}}}async connectMCP($){if(this.mcpClient)await this.disconnectMCP();this.mcpClient=new jG({logger:this.logger});let J=(await Promise.allSettled($.map((G)=>this.mcpClient.connect(G)))).map((G,V)=>G.status==="rejected"?$[V].name:null).filter(Boolean);if(J.length>0)this.logger.warn(`Failed to connect MCP servers: ${J.join(", ")}`);let X=await this.mcpClient.listAllTools();for(let G of X){let V=mp(G);this.register({name:`mcp__${G.server}__${G.name}`,description:G.description||`MCP tool from ${G.server}`,category:"meta",riskLevel:"moderate",isReadOnly:V,loadingTier:"always",parameters:G.inputSchema,execute:async(W,H)=>{if(H.abortSignal?.aborted)return{success:!1,message:"Cancelled"};return this.mcpClient.callTool(G.server,G.name,W,H.abortSignal)}})}this.mcpClient.on("toolsChanged",async(G)=>{try{await this.refreshMCPTools(G)}catch(V){this.logger.error(`Failed to refresh MCP tools for ${G}:`,V.message)}});let Y=await this.mcpClient.listAllResources(),Q=await this.mcpClient.listAllPrompts();return{tools:X.length,resources:Y.length,prompts:Q.length}}async refreshMCPTools($){let Z=`mcp__${$}__`;for(let Y of this.tools.keys())if(Y.startsWith(Z))this.unregister(Y);let X=(await this.mcpClient.listAllTools()).filter((Y)=>Y.server===$);for(let Y of X){let Q=mp(Y);this.register({name:`mcp__${Y.server}__${Y.name}`,description:Y.description||`MCP tool from ${Y.server}`,category:"meta",riskLevel:"moderate",isReadOnly:Q,loadingTier:"always",parameters:Y.inputSchema,execute:async(G,V)=>{if(V.abortSignal?.aborted)return{success:!1,message:"Cancelled"};return this.mcpClient.callTool(Y.server,Y.name,G,V.abortSignal)}})}}async disconnectMCP(){for(let $ of this.tools.keys())if($.startsWith("mcp__"))this.unregister($);await this.mcpClient?.disconnectAll(),this.mcpClient=void 0}getMCPClient(){return this.mcpClient}async dispose(){await this.disconnectMCP(),this.tools.clear()}async[Symbol.asyncDispose](){await this.dispose()}}});var HR=E(()=>{up()});import*as SG from"path";import{fileURLToPath as ZW0}from"url";import{createRequire as JW0}from"module";function GW0(){if(tN)return tN;try{let $=XW0(pp);if(typeof $!=="object"||$===null||typeof $.frg!=="function")throw Error("wrapper did not export a frg() function");return tN=$,tN}catch($){let Z=$ instanceof Error?$.message:String($);throw Error(`@aria-cli/fastripgrep: failed to load native addon via wrapper ${pp} (${process.platform}-${process.arch}). ${Z}`)}}function h5($){let J=GW0().frg($);return typeof J==="string"?JSON.parse(J):J}var XW0,YW0,QW0,pp,tN=null;var KR=E(()=>{XW0=JW0(import.meta.url),YW0=SG.dirname(ZW0(import.meta.url)),QW0=SG.resolve(YW0,".."),pp=SG.join(QW0,"wrapper.cjs")});import*as f9 from"fs";import*as t9 from"path";import{execFileSync as VW0}from"child_process";function p8($){return t9.resolve($)}function lp($){return t9.join(p8($),".frg","session")}function Hz($){return t9.join(lp($),"aria-pending.jsonl")}function ap($){f9.mkdirSync(lp($),{recursive:!0})}function np($){if(typeof $!=="string")return;return Buffer.byteLength($,"utf8")<=YL?$:void 0}function IG($){let Z=p8($),J=Wz.get(Z);if(J)return dp(Z,J),J;let X={loaded:!1,sequence:0,pending:new Map};return Wz.set(Z,X),dp(Z,X),X}function UR($){let Z=p8($),J=$L.get(Z);if(J)return J;let X={timer:null,inFlight:!1,retryCount:0};return $L.set(Z,X),X}function dp($,Z){let J=p8($),X=Z??Wz.get(J);if(!X||X.loaded)return;let Y=Hz(J);if(f9.existsSync(Y))try{let Q=f9.readFileSync(Y,"utf8").split(/\r?\n/).filter(Boolean);for(let G of Q){let V=JSON.parse(G),W=p8(V.path);X.pending.set(W,{...V,repoRoot:J,path:W,content:np(V.content)}),X.sequence=Math.max(X.sequence,V.sequence??0)}}catch{}X.loaded=!0}function ip($){let Z=p8($),J=Wz.get(Z);if(!J||J.pending.size===0){try{f9.rmSync(Hz(Z),{force:!0})}catch{}return}ap(Z);let Y=[...J.pending.values()].sort((Q,G)=>Q.sequence-G.sequence).map((Q)=>JSON.stringify(Q)).join(`
|
|
@@ -4042,7 +4043,7 @@ Respond with JSON: {"confirmed": boolean, "adjustedLevel": "beginner"|"intermedi
|
|
|
4042
4043
|
Source: `),Y=J.indexOf(`
|
|
4043
4044
|
Success: `),Q=J.indexOf(`
|
|
4044
4045
|
Steps:
|
|
4045
|
-
`);if(X<0||Y<0||Q<0)return!1;if(!(X<Y&&Y<Q))return!1;let G=J.slice(Q+8).trim();return/^\d+\.\s+\S/m.test(G)}function g_0($){if(typeof $.contentHash==="string"&&$.contentHash.trim().length>0)return`hash:${$.contentHash.trim()}`;if(typeof $.id==="string"&&$.id.trim().length>0)return`id:${$.id.trim()}`;if(typeof $.content==="string"&&$.content.trim().length>0)return`content:${$.content.trim()}`;return null}function l_0($){return $.toLowerCase().replace(/[^a-z0-9_]+/g,"")}function a_0($){let Z=k6($,m_0);if(!Z.ok)return null;let J=Z.data;if(typeof J.success==="boolean")return J.success;if(typeof J.ok==="boolean")return J.ok;if(typeof J.failed==="boolean")return!J.failed;if(typeof J.status==="string"){let X=l_0(J.status);if(p_0.has(X))return!0;if(d_0.has(X))return!1}if(Object.prototype.hasOwnProperty.call(J,"error")){let X=J.error;if(typeof X==="string"){if(X.trim().length>0)return!1}else if(X!=null)return!1}return null}function n_0($){let Z=$.slice(0,c_0);if(!Z.trim())return!0;let J=Z.toLowerCase().replace(/[^a-z0-9_]+/g," ").split(/\s+/).filter((X)=>X.length>0);for(let X=0;X<J.length;X++){let Y=J[X];if(!Y||!u_0.has(Y))continue;let Q=J[X-1]??"",G=J[X-2]??"";if(g00.has(Q))continue;if(g00.has(G)&&(Q==="any"||Q==="known"))continue;if((Y==="failed"||Y==="failure"||Y==="failures")&&Q==="not")continue;return!1}return!0}function i_0($){let Z=a_0($);if(Z!==null)return Z;return n_0($)}function o_0($){let Z=[],J=null,X=null;for(let Y of $){if(Y.role==="user"){if(J&&X)Z.push({user:J,assistant:X});J=Y.content,X=null;continue}if(Y.role==="assistant"&&J)X=Y.content}if(J&&X)Z.push({user:J,assistant:X});return Z}async function r3($){let{sessionHistory:Z,memoria:J,router:X,signal:Y}=$,Q=3,G=Z.getIncompleteSessions(3),V=0,W=0;for(let H of G){if(Y?.aborted)break;let K=!1;try{let z=Z.getSession(H.id);if(!z||z.messages.length<2){V++;continue}let U=o_0(z.messages);if(Y?.aborted){K=!0;break}try{let B=new Map;for(let D of z.messages){if(D.role!=="assistant"||!Array.isArray(D.toolCalls))continue;for(let O of D.toolCalls){if(!O?.id||!O?.name)continue;B.set(O.id,{name:O.name,arguments:O.arguments&&typeof O.arguments==="object"?O.arguments:void 0})}}let F=z.messages.filter((D)=>D.role==="tool"&&typeof D.toolCallId==="string").map((D)=>{let O=D.toolCallId?B.get(D.toolCallId):void 0,L=i_0(D.content);return{tool:O?.name??"unknown_tool",input:O?.arguments,output:D.content.slice(0,500),success:L,timestamp:new Date}});if(F.length>=2){let D=(U[0]?.user??z.messages.find((O)=>O.role==="user")?.content??`Recovered session ${H.id}`).trim().slice(0,200);J.startToolSequence(D);for(let O of F)J.recordToolUse(O);await J.endToolSequence(F.every((O)=>O.success))}}catch(B){P.warn("[CrashRecovery] Tool-sequence recovery failed:",B?.message??B)}if(U.length>0)for(let B of U){if(Y?.aborted){K=!0;break}try{await J.extractFromConversation(B.user,B.assistant,{signal:Y})}catch(F){if(Y?.aborted||b_0(F)){K=!0;break}}if(Y?.aborted){K=!0;break}}if(!K)V++}catch(z){P.warn("[CrashRecovery] Session recovery failed:",z?.message??z),W++}finally{if(!Y?.aborted&&!K)try{Z.markCompleted(H.id)}catch(z){P.warn("[CrashRecovery] Failed to mark session completed:",z?.message??z)}}if(K)break}return P.debug(`[CrashRecovery] Processed ${G.length} incomplete sessions: ${V} recovered, ${W} errors`),{recovered:V,errors:W}}var RB,OZ,m_0,c_0=320,u_0,g00,p_0,d_0;var wB=E(()=>{S0();FZ();b0();Z4();EB();sE();rE();Nb();N_();xU();Y00();vq();W00();$_();Kf();Df();jB();H_();Lf();RB=class RB extends Error{code;arionName;constructor($,Z,J){super(J);this.name="RunSessionCreateError",this.code=$,this.arionName=Z}};OZ=class OZ{memoria;tools;manager;arion;tier;effort;systemPrompt;memoriaFactory;selfBeliefs;tierSource;processRegistry;ptySessionStore;sessionApprovedDangerousTools;observer;skillFeedbackTracker;phaseTimer;modelOverride;setModelOverride($){this.modelOverride=$}adoptedToolNames;questStore;messageStore;mailbox;relayTransportBinder;runtimeOutbox;remoteDelegationSettlement;networkControl;networkManager;_networkOwnership;runtimeId;nodeId;inboxAddress;activeQuestId;observationEngine;originalSystemPrompt;previousSessionObservations;authResolver;sessionHistory;systemPromptSections;sessionId;errorHandler;recordingProxy;storage;abortSignal;history;maxTurns;room;config;storagePath;router;stateDir;networkUnsubscribers;closed=!1;ownsMemoria;factoryMemoriaPath;ownsFactory;ownsRoom;static recoveredSessionHistorySources=new WeakSet;constructor($){if(this.memoria=$.memoria,this.tools=$.tools,this.manager=$.manager,this.storage=$.storage,this.memoriaFactory=$.memoriaFactory,this.ownsMemoria=$.ownsMemoria,this.factoryMemoriaPath=$.factoryMemoriaPath,this.ownsFactory=$.ownsFactory,this.arion=$.arion,this.tier=$.tier,this.effort=$.effort??"high",this.tierSource=$.tierSource,this.systemPrompt=$.systemPrompt,this.selfBeliefs=$.selfBeliefs,this.abortSignal=$.abortSignal,this.history=$.history,this.maxTurns=$.maxTurns,this.room=$.room,this.ownsRoom=$.ownsRoom,this.config=$.config,this.storagePath=$.storagePath,this.router=$.router,this.stateDir=$.stateDir,this.networkUnsubscribers=$.networkUnsubscribers??[],this.observer=$.observer,this.skillFeedbackTracker=$.skillFeedbackTracker,this.phaseTimer=$.phaseTimer,this.sessionApprovedDangerousTools=$.sessionApprovedDangerousTools??new Set,this.modelOverride=$.modelOverride,this.adoptedToolNames=$.adoptedToolNames??new Set,this.questStore=$.questStore,this.messageStore=$.messageStore,this.mailbox=$.mailbox,this.relayTransportBinder=$.relayTransportBinder,this.runtimeOutbox=$.runtimeOutbox,this.remoteDelegationSettlement=$.remoteDelegationSettlement,this.networkControl=$.networkControl,this.networkManager=$.networkManager,this._networkOwnership=$.networkOwnership??($.networkManager?"borrowed":"none"),this.runtimeId=$.runtimeId?k8.parse($.runtimeId):void 0,this.nodeId=$.nodeId?G0.parse($.nodeId):void 0,this.inboxAddress=$.inboxAddress,this.activeQuestId=$.activeQuestId,this.observationEngine=$.observationEngine,this.originalSystemPrompt=$.originalSystemPrompt??$.systemPrompt,this.previousSessionObservations=$.previousSessionObservations,this.authResolver=$.authResolver,this.sessionHistory=$.sessionHistory,this.systemPromptSections=h_0($.systemPrompt),this.sessionId=x00(),this.processRegistry=new RW,this.ptySessionStore=new CW,$.router)this.recordingProxy=new Hf($.router,this.sessionId);this.errorHandler=new BY({sessionContext:{sessionId:this.sessionId,arionName:$.arion?.name,turnNumber:0,activeQuestId:$.activeQuestId,workingDir:process.cwd()}})}getRuntimeOutbox(){return this.runtimeOutbox}bindRelayTransport($){this.relayTransportBinder?.($)}static async maybeRecoverCrashedSessions($,Z){if(!$.sessionHistory||!$.router)return;let J=$.sessionHistory;if(OZ.recoveredSessionHistorySources.has(J))return;OZ.recoveredSessionHistorySources.add(J);try{let X=await r3({sessionHistory:$.sessionHistory,memoria:Z,router:$.router,signal:$.abortSignal});if(X.recovered>0)P.debug(`[RunSession] Recovered learning from ${X.recovered} incomplete session${X.recovered===1?"":"s"}.`)}catch(X){OZ.recoveredSessionHistorySources.delete(J),P.warn("[RunSession] Crash recovery during session create failed:",X)}}static async create($){let{config:Z,storagePath:J}=$,X=new Z_,Y=Date.now(),Q=$.skipMemoriaBootstrap===!0;X.start("session.storage_init");let G=new T9(J);await G.initialize();let V=!$.memoriaFactory,W=$.memoriaFactory?void 0:new i8(J,$.router),H=$.memoriaFactory??W.toFactory(),K=new R8(G,H);if(await K.initialize(),$.router)K.setRouter(uU($.router));X.end();let z=$.arionName?.trim()||Z.activeArion?.trim()||"ARIA",U=await G.get(z);if(!U)throw new RB("ARION_NOT_FOUND",z,`Arion not found: ${z}`);if(U.status==="resting")await K.wake(z),U.status="active";if(U.status==="retired")throw new RB("ARION_RETIRED",z,`Arion "${z}" is retired and cannot be used.`);X.start("session.memoria_init");let B,F=!1,D,O,L=[];try{if($.existingMemoria)B=$.existingMemoria,F=!1;else if($.memoriaFactory)D=R8.resolveMemoriaPath(U,z),B=await $.memoriaFactory.get(D),F=!1;else{let V0=Sf.join(J,R8.resolveMemoriaPath(U,z));B=new Q2({path:V0,router:$.router}),F=!0,await B.initialize()}if(!B)throw Error("[RunSession] Memoria setup failed to produce an instance");if(await OZ.maybeRecoverCrashedSessions($,B),U.skills?.length>0){let V0=!1;for(let D0 of U.skills){if(D0.skillId)continue;try{let _0=(await B.recallSkills({query:D0.name,limit:5})).find((L0)=>L0.name.trim().toLowerCase()===D0.name.trim().toLowerCase());if(_0?.id)D0.skillId=_0.id,V0=!0}catch(C0){let _0=C0 instanceof Error?C0.message:String(C0);P.warn(`[RunSession] Skill reconciliation failed for "${D0.name}": ${_0}`)}}if(V0)await G.save(U)}X.start("session.tool_registry");let q=U?.agentSkills?.map((V0)=>V0.trim().replace(/^\/+/,"")).filter((V0)=>V0.length>0)??void 0;O=jY({agentSkills:q});let A=q?new Set(q):void 0,N=typeof O?.getAll==="function"?O.getAll():typeof O?.list==="function"?O.list():[],_=new Set(N.map((V0)=>V0.name));try{if(!Q&&typeof O.discoverFromMemoria==="function")await O.discoverFromMemoria(B)}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] Memoria tool discovery failed for "${z}": ${D0}`)}let M=3,T=new Set;if(!Q)try{let V0=await B.recallTools({query:"",matchAll:!0,updateAccessStats:!1});for(let D0 of V0){T.add(D0.name);let C0=O.get(D0.name);if(!C0)continue;if(C0.loadingTier==="always")continue;let _0=D0;if((typeof _0.accessCount==="number"?_0.accessCount:0)>=M)O.register({...C0,loadingTier:"always"},{override:!0})}}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] Adaptive tool promotion failed for "${z}": ${D0}`)}if($.mcpServers&&$.mcpServers.length>0)try{await O.connectMCP($.mcpServers)}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] MCP connection failed for "${z}": ${D0}`)}if(A){let V0=typeof O.unregister==="function"?O.unregister.bind(O):void 0,D0=typeof O.getAll==="function"?O.getAll():typeof O.list==="function"?O.list():[],C0=Array.isArray(D0)?D0:[];if(V0)for(let _0 of C0){if(_.has(_0.name))continue;if(!A.has(_0.name))V0(_0.name)}}try{let{createSearchWrapper:V0}=await Promise.resolve().then(() => (U_(),k00)),D0=O.get("search");if(D0){let C0=V0(D0,O);O.register(C0,{override:!0})}}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] search wrapper registration failed: ${D0}`)}let k=[],R=[],a=[],o=[],u=null;if(!Q){X.start("session.memory_recall");let V0=$.initialTask?.trim(),D0=!!V0,C0=V0||"session context",_0=D0?["world","entities","episodes"]:["world","entities","episodes","beliefs"],L0=$.recallTimeoutMs??30000;try{let[P0,c0,z$]=await Promise.allSettled([bf(B.recallDirect(C0,{networks:[..._0],limit:15,threshold:0.3}),L0),U.personality?bf(B.recallDirect("my beliefs about myself, my values, my identity, what I am",{networks:["beliefs"],limit:5,threshold:0.3}),L0):Promise.resolve(null),bf(B.recallDirect("user instructions corrections preferences behavioral rules",{networks:["strategies"],limit:10,threshold:0.2}),L0)]);if(P0.status==="rejected")P.warn("[RunSession] Primary recall failed:",P0.reason?.message);let A0=P0.status==="fulfilled"?P0.value:[],u0=new Set;if(R=A0.filter((r0)=>{if(x_0(r0))return!1;let V$=g_0(r0);if(!V$)return!0;if(u0.has(V$))return!1;return u0.add(V$),!0}).map((r0)=>({id:r0.id,content:typeof r0.content==="string"?r0.content:"",summary:r0.summary,importance:r0.importance,confidence:r0.confidence,accessedAt:r0.accessedAt instanceof Date?r0.accessedAt.getTime():void 0,network:r0.network})),X.start("session.self_beliefs"),c0.status==="fulfilled"&&c0.value)k=c0.value;else if(c0.status==="rejected")P.warn("[RunSession] Self-beliefs recall failed:",c0.reason?.message);if(o=k,z$.status==="fulfilled"&&z$.value){let r0=z$.value;r0.sort((V$,_$)=>{let r8=kf(V$.metadata);return kf(_$.metadata)-r8}),a=r0.map((V$)=>({id:V$.id,text:V$.summary||(typeof V$.content==="string"?V$.content:""),provenScore:kf(V$.metadata)}))}else if(z$.status==="rejected")P.warn("[RunSession] Strategies recall failed:",z$.reason?.message)}catch(P0){P.warn("[RunSession] Bootstrap memory recall failed \u2014 starting without memories:",P0?.message)}try{let P0=await B.getConfig("user_profile");if(P0){let c0=JSON.parse(P0);u={name:c0.name,location:c0.location}}}catch(P0){let c0=P0 instanceof Error?P0.message:String(P0);P.warn(`[RunSession] User profile load failed for "${z}": ${c0}`)}}X.start("session.prompt_build");let w=[];if(!Q)try{let V0=await B.getConfig("custom_prompt_sections");if(V0){let D0=JSON.parse(V0);if(Array.isArray(D0))w=D0}}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] Custom prompt sections load failed for "${z}": ${D0}`)}let m=MB(U);try{let{buildToolManifest:V0}=await Promise.resolve().then(() => y00),D0=new Set(O.getAll().filter((_0)=>_0.loadingTier==="always").map((_0)=>_0.name)),C0=V0(O,D0);if(C0)m+=C0}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] Tool manifest generation failed: ${D0}`)}let I=$.requestedModel??Z.requestedModel,S=U.preferredModel,j="balanced",b="default",v,c=async(V0,D0)=>{let C0=J6(V0);if(P.debug(`[RunSession] ${D0} =`,V0,"resolved to:",C0),!C0)return!1;let _0=await f_0(C0,$.authResolver),L0=JZ(C0,_0);if(L0.provider!==C0.provider)P.debug("[RunSession] remapped preferredModel to runnable family variant",{requested:`${C0.provider}/${C0.shortName}`,selected:`${L0.provider}/${L0.shortName}`,availableProviders:_0?.availableProviders??[]});j=L0.tier,b=D0;let P0=L0.provider==="bedrock"||L0.provider==="bedrock-converse",c0,z$,A0;if(!P0&&$.authResolver)try{if(L0.provider==="google"&&$.authResolver.resolveAll){let V$=await $.authResolver.resolveAll(L0.provider),_$=V$.find((c$)=>c$.credentialType==="api_key"),r8=V$[0],p$=_$||r8;if(p$?.apiKey){if(c0=p$.apiKey,A0=p$.credentialType==="oauth"||p$.credentialType==="token",typeof p$.meta?.baseUrl==="string")z$=p$.meta.baseUrl}}else{let V$="resolveReport"in $.authResolver&&typeof $.authResolver.resolveReport==="function"?(await $.authResolver.resolveReport(L0.provider)).result:await $.authResolver.resolve(L0.provider);if(V$?.apiKey){if(c0=V$.apiKey,A0=V$.credentialType==="oauth"||V$.credentialType==="token",typeof V$.meta?.baseUrl==="string")z$=V$.meta.baseUrl}}if(c0)P.debug("[RunSession] resolved credential for",L0.provider,"via AuthResolver",{isBearer:A0})}catch(r0){P.warn("[RunSession] AuthResolver.resolve failed for",L0.provider,":",r0)}let U$=L0.provider==="github-copilot"?{"Editor-Version":"vscode/1.99.0","Editor-Plugin-Version":"copilot/1.0.0","Copilot-Integration-Id":"vscode-chat"}:void 0;return v={provider:L0.provider,model:L0.id,...c0?{apiKey:c0}:{},...z$?{baseUrl:z$}:{},...A0?{isBearer:!0}:{},...U$?{headers:U$}:{},...P0?{awsRegion:process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION,awsProfile:process.env.AWS_PROFILE}:{}},P.debug("[RunSession] set modelOverride:",{...v,...v.apiKey?{apiKey:"***"}:{}},"tier:",j),!0};if(I)await c(I,"requestedModel");if(!v&&S)await c(S,"preferredModel");if(!v&&Z.preferredTier)j=Z.preferredTier,b="config";X.end();let C=Date.now()-Y,f=X.totalMs(),g=Math.max(0,C-f);X.pushSynthetic("session.overhead",g);let l=$.router?uU($.router):void 0,$0=new Gf({memoria:B,onSkillLearned:l?async(V0,D0)=>{try{let{confirmSkillAcquisition:C0}=await Promise.resolve().then(() => (Cf(),v00)),_0=D0.map((P0)=>({tool:P0.name,input:P0.input,output:typeof P0.result?.data==="string"?P0.result.data:void 0,success:P0.result?.success??!0,timestamp:new Date})),L0=await C0(l,{name:V0.name,description:V0.description,level:"beginner"},_0,U.skills??[],{signal:$.abortSignal});if(L0.confirmed&&K)await K.evolveSkills(z,{addSkills:[{name:V0.name,level:L0.adjustedLevel??"beginner",skillId:V0.skillId}]})}catch{}}:void 0}),{SkillFeedbackTracker:Y0}=await Promise.resolve().then(() => (wf(),h00)),x=new Y0(B);$0.setSessionId($.activeQuestId?.trim()||x00());let r=Sf.join(J,Sf.dirname(R8.resolveMemoriaPath(U,z))),J0=B.storage?.createQuestStore()??void 0,X0=J0?K_(J0):void 0,n=B.storage?.createMessageStore()??void 0,{Mailbox:K0}=await Promise.resolve().then(() => (V_(),E00)),z0=new K0,O0=U?.name??"ARIA",R0=$.runtimeIngressAuthority?.localInboxAddress,I0=$.nodeId??(R0?.kind==="node"?R0.nodeId:void 0);if(U&&n)z0.register(U.id,O0,R0?{messageStore:n,inboxAddress:R0}:void 0);let Z0=$.networkManager;if(!Z0)P.debug("[RunSession] No network manager injected \u2014 tunnel messaging and peer networking are disabled for this run");else try{let V0=Z0.getConfig();if(V0?.signingPrivateKey&&U&&n){let D0=R0??(I0?{kind:"node",nodeId:I0}:void 0);z0.register(U.id,O0,{...D0?{messageStore:n,inboxAddress:D0}:{},signingKey:V0.signingPrivateKey})}if(I0&&V0?.signingPrivateKey)z0.setRemoteIdentity({nodeId:I0,signingKey:V0.signingPrivateKey})}catch(V0){P.warn(`[RunSession] Signing key registration from injected NM failed: ${V0 instanceof Error?V0.message:String(V0)}`)}if(Z0){if(n){let V0=I0,D0=$.runtimeIngressAuthority,C0={replayGuard:new x1,rateLimit:100,rateWindowMs:60000,...D0?.verificationConfig,expectedRecipientNodeId:V0},_0=D0?.localInboxAddress??(V0?{kind:"node",nodeId:V0}:void 0);L.push(Z0.addDeliveryAckListener((P0)=>{z0.handleDeliveryAck(P0)}));let L0=(P0)=>{let c0=P0;if(c0&&c0.id&&c0.sender&&c0.content){if(!V0)return P.debug("[RunSession] Rejected tunnel AriaMessage: missing local recipient node id"),!1;let z$=Z0.getAllPeerSigningKeysByPrincipal?.()??new Map;if(!V2({id:`tunnel-${String(c0.id)}`,source:"arion",content:JSON.stringify({ariaMessage:c0})},n,J0??{createQuest(){return null}},P,z$,X0,D0?.revocationStore,D0?.collectiveMemory,{verificationConfig:{...C0,expectedRecipientNodeId:V0},localInboxAddress:_0??{kind:"node",nodeId:V0},commitIngressReceipt:D0?.commitIngressReceipt,commitVerifiedPeerActivation:D0?.activateVerifiedPeer?(u0)=>{if(!u0.resolvedNodeId)return;D0.activateVerifiedPeer?.(u0.resolvedNodeId)}:void 0,acknowledgeReceipt:L00({acknowledgeRemoteReceipt:(u0)=>z0.acknowledgeRemoteReceipt(u0)})}))return!1;return!0}return!1};L.push(Z0.addMessageListener(L0))}}if(Z0&&"getConfig"in Z0){let V0=Z0.getConfig();if(V0?.signingPublicKey&&U?.name)P.debug(`[RunSession] Signing public key available for ${U.name}: ${String(V0.signingPublicKey).slice(0,12)}...`)}let H0=m,B0;if(B.llmClient&&B.storage?.createObservationStore())try{let V0=await B.getMostRecentSessionId({arionId:U.id});if(V0){let D0=await B.getSessionObservations(V0);if(D0)B0=D0}}catch(V0){P.warn("[RunSession] Previous session observation restore failed:",V0)}let F0;try{if(B.llmClient){let{ObservationEngine:V0,DEFAULT_OBSERVATION_CONFIG:D0,createObservationTokenCounter:C0}=await Promise.resolve().then(() => (fE(),et)),_0=B.storage?.createObservationStore();if(!_0)P.debug("[RunSession] Observation store unavailable; observation engine disabled");else{let L0=structuredClone(D0);L0.observation.modelSettings={...L0.observation.modelSettings,inputTokenHeadroom:30000},F0=new V0({llmClient:B.llmClient,store:_0,config:L0,errorProvider:v?.provider,arionId:U.id,tokenCounter:C0({modelId:v?.model??I??S}),initialObservations:B0,prefetchedKnowledge:Q?void 0:{memories:R,selfBeliefs:o,strategies:a,userProfile:u,customPromptSections:w.map((P0)=>({title:P0.title,content:P0.content}))}})}}}catch(V0){P.warn("[RunSession] ObservationEngine construction failed:",V0)}return new OZ({memoria:B,tools:O,manager:K,storage:G,memoriaFactory:H,ownsMemoria:F,factoryMemoriaPath:D,ownsFactory:V,arion:U,tier:j,effort:Z.effortLevel,tierSource:b,systemPrompt:m,selfBeliefs:k,abortSignal:$.abortSignal,history:$.history,maxTurns:$.maxTurns,room:$.room,ownsRoom:!$.room,config:Z,storagePath:J,router:$.router,stateDir:r,observer:$0,skillFeedbackTracker:x,phaseTimer:X,sessionApprovedDangerousTools:new Set,modelOverride:v,adoptedToolNames:T,questStore:J0,messageStore:n,mailbox:y_0(z0),relayTransportBinder:(V0)=>z0.setRelayTransport(V0),runtimeOutbox:CB(z0),remoteDelegationSettlement:X0,networkControl:$.networkControl,networkManager:Z0,networkOwnership:$.networkManager?"borrowed":"none",runtimeId:$.runtimeId,nodeId:I0,inboxAddress:R0,activeQuestId:$.activeQuestId,observationEngine:F0,originalSystemPrompt:H0,previousSessionObservations:B0,authResolver:$.authResolver,networkUnsubscribers:L,sessionHistory:$.sessionHistory})}catch(q){if(X.end(),O)await O.disconnectMCP().catch((A)=>{P.warn("[RunSession] MCP disconnect failed during setup rollback:",A?.message)});for(let A of L.splice(0))try{A()}catch(N){P.warn("[RunSession] Network listener unsubscribe failed during setup rollback:",N?.message)}if(F&&B)await B.close().catch((A)=>{P.warn("[RunSession] Memoria close failed:",A?.message)});else if(D){if(typeof H.evict==="function")await H.evict(D).catch((A)=>{P.warn("[RunSession] Memoria factory evict failed:",A?.message)});else if(B)await B.close().catch((A)=>{P.warn("[RunSession] Memoria close failed:",A?.message)})}if(V)await H.closeAll().catch((A)=>{P.warn("[RunSession] Factory closeAll failed during setup rollback:",A?.message)});throw q}}toRunOptions($){let Z=this.room&&this.arion&&this.router?ff({room:this.room,currentArion:this.arion,config:this.config,storagePath:this.storagePath,memoriaFactory:this.memoriaFactory,router:this.router,abortSignal:this.abortSignal,authResolver:this.authResolver,networkControl:this.networkControl??BX(this.networkManager),runtimeId:this.runtimeId}):void 0,J=this.tools.getAll(),X=new Set,Y=new Set;for(let H of J)if(H.loadingTier==="always")X.add(H.name);else if(H.loadingTier==="deferred")Y.add(H.name);let Q=Y.size>0?{alwaysOn:X,deferred:Y,adoptedToolNames:this.adoptedToolNames.size>0?this.adoptedToolNames:void 0}:this.adoptedToolNames.size>0?{alwaysOn:X,deferred:Y,adoptedToolNames:this.adoptedToolNames}:void 0,G=I_0(this.manager),V=(this.modelOverride?J6(typeof this.modelOverride==="string"?this.modelOverride:this.modelOverride.model)?.maxContextTokens:void 0)??LL(this.tier??"balanced")?.maxContextTokens??b6.maxContextTokens,W={...b6.contextGuard,compactionThreshold:Math.floor(V*0.8)};return{...b6,maxContextTokens:V,contextGuard:W,tools:this.tools,arion:this.arion?{id:this.arion.id,name:this.arion.name,emoji:this.arion.emoji}:void 0,tier:this.tier,effort:this.effort,modelOverride:this.modelOverride,systemPrompt:this.systemPrompt,memoria:this.memoria,manager:G,abortSignal:this.abortSignal,history:this.history,maxTurns:this.maxTurns,handoffs:Z,processRegistry:this.processRegistry,ptySessionStore:this.ptySessionStore,questStore:this.questStore,messageStore:this.messageStore,mailbox:this.mailbox,networkControl:this.networkControl??BX(this.networkManager),sessionHistory:this.sessionHistory,currentSessionId:this.sessionId,runtimeId:this.runtimeId,nodeId:this.nodeId,inboxAddress:this.inboxAddress,remoteDelegationSettlement:this.remoteDelegationSettlement,activeQuestId:this.activeQuestId,errorHandler:this.errorHandler,sessionApprovedDangerousTools:this.sessionApprovedDangerousTools,observer:this.observer,skillFeedbackTracker:this.skillFeedbackTracker,phaseTimer:this.phaseTimer,toolLoadingConfig:Q,stateDir:this.stateDir,observationEngine:this.observationEngine,observationSessionId:this.observationEngine?this.sessionId:void 0,originalSystemPrompt:this.originalSystemPrompt,context:Object.keys(this.systemPromptSections).length>0?{systemPromptSections:this.systemPromptSections}:void 0,...$}}async refreshSystemPrompt(){try{let $=await this.memoria.getConfig("custom_prompt_sections");if(!$)return;let Z=JSON.parse($);if(!Array.isArray(Z)||Z.length===0)return;let J=3,X=800,Y=Z.slice(0,J);for(let Q of Y){if(!Q||typeof Q!=="object")continue;let G=typeof Q.title==="string"?Q.title.trim():"",V=typeof Q.content==="string"?Q.content.trim():"";if(!G||!V)continue;if(this.systemPrompt.includes(V.slice(0,80)))continue;let W=V.length>X?V.slice(0,X)+"...":V;this.systemPrompt+=`
|
|
4046
|
+
`);if(X<0||Y<0||Q<0)return!1;if(!(X<Y&&Y<Q))return!1;let G=J.slice(Q+8).trim();return/^\d+\.\s+\S/m.test(G)}function g_0($){if(typeof $.contentHash==="string"&&$.contentHash.trim().length>0)return`hash:${$.contentHash.trim()}`;if(typeof $.id==="string"&&$.id.trim().length>0)return`id:${$.id.trim()}`;if(typeof $.content==="string"&&$.content.trim().length>0)return`content:${$.content.trim()}`;return null}function l_0($){return $.toLowerCase().replace(/[^a-z0-9_]+/g,"")}function a_0($){let Z=k6($,m_0);if(!Z.ok)return null;let J=Z.data;if(typeof J.success==="boolean")return J.success;if(typeof J.ok==="boolean")return J.ok;if(typeof J.failed==="boolean")return!J.failed;if(typeof J.status==="string"){let X=l_0(J.status);if(p_0.has(X))return!0;if(d_0.has(X))return!1}if(Object.prototype.hasOwnProperty.call(J,"error")){let X=J.error;if(typeof X==="string"){if(X.trim().length>0)return!1}else if(X!=null)return!1}return null}function n_0($){let Z=$.slice(0,c_0);if(!Z.trim())return!0;let J=Z.toLowerCase().replace(/[^a-z0-9_]+/g," ").split(/\s+/).filter((X)=>X.length>0);for(let X=0;X<J.length;X++){let Y=J[X];if(!Y||!u_0.has(Y))continue;let Q=J[X-1]??"",G=J[X-2]??"";if(g00.has(Q))continue;if(g00.has(G)&&(Q==="any"||Q==="known"))continue;if((Y==="failed"||Y==="failure"||Y==="failures")&&Q==="not")continue;return!1}return!0}function i_0($){let Z=a_0($);if(Z!==null)return Z;return n_0($)}function o_0($){let Z=[],J=null,X=null;for(let Y of $){if(Y.role==="user"){if(J&&X)Z.push({user:J,assistant:X});J=Y.content,X=null;continue}if(Y.role==="assistant"&&J)X=Y.content}if(J&&X)Z.push({user:J,assistant:X});return Z}async function r3($){let{sessionHistory:Z,memoria:J,router:X,signal:Y}=$,Q=3,G=Z.getIncompleteSessions(3),V=0,W=0;for(let H of G){if(Y?.aborted)break;let K=!1;try{let z=Z.getSession(H.id);if(!z||z.messages.length<2){V++;continue}let U=o_0(z.messages);if(Y?.aborted){K=!0;break}try{let B=new Map;for(let D of z.messages){if(D.role!=="assistant"||!Array.isArray(D.toolCalls))continue;for(let O of D.toolCalls){if(!O?.id||!O?.name)continue;B.set(O.id,{name:O.name,arguments:O.arguments&&typeof O.arguments==="object"?O.arguments:void 0})}}let F=z.messages.filter((D)=>D.role==="tool"&&typeof D.toolCallId==="string").map((D)=>{let O=D.toolCallId?B.get(D.toolCallId):void 0,L=i_0(D.content);return{tool:O?.name??"unknown_tool",input:O?.arguments,output:D.content.slice(0,500),success:L,timestamp:new Date}});if(F.length>=2){let D=(U[0]?.user??z.messages.find((O)=>O.role==="user")?.content??`Recovered session ${H.id}`).trim().slice(0,200);J.startToolSequence(D);for(let O of F)J.recordToolUse(O);await J.endToolSequence(F.every((O)=>O.success))}}catch(B){P.warn("[CrashRecovery] Tool-sequence recovery failed:",B?.message??B)}if(U.length>0)for(let B of U){if(Y?.aborted){K=!0;break}try{await J.extractFromConversation(B.user,B.assistant,{signal:Y})}catch(F){if(Y?.aborted||b_0(F)){K=!0;break}}if(Y?.aborted){K=!0;break}}if(!K)V++}catch(z){P.warn("[CrashRecovery] Session recovery failed:",z?.message??z),W++}finally{if(!Y?.aborted&&!K)try{Z.markCompleted(H.id)}catch(z){P.warn("[CrashRecovery] Failed to mark session completed:",z?.message??z)}}if(K)break}return P.debug(`[CrashRecovery] Processed ${G.length} incomplete sessions: ${V} recovered, ${W} errors`),{recovered:V,errors:W}}var RB,OZ,m_0,c_0=320,u_0,g00,p_0,d_0;var wB=E(()=>{S0();FZ();b0();Z4();EB();sE();rE();Nb();N_();xU();Y00();vq();W00();$_();Kf();Df();jB();H_();Lf();RB=class RB extends Error{code;arionName;constructor($,Z,J){super(J);this.name="RunSessionCreateError",this.code=$,this.arionName=Z}};OZ=class OZ{memoria;tools;manager;arion;tier;effort;systemPrompt;memoriaFactory;selfBeliefs;tierSource;processRegistry;ptySessionStore;sessionApprovedDangerousTools;observer;skillFeedbackTracker;phaseTimer;modelOverride;setModelOverride($){this.modelOverride=$}adoptedToolNames;questStore;messageStore;mailbox;relayTransportBinder;runtimeOutbox;remoteDelegationSettlement;networkControl;networkManager;_networkOwnership;runtimeId;nodeId;inboxAddress;activeQuestId;observationEngine;originalSystemPrompt;previousSessionObservations;authResolver;sessionHistory;systemPromptSections;sessionId;errorHandler;recordingProxy;storage;abortSignal;history;maxTurns;room;config;storagePath;router;stateDir;networkUnsubscribers;closed=!1;ownsMemoria;factoryMemoriaPath;ownsFactory;ownsRoom;static recoveredSessionHistorySources=new WeakSet;constructor($){if(this.memoria=$.memoria,this.tools=$.tools,this.manager=$.manager,this.storage=$.storage,this.memoriaFactory=$.memoriaFactory,this.ownsMemoria=$.ownsMemoria,this.factoryMemoriaPath=$.factoryMemoriaPath,this.ownsFactory=$.ownsFactory,this.arion=$.arion,this.tier=$.tier,this.effort=$.effort??"high",this.tierSource=$.tierSource,this.systemPrompt=$.systemPrompt,this.selfBeliefs=$.selfBeliefs,this.abortSignal=$.abortSignal,this.history=$.history,this.maxTurns=$.maxTurns,this.room=$.room,this.ownsRoom=$.ownsRoom,this.config=$.config,this.storagePath=$.storagePath,this.router=$.router,this.stateDir=$.stateDir,this.networkUnsubscribers=$.networkUnsubscribers??[],this.observer=$.observer,this.skillFeedbackTracker=$.skillFeedbackTracker,this.phaseTimer=$.phaseTimer,this.sessionApprovedDangerousTools=$.sessionApprovedDangerousTools??new Set,this.modelOverride=$.modelOverride,this.adoptedToolNames=$.adoptedToolNames??new Set,this.questStore=$.questStore,this.messageStore=$.messageStore,this.mailbox=$.mailbox,this.relayTransportBinder=$.relayTransportBinder,this.runtimeOutbox=$.runtimeOutbox,this.remoteDelegationSettlement=$.remoteDelegationSettlement,this.networkControl=$.networkControl,this.networkManager=$.networkManager,this._networkOwnership=$.networkOwnership??($.networkManager?"borrowed":"none"),this.runtimeId=$.runtimeId?k8.parse($.runtimeId):void 0,this.nodeId=$.nodeId?G0.parse($.nodeId):void 0,this.inboxAddress=$.inboxAddress,this.activeQuestId=$.activeQuestId,this.observationEngine=$.observationEngine,this.originalSystemPrompt=$.originalSystemPrompt??$.systemPrompt,this.previousSessionObservations=$.previousSessionObservations,this.authResolver=$.authResolver,this.sessionHistory=$.sessionHistory,this.systemPromptSections=h_0($.systemPrompt),this.sessionId=x00(),this.processRegistry=new RW,this.ptySessionStore=new CW,$.router)this.recordingProxy=new Hf($.router,this.sessionId);this.errorHandler=new BY({sessionContext:{sessionId:this.sessionId,arionName:$.arion?.name,turnNumber:0,activeQuestId:$.activeQuestId,workingDir:process.cwd()}})}getRuntimeOutbox(){return this.runtimeOutbox}bindRelayTransport($){this.relayTransportBinder?.($)}static async maybeRecoverCrashedSessions($,Z){if(!$.sessionHistory||!$.router)return;let J=$.sessionHistory;if(OZ.recoveredSessionHistorySources.has(J))return;OZ.recoveredSessionHistorySources.add(J);try{let X=await r3({sessionHistory:$.sessionHistory,memoria:Z,router:$.router,signal:$.abortSignal});if(X.recovered>0)P.debug(`[RunSession] Recovered learning from ${X.recovered} incomplete session${X.recovered===1?"":"s"}.`)}catch(X){OZ.recoveredSessionHistorySources.delete(J),P.warn("[RunSession] Crash recovery during session create failed:",X)}}static async create($){let{config:Z,storagePath:J}=$,X=new Z_,Y=Date.now(),Q=$.skipMemoriaBootstrap===!0;X.start("session.storage_init");let G=new T9(J);await G.initialize();let V=!$.memoriaFactory,W=$.memoriaFactory?void 0:new i8(J,$.router),H=$.memoriaFactory??W.toFactory(),K=new R8(G,H);if(await K.initialize(),$.router)K.setRouter(uU($.router));X.end();let z=$.arionName?.trim()||Z.activeArion?.trim()||"ARIA",U=await G.get(z);if(!U)throw new RB("ARION_NOT_FOUND",z,`Arion not found: ${z}`);if(U.status==="resting")await K.wake(z),U.status="active";if(U.status==="retired")throw new RB("ARION_RETIRED",z,`Arion "${z}" is retired and cannot be used.`);X.start("session.memoria_init");let B,F=!1,D,O,L=[];try{if($.existingMemoria)B=$.existingMemoria,F=!1;else if($.memoriaFactory)D=R8.resolveMemoriaPath(U,z),B=await $.memoriaFactory.get(D),F=!1;else{let V0=Sf.join(J,R8.resolveMemoriaPath(U,z));B=new Q2({path:V0,router:$.router}),F=!0,await B.initialize()}if(!B)throw Error("[RunSession] Memoria setup failed to produce an instance");if(await OZ.maybeRecoverCrashedSessions($,B),U.skills?.length>0){let V0=!1;for(let D0 of U.skills){if(D0.skillId)continue;try{let _0=(await B.recallSkills({query:D0.name,limit:5})).find((L0)=>L0.name.trim().toLowerCase()===D0.name.trim().toLowerCase());if(_0?.id)D0.skillId=_0.id,V0=!0}catch(C0){let _0=C0 instanceof Error?C0.message:String(C0);P.warn(`[RunSession] Skill reconciliation failed for "${D0.name}": ${_0}`)}}if(V0)await G.save(U)}X.start("session.tool_registry");let q=U?.agentSkills?.map((V0)=>V0.trim().replace(/^\/+/,"")).filter((V0)=>V0.length>0)??void 0;O=jY({agentSkills:q});let A=q?new Set(q):void 0,N=typeof O?.getAll==="function"?O.getAll():typeof O?.list==="function"?O.list():[],_=new Set(N.map((V0)=>V0.name));try{if(!Q&&typeof O.discoverFromMemoria==="function")await O.discoverFromMemoria(B)}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] Memoria tool discovery failed for "${z}": ${D0}`)}let M=3,T=new Set;if(!Q)try{let V0=await B.recallTools({query:"",matchAll:!0,updateAccessStats:!1});for(let D0 of V0){T.add(D0.name);let C0=O.get(D0.name);if(!C0)continue;if(C0.loadingTier==="always")continue;let _0=D0;if((typeof _0.accessCount==="number"?_0.accessCount:0)>=M)O.register({...C0,loadingTier:"always"},{override:!0})}}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] Adaptive tool promotion failed for "${z}": ${D0}`)}if($.mcpServers&&$.mcpServers.length>0)try{await O.connectMCP($.mcpServers)}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] MCP connection failed for "${z}": ${D0}`)}if(A){let V0=typeof O.unregister==="function"?O.unregister.bind(O):void 0,D0=typeof O.getAll==="function"?O.getAll():typeof O.list==="function"?O.list():[],C0=Array.isArray(D0)?D0:[];if(V0)for(let _0 of C0){if(_.has(_0.name))continue;if(!A.has(_0.name))V0(_0.name)}}try{let{createSearchWrapper:V0}=await Promise.resolve().then(() => (U_(),k00)),D0=O.get("search");if(D0){let C0=V0(D0,O);O.register(C0,{override:!0})}}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] search wrapper registration failed: ${D0}`)}let k=[],R=[],a=[],o=[],u=null;if(!Q){X.start("session.memory_recall");let V0=$.initialTask?.trim(),D0=!!V0,C0=V0||"session context",_0=D0?["world","entities","episodes"]:["world","entities","episodes","beliefs"],L0=$.recallTimeoutMs??30000;try{let[P0,c0,z$]=await Promise.allSettled([bf(B.recallDirect(C0,{networks:[..._0],limit:15,threshold:0.3}),L0),U.personality?bf(B.recallDirect("my beliefs about myself, my values, my identity, what I am",{networks:["beliefs"],limit:5,threshold:0.3}),L0):Promise.resolve(null),bf(B.recallDirect("user instructions corrections preferences behavioral rules",{networks:["strategies"],limit:10,threshold:0.2}),L0)]);if(P0.status==="rejected")P.warn("[RunSession] Primary recall failed:",P0.reason?.message);let A0=P0.status==="fulfilled"?P0.value:[],u0=new Set;if(R=A0.filter((s0)=>{if(x_0(s0))return!1;let V$=g_0(s0);if(!V$)return!0;if(u0.has(V$))return!1;return u0.add(V$),!0}).map((s0)=>({id:s0.id,content:typeof s0.content==="string"?s0.content:"",summary:s0.summary,importance:s0.importance,confidence:s0.confidence,accessedAt:s0.accessedAt instanceof Date?s0.accessedAt.getTime():void 0,network:s0.network})),X.start("session.self_beliefs"),c0.status==="fulfilled"&&c0.value)k=c0.value;else if(c0.status==="rejected")P.warn("[RunSession] Self-beliefs recall failed:",c0.reason?.message);if(o=k,z$.status==="fulfilled"&&z$.value){let s0=z$.value;s0.sort((V$,_$)=>{let r8=kf(V$.metadata);return kf(_$.metadata)-r8}),a=s0.map((V$)=>({id:V$.id,text:V$.summary||(typeof V$.content==="string"?V$.content:""),provenScore:kf(V$.metadata)}))}else if(z$.status==="rejected")P.warn("[RunSession] Strategies recall failed:",z$.reason?.message)}catch(P0){P.warn("[RunSession] Bootstrap memory recall failed \u2014 starting without memories:",P0?.message)}try{let P0=await B.getConfig("user_profile");if(P0){let c0=JSON.parse(P0);u={name:c0.name,location:c0.location}}}catch(P0){let c0=P0 instanceof Error?P0.message:String(P0);P.warn(`[RunSession] User profile load failed for "${z}": ${c0}`)}}X.start("session.prompt_build");let w=[];if(!Q)try{let V0=await B.getConfig("custom_prompt_sections");if(V0){let D0=JSON.parse(V0);if(Array.isArray(D0))w=D0}}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] Custom prompt sections load failed for "${z}": ${D0}`)}let m=MB(U);try{let{buildToolManifest:V0}=await Promise.resolve().then(() => y00),D0=new Set(O.getAll().filter((_0)=>_0.loadingTier==="always").map((_0)=>_0.name)),C0=V0(O,D0);if(C0)m+=C0}catch(V0){let D0=V0 instanceof Error?V0.message:String(V0);P.warn(`[RunSession] Tool manifest generation failed: ${D0}`)}let I=$.requestedModel??Z.requestedModel,S=U.preferredModel,j="balanced",b="default",v,c=async(V0,D0)=>{let C0=J6(V0);if(P.debug(`[RunSession] ${D0} =`,V0,"resolved to:",C0),!C0)return!1;let _0=await f_0(C0,$.authResolver),L0=JZ(C0,_0);if(L0.provider!==C0.provider)P.debug("[RunSession] remapped preferredModel to runnable family variant",{requested:`${C0.provider}/${C0.shortName}`,selected:`${L0.provider}/${L0.shortName}`,availableProviders:_0?.availableProviders??[]});j=L0.tier,b=D0;let P0=L0.provider==="bedrock"||L0.provider==="bedrock-converse",c0,z$,A0;if(!P0&&$.authResolver)try{if(L0.provider==="google"&&$.authResolver.resolveAll){let V$=await $.authResolver.resolveAll(L0.provider),_$=V$.find((c$)=>c$.credentialType==="api_key"),r8=V$[0],p$=_$||r8;if(p$?.apiKey){if(c0=p$.apiKey,A0=p$.credentialType==="oauth"||p$.credentialType==="token",typeof p$.meta?.baseUrl==="string")z$=p$.meta.baseUrl}}else{let V$="resolveReport"in $.authResolver&&typeof $.authResolver.resolveReport==="function"?(await $.authResolver.resolveReport(L0.provider)).result:await $.authResolver.resolve(L0.provider);if(V$?.apiKey){if(c0=V$.apiKey,A0=V$.credentialType==="oauth"||V$.credentialType==="token",typeof V$.meta?.baseUrl==="string")z$=V$.meta.baseUrl}}if(c0)P.debug("[RunSession] resolved credential for",L0.provider,"via AuthResolver",{isBearer:A0})}catch(s0){P.warn("[RunSession] AuthResolver.resolve failed for",L0.provider,":",s0)}let U$=L0.provider==="github-copilot"?{"Editor-Version":"vscode/1.99.0","Editor-Plugin-Version":"copilot/1.0.0","Copilot-Integration-Id":"vscode-chat"}:void 0;return v={provider:L0.provider,model:L0.id,...c0?{apiKey:c0}:{},...z$?{baseUrl:z$}:{},...A0?{isBearer:!0}:{},...U$?{headers:U$}:{},...P0?{awsRegion:process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION,awsProfile:process.env.AWS_PROFILE}:{}},P.debug("[RunSession] set modelOverride:",{...v,...v.apiKey?{apiKey:"***"}:{}},"tier:",j),!0};if(I)await c(I,"requestedModel");if(!v&&S)await c(S,"preferredModel");if(!v&&Z.preferredTier)j=Z.preferredTier,b="config";X.end();let C=Date.now()-Y,f=X.totalMs(),g=Math.max(0,C-f);X.pushSynthetic("session.overhead",g);let l=$.router?uU($.router):void 0,$0=new Gf({memoria:B,onSkillLearned:l?async(V0,D0)=>{try{let{confirmSkillAcquisition:C0}=await Promise.resolve().then(() => (Cf(),v00)),_0=D0.map((P0)=>({tool:P0.name,input:P0.input,output:typeof P0.result?.data==="string"?P0.result.data:void 0,success:P0.result?.success??!0,timestamp:new Date})),L0=await C0(l,{name:V0.name,description:V0.description,level:"beginner"},_0,U.skills??[],{signal:$.abortSignal});if(L0.confirmed&&K)await K.evolveSkills(z,{addSkills:[{name:V0.name,level:L0.adjustedLevel??"beginner",skillId:V0.skillId}]})}catch{}}:void 0}),{SkillFeedbackTracker:Y0}=await Promise.resolve().then(() => (wf(),h00)),x=new Y0(B);$0.setSessionId($.activeQuestId?.trim()||x00());let r=Sf.join(J,Sf.dirname(R8.resolveMemoriaPath(U,z))),J0=B.storage?.createQuestStore()??void 0,X0=J0?K_(J0):void 0,n=B.storage?.createMessageStore()??void 0,{Mailbox:K0}=await Promise.resolve().then(() => (V_(),E00)),z0=new K0,O0=U?.name??"ARIA",R0=$.runtimeIngressAuthority?.localInboxAddress,I0=$.nodeId??(R0?.kind==="node"?R0.nodeId:void 0);if(U&&n)z0.register(U.id,O0,R0?{messageStore:n,inboxAddress:R0}:void 0);let Z0=$.networkManager;if(!Z0)P.debug("[RunSession] No network manager injected \u2014 tunnel messaging and peer networking are disabled for this run");else try{let V0=Z0.getConfig();if(V0?.signingPrivateKey&&U&&n){let D0=R0??(I0?{kind:"node",nodeId:I0}:void 0);z0.register(U.id,O0,{...D0?{messageStore:n,inboxAddress:D0}:{},signingKey:V0.signingPrivateKey})}if(I0&&V0?.signingPrivateKey)z0.setRemoteIdentity({nodeId:I0,signingKey:V0.signingPrivateKey})}catch(V0){P.warn(`[RunSession] Signing key registration from injected NM failed: ${V0 instanceof Error?V0.message:String(V0)}`)}if(Z0){if(n){let V0=I0,D0=$.runtimeIngressAuthority,C0={replayGuard:new x1,rateLimit:100,rateWindowMs:60000,...D0?.verificationConfig,expectedRecipientNodeId:V0},_0=D0?.localInboxAddress??(V0?{kind:"node",nodeId:V0}:void 0);L.push(Z0.addDeliveryAckListener((P0)=>{z0.handleDeliveryAck(P0)}));let L0=(P0)=>{let c0=P0;if(c0&&c0.id&&c0.sender&&c0.content){if(!V0)return P.debug("[RunSession] Rejected tunnel AriaMessage: missing local recipient node id"),!1;let z$=Z0.getAllPeerSigningKeysByPrincipal?.()??new Map;if(!V2({id:`tunnel-${String(c0.id)}`,source:"arion",content:JSON.stringify({ariaMessage:c0})},n,J0??{createQuest(){return null}},P,z$,X0,D0?.revocationStore,D0?.collectiveMemory,{verificationConfig:{...C0,expectedRecipientNodeId:V0},localInboxAddress:_0??{kind:"node",nodeId:V0},commitIngressReceipt:D0?.commitIngressReceipt,commitVerifiedPeerActivation:D0?.activateVerifiedPeer?(u0)=>{if(!u0.resolvedNodeId)return;D0.activateVerifiedPeer?.(u0.resolvedNodeId)}:void 0,acknowledgeReceipt:L00({acknowledgeRemoteReceipt:(u0)=>z0.acknowledgeRemoteReceipt(u0)})}))return!1;return!0}return!1};L.push(Z0.addMessageListener(L0))}}if(Z0&&"getConfig"in Z0){let V0=Z0.getConfig();if(V0?.signingPublicKey&&U?.name)P.debug(`[RunSession] Signing public key available for ${U.name}: ${String(V0.signingPublicKey).slice(0,12)}...`)}let H0=m,B0;if(B.llmClient&&B.storage?.createObservationStore())try{let V0=await B.getMostRecentSessionId({arionId:U.id});if(V0){let D0=await B.getSessionObservations(V0);if(D0)B0=D0}}catch(V0){P.warn("[RunSession] Previous session observation restore failed:",V0)}let F0;try{if(B.llmClient){let{ObservationEngine:V0,DEFAULT_OBSERVATION_CONFIG:D0,createObservationTokenCounter:C0}=await Promise.resolve().then(() => (fE(),et)),_0=B.storage?.createObservationStore();if(!_0)P.debug("[RunSession] Observation store unavailable; observation engine disabled");else{let L0=structuredClone(D0);L0.observation.modelSettings={...L0.observation.modelSettings,inputTokenHeadroom:30000},F0=new V0({llmClient:B.llmClient,store:_0,config:L0,errorProvider:v?.provider,arionId:U.id,tokenCounter:C0({modelId:v?.model??I??S}),initialObservations:B0,prefetchedKnowledge:Q?void 0:{memories:R,selfBeliefs:o,strategies:a,userProfile:u,customPromptSections:w.map((P0)=>({title:P0.title,content:P0.content}))}})}}}catch(V0){P.warn("[RunSession] ObservationEngine construction failed:",V0)}return new OZ({memoria:B,tools:O,manager:K,storage:G,memoriaFactory:H,ownsMemoria:F,factoryMemoriaPath:D,ownsFactory:V,arion:U,tier:j,effort:Z.effortLevel,tierSource:b,systemPrompt:m,selfBeliefs:k,abortSignal:$.abortSignal,history:$.history,maxTurns:$.maxTurns,room:$.room,ownsRoom:!$.room,config:Z,storagePath:J,router:$.router,stateDir:r,observer:$0,skillFeedbackTracker:x,phaseTimer:X,sessionApprovedDangerousTools:new Set,modelOverride:v,adoptedToolNames:T,questStore:J0,messageStore:n,mailbox:y_0(z0),relayTransportBinder:(V0)=>z0.setRelayTransport(V0),runtimeOutbox:CB(z0),remoteDelegationSettlement:X0,networkControl:$.networkControl,networkManager:Z0,networkOwnership:$.networkManager?"borrowed":"none",runtimeId:$.runtimeId,nodeId:I0,inboxAddress:R0,activeQuestId:$.activeQuestId,observationEngine:F0,originalSystemPrompt:H0,previousSessionObservations:B0,authResolver:$.authResolver,networkUnsubscribers:L,sessionHistory:$.sessionHistory})}catch(q){if(X.end(),O)await O.disconnectMCP().catch((A)=>{P.warn("[RunSession] MCP disconnect failed during setup rollback:",A?.message)});for(let A of L.splice(0))try{A()}catch(N){P.warn("[RunSession] Network listener unsubscribe failed during setup rollback:",N?.message)}if(F&&B)await B.close().catch((A)=>{P.warn("[RunSession] Memoria close failed:",A?.message)});else if(D){if(typeof H.evict==="function")await H.evict(D).catch((A)=>{P.warn("[RunSession] Memoria factory evict failed:",A?.message)});else if(B)await B.close().catch((A)=>{P.warn("[RunSession] Memoria close failed:",A?.message)})}if(V)await H.closeAll().catch((A)=>{P.warn("[RunSession] Factory closeAll failed during setup rollback:",A?.message)});throw q}}toRunOptions($){let Z=this.room&&this.arion&&this.router?ff({room:this.room,currentArion:this.arion,config:this.config,storagePath:this.storagePath,memoriaFactory:this.memoriaFactory,router:this.router,abortSignal:this.abortSignal,authResolver:this.authResolver,networkControl:this.networkControl??BX(this.networkManager),runtimeId:this.runtimeId}):void 0,J=this.tools.getAll(),X=new Set,Y=new Set;for(let H of J)if(H.loadingTier==="always")X.add(H.name);else if(H.loadingTier==="deferred")Y.add(H.name);let Q=Y.size>0?{alwaysOn:X,deferred:Y,adoptedToolNames:this.adoptedToolNames.size>0?this.adoptedToolNames:void 0}:this.adoptedToolNames.size>0?{alwaysOn:X,deferred:Y,adoptedToolNames:this.adoptedToolNames}:void 0,G=I_0(this.manager),V=(this.modelOverride?J6(typeof this.modelOverride==="string"?this.modelOverride:this.modelOverride.model)?.maxContextTokens:void 0)??LL(this.tier??"balanced")?.maxContextTokens??b6.maxContextTokens,W={...b6.contextGuard,compactionThreshold:Math.floor(V*0.8)};return{...b6,maxContextTokens:V,contextGuard:W,tools:this.tools,arion:this.arion?{id:this.arion.id,name:this.arion.name,emoji:this.arion.emoji}:void 0,tier:this.tier,effort:this.effort,modelOverride:this.modelOverride,systemPrompt:this.systemPrompt,memoria:this.memoria,manager:G,abortSignal:this.abortSignal,history:this.history,maxTurns:this.maxTurns,handoffs:Z,processRegistry:this.processRegistry,ptySessionStore:this.ptySessionStore,questStore:this.questStore,messageStore:this.messageStore,mailbox:this.mailbox,networkControl:this.networkControl??BX(this.networkManager),sessionHistory:this.sessionHistory,currentSessionId:this.sessionId,runtimeId:this.runtimeId,nodeId:this.nodeId,inboxAddress:this.inboxAddress,remoteDelegationSettlement:this.remoteDelegationSettlement,activeQuestId:this.activeQuestId,errorHandler:this.errorHandler,sessionApprovedDangerousTools:this.sessionApprovedDangerousTools,observer:this.observer,skillFeedbackTracker:this.skillFeedbackTracker,phaseTimer:this.phaseTimer,toolLoadingConfig:Q,stateDir:this.stateDir,observationEngine:this.observationEngine,observationSessionId:this.observationEngine?this.sessionId:void 0,originalSystemPrompt:this.originalSystemPrompt,context:Object.keys(this.systemPromptSections).length>0?{systemPromptSections:this.systemPromptSections}:void 0,...$}}async refreshSystemPrompt(){try{let $=await this.memoria.getConfig("custom_prompt_sections");if(!$)return;let Z=JSON.parse($);if(!Array.isArray(Z)||Z.length===0)return;let J=3,X=800,Y=Z.slice(0,J);for(let Q of Y){if(!Q||typeof Q!=="object")continue;let G=typeof Q.title==="string"?Q.title.trim():"",V=typeof Q.content==="string"?Q.content.trim():"";if(!G||!V)continue;if(this.systemPrompt.includes(V.slice(0,80)))continue;let W=V.length>X?V.slice(0,X)+"...":V;this.systemPrompt+=`
|
|
4046
4047
|
|
|
4047
4048
|
## ${G}
|
|
4048
4049
|
${W}`}}catch{}}async extractMemories($,Z){await this.endObservation([{role:"user",content:$},{role:"assistant",content:Z}],{task:$,response:Z})}async endObservation($,Z){let J=performance.now(),X=Z?.sessionId??this.sessionId,Y=Z?.signal,Q=Z?.task??"",G=Z?.response??"",V=async()=>{if(!Q.trim()&&!G.trim())return;await this.memoria.extractFromConversation(Q,G,{signal:Y})};if(!this.observationEngine){try{q$("run-session:legacyExtraction"),await V()}catch(W){P.debug("[RunSession] legacy extraction failed:",W?.message??W)}finally{$9()}return}try{q$("run-session:finalObservation"),await this.observationEngine.finalObservation(X,$,Y)}catch(W){P.debug("[RunSession] finalObservation failed:",W?.message??W)}finally{$9()}try{let W=this.observationEngine.getRecord(X);if(W?.activeObservations?.trim())if(this.memoria.extractFromObservations)q$("run-session:extractFromObservations"),await this.memoria.extractFromObservations(W.activeObservations,{sessionId:X});else q$("run-session:legacyExtraction"),await this.memoria.extractFromConversation("Session observation summary",W.activeObservations,{signal:Y});else q$("run-session:legacyExtraction"),await V()}catch(W){P.debug("[RunSession] observation extraction failed:",W?.message??W);try{q$("run-session:legacyExtraction"),await V()}catch(H){P.debug("[RunSession] legacy extraction fallback failed:",H?.message??H)}}finally{$9();let W=performance.now()-J;if(W>100)P.warn(`[RunSession] endObservation took ${W.toFixed(0)}ms`)}}async persistArionProfile(){if(!this.arion)return;await this.storage.save(this.arion)}async close(){if(this.closed)return;this.closed=!0;let $=performance.now(),Z=async(Q,G)=>{let V=performance.now();q$(Q);try{await G()}finally{$9();let W=performance.now()-V;if(W>100)P.warn(`[RunSession] ${Q} took ${W.toFixed(0)}ms`)}};if(this.recordingProxy)try{await Z("run-session:close:recordingProxy",()=>this.recordingProxy.close())}catch(Q){P.warn("[RunSession] RecordingProxy close failed:",Q?.message)}try{await Z("run-session:close:disconnectMCP",()=>this.tools.disconnectMCP())}catch(Q){P.warn("[RunSession] MCP disconnect failed:",Q?.message)}if(this.room&&this.ownsRoom)try{await Z("run-session:close:room.clear",()=>this.room.clear())}catch(Q){P.warn("[RunSession] Room clear failed:",Q?.message)}let J=this.ptySessionStore.closeAll;if(typeof J==="function")try{await Z("run-session:close:pty.closeAll",()=>J.call(this.ptySessionStore))}catch(Q){P.warn("[RunSession] PTY session store closeAll failed:",Q?.message)}try{await Z("run-session:close:processRegistry.killAll",()=>this.processRegistry.killAll())}catch(Q){P.warn("[RunSession] Process registry killAll failed:",Q?.message)}let X=this.networkUnsubscribers??[];for(let Q of X.splice(0))try{Q()}catch(G){P.warn("[RunSession] Network listener unsubscribe failed:",G?.message)}if(this.networkManager&&this._networkOwnership==="owned")try{await Z("run-session:close:networkManager.shutdown",()=>this.networkManager.shutdown?.())}catch(Q){P.warn("[RunSession] NetworkManager shutdown failed:",Q?.message)}if(this.observationEngine)try{await Z("run-session:close:observationEngine.drain",()=>this.observationEngine.drain())}catch(Q){P.warn("[RunSession] ObservationEngine drain failed:",Q?.message)}if(this.ownsMemoria)try{await Z("run-session:close:memoria.close",()=>this.memoria.close())}catch(Q){P.warn("[RunSession] Memoria close failed:",Q?.message)}else if(this.factoryMemoriaPath)if(typeof this.memoriaFactory.evict==="function")try{await Z("run-session:close:memoriaFactory.evict",()=>this.memoriaFactory.evict(this.factoryMemoriaPath))}catch(Q){P.warn("[RunSession] Memoria factory evict failed:",Q?.message)}else try{await Z("run-session:close:memoria.close",()=>this.memoria.close())}catch(Q){P.warn("[RunSession] Memoria close failed:",Q?.message)}if(this.ownsFactory)try{await Z("run-session:close:memoriaFactory.closeAll",()=>this.memoriaFactory.closeAll())}catch(Q){P.warn("[RunSession] Factory closeAll failed:",Q?.message)}let Y=performance.now()-$;if(Y>100)P.warn(`[RunSession] close took ${Y.toFixed(0)}ms`)}async[Symbol.asyncDispose](){await this.close()}};m_0=If.record(If.string(),If.unknown()),u_0=new Set(["error","errors","failed","failure","failures","exception","exceptions","denied","deny","timeout","timedout","panic"]),g00=new Set(["no","without","zero","none"]),p_0=new Set(["ok","success","successful","succeeded","completed","complete","done","passed"]),d_0=new Set(["error","failed","failure","denied","rejected","timeout","timed_out","cancelled","canceled","abort","aborted"])});import*as y6 from"fs/promises";import{appendFileSync as s_0,mkdirSync as r_0}from"fs";import*as L_ from"path";import{homedir as t_0}from"os";class W2{_logDir;_filePath;_maxQueueSize;_retentionDays;_maxSizeMb;_flushIntervalMs;_batchSize;_queue=[];_disabled=!1;_dirEnsured=!1;_flushTimer=null;_closed=!1;_overflowWarned=!1;_exitHandler=null;_filePrimed=!1;_primeFilePromise=null;constructor($){this._logDir=$.logDir??L_.join(t_0(),".aria","logs"),this._filePath=L_.join(this._logDir,`${$.sessionId}.jsonl`),this._maxQueueSize=$.maxQueueSize??1000,this._retentionDays=$.retentionDays??Number.POSITIVE_INFINITY,this._maxSizeMb=$.maxSizeMb??Number.POSITIVE_INFINITY,this._flushIntervalMs=$.flushIntervalMs??100,this._batchSize=$.batchSize??50,this._startFlushTimer(),this._exitHandler=()=>{if(this._disabled||this._closed||this._queue.length===0)return;try{if(!this._dirEnsured)r_0(this._logDir,{recursive:!0});let Z=W2._jsonReplacer,J=this._queue.map((X)=>JSON.stringify(X,Z)+`
|
|
@@ -4291,7 +4292,7 @@ Respond with JSON only:
|
|
|
4291
4292
|
"contributionType": "alternative" | "addition" | "correction" | "synthesis" | "question" | null,
|
|
4292
4293
|
"reason": string
|
|
4293
4294
|
}`;var x80=()=>{};function l_($){if(!$.includes("@"))return[];let Z=/(?:^|[^\p{L}\p{N}_.'\u2019-])@([\p{L}\p{N}](?:[\p{L}\p{N}_.'\u2019-]*[\p{L}\p{N}])?)/gu,J=[],X=new Set;for(let Y of $.matchAll(Z)){let Q=Y[1];if(!Q)continue;let G=Q.toLocaleLowerCase();if(X.has(G))continue;X.add(G),J.push(Q)}return J}var g80=E(()=>{EB();sE();by();rE();h80();x80();cU();N_()});function a_($){switch($){case"minimal":return["moderate","dangerous"];case"balanced":return["dangerous"];case"high":case"full":return[]}}var ZJ,iZ,m80,c80;var u80=E(()=>{ZJ={autonomy:"balanced",maxSteps:20,requireConfirmation:["dangerous"]},iZ=["minimal","balanced","high","full"];m80={filesystem:{allowedPaths:[process.cwd()],deniedPaths:["/etc","/var","/usr","/bin","/sbin","/root"],readOnly:!1},network:{allowedHosts:[],deniedHosts:["localhost","127.0.0.1","0.0.0.0","::1","169.254.169.254","fd00:ec2::254","metadata.google.internal","metadata.google.internal.","metadata","kubernetes.default.svc","host.docker.internal"],maxConnections:10},resources:{maxMemoryMB:512,maxCpuPercent:50,maxDurationMs:60000}},c80={logPath:`${process.env.HOME||"/tmp"}/.aria/audit.jsonl`,includeSensitiveData:!1,maxFileSizeMB:100}});var p80=E(()=>{S0()});var d80=()=>{};var l80=E(()=>{u80();p80();d80()});import{readFile as Mj0}from"fs/promises";import{join as a80}from"path";import{homedir as Pj0}from"os";function Tj0($){let Z=[],J=new Map;for(let X of $){let Y=J.get(X.name)??[];Y.push(X),J.set(X.name,Y)}for(let[X,Y]of J.entries())if(Y.length>=jj0){let Q=Y.sort((z,U)=>new Date(z.timestamp).getTime()-new Date(U.timestamp).getTime()),G=Q[0].timestamp,V=Q[Q.length-1].timestamp,W=new Date(V).getTime()-new Date(G).getTime(),H=Math.min(...Y.map((z)=>z.severity)),K=Math.max(0,H-1);Z.push({type:"repeated_error",severity:K,description:`${X} has occurred ${Y.length} times`,errorIds:Y.map((z)=>z.id),errorCount:Y.length,timeWindowMs:W,firstSeen:G,lastSeen:V,suggestedAction:`Investigate root cause of repeated ${X}. Check if this is a systemic issue.`})}return Z}function Cj0($){if($.length<ky)return[];let Z=new Map;for(let X of $){let Y=X.state?.processInfo?.pid??"unknown",Q=Z.get(Y)??[];Q.push(X),Z.set(Y,Q)}let J=[];for(let[X,Y]of Z.entries()){if(Y.length<ky)continue;let Q=[...Y].sort((V,W)=>new Date(V.timestamp).getTime()-new Date(W.timestamp).getTime()),G=0;for(let V=0;V<Q.length;V++){let W=new Date(Q[V].timestamp).getTime();while(G<V&&W-new Date(Q[G].timestamp).getTime()>fy)G++;let H=V-G+1;if(H>=ky){let K=Q.slice(G,V+1);J.push({type:"error_storm",severity:0,description:`Error storm detected: ${H} errors in ${fy/1000}s (PID ${X})`,errorIds:K.map((z)=>z.id),errorCount:H,timeWindowMs:fy,firstSeen:K[0].timestamp,lastSeen:K[K.length-1].timestamp,suggestedAction:"Investigate cascading failure. Check for resource exhaustion, infinite loops, or provider outages."}),G=V+1}}}return J}function Rj0($){let Z=$.filter((Q)=>Q.domain==="provider"||Q.category==="provider_failure"||Q.category==="rate_limit");if(Z.length<n80)return[];let J=[],X=[...Z].sort((Q,G)=>new Date(Q.timestamp).getTime()-new Date(G.timestamp).getTime()),Y=0;for(let Q=0;Q<X.length;Q++){let G=new Date(X[Q].timestamp).getTime();while(Y<Q&&G-new Date(X[Y].timestamp).getTime()>yy)Y++;let V=Q-Y+1;if(V>=n80){let W=X.slice(Y,Q+1),H=new Set(W.map((z)=>z.state.providerState?.lastProvider).filter(Boolean)),K=H.size>0?Array.from(H).join(", "):"unknown";J.push({type:"provider_degradation",severity:1,description:`Provider degradation: ${V} failures from ${K} in ${yy/60000}min`,errorIds:W.map((z)=>z.id),errorCount:V,timeWindowMs:yy,firstSeen:W[0].timestamp,lastSeen:W[W.length-1].timestamp,suggestedAction:`Check provider status for ${K}. Consider switching to fallback provider.`}),Y=Q+1}}return J}async function i80($,Z){let J=$??a80(Pj0(),".aria"),X=a80(J,"error-events.jsonl"),Y;try{let W=(await Mj0(X,"utf-8")).trim().split(`
|
|
4294
|
-
`).filter(Boolean);Y=[];for(let H of W)try{let K=JSON.parse(H);if(Z&&new Date(K.timestamp).getTime()<new Date(Z).getTime())continue;Y.push(K)}catch{}}catch{return[]}if(Y.length===0)return[];let Q=Y.length;if(Y=Y.filter((V)=>{return V.state?.processInfo?.processSource==="production"}),Y.length<Q)P.debug(`[PatternDetector] Filtered ${Q-Y.length} non-production entries`);if(Y.length===0)return[];P.debug(`[PatternDetector] Analyzing ${Y.length} error events`);let G=[...Tj0(Y),...Cj0(Y),...Rj0(Y)];if(G.sort((V,W)=>V.severity-W.severity),G.length>0)P.debug(`[PatternDetector] Detected ${G.length} patterns`);return G}var jj0=3,ky=5,fy=60000,n80=3,yy=300000;var o80=E(()=>{S0()});var s80={};A$(s80,{sanitizeSecrets:()=>UY,isModelError:()=>wq,formatDiagnosticReport:()=>dr,extractRelatedFiles:()=>bq,detectPatterns:()=>i80,classifyError:()=>Sq,buildMinimalState:()=>Xb,buildFullState:()=>fq,buildCauseChain:()=>Iq,_resetProcessSourceCache:()=>pr,ErrorJournal:()=>yU,CentralErrorHandler:()=>BY});var vy=E(()=>{kq();Yb();vq();o80()});import*as F6 from"fs";import*as r80 from"path";function t80(){if(oB)return oB;if(typeof globalThis.Bun>"u")throw Error("[pid-lock] flock() requires Bun FFI. Ensure the daemon runs under Bun.");let $=
|
|
4295
|
+
`).filter(Boolean);Y=[];for(let H of W)try{let K=JSON.parse(H);if(Z&&new Date(K.timestamp).getTime()<new Date(Z).getTime())continue;Y.push(K)}catch{}}catch{return[]}if(Y.length===0)return[];let Q=Y.length;if(Y=Y.filter((V)=>{return V.state?.processInfo?.processSource==="production"}),Y.length<Q)P.debug(`[PatternDetector] Filtered ${Q-Y.length} non-production entries`);if(Y.length===0)return[];P.debug(`[PatternDetector] Analyzing ${Y.length} error events`);let G=[...Tj0(Y),...Cj0(Y),...Rj0(Y)];if(G.sort((V,W)=>V.severity-W.severity),G.length>0)P.debug(`[PatternDetector] Detected ${G.length} patterns`);return G}var jj0=3,ky=5,fy=60000,n80=3,yy=300000;var o80=E(()=>{S0()});var s80={};A$(s80,{sanitizeSecrets:()=>UY,isModelError:()=>wq,formatDiagnosticReport:()=>dr,extractRelatedFiles:()=>bq,detectPatterns:()=>i80,classifyError:()=>Sq,buildMinimalState:()=>Xb,buildFullState:()=>fq,buildCauseChain:()=>Iq,_resetProcessSourceCache:()=>pr,ErrorJournal:()=>yU,CentralErrorHandler:()=>BY});var vy=E(()=>{kq();Yb();vq();o80()});import*as F6 from"fs";import*as r80 from"path";function t80(){if(oB)return oB;if(typeof globalThis.Bun>"u")throw Error("[pid-lock] flock() requires Bun FFI. Ensure the daemon runs under Bun.");let $=r0("bun:ffi"),Z=process.platform==="darwin",J;if(Z)J="libc.dylib";else{J="libc.so.6";try{$.dlopen(J,{getpid:{args:[],returns:$.FFIType.i32}}).close()}catch{J="libc.so"}}if(Z){let X=$.dlopen(J,{flock:{args:[$.FFIType.i32,$.FFIType.i32],returns:$.FFIType.i32},__error:{args:[],returns:$.FFIType.ptr}});oB={flock:X.symbols.flock,getErrno:()=>{let Y=X.symbols.__error();return new Int32Array($.toArrayBuffer(Y,0,4))[0]}}}else{let X=$.dlopen(J,{flock:{args:[$.FFIType.i32,$.FFIType.i32],returns:$.FFIType.i32},__errno_location:{args:[],returns:$.FFIType.ptr}});oB={flock:X.symbols.flock,getErrno:()=>{let Y=X.symbols.__errno_location();return new Int32Array($.toArrayBuffer(Y,0,4))[0]}}}return oB}function fj0($){return $===bj0||$===kj0}function yj0($){let Z=t80();if(Z.flock($,wj0|Sj0)===0)return"acquired";let X=Z.getErrno();if(fj0(X))return"held";throw Error(`[pid-lock] flock() failed with unexpected errno ${X} (fd=${$})`)}function vj0($){try{t80().flock($,Ij0)}catch{}}async function n_($){let Z=r80.dirname($);if(Z&&Z!==".")F6.mkdirSync(Z,{recursive:!0});let J;try{J=F6.openSync($,"r+")}catch(G){if(G.code==="ENOENT")J=F6.openSync($,"w");else throw Error(`[pid-lock] failed to open lock file at ${$}: ${G.message}`)}let X;try{X=yj0(J)}catch(G){throw F6.closeSync(J),G}if(X==="held"){let G="unknown PID";try{let V=F6.readFileSync($,"utf-8").trim();if(V)G=`PID ${V}`}catch{}throw F6.closeSync(J),Error(`Daemon lock already held by ${G} at ${$}`)}F6.ftruncateSync(J),F6.writeSync(J,`${process.pid}
|
|
4295
4296
|
`);let Y=!1;return{release:()=>{if(Y)return;Y=!0;try{vj0(J)}catch{}try{F6.closeSync(J)}catch{}},fd:J}}async function hy($,Z){let J=new AbortController,X=null,Y,Q=(W)=>{Y=W==="SIGINT"?130:143,J.abort(Error(`Received ${W}`))},G=()=>Q("SIGTERM"),V=()=>Q("SIGINT");process.on("SIGTERM",G),process.on("SIGINT",V);try{if(X=await n_($),J.signal.aborted)throw J.signal.reason??Error("Received shutdown signal before daemon lock finished acquiring");return await Z(J.signal)}finally{if(X?.release(),process.removeListener("SIGTERM",G),process.removeListener("SIGINT",V),Y!==void 0){let W=Y;setImmediate(()=>process.exit(W))}}}var wj0=2,Sj0=4,Ij0=8,bj0=35,kj0=11,oB=null;var xy=()=>{};var gy=E(()=>{gB()});var e80=E(()=>{b0()});import*as $90 from"crypto";function my($){if(Array.isArray($))return $.map(my);if($&&typeof $==="object"){let Z={};for(let J of Object.keys($).sort())Z[J]=my($[J]);return Z}return $}function hj0($){let Z=JSON.stringify(my($));return $90.createHash("sha256").update(Z).digest("hex").slice(0,16)}class i_{windowSize;threshold;window=[];constructor($=20,Z=3){this.windowSize=$,this.threshold=Z}recordToolCall($,Z){let J=hj0(Z),X={name:$,argsHash:J};if(this.window.push(X),this.window.length>this.windowSize)this.window.splice(0,this.window.length-this.windowSize);let Y=`${$}:${J}`,Q=0;for(let G of this.window)if(`${G.name}:${G.argsHash}`===Y)Q++;return Q>=this.threshold}checkProgressStall($,Z){if($===null||Z===null)return!1;if(($.progress??"")!==(Z.progress??""))return!1;let J=$.filesTouched??[],X=Z.filesTouched??[];if(X.length!==J.length)return!1;let Y=[...J].sort(),Q=[...X].sort();for(let G=0;G<Y.length;G++)if(Y[G]!==Q[G])return!1;return!0}reset(){this.window=[]}}class o_{currentLevel=0;levels=["reread","replan","escalate","pause"];getCurrentAction(){return this.levels[this.currentLevel]}advance(){let $=this.getCurrentAction();if(this.currentLevel<this.levels.length-1)this.currentLevel++;return $}reset(){this.currentLevel=0}formatPrompt($,Z){let{quest:J,recentErrors:X}=Z,Y=X&&X.length>0?`
|
|
4296
4297
|
|
|
4297
4298
|
Recent errors:
|
|
@@ -4722,8 +4723,8 @@ ${$.toString("base64").match(/.{1,64}/g)?.join(`
|
|
|
4722
4723
|
|
|
4723
4724
|
CREATE INDEX IF NOT EXISTS idx_delegation_transitions_id
|
|
4724
4725
|
ON delegation_transitions(delegation_id);
|
|
4725
|
-
`)}mapRow($){if(!$)return;let Z=G0.safeParse($.remote_node_id?.trim());return{id:$.id,type:$.type,task:$.task,state:$.state,...$.arion_name?{arionName:$.arion_name}:{},...Z.success?{remoteNodeId:Z.data}:{},...$.remote_display_name_snapshot?{remoteDisplayNameSnapshot:$.remote_display_name_snapshot}:{},...$.tier?{tier:$.tier}:{},...$.result?{result:$.result}:{},...$.error?{error:$.error}:{},createdAt:$.created_at,updatedAt:$.updated_at,...$.metadata?{metadata:$.metadata}:{}}}create($){let Z=Date.now(),J=$.metadata?JSON.stringify($.metadata):null;this.db.transaction(()=>{this.stmtInsert.run($.id,$.type,$.task,"created",$.arionName??null,$.remoteNodeId??null,$.remoteDisplayNameSnapshot??null,$.tier??null,J,Z,Z),this.stmtInsertTransition.run($.id,null,"created",Z,null)})()}transition($,Z,J){let X=Date.now(),Q=this.stmtGet.get($)?.state??null;this.db.transaction(()=>{this.stmtUpdateState.run(Z,X,$),this.stmtInsertTransition.run($,Q,Z,X,J??null)})()}complete($,Z){let J=Date.now(),Y=this.stmtGet.get($)?.state??null;this.db.transaction(()=>{this.stmtUpdateResult.run("completed",Z??null,null,J,$),this.stmtInsertTransition.run($,Y,"completed",J,null)})()}fail($,Z){let J=Date.now(),Y=this.stmtGet.get($)?.state??null;this.db.transaction(()=>{this.stmtUpdateResult.run("failed",null,Z,J,$),this.stmtInsertTransition.run($,Y,"failed",J,Z)})()}get($){return this.mapRow(this.stmtGet.get($))}findRecoverable(){return this.stmtFindNonTerminal.all().map(($)=>this.mapRow($))}cleanup($=86400000){let Z=Date.now()-$;this.db.transaction(()=>{this.stmtCleanup.run(Z),this.stmtCleanupStore.run(Z)})()}record($){switch($.event){case"created":if(!this.get($.id))this.create({id:$.id,type:$.type,task:$.task,arionName:$.arionName,remoteNodeId:$.remoteNodeId,remoteDisplayNameSnapshot:$.remoteDisplayNameSnapshot,tier:$.tier});this.transition($.id,"running");break;case"completed":this.complete($.id,$.result);break;case"failed":this.fail($.id,$.error??"Unknown error");break;case"aborted":this.transition($.id,"aborted");break}}}var f90=E(()=>{W8()});var V8=E(()=>{aB();$_();aB();aB();aB();y80();l80();QM();iy();YM();oy();w90();sy();HM();Zv();Jv();Xv();FM();By();Oy();Qv();Gv();b90();Of();UM();Vv();f90();r_();H_();Q_();b0();g80();vy();H90()});import{jsx as GJ,jsxs as LM}from"react/jsx-runtime";import{useState as bT0,useRef as v90}from"react";import{Box as YF,Text as bY,useInput as kT0}from"ink";function Wv({currentLevel:$,onSelect:Z,onCancel:J,isActive:X=!0}){let Y=e(),Q=iZ.indexOf($),G=Q>=0?Q:0,[V,W]=bT0(G),H=v90(G),K=v90(!1),z=(B)=>{W((F)=>{let D=B(F);return H.current=D,D})},U=process.stdin.isTTY??!1;return kT0((B,F)=>{if(K.current)return;if(F.upArrow)z((D)=>Math.max(0,D-1));else if(F.downArrow)z((D)=>Math.min(iZ.length-1,D+1));else if(F.return)K.current=!0,Z(iZ[H.current]);else if(W$(B,F))K.current=!0,J()},{isActive:X&&U}),LM(YF,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.secondary,paddingX:1,paddingY:1,width:48,children:[GJ(YF,{marginBottom:1,children:GJ(bY,{bold:!0,children:"Autonomy Level"})}),GJ(YF,{marginBottom:1,children:LM(bY,{children:["Current: ",GJ(bY,{bold:!0,children:$})]})}),iZ.map((B,F)=>{let D=F===V,O=D?"\u25CF":"\u25CB",L=B==="high"||B==="full";return LM(YF,{gap:1,children:[GJ(bY,{color:D?Y.colors.primary:void 0,children:O}),GJ(bY,{color:D?Y.colors.primary:L?Y.colors.warning:void 0,bold:D,children:B.padEnd(10)}),GJ(bY,{color:Y.colors.textMuted,children:fT0[B]})]},B)}),GJ(YF,{marginTop:1,children:LM(bY,{color:Y.colors.textMuted,children:["\u2191\u2193"," Navigate Enter Select Esc Cancel"]})})]})}var fT0;var h90=E(()=>{E0();V8();fT0={minimal:"Confirm all tool calls",balanced:"Confirm dangerous only",high:"Auto-approve everything",full:"Auto-approve everything"}});import{jsxs as OA$,jsx as NA$}from"react/jsx-runtime";import{Box as AA$,Text as qA$}from"ink";var x90=E(()=>{E0()});import{jsx as kY,jsxs as AM}from"react/jsx-runtime";import{Box as qM,Text as fY}from"ink";function hT0($){if($<1000)return`${Math.round($)}ms`;if($<60000)return`${($/1000).toFixed(1)}s`;let Z=Math.floor($/60000),J=Math.round($%60000/1000);return`${Z}m ${J}s`}function g90($,Z,J){let X=Math.round(Z*$),Y=Math.max(yT0,Math.round(J*$)),Q=Math.max(0,$-X-Y);return"\u2591".repeat(X)+"\u2588".repeat(Y)+"\u2591".repeat(Q)}function Kv({spans:$,width:Z}){let J=e(),X=Z??vT0,Y=$.filter((K)=>K.endTime!==void 0||K.durationMs!==void 0);if(Y.length===0)return kY(qM,{children:kY(fY,{dimColor:!0,children:"(no completed spans)"})});let Q=Y.map((K)=>{let z=K.durationMs??K.endTime-K.startTime,U=K.endTime??K.startTime+z;return{...K,durationMs:z,endTime:U}}),G=Math.min(...Q.map((K)=>K.startTime)),W=Math.max(...Q.map((K)=>K.endTime))-G;if(W<=0)return kY(qM,{flexDirection:"column",children:Q.map((K)=>AM(fY,{dimColor:!0,children:[Hv[K.spanType]??K.spanType," ","\u2588"," 0ms (",K.name,")"]},K.spanId))});let H=Math.max(...Q.map((K)=>{let z=Hv[K.spanType]??K.spanType;return(K.parentSpanId!==void 0?2:0)+z.length}));return kY(qM,{flexDirection:"column",children:Q.map((K)=>{let z=K.parentSpanId!==void 0,U=z?" ":"",B=Hv[K.spanType]??K.spanType,F=(U+B).padEnd(H),D=(K.startTime-G)/W,O=K.durationMs/W,L=g90(X,D,O),q=hT0(K.durationMs),A=K.spanType==="tool_execution"&&K.name?` (${K.name})`:"";return AM(qM,{children:[AM(fY,{color:J.colors.textMuted,children:[" ",F]}),kY(fY,{children:" "}),kY(fY,{color:z?J.colors.info:J.colors.success,children:L}),kY(fY,{children:" "}),AM(fY,{dimColor:!0,children:[q,A]})]},K.spanId)})})}var yT0=1,vT0=20,Hv;var m90=E(()=>{E0();Hv={model_call:"model_call",tool_execution:"tool_exec",handoff:"handoff",approval:"approval",session_phase:"session",runner_phase:"runner"}});import{jsxs as tW}from"react/jsx-runtime";import{Box as c90,Text as EM}from"ink";function u90($){if($<1000)return`${Math.round($)}ms`;return`${($/1000).toFixed(2)}s`}function zv({report:$}){let Z=e();if(!$||$.phases.length===0)return null;return tW(c90,{flexDirection:"column",marginTop:1,children:[tW(EM,{color:Z.colors.textMuted,children:[" Pipeline timing (",u90($.totalMs),")"]}),$.phases.map((J)=>tW(c90,{children:[tW(EM,{color:Z.colors.info,children:[" ",J.phase.padEnd(24)]}),tW(EM,{color:Z.colors.text,children:[" ",u90(J.durationMs)]}),tW(EM,{color:Z.colors.textMuted,children:[" (",J.pct,"%)"]})]},`${J.phase}:${J.durationMs}`))]})}var p90=E(()=>{E0()});import{jsxs as d90,jsx as xT0}from"react/jsx-runtime";import{useRef as gT0}from"react";import{Box as mT0,Text as l90}from"ink";import cT0 from"gradient-string";function n90($){if($<60)return`${$}s`;let Z=Math.floor($/60),J=$%60;return`${Z}m ${J}s`}function uT0($){if($>=1000)return`${($/1000).toFixed(1)}k tokens`;return`${$} tokens`}function Bv({state:$,elapsedSeconds:Z,totalTokens:J,thoughtForSeconds:X,currentVerb:Y}){let Q=[...a90,...[...a90].reverse()],G=Math.floor(Date.now()/120)%Q.length,V=gT0(j1().present),W=Y||V.current,H=e(),K=G%Uv.length,z=[...Uv.slice(K),...Uv.slice(0,K)],U=cT0(z),B=`${Q[G]} ${W}\u2026`,F=U(B),D=n90(Z),O=uT0(J),L;if($==="thinking")L="(thinking)";else if(X&&X>0)L=`(${D} \xB7 \u2193 ${O} \xB7 thought for ${n90(X)})`;else L=`(${D} \xB7 \u2193 ${O} \xB7 esc to cancel)`;return d90(mT0,{flexDirection:"row",marginTop:1,children:[d90(l90,{children:[F," "]}),xT0(l90,{color:H.colors.textMuted,children:L})]})}var Uv,a90;var i90=E(()=>{E0();EV();Uv=["#5f97cd","#7baed4","#97c4db","#7baed4"],a90=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"]});import{jsxs as s90,jsx as o90}from"react/jsx-runtime";import{Box as pT0,Text as r90}from"ink";function Fv($){return $>=70?"high":$>=30?"moderate":"low"}function dT0($){let Z=e();switch($){case"low":return{highlightColor:Z.colors.success,textColor:Z.colors.primary};case"moderate":return{highlightColor:Z.colors.warning,textColor:Z.colors.warning};case"high":return{highlightColor:Z.colors.error,textColor:Z.colors.error}}}function Z5($){if($===null)return e().colors.primary;let Z=Fv($);return dT0(Z).textColor}function lT0({riskScore:$}){let Z=Fv($);return s90(r90,{color:Z5($),children:["Risk: ",Z]})}function c1({title:$,riskScore:Z}){return s90(pT0,{flexDirection:"column",children:[o90(r90,{bold:!0,color:e().colors.primary,children:$}),Z!==null&&o90(lT0,{riskScore:Z})]})}var yY=E(()=>{E0()});function J5($,Z){}import{structuredPatch as aT0}from"diff";function _M($,Z,J,X=3){let Y=aT0($,$,Z,J,"","",{context:X}),Q=0,G=0,V=Y.hunks.map((W)=>{let H=[],K=W.oldStart,z=W.newStart;for(let U of W.lines){let B=U.slice(1);if(U.startsWith("+"))H.push({type:"added",content:B,newLineNo:z++}),Q++;else if(U.startsWith("-"))H.push({type:"removed",content:B,oldLineNo:K++}),G++;else H.push({type:"unchanged",content:B,oldLineNo:K++,newLineNo:z++})}return{oldStart:W.oldStart,oldLines:W.oldLines,newStart:W.newStart,newLines:W.newLines,lines:H}});return{filePath:$,hunks:V,additions:Q,deletions:G}}var Dv=()=>{};import{jsx as MM,jsxs as nT0}from"react/jsx-runtime";import{existsSync as iT0,readFileSync as oT0}from"fs";import{useMemo as t90}from"react";import{Box as Ov,Text as sT0}from"ink";import{relative as rT0}from"path";function e90({file_path:$,new_string:Z,old_string:J,verbose:X,useBorder:Y=!0,width:Q}){let G=t90(()=>iT0($)?oT0($,"utf8"):"",[$]),V=t90(()=>{let W=G.replace(J,Z);return _M($,G,W)},[$,G,J,Z]);return MM(Ov,{flexDirection:"column",children:nT0(Ov,{borderColor:e().colors.secondary,borderStyle:Y?"round":void 0,flexDirection:"column",paddingX:1,children:[MM(Ov,{paddingBottom:1,children:MM(sT0,{bold:!0,children:X?$:rT0(process.cwd(),$)})}),MM(vX,{diff:V,dim:!1,width:Q,showHeader:!1})]})})}var $40=E(()=>{TV();E0();Dv()});import{jsx as Nv,jsxs as tT0}from"react/jsx-runtime";import{Box as eT0,Text as Lv}from"ink";function Z40({isFocused:$,isSelected:Z,smallPointer:J,children:X}){let Y=e();return tT0(eT0,{gap:1,children:[$&&Nv(Lv,{color:Y.colors.primary,children:J?ZC0:$C0}),Nv(Lv,{color:$?Y.colors.primary:void 0,bold:Z,children:X}),Z&&Nv(Lv,{color:Y.colors.success,children:JC0})]})}var $C0="\u276F",ZC0="\u25BE",JC0="\u2714";var J40=E(()=>{E0()});var PM;var X40=E(()=>{VJ();PM=class PM extends Map{first;constructor($){let Z=[],J,X,Y=0;for(let Q of $){let G={...Q,previous:X,next:void 0,index:Y};if(X)X.next=G;J||=G;let V="value"in Q?Q.value:Av(Q);Z.push([V,G]),Y++,X=G}super(Z);this.first=J}}});import{isDeepStrictEqual as XC0}from"util";import{useReducer as YC0,useCallback as qv,useMemo as QC0,useState as GC0,useEffect as Ev}from"react";var VC0=($,Z)=>{switch(Z.type){case"focus-next-option":{if(!$.focusedValue)return $;let J=$.optionMap.get($.focusedValue);if(!J)return $;let X=J.next;while(X&&!("value"in X))X=X.next;if(!X)return $;if(!(X.index>=$.visibleToIndex))return{...$,focusedValue:X.value};let Q=Math.min($.optionMap.size,$.visibleToIndex+1),G=Q-$.visibleOptionCount;return{...$,focusedValue:X.value,visibleFromIndex:G,visibleToIndex:Q}}case"focus-previous-option":{if(!$.focusedValue)return $;let J=$.optionMap.get($.focusedValue);if(!J)return $;let X=J.previous;while(X&&!("value"in X))X=X.previous;if(!X)return $;if(!(X.index<=$.visibleFromIndex))return{...$,focusedValue:X.value};let Q=Math.max(0,$.visibleFromIndex-1),G=Q+$.visibleOptionCount;return{...$,focusedValue:X.value,visibleFromIndex:Q,visibleToIndex:G}}case"select-focused-option":return{...$,previousValue:$.value,value:$.focusedValue};case"reset":return Z.state;case"set-focus":return{...$,focusedValue:Z.value}}},_v=($)=>$.flatMap((Z)=>{if("options"in Z){let J=_v(Z.options),X=J.flatMap((Q)=>("value"in Q)?Q.value:[]);return[...Z.header!==void 0?[{header:Z.header,optionValues:X}]:[],...J]}return Z}),Y40=({visibleOptionCount:$,defaultValue:Z,options:J})=>{let X=_v(J),Y=typeof $==="number"?Math.min($,X.length):X.length,Q=new PM(X),G=Q.first,V=G&&"value"in G?G.value:void 0;return{optionMap:Q,visibleOptionCount:Y,focusedValue:V,visibleFromIndex:0,visibleToIndex:Y,previousValue:Z,value:Z}},Q40=({visibleOptionCount:$=5,options:Z,defaultValue:J,onChange:X,onFocus:Y,focusValue:Q})=>{let G=_v(Z),[V,W]=YC0(VC0,{visibleOptionCount:$,defaultValue:J,options:Z},Y40),[H,K]=GC0(G);if(G!==H&&!XC0(G,H))W({type:"reset",state:Y40({visibleOptionCount:$,defaultValue:J,options:Z})}),K(G);let z=qv(()=>{W({type:"focus-next-option"})},[]),U=qv(()=>{W({type:"focus-previous-option"})},[]),B=qv(()=>{W({type:"select-focused-option"})},[]),F=QC0(()=>{return G.map((D,O)=>({...D,index:O})).slice(V.visibleFromIndex,V.visibleToIndex)},[G,V.visibleFromIndex,V.visibleToIndex]);return Ev(()=>{if(V.value&&V.previousValue!==V.value)X?.(V.value)},[V.previousValue,V.value,Z,X]),Ev(()=>{if(V.focusedValue)Y?.(V.focusedValue)},[V.focusedValue,Y]),Ev(()=>{if(Q)W({type:"set-focus",value:Q})},[Q]),{focusedValue:V.focusedValue,visibleFromIndex:V.visibleFromIndex,visibleToIndex:V.visibleToIndex,value:V.value,visibleOptions:F,focusNextOption:z,focusPreviousOption:U,selectFocusedOption:B}};var G40=E(()=>{X40()});import{useInput as WC0}from"ink";var V40=({isDisabled:$=!1,state:Z})=>{WC0((J,X)=>{if(X.downArrow)Z.focusNextOption();if(X.upArrow)Z.focusPreviousOption();if(X.return)Z.selectFocusedOption()},{isActive:!$})};var W40=()=>{};import{jsx as Mv,Fragment as HC0,jsxs as KC0}from"react/jsx-runtime";import{Box as zC0,Text as UC0}from"ink";function u1({isDisabled:$=!1,visibleOptionCount:Z=5,highlightText:J,options:X,defaultValue:Y,onChange:Q,onFocus:G,focusValue:V}){let W=Q40({visibleOptionCount:Z,options:X,defaultValue:Y,onChange:Q,onFocus:G,focusValue:V});V40({isDisabled:$,state:W});let H=e();return Mv(zC0,{flexDirection:"column",children:W.visibleOptions.map((K)=>{let z="value"in K?K.value:Av(K),U=!$&&W.focusedValue!==void 0&&("value"in K?W.focusedValue===K.value:K.optionValues.includes(W.focusedValue)),B=!!W.value&&("value"in K?W.value===K.value:K.optionValues.includes(W.value)),F="header"in K,D="label"in K?K.label:K.header,O=D;if(J&&D.includes(J)){let L=D.indexOf(J);O=KC0(HC0,{children:[D.slice(0,L),Mv(UC0,{color:H.colors.primary,bold:!0,children:J}),D.slice(L+J.length)]})}return Mv(Z40,{isFocused:U,isSelected:B,smallPointer:F,children:O},z)})})}var Av=($)=>`HEADER-${$.optionValues.join(",")}`;var VJ=E(()=>{J40();G40();W40();E0()});import{jsx as jM,jsxs as Pv}from"react/jsx-runtime";import{Box as H40,Text as K40}from"ink";import{useMemo as BC0}from"react";import{basename as FC0,extname as DC0,isAbsolute as OC0,resolve as jv}from"path";import NC0 from"chalk";function LC0($){return(OC0($)?jv($):jv(process.cwd(),$)).startsWith(jv(process.cwd()))}function AC0($){let Z=LC0($)?[{label:"Yes, and don't ask again this session",value:"yes-dont-ask-again"}]:[];return[{label:"Yes",value:"yes"},...Z,{label:`No, and provide instructions (${NC0.bold.hex(e().colors.warning)("esc")})`,value:"no"}]}function z40({toolUseConfirm:$,onDone:Z,verbose:J}){let{columns:X}=Y9(),{file_path:Y,new_string:Q,old_string:G}=$.input,V=BC0(()=>({completion_type:"str_replace_single",language_name:qC0(Y)}),[Y]);return J5($,V),Pv(H40,{flexDirection:"column",borderStyle:"round",borderColor:Z5($.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[jM(c1,{title:"Edit file",riskScore:$.riskScore}),jM(e90,{file_path:Y,new_string:Q,old_string:G,verbose:J,width:X-12}),Pv(H40,{flexDirection:"column",children:[Pv(K40,{children:["Do you want to make this edit to ",jM(K40,{bold:!0,children:FC0(Y)}),"?"]}),jM(u1,{options:AC0(Y),onChange:(W)=>{switch(W){case"yes":$.onAllow("temporary"),Z();break;case"yes-dont-ask-again":$.onAllow("permanent"),Z();break;case"no":$.onReject(),Z();break}}})]})]})}function qC0($){let Z=DC0($);return Z?Z.slice(1):"unknown"}var U40=E(()=>{E0();yY();$40();P1();VJ()});import QF from"chalk";function EC0($){let J=$.replace(/'[^']*'/g,"").replace(/"[^"]*"/g,"");if(/&&|\|\||[;|]/.test(J))return!0;if(/`/.test(J))return!0;if(/\$\(/.test(J))return!0;return!1}function B40({toolUseConfirm:$,command:Z}){let J=!EC0(Z)&&$.commandPrefix&&!$.commandPrefix.commandInjectionDetected,X=GF($),Y=J&&X!==null,Q=[];if(Y)Q=[{label:`Yes, and don't ask again for ${QF.bold(X)} commands in ${QF.bold(process.cwd())}`,value:"yes-dont-ask-again-prefix"}];else if(J)Q=[{label:`Yes, and don't ask again for ${QF.bold(Z)} commands in ${QF.bold(process.cwd())}`,value:"yes-dont-ask-again-full"}];return[{label:"Yes",value:"yes"},...Q,{label:`No, and provide instructions (${QF.bold.hex(e().colors.warning)("esc")})`,value:"no"}]}var F40=E(()=>{VF();E0()});import{jsx as WF,jsxs as Tv}from"react/jsx-runtime";import{Box as Cv,Text as Rv}from"ink";import{useMemo as _C0}from"react";function D40({toolUseConfirm:$,onDone:Z}){let J=e(),{command:X}=$.tool.inputSchema.parse($.input),Y=_C0(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return J5($,Y),Tv(Cv,{flexDirection:"column",borderStyle:"round",borderColor:J.colors.primary,marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[WF(c1,{title:"Bash command",riskScore:$.riskScore}),Tv(Cv,{flexDirection:"column",paddingX:2,paddingY:1,children:[WF(Rv,{children:$.tool.renderToolUseMessage({command:X},{verbose:!1})}),WF(Rv,{color:J.colors.textMuted,children:$.description})]}),Tv(Cv,{flexDirection:"column",children:[WF(Rv,{children:"Do you want to proceed?"}),WF(u1,{options:B40({toolUseConfirm:$,command:X}),onChange:(Q)=>{switch(Q){case"yes":$.onAllow("temporary"),Z();break;case"yes-dont-ask-again-prefix":{if(GF($)!==null)$.onAllow("permanent");else $.onAllow("temporary");Z();break}case"yes-dont-ask-again-full":$.onAllow("permanent"),Z();break;case"no":$.onReject(),Z();break}}})]})]})}var O40=E(()=>{E0();VF();yY();VJ();F40()});import{jsx as HF,jsxs as TM}from"react/jsx-runtime";import{Box as wv,Text as CM}from"ink";import{useMemo as MC0}from"react";import Sv from"chalk";function RM({toolUseConfirm:$,onDone:Z,verbose:J}){let X=e(),Y=$.tool.userFacingName($.input),Q=Y.endsWith(" (MCP)")?Y.slice(0,-6):Y,G=MC0(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return J5($,G),TM(wv,{flexDirection:"column",borderStyle:"round",borderColor:Z5($.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[HF(c1,{title:"Tool use",riskScore:$.riskScore}),TM(wv,{flexDirection:"column",paddingX:2,paddingY:1,children:[TM(CM,{children:[Q,"(",$.tool.renderToolUseMessage($.input,{verbose:J}),")",Y.endsWith(" (MCP)")?HF(CM,{color:X.colors.textMuted,children:" (MCP)"}):""]}),HF(CM,{color:X.colors.textMuted,children:$.description})]}),TM(wv,{flexDirection:"column",children:[HF(CM,{children:"Do you want to proceed?"}),HF(u1,{options:[{label:"Yes",value:"yes"},{label:`Yes, and don't ask again for ${Sv.bold(Q)} commands in ${Sv.bold(process.cwd())}`,value:"yes-dont-ask-again"},{label:`No, and provide instructions (${Sv.bold.hex(e().colors.warning)("esc")})`,value:"no"}],onChange:(V)=>{switch(V){case"yes":$.onAllow("temporary"),Z();break;case"yes-dont-ask-again":$.onAllow("permanent"),Z();break;case"no":$.onReject(),Z();break}}})]})]})}var Iv=E(()=>{E0();yY();VJ()});import{jsx as wM,jsxs as PC0}from"react/jsx-runtime";import{existsSync as jC0,readFileSync as TC0}from"fs";import{useMemo as bv}from"react";import{Box as N40,Text as CC0}from"ink";import{extname as RC0,relative as wC0}from"path";function L40({file_path:$,content:Z,verbose:J,width:X}){let Y=bv(()=>jC0($),[$]),Q=bv(()=>{if(!Y)return"";return TC0($,"utf8")},[$,Y]),G=bv(()=>{if(!Y)return null;return _M($,Q,Z)},[Y,$,Q,Z]);return PC0(N40,{borderColor:e().colors.secondary,borderStyle:"round",flexDirection:"column",paddingX:1,children:[wM(N40,{paddingBottom:1,children:wM(CC0,{bold:!0,children:J?$:wC0(process.cwd(),$)})}),G?wM(vX,{diff:G,dim:!1,width:X,showHeader:!1}):wM(C1,{code:Z||"(No content)",language:RC0($).slice(1)})]})}var A40=E(()=>{TV();E0();RV();Dv()});import{jsx as KF,jsxs as kv}from"react/jsx-runtime";import{Box as fv,Text as q40}from"ink";import{useMemo as E40}from"react";import{basename as SC0,extname as IC0}from"path";import{existsSync as bC0}from"fs";import kC0 from"chalk";function _40({toolUseConfirm:$,onDone:Z,verbose:J}){let{file_path:X,content:Y}=$.input,Q=E40(()=>bC0(X),[X]),G=E40(()=>({completion_type:"write_file_single",language_name:fC0(X)}),[X]),{columns:V}=Y9();return J5($,G),kv(fv,{flexDirection:"column",borderStyle:"round",borderColor:Z5($.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[KF(c1,{title:`${Q?"Edit":"Create"} file`,riskScore:$.riskScore}),KF(fv,{flexDirection:"column",children:KF(L40,{file_path:X,content:Y,verbose:J,width:V-12})}),kv(fv,{flexDirection:"column",children:[kv(q40,{children:["Do you want to ",Q?"make this edit to":"create"," ",KF(q40,{bold:!0,children:SC0(X)}),"?"]}),KF(u1,{options:[{label:"Yes",value:"yes"},{label:"Yes, and don't ask again this session",value:"yes-dont-ask-again"},{label:`No, and provide instructions (${kC0.bold.hex(e().colors.warning)("esc")})`,value:"no"}],onChange:(W)=>{switch(W){case"yes":$.onAllow("temporary"),Z();break;case"yes-dont-ask-again":$.onAllow("permanent"),Z();break;case"no":$.onReject(),Z();break}}})]})]})}function fC0($){let Z=IC0($);return Z?Z.slice(1):"unknown"}var M40=E(()=>{E0();yY();A40();P1();VJ()});import{jsx as eW,jsxs as yv}from"react/jsx-runtime";import{Box as vv,Text as P40}from"ink";import{useMemo as yC0}from"react";import vC0 from"chalk";import{isAbsolute as hC0,resolve as j40}from"path";function SM($){return hC0($)?j40($):j40(process.cwd(),$)}function xC0($){return SM($).startsWith(SM(process.cwd()))}function mC0(){gC0=!0}function lC0($){let Z=$.tool.name;if(cC0.has(Z))return"file_path";if(uC0.has(Z))return"path";if(pC0.has(Z))return"notebook_path";return null}function aC0($){return dC0.has($.tool.name)}function nC0($){let Z=lC0($),J=$.input;if(Z&&Z in J)if(typeof J[Z]==="string")return SM(J[Z]);else return SM(process.cwd());return null}function T40({toolUseConfirm:$,onDone:Z,verbose:J}){let X=nC0($);if(!X)return eW(RM,{toolUseConfirm:$,onDone:Z,verbose:J});return eW(oC0,{toolUseConfirm:$,path:X,onDone:Z,verbose:J})}function iC0($,Z){if($.tool.isReadOnly())return[];return xC0(Z)?[{label:"Yes, and don't ask again for file edits this session",value:"yes-dont-ask-again"}]:[]}function oC0({toolUseConfirm:$,path:Z,onDone:J,verbose:X}){let Y=$.tool.userFacingName($.input),G=`${$.tool.isReadOnly()?"Read":"Edit"} ${aC0($)?"files":"file"}`,V=yC0(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return J5($,V),yv(vv,{flexDirection:"column",borderStyle:"round",borderColor:Z5($.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[eW(c1,{title:G,riskScore:$.riskScore}),eW(vv,{flexDirection:"column",paddingX:2,paddingY:1,children:yv(P40,{children:[Y,"(",$.tool.renderToolUseMessage($.input,{verbose:X}),")"]})}),yv(vv,{flexDirection:"column",children:[eW(P40,{children:"Do you want to proceed?"}),eW(u1,{options:[{label:"Yes",value:"yes"},...iC0($,Z),{label:`No, and provide instructions (${vC0.bold.hex(e().colors.warning)("esc")})`,value:"no"}],onChange:(W)=>{switch(W){case"yes":$.onAllow("temporary"),J();break;case"yes-dont-ask-again":mC0(),$.onAllow("permanent"),J();break;case"no":$.onReject(),J();break}}})]})]})}var gC0=!1,cC0,uC0,pC0,dC0;var C40=E(()=>{E0();yY();Iv();VJ();cC0=new Set(["Edit","file_edit","str_replace_editor","Write","file_write","create_file","Read","file_read","read_file"]),uC0=new Set(["Glob","glob","Grep","grep","LS","ls"]),pC0=new Set(["NotebookEdit","notebook_edit","NotebookRead","notebook_read"]),dC0=new Set(["Glob","glob","Grep","grep","LS","ls"])});import{jsx as sC0}from"react/jsx-runtime";import{useInput as rC0}from"ink";import*as R40 from"react";function JR0($){if(tC0.has($))return z40;if(eC0.has($))return _40;if($R0.has($))return D40;if(ZR0.has($))return T40;return RM}function GF($){return $.commandPrefix&&!$.commandPrefix.commandInjectionDetected&&$.commandPrefix.commandPrefix||null}function hv({toolUseConfirm:$,onDone:Z,verbose:J}){let X=R40.useRef(!1);rC0((Q,G)=>{if(X.current)return;if(G.ctrl&&Q==="c"||W$(Q,G))X.current=!0,$.onReject(),Z()});let Y=JR0($.tool.name);return sC0(Y,{toolUseConfirm:$,onDone:Z,verbose:J})}var tC0,eC0,$R0,ZR0;var VF=E(()=>{U40();O40();Iv();M40();C40();tC0=new Set(["Edit","file_edit","str_replace_editor"]),eC0=new Set(["Write","file_write","create_file"]),$R0=new Set(["Bash","bash","execute_command"]),ZR0=new Set(["Glob","glob","Grep","grep","LS","ls","Read","file_read","read_file","NotebookRead","notebook_read","NotebookEdit","notebook_edit"])});import{jsx as IM,jsxs as $H}from"react/jsx-runtime";import{useState as w40,useEffect as S40}from"react";import{Box as bM,Text as ZH,useInput as XR0}from"ink";function xv($){return/\s/.test($.trimStart())}function YR0($){return $.trimStart().split(/\s+/,1)[0]??""}function gv({commands:$,initialFilter:Z="",onSelect:J,onHandOffInput:X,onCancel:Y}){let[Q,G]=w40(0),[V,W]=w40(Z),H=YR0(V).toLowerCase(),K=$.filter((B)=>B.name.toLowerCase().includes(H));S40(()=>{G((B)=>Math.min(B,Math.max(0,K.length-1)))},[K.length]),S40(()=>{if(!X||!xv(V))return;X(`/${V}`)},[V,X]);let z=K.length>0?Math.min(Q,K.length-1):0,U=process.stdin.isTTY??!1;return XR0((B,F)=>{if(W$(B,F)){Y();return}if(F.return&&xv(V)&&X){X(`/${V}`);return}if(F.return&&K.length>0){J(K[z]);return}if(F.upArrow){G((D)=>Math.max(0,D-1));return}if(F.downArrow){G((D)=>Math.min(K.length-1,D+1));return}if(F.backspace||F.delete){W((D)=>D.slice(0,-1));return}if(B&&!F.ctrl&&!F.meta){let D=V+B;if(X&&xv(D)){X(`/${D}`);return}W(D)}},{isActive:U}),$H(bM,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,children:[$H(bM,{marginBottom:1,children:[IM(ZH,{bold:!0,children:"Commands"}),V&&$H(ZH,{dimColor:!0,children:[" /",V]})]}),K.map((B,F)=>$H(bM,{children:[$H(ZH,{inverse:F===z,children:["/",B.name]}),$H(ZH,{dimColor:!0,children:[" ",B.description]})]},B.name)),K.length===0&&IM(ZH,{dimColor:!0,children:"No matching commands"}),IM(bM,{marginTop:1,children:IM(ZH,{dimColor:!0,children:"\u2191\u2193 navigate \u23CE select esc cancel"})})]})}var I40=()=>{};import{jsx as zF,jsxs as JH}from"react/jsx-runtime";import{useState as b40,useEffect as QR0}from"react";import{Box as kM,Text as vY,useInput as GR0}from"ink";function mv({arions:$,initialFilter:Z="",statusFilter:J="all",onSelect:X,onCancel:Y}){let[Q,G]=b40(0),[V,W]=b40(Z),H=$.filter((U)=>{if(J==="active"&&U.isResting)return!1;if(J==="resting"&&!U.isResting)return!1;return U.name.toLowerCase().includes(V.toLowerCase())});QR0(()=>{G((U)=>Math.min(U,Math.max(0,H.length-1)))},[H.length]);let K=H.length>0?Math.min(Q,H.length-1):0,z=process.stdin.isTTY??!1;return GR0((U,B)=>{if(W$(U,B)){Y();return}if(B.return&&H.length>0){X(H[K]);return}if(B.upArrow){G((F)=>Math.max(0,F-1));return}if(B.downArrow){G((F)=>Math.min(H.length-1,F+1));return}if(B.backspace||B.delete){W((F)=>F.slice(0,-1));return}if(U&&!B.ctrl&&!B.meta)W((F)=>F+U)},{isActive:z}),JH(kM,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,children:[JH(kM,{marginBottom:1,children:[zF(vY,{bold:!0,children:J==="active"?"Active Arions":J==="resting"?"Resting Arions":"Arions"}),V&&JH(vY,{dimColor:!0,children:[" @",V]})]}),H.length===0&&zF(vY,{dimColor:!0,children:$.length===0?"No arions available. Create one with /hatch":J==="active"?"No active arions":J==="resting"?"No resting arions":"No matching arions"}),H.map((U,B)=>{let F=ez(U.color),D=U.isActive?" (active)":U.isResting?" (resting)":"";return JH(kM,{children:[JH(vY,{inverse:B===K,children:[U.emoji," ",zF(vY,{color:F,children:U.name})]}),JH(vY,{dimColor:!0,children:[" ",U.description,D]})]},U.name)}),zF(kM,{marginTop:1,children:zF(vY,{dimColor:!0,children:"\u2191\u2193 navigate \u23CE select esc cancel"})})]})}var k40=E(()=>{UV()});import{jsx as LZ,jsxs as p1}from"react/jsx-runtime";import{useState as cv,useEffect as VR0,useMemo as WR0}from"react";import{Box as WJ,Text as y4,useInput as HR0}from"ink";function zR0($){return KR0[$]||$}function y40($){let Z=f40.indexOf($);return Z>=0?Z:f40.length}function UR0($,Z,J){let X=new Map;for(let G of $){let V=G.provider||"other",W=X.get(V)??[];W.push(G),X.set(V,W)}let Y={powerful:0,balanced:1,fast:2,ensemble:3},Q=[...X.entries()].sort(([G],[V])=>y40(G)-y40(V));for(let[G,V]of Q){Z.push({type:"header",label:zR0(G),provider:G});let W=(U)=>{if(!U)return"balanced";let B=U.toLowerCase();if(B.includes("deep"))return"powerful";if(B.includes("quick"))return"fast";return"balanced"},H=[/^claude-opus-|^opus-|^bedrock-opus-/,/^claude-sonnet-|^sonnet-|^bedrock-sonnet-/,/^claude-haiku-|^haiku-|^bedrock-haiku-/,/^claude-/,/^gpt-/,/^o[0-9]/,/^gemini-/],K=(U)=>{let B=U.toLowerCase();for(let F=0;F<H.length;F++)if(H[F].test(B))return F;return H.length},z=[...V].sort((U,B)=>{let F=K(U.name),D=K(B.name);if(F!==D)return F-D;return B.name.localeCompare(U.name)});for(let U of z)J.push(Z.length),Z.push({type:"model",model:U})}}function uv({models:$,initialFilter:Z="",effortLevel:J,onSelect:X,onCancel:Y}){let[Q,G]=cv(Z),[V,W]=cv(J??"high"),K=$.filter((A)=>A.name.toLowerCase().includes(Q.toLowerCase())),{items:z,selectableIndices:U}=WR0(()=>{if(!K.some((M)=>M.provider))return{items:K.map((M)=>({type:"model",model:M})),selectableIndices:K.map((M,T)=>T)};let N=[],_=[];return UR0(K,N,_),{items:N,selectableIndices:_}},[K]),B=U.findIndex((A)=>{let N=z[A];return N?.type==="model"&&N.model.isCurrent}),[F,D]=cv(B>=0?B:0);VR0(()=>{D((A)=>Math.min(A,Math.max(0,U.length-1)))},[U.length]);let O=U.length>0?Math.min(F,U.length-1):0,L=process.stdin.isTTY??!1;HR0((A,N)=>{if(W$(A,N)){Y();return}if(N.return&&U.length>0){let _=U[O],M=z[_];if(M.type==="model")X(M.model,V);return}if(N.leftArrow){W((_)=>{let M=UF.indexOf(_);return UF[Math.max(0,M-1)]});return}if(N.rightArrow){W((_)=>{let M=UF.indexOf(_);return UF[Math.min(UF.length-1,M+1)]});return}if(N.upArrow){D((_)=>Math.max(0,_-1));return}if(N.downArrow){D((_)=>Math.min(U.length-1,_+1));return}if(N.backspace||N.delete){G((_)=>_.slice(0,-1));return}if(A&&!N.ctrl&&!N.meta)G((_)=>_+A)},{isActive:L});let q=U.length>0?` [${O+1}/${U.length}]`:"";return p1(WJ,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,children:[p1(WJ,{marginBottom:1,children:[LZ(y4,{bold:!0,children:"Model"}),LZ(y4,{dimColor:!0,children:q}),LZ(y4,{children:" "}),Q?LZ(y4,{color:"cyan",children:Q}):LZ(y4,{dimColor:!0,children:"Type to search..."})]}),K.length===0&&LZ(y4,{dimColor:!0,children:"No matching models"}),(()=>{let A=z.reduce((N,_)=>{if(_.type!=="model")return N;return Math.max(N,_.model.name.length)},0);return z.map((N,_)=>{if(N.type==="header"){let a=Ca(N.provider);return p1(WJ,{marginTop:_>0?1:0,children:[p1(y4,{color:a.color,children:[a.icon," "]}),LZ(y4,{bold:!0,color:a.color,children:N.label})]},`header-${N.label}-${_}`)}if(N.type==="hint")return LZ(WJ,{marginTop:1,children:LZ(y4,{dimColor:!0,italic:!0,children:N.label})},"hint");let M=U[O]===_,T=N.model.description,k=N.model.name.padEnd(A),R=HA(N.model.name);return p1(WJ,{children:[p1(y4,{inverse:M,color:M?void 0:R,dimColor:M?!1:!R,children:[N.model.isCurrent?"\u25CF":"\u25CB"," ",k]}),T&&p1(y4,{dimColor:!0,children:[" ",N.model.description]})]},N.model.value??`${N.model.provider}-${N.model.name}`)})})(),p1(WJ,{marginTop:1,flexDirection:"column",children:[p1(WJ,{children:[p1(y4,{color:v40[V],children:[BR0[V]," "]}),p1(y4,{color:v40[V],bold:!0,children:[FR0[V]," effort"]}),V==="high"&&LZ(y4,{dimColor:!0,children:" (default)"}),LZ(y4,{dimColor:!0,children:" \u2190 \u2192 to adjust"})]}),LZ(WJ,{marginTop:0,children:LZ(y4,{dimColor:!0,children:"\u2191\u2193 navigate \u2190 \u2192 effort \u23CE select esc cancel"})})]})]})}var KR0,f40,UF,BR0,FR0,v40;var h40=E(()=>{UV();KR0={anthropic:"Anthropic","openai-codex":"OpenAI Codex",google:"Google",bedrock:"AWS Bedrock","bedrock-converse":"AWS Bedrock (Converse)","github-copilot":"GitHub Copilot",openai:"OpenAI",local:"Local"},f40=["anthropic","openai-codex","google","bedrock","bedrock-converse","github-copilot","openai","local"];UF=["low","medium","high","max"],BR0={low:"\u258C",medium:"\u258C\u258C",high:"\u258C\u258C\u258C",max:"\u258C\u258C\u258C\u258C"},FR0={low:"Low",medium:"Medium",high:"High",max:"Max"},v40={low:"blue",medium:"cyan",high:"yellow",max:"magenta"}});import{jsx as HJ,jsxs as X5}from"react/jsx-runtime";import{useState as pv,useEffect as DR0}from"react";import{Box as XH,Text as d1,useInput as OR0}from"ink";import NR0 from"ink-spinner";function dv({memories:$,mode:Z="browse",isLoading:J=!1,onSelect:X,onCancel:Y}){let[Q,G]=pv(0),[V,W]=pv(""),[H,K]=pv(0),z=8,U=$.filter((N)=>N.content.toLowerCase().includes(V.toLowerCase())),B=Math.max(1,Math.ceil(U.length/8)),F=U.slice(H*8,(H+1)*8);DR0(()=>{G((N)=>Math.min(N,Math.max(0,F.length-1)))},[F.length]);let D=F.length>0?Math.min(Q,F.length-1):0,O=process.stdin.isTTY??!1;OR0((N,_)=>{if(W$(N,_)){Y();return}if(_.return&&F.length>0&&Z==="forget"){X?.(F[D]);return}if(_.upArrow){G((M)=>Math.max(0,M-1));return}if(_.downArrow){G((M)=>Math.min(F.length-1,M+1));return}if(_.leftArrow&&H>0){K((M)=>M-1),G(0);return}if(_.rightArrow&&H<B-1){K((M)=>M+1),G(0);return}if(_.backspace||_.delete){W((M)=>M.slice(0,-1)),K(0),G(0);return}if(N&&!_.ctrl&&!_.meta)W((M)=>M+N),K(0),G(0)},{isActive:O});function L(N){let _=N instanceof Date?N:new Date(N);if(isNaN(_.getTime()))return"unknown";let T=new Date().getTime()-_.getTime(),k=Math.floor(T/86400000);if(k===0)return"today";if(k===1)return"yesterday";if(k<7)return`${k}d ago`;if(k<30)return`${Math.floor(k/7)}w ago`;return`${Math.floor(k/30)}mo ago`}function q(N,_){if(N.length<=_)return N;return N.slice(0,_-3)+"..."}return X5(XH,{flexDirection:"column",borderStyle:"round",borderColor:Z==="forget"?"red":"cyan",paddingX:1,children:[X5(XH,{marginBottom:1,children:[HJ(d1,{bold:!0,color:Z==="forget"?"red":"cyan",children:Z==="forget"?"Select Memory to Delete":"Memories"}),V&&X5(d1,{dimColor:!0,children:[' (filter: "',V,'")']}),X5(d1,{dimColor:!0,children:[" - ",U.length," memories"]})]}),J&&X5(XH,{children:[HJ(d1,{color:"cyan",children:HJ(NR0,{type:"dots"})}),HJ(d1,{dimColor:!0,children:" Loading memories..."})]}),!J&&U.length===0&&HJ(d1,{dimColor:!0,children:$.length===0?"No memories stored yet. Use /remember to add some.":"No memories match your filter."}),!J&&F.map((N,_)=>{let M=_===D,T=L(N.createdAt),k=q(N.content,60);return X5(XH,{flexDirection:"row",children:[X5(d1,{inverse:M,children:[M?">":" "," ",k]}),X5(d1,{dimColor:!0,children:[" [",T,"]"]}),N.network&&X5(d1,{dimColor:!0,children:[" (",N.network,")"]})]},N.id)}),!J&&B>1&&HJ(XH,{marginTop:1,children:X5(d1,{dimColor:!0,children:["Page ",H+1,"/",B]})}),HJ(XH,{marginTop:1,children:HJ(d1,{dimColor:!0,children:Z==="forget"?"type to filter arrows navigate enter delete esc cancel":"type to filter arrows navigate esc close"})})]})}var x40=()=>{};import{jsx as BF,jsxs as Y5}from"react/jsx-runtime";import{useState as lv,useEffect as g40}from"react";import{Box as YH,Text as z2,useInput as LR0}from"ink";function AR0($){let J=Date.now()-$.getTime(),X=Math.floor(J/60000),Y=Math.floor(J/3600000),Q=Math.floor(J/86400000);if(X<1)return"just now";if(X<60)return`${X}m ago`;if(Y<24)return`${Y}h ago`;if(Q<7)return`${Q}d ago`;return $.toLocaleDateString()}function av({sessions:$,onSelect:Z,onCancel:J,onSearch:X,onPageChange:Y}){let{columns:Q}=Y9(),[G,V]=lv(0),[W,H]=lv(""),[K,z]=lv(0),U=8,B=Math.max(1,Math.ceil($.length/8)),F=$.slice(K*8,(K+1)*8);g40(()=>{V((A)=>Math.min(A,Math.max(0,F.length-1)))},[F.length]),g40(()=>{z((A)=>Math.min(A,Math.max(0,B-1)))},[B]);let D=F.length>0?Math.min(G,F.length-1):0,O=process.stdin.isTTY??!1;LR0((A,N)=>{if(W$(A,N))J();else if(N.return&&F.length>0)Z(F[D].id);else if(N.upArrow)V((_)=>Math.max(0,_-1));else if(N.downArrow)V((_)=>Math.min(F.length-1,_+1));else if(N.leftArrow&&K>0)z((_)=>_-1),V(0);else if(N.leftArrow&&K===0)Y?.("prev"),V(0);else if(N.rightArrow&&K<B-1)z((_)=>_+1),V(0);else if(N.rightArrow&&K===B-1)Y?.("next"),V(0);else if(N.backspace||N.delete){let _=W.slice(0,-1);H(_),z(0),V(0),X(_)}else if(A&&!N.ctrl&&!N.meta){let _=W+A;H(_),z(0),V(0),X(_)}},{isActive:O});function L(A,N){if(A.length<=N)return A;return A.slice(0,N-3)+"..."}let q=Math.max(30,Math.min(120,Q-28));return Y5(YH,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:1,children:[Y5(YH,{marginBottom:1,children:[BF(z2,{bold:!0,color:"cyan",children:"Sessions"}),W&&Y5(z2,{dimColor:!0,children:[' (filter: "',W,'")']}),Y5(z2,{dimColor:!0,children:[" - ",$.length," sessions"]})]}),$.length===0?BF(z2,{dimColor:!0,children:W?"No sessions match your filter.":"No sessions yet."}):F.map((A,N)=>{let _=N===D,M=AR0(A.updatedAt),T=A.title??A.preview??"Untitled session",k=K*8+N;return Y5(YH,{flexDirection:"column",marginBottom:N<F.length-1?1:0,children:[Y5(YH,{flexDirection:"row",children:[Y5(z2,{inverse:_,children:[_?">":" "," ",k+1,". ",L(T,q)]}),Y5(z2,{dimColor:!0,children:[" [",M,"]"]})]}),Y5(z2,{dimColor:!0,children:[" ",A.arion," | ",A.model," | ",A.messageCount," messages"]})]},A.id)}),$.length>0&&B>1&&BF(YH,{marginTop:1,children:Y5(z2,{dimColor:!0,children:["Page ",K+1,"/",B]})}),BF(YH,{marginTop:1,children:BF(z2,{dimColor:!0,children:"type to search arrows navigate enter resume esc cancel"})})]})}var m40=E(()=>{P1()});import{jsx as FF,jsxs as hY}from"react/jsx-runtime";import{useState as nv,useEffect as fM,useMemo as qR0}from"react";import{Box as yM,Text as KJ,useInput as ER0}from"ink";function _R0($,Z){if($.length<=Z)return $;return $.slice(0,Z-3)+"\u2026"}function MR0($){switch($){case"user":return"\uD83D\uDC64";case"assistant":return"\uD83E\uDD16";case"system":return"\u2699\uFE0F";case"tool":return"\uD83D\uDD27";default:return" "}}function PR0($){switch($){case"user":return"cyan";case"assistant":return"green";case"system":return"yellow";case"tool":return"gray";default:return"white"}}function iv({messages:$,onSelect:Z,onCancel:J}){let{columns:X,rows:Y}=Y9(),[Q,G]=nv(0),[V,W]=nv(""),H=qR0(()=>{if(!V)return $;let L=V.toLowerCase();return $.filter((q)=>q.text.toLowerCase().includes(L)||q.role.toLowerCase().includes(L)||q.arion&&q.arion.toLowerCase().includes(L))},[$,V]);fM(()=>{G((L)=>Math.min(L,Math.max(0,H.length-1)))},[H.length]),fM(()=>{if(!V){let L=H.reduce((q,A,N)=>A.role==="user"?N:q,0);G(L)}},[]);let K=Math.max(4,Y-10),[z,U]=nv(0);fM(()=>{if(Q<z)U(Q);else if(Q>=z+K)U(Q-K+1)},[Q,K,z]),fM(()=>{let L=H.reduce((q,A,N)=>A.role==="user"?N:q,0);U(Math.max(0,L-K+2))},[V]);let B=H.slice(z,z+K),F=H.length>0?Math.min(Q,H.length-1):0,D=process.stdin.isTTY??!1;ER0((L,q)=>{if(W$(L,q))J();else if(q.return&&H.length>0){let A=H[F];if(A&&A.role==="user")Z(A.index,A.text)}else if(q.upArrow)G((A)=>Math.max(0,A-1));else if(q.downArrow)G((A)=>Math.min(H.length-1,A+1));else if(q.backspace||q.delete){let A=V.slice(0,-1);W(A),G(0)}else if(L&&!q.ctrl&&!q.meta){let A=V+L;W(A),G(0)}},{isActive:D});let O=Math.max(30,Math.min(120,X-16));return hY(yM,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:1,children:[hY(yM,{marginBottom:1,children:[FF(KJ,{bold:!0,color:"cyan",children:"Edit Message"}),V?hY(KJ,{dimColor:!0,children:[" ",'(search: "',V,'") \u2014 ',H.length,"/",$.length," messages"]}):hY(KJ,{dimColor:!0,children:[" \u2014 ",$.length," messages \xB7 select a user message to edit"]})]}),z>0&&hY(KJ,{dimColor:!0,children:[" \u2191 ",z," more above"]}),H.length===0?FF(KJ,{dimColor:!0,children:V?`No messages match "${V}".`:"No messages."}):B.map((L,q)=>{let N=z+q===F,_=L.role==="user",M=MR0(L.role),T=PR0(L.role),k=N?"\u276F":" ",R=_R0(L.text.replace(/\n/g," ").trim()||"(empty)",O);return FF(yM,{flexDirection:"row",children:hY(KJ,{inverse:N,color:N?void 0:T,dimColor:!_&&!N,bold:_,children:[k," ",M," ",R]})},`${L.index}-${q}`)}),z+K<H.length&&hY(KJ,{dimColor:!0,children:[" \u2193 ",H.length-z-K," more below"]}),FF(yM,{marginTop:1,children:FF(KJ,{dimColor:!0,children:"type to search \xB7 \u2191\u2193 navigate \xB7 enter select user message \xB7 esc cancel"})})]})}var c40=E(()=>{P1()});import{jsx as Q$,jsxs as l9}from"react/jsx-runtime";import jR0,{useState as TR0,useMemo as ov}from"react";import{Box as d9,Text as F$,useInput as CR0}from"ink";function u40($){if($.includes("daltonized")||$.includes("accessible"))return"accessible";if($.startsWith("claude-"))return"claude";return"standard"}function SR0($){let Z=$.colors.text.replace("#",""),J=parseInt(Z.slice(0,2),16),X=parseInt(Z.slice(2,4),16),Y=parseInt(Z.slice(4,6),16);return(J*299+X*587+Y*114)/1000<128}function IR0($){return b7().map((Z)=>{let J=BA(Z);return{name:Z,displayName:J.displayName,isCurrent:Z===$,isLight:SR0(J),category:u40(Z)}})}function bR0({theme:$}){let Z=$.colors,J=Z.primary,X=Z.info,Y=Z.success,Q=Z.textMuted,G=Z.text;return l9(d9,{flexDirection:"column",children:[Q$(F$,{color:Q,children:"// fetch a user by ID"}),l9(d9,{children:[Q$(F$,{color:J,children:"async function "}),Q$(F$,{color:G,children:"fetchUser"}),Q$(F$,{color:G,children:"("}),Q$(F$,{color:G,children:"id"}),Q$(F$,{color:G,children:": "}),Q$(F$,{color:Y,children:"string"}),Q$(F$,{color:G,children:") {"})]}),l9(d9,{children:[Q$(F$,{color:G,children:" "}),Q$(F$,{color:J,children:"const "}),Q$(F$,{color:G,children:"res = "}),Q$(F$,{color:J,children:"await "}),Q$(F$,{color:G,children:"fetch("}),Q$(F$,{color:X,children:"`/api/users/${"}),Q$(F$,{color:G,children:"id"}),Q$(F$,{color:X,children:"}`"}),Q$(F$,{color:G,children:")"})]}),l9(d9,{children:[Q$(F$,{color:G,children:" "}),Q$(F$,{color:J,children:"if "}),Q$(F$,{color:G,children:"(!res.ok) "}),Q$(F$,{color:J,children:"throw new "}),Q$(F$,{color:Y,children:"Error"}),Q$(F$,{color:G,children:"("}),Q$(F$,{color:X,children:"`HTTP ${"}),Q$(F$,{color:G,children:"res.status"}),Q$(F$,{color:X,children:"}`"}),Q$(F$,{color:G,children:")"})]}),l9(d9,{children:[Q$(F$,{color:G,children:" "}),Q$(F$,{color:J,children:"return "}),Q$(F$,{color:G,children:"res.json() "}),Q$(F$,{color:J,children:"as "}),Q$(F$,{color:Y,children:"Promise"}),Q$(F$,{color:G,children:"<"}),Q$(F$,{color:Y,children:"User"}),Q$(F$,{color:G,children:">"})]}),Q$(F$,{color:G,children:"}"})]})}function kR0({theme:$}){let{colors:Z,symbols:J}=$;return l9(d9,{flexDirection:"column",borderStyle:"single",borderColor:Z.secondary,paddingX:1,children:[l9(F$,{bold:!0,color:Z.primary,children:[J.prompt," ",$.displayName]}),Q$(d9,{marginTop:1,flexDirection:"column",children:Q$(bR0,{theme:$})}),l9(d9,{marginTop:1,flexDirection:"column",children:[l9(F$,{color:Z.success,children:[J.success," Tests passed (3/3)"]}),l9(F$,{color:Z.error,children:[J.error," Error: connection refused"]}),l9(F$,{color:Z.warning,children:[J.warning," Deprecated API call"]}),Q$(d9,{children:Q$(F$,{color:Z.diffAdded,children:"+ const data = await fetch(url);"})}),Q$(d9,{children:Q$(F$,{color:Z.diffRemoved,children:"- const data = http.get(url);"})}),l9(F$,{color:Z.textMuted,children:[J.info," 1.2k tokens ",J.bullet," $0.01 ",J.bullet," 0.8s"]})]})]})}function sv({onSelect:$,onCancel:Z}){let J=ov(()=>e().name,[]),X=ov(()=>IR0(J),[J]),{items:Y,selectableIndices:Q}=ov(()=>{let D=[],O=[],L=new Map;for(let q of X){let A=L.get(q.category)??[];A.push(q),L.set(q.category,A)}for(let q of wR0){let A=L.get(q);if(!A?.length)continue;D.push({type:"header",label:RR0[q]??q});for(let N of A)O.push(D.length),D.push({type:"theme",option:N})}return{items:D,selectableIndices:O}},[X]),G=Q.findIndex((D)=>{let O=Y[D];return O?.type==="theme"&&O.option.isCurrent}),[V,W]=TR0(G>=0?G:0),H=Q.length>0?Math.min(V,Q.length-1):0,K=Y[Q[H]],z=K?.type==="theme"?K.option.name:null;if(z)I7(z);let U=jR0.useCallback(()=>{I7(J),Z()},[J,Z]),B=process.stdin.isTTY??!1;CR0((D,O)=>{if(W$(D,O)){U();return}if(O.return&&Q.length>0){let L=Q[H],q=Y[L];if(q.type==="theme")$({name:q.option.name,displayName:q.option.displayName});return}if(O.upArrow){W((L)=>Math.max(0,L-1));return}if(O.downArrow){W((L)=>Math.min(Q.length-1,L+1));return}},{isActive:B});let F=e();return l9(d9,{flexDirection:"column",borderStyle:"round",borderColor:F.colors.primary,paddingX:1,children:[l9(d9,{marginBottom:1,children:[Q$(F$,{bold:!0,color:F.colors.primary,children:"Theme"}),l9(F$,{color:F.colors.textMuted,children:[" ",F.symbols.arrow," select a color theme"]})]}),l9(d9,{children:[Q$(d9,{flexDirection:"column",width:38,children:Y.map((D,O)=>{if(D.type==="header")return Q$(d9,{marginTop:O>0?1:0,children:Q$(F$,{bold:!0,color:F.colors.textMuted,children:D.label})},`header-${D.label}`);let L=Q[H]===O,{option:q}=D;return Q$(d9,{children:l9(F$,{inverse:L,color:L?F.colors.primary:F.colors.text,children:[q.isCurrent?"\u25CF":"\u25CB"," ",q.displayName]})},q.name)})}),Q$(d9,{flexDirection:"column",flexGrow:1,marginLeft:2,children:Q$(kR0,{theme:F})})]}),Q$(d9,{marginTop:1,children:l9(F$,{color:F.colors.textMuted,children:["\u2191\u2193"," navigate ","\u23CE"," select esc cancel"]})})]})}var RR0,wR0;var p40=E(()=>{E0();RR0={standard:"Standard",claude:"Claude",accessible:"Accessible"},wR0=["standard","claude","accessible"]});import{jsxs as xY,jsx as vM}from"react/jsx-runtime";import{useState as d40,useEffect as fR0,useMemo as yR0}from"react";import{Box as rv,Text as zJ,useInput as vR0}from"ink";function hR0($,Z){let J=Z.trim().toLowerCase();if(!J)return!0;return[$.displayNameSnapshot,$.nodeId,$.host,$.port?.toString(),$.principalFingerprint,$.transport,$.status].filter((Y)=>typeof Y==="string"&&Y.length>0).map((Y)=>Y.toLowerCase()).some((Y)=>Y.includes(J))}function tv($,Z){if(Z<=0)return 0;return Math.min($,Z-1)}function ev({peers:$,sameHomeClientsAvailable:Z=!1,onSelect:J,onCancel:X}){let[Y,Q]=d40(0),[G,V]=d40(""),W=e(),H=yR0(()=>$.filter((B)=>hR0(B,G)),[$,G]);fR0(()=>{Q((B)=>tv(B,H.length))},[H.length]);let K=tv(Y,H.length),z=process.stdin.isTTY??!1;vR0((B,F)=>{if(W$(B,F)){X();return}if(F.return){if(H.length>0)J(H[K]);return}if(F.upArrow){Q((D)=>Math.max(0,D-1));return}if(F.downArrow){Q((D)=>tv(D+1,H.length));return}if(F.backspace||F.delete){V((D)=>D.slice(0,-1)),Q(0);return}if(B&&!F.ctrl&&!F.meta){V((D)=>D+B),Q(0);return}},{isActive:z});let U=(B)=>`${B.slice(0,4)} ${B.slice(4,8)} ${B.slice(8,12)} ${B.slice(12,16)}`;return xY(rv,{flexDirection:"column",borderStyle:"round",borderColor:W.colors.secondary,paddingX:1,children:[xY(zJ,{bold:!0,color:W.colors.primary,children:[" ","Nearby Peers"," "]}),G?xY(zJ,{dimColor:!0,children:[' (filter: "',G,'")']}):null,H.length===0&&vM(zJ,{dimColor:!0,children:G?"No peers match your filter.":Z?"No peer nodes. Use /clients for same-home terminals.":"Scanning... no peers found yet"}),H.map((B,F)=>xY(rv,{children:[xY(zJ,{inverse:F===K,color:F===K?W.colors.primary:void 0,children:[F===K?" \u25B8 ":" ",B.displayNameSnapshot]}),B.status==="connected"?vM(zJ,{color:"green",children:" \u2713 connected"}):xY(zJ,{dimColor:!0,children:[" ",B.host,":",B.port]}),B.principalFingerprint?xY(zJ,{color:W.colors.secondary,children:[" ",U(B.principalFingerprint)]}):null]},`${B.displayNameSnapshot}-${B.nodeId}-${F}`)),vM(rv,{marginTop:H.length>0?1:0,children:vM(zJ,{dimColor:!0,children:"type to search \u2191\u2193 navigate \u23CE connect esc cancel"})})]})}var l40=E(()=>{E0()});import{jsxs as QH,jsx as $h}from"react/jsx-runtime";import{useEffect as xR0,useMemo as gR0,useState as a40}from"react";import{Box as Zh,Text as GH,useInput as mR0}from"ink";function cR0($,Z){let J=Z.trim().toLowerCase();if(!J)return!0;return $.displayLabel.toLowerCase().includes(J)||$.clientId.toLowerCase().includes(J)||$.clientKind.toLowerCase().includes(J)}function Jh($,Z){if(Z<=0)return 0;return Math.min($,Z-1)}function Xh({clients:$,onSelect:Z,onCancel:J}){let[X,Y]=a40(0),[Q,G]=a40(""),V=e(),W=gR0(()=>$.filter((z)=>cR0(z,Q)),[$,Q]);xR0(()=>{Y((z)=>Jh(z,W.length))},[W.length]);let H=Jh(X,W.length),K=process.stdin.isTTY??!1;return mR0((z,U)=>{if(W$(z,U)){J();return}if(U.return){if(W.length>0&&!W[H]?.self)Z(W[H]);return}if(U.upArrow){Y((B)=>Math.max(0,B-1));return}if(U.downArrow){Y((B)=>Jh(B+1,W.length));return}if(U.backspace||U.delete){G((B)=>B.slice(0,-1)),Y(0);return}if(z&&!U.ctrl&&!U.meta)G((B)=>B+z),Y(0)},{isActive:K}),QH(Zh,{flexDirection:"column",borderStyle:"round",borderColor:V.colors.secondary,paddingX:1,children:[QH(GH,{bold:!0,color:V.colors.primary,children:[" ","Same-Home Clients"," "]}),Q?QH(GH,{dimColor:!0,children:[' (filter: "',Q,'")']}):null,W.length===0&&$h(GH,{dimColor:!0,children:"No same-home clients found."}),W.map((z,U)=>QH(Zh,{flexDirection:"column",children:[QH(GH,{inverse:U===H,color:U===H?V.colors.primary:void 0,children:[U===H?" \u25B8 ":" ",z.displayLabel]}),QH(GH,{dimColor:!0,children:[" ",z.clientId,z.self?" self \xB7 not sendable":""]})]},`${z.clientId}-${U}`)),$h(Zh,{marginTop:W.length>0?1:0,children:$h(GH,{dimColor:!0,children:"type to search \u2191\u2193 navigate \u23CE select esc cancel"})})]})}var n40=E(()=>{E0()});import{jsx as UJ,jsxs as DF}from"react/jsx-runtime";import{Box as hM,Text as U2,useInput as uR0}from"ink";function Yh({inviteToken:$,inviteLabel:Z,expiresAt:J,onClose:X}){let Y=e(),Q=process.stdin.isTTY??!1;return uR0((G,V)=>{if(V.return||W$(G,V))X()},{isActive:Q}),DF(hM,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.secondary,paddingX:1,paddingY:1,children:[UJ(U2,{bold:!0,color:Y.colors.primary,children:"Internet Invite"}),Z?DF(U2,{children:["Label: ",UJ(U2,{bold:!0,children:Z})]}):null,J?DF(U2,{dimColor:!0,children:["Expires: ",J]}):null,DF(hM,{marginTop:1,flexDirection:"column",children:[UJ(U2,{children:"Share this token:"}),UJ(U2,{children:$})]}),DF(hM,{marginTop:1,flexDirection:"column",children:[UJ(U2,{children:"Join with:"}),UJ(U2,{children:`aria pairing join ${$}`})]}),UJ(hM,{marginTop:1,children:UJ(U2,{dimColor:!0,children:"Press Enter or Esc to close."})})]})}var i40=E(()=>{E0()});import{jsx as BJ,jsxs as pR0}from"react/jsx-runtime";import{useState as dR0}from"react";import{Box as xM,Text as OF,useInput as lR0}from"ink";function Qh({onSubmit:$,onCancel:Z,error:J}){let[X,Y]=dR0(""),Q=e(),G=process.stdin.isTTY??!1;return lR0((V,W)=>{if(W$(V,W)){Z();return}if(W.return){let H=X.trim();if(H.length>0)$(H);return}if(W.backspace||W.delete){Y((H)=>H.slice(0,-1));return}if(V&&!W.ctrl&&!W.meta)Y((H)=>H+V)},{isActive:G}),pR0(xM,{flexDirection:"column",borderStyle:"round",borderColor:Q.colors.secondary,paddingX:1,paddingY:1,children:[BJ(OF,{bold:!0,color:Q.colors.primary,children:"Join Invite"}),BJ(OF,{children:"Paste the invite token and press Enter."}),BJ(xM,{marginTop:1,children:BJ(OF,{children:X||" "})}),J?BJ(xM,{marginTop:1,children:BJ(OF,{color:Q.colors.error,children:J})}):null,BJ(xM,{marginTop:1,children:BJ(OF,{dimColor:!0,children:"Type token, Enter to join, Esc to cancel."})})]})}var o40=E(()=>{E0()});import{jsxs as gY,jsx as NF}from"react/jsx-runtime";import{useState as aR0,useRef as nR0}from"react";import{Box as LF,Text as mY,useInput as iR0}from"ink";function Gh({request:$,onAccept:Z,onReject:J}){let[X,Y]=aR0("accept"),Q=nR0(!1),G=e(),V=process.stdin.isTTY??!1,W=(H)=>`${H.slice(0,4)} ${H.slice(4,8)} ${H.slice(8,12)} ${H.slice(12,16)}`;return iR0((H,K)=>{if(Q.current)return;if(K.return){if(Q.current=!0,X==="accept")Z();else J();return}if(W$(H,K)){Q.current=!0,J();return}if(K.leftArrow||K.rightArrow||K.tab)Y((z)=>z==="accept"?"reject":"accept")},{isActive:V}),gY(LF,{flexDirection:"column",borderStyle:"round",borderColor:G.colors.warning,paddingX:2,paddingY:1,children:[gY(mY,{bold:!0,color:G.colors.warning,children:[" ","Connection Request"," "]}),NF(LF,{marginTop:1,children:gY(mY,{children:[NF(mY,{bold:!0,children:$.displayNameSnapshot??$.nodeId})," wants to connect"]})}),NF(LF,{children:gY(mY,{dimColor:!0,children:["Fingerprint: ",W($.principalFingerprint)]})}),gY(LF,{marginTop:1,gap:2,children:[gY(mY,{inverse:X==="accept",color:X==="accept"?G.colors.success:void 0,children:[" ","Accept"," "]}),gY(mY,{inverse:X==="reject",color:X==="reject"?G.colors.error:void 0,children:[" ","Reject"," "]})]}),NF(LF,{marginTop:1,children:NF(mY,{dimColor:!0,children:"\u2190\u2192 select \u23CE confirm esc reject"})})]})}var s40=E(()=>{E0()});import{execFile as oR0}from"child_process";import{existsSync as Wh,readdirSync as $60}from"fs";import{dirname as sR0,join as gM,resolve as rR0}from"path";import{fileURLToPath as tR0}from"url";function $w0(){let $=eR0;for(let Z=0;Z<10;Z++){let J=gM($,".comms","sounds","wav");if(Wh(J))return J;let X=rR0($,"..");if(X===$)break;$=X}return null}function B8($){if(!cY)return[];try{return $60(cY).filter((Z)=>new RegExp($).test(Z)).map((Z)=>gM(cY,Z))}catch{return[]}}function r40($){if(!cY)return[];let Z=gM(cY,"cloned");try{return $60(Z).filter((J)=>new RegExp($).test(J)).map((J)=>gM(Z,J))}catch{return[]}}function Q5($){if($.length===0)return null;return $[Math.floor(Math.random()*$.length)]}function uY($){Hh=$}function Z60(){return Hh}function J60(){if(process.platform!=="darwin")return"unsupported on this platform";return Kh()?"afplay (macOS)":"afplay unavailable"}function Kh(){if(t40)return Vh;return t40=!0,Vh=process.platform==="darwin"&&Wh("/usr/bin/afplay"),Vh}function G5($){if(!Hh||!$||!Wh($)||!Kh())return!1;try{return oR0("afplay",[$],()=>{}),!0}catch{return!1}}function Jw0(){let $=Date.now();if($-e40>Zw0)AF=1;else AF++;if(e40=$,AF<=1)G5(Q5(V5.acknowledge()));else if(AF===2)G5(Q5(V5.annoyed()));else if(AF===3)G5(Q5(V5.grumpy()));else G5(Q5(V5.dark()))}function mM(){G5(Q5(V5.readyToWork()))}function X60(){G5(Q5(V5.fleetDown()))}function Y60(){Jw0()}function Q60(){G5(Q5(V5.questDone()))}function G60($){switch($.type){case"error":G5(Q5(V5.error()));break;case"guardrail_rejected":G5(Q5(V5.defeat()));break}}function V60(){return cY!==null&&Kh()}function W60(){return cY!==null}function H60(){return G5(Q5(V5.readyToWork()))}var eR0,cY,Hh=!0,t40=!1,Vh=!1,V5,e40=0,AF=0,Zw0=15000;var zh=E(()=>{eR0=sR0(tR0(import.meta.url));cY=$w0();V5={acknowledge:()=>B8("^(peasant|orc|human|dwarf|elf|troll)_acknowledge"),annoyed:()=>B8("^(peasant|orc|goblin_sapper|human|troll|ogre)_selected"),grumpy:()=>B8("^(goblin_sapper|ogre|ogre_mage)_selected"),dark:()=>[...B8("^ogre_mage_selected"),...B8("^ogre_selected"),...B8("^troll_selected")],defeat:()=>r40("^defeat_"),error:()=>r40("^error_"),readyToWork:()=>[...B8("^peasant_selected"),...B8("^orc_selected"),...B8("^human_selected"),...B8("^dwarf_selected")],fleetUp:()=>[...B8("^orc_acknowledge"),...B8("^troll_acknowledge"),...B8("^ogre_acknowledge"),...B8("^human_acknowledge"),...B8("^knight_acknowledge")],fleetDown:()=>[...B8("^ogre_mage_acknowledge"),...B8("^ship_acknowledge"),...B8("^horde_ship_acknowledge")],questDone:()=>[...B8("^jobs_done"),...B8("^orc_work_completed"),...B8("^peasant_selected"),...B8("^orc_selected"),...B8("^human_selected"),...B8("^peasant_acknowledge"),...B8("^orc_acknowledge")]}});import{jsx as g6,jsxs as l1}from"react/jsx-runtime";import{useState as Uh,useCallback as z60}from"react";import{Box as W5,Text as D6,useInput as Xw0}from"ink";function Fh({onClose:$}){let Z=e(),J=Z.colors,[X,Y]=Uh(0),[Q,G]=Uh(Z60()),[V,W]=Uh("idle"),H=z60(()=>{let D=!Q;uY(D);let O=H$();if(O.soundEnabled=D,I$(O),G(D),D)mM()},[Q]),K=z60(()=>{let D=Q;if(!D)uY(!0);let O=H60();if(!D)uY(!1);W(O?"playing":"unavailable"),setTimeout(()=>W("idle"),1500)},[Q]),z=process.stdin.isTTY??!1;Xw0((D,O)=>{if(W$(D,O)){$();return}if(O.upArrow){Y((L)=>Math.max(0,L-1));return}if(O.downArrow){Y((L)=>Math.min(Bh.length-1,L+1));return}if(O.return){let L=Bh[X];if(L?.id==="toggle")H();else if(L?.id==="preview")K();return}},{isActive:z});let U=V60(),B=W60(),F=J60();return l1(W5,{flexDirection:"column",borderStyle:"round",borderColor:J.primary,paddingX:1,children:[l1(W5,{marginBottom:1,children:[g6(D6,{bold:!0,color:J.primary,children:"\uD83D\uDD14 Sound"}),l1(D6,{color:J.textMuted,children:[" ",Z.symbols.arrow," notification preferences"]})]}),l1(W5,{flexDirection:"column",marginBottom:1,children:[l1(W5,{children:[g6(D6,{color:J.textMuted,children:"Status "}),B?g6(D6,{bold:!0,color:Q?J.success:J.textMuted,children:Q?"\u25CF ON":"\u25CB OFF"}):g6(D6,{color:J.warning,children:"\u26A0 Sound files not found"})]}),l1(W5,{children:[g6(D6,{color:J.textMuted,children:"Engine "}),g6(D6,{color:U?J.text:J.warning,children:F})]}),l1(W5,{children:[g6(D6,{color:J.textMuted,children:"Assets "}),g6(D6,{color:B?J.text:J.warning,children:B?"Warcraft II pack found":"missing"})]})]}),g6(W5,{marginBottom:1,children:g6(D6,{color:J.border,children:"\u2500".repeat(40)})}),g6(W5,{flexDirection:"column",children:Bh.map((D,O)=>{let L=O===X,q=D.id==="toggle";return l1(W5,{paddingX:1,children:[l1(D6,{inverse:L,color:L?J.primary:J.text,children:[D.icon," ",q?Q?"Turn off":"Turn on":D.label]}),q&&L&&l1(D6,{color:J.textMuted,children:[" ",Q?"\u2192 disable notifications":"\u2192 enable notifications"]}),D.id==="preview"&&V==="playing"&&g6(D6,{color:J.success,children:" \u266A playing..."}),D.id==="preview"&&V==="unavailable"&&g6(D6,{color:J.warning,children:" \u26A0 preview unavailable"})]},D.id)})}),g6(W5,{marginTop:1,children:l1(D6,{color:J.textMuted,children:["\u2191\u2193"," navigate ","\u23CE"," select ","esc"," close"]})})]})}var Bh;var U60=E(()=>{E0();zh();Y4();Bh=[{id:"toggle",label:"Toggle sounds",description:"Turn sound notifications on or off",icon:"\uD83D\uDD0A"},{id:"preview",label:"Preview sound",description:"Play a sample notification sound",icon:"\u25B6"}]});import{jsx as o8,jsxs as v4,Fragment as Yw0}from"react/jsx-runtime";import{useState as Qw0}from"react";import{Box as h4,Text as R9,useInput as Gw0}from"ink";function Ww0({loopStatus:$}){let J=e().colors;if(!$)return null;let Y={running:J.success,idle:J.info,starting:J.warning,stopping:J.warning,stopped:J.textMuted,error:J.error}[$]??J.text;return o8(R9,{color:Y,children:$})}function Dh({onAction:$,onClose:Z,status:J,actionStatus:X}){let Y=e(),Q=Y.colors,G=Vw0.filter((z)=>{if(z.showWhenRunning===void 0)return!0;return z.showWhenRunning===J.running}),[V,W]=Qw0(0),H=Math.min(V,G.length-1),K=process.stdin.isTTY??!1;return Gw0((z,U)=>{if(X)return;if(W$(z,U)){Z();return}if(U.upArrow){W((B)=>Math.max(0,B-1));return}if(U.downArrow){W((B)=>Math.min(G.length-1,B+1));return}if(U.return&&G.length>0){let B=G[H];if(B)$(B.id);return}},{isActive:K}),v4(h4,{flexDirection:"column",borderStyle:"round",borderColor:Q.primary,paddingX:1,children:[v4(h4,{marginBottom:1,children:[o8(R9,{bold:!0,color:Q.primary,children:"\u2699 Daemon"}),v4(R9,{color:Q.textMuted,children:[" ",Y.symbols.arrow," background service control"]})]}),v4(h4,{flexDirection:"column",marginBottom:1,children:[v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Status "}),o8(R9,{bold:!0,color:J.running?Q.success:Q.textMuted,children:J.running?"\u25CF Running":"\u25CB Stopped"})]}),J.running&&v4(Yw0,{children:[J.loopStatus&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Loop "}),o8(Ww0,{loopStatus:J.loopStatus})]}),J.port&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Port "}),o8(R9,{color:Q.text,children:J.port})]}),J.nodeId&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Node "}),o8(R9,{color:Q.text,children:J.nodeId.length>20?`${J.nodeId.slice(0,20)}\u2026`:J.nodeId})]}),J.runtimeId&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Runtime "}),o8(R9,{color:Q.text,children:J.runtimeId.length>20?`${J.runtimeId.slice(0,20)}\u2026`:J.runtimeId})]}),J.clients!==void 0&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Clients "}),v4(R9,{color:J.clients>0?Q.info:Q.textMuted,children:[J.clients," attached"]})]})]})]}),o8(h4,{marginBottom:1,children:o8(R9,{color:Q.border,children:"\u2500".repeat(44)})}),X&&o8(h4,{marginBottom:1,paddingX:1,children:v4(R9,{color:Q.warning,children:["\u27F3 ",X]})}),o8(h4,{flexDirection:"column",children:G.map((z,U)=>{let B=U===H;return v4(h4,{paddingX:1,flexDirection:"column",children:[o8(h4,{children:v4(R9,{inverse:B,color:B?z.id==="stop"?Q.error:Q.primary:Q.text,children:[z.icon," ",z.label]})}),B&&o8(h4,{paddingLeft:3,children:o8(R9,{color:Q.textMuted,children:z.description})})]},z.id)})}),o8(h4,{marginTop:1,children:v4(R9,{color:Q.textMuted,children:["\u2191\u2193"," navigate ","\u23CE"," select ","esc"," close"]})})]})}var Vw0;var B60=E(()=>{E0();Vw0=[{id:"start",label:"Start daemon",description:"Launch the shared background daemon process",icon:"\u25B6",showWhenRunning:!1},{id:"stop",label:"Stop daemon",description:"Gracefully stop the shared daemon process",icon:"\u25A0",showWhenRunning:!0},{id:"restart",label:"Restart daemon",description:"Restart the shared daemon process cleanly",icon:"\u21BB",showWhenRunning:!0}]});var F60=E(()=>{I40();k40();h40();x40();m40();c40();p40();l40();n40();i40();o40();s40();U60();B60()});var Oh=E(()=>{OS();qS();Ln();fn();Tr();Pq();rI();eI();kr();fr();yr();TV();vr();h90();eS();x90();m90();p90();ZI();i90();VF();yY();VJ();F60()});import{jsxs as WH,jsx as VH}from"react/jsx-runtime";import{useEffect as Hw0,useState as Kw0,useRef as D60}from"react";import{Box as cM,Text as pY,useInput as zw0}from"ink";function Uw0({status:$}){let Z=e();switch($){case"connected":return WH(pY,{color:Z.colors.success,children:["\u2713"," connected"]});case"expired":return WH(pY,{color:Z.colors.error,children:["\u2717"," expired"]});case"none":return WH(pY,{color:Z.colors.textMuted,children:["\xB7"," not connected"]})}}function O60({providers:$,onSelect:Z,onCancel:J,isActive:X=!0}){let Y=e(),[Q,G]=Kw0(0),V=D60(0),W=D60(!1);Hw0(()=>{W.current=!1,V.current=0,G(0)},[$]);let H=(z)=>{G((U)=>{let B=z(U);return V.current=B,B})},K=process.stdin.isTTY??!1;return zw0((z,U)=>{if(W.current)return;if(U.upArrow)H((B)=>Math.max(0,B-1));else if(U.downArrow)H((B)=>Math.min($.length-1,B+1));else if(U.return)W.current=!0,Z($[V.current]);else if(W$(z,U))W.current=!0,J()},{isActive:X&&K}),WH(cM,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.secondary,paddingX:1,paddingY:1,width:56,children:[VH(cM,{marginBottom:1,children:VH(pY,{bold:!0,children:"Select a provider:"})}),$.map((z,U)=>{let B=U===Q,F=B?"\u25B8":" ";return WH(cM,{gap:1,children:[VH(pY,{color:B?Y.colors.primary:void 0,children:F}),VH(pY,{color:B?Y.colors.primary:void 0,bold:B,children:z.label.padEnd(28)}),VH(Uw0,{status:z.status})]},z.id)}),VH(cM,{marginTop:1,children:WH(pY,{color:Y.colors.textMuted,children:["\u2191\u2193"," Navigate Enter Select Esc Cancel"]})})]})}var N60=E(()=>{E0()});import{jsxs as B2,jsx as x4}from"react/jsx-runtime";import{useEffect as Bw0,useRef as Nh,useState as uM}from"react";import{Box as a1,Text as n1,useInput as Fw0}from"ink";function L60({provider:$,onCancel:Z,isActive:J=!0,onComplete:X,authorizeUrl:Y,expectedState:Q,onCodeSubmit:G}){let V=e(),[W,H]=uM("starting"),[K,z]=uM(""),[U,B]=uM(""),[F,D]=uM(""),O=Nh(null),L=Nh(!1),q=Nh(!1),A=process.stdin.isTTY??!1;Fw0((_,M)=>{if(W$(_,M))Z()},{isActive:J&&A}),Bw0(()=>{if(L.current)return;L.current=!0,H("waiting");let _=new Promise((T)=>{O.current=T}),M=(T)=>{z(T),H("manual")};if(Y&&G){z(Y),sL($,{authorizeUrl:Y,expectedState:Q,onManualFallback:M,manualCodePromise:_}).then(async(T)=>{if(q.current)return;H("exchanging"),await G(T),q.current=!0,H("success")},(T)=>{if(q.current)return;let k=T instanceof Error?T.message:String(T);B(k),H("error")});return}Iw($,{onManualFallback:M,manualCodePromise:_}).then((T)=>{if(q.current)return;if(T.success)H("success"),q.current=!0,setTimeout(()=>{X?.({success:!0,message:T.message})},1000);else B(T.message),H("error")},(T)=>{if(q.current)return;let k=T instanceof Error?T.message:String(T);B(k),H("error")})},[Q,Y,G,X,$]);let N=(_)=>{let M=_.trim();if(!M)return;if(H("exchanging"),O.current)O.current(M),O.current=null};return B2(a1,{flexDirection:"column",borderStyle:"round",borderColor:V.colors.secondary,paddingX:1,paddingY:1,width:64,children:[x4(a1,{marginBottom:1,children:B2(n1,{bold:!0,children:["Sign in to ",$]})}),(W==="starting"||W==="waiting")&&B2(a1,{gap:1,children:[x4(ZW,{}),x4(n1,{children:"Opening browser to sign in..."})]}),W==="manual"&&B2(a1,{flexDirection:"column",children:[x4(n1,{children:"Open this URL in your browser:"}),x4(a1,{marginTop:1,children:x4(n1,{color:V.colors.primary,wrap:"wrap",children:K})}),x4(a1,{marginTop:1,children:x4(n1,{children:"Paste the authorization code below:"})}),B2(a1,{marginTop:1,children:[x4(n1,{color:V.colors.textMuted,children:"> "}),x4(NV,{value:F,onChange:D,onSubmit:N,placeholder:"paste code here",focus:J,showCursor:!0})]})]}),W==="exchanging"&&B2(a1,{gap:1,children:[x4(ZW,{}),x4(n1,{children:"Exchanging code for tokens..."})]}),W==="success"&&B2(n1,{color:V.colors.success,children:["\u2713"," Logged in to ",$]}),W==="error"&&B2(a1,{flexDirection:"column",children:[B2(n1,{color:V.colors.error,children:["\u2717"," ",U]}),x4(a1,{marginTop:1,children:x4(n1,{color:V.colors.textMuted,children:"Press Esc to dismiss"})})]}),W!=="success"&&W!=="error"&&x4(a1,{marginTop:1,children:x4(n1,{color:V.colors.textMuted,children:"Esc Cancel"})})]})}var A60=E(()=>{R6();E0();Pq();mS()});import{jsxs as KH,jsx as F2}from"react/jsx-runtime";import{useEffect as Dw0,useRef as q60,useState as Ow0}from"react";import{Box as HH,Text as FJ,useInput as Nw0}from"ink";function Lw0({status:$}){let Z=e();if($==="connected")return KH(FJ,{color:Z.colors.success,children:["\u2713"," connected"]});if($==="available")return KH(FJ,{color:Z.colors.success,children:["\u2713"," available"]});return F2(FJ,{color:Z.colors.textMuted,children:"\xB7"})}function zH({options:$,onSelect:Z,onCancel:J,title:X="Select login method:",isActive:Y=!0}){let Q=e(),[G,V]=Ow0(0),W=q60(0),H=q60(!1),K=process.stdin.isTTY??!1;Dw0(()=>{H.current=!1,W.current=0,V(0)},[$]);let z=(U)=>{V((B)=>{let F=U(B);return W.current=F,F})};return Nw0((U,B)=>{if(H.current)return;if(B.upArrow)z((F)=>Math.max(0,F-1));else if(B.downArrow)z((F)=>Math.min($.length-1,F+1));else if(B.return)H.current=!0,Z($[W.current]);else if(W$(U,B))H.current=!0,J()},{isActive:Y&&K}),KH(HH,{flexDirection:"column",borderStyle:"round",borderColor:Q.colors.secondary,paddingX:1,paddingY:1,width:64,children:[F2(HH,{marginBottom:1,children:F2(FJ,{bold:!0,children:X})}),$.map((U,B)=>{let F=B===G,D=F?"\u25B8":" ";return KH(HH,{flexDirection:"column",children:[KH(HH,{gap:1,children:[F2(FJ,{color:F?Q.colors.primary:void 0,children:D}),F2(FJ,{color:F?Q.colors.primary:void 0,bold:F,children:U.label}),F2(Lw0,{status:U.status})]}),U.description&&F2(HH,{marginLeft:3,children:F2(FJ,{color:Q.colors.textMuted,dimColor:!0,children:U.description})})]},U.id)}),F2(HH,{marginTop:1,children:KH(FJ,{color:Q.colors.textMuted,children:["\u2191\u2193"," Navigate Enter Select Esc Cancel"]})})]})}var Lh=E(()=>{E0()});import{jsx as Aw0}from"react/jsx-runtime";function E60({options:$,onSelect:Z,onCancel:J,isActive:X=!0}){return Aw0(zH,{options:$,onSelect:Z,onCancel:J,title:"Select Anthropic login method:",isActive:X})}var _60=E(()=>{Lh()});import{jsx as DJ,jsxs as Ah}from"react/jsx-runtime";import{useRef as qw0,useState as Ew0}from"react";import{Box as qF,Text as UH,useInput as _w0}from"ink";function BH({title:$,hint:Z,onSubmit:J,onCancel:X,isActive:Y=!0}){let Q=e(),[G,V]=Ew0(""),W=qw0(!1),H=process.stdin.isTTY??!1;_w0((z,U)=>{if(W.current)return;if(W$(z,U)){W.current=!0,X();return}if(U.return){if(G.trim().length>0)W.current=!0,J(G.trim());return}if(U.backspace||U.delete){V((B)=>B.slice(0,-1));return}if(U.upArrow||U.downArrow||U.leftArrow||U.rightArrow||U.tab)return;if(z&&!U.ctrl&&!U.meta)V((B)=>B+z)},{isActive:Y&&H});let K=G.length>0?G.slice(0,4)+"\u2022".repeat(Math.max(0,G.length-4)):"";return Ah(qF,{flexDirection:"column",borderStyle:"round",borderColor:Q.colors.secondary,paddingX:1,paddingY:1,width:64,children:[DJ(qF,{marginBottom:1,children:DJ(UH,{bold:!0,children:$})}),Z&&DJ(qF,{marginBottom:1,children:DJ(UH,{color:Q.colors.textMuted,dimColor:!0,children:Z})}),Ah(qF,{children:[Ah(UH,{color:Q.colors.primary,children:["\u25B8"," "]}),DJ(UH,{children:K||" "}),DJ(UH,{color:Q.colors.textMuted,children:"_"})]}),DJ(qF,{marginTop:1,children:DJ(UH,{color:Q.colors.textMuted,children:"Enter Submit Esc Cancel"})})]})}var M60=E(()=>{E0()});function P60($,Z,J={}){let X=J.userName||"User",Y=[],Q=new Map;function G(V,W){for(let H of V.content)switch(H.type){case"text":{if(V.role==="user"){let K=oS(H.text);for(let z of K)if(z.type==="image"&&IA(z.dataUri))Y.push({kind:"user-image",id:`${V.id}-image-${Y.length}`,dataUri:z.dataUri,userName:X,committed:W});else if(z.type==="text"&&z.text.length>0)Y.push({kind:"user-message",id:`${V.id}-text-${Y.length}`,text:z.text,userName:X,committed:W})}else if(V.role==="system"&&H.text.length>0)Y.push({kind:"user-message",id:`${V.id}-text-${Y.length}`,text:H.text,userName:"System",committed:W});else if(V.role==="assistant"&&H.text.trim())Y.push({kind:"assistant-text",id:`${V.id}-text-${Y.length}`,text:H.text,arion:V.arion?{name:V.arion.name,emoji:V.arion.emoji||"\uD83E\uDD8B",color:V.arion.color||"cyan"}:void 0,committed:W});break}case"thinking":{if(H.content?.trim())Y.push({kind:"thinking",id:`${V.id}-thinking-${Y.length}`,content:H.content,durationSec:H.durationMs!=null?H.durationMs/1000:void 0,arion:V.arion?{name:V.arion.name,emoji:V.arion.emoji||"\uD83E\uDD8B",color:V.arion.color||"cyan"}:void 0,committed:W});break}case"tool_use":{let K={kind:"tool-execution",id:`${V.id}-tool-${H.id}`,toolName:H.name,input:H.arguments,output:void 0,status:"pending",durationMs:void 0,usage:void 0,committed:W};Q.set(H.id,K),Y.push(K);break}case"tool_result":{let K=Q.get(H.toolUseId);if(K){if(K.output=H.resultData??H.content,K.status=H.status==="error"?"error":"complete",H.status==="error")K.error=typeof H.content==="string"?H.content:"Tool error";if(H.durationMs!=null)K.durationMs=H.durationMs;if(H.usage)K.usage={inputTokens:H.usage.inputTokens??0,outputTokens:H.usage.outputTokens??0};if(!W)K.committed=!1}break}case"handoff":{Y.push({kind:"handoff",id:`${V.id}-handoff-${Y.length}`,target:H.target,direction:H.direction==="from"?"incoming":"outgoing",committed:W});break}case"error":{Y.push({kind:"error",id:`${V.id}-error-${Y.length}`,message:H.content,suggestion:H.suggestion,committed:W});break}}}for(let V of $)G(V,!0);for(let V of Z)G(V,!1);return Y}var j60=E(()=>{bA()});function C60($,Z){switch(Z.type){case"STREAM_START":return{kind:"composing",verb:Z.verb};case"THINKING_START":if($.kind!=="composing"&&$.kind!=="idle")return $;return{kind:"thinking",verb:Z.verb,startedAt:Z.startedAt};case"THINKING_END":if($.kind!=="thinking")return $;return{kind:"composing",verb:Z.verb,thoughtForSeconds:Z.durationSeconds};case"TOOL_START":{let J=new Map($.kind==="tool_running"?$.tools:[]);return J.set(Z.callId,Z.displayName),{kind:"tool_running",tools:J}}case"TOOL_END":{if($.kind!=="tool_running")return $;let J=new Map($.tools);if(J.delete(Z.callId),J.size===0)return{kind:"composing",verb:Z.verb};return{kind:"tool_running",tools:J}}case"STREAM_END":return{kind:"idle"};default:return $}}var T60;var R60=E(()=>{T60={kind:"idle"}});import{useReducer as Mw0,useEffect as qh,useRef as w60}from"react";function S60($,Z){let[J,X]=Mw0(C60,T60),Y=w60(!1);qh(()=>{if(Z&&!Y.current)X({type:"STREAM_START",verb:j1()});else if(!Z&&Y.current)X({type:"STREAM_END"});Y.current=Z},[Z]);let Q=w60(null);return qh(()=>{if($!==Q.current){if(Q.current!==null)X({type:"STREAM_END"});Q.current=$}},[$]),qh(()=>{if(!$)return;let G=()=>X({type:"THINKING_START",verb:j1(),startedAt:Date.now()}),V=(K)=>X({type:"THINKING_END",verb:j1(),durationSeconds:Math.round(K.durationMs/1000)}),W=(K)=>X({type:"TOOL_START",callId:K.id,displayName:gn(K.name,!0)}),H=(K)=>X({type:"TOOL_END",callId:K.id,verb:j1()});return $.on("thinking_start",G),$.on("thinking_end",V),$.on("tool_start",W),$.on("tool_result",H),()=>{$.off("thinking_start",G),$.off("thinking_end",V),$.off("tool_start",W),$.off("tool_result",H)}},[$]),J}var I60=E(()=>{R60();EV()});function pM($){let Z=typeof $.nodeId==="string"?$.nodeId.trim():"",J=typeof $.transport==="string"?$.transport:"unknown";if(Z)return`node:${Z}`;let X=typeof $.principalFingerprint==="string"?$.principalFingerprint.trim():"";if(X)return`principal:${X}`;return`endpoint:${J}:${$.host}:${$.port}:${$.displayNameSnapshot}`}function b60($,Z){let J=new Map;for(let X of[...$,...Z]){let Y=pM(X);if(!J.has(Y))J.set(Y,X)}return[...J.values()]}import{jsx as G$,jsxs as dY,Fragment as Pw0}from"react/jsx-runtime";import{useState as OJ,useCallback as D2,useMemo as NJ,useEffect as AZ}from"react";import{Box as H5,Static as jw0,Text as O2,useApp as Tw0,useInput as Cw0}from"ink";function Eh({session:$,model:Z,maxContextTokens:J,banner:X,messages:Y=[],previewMessages:Q=[],isStreaming:G=!1,queuedMessage:V,onCancelQueuedMessage:W,responseTime:H,commands:K=[],arions:z=[],models:U=[],memories:B=[],memoryBrowserMode:F="browse",isLoadingMemories:D=!1,userName:O,metrics:L,displayMode:q="standard",displayConfig:A,showThinking:N=!0,showCosts:_=!0,showTraces:M=!1,spans:T=[],pipelineTiming:k,activeArion:R,onSubmit:a,onCommand:o,onSelectArion:u,onSelectModel:w,onSelectTheme:m,onSelectMemory:I,onOpenMemoryBrowser:S,onToggleThinking:j,onToggleCosts:b,onToggleTraces:v,onCycleDisplayMode:c,sessions:C=[],onSelectSession:f,onLoadSessions:g,onSearchSessions:l,onLoadMoreSessions:$0,staticRenderEpoch:Y0,openSessionOverlaySignal:x,openThemeOverlaySignal:r,openSoundOverlaySignal:J0,openDaemonOverlaySignal:X0,daemonStatus:n,daemonActionStatus:K0,onDaemonAction:z0,connectionState:O0="connected",inputHistory:R0=[],onSaveInput:I0,obsCtx:Z0,onCancel:H0,approvalRequest:B0,onApprovalChoice:F0,effortLevel:V0,showAutonomySelector:D0,autonomyLevel:C0,onAutonomySelect:_0,onAutonomyCancel:L0,onCycleAutonomy:P0,onCycleEffort:c0,loginPickerProviders:z$,onLoginProviderSelect:A0,onLoginPickerCancel:u0,copilotSourceOptions:U$,onCopilotSourceSelect:r0,onCopilotSourceCancel:V$,oauthProvider:_$,oauthAuthorizeUrl:r8,oauthExpectedState:p$,onOAuthComplete:c$,onOAuthCodeSubmit:z9,onOAuthCancel:d4,copilotDeviceProvider:A5,copilotDeviceProfileLabel:GK,copilotDeviceVerificationUri:VK,copilotDeviceUserCode:V7,onCopilotDeviceComplete:W7,onCopilotDeviceApprove:WK,onCopilotDeviceCancel:f2,anthropicMethodOptions:HK,onAnthropicMethodSelect:ZO,onAnthropicMethodCancel:mJ,anthropicKeyInputVisible:JO,onAnthropicKeySubmit:jQ,onAnthropicKeyCancel:XO,anthropicSetupTokenVisible:TQ,onAnthropicSetupTokenSubmit:YO,onAnthropicSetupTokenCancel:CQ,openaiMethodOptions:KK,onOpenAIMethodSelect:RQ,onOpenAIMethodCancel:QO,openaiKeyInputVisible:wQ,onOpenAIKeySubmit:GO,onOpenAIKeyCancel:SQ,googleMethodOptions:IQ,onGoogleMethodSelect:bQ,onGoogleMethodCancel:VO,googleKeyInputVisible:kQ,onGoogleKeySubmit:WO,onGoogleKeyCancel:fQ,authInteractionOptions:zK,authInteractionTitle:UK,onAuthInteractionSelect:HO,onAuthInteractionCancel:yQ,authInteractionInput:vQ,onAuthInteractionInputSubmit:hQ,onAuthInteractionInputCancel:KO,nearbyPeers:y2=[],localClients:zO=[],onSelectPeer:BK,onSelectClient:FT,onPeerCancel:UO,onClientsCancel:DT,openPeersOverlaySignal:xQ,openClientsOverlaySignal:BO,inviteShare:H7,onInviteShareClose:OT,openJoinInviteOverlaySignal:gQ,onJoinInviteSubmit:FK,onJoinInviteCancel:cJ,joinInviteError:NT,incomingPairRequest:v2,onAcceptPairRequest:LT,onRejectPairRequest:FO,onCancelPairing:q5,openMessageEditOverlaySignal:DK,editableMessages:h2,onEditMessage:AT,prefillInput:OK,onPrefillConsumed:qT,meshMessageCount:ET=0,runtimeSocket:Yu=null,clientId:Qu=null,clientAuthToken:Gu=null,resolveCredentials:NK}){let{exit:uJ}=Tw0(),{columns:DO,rows:_T}=Y9(),[LK,A6]=OJ(""),[m0,J$]=OJ("none"),[mQ,cQ]=OJ(""),[AK,qK]=OJ(""),[i9,x2]=OJ("become"),[OO,K7]=OJ("all"),[NO,uQ]=OJ(!1),pJ=Boolean(zK||HK||KK||IQ),LO=Boolean(vQ||JO||TQ||wQ||kQ),dJ=Boolean(_$||A5||z$||U$);AZ(()=>{if(pJ)J$("login-method");else if(LO)J$("login-input");else if(dJ)J$("login");else if(m0==="login"||m0==="login-method"||m0==="login-input")J$("none")},[pJ,LO,dJ]);let EK=D2(()=>{J$("session"),setTimeout(()=>g?.(),0)},[g]);AZ(()=>{if(x===void 0)return;EK()},[x,EK]),AZ(()=>{if(r===void 0)return;J$("theme")},[r]),AZ(()=>{if(J0===void 0)return;J$("sound")},[J0]),AZ(()=>{if(X0===void 0)return;J$("daemon")},[X0]);let[pQ,dQ]=OJ([]);AZ(()=>{if(xQ===void 0)return;dQ([...y2]),J$("peers")},[xQ]),AZ(()=>{if(BO===void 0)return;J$("clients")},[BO]),AZ(()=>{if(H7)J$("invite-share");else if(m0==="invite-share")J$("none")},[H7,m0]),AZ(()=>{if(gQ===void 0)return;J$("join-invite")},[gQ]),AZ(()=>{if(DK===void 0)return;if(h2&&h2.length>0)J$("message-edit")},[DK]),AZ(()=>{if(OK!==void 0)A6(OK),qT?.()},[OK]),AZ(()=>{if(m0!=="peers")return;dQ((N0)=>{let T0=new Set(N0.map(pM)),X8=y2.filter((_5)=>!T0.has(pM(_5)));return X8.length>0?[...N0,...X8]:N0})},[m0,y2]),AZ(()=>{if(v2&&m0==="none"&&!G)J$("pair-request");else if(!v2&&m0==="pair-request")J$("none")},[v2,m0,G]);let MT=process.stdin.isTTY??!1;Cw0((N0,T0)=>{if(N0==="\x03"||T0.ctrl&&N0==="c"){if(B0)return;if(G&&H0){H0();return}uJ()}if(W$(N0,T0)){if(B0)return;if(m0!=="none"){RZ();return}if(q5){q5();return}if(G&&V&&W)W();else if(G&&H0)H0();else A6("");return}if(T0.upArrow&&G&&V&&W){W();return}if(T0.ctrl&&N0==="\x1C"&&m0==="none"){c?.();return}if(T0.ctrl&&N0==="t"&&m0==="none"){j?.();return}if(T0.ctrl&&N0==="g"&&m0==="none"){b?.();return}if(T0.ctrl&&N0==="s"&&m0==="none"){v?.();return}if(T0.tab&&N0!=="\t"&&m0==="none"){P0?.();return}if(T0.ctrl&&N0==="\x05"&&m0==="none"){c0?.();return}if(T0.ctrl&&N0==="\x1F"&&m0==="none"){uQ((X8)=>!X8);return}},{isActive:MT});let TZ=$.getPrimary(),Vu=TZ?.name||"ARIA",PT=TZ?.color||"cyan",jT=TZ?.emoji||"\uD83E\uDD8B",CZ=S60(Z0??null,G??!1),lQ=(m0==="none"&&!B0?4:0)+(!A||A.showStatusBar?1:0),AO=Math.max(_T-lQ,1),aQ=D2((N0,T0)=>{if(N0==="command")J$("command"),cQ(T0);else if(N0==="mention")J$("arion"),qK(T0),x2("mention")},[]),TT=D2((N0)=>{J$("none"),A6("");let T0=N0.requiresArgs===!0||(N0.args?.length??0)>0;if(N0.name==="become")J$("arion"),x2("become"),K7("all");else if(N0.name==="rest")J$("arion"),x2("rest"),K7("active");else if(N0.name==="wake")J$("arion"),x2("wake"),K7("resting");else if(N0.name==="model")J$("model");else if(N0.name==="theme")J$("theme");else if(N0.name==="sound")J$("sound");else if(N0.name==="daemon")o(N0.name);else if(N0.name==="memories")S?.("browse"),J$("memory");else if(N0.name==="forget")S?.("forget"),J$("memory");else if(N0.name==="resume")EK();else if(N0.name==="exit")uJ();else if(T0){A6(`/${N0.name} `);return}else o(N0.name)},[o,S,uJ]),p6=D2((N0)=>{if(J$("none"),i9==="mention"){let T0=LK.replace(/@\w*$/,"");A6(T0+"@"+N0.name+" ")}else u?.(N0.name,i9)},[i9,LK,u]),CT=D2((N0,T0)=>{J$("none"),w?.(N0.value??N0.name,T0)},[w]),RT=D2((N0)=>{J$("none"),m?.(N0)},[m]),wT=D2((N0)=>{J$("none"),I?.(N0)},[I]),RZ=D2(()=>{if(J$("none"),i9!=="mention")A6("");cQ(""),qK("")},[i9]),g2=D2((N0)=>{J$("none"),A6(N0),cQ("")},[]),qO=NJ(()=>P60(Y,Q,{userName:O}),[Y,Q,O]),d6=NJ(()=>nI(qO,q),[qO,q]),nQ=NJ(()=>d6.filter((N0)=>N0.committed),[d6]),iQ=NJ(()=>d6.filter((N0)=>!N0.committed),[d6]),_8=G&&V?V:null,wZ=_8!==null,X1=CZ.kind!=="idle",C$=Math.max(DO-4,20),m2=NJ(()=>{if(!_8)return 0;return Math.max(D9(_8,{width:C$}).split(`
|
|
4726
|
-
`).length,1)},[C$,_8]),oQ=(wZ?4+m2:0)+(X1?2:0),SZ=Math.max(AO-oQ,1),E5=NJ(()=>{let N0=new Map,T0="";for(let X8 of d6){let _5=X8.kind==="user-message"||X8.kind==="user-image"?`user:${X8.userName}`:X8.kind==="assistant-text"?`assistant:${X8.arion?.name??"ARIA"}`:X8.kind==="thinking"?`assistant:${X8.arion?.name??"ARIA"}`:X8.kind==="tool-execution"?"tool":X8.kind,sQ=X8.kind==="user-message"||X8.kind==="user-image"||X8.kind==="assistant-text"||X8.kind==="thinking";if(N0.set(X8.id,sQ&&_5!==T0),sQ)T0=_5}return N0},[d6]),ST=NJ(()=>{let N0=new Map;for(let T0=0;T0<d6.length;T0++){let X8=d6[T0],_5=T0>0?d6[T0-1]:void 0,sQ=X8.kind==="tool-execution"&&_5?.kind==="tool-execution";N0.set(X8.id,T0>0&&!sQ)}return N0},[d6]),Wu=NJ(()=>{let N0=[];if(X)N0.push({id:"header",_kind:"banner"});for(let T0 of nQ)N0.push({...T0,_kind:"item"});return N0},[X,nQ]);return dY(Pw0,{children:[G$(jw0,{items:Wu,children:(N0)=>{if(N0._kind==="banner")return G$(H5,{width:"100%",justifyContent:"center",children:X},N0.id);return G$(H5,{flexDirection:"column",marginTop:ST.get(N0.id)?1:0,children:G$(Mq,{item:N0,displayMode:q,showPrefix:E5.get(N0.id)??!1})},N0.id)}},`static-${Y0}`),dY(H5,{flexDirection:"column",width:"100%",children:[dY(H5,{flexDirection:"column",maxHeight:AO,justifyContent:"flex-end",overflowY:"hidden",children:[iQ.length>0&&G$(H5,{flexDirection:"column",maxHeight:SZ,overflowY:"hidden",children:iQ.map((N0)=>G$(H5,{flexDirection:"column",marginTop:ST.get(N0.id)?1:0,children:G$(Mq,{item:N0,displayMode:q,showPrefix:E5.get(N0.id)??!1,previewTailLines:SZ})},N0.id))}),wZ&&dY(H5,{marginTop:1,flexDirection:"column",children:[G$(SA,{param:{type:"text",text:_8??""},userName:O??"User",columns:DO,showPrefix:!0,addMargin:!1}),G$(O2,{dimColor:!0,children:" \u2191 queued \u2014 press esc or \u2191 to cancel and edit"})]}),M&&T.length>0&&G$(Kv,{spans:T}),A?.showPipelineTiming&&k&&k.phases.length>0&&G$(zv,{report:k}),NO&&dY(H5,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,marginY:1,children:[G$(O2,{bold:!0,dimColor:!0,children:"Hotkeys"}),G$(O2,{dimColor:!0,children:" Ctrl+\\ \u2014 cycle display mode"}),G$(O2,{dimColor:!0,children:" Ctrl+t \u2014 toggle thinking blocks"}),G$(O2,{dimColor:!0,children:" Ctrl+g \u2014 toggle cost display"}),G$(O2,{dimColor:!0,children:" Ctrl+e \u2014 cycle effort level"}),G$(O2,{dimColor:!0,children:" Ctrl+s \u2014 toggle trace waterfall"}),G$(O2,{dimColor:!0,children:" Escape \u2014 cancel streaming / close overlay / clear input"}),G$(O2,{dimColor:!0,children:" Ctrl+/ \u2014 toggle this help"})]}),X1&&G$(Bv,{state:CZ.kind==="thinking"?"thinking":"composing",elapsedSeconds:Math.floor(L?.wallTimeSeconds??0),totalTokens:L?.totalTokens??0,thoughtForSeconds:CZ.kind==="composing"?CZ.thoughtForSeconds:void 0,currentVerb:CZ.kind==="tool_running"?[...new Set(CZ.tools.values())].join(" \xB7 "):CZ.verb.present})]}),dY(H5,{flexDirection:"column",flexShrink:0,children:[D0&&_0&&L0&&G$(Wv,{currentLevel:C0??ZJ.autonomy,onSelect:_0,onCancel:L0}),z$&&A0&&u0&&G$(O60,{providers:z$,onSelect:A0,onCancel:u0}),U$&&r0&&V$&&G$(tI,{options:U$,onSelect:r0,onCancel:V$}),m0==="login-method"&&zK&&HO&&yQ&&G$(zH,{options:zK,onSelect:(N0)=>HO(N0.id),onCancel:yQ,title:UK??"Choose an option:",isActive:m0==="login-method"}),m0==="login-method"&&HK&&ZO&&mJ&&G$(E60,{options:HK,onSelect:ZO,onCancel:mJ,isActive:m0==="login-method"}),m0==="login-input"&&vQ&&hQ&&KO&&G$(BH,{title:vQ.title,hint:vQ.hint,onSubmit:hQ,onCancel:KO,isActive:m0==="login-input"}),m0==="login-input"&&JO&&jQ&&XO&&G$(BH,{title:"Enter Anthropic API key",hint:"Paste your sk-ant-api03-* key",onSubmit:jQ,onCancel:XO,isActive:m0==="login-input"}),m0==="login-input"&&TQ&&YO&&CQ&&G$(BH,{title:"Enter setup token",hint:"From `claude setup-token` or admin provisioning",onSubmit:YO,onCancel:CQ,isActive:m0==="login-input"}),m0==="login-method"&&KK&&RQ&&QO&&G$(zH,{options:KK,onSelect:RQ,onCancel:QO,title:"Select OpenAI login method:",isActive:m0==="login-method"}),m0==="login-input"&&wQ&&GO&&SQ&&G$(BH,{title:"Enter OpenAI API key",hint:"Paste your sk-* key",onSubmit:GO,onCancel:SQ,isActive:m0==="login-input"}),m0==="login-method"&&IQ&&bQ&&VO&&G$(zH,{options:IQ,onSelect:bQ,onCancel:VO,title:"Select Google login method:",isActive:m0==="login-method"}),m0==="login-input"&&kQ&&WO&&fQ&&G$(BH,{title:"Enter Google API key",hint:"Paste your AIza* key",onSubmit:WO,onCancel:fQ,isActive:m0==="login-input"}),m0==="login"&&_$&&c$&&d4&&G$(L60,{provider:_$,onCancel:d4,...r8&&z9?{authorizeUrl:r8,expectedState:p$??void 0,onCodeSubmit:z9}:{onComplete:c$},isActive:m0==="login"}),m0==="login"&&A5&&W7&&f2&&G$(sI,{provider:A5,profileLabel:GK??void 0,...VK&&V7&&WK?{verificationUri:VK,userCode:V7,onApprove:WK}:{onComplete:W7},onCancel:f2}),dY(H5,{flexDirection:"column",children:[m0==="command"&&G$(gv,{commands:K,initialFilter:mQ,onSelect:TT,onHandOffInput:g2,onCancel:RZ}),m0==="arion"&&G$(mv,{arions:z,initialFilter:AK,statusFilter:OO,onSelect:p6,onCancel:RZ}),m0==="model"&&G$(uv,{models:U,effortLevel:V0,onSelect:CT,onCancel:RZ}),m0==="theme"&&G$(sv,{onSelect:RT,onCancel:RZ}),m0==="sound"&&G$(Fh,{onClose:()=>J$("none")}),m0==="daemon"&&G$(Dh,{status:n??{running:!1},actionStatus:K0,onAction:(N0)=>z0?.(N0),onClose:()=>J$("none")}),m0==="invite-share"&&H7&&G$(Yh,{inviteToken:H7.inviteToken,inviteLabel:H7.inviteLabel,expiresAt:H7.expiresAt,onClose:()=>{J$("none"),OT?.()}}),m0==="join-invite"&&G$(Qh,{error:NT,onSubmit:(N0)=>{J$("none"),FK?.(N0)},onCancel:()=>{J$("none"),cJ?.()}}),m0==="memory"&&G$(dv,{memories:B,mode:F,isLoading:D,onSelect:wT,onCancel:RZ}),m0==="peers"&&G$(ev,{peers:pQ.length>0?pQ:y2,sameHomeClientsAvailable:zO.length>0,onSelect:(N0)=>{J$("none"),BK?.(N0)},onCancel:RZ}),m0==="clients"&&G$(Xh,{clients:zO,onSelect:(N0)=>{J$("none"),A6(`/send ${N0.clientId} `),FT?.(N0)},onCancel:()=>{J$("none"),DT?.()}}),m0==="pair-request"&&v2&&G$(Gh,{request:v2,onAccept:()=>{J$("none"),LT?.()},onReject:()=>{J$("none"),FO?.()}}),m0==="session"&&G$(av,{sessions:C,onSelect:(N0)=>{J$("none"),f?.(N0)},onCancel:RZ,onSearch:(N0)=>l?.(N0),onPageChange:(N0)=>$0?.(N0)}),m0==="message-edit"&&h2&&G$(iv,{messages:h2,onSelect:(N0,T0)=>{J$("none"),AT?.(N0,T0)},onCancel:RZ}),m0==="none"&&!B0&&G$(lS,{userName:O,value:LK,onChange:A6,onSubmit:a,onTrigger:aQ,onExit:()=>uJ(),history:R0,onSaveInput:I0,focus:m0==="none",isStreaming:G,onDoubleEscape:()=>{if(h2&&h2.length>0)return J$("message-edit"),!0;return!1}})]}),(!A||A.showStatusBar)&&G$(DS,{arion:{name:Vu,emoji:jT,color:PT,traits:TZ?.personality?.traits?.slice(0,2)},model:Z,maxContextTokens:J,responseTime:H,metrics:L,displayMode:q,showCosts:_,activeArion:R,effortLevel:V0,autonomyLevel:C0,meshMessageCount:ET,connectionState:O0})]})]})]})}var k60=E(()=>{Oh();N60();eI();A60();rI();_60();Lh();M60();aI();iS();P1();j60();M1();V8();I60()});function f60($){let Z=!1,J=(X)=>{if(Z)return;Z=!0,$(X)};return{onAbort(){J(!1)},onAllow(X){J(!0)},onReject(){J(!1)},onDone(){queueMicrotask(()=>{if(!Z)J(!1)})}}}import{jsx as _h,jsxs as Rw0}from"react/jsx-runtime";import{useMemo as y60,useState as ww0}from"react";import{Box as Sw0,useStdout as Iw0}from"ink";function bw0($){let Z=bU[$.toLowerCase()];return{name:$,userFacingName(J){if(Z)return Z.displayName(J);return $},renderToolUseMessage(J,X){if(Z)return Z.renderInput(J,X);return JSON.stringify(J)},isReadOnly(){return!1},inputSchema:{parse(J){return J??{}}}}}function fw0($){switch($){case"low":return 0.2;case"moderate":return 0.5;case"high":return 0.9}}function v60($){let{stdout:Z}=Iw0(),J=Z?.columns??80,[X]=ww0(!1),Y=y60(()=>{if(!$.approvalRequest)return null;return f60($.onApprovalChoice)},[$.approvalRequest,$.onApprovalChoice]),Q=y60(()=>{if(!$.approvalRequest||!Y)return null;let{toolName:G,input:V,riskLevel:W}=$.approvalRequest;return{assistantMessage:kw0,tool:bw0(G),description:`${G} requires approval`,input:V??{},commandPrefix:null,riskScore:fw0(W),onAbort:Y.onAbort,onAllow:Y.onAllow,onReject:Y.onReject}},[Y,$.approvalRequest]);if(Q&&Y)return Rw0(Sw0,{flexDirection:"column",width:"100%",children:[_h(Eh,{...$}),_h(hv,{toolUseConfirm:Q,onDone:Y.onDone,verbose:X})]});return _h(Eh,{...$})}var kw0;var h60=E(()=>{k60();VF();_q();_q();kw0={message:{id:"aria-approval"}}});var Mh;var x60=E(()=>{Mh=[{name:"become",description:"Switch to another arion",usage:"/become <name>",args:["<name>"],requiresArgs:!0},{name:"arions",description:"List all arions",args:[]},{name:"hatch",description:"Create a new arion",usage:"/hatch <name> [description]",args:["<name>","[description]"],requiresArgs:!0},{name:"rest",description:"Put an arion to rest",usage:"/rest <name>",args:["<name>"],requiresArgs:!0},{name:"wake",description:"Wake a resting arion",usage:"/wake <name>",args:["<name>"],requiresArgs:!0},{name:"model",description:"Change or view current AI model",usage:"/model [name|list|refresh] [--provider <name>] [--use-env]",args:["[name|list|refresh]","[--provider <name>]","[--use-env]"]},{name:"autonomy",description:"Change permission approval policy",usage:"/autonomy [level]",args:["[level]"]},{name:"sound",description:"Open sound preferences or toggle notifications",usage:"/sound [on|off]",args:["[on|off]"]},{name:"remember",description:"Store a memory",usage:"/remember <text>",args:["<text>"],requiresArgs:!0},{name:"recall",description:"Search memories",usage:"/recall <query>",args:["<query>"],requiresArgs:!0},{name:"recall_knowledge",description:"Search learned tools (skills, procedures, techniques)",usage:"/recall_knowledge <topic>",args:["<topic>"],requiresArgs:!0},{name:"send",description:"Send a peer or same-home client message through the runtime transport",usage:"/send <peer-name|node-id|client-id> <message>",args:["<peer-name|node-id|client-id>","<message>"],requiresArgs:!0},{name:"forget",description:"Delete a memory",usage:"/forget <id>",args:["<id>"],requiresArgs:!0},{name:"memories",description:"Browse all memories",args:[]},{name:"resume",description:"Resume a previous session",args:["[session-id]"]},{name:"fork",description:"Fork the current session into a new branch",usage:"/fork [session-id] [message-count] [--stay]",args:["[session-id]","[message-count]","[--stay]"]},{name:"clear",description:"Clear the screen",args:[]},{name:"login",description:"Authenticate with provider (bedrock, anthropic, openai, google, copilot)",usage:"/login [provider] [api-key|--profile <label>|--source <gh|device>]",args:["[provider]","[api-key|flags]"]},{name:"logout",description:"Disconnect a provider or clear all credentials",usage:"/logout [provider|all]",args:["[provider|all]"]},{name:"auth",description:"Auth utilities such as importing env credentials into session scope",usage:"/auth import-env [provider ...] | /auth clear-session | /auth status-session",args:["import-env|clear-session|status-session","[provider ...]"]},{name:"help",description:"Show available commands",args:[]},{name:"daemon",description:"Open daemon control panel or run start/stop/restart",usage:"/daemon [start|stop|restart]",args:["[start|stop|restart]"]},{name:"terminal-setup",description:"Install Shift+Enter newline key binding for supported terminals",usage:"/terminal-setup",args:[]},{name:"theme",description:"View or change the color theme",usage:"/theme [name]",args:["[name]"]},{name:"invite",description:"Create an internet invite token",usage:"/invite [label]",args:["[label]"]},{name:"join",description:"Accept an internet invite token",usage:"/join [token]",args:["[token]"]},{name:"peers",description:"Show nearby peers and connect",args:[]},{name:"clients",description:"Show same-home attached clients",args:[]},{name:"exit",description:"Exit ARIA",args:[]}]});function yw0(){return"1.0.59"}var __filename="/Users/hole/aria/.bundle-stage/cli/dist/release-notes.js",dM,g60;var Ph=E(()=>{dM=yw0(),g60=["\u26A1 Search millions of lines instantly with native Rust-powered code search","\uD83E\uDDE0 Jump to definitions & find references with real LSP intelligence","\u270F\uFE0F Press Esc\xD72 to edit and fork any previous message in-place","\uD83D\uDD0A Get audio cues when tasks finish \u2014 try /sound to configure","\uD83C\uDFA8 All 87 tools now render rich, beautiful output in the terminal"]});function m60($){let Z=jh.indexOf($);return jh[(Z+1)%jh.length]}function c60($,Z){let J=EF[$],X={};if(Z.showThinking!==J.showThinking)X.showThinking=Z.showThinking;if(Z.showCosts!==J.showCosts)X.showCosts=Z.showCosts;if(Z.showToolArgs!==J.showToolArgs)X.showToolArgs=Z.showToolArgs;if(Z.toolOutput!==J.toolOutput)X.toolOutput=Z.toolOutput;if(Z.showTraces!==J.showTraces)X.showTraces=Z.showTraces;if(Z.showPipelineTiming!==J.showPipelineTiming)X.showPipelineTiming=Z.showPipelineTiming;if(Z.showStatusBar!==J.showStatusBar)X.showStatusBar=Z.showStatusBar;return X}function u60($,Z){return{...EF[$],...Z??{}}}var EF,jh;var Th=E(()=>{EF={minimal:{showThinking:!1,showCosts:!1,showToolArgs:!1,toolOutput:"hidden",showTraces:!1,showPipelineTiming:!1,showStatusBar:!1},standard:{showThinking:!0,showCosts:!0,showToolArgs:!0,toolOutput:"standard",showTraces:!1,showPipelineTiming:!1,showStatusBar:!0},debug:{showThinking:!0,showCosts:!0,showToolArgs:!0,toolOutput:"expanded",showTraces:!0,showPipelineTiming:!0,showStatusBar:!0}},jh=["minimal","standard","debug"]});function vw0($){if(!($ instanceof Error))return!1;let Z=$.message;return Z.includes("has been released")||Z.includes("aborted")}function Ch($,Z,J){if(!Z){J?.();return}Z.catch((X)=>{if(!vw0(X))P.warn(`[SessionHistoryClient] ${$} IPC failed:`,X?.message??X);if(J)try{J()}catch(Y){P.warn(`[SessionHistoryClient] ${$} local fallback also failed:`,Y?.message??Y)}})}class FH{readDb;ipc;constructor($,Z){this.readDb=$,this.ipc=Z,$.enableLowContentionMode()}withPhase($,Z){O9($);try{return Z()}finally{N9()}}listSessions(...$){return this.withPhase("session-history:listSessions",()=>this.readDb.listSessions(...$))}loadSessionMessages(...$){return this.withPhase("session-history:loadSessionMessages",()=>this.readDb.loadSessionMessages(...$))}loadSession(...$){return this.withPhase("session-history:loadSession",()=>this.readDb.loadSession(...$))}searchSessionsFts(...$){return this.withPhase("session-history:searchSessionsFts",()=>this.readDb.searchSessionsFts(...$))}searchSessionSummaries(...$){return this.withPhase("session-history:searchSessionSummaries",()=>this.readDb.searchSessionSummaries(...$))}findSessionByPrefix(...$){return this.readDb.findSessionByPrefix(...$)}getSessionRuntimeState(...$){return this.readDb.getSessionRuntimeState(...$)}getInteraction(...$){return this.readDb.getInteraction(...$)}getIncompleteSessions(...$){return this.readDb.getIncompleteSessions(...$)}getInputHistory(...$){return this.withPhase("session-history:getInputHistory",()=>this.readDb.getInputHistory(...$))}addInputHistory(...$){return this.withPhase("session-history:addInputHistory",()=>this.readDb.addInputHistory(...$))}getSessionCount(...$){return this.readDb.getSessionCount(...$)}markStaleSessionsCompleted(...$){return this.withPhase("session-history:markStaleSessionsCompleted",()=>this.readDb.markStaleSessionsCompleted(...$))}getSession(...$){return this.readDb.getSession(...$)}createSession(...$){return this.readDb.createSession(...$)}persistMessagesNonBlocking($,Z){if(Z.length===0)return;this.readDb.markSessionIncremental($),Ch("appendSessionMessages",this.ipc.appendSessionMessages?.($,Z),()=>this.readDb.addConversationMessages($,Z))}addConversationMessages($,Z){this.persistMessagesNonBlocking($,Z)}addConversationMessage($,Z){this.persistMessagesNonBlocking($,[Z])}markCompleted($){Ch("markSessionCompleted",this.ipc.markSessionCompleted?.($),()=>this.readDb.markCompleted($))}replaceConversationMessages($,Z){Ch("replaceSessionMessages",this.ipc.replaceSessionMessages?.($,Z),()=>this.readDb.replaceConversationMessages($,Z))}completeRun(...$){return this.readDb.completeRun(...$)}claimSessionForMutation(...$){return this.readDb.claimSessionForMutation(...$)}releaseSessionClaim(...$){return this.readDb.releaseSessionClaim(...$)}recordPausedRun(...$){return this.readDb.recordPausedRun(...$)}deleteSession(...$){return this.readDb.deleteSession(...$)}forkSession(...$){return this.readDb.forkSession(...$)}cancelInteraction(...$){return this.readDb.cancelInteraction(...$)}setSessionTitle(...$){return this.readDb.setSessionTitle(...$)}recordInteractionResponse(...$){return this.readDb.recordInteractionResponse(...$)}close(){this.readDb.close()}}var Rh=E(()=>{S0();AV()});function hw0($){return typeof $!=="string"||$.trim().length>0}function xw0($){let{toolCalls:Z,...J}=$;return J}function gw0($,Z,J){for(let X=Z;X<$.length;X++){let Y=$[X];if(Y.role==="tool"&&Y.toolCallId===J)return!0}return!1}function lY($){let Z=[];for(let J=0;J<$.length;J++){let X=$[J];if(X.role==="assistant"&&X.toolCalls?.length){let Y=new Set(X.toolCalls.map((K)=>K.id)),Q=new Set,G=[],V=J+1;while(V<$.length&&$[V].role==="tool"){let K=$[V];if(K.toolCallId&&Y.has(K.toolCallId)&&!Q.has(K.toolCallId))Q.add(K.toolCallId),G.push(K);V++}let W=X.toolCalls.filter((K)=>{if(Q.has(K.id))return!0;return!gw0($,V,K.id)}),H=W.filter((K)=>!Q.has(K.id));if(W.length===X.toolCalls.length)Z.push(X);else if(W.length>0)Z.push({...X,toolCalls:W});else if(hw0(X.content))Z.push(xw0(X));Z.push(...G);for(let K of H)Z.push({role:"tool",content:`[Tool execution interrupted \u2014 no result for ${K.name}]`,toolCallId:K.id});J=V-1;continue}if(X.role==="tool")continue;Z.push(X)}return Z}function p60($){let Z=[];for(let J of $)for(let X of J.content)switch(X.type){case"thinking":Z.push({id:`thinking-${crypto.randomUUID()}`,role:"thinking_history",content:X.content,wordCount:X.wordCount,durationSeconds:X.durationMs!=null?X.durationMs/1000:void 0,verb:X.verb,arionName:J.arion?.name,arionEmoji:J.arion?.emoji,arionColor:J.arion?.color});break;case"tool_use":Z.push({id:`tool-${crypto.randomUUID()}`,role:"tool_history",tool:{id:X.id,name:X.name,args:X.arguments,status:"pending",startTime:void 0,endTime:void 0}});break;case"tool_result":{let Y;for(let Q=Z.length-1;Q>=0;Q--){let G=Z[Q];if(G.role==="tool_history"&&G.tool.id===X.toolUseId){Y=G;break}}if(Y){if(Y.tool.status=X.status==="error"?"error":"complete",X.status==="error")Y.tool.error=X.content;else Y.tool.result=X.content;if(X.resultData!==void 0)Y.tool.resultData=X.resultData;if(X.durationMs!==void 0)Y.tool.durationMs=X.durationMs;if(X.usage!==void 0)Y.tool.usage=X.usage}break}case"handoff":Z.push({id:`handoff-${crypto.randomUUID()}`,role:"handoff_history",target:X.target,direction:X.direction});break;case"error":Z.push({id:`error-${crypto.randomUUID()}`,role:"error",content:X.content,suggestion:X.suggestion});break;case"text":Z.push({id:`msg-${crypto.randomUUID()}`,role:J.role,content:X.text,arion:J.arion?{name:J.arion.name,emoji:J.arion.emoji,color:J.arion.color}:void 0});break}return Z}var lM=E(()=>{TR()});class LJ{textParts=[];thinkingBlocks=[];toolUseBlocks=[];handoffBlocks=[];toolResultMessages=[];seenToolIds=new Set;toolArgsAccumulator=new Map;thinkingInProgress=!1;pendingThinkingContent="";arion;verb;tokenUsage;snapshotMessages;previewAssistantId=`preview-${Date.now()}`;ingest($){switch($.type){case"text_delta":return this.textParts.push($.content),"continue";case"thinking_start":return this.thinkingInProgress=!0,this.pendingThinkingContent="","continue";case"thinking_delta":return this.pendingThinkingContent+=$.content,"continue";case"thinking_end":{this.thinkingInProgress=!1;let Z=Array.isArray($.blocks)&&$.blocks.length>0?$.blocks[0]:void 0,J=typeof Z?.thinking==="string"?Z.thinking:this.pendingThinkingContent,X=J.split(/\s+/).filter(Boolean).length,Y={type:"thinking",content:J,wordCount:X,durationMs:$.durationMs,verb:this.verb};return this.thinkingBlocks.push(Y),this.pendingThinkingContent="","continue"}case"tool_start":{if(this.seenToolIds.has($.id))return"continue";this.seenToolIds.add($.id);let Z={type:"tool_use",id:$.id,name:$.name,arguments:$.input??{}};return this.toolUseBlocks.push(Z),"continue"}case"tool_args_delta":{let J=(this.toolArgsAccumulator.get($.id)??"")+$.args;this.toolArgsAccumulator.set($.id,J);try{let X=JSON.parse(J),Y=this.toolUseBlocks.find((Q)=>Q.type==="tool_use"&&Q.id===$.id);if(Y)Y.arguments=X}catch{}return"continue"}case"tool_result":{if($.input){let Q=this.toolUseBlocks.find((G)=>G.type==="tool_use"&&G.id===$.id);if(Q){let G=typeof $.input==="object"&&!Array.isArray($.input)?$.input:{};if(Object.keys(Q.arguments).length===0)Q.arguments=G}}let Z=$.result,J="usage"in $&&$.usage&&typeof $.usage==="object"&&typeof $.usage.inputTokens==="number"&&typeof $.usage.outputTokens==="number"&&typeof $.usage.totalTokens==="number"&&typeof $.usage.estimatedCost==="number"?$.usage:void 0,X={type:"tool_result",toolUseId:$.id,content:typeof Z.message==="string"?Z.message:"",status:Z.success===!0?"success":"error",durationMs:$.durationMs,resultData:Z.data,usage:J},Y={id:crypto.randomUUID(),role:"tool",content:[X],arion:this.arion,createdAt:new Date().toISOString()};return this.toolResultMessages.push(Y),"continue"}case"handoff_start":{let Z={type:"handoff",target:$.target,direction:"to"};return this.handoffBlocks.push(Z),"continue"}case"handoff_result":{let Z={type:"handoff",target:$.target,direction:"from"};return this.handoffBlocks.push(Z),"continue"}case"turn_complete":return"flush";case"messages_snapshot":return this.snapshotMessages=$.messages,"continue";default:return"continue"}}flush(){let $=[];if(this.thinkingInProgress&&this.pendingThinkingContent){let X=this.pendingThinkingContent.trim(),Y=X.length===0?0:X.split(/\s+/).length,Q={type:"thinking",content:this.pendingThinkingContent,wordCount:Y,verb:this.verb};this.thinkingBlocks.push(Q)}let Z=[];Z.push(...this.thinkingBlocks);let J=this.textParts.join("");if(J)Z.push({type:"text",text:J});if(Z.push(...this.toolUseBlocks),Z.push(...this.handoffBlocks),Z.length>0){let X={id:crypto.randomUUID(),role:"assistant",content:Z,arion:this.arion,tokenUsage:this.tokenUsage,createdAt:new Date().toISOString()};$.push(X)}if($.push(...this.toolResultMessages),this.toolResultMessages.length>0&&this.toolUseBlocks.length>0){let X=new Set(this.toolResultMessages.flatMap((Y)=>Y.content.filter((Q)=>Q.type==="tool_result").map((Q)=>Q.toolUseId)));for(let Y of this.toolUseBlocks){let Q=Y.id;if(Q&&!X.has(Q)){let G={id:crypto.randomUUID(),role:"tool",content:[{type:"tool_result",toolUseId:Q,content:"Tool execution cancelled by user.",status:"error"}],arion:this.arion,createdAt:new Date().toISOString()};$.push(G)}}}return this.textParts=[],this.thinkingBlocks=[],this.toolUseBlocks=[],this.handoffBlocks=[],this.toolResultMessages=[],this.seenToolIds=new Set,this.toolArgsAccumulator=new Map,this.thinkingInProgress=!1,this.pendingThinkingContent="",this.tokenUsage=void 0,this.verb=void 0,this.previewAssistantId=`preview-${Date.now()}`,$}snapshot(){let $=[];if($.push(...this.thinkingBlocks.map((X)=>({...X}))),this.thinkingInProgress&&this.pendingThinkingContent){let X=this.pendingThinkingContent,Y={type:"thinking",content:X,wordCount:X.split(/\s+/).filter(Boolean).length,verb:this.verb};$.push(Y)}let Z=this.textParts.join("");if(Z){let X=Z.lastIndexOf(`
|
|
4726
|
+
`)}mapRow($){if(!$)return;let Z=G0.safeParse($.remote_node_id?.trim());return{id:$.id,type:$.type,task:$.task,state:$.state,...$.arion_name?{arionName:$.arion_name}:{},...Z.success?{remoteNodeId:Z.data}:{},...$.remote_display_name_snapshot?{remoteDisplayNameSnapshot:$.remote_display_name_snapshot}:{},...$.tier?{tier:$.tier}:{},...$.result?{result:$.result}:{},...$.error?{error:$.error}:{},createdAt:$.created_at,updatedAt:$.updated_at,...$.metadata?{metadata:$.metadata}:{}}}create($){let Z=Date.now(),J=$.metadata?JSON.stringify($.metadata):null;this.db.transaction(()=>{this.stmtInsert.run($.id,$.type,$.task,"created",$.arionName??null,$.remoteNodeId??null,$.remoteDisplayNameSnapshot??null,$.tier??null,J,Z,Z),this.stmtInsertTransition.run($.id,null,"created",Z,null)})()}transition($,Z,J){let X=Date.now(),Q=this.stmtGet.get($)?.state??null;this.db.transaction(()=>{this.stmtUpdateState.run(Z,X,$),this.stmtInsertTransition.run($,Q,Z,X,J??null)})()}complete($,Z){let J=Date.now(),Y=this.stmtGet.get($)?.state??null;this.db.transaction(()=>{this.stmtUpdateResult.run("completed",Z??null,null,J,$),this.stmtInsertTransition.run($,Y,"completed",J,null)})()}fail($,Z){let J=Date.now(),Y=this.stmtGet.get($)?.state??null;this.db.transaction(()=>{this.stmtUpdateResult.run("failed",null,Z,J,$),this.stmtInsertTransition.run($,Y,"failed",J,Z)})()}get($){return this.mapRow(this.stmtGet.get($))}findRecoverable(){return this.stmtFindNonTerminal.all().map(($)=>this.mapRow($))}cleanup($=86400000){let Z=Date.now()-$;this.db.transaction(()=>{this.stmtCleanup.run(Z),this.stmtCleanupStore.run(Z)})()}record($){switch($.event){case"created":if(!this.get($.id))this.create({id:$.id,type:$.type,task:$.task,arionName:$.arionName,remoteNodeId:$.remoteNodeId,remoteDisplayNameSnapshot:$.remoteDisplayNameSnapshot,tier:$.tier});this.transition($.id,"running");break;case"completed":this.complete($.id,$.result);break;case"failed":this.fail($.id,$.error??"Unknown error");break;case"aborted":this.transition($.id,"aborted");break}}}var f90=E(()=>{W8()});var V8=E(()=>{aB();$_();aB();aB();aB();y80();l80();QM();iy();YM();oy();w90();sy();HM();Zv();Jv();Xv();FM();By();Oy();Qv();Gv();b90();Of();UM();Vv();f90();r_();H_();Q_();b0();g80();vy();H90()});import{jsx as GJ,jsxs as LM}from"react/jsx-runtime";import{useState as bT0,useRef as v90}from"react";import{Box as YF,Text as bY,useInput as kT0}from"ink";function Wv({currentLevel:$,onSelect:Z,onCancel:J,isActive:X=!0}){let Y=e(),Q=iZ.indexOf($),G=Q>=0?Q:0,[V,W]=bT0(G),H=v90(G),K=v90(!1),z=(B)=>{W((F)=>{let D=B(F);return H.current=D,D})},U=process.stdin.isTTY??!1;return kT0((B,F)=>{if(K.current)return;if(F.upArrow)z((D)=>Math.max(0,D-1));else if(F.downArrow)z((D)=>Math.min(iZ.length-1,D+1));else if(F.return)K.current=!0,Z(iZ[H.current]);else if(W$(B,F))K.current=!0,J()},{isActive:X&&U}),LM(YF,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.secondary,paddingX:1,paddingY:1,width:48,children:[GJ(YF,{marginBottom:1,children:GJ(bY,{bold:!0,children:"Autonomy Level"})}),GJ(YF,{marginBottom:1,children:LM(bY,{children:["Current: ",GJ(bY,{bold:!0,children:$})]})}),iZ.map((B,F)=>{let D=F===V,O=D?"\u25CF":"\u25CB",L=B==="high"||B==="full";return LM(YF,{gap:1,children:[GJ(bY,{color:D?Y.colors.primary:void 0,children:O}),GJ(bY,{color:D?Y.colors.primary:L?Y.colors.warning:void 0,bold:D,children:B.padEnd(10)}),GJ(bY,{color:Y.colors.textMuted,children:fT0[B]})]},B)}),GJ(YF,{marginTop:1,children:LM(bY,{color:Y.colors.textMuted,children:["\u2191\u2193"," Navigate Enter Select Esc Cancel"]})})]})}var fT0;var h90=E(()=>{E0();V8();fT0={minimal:"Confirm all tool calls",balanced:"Confirm dangerous only",high:"Auto-approve everything",full:"Auto-approve everything"}});import{jsxs as OA$,jsx as NA$}from"react/jsx-runtime";import{Box as AA$,Text as qA$}from"ink";var x90=E(()=>{E0()});import{jsx as kY,jsxs as AM}from"react/jsx-runtime";import{Box as qM,Text as fY}from"ink";function hT0($){if($<1000)return`${Math.round($)}ms`;if($<60000)return`${($/1000).toFixed(1)}s`;let Z=Math.floor($/60000),J=Math.round($%60000/1000);return`${Z}m ${J}s`}function g90($,Z,J){let X=Math.round(Z*$),Y=Math.max(yT0,Math.round(J*$)),Q=Math.max(0,$-X-Y);return"\u2591".repeat(X)+"\u2588".repeat(Y)+"\u2591".repeat(Q)}function Kv({spans:$,width:Z}){let J=e(),X=Z??vT0,Y=$.filter((K)=>K.endTime!==void 0||K.durationMs!==void 0);if(Y.length===0)return kY(qM,{children:kY(fY,{dimColor:!0,children:"(no completed spans)"})});let Q=Y.map((K)=>{let z=K.durationMs??K.endTime-K.startTime,U=K.endTime??K.startTime+z;return{...K,durationMs:z,endTime:U}}),G=Math.min(...Q.map((K)=>K.startTime)),W=Math.max(...Q.map((K)=>K.endTime))-G;if(W<=0)return kY(qM,{flexDirection:"column",children:Q.map((K)=>AM(fY,{dimColor:!0,children:[Hv[K.spanType]??K.spanType," ","\u2588"," 0ms (",K.name,")"]},K.spanId))});let H=Math.max(...Q.map((K)=>{let z=Hv[K.spanType]??K.spanType;return(K.parentSpanId!==void 0?2:0)+z.length}));return kY(qM,{flexDirection:"column",children:Q.map((K)=>{let z=K.parentSpanId!==void 0,U=z?" ":"",B=Hv[K.spanType]??K.spanType,F=(U+B).padEnd(H),D=(K.startTime-G)/W,O=K.durationMs/W,L=g90(X,D,O),q=hT0(K.durationMs),A=K.spanType==="tool_execution"&&K.name?` (${K.name})`:"";return AM(qM,{children:[AM(fY,{color:J.colors.textMuted,children:[" ",F]}),kY(fY,{children:" "}),kY(fY,{color:z?J.colors.info:J.colors.success,children:L}),kY(fY,{children:" "}),AM(fY,{dimColor:!0,children:[q,A]})]},K.spanId)})})}var yT0=1,vT0=20,Hv;var m90=E(()=>{E0();Hv={model_call:"model_call",tool_execution:"tool_exec",handoff:"handoff",approval:"approval",session_phase:"session",runner_phase:"runner"}});import{jsxs as tW}from"react/jsx-runtime";import{Box as c90,Text as EM}from"ink";function u90($){if($<1000)return`${Math.round($)}ms`;return`${($/1000).toFixed(2)}s`}function zv({report:$}){let Z=e();if(!$||$.phases.length===0)return null;return tW(c90,{flexDirection:"column",marginTop:1,children:[tW(EM,{color:Z.colors.textMuted,children:[" Pipeline timing (",u90($.totalMs),")"]}),$.phases.map((J)=>tW(c90,{children:[tW(EM,{color:Z.colors.info,children:[" ",J.phase.padEnd(24)]}),tW(EM,{color:Z.colors.text,children:[" ",u90(J.durationMs)]}),tW(EM,{color:Z.colors.textMuted,children:[" (",J.pct,"%)"]})]},`${J.phase}:${J.durationMs}`))]})}var p90=E(()=>{E0()});import{jsxs as d90,jsx as xT0}from"react/jsx-runtime";import{useRef as gT0}from"react";import{Box as mT0,Text as l90}from"ink";import cT0 from"gradient-string";function n90($){if($<60)return`${$}s`;let Z=Math.floor($/60),J=$%60;return`${Z}m ${J}s`}function uT0($){if($>=1000)return`${($/1000).toFixed(1)}k tokens`;return`${$} tokens`}function Bv({state:$,elapsedSeconds:Z,totalTokens:J,thoughtForSeconds:X,currentVerb:Y}){let Q=[...a90,...[...a90].reverse()],G=Math.floor(Date.now()/120)%Q.length,V=gT0(j1().present),W=Y||V.current,H=e(),K=G%Uv.length,z=[...Uv.slice(K),...Uv.slice(0,K)],U=cT0(z),B=`${Q[G]} ${W}\u2026`,F=U(B),D=n90(Z),O=uT0(J),L;if($==="thinking")L="(thinking)";else if(X&&X>0)L=`(${D} \xB7 \u2193 ${O} \xB7 thought for ${n90(X)})`;else L=`(${D} \xB7 \u2193 ${O} \xB7 esc to cancel)`;return d90(mT0,{flexDirection:"row",marginTop:1,children:[d90(l90,{children:[F," "]}),xT0(l90,{color:H.colors.textMuted,children:L})]})}var Uv,a90;var i90=E(()=>{E0();EV();Uv=["#5f97cd","#7baed4","#97c4db","#7baed4"],a90=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"]});import{jsxs as s90,jsx as o90}from"react/jsx-runtime";import{Box as pT0,Text as r90}from"ink";function Fv($){return $>=70?"high":$>=30?"moderate":"low"}function dT0($){let Z=e();switch($){case"low":return{highlightColor:Z.colors.success,textColor:Z.colors.primary};case"moderate":return{highlightColor:Z.colors.warning,textColor:Z.colors.warning};case"high":return{highlightColor:Z.colors.error,textColor:Z.colors.error}}}function Z5($){if($===null)return e().colors.primary;let Z=Fv($);return dT0(Z).textColor}function lT0({riskScore:$}){let Z=Fv($);return s90(r90,{color:Z5($),children:["Risk: ",Z]})}function c1({title:$,riskScore:Z}){return s90(pT0,{flexDirection:"column",children:[o90(r90,{bold:!0,color:e().colors.primary,children:$}),Z!==null&&o90(lT0,{riskScore:Z})]})}var yY=E(()=>{E0()});function J5($,Z){}import{structuredPatch as aT0}from"diff";function _M($,Z,J,X=3){let Y=aT0($,$,Z,J,"","",{context:X}),Q=0,G=0,V=Y.hunks.map((W)=>{let H=[],K=W.oldStart,z=W.newStart;for(let U of W.lines){let B=U.slice(1);if(U.startsWith("+"))H.push({type:"added",content:B,newLineNo:z++}),Q++;else if(U.startsWith("-"))H.push({type:"removed",content:B,oldLineNo:K++}),G++;else H.push({type:"unchanged",content:B,oldLineNo:K++,newLineNo:z++})}return{oldStart:W.oldStart,oldLines:W.oldLines,newStart:W.newStart,newLines:W.newLines,lines:H}});return{filePath:$,hunks:V,additions:Q,deletions:G}}var Dv=()=>{};import{jsx as MM,jsxs as nT0}from"react/jsx-runtime";import{existsSync as iT0,readFileSync as oT0}from"fs";import{useMemo as t90}from"react";import{Box as Ov,Text as sT0}from"ink";import{relative as rT0}from"path";function e90({file_path:$,new_string:Z,old_string:J,verbose:X,useBorder:Y=!0,width:Q}){let G=t90(()=>iT0($)?oT0($,"utf8"):"",[$]),V=t90(()=>{let W=G.replace(J,Z);return _M($,G,W)},[$,G,J,Z]);return MM(Ov,{flexDirection:"column",children:nT0(Ov,{borderColor:e().colors.secondary,borderStyle:Y?"round":void 0,flexDirection:"column",paddingX:1,children:[MM(Ov,{paddingBottom:1,children:MM(sT0,{bold:!0,children:X?$:rT0(process.cwd(),$)})}),MM(vX,{diff:V,dim:!1,width:Q,showHeader:!1})]})})}var $40=E(()=>{TV();E0();Dv()});import{jsx as Nv,jsxs as tT0}from"react/jsx-runtime";import{Box as eT0,Text as Lv}from"ink";function Z40({isFocused:$,isSelected:Z,smallPointer:J,children:X}){let Y=e();return tT0(eT0,{gap:1,children:[$&&Nv(Lv,{color:Y.colors.primary,children:J?ZC0:$C0}),Nv(Lv,{color:$?Y.colors.primary:void 0,bold:Z,children:X}),Z&&Nv(Lv,{color:Y.colors.success,children:JC0})]})}var $C0="\u276F",ZC0="\u25BE",JC0="\u2714";var J40=E(()=>{E0()});var PM;var X40=E(()=>{VJ();PM=class PM extends Map{first;constructor($){let Z=[],J,X,Y=0;for(let Q of $){let G={...Q,previous:X,next:void 0,index:Y};if(X)X.next=G;J||=G;let V="value"in Q?Q.value:Av(Q);Z.push([V,G]),Y++,X=G}super(Z);this.first=J}}});import{isDeepStrictEqual as XC0}from"util";import{useReducer as YC0,useCallback as qv,useMemo as QC0,useState as GC0,useEffect as Ev}from"react";var VC0=($,Z)=>{switch(Z.type){case"focus-next-option":{if(!$.focusedValue)return $;let J=$.optionMap.get($.focusedValue);if(!J)return $;let X=J.next;while(X&&!("value"in X))X=X.next;if(!X)return $;if(!(X.index>=$.visibleToIndex))return{...$,focusedValue:X.value};let Q=Math.min($.optionMap.size,$.visibleToIndex+1),G=Q-$.visibleOptionCount;return{...$,focusedValue:X.value,visibleFromIndex:G,visibleToIndex:Q}}case"focus-previous-option":{if(!$.focusedValue)return $;let J=$.optionMap.get($.focusedValue);if(!J)return $;let X=J.previous;while(X&&!("value"in X))X=X.previous;if(!X)return $;if(!(X.index<=$.visibleFromIndex))return{...$,focusedValue:X.value};let Q=Math.max(0,$.visibleFromIndex-1),G=Q+$.visibleOptionCount;return{...$,focusedValue:X.value,visibleFromIndex:Q,visibleToIndex:G}}case"select-focused-option":return{...$,previousValue:$.value,value:$.focusedValue};case"reset":return Z.state;case"set-focus":return{...$,focusedValue:Z.value}}},_v=($)=>$.flatMap((Z)=>{if("options"in Z){let J=_v(Z.options),X=J.flatMap((Q)=>("value"in Q)?Q.value:[]);return[...Z.header!==void 0?[{header:Z.header,optionValues:X}]:[],...J]}return Z}),Y40=({visibleOptionCount:$,defaultValue:Z,options:J})=>{let X=_v(J),Y=typeof $==="number"?Math.min($,X.length):X.length,Q=new PM(X),G=Q.first,V=G&&"value"in G?G.value:void 0;return{optionMap:Q,visibleOptionCount:Y,focusedValue:V,visibleFromIndex:0,visibleToIndex:Y,previousValue:Z,value:Z}},Q40=({visibleOptionCount:$=5,options:Z,defaultValue:J,onChange:X,onFocus:Y,focusValue:Q})=>{let G=_v(Z),[V,W]=YC0(VC0,{visibleOptionCount:$,defaultValue:J,options:Z},Y40),[H,K]=GC0(G);if(G!==H&&!XC0(G,H))W({type:"reset",state:Y40({visibleOptionCount:$,defaultValue:J,options:Z})}),K(G);let z=qv(()=>{W({type:"focus-next-option"})},[]),U=qv(()=>{W({type:"focus-previous-option"})},[]),B=qv(()=>{W({type:"select-focused-option"})},[]),F=QC0(()=>{return G.map((D,O)=>({...D,index:O})).slice(V.visibleFromIndex,V.visibleToIndex)},[G,V.visibleFromIndex,V.visibleToIndex]);return Ev(()=>{if(V.value&&V.previousValue!==V.value)X?.(V.value)},[V.previousValue,V.value,Z,X]),Ev(()=>{if(V.focusedValue)Y?.(V.focusedValue)},[V.focusedValue,Y]),Ev(()=>{if(Q)W({type:"set-focus",value:Q})},[Q]),{focusedValue:V.focusedValue,visibleFromIndex:V.visibleFromIndex,visibleToIndex:V.visibleToIndex,value:V.value,visibleOptions:F,focusNextOption:z,focusPreviousOption:U,selectFocusedOption:B}};var G40=E(()=>{X40()});import{useInput as WC0}from"ink";var V40=({isDisabled:$=!1,state:Z})=>{WC0((J,X)=>{if(X.downArrow)Z.focusNextOption();if(X.upArrow)Z.focusPreviousOption();if(X.return)Z.selectFocusedOption()},{isActive:!$})};var W40=()=>{};import{jsx as Mv,Fragment as HC0,jsxs as KC0}from"react/jsx-runtime";import{Box as zC0,Text as UC0}from"ink";function u1({isDisabled:$=!1,visibleOptionCount:Z=5,highlightText:J,options:X,defaultValue:Y,onChange:Q,onFocus:G,focusValue:V}){let W=Q40({visibleOptionCount:Z,options:X,defaultValue:Y,onChange:Q,onFocus:G,focusValue:V});V40({isDisabled:$,state:W});let H=e();return Mv(zC0,{flexDirection:"column",children:W.visibleOptions.map((K)=>{let z="value"in K?K.value:Av(K),U=!$&&W.focusedValue!==void 0&&("value"in K?W.focusedValue===K.value:K.optionValues.includes(W.focusedValue)),B=!!W.value&&("value"in K?W.value===K.value:K.optionValues.includes(W.value)),F="header"in K,D="label"in K?K.label:K.header,O=D;if(J&&D.includes(J)){let L=D.indexOf(J);O=KC0(HC0,{children:[D.slice(0,L),Mv(UC0,{color:H.colors.primary,bold:!0,children:J}),D.slice(L+J.length)]})}return Mv(Z40,{isFocused:U,isSelected:B,smallPointer:F,children:O},z)})})}var Av=($)=>`HEADER-${$.optionValues.join(",")}`;var VJ=E(()=>{J40();G40();W40();E0()});import{jsx as jM,jsxs as Pv}from"react/jsx-runtime";import{Box as H40,Text as K40}from"ink";import{useMemo as BC0}from"react";import{basename as FC0,extname as DC0,isAbsolute as OC0,resolve as jv}from"path";import NC0 from"chalk";function LC0($){return(OC0($)?jv($):jv(process.cwd(),$)).startsWith(jv(process.cwd()))}function AC0($){let Z=LC0($)?[{label:"Yes, and don't ask again this session",value:"yes-dont-ask-again"}]:[];return[{label:"Yes",value:"yes"},...Z,{label:`No, and provide instructions (${NC0.bold.hex(e().colors.warning)("esc")})`,value:"no"}]}function z40({toolUseConfirm:$,onDone:Z,verbose:J}){let{columns:X}=Y9(),{file_path:Y,new_string:Q,old_string:G}=$.input,V=BC0(()=>({completion_type:"str_replace_single",language_name:qC0(Y)}),[Y]);return J5($,V),Pv(H40,{flexDirection:"column",borderStyle:"round",borderColor:Z5($.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[jM(c1,{title:"Edit file",riskScore:$.riskScore}),jM(e90,{file_path:Y,new_string:Q,old_string:G,verbose:J,width:X-12}),Pv(H40,{flexDirection:"column",children:[Pv(K40,{children:["Do you want to make this edit to ",jM(K40,{bold:!0,children:FC0(Y)}),"?"]}),jM(u1,{options:AC0(Y),onChange:(W)=>{switch(W){case"yes":$.onAllow("temporary"),Z();break;case"yes-dont-ask-again":$.onAllow("permanent"),Z();break;case"no":$.onReject(),Z();break}}})]})]})}function qC0($){let Z=DC0($);return Z?Z.slice(1):"unknown"}var U40=E(()=>{E0();yY();$40();P1();VJ()});import QF from"chalk";function EC0($){let J=$.replace(/'[^']*'/g,"").replace(/"[^"]*"/g,"");if(/&&|\|\||[;|]/.test(J))return!0;if(/`/.test(J))return!0;if(/\$\(/.test(J))return!0;return!1}function B40({toolUseConfirm:$,command:Z}){let J=!EC0(Z)&&$.commandPrefix&&!$.commandPrefix.commandInjectionDetected,X=GF($),Y=J&&X!==null,Q=[];if(Y)Q=[{label:`Yes, and don't ask again for ${QF.bold(X)} commands in ${QF.bold(process.cwd())}`,value:"yes-dont-ask-again-prefix"}];else if(J)Q=[{label:`Yes, and don't ask again for ${QF.bold(Z)} commands in ${QF.bold(process.cwd())}`,value:"yes-dont-ask-again-full"}];return[{label:"Yes",value:"yes"},...Q,{label:`No, and provide instructions (${QF.bold.hex(e().colors.warning)("esc")})`,value:"no"}]}var F40=E(()=>{VF();E0()});import{jsx as WF,jsxs as Tv}from"react/jsx-runtime";import{Box as Cv,Text as Rv}from"ink";import{useMemo as _C0}from"react";function D40({toolUseConfirm:$,onDone:Z}){let J=e(),{command:X}=$.tool.inputSchema.parse($.input),Y=_C0(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return J5($,Y),Tv(Cv,{flexDirection:"column",borderStyle:"round",borderColor:J.colors.primary,marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[WF(c1,{title:"Bash command",riskScore:$.riskScore}),Tv(Cv,{flexDirection:"column",paddingX:2,paddingY:1,children:[WF(Rv,{children:$.tool.renderToolUseMessage({command:X},{verbose:!1})}),WF(Rv,{color:J.colors.textMuted,children:$.description})]}),Tv(Cv,{flexDirection:"column",children:[WF(Rv,{children:"Do you want to proceed?"}),WF(u1,{options:B40({toolUseConfirm:$,command:X}),onChange:(Q)=>{switch(Q){case"yes":$.onAllow("temporary"),Z();break;case"yes-dont-ask-again-prefix":{if(GF($)!==null)$.onAllow("permanent");else $.onAllow("temporary");Z();break}case"yes-dont-ask-again-full":$.onAllow("permanent"),Z();break;case"no":$.onReject(),Z();break}}})]})]})}var O40=E(()=>{E0();VF();yY();VJ();F40()});import{jsx as HF,jsxs as TM}from"react/jsx-runtime";import{Box as wv,Text as CM}from"ink";import{useMemo as MC0}from"react";import Sv from"chalk";function RM({toolUseConfirm:$,onDone:Z,verbose:J}){let X=e(),Y=$.tool.userFacingName($.input),Q=Y.endsWith(" (MCP)")?Y.slice(0,-6):Y,G=MC0(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return J5($,G),TM(wv,{flexDirection:"column",borderStyle:"round",borderColor:Z5($.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[HF(c1,{title:"Tool use",riskScore:$.riskScore}),TM(wv,{flexDirection:"column",paddingX:2,paddingY:1,children:[TM(CM,{children:[Q,"(",$.tool.renderToolUseMessage($.input,{verbose:J}),")",Y.endsWith(" (MCP)")?HF(CM,{color:X.colors.textMuted,children:" (MCP)"}):""]}),HF(CM,{color:X.colors.textMuted,children:$.description})]}),TM(wv,{flexDirection:"column",children:[HF(CM,{children:"Do you want to proceed?"}),HF(u1,{options:[{label:"Yes",value:"yes"},{label:`Yes, and don't ask again for ${Sv.bold(Q)} commands in ${Sv.bold(process.cwd())}`,value:"yes-dont-ask-again"},{label:`No, and provide instructions (${Sv.bold.hex(e().colors.warning)("esc")})`,value:"no"}],onChange:(V)=>{switch(V){case"yes":$.onAllow("temporary"),Z();break;case"yes-dont-ask-again":$.onAllow("permanent"),Z();break;case"no":$.onReject(),Z();break}}})]})]})}var Iv=E(()=>{E0();yY();VJ()});import{jsx as wM,jsxs as PC0}from"react/jsx-runtime";import{existsSync as jC0,readFileSync as TC0}from"fs";import{useMemo as bv}from"react";import{Box as N40,Text as CC0}from"ink";import{extname as RC0,relative as wC0}from"path";function L40({file_path:$,content:Z,verbose:J,width:X}){let Y=bv(()=>jC0($),[$]),Q=bv(()=>{if(!Y)return"";return TC0($,"utf8")},[$,Y]),G=bv(()=>{if(!Y)return null;return _M($,Q,Z)},[Y,$,Q,Z]);return PC0(N40,{borderColor:e().colors.secondary,borderStyle:"round",flexDirection:"column",paddingX:1,children:[wM(N40,{paddingBottom:1,children:wM(CC0,{bold:!0,children:J?$:wC0(process.cwd(),$)})}),G?wM(vX,{diff:G,dim:!1,width:X,showHeader:!1}):wM(C1,{code:Z||"(No content)",language:RC0($).slice(1)})]})}var A40=E(()=>{TV();E0();RV();Dv()});import{jsx as KF,jsxs as kv}from"react/jsx-runtime";import{Box as fv,Text as q40}from"ink";import{useMemo as E40}from"react";import{basename as SC0,extname as IC0}from"path";import{existsSync as bC0}from"fs";import kC0 from"chalk";function _40({toolUseConfirm:$,onDone:Z,verbose:J}){let{file_path:X,content:Y}=$.input,Q=E40(()=>bC0(X),[X]),G=E40(()=>({completion_type:"write_file_single",language_name:fC0(X)}),[X]),{columns:V}=Y9();return J5($,G),kv(fv,{flexDirection:"column",borderStyle:"round",borderColor:Z5($.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[KF(c1,{title:`${Q?"Edit":"Create"} file`,riskScore:$.riskScore}),KF(fv,{flexDirection:"column",children:KF(L40,{file_path:X,content:Y,verbose:J,width:V-12})}),kv(fv,{flexDirection:"column",children:[kv(q40,{children:["Do you want to ",Q?"make this edit to":"create"," ",KF(q40,{bold:!0,children:SC0(X)}),"?"]}),KF(u1,{options:[{label:"Yes",value:"yes"},{label:"Yes, and don't ask again this session",value:"yes-dont-ask-again"},{label:`No, and provide instructions (${kC0.bold.hex(e().colors.warning)("esc")})`,value:"no"}],onChange:(W)=>{switch(W){case"yes":$.onAllow("temporary"),Z();break;case"yes-dont-ask-again":$.onAllow("permanent"),Z();break;case"no":$.onReject(),Z();break}}})]})]})}function fC0($){let Z=IC0($);return Z?Z.slice(1):"unknown"}var M40=E(()=>{E0();yY();A40();P1();VJ()});import{jsx as eW,jsxs as yv}from"react/jsx-runtime";import{Box as vv,Text as P40}from"ink";import{useMemo as yC0}from"react";import vC0 from"chalk";import{isAbsolute as hC0,resolve as j40}from"path";function SM($){return hC0($)?j40($):j40(process.cwd(),$)}function xC0($){return SM($).startsWith(SM(process.cwd()))}function mC0(){gC0=!0}function lC0($){let Z=$.tool.name;if(cC0.has(Z))return"file_path";if(uC0.has(Z))return"path";if(pC0.has(Z))return"notebook_path";return null}function aC0($){return dC0.has($.tool.name)}function nC0($){let Z=lC0($),J=$.input;if(Z&&Z in J)if(typeof J[Z]==="string")return SM(J[Z]);else return SM(process.cwd());return null}function T40({toolUseConfirm:$,onDone:Z,verbose:J}){let X=nC0($);if(!X)return eW(RM,{toolUseConfirm:$,onDone:Z,verbose:J});return eW(oC0,{toolUseConfirm:$,path:X,onDone:Z,verbose:J})}function iC0($,Z){if($.tool.isReadOnly())return[];return xC0(Z)?[{label:"Yes, and don't ask again for file edits this session",value:"yes-dont-ask-again"}]:[]}function oC0({toolUseConfirm:$,path:Z,onDone:J,verbose:X}){let Y=$.tool.userFacingName($.input),G=`${$.tool.isReadOnly()?"Read":"Edit"} ${aC0($)?"files":"file"}`,V=yC0(()=>({completion_type:"tool_use_single",language_name:"none"}),[]);return J5($,V),yv(vv,{flexDirection:"column",borderStyle:"round",borderColor:Z5($.riskScore),marginTop:1,paddingLeft:1,paddingRight:1,paddingBottom:1,children:[eW(c1,{title:G,riskScore:$.riskScore}),eW(vv,{flexDirection:"column",paddingX:2,paddingY:1,children:yv(P40,{children:[Y,"(",$.tool.renderToolUseMessage($.input,{verbose:X}),")"]})}),yv(vv,{flexDirection:"column",children:[eW(P40,{children:"Do you want to proceed?"}),eW(u1,{options:[{label:"Yes",value:"yes"},...iC0($,Z),{label:`No, and provide instructions (${vC0.bold.hex(e().colors.warning)("esc")})`,value:"no"}],onChange:(W)=>{switch(W){case"yes":$.onAllow("temporary"),J();break;case"yes-dont-ask-again":mC0(),$.onAllow("permanent"),J();break;case"no":$.onReject(),J();break}}})]})]})}var gC0=!1,cC0,uC0,pC0,dC0;var C40=E(()=>{E0();yY();Iv();VJ();cC0=new Set(["Edit","file_edit","str_replace_editor","Write","file_write","create_file","Read","file_read","read_file"]),uC0=new Set(["Glob","glob","Grep","grep","LS","ls"]),pC0=new Set(["NotebookEdit","notebook_edit","NotebookRead","notebook_read"]),dC0=new Set(["Glob","glob","Grep","grep","LS","ls"])});import{jsx as sC0}from"react/jsx-runtime";import{useInput as rC0}from"ink";import*as R40 from"react";function JR0($){if(tC0.has($))return z40;if(eC0.has($))return _40;if($R0.has($))return D40;if(ZR0.has($))return T40;return RM}function GF($){return $.commandPrefix&&!$.commandPrefix.commandInjectionDetected&&$.commandPrefix.commandPrefix||null}function hv({toolUseConfirm:$,onDone:Z,verbose:J}){let X=R40.useRef(!1);rC0((Q,G)=>{if(X.current)return;if(G.ctrl&&Q==="c"||W$(Q,G))X.current=!0,$.onReject(),Z()});let Y=JR0($.tool.name);return sC0(Y,{toolUseConfirm:$,onDone:Z,verbose:J})}var tC0,eC0,$R0,ZR0;var VF=E(()=>{U40();O40();Iv();M40();C40();tC0=new Set(["Edit","file_edit","str_replace_editor"]),eC0=new Set(["Write","file_write","create_file"]),$R0=new Set(["Bash","bash","execute_command"]),ZR0=new Set(["Glob","glob","Grep","grep","LS","ls","Read","file_read","read_file","NotebookRead","notebook_read","NotebookEdit","notebook_edit"])});import{jsx as IM,jsxs as $H}from"react/jsx-runtime";import{useState as w40,useEffect as S40}from"react";import{Box as bM,Text as ZH,useInput as XR0}from"ink";function xv($){return/\s/.test($.trimStart())}function YR0($){return $.trimStart().split(/\s+/,1)[0]??""}function gv({commands:$,initialFilter:Z="",onSelect:J,onHandOffInput:X,onCancel:Y}){let[Q,G]=w40(0),[V,W]=w40(Z),H=YR0(V).toLowerCase(),K=$.filter((B)=>B.name.toLowerCase().includes(H));S40(()=>{G((B)=>Math.min(B,Math.max(0,K.length-1)))},[K.length]),S40(()=>{if(!X||!xv(V))return;X(`/${V}`)},[V,X]);let z=K.length>0?Math.min(Q,K.length-1):0,U=process.stdin.isTTY??!1;return XR0((B,F)=>{if(W$(B,F)){Y();return}if(F.return&&xv(V)&&X){X(`/${V}`);return}if(F.return&&K.length>0){J(K[z]);return}if(F.upArrow){G((D)=>Math.max(0,D-1));return}if(F.downArrow){G((D)=>Math.min(K.length-1,D+1));return}if(F.backspace||F.delete){W((D)=>D.slice(0,-1));return}if(B&&!F.ctrl&&!F.meta){let D=V+B;if(X&&xv(D)){X(`/${D}`);return}W(D)}},{isActive:U}),$H(bM,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,children:[$H(bM,{marginBottom:1,children:[IM(ZH,{bold:!0,children:"Commands"}),V&&$H(ZH,{dimColor:!0,children:[" /",V]})]}),K.map((B,F)=>$H(bM,{children:[$H(ZH,{inverse:F===z,children:["/",B.name]}),$H(ZH,{dimColor:!0,children:[" ",B.description]})]},B.name)),K.length===0&&IM(ZH,{dimColor:!0,children:"No matching commands"}),IM(bM,{marginTop:1,children:IM(ZH,{dimColor:!0,children:"\u2191\u2193 navigate \u23CE select esc cancel"})})]})}var I40=()=>{};import{jsx as zF,jsxs as JH}from"react/jsx-runtime";import{useState as b40,useEffect as QR0}from"react";import{Box as kM,Text as vY,useInput as GR0}from"ink";function mv({arions:$,initialFilter:Z="",statusFilter:J="all",onSelect:X,onCancel:Y}){let[Q,G]=b40(0),[V,W]=b40(Z),H=$.filter((U)=>{if(J==="active"&&U.isResting)return!1;if(J==="resting"&&!U.isResting)return!1;return U.name.toLowerCase().includes(V.toLowerCase())});QR0(()=>{G((U)=>Math.min(U,Math.max(0,H.length-1)))},[H.length]);let K=H.length>0?Math.min(Q,H.length-1):0,z=process.stdin.isTTY??!1;return GR0((U,B)=>{if(W$(U,B)){Y();return}if(B.return&&H.length>0){X(H[K]);return}if(B.upArrow){G((F)=>Math.max(0,F-1));return}if(B.downArrow){G((F)=>Math.min(H.length-1,F+1));return}if(B.backspace||B.delete){W((F)=>F.slice(0,-1));return}if(U&&!B.ctrl&&!B.meta)W((F)=>F+U)},{isActive:z}),JH(kM,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,children:[JH(kM,{marginBottom:1,children:[zF(vY,{bold:!0,children:J==="active"?"Active Arions":J==="resting"?"Resting Arions":"Arions"}),V&&JH(vY,{dimColor:!0,children:[" @",V]})]}),H.length===0&&zF(vY,{dimColor:!0,children:$.length===0?"No arions available. Create one with /hatch":J==="active"?"No active arions":J==="resting"?"No resting arions":"No matching arions"}),H.map((U,B)=>{let F=ez(U.color),D=U.isActive?" (active)":U.isResting?" (resting)":"";return JH(kM,{children:[JH(vY,{inverse:B===K,children:[U.emoji," ",zF(vY,{color:F,children:U.name})]}),JH(vY,{dimColor:!0,children:[" ",U.description,D]})]},U.name)}),zF(kM,{marginTop:1,children:zF(vY,{dimColor:!0,children:"\u2191\u2193 navigate \u23CE select esc cancel"})})]})}var k40=E(()=>{UV()});import{jsx as LZ,jsxs as p1}from"react/jsx-runtime";import{useState as cv,useEffect as VR0,useMemo as WR0}from"react";import{Box as WJ,Text as y4,useInput as HR0}from"ink";function zR0($){return KR0[$]||$}function y40($){let Z=f40.indexOf($);return Z>=0?Z:f40.length}function UR0($,Z,J){let X=new Map;for(let G of $){let V=G.provider||"other",W=X.get(V)??[];W.push(G),X.set(V,W)}let Y={powerful:0,balanced:1,fast:2,ensemble:3},Q=[...X.entries()].sort(([G],[V])=>y40(G)-y40(V));for(let[G,V]of Q){Z.push({type:"header",label:zR0(G),provider:G});let W=(U)=>{if(!U)return"balanced";let B=U.toLowerCase();if(B.includes("deep"))return"powerful";if(B.includes("quick"))return"fast";return"balanced"},H=[/^claude-opus-|^opus-|^bedrock-opus-/,/^claude-sonnet-|^sonnet-|^bedrock-sonnet-/,/^claude-haiku-|^haiku-|^bedrock-haiku-/,/^claude-/,/^gpt-/,/^o[0-9]/,/^gemini-/],K=(U)=>{let B=U.toLowerCase();for(let F=0;F<H.length;F++)if(H[F].test(B))return F;return H.length},z=[...V].sort((U,B)=>{let F=K(U.name),D=K(B.name);if(F!==D)return F-D;return B.name.localeCompare(U.name)});for(let U of z)J.push(Z.length),Z.push({type:"model",model:U})}}function uv({models:$,initialFilter:Z="",effortLevel:J,onSelect:X,onCancel:Y}){let[Q,G]=cv(Z),[V,W]=cv(J??"high"),K=$.filter((A)=>A.name.toLowerCase().includes(Q.toLowerCase())),{items:z,selectableIndices:U}=WR0(()=>{if(!K.some((M)=>M.provider))return{items:K.map((M)=>({type:"model",model:M})),selectableIndices:K.map((M,T)=>T)};let N=[],_=[];return UR0(K,N,_),{items:N,selectableIndices:_}},[K]),B=U.findIndex((A)=>{let N=z[A];return N?.type==="model"&&N.model.isCurrent}),[F,D]=cv(B>=0?B:0);VR0(()=>{D((A)=>Math.min(A,Math.max(0,U.length-1)))},[U.length]);let O=U.length>0?Math.min(F,U.length-1):0,L=process.stdin.isTTY??!1;HR0((A,N)=>{if(W$(A,N)){Y();return}if(N.return&&U.length>0){let _=U[O],M=z[_];if(M.type==="model")X(M.model,V);return}if(N.leftArrow){W((_)=>{let M=UF.indexOf(_);return UF[Math.max(0,M-1)]});return}if(N.rightArrow){W((_)=>{let M=UF.indexOf(_);return UF[Math.min(UF.length-1,M+1)]});return}if(N.upArrow){D((_)=>Math.max(0,_-1));return}if(N.downArrow){D((_)=>Math.min(U.length-1,_+1));return}if(N.backspace||N.delete){G((_)=>_.slice(0,-1));return}if(A&&!N.ctrl&&!N.meta)G((_)=>_+A)},{isActive:L});let q=U.length>0?` [${O+1}/${U.length}]`:"";return p1(WJ,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,children:[p1(WJ,{marginBottom:1,children:[LZ(y4,{bold:!0,children:"Model"}),LZ(y4,{dimColor:!0,children:q}),LZ(y4,{children:" "}),Q?LZ(y4,{color:"cyan",children:Q}):LZ(y4,{dimColor:!0,children:"Type to search..."})]}),K.length===0&&LZ(y4,{dimColor:!0,children:"No matching models"}),(()=>{let A=z.reduce((N,_)=>{if(_.type!=="model")return N;return Math.max(N,_.model.name.length)},0);return z.map((N,_)=>{if(N.type==="header"){let a=Ca(N.provider);return p1(WJ,{marginTop:_>0?1:0,children:[p1(y4,{color:a.color,children:[a.icon," "]}),LZ(y4,{bold:!0,color:a.color,children:N.label})]},`header-${N.label}-${_}`)}if(N.type==="hint")return LZ(WJ,{marginTop:1,children:LZ(y4,{dimColor:!0,italic:!0,children:N.label})},"hint");let M=U[O]===_,T=N.model.description,k=N.model.name.padEnd(A),R=HA(N.model.name);return p1(WJ,{children:[p1(y4,{inverse:M,color:M?void 0:R,dimColor:M?!1:!R,children:[N.model.isCurrent?"\u25CF":"\u25CB"," ",k]}),T&&p1(y4,{dimColor:!0,children:[" ",N.model.description]})]},N.model.value??`${N.model.provider}-${N.model.name}`)})})(),p1(WJ,{marginTop:1,flexDirection:"column",children:[p1(WJ,{children:[p1(y4,{color:v40[V],children:[BR0[V]," "]}),p1(y4,{color:v40[V],bold:!0,children:[FR0[V]," effort"]}),V==="high"&&LZ(y4,{dimColor:!0,children:" (default)"}),LZ(y4,{dimColor:!0,children:" \u2190 \u2192 to adjust"})]}),LZ(WJ,{marginTop:0,children:LZ(y4,{dimColor:!0,children:"\u2191\u2193 navigate \u2190 \u2192 effort \u23CE select esc cancel"})})]})]})}var KR0,f40,UF,BR0,FR0,v40;var h40=E(()=>{UV();KR0={anthropic:"Anthropic","openai-codex":"OpenAI Codex",google:"Google",bedrock:"AWS Bedrock","bedrock-converse":"AWS Bedrock (Converse)","github-copilot":"GitHub Copilot",openai:"OpenAI",local:"Local"},f40=["anthropic","openai-codex","google","bedrock","bedrock-converse","github-copilot","openai","local"];UF=["low","medium","high","max"],BR0={low:"\u258C",medium:"\u258C\u258C",high:"\u258C\u258C\u258C",max:"\u258C\u258C\u258C\u258C"},FR0={low:"Low",medium:"Medium",high:"High",max:"Max"},v40={low:"blue",medium:"cyan",high:"yellow",max:"magenta"}});import{jsx as HJ,jsxs as X5}from"react/jsx-runtime";import{useState as pv,useEffect as DR0}from"react";import{Box as XH,Text as d1,useInput as OR0}from"ink";import NR0 from"ink-spinner";function dv({memories:$,mode:Z="browse",isLoading:J=!1,onSelect:X,onCancel:Y}){let[Q,G]=pv(0),[V,W]=pv(""),[H,K]=pv(0),z=8,U=$.filter((N)=>N.content.toLowerCase().includes(V.toLowerCase())),B=Math.max(1,Math.ceil(U.length/8)),F=U.slice(H*8,(H+1)*8);DR0(()=>{G((N)=>Math.min(N,Math.max(0,F.length-1)))},[F.length]);let D=F.length>0?Math.min(Q,F.length-1):0,O=process.stdin.isTTY??!1;OR0((N,_)=>{if(W$(N,_)){Y();return}if(_.return&&F.length>0&&Z==="forget"){X?.(F[D]);return}if(_.upArrow){G((M)=>Math.max(0,M-1));return}if(_.downArrow){G((M)=>Math.min(F.length-1,M+1));return}if(_.leftArrow&&H>0){K((M)=>M-1),G(0);return}if(_.rightArrow&&H<B-1){K((M)=>M+1),G(0);return}if(_.backspace||_.delete){W((M)=>M.slice(0,-1)),K(0),G(0);return}if(N&&!_.ctrl&&!_.meta)W((M)=>M+N),K(0),G(0)},{isActive:O});function L(N){let _=N instanceof Date?N:new Date(N);if(isNaN(_.getTime()))return"unknown";let T=new Date().getTime()-_.getTime(),k=Math.floor(T/86400000);if(k===0)return"today";if(k===1)return"yesterday";if(k<7)return`${k}d ago`;if(k<30)return`${Math.floor(k/7)}w ago`;return`${Math.floor(k/30)}mo ago`}function q(N,_){if(N.length<=_)return N;return N.slice(0,_-3)+"..."}return X5(XH,{flexDirection:"column",borderStyle:"round",borderColor:Z==="forget"?"red":"cyan",paddingX:1,children:[X5(XH,{marginBottom:1,children:[HJ(d1,{bold:!0,color:Z==="forget"?"red":"cyan",children:Z==="forget"?"Select Memory to Delete":"Memories"}),V&&X5(d1,{dimColor:!0,children:[' (filter: "',V,'")']}),X5(d1,{dimColor:!0,children:[" - ",U.length," memories"]})]}),J&&X5(XH,{children:[HJ(d1,{color:"cyan",children:HJ(NR0,{type:"dots"})}),HJ(d1,{dimColor:!0,children:" Loading memories..."})]}),!J&&U.length===0&&HJ(d1,{dimColor:!0,children:$.length===0?"No memories stored yet. Use /remember to add some.":"No memories match your filter."}),!J&&F.map((N,_)=>{let M=_===D,T=L(N.createdAt),k=q(N.content,60);return X5(XH,{flexDirection:"row",children:[X5(d1,{inverse:M,children:[M?">":" "," ",k]}),X5(d1,{dimColor:!0,children:[" [",T,"]"]}),N.network&&X5(d1,{dimColor:!0,children:[" (",N.network,")"]})]},N.id)}),!J&&B>1&&HJ(XH,{marginTop:1,children:X5(d1,{dimColor:!0,children:["Page ",H+1,"/",B]})}),HJ(XH,{marginTop:1,children:HJ(d1,{dimColor:!0,children:Z==="forget"?"type to filter arrows navigate enter delete esc cancel":"type to filter arrows navigate esc close"})})]})}var x40=()=>{};import{jsx as BF,jsxs as Y5}from"react/jsx-runtime";import{useState as lv,useEffect as g40}from"react";import{Box as YH,Text as z2,useInput as LR0}from"ink";function AR0($){let J=Date.now()-$.getTime(),X=Math.floor(J/60000),Y=Math.floor(J/3600000),Q=Math.floor(J/86400000);if(X<1)return"just now";if(X<60)return`${X}m ago`;if(Y<24)return`${Y}h ago`;if(Q<7)return`${Q}d ago`;return $.toLocaleDateString()}function av({sessions:$,onSelect:Z,onCancel:J,onSearch:X,onPageChange:Y}){let{columns:Q}=Y9(),[G,V]=lv(0),[W,H]=lv(""),[K,z]=lv(0),U=8,B=Math.max(1,Math.ceil($.length/8)),F=$.slice(K*8,(K+1)*8);g40(()=>{V((A)=>Math.min(A,Math.max(0,F.length-1)))},[F.length]),g40(()=>{z((A)=>Math.min(A,Math.max(0,B-1)))},[B]);let D=F.length>0?Math.min(G,F.length-1):0,O=process.stdin.isTTY??!1;LR0((A,N)=>{if(W$(A,N))J();else if(N.return&&F.length>0)Z(F[D].id);else if(N.upArrow)V((_)=>Math.max(0,_-1));else if(N.downArrow)V((_)=>Math.min(F.length-1,_+1));else if(N.leftArrow&&K>0)z((_)=>_-1),V(0);else if(N.leftArrow&&K===0)Y?.("prev"),V(0);else if(N.rightArrow&&K<B-1)z((_)=>_+1),V(0);else if(N.rightArrow&&K===B-1)Y?.("next"),V(0);else if(N.backspace||N.delete){let _=W.slice(0,-1);H(_),z(0),V(0),X(_)}else if(A&&!N.ctrl&&!N.meta){let _=W+A;H(_),z(0),V(0),X(_)}},{isActive:O});function L(A,N){if(A.length<=N)return A;return A.slice(0,N-3)+"..."}let q=Math.max(30,Math.min(120,Q-28));return Y5(YH,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:1,children:[Y5(YH,{marginBottom:1,children:[BF(z2,{bold:!0,color:"cyan",children:"Sessions"}),W&&Y5(z2,{dimColor:!0,children:[' (filter: "',W,'")']}),Y5(z2,{dimColor:!0,children:[" - ",$.length," sessions"]})]}),$.length===0?BF(z2,{dimColor:!0,children:W?"No sessions match your filter.":"No sessions yet."}):F.map((A,N)=>{let _=N===D,M=AR0(A.updatedAt),T=A.title??A.preview??"Untitled session",k=K*8+N;return Y5(YH,{flexDirection:"column",marginBottom:N<F.length-1?1:0,children:[Y5(YH,{flexDirection:"row",children:[Y5(z2,{inverse:_,children:[_?">":" "," ",k+1,". ",L(T,q)]}),Y5(z2,{dimColor:!0,children:[" [",M,"]"]})]}),Y5(z2,{dimColor:!0,children:[" ",A.arion," | ",A.model," | ",A.messageCount," messages"]})]},A.id)}),$.length>0&&B>1&&BF(YH,{marginTop:1,children:Y5(z2,{dimColor:!0,children:["Page ",K+1,"/",B]})}),BF(YH,{marginTop:1,children:BF(z2,{dimColor:!0,children:"type to search arrows navigate enter resume esc cancel"})})]})}var m40=E(()=>{P1()});import{jsx as FF,jsxs as hY}from"react/jsx-runtime";import{useState as nv,useEffect as fM,useMemo as qR0}from"react";import{Box as yM,Text as KJ,useInput as ER0}from"ink";function _R0($,Z){if($.length<=Z)return $;return $.slice(0,Z-3)+"\u2026"}function MR0($){switch($){case"user":return"\uD83D\uDC64";case"assistant":return"\uD83E\uDD16";case"system":return"\u2699\uFE0F";case"tool":return"\uD83D\uDD27";default:return" "}}function PR0($){switch($){case"user":return"cyan";case"assistant":return"green";case"system":return"yellow";case"tool":return"gray";default:return"white"}}function iv({messages:$,onSelect:Z,onCancel:J}){let{columns:X,rows:Y}=Y9(),[Q,G]=nv(0),[V,W]=nv(""),H=qR0(()=>{if(!V)return $;let L=V.toLowerCase();return $.filter((q)=>q.text.toLowerCase().includes(L)||q.role.toLowerCase().includes(L)||q.arion&&q.arion.toLowerCase().includes(L))},[$,V]);fM(()=>{G((L)=>Math.min(L,Math.max(0,H.length-1)))},[H.length]),fM(()=>{if(!V){let L=H.reduce((q,A,N)=>A.role==="user"?N:q,0);G(L)}},[]);let K=Math.max(4,Y-10),[z,U]=nv(0);fM(()=>{if(Q<z)U(Q);else if(Q>=z+K)U(Q-K+1)},[Q,K,z]),fM(()=>{let L=H.reduce((q,A,N)=>A.role==="user"?N:q,0);U(Math.max(0,L-K+2))},[V]);let B=H.slice(z,z+K),F=H.length>0?Math.min(Q,H.length-1):0,D=process.stdin.isTTY??!1;ER0((L,q)=>{if(W$(L,q))J();else if(q.return&&H.length>0){let A=H[F];if(A&&A.role==="user")Z(A.index,A.text)}else if(q.upArrow)G((A)=>Math.max(0,A-1));else if(q.downArrow)G((A)=>Math.min(H.length-1,A+1));else if(q.backspace||q.delete){let A=V.slice(0,-1);W(A),G(0)}else if(L&&!q.ctrl&&!q.meta){let A=V+L;W(A),G(0)}},{isActive:D});let O=Math.max(30,Math.min(120,X-16));return hY(yM,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:1,children:[hY(yM,{marginBottom:1,children:[FF(KJ,{bold:!0,color:"cyan",children:"Edit Message"}),V?hY(KJ,{dimColor:!0,children:[" ",'(search: "',V,'") \u2014 ',H.length,"/",$.length," messages"]}):hY(KJ,{dimColor:!0,children:[" \u2014 ",$.length," messages \xB7 select a user message to edit"]})]}),z>0&&hY(KJ,{dimColor:!0,children:[" \u2191 ",z," more above"]}),H.length===0?FF(KJ,{dimColor:!0,children:V?`No messages match "${V}".`:"No messages."}):B.map((L,q)=>{let N=z+q===F,_=L.role==="user",M=MR0(L.role),T=PR0(L.role),k=N?"\u276F":" ",R=_R0(L.text.replace(/\n/g," ").trim()||"(empty)",O);return FF(yM,{flexDirection:"row",children:hY(KJ,{inverse:N,color:N?void 0:T,dimColor:!_&&!N,bold:_,children:[k," ",M," ",R]})},`${L.index}-${q}`)}),z+K<H.length&&hY(KJ,{dimColor:!0,children:[" \u2193 ",H.length-z-K," more below"]}),FF(yM,{marginTop:1,children:FF(KJ,{dimColor:!0,children:"type to search \xB7 \u2191\u2193 navigate \xB7 enter select user message \xB7 esc cancel"})})]})}var c40=E(()=>{P1()});import{jsx as Q$,jsxs as l9}from"react/jsx-runtime";import jR0,{useState as TR0,useMemo as ov}from"react";import{Box as d9,Text as F$,useInput as CR0}from"ink";function u40($){if($.includes("daltonized")||$.includes("accessible"))return"accessible";if($.startsWith("claude-"))return"claude";return"standard"}function SR0($){let Z=$.colors.text.replace("#",""),J=parseInt(Z.slice(0,2),16),X=parseInt(Z.slice(2,4),16),Y=parseInt(Z.slice(4,6),16);return(J*299+X*587+Y*114)/1000<128}function IR0($){return b7().map((Z)=>{let J=BA(Z);return{name:Z,displayName:J.displayName,isCurrent:Z===$,isLight:SR0(J),category:u40(Z)}})}function bR0({theme:$}){let Z=$.colors,J=Z.primary,X=Z.info,Y=Z.success,Q=Z.textMuted,G=Z.text;return l9(d9,{flexDirection:"column",children:[Q$(F$,{color:Q,children:"// fetch a user by ID"}),l9(d9,{children:[Q$(F$,{color:J,children:"async function "}),Q$(F$,{color:G,children:"fetchUser"}),Q$(F$,{color:G,children:"("}),Q$(F$,{color:G,children:"id"}),Q$(F$,{color:G,children:": "}),Q$(F$,{color:Y,children:"string"}),Q$(F$,{color:G,children:") {"})]}),l9(d9,{children:[Q$(F$,{color:G,children:" "}),Q$(F$,{color:J,children:"const "}),Q$(F$,{color:G,children:"res = "}),Q$(F$,{color:J,children:"await "}),Q$(F$,{color:G,children:"fetch("}),Q$(F$,{color:X,children:"`/api/users/${"}),Q$(F$,{color:G,children:"id"}),Q$(F$,{color:X,children:"}`"}),Q$(F$,{color:G,children:")"})]}),l9(d9,{children:[Q$(F$,{color:G,children:" "}),Q$(F$,{color:J,children:"if "}),Q$(F$,{color:G,children:"(!res.ok) "}),Q$(F$,{color:J,children:"throw new "}),Q$(F$,{color:Y,children:"Error"}),Q$(F$,{color:G,children:"("}),Q$(F$,{color:X,children:"`HTTP ${"}),Q$(F$,{color:G,children:"res.status"}),Q$(F$,{color:X,children:"}`"}),Q$(F$,{color:G,children:")"})]}),l9(d9,{children:[Q$(F$,{color:G,children:" "}),Q$(F$,{color:J,children:"return "}),Q$(F$,{color:G,children:"res.json() "}),Q$(F$,{color:J,children:"as "}),Q$(F$,{color:Y,children:"Promise"}),Q$(F$,{color:G,children:"<"}),Q$(F$,{color:Y,children:"User"}),Q$(F$,{color:G,children:">"})]}),Q$(F$,{color:G,children:"}"})]})}function kR0({theme:$}){let{colors:Z,symbols:J}=$;return l9(d9,{flexDirection:"column",borderStyle:"single",borderColor:Z.secondary,paddingX:1,children:[l9(F$,{bold:!0,color:Z.primary,children:[J.prompt," ",$.displayName]}),Q$(d9,{marginTop:1,flexDirection:"column",children:Q$(bR0,{theme:$})}),l9(d9,{marginTop:1,flexDirection:"column",children:[l9(F$,{color:Z.success,children:[J.success," Tests passed (3/3)"]}),l9(F$,{color:Z.error,children:[J.error," Error: connection refused"]}),l9(F$,{color:Z.warning,children:[J.warning," Deprecated API call"]}),Q$(d9,{children:Q$(F$,{color:Z.diffAdded,children:"+ const data = await fetch(url);"})}),Q$(d9,{children:Q$(F$,{color:Z.diffRemoved,children:"- const data = http.get(url);"})}),l9(F$,{color:Z.textMuted,children:[J.info," 1.2k tokens ",J.bullet," $0.01 ",J.bullet," 0.8s"]})]})]})}function sv({onSelect:$,onCancel:Z}){let J=ov(()=>e().name,[]),X=ov(()=>IR0(J),[J]),{items:Y,selectableIndices:Q}=ov(()=>{let D=[],O=[],L=new Map;for(let q of X){let A=L.get(q.category)??[];A.push(q),L.set(q.category,A)}for(let q of wR0){let A=L.get(q);if(!A?.length)continue;D.push({type:"header",label:RR0[q]??q});for(let N of A)O.push(D.length),D.push({type:"theme",option:N})}return{items:D,selectableIndices:O}},[X]),G=Q.findIndex((D)=>{let O=Y[D];return O?.type==="theme"&&O.option.isCurrent}),[V,W]=TR0(G>=0?G:0),H=Q.length>0?Math.min(V,Q.length-1):0,K=Y[Q[H]],z=K?.type==="theme"?K.option.name:null;if(z)I7(z);let U=jR0.useCallback(()=>{I7(J),Z()},[J,Z]),B=process.stdin.isTTY??!1;CR0((D,O)=>{if(W$(D,O)){U();return}if(O.return&&Q.length>0){let L=Q[H],q=Y[L];if(q.type==="theme")$({name:q.option.name,displayName:q.option.displayName});return}if(O.upArrow){W((L)=>Math.max(0,L-1));return}if(O.downArrow){W((L)=>Math.min(Q.length-1,L+1));return}},{isActive:B});let F=e();return l9(d9,{flexDirection:"column",borderStyle:"round",borderColor:F.colors.primary,paddingX:1,children:[l9(d9,{marginBottom:1,children:[Q$(F$,{bold:!0,color:F.colors.primary,children:"Theme"}),l9(F$,{color:F.colors.textMuted,children:[" ",F.symbols.arrow," select a color theme"]})]}),l9(d9,{children:[Q$(d9,{flexDirection:"column",width:38,children:Y.map((D,O)=>{if(D.type==="header")return Q$(d9,{marginTop:O>0?1:0,children:Q$(F$,{bold:!0,color:F.colors.textMuted,children:D.label})},`header-${D.label}`);let L=Q[H]===O,{option:q}=D;return Q$(d9,{children:l9(F$,{inverse:L,color:L?F.colors.primary:F.colors.text,children:[q.isCurrent?"\u25CF":"\u25CB"," ",q.displayName]})},q.name)})}),Q$(d9,{flexDirection:"column",flexGrow:1,marginLeft:2,children:Q$(kR0,{theme:F})})]}),Q$(d9,{marginTop:1,children:l9(F$,{color:F.colors.textMuted,children:["\u2191\u2193"," navigate ","\u23CE"," select esc cancel"]})})]})}var RR0,wR0;var p40=E(()=>{E0();RR0={standard:"Standard",claude:"Claude",accessible:"Accessible"},wR0=["standard","claude","accessible"]});import{jsxs as xY,jsx as vM}from"react/jsx-runtime";import{useState as d40,useEffect as fR0,useMemo as yR0}from"react";import{Box as rv,Text as zJ,useInput as vR0}from"ink";function hR0($,Z){let J=Z.trim().toLowerCase();if(!J)return!0;return[$.displayNameSnapshot,$.nodeId,$.host,$.port?.toString(),$.principalFingerprint,$.transport,$.status].filter((Y)=>typeof Y==="string"&&Y.length>0).map((Y)=>Y.toLowerCase()).some((Y)=>Y.includes(J))}function tv($,Z){if(Z<=0)return 0;return Math.min($,Z-1)}function ev({peers:$,sameHomeClientsAvailable:Z=!1,onSelect:J,onCancel:X}){let[Y,Q]=d40(0),[G,V]=d40(""),W=e(),H=yR0(()=>$.filter((B)=>hR0(B,G)),[$,G]);fR0(()=>{Q((B)=>tv(B,H.length))},[H.length]);let K=tv(Y,H.length),z=process.stdin.isTTY??!1;vR0((B,F)=>{if(W$(B,F)){X();return}if(F.return){if(H.length>0)J(H[K]);return}if(F.upArrow){Q((D)=>Math.max(0,D-1));return}if(F.downArrow){Q((D)=>tv(D+1,H.length));return}if(F.backspace||F.delete){V((D)=>D.slice(0,-1)),Q(0);return}if(B&&!F.ctrl&&!F.meta){V((D)=>D+B),Q(0);return}},{isActive:z});let U=(B)=>`${B.slice(0,4)} ${B.slice(4,8)} ${B.slice(8,12)} ${B.slice(12,16)}`;return xY(rv,{flexDirection:"column",borderStyle:"round",borderColor:W.colors.secondary,paddingX:1,children:[xY(zJ,{bold:!0,color:W.colors.primary,children:[" ","Nearby Peers"," "]}),G?xY(zJ,{dimColor:!0,children:[' (filter: "',G,'")']}):null,H.length===0&&vM(zJ,{dimColor:!0,children:G?"No peers match your filter.":Z?"No peer nodes. Use /clients for same-home terminals.":"Scanning... no peers found yet"}),H.map((B,F)=>xY(rv,{children:[xY(zJ,{inverse:F===K,color:F===K?W.colors.primary:void 0,children:[F===K?" \u25B8 ":" ",B.displayNameSnapshot]}),B.status==="connected"?vM(zJ,{color:"green",children:" \u2713 connected"}):xY(zJ,{dimColor:!0,children:[" ",B.host,":",B.port]}),B.principalFingerprint?xY(zJ,{color:W.colors.secondary,children:[" ",U(B.principalFingerprint)]}):null]},`${B.displayNameSnapshot}-${B.nodeId}-${F}`)),vM(rv,{marginTop:H.length>0?1:0,children:vM(zJ,{dimColor:!0,children:"type to search \u2191\u2193 navigate \u23CE connect esc cancel"})})]})}var l40=E(()=>{E0()});import{jsxs as QH,jsx as $h}from"react/jsx-runtime";import{useEffect as xR0,useMemo as gR0,useState as a40}from"react";import{Box as Zh,Text as GH,useInput as mR0}from"ink";function cR0($,Z){let J=Z.trim().toLowerCase();if(!J)return!0;return $.displayLabel.toLowerCase().includes(J)||$.clientId.toLowerCase().includes(J)||$.clientKind.toLowerCase().includes(J)}function Jh($,Z){if(Z<=0)return 0;return Math.min($,Z-1)}function Xh({clients:$,onSelect:Z,onCancel:J}){let[X,Y]=a40(0),[Q,G]=a40(""),V=e(),W=gR0(()=>$.filter((z)=>cR0(z,Q)),[$,Q]);xR0(()=>{Y((z)=>Jh(z,W.length))},[W.length]);let H=Jh(X,W.length),K=process.stdin.isTTY??!1;return mR0((z,U)=>{if(W$(z,U)){J();return}if(U.return){if(W.length>0&&!W[H]?.self)Z(W[H]);return}if(U.upArrow){Y((B)=>Math.max(0,B-1));return}if(U.downArrow){Y((B)=>Jh(B+1,W.length));return}if(U.backspace||U.delete){G((B)=>B.slice(0,-1)),Y(0);return}if(z&&!U.ctrl&&!U.meta)G((B)=>B+z),Y(0)},{isActive:K}),QH(Zh,{flexDirection:"column",borderStyle:"round",borderColor:V.colors.secondary,paddingX:1,children:[QH(GH,{bold:!0,color:V.colors.primary,children:[" ","Same-Home Clients"," "]}),Q?QH(GH,{dimColor:!0,children:[' (filter: "',Q,'")']}):null,W.length===0&&$h(GH,{dimColor:!0,children:"No same-home clients found."}),W.map((z,U)=>QH(Zh,{flexDirection:"column",children:[QH(GH,{inverse:U===H,color:U===H?V.colors.primary:void 0,children:[U===H?" \u25B8 ":" ",z.displayLabel]}),QH(GH,{dimColor:!0,children:[" ",z.clientId,z.self?" self \xB7 not sendable":""]})]},`${z.clientId}-${U}`)),$h(Zh,{marginTop:W.length>0?1:0,children:$h(GH,{dimColor:!0,children:"type to search \u2191\u2193 navigate \u23CE select esc cancel"})})]})}var n40=E(()=>{E0()});import{jsx as UJ,jsxs as DF}from"react/jsx-runtime";import{Box as hM,Text as U2,useInput as uR0}from"ink";function Yh({inviteToken:$,inviteLabel:Z,expiresAt:J,onClose:X}){let Y=e(),Q=process.stdin.isTTY??!1;return uR0((G,V)=>{if(V.return||W$(G,V))X()},{isActive:Q}),DF(hM,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.secondary,paddingX:1,paddingY:1,children:[UJ(U2,{bold:!0,color:Y.colors.primary,children:"Internet Invite"}),Z?DF(U2,{children:["Label: ",UJ(U2,{bold:!0,children:Z})]}):null,J?DF(U2,{dimColor:!0,children:["Expires: ",J]}):null,DF(hM,{marginTop:1,flexDirection:"column",children:[UJ(U2,{children:"Share this token:"}),UJ(U2,{children:$})]}),DF(hM,{marginTop:1,flexDirection:"column",children:[UJ(U2,{children:"Join with:"}),UJ(U2,{children:`aria pairing join ${$}`})]}),UJ(hM,{marginTop:1,children:UJ(U2,{dimColor:!0,children:"Press Enter or Esc to close."})})]})}var i40=E(()=>{E0()});import{jsx as BJ,jsxs as pR0}from"react/jsx-runtime";import{useState as dR0}from"react";import{Box as xM,Text as OF,useInput as lR0}from"ink";function Qh({onSubmit:$,onCancel:Z,error:J}){let[X,Y]=dR0(""),Q=e(),G=process.stdin.isTTY??!1;return lR0((V,W)=>{if(W$(V,W)){Z();return}if(W.return){let H=X.trim();if(H.length>0)$(H);return}if(W.backspace||W.delete){Y((H)=>H.slice(0,-1));return}if(V&&!W.ctrl&&!W.meta)Y((H)=>H+V)},{isActive:G}),pR0(xM,{flexDirection:"column",borderStyle:"round",borderColor:Q.colors.secondary,paddingX:1,paddingY:1,children:[BJ(OF,{bold:!0,color:Q.colors.primary,children:"Join Invite"}),BJ(OF,{children:"Paste the invite token and press Enter."}),BJ(xM,{marginTop:1,children:BJ(OF,{children:X||" "})}),J?BJ(xM,{marginTop:1,children:BJ(OF,{color:Q.colors.error,children:J})}):null,BJ(xM,{marginTop:1,children:BJ(OF,{dimColor:!0,children:"Type token, Enter to join, Esc to cancel."})})]})}var o40=E(()=>{E0()});import{jsxs as gY,jsx as NF}from"react/jsx-runtime";import{useState as aR0,useRef as nR0}from"react";import{Box as LF,Text as mY,useInput as iR0}from"ink";function Gh({request:$,onAccept:Z,onReject:J}){let[X,Y]=aR0("accept"),Q=nR0(!1),G=e(),V=process.stdin.isTTY??!1,W=(H)=>`${H.slice(0,4)} ${H.slice(4,8)} ${H.slice(8,12)} ${H.slice(12,16)}`;return iR0((H,K)=>{if(Q.current)return;if(K.return){if(Q.current=!0,X==="accept")Z();else J();return}if(W$(H,K)){Q.current=!0,J();return}if(K.leftArrow||K.rightArrow||K.tab)Y((z)=>z==="accept"?"reject":"accept")},{isActive:V}),gY(LF,{flexDirection:"column",borderStyle:"round",borderColor:G.colors.warning,paddingX:2,paddingY:1,children:[gY(mY,{bold:!0,color:G.colors.warning,children:[" ","Connection Request"," "]}),NF(LF,{marginTop:1,children:gY(mY,{children:[NF(mY,{bold:!0,children:$.displayNameSnapshot??$.nodeId})," wants to connect"]})}),NF(LF,{children:gY(mY,{dimColor:!0,children:["Fingerprint: ",W($.principalFingerprint)]})}),gY(LF,{marginTop:1,gap:2,children:[gY(mY,{inverse:X==="accept",color:X==="accept"?G.colors.success:void 0,children:[" ","Accept"," "]}),gY(mY,{inverse:X==="reject",color:X==="reject"?G.colors.error:void 0,children:[" ","Reject"," "]})]}),NF(LF,{marginTop:1,children:NF(mY,{dimColor:!0,children:"\u2190\u2192 select \u23CE confirm esc reject"})})]})}var s40=E(()=>{E0()});import{execFile as oR0}from"child_process";import{existsSync as Wh,readdirSync as $60}from"fs";import{dirname as sR0,join as gM,resolve as rR0}from"path";import{fileURLToPath as tR0}from"url";function $w0(){let $=eR0;for(let Z=0;Z<10;Z++){let J=gM($,".comms","sounds","wav");if(Wh(J))return J;let X=rR0($,"..");if(X===$)break;$=X}return null}function B8($){if(!cY)return[];try{return $60(cY).filter((Z)=>new RegExp($).test(Z)).map((Z)=>gM(cY,Z))}catch{return[]}}function r40($){if(!cY)return[];let Z=gM(cY,"cloned");try{return $60(Z).filter((J)=>new RegExp($).test(J)).map((J)=>gM(Z,J))}catch{return[]}}function Q5($){if($.length===0)return null;return $[Math.floor(Math.random()*$.length)]}function uY($){Hh=$}function Z60(){return Hh}function J60(){if(process.platform!=="darwin")return"unsupported on this platform";return Kh()?"afplay (macOS)":"afplay unavailable"}function Kh(){if(t40)return Vh;return t40=!0,Vh=process.platform==="darwin"&&Wh("/usr/bin/afplay"),Vh}function G5($){if(!Hh||!$||!Wh($)||!Kh())return!1;try{return oR0("afplay",[$],()=>{}),!0}catch{return!1}}function Jw0(){let $=Date.now();if($-e40>Zw0)AF=1;else AF++;if(e40=$,AF<=1)G5(Q5(V5.acknowledge()));else if(AF===2)G5(Q5(V5.annoyed()));else if(AF===3)G5(Q5(V5.grumpy()));else G5(Q5(V5.dark()))}function mM(){G5(Q5(V5.readyToWork()))}function X60(){G5(Q5(V5.fleetDown()))}function Y60(){Jw0()}function Q60(){G5(Q5(V5.questDone()))}function G60($){switch($.type){case"error":G5(Q5(V5.error()));break;case"guardrail_rejected":G5(Q5(V5.defeat()));break}}function V60(){return cY!==null&&Kh()}function W60(){return cY!==null}function H60(){return G5(Q5(V5.readyToWork()))}var eR0,cY,Hh=!0,t40=!1,Vh=!1,V5,e40=0,AF=0,Zw0=15000;var zh=E(()=>{eR0=sR0(tR0(import.meta.url));cY=$w0();V5={acknowledge:()=>B8("^(peasant|orc|human|dwarf|elf|troll)_acknowledge"),annoyed:()=>B8("^(peasant|orc|goblin_sapper|human|troll|ogre)_selected"),grumpy:()=>B8("^(goblin_sapper|ogre|ogre_mage)_selected"),dark:()=>[...B8("^ogre_mage_selected"),...B8("^ogre_selected"),...B8("^troll_selected")],defeat:()=>r40("^defeat_"),error:()=>r40("^error_"),readyToWork:()=>[...B8("^peasant_selected"),...B8("^orc_selected"),...B8("^human_selected"),...B8("^dwarf_selected")],fleetUp:()=>[...B8("^orc_acknowledge"),...B8("^troll_acknowledge"),...B8("^ogre_acknowledge"),...B8("^human_acknowledge"),...B8("^knight_acknowledge")],fleetDown:()=>[...B8("^ogre_mage_acknowledge"),...B8("^ship_acknowledge"),...B8("^horde_ship_acknowledge")],questDone:()=>[...B8("^jobs_done"),...B8("^orc_work_completed"),...B8("^peasant_selected"),...B8("^orc_selected"),...B8("^human_selected"),...B8("^peasant_acknowledge"),...B8("^orc_acknowledge")]}});import{jsx as g6,jsxs as l1}from"react/jsx-runtime";import{useState as Uh,useCallback as z60}from"react";import{Box as W5,Text as D6,useInput as Xw0}from"ink";function Fh({onClose:$}){let Z=e(),J=Z.colors,[X,Y]=Uh(0),[Q,G]=Uh(Z60()),[V,W]=Uh("idle"),H=z60(()=>{let D=!Q;uY(D);let O=H$();if(O.soundEnabled=D,I$(O),G(D),D)mM()},[Q]),K=z60(()=>{let D=Q;if(!D)uY(!0);let O=H60();if(!D)uY(!1);W(O?"playing":"unavailable"),setTimeout(()=>W("idle"),1500)},[Q]),z=process.stdin.isTTY??!1;Xw0((D,O)=>{if(W$(D,O)){$();return}if(O.upArrow){Y((L)=>Math.max(0,L-1));return}if(O.downArrow){Y((L)=>Math.min(Bh.length-1,L+1));return}if(O.return){let L=Bh[X];if(L?.id==="toggle")H();else if(L?.id==="preview")K();return}},{isActive:z});let U=V60(),B=W60(),F=J60();return l1(W5,{flexDirection:"column",borderStyle:"round",borderColor:J.primary,paddingX:1,children:[l1(W5,{marginBottom:1,children:[g6(D6,{bold:!0,color:J.primary,children:"\uD83D\uDD14 Sound"}),l1(D6,{color:J.textMuted,children:[" ",Z.symbols.arrow," notification preferences"]})]}),l1(W5,{flexDirection:"column",marginBottom:1,children:[l1(W5,{children:[g6(D6,{color:J.textMuted,children:"Status "}),B?g6(D6,{bold:!0,color:Q?J.success:J.textMuted,children:Q?"\u25CF ON":"\u25CB OFF"}):g6(D6,{color:J.warning,children:"\u26A0 Sound files not found"})]}),l1(W5,{children:[g6(D6,{color:J.textMuted,children:"Engine "}),g6(D6,{color:U?J.text:J.warning,children:F})]}),l1(W5,{children:[g6(D6,{color:J.textMuted,children:"Assets "}),g6(D6,{color:B?J.text:J.warning,children:B?"Warcraft II pack found":"missing"})]})]}),g6(W5,{marginBottom:1,children:g6(D6,{color:J.border,children:"\u2500".repeat(40)})}),g6(W5,{flexDirection:"column",children:Bh.map((D,O)=>{let L=O===X,q=D.id==="toggle";return l1(W5,{paddingX:1,children:[l1(D6,{inverse:L,color:L?J.primary:J.text,children:[D.icon," ",q?Q?"Turn off":"Turn on":D.label]}),q&&L&&l1(D6,{color:J.textMuted,children:[" ",Q?"\u2192 disable notifications":"\u2192 enable notifications"]}),D.id==="preview"&&V==="playing"&&g6(D6,{color:J.success,children:" \u266A playing..."}),D.id==="preview"&&V==="unavailable"&&g6(D6,{color:J.warning,children:" \u26A0 preview unavailable"})]},D.id)})}),g6(W5,{marginTop:1,children:l1(D6,{color:J.textMuted,children:["\u2191\u2193"," navigate ","\u23CE"," select ","esc"," close"]})})]})}var Bh;var U60=E(()=>{E0();zh();Y4();Bh=[{id:"toggle",label:"Toggle sounds",description:"Turn sound notifications on or off",icon:"\uD83D\uDD0A"},{id:"preview",label:"Preview sound",description:"Play a sample notification sound",icon:"\u25B6"}]});import{jsx as o8,jsxs as v4,Fragment as Yw0}from"react/jsx-runtime";import{useState as Qw0}from"react";import{Box as h4,Text as R9,useInput as Gw0}from"ink";function Ww0({loopStatus:$}){let J=e().colors;if(!$)return null;let Y={running:J.success,idle:J.info,starting:J.warning,stopping:J.warning,stopped:J.textMuted,error:J.error}[$]??J.text;return o8(R9,{color:Y,children:$})}function Dh({onAction:$,onClose:Z,status:J,actionStatus:X}){let Y=e(),Q=Y.colors,G=Vw0.filter((z)=>{if(z.showWhenRunning===void 0)return!0;return z.showWhenRunning===J.running}),[V,W]=Qw0(0),H=Math.min(V,G.length-1),K=process.stdin.isTTY??!1;return Gw0((z,U)=>{if(X)return;if(W$(z,U)){Z();return}if(U.upArrow){W((B)=>Math.max(0,B-1));return}if(U.downArrow){W((B)=>Math.min(G.length-1,B+1));return}if(U.return&&G.length>0){let B=G[H];if(B)$(B.id);return}},{isActive:K}),v4(h4,{flexDirection:"column",borderStyle:"round",borderColor:Q.primary,paddingX:1,children:[v4(h4,{marginBottom:1,children:[o8(R9,{bold:!0,color:Q.primary,children:"\u2699 Daemon"}),v4(R9,{color:Q.textMuted,children:[" ",Y.symbols.arrow," background service control"]})]}),v4(h4,{flexDirection:"column",marginBottom:1,children:[v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Status "}),o8(R9,{bold:!0,color:J.running?Q.success:Q.textMuted,children:J.running?"\u25CF Running":"\u25CB Stopped"})]}),J.running&&v4(Yw0,{children:[J.loopStatus&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Loop "}),o8(Ww0,{loopStatus:J.loopStatus})]}),J.port&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Port "}),o8(R9,{color:Q.text,children:J.port})]}),J.nodeId&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Node "}),o8(R9,{color:Q.text,children:J.nodeId.length>20?`${J.nodeId.slice(0,20)}\u2026`:J.nodeId})]}),J.runtimeId&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Runtime "}),o8(R9,{color:Q.text,children:J.runtimeId.length>20?`${J.runtimeId.slice(0,20)}\u2026`:J.runtimeId})]}),J.clients!==void 0&&v4(h4,{children:[o8(R9,{color:Q.textMuted,children:"Clients "}),v4(R9,{color:J.clients>0?Q.info:Q.textMuted,children:[J.clients," attached"]})]})]})]}),o8(h4,{marginBottom:1,children:o8(R9,{color:Q.border,children:"\u2500".repeat(44)})}),X&&o8(h4,{marginBottom:1,paddingX:1,children:v4(R9,{color:Q.warning,children:["\u27F3 ",X]})}),o8(h4,{flexDirection:"column",children:G.map((z,U)=>{let B=U===H;return v4(h4,{paddingX:1,flexDirection:"column",children:[o8(h4,{children:v4(R9,{inverse:B,color:B?z.id==="stop"?Q.error:Q.primary:Q.text,children:[z.icon," ",z.label]})}),B&&o8(h4,{paddingLeft:3,children:o8(R9,{color:Q.textMuted,children:z.description})})]},z.id)})}),o8(h4,{marginTop:1,children:v4(R9,{color:Q.textMuted,children:["\u2191\u2193"," navigate ","\u23CE"," select ","esc"," close"]})})]})}var Vw0;var B60=E(()=>{E0();Vw0=[{id:"start",label:"Start daemon",description:"Launch the shared background daemon process",icon:"\u25B6",showWhenRunning:!1},{id:"stop",label:"Stop daemon",description:"Gracefully stop the shared daemon process",icon:"\u25A0",showWhenRunning:!0},{id:"restart",label:"Restart daemon",description:"Restart the shared daemon process cleanly",icon:"\u21BB",showWhenRunning:!0}]});var F60=E(()=>{I40();k40();h40();x40();m40();c40();p40();l40();n40();i40();o40();s40();U60();B60()});var Oh=E(()=>{OS();qS();Ln();fn();Tr();Pq();rI();eI();kr();fr();yr();TV();vr();h90();eS();x90();m90();p90();ZI();i90();VF();yY();VJ();F60()});import{jsxs as WH,jsx as VH}from"react/jsx-runtime";import{useEffect as Hw0,useState as Kw0,useRef as D60}from"react";import{Box as cM,Text as pY,useInput as zw0}from"ink";function Uw0({status:$}){let Z=e();switch($){case"connected":return WH(pY,{color:Z.colors.success,children:["\u2713"," connected"]});case"expired":return WH(pY,{color:Z.colors.error,children:["\u2717"," expired"]});case"none":return WH(pY,{color:Z.colors.textMuted,children:["\xB7"," not connected"]})}}function O60({providers:$,onSelect:Z,onCancel:J,isActive:X=!0}){let Y=e(),[Q,G]=Kw0(0),V=D60(0),W=D60(!1);Hw0(()=>{W.current=!1,V.current=0,G(0)},[$]);let H=(z)=>{G((U)=>{let B=z(U);return V.current=B,B})},K=process.stdin.isTTY??!1;return zw0((z,U)=>{if(W.current)return;if(U.upArrow)H((B)=>Math.max(0,B-1));else if(U.downArrow)H((B)=>Math.min($.length-1,B+1));else if(U.return)W.current=!0,Z($[V.current]);else if(W$(z,U))W.current=!0,J()},{isActive:X&&K}),WH(cM,{flexDirection:"column",borderStyle:"round",borderColor:Y.colors.secondary,paddingX:1,paddingY:1,width:56,children:[VH(cM,{marginBottom:1,children:VH(pY,{bold:!0,children:"Select a provider:"})}),$.map((z,U)=>{let B=U===Q,F=B?"\u25B8":" ";return WH(cM,{gap:1,children:[VH(pY,{color:B?Y.colors.primary:void 0,children:F}),VH(pY,{color:B?Y.colors.primary:void 0,bold:B,children:z.label.padEnd(28)}),VH(Uw0,{status:z.status})]},z.id)}),VH(cM,{marginTop:1,children:WH(pY,{color:Y.colors.textMuted,children:["\u2191\u2193"," Navigate Enter Select Esc Cancel"]})})]})}var N60=E(()=>{E0()});import{jsxs as B2,jsx as x4}from"react/jsx-runtime";import{useEffect as Bw0,useRef as Nh,useState as uM}from"react";import{Box as a1,Text as n1,useInput as Fw0}from"ink";function L60({provider:$,onCancel:Z,isActive:J=!0,onComplete:X,authorizeUrl:Y,expectedState:Q,onCodeSubmit:G}){let V=e(),[W,H]=uM("starting"),[K,z]=uM(""),[U,B]=uM(""),[F,D]=uM(""),O=Nh(null),L=Nh(!1),q=Nh(!1),A=process.stdin.isTTY??!1;Fw0((_,M)=>{if(W$(_,M))Z()},{isActive:J&&A}),Bw0(()=>{if(L.current)return;L.current=!0,H("waiting");let _=new Promise((T)=>{O.current=T}),M=(T)=>{z(T),H("manual")};if(Y&&G){z(Y),sL($,{authorizeUrl:Y,expectedState:Q,onManualFallback:M,manualCodePromise:_}).then(async(T)=>{if(q.current)return;H("exchanging"),await G(T),q.current=!0,H("success")},(T)=>{if(q.current)return;let k=T instanceof Error?T.message:String(T);B(k),H("error")});return}Iw($,{onManualFallback:M,manualCodePromise:_}).then((T)=>{if(q.current)return;if(T.success)H("success"),q.current=!0,setTimeout(()=>{X?.({success:!0,message:T.message})},1000);else B(T.message),H("error")},(T)=>{if(q.current)return;let k=T instanceof Error?T.message:String(T);B(k),H("error")})},[Q,Y,G,X,$]);let N=(_)=>{let M=_.trim();if(!M)return;if(H("exchanging"),O.current)O.current(M),O.current=null};return B2(a1,{flexDirection:"column",borderStyle:"round",borderColor:V.colors.secondary,paddingX:1,paddingY:1,width:64,children:[x4(a1,{marginBottom:1,children:B2(n1,{bold:!0,children:["Sign in to ",$]})}),(W==="starting"||W==="waiting")&&B2(a1,{gap:1,children:[x4(ZW,{}),x4(n1,{children:"Opening browser to sign in..."})]}),W==="manual"&&B2(a1,{flexDirection:"column",children:[x4(n1,{children:"Open this URL in your browser:"}),x4(a1,{marginTop:1,children:x4(n1,{color:V.colors.primary,wrap:"wrap",children:K})}),x4(a1,{marginTop:1,children:x4(n1,{children:"Paste the authorization code below:"})}),B2(a1,{marginTop:1,children:[x4(n1,{color:V.colors.textMuted,children:"> "}),x4(NV,{value:F,onChange:D,onSubmit:N,placeholder:"paste code here",focus:J,showCursor:!0})]})]}),W==="exchanging"&&B2(a1,{gap:1,children:[x4(ZW,{}),x4(n1,{children:"Exchanging code for tokens..."})]}),W==="success"&&B2(n1,{color:V.colors.success,children:["\u2713"," Logged in to ",$]}),W==="error"&&B2(a1,{flexDirection:"column",children:[B2(n1,{color:V.colors.error,children:["\u2717"," ",U]}),x4(a1,{marginTop:1,children:x4(n1,{color:V.colors.textMuted,children:"Press Esc to dismiss"})})]}),W!=="success"&&W!=="error"&&x4(a1,{marginTop:1,children:x4(n1,{color:V.colors.textMuted,children:"Esc Cancel"})})]})}var A60=E(()=>{R6();E0();Pq();mS()});import{jsxs as KH,jsx as F2}from"react/jsx-runtime";import{useEffect as Dw0,useRef as q60,useState as Ow0}from"react";import{Box as HH,Text as FJ,useInput as Nw0}from"ink";function Lw0({status:$}){let Z=e();if($==="connected")return KH(FJ,{color:Z.colors.success,children:["\u2713"," connected"]});if($==="available")return KH(FJ,{color:Z.colors.success,children:["\u2713"," available"]});return F2(FJ,{color:Z.colors.textMuted,children:"\xB7"})}function zH({options:$,onSelect:Z,onCancel:J,title:X="Select login method:",isActive:Y=!0}){let Q=e(),[G,V]=Ow0(0),W=q60(0),H=q60(!1),K=process.stdin.isTTY??!1;Dw0(()=>{H.current=!1,W.current=0,V(0)},[$]);let z=(U)=>{V((B)=>{let F=U(B);return W.current=F,F})};return Nw0((U,B)=>{if(H.current)return;if(B.upArrow)z((F)=>Math.max(0,F-1));else if(B.downArrow)z((F)=>Math.min($.length-1,F+1));else if(B.return)H.current=!0,Z($[W.current]);else if(W$(U,B))H.current=!0,J()},{isActive:Y&&K}),KH(HH,{flexDirection:"column",borderStyle:"round",borderColor:Q.colors.secondary,paddingX:1,paddingY:1,width:64,children:[F2(HH,{marginBottom:1,children:F2(FJ,{bold:!0,children:X})}),$.map((U,B)=>{let F=B===G,D=F?"\u25B8":" ";return KH(HH,{flexDirection:"column",children:[KH(HH,{gap:1,children:[F2(FJ,{color:F?Q.colors.primary:void 0,children:D}),F2(FJ,{color:F?Q.colors.primary:void 0,bold:F,children:U.label}),F2(Lw0,{status:U.status})]}),U.description&&F2(HH,{marginLeft:3,children:F2(FJ,{color:Q.colors.textMuted,dimColor:!0,children:U.description})})]},U.id)}),F2(HH,{marginTop:1,children:KH(FJ,{color:Q.colors.textMuted,children:["\u2191\u2193"," Navigate Enter Select Esc Cancel"]})})]})}var Lh=E(()=>{E0()});import{jsx as Aw0}from"react/jsx-runtime";function E60({options:$,onSelect:Z,onCancel:J,isActive:X=!0}){return Aw0(zH,{options:$,onSelect:Z,onCancel:J,title:"Select Anthropic login method:",isActive:X})}var _60=E(()=>{Lh()});import{jsx as DJ,jsxs as Ah}from"react/jsx-runtime";import{useRef as qw0,useState as Ew0}from"react";import{Box as qF,Text as UH,useInput as _w0}from"ink";function BH({title:$,hint:Z,onSubmit:J,onCancel:X,isActive:Y=!0}){let Q=e(),[G,V]=Ew0(""),W=qw0(!1),H=process.stdin.isTTY??!1;_w0((z,U)=>{if(W.current)return;if(W$(z,U)){W.current=!0,X();return}if(U.return){if(G.trim().length>0)W.current=!0,J(G.trim());return}if(U.backspace||U.delete){V((B)=>B.slice(0,-1));return}if(U.upArrow||U.downArrow||U.leftArrow||U.rightArrow||U.tab)return;if(z&&!U.ctrl&&!U.meta)V((B)=>B+z)},{isActive:Y&&H});let K=G.length>0?G.slice(0,4)+"\u2022".repeat(Math.max(0,G.length-4)):"";return Ah(qF,{flexDirection:"column",borderStyle:"round",borderColor:Q.colors.secondary,paddingX:1,paddingY:1,width:64,children:[DJ(qF,{marginBottom:1,children:DJ(UH,{bold:!0,children:$})}),Z&&DJ(qF,{marginBottom:1,children:DJ(UH,{color:Q.colors.textMuted,dimColor:!0,children:Z})}),Ah(qF,{children:[Ah(UH,{color:Q.colors.primary,children:["\u25B8"," "]}),DJ(UH,{children:K||" "}),DJ(UH,{color:Q.colors.textMuted,children:"_"})]}),DJ(qF,{marginTop:1,children:DJ(UH,{color:Q.colors.textMuted,children:"Enter Submit Esc Cancel"})})]})}var M60=E(()=>{E0()});function P60($,Z,J={}){let X=J.userName||"User",Y=[],Q=new Map;function G(V,W){for(let H of V.content)switch(H.type){case"text":{if(V.role==="user"){let K=oS(H.text);for(let z of K)if(z.type==="image"&&IA(z.dataUri))Y.push({kind:"user-image",id:`${V.id}-image-${Y.length}`,dataUri:z.dataUri,userName:X,committed:W});else if(z.type==="text"&&z.text.length>0)Y.push({kind:"user-message",id:`${V.id}-text-${Y.length}`,text:z.text,userName:X,committed:W})}else if(V.role==="system"&&H.text.length>0)Y.push({kind:"user-message",id:`${V.id}-text-${Y.length}`,text:H.text,userName:"System",committed:W});else if(V.role==="assistant"&&H.text.trim())Y.push({kind:"assistant-text",id:`${V.id}-text-${Y.length}`,text:H.text,arion:V.arion?{name:V.arion.name,emoji:V.arion.emoji||"\uD83E\uDD8B",color:V.arion.color||"cyan"}:void 0,committed:W});break}case"thinking":{if(H.content?.trim())Y.push({kind:"thinking",id:`${V.id}-thinking-${Y.length}`,content:H.content,durationSec:H.durationMs!=null?H.durationMs/1000:void 0,arion:V.arion?{name:V.arion.name,emoji:V.arion.emoji||"\uD83E\uDD8B",color:V.arion.color||"cyan"}:void 0,committed:W});break}case"tool_use":{let K={kind:"tool-execution",id:`${V.id}-tool-${H.id}`,toolName:H.name,input:H.arguments,output:void 0,status:"pending",durationMs:void 0,usage:void 0,committed:W};Q.set(H.id,K),Y.push(K);break}case"tool_result":{let K=Q.get(H.toolUseId);if(K){if(K.output=H.resultData??H.content,K.status=H.status==="error"?"error":"complete",H.status==="error")K.error=typeof H.content==="string"?H.content:"Tool error";if(H.durationMs!=null)K.durationMs=H.durationMs;if(H.usage)K.usage={inputTokens:H.usage.inputTokens??0,outputTokens:H.usage.outputTokens??0};if(!W)K.committed=!1}break}case"handoff":{Y.push({kind:"handoff",id:`${V.id}-handoff-${Y.length}`,target:H.target,direction:H.direction==="from"?"incoming":"outgoing",committed:W});break}case"error":{Y.push({kind:"error",id:`${V.id}-error-${Y.length}`,message:H.content,suggestion:H.suggestion,committed:W});break}}}for(let V of $)G(V,!0);for(let V of Z)G(V,!1);return Y}var j60=E(()=>{bA()});function C60($,Z){switch(Z.type){case"STREAM_START":return{kind:"composing",verb:Z.verb};case"THINKING_START":if($.kind!=="composing"&&$.kind!=="idle")return $;return{kind:"thinking",verb:Z.verb,startedAt:Z.startedAt};case"THINKING_END":if($.kind!=="thinking")return $;return{kind:"composing",verb:Z.verb,thoughtForSeconds:Z.durationSeconds};case"TOOL_START":{let J=new Map($.kind==="tool_running"?$.tools:[]);return J.set(Z.callId,Z.displayName),{kind:"tool_running",tools:J}}case"TOOL_END":{if($.kind!=="tool_running")return $;let J=new Map($.tools);if(J.delete(Z.callId),J.size===0)return{kind:"composing",verb:Z.verb};return{kind:"tool_running",tools:J}}case"STREAM_END":return{kind:"idle"};default:return $}}var T60;var R60=E(()=>{T60={kind:"idle"}});import{useReducer as Mw0,useEffect as qh,useRef as w60}from"react";function S60($,Z){let[J,X]=Mw0(C60,T60),Y=w60(!1);qh(()=>{if(Z&&!Y.current)X({type:"STREAM_START",verb:j1()});else if(!Z&&Y.current)X({type:"STREAM_END"});Y.current=Z},[Z]);let Q=w60(null);return qh(()=>{if($!==Q.current){if(Q.current!==null)X({type:"STREAM_END"});Q.current=$}},[$]),qh(()=>{if(!$)return;let G=()=>X({type:"THINKING_START",verb:j1(),startedAt:Date.now()}),V=(K)=>X({type:"THINKING_END",verb:j1(),durationSeconds:Math.round(K.durationMs/1000)}),W=(K)=>X({type:"TOOL_START",callId:K.id,displayName:gn(K.name,!0)}),H=(K)=>X({type:"TOOL_END",callId:K.id,verb:j1()});return $.on("thinking_start",G),$.on("thinking_end",V),$.on("tool_start",W),$.on("tool_result",H),()=>{$.off("thinking_start",G),$.off("thinking_end",V),$.off("tool_start",W),$.off("tool_result",H)}},[$]),J}var I60=E(()=>{R60();EV()});function pM($){let Z=typeof $.nodeId==="string"?$.nodeId.trim():"",J=typeof $.transport==="string"?$.transport:"unknown";if(Z)return`node:${Z}`;let X=typeof $.principalFingerprint==="string"?$.principalFingerprint.trim():"";if(X)return`principal:${X}`;return`endpoint:${J}:${$.host}:${$.port}:${$.displayNameSnapshot}`}function b60($,Z){let J=new Map;for(let X of[...$,...Z]){let Y=pM(X);if(!J.has(Y))J.set(Y,X)}return[...J.values()]}import{jsx as G$,jsxs as dY,Fragment as Pw0}from"react/jsx-runtime";import{useState as OJ,useCallback as D2,useMemo as NJ,useEffect as AZ}from"react";import{Box as H5,Static as jw0,Text as O2,useApp as Tw0,useInput as Cw0}from"ink";function Eh({session:$,model:Z,maxContextTokens:J,banner:X,messages:Y=[],previewMessages:Q=[],isStreaming:G=!1,queuedMessage:V,onCancelQueuedMessage:W,responseTime:H,commands:K=[],arions:z=[],models:U=[],memories:B=[],memoryBrowserMode:F="browse",isLoadingMemories:D=!1,userName:O,metrics:L,displayMode:q="standard",displayConfig:A,showThinking:N=!0,showCosts:_=!0,showTraces:M=!1,spans:T=[],pipelineTiming:k,activeArion:R,onSubmit:a,onCommand:o,onSelectArion:u,onSelectModel:w,onSelectTheme:m,onSelectMemory:I,onOpenMemoryBrowser:S,onToggleThinking:j,onToggleCosts:b,onToggleTraces:v,onCycleDisplayMode:c,sessions:C=[],onSelectSession:f,onLoadSessions:g,onSearchSessions:l,onLoadMoreSessions:$0,staticRenderEpoch:Y0,openSessionOverlaySignal:x,openThemeOverlaySignal:r,openSoundOverlaySignal:J0,openDaemonOverlaySignal:X0,daemonStatus:n,daemonActionStatus:K0,onDaemonAction:z0,connectionState:O0="connected",inputHistory:R0=[],onSaveInput:I0,obsCtx:Z0,onCancel:H0,approvalRequest:B0,onApprovalChoice:F0,effortLevel:V0,showAutonomySelector:D0,autonomyLevel:C0,onAutonomySelect:_0,onAutonomyCancel:L0,onCycleAutonomy:P0,onCycleEffort:c0,loginPickerProviders:z$,onLoginProviderSelect:A0,onLoginPickerCancel:u0,copilotSourceOptions:U$,onCopilotSourceSelect:s0,onCopilotSourceCancel:V$,oauthProvider:_$,oauthAuthorizeUrl:r8,oauthExpectedState:p$,onOAuthComplete:c$,onOAuthCodeSubmit:z9,onOAuthCancel:d4,copilotDeviceProvider:A5,copilotDeviceProfileLabel:GK,copilotDeviceVerificationUri:VK,copilotDeviceUserCode:V7,onCopilotDeviceComplete:W7,onCopilotDeviceApprove:WK,onCopilotDeviceCancel:f2,anthropicMethodOptions:HK,onAnthropicMethodSelect:ZO,onAnthropicMethodCancel:mJ,anthropicKeyInputVisible:JO,onAnthropicKeySubmit:jQ,onAnthropicKeyCancel:XO,anthropicSetupTokenVisible:TQ,onAnthropicSetupTokenSubmit:YO,onAnthropicSetupTokenCancel:CQ,openaiMethodOptions:KK,onOpenAIMethodSelect:RQ,onOpenAIMethodCancel:QO,openaiKeyInputVisible:wQ,onOpenAIKeySubmit:GO,onOpenAIKeyCancel:SQ,googleMethodOptions:IQ,onGoogleMethodSelect:bQ,onGoogleMethodCancel:VO,googleKeyInputVisible:kQ,onGoogleKeySubmit:WO,onGoogleKeyCancel:fQ,authInteractionOptions:zK,authInteractionTitle:UK,onAuthInteractionSelect:HO,onAuthInteractionCancel:yQ,authInteractionInput:vQ,onAuthInteractionInputSubmit:hQ,onAuthInteractionInputCancel:KO,nearbyPeers:y2=[],localClients:zO=[],onSelectPeer:BK,onSelectClient:FT,onPeerCancel:UO,onClientsCancel:DT,openPeersOverlaySignal:xQ,openClientsOverlaySignal:BO,inviteShare:H7,onInviteShareClose:OT,openJoinInviteOverlaySignal:gQ,onJoinInviteSubmit:FK,onJoinInviteCancel:cJ,joinInviteError:NT,incomingPairRequest:v2,onAcceptPairRequest:LT,onRejectPairRequest:FO,onCancelPairing:q5,openMessageEditOverlaySignal:DK,editableMessages:h2,onEditMessage:AT,prefillInput:OK,onPrefillConsumed:qT,meshMessageCount:ET=0,runtimeSocket:Yu=null,clientId:Qu=null,clientAuthToken:Gu=null,resolveCredentials:NK}){let{exit:uJ}=Tw0(),{columns:DO,rows:_T}=Y9(),[LK,A6]=OJ(""),[m0,J$]=OJ("none"),[mQ,cQ]=OJ(""),[AK,qK]=OJ(""),[i9,x2]=OJ("become"),[OO,K7]=OJ("all"),[NO,uQ]=OJ(!1),pJ=Boolean(zK||HK||KK||IQ),LO=Boolean(vQ||JO||TQ||wQ||kQ),dJ=Boolean(_$||A5||z$||U$);AZ(()=>{if(pJ)J$("login-method");else if(LO)J$("login-input");else if(dJ)J$("login");else if(m0==="login"||m0==="login-method"||m0==="login-input")J$("none")},[pJ,LO,dJ]);let EK=D2(()=>{J$("session"),setTimeout(()=>g?.(),0)},[g]);AZ(()=>{if(x===void 0)return;EK()},[x,EK]),AZ(()=>{if(r===void 0)return;J$("theme")},[r]),AZ(()=>{if(J0===void 0)return;J$("sound")},[J0]),AZ(()=>{if(X0===void 0)return;J$("daemon")},[X0]);let[pQ,dQ]=OJ([]);AZ(()=>{if(xQ===void 0)return;dQ([...y2]),J$("peers")},[xQ]),AZ(()=>{if(BO===void 0)return;J$("clients")},[BO]),AZ(()=>{if(H7)J$("invite-share");else if(m0==="invite-share")J$("none")},[H7,m0]),AZ(()=>{if(gQ===void 0)return;J$("join-invite")},[gQ]),AZ(()=>{if(DK===void 0)return;if(h2&&h2.length>0)J$("message-edit")},[DK]),AZ(()=>{if(OK!==void 0)A6(OK),qT?.()},[OK]),AZ(()=>{if(m0!=="peers")return;dQ((N0)=>{let T0=new Set(N0.map(pM)),X8=y2.filter((_5)=>!T0.has(pM(_5)));return X8.length>0?[...N0,...X8]:N0})},[m0,y2]),AZ(()=>{if(v2&&m0==="none"&&!G)J$("pair-request");else if(!v2&&m0==="pair-request")J$("none")},[v2,m0,G]);let MT=process.stdin.isTTY??!1;Cw0((N0,T0)=>{if(N0==="\x03"||T0.ctrl&&N0==="c"){if(B0)return;if(G&&H0){H0();return}uJ()}if(W$(N0,T0)){if(B0)return;if(m0!=="none"){RZ();return}if(q5){q5();return}if(G&&V&&W)W();else if(G&&H0)H0();else A6("");return}if(T0.upArrow&&G&&V&&W){W();return}if(T0.ctrl&&N0==="\x1C"&&m0==="none"){c?.();return}if(T0.ctrl&&N0==="t"&&m0==="none"){j?.();return}if(T0.ctrl&&N0==="g"&&m0==="none"){b?.();return}if(T0.ctrl&&N0==="s"&&m0==="none"){v?.();return}if(T0.tab&&N0!=="\t"&&m0==="none"){P0?.();return}if(T0.ctrl&&N0==="\x05"&&m0==="none"){c0?.();return}if(T0.ctrl&&N0==="\x1F"&&m0==="none"){uQ((X8)=>!X8);return}},{isActive:MT});let TZ=$.getPrimary(),Vu=TZ?.name||"ARIA",PT=TZ?.color||"cyan",jT=TZ?.emoji||"\uD83E\uDD8B",CZ=S60(Z0??null,G??!1),lQ=(m0==="none"&&!B0?4:0)+(!A||A.showStatusBar?1:0),AO=Math.max(_T-lQ,1),aQ=D2((N0,T0)=>{if(N0==="command")J$("command"),cQ(T0);else if(N0==="mention")J$("arion"),qK(T0),x2("mention")},[]),TT=D2((N0)=>{J$("none"),A6("");let T0=N0.requiresArgs===!0||(N0.args?.length??0)>0;if(N0.name==="become")J$("arion"),x2("become"),K7("all");else if(N0.name==="rest")J$("arion"),x2("rest"),K7("active");else if(N0.name==="wake")J$("arion"),x2("wake"),K7("resting");else if(N0.name==="model")J$("model");else if(N0.name==="theme")J$("theme");else if(N0.name==="sound")J$("sound");else if(N0.name==="daemon")o(N0.name);else if(N0.name==="memories")S?.("browse"),J$("memory");else if(N0.name==="forget")S?.("forget"),J$("memory");else if(N0.name==="resume")EK();else if(N0.name==="exit")uJ();else if(T0){A6(`/${N0.name} `);return}else o(N0.name)},[o,S,uJ]),p6=D2((N0)=>{if(J$("none"),i9==="mention"){let T0=LK.replace(/@\w*$/,"");A6(T0+"@"+N0.name+" ")}else u?.(N0.name,i9)},[i9,LK,u]),CT=D2((N0,T0)=>{J$("none"),w?.(N0.value??N0.name,T0)},[w]),RT=D2((N0)=>{J$("none"),m?.(N0)},[m]),wT=D2((N0)=>{J$("none"),I?.(N0)},[I]),RZ=D2(()=>{if(J$("none"),i9!=="mention")A6("");cQ(""),qK("")},[i9]),g2=D2((N0)=>{J$("none"),A6(N0),cQ("")},[]),qO=NJ(()=>P60(Y,Q,{userName:O}),[Y,Q,O]),d6=NJ(()=>nI(qO,q),[qO,q]),nQ=NJ(()=>d6.filter((N0)=>N0.committed),[d6]),iQ=NJ(()=>d6.filter((N0)=>!N0.committed),[d6]),_8=G&&V?V:null,wZ=_8!==null,X1=CZ.kind!=="idle",C$=Math.max(DO-4,20),m2=NJ(()=>{if(!_8)return 0;return Math.max(D9(_8,{width:C$}).split(`
|
|
4727
|
+
`).length,1)},[C$,_8]),oQ=(wZ?4+m2:0)+(X1?2:0),SZ=Math.max(AO-oQ,1),E5=NJ(()=>{let N0=new Map,T0="";for(let X8 of d6){let _5=X8.kind==="user-message"||X8.kind==="user-image"?`user:${X8.userName}`:X8.kind==="assistant-text"?`assistant:${X8.arion?.name??"ARIA"}`:X8.kind==="thinking"?`assistant:${X8.arion?.name??"ARIA"}`:X8.kind==="tool-execution"?"tool":X8.kind,sQ=X8.kind==="user-message"||X8.kind==="user-image"||X8.kind==="assistant-text"||X8.kind==="thinking";if(N0.set(X8.id,sQ&&_5!==T0),sQ)T0=_5}return N0},[d6]),ST=NJ(()=>{let N0=new Map;for(let T0=0;T0<d6.length;T0++){let X8=d6[T0],_5=T0>0?d6[T0-1]:void 0,sQ=X8.kind==="tool-execution"&&_5?.kind==="tool-execution";N0.set(X8.id,T0>0&&!sQ)}return N0},[d6]),Wu=NJ(()=>{let N0=[];if(X)N0.push({id:"header",_kind:"banner"});for(let T0 of nQ)N0.push({...T0,_kind:"item"});return N0},[X,nQ]);return dY(Pw0,{children:[G$(jw0,{items:Wu,children:(N0)=>{if(N0._kind==="banner")return G$(H5,{width:"100%",justifyContent:"center",children:X},N0.id);return G$(H5,{flexDirection:"column",marginTop:ST.get(N0.id)?1:0,children:G$(Mq,{item:N0,displayMode:q,showPrefix:E5.get(N0.id)??!1})},N0.id)}},`static-${Y0}`),dY(H5,{flexDirection:"column",width:"100%",children:[dY(H5,{flexDirection:"column",maxHeight:AO,justifyContent:"flex-end",overflowY:"hidden",children:[iQ.length>0&&G$(H5,{flexDirection:"column",maxHeight:SZ,overflowY:"hidden",children:iQ.map((N0)=>G$(H5,{flexDirection:"column",marginTop:ST.get(N0.id)?1:0,children:G$(Mq,{item:N0,displayMode:q,showPrefix:E5.get(N0.id)??!1,previewTailLines:SZ})},N0.id))}),wZ&&dY(H5,{marginTop:1,flexDirection:"column",children:[G$(SA,{param:{type:"text",text:_8??""},userName:O??"User",columns:DO,showPrefix:!0,addMargin:!1}),G$(O2,{dimColor:!0,children:" \u2191 queued \u2014 press esc or \u2191 to cancel and edit"})]}),M&&T.length>0&&G$(Kv,{spans:T}),A?.showPipelineTiming&&k&&k.phases.length>0&&G$(zv,{report:k}),NO&&dY(H5,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,marginY:1,children:[G$(O2,{bold:!0,dimColor:!0,children:"Hotkeys"}),G$(O2,{dimColor:!0,children:" Ctrl+\\ \u2014 cycle display mode"}),G$(O2,{dimColor:!0,children:" Ctrl+t \u2014 toggle thinking blocks"}),G$(O2,{dimColor:!0,children:" Ctrl+g \u2014 toggle cost display"}),G$(O2,{dimColor:!0,children:" Ctrl+e \u2014 cycle effort level"}),G$(O2,{dimColor:!0,children:" Ctrl+s \u2014 toggle trace waterfall"}),G$(O2,{dimColor:!0,children:" Escape \u2014 cancel streaming / close overlay / clear input"}),G$(O2,{dimColor:!0,children:" Ctrl+/ \u2014 toggle this help"})]}),X1&&G$(Bv,{state:CZ.kind==="thinking"?"thinking":"composing",elapsedSeconds:Math.floor(L?.wallTimeSeconds??0),totalTokens:L?.totalTokens??0,thoughtForSeconds:CZ.kind==="composing"?CZ.thoughtForSeconds:void 0,currentVerb:CZ.kind==="tool_running"?[...new Set(CZ.tools.values())].join(" \xB7 "):CZ.verb.present})]}),dY(H5,{flexDirection:"column",flexShrink:0,children:[D0&&_0&&L0&&G$(Wv,{currentLevel:C0??ZJ.autonomy,onSelect:_0,onCancel:L0}),z$&&A0&&u0&&G$(O60,{providers:z$,onSelect:A0,onCancel:u0}),U$&&s0&&V$&&G$(tI,{options:U$,onSelect:s0,onCancel:V$}),m0==="login-method"&&zK&&HO&&yQ&&G$(zH,{options:zK,onSelect:(N0)=>HO(N0.id),onCancel:yQ,title:UK??"Choose an option:",isActive:m0==="login-method"}),m0==="login-method"&&HK&&ZO&&mJ&&G$(E60,{options:HK,onSelect:ZO,onCancel:mJ,isActive:m0==="login-method"}),m0==="login-input"&&vQ&&hQ&&KO&&G$(BH,{title:vQ.title,hint:vQ.hint,onSubmit:hQ,onCancel:KO,isActive:m0==="login-input"}),m0==="login-input"&&JO&&jQ&&XO&&G$(BH,{title:"Enter Anthropic API key",hint:"Paste your sk-ant-api03-* key",onSubmit:jQ,onCancel:XO,isActive:m0==="login-input"}),m0==="login-input"&&TQ&&YO&&CQ&&G$(BH,{title:"Enter setup token",hint:"From `claude setup-token` or admin provisioning",onSubmit:YO,onCancel:CQ,isActive:m0==="login-input"}),m0==="login-method"&&KK&&RQ&&QO&&G$(zH,{options:KK,onSelect:RQ,onCancel:QO,title:"Select OpenAI login method:",isActive:m0==="login-method"}),m0==="login-input"&&wQ&&GO&&SQ&&G$(BH,{title:"Enter OpenAI API key",hint:"Paste your sk-* key",onSubmit:GO,onCancel:SQ,isActive:m0==="login-input"}),m0==="login-method"&&IQ&&bQ&&VO&&G$(zH,{options:IQ,onSelect:bQ,onCancel:VO,title:"Select Google login method:",isActive:m0==="login-method"}),m0==="login-input"&&kQ&&WO&&fQ&&G$(BH,{title:"Enter Google API key",hint:"Paste your AIza* key",onSubmit:WO,onCancel:fQ,isActive:m0==="login-input"}),m0==="login"&&_$&&c$&&d4&&G$(L60,{provider:_$,onCancel:d4,...r8&&z9?{authorizeUrl:r8,expectedState:p$??void 0,onCodeSubmit:z9}:{onComplete:c$},isActive:m0==="login"}),m0==="login"&&A5&&W7&&f2&&G$(sI,{provider:A5,profileLabel:GK??void 0,...VK&&V7&&WK?{verificationUri:VK,userCode:V7,onApprove:WK}:{onComplete:W7},onCancel:f2}),dY(H5,{flexDirection:"column",children:[m0==="command"&&G$(gv,{commands:K,initialFilter:mQ,onSelect:TT,onHandOffInput:g2,onCancel:RZ}),m0==="arion"&&G$(mv,{arions:z,initialFilter:AK,statusFilter:OO,onSelect:p6,onCancel:RZ}),m0==="model"&&G$(uv,{models:U,effortLevel:V0,onSelect:CT,onCancel:RZ}),m0==="theme"&&G$(sv,{onSelect:RT,onCancel:RZ}),m0==="sound"&&G$(Fh,{onClose:()=>J$("none")}),m0==="daemon"&&G$(Dh,{status:n??{running:!1},actionStatus:K0,onAction:(N0)=>z0?.(N0),onClose:()=>J$("none")}),m0==="invite-share"&&H7&&G$(Yh,{inviteToken:H7.inviteToken,inviteLabel:H7.inviteLabel,expiresAt:H7.expiresAt,onClose:()=>{J$("none"),OT?.()}}),m0==="join-invite"&&G$(Qh,{error:NT,onSubmit:(N0)=>{J$("none"),FK?.(N0)},onCancel:()=>{J$("none"),cJ?.()}}),m0==="memory"&&G$(dv,{memories:B,mode:F,isLoading:D,onSelect:wT,onCancel:RZ}),m0==="peers"&&G$(ev,{peers:pQ.length>0?pQ:y2,sameHomeClientsAvailable:zO.length>0,onSelect:(N0)=>{J$("none"),BK?.(N0)},onCancel:RZ}),m0==="clients"&&G$(Xh,{clients:zO,onSelect:(N0)=>{J$("none"),A6(`/send ${N0.clientId} `),FT?.(N0)},onCancel:()=>{J$("none"),DT?.()}}),m0==="pair-request"&&v2&&G$(Gh,{request:v2,onAccept:()=>{J$("none"),LT?.()},onReject:()=>{J$("none"),FO?.()}}),m0==="session"&&G$(av,{sessions:C,onSelect:(N0)=>{J$("none"),f?.(N0)},onCancel:RZ,onSearch:(N0)=>l?.(N0),onPageChange:(N0)=>$0?.(N0)}),m0==="message-edit"&&h2&&G$(iv,{messages:h2,onSelect:(N0,T0)=>{J$("none"),AT?.(N0,T0)},onCancel:RZ}),m0==="none"&&!B0&&G$(lS,{userName:O,value:LK,onChange:A6,onSubmit:a,onTrigger:aQ,onExit:()=>uJ(),history:R0,onSaveInput:I0,focus:m0==="none",isStreaming:G,onDoubleEscape:()=>{if(h2&&h2.length>0)return J$("message-edit"),!0;return!1}})]}),(!A||A.showStatusBar)&&G$(DS,{arion:{name:Vu,emoji:jT,color:PT,traits:TZ?.personality?.traits?.slice(0,2)},model:Z,maxContextTokens:J,responseTime:H,metrics:L,displayMode:q,showCosts:_,activeArion:R,effortLevel:V0,autonomyLevel:C0,meshMessageCount:ET,connectionState:O0})]})]})]})}var k60=E(()=>{Oh();N60();eI();A60();rI();_60();Lh();M60();aI();iS();P1();j60();M1();V8();I60()});function f60($){let Z=!1,J=(X)=>{if(Z)return;Z=!0,$(X)};return{onAbort(){J(!1)},onAllow(X){J(!0)},onReject(){J(!1)},onDone(){queueMicrotask(()=>{if(!Z)J(!1)})}}}import{jsx as _h,jsxs as Rw0}from"react/jsx-runtime";import{useMemo as y60,useState as ww0}from"react";import{Box as Sw0,useStdout as Iw0}from"ink";function bw0($){let Z=bU[$.toLowerCase()];return{name:$,userFacingName(J){if(Z)return Z.displayName(J);return $},renderToolUseMessage(J,X){if(Z)return Z.renderInput(J,X);return JSON.stringify(J)},isReadOnly(){return!1},inputSchema:{parse(J){return J??{}}}}}function fw0($){switch($){case"low":return 0.2;case"moderate":return 0.5;case"high":return 0.9}}function v60($){let{stdout:Z}=Iw0(),J=Z?.columns??80,[X]=ww0(!1),Y=y60(()=>{if(!$.approvalRequest)return null;return f60($.onApprovalChoice)},[$.approvalRequest,$.onApprovalChoice]),Q=y60(()=>{if(!$.approvalRequest||!Y)return null;let{toolName:G,input:V,riskLevel:W}=$.approvalRequest;return{assistantMessage:kw0,tool:bw0(G),description:`${G} requires approval`,input:V??{},commandPrefix:null,riskScore:fw0(W),onAbort:Y.onAbort,onAllow:Y.onAllow,onReject:Y.onReject}},[Y,$.approvalRequest]);if(Q&&Y)return Rw0(Sw0,{flexDirection:"column",width:"100%",children:[_h(Eh,{...$}),_h(hv,{toolUseConfirm:Q,onDone:Y.onDone,verbose:X})]});return _h(Eh,{...$})}var kw0;var h60=E(()=>{k60();VF();_q();_q();kw0={message:{id:"aria-approval"}}});var Mh;var x60=E(()=>{Mh=[{name:"become",description:"Switch to another arion",usage:"/become <name>",args:["<name>"],requiresArgs:!0},{name:"arions",description:"List all arions",args:[]},{name:"hatch",description:"Create a new arion",usage:"/hatch <name> [description]",args:["<name>","[description]"],requiresArgs:!0},{name:"rest",description:"Put an arion to rest",usage:"/rest <name>",args:["<name>"],requiresArgs:!0},{name:"wake",description:"Wake a resting arion",usage:"/wake <name>",args:["<name>"],requiresArgs:!0},{name:"model",description:"Change or view current AI model",usage:"/model [name|list|refresh] [--provider <name>] [--use-env]",args:["[name|list|refresh]","[--provider <name>]","[--use-env]"]},{name:"autonomy",description:"Change permission approval policy",usage:"/autonomy [level]",args:["[level]"]},{name:"sound",description:"Open sound preferences or toggle notifications",usage:"/sound [on|off]",args:["[on|off]"]},{name:"remember",description:"Store a memory",usage:"/remember <text>",args:["<text>"],requiresArgs:!0},{name:"recall",description:"Search memories",usage:"/recall <query>",args:["<query>"],requiresArgs:!0},{name:"recall_knowledge",description:"Search learned tools (skills, procedures, techniques)",usage:"/recall_knowledge <topic>",args:["<topic>"],requiresArgs:!0},{name:"send",description:"Send a peer or same-home client message through the runtime transport",usage:"/send <peer-name|node-id|client-id> <message>",args:["<peer-name|node-id|client-id>","<message>"],requiresArgs:!0},{name:"forget",description:"Delete a memory",usage:"/forget <id>",args:["<id>"],requiresArgs:!0},{name:"memories",description:"Browse all memories",args:[]},{name:"resume",description:"Resume a previous session",args:["[session-id]"]},{name:"fork",description:"Fork the current session into a new branch",usage:"/fork [session-id] [message-count] [--stay]",args:["[session-id]","[message-count]","[--stay]"]},{name:"clear",description:"Clear the screen",args:[]},{name:"login",description:"Authenticate with provider (bedrock, anthropic, openai, google, copilot)",usage:"/login [provider] [api-key|--profile <label>|--source <gh|device>]",args:["[provider]","[api-key|flags]"]},{name:"logout",description:"Disconnect a provider or clear all credentials",usage:"/logout [provider|all]",args:["[provider|all]"]},{name:"auth",description:"Auth utilities such as importing env credentials into session scope",usage:"/auth import-env [provider ...] | /auth clear-session | /auth status-session",args:["import-env|clear-session|status-session","[provider ...]"]},{name:"help",description:"Show available commands",args:[]},{name:"daemon",description:"Open daemon control panel or run start/stop/restart",usage:"/daemon [start|stop|restart]",args:["[start|stop|restart]"]},{name:"terminal-setup",description:"Install Shift+Enter newline key binding for supported terminals",usage:"/terminal-setup",args:[]},{name:"theme",description:"View or change the color theme",usage:"/theme [name]",args:["[name]"]},{name:"invite",description:"Create an internet invite token",usage:"/invite [label]",args:["[label]"]},{name:"join",description:"Accept an internet invite token",usage:"/join [token]",args:["[token]"]},{name:"peers",description:"Show nearby peers and connect",args:[]},{name:"clients",description:"Show same-home attached clients",args:[]},{name:"exit",description:"Exit ARIA",args:[]}]});function yw0(){return"1.0.60"}var __filename="/Users/hole/aria/.bundle-stage/cli/dist/release-notes.js",dM,g60;var Ph=E(()=>{dM=yw0(),g60=["\u26A1 Search millions of lines instantly with native Rust-powered code search","\uD83E\uDDE0 Jump to definitions & find references with real LSP intelligence","\u270F\uFE0F Press Esc\xD72 to edit and fork any previous message in-place","\uD83D\uDD0A Get audio cues when tasks finish \u2014 try /sound to configure","\uD83C\uDFA8 All 87 tools now render rich, beautiful output in the terminal"]});function m60($){let Z=jh.indexOf($);return jh[(Z+1)%jh.length]}function c60($,Z){let J=EF[$],X={};if(Z.showThinking!==J.showThinking)X.showThinking=Z.showThinking;if(Z.showCosts!==J.showCosts)X.showCosts=Z.showCosts;if(Z.showToolArgs!==J.showToolArgs)X.showToolArgs=Z.showToolArgs;if(Z.toolOutput!==J.toolOutput)X.toolOutput=Z.toolOutput;if(Z.showTraces!==J.showTraces)X.showTraces=Z.showTraces;if(Z.showPipelineTiming!==J.showPipelineTiming)X.showPipelineTiming=Z.showPipelineTiming;if(Z.showStatusBar!==J.showStatusBar)X.showStatusBar=Z.showStatusBar;return X}function u60($,Z){return{...EF[$],...Z??{}}}var EF,jh;var Th=E(()=>{EF={minimal:{showThinking:!1,showCosts:!1,showToolArgs:!1,toolOutput:"hidden",showTraces:!1,showPipelineTiming:!1,showStatusBar:!1},standard:{showThinking:!0,showCosts:!0,showToolArgs:!0,toolOutput:"standard",showTraces:!1,showPipelineTiming:!1,showStatusBar:!0},debug:{showThinking:!0,showCosts:!0,showToolArgs:!0,toolOutput:"expanded",showTraces:!0,showPipelineTiming:!0,showStatusBar:!0}},jh=["minimal","standard","debug"]});function vw0($){if(!($ instanceof Error))return!1;let Z=$.message;return Z.includes("has been released")||Z.includes("aborted")}function Ch($,Z,J){if(!Z){J?.();return}Z.catch((X)=>{if(!vw0(X))P.warn(`[SessionHistoryClient] ${$} IPC failed:`,X?.message??X);if(J)try{J()}catch(Y){P.warn(`[SessionHistoryClient] ${$} local fallback also failed:`,Y?.message??Y)}})}class FH{readDb;ipc;constructor($,Z){this.readDb=$,this.ipc=Z,$.enableLowContentionMode()}withPhase($,Z){O9($);try{return Z()}finally{N9()}}listSessions(...$){return this.withPhase("session-history:listSessions",()=>this.readDb.listSessions(...$))}loadSessionMessages(...$){return this.withPhase("session-history:loadSessionMessages",()=>this.readDb.loadSessionMessages(...$))}loadSession(...$){return this.withPhase("session-history:loadSession",()=>this.readDb.loadSession(...$))}searchSessionsFts(...$){return this.withPhase("session-history:searchSessionsFts",()=>this.readDb.searchSessionsFts(...$))}searchSessionSummaries(...$){return this.withPhase("session-history:searchSessionSummaries",()=>this.readDb.searchSessionSummaries(...$))}findSessionByPrefix(...$){return this.readDb.findSessionByPrefix(...$)}getSessionRuntimeState(...$){return this.readDb.getSessionRuntimeState(...$)}getInteraction(...$){return this.readDb.getInteraction(...$)}getIncompleteSessions(...$){return this.readDb.getIncompleteSessions(...$)}getInputHistory(...$){return this.withPhase("session-history:getInputHistory",()=>this.readDb.getInputHistory(...$))}addInputHistory(...$){return this.withPhase("session-history:addInputHistory",()=>this.readDb.addInputHistory(...$))}getSessionCount(...$){return this.readDb.getSessionCount(...$)}markStaleSessionsCompleted(...$){return this.withPhase("session-history:markStaleSessionsCompleted",()=>this.readDb.markStaleSessionsCompleted(...$))}getSession(...$){return this.readDb.getSession(...$)}createSession(...$){return this.readDb.createSession(...$)}persistMessagesNonBlocking($,Z){if(Z.length===0)return;this.readDb.markSessionIncremental($),Ch("appendSessionMessages",this.ipc.appendSessionMessages?.($,Z),()=>this.readDb.addConversationMessages($,Z))}addConversationMessages($,Z){this.persistMessagesNonBlocking($,Z)}addConversationMessage($,Z){this.persistMessagesNonBlocking($,[Z])}markCompleted($){Ch("markSessionCompleted",this.ipc.markSessionCompleted?.($),()=>this.readDb.markCompleted($))}replaceConversationMessages($,Z){Ch("replaceSessionMessages",this.ipc.replaceSessionMessages?.($,Z),()=>this.readDb.replaceConversationMessages($,Z))}completeRun(...$){return this.readDb.completeRun(...$)}claimSessionForMutation(...$){return this.readDb.claimSessionForMutation(...$)}releaseSessionClaim(...$){return this.readDb.releaseSessionClaim(...$)}recordPausedRun(...$){return this.readDb.recordPausedRun(...$)}deleteSession(...$){return this.readDb.deleteSession(...$)}forkSession(...$){return this.readDb.forkSession(...$)}cancelInteraction(...$){return this.readDb.cancelInteraction(...$)}setSessionTitle(...$){return this.readDb.setSessionTitle(...$)}recordInteractionResponse(...$){return this.readDb.recordInteractionResponse(...$)}close(){this.readDb.close()}}var Rh=E(()=>{S0();AV()});function hw0($){return typeof $!=="string"||$.trim().length>0}function xw0($){let{toolCalls:Z,...J}=$;return J}function gw0($,Z,J){for(let X=Z;X<$.length;X++){let Y=$[X];if(Y.role==="tool"&&Y.toolCallId===J)return!0}return!1}function lY($){let Z=[];for(let J=0;J<$.length;J++){let X=$[J];if(X.role==="assistant"&&X.toolCalls?.length){let Y=new Set(X.toolCalls.map((K)=>K.id)),Q=new Set,G=[],V=J+1;while(V<$.length&&$[V].role==="tool"){let K=$[V];if(K.toolCallId&&Y.has(K.toolCallId)&&!Q.has(K.toolCallId))Q.add(K.toolCallId),G.push(K);V++}let W=X.toolCalls.filter((K)=>{if(Q.has(K.id))return!0;return!gw0($,V,K.id)}),H=W.filter((K)=>!Q.has(K.id));if(W.length===X.toolCalls.length)Z.push(X);else if(W.length>0)Z.push({...X,toolCalls:W});else if(hw0(X.content))Z.push(xw0(X));Z.push(...G);for(let K of H)Z.push({role:"tool",content:`[Tool execution interrupted \u2014 no result for ${K.name}]`,toolCallId:K.id});J=V-1;continue}if(X.role==="tool")continue;Z.push(X)}return Z}function p60($){let Z=[];for(let J of $)for(let X of J.content)switch(X.type){case"thinking":Z.push({id:`thinking-${crypto.randomUUID()}`,role:"thinking_history",content:X.content,wordCount:X.wordCount,durationSeconds:X.durationMs!=null?X.durationMs/1000:void 0,verb:X.verb,arionName:J.arion?.name,arionEmoji:J.arion?.emoji,arionColor:J.arion?.color});break;case"tool_use":Z.push({id:`tool-${crypto.randomUUID()}`,role:"tool_history",tool:{id:X.id,name:X.name,args:X.arguments,status:"pending",startTime:void 0,endTime:void 0}});break;case"tool_result":{let Y;for(let Q=Z.length-1;Q>=0;Q--){let G=Z[Q];if(G.role==="tool_history"&&G.tool.id===X.toolUseId){Y=G;break}}if(Y){if(Y.tool.status=X.status==="error"?"error":"complete",X.status==="error")Y.tool.error=X.content;else Y.tool.result=X.content;if(X.resultData!==void 0)Y.tool.resultData=X.resultData;if(X.durationMs!==void 0)Y.tool.durationMs=X.durationMs;if(X.usage!==void 0)Y.tool.usage=X.usage}break}case"handoff":Z.push({id:`handoff-${crypto.randomUUID()}`,role:"handoff_history",target:X.target,direction:X.direction});break;case"error":Z.push({id:`error-${crypto.randomUUID()}`,role:"error",content:X.content,suggestion:X.suggestion});break;case"text":Z.push({id:`msg-${crypto.randomUUID()}`,role:J.role,content:X.text,arion:J.arion?{name:J.arion.name,emoji:J.arion.emoji,color:J.arion.color}:void 0});break}return Z}var lM=E(()=>{TR()});class LJ{textParts=[];thinkingBlocks=[];toolUseBlocks=[];handoffBlocks=[];toolResultMessages=[];seenToolIds=new Set;toolArgsAccumulator=new Map;thinkingInProgress=!1;pendingThinkingContent="";arion;verb;tokenUsage;snapshotMessages;previewAssistantId=`preview-${Date.now()}`;ingest($){switch($.type){case"text_delta":return this.textParts.push($.content),"continue";case"thinking_start":return this.thinkingInProgress=!0,this.pendingThinkingContent="","continue";case"thinking_delta":return this.pendingThinkingContent+=$.content,"continue";case"thinking_end":{this.thinkingInProgress=!1;let Z=Array.isArray($.blocks)&&$.blocks.length>0?$.blocks[0]:void 0,J=typeof Z?.thinking==="string"?Z.thinking:this.pendingThinkingContent,X=J.split(/\s+/).filter(Boolean).length,Y={type:"thinking",content:J,wordCount:X,durationMs:$.durationMs,verb:this.verb};return this.thinkingBlocks.push(Y),this.pendingThinkingContent="","continue"}case"tool_start":{if(this.seenToolIds.has($.id))return"continue";this.seenToolIds.add($.id);let Z={type:"tool_use",id:$.id,name:$.name,arguments:$.input??{}};return this.toolUseBlocks.push(Z),"continue"}case"tool_args_delta":{let J=(this.toolArgsAccumulator.get($.id)??"")+$.args;this.toolArgsAccumulator.set($.id,J);try{let X=JSON.parse(J),Y=this.toolUseBlocks.find((Q)=>Q.type==="tool_use"&&Q.id===$.id);if(Y)Y.arguments=X}catch{}return"continue"}case"tool_result":{if($.input){let Q=this.toolUseBlocks.find((G)=>G.type==="tool_use"&&G.id===$.id);if(Q){let G=typeof $.input==="object"&&!Array.isArray($.input)?$.input:{};if(Object.keys(Q.arguments).length===0)Q.arguments=G}}let Z=$.result,J="usage"in $&&$.usage&&typeof $.usage==="object"&&typeof $.usage.inputTokens==="number"&&typeof $.usage.outputTokens==="number"&&typeof $.usage.totalTokens==="number"&&typeof $.usage.estimatedCost==="number"?$.usage:void 0,X={type:"tool_result",toolUseId:$.id,content:typeof Z.message==="string"?Z.message:"",status:Z.success===!0?"success":"error",durationMs:$.durationMs,resultData:Z.data,usage:J},Y={id:crypto.randomUUID(),role:"tool",content:[X],arion:this.arion,createdAt:new Date().toISOString()};return this.toolResultMessages.push(Y),"continue"}case"handoff_start":{let Z={type:"handoff",target:$.target,direction:"to"};return this.handoffBlocks.push(Z),"continue"}case"handoff_result":{let Z={type:"handoff",target:$.target,direction:"from"};return this.handoffBlocks.push(Z),"continue"}case"turn_complete":return"flush";case"messages_snapshot":return this.snapshotMessages=$.messages,"continue";default:return"continue"}}flush(){let $=[];if(this.thinkingInProgress&&this.pendingThinkingContent){let X=this.pendingThinkingContent.trim(),Y=X.length===0?0:X.split(/\s+/).length,Q={type:"thinking",content:this.pendingThinkingContent,wordCount:Y,verb:this.verb};this.thinkingBlocks.push(Q)}let Z=[];Z.push(...this.thinkingBlocks);let J=this.textParts.join("");if(J)Z.push({type:"text",text:J});if(Z.push(...this.toolUseBlocks),Z.push(...this.handoffBlocks),Z.length>0){let X={id:crypto.randomUUID(),role:"assistant",content:Z,arion:this.arion,tokenUsage:this.tokenUsage,createdAt:new Date().toISOString()};$.push(X)}if($.push(...this.toolResultMessages),this.toolResultMessages.length>0&&this.toolUseBlocks.length>0){let X=new Set(this.toolResultMessages.flatMap((Y)=>Y.content.filter((Q)=>Q.type==="tool_result").map((Q)=>Q.toolUseId)));for(let Y of this.toolUseBlocks){let Q=Y.id;if(Q&&!X.has(Q)){let G={id:crypto.randomUUID(),role:"tool",content:[{type:"tool_result",toolUseId:Q,content:"Tool execution cancelled by user.",status:"error"}],arion:this.arion,createdAt:new Date().toISOString()};$.push(G)}}}return this.textParts=[],this.thinkingBlocks=[],this.toolUseBlocks=[],this.handoffBlocks=[],this.toolResultMessages=[],this.seenToolIds=new Set,this.toolArgsAccumulator=new Map,this.thinkingInProgress=!1,this.pendingThinkingContent="",this.tokenUsage=void 0,this.verb=void 0,this.previewAssistantId=`preview-${Date.now()}`,$}snapshot(){let $=[];if($.push(...this.thinkingBlocks.map((X)=>({...X}))),this.thinkingInProgress&&this.pendingThinkingContent){let X=this.pendingThinkingContent,Y={type:"thinking",content:X,wordCount:X.split(/\s+/).filter(Boolean).length,verb:this.verb};$.push(Y)}let Z=this.textParts.join("");if(Z){let X=Z.lastIndexOf(`
|
|
4727
4728
|
`);if(X>=0)$.push({type:"text",text:Z.slice(0,X+1)})}for(let X of this.toolUseBlocks){let Y={...X};if(Y.type==="tool_use"&&Object.keys(Y.arguments).length===0){let Q=this.toolArgsAccumulator.get(Y.id);if(Q){let G=LJ.tryParsePartialArgs(Q);if(G)Y.arguments=G}}$.push(Y)}$.push(...this.handoffBlocks.map((X)=>({...X})));let J=[];if($.length>0)J.push({id:this.previewAssistantId,role:"assistant",content:$,arion:this.arion,createdAt:new Date().toISOString()});return J.push(...this.toolResultMessages.map((X)=>({...X,content:[...X.content]}))),J}getSnapshotMessages(){return this.snapshotMessages}hasPendingContent(){return this.textParts.length>0||this.thinkingBlocks.length>0||this.toolUseBlocks.length>0||this.handoffBlocks.length>0||this.toolResultMessages.length>0||this.thinkingInProgress}setArion($){this.arion=$}setVerb($){this.verb=$}setTokenUsage($){if(this.tokenUsage)this.tokenUsage={input:this.tokenUsage.input+$.input,output:this.tokenUsage.output+$.output};else this.tokenUsage={...$}}static tryParsePartialArgs($){let Z=$.trim();if(!Z.startsWith("{")||Z.length<4)return;try{return JSON.parse(Z)}catch{}try{let J=JSON.parse(Z+"}");if(Object.keys(J).length>0)return J}catch{}try{let J=JSON.parse(Z+'"}');if(Object.keys(J).length>0)return J}catch{}for(let J=Z.length-1;J>0;J--)if(Z[J]===",")try{let X=JSON.parse(Z.slice(0,J)+"}");if(Object.keys(X).length>0)return X}catch{}return}}import{readFileSync as mw0,existsSync as wh}from"fs";function Sh($){if(!wh($))return[];let J=mw0($,"utf-8").split(`
|
|
4728
4729
|
`).filter((Q)=>Q.trim().length>0),X=new LJ,Y=[];for(let Q of J){let G;try{G=JSON.parse(Q)}catch{continue}if(!G.event||typeof G.event.type!=="string")continue;if(G.event.type==="user_message"){if(X.hasPendingContent())Y.push(...X.flush());let W=G.event.content??"",H=G.event.id,K=mG(W);if(H)K.id=H;Y.push(K);continue}if(X.ingest(G.event)==="flush"){let W=X.flush();Y.push(...W)}}if(X.hasPendingContent()){let Q=X.flush();Y.push(...Q)}return Y}function d60($){for(let J of $.content){if(J.type==="tool_use"&&J.id)return`tool_use:${J.id}`;if(J.type==="tool_result"&&J.toolUseId)return`tool_result:${J.toolUseId}`}let Z=$.content.filter((J)=>J.type==="text").map((J)=>J.text).join("");return`${$.role}:${Z}`}function aM($,Z){if(!Z)return{messages:$,backfillMessages:[]};let J;try{J=Sh(Z)}catch{return{messages:$,backfillMessages:[]}}if(J.length===0)return{messages:$,backfillMessages:[]};if($.length>=J.length)return{messages:$,backfillMessages:[]};let X=new Set($.map(d60)),Y=[];for(let G of J){let V=d60(G);if(!X.has(V))Y.push(G)}return{messages:[...$,...Y],backfillMessages:Y}}function nM($,Z,J){let X=`${$}/arions/${Z}/logs/${J}.jsonl`;if(wh(X))return X;let Y=`${$}/logs/${J}.jsonl`;if(wh(Y))return Y;return null}var l60=E(()=>{lM()});var Ih={};A$(Ih,{toModelMessages:()=>DL,replaySessionFromJsonl:()=>Sh,repairToolCallPairing:()=>lY,mergeWithJsonlRecovery:()=>aM,fromV1Columns:()=>uG,fromModelMessages:()=>cG,findJsonlForSession:()=>nM,extractToolCalls:()=>dG,extractToolCallId:()=>aG,extractThinking:()=>lG,extractTextContent:()=>pG,createUserMessage:()=>mG,createSystemMessage:()=>l0,createIncomingMessagePair:()=>FL,createErrorMessage:()=>Y$,conversationMessageToHistoryMessages:()=>p60,TurnAccumulator:()=>LJ,SessionHistoryClient:()=>FH,SessionHistory:()=>Z6,ConversationMessageSchema:()=>BL,ContentBlockSchema:()=>Ad,ArionRefSchema:()=>Ed});var aY=E(()=>{SR();Rh();lM();l60()});import{existsSync as cw0}from"fs";import{fileURLToPath as a60}from"url";function uw0(){return[a60(new URL("../main.ts",import.meta.url)),a60(new URL("../main.js",import.meta.url))]}function bh(){let $=process.env.ARIA_RUNTIME_KIND?.trim();if($==="source-bun"||$==="compiled-bun"||$==="bundled-bun")return $;let Z=process.argv[1]??"";if(!Z.endsWith(".ts")&&!Z.endsWith(".js")&&!Z.endsWith(".mjs"))return"compiled-bun";if(uw0().some((J)=>cw0(J)))return"source-bun";return"bundled-bun"}function n60(){return bh()==="compiled-bun"}var kh=()=>{};import{existsSync as fh}from"fs";import{fileURLToPath as iM}from"url";function i60(){return process.platform==="win32"?"bun.exe":"bun"}function pw0(){let $=[iM(new URL("../main.ts",import.meta.url)),iM(new URL("../main.js",import.meta.url))];for(let Z of $)if(fh(Z))return Z;throw Error("[aria] Could not resolve Bun source entrypoint for internal relaunch")}function dw0(){let $=process.argv[1]??"";if(fh($))return $;let Z=[iM(new URL("../../bin/aria.mjs",import.meta.url)),iM(new URL("../bin/aria.mjs",import.meta.url))];for(let J of Z)if(fh(J))return J;throw Error("[aria] Could not resolve bundled entrypoint for internal relaunch")}function oM($){let Z=bh(),J=$.args??[],X={...process.env,...$.env??{}},Y=$.cwd??process.cwd();switch(Z){case"source-bun":return{command:i60(),args:[pw0(),"__internal",$.mode,...J],env:X,cwd:Y};case"bundled-bun":return{command:i60(),args:[dw0(),"__internal",$.mode,...J],env:X,cwd:Y};case"compiled-bun":return{command:process.execPath,args:["__internal",$.mode,...J],env:X,cwd:Y}}}var yh=E(()=>{kh()});function sM($,Z={}){let J={},X={cwd:$.cwd,env:$.env,stdio:Z.stdio??["inherit","inherit","inherit"]};if(Z.ipc)X.ipc=(Q)=>{for(let G of J.message??[])G(Q)};let Y=Bun.spawn([$.command,...$.args],X);return Y.exited.then((Q)=>{for(let G of J.close??[])G(Q)}).catch((Q)=>{let G=Q instanceof Error?Q:Error(String(Q));for(let V of J.error??[])V(G)}),{send(Q){Y.send(Q)},on(Q,G){(J[Q]??=[]).push(G)},unref(){Y.unref()}}}import{existsSync as MF,mkdirSync as lw0,readFileSync as r60,writeFileSync as aw0,unlinkSync as vh,readdirSync as nw0}from"fs";import{dirname as BT$,join as xh,resolve as FT$}from"path";function t60($){Zz($)}function iw0($){return eC($)}function rM($){$R($)}function ow0($){if(!$||typeof $!=="object")return!1;let Z=$;return Z.code==="EPIPE"||Z.code==="EIO"||Z.code==="ERR_STREAM_DESTROYED"}function i1($){try{process.stderr.write($)}catch(Z){if(ow0(Z))return;throw Z}}function sw0($){if(!$||typeof $!=="object")return $ instanceof Error&&/^exit:\d+$/.test($.message);if($.__ariaProcessExit===!0)return!0;return $ instanceof Error&&/^exit:\d+$/.test($.message)}function AJ($){let Z=$?.trim()||null;if(g8=Z,Z)process.env[P4]=Z;else delete process.env[P4]}function gh(){return g8}function DH($){o1=$||"ARIA",process.env[e2]=o1}function e60(){return process.env[$z]==="true"}function $Z0(...$){return xh(x9(),...$)}function ZZ0(){return $Z0("crash-markers")}function mh($){return xh(ZZ0(),`${$}.json`)}function tw0($){let Z=mh($);if(!MF(Z))return null;try{return JSON.parse(r60(Z,"utf-8"))}catch{return null}}function ew0($){try{let Z=ZZ0();lw0(Z,{recursive:!0}),aw0(mh($.sessionId),JSON.stringify($),"utf-8")}catch{}}function hh($){try{let Z=mh($);if(MF(Z))vh(Z)}catch{}}function $S0(){return $Z0("crash-reports","latest.json")}function o60($,Z){i1(`[aria] Session ${$} exceeded crash limit (${Z}/${_F}). Starting fresh instead of resuming.
|
|
4729
4730
|
`),hh($),g8=null,AJ(null)}function ZS0(){let $=$S0();if(!MF($))return null;try{let Z=JSON.parse(r60($,"utf-8"));try{vh($)}catch{}return{message:Z?.error?.message??"unknown",stack:Z?.error?.stack??void 0,heapMb:Z?.process?.heapUsedMb,rssMb:Z?.process?.rssMb}}catch{try{vh($)}catch{}return null}}async function s60($){let Z=iw0(process.pid);if(Z){if(Date.now()-new Date(Z.timestamp).getTime()<rw0)return rM(process.pid),{sessionId:Z.sessionId,arionName:Z.arionName||$,source:"marker"};rM(process.pid)}try{let{SessionHistory:J}=await Promise.resolve().then(() => (aY(),Ih)),{getAriaDir:X}=await Promise.resolve().then(() => (Y4(),_A)),Y=X(),Q=new Set([$]),G=xh(Y,"arions");if(MF(G)){for(let W of nw0(G,{withFileTypes:!0}))if(W.isDirectory()&&W.name.trim())Q.add(W.name.trim())}let V=null;for(let W of Q){let H=J.resolvePerArionPath(Y,W);if(!MF(H))continue;let K=new J(H);try{let z=K.getIncompleteSessions(1);if(z.length===0)continue;let U=z[0],B=U.updatedAt.getTime();if(!V||B>V.updatedAtMs||B===V.updatedAtMs&&W===$)V={sessionId:U.id,arionName:W,updatedAtMs:B}}finally{K.close()}}if(V)return{sessionId:V.sessionId,arionName:V.arionName,source:V.arionName===$?"history":"history-scan"}}catch(J){i1(`[aria] SessionHistory fallback failed: ${J instanceof Error?J.message:String(J)}
|
|
@@ -5285,12 +5286,12 @@ ${V}
|
|
|
5285
5286
|
DROP TABLE outbox_receipt_legacy_status;
|
|
5286
5287
|
COMMIT;
|
|
5287
5288
|
`);let q=new Set(this.db.prepare("PRAGMA table_info(replay_guard)").all().map((R)=>R.name)),A=["message_id","sender_node_id","sender_fingerprint","runtime_id","received_at"].filter((R)=>!q.has(R));if(A.length>0)throw Error(`[node-store] Legacy replay_guard schema requires hard reset: missing columns: ${A.join(", ")}`);let N=new Set(this.db.prepare("PRAGMA table_info(revocation_events)").all().map((R)=>R.name)),_=["node_id","display_name_snapshot","fingerprint","revoked_at","local_node_id","operator_confirmation","reason","revocation_generation"].filter((R)=>!N.has(R));if(_.length>0)throw Error(`[node-store] Legacy revocation_events schema requires hard reset: missing columns: ${_.join(", ")}`);let M=new Set(this.db.prepare("PRAGMA table_info(revocation_conflict)").all().map((R)=>R.name)),T=["conflict_id","node_id","previous_fingerprint","conflicting_fingerprint","reason","recorded_at"].filter((R)=>!M.has(R));if(T.length>0)throw Error(`[node-store] Legacy revocation_conflict schema requires hard reset: missing columns: ${T.join(", ")}`);let k=["peer_binding","runtime_events","outbox_receipt","replay_guard","revocation_conflict"];for(let R of k)if(!new Set(this.db.prepare(`PRAGMA table_info(${R})`).all().map((o)=>o.name)).has("owner_generation"))this.db.exec(`ALTER TABLE ${R} ADD COLUMN owner_generation INTEGER NOT NULL DEFAULT 0`)}}async function uS0($){return(await Promise.resolve().then(() => (iY(),Jx))).resolveOrCreateNode($)}var RF=1,RZ0,th;var O6=E(()=>{W8();PG();sh();sh();RZ0=["queued_for_route","dispatching","acked","expired"],th=RZ0.map(($)=>`'${$}'`).join(", ")});var Jx={};A$(Jx,{resolveOrCreateNode:()=>IF,resolveConfiguredNode:()=>Qx,readResolvedNodeSync:()=>Gx,nodeMetadataPathForAriaHome:()=>EH,canonicalizeAriaHome:()=>s1,NODE_METADATA_SCHEMA_VERSION:()=>SF});import*as EZ from"fs";import*as A2 from"path";function lS0($){return new Promise((Z)=>setTimeout(Z,$))}function aS0($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function s1($){let Z=A2.resolve($);try{return EZ.realpathSync.native(Z)}catch{return Z}}function EH($){return qH($)}function nS0($){return`${EH($)}.lock`}function SZ0($){return[A2.join($,"network","config.json"),A2.join($,"network","state.db"),A2.join($,"signing-key.json"),A2.join($,"peers.db")].some((J)=>EZ.existsSync(J))}async function iS0($){EZ.mkdirSync(A2.dirname($),{recursive:!0});let Z=Date.now();while(!0)try{let J=await EZ.promises.open($,"wx",384);return await J.writeFile(`${process.pid}
|
|
5288
|
-
`,"utf8"),await J.close(),async()=>{try{if((await EZ.promises.readFile($,"utf8")).trim()===String(process.pid))await EZ.promises.rm($,{force:!0})}catch{}}}catch(J){if(J.code!=="EEXIST")throw J;let Y=null;try{Y=Number.parseInt((await EZ.promises.readFile($,"utf8")).trim(),10)}catch{Y=null}if(!Y||!aS0(Y)){await EZ.promises.rm($,{force:!0});continue}if(Date.now()-Z>5000)throw Error(`[node-metadata] Timed out waiting for lock ${$}`);await lS0(25)}}function Xx($,Z,J){if(J.schemaVersion!==SF)throw Error(`[node-metadata] Unsupported schema version ${J.schemaVersion} at ${Z}`);return{ariaHome:$,metadataPath:Z,...J}}function Yx($,Z,J){if(!J)return null;return Xx($,Z,P5.parse(J))}async function IZ0($,Z){let J=EH($),X=await iS0(nS0($));try{let Y=new M$({ariaHome:$});try{return Z(Y,J)}catch(Q){throw Error(`[node-metadata] Failed to resolve node metadata at ${J}: ${Q instanceof Error?Q.message:String(Q)}`)}finally{Y.close()}}finally{await X()}}async function bZ0($,Z,J){let X=$.get(Z);if(X)return X;let Y=J();$.set(Z,Y);try{return await Y}finally{if($.get(Z)===Y)$.delete(Z)}}async function IF($){let Z=s1($.ariaHome);return bZ0(pS0,Z,async()=>IZ0(Z,(J,X)=>{let Y=Yx(Z,X,J.readNodeMetadata());if(Y)return Y;let Q={...J.resolveOrCreateNode(),migratedFromLegacy:SZ0(Z)};return J.writeNodeMetadata(Q),Xx(Z,X,Q)}))}async function Qx($){let Z=s1($.ariaHome),J=`${Z}\x00${$.nodeId}`;return bZ0(dS0,J,async()=>IZ0(Z,(X,Y)=>{let Q=Yx(Z,Y,X.readNodeMetadata());if(Q){if(Q.nodeId!==$.nodeId)throw Error(`[node-metadata] Configured nodeId ${$.nodeId} does not match durable node metadata ${Q.nodeId} at ${Y}`);return Q}let G={nodeId:$.nodeId,createdAt:new Date().toISOString(),schemaVersion:SF,migratedFromLegacy:SZ0(Z)};return X.writeNodeMetadata(G),Xx(Z,Y,G)}))}function Gx($){let Z=s1($.ariaHome),J=EH(Z),X=new M$({ariaHome:Z});try{return Yx(Z,J,X.readNodeMetadata())}finally{X.close()}}var SF=1,pS0,dS0;var iY=E(()=>{W8();O6();pS0=new Map,dS0=new Map});var bF=E(()=>{sE();EB();by();cU()});var kZ0={};A$(kZ0,{MemoriaPool:()=>i8});var _H=E(()=>{$_()});var ZP=E(()=>{q_();wB();Iy()});import oS0 from"crypto";function fZ0($){let Z={};if(Z.bindingGeneration=$.bindingGeneration,Z.createdAt=$.createdAt,Z.newPrincipalFingerprint=$.newPrincipalFingerprint,$.newTransportPublicKey!==void 0)Z.newTransportPublicKey=$.newTransportPublicKey;if(Z.nodeId=$.nodeId,Z.previousPrincipalFingerprint=$.previousPrincipalFingerprint,$.revocationGeneration!==void 0)Z.revocationGeneration=$.revocationGeneration;let J=Object.keys(Z).sort();return Buffer.from(JSON.stringify(Z,J),"utf-8")}function JP($,Z,J){let X=fZ0($);return oS0.verify(null,X,J,Buffer.from(Z,"base64"))}var yZ0=()=>{};var Vx=E(()=>{UM();Vv();Xv();oy();sy();HM();FM();yZ0()});function Wx($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function sS0($){return typeof $==="number"&&Number.isInteger($)&&$>0?$:void 0}function vZ0($){let Z=$?.externalEndpoint&&typeof $.externalEndpoint==="object"&&!Array.isArray($.externalEndpoint)?$.externalEndpoint:void 0;return Wx(Z?.address)??"127.0.0.1"}function hZ0($){let Z=$.networkConfig??$.networkManager?.getConfig?.()??null,J=B$.safeParse(Z?.publicKey).data,X=x0.safeParse(Wx(Z?.signingPublicKey)).data,Y=sS0(Z?.listenPort);if(!J||!X||!Y)throw Error(`${$.errorContext??"[runtime-bootstrap-record]"} Runtime bootstrap identity unavailable`);let Q=vZ0(Z),G=Wx($.displayNameSnapshot??$.networkManager?.getLocalDisplayNameSnapshot?.());if(!G)throw Error(`${$.errorContext??"[runtime-bootstrap-record]"} Runtime bootstrap display name unavailable`);return{displayNameSnapshot:G,transportPublicKey:J,signingPublicKey:X,transportEndpoint:{host:Q,port:Y}}}function kF($){let Z=$.networkConfig??$.networkManager?.getConfig?.()??null,J=$.publishedAt??new Date().toISOString(),X=d$.parse($.caFingerprint),Y=hZ0({networkManager:$.networkManager,networkConfig:Z,displayNameSnapshot:$.displayNameSnapshot,errorContext:"[runtime-bootstrap-record]"}),Q=C9(Y.signingPublicKey);if(!Q)throw Error("[runtime-bootstrap-record] Runtime bootstrap principal identity unavailable");return u8.parse({nodeId:$.nodeId,runtimeId:$.runtimeId,...$.arionName?{arionName:$.arionName}:{},ownerGeneration:$.ownerGeneration,bootstrapRevision:$.bootstrapRevision??1,phase:$.phase??"network_ready",protocolVersion:a6,controlEndpoint:{host:$.controlHost??vZ0(Z),port:$.controlPort},...Y,tls:{caFingerprint:X,caCertPem:$.caCertPem,principalIdentity:Q,loopbackIdentity:F7.parse("localhost")},publishedAt:J,...$.degradedReason?{degradedReason:$.degradedReason}:{},...$.failedPhase?{failedPhase:$.failedPhase}:{}})}var xZ0=E(()=>{b0();FM()});var XP=E(()=>{QM();iy();YM();xZ0()});var gZ0=E(()=>{jB();Gv();bF();_H();ZP();Vx();XP()});var QP=IZ((oZ)=>{var rS0=oZ&&oZ.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),tS0=oZ&&oZ.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),Kx=oZ&&oZ.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")rS0(J,Z,X[Y])}return tS0(J,Z),J}}();Object.defineProperty(oZ,"__esModule",{value:!0});oZ.SecureTunnel=void 0;oZ.wrapIpv4=uZ0;oZ.unwrapIpv4=pZ0;var eS0=Kx(
|
|
5289
|
-
`)}catch{}}function uZ0($,Z=167772161,J=167772162){if($.length>65515)throw Error("Payload too large for IPv4 (max 65515 bytes)");let X=20+$.length,Y=Buffer.alloc(20);Y[0]=69,Y.writeUInt16BE(X,2),Y[6]=64,Y[8]=64,Y[9]=4,Y.writeUInt32BE(Z,12),Y.writeUInt32BE(J,16);let Q=0;for(let G=0;G<20;G+=2)Q+=Y.readUInt16BE(G);while(Q>65535)Q=(Q&65535)+(Q>>16);return Y.writeUInt16BE(~Q&65535,10),Buffer.concat([Y,$])}function pZ0($,Z){if($.length<20)return $;if(Z!==void 0){let X=$.readUInt32BE(12);if(X!==Z)throw Error(`Source IP mismatch: expected ${Z.toString(16)}, got ${X.toString(16)}`)}let J=($.readUInt8(0)&15)*4;return $.subarray(J)}var ZI0=4;function Hx($){if(!$||$.length<4)return!1;return $.readUInt32LE(0)===ZI0}class dZ0 extends $I0.EventEmitter{options;socket=null;tickTimer=null;tunnel=null;stats={bytesSent:0,bytesReceived:0,handshakes:0,lastHandshake:null,active:!1};handshakeCompleted=!1;peerHost;peerPort;externalSocketUnsub=null;constructor($){super();this.options=$,this.peerHost=$.peerHost,this.peerPort=$.peerPort}async start(){if(this.stats.active)throw Error("Tunnel already active");YP({event:"secure_tunnel_start_called",peerPublicKey:this.options.peerPublicKey,peerHost:this.peerHost,peerPort:this.peerPort,listenPort:this.options.listenPort??null,externalSocket:Boolean(this.options.externalSocket)});let{createTunnel:$}=await Promise.resolve().then(() => U7(MH()));this.tunnel=$({privateKey:this.options.privateKey,peerPublicKey:this.options.peerPublicKey,presharedKey:this.options.presharedKey,keepalive:this.options.keepalive??25});let Z;if(this.options.externalSocket)Z=this.options.externalSocket.port,this.externalSocketUnsub=this.options.externalSocket.onPacket((Y,Q)=>this.classifyIncomingPacket(Y,Q));else this.socket=eS0.createSocket("udp4"),Z=await new Promise((Y,Q)=>{this.socket.on("error",Q),this.socket.bind(this.options.listenPort??0,()=>{let G=this.socket.address();Y(G.port)})}),this.socket.on("message",(Y,Q)=>{this.handleIncomingPacket(Y,Q)}),this.socket.on("error",(Y)=>this.emit("error",Y)),this.socket.on("close",()=>this.emit("close"));let J=0,X=5;return this.tickTimer=setInterval(()=>{if(!this.tunnel)return;try{let Y=this.tunnel.tick();this.handleResult(Y),J=0}catch(Y){if(J++,this.emit("error",Y),J>=X)this.emit("error",Error(`Tunnel tick failed ${X} consecutive times \u2014 stopping tunnel`)),this.stop()}},250),this.stats.active=!0,YP({event:"secure_tunnel_start_returned",peerPublicKey:this.options.peerPublicKey,peerHost:this.peerHost,peerPort:this.peerPort,active:this.stats.active,handshakeCompleted:this.handshakeCompleted,handshakes:this.stats.handshakes,port:Z}),Z}handleIncomingPacket($,Z){return this.classifyIncomingPacket($,Z).handled}classifyIncomingPacket($,Z){if(!this.tunnel)return{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"no_tunnel"};try{let J=this.tunnel.decrypt($,Z.address);if(J.op==="error"){let G=J.data?J.data.toString():"decrypt error";if(this.options.externalSocket)return{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"decrypt_error",errorDetail:G};return this.emit("error",Error(G)),{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"decrypt_error",errorDetail:G}}if(J.op==="done"){if(Z.address&&Z.port)this.peerHost=Z.address,this.peerPort=Z.port;let G=this.tunnel.decrypt(Buffer.alloc(0));while(G.op!=="done"&&G.op!=="error"){if(G.op==="write_to_network"&&Hx(G.data))this.markAuthenticatedSessionProof();this.handleResult(G),G=this.tunnel.decrypt(Buffer.alloc(0))}return YP({event:"secure_tunnel_peer_activity",peerPublicKey:this.options.peerPublicKey,peerHost:Z.address,peerPort:Z.port,handshakeCompleted:this.handshakeCompleted}),this.emit("peerActivity"),{handled:!0,peerPublicKey:this.options.peerPublicKey,outcome:"done"}}let X=J.op==="write_to_network"?"write_to_network":"write_to_tunnel";if(this.peerHost=Z.address,this.peerPort=Z.port,J.op==="write_to_network"&&Hx(J.data))this.markAuthenticatedSessionProof();this.handleResult(J);let Y=0,Q=100;while(J.op!=="done"&&Y<Q){if(Y++,J=this.tunnel.decrypt(Buffer.alloc(0)),J.op==="done")break;if(J.op==="write_to_network"&&Hx(J.data))this.markAuthenticatedSessionProof();this.handleResult(J)}return{handled:!0,peerPublicKey:this.options.peerPublicKey,outcome:X}}catch(J){if(this.options.externalSocket)return{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"decrypt_exception",errorDetail:J instanceof Error?J.message:String(J)};return this.emit("error",J),{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"decrypt_exception",errorDetail:J instanceof Error?J.message:String(J)}}}get isActive(){return this.stats.active}sendPlaintext($){if(!this.tunnel||!this.stats.active)throw Error("Tunnel not active");let Z=this.options.tunnelSrcIp??167772161,J=this.options.tunnelDstIp??167772162,X=uZ0($,Z,J),Y=this.tunnel.encrypt(X);this.handleResult(Y),this.stats.bytesSent+=$.length}setPeerEndpoint($,Z){this.peerHost=$,this.peerPort=Z}getStats(){return{...this.stats}}markAuthenticatedSessionProof(){if(this.handshakeCompleted)return;this.handshakeCompleted=!0,this.stats.handshakes++,this.stats.lastHandshake=Date.now(),YP({event:"secure_tunnel_handshake",peerPublicKey:this.options.peerPublicKey,peerHost:this.peerHost,peerPort:this.peerPort,handshakes:this.stats.handshakes}),this.emit("handshake")}stop(){if(this.tickTimer)clearInterval(this.tickTimer),this.tickTimer=null;if(this.externalSocketUnsub)this.externalSocketUnsub(),this.externalSocketUnsub=null;if(this.socket){try{this.socket.close()}catch{}this.socket=null}this.tunnel=null,this.stats.active=!1,this.emit("close"),this.removeAllListeners()}handleResult($){switch($.op){case"write_to_network":if($.data&&this.peerHost&&this.peerPort){if(this.options.externalSocket)this.options.externalSocket.send($.data,this.peerPort,this.peerHost);else if(this.socket)this.socket.send($.data,this.peerPort,this.peerHost)}break;case"write_to_tunnel":if(this.markAuthenticatedSessionProof(),this.emit("peerActivity"),$.data&&$.data.length>0){let Z=pZ0($.data,this.options.tunnelDstIp);this.stats.bytesReceived+=Z.length,this.emit("plaintext",Z)}break;case"done":break;case"error":this.emit("error",Error($.data?$.data.toString():"Unknown tunnel error"));break}}}oZ.SecureTunnel=dZ0});var zx=IZ((lZ0)=>{Object.defineProperty(lZ0,"__esModule",{value:!0});lZ0.ResilientTunnel=void 0;var JI0=s0("events"),XI0=QP();class K5 extends JI0.EventEmitter{options;tunnel=null;_state="connecting";queue=[];queueBytes=0;reconnectAttempts=0;reconnectTimer=null;deadPeerTimer=null;lastPacketAt=0;reconnections=0;awaitingReplayReadiness=!1;stopped=!1;static MAX_QUEUE_SIZE=1000;static MAX_QUEUE_BYTES=1048576;static MAX_RECONNECT_ATTEMPTS=10;static DEAD_PEER_TIMEOUT_MS=300000;static MAX_BACKOFF_MS=60000;static BASE_BACKOFF_MS=1000;constructor($){super();this.options=$}async start(){if(this.stopped)throw Error("Tunnel has been stopped");this.setState("connecting");let $=await this.createAndStartTunnel();if(this._state==="connecting")this.setState("handshaking"),this.requestSessionProof();return $}sendPlaintext($){if(this._state==="dead")throw Error("Tunnel is dead \u2014 max reconnection attempts exhausted");if(this._state==="connecting"||this._state==="handshaking"||this._state==="reconnecting"||this._state==="disconnected"){this.enqueue($);return}if(this._state!=="connected"||!this.tunnel)throw Error(`Cannot send in state: ${this._state}`);let Z=this.tunnel;try{Z.sendPlaintext($)}catch(J){if(!this.stopped)this.enqueue($);throw J}if(!this.stopped&&this._state!=="connected"){this.enqueue($);return}if(!this.stopped&&this.tunnel!==Z)this.enqueue($)}stop(){if(this.stopped=!0,this.clearTimers(),this.tunnel)this.tunnel.removeAllListeners(),this.tunnel.stop(),this.tunnel=null;this.queue=[],this.queueBytes=0}get isActive(){return this._state==="connected"}getState(){return this._state}getStats(){return{state:this._state,reconnections:this.reconnections,reconnectAttempts:this.reconnectAttempts,queueDepth:this.queue.length,queueBytes:this.queueBytes}}getInnerTunnel(){return this.tunnel}setState($){let Z=this._state;if(Z===$)return;this._state=$,this.emit("stateChange",$,Z)}requestSessionProof(){if(this.stopped||!this.tunnel)return;if(this._state!=="handshaking"&&!(this._state==="reconnecting"&&this.awaitingReplayReadiness))return;try{this.tunnel.sendPlaintext(Buffer.alloc(0))}catch{}}async createAndStartTunnel(){if(this.tunnel)this.tunnel.removeAllListeners(),this.tunnel.stop(),this.tunnel=null;let $=new XI0.SecureTunnel(this.options);this.tunnel=$,$.on("plaintext",(Z)=>{this.lastPacketAt=Date.now(),this.resetDeadPeerTimer(),this.promoteReconnectReady(),this.emit("plaintext",Z)}),$.on("handshake",()=>{this.lastPacketAt=Date.now(),this.resetDeadPeerTimer(),this.promoteInitialReady(),this.promoteReconnectReady(),this.emit("handshake")}),$.on("peerActivity",()=>{this.lastPacketAt=Date.now(),this.resetDeadPeerTimer()}),$.on("error",(Z)=>{if(this.emit("error",Z),!this.stopped&&(this._state==="handshaking"||this._state==="connected"||this._state==="reconnecting"))this.handleDisconnect()}),$.on("close",()=>{if(!this.stopped&&(this._state==="handshaking"||this._state==="connected"||this._state==="reconnecting"))this.handleDisconnect()});try{return await $.start()}catch(Z){throw $.removeAllListeners(),$.stop(),this.tunnel=null,Z}}disposeCurrentTunnel(){if(!this.tunnel)return;this.tunnel.removeAllListeners(),this.tunnel.stop(),this.tunnel=null}handleDisconnect(){this.awaitingReplayReadiness=!1,this.clearDeadPeerTimer(),this.disposeCurrentTunnel(),this.setState("disconnected"),this.attemptReconnect()}promoteInitialReady(){if(this.stopped)return;if(this._state!=="connecting"&&this._state!=="handshaking")return;this.setState("connected"),this.resetDeadPeerTimer(),this.flushQueue()}promoteReconnectReady(){if(!this.awaitingReplayReadiness||this.stopped)return;this.finalizeReconnect()}finalizeReconnect(){this.awaitingReplayReadiness=!1,this.reconnectAttempts=0,this.reconnections++,this.setState("connected"),this.resetDeadPeerTimer(),this.flushQueue(),this.emit("reconnected")}attemptReconnect(){if(this.stopped)return;if(this.reconnectTimer)return;if(this.reconnectAttempts>=K5.MAX_RECONNECT_ATTEMPTS){this.setState("dead"),this.emit("dead");return}this.setState("reconnecting");let $=Math.min(K5.BASE_BACKOFF_MS*Math.pow(2,this.reconnectAttempts),K5.MAX_BACKOFF_MS);this.reconnectAttempts++,this.reconnectTimer=setTimeout(async()=>{if(this.reconnectTimer=null,this.stopped)return;try{if(this.awaitingReplayReadiness=!0,await this.createAndStartTunnel(),this._state==="connected")return;this.requestSessionProof()}catch{this.awaitingReplayReadiness=!1,this.attemptReconnect()}},$)}resetDeadPeerTimer(){if(this.clearDeadPeerTimer(),this.stopped||this._state!=="connected")return;this.deadPeerTimer=setTimeout(()=>{if(this._state==="connected"&&!this.stopped)this.handleDisconnect()},K5.DEAD_PEER_TIMEOUT_MS)}clearDeadPeerTimer(){if(this.deadPeerTimer)clearTimeout(this.deadPeerTimer),this.deadPeerTimer=null}clearTimers(){if(this.clearDeadPeerTimer(),this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null}enqueue($){if(this.purgeExpired(),this.queue.length>=K5.MAX_QUEUE_SIZE){process.stderr.write(`[ResilientTunnel] dropping message, queue overflow (maxSize: ${this.queue.length}/${K5.MAX_QUEUE_SIZE})
|
|
5289
|
+
`,"utf8"),await J.close(),async()=>{try{if((await EZ.promises.readFile($,"utf8")).trim()===String(process.pid))await EZ.promises.rm($,{force:!0})}catch{}}}catch(J){if(J.code!=="EEXIST")throw J;let Y=null;try{Y=Number.parseInt((await EZ.promises.readFile($,"utf8")).trim(),10)}catch{Y=null}if(!Y||!aS0(Y)){await EZ.promises.rm($,{force:!0});continue}if(Date.now()-Z>5000)throw Error(`[node-metadata] Timed out waiting for lock ${$}`);await lS0(25)}}function Xx($,Z,J){if(J.schemaVersion!==SF)throw Error(`[node-metadata] Unsupported schema version ${J.schemaVersion} at ${Z}`);return{ariaHome:$,metadataPath:Z,...J}}function Yx($,Z,J){if(!J)return null;return Xx($,Z,P5.parse(J))}async function IZ0($,Z){let J=EH($),X=await iS0(nS0($));try{let Y=new M$({ariaHome:$});try{return Z(Y,J)}catch(Q){throw Error(`[node-metadata] Failed to resolve node metadata at ${J}: ${Q instanceof Error?Q.message:String(Q)}`)}finally{Y.close()}}finally{await X()}}async function bZ0($,Z,J){let X=$.get(Z);if(X)return X;let Y=J();$.set(Z,Y);try{return await Y}finally{if($.get(Z)===Y)$.delete(Z)}}async function IF($){let Z=s1($.ariaHome);return bZ0(pS0,Z,async()=>IZ0(Z,(J,X)=>{let Y=Yx(Z,X,J.readNodeMetadata());if(Y)return Y;let Q={...J.resolveOrCreateNode(),migratedFromLegacy:SZ0(Z)};return J.writeNodeMetadata(Q),Xx(Z,X,Q)}))}async function Qx($){let Z=s1($.ariaHome),J=`${Z}\x00${$.nodeId}`;return bZ0(dS0,J,async()=>IZ0(Z,(X,Y)=>{let Q=Yx(Z,Y,X.readNodeMetadata());if(Q){if(Q.nodeId!==$.nodeId)throw Error(`[node-metadata] Configured nodeId ${$.nodeId} does not match durable node metadata ${Q.nodeId} at ${Y}`);return Q}let G={nodeId:$.nodeId,createdAt:new Date().toISOString(),schemaVersion:SF,migratedFromLegacy:SZ0(Z)};return X.writeNodeMetadata(G),Xx(Z,Y,G)}))}function Gx($){let Z=s1($.ariaHome),J=EH(Z),X=new M$({ariaHome:Z});try{return Yx(Z,J,X.readNodeMetadata())}finally{X.close()}}var SF=1,pS0,dS0;var iY=E(()=>{W8();O6();pS0=new Map,dS0=new Map});var bF=E(()=>{sE();EB();by();cU()});var kZ0={};A$(kZ0,{MemoriaPool:()=>i8});var _H=E(()=>{$_()});var ZP=E(()=>{q_();wB();Iy()});import oS0 from"crypto";function fZ0($){let Z={};if(Z.bindingGeneration=$.bindingGeneration,Z.createdAt=$.createdAt,Z.newPrincipalFingerprint=$.newPrincipalFingerprint,$.newTransportPublicKey!==void 0)Z.newTransportPublicKey=$.newTransportPublicKey;if(Z.nodeId=$.nodeId,Z.previousPrincipalFingerprint=$.previousPrincipalFingerprint,$.revocationGeneration!==void 0)Z.revocationGeneration=$.revocationGeneration;let J=Object.keys(Z).sort();return Buffer.from(JSON.stringify(Z,J),"utf-8")}function JP($,Z,J){let X=fZ0($);return oS0.verify(null,X,J,Buffer.from(Z,"base64"))}var yZ0=()=>{};var Vx=E(()=>{UM();Vv();Xv();oy();sy();HM();FM();yZ0()});function Wx($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function sS0($){return typeof $==="number"&&Number.isInteger($)&&$>0?$:void 0}function vZ0($){let Z=$?.externalEndpoint&&typeof $.externalEndpoint==="object"&&!Array.isArray($.externalEndpoint)?$.externalEndpoint:void 0;return Wx(Z?.address)??"127.0.0.1"}function hZ0($){let Z=$.networkConfig??$.networkManager?.getConfig?.()??null,J=B$.safeParse(Z?.publicKey).data,X=x0.safeParse(Wx(Z?.signingPublicKey)).data,Y=sS0(Z?.listenPort);if(!J||!X||!Y)throw Error(`${$.errorContext??"[runtime-bootstrap-record]"} Runtime bootstrap identity unavailable`);let Q=vZ0(Z),G=Wx($.displayNameSnapshot??$.networkManager?.getLocalDisplayNameSnapshot?.());if(!G)throw Error(`${$.errorContext??"[runtime-bootstrap-record]"} Runtime bootstrap display name unavailable`);return{displayNameSnapshot:G,transportPublicKey:J,signingPublicKey:X,transportEndpoint:{host:Q,port:Y}}}function kF($){let Z=$.networkConfig??$.networkManager?.getConfig?.()??null,J=$.publishedAt??new Date().toISOString(),X=d$.parse($.caFingerprint),Y=hZ0({networkManager:$.networkManager,networkConfig:Z,displayNameSnapshot:$.displayNameSnapshot,errorContext:"[runtime-bootstrap-record]"}),Q=C9(Y.signingPublicKey);if(!Q)throw Error("[runtime-bootstrap-record] Runtime bootstrap principal identity unavailable");return u8.parse({nodeId:$.nodeId,runtimeId:$.runtimeId,...$.arionName?{arionName:$.arionName}:{},ownerGeneration:$.ownerGeneration,bootstrapRevision:$.bootstrapRevision??1,phase:$.phase??"network_ready",protocolVersion:a6,controlEndpoint:{host:$.controlHost??vZ0(Z),port:$.controlPort},...Y,tls:{caFingerprint:X,caCertPem:$.caCertPem,principalIdentity:Q,loopbackIdentity:F7.parse("localhost")},publishedAt:J,...$.degradedReason?{degradedReason:$.degradedReason}:{},...$.failedPhase?{failedPhase:$.failedPhase}:{}})}var xZ0=E(()=>{b0();FM()});var XP=E(()=>{QM();iy();YM();xZ0()});var gZ0=E(()=>{jB();Gv();bF();_H();ZP();Vx();XP()});var QP=IZ((oZ)=>{var rS0=oZ&&oZ.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),tS0=oZ&&oZ.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),Kx=oZ&&oZ.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")rS0(J,Z,X[Y])}return tS0(J,Z),J}}();Object.defineProperty(oZ,"__esModule",{value:!0});oZ.SecureTunnel=void 0;oZ.wrapIpv4=uZ0;oZ.unwrapIpv4=pZ0;var eS0=Kx(r0("dgram")),mZ0=Kx(r0("fs")),cZ0=Kx(r0("path")),$I0=r0("events");function YP($){try{let Z=cZ0.join(process.env.HOME??"/tmp",".aria","audit");mZ0.mkdirSync(Z,{recursive:!0}),mZ0.appendFileSync(cZ0.join(Z,"wireguard-secure-tunnel.jsonl"),JSON.stringify({timestamp:Date.now(),...$})+`
|
|
5290
|
+
`)}catch{}}function uZ0($,Z=167772161,J=167772162){if($.length>65515)throw Error("Payload too large for IPv4 (max 65515 bytes)");let X=20+$.length,Y=Buffer.alloc(20);Y[0]=69,Y.writeUInt16BE(X,2),Y[6]=64,Y[8]=64,Y[9]=4,Y.writeUInt32BE(Z,12),Y.writeUInt32BE(J,16);let Q=0;for(let G=0;G<20;G+=2)Q+=Y.readUInt16BE(G);while(Q>65535)Q=(Q&65535)+(Q>>16);return Y.writeUInt16BE(~Q&65535,10),Buffer.concat([Y,$])}function pZ0($,Z){if($.length<20)return $;if(Z!==void 0){let X=$.readUInt32BE(12);if(X!==Z)throw Error(`Source IP mismatch: expected ${Z.toString(16)}, got ${X.toString(16)}`)}let J=($.readUInt8(0)&15)*4;return $.subarray(J)}var ZI0=4;function Hx($){if(!$||$.length<4)return!1;return $.readUInt32LE(0)===ZI0}class dZ0 extends $I0.EventEmitter{options;socket=null;tickTimer=null;tunnel=null;stats={bytesSent:0,bytesReceived:0,handshakes:0,lastHandshake:null,active:!1};handshakeCompleted=!1;peerHost;peerPort;externalSocketUnsub=null;constructor($){super();this.options=$,this.peerHost=$.peerHost,this.peerPort=$.peerPort}async start(){if(this.stats.active)throw Error("Tunnel already active");YP({event:"secure_tunnel_start_called",peerPublicKey:this.options.peerPublicKey,peerHost:this.peerHost,peerPort:this.peerPort,listenPort:this.options.listenPort??null,externalSocket:Boolean(this.options.externalSocket)});let{createTunnel:$}=await Promise.resolve().then(() => U7(MH()));this.tunnel=$({privateKey:this.options.privateKey,peerPublicKey:this.options.peerPublicKey,presharedKey:this.options.presharedKey,keepalive:this.options.keepalive??25});let Z;if(this.options.externalSocket)Z=this.options.externalSocket.port,this.externalSocketUnsub=this.options.externalSocket.onPacket((Y,Q)=>this.classifyIncomingPacket(Y,Q));else this.socket=eS0.createSocket("udp4"),Z=await new Promise((Y,Q)=>{this.socket.on("error",Q),this.socket.bind(this.options.listenPort??0,()=>{let G=this.socket.address();Y(G.port)})}),this.socket.on("message",(Y,Q)=>{this.handleIncomingPacket(Y,Q)}),this.socket.on("error",(Y)=>this.emit("error",Y)),this.socket.on("close",()=>this.emit("close"));let J=0,X=5;return this.tickTimer=setInterval(()=>{if(!this.tunnel)return;try{let Y=this.tunnel.tick();this.handleResult(Y),J=0}catch(Y){if(J++,this.emit("error",Y),J>=X)this.emit("error",Error(`Tunnel tick failed ${X} consecutive times \u2014 stopping tunnel`)),this.stop()}},250),this.stats.active=!0,YP({event:"secure_tunnel_start_returned",peerPublicKey:this.options.peerPublicKey,peerHost:this.peerHost,peerPort:this.peerPort,active:this.stats.active,handshakeCompleted:this.handshakeCompleted,handshakes:this.stats.handshakes,port:Z}),Z}handleIncomingPacket($,Z){return this.classifyIncomingPacket($,Z).handled}classifyIncomingPacket($,Z){if(!this.tunnel)return{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"no_tunnel"};try{let J=this.tunnel.decrypt($,Z.address);if(J.op==="error"){let G=J.data?J.data.toString():"decrypt error";if(this.options.externalSocket)return{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"decrypt_error",errorDetail:G};return this.emit("error",Error(G)),{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"decrypt_error",errorDetail:G}}if(J.op==="done"){if(Z.address&&Z.port)this.peerHost=Z.address,this.peerPort=Z.port;let G=this.tunnel.decrypt(Buffer.alloc(0));while(G.op!=="done"&&G.op!=="error"){if(G.op==="write_to_network"&&Hx(G.data))this.markAuthenticatedSessionProof();this.handleResult(G),G=this.tunnel.decrypt(Buffer.alloc(0))}return YP({event:"secure_tunnel_peer_activity",peerPublicKey:this.options.peerPublicKey,peerHost:Z.address,peerPort:Z.port,handshakeCompleted:this.handshakeCompleted}),this.emit("peerActivity"),{handled:!0,peerPublicKey:this.options.peerPublicKey,outcome:"done"}}let X=J.op==="write_to_network"?"write_to_network":"write_to_tunnel";if(this.peerHost=Z.address,this.peerPort=Z.port,J.op==="write_to_network"&&Hx(J.data))this.markAuthenticatedSessionProof();this.handleResult(J);let Y=0,Q=100;while(J.op!=="done"&&Y<Q){if(Y++,J=this.tunnel.decrypt(Buffer.alloc(0)),J.op==="done")break;if(J.op==="write_to_network"&&Hx(J.data))this.markAuthenticatedSessionProof();this.handleResult(J)}return{handled:!0,peerPublicKey:this.options.peerPublicKey,outcome:X}}catch(J){if(this.options.externalSocket)return{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"decrypt_exception",errorDetail:J instanceof Error?J.message:String(J)};return this.emit("error",J),{handled:!1,peerPublicKey:this.options.peerPublicKey,outcome:"decrypt_exception",errorDetail:J instanceof Error?J.message:String(J)}}}get isActive(){return this.stats.active}sendPlaintext($){if(!this.tunnel||!this.stats.active)throw Error("Tunnel not active");let Z=this.options.tunnelSrcIp??167772161,J=this.options.tunnelDstIp??167772162,X=uZ0($,Z,J),Y=this.tunnel.encrypt(X);this.handleResult(Y),this.stats.bytesSent+=$.length}setPeerEndpoint($,Z){this.peerHost=$,this.peerPort=Z}getStats(){return{...this.stats}}markAuthenticatedSessionProof(){if(this.handshakeCompleted)return;this.handshakeCompleted=!0,this.stats.handshakes++,this.stats.lastHandshake=Date.now(),YP({event:"secure_tunnel_handshake",peerPublicKey:this.options.peerPublicKey,peerHost:this.peerHost,peerPort:this.peerPort,handshakes:this.stats.handshakes}),this.emit("handshake")}stop(){if(this.tickTimer)clearInterval(this.tickTimer),this.tickTimer=null;if(this.externalSocketUnsub)this.externalSocketUnsub(),this.externalSocketUnsub=null;if(this.socket){try{this.socket.close()}catch{}this.socket=null}this.tunnel=null,this.stats.active=!1,this.emit("close"),this.removeAllListeners()}handleResult($){switch($.op){case"write_to_network":if($.data&&this.peerHost&&this.peerPort){if(this.options.externalSocket)this.options.externalSocket.send($.data,this.peerPort,this.peerHost);else if(this.socket)this.socket.send($.data,this.peerPort,this.peerHost)}break;case"write_to_tunnel":if(this.markAuthenticatedSessionProof(),this.emit("peerActivity"),$.data&&$.data.length>0){let Z=pZ0($.data,this.options.tunnelDstIp);this.stats.bytesReceived+=Z.length,this.emit("plaintext",Z)}break;case"done":break;case"error":this.emit("error",Error($.data?$.data.toString():"Unknown tunnel error"));break}}}oZ.SecureTunnel=dZ0});var zx=IZ((lZ0)=>{Object.defineProperty(lZ0,"__esModule",{value:!0});lZ0.ResilientTunnel=void 0;var JI0=r0("events"),XI0=QP();class K5 extends JI0.EventEmitter{options;tunnel=null;_state="connecting";queue=[];queueBytes=0;reconnectAttempts=0;reconnectTimer=null;deadPeerTimer=null;lastPacketAt=0;reconnections=0;awaitingReplayReadiness=!1;stopped=!1;static MAX_QUEUE_SIZE=1000;static MAX_QUEUE_BYTES=1048576;static MAX_RECONNECT_ATTEMPTS=10;static DEAD_PEER_TIMEOUT_MS=300000;static MAX_BACKOFF_MS=60000;static BASE_BACKOFF_MS=1000;constructor($){super();this.options=$}async start(){if(this.stopped)throw Error("Tunnel has been stopped");this.setState("connecting");let $=await this.createAndStartTunnel();if(this._state==="connecting")this.setState("handshaking"),this.requestSessionProof();return $}sendPlaintext($){if(this._state==="dead")throw Error("Tunnel is dead \u2014 max reconnection attempts exhausted");if(this._state==="connecting"||this._state==="handshaking"||this._state==="reconnecting"||this._state==="disconnected"){this.enqueue($);return}if(this._state!=="connected"||!this.tunnel)throw Error(`Cannot send in state: ${this._state}`);let Z=this.tunnel;try{Z.sendPlaintext($)}catch(J){if(!this.stopped)this.enqueue($);throw J}if(!this.stopped&&this._state!=="connected"){this.enqueue($);return}if(!this.stopped&&this.tunnel!==Z)this.enqueue($)}stop(){if(this.stopped=!0,this.clearTimers(),this.tunnel)this.tunnel.removeAllListeners(),this.tunnel.stop(),this.tunnel=null;this.queue=[],this.queueBytes=0}get isActive(){return this._state==="connected"}getState(){return this._state}getStats(){return{state:this._state,reconnections:this.reconnections,reconnectAttempts:this.reconnectAttempts,queueDepth:this.queue.length,queueBytes:this.queueBytes}}getInnerTunnel(){return this.tunnel}setState($){let Z=this._state;if(Z===$)return;this._state=$,this.emit("stateChange",$,Z)}requestSessionProof(){if(this.stopped||!this.tunnel)return;if(this._state!=="handshaking"&&!(this._state==="reconnecting"&&this.awaitingReplayReadiness))return;try{this.tunnel.sendPlaintext(Buffer.alloc(0))}catch{}}async createAndStartTunnel(){if(this.tunnel)this.tunnel.removeAllListeners(),this.tunnel.stop(),this.tunnel=null;let $=new XI0.SecureTunnel(this.options);this.tunnel=$,$.on("plaintext",(Z)=>{this.lastPacketAt=Date.now(),this.resetDeadPeerTimer(),this.promoteReconnectReady(),this.emit("plaintext",Z)}),$.on("handshake",()=>{this.lastPacketAt=Date.now(),this.resetDeadPeerTimer(),this.promoteInitialReady(),this.promoteReconnectReady(),this.emit("handshake")}),$.on("peerActivity",()=>{this.lastPacketAt=Date.now(),this.resetDeadPeerTimer()}),$.on("error",(Z)=>{if(this.emit("error",Z),!this.stopped&&(this._state==="handshaking"||this._state==="connected"||this._state==="reconnecting"))this.handleDisconnect()}),$.on("close",()=>{if(!this.stopped&&(this._state==="handshaking"||this._state==="connected"||this._state==="reconnecting"))this.handleDisconnect()});try{return await $.start()}catch(Z){throw $.removeAllListeners(),$.stop(),this.tunnel=null,Z}}disposeCurrentTunnel(){if(!this.tunnel)return;this.tunnel.removeAllListeners(),this.tunnel.stop(),this.tunnel=null}handleDisconnect(){this.awaitingReplayReadiness=!1,this.clearDeadPeerTimer(),this.disposeCurrentTunnel(),this.setState("disconnected"),this.attemptReconnect()}promoteInitialReady(){if(this.stopped)return;if(this._state!=="connecting"&&this._state!=="handshaking")return;this.setState("connected"),this.resetDeadPeerTimer(),this.flushQueue()}promoteReconnectReady(){if(!this.awaitingReplayReadiness||this.stopped)return;this.finalizeReconnect()}finalizeReconnect(){this.awaitingReplayReadiness=!1,this.reconnectAttempts=0,this.reconnections++,this.setState("connected"),this.resetDeadPeerTimer(),this.flushQueue(),this.emit("reconnected")}attemptReconnect(){if(this.stopped)return;if(this.reconnectTimer)return;if(this.reconnectAttempts>=K5.MAX_RECONNECT_ATTEMPTS){this.setState("dead"),this.emit("dead");return}this.setState("reconnecting");let $=Math.min(K5.BASE_BACKOFF_MS*Math.pow(2,this.reconnectAttempts),K5.MAX_BACKOFF_MS);this.reconnectAttempts++,this.reconnectTimer=setTimeout(async()=>{if(this.reconnectTimer=null,this.stopped)return;try{if(this.awaitingReplayReadiness=!0,await this.createAndStartTunnel(),this._state==="connected")return;this.requestSessionProof()}catch{this.awaitingReplayReadiness=!1,this.attemptReconnect()}},$)}resetDeadPeerTimer(){if(this.clearDeadPeerTimer(),this.stopped||this._state!=="connected")return;this.deadPeerTimer=setTimeout(()=>{if(this._state==="connected"&&!this.stopped)this.handleDisconnect()},K5.DEAD_PEER_TIMEOUT_MS)}clearDeadPeerTimer(){if(this.deadPeerTimer)clearTimeout(this.deadPeerTimer),this.deadPeerTimer=null}clearTimers(){if(this.clearDeadPeerTimer(),this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null}enqueue($){if(this.purgeExpired(),this.queue.length>=K5.MAX_QUEUE_SIZE){process.stderr.write(`[ResilientTunnel] dropping message, queue overflow (maxSize: ${this.queue.length}/${K5.MAX_QUEUE_SIZE})
|
|
5290
5291
|
`),this.emit("queueOverflow",{reason:"maxSize",dropped:1});return}if(this.queueBytes+$.length>K5.MAX_QUEUE_BYTES){process.stderr.write(`[ResilientTunnel] dropping message, queue overflow (maxBytes: ${this.queueBytes+$.length}/${K5.MAX_QUEUE_BYTES})
|
|
5291
|
-
`),this.emit("queueOverflow",{reason:"maxBytes",dropped:1});return}this.queue.push({data:$,enqueuedAt:Date.now(),sendAttempts:0}),this.queueBytes+=$.length}purgeExpired(){let $=Date.now(),Z=this.queue.length;this.queue=this.queue.filter((X)=>{if(X.ttl!==void 0&&$-X.enqueuedAt>X.ttl)return this.queueBytes-=X.data.length,!1;return!0});let J=Z-this.queue.length;if(J>0)this.emit("messagesExpired",{count:J})}flushQueue(){if(!this.tunnel||this._state!=="connected")return;this.purgeExpired();let $=this.queue.splice(0);this.queueBytes=0;let Z=3,J=(X,Y)=>{let Q=[];if(Y){if(Y.sendAttempts++,Y.sendAttempts<Z)Q.push(Y)}if(Q.push(...$.slice(X+(Y?1:0))),Q.length>0)this.queue.unshift(...Q),this.queueBytes=Q.reduce((G,V)=>G+V.data.length,this.queueBytes),this.emit("queueFlushPartialFailure",{failed:Q.length,total:$.length})};for(let X=0;X<$.length;X+=1){let Y=$[X];try{this.tunnel.sendPlaintext(Y.data)}catch{J(X,Y);return}if(this._state!=="connected"){J(X,Y);return}}}}lZ0.ResilientTunnel=K5});var Dx=IZ((sZ)=>{var YI0=sZ&&sZ.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),QI0=sZ&&sZ.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),Ux=sZ&&sZ.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")YI0(J,Z,X[Y])}return QI0(J,Z),J}}();Object.defineProperty(sZ,"__esModule",{value:!0});sZ.StunClient=void 0;sZ.discoverEndpoint=Fx;sZ.detectNatType=oZ0;var nZ0=Ux(
|
|
5292
|
+
`),this.emit("queueOverflow",{reason:"maxBytes",dropped:1});return}this.queue.push({data:$,enqueuedAt:Date.now(),sendAttempts:0}),this.queueBytes+=$.length}purgeExpired(){let $=Date.now(),Z=this.queue.length;this.queue=this.queue.filter((X)=>{if(X.ttl!==void 0&&$-X.enqueuedAt>X.ttl)return this.queueBytes-=X.data.length,!1;return!0});let J=Z-this.queue.length;if(J>0)this.emit("messagesExpired",{count:J})}flushQueue(){if(!this.tunnel||this._state!=="connected")return;this.purgeExpired();let $=this.queue.splice(0);this.queueBytes=0;let Z=3,J=(X,Y)=>{let Q=[];if(Y){if(Y.sendAttempts++,Y.sendAttempts<Z)Q.push(Y)}if(Q.push(...$.slice(X+(Y?1:0))),Q.length>0)this.queue.unshift(...Q),this.queueBytes=Q.reduce((G,V)=>G+V.data.length,this.queueBytes),this.emit("queueFlushPartialFailure",{failed:Q.length,total:$.length})};for(let X=0;X<$.length;X+=1){let Y=$[X];try{this.tunnel.sendPlaintext(Y.data)}catch{J(X,Y);return}if(this._state!=="connected"){J(X,Y);return}}}}lZ0.ResilientTunnel=K5});var Dx=IZ((sZ)=>{var YI0=sZ&&sZ.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),QI0=sZ&&sZ.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),Ux=sZ&&sZ.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")YI0(J,Z,X[Y])}return QI0(J,Z),J}}();Object.defineProperty(sZ,"__esModule",{value:!0});sZ.StunClient=void 0;sZ.discoverEndpoint=Fx;sZ.detectNatType=oZ0;var nZ0=Ux(r0("dgram")),GI0=Ux(r0("crypto")),VI0=Ux(r0("os")),WI0=1,HI0=257,GP=554869826,KI0=32,zI0=1;function iZ0($,Z){return new Promise((J)=>{let X=nZ0.createSocket("udp4"),Y=setTimeout(()=>{X.close(),J(!1)},2000);X.connect(Z,$,()=>{clearTimeout(Y);try{let Q=X.address().address,G=VI0.networkInterfaces();for(let V of Object.values(G))for(let W of V??[])if(W.address===Q&&W.mac==="00:00:00:00:00:00"){X.close(),J(!0);return}}catch{}X.close(),J(!1)}),X.on("error",()=>{clearTimeout(Y),X.close(),J(!1)})})}var Bx=["stun.l.google.com:19302","stun1.l.google.com:19302","stun.cloudflare.com:3478"];function UI0(){let $=Buffer.alloc(20);$.writeUInt16BE(WI0,0),$.writeUInt16BE(0,2),$.writeUInt32BE(GP,4);let Z=GI0.randomBytes(12);return Z.copy($,8),{message:$,transactionId:Z}}function BI0($,Z){if($.length<20)return null;if($.readUInt16BE(0)!==HI0)return null;if($.readUInt32BE(4)!==GP)return null;if(!$.subarray(8,20).equals(Z))return null;let X=$.readUInt16BE(2),Y=20,Q=20+X,G=null;while(Y+4<=Q){let V=$.readUInt16BE(Y),W=$.readUInt16BE(Y+2),H=Y+4;if(V===KI0&&W>=8){if($.readUInt8(H+1)===1){let z=$.readUInt16BE(H+2)^GP>>16,U=$.readUInt32BE(H+4)^GP,B=U>>24&255,F=U>>16&255,D=U>>8&255,O=U&255;return{address:`${B}.${F}.${D}.${O}`,port:z}}}if(V===zI0&&W>=8){if($.readUInt8(H+1)===1){let z=$.readUInt16BE(H+2),U=$.readUInt32BE(H+4),B=U>>24&255,F=U>>16&255,D=U>>8&255,O=U&255;G={address:`${B}.${F}.${D}.${O}`,port:z}}}Y=H+Math.ceil(W/4)*4}return G}async function Fx($,Z=5000,J){let X=$?[$]:Bx,[Y,Q]=X[0].split(":");if(await iZ0(Y,parseInt(Q??"3478",10)))throw Error("STUN route exits through a tunnel interface \u2014 result would be unreliable");return new Promise((V,W)=>{let H=!1,K=[],z=setTimeout(()=>{if(!H)H=!0,K.forEach((U)=>{try{U.close()}catch{}}),W(Error(`STUN discovery timed out after ${Z}ms`))},Z);for(let U of X){let[B,F]=U.split(":"),D=parseInt(F??"3478",10),O=J??nZ0.createSocket("udp4");if(!J)K.push(O);let{message:L,transactionId:q}=UI0(),A=(N)=>{if(H)return;let _=BI0(N,q);if(_){if(H=!0,clearTimeout(z),J)J.off("message",A);K.forEach((M)=>{try{M.close()}catch{}}),V({..._,server:U})}};O.on("message",A),O.on("error",()=>{if(!J)try{O.close()}catch{}}),O.send(L,D,B)}})}async function oZ0($=Bx,Z=5000){let J=[];for(let Q of $.slice(0,3))try{let G=await Fx(Q,Z);if(J.push(G),J.length>=2)break}catch{}if(J.length<2)return{natType:"unknown",results:J};let X=J[0].port,Y=J[1].port;if(X!==Y)return{natType:"symmetric",results:J};return{natType:"full_cone",results:J}}class sZ0{servers;pollIntervalMs;interval=null;lastResult=null;_natType=null;consecutiveFailures=0;constructor($=Bx,Z=60000){this.servers=$,this.pollIntervalMs=Z}getNatType(){return this._natType}getEndpoint(){return this.lastResult}async discover(){let $=await Fx(this.servers[0],5000);return this.lastResult=$,$}start($){if(this.interval)return;(async()=>{let[Z,J]=this.servers[0].split(":");if(await iZ0(Z,parseInt(J??"3478",10))){if(typeof process<"u"&&process.stderr)process.stderr.write(`[wireguard] STUN skipped \u2014 route exits through VPN/tunnel interface
|
|
5292
5293
|
`);return}try{if(!this._natType){let Y=await oZ0(this.servers);if(this._natType=Y.natType,Y.results.length>0)this.lastResult=Y.results[0],this.consecutiveFailures=0,$?.(Y.results[0])}if(!this.lastResult){let Y=await this.discover();this.consecutiveFailures=0,$?.(Y)}}catch{this.consecutiveFailures++}this.interval=setInterval(async()=>{try{let Y=await this.discover();this.consecutiveFailures=0,$?.(Y)}catch{if(this.consecutiveFailures++,this.consecutiveFailures>=3){if(typeof process<"u"&&process.stderr)process.stderr.write(`[wireguard] STUN discovery failed ${this.consecutiveFailures} consecutive times
|
|
5293
|
-
`)}}},this.pollIntervalMs)})()}stop(){if(this.interval)clearInterval(this.interval),this.interval=null}}sZ.StunClient=sZ0});var eZ0=IZ((q2)=>{var FI0=q2&&q2.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),DI0=q2&&q2.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),tZ0=q2&&q2.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")FI0(J,Z,X[Y])}return DI0(J,Z),J}}();Object.defineProperty(q2,"__esModule",{value:!0});q2.loadStoredBootstrapCaCert=NI0;var rZ0=tZ0(s0("fs")),OI0=tZ0(s0("path"));function NI0($){let Z=OI0.join($,"network","tls","ca.pem");if(!rZ0.existsSync(Z))return;let J=rZ0.readFileSync(Z,"utf8").trim();return J.length>0?J:void 0}});var Ox=IZ((E2)=>{var LI0=E2&&E2.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),AI0=E2&&E2.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),$10=E2&&E2.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")LI0(J,Z,X[Y])}return AI0(J,Z),J}}();Object.defineProperty(E2,"__esModule",{value:!0});E2.bootstrapTlsRequest=_I0;var qI0=$10(s0("https")),EI0=$10(s0("tls"));function _I0($,Z){return new Promise((J,X)=>{let Y=new URL($),Q=qI0.request({hostname:Y.hostname,port:Y.port,path:Y.pathname+Y.search,method:Z.method??"GET",headers:Z.headers,ca:Z.caCert,rejectUnauthorized:!0,checkServerIdentity:(G,V)=>EI0.checkServerIdentity(Z.expectedTlsIdentity,V),timeout:Z.timeoutMs??5000},(G)=>{let V="";G.on("data",(W)=>{V+=W.toString()}),G.on("end",()=>J({status:G.statusCode??0,body:V}))});if(Q.on("error",X),Q.on("timeout",()=>{Q.destroy(),X(Error("Request timeout"))}),Z.body)Q.write(Z.body);Q.end()})}});var Y10=IZ((X10)=>{Object.defineProperty(X10,"__esModule",{value:!0});X10.getDirectRouteKey=J10;X10.resolveDirectRouteOwnership=jI0;var MI0=(W8(),ZG(cC)),Z10={pending_verification:5,pending_tunnel:4,active:3,pending:2,revoked:1};function J10($){let{endpointHost:Z,endpointPort:J}=(0,MI0.canonicalizeAuthoritativeDirectEndpoint)($);if(!Z||typeof J!=="number"||!Number.isFinite(J))return null;return`${Z}:${J}`}function PI0($,Z){let J=Z10[Z.status]-Z10[$.status];if(J!==0)return J;let X=$.endpointRevision??0,Y=Z.endpointRevision??0;if(X!==Y)return Y-X;let Q=$.updatedAt??$.createdAt,G=Z.updatedAt??Z.createdAt;if(Q!==G)return G-Q;if($.createdAt!==Z.createdAt)return Z.createdAt-$.createdAt;return $.publicKey.localeCompare(Z.publicKey)}function jI0($){let Z=new Map,J=new Map;for(let X of $){let Y=J10(X);if(!Y){Z.set(X.publicKey,{routeKey:null,ownership:"current",ownerPublicKey:X.publicKey});continue}let Q=J.get(Y)??[];Q.push(X),J.set(Y,Q)}for(let[X,Y]of J){let Q=[...Y].sort(PI0),G=Q[0];if(!G)continue;Z.set(G.publicKey,{routeKey:X,ownership:"current",ownerPublicKey:G.publicKey});for(let V of Q.slice(1))Z.set(V.publicKey,{routeKey:X,ownership:"superseded",ownerPublicKey:G.publicKey,supersededByPublicKey:G.publicKey})}return Z}});var Lx=IZ((rZ)=>{var RI0=rZ&&rZ.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),wI0=rZ&&rZ.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),SI0=rZ&&rZ.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")RI0(J,Z,X[Y])}return wI0(J,Z),J}}(),II0=rZ&&rZ.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(rZ,"__esModule",{value:!0});rZ.DerpRelay=void 0;var bI0=s0("events"),Q10=SI0(s0("crypto")),kI0=II0(s0("ws")),fI0=(b0(),ZG(SW)),G10=65535,yI0=10,vI0=1000,hI0=60000;class Nx extends bI0.EventEmitter{ws=null;_state="disconnected";reconnectAttempts=0;reconnectTimer=null;stopped=!1;closing=!1;relayUrl;nodeId;displayNameSnapshot;signingPrivateKey;signingPublicKey;targetNodeId;signal;queue=[];static MAX_QUEUE=200;constructor($){super();if(this.relayUrl=$.relayUrl,this.nodeId=$.nodeId,this.displayNameSnapshot=$.displayNameSnapshot,this.signingPrivateKey=$.signingPrivateKey,this.signingPublicKey=$.signingPublicKey,this.targetNodeId=$.targetNodeId,this.signal=$.signal,this.signal)this.signal.addEventListener("abort",()=>this.disconnect(),{once:!0})}async connect(){if(this.stopped||this._state==="connected"||this._state==="connecting")return;return this.closing=!1,this.setState("connecting"),new Promise(($,Z)=>{try{let J=new kI0.default(this.relayUrl);this.ws=J;let X=setTimeout(()=>{J.close(),Z(Error("Relay connection timeout"))},15000);J.on("open",()=>{if(clearTimeout(X),this.closing){J.close(),Z(Error("Relay connection aborted: disconnect() called during connect"));return}this.setState("authenticating"),J.send(JSON.stringify({type:"auth",nodeId:this.nodeId,signingPublicKey:this.signingPublicKey}))}),J.on("message",(Y)=>{try{let Q=typeof Y==="string"?Y:Y.toString(),G=JSON.parse(Q);if(G.type==="challenge"&&this._state==="authenticating"){let V=this.signChallenge(G.nonce);J.send(JSON.stringify({type:"challenge_response",signature:V}))}else if(G.type==="auth_ok"){if(this.closing){J.close(),Z(Error("Relay connection aborted: disconnect() called during auth"));return}this.setState("connected"),this.reconnectAttempts=0,this.flushQueue(),this.emit("connected"),$()}else if(G.type==="auth_error")J.close(),Z(Error(`Relay auth failed: ${G.error}`));else if(G.type==="relay"&&this._state==="connected"){let V=fI0.NodeIdSchema.parse(G.fromNodeId),W=Buffer.from(G.data,"base64");this.emit("plaintext",W,V,G.displayNameSnapshot)}else if(G.type==="peer_offline"){let V=typeof G.displayNameSnapshot==="string"&&G.displayNameSnapshot.length>0?G.displayNameSnapshot:typeof G.nodeId==="string"&&G.nodeId.length>0?G.nodeId:this.targetNodeId;this.emit("error",Error(`Peer ${V} is offline on relay`))}}catch(Q){this.emit("error",Q instanceof Error?Q:Error(String(Q)))}}),J.on("close",()=>{clearTimeout(X);let Y=this._state==="connecting"||this._state==="authenticating";if(this.setState("disconnected"),this.stopped||this.closing){if(Y)Z(Error("Relay connection closed during setup"))}else this.emit("disconnected"),this.attemptReconnect()}),J.on("error",(Y)=>{if(clearTimeout(X),this.emit("error",Y),this._state==="connecting"||this._state==="authenticating")Z(Y)})}catch(J){this.setState("disconnected"),Z(J)}})}send($){if(this.stopped)throw Error("Relay is stopped");if($.length>G10)throw Error(`Payload exceeds max size (${$.length} > ${G10})`);if(this._state!=="connected"||!this.ws){this.enqueue($);return}this.ws.send(JSON.stringify({type:"relay",toNodeId:this.targetNodeId,data:$.toString("base64")}))}disconnect(){if(this.closing=!0,this.stopped=!0,this.clearReconnectTimer(),this.ws){try{this.ws.close()}catch{}this.ws=null}this.queue=[],this.setState("disconnected")}getState(){return this._state}get isConnected(){return this._state==="connected"}setState($){let Z=this._state;if(Z===$)return;this._state=$,this.emit("stateChange",$,Z)}signChallenge($){let Z=Buffer.from(this.signingPrivateKey,"base64"),J=Q10.createPrivateKey({key:Z,format:"der",type:"pkcs8"});return Q10.sign(null,Buffer.from($),J).toString("base64")}attemptReconnect(){if(this.stopped)return;if(this.reconnectAttempts>=yI0){this.setState("dead"),this.emit("dead");return}let $=Math.min(vI0*Math.pow(2,this.reconnectAttempts),hI0);this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>{if(this.stopped)return;this.connect().catch((Z)=>{this.emit("error",Z instanceof Error?Z:Error(String(Z)))})},$)}clearReconnectTimer(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null}enqueue($){if(this.queue.length>=Nx.MAX_QUEUE)this.queue.shift();this.queue.push($)}flushQueue(){if(this._state!=="connected"||!this.ws)return;let $=this.queue.splice(0);for(let Z of $)try{this.send(Z)}catch{}}}rZ.DerpRelay=Nx});var O10=IZ((F4)=>{var xI0=F4&&F4.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),gI0=F4&&F4.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),Tx=F4&&F4.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")xI0(J,Z,X[Y])}return gI0(J,Z),J}}();Object.defineProperty(F4,"__esModule",{value:!0});F4.NetworkManager=F4.PeerRegistry=void 0;F4.generateSigningKeypair=Mx;F4.generateKeyPair=Px;F4.createInviteToken=F10;F4.decodeInviteToken=jx;F4.ensureSecureNetwork=D10;var g4=Tx(s0("crypto")),MZ=Tx(s0("fs")),tZ=Tx(s0("path")),D$=(b0(),ZG(SW)),mI0=eZ0(),V10=Ox(),cI0=Y10(),uI0=QP(),pI0=zx(),W10=58291,dI0="ARIA_WIREGUARD_TEST_LISTEN_PORT";function H10(){let $=process.env[dI0]?.trim();if(!$)return W10;let Z=Number($);if(Number.isInteger(Z)&&Z>=0&&Z<=65535)return Z;return W10}function B4($){if(typeof process<"u"&&process.env.ARIA_LOG_LEVEL==="debug"&&process.stderr)process.stderr.write($)}function lI0($,Z){try{let J=tZ.join($,"audit");MZ.mkdirSync(J,{recursive:!0}),MZ.appendFileSync(tZ.join(J,"wireguard-diagnostics.jsonl"),JSON.stringify(Z)+`
|
|
5294
|
+
`)}}},this.pollIntervalMs)})()}stop(){if(this.interval)clearInterval(this.interval),this.interval=null}}sZ.StunClient=sZ0});var eZ0=IZ((q2)=>{var FI0=q2&&q2.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),DI0=q2&&q2.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),tZ0=q2&&q2.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")FI0(J,Z,X[Y])}return DI0(J,Z),J}}();Object.defineProperty(q2,"__esModule",{value:!0});q2.loadStoredBootstrapCaCert=NI0;var rZ0=tZ0(r0("fs")),OI0=tZ0(r0("path"));function NI0($){let Z=OI0.join($,"network","tls","ca.pem");if(!rZ0.existsSync(Z))return;let J=rZ0.readFileSync(Z,"utf8").trim();return J.length>0?J:void 0}});var Ox=IZ((E2)=>{var LI0=E2&&E2.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),AI0=E2&&E2.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),$10=E2&&E2.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")LI0(J,Z,X[Y])}return AI0(J,Z),J}}();Object.defineProperty(E2,"__esModule",{value:!0});E2.bootstrapTlsRequest=_I0;var qI0=$10(r0("https")),EI0=$10(r0("tls"));function _I0($,Z){return new Promise((J,X)=>{let Y=new URL($),Q=qI0.request({hostname:Y.hostname,port:Y.port,path:Y.pathname+Y.search,method:Z.method??"GET",headers:Z.headers,ca:Z.caCert,rejectUnauthorized:!0,checkServerIdentity:(G,V)=>EI0.checkServerIdentity(Z.expectedTlsIdentity,V),timeout:Z.timeoutMs??5000},(G)=>{let V="";G.on("data",(W)=>{V+=W.toString()}),G.on("end",()=>J({status:G.statusCode??0,body:V}))});if(Q.on("error",X),Q.on("timeout",()=>{Q.destroy(),X(Error("Request timeout"))}),Z.body)Q.write(Z.body);Q.end()})}});var Y10=IZ((X10)=>{Object.defineProperty(X10,"__esModule",{value:!0});X10.getDirectRouteKey=J10;X10.resolveDirectRouteOwnership=jI0;var MI0=(W8(),ZG(cC)),Z10={pending_verification:5,pending_tunnel:4,active:3,pending:2,revoked:1};function J10($){let{endpointHost:Z,endpointPort:J}=(0,MI0.canonicalizeAuthoritativeDirectEndpoint)($);if(!Z||typeof J!=="number"||!Number.isFinite(J))return null;return`${Z}:${J}`}function PI0($,Z){let J=Z10[Z.status]-Z10[$.status];if(J!==0)return J;let X=$.endpointRevision??0,Y=Z.endpointRevision??0;if(X!==Y)return Y-X;let Q=$.updatedAt??$.createdAt,G=Z.updatedAt??Z.createdAt;if(Q!==G)return G-Q;if($.createdAt!==Z.createdAt)return Z.createdAt-$.createdAt;return $.publicKey.localeCompare(Z.publicKey)}function jI0($){let Z=new Map,J=new Map;for(let X of $){let Y=J10(X);if(!Y){Z.set(X.publicKey,{routeKey:null,ownership:"current",ownerPublicKey:X.publicKey});continue}let Q=J.get(Y)??[];Q.push(X),J.set(Y,Q)}for(let[X,Y]of J){let Q=[...Y].sort(PI0),G=Q[0];if(!G)continue;Z.set(G.publicKey,{routeKey:X,ownership:"current",ownerPublicKey:G.publicKey});for(let V of Q.slice(1))Z.set(V.publicKey,{routeKey:X,ownership:"superseded",ownerPublicKey:G.publicKey,supersededByPublicKey:G.publicKey})}return Z}});var Lx=IZ((rZ)=>{var RI0=rZ&&rZ.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),wI0=rZ&&rZ.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),SI0=rZ&&rZ.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")RI0(J,Z,X[Y])}return wI0(J,Z),J}}(),II0=rZ&&rZ.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(rZ,"__esModule",{value:!0});rZ.DerpRelay=void 0;var bI0=r0("events"),Q10=SI0(r0("crypto")),kI0=II0(r0("ws")),fI0=(b0(),ZG(SW)),G10=65535,yI0=10,vI0=1000,hI0=60000;class Nx extends bI0.EventEmitter{ws=null;_state="disconnected";reconnectAttempts=0;reconnectTimer=null;stopped=!1;closing=!1;relayUrl;nodeId;displayNameSnapshot;signingPrivateKey;signingPublicKey;targetNodeId;signal;queue=[];static MAX_QUEUE=200;constructor($){super();if(this.relayUrl=$.relayUrl,this.nodeId=$.nodeId,this.displayNameSnapshot=$.displayNameSnapshot,this.signingPrivateKey=$.signingPrivateKey,this.signingPublicKey=$.signingPublicKey,this.targetNodeId=$.targetNodeId,this.signal=$.signal,this.signal)this.signal.addEventListener("abort",()=>this.disconnect(),{once:!0})}async connect(){if(this.stopped||this._state==="connected"||this._state==="connecting")return;return this.closing=!1,this.setState("connecting"),new Promise(($,Z)=>{try{let J=new kI0.default(this.relayUrl);this.ws=J;let X=setTimeout(()=>{J.close(),Z(Error("Relay connection timeout"))},15000);J.on("open",()=>{if(clearTimeout(X),this.closing){J.close(),Z(Error("Relay connection aborted: disconnect() called during connect"));return}this.setState("authenticating"),J.send(JSON.stringify({type:"auth",nodeId:this.nodeId,signingPublicKey:this.signingPublicKey}))}),J.on("message",(Y)=>{try{let Q=typeof Y==="string"?Y:Y.toString(),G=JSON.parse(Q);if(G.type==="challenge"&&this._state==="authenticating"){let V=this.signChallenge(G.nonce);J.send(JSON.stringify({type:"challenge_response",signature:V}))}else if(G.type==="auth_ok"){if(this.closing){J.close(),Z(Error("Relay connection aborted: disconnect() called during auth"));return}this.setState("connected"),this.reconnectAttempts=0,this.flushQueue(),this.emit("connected"),$()}else if(G.type==="auth_error")J.close(),Z(Error(`Relay auth failed: ${G.error}`));else if(G.type==="relay"&&this._state==="connected"){let V=fI0.NodeIdSchema.parse(G.fromNodeId),W=Buffer.from(G.data,"base64");this.emit("plaintext",W,V,G.displayNameSnapshot)}else if(G.type==="peer_offline"){let V=typeof G.displayNameSnapshot==="string"&&G.displayNameSnapshot.length>0?G.displayNameSnapshot:typeof G.nodeId==="string"&&G.nodeId.length>0?G.nodeId:this.targetNodeId;this.emit("error",Error(`Peer ${V} is offline on relay`))}}catch(Q){this.emit("error",Q instanceof Error?Q:Error(String(Q)))}}),J.on("close",()=>{clearTimeout(X);let Y=this._state==="connecting"||this._state==="authenticating";if(this.setState("disconnected"),this.stopped||this.closing){if(Y)Z(Error("Relay connection closed during setup"))}else this.emit("disconnected"),this.attemptReconnect()}),J.on("error",(Y)=>{if(clearTimeout(X),this.emit("error",Y),this._state==="connecting"||this._state==="authenticating")Z(Y)})}catch(J){this.setState("disconnected"),Z(J)}})}send($){if(this.stopped)throw Error("Relay is stopped");if($.length>G10)throw Error(`Payload exceeds max size (${$.length} > ${G10})`);if(this._state!=="connected"||!this.ws){this.enqueue($);return}this.ws.send(JSON.stringify({type:"relay",toNodeId:this.targetNodeId,data:$.toString("base64")}))}disconnect(){if(this.closing=!0,this.stopped=!0,this.clearReconnectTimer(),this.ws){try{this.ws.close()}catch{}this.ws=null}this.queue=[],this.setState("disconnected")}getState(){return this._state}get isConnected(){return this._state==="connected"}setState($){let Z=this._state;if(Z===$)return;this._state=$,this.emit("stateChange",$,Z)}signChallenge($){let Z=Buffer.from(this.signingPrivateKey,"base64"),J=Q10.createPrivateKey({key:Z,format:"der",type:"pkcs8"});return Q10.sign(null,Buffer.from($),J).toString("base64")}attemptReconnect(){if(this.stopped)return;if(this.reconnectAttempts>=yI0){this.setState("dead"),this.emit("dead");return}let $=Math.min(vI0*Math.pow(2,this.reconnectAttempts),hI0);this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>{if(this.stopped)return;this.connect().catch((Z)=>{this.emit("error",Z instanceof Error?Z:Error(String(Z)))})},$)}clearReconnectTimer(){if(this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null}enqueue($){if(this.queue.length>=Nx.MAX_QUEUE)this.queue.shift();this.queue.push($)}flushQueue(){if(this._state!=="connected"||!this.ws)return;let $=this.queue.splice(0);for(let Z of $)try{this.send(Z)}catch{}}}rZ.DerpRelay=Nx});var O10=IZ((F4)=>{var xI0=F4&&F4.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),gI0=F4&&F4.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),Tx=F4&&F4.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")xI0(J,Z,X[Y])}return gI0(J,Z),J}}();Object.defineProperty(F4,"__esModule",{value:!0});F4.NetworkManager=F4.PeerRegistry=void 0;F4.generateSigningKeypair=Mx;F4.generateKeyPair=Px;F4.createInviteToken=F10;F4.decodeInviteToken=jx;F4.ensureSecureNetwork=D10;var g4=Tx(r0("crypto")),MZ=Tx(r0("fs")),tZ=Tx(r0("path")),D$=(b0(),ZG(SW)),mI0=eZ0(),V10=Ox(),cI0=Y10(),uI0=QP(),pI0=zx(),W10=58291,dI0="ARIA_WIREGUARD_TEST_LISTEN_PORT";function H10(){let $=process.env[dI0]?.trim();if(!$)return W10;let Z=Number($);if(Number.isInteger(Z)&&Z>=0&&Z<=65535)return Z;return W10}function B4($){if(typeof process<"u"&&process.env.ARIA_LOG_LEVEL==="debug"&&process.stderr)process.stderr.write($)}function lI0($,Z){try{let J=tZ.join($,"audit");MZ.mkdirSync(J,{recursive:!0}),MZ.appendFileSync(tZ.join(J,"wireguard-diagnostics.jsonl"),JSON.stringify(Z)+`
|
|
5294
5295
|
`)}catch{}}var oY=`SELECT public_key AS publicKey, node_id AS nodeId, name, endpoint_host AS endpointHost,
|
|
5295
5296
|
endpoint_port AS endpointPort, endpoint_revision AS endpointRevision,
|
|
5296
5297
|
control_endpoint_host AS controlEndpointHost,
|
|
@@ -5358,10 +5359,10 @@ ${V}
|
|
|
5358
5359
|
`)}),Q.on("queueOverflow",(G)=>{B4(`[wireguard] Tunnel ${$.slice(0,8)}... queue overflow (${G.reason}), dropped=${G.dropped}
|
|
5359
5360
|
`)}),Q.on("messagesExpired",(G)=>{B4(`[wireguard] Tunnel ${$.slice(0,8)}... ${G.count} queued messages expired (TTL)
|
|
5360
5361
|
`)}),Q.on("plaintext",(G)=>{try{let V=JSON.parse(G.toString()),W=D$.RuntimeIngressEnvelopeSchema.safeParse(V);if(W.success){if("deliveryAck"in W.data){let H=W.data.deliveryAck;for(let K of this._deliveryAckListeners)K(H);return}if("ariaMessage"in W.data){let H=W.data.ariaMessage,K=typeof H==="object"&&H!==null?H.sender?.id:void 0,z=D$.NodeIdSchema.safeParse(K);if(!z.success||!this.matchesPeerNodeIdClaim(z.data,J)){B4(`[wireguard] Dropped tunnel message with sender principal mismatch for ${$.slice(0,8)}... expected "${this.resolvePeerPrincipalId(J)??J.name}", got "${String(K)}"
|
|
5361
|
-
`);return}if(H&&typeof H==="object"&&"id"in H&&typeof H.id==="string"&&"sender"in H&&"recipient"in H&&"type"in H&&typeof H.type==="string"&&"content"in H&&typeof H.content==="string")for(let U of this._messageListeners)U(H);return}if("joinRequest"in W.data){let H=W.data.joinRequest;if(!H.controlEndpoint)return;this.completeJoin({nodeId:H.nodeId,principalFingerprint:Ex(H.signingPublicKey),peerPublicKey:H.peerPublicKey,peerSigningKey:H.signingPublicKey,peerTransportEndpoint:H.transportEndpoint,peerControlEndpoint:H.controlEndpoint,displayNameSnapshot:H.displayNameSnapshot,inviteTokenNonce:H.inviteTokenNonce}).catch(()=>{});return}}if(V.controlRequest)this.handleControlRequest(V.controlRequest,$,J,Q);else if(V.controlResponse)this.handleControlResponse(V.controlResponse,J)}catch{}})})();this.pendingTunnelStarts.set($,X);try{await X}finally{if(this.pendingTunnelStarts.get($)===X)this.pendingTunnelStarts.delete($)}}stopTunnel($){let Z=this.resolvePeerByNodeId($,{includeRevoked:!0});if(!Z)return;this.stopTunnelByTransportKey(Z.publicKey)}stopTunnelByTransportKey($){let Z=this.tunnels.get($);if(!Z){if(this.pendingTunnelStarts.has($))this.canceledTunnelStarts.add($);return}let J=this.peerRegistry?.getWithPsk($);if(Z.stop(),this.tunnels.delete($),J){let X=this.resolvePeerPrincipalId(J);if(X)for(let Y of this._transportListeners)Y.onTransportDown?.(J.name,X)}}revokePeer($){return this.revoke($)}getTunnel($){let Z=this.resolveCurrentDirectRoutePeerPublicKeyByNodeId($);return Z?this.tunnels.get(Z):void 0}get activeTunnelCount(){return this.tunnels.size}resolveLocalInviteEndpoint(){if(!this.config)return null;let $=
|
|
5362
|
+
`);return}if(H&&typeof H==="object"&&"id"in H&&typeof H.id==="string"&&"sender"in H&&"recipient"in H&&"type"in H&&typeof H.type==="string"&&"content"in H&&typeof H.content==="string")for(let U of this._messageListeners)U(H);return}if("joinRequest"in W.data){let H=W.data.joinRequest;if(!H.controlEndpoint)return;this.completeJoin({nodeId:H.nodeId,principalFingerprint:Ex(H.signingPublicKey),peerPublicKey:H.peerPublicKey,peerSigningKey:H.signingPublicKey,peerTransportEndpoint:H.transportEndpoint,peerControlEndpoint:H.controlEndpoint,displayNameSnapshot:H.displayNameSnapshot,inviteTokenNonce:H.inviteTokenNonce}).catch(()=>{});return}}if(V.controlRequest)this.handleControlRequest(V.controlRequest,$,J,Q);else if(V.controlResponse)this.handleControlResponse(V.controlResponse,J)}catch{}})})();this.pendingTunnelStarts.set($,X);try{await X}finally{if(this.pendingTunnelStarts.get($)===X)this.pendingTunnelStarts.delete($)}}stopTunnel($){let Z=this.resolvePeerByNodeId($,{includeRevoked:!0});if(!Z)return;this.stopTunnelByTransportKey(Z.publicKey)}stopTunnelByTransportKey($){let Z=this.tunnels.get($);if(!Z){if(this.pendingTunnelStarts.has($))this.canceledTunnelStarts.add($);return}let J=this.peerRegistry?.getWithPsk($);if(Z.stop(),this.tunnels.delete($),J){let X=this.resolvePeerPrincipalId(J);if(X)for(let Y of this._transportListeners)Y.onTransportDown?.(J.name,X)}}revokePeer($){return this.revoke($)}getTunnel($){let Z=this.resolveCurrentDirectRoutePeerPublicKeyByNodeId($);return Z?this.tunnels.get(Z):void 0}get activeTunnelCount(){return this.tunnels.size}resolveLocalInviteEndpoint(){if(!this.config)return null;let $=r0("os").networkInterfaces();for(let Z of Object.values($))for(let J of Z??[])if(!J.internal&&J.family==="IPv4")return{address:J.address,port:this.config.listenPort};return null}invite($,Z){if(!this.config)throw Error("Network not initialized");let J=this.config.externalEndpoint;if(!J){if(J=this.resolveLocalInviteEndpoint()??void 0,!J)throw Error("Cannot create invite \u2014 no reachable network address. STUN failed and no local network interface found.")}if(this.peerRegistry){if(this.peerRegistry.activeCount()>=_Z.MAX_PEERS)throw Error(`Peer limit reached (${_Z.MAX_PEERS}). Revoke inactive peers first.`)}if(this.tunnels.size>=_Z.MAX_PEERS)throw Error(`Tunnel limit reached (${_Z.MAX_PEERS}).`);let X=aI0($),Y=typeof Z==="number"?{durationMs:Z}:{durationMs:Z?.durationMs,controlEndpoint:Z?.controlEndpoint,transportHostOverride:Z?.transportHostOverride,nodeId:Z?.nodeId?D$.NodeIdSchema.parse(Z.nodeId):void 0,caCert:Z?.caCert};if(typeof Z==="object"&&Z!==null)U10(Z,["durationMs","controlEndpoint","transportHostOverride","nodeId","caCert"],"invite");let Q=Y.controlEndpoint??this._localControlEndpoint;if(!Q)throw Error("invite requires the local control endpoint advertisement");let G=Y.caCert??this._localBootstrapCaCert;if(!G?.trim())throw Error("invite requires bootstrap CA authority");let V=this.localNodeId;if(!V)throw Error("invite requires an explicit runtime-owned local nodeId");let W=fF(this.config.signingPublicKey?.trim()??"");if(!W)throw Error("invite requires an explicit runtime-owned local signing principal");if(Q.tlsServerIdentity?.trim()!==W)throw Error("invite requires control endpoint tlsServerIdentity to match the signing principal fingerprint");let{token:H,psk:K}=F10({leaderPublicKey:this.config.publicKey,nodeId:V,audienceNodeId:Y.nodeId,leaderDisplayNameSnapshot:this.getLocalDisplayNameSnapshot()??this.arionName,host:Y.transportHostOverride?.trim()||J.address,port:this.config.listenPort,controlEndpoint:Q,displayNameSnapshot:X,durationMs:Y.durationMs,signingPublicKey:this.config.signingPublicKey,caCert:G,coordinationUrl:this.config.coordinationUrl,signingPrivateKey:this.config.signingPrivateKey}),z=jx(H);if(this.peerRegistry){let U=Y.nodeId;this.peerRegistry.upsert({...U?{nodeId:U}:{},publicKey:`pending-${g4.randomBytes(8).toString("hex")}`,name:X??nI0(z.tokenNonce),presharedKey:K,inviteToken:z.tokenNonce,status:"pending"})}return{token:H,psk:K}}async acceptInvite($,Z){if((this.peerRegistry?.listActive().length??0)>=_Z.MAX_PEERS)throw Error(`Peer limit reached (${_Z.MAX_PEERS}). Revoke inactive peers first.`);let X=jx($),Y=typeof Z==="string"?Z:Z?.displayNameSnapshot,Q=typeof Z==="string"?void 0:Z?.controlEndpoint,G=typeof Z==="string"?void 0:Z?.nodeId?D$.NodeIdSchema.parse(Z.nodeId):void 0;if(X.expiresAt>0&&Date.now()>X.expiresAt)throw Error("Invite token has expired");if(this.peerRegistry){if(!this.peerRegistry.claimToken(X.tokenNonce))throw Error("Invite token has already been used")}try{if(!this.config)await this.initialize();let V=this.config;if(!V)throw Error("Network not initialized");let W=V.nodeId?D$.NodeIdSchema.parse(V.nodeId):this.localNodeId;if(!W)throw Error("acceptInvite requires an explicit runtime-owned local nodeId");if(X.audienceNodeId&&X.audienceNodeId!==W)throw Error("Invite token is not addressed to this peer");if(G&&X.nodeId!==G)throw Error("Invite token nodeId does not match expected leader nodeId");let H=X.nodeId?.trim();if(!H)throw Error("Invite token missing inviter durable nodeId");let K=D$.NodeIdSchema.parse(H),z=X.leaderDisplayNameSnapshot?.trim()||Y?.trim()||"leader";this.assertRemotePeerIdentity({publicKey:X.publicKey,signingPublicKey:X.signingPublicKey??null,name:z},"Invite peer");let U=X.controlEndpoint;if(!U)throw Error("Invite token missing inviter control endpoint advertisement");if(!Q)throw Error("acceptInvite requires the local control endpoint advertisement");(0,D$.assertSupportedNetworkRuntimeProtocolVersion)(U.protocolVersion,"invite control endpoint"),(0,D$.assertSupportedNetworkRuntimeProtocolVersion)(Q.protocolVersion,"join control endpoint");let B={publicKey:X.publicKey,nodeId:K,name:z,endpointHost:X.host,endpointPort:X.port,endpointRevision:U.endpointRevision??0,controlEndpointHost:U.host,controlEndpointPort:U.port,controlTlsCaFingerprint:U.tlsCaFingerprint,controlEndpoint:{host:U.host,port:U.port,tlsCaFingerprint:U.tlsCaFingerprint,tlsServerIdentity:U.tlsServerIdentity,protocolVersion:U.protocolVersion,endpointRevision:U.endpointRevision??0},status:"pending_tunnel",lastHandshake:null,createdAt:Date.now(),updatedAt:Date.now(),signingPublicKey:X.signingPublicKey??null},F=X.signingPublicKey?this.listSupersededPrincipalRows(X.signingPublicKey,X.publicKey,K):[];if(this.peerRegistry)this.peerRegistry.db.transaction(()=>{for(let O of F)this.peerRegistry.delete(O.publicKey);if(!this.peerRegistry)throw Error("Peer registry unavailable during invite acceptance");this.peerRegistry.upsert({nodeId:K,publicKey:X.publicKey,name:z,status:"pending_tunnel",endpointHost:X.host,endpointPort:X.port,endpointRevision:U.endpointRevision??0,controlEndpointHost:U.host,controlEndpointPort:U.port,controlTlsCaFingerprint:U.tlsCaFingerprint,presharedKey:X.psk,inviteToken:X.tokenNonce,signingPublicKey:X.signingPublicKey})})();if(this.cleanupSupersededPrincipalRows(F),X.signingPublicKey)this.stagePendingPeerSigningKey({nodeId:K,peerPublicKey:X.publicKey,displayNameSnapshot:z,signingPublicKey:X.signingPublicKey});if(this.reconcileDirectRouteOwnership(),X.coordinationUrl&&this.config&&!this.config.coordinationUrl)this.config.coordinationUrl=X.coordinationUrl,this.persistConfig();if(await this.startTunnelByTransportKey(X.publicKey),this.config){let D=this.tunnels.get(X.publicKey),O=!1,L=Q.tlsServerIdentity?.trim()||void 0;if(!L)throw Error("acceptInvite join propagation requires an explicit tlsServerIdentity on the local control endpoint");let q=typeof this.config.signingPublicKey==="string"&&this.config.signingPublicKey.trim().length>0?g4.createHash("sha256").update(Buffer.from(this.config.signingPublicKey,"base64")).digest("hex"):void 0;if(!q)throw Error("acceptInvite join propagation requires an explicit runtime-owned local signing principal");if(L!==q)throw Error("acceptInvite join propagation requires control endpoint tlsServerIdentity to match the signing principal fingerprint");let A=this.config.externalEndpoint??this.resolveLocalInviteEndpoint();if(!A)throw Error("acceptInvite join propagation requires a reachable transport endpoint");let N=D$.JoinRequestSchema.parse({nodeId:W,principalFingerprint:D$.PrincipalFingerprintSchema.parse(q),protocolVersion:Q.protocolVersion,peerPublicKey:this.config.publicKey,signingPublicKey:this.config.signingPublicKey,transportEndpoint:{host:A.address,port:this.config.listenPort},controlEndpoint:Q,displayNameSnapshot:X.displayNameSnapshot,inviteTokenNonce:X.tokenNonce});if(D)try{D.sendPlaintext(Buffer.from(JSON.stringify({joinRequest:N})))}catch{}let _=X.caCert?.trim();if(_){let M=U.tlsServerIdentity?.trim();if(!M)throw Error("Invite control endpoint missing tlsServerIdentity for bootstrap TLS verification");try{let T=`https://${U.host}:${U.port}/api/v1/join/challenge`,k=await(0,V10.bootstrapTlsRequest)(T,{caCert:_,expectedTlsIdentity:M});if(k.status!==200)throw Error(`Join challenge failed: ${k.status}`);let R=JSON.parse(k.body);if(!R.challenge||typeof R.challenge!=="string")throw Error("Join challenge missing challenge payload");let a=Qb0(R.challenge,R.difficulty??4),o=`https://${U.host}:${U.port}/api/v1/join`,u=JSON.stringify({...N,proofOfWork:a}),w=await(0,V10.bootstrapTlsRequest)(o,{method:"POST",body:u,caCert:_,expectedTlsIdentity:M,headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(u).toString()}});if(w.status!==200)throw Error(`Join HTTP fallback failed: ${w.status}`);K10(this.ariaDir,_),O=!0}catch(T){B4(`[wireguard] HTTP join confirmation failed: ${T instanceof Error?T.message:String(T)}
|
|
5362
5363
|
`)}}if(!O&&X.coordinationUrl?.trim())try{let M=new URL("/api/v1/invite-relay/join",X.coordinationUrl).toString(),T=await fetch(M,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({inviteToken:$,joinRequest:N})}),k=await T.json();if(!T.ok||k.joined!==!0)throw Error(k.error??`Invite relay fallback failed with status ${T.status}`);if(_)K10(this.ariaDir,_);O=!0}catch(M){B4(`[wireguard] Invite relay fallback failed: ${M instanceof Error?M.message:String(M)}
|
|
5363
5364
|
`)}if(!O){if(!this.revoke(X.nodeId))this.stopTunnelByTransportKey(X.publicKey),this._peerSigningKeys.delete(X.publicKey),this.peerRegistry?.revoke(X.publicKey);throw Error("Failed to confirm join credentials with leader via bootstrap HTTP join")}}if(this.peerRegistry)this.peerRegistry.upsert({nodeId:K,publicKey:X.publicKey,name:z,status:"pending_tunnel"});return B.status="pending_tunnel",B}catch(V){throw this.peerRegistry?.releaseToken(X.tokenNonce),V}}async completeJoin($){if(!this.peerRegistry)throw Error("No peer registry");if(!$.inviteTokenNonce||typeof $.inviteTokenNonce!=="string")throw Error("Join request missing invite token nonce");let Z=this.peerRegistry.getPendingByInviteToken($.inviteTokenNonce);if(!Z||Z.status!=="pending"||!Z.publicKey.startsWith("pending-"))throw Error(`No pending invite found for token nonce "${$.inviteTokenNonce}"`);let J=this.peerRegistry.getWithPsk(Z.publicKey),X=J?.inviteToken;if(!X||X!==$.inviteTokenNonce)throw Error("Join request token nonce does not match pending invite");if(Z.nodeId&&$.nodeId!==Z.nodeId)throw Error("Join request nodeId mismatch for pending invite");if(this.peerRegistry.activeCount()>=_Z.MAX_PEERS)throw Error(`Peer limit reached (${_Z.MAX_PEERS}). Revoke inactive peers first.`);eI0($.peerPublicKey,"Join peer public key"),VP($.peerSigningKey,"Join peer signing key");let Q=D$.TransportEndpointAdvertisementSchema.safeParse($.peerTransportEndpoint);if(!Q.success)throw Error("Join peer transport endpoint is invalid");let G=D$.ControlEndpointAdvertisementSchema.safeParse($.peerControlEndpoint);if(!G.success)throw Error("Join peer control endpoint is invalid");let V=$.displayNameSnapshot?.trim()||Z.nodeId||$.nodeId;if(!/^[a-zA-Z0-9_-]{1,64}$/.test(V))throw Error("Join peer name must match ^[a-zA-Z0-9_-]{1,64}$");let W=Q.data,H=G.data,K=fF($.peerSigningKey);if(!K)throw Error("Join peer signing key could not derive a principal fingerprint");if(K!==$.principalFingerprint)throw Error("Join peer principal fingerprint does not match the signing key");if(H.tlsServerIdentity!==K)throw Error("Join peer control endpoint tlsServerIdentity must match the signing principal fingerprint");let z=this.resolveUniquePeerName(V,$.peerSigningKey);this.assertRemotePeerIdentity({publicKey:$.peerPublicKey,signingPublicKey:$.peerSigningKey,name:z},"Join peer");let U=J?.presharedKey??void 0,B=this.peerRegistry.db,F=this.listSupersededPrincipalRows($.peerSigningKey,$.peerPublicKey,$.nodeId);return B.transaction(()=>{for(let D of F)this.peerRegistry.delete(D.publicKey);this.peerRegistry.delete(Z.publicKey),this.peerRegistry.upsert({nodeId:$.nodeId,publicKey:$.peerPublicKey,name:z,endpointHost:W.host,endpointPort:W.port,endpointRevision:H?.endpointRevision??0,controlEndpointHost:H?.host,controlEndpointPort:H?.port,controlTlsCaFingerprint:H?.tlsCaFingerprint,presharedKey:U,status:"pending_verification",signingPublicKey:$.peerSigningKey,inviteToken:$.inviteTokenNonce})})(),this.cleanupSupersededPrincipalRows(F),this.stagePendingPeerSigningKey({nodeId:$.nodeId,peerPublicKey:$.peerPublicKey,displayNameSnapshot:z,signingPublicKey:$.peerSigningKey}),this.reconcileDirectRouteOwnership(),await this.startTunnelByTransportKey($.peerPublicKey),{effectiveName:z}}heartbeat($){if(!this.peerRegistry)return!1;let Z=this.resolveUniqueLivePeerPublicKeyByNodeId($),J=Z?this.peerRegistry.getWithPsk(Z):void 0;if(!J)return!1;let{identityState:X}=(0,D$.derivePeerStateFromLegacyStatus)(J);if(!(0,D$.canHeartbeat)(X))return!1;return this.peerRegistry.updateHandshakeByNodeId($),!0}applyPeerRegistration($){if(!this.peerRegistry)return{registered:!1,errorCode:"not_found"};let Z=this.resolvePeerByNodeId($.nodeId,{includeRevoked:!0})??void 0;if(!Z)return{registered:!1,errorCode:"not_found"};let J=$.nodeId,{identityState:X}=(0,D$.derivePeerStateFromLegacyStatus)(Z);if(!(0,D$.canRefreshEndpoint)(X)&&!(0,D$.canHeartbeat)(X)){if(Z.status==="active"||Z.status==="pending_verification")throw Error(`Invariant violation: applyPeerRegistration blocked registerable peer state ${Z.status}`);return{registered:!1,errorCode:Z.status}}let Y=!1,Q=Z.endpointRevision??0;if($.endpointHost&&$.endpointPort){let V=$.endpointRevision;if(typeof V!=="number"||!Number.isInteger(V)||V<0)return{registered:!1,errorCode:"missing_endpoint_revision"};let W=this.applyEndpointProjectionByTransportKey(Z.publicKey,$.endpointHost,$.endpointPort,V);if(W.errorCode&&W.errorCode!=="stale_revision"&&W.errorCode!=="conflicting_revision")return{registered:!1,errorCode:W.errorCode};Y=W.updated,Q=W.endpointRevision}if(Y)this.reconcileDirectRouteOwnership();let G=this.heartbeat(J);return{registered:!0,nodeId:J,...Z.name?{displayNameSnapshot:Z.name}:{},peerStatus:Z.status,lastSeen:Date.now(),heartbeatUpdated:G,endpointUpdated:Y,endpointRevision:Q}}revoke($){if(!this.peerRegistry)return!1;let Z=this.peerRegistry.getByNodeId($);if(!Z)return!1;return this.tearDownRelay(Z.publicKey),this.stopTunnelByTransportKey(Z.publicKey),this._peerSigningKeys.delete(Z.publicKey),this.peerRegistry.revokeByNodeId($),!0}applyPeerRevocation($){if(!this.peerRegistry)return{revoked:!1,errorCode:"not_found"};let Z=this.peerRegistry.getByNodeId($.nodeId);if(!Z)return{revoked:!1,errorCode:"not_found"};if(!Z.nodeId)return{revoked:!1,errorCode:"not_found"};let J=Z.nodeId,X=Z.signingPublicKey??this.getDurablePeerSigningKey(Z.publicKey),Y=$.fingerprint?$.fingerprint:X?Ex(X):void 0;if(!Y)return{revoked:!1,errorCode:"principal_unresolved"};let Q=Date.now();return this.revoke($.nodeId),{revoked:!0,nodeId:J,displayNameSnapshot:Z.name,fingerprint:D$.PrincipalFingerprintSchema.parse(Y),revokedAt:Q}}listPeers(){if(!this.peerRegistry)return[];let $=this.getDirectRouteOwnershipSnapshot();return this.peerRegistry.listAll().filter((Z)=>!this.isLocalIdentityCandidate(Z)).map((Z)=>{let J=$.get(Z.publicKey),X=J&&J.ownerPublicKey!==Z.publicKey?this.peerRegistry?.getWithPsk(J.ownerPublicKey):void 0,Y=X?this.resolvePeerPrincipalId(X):null,Q=J?.ownership==="superseded"?void 0:this.tunnels.get(Z.publicKey),G=J?.ownership==="superseded"?"none":Q?Q.getState():"none",V=Z.status,W=V==="revoked"||J?.ownership==="superseded"?"cannot_address":G==="connected"?"can_send_now":Z.nodeId?"can_queue_only":"cannot_address";return{...Z,membershipStatus:V,routeOwnership:J?.ownership??"current",routeOwnerNodeId:Y,sessionState:G,deliveryReadiness:W}})}listPendingInvites(){if(!this.peerRegistry)return[];return this.peerRegistry.listByStatus("pending").map(($)=>{let J=this.peerRegistry?.getWithPsk($.publicKey)?.inviteToken??void 0;if(!J)return null;return{inviteId:J,inviteLabel:iI0($.name),createdAt:$.createdAt,expiresAt:null}}).filter(($)=>$!==null)}cancelInvite($){if(!this.peerRegistry)return!1;let Z=this.peerRegistry.getPendingByInviteToken($);if(!Z)return!1;return this.peerRegistry.revoke(Z.publicKey),!0}updatePeerEndpoint($,Z,J,X){this.applyPeerRepair({nodeId:$,endpointHost:Z,endpointPort:J,endpointRevision:X})}applyPeerRepair($){if(!this.peerRegistry)return{repaired:!1,errorCode:"not_found"};let Z=this.resolvePeerByNodeId($.nodeId,{includeRevoked:!0})??void 0;if(!Z)return{repaired:!1,errorCode:"not_found"};if(!Z.nodeId)return{repaired:!1,errorCode:"not_found"};let J=Z.nodeId,{identityState:X}=(0,D$.derivePeerStateFromLegacyStatus)(Z);if(!(0,D$.canRefreshEndpoint)(X)){if(Z.status==="active"||Z.status==="pending_verification")throw Error(`Invariant violation: applyPeerRepair blocked repairable peer state ${Z.status}`);return{repaired:!1,errorCode:Z.status}}if(!Number.isInteger($.endpointRevision)||($.endpointRevision??-1)<0)return{repaired:!1,errorCode:"missing_endpoint_revision"};let Y=this.applyEndpointProjectionByTransportKey(Z.publicKey,$.endpointHost,$.endpointPort,$.endpointRevision);if(Y.errorCode)return{repaired:!1,errorCode:Y.errorCode};if(Y.updated)this.reconcileDirectRouteOwnership();return{repaired:!0,nodeId:J,...Z.name?{displayNameSnapshot:Z.name}:{},peerStatus:Z.status,endpointUpdated:Y.updated,endpointHost:$.endpointHost,endpointPort:$.endpointPort,endpointRevision:Y.endpointRevision}}applyEndpointProjectionByTransportKey($,Z,J,X){if(!this.peerRegistry)return{updated:!1,endpointRevision:0};rI0(Z,"Peer endpoint host"),tI0(J,"Peer endpoint port");let Y=this.peerRegistry.getByPublicKey($);if(!Y)return{updated:!1,endpointRevision:0};let{identityState:Q}=(0,D$.derivePeerStateFromLegacyStatus)(Y);if(!(0,D$.canRefreshEndpoint)(Q))return{updated:!1,endpointRevision:PH(Y.endpointRevision)};if(!Y.nodeId)return{updated:!1,endpointRevision:PH(Y.endpointRevision)};if(!Number.isInteger(X)||X<0)throw Error("Peer endpoint revision must be a non-negative integer");let G=$b0({currentHost:Y.endpointHost,currentPort:Y.endpointPort,currentRevision:Y.endpointRevision,nextHost:Z,nextPort:J,nextRevision:X});if(G.kind==="stale")return{updated:!1,endpointRevision:G.currentRevision,errorCode:"stale_revision"};if(G.kind==="conflict")return{updated:!1,endpointRevision:G.currentRevision,errorCode:"conflicting_revision"};let V=Y.endpointHost!==Z||Y.endpointPort!==J,W=this.tunnels.get(Y.publicKey);if(W){let H=W.getInnerTunnel();if(H)H.setPeerEndpoint(Z,J)}return this.peerRegistry.upsert({nodeId:Y.nodeId,publicKey:Y.publicKey,name:Y.name,endpointHost:Z,endpointPort:J,endpointRevision:G.revision}),{updated:G.kind==="apply"?V:!1,endpointRevision:G.revision}}getRelayTransport($){return this.relayTransports.get($)}async setupRelayFallback($,Z){this.relayTransports.set($,Z),this.relayUpgradeAttempts.set($,0);let J=this.peerRegistry?.getWithPsk($);if(J){let X={sendPlaintext:(Q)=>Z.send(Q)},Y=this.resolvePeerPrincipalId(J);if(Y)for(let Q of this._transportListeners)Q.onTransportUp?.(J.name,X,Y)}this.scheduleUpgradeProbe($)}scheduleUpgradeProbe($){let Z=this.relayUpgradeAttempts.get($)??0,J=_Z.RELAY_UPGRADE_INTERVAL_MS,X=1800000,Y=Math.min(J*Math.pow(2,Z),1800000),Q=setTimeout(async()=>{if(this.relayUpgradeTimers.delete($),!this.relayTransports.has($))return;if(this.getDirectRouteOwnershipForPublicKey($)?.ownership==="superseded"){this.tearDownRelay($);return}if(await this.probeDirectConnection($))try{await this.startTunnelByTransportKey($);let V=this.tunnels.get($);if(V&&V.getState()==="connected"){this.tearDownRelay($),B4(`[wireguard] Direct tunnel restored for ${$.slice(0,8)}... \u2014 relay disconnected
|
|
5364
|
-
`);return}}catch{}this.relayUpgradeAttempts.set($,Z+1),this.scheduleUpgradeProbe($)},Y);this.relayUpgradeTimers.set($,Q)}async probeDirectConnection($){if(!this.config)return!1;if(this.getDirectRouteOwnershipForPublicKey($)?.ownership==="superseded")return!1;let Z=this.peerRegistry?.getWithPsk($);if(!Z||!Z.endpointHost||!Z.endpointPort)return!1;let J=this.computePeerIps($),X=new uI0.SecureTunnel({privateKey:this.config.privateKey,peerPublicKey:$,presharedKey:Z.presharedKey??void 0,keepalive:25,listenPort:0,peerHost:Z.endpointHost??void 0,peerPort:Z.endpointPort??void 0,tunnelSrcIp:J.selfIp,tunnelDstIp:J.peerIp});return new Promise((Y)=>{let Q=setTimeout(()=>{X.stop(),Y(!1)},5000);X.on("handshake",()=>{clearTimeout(Q),X.stop(),Y(!0)}),X.on("error",()=>{clearTimeout(Q),X.stop(),Y(!1)}),X.start().catch(()=>{clearTimeout(Q),Y(!1)})})}tearDownRelay($){let Z=this.relayTransports.get($);if(!Z)return;Z.disconnect(),this.relayTransports.delete($),this.relayUpgradeAttempts.delete($);let J=this.relayUpgradeTimers.get($);if(J)clearTimeout(J),this.relayUpgradeTimers.delete($);let X=this.peerRegistry?.getWithPsk($);if(X){let Y=this.resolvePeerPrincipalId(X);if(Y)for(let Q of this._transportListeners)Q.onTransportDown?.(X.name,Y)}}resetRelayUpgradeBackoff(){for(let[$]of this.relayTransports){this.relayUpgradeAttempts.set($,0);let Z=this.relayUpgradeTimers.get($);if(Z)clearTimeout(Z),this.relayUpgradeTimers.delete($);this.scheduleUpgradeProbe($)}}async shutdown(){for(let $ of this.pendingTunnelStarts.keys())this.canceledTunnelStarts.add($);for(let[$,Z]of this.tunnels)Z.stop();if(this.tunnels.clear(),this.sharedSocket){let $=this.sharedSocket;this.sharedSocket=null,this.sharedSocketHandlers.clear(),await new Promise((Z)=>{try{$.close(()=>Z())}catch{Z()}setTimeout(Z,2000)})}for(let[$]of this.relayTransports)this.tearDownRelay($);this.relayTransports.clear(),this.relayUpgradeAttempts.clear();for(let[$,Z]of this.relayUpgradeTimers)clearTimeout(Z);this.relayUpgradeTimers.clear()}status(){let $=this.listPeers();return{configured:this.config!==null,nodeId:this.config?.nodeId??null,publicKey:this.config?.publicKey??null,signingPublicKey:this.config?.signingPublicKey??null,listenPort:this.config?.listenPort??null,externalEndpoint:this.config?.externalEndpoint??null,activePeers:$.filter((Z)=>Z.membershipStatus==="active"&&Z.routeOwnership!=="superseded").length,totalPeers:$.length,activeTunnels:$.filter((Z)=>Z.sessionState!=="none").length,connectedPeers:$.filter((Z)=>Z.sessionState==="connected").length,handshakingPeers:$.filter((Z)=>Z.sessionState==="handshaking").length,queueOnlyPeers:$.filter((Z)=>Z.deliveryReadiness==="can_queue_only").length,supersededPeers:$.filter((Z)=>Z.routeOwnership==="superseded").length}}async handleControlRequest($,Z,J,X){if(!$||typeof $.type!=="string")return;switch($.type){case"peerList":{let Y=this.listPeers().map((Q)=>({nodeId:Q.nodeId,displayNameSnapshot:Q.name,name:Q.name,publicKey:Q.publicKey,status:Q.status,endpointHost:Q.endpointHost,endpointPort:Q.endpointPort,lastHandshake:Q.lastHandshake,createdAt:Q.createdAt}));X.sendPlaintext(Buffer.from(JSON.stringify({controlResponse:{type:"peerList",peers:Y}})));break}case"heartbeat":{let Y=this.resolvePeerPrincipalId(J);if(Y)this.heartbeat(Y);break}default:break}}pendingPeerListCallbacks=new Map;handleControlResponse($,Z){if(!$||typeof $.type!=="string")return;if($.type==="peerList"&&Array.isArray($.peers)){let J=this.pendingPeerListCallbacks.get(Z.publicKey);if(J)this.pendingPeerListCallbacks.delete(Z.publicKey),J($.peers)}}resolvePeerPrincipalId($){if($.nodeId)return $.nodeId;if(this.config?.publicKey===$.publicKey)return this.localNodeId??null;return null}getDurablePeerSigningKey($){let Z=this.peerRegistry?.getWithPsk($)?.signingPublicKey??null;if(!Z)return null;return fF(Z)?Z:null}getPeerSigningFingerprintByPublicKey($){let Z=this.getDurablePeerSigningKey($);if(!Z)return null;return fF(Z)}requestPeerListViaTunnel($,Z=1e4){let J=this.tunnels.get($);if(!J)return Promise.reject(Error("No tunnel to peer"));if(!this.peerRegistry?.getWithPsk($))return Promise.reject(Error("Peer not found in registry"));return new Promise((Y,Q)=>{let G=setTimeout(()=>{this.pendingPeerListCallbacks.delete($),Q(Error("Peer list request timed out"))},Z);this.pendingPeerListCallbacks.set($,(V)=>{clearTimeout(G),Y(V)}),J.sendPlaintext(Buffer.from(JSON.stringify({controlRequest:{type:"peerList"}})))})}sendHeartbeatViaTunnel($){let Z=this.tunnels.get($);if(!Z)return;Z.sendPlaintext(Buffer.from(JSON.stringify({controlRequest:{type:"heartbeat"}})))}}F4.NetworkManager=_Z});var q10=IZ((L10)=>{Object.defineProperty(L10,"__esModule",{value:!0});L10.PeerDiscoveryService=void 0;var Gb0=s0("events"),yF=(b0(),ZG(SW)),Vb0=Ox();class N10 extends Gb0.EventEmitter{interval=null;networkManager;nodeId;coordinationUrl;displayNameSnapshot;signal;pollIntervalMs;maxPeers;signingPublicKey;signingPrivateKey;envelopeSigner;coordinationCaCert;coordinationTlsIdentity;getLocalRegistrationState;knownRemotePeers=new Map;pollInFlight=null;initialSyncPromise;resolveInitialSync=null;initialSyncSettled=!1;stopped=!1;constructor($){super();if(this.networkManager=$.networkManager,this.nodeId=$.nodeId,this.coordinationUrl=$.coordinationUrl.replace(/\/$/,""),this.displayNameSnapshot=$.displayNameSnapshot,this.signal=$.signal,this.pollIntervalMs=$.pollIntervalMs??60000,this.maxPeers=$.maxPeers??128,this.signingPublicKey=$.signingPublicKey,this.signingPrivateKey=$.signingPrivateKey,this.envelopeSigner=$.envelopeSigner,this.coordinationCaCert=$.coordinationCaCert?.trim()||void 0,this.coordinationTlsIdentity=$.coordinationTlsIdentity?.trim()||void 0,this.getLocalRegistrationState=$.getLocalRegistrationState,!this.envelopeSigner)throw Error("Peer discovery requires an envelope signer");if(this.initialSyncPromise=new Promise((Z)=>{this.resolveInitialSync=()=>{if(this.initialSyncSettled)return;this.initialSyncSettled=!0,Z()}}),!this.signingPublicKey||!this.signingPrivateKey)throw Error("Peer discovery requires Ed25519 signing keys (signingPublicKey + signingPrivateKey)");if(this.coordinationCaCert&&!this.coordinationTlsIdentity||!this.coordinationCaCert&&this.coordinationTlsIdentity)throw Error("Peer discovery HTTPS pinning requires both coordinationCaCert and coordinationTlsIdentity");if(this.signal)this.signal.addEventListener("abort",()=>this.stop(),{once:!0})}start(){if(this.interval||this.stopped)return;this.schedulePoll(),this.interval=setInterval(()=>{if(this.stopped||this.signal?.aborted){this.stop();return}this.schedulePoll()},this.pollIntervalMs)}waitForInitialSync(){return this.initialSyncPromise}stop(){if(this.stopped=!0,this.interval)clearInterval(this.interval),this.interval=null;this.resolveInitialSync?.()}schedulePoll(){if(this.pollInFlight)return;this.pollInFlight=this.poll().catch(($)=>this.reportError($ instanceof Error?$:Error(String($)))).finally(()=>{this.pollInFlight=null,this.resolveInitialSync?.()})}reportError($){if(this.listenerCount("error")>0)this.emit("error",$)}peerEndpointRevision($){if(typeof $.endpointRevision==="number"&&Number.isInteger($.endpointRevision))return $.endpointRevision;return null}peerFreshness($){let Z=[typeof $.updatedAt==="number"&&Number.isFinite($.updatedAt)?$.updatedAt:null,typeof $.lastHandshake==="number"&&Number.isFinite($.lastHandshake)?$.lastHandshake:null,typeof $.createdAt==="number"&&Number.isFinite($.createdAt)?$.createdAt:null].filter((J)=>J!==null);return Z.length>0?Math.max(...Z):null}classifyRepairOutcome($){let Z=this.repairInputForPeer($);if(Z===null)return"ok";if(Z===!1)return"blocked";let J=this.networkManager.applyPeerRepair(Z);if(J.repaired)return"ok";if("errorCode"in J&&J.errorCode==="not_found")return"unknown";return"blocked"}repairInputForPeer($){if($.endpointHost===null&&$.endpointPort===null)return null;if(typeof $.endpointHost!=="string"||typeof $.endpointPort!=="number"||!Number.isInteger($.endpointPort)||$.endpointPort<1||$.endpointPort>65535||typeof $.endpointRevision!=="number"||!Number.isInteger($.endpointRevision)||$.endpointRevision<0)return!1;return{nodeId:$.nodeId,endpointHost:$.endpointHost,endpointPort:$.endpointPort,endpointRevision:$.endpointRevision}}async postControlPlane($,Z){let J=`${this.coordinationUrl}${$}`,X=JSON.stringify(Z);if(J.startsWith("https://")&&this.coordinationCaCert&&this.coordinationTlsIdentity)return(0,Vb0.bootstrapTlsRequest)(J,{method:"POST",body:X,caCert:this.coordinationCaCert,expectedTlsIdentity:this.coordinationTlsIdentity,timeoutMs:1e4,headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(X).toString()}});let Y=await fetch(J,{method:"POST",headers:{"Content-Type":"application/json"},body:X,signal:AbortSignal.timeout(1e4)}),Q="";if(typeof Y.text==="function")Q=await Y.text();else if(typeof Y.json==="function")Q=JSON.stringify(await Y.json());return{status:Y.status,body:Q}}async heartbeat(){let $=this.getLocalRegistrationState?.()??void 0,Z={nodeId:this.nodeId,displayNameSnapshot:this.displayNameSnapshot},J={nodeId:this.nodeId,displayNameSnapshot:this.displayNameSnapshot};if($?.endpointHost&&typeof $.endpointPort==="number"&&Number.isInteger($.endpointPort))Z.endpointHost=$.endpointHost,Z.endpointPort=$.endpointPort,J.endpointHost=$.endpointHost,J.endpointPort=$.endpointPort,Z.endpointRevision=$.endpointRevision??0,J.endpointRevision=$.endpointRevision??0;Z.envelope=this.envelopeSigner("network.register",J);let X=await this.postControlPlane("/api/v1/network/register",Z);if(X.status<200||X.status>=300)throw Error(`Peer discovery heartbeat failed: HTTP ${X.status}`)}parseDiscoveredPeer($){if(!$||typeof $!=="object")return null;let Z=$,J=yF.NodeIdSchema.safeParse(Z.nodeId),X=yF.LegacyPeerRegistryStatusSchema.safeParse(Z.status),Y=typeof Z.transportPublicKey==="string"&&Z.transportPublicKey.length>0?yF.PeerTransportIdSchema.parse(Z.transportPublicKey):null,Q=typeof Z.displayNameSnapshot==="string"?Z.displayNameSnapshot:void 0,G=Z.endpointHost===null?null:Z.endpointHost,V=Z.endpointPort===null?null:Z.endpointPort,W=typeof Z.endpointRevision==="number"?Z.endpointRevision:void 0,H=typeof Z.updatedAt==="number"?Z.updatedAt:void 0,K=Z.lastHandshake===null||typeof Z.lastHandshake==="number"?Z.lastHandshake:void 0,z=typeof Z.createdAt==="number"?Z.createdAt:void 0,U=Q===void 0||Q.length>0,B=G===null||typeof G==="string"&&G.length>0&&G.length<=253&&/^[a-zA-Z0-9._:-]+$/.test(G),F=V===null||typeof V==="number"&&Number.isInteger(V)&&V>=1&&V<=65535,O=!(G!==null&&V!==null&&X.success&&X.data!=="revoked")&&W===void 0||typeof W==="number"&&Number.isInteger(W)&&W>=0,L=G===null&&V===null&&W===void 0||typeof G==="string"&&typeof V==="number"&&typeof W==="number",q=Z.lastHandshake===void 0||K===null||typeof K==="number"&&Number.isFinite(K),A=Z.updatedAt===void 0||typeof H==="number"&&Number.isFinite(H),N=Z.createdAt===void 0||typeof z==="number"&&Number.isFinite(z);if(!J.success||!Y||!X.success||!U||!B||!F||!O||!A||!L||!q||!N)return null;return{nodeId:J.data,transportPublicKey:Y,...Q?{displayNameSnapshot:Q}:{},status:X.data,endpointHost:G,endpointPort:V,...W!==void 0?{endpointRevision:W}:{},...H!==void 0?{updatedAt:H}:{},...K!==void 0?{lastHandshake:K}:{},...z!==void 0?{createdAt:z}:{}}}async poll(){if(this.stopped||this.signal?.aborted)return;await this.heartbeat();let $=await this.fetchPeers();if(!$)return;await this.reconcile($)}async fetchPeers(){let $=this.envelopeSigner("network.list_peers",{nodeId:this.nodeId,displayNameSnapshot:this.displayNameSnapshot}),Z=await this.postControlPlane("/api/v1/network/peers",{envelope:$});if(Z.status<200||Z.status>=300)throw Error(`Peer discovery fetch failed: HTTP ${Z.status}`);let J=JSON.parse(Z.body);if(!Array.isArray(J.peers))throw Error("Peer discovery fetch returned invalid payload: peers must be an array");let X=5000;if(J.peers.length>X)throw Error(`Peer discovery fetch returned too many peers (${J.peers.length})`);let Y=[];for(let Q of J.peers){let G=this.parseDiscoveredPeer(Q);if(!G)throw Error("Peer discovery fetch returned malformed peer record");Y.push(G)}return Y}async reconcile($){let Z=this.nodeId,J=new Map;for(let X of $){if(X.nodeId===Z)continue;let{identityState:Y}=(0,yF.derivePeerStateFromLegacyStatus)(X);if(!(0,yF.canRefreshEndpoint)(Y))continue;J.set(X.nodeId,X)}for(let[X,Y]of J){let Q=this.knownRemotePeers.get(X);if(!Q)continue;let G=Q.endpointHost!==Y.endpointHost||Q.endpointPort!==Y.endpointPort,V=(Q.endpointRevision??0)!==(Y.endpointRevision??0),W=Q.transportPublicKey!==Y.transportPublicKey,H=this.peerEndpointRevision(Q),K=this.peerEndpointRevision(Y),z=this.peerFreshness(Q),U=this.peerFreshness(Y),B=G&&H!==null&&K!==null&&K<=H,F=G&&H===null&&K===null&&z!==null&&U!==null&&U<=z,D=W&&H!==null&&K!==null&&K<=H,O=W&&z!==null&&U!==null&&U<=z;if(B||F||D||O)continue;if(G&&Y.endpointHost&&Y.endpointPort){let L=this.classifyRepairOutcome(Y);if(L==="unknown"){this.reportError(Error(`Peer discovery lost authoritative repair binding for ${Y.displayNameSnapshot??Y.nodeId} (${Y.nodeId})`));continue}if(L==="blocked")continue}if(W){this.reportError(Error(`Peer discovery observed transport rotation for ${Y.displayNameSnapshot??Y.nodeId} (${Y.nodeId}); explicit continuity required`));continue}if(V){this.knownRemotePeers.set(X,Y);continue}this.knownRemotePeers.set(X,Y)}for(let[X,Y]of J){if(this.knownRemotePeers.has(X))continue;if(this.networkManager.activeTunnelCount>=this.maxPeers)break;try{let Q=this.classifyRepairOutcome(Y);if(Q==="unknown"){this.emit("peerDiscoveredUnknown",Y.displayNameSnapshot??Y.nodeId,Y.nodeId,Y);continue}if(Q==="blocked")continue;await this.networkManager.startTunnel(Y.nodeId),this.knownRemotePeers.set(X,Y),this.emit("peerJoined",Y.displayNameSnapshot??Y.nodeId,Y.nodeId)}catch(Q){let G=Q instanceof Error?Q.message:String(Q);if(Q?.code==="PEER_NOT_IN_REGISTRY"||G.includes("not found in registry"))this.emit("peerDiscoveredUnknown",Y.displayNameSnapshot??Y.nodeId,Y.nodeId,Y);else this.reportError(Error(`Peer discovery failed to start tunnel for ${Y.displayNameSnapshot??Y.nodeId} (${Y.nodeId}): ${G}`))}}for(let[X,Y]of this.knownRemotePeers){if(J.has(X))continue;this.networkManager.stopTunnel(X),this.knownRemotePeers.delete(X),this.emit("peerLeft",Y.displayNameSnapshot??Y.nodeId,Y.nodeId)}}}L10.PeerDiscoveryService=N10});var MH=IZ((P$)=>{var __dirname="/Users/hole/aria/.bundle-stage/wireguard/dist",Wb0=P$&&P$.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),Hb0=P$&&P$.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),Kb0=P$&&P$.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")Wb0(J,Z,X[Y])}return Hb0(J,Z),J}}();Object.defineProperty(P$,"__esModule",{value:!0});P$.DerpRelay=P$.PeerDiscoveryService=P$.ensureSecureNetwork=P$.decodeInviteToken=P$.createInviteToken=P$.generateSigningKeypair=P$.generateKeyPair=P$.PeerRegistry=P$.NetworkManager=P$.detectNatType=P$.discoverEndpoint=P$.StunClient=P$.ResilientTunnel=P$.SecureTunnel=void 0;P$.assertNativeAddonAvailable=Ub0;P$.createTunnel=Bb0;P$.generateKeypair=Fb0;var zb0=Kb0(s0("path")),WP=null;function Cx(){if(WP)return WP;try{return WP=(()=>{throw new Error("Cannot require module "+"@aria-cli/wireguard");})(),WP}catch($){let Z=$ instanceof Error?$.message:String($);throw Error(`@aria/wireguard: Failed to load native addon via ${zb0.join(__dirname,"../index.js")} (${process.platform}-${process.arch}). ${Z}`)}}function Ub0(){Cx()}function Bb0($){return new(Cx()).WireGuardTunnel($.privateKey,$.peerPublicKey,$.presharedKey??null,$.keepalive??0,$.index??null)}function Fb0(){return Cx().generateKeypair()}var Db0=QP();Object.defineProperty(P$,"SecureTunnel",{enumerable:!0,get:function(){return Db0.SecureTunnel}});var Ob0=zx();Object.defineProperty(P$,"ResilientTunnel",{enumerable:!0,get:function(){return Ob0.ResilientTunnel}});var Rx=Dx();Object.defineProperty(P$,"StunClient",{enumerable:!0,get:function(){return Rx.StunClient}});Object.defineProperty(P$,"discoverEndpoint",{enumerable:!0,get:function(){return Rx.discoverEndpoint}});Object.defineProperty(P$,"detectNatType",{enumerable:!0,get:function(){return Rx.detectNatType}});var tY=O10();Object.defineProperty(P$,"NetworkManager",{enumerable:!0,get:function(){return tY.NetworkManager}});Object.defineProperty(P$,"PeerRegistry",{enumerable:!0,get:function(){return tY.PeerRegistry}});Object.defineProperty(P$,"generateKeyPair",{enumerable:!0,get:function(){return tY.generateKeyPair}});Object.defineProperty(P$,"generateSigningKeypair",{enumerable:!0,get:function(){return tY.generateSigningKeypair}});Object.defineProperty(P$,"createInviteToken",{enumerable:!0,get:function(){return tY.createInviteToken}});Object.defineProperty(P$,"decodeInviteToken",{enumerable:!0,get:function(){return tY.decodeInviteToken}});Object.defineProperty(P$,"ensureSecureNetwork",{enumerable:!0,get:function(){return tY.ensureSecureNetwork}});var Nb0=q10();Object.defineProperty(P$,"PeerDiscoveryService",{enumerable:!0,get:function(){return Nb0.PeerDiscoveryService}});var Lb0=Lx();Object.defineProperty(P$,"DerpRelay",{enumerable:!0,get:function(){return Lb0.DerpRelay}})});var Ix=IZ((r1)=>{var Ab0=r1&&r1.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),qb0=r1&&r1.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),E10=r1&&r1.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")Ab0(J,Z,X[Y])}return qb0(J,Z),J}}();Object.defineProperty(r1,"__esModule",{value:!0});r1.NetworkStateStore=void 0;r1.canonicalNetworkStatePath=Cb0;var Eb0=E10(s0("fs")),Sx=E10(s0("path")),_b0=(W8(),ZG(cC)),Mb0=(PG(),ZG(Ap)),Pb0=`
|
|
5365
|
+
`);return}}catch{}this.relayUpgradeAttempts.set($,Z+1),this.scheduleUpgradeProbe($)},Y);this.relayUpgradeTimers.set($,Q)}async probeDirectConnection($){if(!this.config)return!1;if(this.getDirectRouteOwnershipForPublicKey($)?.ownership==="superseded")return!1;let Z=this.peerRegistry?.getWithPsk($);if(!Z||!Z.endpointHost||!Z.endpointPort)return!1;let J=this.computePeerIps($),X=new uI0.SecureTunnel({privateKey:this.config.privateKey,peerPublicKey:$,presharedKey:Z.presharedKey??void 0,keepalive:25,listenPort:0,peerHost:Z.endpointHost??void 0,peerPort:Z.endpointPort??void 0,tunnelSrcIp:J.selfIp,tunnelDstIp:J.peerIp});return new Promise((Y)=>{let Q=setTimeout(()=>{X.stop(),Y(!1)},5000);X.on("handshake",()=>{clearTimeout(Q),X.stop(),Y(!0)}),X.on("error",()=>{clearTimeout(Q),X.stop(),Y(!1)}),X.start().catch(()=>{clearTimeout(Q),Y(!1)})})}tearDownRelay($){let Z=this.relayTransports.get($);if(!Z)return;Z.disconnect(),this.relayTransports.delete($),this.relayUpgradeAttempts.delete($);let J=this.relayUpgradeTimers.get($);if(J)clearTimeout(J),this.relayUpgradeTimers.delete($);let X=this.peerRegistry?.getWithPsk($);if(X){let Y=this.resolvePeerPrincipalId(X);if(Y)for(let Q of this._transportListeners)Q.onTransportDown?.(X.name,Y)}}resetRelayUpgradeBackoff(){for(let[$]of this.relayTransports){this.relayUpgradeAttempts.set($,0);let Z=this.relayUpgradeTimers.get($);if(Z)clearTimeout(Z),this.relayUpgradeTimers.delete($);this.scheduleUpgradeProbe($)}}async shutdown(){for(let $ of this.pendingTunnelStarts.keys())this.canceledTunnelStarts.add($);for(let[$,Z]of this.tunnels)Z.stop();if(this.tunnels.clear(),this.sharedSocket){let $=this.sharedSocket;this.sharedSocket=null,this.sharedSocketHandlers.clear(),await new Promise((Z)=>{try{$.close(()=>Z())}catch{Z()}setTimeout(Z,2000)})}for(let[$]of this.relayTransports)this.tearDownRelay($);this.relayTransports.clear(),this.relayUpgradeAttempts.clear();for(let[$,Z]of this.relayUpgradeTimers)clearTimeout(Z);this.relayUpgradeTimers.clear()}status(){let $=this.listPeers();return{configured:this.config!==null,nodeId:this.config?.nodeId??null,publicKey:this.config?.publicKey??null,signingPublicKey:this.config?.signingPublicKey??null,listenPort:this.config?.listenPort??null,externalEndpoint:this.config?.externalEndpoint??null,activePeers:$.filter((Z)=>Z.membershipStatus==="active"&&Z.routeOwnership!=="superseded").length,totalPeers:$.length,activeTunnels:$.filter((Z)=>Z.sessionState!=="none").length,connectedPeers:$.filter((Z)=>Z.sessionState==="connected").length,handshakingPeers:$.filter((Z)=>Z.sessionState==="handshaking").length,queueOnlyPeers:$.filter((Z)=>Z.deliveryReadiness==="can_queue_only").length,supersededPeers:$.filter((Z)=>Z.routeOwnership==="superseded").length}}async handleControlRequest($,Z,J,X){if(!$||typeof $.type!=="string")return;switch($.type){case"peerList":{let Y=this.listPeers().map((Q)=>({nodeId:Q.nodeId,displayNameSnapshot:Q.name,name:Q.name,publicKey:Q.publicKey,status:Q.status,endpointHost:Q.endpointHost,endpointPort:Q.endpointPort,lastHandshake:Q.lastHandshake,createdAt:Q.createdAt}));X.sendPlaintext(Buffer.from(JSON.stringify({controlResponse:{type:"peerList",peers:Y}})));break}case"heartbeat":{let Y=this.resolvePeerPrincipalId(J);if(Y)this.heartbeat(Y);break}default:break}}pendingPeerListCallbacks=new Map;handleControlResponse($,Z){if(!$||typeof $.type!=="string")return;if($.type==="peerList"&&Array.isArray($.peers)){let J=this.pendingPeerListCallbacks.get(Z.publicKey);if(J)this.pendingPeerListCallbacks.delete(Z.publicKey),J($.peers)}}resolvePeerPrincipalId($){if($.nodeId)return $.nodeId;if(this.config?.publicKey===$.publicKey)return this.localNodeId??null;return null}getDurablePeerSigningKey($){let Z=this.peerRegistry?.getWithPsk($)?.signingPublicKey??null;if(!Z)return null;return fF(Z)?Z:null}getPeerSigningFingerprintByPublicKey($){let Z=this.getDurablePeerSigningKey($);if(!Z)return null;return fF(Z)}requestPeerListViaTunnel($,Z=1e4){let J=this.tunnels.get($);if(!J)return Promise.reject(Error("No tunnel to peer"));if(!this.peerRegistry?.getWithPsk($))return Promise.reject(Error("Peer not found in registry"));return new Promise((Y,Q)=>{let G=setTimeout(()=>{this.pendingPeerListCallbacks.delete($),Q(Error("Peer list request timed out"))},Z);this.pendingPeerListCallbacks.set($,(V)=>{clearTimeout(G),Y(V)}),J.sendPlaintext(Buffer.from(JSON.stringify({controlRequest:{type:"peerList"}})))})}sendHeartbeatViaTunnel($){let Z=this.tunnels.get($);if(!Z)return;Z.sendPlaintext(Buffer.from(JSON.stringify({controlRequest:{type:"heartbeat"}})))}}F4.NetworkManager=_Z});var q10=IZ((L10)=>{Object.defineProperty(L10,"__esModule",{value:!0});L10.PeerDiscoveryService=void 0;var Gb0=r0("events"),yF=(b0(),ZG(SW)),Vb0=Ox();class N10 extends Gb0.EventEmitter{interval=null;networkManager;nodeId;coordinationUrl;displayNameSnapshot;signal;pollIntervalMs;maxPeers;signingPublicKey;signingPrivateKey;envelopeSigner;coordinationCaCert;coordinationTlsIdentity;getLocalRegistrationState;knownRemotePeers=new Map;pollInFlight=null;initialSyncPromise;resolveInitialSync=null;initialSyncSettled=!1;stopped=!1;constructor($){super();if(this.networkManager=$.networkManager,this.nodeId=$.nodeId,this.coordinationUrl=$.coordinationUrl.replace(/\/$/,""),this.displayNameSnapshot=$.displayNameSnapshot,this.signal=$.signal,this.pollIntervalMs=$.pollIntervalMs??60000,this.maxPeers=$.maxPeers??128,this.signingPublicKey=$.signingPublicKey,this.signingPrivateKey=$.signingPrivateKey,this.envelopeSigner=$.envelopeSigner,this.coordinationCaCert=$.coordinationCaCert?.trim()||void 0,this.coordinationTlsIdentity=$.coordinationTlsIdentity?.trim()||void 0,this.getLocalRegistrationState=$.getLocalRegistrationState,!this.envelopeSigner)throw Error("Peer discovery requires an envelope signer");if(this.initialSyncPromise=new Promise((Z)=>{this.resolveInitialSync=()=>{if(this.initialSyncSettled)return;this.initialSyncSettled=!0,Z()}}),!this.signingPublicKey||!this.signingPrivateKey)throw Error("Peer discovery requires Ed25519 signing keys (signingPublicKey + signingPrivateKey)");if(this.coordinationCaCert&&!this.coordinationTlsIdentity||!this.coordinationCaCert&&this.coordinationTlsIdentity)throw Error("Peer discovery HTTPS pinning requires both coordinationCaCert and coordinationTlsIdentity");if(this.signal)this.signal.addEventListener("abort",()=>this.stop(),{once:!0})}start(){if(this.interval||this.stopped)return;this.schedulePoll(),this.interval=setInterval(()=>{if(this.stopped||this.signal?.aborted){this.stop();return}this.schedulePoll()},this.pollIntervalMs)}waitForInitialSync(){return this.initialSyncPromise}stop(){if(this.stopped=!0,this.interval)clearInterval(this.interval),this.interval=null;this.resolveInitialSync?.()}schedulePoll(){if(this.pollInFlight)return;this.pollInFlight=this.poll().catch(($)=>this.reportError($ instanceof Error?$:Error(String($)))).finally(()=>{this.pollInFlight=null,this.resolveInitialSync?.()})}reportError($){if(this.listenerCount("error")>0)this.emit("error",$)}peerEndpointRevision($){if(typeof $.endpointRevision==="number"&&Number.isInteger($.endpointRevision))return $.endpointRevision;return null}peerFreshness($){let Z=[typeof $.updatedAt==="number"&&Number.isFinite($.updatedAt)?$.updatedAt:null,typeof $.lastHandshake==="number"&&Number.isFinite($.lastHandshake)?$.lastHandshake:null,typeof $.createdAt==="number"&&Number.isFinite($.createdAt)?$.createdAt:null].filter((J)=>J!==null);return Z.length>0?Math.max(...Z):null}classifyRepairOutcome($){let Z=this.repairInputForPeer($);if(Z===null)return"ok";if(Z===!1)return"blocked";let J=this.networkManager.applyPeerRepair(Z);if(J.repaired)return"ok";if("errorCode"in J&&J.errorCode==="not_found")return"unknown";return"blocked"}repairInputForPeer($){if($.endpointHost===null&&$.endpointPort===null)return null;if(typeof $.endpointHost!=="string"||typeof $.endpointPort!=="number"||!Number.isInteger($.endpointPort)||$.endpointPort<1||$.endpointPort>65535||typeof $.endpointRevision!=="number"||!Number.isInteger($.endpointRevision)||$.endpointRevision<0)return!1;return{nodeId:$.nodeId,endpointHost:$.endpointHost,endpointPort:$.endpointPort,endpointRevision:$.endpointRevision}}async postControlPlane($,Z){let J=`${this.coordinationUrl}${$}`,X=JSON.stringify(Z);if(J.startsWith("https://")&&this.coordinationCaCert&&this.coordinationTlsIdentity)return(0,Vb0.bootstrapTlsRequest)(J,{method:"POST",body:X,caCert:this.coordinationCaCert,expectedTlsIdentity:this.coordinationTlsIdentity,timeoutMs:1e4,headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(X).toString()}});let Y=await fetch(J,{method:"POST",headers:{"Content-Type":"application/json"},body:X,signal:AbortSignal.timeout(1e4)}),Q="";if(typeof Y.text==="function")Q=await Y.text();else if(typeof Y.json==="function")Q=JSON.stringify(await Y.json());return{status:Y.status,body:Q}}async heartbeat(){let $=this.getLocalRegistrationState?.()??void 0,Z={nodeId:this.nodeId,displayNameSnapshot:this.displayNameSnapshot},J={nodeId:this.nodeId,displayNameSnapshot:this.displayNameSnapshot};if($?.endpointHost&&typeof $.endpointPort==="number"&&Number.isInteger($.endpointPort))Z.endpointHost=$.endpointHost,Z.endpointPort=$.endpointPort,J.endpointHost=$.endpointHost,J.endpointPort=$.endpointPort,Z.endpointRevision=$.endpointRevision??0,J.endpointRevision=$.endpointRevision??0;Z.envelope=this.envelopeSigner("network.register",J);let X=await this.postControlPlane("/api/v1/network/register",Z);if(X.status<200||X.status>=300)throw Error(`Peer discovery heartbeat failed: HTTP ${X.status}`)}parseDiscoveredPeer($){if(!$||typeof $!=="object")return null;let Z=$,J=yF.NodeIdSchema.safeParse(Z.nodeId),X=yF.LegacyPeerRegistryStatusSchema.safeParse(Z.status),Y=typeof Z.transportPublicKey==="string"&&Z.transportPublicKey.length>0?yF.PeerTransportIdSchema.parse(Z.transportPublicKey):null,Q=typeof Z.displayNameSnapshot==="string"?Z.displayNameSnapshot:void 0,G=Z.endpointHost===null?null:Z.endpointHost,V=Z.endpointPort===null?null:Z.endpointPort,W=typeof Z.endpointRevision==="number"?Z.endpointRevision:void 0,H=typeof Z.updatedAt==="number"?Z.updatedAt:void 0,K=Z.lastHandshake===null||typeof Z.lastHandshake==="number"?Z.lastHandshake:void 0,z=typeof Z.createdAt==="number"?Z.createdAt:void 0,U=Q===void 0||Q.length>0,B=G===null||typeof G==="string"&&G.length>0&&G.length<=253&&/^[a-zA-Z0-9._:-]+$/.test(G),F=V===null||typeof V==="number"&&Number.isInteger(V)&&V>=1&&V<=65535,O=!(G!==null&&V!==null&&X.success&&X.data!=="revoked")&&W===void 0||typeof W==="number"&&Number.isInteger(W)&&W>=0,L=G===null&&V===null&&W===void 0||typeof G==="string"&&typeof V==="number"&&typeof W==="number",q=Z.lastHandshake===void 0||K===null||typeof K==="number"&&Number.isFinite(K),A=Z.updatedAt===void 0||typeof H==="number"&&Number.isFinite(H),N=Z.createdAt===void 0||typeof z==="number"&&Number.isFinite(z);if(!J.success||!Y||!X.success||!U||!B||!F||!O||!A||!L||!q||!N)return null;return{nodeId:J.data,transportPublicKey:Y,...Q?{displayNameSnapshot:Q}:{},status:X.data,endpointHost:G,endpointPort:V,...W!==void 0?{endpointRevision:W}:{},...H!==void 0?{updatedAt:H}:{},...K!==void 0?{lastHandshake:K}:{},...z!==void 0?{createdAt:z}:{}}}async poll(){if(this.stopped||this.signal?.aborted)return;await this.heartbeat();let $=await this.fetchPeers();if(!$)return;await this.reconcile($)}async fetchPeers(){let $=this.envelopeSigner("network.list_peers",{nodeId:this.nodeId,displayNameSnapshot:this.displayNameSnapshot}),Z=await this.postControlPlane("/api/v1/network/peers",{envelope:$});if(Z.status<200||Z.status>=300)throw Error(`Peer discovery fetch failed: HTTP ${Z.status}`);let J=JSON.parse(Z.body);if(!Array.isArray(J.peers))throw Error("Peer discovery fetch returned invalid payload: peers must be an array");let X=5000;if(J.peers.length>X)throw Error(`Peer discovery fetch returned too many peers (${J.peers.length})`);let Y=[];for(let Q of J.peers){let G=this.parseDiscoveredPeer(Q);if(!G)throw Error("Peer discovery fetch returned malformed peer record");Y.push(G)}return Y}async reconcile($){let Z=this.nodeId,J=new Map;for(let X of $){if(X.nodeId===Z)continue;let{identityState:Y}=(0,yF.derivePeerStateFromLegacyStatus)(X);if(!(0,yF.canRefreshEndpoint)(Y))continue;J.set(X.nodeId,X)}for(let[X,Y]of J){let Q=this.knownRemotePeers.get(X);if(!Q)continue;let G=Q.endpointHost!==Y.endpointHost||Q.endpointPort!==Y.endpointPort,V=(Q.endpointRevision??0)!==(Y.endpointRevision??0),W=Q.transportPublicKey!==Y.transportPublicKey,H=this.peerEndpointRevision(Q),K=this.peerEndpointRevision(Y),z=this.peerFreshness(Q),U=this.peerFreshness(Y),B=G&&H!==null&&K!==null&&K<=H,F=G&&H===null&&K===null&&z!==null&&U!==null&&U<=z,D=W&&H!==null&&K!==null&&K<=H,O=W&&z!==null&&U!==null&&U<=z;if(B||F||D||O)continue;if(G&&Y.endpointHost&&Y.endpointPort){let L=this.classifyRepairOutcome(Y);if(L==="unknown"){this.reportError(Error(`Peer discovery lost authoritative repair binding for ${Y.displayNameSnapshot??Y.nodeId} (${Y.nodeId})`));continue}if(L==="blocked")continue}if(W){this.reportError(Error(`Peer discovery observed transport rotation for ${Y.displayNameSnapshot??Y.nodeId} (${Y.nodeId}); explicit continuity required`));continue}if(V){this.knownRemotePeers.set(X,Y);continue}this.knownRemotePeers.set(X,Y)}for(let[X,Y]of J){if(this.knownRemotePeers.has(X))continue;if(this.networkManager.activeTunnelCount>=this.maxPeers)break;try{let Q=this.classifyRepairOutcome(Y);if(Q==="unknown"){this.emit("peerDiscoveredUnknown",Y.displayNameSnapshot??Y.nodeId,Y.nodeId,Y);continue}if(Q==="blocked")continue;await this.networkManager.startTunnel(Y.nodeId),this.knownRemotePeers.set(X,Y),this.emit("peerJoined",Y.displayNameSnapshot??Y.nodeId,Y.nodeId)}catch(Q){let G=Q instanceof Error?Q.message:String(Q);if(Q?.code==="PEER_NOT_IN_REGISTRY"||G.includes("not found in registry"))this.emit("peerDiscoveredUnknown",Y.displayNameSnapshot??Y.nodeId,Y.nodeId,Y);else this.reportError(Error(`Peer discovery failed to start tunnel for ${Y.displayNameSnapshot??Y.nodeId} (${Y.nodeId}): ${G}`))}}for(let[X,Y]of this.knownRemotePeers){if(J.has(X))continue;this.networkManager.stopTunnel(X),this.knownRemotePeers.delete(X),this.emit("peerLeft",Y.displayNameSnapshot??Y.nodeId,Y.nodeId)}}}L10.PeerDiscoveryService=N10});var MH=IZ((P$)=>{var __dirname="/Users/hole/aria/.bundle-stage/wireguard/dist",Wb0=P$&&P$.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),Hb0=P$&&P$.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),Kb0=P$&&P$.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")Wb0(J,Z,X[Y])}return Hb0(J,Z),J}}();Object.defineProperty(P$,"__esModule",{value:!0});P$.DerpRelay=P$.PeerDiscoveryService=P$.ensureSecureNetwork=P$.decodeInviteToken=P$.createInviteToken=P$.generateSigningKeypair=P$.generateKeyPair=P$.PeerRegistry=P$.NetworkManager=P$.detectNatType=P$.discoverEndpoint=P$.StunClient=P$.ResilientTunnel=P$.SecureTunnel=void 0;P$.assertNativeAddonAvailable=Ub0;P$.createTunnel=Bb0;P$.generateKeypair=Fb0;var zb0=Kb0(r0("path")),WP=null;function Cx(){if(WP)return WP;try{return WP=null,WP}catch($){let Z=$ instanceof Error?$.message:String($);throw Error(`@aria/wireguard: Failed to load native addon via ${zb0.join(__dirname,"../index.js")} (${process.platform}-${process.arch}). ${Z}`)}}function Ub0(){Cx()}function Bb0($){return new(Cx()).WireGuardTunnel($.privateKey,$.peerPublicKey,$.presharedKey??null,$.keepalive??0,$.index??null)}function Fb0(){return Cx().generateKeypair()}var Db0=QP();Object.defineProperty(P$,"SecureTunnel",{enumerable:!0,get:function(){return Db0.SecureTunnel}});var Ob0=zx();Object.defineProperty(P$,"ResilientTunnel",{enumerable:!0,get:function(){return Ob0.ResilientTunnel}});var Rx=Dx();Object.defineProperty(P$,"StunClient",{enumerable:!0,get:function(){return Rx.StunClient}});Object.defineProperty(P$,"discoverEndpoint",{enumerable:!0,get:function(){return Rx.discoverEndpoint}});Object.defineProperty(P$,"detectNatType",{enumerable:!0,get:function(){return Rx.detectNatType}});var tY=O10();Object.defineProperty(P$,"NetworkManager",{enumerable:!0,get:function(){return tY.NetworkManager}});Object.defineProperty(P$,"PeerRegistry",{enumerable:!0,get:function(){return tY.PeerRegistry}});Object.defineProperty(P$,"generateKeyPair",{enumerable:!0,get:function(){return tY.generateKeyPair}});Object.defineProperty(P$,"generateSigningKeypair",{enumerable:!0,get:function(){return tY.generateSigningKeypair}});Object.defineProperty(P$,"createInviteToken",{enumerable:!0,get:function(){return tY.createInviteToken}});Object.defineProperty(P$,"decodeInviteToken",{enumerable:!0,get:function(){return tY.decodeInviteToken}});Object.defineProperty(P$,"ensureSecureNetwork",{enumerable:!0,get:function(){return tY.ensureSecureNetwork}});var Nb0=q10();Object.defineProperty(P$,"PeerDiscoveryService",{enumerable:!0,get:function(){return Nb0.PeerDiscoveryService}});var Lb0=Lx();Object.defineProperty(P$,"DerpRelay",{enumerable:!0,get:function(){return Lb0.DerpRelay}})});var Ix=IZ((r1)=>{var Ab0=r1&&r1.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),qb0=r1&&r1.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),E10=r1&&r1.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")Ab0(J,Z,X[Y])}return qb0(J,Z),J}}();Object.defineProperty(r1,"__esModule",{value:!0});r1.NetworkStateStore=void 0;r1.canonicalNetworkStatePath=Cb0;var Eb0=E10(r0("fs")),Sx=E10(r0("path")),_b0=(W8(),ZG(cC)),Mb0=(PG(),ZG(Ap)),Pb0=`
|
|
5365
5366
|
CREATE TABLE IF NOT EXISTS network_peers (
|
|
5366
5367
|
node_id TEXT PRIMARY KEY,
|
|
5367
5368
|
public_key TEXT NOT NULL,
|
|
@@ -5423,7 +5424,7 @@ CREATE TABLE IF NOT EXISTS network_schema_version (
|
|
|
5423
5424
|
`)}catch(B){G(K,B,{method:z,clientId:U})}})()}),Y.on("error",()=>{Y.destroy()})});return await new Promise((Y,Q)=>{X.once("error",Q),X.listen(J,()=>Y())}),e1.chmodSync(J,384),{socketPath:J,async close(){await new Promise((Y,Q)=>{X.close((G)=>G?Q(G):Y())});try{e1.rmSync(J,{force:!0})}catch{}}}}var _J=E(()=>{b0();vx();hx();b0()});import{readFileSync as mb0,existsSync as f10,statSync as cb0,writeFileSync as ub0,mkdirSync as pb0}from"fs";import{homedir as db0}from"os";import{join as FP}from"path";function ab0($){return typeof $==="string"&&lb0.includes($)}function M2($){let Z=$?.trim();if(Z)return Z;let J=process.env.ARIA_HOME?.trim();if(J)return J;return FP(process.env.HOME||db0(),".aria")}function y10($){if(!f10($))return null;try{return cb0($).mtimeMs}catch{return null}}function nb0($){let Z={...$,env:$.env?{...$.env}:void 0};if(!Z.env)return Z;for(let[J,X]of Object.entries(Z.env))if(typeof X==="string"&&X.startsWith("${")&&X.endsWith("}")){let Y=X.slice(2,-1);Z.env[J]=process.env[Y]||""}return Z}function ib0($){if(!$.name||typeof $.name!=="string")throw Error('Invalid MCP server config: missing "name" field');if(!$.transport)throw Error(`MCP server "${$.name}": missing "transport" field`);if(!["stdio","sse"].includes($.transport))throw Error(`MCP server "${$.name}": unknown transport "${$.transport}"`);if($.transport==="stdio"&&!$.command)throw Error(`MCP server "${$.name}": stdio transport requires "command" field`);if($.transport==="sse"&&!$.url)throw Error(`MCP server "${$.name}": sse transport requires "url" field`)}function xx($){if(!f10($))return null;try{return JSON.parse(mb0($,"utf-8"))}catch{return null}}function v10($,Z){if(!$||typeof $!=="object")return[];let J=$.mcp;if(!J||typeof J!=="object"||!Array.isArray(J.servers))return[];let X=J.servers.filter((Q)=>!!Q&&typeof Q==="object"&&typeof Q.name==="string"),Y=[];for(let Q of X)try{let G=nb0(Q);ib0(G),Y.push(G)}catch(G){console.warn(`[Server] Skipping invalid MCP server config from ${Z}: ${G instanceof Error?G.message:String(G)}`)}return Y}function ob0($,Z){let J=new Set(Z.map((X)=>X.name));return[...$.filter((X)=>!J.has(X.name)),...Z]}function B5(){let $=FP(M2(),"config.json"),Z=y10($);if(XQ&&UP===Z)return XQ;try{let J=xx($);if(J)return XQ={activeArion:typeof J.activeArion==="string"?J.activeArion:void 0,preferredTier:ab0(J.preferredTier)?J.preferredTier:void 0},BP=v10(J,`${M2()}/config.json`),UP=Z,hF++,RH.clear(),XQ}catch{}return XQ={},BP=[],UP=Z,hF++,RH.clear(),XQ}function wH($){B5();let Z=BP??[];if(!$)return[...Z];let J=FP($,"aria.config.json"),X=y10(J),Y=RH.get($);if(Y&&Y.mtimeMs===X&&Y.globalVersion===hF)return[...Y.servers];let Q=xx(J);if(!Q){let W=[...Z];return RH.set($,{mtimeMs:X,globalVersion:hF,servers:W}),W}let G=v10(Q,J),V=ob0(Z,G);return RH.set($,{mtimeMs:X,globalVersion:hF,servers:V}),[...V]}function sb0(){BP=null,RH.clear()}function rb0(){XQ=null,UP=null}function h10($){let Z=M2();pb0(Z,{recursive:!0});let J=FP(Z,"config.json"),Y={...xx(J)??{},...typeof $.activeArion==="string"?{activeArion:$.activeArion}:{},...typeof $.preferredTier==="string"?{preferredTier:$.preferredTier}:{}};ub0(J,JSON.stringify(Y,null,2),"utf-8"),tb0()}function tb0(){rb0(),sb0()}var lb0,XQ=null,UP=null,BP=null,hF=0,RH;var SH=E(()=>{lb0=["fast","balanced","powerful","ensemble"];RH=new Map});var m4=()=>{};function x10($,Z){let J=$[Z];if(typeof J!=="function")throw Error(`Runtime outbox ${Z} not available`);return J.bind($)}function g10($){if(!$)return;let{transport:Z,...J}=$;return{...b9({transport:Z==="local_runtime"?"in_process":Z,...J})}}function eb0($){let Z=$;return{rawMessage:Z,...Z.recipientInbox?{recipientInbox:Z.recipientInbox}:{},...Z.recipientInbox?.kind!=="client"&&typeof Z.recipient?.id==="string"?{to:Z.recipient.id}:{}}}function DP($,Z){let{ariaRuntimeMessageControl:J,ariaRuntimeOutbox:X}=$,Y=Z?.mailbox,Q=typeof Z?.bindRelayTransport==="function"?Z.bindRelayTransport.bind(Z):Y&&typeof Y.setRelayTransport==="function"?Y.setRelayTransport.bind(Y):void 0;if(!J&&!X||!Q)return()=>{};return Q((G,V)=>{if(J){let W=eb0(G);return(V==="best_effort"?J.sendBestEffort(W):J.sendDurable(W)).then((H)=>g10(H))}try{return(V==="best_effort"?x10(X,"sendBestEffort")(G):x10(X,"sendDurable")(G)).then((H)=>g10(H))}catch(W){return Promise.reject(W)}}),()=>{}}var m10=E(()=>{b0();m4()});function $k0($){if(!$||typeof $!=="object")return;let Z=$;if(Z.expose===!0&&typeof Z.publicMessage==="string"&&Z.publicMessage.trim().length>0)return Z.publicMessage;return}function P2($,Z){let J=eK($),X=$k0($);if(X){if(Z&&(J===void 0||J>=500))Z.error($,"[Server] Sanitized error:");return X}if(J!==void 0&&J>=400&&J<500)return k0($);if(Z)Z.error($,"[Server] Sanitized error:");return"Internal server error"}var OP=E(()=>{S0()});function Jk0($,Z=500){let J=eK($);if(typeof J==="number")return J;if($&&typeof $==="object"){let Y=$.code;if(typeof Y==="string"&&Zk0.has(Y))return 400}let X=k0($).toLowerCase();if(X.includes("not found")||X.includes("resting")||X.includes("retired"))return 400;return Z}function NP($,Z,J=500){let X=Jk0($,J);return{status:X,message:X<500?k0($):P2($,Z)}}var Zk0;var c10=E(()=>{S0();OP();Zk0=new Set(["ARION_NOT_FOUND","ARION_RESTING","ARION_RETIRED"])});function Xk0($){if(typeof $==="string")return $;if(Array.isArray($)){let Z=[];for(let J of $){if(typeof J==="string"){Z.push(J);continue}if(!J||typeof J!=="object")continue;let X=J;if(typeof X.text==="string")Z.push(X.text);else if(typeof X.content==="string")Z.push(X.content)}return Z.join(`
|
|
5424
5425
|
`)}if($&&typeof $==="object"){let Z=$;if(typeof Z.text==="string")return Z.text;if(typeof Z.content==="string")return Z.content}return""}function Yk0($){if(!Array.isArray($))return;let Z=[];for(let J of $){if(!J||typeof J!=="object")continue;let X=J;if(typeof X.id!=="string"||typeof X.name!=="string")continue;Z.push({id:X.id,name:X.name,arguments:X.arguments&&typeof X.arguments==="object"?X.arguments:void 0,...typeof X.thoughtSignature==="string"?{thoughtSignature:X.thoughtSignature}:{}})}return Z.length>0?Z:void 0}function YQ($){let Z=[];for(let J of $){if(!J||typeof J!=="object")continue;let X=J,Y=typeof X.role==="string"?X.role:"";if(Y!=="user"&&Y!=="assistant"&&Y!=="tool"&&Y!=="system")continue;let Q=Xk0(X.content),G=typeof X.name==="string"?X.name:void 0,V=typeof X.toolCallId==="string"?X.toolCallId:void 0,W=Yk0(X.toolCalls);Z.push({role:Y,content:Q,...G?{name:G}:{},...V?{toolCallId:V}:{},...W?{toolCalls:W}:{}})}return Z}function LP($){return[{role:"user",content:$}]}function m6($){return $.includes("/")||$.includes("\\")||$.includes("..")||/^[/~]/.test($)}async function Qk0(){if(!AP){let $=hZ({ariaHome:M2()});AP=await E1({ariaHome:M2(),anthropic:$.legacyApiKeys.anthropic,openai:$.legacyApiKeys.openai,google:$.legacyApiKeys.google,...$.bedrock?{bedrock:$.bedrock}:{},authResolver:$.authResolver})}return AP}function u10(){AP=null,xF=null,IH=null}function p10($){xF=$,IH=null}async function gF($,Z,J){if(xF)return xF;if(!IH)IH=(async()=>{let X=M2(J),Y=new T9(X),Q=Z??await Qk0(),G=$??new i8(X,Q).toFactory(),V=new R8(Y,G);if(await V.initialize(),typeof V.setRouter==="function")V.setRouter(Q);return xF=V,V})().catch((X)=>{throw IH=null,X});return IH}async function d10($){let Z=new t1(20,60000),J=await gF($.ariaMemoriaFactory,$.ariaRouter,$.ariaBasePath);$.get("/api/v1/arions",async(X,Y)=>{if(!Z.check(X.ip))return Y.status(429).send({error:"Rate limit exceeded"});let Q=await J.list();return Y.send({arions:Q})}),$.get("/api/v1/arions/:name",async(X,Y)=>{if(!Z.check(X.ip))return Y.status(429).send({error:"Rate limit exceeded"});let{name:Q}=X.params;if(m6(Q))return Y.status(400).send({error:`Invalid arion name: "${Q}"`});let G=await J.get(Q);if(!G)return Y.status(404).send({error:`Arion not found: ${Q}`});return Y.send({arion:G})}),$.post("/api/v1/arions",{schema:{body:Gk0}},async(X,Y)=>{if(!Z.check(X.ip))return Y.status(429).send({error:"Rate limit exceeded"});let{name:Q,personality:G,skills:V,profile:W,strengths:H,weaknesses:K}=X.body;if(m6(Q))return Y.status(400).send({error:`Invalid arion name: "${Q}"`});let z={name:Q,personality:G,skills:V,profile:W,strengths:H,weaknesses:K};try{let U=await J.hatch(z);return Y.status(201).send({arion:U})}catch(U){let B=U instanceof Error?U.message:"Failed to create arion";if(B.includes("already exists"))return Y.status(400).send({error:B});return Y.status(500).send({error:P2(U,X.log)})}}),$.delete("/api/v1/arions/:name",async(X,Y)=>{if(!Z.check(X.ip))return Y.status(429).send({error:"Rate limit exceeded"});let{name:Q}=X.params,{confirm:G}=X.query;if(m6(Q))return Y.status(400).send({error:`Invalid arion name: "${Q}"`});if(G!=="true")return Y.status(400).send({error:"Retirement requires explicit confirmation. Add ?confirm=true to the request."});try{return await J.retire(Q,{confirm:!0}),Y.send({success:!0})}catch(V){let W=V instanceof Error?V.message:"Failed to retire arion";if(W.includes("not found"))return Y.status(404).send({error:W});if(W.includes("default"))return Y.status(400).send({error:W});return Y.status(500).send({error:P2(V,X.log)})}}),$.put("/api/v1/arions/:name/rest",async(X,Y)=>{if(!Z.check(X.ip))return Y.status(429).send({error:"Rate limit exceeded"});let{name:Q}=X.params;if(m6(Q))return Y.status(400).send({error:`Invalid arion name: "${Q}"`});try{return await J.rest(Q),Y.send({success:!0})}catch(G){let V=G instanceof Error?G.message:"Failed to rest arion";if(V.includes("not found"))return Y.status(404).send({error:V});if(V.includes("retired"))return Y.status(400).send({error:V});return Y.status(500).send({error:P2(G,X.log)})}}),$.put("/api/v1/arions/:name/wake",async(X,Y)=>{if(!Z.check(X.ip))return Y.status(429).send({error:"Rate limit exceeded"});let{name:Q}=X.params;if(m6(Q))return Y.status(400).send({error:`Invalid arion name: "${Q}"`});try{return await J.wake(Q),Y.send({success:!0})}catch(G){let V=G instanceof Error?G.message:"Failed to wake arion";if(V.includes("not found"))return Y.status(404).send({error:V});if(V.includes("retired"))return Y.status(400).send({error:V});return Y.status(500).send({error:P2(G,X.log)})}})}var AP=null,xF=null,IH=null,Gk0;var mF=E(()=>{bF();_H();vF();R6();OP();SH();m4();Gk0={type:"object",required:["name","personality"],properties:{name:{type:"string",minLength:1},personality:{type:"object",required:["traits","style"],properties:{traits:{type:"array",items:{type:"string"},minItems:1},style:{type:"string",enum:["formal","casual","technical","friendly"]},quirks:{type:"array",items:{type:"string"}}}},skills:{type:"array",items:{type:"object",required:["name","level"],properties:{name:{type:"string"},level:{type:"string",enum:["beginner","intermediate","advanced","expert"]},description:{type:"string"}}}},profile:{type:"object",properties:{background:{type:"string"}}},strengths:{type:"array",items:{type:"string"}},weaknesses:{type:"array",items:{type:"string"}}}}});async function qP($){let{ariaMemoriaFactory:Z,ariaRouter:J}=$,X=new wY({onRest:(Q)=>{let G=performance.now();console.warn(`[room.onRest] START deepConsolidation for arion="${Q.name}"`),(async()=>{try{let V=R8.resolveMemoriaPath(Q,Q.name),W=await Z.get(V);if(await d3(J,W,Q),Y)await Y.save(Q)}catch(V){console.warn(`[room.onRest] deepConsolidation FAILED for "${Q.name}":`,V?.message)}finally{console.warn(`[room.onRest] END deepConsolidation for "${Q.name}" \u2014 ${((performance.now()-G)/1000).toFixed(1)}s`)}})()}}),Y=null;try{Y=await gF(Z,J)}catch{Y=null}return{room:X,manager:Y}}async function EP($,Z,J){if(!$)return;let X=l_(J);for(let Y of X){if(m6(Y))continue;try{let Q=await $.get(Y);if(Q?.status==="resting")await $.wake(Y),Q=await $.get(Y);if(Q?.status==="active"&&!Z.isInRoom(Y))Z.enter(Q)}catch{}}}var l10=E(()=>{bF();mF()});var r10={};A$(r10,{normalizeEntrypointHistory:()=>_P,isAskUserAnswersExhaustedError:()=>uF,getToolResultHighlight:()=>gx,createAskUserHandler:()=>s10,createApprovalHandler:()=>o10,buildEntrypointRunOptions:()=>pF,AskUserAnswersExhaustedError:()=>cF,APPROVAL_PAUSE_SIGNAL:()=>n10});function o10($){return async()=>{switch($){case"approve":return!0;case"deny":return!1;default:return n10}}}function s10($,Z="pause"){return async(J)=>{if(Z==="pause"&&$.length<J.length)throw new cF("ask_user needs more answers than were provided. Resume the run with askUserAnswers.",J);let X=[];for(let Y of J){let Q=$.shift();if(Q===void 0)throw new cF("ask_user requested more answers than provided. Supply askUserAnswers in the request body.",J);X.push({answer:Q})}return X}}function uF($){if($ instanceof cF)return!0;if(!$||typeof $!=="object")return!1;let Z=$;return Z.code===i10||Z.name==="AskUserAnswersExhaustedError"}function gx($,Z,J){if(!J||typeof J!=="object")return{};let X=J,Y=typeof X.data==="string"?X.data:typeof X.message==="string"?X.message:typeof X.content==="string"?X.content:null;if(!Y||Y.trim()==="")return{};if(!a10)return{};try{let Q=pB($,Z)??void 0,G=a10.highlight(Y,Q);return{highlighted:G.code,language:Q??G.language}}catch{return{}}}function _P($){if(!Array.isArray($))return;let Z=YQ($).map((J)=>({role:J.role,content:J.content,...J.name?{name:J.name}:{},...J.toolCallId?{toolCallId:J.toolCallId}:{},...J.toolCalls?{toolCalls:J.toolCalls.map((X)=>({id:X.id,name:X.name,arguments:X.arguments??{},...X.thoughtSignature?{thoughtSignature:X.thoughtSignature}:{}}))}:{}}));return Z.length>0?Z:void 0}function pF($){let Z=$.approvalMode??"pause",J=$.askUserAnswers??[],X={onApprovalNeeded:o10(Z),workingDir:$.workingDir,userInteraction:{ask:s10([...J],"pause")},...$.inboxAddress?{inboxAddress:$.inboxAddress}:{},...$.wakeSource?{wakeSource:$.wakeSource}:{}};if(typeof $.budget==="number")X.costConfig={...m5,maxCostPerRequest:$.budget};if(typeof $.maxTurns==="number")X.maxTurns=$.maxTurns;if($.autonomy)X.autonomy=$.autonomy;if($.systemPrompt)X.systemPrompt=$.systemPrompt;if($.noMemory||$.allowedTools||$.deniedTools){let Y=[...$.deniedTools??[]];if($.noMemory)Y.push("group:memory");X.toolPolicy={...$.allowedTools?{allow:$.allowedTools}:{},...Y.length>0?{deny:Y}:{}}}return X}var n10,i10="ASK_USER_ANSWERS_EXHAUSTED",cF,a10;var mx=E(()=>{ZP();vF();n10=Symbol("approval_pause");cF=class cF extends Error{code=i10;questions;constructor($,Z=[]){super($);this.name="AskUserAnswersExhaustedError",this.questions=Z}};a10=new vW});function N6($,Z,J){let X=$;try{if(!(Z in X)){X.decorate(Z,J);return}}catch{}X[Z]=J}var dF={};A$(dF,{submitRunViaRuntimeControl:()=>X70,streamRunViaRuntimeControl:()=>Q70,resumeRunViaRuntimeControl:()=>Y70,parseStreamRequest:()=>$70,invalidStreamRequest:()=>Z70,ensureRuntimeRunControl:()=>Uk0});function cx($){let Z=$.ariaSessionHistory;if(!Z)return;let J=Z;if(typeof J.listSessions==="function"&&typeof J.searchSessionsFts==="function")return Z;return}function Vk0($,Z){let J=$.filter((X)=>{if(!X||typeof X!=="object")return!1;let Y=X;return typeof Y.id==="string"&&typeof Y.name==="string"&&typeof Y.durationMs==="number"&&!!Y.result&&typeof Y.result==="object"});if(J.length===0)return Z?[...Z]:[];return J.map((X)=>({...X,result:X.result}))}function Wk0($){let Z=$[0];if(!Z)return"Invalid request";let J=Z.path.join(".");if(J==="task")return"task is required";return J&&J.length>0?`${J}: ${Z.message}`:Z.message}function Hk0($,Z){return Z!==void 0||$===void 0}function t10($,Z){return{message:NP($,Z).message,diagnostic:JQ($)}}function MP($,Z,J,X=500){let Y=Z?.error?{error:(...V)=>Z.error?.(...V)}:void 0,{message:Q,status:G}=NP($,Y,X);return{status:G,body:{success:!1,error:Q,...Hk0(Z,J)?{diagnostic:JQ($)}:{}}}}function e10($,Z,J){let X;try{X=$.observabilityContext?.snapshot()}catch(V){J?.warn({err:V},"Observability snapshot failed"),X=void 0}let Q=Vk0(X?.toolCalls??[],Z.toolCalls??[]).map((V)=>({...V,result:{...V.result,...gx(V.name,V.input,V.result)}})),G=Z.nativeToolResults&&Z.nativeToolResults.length>0?Z.nativeToolResults:void 0;return{success:!0,output:Z.content,messages:Z.messages,toolCalls:Q,usage:X?.usage??Z.usage,turnCount:X?.turnCount??Z.turnCount,thinking:X?.thinkingBlocks?.length?X.thinkingBlocks:void 0,nativeToolResults:G,traces:X?.spans?.length?X.spans:void 0,pipelineTiming:X?.pipelineTiming&&X.pipelineTiming.phases.length>0?X.pipelineTiming:void 0,guardrailEvents:X?.guardrailEvents?.length?X.guardrailEvents:void 0,handoffs:X?.handoffs?.length?X.handoffs:void 0}}function ux($,Z){let J=$,X=Z?.overlay?J.ariaCreateOverlayAuthResolver?J.ariaCreateOverlayAuthResolver(Z.overlay):J.ariaAuthResolver:J.ariaAuthResolver;if(!X)return X;return Z?.requestOverride?XV(X,Z.requestOverride):X}function px($,Z){let J=BX($.ariaNetworkManager);if(!Z?.clientId||!$.ariaAttachedClientControl?.listAttachedClients)return J;let X=()=>$.ariaAttachedClientControl.listAttachedClients({clientId:Z.clientId});if(J)return{...J,listAttachedClients:X};return{invite(){throw Error("Network manager not available. Secure networking requires the @aria/wireguard package.")},revokePeer(){throw Error("Network manager not available. Secure networking requires the @aria/wireguard package.")},listPeers(){return[]},status(){return{configured:!1,nodeId:$.ariaNodeId??null,principalFingerprint:null,transportPublicKey:null,listenPort:null,externalEndpoint:null,activePeers:0,totalPeers:0,signingPublicKey:null}},listAttachedClients:X}}function dx($){if(!$?.clientId)return;return{clientId:$.clientId,...$.overlay?{overlay:$.overlay}:{},...$.requestOverride?{requestOverride:$.requestOverride}:{}}}function lx($){if(!$)return;return{kind:"client",clientId:N4.parse($.clientId)}}function ax($,Z){if(!Z?.clientId)return;let J=$.ariaRuntimeMessageControl?.subscribeDirectClientInbox,X=$.ariaRuntimeMessageControl?.listDirectClientInbox;if(!J||!X)return;return async(Y)=>{let Q=await X({clientId:Z.clientId,limit:1,unreadOnly:!1}),G=Q.length>0?{afterCreatedAt:Q[0].createdAt,afterId:Q[0].id}:{afterCreatedAt:0,afterId:""},V=J({clientId:Z.clientId,cursor:G,signal:Y});for await(let W of V)return}}async function Kk0($,Z){if(!Z||!$.ariaRuntimeLocalControl?.getRuntimeStatus)return!1;try{return(await $.ariaRuntimeLocalControl.getRuntimeStatus()).autonomousLoop.ownerClientKind==="local-api"}catch{return!1}}function $70($){let Z=j8.safeParse($);if(!Z.success)return{error:Wk0(Z.error.issues)};let{history:J,...X}=Z.data,Y=_P(Z.data.history);return{request:Y?{...X,history:Y}:X}}async function*Z70($){yield{type:"error",error:{message:$}}}function zk0($,Z){let J=Z?.error?{error:(...X)=>Z.error?.(...X)}:void 0;switch($.type){case"error":return{type:"error",error:t10($.error,J)};case"text_delta":case"tool_start":case"approval_needed":case"tool_result":case"usage_update":case"turn_complete":case"guardrail_rejected":case"pipeline_timing":case"messages_snapshot":case"native_tool_result":case"thinking_start":case"thinking_delta":case"thinking_end":case"tool_args_delta":case"span_start":case"span_end":case"handoff_start":case"handoff_result":case"paused":return $;default:return null}}function J70($){if(!$)return;if(($.providers?.length??0)>0&&($.credentials?.length??0)===0)throw Error("Provider-only request override must be resolved client-side into explicit credentials before sending to the daemon.");let Z={};for(let J of $.credentials??[]){let X=J.provider.trim().toLowerCase();if(!X||!J.apiKey?.trim())continue;Z[X]={provider:X,apiKey:J.apiKey.trim(),source:J.source??"config",credentialType:J.credentialType??"api_key"}}return Object.keys(Z).length>0?{credentials:Z}:void 0}async function X70($,Z,J,X){let Y=J70(Z.requestCredentialOverride),Q=dx(Y?{...X??{},requestOverride:Y}:X),{task:G,arion:V}=Z,W=lx(Q),H=J?.error?{error:(...v)=>J.error?.(...v)}:void 0;if(V&&m6(V))return{status:400,body:{success:!1,error:`Invalid arion name: "${V}"`}};try{await $.ariaRecoverCrashedSessions?.()}catch(v){J?.warn({err:v},"Per-request crash recovery failed")}let K=B5(),z=typeof Z.cwd==="string"&&Z.cwd.trim().length>0?Z.cwd:process.cwd(),U=wH(z),{approvalMode:B="pause",askUserAnswers:F=[],history:D,budget:O,maxTurns:L,autonomy:q,allowedTools:A,deniedTools:N,noMemory:_,systemPrompt:M}=Z,T=_P(D),{ariaMemoriaFactory:k,ariaRouter:R,ariaBasePath:a}=$,o=ux($,Q),{room:u,manager:w}=await qP($),m;try{await EP(w,u,G),m=await H2({task:G,arionName:V||void 0,config:{...K,...Z.requestedModel?{requestedModel:Z.requestedModel}:{},...Z.preferredTier?{preferredTier:Z.preferredTier}:{}},storagePath:a,...Z.requestedModel?{requestedModel:Z.requestedModel}:{},router:R,memoriaFactory:k,mcpServers:U,room:u,...T?{history:T}:{},..._?{skipMemoria:!0}:{},sessionHistory:cx($),authResolver:o??void 0,networkControl:px($,Q),networkManager:$.ariaNetworkManager,runtimeId:$.ariaRuntimeId??void 0,nodeId:$.ariaNodeId??void 0,...W?{runtimeIngressAuthority:{localInboxAddress:W}}:{},runOptionsOverrides:pF({workingDir:z,approvalMode:B,askUserAnswers:F,budget:O,maxTurns:L,autonomy:q,allowedTools:A,deniedTools:N,noMemory:_,systemPrompt:M,...W?{inboxAddress:W}:{},...Q?{wakeSource:ax($,Q)}:{}})})}catch(v){return u.clear().catch(()=>{}),MP(v,J,Q)}let I=$.ariaSessionHistory,S=m.session?.sessionId,j=m.session?.arion?.name??V??K.activeArion;if(S)I?.upsertSession?.(S,LP(G),{arionName:j});let b=DP($,m.session);try{let v=await m.run(),c=(v.state?.pendingToolCalls?.length??0)>0,C=YQ(v.state?.messages??v.messages??[]);if(S){if(C.length>0)I?.upsertSession?.(S,C,{completed:!c,arionName:j});else if(!c)I?.markCompleted(S)}if(c)return{status:409,body:{success:!1,error:"Run paused: pending tool calls require approval before resume",state:v.state}};return{status:200,body:e10(m,v,J)}}catch(v){return MP(v,J,Q,uF(v)?400:500)}finally{b(),u.clear().catch(()=>{})}}async function Y70($,Z,J,X){let{arion:Y,approvalMode:Q="pause",askUserAnswers:G=[],budget:V,maxTurns:W,autonomy:H,allowedTools:K,deniedTools:z,noMemory:U,systemPrompt:B}=Z,F=J70(Z.requestCredentialOverride),D=dx(F?{...X??{},requestOverride:F}:X),O=lx(D),L=J?.error?{error:(...b)=>J.error?.(...b)}:void 0,q=Z.state;if(Y&&m6(Y))return{status:400,body:{success:!1,error:`Invalid arion name: "${Y}"`}};try{await $.ariaRecoverCrashedSessions?.()}catch(b){J?.warn({err:b},"Per-request crash recovery failed")}let A=B5(),N=typeof Z.cwd==="string"&&Z.cwd.trim().length>0?Z.cwd:process.cwd(),_=wH(N),{ariaMemoriaFactory:M,ariaRouter:T,ariaBasePath:k}=$,R=ux($,D),{room:a,manager:o}=await qP($),u;try{await EP(o,a,q.input),u=await H2({task:q.input,arionName:Y||void 0,config:{...A,...Z.requestedModel?{requestedModel:Z.requestedModel}:{},...Z.preferredTier?{preferredTier:Z.preferredTier}:{}},storagePath:k,...Z.requestedModel?{requestedModel:Z.requestedModel}:{},router:T,memoriaFactory:M,mcpServers:_,room:a,...U?{skipMemoria:!0}:{},sessionHistory:cx($),authResolver:R??void 0,networkControl:px($,D),networkManager:$.ariaNetworkManager,runtimeId:$.ariaRuntimeId??void 0,nodeId:$.ariaNodeId??void 0,...O?{runtimeIngressAuthority:{localInboxAddress:O}}:{},runOptionsOverrides:pF({workingDir:N,approvalMode:Q,askUserAnswers:G,budget:V,maxTurns:W,autonomy:H,allowedTools:K,deniedTools:z,noMemory:U,systemPrompt:B,...O?{inboxAddress:O}:{},...D?{wakeSource:ax($,D)}:{}})})}catch(b){return a.clear().catch(()=>{}),MP(b,J,D)}let w=$.ariaSessionHistory,m=u.session?.sessionId,I=u.session?.arion?.name??Y??A.activeArion,S=YQ(q.messages??[]),j=DP($,u.session);if(m)w?.upsertSession?.(m,S.length>0?S:LP(q.input),{arionName:I});try{let b=await u.resume(q),v=(b.state?.pendingToolCalls?.length??0)>0,c=b.state?.messages??b.messages??[],C=YQ(c);if(m){if(C.length>0)w?.upsertSession?.(m,C,{completed:!v,arionName:I});else if(!v)w?.markCompleted(m)}if(v)return{status:409,body:{success:!1,error:"Run paused: pending tool calls require approval before resume",state:b.state}};return{status:200,body:e10(u,b,J)}}catch(b){return MP(b,J,D,uF(b)?400:500)}finally{j(),a.clear().catch(()=>{})}}async function*Q70($,Z,J,X,Y){let Q=dx(Y),G=lx(Q),V=J?.error?{error:(...q)=>J.error?.(...q)}:void 0;if(Z.arion&&m6(Z.arion)){yield{type:"error",error:{message:`Invalid arion name: "${Z.arion}"`}};return}try{await $.ariaRecoverCrashedSessions?.()}catch(q){J?.warn({err:q},"Per-request crash recovery failed")}let W=B5(),H=typeof Z.cwd==="string"&&Z.cwd.trim().length>0?Z.cwd:process.cwd(),K=wH(H),{ariaMemoriaFactory:z,ariaRouter:U,ariaBasePath:B}=$,F=ux($,Q),{room:D,manager:O}=await qP($),L=await Kk0($,Q);try{await EP(O,D,Z.task);let q=new AbortController,A=()=>q.abort();X?.addEventListener("abort",A,{once:!0});let N=Z.approvalMode||"pause",_=Z.askUserAnswers||[],M;try{M=await H2({task:Z.task,arionName:Z.arion||void 0,config:{...W,...Z.requestedModel?{requestedModel:Z.requestedModel}:{},...Z.preferredTier?{preferredTier:Z.preferredTier}:{}},storagePath:B,...Z.requestedModel?{requestedModel:Z.requestedModel}:{},router:U,memoriaFactory:z,abortSignal:q.signal,mcpServers:K,room:D,...Z.history?{history:Z.history}:{},...Z.noMemory?{skipMemoria:!0}:{},sessionHistory:cx($),authResolver:F??void 0,networkControl:px($,Q),networkManager:$.ariaNetworkManager,runtimeId:$.ariaRuntimeId??void 0,nodeId:$.ariaNodeId??void 0,...G?{runtimeIngressAuthority:{localInboxAddress:G}}:{},runOptionsOverrides:pF({workingDir:H,approvalMode:N,askUserAnswers:_,budget:Z.budget,maxTurns:Z.maxTurns,autonomy:Z.autonomy,allowedTools:Z.allowedTools,deniedTools:Z.deniedTools,noMemory:Z.noMemory,systemPrompt:Z.systemPrompt,...G?{inboxAddress:G}:{},...Q?{wakeSource:ax($,Q)}:{}})})}catch(k){X?.removeEventListener("abort",A),yield{type:"error",error:t10(k,V)};return}let T=()=>{};try{T=DP($,M.session);let k=$.ariaSessionHistory,R=M.session?.sessionId,a=M.session?.arion?.name??Z.arion??W.activeArion;if(R)k?.upsertSession?.(R,LP(Z.task),{arionName:a});let o=!1,u=!1,w=[];for await(let v of M.execute()){let c=zk0(v,J);if(!c)continue;if(c.type==="messages_snapshot")w=c.messages;if(c.type==="error")o=!0;if(c.type==="paused")u=!0;if(yield c,o||u)break}let m=performance.now(),I=YQ(w),S=performance.now();if(R){if(I.length>0)k?.upsertSession?.(R,I,{completed:!o&&!u&&!q.signal.aborted,arionName:a});else if(!o&&!u&&!q.signal.aborted)k?.markCompleted(R)}let j=performance.now(),b=j-m;if(b>100)try{process.stderr.write(`[streamRun][DIAG] postLoop: total=${b.toFixed(0)}ms normalize=${(S-m).toFixed(0)}ms upsert=${(j-S).toFixed(0)}ms msgs=${w.length} recovery=${I.length}
|
|
5425
5426
|
`)}catch{}}catch(k){yield{type:"error",error:{message:uF(k)?k.message??"ask_user requested more answers than provided.":NP(k,V).message,diagnostic:JQ(k)}}}finally{if(T(),X?.removeEventListener("abort",A),L&&M)q.abort(),M.close().catch(()=>{})}}finally{let q=performance.now(),A=typeof D.getActive==="function"?D.getActive()?.length??0:0;console.warn(`[streamRun.finally] room.clear() START (${A} arions)`),D.clear().catch(()=>{}).finally(()=>{console.warn(`[streamRun.finally] room.clear() END \u2014 ${((performance.now()-q)/1000).toFixed(1)}s`)})}}function Uk0($){let Z=$.ariaRunControl;N6($,"ariaRunControl",{...Z,submitRun:async(J,X)=>{let Y=await X70($,J,void 0,X);return{success:Y.body.success,...typeof Y.body.output==="string"?{output:Y.body.output}:{},...Y.body.messages?{messages:Y.body.messages}:{},...Y.body.toolCalls?{toolCalls:Y.body.toolCalls}:{},...Y.body.usage?{usage:Y.body.usage}:{},...typeof Y.body.turnCount==="number"?{turnCount:Y.body.turnCount}:{},...Y.body.state?{state:Y.body.state}:{},...typeof Y.body.error==="string"?{error:Y.body.error}:{},...Y.body.diagnostic?{diagnostic:Y.body.diagnostic}:{}}},resumeRun:async(J,X)=>{let Y=await Y70($,J,void 0,X);return{...Y.body,...Y.body.diagnostic?{diagnostic:Y.body.diagnostic}:{}}},streamRun:(J,X,Y)=>{let Q=$70(J);return Q.request?Q70($,Q.request,void 0,X,Y):Z70(Q.error)}})}var lF=E(()=>{ZP();b0();SH();m10();c10();l10();mx();R6();hx()});async function G70($,Z,J,X){let{submitRunViaRuntimeControl:Y}=await Promise.resolve().then(() => (lF(),dF));return Y($,Z,J,X)}async function V70($,Z,J,X){let{resumeRunViaRuntimeControl:Y}=await Promise.resolve().then(() => (lF(),dF));return Y($,Z,J,X)}async function W70(){let[{parseStreamRequest:$,invalidStreamRequest:Z,streamRunViaRuntimeControl:J},X]=await Promise.all([Promise.resolve().then(() => (lF(),dF)),Promise.resolve().then(() => (mx(),r10))]);return{parseStreamRequest:$,invalidStreamRequest:Z,streamRunViaRuntimeControl:J,getToolResultHighlight:X.getToolResultHighlight}}async function H70($){let Z=new t1(10,60000);$.post("/api/v1/run",{schema:{body:Bk0}},async(J,X)=>{if(!Z.check(J.ip))return X.status(429).send({success:!1,error:"Rate limit exceeded"});let{task:Y}=J.body;if(!Y||Y.trim()==="")return X.status(400).send({success:!1,error:"Task is required and cannot be empty"});let Q=eZ($,J);if(!Q.ok&&zP(J))return X.status(403).send({success:!1,error:Q.error,reason:Q.reason});let G=await G70($,J.body,J.log,Q.ok?{clientId:Q.clientId}:void 0);return X.status(G.status).send(G.body)})}var Bk0;var K70=E(()=>{_J();Bk0={type:"object",required:["task"],properties:{task:{type:"string",minLength:1},arion:{type:"string"},cwd:{type:"string"},history:{type:"array",items:{}},requestedModel:{type:"string",minLength:1},preferredTier:{type:"string",enum:["fast","balanced","powerful","ensemble"]},budget:{type:"number",exclusiveMinimum:0},maxTurns:{type:"integer",minimum:1},autonomy:{type:"string",enum:["minimal","balanced","high","full"]},allowedTools:{type:"array",items:{type:"string"}},deniedTools:{type:"array",items:{type:"string"}},noMemory:{type:"boolean"},systemPrompt:{type:"string"},approvalMode:{type:"string",enum:["pause","approve","deny"]},askUserAnswers:{type:"array",items:{type:"string"}}}}});async function z70($){let Z=new t1(10,60000);$.post("/api/v1/resume",{schema:{body:Fk0}},async(J,X)=>{if(!Z.check(J.ip))return X.status(429).send({success:!1,error:"Rate limit exceeded"});let{state:Y}=J.body;if(!Y||typeof Y!=="object")return X.status(400).send({success:!1,error:"state is required"});let Q;try{Q=CY.fromJSON(JSON.stringify(Y))}catch(V){return X.status(400).send({success:!1,error:`Invalid state: ${V instanceof Error?V.message:"validation failed"}`})}if(typeof Q.input!=="string"||Q.input.trim()==="")return X.status(400).send({success:!1,error:"state.input must be a non-empty string"});let G=await V70($,{...J.body,state:Q},J.log);return X.status(G.status).send(G.body)})}var Fk0;var U70=E(()=>{V8();Fk0={type:"object",required:["state"],properties:{state:{type:"object"},arion:{type:"string"},cwd:{type:"string"},requestedModel:{type:"string",minLength:1},preferredTier:{type:"string",enum:["fast","balanced","powerful","ensemble"]},budget:{type:"number",exclusiveMinimum:0},maxTurns:{type:"integer",minimum:1},autonomy:{type:"string",enum:["minimal","balanced","high","full"]},allowedTools:{type:"array",items:{type:"string"}},deniedTools:{type:"array",items:{type:"string"}},noMemory:{type:"boolean"},systemPrompt:{type:"string"},approvalMode:{type:"string",enum:["pause","approve","deny"]},askUserAnswers:{type:"array",items:{type:"string"}}}}});import{nanoid as B70}from"nanoid";import*as T2 from"fs";import*as D70 from"os";import*as PP from"crypto";function O70(){return`${process.env.HOME||D70.homedir()}/.aria`}function N70(){return`${O70()}/api-keys.json`}function L70($){return PP.createHash("sha256").update($).digest("hex")}function bH(){try{let $=N70();if(T2.existsSync($))return JSON.parse(T2.readFileSync($,"utf-8"))}catch($){console.warn("[Server] Failed to load API keys config:",$ instanceof Error?$.message:String($))}return{keys:[]}}function jP($){let Z=O70();if(!T2.existsSync(Z))T2.mkdirSync(Z,{recursive:!0});T2.writeFileSync(N70(),JSON.stringify($,null,2),{encoding:"utf-8",mode:384})}async function A70($,Z={}){let J=`aria_${B70(32)}`,X=B70(12),Y=new Date().toISOString(),Q=bH();if(Z.replaceExistingName)Q.keys=Q.keys.filter((G)=>G.name!==$);if(Z.prunePrefix&&Z.maxKeysForPrefix!==void 0){let G=Math.max(0,Z.maxKeysForPrefix),V=Q.keys.filter((H)=>H.name.startsWith(Z.prunePrefix)).sort((H,K)=>H.createdAt.localeCompare(K.createdAt)),W=Math.max(0,V.length-G+1);if(W>0){let H=new Set(V.slice(0,W).map((K)=>K.id));Q.keys=Q.keys.filter((K)=>!H.has(K.id))}}return Q.keys.push({id:X,name:$,keyHash:L70(J),createdAt:Y}),jP(Q),{key:J,id:X,name:$,createdAt:Y}}async function TP($){let Z=bH(),J=L70($),X=Buffer.from(J,"hex"),Y=!1;for(let Q of Z.keys){let G=Buffer.from(Q.keyHash,"hex");if(G.length===X.length&&PP.timingSafeEqual(G,X))Y=!0}return Y}function q70($){if(!$)return;try{return new URL($,"http://localhost").searchParams.get("api_key")||void 0}catch{return}}function nx($){let Z=Date.now(),J=j2.get($);if(!J||Z>=J.resetAt){if(!j2.has($))Ok0();return j2.set($,{count:1,resetAt:Z+Dk0}),!1}return J.count+=1,J.count>=E70}function _70($){let Z=Date.now(),J=j2.get($);if(!J)return!1;if(Z>=J.resetAt)return j2.delete($),!1;return J.count>=E70}function Ok0(){if(j2.size<=F70)return;let $=j2.size-F70,Z=0;for(let J of j2.keys()){if(Z>=$)break;j2.delete(J),Z++}}function M70(){return bH().keys.map(({id:Z,name:J,createdAt:X})=>({id:Z,name:J,createdAt:X}))}function P70($){let Z=bH(),J=Z.keys.length;if(Z.keys=Z.keys.filter((X)=>X.id!==$),Z.keys.length<J)return jP(Z),!0;return!1}var j2,E70=10,Dk0=60000,F70=1e4;var ix=E(()=>{j2=new Map});function V9($,Z){if($.readyState===1)$.send(JSON.stringify(Z))}async function j70($){$.get("/api/v1/stream",{websocket:!0,preValidation:async(Z,J)=>{let X=Z.ip||Z.socket?.remoteAddress||"unknown";if(X==="127.0.0.1"||X==="::1"||X==="::ffff:127.0.0.1")return;if(_70(X))return J.code(429).send({error:"Too many failed attempts. Try again later."});let Q=Z.headers["x-api-key"]||q70(Z.url);if(!Q)return nx(X),J.code(401).send({error:"API key required. Set x-api-key header."});if(!await TP(Q))return nx(X),J.code(401).send({error:"Invalid API key"})}},async(Z,J)=>{let X=!1,Y=new AbortController,Q=!1,G=eZ($,J);if(!G.ok&&zP(J)){V9(Z,{type:"error",error:G.error,reason:G.reason}),Z.close();return}let V=G.ok?{clientId:G.clientId}:void 0;Z.on("close",async()=>{X=!0,Y.abort()}),Z.on("message",(W)=>{if(Q){V9(Z,{type:"error",error:"Already processing a request"});return}Q=!0,(async()=>{let H=!1;try{let K;try{K=JSON.parse(W.toString())}catch{if(!X)V9(Z,{type:"error",error:"Invalid JSON message"});return}let z=await W70(),U=z.parseStreamRequest(K),B=U.request&&$.ariaRunControl?.streamRun?$.ariaRunControl.streamRun(U.request,Y.signal,V):U.request?z.streamRunViaRuntimeControl($,U.request,J.log,Y.signal,V):z.invalidStreamRequest(U.error??"Invalid request"),F=!1,D=!1;$:for await(let O of B){if(X)break;switch(O.type){case"text_delta":V9(Z,{type:"chunk",content:O.content});break;case"error":if(F=!0,!X)V9(Z,{type:"error",error:O.error.message}),H=!0;break $;case"paused":if(D=!0,!X)V9(Z,{type:"paused",reason:"Run paused: pending tool calls require approval before resume",state:O.state}),H=!0;break $;case"tool_start":V9(Z,{type:"tool_start",id:O.id,name:O.name,input:O.input});break;case"tool_result":let L=z.getToolResultHighlight(O.name,O.input,O.result);V9(Z,{type:"tool_result",id:O.id,name:O.name,durationMs:O.durationMs,result:O.result,...L.highlighted?{highlighted:L.highlighted,language:L.language}:{}});break;case"usage_update":V9(Z,{type:"usage_update",usage:O.usage});break;case"turn_complete":V9(Z,{type:"turn_complete",turnNumber:O.turnNumber});break;case"guardrail_rejected":V9(Z,{type:"guardrail_rejected",stage:O.stage,message:O.message});break;case"handoff_start":V9(Z,{type:"handoff_start",target:O.target,id:O.id});break;case"handoff_result":V9(Z,{type:"handoff_result",target:O.target,result:O.result,id:O.id});break;case"span_start":V9(Z,{type:"span_start",spanId:O.spanId,spanType:O.spanType,name:O.name});break;case"span_end":V9(Z,{type:"span_end",spanId:O.spanId,durationMs:O.durationMs});break;case"pipeline_timing":V9(Z,{type:"pipeline_timing",report:O.report});break;case"thinking_end":V9(Z,{type:"thinking_end",blocks:O.blocks??[],durationMs:O.durationMs});break;case"native_tool_result":V9(Z,{type:"native_tool_result",metadata:O.metadata});break;default:break}}if(Q=!1,!H&&!F&&!X&&!D)V9(Z,{type:"done"})}catch(K){if(J.log.error({err:K},"[Server] Sanitized error:"),!X&&!H)Q=!1,V9(Z,{type:"error",error:"Internal server error"})}finally{Q=!1}})()})})}var T70=E(()=>{m4();_J();ix()});function C70(){kH=null}function R70($){kH=$}async function Nk0($){if(kH)return kH;let{ariaMemoriaFactory:Z,ariaRouter:J}=$,X=await gF(Z,J);return kH=new nB({async chat(Q){return{content:(await J.chat({messages:Q.messages,tier:Q.tier??"balanced"})).content}}},X,Z),kH}async function w70($){let Z=new t1(10,60000);$.post("/api/v1/council",{schema:{body:Lk0},attachValidation:!0},async(J,X)=>{if(!Z.check(J.ip))return X.status(429).send({error:"Rate limit exceeded"});if(J.validationError){let V=J.validationError.message;if(V.includes("arions")||V.includes("items")||V.includes("fewer"))return X.status(400).send({error:"Council requires at least 2 Arions"});return X.status(400).send({error:V})}let{topic:Y,arions:Q}=J.body;if(Q.length<2)return X.status(400).send({error:"Council requires at least 2 Arions"});let G=Q.find((V)=>m6(V));if(G)return X.status(400).send({error:`Invalid arion name: "${G}"`});try{let W=await(await Nk0($)).council(Q,Y),H={topic:W.topic,participants:W.participants,discussion:W.contributions,consensus:W.conclusion,agreements:W.agreements,disagreements:W.disagreements};return X.send(H)}catch(V){let W=P2(V,J.log);return X.status(500).send({error:W})}})}var kH=null,Lk0;var ox=E(()=>{bF();mF();OP();m4();Lk0={type:"object",required:["topic","arions"],properties:{topic:{type:"string",minLength:1},arions:{type:"array",items:{type:"string"},minItems:2}}}});import Ak0 from"crypto";function QQ($){let Z=C2($.signingPublicKey);if(!Z)return{error:"signing_key_fingerprint_mismatch"};if(Z!==$.principalFingerprint)return{error:"signing_key_fingerprint_mismatch"};return{nodeId:$.nodeId,principalFingerprint:$.principalFingerprint,signingPublicKey:$.signingPublicKey}}function CP($,Z){return{...$,transportPublicKey:B$.parse($.transportPublicKey),...Z?{signingPublicKey:Z}:{}}}function C2($){try{return f0.parse(Ak0.createHash("sha256").update(Buffer.from($,"base64")).digest("hex"))}catch{return}}function S70($,Z){let J=Z?.getRecord?.($.nodeId)?.signingPublicKey??Z?.get?.($.nodeId);if(!J)return;return C2(J)===$.principalFingerprint?J:void 0}function I70($){return $.trim().replace(/^\[|\]$/g,"").toLowerCase()}class RP{ariaHome;ownerGeneration;peerSigningKeyStore;onBindingChanged;localBindingProjection;constructor($){this.ariaHome=$.ariaHome,this.ownerGeneration=$.ownerGeneration,this.peerSigningKeyStore=$.peerSigningKeyStore,this.localBindingProjection=$.localBindingProjection}openStore(){return new M$({ariaHome:this.ariaHome,...typeof this.ownerGeneration==="number"?{ownerGeneration:this.ownerGeneration}:{}})}resolveWriteOwnerGeneration(){if(typeof this.ownerGeneration==="number"&&Number.isInteger(this.ownerGeneration))return this.ownerGeneration;let $=this.openStore();try{let Z=$.readNodeMetadata()?.nodeId;if(!Z)return 1;return Math.max($.readRuntimeOwnerRecord(Z)?.ownerGeneration??0,$.readRuntimeBootstrapRecord(Z)?.ownerGeneration??0,1)}finally{$.close()}}openWritableStore(){return new M$({ariaHome:this.ariaHome,ownerGeneration:this.resolveWriteOwnerGeneration()})}resolveLocalNodeIdentity(){let $=this.openStore();try{return $.resolveOrCreateNode()}finally{$.close()}}resolveLocalVerifiedPrincipal(){let $=this.openStore();try{let Z=$.resolveOrCreateNode(),J=$.readRuntimeBootstrapRecord(Z.nodeId);if(!J?.signingPublicKey)return;let X=C2(J.signingPublicKey);if(!X)return;return{nodeId:Z.nodeId,principalFingerprint:X,transportPublicKey:B$.parse(J.transportPublicKey),signingPublicKey:J.signingPublicKey,isLocalAuthority:!0,...J.displayNameSnapshot?{displayNameSnapshot:J.displayNameSnapshot}:{}}}finally{$.close()}}hasRemoteBindings(){let $=this.openStore();try{return $.listPeerBindings().length>0}finally{$.close()}}resolveRemoteBinding($){let Z=this.openStore();try{let J=Z.readPeerBinding($);if(!J)return;let X=S70(J,this.peerSigningKeyStore);return CP(J,X)}finally{Z.close()}}resolveContinuityBase($){let Z=this.resolveRemoteBinding($);if(Z)return{nodeId:Z.nodeId,principalFingerprint:Z.principalFingerprint,continuityRevision:Z.continuityRevision,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{},binding:Z};let J=this.openStore();try{let X=J.readPeerRevocation($);if(!X)return;return{nodeId:X.nodeId,principalFingerprint:X.fingerprint,continuityRevision:0,revocationGeneration:X.revocationGeneration,...X.displayNameSnapshot?{displayNameSnapshot:X.displayNameSnapshot}:{},revokedPeer:X}}finally{J.close()}}resolveBindingByControlEndpoint($){let Z=I70($.host),J=this.listRemoteBindings().filter((Y)=>typeof Y.controlEndpointHost==="string"&&typeof Y.controlEndpointPort==="number"&&I70(Y.controlEndpointHost)===Z&&Y.controlEndpointPort===$.port);if(new Set(J.map((Y)=>Y.nodeId)).size>1)return"ambiguous";return J[0]}listRemoteBindings(){let $=this.openStore();try{return $.listPeerBindings().map((Z)=>{let J=S70(Z,this.peerSigningKeyStore);return{...Z,transportPublicKey:B$.parse(Z.transportPublicKey),...J?{signingPublicKey:J}:{}}})}finally{$.close()}}listAuthoritativeBindings(){let $=this.resolveLocalBinding(),Z=this.listRemoteBindings();if(!$)return Z;return[$,...Z.filter((J)=>J.nodeId!==$.nodeId)]}resolveLocalBinding(){let $=this.localBindingProjection?.();if(!$)return;let Z=this.resolveLocalNodeIdentity();if($.nodeId!==Z.nodeId)return;let J=C2($.signingPublicKey);if(!J)return;return{nodeId:Z.nodeId,principalFingerprint:J,transportPublicKey:$.transportPublicKey,continuityRevision:0,displayNameSnapshot:$.displayNameSnapshot,updatedAt:Z.createdAt,signingPublicKey:$.signingPublicKey,isLocalBinding:!0}}resolveBindingByPrincipalFingerprint($){let Z=this.listAuthoritativeBindings().filter((Y)=>Y.principalFingerprint===$);if(new Set(Z.map((Y)=>Y.nodeId)).size>1)return"ambiguous";let X=Z[0];if(!X?.signingPublicKey)return;return X}resolveVerifiedPrincipalByFingerprint($){let Z=[],J=this.resolveLocalVerifiedPrincipal();if(J?.principalFingerprint===$)Z.push(J);let X=this.resolveBindingByPrincipalFingerprint($);if(X==="ambiguous")return"ambiguous";if(X)Z.push(X);if(new Set(Z.map((Q)=>Q.nodeId)).size>1)return"ambiguous";return Z[0]}resolveNodeIdFromVerifiedPrincipal($){let Z=C2($.signingPublicKey);if(!Z)return;let J=this.resolveLocalBinding();if(J&&J.principalFingerprint===Z){if(!$.claimedNodeId||$.claimedNodeId===J.nodeId)return{nodeId:J.nodeId,principalFingerprint:Z,...J.displayNameSnapshot?{displayNameSnapshot:J.displayNameSnapshot}:{}};return}if($.claimedNodeId){let Y=this.resolveLocalVerifiedPrincipal();if(Y&&Y.nodeId===$.claimedNodeId&&Y.principalFingerprint===Z)return{nodeId:Y.nodeId,principalFingerprint:Z,...Y.displayNameSnapshot?{displayNameSnapshot:Y.displayNameSnapshot}:{}};let Q=this.resolveRemoteBinding($.claimedNodeId);if(!Q||Q.principalFingerprint!==Z)return;return{nodeId:Q.nodeId,principalFingerprint:Z,...Q.displayNameSnapshot?{displayNameSnapshot:Q.displayNameSnapshot}:{}}}let X=this.resolveVerifiedPrincipalByFingerprint(Z);if(!X||X==="ambiguous")return;return{nodeId:X.nodeId,principalFingerprint:Z,...X.displayNameSnapshot?{displayNameSnapshot:X.displayNameSnapshot}:{}}}commitFirstTrustBind($,Z){let J=this.openWritableStore();try{let X={nodeId:$.nodeId,principalFingerprint:$.principalFingerprint,transportPublicKey:Z.transportPublicKey,continuityRevision:Z.continuityRevision,endpointHost:Z.endpointHost,endpointPort:Z.endpointPort,endpointRevision:Z.endpointRevision??0,displayNameSnapshot:Z.displayNameSnapshot,controlEndpointHost:Z.controlEndpointHost,controlEndpointPort:Z.controlEndpointPort,controlTlsCaFingerprint:Z.controlTlsCaFingerprint},Y=J.commitPairContinuity(X);if(Z.projectSigningKey!==!1)this.peerSigningKeyStore?.set?.({nodeId:Y.nodeId,displayName:Y.displayNameSnapshot??Y.nodeId,signingPublicKey:$.signingPublicKey});return this.resolveRemoteBinding(Y.nodeId)??CP(Y)}finally{J.close()}}applyVerifiedContinuityMutation($){let Z=this.openWritableStore();try{let J=typeof $.expectedRevocationGeneration==="number"?Z.commitPairContinuityClearingRevocation({...$,expectedRevocationGeneration:$.expectedRevocationGeneration}):Z.commitPairContinuity($);if($.signingPublicKey&&$.projectSigningKey!==!1)this.peerSigningKeyStore?.set?.({nodeId:J.nodeId,displayName:J.displayNameSnapshot??J.nodeId,signingPublicKey:$.signingPublicKey});return this.resolveRemoteBinding(J.nodeId)??CP(J)}finally{Z.close()}}commitVerifiedContinuityBind($,Z,J){let X=this.openStore();try{let Y=Z.statement,Q=X.readPeerBinding($),G=Y.newTransportPublicKey?B$.parse(Y.newTransportPublicKey):void 0,V=J?.transportPublicKey??G??Q?.transportPublicKey;if(!V)throw Error("Verified continuity bind requires canonical transport evidence");let W=Q!==null&&Q.transportPublicKey!==V,H=this.applyVerifiedContinuityMutation({nodeId:$,principalFingerprint:Y.newPrincipalFingerprint,transportPublicKey:V,continuityRevision:Y.bindingGeneration,endpointHost:J?.endpointHost,endpointPort:J?.endpointPort,endpointRevision:J?.endpointRevision??Q?.endpointRevision??0,displayNameSnapshot:J?.displayNameSnapshot,controlEndpointHost:J?.controlEndpointHost,controlEndpointPort:J?.controlEndpointPort,controlTlsCaFingerprint:J?.controlTlsCaFingerprint,signingPublicKey:x0.parse(Z.newPublicKey),projectSigningKey:J?.projectSigningKey,...typeof Y.revocationGeneration==="number"?{expectedRevocationGeneration:Y.revocationGeneration}:{}});if(this.onBindingChanged&&W)this.onBindingChanged({nodeId:H.nodeId,transportKeyChanged:!0,newTransportPublicKey:H.transportPublicKey,previousTransportPublicKey:Q?.transportPublicKey,newPrincipalFingerprint:H.principalFingerprint,previousPrincipalFingerprint:Q?.principalFingerprint,continuityRevision:H.continuityRevision});return H}finally{X.close()}}recordRevocationConflict($){let Z=this.openWritableStore();try{return Z.commitRevocationConflict($)}finally{Z.close()}}recordVerifiedRevocation($){let Z=this.openWritableStore();try{return Z.commitPeerRevocation($)}finally{Z.close()}}commitPeerEndpointProjection($){let Z=this.openWritableStore();try{let J=Z.commitPeerEndpointProjection($);if(J.kind==="not_found")return J;let X=this.resolveRemoteBinding(J.binding.nodeId)??CP(J.binding);return{kind:J.kind,binding:X}}finally{Z.close()}}}function qk0($){if(typeof $.ariaNodeId==="string"){let J=G0.safeParse($.ariaNodeId.trim());if(J.success)return J.data}let Z=$.ariaNetworkManager?.getConfig?.()?.nodeId;if(typeof Z==="string"){let J=G0.safeParse(Z.trim());if(J.success)return J.data}return}function Ek0($,Z){if(!Z)return;let J=new M$({ariaHome:$});try{let X=typeof J.readRuntimeOwnerRecord==="function"?J.readRuntimeOwnerRecord(Z)?.ownerGeneration??0:0,Y=typeof J.readRuntimeBootstrapRecord==="function"?J.readRuntimeBootstrapRecord(Z)?.ownerGeneration??0:0,Q=Math.max(X,Y,0);return Q>0?Q:void 0}finally{J.close()}}function N8($,Z){let J=$.ariaBasePath?.trim();if(!J)return;let X=Z?.ownerGeneration??Ek0(J,qk0($)),Y=new RP({ariaHome:J,ownerGeneration:X,peerSigningKeyStore:$.ariaPeerSigningKeyStore,localBindingProjection:()=>{let Q=$.ariaNetworkManager?.getConfig?.();if(!Q?.nodeId||!Q.signingPublicKey||!Q.publicKey)return;return{nodeId:Q.nodeId,displayNameSnapshot:$.ariaNetworkManager?.getLocalDisplayNameSnapshot?.(),signingPublicKey:x0.parse(Q.signingPublicKey),transportPublicKey:B$.parse(Q.publicKey)}}});return Y.onBindingChanged=(Q)=>{if(Q.transportKeyChanged)P.debug(`[principal-binding-authority] Transport key changed for ${Q.nodeId}`),$.ariaNetworkManager?.refreshPeerEndpoint?.(Q.nodeId)},Y}var MJ=E(()=>{S0();W8();O6()});function _k0($){if(!($ instanceof Error))return null;if($.message.includes("direct transport endpoint conflict"))return new R2("endpoint_conflict","Direct transport endpoint already owned by another peer principal");if($.message.includes("endpoint revision conflict"))return new R2("conflicting_revision","Rejected conflicting endpoint revision");return null}function Mk0($){let Z=new M$({ariaHome:$.ariaHome,...typeof $.ownerGeneration==="number"?{ownerGeneration:$.ownerGeneration}:{}});try{return Z.readPeerBinding($.nodeId)}finally{Z.close()}}function Pk0($){if(typeof $.ownerGeneration==="number"&&Number.isInteger($.ownerGeneration))return $.ownerGeneration;let Z=new M$({ariaHome:$.ariaHome});try{let J=Z.readNodeMetadata()?.nodeId;if(!J)return 1;return Math.max(Z.readRuntimeOwnerRecord(J)?.ownerGeneration??0,Z.readRuntimeBootstrapRecord(J)?.ownerGeneration??0,1)}finally{Z.close()}}function jk0($){let Z=new M$({ariaHome:$.ariaHome,ownerGeneration:Pk0($)});try{Z.restorePeerBinding($.nodeId,$.previousBinding)}finally{Z.close()}}function Tk0($){let Z=b5({endpointHost:$.endpointHost,endpointPort:$.endpointPort}),J=Z.endpointHost??$.endpointHost.trim();if(!J)throw Error("Authoritative peer endpoint mutation requires a non-empty endpoint host");return{endpointHost:J,endpointPort:Z.endpointPort??$.endpointPort,endpointRevision:$.endpointRevision}}function wP($){let Z=Mk0({ariaHome:$.ariaHome,ownerGeneration:$.ownerGeneration,nodeId:$.nodeId}),J;try{J=$.authority.commitPeerEndpointProjection({nodeId:$.nodeId,endpointHost:$.endpointHost,endpointPort:$.endpointPort,endpointRevision:$.endpointRevision})}catch(Y){let Q=_k0(Y);if(Q)throw Q;throw Y}if(J.kind==="not_found")throw new R2("not_found","Peer not found");if(J.kind==="stale")throw new R2("stale_revision","Rejected stale endpoint revision");let X=Tk0({endpointHost:$.endpointHost,endpointPort:$.endpointPort,endpointRevision:$.endpointRevision});try{let Y=$.apply({binding:J.binding,...X,decision:J.kind});return{decision:J.kind,binding:J.binding,projected:Y}}catch(Y){if(J.kind==="applied")jk0({ariaHome:$.ariaHome,ownerGeneration:$.ownerGeneration,nodeId:$.nodeId,previousBinding:Z});throw Y}}var R2;var sx=E(()=>{b0();O6();R2=class R2 extends Error{code;constructor($,Z){super(Z);this.code=$,this.name="AuthoritativePeerEndpointError"}}});function aF($,Z){let J=u8.parse($);if(!Ck0.has(J.phase))throw Error(`${Z} unavailable during ${J.phase}`);return $7(J,Z),J}async function c6($,Z){let J=$.ariaRuntimeBootstrapControl;if(!J?.getRuntimeBootstrap)throw Error(`${Z} unavailable`);return aF(await J.getRuntimeBootstrap(),Z)}function $7($,Z="Runtime bootstrap"){let J=x0.parse($.signingPublicKey),X=C9(J);if(!X)throw Error(`${Z} missing durable principal TLS identity`);if($.tls.principalIdentity!==X)throw Error(`${Z} missing durable principal TLS identity`);return X}var Ck0;var GQ=E(()=>{V8();b0();Ck0=new Set(["control_ready","network_ready","mesh_ready"])});import*as b70 from"os";function SP($){let Z=$?.trim();if(!Z)return;let J=Z.replace(/^\[(.*)\]$/,"$1").split("%")[0]??Z;if(J==="localhost"||J==="::1"||J==="::ffff:127.0.0.1"||J.startsWith("127."))return fH;if(J==="0.0.0.0"||J==="::")return;return J}function Rk0(){let $=b70.networkInterfaces(),Z=[];for(let X of Object.values($))for(let Y of X??[]){let Q=SP(Y.address);if(!Q||Y.internal||!O8(Q)||Q===fH)continue;Z.push({host:Q,family:Y.family})}return Z.find((X)=>X.family==="IPv4")?.host??Z[0]?.host}function VQ($){let Z=SP($.ingressHost);if(Z&&O8(Z))return Z;let J=SP($.peerHost);if(J===fH)return fH;if(J&&O8(J))return Rk0()??fH;let X=SP($.externalHost);if(X)return X;return fH}var fH="127.0.0.1";var rx=E(()=>{V8()});import{randomBytes as wk0}from"crypto";import*as IP from"fs";import*as Z7 from"path";async function Ik0(){if(!tx)tx=Promise.resolve().then(() => (b0(),SW)).then(($)=>$.DirectPairResponseSchema);return tx}async function k70($,Z){let X=(await Ik0()).safeParse($);if(!X.success)throw Error(`${Z} returned an invalid direct-pair receipt \u2014 upgrade needed`);return X.data}function bk0($){return $==="::1"||$==="localhost"||/^127\./.test($)}function kk0($){if(Sk0.has($))return!0;return $.toLowerCase().endsWith(".localhost")}function fk0($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid coordination URL: ${$}`)}let J=Z.hostname.toLowerCase();if(Z.protocol==="https:")return Z;if(Z.protocol==="http:"&&kk0(J))return Z;throw Error(`Insecure coordination URL "${$}". Use https:// (http:// allowed only for localhost).`)}function yk0($){let Z=$.trim().toLowerCase();if(!/^[a-f0-9]{16,128}$/.test(Z))throw Error("Invalid fingerprint format for trusted CA path");return Z}function vk0($){let Z=$.trim().toLowerCase();if(!/^[a-f0-9]{16,128}$/.test(Z))throw Error("Invalid fingerprint format for trusted CA path");return Z}function hk0($,Z){let J=vk0(Z),X=Z7.resolve(Z7.join($,"network","trusted-cas")),Y=Z7.resolve(Z7.join(X,`${J}.pem`));if(!Y.startsWith(`${X}${Z7.sep}`))throw Error("Trusted CA path escapes trusted-cas directory");return Y}function v70($,Z){if(!$)return;let J=yk0($),X=e7(Z);if(!(X===J||X.startsWith(J)))throw Error("Responder signing key fingerprint mismatch")}function h70($){if(!$.ariaPairControl)throw Error("Runtime pair control unavailable");return $.ariaPairControl}function bP($){if(!$.ariaNetworkManager)throw Error("Network manager unavailable");return $.ariaNetworkManager}function $g($){let Z=$.ariaNetworkManager,J=Z?.getConfig(),X=Z?.getLocalDisplayNameSnapshot?.()?.trim(),Y=B$.safeParse(J?.publicKey).data,Q=typeof J?.signingPublicKey==="string"?x0.safeParse(J.signingPublicKey).data:void 0,G=typeof J?.signingPrivateKey==="string"?J.signingPrivateKey:"";if(!X)throw Error("Local display snapshot unavailable \u2014 pairing requires runtime identity");if(!Y||!Q||!G)throw Error("Local signing identity unavailable \u2014 pairing requires network keys");return{localDisplayNameSnapshot:X,publicKey:Y,signingPublicKey:Q,signingPrivateKey:G,endpointRevision:typeof J?.endpointRevision==="number"?J.endpointRevision:void 0,coordinationUrl:typeof J?.coordinationUrl==="string"?J.coordinationUrl:void 0,externalEndpoint:J?.externalEndpoint&&typeof J.externalEndpoint==="object"?J.externalEndpoint:void 0,listenPort:typeof J?.listenPort==="number"?J.listenPort:void 0}}function xk0($){let Z=N8($);if(!Z)throw Error("Principal binding authority unavailable \u2014 pairing requires nodeId");return Z.resolveLocalNodeIdentity().nodeId}async function x70($,Z){let J=bP($),X=$g($),Y=await c6($,"Local runtime bootstrap unavailable for invite creation"),Q=Zg({runtimeConfig:X,runtimeBootstrap:Y}),G=J.invite(Z.inviteLabel,{...typeof Z.durationMs==="number"?{durationMs:Z.durationMs}:{},controlEndpoint:Q,caCert:Y.tls.caCertPem}),V=y70.decodeInviteToken(G.token);return s4.parse({inviteToken:G.token,pendingInvite:{inviteId:V.tokenNonce,...Z.inviteLabel?{inviteLabel:Z.inviteLabel}:{},createdAt:new Date(V.createdAt).toISOString(),expiresAt:V.expiresAt>0?new Date(V.expiresAt).toISOString():null}})}function g70($){let Z=bP($),J=Z.listPendingInvites;if(!J)throw Error("Network manager listPendingInvites unavailable");return J.call(Z).map((X)=>E4.parse({inviteId:X.inviteId,...X.inviteLabel?{inviteLabel:X.inviteLabel}:{},createdAt:new Date(X.createdAt).toISOString(),...X.expiresAt===null?{expiresAt:null}:{expiresAt:new Date(X.expiresAt).toISOString()}}))}async function m70($,Z){let J=bP($),X=J.acceptInvite?.bind(J);if(!X)throw Error("Network manager acceptInvite unavailable");let Y=$g($),Q=await c6($,"Local runtime bootstrap unavailable for invite acceptance"),G=Zg({runtimeConfig:Y,runtimeBootstrap:Q}),V=await X(Z.inviteToken,{controlEndpoint:G});if(V.nodeId&&!V.signingPublicKey)$.log.warn(`[acceptInviteToken] Invite accepted but peer ${String(V.nodeId)} has no signingPublicKey \u2014 peer binding not written, peer will not appear in listPeers`);if(V.nodeId&&V.signingPublicKey){let W=N8($);if(W){let H=x0.safeParse(V.signingPublicKey),K=G0.parse(V.nodeId);if(H.success){let z=C2(H.data);if(z){let U=QQ({nodeId:K,principalFingerprint:z,signingPublicKey:H.data});if(!("error"in U))W.commitFirstTrustBind(U,{transportPublicKey:B$.parse(V.publicKey),continuityRevision:1,endpointHost:V.endpointHost??void 0,endpointPort:V.endpointPort??void 0,endpointRevision:V.endpointRevision??0,displayNameSnapshot:V.name,controlEndpointHost:V.controlEndpointHost??void 0,controlEndpointPort:V.controlEndpointPort??void 0,controlTlsCaFingerprint:V.controlTlsCaFingerprint??void 0,projectSigningKey:!1})}}}}return e4.parse({success:!0,nodeId:V.nodeId,...V.name?{displayNameSnapshot:V.name}:{}})}function c70($,Z){let J=bP($),X=J.cancelInvite;if(!X)throw Error("Network manager cancelInvite unavailable");return o6.parse({cancelled:X.call(J,Z.inviteId),inviteId:Z.inviteId})}function Zg($){return{host:VQ({peerHost:$.peerHost,externalHost:$.runtimeConfig.externalEndpoint?.address?.trim()??$.runtimeBootstrap.controlEndpoint.host}),port:$.runtimeBootstrap.controlEndpoint.port,tlsCaFingerprint:d$.parse($.runtimeBootstrap.tls.caFingerprint),tlsServerIdentity:$7($.runtimeBootstrap),protocolVersion:$.runtimeBootstrap.protocolVersion,endpointRevision:$.runtimeConfig.endpointRevision??0}}function f70($){return{host:VQ({peerHost:$.peerHost,externalHost:$.runtimeConfig.externalEndpoint?.address?.trim()}),port:$.runtimeConfig.listenPort??$.daemonPort}}function gk0($){let Z=$.server.address();if(typeof Z==="object"&&Z&&typeof Z.port==="number")return Z.port;return $.config.port}function ex($,Z,J){if(!Z||!J)return;let X=hk0($,Z);IP.mkdirSync(Z7.dirname(X),{recursive:!0}),IP.writeFileSync(X,J)}function mk0($){try{let Z=JSON.parse($);if(Z.token)return Z.token}catch{}return $}async function ck0($){let{server:Z,request:J,requestedNodeId:X,localTransportEndpoint:Y,localControlEndpoint:Q,localEphemeralPrivateKey:G,ariaDir:V,mode:W,statusPayload:H,canonicalCaCertPem:K,canonicalCaFingerprint:z}=$;if(!H.accepted||H.status==="rejected")throw Error(`${J.displayName} rejected the pairing request`);if(!H.encryptedToken||!H.ephemeralPublicKey||!H.ephemeralKeySignature||!H.nonce||!H.tag)throw Error("Encrypted pairing required but response missing ECDH fields");if(z&&H.caCert&&t7(H.caCert)!==z)throw Error(`${J.displayName} pair response TLS authority drifted from runtime bootstrap`);let U=mW(G,H.ephemeralPublicKey),B=JM({ciphertext:H.encryptedToken,nonce:H.nonce,tag:H.tag},U),F=mk0(B),D=oW(F),O=D?.claims.issuerNodeId,L=x0.safeParse(D?.claims.issuerSigningPublicKey?.trim()),q=L.success?L.data:void 0,A=X;if(!O)throw Error("Invite token did not carry issuer nodeId");if(!q)throw Error("Invite token did not carry issuer signing public key");if(O!==A)throw Error("Invite token issuer nodeId did not match the requested durable nodeId");if(!XM(H.ephemeralPublicKey,H.ephemeralKeySignature,q))throw Error("Responder ephemeral key signature invalid \u2014 possible MITM");v70(J.principalFingerprint,q);let _=typeof D?.claims.issuerDisplayName==="string"&&D.claims.issuerDisplayName.trim().length>0?D.claims.issuerDisplayName.trim():O,M=await h70(Z).acceptInvite({inviteToken:F,nodeId:G0.parse(O),displayNameSnapshot:_,transportEndpoint:Y,controlEndpoint:Q});return ex(V,J.controlEndpoint.tlsCaFingerprint,H.caCert??K),{nodeId:M.nodeId,...M.displayNameSnapshot?{displayNameSnapshot:M.displayNameSnapshot}:{},mode:W,pairingProofState:"pending_verification"}}async function uk0($){let{request:Z,requestedNodeId:J}=$,X=Z.controlEndpoint.tlsServerIdentity,Y=await x6(uW(Z.controlEndpoint.host,Z.controlEndpoint.port,"/api/v1/runtime/bootstrap"),{expectedCaFingerprint:Z.controlEndpoint.tlsCaFingerprint}),Q=await Y.json(),G=typeof Q==="object"&&Q!==null&&"error"in Q&&typeof Q.error==="string"?Q.error:void 0;if(!Y.ok||G)throw Error(G??`HTTP ${Y.status}`);let V=aF(u8.parse(Q),`${Z.displayName} runtime bootstrap`);if(bZ(V.protocolVersion,"runtime bootstrap"),V.nodeId!==J)throw Error(`${Z.displayName} advertised nodeId ${V.nodeId} but the requested durable nodeId was ${J}`);if(V.controlEndpoint.port!==Z.controlEndpoint.port)throw Error(`${Z.displayName} runtime bootstrap control port drifted from discovery`);if(V.tls.caFingerprint!==Z.controlEndpoint.tlsCaFingerprint)throw Error(`${Z.displayName} runtime bootstrap TLS fingerprint mismatched discovery`);let W=$7(V,`${Z.displayName} runtime bootstrap`);if(X&&W!==X)throw Error(`${Z.displayName} runtime bootstrap missing pinned TLS identity`);if(Y.peerCaCert&&t7(Y.peerCaCert)!==V.tls.caFingerprint)throw Error(`${Z.displayName} runtime bootstrap CA cert mismatched TLS handshake`);return{bootstrap:V,tlsIdentity:W}}async function pk0($){let Z=$7($.remoteRuntimeBootstrap,`${$.request.displayName} runtime bootstrap`),J=await x6(uW($.request.controlEndpoint.host,$.request.controlEndpoint.port,"/api/v1/runtime/node"),{ca:$.remoteRuntimeBootstrap.tls.caCertPem,expectedTlsIdentity:Z}),X=await J.json();if(!J.ok){let Q=typeof X==="object"&&X!==null&&"error"in X&&typeof X.error==="string"?X.error:`HTTP ${J.status}`;throw Error(Q)}let Y=C5.parse(X);if(Y.nodeId!==$.requestedNodeId)throw Error(`${$.request.displayName} advertised nodeId ${Y.nodeId} but the requested durable nodeId was ${$.requestedNodeId}`);return Y}async function u70($,Z){let J=$.ariaBasePath??Z7.join(process.env.HOME??"",".aria"),X=xk0($),Y=$g($),Q=gk0($),G=await c6($,"Local runtime bootstrap"),V=Zg({runtimeConfig:Y,runtimeBootstrap:G,peerHost:Z.controlEndpoint.host}),W=f70({runtimeConfig:Y,daemonPort:Q,peerHost:Z.controlEndpoint.host}),H=Z.nodeId.trim();if(bZ(Z.controlEndpoint.protocolVersion,"invite control endpoint"),Z.transport!=="wan"&&!bk0(Z.controlEndpoint.host)&&!O8(Z.controlEndpoint.host))throw Error(`Rejected: ${Z.controlEndpoint.host} is not a private LAN address.`);let K=gW(),z=cW(K.publicKey,Buffer.from(Y.signingPrivateKey,"base64")),U={displayNameSnapshot:G.displayNameSnapshot??Y.localDisplayNameSnapshot,nodeId:X,signingPublicKey:G.signingPublicKey,port:Q,ephemeralPublicKey:K.publicKey,ephemeralKeySignature:z,caCert:G.tls.caCertPem};if(Z.transport==="wan"){if(!Z.principalFingerprint)throw Error("WAN peer identity is missing signing fingerprint; pairing refused");if(!Y.coordinationUrl)throw Error("No coordination server configured for WAN pairing");let T=fk0(Y.coordinationUrl),k=await x6(new URL("/api/v1/pair/relay",T).toString(),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetNodeId:H,...U})}),R=await k.json();if(!k.ok||R.error||!R.requestId)throw Error(R.error??`HTTP ${k.status}`);let a=await x6(new URL(`/api/v1/pair/status/${R.requestId}`,T).toString()),o=await a.json();if(!a.ok||o.error)throw Error(o.error??`HTTP ${a.status}`);return ck0({server:$,request:Z,requestedNodeId:H,localTransportEndpoint:W,localControlEndpoint:V,localEphemeralPrivateKey:K.privateKey,ariaDir:J,mode:"wan_pair",statusPayload:o})}if(!Z.controlEndpoint.tlsCaFingerprint)throw Error(`${Z.displayName} did not advertise TLS fingerprint \u2014 upgrade needed`);let{bootstrap:B,tlsIdentity:F}=await uk0({request:Z,requestedNodeId:H});ex(J,B.tls.caFingerprint,B.tls.caCertPem);let D=await pk0({request:Z,requestedNodeId:H,remoteRuntimeBootstrap:B});v70(Z.principalFingerprint,D.signingPublicKey);let O=D.displayNameSnapshot?.trim(),L=wk0(32).toString("base64"),q=BM({principalNodeId:G0.parse(X),targetNodeId:D.nodeId,targetSigningPublicKey:D.signingPublicKey,targetTransportPublicKey:D.transportPublicKey,...O?{targetDisplayNameSnapshot:O}:{},signingPublicKey:Y.signingPublicKey,signingPrivateKey:Y.signingPrivateKey,payload:{peerNodeId:G0.parse(X),principalFingerprint:f0.parse(e7(Y.signingPublicKey)),peerWgPubkey:Y.publicKey,peerSigningPubkey:Y.signingPublicKey,transportEndpoint:f70({runtimeConfig:Y,daemonPort:Q,peerHost:Z.controlEndpoint.host}),controlEndpoint:V,peerDisplayName:Y.localDisplayNameSnapshot,psk:L}}),A=await x6(uW(Z.controlEndpoint.host,Z.controlEndpoint.port,"/api/v1/pair/direct"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({envelope:q}),ca:B.tls.caCertPem,expectedTlsIdentity:F}),N=await A.json(),_=typeof N==="object"&&N!==null&&"error"in N&&typeof N.error==="string"?N.error:void 0;if(!A.ok||_)throw Error(_??`HTTP ${A.status}`);await k70(N,Z.displayName);let M=await h70($).directPair({peerNodeId:D.nodeId,principalFingerprint:e7(D.signingPublicKey),peerWgPubkey:D.transportPublicKey,peerSigningPubkey:D.signingPublicKey,transportEndpoint:{host:Z.controlEndpoint.host,port:D.transportEndpoint.port},controlEndpoint:Z.controlEndpoint,...O?{peerDisplayName:O}:{},psk:L});return await k70(M,O??D.nodeId),ex(J,B.tls.caFingerprint,B.tls.caCertPem),{nodeId:D.nodeId,...O?{displayNameSnapshot:O}:{},mode:"lan_direct",pairingProofState:"pending_verification"}}function p70($,Z){let J=$.ariaNetworkManager;if(!J?.applyPeerRepair)throw new c4(503,"Peer repair is unavailable \u2014 authoritative repair mutator not present");let X=J.applyPeerRepair.bind(J),Y={nodeId:Z.nodeId,endpointHost:Z.endpointHost,endpointPort:Z.endpointPort,endpointRevision:Z.endpointRevision},Q=N8($,{ownerGeneration:$.ariaOwnerGeneration})?.resolveRemoteBinding(Z.nodeId),G=(K)=>{if(!K.repaired){let z=String(K.errorCode);if(z==="not_found")throw new c4(404,"Peer not found");if(z==="revoked")throw new c4(409,"Peer revoked");if(z==="stale_revision")throw new c4(409,"Peer repair rejected stale endpoint revision");if(z==="conflicting_revision")throw new c4(409,"Peer repair rejected conflicting endpoint revision");throw new c4(409,`Peer ${z} cannot complete repair while awaiting state convergence`)}return K},V=()=>{let K=X(Y);if(!K.repaired)G(K);throw new c4(503,"Peer repair is unavailable \u2014 durable peer binding missing")};if(typeof Z.endpointRevision!=="number"||!Number.isInteger(Z.endpointRevision)||Z.endpointRevision<0)throw new c4(400,"Peer repair requires a non-negative endpointRevision");let W=N8($,{ownerGeneration:$.ariaOwnerGeneration});if(!W)throw new c4(503,"Peer repair is unavailable \u2014 principal binding authority not present");let H=$.ariaBasePath;if(!H)throw new c4(503,"Peer repair is unavailable \u2014 ARIA base path not present");try{let K=wP({ariaHome:H,ownerGeneration:$.ariaOwnerGeneration,authority:W,nodeId:Z.nodeId,endpointHost:Z.endpointHost,endpointPort:Z.endpointPort,endpointRevision:Z.endpointRevision,apply:({endpointHost:z,endpointPort:U,endpointRevision:B})=>G(X({nodeId:Z.nodeId,endpointHost:z,endpointPort:U,endpointRevision:B}))}).projected;return{repaired:!0,nodeId:G0.parse(K.nodeId),endpointHost:K.endpointHost,endpointPort:K.endpointPort,endpointRevision:K.endpointRevision}}catch(K){if(K instanceof R2){if(K.code==="not_found"){if(!Q)throw new c4(404,K.message);V()}throw new c4(409,`Peer repair ${K.message.toLowerCase()}`)}if(K instanceof c4)throw K;throw K}}var y70,Sk0,tx=null,c4;var d70=E(()=>{V8();b0();MJ();sx();GQ();rx();y70=U7(MH(),1),Sk0=new Set(["localhost","127.0.0.1","::1"]);c4=class c4 extends Error{statusCode;constructor($,Z){super(Z);this.statusCode=$,this.name="LocalControlRepairError"}}});function dk0($){let Z=$.ariaBasePath?.trim();if(!Z)return new Map;let J;try{return J=new M$({ariaHome:Z}),new Map(J.listPeerBindings().flatMap((X)=>{let Y=G0.safeParse(X.nodeId?.trim()),Q=B$.safeParse(X.transportPublicKey?.trim());if(!Y.success||!Q.success)return[];return[[Y.data,{nodeId:Y.data,transportPublicKey:Q.data,...X.displayNameSnapshot?{displayNameSnapshot:X.displayNameSnapshot}:{}}]]}))}catch{return new Map}finally{J?.close()}}function lk0($,Z){let J=G0.safeParse($.nodeId);if(!J.success)return null;let X=J.data,Y=Z.get(X);if(!Y)return null;if(Y.transportPublicKey!==$.publicKey)return null;return{nodeId:Y.nodeId,transportPublicKey:B$.parse($.publicKey),displayNameSnapshot:Y.displayNameSnapshot??$.name,status:$.status,endpointHost:$.endpointHost,endpointPort:$.endpointPort,endpointRevision:$.endpointRevision??0,lastHandshake:$.lastHandshake,createdAt:$.createdAt,updatedAt:$.updatedAt??$.createdAt}}function ak0($){let Z=$.ariaNetworkManager;if(!Z)return[];let J=dk0($);return Z.listPeers().flatMap((X)=>{let Y=lk0(X,J);return Y?[Y]:[]})}function kP($){if($.ariaNetworkReadControl?.listPeers)return;N6($,"ariaNetworkReadControl",{listPeers:async()=>ak0($)})}var Jg=E(()=>{m4();W8();O6()});function l70($,Z){let J=$.headers.host;if(typeof J==="string"){let X=J.split(":").at(-1);if(X){let Y=Number.parseInt(X,10);if(Number.isFinite(Y)&&Y>0){if((Y===80||Y===443)&&Z>0)return Z;return Y}}}return Z}function w2($,Z=400){if($ instanceof yH)return $;if(typeof $==="object"&&$!==null&&"statusCode"in $&&typeof $.statusCode==="number")return new yH($.statusCode,$ instanceof Error?$.message:String($));return new yH(Z,$ instanceof Error?$.message:String($))}async function a70($){kP($);let Z=(Y)=>eZ($,Y);N6($,"ariaPeerLocalControl",{listPeers:async()=>{return(await $.ariaNetworkReadControl?.listPeers()??[]).map((Q)=>{let G=n2(Q);return q4.parse({nodeId:Q.nodeId,transportPublicKey:Q.transportPublicKey,displayNameSnapshot:Q.displayNameSnapshot,identityState:G.identityState,transportState:G.transportState,endpointRevision:Q.endpointRevision,updatedAt:new Date(Q.updatedAt).toISOString(),lastSeenAt:Q.lastHandshake?new Date(Q.lastHandshake).toISOString():void 0})})},listNearbyPeers:async()=>[],createInvite:async(Y)=>{let Q=o4.parse(Y);return s4.parse(await x70($,Q))},listPendingInvites:async()=>g70($).map((Y)=>E4.parse(Y)),acceptInviteToken:async(Y)=>{let Q=t4.parse(Y);return e4.parse(await m70($,Q))},cancelInvite:async(Y)=>{let Q=i6.parse(Y);return o6.parse(c70($,Q))},invitePeer:async(Y)=>{let Q=r4.parse(Y);return n6.parse(await u70($,Q))},repairPeer:async(Y)=>{let Q=$6.parse(Y);return s6.parse(p70($,Q))}});let J=()=>{let Y=$.ariaPairControl;if(!Y)throw new yH(503,"Local control pair surface unavailable");return Y},X=()=>{let Y=$.ariaNetworkAdminControl;if(!Y)throw new yH(503,"Local control network admin surface unavailable");return Y};$.get("/api/v1/local-control/runtime-status",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});if($.ariaRuntimeLocalControl?.getRuntimeStatus){let H=await $.ariaRuntimeLocalControl.getRuntimeStatus();return Q.send(f8.parse({...H,port:l70(Y,H.port)}))}let W=N8($)?.resolveLocalNodeIdentity().nodeId;if(!W||!$.ariaRuntimeId)return Q.status(503).send({error:"Runtime status unavailable"});return Q.send(f8.parse({nodeId:W,runtimeId:$.ariaRuntimeId,port:l70(Y,$.config.port),attachedClients:$.ariaAttachedClientControl?.countAttachedClients(),autonomousLoop:{status:"stopped",intervalMs:null,lastWakeTickAt:null,lastCheckpointResult:"never",safetyPolicySummary:{},ownerClientKind:null}}))}),$.get("/api/v1/local-control/attached-clients",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});let V=$.ariaAttachedClientControl;if(!V)return Q.status(503).send({error:"Attached client directory unavailable"});let W=await V.listAttachedClients({clientId:G.clientId});return Q.send({clients:W.map((H)=>kZ.parse(H))})}),$.get("/api/v1/local-control/peers",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});let V=await $.ariaPeerLocalControl?.listPeers();return Q.send({peers:V??[]})}),$.get("/api/v1/local-control/nearby-peers",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});let V=await $.ariaPeerLocalControl?.listNearbyPeers();return Q.send({peers:(V??[]).map((W)=>_6.parse(W))})}),$.get("/api/v1/local-control/pending-pair-requests",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=await J().listPendingPairRequests();return Q.send({requests:V.map((W)=>M6.parse(W))})}catch(V){let W=w2(V,500);return Q.status(W.statusCode).send({error:W.message})}}),$.post("/api/v1/local-control/respond-pair-request",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=_4.parse(Y.body),W=await J().respondToPairRequest(V);return Q.send(P6.parse(W))}catch(V){let W=w2(V);return Q.status(W.statusCode).send({error:W.message})}}),$.get("/api/v1/local-control/invites",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=await $.ariaPeerLocalControl?.listPendingInvites();return Q.send({invites:(V??[]).map((W)=>E4.parse(W))})}catch(V){let W=w2(V,500);return Q.status(W.statusCode).send({error:W.message})}}),$.post("/api/v1/local-control/invites",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=o4.parse(Y.body),W=await $.ariaPeerLocalControl?.createInvite(V);return Q.send(s4.parse(W))}catch(V){let W=w2(V);return Q.status(W.statusCode).send({error:W.message})}}),$.post("/api/v1/local-control/accept-invite-token",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=t4.parse(Y.body),W=await $.ariaPeerLocalControl?.acceptInviteToken(V);return Q.send(e4.parse(W))}catch(V){let W=w2(V);return Q.status(W.statusCode).send({error:W.message})}}),$.post("/api/v1/local-control/cancel-invite",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=i6.parse(Y.body),W=await $.ariaPeerLocalControl?.cancelInvite(V);return Q.send(o6.parse(W))}catch(V){let W=w2(V);return Q.status(W.statusCode).send({error:W.message})}}),$.post("/api/v1/local-control/peer-invite",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=r4.parse(Y.body),W=await $.ariaPeerLocalControl?.invitePeer(V);return Q.send(n6.parse(W))}catch(V){return Q.status(400).send({error:V instanceof Error?V.message:String(V)})}}),$.post("/api/v1/local-control/accept-invite",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=A4.parse(Y.body),W=await J().acceptInvite(V);return Q.send(V1.parse(W))}catch(V){let W=w2(V);return Q.status(W.statusCode).send({error:W.message})}}),$.post("/api/v1/local-control/direct-pair",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=U9.parse(Y.body),W=await J().directPair(V,Y);return Q.send(j6.parse(W))}catch(V){let W=w2(V);return Q.status(W.statusCode).send({error:W.message})}}),$.post("/api/v1/local-control/revoke-peer",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=M4.parse(Y.body),W=await X().revokePeer(V);return Q.send(T6.parse(W))}catch(V){let W=w2(V);return Q.status(W.statusCode).send({error:W.message})}}),$.post("/api/v1/local-control/repair-peer",async(Y,Q)=>{let G=Z(Y);if(!G.ok)return Q.status(403).send({error:G.error,reason:G.reason});try{let V=$6.parse(Y.body),W=await $.ariaPeerLocalControl?.repairPeer(V);return Q.send(s6.parse(W))}catch(V){let W=V instanceof c4?V.statusCode:400;return Q.status(W).send({error:V instanceof Error?V.message:String(V)})}})}var yH;var n70=E(()=>{b0();m4();d70();_J();Jg();MJ();yH=class yH extends Error{statusCode;constructor($,Z){super(Z);this.statusCode=$,this.name="LocalControlRouteError"}}});async function i70($){$.get("/api/v1/runtime/bootstrap",async(Z,J)=>{let X;try{X=await c6($,"Runtime bootstrap")}catch{return J.status(503).send({error:"Runtime bootstrap unavailable"})}return J.send(u8.parse(X))})}var o70=E(()=>{b0();GQ();m4()});function nk0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}async function s70($){$.get("/api/v1/runtime/node",async(Z,J)=>{let X=await c6($,"Runtime node advertisement"),Y=X.nodeId,Q=$7(X),G=X.signingPublicKey,V=X.transportPublicKey,W=$.ariaNetworkManager,H=W?.getConfig?.()??null,K=typeof H?.listenPort==="number"?H.listenPort:X.transportEndpoint.port,z=H?.externalEndpoint&&typeof H.externalEndpoint==="object"&&!Array.isArray(H.externalEndpoint)?nk0(H.externalEndpoint.address):void 0,U=SY({controlHost:X.controlEndpoint.host,externalHost:z});return J.send(C5.parse({nodeId:Y,principalFingerprint:Q,signingPublicKey:G,transportPublicKey:V,transportEndpoint:{host:z??X.transportEndpoint.host,port:K},controlEndpoint:{host:X.controlEndpoint.host,port:X.controlEndpoint.port,tlsCaFingerprint:X.tls.caFingerprint,tlsServerIdentity:Q,protocolVersion:X.protocolVersion,endpointRevision:typeof H?.endpointRevision==="number"?H.endpointRevision:0},displayNameSnapshot:W?.getLocalDisplayNameSnapshot?.()?.trim()||X.displayNameSnapshot||void 0,protocolVersion:X.protocolVersion,publicationRevision:X.bootstrapRevision,...U.length>0?{advertisedHosts:U}:{}}))})}var r70=E(()=>{b0();V8();GQ();m4()});function t70($){if($.ariaJoinControl?.completeJoin)return;N6($,"ariaJoinControl",{completeJoin:async(Z)=>{let J=$.ariaNetworkManager;if(!J?.completeJoin)throw Error("Network manager not available for join completion");let X=await c6($,"Local runtime bootstrap unavailable for join completion"),Y=N8($);if(!Y)throw Error("Principal binding authority unavailable for join completion");let Q=G0.parse(Z.nodeId),G=f0.parse(Z.principalFingerprint),V=x0.parse(Z.peerSigningKey),W=QQ({nodeId:Q,principalFingerprint:G,signingPublicKey:V});if("error"in W)throw Error("Join principalFingerprint must match the signing public key fingerprint");let H=e8.safeParse(Z.peerControlEndpoint);if(!H.success)throw Error("Join control endpoint must advertise tlsServerIdentity");let K=H.data;if(K.tlsServerIdentity!==G)throw Error("Join control endpoint tlsServerIdentity must match the signing principal fingerprint");let z=Z.displayNameSnapshot?.trim()&&Z.displayNameSnapshot.trim().length>0?Z.displayNameSnapshot.trim():Q,U=new M$({ariaHome:$.ariaBasePath,ownerGeneration:X.ownerGeneration}),B=U.readPeerBinding(Q);U.close();let F=Y.commitFirstTrustBind(W,{transportPublicKey:Z.peerPublicKey,continuityRevision:1,endpointHost:Z.peerTransportEndpoint.host,endpointPort:Z.peerTransportEndpoint.port,endpointRevision:K.endpointRevision??0,displayNameSnapshot:z,controlEndpointHost:K.host,controlEndpointPort:K.port,controlTlsCaFingerprint:K.tlsCaFingerprint,projectSigningKey:!1});try{await J.completeJoin({nodeId:Q,principalFingerprint:G,peerPublicKey:Z.peerPublicKey,peerSigningKey:Z.peerSigningKey,peerTransportEndpoint:Z.peerTransportEndpoint,peerControlEndpoint:K,displayNameSnapshot:z,inviteTokenNonce:Z.inviteTokenNonce})}catch(D){throw ik0({ariaHome:$.ariaBasePath,ownerGeneration:X.ownerGeneration,nodeId:Q,previousBinding:B}),D}return $.ariaPeerSigningKeyStore?.set?.({nodeId:F.nodeId,displayName:F.displayNameSnapshot??F.nodeId,signingPublicKey:Z.peerSigningKey}),{effectiveName:F.displayNameSnapshot??z}}})}function ik0($){let Z=new M$({ariaHome:$.ariaHome,ownerGeneration:$.ownerGeneration});try{if($.previousBinding)Z.commitPairContinuity($.previousBinding);else Z.deletePeerBinding($.nodeId)}finally{Z.close()}}var e70=E(()=>{b0();m4();GQ();MJ();O6()});function nF($){return M8.parse({kind:"client",clientId:$})}function iF($,Z){let J=$.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?{...$.metadata}:{};if(J.senderInbox!==void 0)return{...$,metadata:J};return{...$,metadata:{...J,senderInbox:M8.parse(Z)}}}var Xg=E(()=>{b0()});import*as oF from"crypto";import*as fP from"fs";import*as Qg from"path";function J7($){let Z=Qg.join(process.env.HOME??"/tmp",".aria","audit");try{fP.mkdirSync(Z,{recursive:!0});let J={...$,timestamp:Date.now(),event:"join_attempt"};fP.appendFileSync(Qg.join(Z,"network.jsonl"),JSON.stringify(J)+`
|
|
5426
|
-
`)}catch{}}function sk0($){return e8.shape.tlsServerIdentity.parse(Reflect.get($,"principalFingerprint"))}function rk0($){let{ariaMessageStore:Z,ariaNodeId:J}=$;if(!Z||!J)throw new yP;return{messageStore:Z,inboxAddress:M8.parse({kind:"node",nodeId:J})}}function Yg($,Z){let J=$.ariaMessageStore;if(!J)throw new yP;return{messageStore:J,inboxAddress:M8.parse({kind:"client",clientId:Z})}}function tk0($,Z,J){if(J.inboxAddress.kind==="client"&&J.inboxAddress.clientId===Z)return!0;return J.inboxAddress.kind==="node"&&J.inboxAddress.nodeId===$.ariaNodeId}function ek0($){let Z=$.ariaRuntimeOutbox;if(!Z)throw Error("Runtime outbox not available");return Z}function Y50($,Z){let J=ek0($),X=J[Z];if(typeof X!=="function")throw Error(`Runtime outbox ${Z} not available`);return X.bind(J)}async function Q50($){async function*Z(J){let X=J.cursor?.afterCreatedAt??0,Y=new Set,Q=$.ariaInboxEventHub,G;if(Q)G=Q.subscribe({signal:J.signal,predicate:(K)=>tk0($,J.clientId,K)})[Symbol.asyncIterator]();let V=[],W=J.cursor??{afterCreatedAt:0,afterId:""};while(!0){let H=await($.ariaRuntimeMessageControl?.listDirectClientInbox?.({clientId:J.clientId,limit:500,unreadOnly:!1,cursor:W})??Promise.resolve([]));if(H.length===0)break;V.push(...H);let K=H[H.length-1];if(W={afterCreatedAt:K.createdAt,afterId:K.id},H.length<500)break}for(let H of V){if(H.createdAt<X)continue;if(Y.has(H.id))continue;Y.add(H.id),X=H.createdAt,yield H}if(G)try{while(!J.signal?.aborted){let{value:H,done:K}=await G.next();if(K)break;if(Y.has(H.id))continue;Y.add(H.id),X=H.createdAt,yield H}}catch{}}N6($,"ariaRuntimeMessageControl",{sendBestEffort:async(J)=>{let X=G8.parse(J);if(X.recipientInbox?.kind==="client"){let{messageStore:Q}=Yg($,X.recipientInbox.clientId),G=X.rawMessage;if(!G.id||!G.sender?.id||!G.sender?.name||!G.sender?.type||!G.recipient?.id||!G.recipient?.name||!G.type||!G.content)throw Error("Client-targeted delivery requires a complete rawMessage");let V={id:G.id,sender:{id:G.sender.id,name:G.sender.name,type:G.sender.type},recipient:{id:G.recipient.id,name:G.recipient.name},replyTo:G.replyTo,correlationId:G.correlationId,questId:G.questId,type:G.type,content:G.content,metadata:G.metadata,priority:G.priority,signature:G.signature,timestamp:G.timestamp??Date.now()};return Q.store(V,"received",X.recipientInbox),n4.parse(N7({transport:"local_runtime",sessionState:"none",deliveryReadiness:"can_queue_only"}))}let Y=await Y50($,"sendBestEffort")(X.rawMessage);return n4.parse(Y)},sendDurable:async(J)=>{let X=G8.parse(J);if(X.recipientInbox?.kind==="client"){let{messageStore:Q}=Yg($,X.recipientInbox.clientId),G=X.rawMessage;if(!G.id||!G.sender?.id||!G.sender?.name||!G.sender?.type||!G.recipient?.id||!G.recipient?.name||!G.type||!G.content)throw Error("Client-targeted delivery requires a complete rawMessage");let V=G.timestamp??Date.now(),W={id:G.id,sender:{id:G.sender.id,name:G.sender.name,type:G.sender.type},recipient:{id:G.recipient.id,name:G.recipient.name},replyTo:G.replyTo,correlationId:G.correlationId,questId:G.questId,type:G.type,content:G.content,metadata:G.metadata,priority:G.priority,signature:G.signature,timestamp:V};return Q.store(W,"received",X.recipientInbox),i4.parse({...N7({transport:"local_runtime",sessionState:"none",deliveryReadiness:"can_queue_only"}),storedAt:V})}let Y=await Y50($,"sendDurable")(X.rawMessage);return i4.parse(Y)},listDirectClientInbox:async(J)=>{let{messageStore:X}=Yg($,J.clientId),Y=M8.parse({kind:"client",clientId:J.clientId}),Q=Math.min(Math.max(J.limit??100,1),1000),G=J.unreadOnly??!1,V=J.cursor?X.listInboxSince(Y,J.cursor,Q,{unreadOnly:G}):G?X.getUnreadForInbox(Y,Q):X.searchInbox(Y,"",{limit:Q}),W=$.ariaNodeId,H=W?J.cursor?X.listInboxSince(M8.parse({kind:"node",nodeId:W}),J.cursor,Q,{unreadOnly:G}):G?X.getUnreadForInbox(M8.parse({kind:"node",nodeId:W}),Q):X.searchInbox(M8.parse({kind:"node",nodeId:W}),"",{limit:Q}):[],K=new Set;return[...V,...H].filter((U)=>{if(K.has(U.id))return!1;if(J.cursor?.afterCreatedAt!==void 0){if(U.created_at<J.cursor.afterCreatedAt)return!1;if(U.created_at===J.cursor.afterCreatedAt&&J.cursor.afterId!==void 0&&U.id<=J.cursor.afterId)return!1}return K.add(U.id),!0}).sort((U,B)=>U.created_at-B.created_at||U.id.localeCompare(B.id)).slice(0,Q).map((U)=>{let B=null;if(U.metadata)try{let L=JSON.parse(U.metadata).senderInbox;if(L?.kind==="client"&&L.clientId)B=L.clientId}catch{}let F=U.recipient_id,D=typeof F==="string"&&F.startsWith("client-")?F:null;return c8.parse({id:U.id,senderNodeId:U.sender_id,senderDisplayNameSnapshot:U.sender_name,senderType:"sender_type"in U&&typeof U.sender_type==="string"?U.sender_type:void 0,senderClientId:B,recipientClientId:D,inboxAddress:M8.parse({kind:U.inbox_address_kind,...U.inbox_address_kind==="client"?{clientId:U.inbox_address_id}:{nodeId:G0.parse(U.inbox_address_id)}}),type:U.type,content:U.content,priority:"priority"in U&&typeof U.priority==="number"?U.priority:0,createdAt:U.created_at,correlationId:"correlation_id"in U&&typeof U.correlation_id<"u"?U.correlation_id:void 0,replyTo:"reply_to"in U&&typeof U.reply_to<"u"?U.reply_to:void 0})})},subscribeDirectClientInbox:Z,listInbox:async(J)=>{let{messageStore:X,inboxAddress:Y}=rk0($),Q=Math.min(Math.max(J?.limit??100,1),1000);return(J?.unreadOnly??!1?X.getUnreadForInbox(Y,Q):X.searchInbox(Y,"",{limit:Q})).map((W)=>c8.parse({id:W.id,senderNodeId:W.sender_id,senderDisplayNameSnapshot:W.sender_name,senderType:"sender_type"in W&&typeof W.sender_type==="string"?W.sender_type:void 0,inboxAddress:M8.parse({kind:W.inbox_address_kind,...W.inbox_address_kind==="client"?{clientId:W.inbox_address_id}:{nodeId:G0.parse(W.inbox_address_id)}}),type:W.type,content:W.content,priority:"priority"in W&&typeof W.priority==="number"?W.priority:0,createdAt:W.created_at,correlationId:"correlation_id"in W&&typeof W.correlation_id<"u"?W.correlation_id:void 0,replyTo:"reply_to"in W&&typeof W.reply_to<"u"?W.reply_to:void 0}))}}),t70($),$.get("/api/v1/join/challenge",async(J,X)=>{let Y=Date.now();for(let[V,W]of vH)if(Y-W.createdAt>J50)vH.delete(V);if(vH.size>ok0)return X.status(429).send({error:"Too many pending challenges"});let Q=oF.randomBytes(32).toString("hex"),G=oF.randomBytes(16).toString("hex");return vH.set(G,{challenge:Q,createdAt:Y}),X.send({challenge:`${G}:${Q}`,difficulty:X50,expiresIn:J50})}),$.post("/api/v1/join",{schema:{body:WG}},async(J,X)=>{let Y=`join:${J.ip}:${J.body.nodeId}`,Q=Date.now();if(PJ.size>$50/2){for(let[T,k]of PJ.entries())if(k.resetAt<=Q)PJ.delete(T)}let G=PJ.get(Y);if(G&&Q<G.resetAt){if(G.count++,G.count>Z50)return J7({peerLabel:J.body.displayNameSnapshot??J.body.nodeId,ip:J.ip,success:!1,reason:"rate_limited"}),X.status(429).send({error:`Join rate limit exceeded (${Z50}/min)`})}else{PJ.set(Y,{count:1,resetAt:Q+60000});while(PJ.size>$50){let T=PJ.keys().next().value;if(!T)break;PJ.delete(T)}}{let T=J.body.proofOfWork.indexOf(":");if(T<0)return X.status(400).send({error:"Invalid proof-of-work format"});let k=J.body.proofOfWork.slice(0,T),R=J.body.proofOfWork.slice(T+1),a=vH.get(k);if(!a)return X.status(400).send({error:"Invalid or expired proof-of-work challenge"});vH.delete(k);let o=oF.createHash("sha256").update(a.challenge+R).digest("hex"),u="0".repeat(X50);if(!o.startsWith(u))return X.status(400).send({error:"Proof-of-work solution invalid"})}let V=ZX.parse(J.body),{peerPublicKey:W,signingPublicKey:H,nodeId:K,transportEndpoint:z,controlEndpoint:U,displayNameSnapshot:B,inviteTokenNonce:F,protocolVersion:D}=V,O=sk0(J.body);if(!U)return X.status(400).send({error:"Join requires a control endpoint advertisement"});let L=G0.parse(K),q=x0.parse(H);if($.ariaRevocationStore?.isPeerRevoked?.(L))return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"peer_principal_revoked"}),X.status(403).send({error:"Peer has been revoked \u2014 contact network administrator to re-invite"});let A;try{A=bZ(D,"join")}catch(T){return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:`unsupported_protocol_version_${String(D)}`}),X.status(400).send({error:T.message})}let N=$.ariaJoinControl?.completeJoin;if(!N)return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"join_control_unavailable"}),X.status(503).send({error:"Join control not available"});let _;try{_=(await N({nodeId:L,principalFingerprint:O,peerPublicKey:W,peerSigningKey:q,peerTransportEndpoint:z,peerControlEndpoint:U,displayNameSnapshot:B,inviteTokenNonce:F})).effectiveName}catch(T){let k=String(B??K).replace(/[\x00-\x1f]/g,"").slice(0,64),R=String(T.message??"").replace(/[\x00-\x1f]/g,"").slice(0,200);if(J.log.warn(`completeJoin failed for ${k}: ${R}`),R==="Network manager not available for join completion")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"network_manager_unavailable"}),X.status(503).send({error:R});if(R==="Invalid signing public key")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"invalid_signing_public_key"}),X.status(400).send({error:R});if(R==="Join principalFingerprint must match the signing public key fingerprint")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"principal_fingerprint_mismatch"}),X.status(400).send({error:R});if(R==="Join control endpoint must advertise tlsServerIdentity")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"missing_control_tls_identity"}),X.status(400).send({error:R});if(R==="Join control endpoint tlsServerIdentity must match the signing principal fingerprint")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"control_tls_identity_mismatch"}),X.status(400).send({error:R});return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"join_rejected"}),X.status(403).send({error:"Join rejected"})}J7({peerLabel:_,ip:J.ip,success:!0});let M=Math.min(A,a6);return X.status(200).send({joined:!0,nodeId:K,..._?{displayNameSnapshot:_}:{},protocolVersion:M})}),$.get("/api/v1/messages",async(J,X)=>{let Y=eZ($,J);if(!Y.ok)return X.status(403).send({error:Y.error,reason:Y.reason});if(!$.ariaRuntimeMessageControl)return X.status(503).send({error:"Message store not available"});let Q=Math.min(Math.max(parseInt(J.query.limit??"20",10)||20,1),1000),G=J.query.unread!=="false",V;try{V=await $.ariaRuntimeMessageControl.listInbox({limit:Q,unreadOnly:G})}catch(W){if(W instanceof yP)return X.status(503).send({error:"Message store not available"});throw W}return X.send({messages:V,count:V.length})}),$.get("/api/v1/messages/direct-client",async(J,X)=>{let Y=eZ($,J);if(!Y.ok)return X.status(403).send({error:Y.error,reason:Y.reason});if(!$.ariaRuntimeMessageControl?.listDirectClientInbox)return X.status(503).send({error:"Direct client inbox not available"});let Q=Math.min(Math.max(parseInt(J.query.limit??"20",10)||20,1),1000),G=J.query.unread!=="false",V=await $.ariaRuntimeMessageControl.listDirectClientInbox({clientId:Y.clientId,limit:Q,unreadOnly:G});return X.send({messages:V,count:V.length})}),$.post("/api/v1/message/relay",async(J,X)=>{let Y=eZ($,J);if(!Y.ok)return X.status(403).send({error:Y.error,reason:Y.reason});if(!$.ariaRuntimeMessageControl)return X.status(503).send({error:"Runtime outbox not available",delivered:!1});try{let Q=J.body._rawMessage;if(Q&&Q.id&&Q.sender&&Q.recipient&&Q.content){let G=iF(Q,nF(Y.clientId)),V=J.body.deliveryMode==="best_effort"?await $.ariaRuntimeMessageControl.sendBestEffort({rawMessage:G}):await $.ariaRuntimeMessageControl.sendDurable({rawMessage:G});return X.send({id:G.id,...V})}return X.status(400).send({error:"Missing _rawMessage with id, sender, recipient, content"})}catch(Q){return X.status(500).send({error:`Relay send failed: ${Q instanceof Error?Q.message:String(Q)}`,delivered:!1})}})}var PJ,$50=1000,Z50=3,vH,J50=60000,X50=4,ok0=1e4,yP;var G50=E(()=>{b0();m4();e70();_J();Xg();PJ=new Map,vH=new Map;yP=class yP extends Error{constructor(){super("Message store not available");this.name="RuntimeMessageStoreUnavailableError"}}});class Gg{subscribers=new Map;nextId=1;publish($){for(let Z of this.subscribers.values()){if(Z.aborted)continue;if(Z.signal?.aborted){Z.aborted=!0,this.subscribers.delete(Z.id);continue}if(Z.predicate&&!Z.predicate($))continue;if(Z.queue.push($),Z.resolve){let J=Z.resolve;Z.resolve=void 0,J()}}}async*subscribe($={}){let Z=`sub_${this.nextId++}`,J={id:Z,queue:[],predicate:$.predicate,signal:$.signal,aborted:!1};this.subscribers.set(Z,J);let X=()=>{if(J.aborted=!0,this.subscribers.delete(Z),J.resolve){let Y=J.resolve;J.resolve=void 0,Y()}};$.signal?.addEventListener("abort",X,{once:!0});try{while(!J.aborted&&!$.signal?.aborted){if(J.queue.length===0){await new Promise((Q)=>{J.resolve=Q});continue}let Y=J.queue.shift();if(Y)yield Y}}finally{$.signal?.removeEventListener("abort",X),X()}}}function $f0($,Z){let J=N8($,{ownerGeneration:$.ariaOwnerGeneration});if(!J)return;let X=J.resolveVerifiedPrincipalByFingerprint(Z);if(!X||X==="ambiguous")return X;return{nodeId:X.nodeId,displayNameSnapshot:X.displayNameSnapshot?.trim()||X.nodeId,...X.signingPublicKey?{signingPublicKey:x0.parse(X.signingPublicKey)}:{},principalFingerprint:X.principalFingerprint,transportPublicKey:B$.parse(X.transportPublicKey),...X.isLocalAuthority?{isLocalAuthority:!0}:{}}}function Zf0($,Z){let J=N8($)?.resolveRemoteBinding(Z);if(!J)return;return{nodeId:J.nodeId,displayNameSnapshot:J.displayNameSnapshot?.trim()||J.nodeId,...J.signingPublicKey?{signingPublicKey:x0.parse(J.signingPublicKey)}:{},principalFingerprint:J.principalFingerprint,transportPublicKey:B$.parse(J.transportPublicKey)}}function Jf0($){let Z=N8($.server);if(!Z)throw Error("Local principal binding authority unavailable");let J=G0.parse(Z.resolveLocalNodeIdentity().nodeId),X=$.server.ariaRevocationStore?.getPeerRevocationGeneration?.($.targetNodeId)??0;return{localNodeId:J,targetNodeId:$.targetNodeId,revocationGeneration:X+1,operatorConfirmation:$.operatorConfirmation}}function Xf0($,Z){let J=$.ariaBasePath?.trim();if(!J)return;let X=new M$({ariaHome:J});try{let Y=X.readRuntimeOwnerRecord(Z)?.ownerGeneration??0,Q=X.readRuntimeBootstrapRecord(Z)?.ownerGeneration??0,G=Math.max(Y,Q,0);return G>0?G:void 0}finally{X.close()}}function Vg($){return $.payload&&typeof $.payload==="object"&&!Array.isArray($.payload)?$.payload:null}function Wg($,Z){if($.operation!==Z.operation)switch(Z.label){case"peer listing":return{valid:!1,error:"Envelope operation mismatch for peer listing"};case"registration":return{valid:!1,error:"Envelope operation mismatch for registration"};case"revocation":return{valid:!1,error:"Envelope operation mismatch for revocation"}}if($.target.nodeId!==Z.targetNodeId)switch(Z.label){case"peer listing":return{valid:!1,error:"Envelope target mismatch for peer listing"};case"registration":return{valid:!1,error:"Envelope target mismatch for registration"};case"revocation":return{valid:!1,error:"Envelope target mismatch for revocation"}}let J=IY({method:"POST",path:Z.path,body:Z.payload,operation:Z.operation,targetKey:Z.targetNodeId});if($.contextHash!==J)switch(Z.label){case"peer listing":return{valid:!1,error:"Envelope context mismatch for peer listing"};case"registration":return{valid:!1,error:"Register body does not match signed envelope payload"};case"revocation":return{valid:!1,error:"Envelope context mismatch for revocation"}}return{valid:!0}}function Hg($,Z,J){let X,Y=!1,Q,G=aW($,{keyResolver:(V)=>{let W=$f0(Z,V);if(W==="ambiguous"){Y=!0,X=void 0;return}return X=W,X?.signingPublicKey},nonceStore:J,authorize:Z.ariaPeerTrustStore?(V,W,H)=>{let K=G0.safeParse(V.nodeId);if(!K.success||!X)return Q="Unable to resolve authenticated peer principal",!1;if(K.data!==X.nodeId)return Q="Envelope principal claim does not match authenticated durable principal",!1;if(X.isLocalAuthority)return!0;let U={"network.register":"send_message","network.revoke":"revoke_peer","network.list_peers":"send_message","pair.relay":"delegate_task"}[W];return H.nodeId,!U||Z.ariaPeerTrustStore.peerHasCapability(K.data,U)}:(V,W,H)=>{let K=G0.safeParse(V.nodeId);if(H.nodeId,!K.success||!X)return Q="Unable to resolve authenticated peer principal",!1;if(K.data!==X.nodeId)return Q="Envelope principal claim does not match authenticated durable principal",!1;return!0}});if(Y)return{valid:!1,error:"Unable to resolve authenticated peer principal"};if(!G.valid&&Q)return{valid:!1,error:Q};if(G.valid&&X){let V=$.principal?.nodeId?.trim();if(V&&V!==X.nodeId)return{valid:!1,error:"Envelope principal claim does not match authenticated durable principal"};return{...G,principalFingerprint:X.principalFingerprint,principal:X}}return G}function Yf0($,Z){let J=Z.nodeId;if(Z.decision.targetNodeId!==J)throw Error("Revocation decision target mismatch");let X=N8($,{ownerGeneration:$.ariaOwnerGeneration??Xf0($,Z.decision.localNodeId)});if(!X)throw Error("Local principal binding authority unavailable");if($.ariaRevocationStore)$.ariaRevocationStore.revoke({nodeId:J,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{},fingerprint:Z.fingerprint,revokedAt:Z.revokedAt,localNodeId:Z.decision.localNodeId,operatorConfirmation:Z.decision.operatorConfirmation,revocationGeneration:Z.decision.revocationGeneration});return X.recordVerifiedRevocation({nodeId:J,fingerprint:Z.fingerprint,revocationGeneration:Z.decision.revocationGeneration,revokedAt:Z.revokedAt,revokedBy:Z.decision.localNodeId,operatorConfirmation:Z.decision.operatorConfirmation,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{}}),$.ariaPeerSigningKeyStore?.delete(J),$.ariaRelayCleanup?.(J),$.ariaRevocationBroadcast?.({nodeId:J,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{},revokedAt:Z.revokedAt}),{revoked:!0,nodeId:Z.nodeId,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{}}}function Qf0($,Z,J,X){let Y=$.ariaNetworkManager;if(!Y)throw Error("Network manager not available");if(!Y.applyPeerRevocation)throw Error("Network manager missing applyPeerRevocation()");let Q=N8($);if(!Q)throw Error("Local principal binding authority unavailable");let G=G0.parse(Q.resolveLocalNodeIdentity().nodeId),V="local_operator_confirmed",W=G;if(X.envelope){let O=Hg(X.envelope,$,Z);if(!O.valid)throw Error(O.error??"Envelope validation failed");if(!O.principal?.nodeId||O.principal.nodeId!==G)throw Error("Remote revocation not permitted \u2014 revocation is a local operator decision only");if(W=O.principal.nodeId??G,!Vg(X.envelope))throw Error("MutationEnvelope payload must be an object");let q=Wg(X.envelope,{operation:"network.revoke",label:"revocation",path:"/api/v1/network/revoke",targetNodeId:X.nodeId,payload:{nodeId:X.nodeId}});if(!q.valid)throw Error(q.error)}if(!J.check(W))throw Error("Rate limit exceeded for revocations");let H=Zf0($,X.nodeId);if(!H?.nodeId)throw Error("Peer not found");let{nodeId:K,displayNameSnapshot:z,principalFingerprint:U}=H;if(!K||!U)throw Error("Peer not found");let B=G0.parse(K),F=Jf0({server:$,targetNodeId:B,operatorConfirmation:V}),D=Y.applyPeerRevocation({nodeId:B,fingerprint:U});if(!D.revoked)throw Error(D.errorCode==="principal_unresolved"?"Peer principal unresolved":"Peer not found");return Yf0($,{nodeId:B,displayNameSnapshot:z??D.displayNameSnapshot,fingerprint:U,revokedAt:D.revokedAt,decision:F})}async function Gf0($,Z){let J=$.ariaNetworkManager;if(!J)throw Error("Network manager not available");if(!J.applyPeerRegistration)throw Error("Network manager missing applyPeerRegistration()");let X=J.applyPeerRegistration.bind(J),Y=(z)=>{if(!z.registered){let U=String(z.errorCode);if(U==="not_found")throw Error("Peer not found");if(U==="revoked")throw Error("Peer revoked");if(U==="missing_endpoint_revision")throw Error("endpointRevision required for endpoint mutations");if(U==="stale_revision")throw Error("Rejected stale endpoint revision");if(U==="conflicting_revision")throw Error("Rejected conflicting endpoint revision");if(U==="node_id_mismatch")throw Error("Rejected durable nodeId rewrite for authenticated peer");throw Error(`Peer ${U} cannot complete register while awaiting pending_verification state convergence`)}return z},Q=await $.ariaNetworkReadControl?.getPeerView?.(Z.nodeId);if(Q){let{identityState:z}=n2(Q);if(!qG(z))throw Error(`Peer ${Q.status} cannot complete register while awaiting pending_verification state convergence`)}let{endpointHost:G,endpointPort:V}=Z,W=typeof G==="string"&&typeof V==="number",H=$.ariaBasePath,K=null;if(W){if(!H)throw Error("ARIA base path unavailable for endpoint registration");let z=N8($,{ownerGeneration:$.ariaOwnerGeneration});if(!z)throw Error("Principal binding authority unavailable for endpoint registration");try{K=wP({ariaHome:H,ownerGeneration:$.ariaOwnerGeneration,authority:z,nodeId:Z.nodeId,endpointHost:G,endpointPort:V,endpointRevision:Z.endpointRevision??0,apply:({endpointHost:U,endpointPort:B,endpointRevision:F})=>{return Y(X({nodeId:Z.nodeId,endpointHost:U,endpointPort:B,endpointRevision:F}))}}).projected}catch(U){if(U instanceof R2)throw Error(U.message);throw U}}if(K??=Y(X({nodeId:Z.nodeId,...Z.endpointHost!==void 0?{endpointHost:Z.endpointHost}:{},...Z.endpointPort!==void 0?{endpointPort:Z.endpointPort}:{},...Z.endpointRevision!==void 0?{endpointRevision:Z.endpointRevision}:{}})),typeof K.endpointRevision!=="number"||!Number.isInteger(K.endpointRevision)||K.endpointRevision<0)throw Error("Invariant violation: successful registration must include a non-negative endpointRevision");return K}async function V50($){if(kP($),!$.ariaNonceStore)throw Error("DurableNonceStore required for network routes. Decorate server with ariaNonceStore before registering network routes.");if(!$.ariaNonceStore.isDurable)throw Error("DurableNonceStore required \u2014 InMemoryNonceStore is not crash-safe. "+"Use DurableNonceStore backed by SQLite.");let Z=$.ariaNonceStore,J=new t1(10,60000);N6($,"ariaNetworkAdminControl",{revokePeer:async(X)=>Qf0($,Z,J,{nodeId:X.nodeId,envelope:X.envelope,rateLimitFallbackKey:X.rateLimitFallbackKey??"local-runtime"})}),N6($,"ariaNetworkRegistrationControl",{registerPeer:async(X)=>Gf0($,X)}),$.post("/api/v1/network/peers",{schema:{body:{type:"object",properties:{envelope:{type:"object"}}}}},async(X,Y)=>{let Q=$.ariaNetworkReadControl?.listPeers;if(!Q)return Y.status(503).send({error:"Network manager not available"});if(!X.body.envelope)return Y.status(401).send({error:"MutationEnvelope required"});let G=Hg(X.body.envelope,$,Z);if(!G.valid)return Y.status(403).send({error:G.error??"Envelope validation failed"});let V=G0.safeParse(G.principal?.nodeId).data;if(!V)return Y.status(403).send({error:"Unable to resolve authenticated peer principal"});let W=Vg(X.body.envelope);if(!W)return Y.status(400).send({error:"MutationEnvelope payload must be an object"});let H=Wg(X.body.envelope,{operation:"network.list_peers",label:"peer listing",path:"/api/v1/network/peers",targetNodeId:V,payload:W});if(!H.valid)return Y.status(403).send({error:H.error});try{return Y.send({peers:await Q()})}catch(K){let z=K instanceof Error?K.message:String(K);if(z==="Network manager not available")return Y.status(503).send({error:z});throw K}}),$.post("/api/v1/network/register",{schema:{body:{type:"object",required:["nodeId"],properties:{nodeId:{type:"string",minLength:1,maxLength:512},displayNameSnapshot:{type:"string",maxLength:256},endpointHost:{type:"string",maxLength:256},endpointPort:{type:"integer",minimum:1,maximum:65535},endpointRevision:{type:"integer",minimum:0},capabilities:{type:"array",items:{type:"string",maxLength:50},maxItems:20},envelope:{type:"object"}}}}},async(X,Y)=>{let Q=$.ariaNetworkRegistrationControl?.registerPeer;if(!Q)return Y.status(503).send({error:"Network manager not available"});if(!X.body.envelope)return Y.status(401).send({error:"MutationEnvelope required for registration"});let G=Hg(X.body.envelope,$,Z);if(!G.valid)return Y.status(403).send({error:G.error??"Envelope validation failed"});let V=Vg(X.body.envelope);if(!V)return Y.status(400).send({error:"MutationEnvelope payload must be an object"});let W=G.principal?.nodeId;if(!W)return Y.status(403).send({error:"Unable to resolve authenticated peer principal"});let H=G0.parse(W);if(typeof X.body.endpointHost==="string"||typeof X.body.endpointPort==="number"){if(!(typeof X.body.endpointHost==="string"&&typeof X.body.endpointPort==="number"))return Y.status(400).send({error:"endpointHost and endpointPort must be provided together"});if(typeof X.body.endpointRevision!=="number"||!Number.isInteger(X.body.endpointRevision)||X.body.endpointRevision<0)return Y.status(400).send({error:"endpointRevision required for endpoint mutations"})}let z=G0.parse(X.body.nodeId.trim());if(z!==H)return Y.status(403).send({error:"Register body nodeId does not match authenticated durable principal"});let U={nodeId:z};if(typeof X.body.nodeId==="string"&&X.body.nodeId.trim().length>0&&X.body.nodeId.trim()!==W)return Y.status(403).send({error:"Envelope principal claim does not match registration nodeId"});if(typeof X.body.displayNameSnapshot==="string"&&X.body.displayNameSnapshot.trim().length>0)U.displayNameSnapshot=X.body.displayNameSnapshot;if(typeof X.body.endpointHost==="string")U.endpointHost=X.body.endpointHost;if(typeof X.body.endpointPort==="number")U.endpointPort=X.body.endpointPort;if(typeof X.body.endpointRevision==="number")U.endpointRevision=X.body.endpointRevision;if(Array.isArray(X.body.capabilities))U.capabilities=[...X.body.capabilities];let B=Wg(X.body.envelope,{operation:"network.register",label:"registration",path:"/api/v1/network/register",targetNodeId:G0.parse(W),payload:U});if(!B.valid)return Y.status(403).send({error:B.error});let F=typeof V.nodeId==="string"&&V.nodeId.trim().length>0?G0.parse(V.nodeId.trim()):void 0;if(F&&z!==F)return Y.status(403).send({error:"Envelope payload mismatch for registration nodeId"});let D=typeof V.endpointHost==="string"&&V.endpointHost.length>0?V.endpointHost:void 0;if(typeof X.body.endpointHost==="string"&&X.body.endpointHost.length>0&&D&&X.body.endpointHost!==D)return Y.status(403).send({error:"Envelope payload mismatch for registration endpointHost"});let O=typeof V.endpointPort==="number"&&Number.isInteger(V.endpointPort)&&V.endpointPort>=1&&V.endpointPort<=65535?V.endpointPort:void 0;if(typeof X.body.endpointPort==="number"&&O!==void 0&&X.body.endpointPort!==O)return Y.status(403).send({error:"Envelope payload mismatch for registration endpointPort"});let L=typeof V.endpointRevision==="number"&&Number.isInteger(V.endpointRevision)&&V.endpointRevision>=0?V.endpointRevision:void 0;if(typeof X.body.endpointRevision==="number"&&L!==void 0&&X.body.endpointRevision!==L)return Y.status(403).send({error:"Envelope payload mismatch for registration endpointRevision"});try{let q=await Q({nodeId:H,...X.body.endpointHost!==void 0||D!==void 0?{endpointHost:X.body.endpointHost??D}:{},...X.body.endpointPort!==void 0||O!==void 0?{endpointPort:X.body.endpointPort??O}:{},...X.body.endpointRevision!==void 0||L!==void 0?{endpointRevision:X.body.endpointRevision??L}:{}});return Y.send({registered:!0,nodeId:q.nodeId,...q.displayNameSnapshot?{displayNameSnapshot:q.displayNameSnapshot}:{},peerStatus:q.peerStatus,lastSeen:q.lastSeen,heartbeatUpdated:q.heartbeatUpdated,endpointUpdated:q.endpointUpdated,endpointRevision:q.endpointRevision})}catch(q){let A=q instanceof Error?q.message:String(q);if(A==="Network manager not available"||A==="Network manager missing applyPeerRegistration()")return Y.status(503).send({error:A});if(A==="Peer not found")return Y.status(404).send({error:A});if(A==="Peer revoked")return Y.status(409).send({error:A});if(A==="Direct transport endpoint already owned by another peer principal")return Y.status(409).send({error:A});if(A==="endpointRevision required for endpoint mutations")return Y.status(400).send({error:A});if(A==="Rejected durable nodeId rewrite for authenticated peer"||A==="Rejected stale endpoint revision"||A==="Rejected conflicting endpoint revision"||A.includes("cannot complete register while awaiting pending_verification state convergence"))return Y.status(409).send({error:A});throw q}}),$.post("/api/v1/network/revoke",{schema:{body:HG}},async(X,Y)=>{let Q=$.ariaNetworkAdminControl?.revokePeer;if(!Q)return Y.status(503).send({error:"Network manager not available"});try{let G=YX.parse(X.body),V=G0.parse(G.nodeId);return Y.send(await Q({nodeId:V,envelope:G.envelope,rateLimitFallbackKey:X.ip}))}catch(G){let V=G instanceof Error?G.message:String(G);if(V==="Network manager not available"||V==="Network manager missing applyPeerRevocation()")return Y.status(503).send({error:V});if(V.includes("Remote revocation not permitted"))return Y.status(403).send({error:V});if(V==="Peer not found")return Y.status(404).send({error:V});if(V==="Rate limit exceeded for revocations")return Y.status(429).send({error:V});return Y.status(403).send({error:V})}}),$.get("/api/v1/network/revocations",async(X,Y)=>{let Q=eZ($,X);if(!Q.ok)return Y.status(403).send({error:Q.error,reason:Q.reason});let G=$.ariaRevocationStore;if(!G)return Y.status(503).send({error:"Revocation store not available"});return Y.send({revocations:G.list().map((V)=>({nodeId:V.nodeId,...V.displayNameSnapshot?{displayNameSnapshot:V.displayNameSnapshot}:{},fingerprint:V.fingerprint,revokedAt:V.revokedAt,localNodeId:V.localNodeId,operatorConfirmation:V.operatorConfirmation,...V.reason?{reason:V.reason}:{},...typeof V.revocationGeneration==="number"?{revocationGeneration:V.revocationGeneration}:{}}))})})}var W50=E(()=>{V8();b0();m4();_J();Jg();sx();O6();MJ()});function H50($,Z){let J=N8($)?.resolveRemoteBinding(Z);if(!J)return;return{nodeId:J.nodeId,principalFingerprint:J.principalFingerprint,transportPublicKey:B$.parse(J.transportPublicKey),continuityRevision:J.continuityRevision,displayNameSnapshot:J.displayNameSnapshot}}function vP($,Z,J){let X=G0.safeParse(Z);if(!X.success)return{ok:!1,error:"Invalid nodeId"};let Y=N8($);if(!Y)return{ok:!1,error:"Unknown peer"};let Q=Y.resolveNodeIdFromVerifiedPrincipal({claimedNodeId:X.data,signingPublicKey:J});if(!Q)return{ok:!1,error:"Unknown peer"};let G=Vf0(J);if(!G)return{ok:!1,error:"Invalid signing public key"};if(Q.principalFingerprint!==G)return{ok:!1,error:"Signing key mismatch"};return{ok:!0,fingerprint:G,nodeId:Q.nodeId,...Q.displayNameSnapshot?{displayNameSnapshot:Q.displayNameSnapshot}:{}}}var Vf0;var Kg=E(()=>{W8();MJ();Vf0=C2});import*as hH from"crypto";function zf0($,Z){let J=H50($,Z);if(!J)return{ok:!1,error:"Target peer not registered"};return{ok:!0,nodeId:J.nodeId,...J.displayNameSnapshot?{displayNameSnapshot:J.displayNameSnapshot}:{}}}async function K50($){let Z=new Map,J=new NZ;$.decorate("ariaRelayCleanup",(X)=>{let Y=Z.get(X);if(!Y)return;Z.delete(X);try{Y.socket.close()}catch{}}),$.get("/api/v1/relay",{websocket:!0},(X,Y)=>{let Q=!1,G=null,V=null,W=null,H=null,K=null,z=setTimeout(()=>{if(!Q)D4(X,{type:"auth_error",error:"Authentication timeout"}),X.close()},30000);X.on("message",(F)=>{try{let D=typeof F==="string"?F:F.toString(),O=JSON.parse(D);if(!Q)U(O);else B(O)}catch(D){D4(X,{type:"error",error:D instanceof Error?D.message:"Invalid message"})}}),X.on("close",()=>{if(clearTimeout(z),K&&Z.get(K.nodeId)===K)Z.delete(K.nodeId)}),X.on("error",()=>{if(clearTimeout(z),K&&Z.get(K.nodeId)===K)Z.delete(K.nodeId)});function U(F){if(F.type==="auth"){let{nodeId:D,signingPublicKey:O}=F,L=G0.safeParse(D);if(!L.success){D4(X,{type:"auth_error",error:"Invalid nodeId"}),X.close();return}if(typeof O!=="string"){D4(X,{type:"auth_error",error:"Missing signing public key"}),X.close();return}let q=x0.safeParse(O);if(!q.success){D4(X,{type:"auth_error",error:"Invalid signing public key"}),X.close();return}let A=vP($,L.data,q.data);if(!A.ok){D4(X,{type:"auth_error",error:A.error}),X.close();return}V=A.nodeId,W=A.displayNameSnapshot??null,H=q.data,G=hH.randomBytes(Kf0).toString("hex"),D4(X,{type:"challenge",nonce:G})}else if(F.type==="challenge_response"){if(!G||!V||!H){D4(X,{type:"auth_error",error:"No pending challenge"}),X.close();return}let D=F.signature;if(typeof D!=="string"){D4(X,{type:"auth_error",error:"Missing signature"}),X.close();return}if(!Uf0(G,D,H)){D4(X,{type:"auth_error",error:"Invalid signature"}),X.close();return}clearTimeout(z),Q=!0;let O=Z.get(V);if(O)try{O.socket.close()}catch{}let L={nodeId:V,...W?{displayNameSnapshot:W}:{},signingPublicKey:H,socket:X,packetCount:0,windowStart:Date.now()};K=L,Z.set(V,L),D4(X,{type:"auth_ok",nodeId:V,...W?{displayNameSnapshot:W}:{}}),G=null}}function B(F){if(F.type!=="relay"||!K)return;let{toNodeId:D,data:O}=F,L=G0.safeParse(D);if(!L.success){D4(X,{type:"error",error:"Target nodeId required"});return}if(typeof O!=="string")return;let q=Date.now(),A=zf0($,L.data);if(!A.ok){D4(X,{type:"error",error:A.error}),J.record(L.data,!1,0);return}let N=Date.now();if(N-K.windowStart>60000)K.packetCount=0,K.windowStart=N;if(K.packetCount++,K.packetCount>Hf0){D4(X,{type:"error",error:"Rate limit exceeded"});return}if(Math.ceil(O.length*3/4)>Wf0){D4(X,{type:"error",error:"Payload too large"});return}let M=Z.get(A.nodeId);if(!M){D4(X,{type:"peer_offline",nodeId:A.nodeId,...A.displayNameSnapshot?{displayNameSnapshot:A.displayNameSnapshot}:{}}),J.record(A.nodeId,!1,0);return}D4(M.socket,{type:"relay",fromNodeId:K.nodeId,...K.displayNameSnapshot?{displayNameSnapshot:K.displayNameSnapshot}:{},data:O});let T=Date.now()-q;J.record(A.nodeId,!0,T)}})}function D4($,Z){try{$.send(JSON.stringify(Z))}catch{}}function Uf0($,Z,J){try{let X=Buffer.from(J,"base64"),Y=hH.createPublicKey({key:X,format:"der",type:"spki"});return hH.verify(null,Buffer.from($),Y,Buffer.from(Z,"base64"))}catch{return!1}}var Wf0=65535,Hf0=1000,Kf0=32;var z50=E(()=>{V8();b0();Kg();m4()});import zg from"crypto";function U50($){try{return f0.parse(zg.createHash("sha256").update(Buffer.from($,"base64")).digest("hex"))}catch{return}}function B50($,Z){let J=U50($.previousPublicKey);if(!J||J!==$.statement.previousPrincipalFingerprint)return{kind:"fingerprint_key_mismatch",field:"previous"};let X=U50($.newPublicKey);if(!X||X!==$.statement.newPrincipalFingerprint)return{kind:"fingerprint_key_mismatch",field:"new"};if($.statement.previousPrincipalFingerprint!==Z.principalFingerprint)return{kind:"previous_fingerprint_mismatch",expected:Z.principalFingerprint,actual:$.statement.previousPrincipalFingerprint};if($.statement.bindingGeneration<=Z.continuityRevision)return{kind:"generation_not_monotonic",current:Z.continuityRevision,proposed:$.statement.bindingGeneration};if(Z.revocationGeneration!==void 0){if($.statement.revocationGeneration!==Z.revocationGeneration)return{kind:"revocation_generation_mismatch",expected:Z.revocationGeneration,actual:$.statement.revocationGeneration}}let Y=zg.createPublicKey({key:Buffer.from($.previousPublicKey,"base64"),format:"der",type:"spki"});if(!JP($.statement,$.delegationSignature,Y))return{kind:"delegation_signature_invalid"};let Q=zg.createPublicKey({key:Buffer.from($.newPublicKey,"base64"),format:"der",type:"spki"});if(!JP($.statement,$.acceptanceSignature,Q))return{kind:"acceptance_signature_invalid"};return $}var F50=E(()=>{b0();Vx()});import X7 from"crypto";import*as q50 from"os";import*as E50 from"path";import*as Bf0 from"http";import*as Ff0 from"https";function hP($){return{id:$.id,nodeId:G0.parse($.nodeId),displayNameSnapshot:$.displayNameSnapshot,principalFingerprint:f0.parse($.principalFingerprint)}}function WQ($,Z,J){Ef0({nodeStore:$,nodeId:Z,previousBinding:J.binding})}function Ug($,Z){if(!($ instanceof Error))return null;if($.message.includes("direct transport endpoint conflict"))return{statusCode:409,message:"Direct transport endpoint already owned by another peer principal"};if($.message.includes("Peer binding continuity revision conflict")||$.message.includes("continuity revision conflict"))return{statusCode:409,message:Z};return null}async function N50($,Z){let{targetNodeId:J,signingPublicKey:X}=Z;try{let G=await c6($,"Pair relay target bootstrap unavailable");if(G.nodeId.trim()===J)return G.signingPublicKey===X?{status:"found"}:{status:"mismatch"}}catch{}let Y=N8($);if(!Y)return{status:"missing"};if(!Y.resolveContinuityBase(J))return{status:"missing"};return Y.resolveNodeIdFromVerifiedPrincipal({claimedNodeId:J,signingPublicKey:X})?{status:"found"}:{status:"mismatch"}}function Af0($,Z,J){let X=gW(),Y;if(J)try{Y=cW(X.publicKey,Buffer.from(J,"base64"))}catch{}let Q=mW(X.privateKey,$),G=ZM(Z,Q);return{encryptedToken:G.ciphertext,ephemeralPublicKey:X.publicKey,ephemeralKeySignature:Y,nonce:G.nonce,tag:G.tag}}function i0($,Z){let J=Error(Z);return J.statusCode=$,J}function sF($,Z=500){return typeof $==="object"&&$!==null&&"statusCode"in $&&typeof $.statusCode==="number"?$.statusCode??Z:Z}function Bg($,Z){let J=$.safeParse(Z);if(J.success)return J.data;let X=J.error.issues[0],Y=X?.path.join("."),Q=X?Y&&Y.length>0?`${Y}: ${X.message}`:X.message:"Invalid request";throw i0(400,Q)}function A50($){return{nodeId:$.nodeId,principalFingerprint:$.principalFingerprint,transportPublicKey:$.transportPublicKey,continuityRevision:$.continuityRevision,displayNameSnapshot:$.displayNameSnapshot,controlEndpointHost:$.controlEndpoint.host,controlEndpointPort:$.controlEndpoint.port,controlTlsCaFingerprint:$.controlEndpoint.tlsCaFingerprint}}function qf0($){let Z=$.peerInfo.controlEndpoint;if(Z&&typeof Z==="object"&&typeof Z.host==="string"&&typeof Z.port==="number"&&typeof Z.tlsCaFingerprint==="string"&&typeof Z.tlsServerIdentity==="string"&&typeof Z.protocolVersion==="number")return Z;throw i0(500,"Accepted invite did not return the remote control endpoint tlsServerIdentity for durable peer binding")}function Ef0($){if($.previousBinding)$.nodeStore.commitPairContinuity($.previousBinding);else $.nodeStore.deletePeerBinding($.nodeId)}function _f0($){if(!$)throw i0(503,"Network manager not available");let Z=[];if(typeof $.applyDirectPairActivation!=="function")Z.push("applyDirectPairActivation");if(Z.length>0)throw i0(503,`Network manager missing direct-pair activation capabilities: ${Z.join(", ")}`);return $}async function _50($){let Z=new Map,J=$.ariaDurablePairStore,X=new Map,Y=new Map,Q=0,G=new Map,V=new Map;function W(j){return{id:j.id,nodeId:G0.parse(j.nodeId),displayNameSnapshot:j.displayNameSnapshot,principalFingerprint:j.principalFingerprint,signingPublicKey:j.signingPublicKey,port:j.port,host:j.host,responderControlHostHint:j.responderControlHostHint,ingressHost:j.ingressHost,createdAt:j.createdAt,expiresAt:j.expiresAt,ephemeralPublicKey:j.ephemeralPublicKey,ephemeralKeySignature:j.ephemeralKeySignature,caCert:j.caCert,relayed:j.relayed??!1,targetNodeId:j.relayTargetNodeId?G0.parse(j.relayTargetNodeId):void 0}}function H(j){return{id:j.id,nodeId:j.nodeId,displayNameSnapshot:j.displayNameSnapshot,principalFingerprint:j.principalFingerprint,signingPublicKey:x0.parse(j.signingPublicKey),port:j.port,host:j.host,responderControlHostHint:j.responderControlHostHint,ingressHost:j.ingressHost??j.host,createdAt:j.createdAt,expiresAt:j.expiresAt,ephemeralPublicKey:j.ephemeralPublicKey,ephemeralKeySignature:j.ephemeralKeySignature,caCert:j.caCert,relayed:j.relayed,relayTargetNodeId:j.targetNodeId}}function K(j){if(X.set(j.id,j),j.relayed&&j.relayTargetNodeId){let b=V.get(j.relayTargetNodeId)??[];b.push(j),V.set(j.relayTargetNodeId,b)}J?.store(W(j))}function z(j,b){if(!b)return;let v=V.get(b);if(!v)return;let c=v.filter((C)=>C.id!==j);if(c.length===0)V.delete(b);else V.set(b,c)}function U(j,b){X.delete(j),z(j,b),J?.delete(j)}function B(){if(!J)return;J.cleanup();for(let j of J.findAllActive()){let b=H(j);if(X.set(b.id,b),b.relayed&&b.relayTargetNodeId){let v=V.get(b.relayTargetNodeId)??[];v.push(b),V.set(b.relayTargetNodeId,v)}}}B();function F(j){let b=(v)=>v==="127.0.0.1"||v==="::1"||v==="::ffff:127.0.0.1"||v==="localhost";return b(j.raw.socket?.remoteAddress)||b(j.ip)}function D(j){let{nodeId:b,signingPublicKey:v}=j,c=N8($);if(!c)return{ok:!0};if(c?.resolveContinuityBase(b)&&!c.resolveNodeIdFromVerifiedPrincipal({claimedNodeId:b,signingPublicKey:v}))return{ok:!1,error:`Peer principal "${b}" identity mismatch for signing key`};return{ok:!0}}function O(j){return j.peerDisplayName?.trim()||j.peerNodeId.trim()}async function L(j){let{networkManager:b,payload:v,requestIp:c,isLocalCall:C}=j,f=_f0(b),{peerWgPubkey:g,peerSigningPubkey:l,transportEndpoint:$0,controlEndpoint:Y0,psk:x}=v,r=x0.parse(l);try{if(!Y0.tlsServerIdentity?.trim())throw i0(400,"Accept invite requires controlEndpoint.tlsServerIdentity");bZ(Y0.protocolVersion,"pair control endpoint")}catch(L0){throw i0(400,L0.message)}let J0=f.getConfig?.(),X0=k(),n=J0?.publicKey??X0?.publicKey,K0=(typeof J0?.signingPublicKey==="string"?x0.safeParse(J0.signingPublicKey).data:void 0)??X0?.signingPublicKey;if(n&&g===n||K0&&r===K0)throw i0(409,"Direct pairing payload matches the local machine identity");let z0=O(v),O0=G0.parse(v.peerNodeId),R0=C9(r);if(!R0||v.principalFingerprint!==R0)throw i0(400,"Direct pair principal fingerprint mismatch");if(!D({nodeId:O0,signingPublicKey:r}).ok)throw P.warn(`[pair/direct] Rejected signing key overwrite for peer "${z0}" \u2014 use interactive pairing for key rotation`),i0(409,`Signing key identity mismatch for peer "${z0}" \u2014 revoke and re-pair required`);let Z0=C?$0.host:c||$0.host,H0=N8($);if(!H0)throw i0(503,"Principal binding authority unavailable for direct pair activation");let B0=QQ({nodeId:O0,principalFingerprint:f0.parse(v.principalFingerprint),signingPublicKey:r});if("error"in B0)throw i0(400,"Direct pair principal fingerprint mismatch");let F0=$.ariaBasePath,V0=$.ariaRuntimeOwnerGeneration??$.ariaOwnerGeneration;if(!F0)throw i0(503,"ARIA base path unavailable for direct pair activation");let D0=new M$({ariaHome:F0,...V0!==void 0?{ownerGeneration:V0}:{}}),C0=D0.readPeerBinding(O0);D0.close();let _0=C0&&C0.principalFingerprint===B0.principalFingerprint&&C0.transportPublicKey===g?C0.continuityRevision:(C0?.continuityRevision??0)+1;try{H0.commitFirstTrustBind(B0,{transportPublicKey:g,continuityRevision:_0,endpointHost:Z0,endpointPort:$0.port,endpointRevision:Y0.endpointRevision??C0?.endpointRevision??0,displayNameSnapshot:z0,controlEndpointHost:Y0.host,controlEndpointPort:Y0.port,controlTlsCaFingerprint:Y0.tlsCaFingerprint,projectSigningKey:!1})}catch(L0){let P0=Ug(L0,`Direct pair continuity conflict for peer "${z0}"`);if(P0)throw i0(P0.statusCode,P0.message);throw L0}try{await f.applyDirectPairActivation({nodeId:O0,displayNameSnapshot:z0,peerPublicKey:g,signingPublicKey:r,transportEndpoint:{host:Z0,port:$0.port},controlEndpoint:Y0,presharedKey:x})}catch(L0){if(V0!==void 0){let P0=new M$({ariaHome:F0,ownerGeneration:V0});try{WQ(P0,O0,{binding:C0})}finally{P0.close()}}throw L0}return{received:!0,pairingProofState:"pending_verification"}}function q(j){if(Z.size>=O50&&!Z.has(j)){let f=Date.now();for(let[g,l]of Z)if(f>l.resetAt)Z.delete(g);if(Z.size>=O50){let g=Z.keys().next().value;if(g)Z.delete(g)}}let b=Date.now(),v=Z.get(j);if(!v||b>v.resetAt)return Z.set(j,{count:1,resetAt:b+Nf0}),!0;let C=j==="127.0.0.1"||j==="::1"||j==="::ffff:127.0.0.1"||j==="localhost"?Of0:Df0;if(v.count>=C)return!1;return v.count++,!0}let A=setInterval(()=>{let j=Date.now();J?.cleanup();for(let[b,v]of X)if(j>v.expiresAt){U(b,v.relayTargetNodeId);let c=Y.get(b);if(c)clearTimeout(c.timer),c.resolve({accepted:!1}),Y.delete(b)}for(let[b,v]of Z)if(j>v.resetAt)Z.delete(b);for(let[b]of G)if(!X.has(b))G.delete(b)},60000);A.unref(),$.addHook("onClose",()=>{clearInterval(A);for(let[,j]of Y)clearTimeout(j.timer)});async function N(){let j;try{j=await c6($,"Local pair bootstrap")}catch{throw i0(503,"Runtime bootstrap unavailable \u2014 pairing requires bootstrap authority")}if(j.phase==="degraded"||j.degradedReason||j.failedPhase)throw i0(503,"Runtime bootstrap is not healthy enough for pairing");let b=j.tls.caFingerprint.trim().toLowerCase(),v=t7(j.tls.caCertPem).toLowerCase();if(b!==v)throw i0(503,"Runtime bootstrap advertised an inconsistent TLS fingerprint");return j}function _(j,b,v,c){let C=b.getConfig?.(),f=v?.trim().replace(/^\[|\]$/g,""),g=f&&(f==="localhost"||O8(f))?f:void 0;return{host:VQ({ingressHost:c??g,peerHost:g,externalHost:C?.externalEndpoint?.address?.trim()??j.controlEndpoint.host}),port:j.controlEndpoint.port,tlsCaFingerprint:d$.parse(j.tls.caFingerprint),tlsServerIdentity:$7(j),protocolVersion:j.protocolVersion,endpointRevision:C?.endpointRevision??0}}function M(j){let b=j.hostname?.trim().replace(/^\[|\]$/g,"");if(!b)return;if(b==="localhost"||O8(b))return b;return}function T(){return $.ariaNetworkManager?.getConfig?.()?.coordinationUrl||void 0}function k(){let j=$.ariaBasePath?.trim(),b=$.ariaNetworkManager?.getConfig?.(),v,c,C,f;if(j){let $0=new M$({ariaHome:j});try{let Y0=$0.readNodeMetadata();if(Y0){v=Y0.nodeId;let x=$0.readRuntimeBootstrapRecord(Y0.nodeId);c=x?.displayNameSnapshot,C=x?.transportPublicKey,f=x?.signingPublicKey}}finally{$0.close()}}let g=v?.trim()??$.ariaNodeId?.trim()??b?.nodeId?.trim(),l=c?.trim()??$.ariaNetworkManager?.getLocalDisplayNameSnapshot?.()?.trim();if(!b&&!v&&!l)return null;return{nodeId:g,displayNameSnapshot:l,publicKey:C??(typeof b?.publicKey==="string"&&b.publicKey.trim().length>0?b.publicKey:void 0),signingPublicKey:f??(typeof b?.signingPublicKey==="string"?x0.safeParse(b.signingPublicKey.trim()).data:void 0),signingPrivateKey:typeof b?.signingPrivateKey==="string"&&b.signingPrivateKey.trim().length>0?b.signingPrivateKey:void 0}}function R(j,b){if(!j)return{ok:!1,status:401,error:"MutationEnvelope required for direct pairing"};let v=iW(j.payload);if(!v.ok)return{ok:!1,status:400,error:v.error};let c=v.data,C=$.ariaNonceStore;if(!C||typeof C.consume!=="function"||typeof C.isConsumed!=="function"||!C.isDurable)return{ok:!1,status:503,error:"Durable nonce store required for direct pairing"};let f=F(b),g=k(),l=g?.nodeId,$0=x0.parse(c.peerSigningPubkey),Y0=f?[g?.signingPublicKey,$0].filter((X0)=>Boolean(X0)):[$0],x=f?new Set([l,c.peerNodeId].filter((X0)=>Boolean(X0))):new Set([c.peerNodeId]);if(Y0.length===0)return{ok:!1,status:503,error:"Signing key unavailable for direct pairing"};if(!l)return{ok:!1,status:503,error:"Local node identity unavailable for direct pairing"};if(j.operation!=="pair.direct")return{ok:!1,status:403,error:"Direct pairing envelope operation mismatch"};if(j.target.nodeId!==l)return{ok:!1,status:403,error:"Direct pairing envelope target mismatch"};if(!x.has(j.principal.nodeId))return{ok:!1,status:403,error:"Direct pairing envelope principal mismatch"};if(g?.publicKey&&j.target.transportPublicKey!==g.publicKey)return{ok:!1,status:403,error:"Direct pairing envelope target transport mismatch"};if(!Y0.some((X0)=>C9(X0)===j.principal.principalFingerprint))return{ok:!1,status:403,error:"Direct pairing envelope fingerprint mismatch"};let r=IY({method:"POST",path:"/api/v1/pair/direct",body:{...c},operation:"pair.direct",targetKey:l});if(j.contextHash!==r)return{ok:!1,status:403,error:"Direct pairing envelope context mismatch"};let J0=aW(j,{keyResolver:(X0)=>{let n=f0.safeParse(X0);if(!n.success)return;return Y0.find((K0)=>C9(K0)===n.data)},nonceStore:C,namespace:"mesh"});if(!J0.valid)return{ok:!1,status:403,error:J0.error??"Direct pairing envelope validation failed"};return{ok:!0,payload:c}}async function a(){let j=Date.now(),b=[];for(let[v,c]of X)if(j>c.expiresAt)U(v,c.relayTargetNodeId);else if(!c.relayed)b.push(hP(c));for(let[,v]of V)for(let c of v)if(j<c.expiresAt)b.push(hP(c));return b}async function o(j){let b=VX.parse(j),v=G0.parse(k()?.nodeId??(await N()).nodeId),c=X.get(b.id);if(c)U(b.id,c.relayTargetNodeId);let{ingressHost:C,displayNameSnapshot:f,...g}=b;K({...g,displayNameSnapshot:f??b.nodeId,ingressHost:C,host:C,createdAt:Date.now(),relayed:!0,relayTargetNodeId:v})}async function u(j){let{requestId:b,accepted:v}=j,c=X.get(b);if(!c)throw i0(404,"Pair request not found or expired");if(Date.now()>c.expiresAt)throw U(b,c.relayTargetNodeId),i0(404,"Pair request not found or expired");if(!v)return U(b,c.relayTargetNodeId),await S(b,c,{accepted:!1}),{accepted:!1};let C=$.ariaNetworkManager;if(!C)throw i0(503,"Network manager not available");if(!c.ephemeralPublicKey)throw i0(400,"Encrypted pairing required \u2014 ephemeralPublicKey missing from pair request");if(!c.ephemeralKeySignature)throw i0(400,"Signed ephemeral key required \u2014 ephemeralKeySignature missing");if(!I(c.ephemeralPublicKey,c.ephemeralKeySignature,c.signingPublicKey))throw i0(400,"Ephemeral key signature verification failed \u2014 possible MITM");let g=D({nodeId:G0.parse(c.nodeId),signingPublicKey:c.signingPublicKey});if(!g.ok)throw i0(409,g.error);let l=C.getConfig(),$0=await N(),Y0=k(),x=$0.signingPublicKey?.trim()??l?.signingPublicKey??Y0?.signingPublicKey??"",r=$0.displayNameSnapshot?.trim()||Y0?.displayNameSnapshot?.trim()||void 0,J0=$0.tls.caCertPem,X0=l?.signingPrivateKey??Y0?.signingPrivateKey??"";if(!x||!X0)throw Error("Hard cutover requires the responder signing identity to build a principal-addressed invite");let n=G0.parse($0.nodeId);if(!r)throw Error("Hard cutover requires the responder display snapshot to build a principal-addressed invite");let{token:K0}=C.invite(c.displayNameSnapshot,{nodeId:c.nodeId,durationMs:xP,controlEndpoint:_($0,C,c.responderControlHostHint,c.ingressHost),caCert:$0.tls.caCertPem,transportHostOverride:c.responderControlHostHint??c.ingressHost}),z0=OM(DM({issuerNodeId:n,issuerDisplayName:r,issuerSigningPublicKey:x,audienceNodeId:c.nodeId,audienceDisplayName:c.displayNameSnapshot,initialTier:"member",namespace:"default",expiresAt:c.expiresAt,transportInviteToken:K0},X0)),O0=Af0(c.ephemeralPublicKey,z0,X0),R0={accepted:!0,encryptedToken:O0.encryptedToken,ephemeralPublicKey:O0.ephemeralPublicKey,ephemeralKeySignature:O0.ephemeralKeySignature,nonce:O0.nonce,tag:O0.tag,caCert:J0};return await S(b,c,R0),{accepted:!0,inviteToken:z0}}async function w(j){let{inviteToken:b,nodeId:v,displayNameSnapshot:c,transportEndpoint:C,controlEndpoint:f,continuity:g}=j;try{bZ(f.protocolVersion,"pair control endpoint")}catch(_$){throw i0(400,_$.message)}let l=$.ariaNetworkManager;if(!l?.acceptInvite)throw i0(503,"Network manager or acceptInvite not available");let $0,Y0,x,r=oW(b);if(!r)throw i0(400,"Invalid invite token: unsupported token format");let J0=$.ariaInviteConsumeLedger,X0;try{X0=await c6($,"Local runtime bootstrap unavailable for invite validation")}catch(_$){throw i0(503,_$.message)}let n=X0.nodeId.trim(),K0=X0.displayNameSnapshot?.trim()??n;if(r.claims.nonce&&J0?.isConsumed(r.claims.nonce))throw i0(400,"Invalid invite token: Invite token already consumed (nonce reuse)");let z0=NM(r,{isNonceConsumed:(_$)=>J0?.isConsumed(_$)??!1,myNodeId:n});if(!z0.valid)throw P.warn(`[pair] V4 invite validation failed: ${z0.error} (localNodeId=${n}, localDisplayNameSnapshot=${K0}, audienceNodeId=${r.claims.audienceNodeId})`),i0(400,`Invalid invite token: ${z0.error}`);if($0=typeof r.claims.transportInviteToken==="string"?r.claims.transportInviteToken:void 0,!$0)throw i0(400,"Invalid invite token: missing embedded transport token");if(r.claims.nonce)Y0=r.claims.nonce;let O0=r.claims.issuerNodeId?.trim();if(!O0)throw i0(400,"Invite token did not carry issuer nodeId");if(x=O0,v!==O0)throw i0(400,"Invite token issuer nodeId mismatch");let R0=x0.safeParse(r.claims.issuerSigningPublicKey?.trim()).data;if(!R0)throw i0(400,"Invite token did not carry issuer signing public key");let I0=C9(R0);if(!I0)throw i0(400,"Invite token carried an invalid issuer signing public key");let Z0=f0.parse(I0),H0=typeof c==="string"&&c.trim().length>0?c.trim():typeof r.claims.issuerDisplayName==="string"&&r.claims.issuerDisplayName.trim().length>0?r.claims.issuerDisplayName.trim():O0,B0=g?a2.parse(g):void 0,F0=B0?.statement,V0=F0?.bindingGeneration??1,D0=$.ariaBasePath??E50.join(q50.homedir(),".aria"),C0=G0.parse(O0),_0=N8($);if(!_0)throw i0(503,"Principal binding authority unavailable for invite acceptance");let L0=$.ariaRevocationStore?.isPeerRevoked?.(C0)===!0,P0=L0?$.ariaRevocationStore?.getPeerRevocationGeneration?.(C0)??null:null;if(L0&&!B0)throw i0(409,"Peer is revoked; continuity approval is required before re-binding nodeId");if(B0){if(!F0||F0.nodeId!==O0)throw i0(400,"Continuity bind nodeId mismatch");if(F0.newPrincipalFingerprint!==Z0)throw _0.recordRevocationConflict({nodeId:C0,previousFingerprint:Z0,conflictingFingerprint:F0.newPrincipalFingerprint,reason:"continuity bind principal fingerprint mismatch"}),i0(409,"Continuity bind principal fingerprint mismatch");if(L0&&P0!==null&&F0.revocationGeneration!==P0)throw i0(409,"Continuity bind is stale");let _$=_0.resolveRemoteBinding(C0);if(_$&&_$.continuityRevision>V0)throw i0(409,"Continuity bind is stale");if(_$&&_$.continuityRevision===V0&&F0.newTransportPublicKey&&!wF(_$,A50({nodeId:C0,principalFingerprint:Z0,transportPublicKey:F0.newTransportPublicKey,continuityRevision:V0,displayNameSnapshot:H0,controlEndpoint:f})))throw i0(409,"Continuity bind is stale")}let c0=await l.acceptInvite($0,{nodeId:G0.parse(O0),displayNameSnapshot:H0,transportEndpoint:C,controlEndpoint:f}),z$=c0.name??H0,A0=B$.safeParse(c0.publicKey).data;if(!A0)throw i0(500,"Accepted invite did not return transport public key for continuity commit");let u0=Z0,U$=qf0({peerInfo:c0}),r0=$.ariaRuntimeOwnerGeneration??$.ariaOwnerGeneration;if(r0===void 0)throw i0(503,"Runtime owner generation unavailable for durable invite acceptance");let V$=new M$({ariaHome:D0,ownerGeneration:r0});try{let _$=_0.resolveRemoteBinding(C0),r8={binding:_$??null};if(B0&&_$&&_$.continuityRevision>V0)throw i0(409,"Continuity bind is stale");let p$=A50({nodeId:C0,principalFingerprint:u0,transportPublicKey:A0,continuityRevision:V0,displayNameSnapshot:z$,controlEndpoint:U$});if(_$&&_$.continuityRevision===V0&&!wF(_$,p$))throw i0(409,"Continuity bind is stale");if(B0){if(!_$)throw i0(409,"Continuity bind requires an existing peer binding");let c$=B50(B0,{principalFingerprint:_$.principalFingerprint,continuityRevision:_$.continuityRevision});if("kind"in c$)throw i0({delegation_signature_invalid:403,acceptance_signature_invalid:403,fingerprint_key_mismatch:403,generation_not_monotonic:409,previous_fingerprint_mismatch:409}[c$.kind]??403,`Continuity bind verification failed: ${c$.kind}`);try{if(_0.commitVerifiedContinuityBind(C0,c$,{transportPublicKey:A0,endpointHost:C.host,endpointPort:C.port,endpointRevision:f.endpointRevision??0,displayNameSnapshot:z$,controlEndpointHost:f.host,controlEndpointPort:f.port,controlTlsCaFingerprint:f.tlsCaFingerprint,projectSigningKey:!1}).continuityRevision!==V0)throw i0(409,"Continuity bind is stale");if(L0&&$.ariaRevocationStore?.isPeerRevoked?.(C0)===!0)$.ariaRevocationStore.clearRevocationForNodeId?.(C0,F0.revocationGeneration)}catch(z9){let d4=Ug(z9,"Continuity bind is stale");if(d4?.message==="Direct transport endpoint already owned by another peer principal")throw WQ(V$,C0,r8),i0(d4.statusCode,d4.message);if(z9 instanceof Error&&z9.message.includes("could not clear revoked principal binding"))throw _0.recordRevocationConflict({nodeId:C0,previousFingerprint:Z0,conflictingFingerprint:F0?.newPrincipalFingerprint??u0,reason:"continuity bind could not clear revoked principal binding"}),WQ(V$,C0,r8),i0(409,"Continuity bind could not clear revoked principal binding");if(d4)throw WQ(V$,C0,r8),i0(d4.statusCode,d4.message);throw WQ(V$,C0,r8),z9}}else try{let c$=QQ({nodeId:C0,principalFingerprint:u0,signingPublicKey:R0});if("error"in c$)throw i0(400,"Invite token signing principal fingerprint mismatch");_0.commitFirstTrustBind(c$,{transportPublicKey:p$.transportPublicKey,continuityRevision:p$.continuityRevision,endpointHost:C.host,endpointPort:C.port,endpointRevision:f.endpointRevision??0,displayNameSnapshot:p$.displayNameSnapshot,controlEndpointHost:p$.controlEndpointHost,controlEndpointPort:p$.controlEndpointPort,controlTlsCaFingerprint:p$.controlTlsCaFingerprint,projectSigningKey:!1})}catch(c$){let z9=Ug(c$,"Continuity proposal is stale");if(z9)throw WQ(V$,C0,r8),i0(z9.statusCode,z9.message);throw WQ(V$,C0,r8),c$}}finally{V$.close()}if(Y0)$.ariaInviteConsumeLedger?.consume(Y0,x??"unknown",n);return{success:!0,nodeId:C0,...z$?{displayNameSnapshot:z$}:{}}}async function m(j,b={ip:"127.0.0.1",raw:{socket:{remoteAddress:"127.0.0.1"}}}){let v=$.ariaNetworkManager;if(!v)throw i0(503,"Network manager not available");let c=F(b),C=R(j.envelope,b),f=iW(j),g=f.ok?"Invalid direct pairing payload":f.error;if(!q(b.ip))throw i0(429,"Too many pair requests. Try again in 1 minute.");if(!c&&!C.ok)throw i0(C.status,C.error);let l=C.ok?C.payload:f.ok?f.data:null;if(!l)throw i0(400,g);return L({networkManager:v,payload:l,requestIp:b.ip,isLocalCall:c})}N6($,"ariaPairControl",{listPendingPairRequests:async()=>a(),ingestRelayedPairRequest:async(j)=>o(j),respondToPairRequest:async(j)=>u(j),acceptInvite:async(j)=>w(j),directPair:async(j,b)=>m(j,b)});function I(j,b,v){try{let c=X7.createPublicKey({key:Buffer.from(v,"base64"),format:"der",type:"spki"});return X7.verify(null,Buffer.from(j,"base64"),c,Buffer.from(b,"base64"))}catch{return!1}}async function S(j,b,v){let c=Y.get(j);if(c)clearTimeout(c.timer),c.resolve(v),Y.delete(j),G.delete(j),U(j,b.relayTargetNodeId);else G.set(j,v);if(z(j,b.relayTargetNodeId),b.relayed){let C=T();if(C)try{let f=new URL(`${C}/api/v1/pair/relay-response`),g=f.protocol==="https:"?Ff0:Bf0,l,$0;try{let x=k(),r=x0.safeParse($.ariaNetworkManager?.getConfig?.()?.signingPublicKey).data,J0=$.ariaNetworkManager?.getConfig?.()?.signingPrivateKey??x?.signingPrivateKey;if(J0){let X0=X7.createPrivateKey({key:Buffer.from(J0,"base64"),format:"der",type:"pkcs8"}),n=`${j}:${v.accepted}`;l=X7.sign(null,Buffer.from(n,"utf8"),X0).toString("base64"),$0=r??x?.signingPublicKey}}catch{return}if(!l||!$0)return;let Y0=JSON.stringify({requestId:j,accepted:v.accepted,responseSignature:l,responderSigningKey:$0,encryptedToken:v.encryptedToken,ephemeralPublicKey:v.ephemeralPublicKey,ephemeralKeySignature:v.ephemeralKeySignature,nonce:v.nonce,tag:v.tag,caCert:v.caCert});await new Promise((x,r)=>{let J0=g.request(f,{method:"POST",headers:{"Content-Type":"application/json"}},(X0)=>{X0.resume(),X0.on("end",x)});J0.on("error",r),J0.write(Y0),J0.end()})}catch{}}}$.post("/api/v1/pair/request",async(j,b)=>{try{let v=Bg(QX,j.body);if(!q(j.ip))return b.status(429).send({error:"Too many pair requests. Try again in 1 minute."});let{displayNameSnapshot:c,nodeId:C,signingPublicKey:f,port:g,ephemeralPublicKey:l,ephemeralKeySignature:$0,caCert:Y0}=v,x=j.ip,r=G0.parse(C.trim()),J0=M(j),X0=VQ({ingressHost:j.raw.socket?.localAddress,peerHost:j.ip,externalHost:J0}),n=C9(f);if(!n)return b.status(400).send({error:"Invalid signingPublicKey"});let K0=await N();if(X.size>=L50)return b.status(503).send({error:"Too many pending pair requests. Try again later."});for(let[,F0]of X)if(F0.nodeId===r&&Date.now()<F0.expiresAt)return b.status(409).send({error:"Pair request for this peer principal already pending"});let z0=X7.randomBytes(16).toString("hex"),O0=Date.now();K({id:z0,nodeId:r,displayNameSnapshot:c,principalFingerprint:n,signingPublicKey:f,port:g,host:x,responderControlHostHint:J0,ingressHost:X0,createdAt:O0,expiresAt:O0+xP,ephemeralPublicKey:l,ephemeralKeySignature:$0,caCert:Y0});let I0=$.ariaNetworkManager?.getConfig(),Z0=I0?.signingPublicKey?X7.createHash("sha256").update(Buffer.from(I0.signingPublicKey,"base64")).digest("hex"):"",H0=K0.tls.caCertPem;if(v.wait===!0){let F0=await new Promise((V0)=>{let D0=setTimeout(()=>{Y.delete(z0),V0(null)},D50);Y.set(z0,{resolve:V0,timer:D0})});if(U(z0),F0?.accepted)return b.send({requestId:z0,status:"accepted",responderFingerprint:Z0,protocolVersion:2,...H0&&{caCert:H0},...F0});return b.send({requestId:z0,status:"rejected",responderFingerprint:Z0,protocolVersion:2,...H0&&{caCert:H0}})}return b.send({requestId:z0,status:"pending",responderFingerprint:Z0,protocolVersion:2,...H0&&{caCert:H0}})}catch(v){return b.status(sF(v,500)).send({error:v.message})}}),$.get("/api/v1/pair/pending",async(j,b)=>{if(!F(j))return b.code(403).send({error:"localhost-only"});let v=Date.now(),c=[];for(let[C,f]of X)if(v>f.expiresAt)U(C,f.relayTargetNodeId);else if(!f.relayed)c.push(hP(f));for(let[,C]of V)for(let f of C)if(v<f.expiresAt)c.push(hP(f));return b.send({requests:c})}),$.get("/api/v1/pair/status/:requestId",async(j,b)=>{let{requestId:v}=j.params,c=X.get(v);if(!c)return b.status(404).send({error:"Pair request not found or expired"});if(Date.now()>c.expiresAt)return U(v,c.relayTargetNodeId),b.status(404).send({error:"Pair request not found or expired"});if(!c.relayed&&c.host!==j.ip)return b.status(403).send({error:"IP mismatch \u2014 long-poll must come from the original requester"});let C=G.get(v);if(C){if(G.delete(v),U(v,c.relayTargetNodeId),!C.accepted)return b.send({accepted:!1});if(!C.encryptedToken||!C.ephemeralPublicKey||!C.nonce||!C.tag)return b.send({accepted:!1});return b.send({accepted:!0,encryptedToken:C.encryptedToken,ephemeralPublicKey:C.ephemeralPublicKey,nonce:C.nonce,tag:C.tag,...C.caCert&&{caCert:C.caCert}})}if(Y.has(v))return b.status(409).send({error:"Another long-poll is already waiting"});if(Q>=Lf0)return b.status(503).send({error:"Too many active pairing requests. Try again later."});Q++;try{let f=await new Promise((g)=>{let l=setTimeout(()=>{Y.delete(v),g({accepted:!1})},D50);Y.set(v,{resolve:g,timer:l})});if(f.accepted){if(f.encryptedToken&&f.ephemeralPublicKey&&f.nonce&&f.tag)return b.send({accepted:!0,encryptedToken:f.encryptedToken,ephemeralPublicKey:f.ephemeralPublicKey,...f.ephemeralKeySignature&&{ephemeralKeySignature:f.ephemeralKeySignature},nonce:f.nonce,tag:f.tag,...f.caCert&&{caCert:f.caCert}})}return b.send({accepted:!1})}finally{Q=Math.max(0,Q-1)}}),$.post("/api/v1/pair/respond",{schema:{body:{type:"object",required:["requestId","accepted"],properties:{requestId:{type:"string",minLength:1,maxLength:64},accepted:{type:"boolean"}}}}},async(j,b)=>{if(!F(j))return b.code(403).send({error:"localhost-only"});try{let v=await u(j.body);return b.send(v)}catch(v){return b.status(sF(v,500)).send({error:v.message})}}),$.post("/api/v1/pair/accept-invite",async(j,b)=>{if(!F(j))return b.code(403).send({error:"localhost-only"});try{let v=Bg(A4,j.body),c=$.ariaPairControl?.acceptInvite;if(!c)throw i0(503,"Pair control or acceptInvite not available");let C=await c(v);return b.send(C)}catch(v){return b.status(sF(v,500)).send({error:v.message})}}),$.post("/api/v1/pair/relay",async(j,b)=>{try{let v=Bg(GX,j.body);if(!q(j.ip))return b.status(429).send({error:"Too many pair requests. Try again in 1 minute."});let{targetNodeId:c,displayNameSnapshot:C,nodeId:f,signingPublicKey:g,port:l,ephemeralPublicKey:$0,ephemeralKeySignature:Y0,caCert:x}=v,r=G0.parse(f.trim()),J0=C9(g);if(!J0)return b.status(400).send({error:"Invalid signingPublicKey"});if($0&&Y0){if(!I($0,Y0,g))return b.status(403).send({error:"Relay authentication failed \u2014 invalid ephemeral key signature"})}if(X.size>=L50)return b.status(503).send({error:"Too many pending pair requests. Try again later."});let X0=10;if((V.get(c)??[]).filter((I0)=>Date.now()<I0.expiresAt).length>=X0)return b.status(429).send({error:`Too many pending relay requests for target principal "${c}"`});let z0=X7.randomBytes(16).toString("hex"),O0=Date.now(),R0={id:z0,nodeId:r,displayNameSnapshot:C,principalFingerprint:J0,signingPublicKey:g,port:l,host:j.ip,ingressHost:VQ({ingressHost:j.raw.socket?.localAddress,peerHost:j.ip}),createdAt:O0,expiresAt:O0+xP,ephemeralPublicKey:$0,ephemeralKeySignature:Y0,caCert:x,relayed:!0,relayTargetNodeId:c};return K(R0),b.send({relayed:!0,requestId:z0})}catch(v){return b.status(sF(v,500)).send({error:v.message})}}),$.get("/api/v1/pair/relay-pending",{schema:{querystring:KG}},async(j,b)=>{let{targetNodeId:v,signingPublicKey:c,signature:C,timestamp:f}=j.query,g=Number(f),l=Date.now();if(isNaN(g)||Math.abs(l-g)>xP)return b.status(403).send({error:"Timestamp expired or invalid"});let $0=`relay-pending:${v}:${f}`,Y0=!1;try{let X0=X7.createPublicKey({key:Buffer.from(c,"base64"),format:"der",type:"spki"});Y0=X7.verify(null,Buffer.from($0,"utf8"),X0,Buffer.from(C,"base64"))}catch{Y0=!1}if(!Y0)return b.status(403).send({error:"Invalid signature \u2014 identity verification failed"});let x=await N50($,{targetNodeId:v,signingPublicKey:c});if(x.status==="missing")return b.status(403).send({error:"Target peer identity not registered \u2014 complete pairing first"});if(x.status==="mismatch")return b.status(403).send({error:"Signing key does not match registered key for target peer"});let r=V.get(v)??[],J0=r.filter((X0)=>l<X0.expiresAt);if(J0.length!==r.length)V.set(v,J0);return b.send({requests:J0})}),$.post("/api/v1/pair/relay-response",{schema:{body:{type:"object",required:["requestId","accepted","responseSignature","responderSigningKey"],properties:{requestId:{type:"string",minLength:1,maxLength:64},accepted:{type:"boolean"},responseSignature:{type:"string",minLength:1,maxLength:512},responderSigningKey:{type:"string",minLength:1,maxLength:512},encryptedToken:{type:"string",maxLength:4096},ephemeralPublicKey:{type:"string",maxLength:512},ephemeralKeySignature:{type:"string",maxLength:512},nonce:{type:"string",maxLength:64},tag:{type:"string",maxLength:64},caCert:{type:"string",maxLength:4096}}}}},async(j,b)=>{let{requestId:v,accepted:c,responseSignature:C,responderSigningKey:f,encryptedToken:g,ephemeralPublicKey:l,ephemeralKeySignature:$0,nonce:Y0,tag:x,caCert:r}=j.body;{let z0=`${v}:${c}`,O0=!1;try{let R0=X7.createPublicKey({key:Buffer.from(f,"base64"),format:"der",type:"spki"});O0=X7.verify(null,Buffer.from(z0,"utf8"),R0,Buffer.from(C,"base64"))}catch{O0=!1}if(!O0)return b.status(403).send({error:"Relay response signature verification failed"})}let J0=X.get(v);if(J0&&J0.relayTargetNodeId&&f){let z0=x0.safeParse(f);if(!z0.success)return b.status(400).send({error:"Invalid responder signing key"});if((await N50($,{targetNodeId:G0.parse(J0.relayTargetNodeId),signingPublicKey:z0.data})).status==="mismatch")return b.status(403).send({error:"Responder signing key does not match expected target peer identity"})}let X0=X.get(v);if(!X0)return b.status(404).send({error:"Pair request not found or expired"});let n=!c?{accepted:!1}:{accepted:!0,encryptedToken:g,ephemeralPublicKey:l,ephemeralKeySignature:$0,nonce:Y0,tag:x,caCert:r},K0=Y.get(v);if(!K0)return G.set(v,n),z(v,X0.relayTargetNodeId),b.send({relayed:!0});return clearTimeout(K0.timer),Y.delete(v),G.delete(v),U(v,X0.relayTargetNodeId),K0.resolve(n),b.send({relayed:!0})}),$.post("/api/v1/pair/direct",{schema:{body:{oneOf:[{...BG},{type:"object",required:["envelope"],properties:{envelope:{type:"object"}}}]}}},async(j,b)=>{try{if(!j.body?.envelope||typeof j.body.envelope!=="object")return b.status(401).send({error:"MutationEnvelope required for direct pairing"});let v=$.ariaPairControl?.directPair;if(!v)return b.status(503).send({error:"Pair control not available"});return b.send(await v(j.body,j))}catch(v){let c=sF(v,500),C=v instanceof Error?v.message:String(v);return b.status(c).send({error:c===500?`Failed to configure tunnel: ${C}`:C})}})}var xP=300000,D50=300000,Df0=3,Of0=30,Nf0=60000,O50=1e4,Lf0=50,L50=1000;var M50=E(()=>{S0();m4();MJ();GQ();O6();rx();V8();b0();F50()});import{createHash as Mf0}from"crypto";function Pf0($,Z){if(Z<=0)return"";let[J,X]=$.split(":",2);if(!J||!X)throw Error("Join challenge payload malformed");let Y=0;for(;;){let Q=`${J}:${Y}`,G=Mf0("sha256").update(`${Q}:${X}`).digest(),V=0;for(let W of G){if(W===0){V+=8;continue}V+=Math.clz32(W)-24;break}if(V>=Z)return Q;Y+=1}}async function j50($){$.post("/api/v1/invite-relay/join",async(Z,J)=>{try{let X=Z.body&&typeof Z.body==="object"?Z.body:{},Y=typeof X.inviteToken==="string"&&X.inviteToken.trim().length>0?X.inviteToken.trim():null;if(!Y)return J.status(400).send({error:"inviteToken is required"});let Q=l2.parse(X.joinRequest),G=P50.decodeInviteToken(Y),V=G.controlEndpoint,W=G.caCert?.trim(),H=V?.tlsServerIdentity?.trim();if(!V||!W||!H)return J.status(400).send({error:"Invite token missing relay bootstrap trust data"});let K=`https://${V.host}:${V.port}/api/v1/join/challenge`,z=await x6(K,{ca:W,expectedTlsIdentity:H});if(z.status!==200)return J.status(502).send({error:`Invite relay challenge failed: ${z.status}`});let U=await z.json();if(!U.challenge||typeof U.challenge!=="string")return J.status(502).send({error:"Invite relay challenge payload was invalid"});let B=Pf0(U.challenge,U.difficulty??4),F=`https://${V.host}:${V.port}/api/v1/join`,D=JSON.stringify({...Q,proofOfWork:B}),O=await x6(F,{method:"POST",body:D,ca:W,expectedTlsIdentity:H,headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(D).toString()}});if(O.status!==200)return J.status(502).send({error:`Invite relay join failed: ${O.status}`});return J.send(await O.json())}catch(X){return J.status(400).send({error:X.message})}})}var P50;var T50=E(()=>{V8();b0();P50=U7(MH(),1)});import*as HQ from"crypto";async function C50($){let Z=new Map,J=50,X=1000,Y=new Map,Q=0;$.get("/api/v1/ws/revocations",{websocket:!0},(G,V)=>{let W=V.ip??V.socket?.remoteAddress??"unknown",H=Y.get(W)??0;if(H>=50||Q>=1000){G.close(1013,"Too many connections");return}Y.set(W,H+1),Q++;let K=!1,z=!0,U=null,B=null,F=null,D=null,O=null,L=setTimeout(()=>{if(!K)u4(G,{type:"auth_error",error:"Authentication timeout"}),G.close()},1e4);G.on("message",(N)=>{try{let _=typeof N==="string"?N:N.toString(),M;try{M=JSON.parse(_)}catch{u4(G,{type:K?"error":"auth_error",error:"Malformed message"}),G.close();return}if(!K)A(M)}catch(_){u4(G,{type:K?"error":"auth_error",error:_ instanceof Error?_.message:"Authentication failed"}),G.close()}});function q(){if(!z)return;z=!1;let N=(Y.get(W)??1)-1;if(N<=0)Y.delete(W);else Y.set(W,N);Q--}G.on("close",()=>{if(clearTimeout(L),F&&Z.get(F)?.socket===G)Z.delete(F);q()}),G.on("error",()=>{if(clearTimeout(L),F&&Z.get(F)?.socket===G)Z.delete(F);q()});function A(N){if(N.type==="auth"){let{nodeId:_,signingPublicKey:M}=N,T=G0.safeParse(_);if(!T.success){u4(G,{type:"auth_error",error:"Invalid nodeId"}),G.close();return}if(typeof M!=="string"){u4(G,{type:"auth_error",error:"Missing signing public key"}),G.close();return}let k=x0.safeParse(M);if(!k.success){u4(G,{type:"auth_error",error:"Invalid signing public key"}),G.close();return}let R=vP($,T.data,k.data);if(!R.ok){u4(G,{type:"auth_error",error:R.error}),G.close();return}if($.ariaRevocationStore?.isPeerRevoked?.(R.nodeId)){u4(G,{type:"auth_error",error:"Peer has been revoked"}),G.close();return}F=R.nodeId,D=R.displayNameSnapshot??null,O=M,U=HQ.randomBytes(jf0).toString("hex"),B=HQ.randomBytes(Tf0).toString("hex");let a=`${U}:${B}`;u4(G,{type:"challenge",nonce:a})}else if(N.type==="challenge_response"){if(!U||!B||!F||!O){u4(G,{type:"auth_error",error:"No pending challenge"}),G.close();return}let _=N.signature;if(typeof _!=="string"){u4(G,{type:"auth_error",error:"Missing signature"}),G.close();return}let M=`${U}:${B}`;if(!Cf0(M,_,O)){u4(G,{type:"auth_error",error:"Invalid signature"}),G.close();return}if($.ariaRevocationStore?.isPeerRevoked?.(F)){u4(G,{type:"auth_error",error:"Peer has been revoked"}),G.close();return}let T=Z.get(F);if(T&&T.socket!==G)try{T.socket.close()}catch{}Z.set(F,{socket:G,...D?{displayNameSnapshot:D}:{}}),clearTimeout(L),K=!0,u4(G,{type:"auth_ok",nodeId:F,...D?{displayNameSnapshot:D}:{}})}}}),$.decorate("ariaRevocationBroadcast",(G)=>{let V=G.nodeId,W=G.displayNameSnapshot??Z.get(V)?.displayNameSnapshot,H=Z.get(V);if(H){Z.delete(V);try{u4(H.socket,{type:"revoked",nodeId:V,...W?{displayNameSnapshot:W}:{}}),H.socket.close()}catch{}}for(let[,K]of Z)try{u4(K.socket,{type:"revocation",nodeId:V,...W?{displayNameSnapshot:W}:{},revokedAt:G.revokedAt})}catch{}})}function u4($,Z){try{$.send(JSON.stringify(Z))}catch{}}function Cf0($,Z,J){try{let X=Buffer.from(J,"base64"),Y=HQ.createPublicKey({key:X,format:"der",type:"spki"});return HQ.verify(null,Buffer.from($),Y,Buffer.from(Z,"base64"))}catch{return!1}}var jf0=32,Tf0=16;var R50=E(()=>{b0();Kg();m4()});import{existsSync as Rf0,mkdirSync as wf0,readFileSync as Sf0,renameSync as If0,writeFileSync as bf0}from"fs";import{dirname as kf0}from"path";function ff0($){if(!Array.isArray($))return;let Z=[];for(let J of $){if(!J||typeof J!=="object")continue;let X=J;if(typeof X.id!=="string"||typeof X.name!=="string")continue;Z.push({id:X.id,name:X.name,arguments:X.arguments&&typeof X.arguments==="object"?X.arguments:void 0,...typeof X.thoughtSignature==="string"?{thoughtSignature:X.thoughtSignature}:{}})}return Z.length>0?Z:void 0}function S50($){let Z=[];for(let J of $){if(!J||typeof J!=="object")continue;let X=typeof J.role==="string"?J.role:"";if(!X)continue;let Y=typeof J.content==="string"?J.content:"",Q=typeof J.name==="string"?J.name:void 0,G=typeof J.toolCallId==="string"?J.toolCallId:void 0,V=ff0(J.toolCalls);Z.push({role:X,content:Y,...Q?{name:Q}:{},...G?{toolCallId:G}:{},...V?{toolCalls:V}:{}})}return Z}function I50($){if($.size<=w50)return;let Z=[...$.values()].sort((J,X)=>{let Y=Date.parse(J.updatedAt)-Date.parse(X.updatedAt);if(Y!==0)return Y;return Date.parse(J.createdAt)-Date.parse(X.createdAt)});for(let J of Z){if($.size<=w50)break;$.delete(J.id)}}function yf0($){let Z=new Map;if(!Rf0($))return Z;try{let J=JSON.parse(Sf0($,"utf-8"));if(!J||typeof J!=="object"||!Array.isArray(J.sessions))return Z;for(let X of J.sessions){if(!X||typeof X!=="object")continue;if(typeof X.id!=="string")continue;Z.set(X.id,{id:X.id,arionName:typeof X.arionName==="string"?X.arionName:null,createdAt:typeof X.createdAt==="string"?X.createdAt:new Date().toISOString(),updatedAt:typeof X.updatedAt==="string"?X.updatedAt:new Date().toISOString(),completedAt:typeof X.completedAt==="string"?X.completedAt:null,messages:S50(Array.isArray(X.messages)?X.messages:[])})}}catch{return new Map}return I50(Z),Z}function vf0($,Z){let J=kf0($);wf0(J,{recursive:!0});let X={version:1,sessions:[...Z.values()]},Y=`${$}.${process.pid}.${Date.now().toString(36)}.${Math.random().toString(36).slice(2)}.tmp`;bf0(Y,JSON.stringify(X),"utf-8"),If0(Y,$)}function b50($){let Z=yf0($),J=()=>{I50(Z);try{vf0($,Z)}catch(X){console.warn("[Server] Failed to persist session history:",X instanceof Error?X.message:String(X))}};return{upsertSession(X,Y,Q){let G=new Date().toISOString(),V=Z.get(X),W=S50(Y),H=Q?.completed===!0;Z.set(X,{id:X,arionName:Q?.arionName??V?.arionName??null,createdAt:V?.createdAt??G,updatedAt:G,completedAt:H?V?.completedAt??G:null,messages:W.length>0?W:V?.messages??[]}),J()},markCompleted(X){let Y=new Date().toISOString(),Q=Z.get(X);Z.set(X,{id:X,arionName:Q?.arionName??null,createdAt:Q?.createdAt??Y,updatedAt:Y,completedAt:Q?.completedAt??Y,messages:Q?.messages??[]}),J()},markStaleSessionsCompleted(X){let Y=Date.now()-X*86400000,Q=new Date().toISOString(),G=0;for(let V of Z.values()){if(V.completedAt!==null)continue;if(V.messages.length===0)continue;if(Date.parse(V.updatedAt)>=Y)continue;V.completedAt=V.completedAt??Q,V.updatedAt=Q,G++}if(G>0)J();return G},getIncompleteSessions(X){return[...Z.values()].filter((Y)=>Y.completedAt===null&&Y.messages.length>0).sort((Y,Q)=>Date.parse(Q.updatedAt)-Date.parse(Y.updatedAt)).slice(0,Math.max(0,X)).map((Y)=>({id:Y.id,messageCount:Y.messages.length}))},getIncompleteSessionsWithMetadata(X){return[...Z.values()].filter((Y)=>Y.completedAt===null&&Y.messages.length>0).sort((Y,Q)=>Date.parse(Q.updatedAt)-Date.parse(Y.updatedAt)).slice(0,Math.max(0,X)).map((Y)=>({id:Y.id,messageCount:Y.messages.length,arionName:Y.arionName??void 0}))},getSession(X){let Y=Z.get(X);if(!Y)return null;return{id:Y.id,messages:Y.messages.map((Q)=>({role:Q.role,content:Q.content,...Q.toolCallId?{toolCallId:Q.toolCallId}:{},...Q.toolCalls?{toolCalls:[...Q.toolCalls]}:{}}))}}}}var w50=500;var k50=()=>{};var f50=E(()=>{V8()});function y50($){let Z=new M$({ariaHome:$.ariaHome,ownerGeneration:$.ownerGeneration});return{revoke(J){Z.revoke(J)},isPeerRevoked(J){return Z.isPeerRevoked(J)},read(J){let X=Z.readRevocation(J);if(!X)return null;return{...X,localNodeId:X.revokedBy}},getPeerRevocationGeneration(J){return Z.getPeerRevocationGeneration(J)},clearRevocationForNodeId(J,X){return Z.clearRevocationForNodeId(J,X)},list(){return Z.listRevocations().map((J)=>({...J,localNodeId:J.revokedBy}))},close(){Z.close()}}}var v50=E(()=>{O6()});function h50($){let Z=y50({ariaHome:$.ariaHome,ownerGeneration:$.ownerGeneration}),J=new pW($.networkStateDb),X=new dW($.networkStateDb),Y=new rW($.networkStateDb),Q=new XJ($.networkStateDb),G=new sW($.networkStateDb);return{revocationStore:Z,peerSigningKeyStore:J,durablePairStore:X,nonceStore:Y,peerTrustStore:Q,inviteConsumeLedger:G}}var x50=E(()=>{f50();v50()});var g50={};A$(g50,{recoverCrashedSessions:()=>r3});var m50=E(()=>{wB()});var c50={};A$(c50,{ArionStorage:()=>T9});var u50=E(()=>{EB()});import hf0 from"fastify";import xf0 from"@fastify/cors";import gf0 from"@fastify/websocket";import mf0 from"path";import cf0 from"crypto";async function uf0(){let[{recoverCrashedSessions:$},{ArionStorage:Z}]=await Promise.all([Promise.resolve().then(() => (m50(),g50)),Promise.resolve().then(() => (u50(),c50))]);return{recoverCrashedSessions:$,ArionStorage:Z}}function pf0(){let $=process;if($[p50])return;$[p50]=!0,process.on("unhandledRejection",(Z)=>{console.error("[Server] Unhandled promise rejection:",Z)}),process.on("uncaughtException",(Z)=>{console.error("[Server] Uncaught exception \u2014 shutting down:",Z),process.exit(1)})}function df0($){try{let Z=new URL($);return Z.hostname==="localhost"||Z.hostname==="127.0.0.1"||Z.hostname==="::1"||Z.hostname==="[::1]"}catch{return!1}}function lf0($){if(!$)return $;try{let Z=new URL($,"http://localhost");if(Z.searchParams.has("api_key"))return Z.searchParams.set("api_key","REDACTED"),Z.pathname+Z.search}catch{return $.replace(/([?&])api_key=[^&]*/g,"$1api_key=REDACTED")}return $}function af0($,Z){if(Z&&typeof Z.upsertSession==="function")return Z;return $}function nf0($,Z){let J=$.getIncompleteSessionsWithMetadata;if(typeof J==="function")return J(Z);return $.getIncompleteSessions(Z).map((X)=>({id:X.id,messageCount:X.messageCount,arionName:void 0}))}function d50($,Z){let J=$.trim()||"ARIA";return Z?.memoriaPath||`arions/${J}/memory.db`}function if0($){return cf0.createHash("sha256").update(Buffer.from($,"base64")).digest("hex")}function of0($){let Z=$?.trim();if(Z)return Z;let J=process.env.ARIA_HOME?.trim();if(J)return J;return M2()}async function gP($={}){let{port:Z=3000,host:J="127.0.0.1",enableCrashRecovery:X=!0,crashRecoverySessionHistory:Y}=$,Q=of0($.basePath),V=($.nodeId?await Qx({ariaHome:Q,nodeId:$.nodeId}):null)?.nodeId??$.nodeId,W=$.ownerGeneration??(V?1:void 0),H=hf0({...$.tls&&{https:{cert:$.tls.cert,key:$.tls.key}},logger:$.silent?!1:{level:"info",serializers:{req(o){let u=o;return{method:u.method,url:lf0(u.url),hostname:u.hostname,remoteAddress:u.ip}}}},connectionTimeout:330000,requestTimeout:330000,bodyLimit:1048576}),K=new Gg;H.decorate("ariaInboxEventHub",K);let z=BZ.subscribeStoredEvents((o)=>{H.ariaInboxEventHub?.publish({...o,senderNodeId:o.senderNodeId})});H.addHook("onClose",async()=>{z()}),H.register(xf0,{origin:(o,u)=>{if(!o||df0(o))u(null,!0);else u(Error("Not allowed by CORS"),!1)},methods:["GET","POST","PUT","DELETE","OPTIONS"],allowedHeaders:["Content-Type","Authorization"]}),H.decorate("config",{port:Z,host:J}),H.decorate("ariaRuntimeId",$.runtimeId),H.decorate("ariaNodeId",V),H.decorate("ariaOwnerGeneration",W),H.decorate("ariaBasePath",Q);let U=new l50.NetworkStateStore({ariaHome:Q}),B=U.open();H.addHook("onClose",async()=>{U.close()});let F=b50(mf0.join(Q,"server-session-history.json")),D=Y??F,O=af0(F,Y),L=hZ({ariaHome:Q}),q=$.router??await E1({ariaHome:Q,anthropic:L.legacyApiKeys.anthropic,openai:L.legacyApiKeys.openai,google:L.legacyApiKeys.google,...L.bedrock?{bedrock:L.bedrock}:{},authResolver:$.authResolver??L.authResolver}),A=$.memoriaFactory??new i8(Q,q).toFactory();H.decorate("ariaMemoriaFactory",A),H.decorate("ariaRouter",q),H.decorate("ariaSessionHistory",O);let N=$.authResolver?{authResolver:$.authResolver,createOverlayResolver:()=>$.authResolver}:L;H.decorate("ariaAuthResolver",N.authResolver),H.decorate("ariaCreateOverlayAuthResolver",N.createOverlayResolver);try{let u=(await A.get(d50($.arionName??"ARIA"))).storage?.createMessageStore();if(u)H.decorate("ariaMessageStore",u)}catch(o){P.debug("[Server] MessageStore not available \u2014 /api/v1/message requires EventQueue sink or will return 503:",o?.message??o)}let _=A;H.addHook("onClose",async()=>{await _.closeAll()});let M,T,k=!1;try{let o=h50({ariaHome:Q,networkStateDb:B,ownerGeneration:W??1});T=o.revocationStore,H.decorate("ariaRevocationStore",T),M=o.peerSigningKeyStore,H.decorate("ariaPeerSigningKeyStore",M),H.decorate("ariaDurablePairStore",o.durablePairStore),H.decorate("ariaNonceStore",o.nonceStore),H.decorate("ariaPeerTrustStore",o.peerTrustStore),H.decorate("ariaInviteConsumeLedger",o.inviteConsumeLedger),k=!0}catch{P.debug("[Server] Durable network stores not available")}if(T)H.addHook("onClose",async()=>{T?.close()});if($.networkManager)H.decorate("ariaNetworkManager",$.networkManager),$.networkManager.addPeerActivationListener?.(({nodeId:u,displayNameSnapshot:w,signingPublicKey:m})=>{M?.set(u,m,w);let I=H.ariaPeerTrustStore;if(I?.getTier(u)==="probe")I.setTier({nodeId:u,displayName:w,fingerprint:f0.parse(if0(m)),tier:"member",promotedBy:"verified-ingress",reason:"Verified signed ingress activated paired peer"});P.debug(`[Server] Peer "${w}" activated after identity verification`)});if(J!=="127.0.0.1"&&J!=="localhost"&&!$.tls)throw Error("Refusing to bind to non-localhost without TLS. Provide tls config or use host=127.0.0.1.");if($.attachedLocalHttpClientAuthority)KP(H,$.attachedLocalHttpClientAuthority);if(H.get("/health",async()=>{return{status:"ok"}}),await H.register(gf0),H.setSchemaErrorFormatter((o,u)=>{let m=o[0]?.message||"Validation failed";return Error(m)}),H.setErrorHandler((o,u,w)=>{if(o.validation)return w.status(400).send({success:!1,error:o.message});throw o}),await H70(H),H.register(z70),H.register(j70),H.register(d10),H.register(w70),await Q50(H),await a70(H),await i70(H),await s70(H),k)await C50(H);if(k)await V50(H);await K50(H),await _50(H),await j50(H),pf0();let R=!1,a=async(o)=>{if(!X)return;if(o?.startup&&R)return;if(!A||!q||!D)return;if(o?.startup)R=!0;let{recoverCrashedSessions:u,ArionStorage:w}=await uf0(),I=nf0(D,3),S=new w(Q);await S.initialize().catch((C)=>{P.warn("[Server] Storage initialization failed:",C?.message??C)});let j=async(C)=>{let f=C.trim()||"ARIA",g=await S.get(f).catch(()=>null);return d50(f,g)};if(I.length===0){let C=await j("ARIA");try{let f=await A.get(C),g=await u({sessionHistory:D,memoria:f,router:q,signal:o?.signal});if(g.recovered>0)console.debug(`[Server] Recovered learning from ${g.recovered} incomplete session${g.recovered===1?"":"s"}.`)}catch(f){console.warn("[Server] Crash recovery failed:",f?.message??String(f))}finally{if(typeof A?.evict==="function")await A.evict(C).catch((f)=>{P.warn("[Server] Memoria factory evict failed:",f?.message??f)})}return}let b=new Map;for(let C of I){let f=(C.arionName?.trim()||"ARIA").toLowerCase(),g=b.get(f)??[];g.push(C),b.set(f,g)}let v=0,c=0;for(let[C,f]of b.entries()){if(o?.signal?.aborted)break;let g=new Set(f.map((x)=>x.id)),l=f[0]?.arionName?.trim()||C||"ARIA",$0=await j(l),Y0={getIncompleteSessions(x){return f.slice(0,Math.max(0,x)).map((r)=>({id:r.id,messageCount:r.messageCount}))},getSession(x){if(!g.has(x))return null;return D.getSession(x)},markCompleted(x){if(!g.has(x))return;D.markCompleted(x)},markStaleSessionsCompleted(x){return D.markStaleSessionsCompleted(x)}};try{let x=await A.get($0),r=await u({sessionHistory:Y0,memoria:x,router:q,signal:o?.signal});v+=r.recovered,c+=r.errors}catch(x){c++,console.warn("[Server] Crash recovery failed:",x?.message??String(x))}finally{if(typeof A?.evict==="function")await A.evict($0).catch((x)=>{P.warn("[Server] Memoria factory evict failed:",x?.message??x)})}}if(v>0)console.debug(`[Server] Recovered learning from ${v} incomplete session${v===1?"":"s"}.`);if(c>0)console.warn(`[Server] Crash recovery encountered ${c} error${c===1?"":"s"}.`)};return H.decorate("ariaRecoverCrashedSessions",async(o)=>{await a({signal:o})}),{server:H,listen:async()=>{return await a({startup:!0}),H.listen({port:Z,host:J})}}}var l50,p50;var Fg=E(()=>{_H();vF();R6();S0();b0();K70();U70();T70();mF();ox();n70();o70();r70();G50();a3();W50();z50();M50();T50();R50();k50();SH();x50();_J();iY();m4();l50=U7(Ix(),1),p50=Symbol.for("./process-handlers-registered")});import{randomUUID as sf0}from"crypto";async function xH($){if($.ariaRunControl)return $.ariaRunControl;let{ensureRuntimeRunControl:Z}=await Promise.resolve().then(() => (lF(),dF));if(Z($),!$.ariaRunControl)throw Error("Local control run surface unavailable");return $.ariaRunControl}function a50($){return{runId:`run-${sf0()}`,wait:()=>$}}async function rf0($){await new Promise((Z)=>setTimeout(Z,Math.max($,0)))}async function*n50($,Z={pollIntervalMs:1000}){let J=new Map,X=Z.initialAfterCreatedAt??0;while(!0){let Y=await $(),Q=!1;for(let G of Y){if(typeof G.createdAt==="number"&&G.createdAt<X)continue;let V=typeof G.id==="string"?G.id:G.nodeId;if(typeof V==="string"){let W=Z.getVersionKey?.(G)??JSON.stringify(G);if(J.get(V)===W)continue;J.set(V,W)}if(typeof G.createdAt==="number")X=Math.max(X,G.createdAt);Q=!0,yield G}if(!Q)await rf0(Z.pollIntervalMs)}}function mP($){let Z=$.pollIntervalMs??1000,J=()=>{if(!$.server)throw Error("Local control server transport unavailable");return $.server},X=()=>{let z=J().ariaRuntimeMessageControl;if(!z)throw Error("Local control message surface unavailable");return z},Y=()=>{let z=J().ariaRuntimeBootstrapControl;if(!z)throw Error("Local control bootstrap surface unavailable");return z},Q=()=>{let z=J().ariaPeerLocalControl;if(!z)throw Error("Local control peer surface unavailable");return z},G=()=>{let z=J().ariaPairControl;if(!z)throw Error("Local control pair surface unavailable");return z},V=()=>{let z=J().ariaNetworkAdminControl;if(!z)throw Error("Local control network admin surface unavailable");return z},W=async()=>{let z=typeof $.status==="function"?await $.status():$.status;return f8.parse(z)},H=async(z)=>{let U=r9.optional().parse(z);return(await X().listInbox({limit:U?.limit??100,unreadOnly:U?.unreadOnly??!1})).map((F)=>c8.parse({...F,inboxAddress:M8.parse(F.inboxAddress)})).filter((F)=>typeof U?.cursor?.afterCreatedAt==="number"?F.createdAt>=U.cursor.afterCreatedAt:!0)};return{async submitRun(z){let U=j8.parse(z),B=(await xH(J())).submitRun;if(!B)throw Error("Local control run surface unavailable");return a50(B(U).then((F)=>k9.parse(F)))},async submitRunAsAttachedClient(z,U){if($.submitRunAsAttachedClient)return $.submitRunAsAttachedClient(z,U);let B=j8.parse(U),F=(await xH(J())).submitRun;if(!F)throw Error("Local control run surface unavailable");return a50(F(B,{clientId:z.clientId}).then((D)=>k9.parse(D)))},async resumeRun(z){let U=a4.parse(z),B=(await xH(J())).resumeRun;if(!B)throw Error("Local control resume surface unavailable");return k9.parse(await B(U))},async resumeRunAsAttachedClient(z,U){let B=a4.parse(U),F=(await xH(J())).resumeRun;if(!F)throw Error("Local control resume surface unavailable");return k9.parse(await F(B,{clientId:z.clientId}))},async*streamRun(z,U){let B=j8.parse(z),F=(await xH(J())).streamRun;if(!F)throw Error("Local control stream surface unavailable");for await(let D of F(B,U))yield E6.parse(D)},async*streamRunAsAttachedClient(z,U,B){let F=j8.parse(U),D=(await xH(J())).streamRun;if(!D)throw Error("Local control stream surface unavailable");for await(let O of D(F,B,{clientId:z.clientId}))yield E6.parse(O)},subscribeRuntimeEvents(z){if(!$.subscribeRuntimeEvents)throw Error("Local control runtime event surface unavailable");return $.subscribeRuntimeEvents(q7.optional().parse(z))},async sendBestEffort(z){let U=G8.parse(z);return n4.parse(await X().sendBestEffort(U))},async sendBestEffortAsAttachedClient(z,U){let B=G8.parse(U);return n4.parse(await X().sendBestEffort({...B,rawMessage:iF(B.rawMessage,nF(z.clientId))}))},async sendDurable(z){let U=G8.parse(z);return i4.parse(await X().sendDurable(U))},async sendDurableAsAttachedClient(z,U){let B=G8.parse(U);return i4.parse(await X().sendDurable({...B,rawMessage:iF(B.rawMessage,nF(z.clientId))}))},listInbox:H,subscribeInbox(z){return n50(()=>H({limit:100,unreadOnly:!1}),{pollIntervalMs:Z,initialAfterCreatedAt:z?.afterCreatedAt??0})},async listPeers(){return(await Q().listPeers()).map((z)=>q4.parse(z))},async listNearbyPeers(){return(await Q().listNearbyPeers()).map((z)=>{let U=z,{tlsFingerprint:B,...F}=z;return _6.parse({...F,...U.tlsCaFingerprint===void 0&&typeof B==="string"?{tlsCaFingerprint:B}:{}})})},subscribePeers(){return n50(async()=>(await Q().listPeers()).map((z)=>q4.parse(z)),{pollIntervalMs:Z,getVersionKey:(z)=>[z.updatedAt,z.endpointRevision,z.identityState,z.transportState,z.lastSeenAt??"",z.transportPublicKey,z.displayNameSnapshot??""].join("|")})},async getRuntimeStatus(){return W()},async getModelSnapshot(){if(!$.getModelSnapshot)throw Error("Model snapshot unavailable");return $.getModelSnapshot()},async getModelSnapshotAsAttachedClient(z){if(!$.getModelSnapshotAsAttachedClient)throw Error("Attached model snapshot unavailable");return $.getModelSnapshotAsAttachedClient(z)},async refreshModelSnapshot(z){if(!$.refreshModelSnapshot)throw Error("Model refresh unavailable");return $.refreshModelSnapshot(z)},async refreshModelSnapshotAsAttachedClient(z,U){if(!$.refreshModelSnapshotAsAttachedClient)throw Error("Attached model refresh unavailable");return $.refreshModelSnapshotAsAttachedClient(z,U)},async setCurrentModel(z){if(!$.setCurrentModel)throw Error("Model selection unavailable");return $.setCurrentModel(z)},async getSessionCredentialOverlayState(){if(!$.getSessionCredentialOverlayState)return{providers:[]};return $.getSessionCredentialOverlayState()},async setSessionCredentialOverlay(z){if(!$.setSessionCredentialOverlay)throw Error("Session credential overlay unavailable");return $.setSessionCredentialOverlay(z)},async clearSessionCredentialOverlay(){if(!$.clearSessionCredentialOverlay)throw Error("Session credential overlay unavailable");return $.clearSessionCredentialOverlay()},async startAutonomousLoop(z){if(!$.startAutonomousLoop)throw Error("Autonomous loop start unavailable");return f8.parse(await $.startAutonomousLoop(z))},async stopAutonomousLoop(){if(!$.stopAutonomousLoop)throw Error("Autonomous loop stop unavailable");return f8.parse(await $.stopAutonomousLoop())},async getRuntimeBootstrap(){return u8.parse(await Y().getRuntimeBootstrap())},async listPendingPairRequests(){return(await G().listPendingPairRequests()).map((z)=>M6.parse(z))},async respondToPairRequest(z){return P6.parse(await G().respondToPairRequest(_4.parse(z)))},async createInvite(z){return s4.parse(await Q().createInvite(o4.parse(z)))},async listPendingInvites(){return(await Q().listPendingInvites()).map((z)=>E4.parse(z))},async acceptInviteToken(z){return e4.parse(await Q().acceptInviteToken(t4.parse(z)))},async cancelInvite(z){return o6.parse(await Q().cancelInvite(i6.parse(z)))},async invitePeer(z){return n6.parse(await Q().invitePeer(r4.parse(z)))},async acceptInvite(z){return V1.parse(await G().acceptInvite(A4.parse(z)))},async directPair(z){return j6.parse(await G().directPair(U9.parse(z)))},async revokePeer(z){return T6.parse(await V().revokePeer(M4.parse(z)))},async repairPeer(z){return s6.parse(await Q().repairPeer($6.parse(z)))},async appendSessionMessages(z,U){K().addConversationMessages(z,U)},async markSessionCompleted(z){K().markCompleted(z)},async replaceSessionMessages(z,U){K().replaceConversationMessages(z,U)}};function K(){if(!$.sessionHistory)throw Error("Session history writer unavailable on this daemon");return $.sessionHistory}}var Dg=E(()=>{b0();Xg()});function cP($){let{server:Z}=$,J=()=>{let Y=Z.ariaPairControl;if(!Y)throw Error("Runtime admin surface unavailable");return Y},X=()=>{let Y=Z.ariaNetworkAdminControl;if(!Y)throw Error("Runtime admin surface unavailable");return Y};return{async listPendingPairRequests(){return(await J().listPendingPairRequests()).map((Y)=>M6.parse(Y))},async respondToPairRequest(Y){return P6.parse(await J().respondToPairRequest(_4.parse(Y)))},async directPair(Y){return j6.parse(await J().directPair(U9.parse(Y)))},async revokePeer(Y){return T6.parse(await X().revokePeer(M4.parse(Y)))}}}var Og=E(()=>{b0()});function Ng($,Z,J){let X=$.readRuntimeBootstrapRecord(Z);if(!X)return 1;return X.bootstrapRevision+1}function i50($){let Z=$.networkManager.getConfig?.()??null,J=kF({nodeId:$.nodeId,runtimeId:$.runtimeId,ownerGeneration:$.ownerGeneration,controlPort:$.controlPort,caFingerprint:$.caFingerprint,caCertPem:$.caCertPem,networkManager:$.networkManager,networkConfig:Z,displayNameSnapshot:$.displayNameSnapshot,controlHost:$.controlHost,bootstrapRevision:Ng($.nodeStore,$.nodeId,$.ownerGeneration),phase:$.phase});return $.nodeStore.writeRuntimeBootstrapRecord(J)}var Lg=E(()=>{XP();O6()});import*as Ag from"path";import*as s50 from"fs/promises";import{randomUUID as o50}from"crypto";function tf0($,Z,J,X){let Y=new k4($),Q=async()=>!1;function G(V){let H={...Z,...V,maxTurns:null,onApprovalNeeded:Q,stateDir:J};if(X){let K=typeof H.activeQuestId==="string"?H.activeQuestId.trim():"",z=K.length>0?X.ensureMemoriaSessionId(K):void 0;if(z){try{X.session.observer?.setSessionId(z)}catch(U){console.warn("[runtime-autonomous-loop] Observer session binding failed (non-critical):",U?.message)}if(X.session.observationEngine)H.observationEngine=X.session.observationEngine,H.observationSessionId=z,H.originalSystemPrompt=X.session.originalSystemPrompt}}return H}return{stream(V,W){return Y.stream(V,G(W))},async resume(V,W){return Y.resume(V,G(W))}}}class qg{options;started=!1;starting=!1;stopController=null;bootstrapAbortController=null;startPromise=null;loopPromise=null;session=null;releaseMailbox=null;lastWakeTickAt=null;lastCheckpointResult="never";currentWakeTrigger=null;constructor($){this.options=$}summarizeSafetyPolicy(){return{...this.options.safetyPolicy?.allowedToolCategories?{allowedToolCategories:[...this.options.safetyPolicy.allowedToolCategories]}:{},...this.options.safetyPolicy?.allowedShellCommands?{allowedShellCommands:[...this.options.safetyPolicy.allowedShellCommands]}:{},...typeof this.options.safetyPolicy?.maxWriteOpsPerMinute==="number"?{maxWriteOpsPerMinute:this.options.safetyPolicy.maxWriteOpsPerMinute}:{},...typeof this.options.safetyPolicy?.maxGitPushesPerHour==="number"?{maxGitPushesPerHour:this.options.safetyPolicy.maxGitPushesPerHour}:{}}}getStatusSummary($){return{status:this.started||this.starting||this.startPromise?"running":"stopped",intervalMs:this.options.intervalMs??null,lastWakeTickAt:this.lastWakeTickAt,lastCheckpointResult:this.lastCheckpointResult,safetyPolicySummary:this.summarizeSafetyPolicy(),ownerClientKind:$}}async start(){if(this.started)return;if(this.startPromise){await this.startPromise;return}this.starting=!0,this.bootstrapAbortController=new AbortController;let $=this.options.signal?AbortSignal.any([this.options.signal,this.bootstrapAbortController.signal]):this.bootstrapAbortController.signal;this.startPromise=(async()=>{let{ariaHome:Z,arionName:J,runtimeControl:X,router:Y,memoriaFactory:Q,runSessionConfig:G,mcpServers:V,authResolver:W,intervalMs:H,safetyPolicy:K,nodeStore:z}=this.options,U=new x1,B=X.networkManager,F={verificationConfig:{freshnessGuard:U,replayGuard:U},...X.nodeId?{localInboxAddress:{kind:"node",nodeId:X.nodeId}}:{},commitIngressReceipt:z?(O,L)=>{let{resolvedNodeId:q,resolvedPeerFingerprint:A}=L;if(!q)throw Error("[runtime-autonomous-loop] Accepted ingress is missing resolvedNodeId");if(!A)throw Error("[runtime-autonomous-loop] Accepted ingress is missing resolvedPeerFingerprint");z.commitIngressReceipt({messageId:String(O.id),senderNodeId:q,senderFingerprint:f0.parse(A),runtimeId:X.runtimeId})}:void 0,activateVerifiedPeer:typeof B.activatePendingPeer==="function"?(O)=>{B.activatePendingPeer?.(G0.parse(O))}:void 0,revocationStore:X.revocationStore,collectiveMemory:X.networkCoordinator?.collectiveMemory},D=await OZ.create({arionName:J,config:G,storagePath:Z,router:Y,memoriaFactory:Q,abortSignal:$,initialTask:"Autonomous daemon wake loop",mcpServers:V,authResolver:W,networkManager:X.networkManager,runtimeId:X.runtimeId,nodeId:X.nodeId,runtimeIngressAuthority:F});try{let O=D.memoria.storage,L=D.toRunOptions({maxTurns:null});if(X.networkCoordinator)L.networkIntelligence=X.networkCoordinator;let q=Ag.join(Z,"arions",J,"daemon");await s50.mkdir(q,{recursive:!0});let A=O?.getConnection?.()??null,N=typeof O?.withConnection==="function",_=N?B6.fromConnectionOwner(O)??(A?new B6(A):null):A?new B6(A):null,M=N?QJ.fromConnectionOwner(O)??(A?new QJ(A):null):A?new QJ(A):null,T=N?JJ.fromConnectionOwner(O)??(A?new JJ(A):null):A?new JJ(A):null;if(!_||!M||!T)throw Error(`Memoria durable stores unavailable for arion "${J}"`);try{for(let b of M.findRecoverable())M.fail(b.id,"Process crashed \u2014 recovered on runtime startup")}catch(b){console.warn(`[runtime-autonomous-loop] Delegation crash recovery failed (non-critical): ${b}`)}let k=new i_,R=new o_,a=new s_(Ag.join(q,"audit.jsonl")),o=D.getRuntimeOutbox();if(o)this.releaseMailbox=X.registerMailbox(o);let{nodeId:u,networkManager:w}=X;if(w.addMessageListener)w.addMessageListener(()=>{return this.currentWakeTrigger?.(),!1});if(o&&u){let b=o;D.errorHandler.setBroadcaster({broadcast(v){try{for(let c of B?.listPeers?.()??[])if(c.status==="active"){let C=c.nodeId;if(!C)continue;let f={id:`msg-${o50()}`,version:1,sender:{id:u,name:J,type:"leader"},type:v.type,content:JSON.stringify(v.payload),recipient:{id:C,name:c.name},metadata:{errorBroadcast:!0},priority:0,timestamp:Date.now()};b.sendBestEffort(f)}}catch{}}})}let m=new Map,I=(b)=>{let v=b.trim();if(!v)return;let c=m.get(v);if(c)return c;let C=o50();try{D.memoria.session(C)}catch(f){console.warn("[runtime-autonomous-loop] Memoria session start failed (non-critical):",f?.message)}return m.set(v,C),C},S=new AbortController,j=AbortSignal.any([$,S.signal]);this.stopController=S,this.session=D,this.loopPromise=uy({arionName:J,runtimeId:X.runtimeId,localNodeId:u,stateDir:q,ariaDir:Z,intervalMs:H??60000,questStore:_,createRunner:()=>tf0(Y,L,q,{session:D,ensureMemoriaSessionId:I}),buildSystemPrompt:()=>D.systemPrompt,signal:j,eventQueue:T,stuckDetector:k,correctionLadder:R,safetyPolicy:K,auditLog:a,mailbox:D.mailbox,messageStore:D.messageStore,freshnessGuard:F.verificationConfig?.freshnessGuard,replayGuard:F.verificationConfig?.replayGuard,commitIngressReceipt:F.commitIngressReceipt,activateVerifiedPeer:F.activateVerifiedPeer,delegationExecutor:D.remoteDelegationSettlement,peerKeyRegistry:{get(b){return B.getAllPeerSigningKeysByPrincipal?.()?.get(b)},get size(){return B.getAllPeerSigningKeysByPrincipal?.()?.size??0}},revocationStore:F.revocationStore,collectiveMemory:F.collectiveMemory,recoverCrashedSessions:X.server.server.ariaRecoverCrashedSessions?({signal:b})=>X.server.server.ariaRecoverCrashedSessions?.(b):void 0,onWakeTick:(b)=>{this.lastWakeTickAt=b},onWakeReady:(b)=>{this.currentWakeTrigger=b},onCheckpointWriteResult:(b)=>{this.lastCheckpointResult=b},onQuestPostRun:async({quest:b,task:v,response:c,messages:C,signal:f,runReflection:g})=>{let l=m.get(b.id);try{await wW(D,{task:v,arionName:J,config:G,storagePath:Z,router:Y,memoriaFactory:Q,abortSignal:f,mcpServers:V,authResolver:W},c,l,{runReflection:g,runDeepConsolidation:g,messages:C})}finally{if(l)m.delete(b.id)}}}).catch((b)=>{this.lastCheckpointResult="error";let v=b instanceof Error?b.message:String(b);if(v.includes("Daemon lock already held")){P.warn(`[runtime-autonomous-loop] Skipping autonomous loop for "${J}": ${v}`);return}throw P.error(`[runtime-autonomous-loop] Fatal wake-loop failure for "${J}": ${v}`),b}),this.started=!0}catch(O){throw this.releaseMailbox?.(),this.releaseMailbox=null,this.stopController?.abort(),this.stopController=null,this.loopPromise=null,await D.close(),this.session=null,O}finally{if(this.starting=!1,!this.started)this.bootstrapAbortController=null,this.startPromise=null}})(),await this.startPromise}async stop(){if(!this.started&&!this.starting&&!this.startPromise)return;this.bootstrapAbortController?.abort(),this.stopController?.abort();try{await this.startPromise}catch{}let $=this.loopPromise,Z=this.session,J=this.releaseMailbox;this.started=!1,this.starting=!1,this.bootstrapAbortController=null,this.startPromise=null,this.stopController=null,this.loopPromise=null,this.session=null,this.releaseMailbox=null;try{await $}catch{}finally{J?.(),await Z?.close()}}}var r50=E(()=>{V8();a3();b0();S0()});var t50=()=>{};var e50=E(()=>{t50();V_();PB();r_();H_();Q_()});function $20($={}){return W_($)}var Z20=E(()=>{e50()});import*as jJ from"fs";import*as $1 from"path";import{randomBytes as J20,randomUUID as ef0}from"crypto";function X20($){let Z=x0.safeParse($);return Z.success?Z.data:void 0}function G20($){if($y0.has($))return!0;return $.toLowerCase().endsWith(".localhost")}function Y20($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid coordination URL: ${$}`)}let J=Z.hostname.toLowerCase();if(Z.protocol==="https:")return Z;if(Z.protocol==="http:"&&G20(J))return Z;throw Error(`Insecure coordination URL "${$}". Use https:// (http:// allowed only for localhost).`)}function Zy0($){let{startTunnel:Z,stopTunnel:J,heartbeat:X,applyPeerRepair:Y,activeTunnelCount:Q}=$;if(typeof Z!=="function"||typeof J!=="function"||typeof X!=="function"||typeof Y!=="function"||typeof Q!=="number")throw Error("[node-runtime] Peer discovery requires startTunnel, stopTunnel, heartbeat, applyPeerRepair, and activeTunnelCount on the runtime network manager.");return{startTunnel:Z.bind($),stopTunnel:J.bind($),heartbeat:X.bind($),applyPeerRepair:Y.bind($),activeTunnelCount:Q}}function Jy0($){if($.port)return Number.parseInt($.port,10);return $.protocol==="https:"?443:80}function _g($){if(typeof $!=="string")return;let Z=$.trim();if(!Z)return;return Z.replace(/^\[|\]$/g,"").toLowerCase()}function Xy0($,Z){let J=$1.resolve($1.join($,"network","trusted-cas")),X=$1.resolve($1.join(J,`${Z.trim().toLowerCase()}.pem`));if(!X.startsWith(`${J}${$1.sep}`))throw Error("Trusted CA path escapes trusted-cas directory");return X}function Yy0($,Z){if(!Z)return;try{return jJ.readFileSync(Xy0($,Z),"utf8")}catch{return}}function Qy0($){if($.coordinationUrl.protocol!=="https:")return;let Z=_g($.coordinationUrl.hostname),J=Jy0($.coordinationUrl),X=_g($.localExternalAddress);if(J===$.localBoundPort&&Z&&(G20(Z)||X!==void 0&&Z===X))return{coordinationCaCert:$.localCaCert,coordinationTlsIdentity:$.nodeId};if(!Z)return;let Q=new RP({ariaHome:$.ariaHome}).resolveBindingByControlEndpoint({host:Z,port:J});if(!Q||Q==="ambiguous")return;let G=Yy0($.ariaHome,Q.controlTlsCaFingerprint);if(!G)return;return{coordinationCaCert:G,coordinationTlsIdentity:Q.principalFingerprint}}function Gy0($){return{displayNameSnapshot:$.displayNameSnapshot,nodeId:G0.parse($.nodeId),host:$.host,port:$.port,principalFingerprint:f0.parse($.fingerprint),version:$.version,...$.tlsCaFingerprint?{tlsCaFingerprint:$.tlsCaFingerprint}:{},...$.transport?{transport:$.transport}:{},...$.status?{status:$.status}:{}}}function Eg($){if(!$.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='messages'").get())throw new rF("legacy messages schema requires hard reset: missing messages table");let J=new Set($.prepare("PRAGMA table_info(messages)").all().map((Q)=>Q.name)),X=["inbox_address_kind","inbox_address_id"].filter((Q)=>!J.has(Q));if(X.length>0)throw new rF(`legacy messages schema requires hard reset: missing columns: ${X.join(", ")}`);if($.prepare("SELECT COUNT(*) AS count FROM messages WHERE inbox_address_kind IS NULL OR inbox_address_id IS NULL").get().count>0)throw new rF("legacy messages schema requires hard reset: null inbox address rows")}class tF{options;nodeId;runtimeIdValue;started=!1;runtimeControl=null;networkStateStore;relayPollTimer;stunClient;discoveryService;mdnsDiscovery;privateLanDiscovery;nearbyPeerDiscovery;nodeStore;ownsNetworkManager=!1;ownsNodeStore=!1;bootstrapOwnerGeneration=1;unsubscribeRuntimeIngressListener;unsubscribeTransportListener;localControlSocket;sessionHistoryWriter;autonomousLoop;autonomousLoopStartPromise=null;autonomousLoopBootstrap;storageDiagnostics;modelDiscovery;discoveredModels=[];currentModelName;modelRefreshInFlightCount=0;modelLastRefreshAt;daemonSessionCredentialOverlay=null;daemonSessionDiscovery=null;cachedArionManager=null;publishRuntimeEventFn=null;daemonSessionModelCatalog=null;resolvedMemoriaFactory;ownsResolvedMemoriaFactory=!1;networkingReadyResolve;networkingReadyReject;networkingReady;constructor($){this.options=$,this.nodeId=$.nodeId;let Z=$.networkManager?.getLocalDisplayNameSnapshot?.()?.trim()||$.arionName;this.runtimeIdValue=k8.parse(`${Z}~${J20(2).toString("hex")}`),this.autonomousLoopBootstrap={memoriaFactory:$.memoriaFactory,router:$.router,authResolver:$.authResolver,runSessionConfig:$.runSessionConfig,mcpServers:$.mcpServers,daemonSafetyPolicy:$.daemonSafetyPolicy,autonomousIntervalMs:$.autonomousIntervalMs},this.resolvedMemoriaFactory=$.memoriaFactory,this.modelDiscovery=new _1({authResolver:$.authResolver,cacheDir:$.ariaHome}),this.networkingReady=new Promise((J,X)=>{this.networkingReadyResolve=J,this.networkingReadyReject=X}),this.networkingReady.catch(()=>{})}get runtimeId(){return this.runtimeIdValue}resolvedBootstrapOwnerGeneration(){return this.options.ownerGenerationHint??this.options.ownerGeneration??1}currentStorageDiagnostics(){return this.storageDiagnostics}nextBootstrapRevision($){if(!this.nodeStore)return 0;return Ng(this.nodeStore,this.nodeId,$)}resolveBootstrapControlHost($){let Z=($??this.runtimeControl?.networkManager)?.getConfig?.();return _g(Z?.externalEndpoint?.address)??"127.0.0.1"}isRecoverableDaemonBindError($){let Z=$?.code;return Z==="EADDRINUSE"||Z==="EADDRNOTAVAIL"||Z==="EAFNOSUPPORT"}daemonBindCandidates($){let Z=[],J=(X,Y)=>{if(!Z.some((Q)=>Q.host===X&&Q.port===Y))Z.push({host:X,port:Y})};if(J("0.0.0.0",$),$!==0)J("0.0.0.0",0);if(J("127.0.0.1",$),$!==0)J("127.0.0.1",0);return Z}publishBootstrapPhase($,Z){if(!this.nodeStore)return;let J=this.nextBootstrapRevision(Z.ownerGeneration),X=this.nodeStore.writeRuntimeBootstrapRecord(kF({nodeId:this.nodeId,runtimeId:Z.runtimeId,arionName:this.options.arionName,ownerGeneration:Z.ownerGeneration,bootstrapRevision:J,phase:$,controlPort:Z.controlPort,controlHost:Z.controlHost??this.resolveBootstrapControlHost(Z.networkManager),caFingerprint:d$.parse(Z.certs.fingerprint),caCertPem:Z.certs.caCert,networkManager:Z.networkManager,displayNameSnapshot:Z.displayNameSnapshot,publishedAt:new Date().toISOString(),degradedReason:Z.degradedReason,failedPhase:Z.failedPhase}));if(X.ownerGeneration!==Z.ownerGeneration||X.bootstrapRevision!==J)throw Error(`[node-runtime] Runtime bootstrap publication rejected for ${this.nodeId} at generation ${Z.ownerGeneration} revision ${J}`)}configureAutonomousLoop($){return this.autonomousLoopBootstrap={...this.autonomousLoopBootstrap,...$},this.autonomousLoopBootstrap}summarizeAutonomousLoopSafetyPolicy(){return{...this.autonomousLoopBootstrap.daemonSafetyPolicy?.allowedToolCategories?{allowedToolCategories:[...this.autonomousLoopBootstrap.daemonSafetyPolicy.allowedToolCategories]}:{},...this.autonomousLoopBootstrap.daemonSafetyPolicy?.allowedShellCommands?{allowedShellCommands:[...this.autonomousLoopBootstrap.daemonSafetyPolicy.allowedShellCommands]}:{},...typeof this.autonomousLoopBootstrap.daemonSafetyPolicy?.maxWriteOpsPerMinute==="number"?{maxWriteOpsPerMinute:this.autonomousLoopBootstrap.daemonSafetyPolicy.maxWriteOpsPerMinute}:{},...typeof this.autonomousLoopBootstrap.daemonSafetyPolicy?.maxGitPushesPerHour==="number"?{maxGitPushesPerHour:this.autonomousLoopBootstrap.daemonSafetyPolicy.maxGitPushesPerHour}:{}}}resolveDefaultModelName(){let $=this.options.runSessionConfig?.preferredTier;return ZZ($??"balanced")?.shortName}async getArionManager(){if(this.cachedArionManager)return this.cachedArionManager;let $=new T9(this.options.ariaHome);await $.initialize();let Z=await this.ensureMemoriaFactory();if(!Z)throw Error("Memoria factory unavailable for Arion manager access");let J=new R8($,Z);return await J.initialize(),this.cachedArionManager=J,J}async ensureMemoriaFactory(){if(this.resolvedMemoriaFactory)return this.resolvedMemoriaFactory;if(!this.options.router)return;let{MemoriaPool:$}=await Promise.resolve().then(() => (_H(),kZ0)),Z=new $(this.options.ariaHome,this.options.router);return this.resolvedMemoriaFactory=Z.toFactory(),this.ownsResolvedMemoriaFactory=!0,this.autonomousLoopBootstrap={...this.autonomousLoopBootstrap,memoriaFactory:this.resolvedMemoriaFactory},this.resolvedMemoriaFactory}createSessionOverlayState(){let $=this.daemonSessionCredentialOverlay;return{providers:$?Object.keys($.credentials).sort():[]}}buildCredentialOverlay($){if(($.providers?.length??0)>0&&($.credentials?.length??0)===0)throw Error("Provider-only overlay input must be resolved client-side into explicit credentials before sending to the daemon.");let Z={credentials:{}};for(let J of $.credentials??[]){let X=J.provider.trim().toLowerCase();if(!X||!J.apiKey?.trim())continue;Z.credentials[X]={provider:X,source:J.source??"config",credentialType:J.credentialType??"api_key",apiKey:J.apiKey.trim()}}return Z}async applySessionCredentialOverlay($){let Z=this.buildCredentialOverlay($);return this.daemonSessionCredentialOverlay=Z,this.daemonSessionDiscovery=null,this.daemonSessionModelCatalog=null,this.createSessionOverlayState()}clearSessionCredentialOverlayState(){return this.daemonSessionCredentialOverlay=null,this.daemonSessionDiscovery=null,this.daemonSessionModelCatalog=null,this.createSessionOverlayState()}providerStatuses($,Z,J=this.modelDiscovery){let X=J.getCachedProviderResults(),Y=new Set(j4(this.discoveredModels).map((Q)=>Q.provider));if(Y.size===0)for(let Q of j4())Y.add(Q.provider);for(let Q of Object.keys(X))Y.add(Q);return[...Y].sort().map((Q)=>{let G=X[Q];if(!G)return{provider:Q,status:$,...Z?{reason:Z}:{}};let V=G.success?$==="verified"?"verified":"cached":G.error?.includes("No API key")||G.error?.includes("No AWS region")?"requires_auth":G.error?.includes("Cannot find package")?"unavailable":"error";return{provider:Q,status:V,...G.error&&!G.success?{reason:G.error}:{},lastCheckedAt:G.discoveredAt}})}async loadCurrentModelName(){if(this.currentModelName)return this.currentModelName;let $=this.resolveDefaultModelName();try{let X=(await(await this.getArionManager()).get(this.options.arionName))?.preferredModel?.trim();if(X)return this.currentModelName=J6(X)?.shortName??X,this.currentModelName}catch{}return this.currentModelName=$,$}async persistCurrentModel($){let Z=await this.getArionManager();if(typeof Z.setPreferredModel==="function")await Z.setPreferredModel(this.options.arionName,$.shortName);let J=B5();h10({...J,preferredTier:$.tier,activeArion:this.options.arionName})}async buildModelSnapshot($="cached",Z,J){let X=await this.loadCurrentModelName(),Y=J?.models??this.discoveredModels,Q=J?.lastRefreshAt??this.modelLastRefreshAt,G=J?.discovery??this.modelDiscovery,V=Y.length>0;return{models:j4(Y),...X?{currentModel:X}:{},status:{nodeId:this.nodeId,runtimeId:this.runtimeId,port:this.runtimeControl?.port??0,attachedClients:0,...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()},...Q?{lastRefreshAt:Q}:{},stale:!V,refreshInFlight:this.modelRefreshInFlightCount>0,providerStatuses:this.providerStatuses($,Z,G)}}publishModelSnapshotUpdated($,Z){$("model_snapshot_updated",{currentModel:Z.currentModel,modelCount:Z.models.length,lastRefreshAt:Z.lastRefreshAt,stale:Z.stale,refreshInFlight:Z.refreshInFlight,providerStatuses:Z.providerStatuses})}resolveOverlayAuthResolver($,Z){let J=this.daemonSessionCredentialOverlay??void 0,X=Z?{credentials:{...J?.credentials??{},...Z.credentials}}:J,Y=this.options.authResolver;if(!X||!Y)return Y;return XV(Y,X)}createOverlayModelDiscovery($,Z){if(Z||!this.daemonSessionCredentialOverlay)return new _1({authResolver:this.resolveOverlayAuthResolver(void 0,Z),cacheDir:this.options.ariaHome});let J=this.daemonSessionDiscovery;if(!J)J=new _1({authResolver:this.resolveOverlayAuthResolver(),cacheDir:this.options.ariaHome}),this.daemonSessionDiscovery=J;return J}async doRefreshModelSnapshot($,Z,J){this.modelRefreshInFlightCount++;let X=J?this.buildCredentialOverlay(J):void 0,Y=Z?this.createOverlayModelDiscovery(void 0,X):X?new _1({authResolver:this.resolveOverlayAuthResolver(void 0,X),cacheDir:this.options.ariaHome}):this.modelDiscovery,Q=$==="force"?"verified":"cached";try{let G=$==="force"?await Y.refresh(!0):await Y.getCachedOrRefresh(),V=new Date().toISOString();if(Z)return this.daemonSessionModelCatalog={models:G,lastRefreshAt:V},this.buildModelSnapshot(Q,void 0,{models:G,lastRefreshAt:V,discovery:Y});this.discoveredModels=G,this.modelLastRefreshAt=V;let W=await this.buildModelSnapshot(Q,void 0,{discovery:Y});if(this.publishRuntimeEventFn)this.publishModelSnapshotUpdated(this.publishRuntimeEventFn,W);return W}catch(G){let V=Y.getCachedModels();if(Z){let W=this.daemonSessionModelCatalog,H=V.length>0?V:W?.models??[],K=W?.lastRefreshAt;return this.buildModelSnapshot(H.length>0?"cached":"error",G instanceof Error?G.message:String(G),{models:H,lastRefreshAt:K,discovery:Y})}return this.discoveredModels=V,this.buildModelSnapshot(this.discoveredModels.length>0?"cached":"error",G instanceof Error?G.message:String(G),{discovery:Y})}finally{this.modelRefreshInFlightCount--}}async refreshModelSnapshot($,Z){return this.doRefreshModelSnapshot("cached",$,Z)}async forceRefreshModelSnapshot($,Z){return this.doRefreshModelSnapshot("force",$,Z)}async setCurrentModelSnapshot($){let Z=$.trim();if(!Z)throw Error("Model name is required");let J=await this.refreshModelSnapshot(!1),X=J6(Z,J.models);if(!X)J=await this.forceRefreshModelSnapshot(!1),X=J6(Z,J.models);if(!X)throw Error(`Unknown model: ${$}`);return await this.persistCurrentModel(X),this.currentModelName=X.shortName,{...J,currentModel:X.shortName,providerStatuses:this.providerStatuses("verified")}}getAutonomousLoopStatus(){if(this.autonomousLoop)return this.autonomousLoop.getStatusSummary(this.options.ownerClientKind??null);return{status:"stopped",intervalMs:this.autonomousLoopBootstrap.autonomousIntervalMs??null,lastWakeTickAt:null,lastCheckpointResult:"never",safetyPolicySummary:this.summarizeAutonomousLoopSafetyPolicy(),ownerClientKind:this.options.ownerClientKind??null}}async stopAutonomousLoop(){if(this.autonomousLoop)await this.autonomousLoop.stop(),this.autonomousLoop=void 0;this.autonomousLoopStartPromise=null}async startAutonomousLoop(){let $=this.autonomousLoopBootstrap.router,Z=this.autonomousLoopBootstrap.memoriaFactory??await this.ensureMemoriaFactory();if(!this.runtimeControl||!Z||!$)return;if(this.autonomousLoopStartPromise){await this.autonomousLoopStartPromise;return}if(!this.autonomousLoop)this.autonomousLoop=new qg({ariaHome:this.options.ariaHome,arionName:this.options.arionName,runtimeControl:this.runtimeControl,router:$,memoriaFactory:Z,runSessionConfig:this.autonomousLoopBootstrap.runSessionConfig??{activeArion:this.options.arionName},mcpServers:this.autonomousLoopBootstrap.mcpServers,authResolver:this.autonomousLoopBootstrap.authResolver,intervalMs:this.autonomousLoopBootstrap.autonomousIntervalMs,safetyPolicy:this.autonomousLoopBootstrap.daemonSafetyPolicy,signal:this.options.signal,nodeStore:this.nodeStore});this.autonomousLoopStartPromise=this.autonomousLoop.start().catch((J)=>{if(J instanceof Error&&J.kind==="StaleOwnerError"){let X=J;P.warn(`[node-runtime] Runtime superseded at generation ${X.claimedGeneration} (current: ${X.currentGeneration}). Shutting down immediately.`),this.shutdown().catch(()=>{});return}P.error(`[node-runtime] Autonomous loop failed to start for "${this.options.arionName}": ${J instanceof Error?J.message:String(J)}`)}),await this.autonomousLoopStartPromise}async start(){if(this.started&&this.runtimeControl)return;let{ariaHome:$,arionName:Z,signal:J,nodeId:X}=this.options,Y=this.options.memoriaFactory,Q=this.options.nodeStore??new M$({ariaHome:$});if(this.bootstrapOwnerGeneration=this.options.ownerGenerationHint??Math.max(Q.readRuntimeOwnerRecord(this.nodeId)?.ownerGeneration??0,Q.readRuntimeBootstrapRecord(this.nodeId)?.ownerGeneration??0)+1,!this.options.nodeStore)Q.close();this.nodeStore??=this.options.nodeStore??new M$({ariaHome:$,ownerGeneration:this.bootstrapOwnerGeneration}),this.ownsNodeStore=!this.options.nodeStore;let G=this.nodeStore,V=null,W;this.networkStateStore??=new Q20.NetworkStateStore({ariaHome:$});let H;try{H=this.networkStateStore.open(),this.networkStateStore.claimOwnerEpoch(this.bootstrapOwnerGeneration),this.storageDiagnostics={...this.storageDiagnostics??{},networkState:this.networkStateStore.getCapabilities()}}catch(Z0){if(Z0 instanceof Error&&Z0.kind==="StaleOwnerError")throw Z0;throw Error(`[node-runtime] Canonical network state store unavailable: ${Z0 instanceof Error?Z0.message:String(Z0)}`)}if(Y&&typeof Y.get==="function")try{let Z0=await Y.get(`arions/${Z}/memory.db`),H0=Z0.storage?.getCapabilities?.();if(H0)this.storageDiagnostics={...this.storageDiagnostics??{},memoria:H0};let B0=Z0.storage?.getConnection?.();if(B0)Eg(B0);let F0=(B0?new BZ(B0):null)??Z0.storage?.createMessageStore?.({validateSchema:Eg})??BZ.fromConnectionOwner(Z0.storage,{validateSchema:Eg});if(F0)V=F0,W=new x1}catch(Z0){if(Z0 instanceof rF)throw Error(`[node-runtime] Canonical runtime message store unavailable: ${Z0.message}`);P.debug(`[node-runtime] Runtime message store unavailable for ${Z}: ${Z0 instanceof Error?Z0.message:String(Z0)}`)}let K=this.options.networkManager;if(!K)try{let Z0=new TJ.PeerRegistry(H),H0=new TJ.NetworkManager($,Z,Z0);H0.setLocalNodeId(this.nodeId),await H0.initialize(),K=H0}catch(Z0){throw Error(`[node-runtime] NetworkManager unavailable: ${Z0 instanceof Error?Z0.message:String(Z0)}`)}if(!K)throw Error("[node-runtime] NetworkManager unavailable");let z=K,U=z.getConfig(),B=X20(U?.signingPublicKey),F=B?C9(B):null;if(!F)throw Error("[node-runtime] Runtime principal fingerprint unavailable");let D=this.nodeId,O=D,L=$M($,F);if(!L.serverCert||!L.serverKey)throw Error("TLS certificates unavailable \u2014 networking requires TLS for all peer communication.");P.debug(`[node-runtime] TLS CA fingerprint: ${L.fingerprint}`);let q=U?.coordinationUrl&&typeof U.publicKey==="string"&&B&&U.signingPrivateKey?Zy0(K):void 0,A=z.getLocalDisplayNameSnapshot?.()?.trim();if(!A)throw Error("[node-runtime] Runtime bootstrap display name unavailable");let N=this.runtimeIdValue,_=this.resolvedBootstrapOwnerGeneration(),M=this.options.silent??!1,T=this.options.port??0,k=async(Z0)=>await gP({port:Z0.port,host:Z0.host,basePath:$,arionName:this.options.arionName,nodeId:this.nodeId,networkManager:K,memoriaFactory:Y,router:this.options.router,authResolver:this.options.authResolver,enableCrashRecovery:!1,runtimeId:N,ownerGeneration:_,tls:{cert:L.serverCert,key:L.serverKey},silent:M}),R,a,o;for(let Z0 of this.daemonBindCandidates(T)){let H0;try{H0=await k(Z0),a=await H0.listen(),R=H0;break}catch(B0){if(o=B0,await H0?.server.close().catch(()=>{return}),!this.isRecoverableDaemonBindError(B0))throw B0;P.warn(`[node-runtime] daemon bind ${Z0.host}:${Z0.port} failed (${B0.code??"unknown"}); retrying`)}}if(!R||!a)throw o instanceof Error?o:Error(String(o));let u=R.server.ariaMessageStore;if(u)V=u,W??=new x1;let w=typeof a==="string"&&a.includes(":")?Number.parseInt(a.split(":").pop(),10):0;if(!w)throw Error("Server bound to port 0 \u2014 OS failed to assign a port");P.debug(`[node-runtime] HTTPS server listening on ${a}`);let m=R.server.ariaRevocationStore;if(!m)throw await R.server.close(),Error("[node-runtime] Canonical revocation authority unavailable");let I=_,S=(Z0,H0={})=>{this.publishBootstrapPhase(Z0,{controlPort:w,runtimeId:N,ownerGeneration:I,certs:L,networkManager:K,displayNameSnapshot:A,...H0})},j=()=>{let Z0=G.readRuntimeBootstrapRecord(this.nodeId);if(!Z0||Z0.runtimeId!==N||Z0.ownerGeneration!==I||!["control_ready","network_ready","mesh_ready"].includes(Z0.phase))return;S(Z0.phase)};if(B)R.server.ariaPeerSigningKeyStore?.set(this.nodeId,B,A);this.ownsNetworkManager=!this.options.networkManager;let b=new Set,v=this.publishRuntimeEventFn=(Z0,H0={})=>{let B0=G.appendRuntimeEvent({nodeId:this.nodeId,runtimeId:N,kind:Z0,payload:H0});for(let F0 of b)F0(B0);return B0},c=async function*(Z0){let H0=Z0?.afterRevision??0,B0=G.listRuntimeEvents().filter((D0)=>(D0.revision??0)>H0),F0,V0=(D0)=>{if((D0.revision??0)<=H0)return;B0.push(D0);let C0=F0;F0=void 0,C0?.()};b.add(V0);try{while(!0){if(B0.length>0){yield B0.shift();continue}await new Promise((D0)=>{F0=D0})}}finally{b.delete(V0)}},C=$20({receiptStore:G,localNodeId:this.nodeId,signingKey:typeof U?.signingPrivateKey==="string"?U.signingPrivateKey:void 0,onReceiptCommitted:(Z0)=>{let H0=Z0.status==="queued_for_route"?"durable_send_queued":Z0.status==="dispatching"?"durable_send_dispatching":Z0.status==="acked"?"durable_send_acked":Z0.status==="expired"?"durable_send_expired":null;if(!H0)return;v(H0,{messageId:Z0.messageId,senderNodeId:Z0.senderNodeId,recipientNodeId:Z0.recipientNodeId,transport:Z0.transport,status:Z0.status,deliveryLifecycleRevision:Z0.deliveryLifecycleRevision,updatedAt:Z0.updatedAt})},faultCheckpoint:typeof this.options.faultCheckpoint==="function"?(Z0,H0)=>this.options.faultCheckpoint?.(Z0,H0):void 0}),f=new Set,g=new Map,l=(Z0,H0)=>{if(!Z0)return;g.set(Z0,H0)},$0=(Z0)=>{if(!Z0)return;g.delete(Z0)},Y0=(Z0)=>{let H0=g.get(Z0);if(H0)return H0;let B0=K.getActiveTransports?.()?.find((F0)=>F0.nodeId===Z0);if(B0)return l(Z0,B0.transport),B0.transport;return},x=(Z0)=>{let{sender:H0,recipient:B0}=Z0;if(!H0?.name||!B0?.name||!H0.id||!B0.id)return;let F0=G0.safeParse(H0.id).data,V0=G0.safeParse(B0.id).data;if(!F0||!V0)return;let D0=Y0(F0);if(!D0)return;try{D0.sendPlaintext(Buffer.from(JSON.stringify({deliveryAck:{protocolVersion:1,messageId:String(Z0.id),senderNodeId:V0,recipientNodeId:F0,storedAt:Date.now()}})))}catch(C0){P.debug(`[node-runtime] delivery ack send failed for ${String(Z0.id)}: ${C0 instanceof Error?C0.message:String(C0)}`)}};{let Z0=K,H0=[],B0=!1,F0=(L0,P0,c0)=>{let z$=H0.findIndex((A0)=>A0.nodeId===c0);if(z$>=0){H0[z$]={displayNameSnapshot:L0,transport:P0,nodeId:c0};return}H0.push({displayNameSnapshot:L0,transport:P0,nodeId:c0})},V0=(L0,P0)=>{this.options.mailboxRef.current.registerTunnel(L0,P0)},D0=()=>{if(B0||!this.options.mailboxRef?.current)return;for(let{transport:L0,nodeId:P0}of H0)V0(P0,L0);H0.length=0,B0=!0},C0=(L0,P0,c0)=>{if(l(c0,P0),C.registerTunnel(c0,P0),this.options.mailboxRef?.current)D0(),V0(c0,P0);else F0(L0,P0,c0);this.options.onTransportEstablished?.(L0,P0)},_0=(L0,P0)=>{let c0=Z0.getActiveTransports?.()?.find((A0)=>A0.nodeId===P0);if(c0){if(l(P0,c0.transport),C.registerTunnel(G0.parse(P0),c0.transport),this.options.mailboxRef?.current)D0(),V0(P0,c0.transport);else F0(c0.displayNameSnapshot,c0.transport,P0);return}$0(P0),C.unregisterTunnel(G0.parse(P0)),this.options.mailboxRef?.current?.unregisterTunnel(G0.parse(P0));let z$=H0.findIndex((A0)=>A0.nodeId===P0);if(z$>=0)H0.splice(z$,1);this.options.onTransportTornDown?.(L0)};this.unsubscribeTransportListener=Z0.addTransportListener?.({onRouteBootstrapAvailable:(L0,P0,c0)=>{this.options.mailboxRef?.current?.registerTunnel(c0,P0)},onTransportUp:C0,onTransportDown:_0});for(let{displayNameSnapshot:L0,transport:P0,nodeId:c0}of Z0.getActiveTransports?.()??[])C0(L0,P0,c0);if(this.options.mailboxRef){let L0=setInterval(()=>{if(this.options.mailboxRef?.current)D0(),clearInterval(L0)},2000);if(L0.unref)L0.unref()}}let r=!(this.options.ownerClientKind==="local-api"&&this.options.runtimeLifecycle==="scoped"),J0,X0,n,K0=new Promise((Z0,H0)=>{X0=Z0,n=H0}),z0=()=>K0;setImmediate(()=>{this.startNetworkingSubsystems({enableBackgroundDiscovery:r,networkManager:K,networkStateDb:H,peerDiscoveryNetworkManager:q,certs:L,boundPort:w,localNodeId:D,localDisplayNameSnapshot:A,localSigningPublicKey:B,ariaHome:$,signal:J,runtimeId:N,republishCurrentBootstrapPhaseIfEndpointChanged:j,commitBootstrapPhase:S,resolveDiscoveryBarrier:X0,rejectDiscoveryBarrier:n})});let O0=[];if(O0.push(K.addDeliveryAckListener((Z0)=>{C.handleDeliveryAck(Z0)})),V)O0.push(K.addMessageListener((Z0)=>{let H0=Z0;if(!H0?.id||!H0.sender||!H0.content)return!1;if(!O)return P.debug("[node-runtime] Rejected ingress message: missing local recipient node id"),!1;let B0=V2({id:`runtime-${String(H0.id)}`,source:"arion",content:JSON.stringify({ariaMessage:H0})},V,{createQuest(){return null}},P,K.getAllPeerSigningKeysByPrincipal?.()??new Map,void 0,m,void 0,{verificationConfig:{expectedRecipientNodeId:O,...W?{freshnessGuard:W}:{}},localInboxAddress:{kind:"node",nodeId:O},commitIngressReceipt:(F0,V0)=>{let{resolvedNodeId:D0,resolvedPeerFingerprint:C0}=V0;if(!D0)throw Error("[node-runtime] accepted ingress is missing resolvedNodeId");if(!C0)throw Error("[node-runtime] accepted ingress is missing resolvedPeerFingerprint");G.commitIngressReceipt({messageId:String(H0.id),senderNodeId:G0.parse(D0),senderFingerprint:f0.parse(C0),runtimeId:N})},commitVerifiedPeerActivation:typeof K.activatePendingPeer==="function"?(F0)=>{if(!F0.resolvedNodeId)throw Error("[node-runtime] accepted ingress is missing resolvedNodeId for activation");K.activatePendingPeer?.(F0.resolvedNodeId)}:void 0,acknowledgeReceipt:x,faultCheckpoint:typeof this.options.faultCheckpoint==="function"?(F0,V0)=>this.options.faultCheckpoint?.(F0,V0):void 0});if(!B0)P.debug(`[node-runtime] Rejected remote ingress message ${String(H0.id)} sender=${String(H0.sender?.id??"unknown")} recipient=${String(H0.recipient?.id??"unknown")}`);return B0?!0:!1}));this.unsubscribeRuntimeIngressListener=()=>{for(let Z0 of O0.splice(0))Z0()};let R0=(Z0)=>{let H0=K;if(H0.getActiveTransports)for(let{transport:V0,nodeId:D0}of H0.getActiveTransports())Z0.registerTunnel(D0,V0);let B0;if(H0.addTransportListener)B0=H0.addTransportListener({onRouteBootstrapAvailable:(V0,D0,C0)=>{Z0.registerTunnel(C0,D0)},onTransportUp:(V0,D0,C0)=>{Z0.registerTunnel(C0,D0)},onTransportDown:(V0,D0)=>{let C0=H0.getActiveTransports?.()?.find((_0)=>_0.nodeId===D0);if(C0){Z0.registerTunnel(D0,C0.transport);return}Z0.unregisterTunnel(D0)}});let F0=Symbol("attachedMailbox");if(f.add(F0),this.options.mailboxRef)this.options.mailboxRef.current=Z0;return()=>{if(B0?.(),f.delete(F0),this.options.mailboxRef?.current===Z0)this.options.mailboxRef.current=null}};try{if(!R.server.ariaRuntimeOutbox)R.server.decorate("ariaRuntimeOutbox",C);else R.server.ariaRuntimeOutbox=C}catch{R.server.ariaRuntimeOutbox=C}S("starting");let I0="tls_bound";S("tls_bound");try{let Z0=cP({server:R.server}),H0=(A0)=>e$(A0),B0=new Map,F0=(A0)=>A0.state==="live"&&(!A0.leaseSocket||!A0.leaseSocket.destroyed&&A0.leaseSocket.writable),V0=(A0)=>A0!=="daemon-launcher",D0=()=>{let A0=Array.from(B0.values()).filter((r0)=>F0(r0)&&V0(r0.clientKind)),u0=new Set,U$=0;for(let r0 of A0){if(r0.pid!=null){if(u0.has(r0.pid))continue;u0.add(r0.pid)}U$++}return U$},C0=(A0)=>{let u0=B0.get(A0.clientId);if(!u0||u0.state!=="live")return!1;return u0.clientAuthTokenHash===H0(A0.clientAuthToken)},_0=async({clientId:A0})=>{let u0=Array.from(B0.entries()).filter(([,p$])=>F0(p$)).filter(([,p$])=>V0(p$.clientKind)),U$=new Map,r0=[];for(let p$ of u0){let c$=p$[1].pid;if(c$==null){r0.push(p$);continue}let z9=U$.get(c$);if(!z9||p$[1].attachedAt>z9[1].attachedAt)U$.set(c$,p$)}let V$=[...U$.values(),...r0],r8=B0.get(A0)?.pid;return V$.map(([p$,c$])=>({clientId:p$,clientKind:c$.clientKind,displayLabel:c$.displayName?`${c$.displayName} (pid ${c$.pid??"?"})`:c$.pid?`${Z} (pid ${c$.pid})`:c$.clientKind==="pipe"?"Attached pipe":"Attached terminal",self:p$===A0||r8!=null&&c$.pid!=null&&r8===c$.pid,attachedAt:c$.attachedAt,lastSeenAt:c$.lastSeenAt}))};try{let A0=$1.join(this.options.ariaHome,"arions",this.options.arionName,"history.db");if(jJ.existsSync(A0))this.sessionHistoryWriter=new Z6(A0)}catch(A0){P.warn("[NodeRuntime] Failed to open session history writer:",A0?.message)}let L0=mP({status:()=>({nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}),getModelSnapshot:async()=>{return{...await this.buildModelSnapshot("cached"),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},getModelSnapshotAsAttachedClient:async(A0)=>{let u0=this.daemonSessionModelCatalog,U$=u0?.models??this.discoveredModels,r0=u0?.lastRefreshAt??this.modelLastRefreshAt;return{...await this.buildModelSnapshot("cached",void 0,{models:U$,lastRefreshAt:r0}),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},refreshModelSnapshot:async(A0)=>{return{...await this.forceRefreshModelSnapshot(!1,A0),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},refreshModelSnapshotAsAttachedClient:async(A0,u0)=>{return{...await this.forceRefreshModelSnapshot(!0,u0),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},setCurrentModel:async(A0)=>{return{...await this.setCurrentModelSnapshot(A0),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},getSessionCredentialOverlayState:async()=>{return this.createSessionOverlayState()},setSessionCredentialOverlay:async(A0)=>{return this.applySessionCredentialOverlay(A0)},clearSessionCredentialOverlay:async()=>{return this.clearSessionCredentialOverlayState()},submitRunAsAttachedClient:async(A0,u0)=>{let U$=R.server.ariaRunControl;if(!U$)throw Error("Runtime run control unavailable");let r0=this.daemonSessionCredentialOverlay??void 0,V$=await U$.submitRun(u0,{clientId:A0.clientId,...r0?{overlay:r0}:{}});return{runId:V$.status===200&&V$.body&&typeof V$.body.id==="string"?V$.body.id:`attached:${A0.clientId}:${Date.now()}`,async wait(){return V$.body}}},startAutonomousLoop:async(A0)=>{return this.configureAutonomousLoop({...typeof A0?.intervalMs==="number"?{autonomousIntervalMs:A0.intervalMs}:{},...A0?.safetyPolicy?{daemonSafetyPolicy:A0.safetyPolicy}:{}}),await this.startAutonomousLoop(),{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),autonomousLoop:this.getAutonomousLoopStatus()}},stopAutonomousLoop:async()=>{return await this.stopAutonomousLoop(),{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),autonomousLoop:this.getAutonomousLoopStatus()}},server:R.server,subscribeRuntimeEvents:c,sessionHistory:this.sessionHistoryWriter??void 0});try{if(!R.server.ariaRuntimeLocalControl)R.server.decorate("ariaRuntimeLocalControl",L0);else R.server.ariaRuntimeLocalControl=L0}catch{R.server.ariaRuntimeLocalControl=L0}KP(R.server,{authorizeAttachedClient:(A0,u0)=>{let U$=N4.safeParse(A0);if(!U$.success)return!1;return C0({clientId:U$.data,clientAuthToken:u0})}});try{if(!R.server.ariaAttachedClientControl)R.server.decorate("ariaAttachedClientControl",{listAttachedClients:_0,countAttachedClients:D0,authorizeAttachedClient:C0});else R.server.ariaAttachedClientControl={listAttachedClients:_0,countAttachedClients:D0,authorizeAttachedClient:C0}}catch{R.server.ariaAttachedClientControl={listAttachedClients:_0,countAttachedClients:D0,authorizeAttachedClient:C0}}let P0=()=>{let A0=R.server.ariaRuntimeMessageControl;if(!A0)throw Error("Runtime message control unavailable for local attach");return A0},c0=()=>{let A0=R.server.ariaPeerLocalControl;if(!A0)throw Error("Peer local control unavailable for local attach");return A0},z$=async()=>(this.nearbyPeerDiscovery?.getVisiblePeers()??[]).map(Gy0);try{let u0={...R.server.ariaPeerLocalControl??{},listNearbyPeers:async()=>z$()};if(!R.server.ariaPeerLocalControl)R.server.decorate("ariaPeerLocalControl",u0);else R.server.ariaPeerLocalControl=u0}catch{R.server.ariaPeerLocalControl={listNearbyPeers:async()=>z$()}}I0="control_ready",this.localControlSocket=await k10({socketPath:this.options.runtimeSocketPath??$1.join($,"node",`${this.nodeId}.sock`),localControl:L0,listInbox:async(A0)=>(await P0().listInbox({limit:A0?.limit??100,unreadOnly:A0?.unreadOnly??!1})).filter((u0)=>typeof A0?.cursor?.afterCreatedAt==="number"?u0.createdAt>=A0.cursor.afterCreatedAt:!0),listDirectClientInbox:async(A0,u0)=>{let U$=P0().listDirectClientInbox;if(!U$)throw Error("Direct client inbox not available");let r0=u0?.cursor?.afterCreatedAt,V$=await U$({clientId:A0.clientId,limit:u0?.limit??100,unreadOnly:u0?.unreadOnly??!1});return typeof r0==="number"?V$.filter((_$)=>_$.createdAt>=r0):V$},subscribeRuntimeEvents:c,listPeers:async()=>c0().listPeers(),listNearbyPeers:async()=>z$(),attachClient:async({clientKind:A0,pid:u0,displayName:U$})=>{let r0=N4.parse(u0?`client-pid-${u0}`:`client-${ef0()}`),V$=B0.get(r0),_$=J20(32).toString("hex"),r8=V$?.attachedAt??new Date().toISOString();return B0.set(r0,{clientKind:A0,attachedAt:r8,lastSeenAt:new Date().toISOString(),clientAuthTokenHash:H0(_$),state:"live",pid:u0,displayName:U$}),v("client_attached",{clientId:r0,clientKind:A0,ownership:V$?"reattached":"new"}),{clientId:r0,clientAuthToken:_$}},onClientLeaseSocket:(A0,u0)=>{let U$=B0.get(A0);if(U$)U$.leaseSocket=u0},listAttachedClients:async(A0)=>_0({clientId:A0.clientId}),authorizeAttachedClient:C0,detachClient:async({clientId:A0})=>{let u0=B0.get(A0);if(!u0)return{detached:!1};return u0.state="draining",R.server.ariaMessageStore?.deleteForInbox?.({kind:"client",clientId:A0}),B0.delete(A0),v("client_detached",{clientId:A0,clientKind:u0.clientKind}),{detached:!0}},onMessageReceived:(A0)=>{K.addMessageListener?.(()=>{return A0(),!1})},log:(A0,u0)=>{try{let U$=$1.join($,"logs");jJ.mkdirSync(U$,{recursive:!0});let r0=JSON.stringify({ts:new Date().toISOString(),level:A0,source:"local-control-socket",message:u0});jJ.appendFileSync($1.join(U$,"daemon-auth.jsonl"),r0+`
|
|
5427
|
+
`)}catch{}}function sk0($){return e8.shape.tlsServerIdentity.parse(Reflect.get($,"principalFingerprint"))}function rk0($){let{ariaMessageStore:Z,ariaNodeId:J}=$;if(!Z||!J)throw new yP;return{messageStore:Z,inboxAddress:M8.parse({kind:"node",nodeId:J})}}function Yg($,Z){let J=$.ariaMessageStore;if(!J)throw new yP;return{messageStore:J,inboxAddress:M8.parse({kind:"client",clientId:Z})}}function tk0($,Z,J){if(J.inboxAddress.kind==="client"&&J.inboxAddress.clientId===Z)return!0;return J.inboxAddress.kind==="node"&&J.inboxAddress.nodeId===$.ariaNodeId}function ek0($){let Z=$.ariaRuntimeOutbox;if(!Z)throw Error("Runtime outbox not available");return Z}function Y50($,Z){let J=ek0($),X=J[Z];if(typeof X!=="function")throw Error(`Runtime outbox ${Z} not available`);return X.bind(J)}async function Q50($){async function*Z(J){let X=J.cursor?.afterCreatedAt??0,Y=new Set,Q=$.ariaInboxEventHub,G;if(Q)G=Q.subscribe({signal:J.signal,predicate:(K)=>tk0($,J.clientId,K)})[Symbol.asyncIterator]();let V=[],W=J.cursor??{afterCreatedAt:0,afterId:""};while(!0){let H=await($.ariaRuntimeMessageControl?.listDirectClientInbox?.({clientId:J.clientId,limit:500,unreadOnly:!1,cursor:W})??Promise.resolve([]));if(H.length===0)break;V.push(...H);let K=H[H.length-1];if(W={afterCreatedAt:K.createdAt,afterId:K.id},H.length<500)break}for(let H of V){if(H.createdAt<X)continue;if(Y.has(H.id))continue;Y.add(H.id),X=H.createdAt,yield H}if(G)try{while(!J.signal?.aborted){let{value:H,done:K}=await G.next();if(K)break;if(Y.has(H.id))continue;Y.add(H.id),X=H.createdAt,yield H}}catch{}}N6($,"ariaRuntimeMessageControl",{sendBestEffort:async(J)=>{let X=G8.parse(J);if(X.recipientInbox?.kind==="client"){let{messageStore:Q}=Yg($,X.recipientInbox.clientId),G=X.rawMessage;if(!G.id||!G.sender?.id||!G.sender?.name||!G.sender?.type||!G.recipient?.id||!G.recipient?.name||!G.type||!G.content)throw Error("Client-targeted delivery requires a complete rawMessage");let V={id:G.id,sender:{id:G.sender.id,name:G.sender.name,type:G.sender.type},recipient:{id:G.recipient.id,name:G.recipient.name},replyTo:G.replyTo,correlationId:G.correlationId,questId:G.questId,type:G.type,content:G.content,metadata:G.metadata,priority:G.priority,signature:G.signature,timestamp:G.timestamp??Date.now()};return Q.store(V,"received",X.recipientInbox),n4.parse(N7({transport:"local_runtime",sessionState:"none",deliveryReadiness:"can_queue_only"}))}let Y=await Y50($,"sendBestEffort")(X.rawMessage);return n4.parse(Y)},sendDurable:async(J)=>{let X=G8.parse(J);if(X.recipientInbox?.kind==="client"){let{messageStore:Q}=Yg($,X.recipientInbox.clientId),G=X.rawMessage;if(!G.id||!G.sender?.id||!G.sender?.name||!G.sender?.type||!G.recipient?.id||!G.recipient?.name||!G.type||!G.content)throw Error("Client-targeted delivery requires a complete rawMessage");let V=G.timestamp??Date.now(),W={id:G.id,sender:{id:G.sender.id,name:G.sender.name,type:G.sender.type},recipient:{id:G.recipient.id,name:G.recipient.name},replyTo:G.replyTo,correlationId:G.correlationId,questId:G.questId,type:G.type,content:G.content,metadata:G.metadata,priority:G.priority,signature:G.signature,timestamp:V};return Q.store(W,"received",X.recipientInbox),i4.parse({...N7({transport:"local_runtime",sessionState:"none",deliveryReadiness:"can_queue_only"}),storedAt:V})}let Y=await Y50($,"sendDurable")(X.rawMessage);return i4.parse(Y)},listDirectClientInbox:async(J)=>{let{messageStore:X}=Yg($,J.clientId),Y=M8.parse({kind:"client",clientId:J.clientId}),Q=Math.min(Math.max(J.limit??100,1),1000),G=J.unreadOnly??!1,V=J.cursor?X.listInboxSince(Y,J.cursor,Q,{unreadOnly:G}):G?X.getUnreadForInbox(Y,Q):X.searchInbox(Y,"",{limit:Q}),W=$.ariaNodeId,H=W?J.cursor?X.listInboxSince(M8.parse({kind:"node",nodeId:W}),J.cursor,Q,{unreadOnly:G}):G?X.getUnreadForInbox(M8.parse({kind:"node",nodeId:W}),Q):X.searchInbox(M8.parse({kind:"node",nodeId:W}),"",{limit:Q}):[],K=new Set;return[...V,...H].filter((U)=>{if(K.has(U.id))return!1;if(J.cursor?.afterCreatedAt!==void 0){if(U.created_at<J.cursor.afterCreatedAt)return!1;if(U.created_at===J.cursor.afterCreatedAt&&J.cursor.afterId!==void 0&&U.id<=J.cursor.afterId)return!1}return K.add(U.id),!0}).sort((U,B)=>U.created_at-B.created_at||U.id.localeCompare(B.id)).slice(0,Q).map((U)=>{let B=null;if(U.metadata)try{let L=JSON.parse(U.metadata).senderInbox;if(L?.kind==="client"&&L.clientId)B=L.clientId}catch{}let F=U.recipient_id,D=typeof F==="string"&&F.startsWith("client-")?F:null;return c8.parse({id:U.id,senderNodeId:U.sender_id,senderDisplayNameSnapshot:U.sender_name,senderType:"sender_type"in U&&typeof U.sender_type==="string"?U.sender_type:void 0,senderClientId:B,recipientClientId:D,inboxAddress:M8.parse({kind:U.inbox_address_kind,...U.inbox_address_kind==="client"?{clientId:U.inbox_address_id}:{nodeId:G0.parse(U.inbox_address_id)}}),type:U.type,content:U.content,priority:"priority"in U&&typeof U.priority==="number"?U.priority:0,createdAt:U.created_at,correlationId:"correlation_id"in U&&typeof U.correlation_id<"u"?U.correlation_id:void 0,replyTo:"reply_to"in U&&typeof U.reply_to<"u"?U.reply_to:void 0})})},subscribeDirectClientInbox:Z,listInbox:async(J)=>{let{messageStore:X,inboxAddress:Y}=rk0($),Q=Math.min(Math.max(J?.limit??100,1),1000);return(J?.unreadOnly??!1?X.getUnreadForInbox(Y,Q):X.searchInbox(Y,"",{limit:Q})).map((W)=>c8.parse({id:W.id,senderNodeId:W.sender_id,senderDisplayNameSnapshot:W.sender_name,senderType:"sender_type"in W&&typeof W.sender_type==="string"?W.sender_type:void 0,inboxAddress:M8.parse({kind:W.inbox_address_kind,...W.inbox_address_kind==="client"?{clientId:W.inbox_address_id}:{nodeId:G0.parse(W.inbox_address_id)}}),type:W.type,content:W.content,priority:"priority"in W&&typeof W.priority==="number"?W.priority:0,createdAt:W.created_at,correlationId:"correlation_id"in W&&typeof W.correlation_id<"u"?W.correlation_id:void 0,replyTo:"reply_to"in W&&typeof W.reply_to<"u"?W.reply_to:void 0}))}}),t70($),$.get("/api/v1/join/challenge",async(J,X)=>{let Y=Date.now();for(let[V,W]of vH)if(Y-W.createdAt>J50)vH.delete(V);if(vH.size>ok0)return X.status(429).send({error:"Too many pending challenges"});let Q=oF.randomBytes(32).toString("hex"),G=oF.randomBytes(16).toString("hex");return vH.set(G,{challenge:Q,createdAt:Y}),X.send({challenge:`${G}:${Q}`,difficulty:X50,expiresIn:J50})}),$.post("/api/v1/join",{schema:{body:WG}},async(J,X)=>{let Y=`join:${J.ip}:${J.body.nodeId}`,Q=Date.now();if(PJ.size>$50/2){for(let[T,k]of PJ.entries())if(k.resetAt<=Q)PJ.delete(T)}let G=PJ.get(Y);if(G&&Q<G.resetAt){if(G.count++,G.count>Z50)return J7({peerLabel:J.body.displayNameSnapshot??J.body.nodeId,ip:J.ip,success:!1,reason:"rate_limited"}),X.status(429).send({error:`Join rate limit exceeded (${Z50}/min)`})}else{PJ.set(Y,{count:1,resetAt:Q+60000});while(PJ.size>$50){let T=PJ.keys().next().value;if(!T)break;PJ.delete(T)}}{let T=J.body.proofOfWork.indexOf(":");if(T<0)return X.status(400).send({error:"Invalid proof-of-work format"});let k=J.body.proofOfWork.slice(0,T),R=J.body.proofOfWork.slice(T+1),a=vH.get(k);if(!a)return X.status(400).send({error:"Invalid or expired proof-of-work challenge"});vH.delete(k);let o=oF.createHash("sha256").update(a.challenge+R).digest("hex"),u="0".repeat(X50);if(!o.startsWith(u))return X.status(400).send({error:"Proof-of-work solution invalid"})}let V=ZX.parse(J.body),{peerPublicKey:W,signingPublicKey:H,nodeId:K,transportEndpoint:z,controlEndpoint:U,displayNameSnapshot:B,inviteTokenNonce:F,protocolVersion:D}=V,O=sk0(J.body);if(!U)return X.status(400).send({error:"Join requires a control endpoint advertisement"});let L=G0.parse(K),q=x0.parse(H);if($.ariaRevocationStore?.isPeerRevoked?.(L))return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"peer_principal_revoked"}),X.status(403).send({error:"Peer has been revoked \u2014 contact network administrator to re-invite"});let A;try{A=bZ(D,"join")}catch(T){return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:`unsupported_protocol_version_${String(D)}`}),X.status(400).send({error:T.message})}let N=$.ariaJoinControl?.completeJoin;if(!N)return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"join_control_unavailable"}),X.status(503).send({error:"Join control not available"});let _;try{_=(await N({nodeId:L,principalFingerprint:O,peerPublicKey:W,peerSigningKey:q,peerTransportEndpoint:z,peerControlEndpoint:U,displayNameSnapshot:B,inviteTokenNonce:F})).effectiveName}catch(T){let k=String(B??K).replace(/[\x00-\x1f]/g,"").slice(0,64),R=String(T.message??"").replace(/[\x00-\x1f]/g,"").slice(0,200);if(J.log.warn(`completeJoin failed for ${k}: ${R}`),R==="Network manager not available for join completion")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"network_manager_unavailable"}),X.status(503).send({error:R});if(R==="Invalid signing public key")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"invalid_signing_public_key"}),X.status(400).send({error:R});if(R==="Join principalFingerprint must match the signing public key fingerprint")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"principal_fingerprint_mismatch"}),X.status(400).send({error:R});if(R==="Join control endpoint must advertise tlsServerIdentity")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"missing_control_tls_identity"}),X.status(400).send({error:R});if(R==="Join control endpoint tlsServerIdentity must match the signing principal fingerprint")return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"control_tls_identity_mismatch"}),X.status(400).send({error:R});return J7({peerLabel:B??K,ip:J.ip,success:!1,reason:"join_rejected"}),X.status(403).send({error:"Join rejected"})}J7({peerLabel:_,ip:J.ip,success:!0});let M=Math.min(A,a6);return X.status(200).send({joined:!0,nodeId:K,..._?{displayNameSnapshot:_}:{},protocolVersion:M})}),$.get("/api/v1/messages",async(J,X)=>{let Y=eZ($,J);if(!Y.ok)return X.status(403).send({error:Y.error,reason:Y.reason});if(!$.ariaRuntimeMessageControl)return X.status(503).send({error:"Message store not available"});let Q=Math.min(Math.max(parseInt(J.query.limit??"20",10)||20,1),1000),G=J.query.unread!=="false",V;try{V=await $.ariaRuntimeMessageControl.listInbox({limit:Q,unreadOnly:G})}catch(W){if(W instanceof yP)return X.status(503).send({error:"Message store not available"});throw W}return X.send({messages:V,count:V.length})}),$.get("/api/v1/messages/direct-client",async(J,X)=>{let Y=eZ($,J);if(!Y.ok)return X.status(403).send({error:Y.error,reason:Y.reason});if(!$.ariaRuntimeMessageControl?.listDirectClientInbox)return X.status(503).send({error:"Direct client inbox not available"});let Q=Math.min(Math.max(parseInt(J.query.limit??"20",10)||20,1),1000),G=J.query.unread!=="false",V=await $.ariaRuntimeMessageControl.listDirectClientInbox({clientId:Y.clientId,limit:Q,unreadOnly:G});return X.send({messages:V,count:V.length})}),$.post("/api/v1/message/relay",async(J,X)=>{let Y=eZ($,J);if(!Y.ok)return X.status(403).send({error:Y.error,reason:Y.reason});if(!$.ariaRuntimeMessageControl)return X.status(503).send({error:"Runtime outbox not available",delivered:!1});try{let Q=J.body._rawMessage;if(Q&&Q.id&&Q.sender&&Q.recipient&&Q.content){let G=iF(Q,nF(Y.clientId)),V=J.body.deliveryMode==="best_effort"?await $.ariaRuntimeMessageControl.sendBestEffort({rawMessage:G}):await $.ariaRuntimeMessageControl.sendDurable({rawMessage:G});return X.send({id:G.id,...V})}return X.status(400).send({error:"Missing _rawMessage with id, sender, recipient, content"})}catch(Q){return X.status(500).send({error:`Relay send failed: ${Q instanceof Error?Q.message:String(Q)}`,delivered:!1})}})}var PJ,$50=1000,Z50=3,vH,J50=60000,X50=4,ok0=1e4,yP;var G50=E(()=>{b0();m4();e70();_J();Xg();PJ=new Map,vH=new Map;yP=class yP extends Error{constructor(){super("Message store not available");this.name="RuntimeMessageStoreUnavailableError"}}});class Gg{subscribers=new Map;nextId=1;publish($){for(let Z of this.subscribers.values()){if(Z.aborted)continue;if(Z.signal?.aborted){Z.aborted=!0,this.subscribers.delete(Z.id);continue}if(Z.predicate&&!Z.predicate($))continue;if(Z.queue.push($),Z.resolve){let J=Z.resolve;Z.resolve=void 0,J()}}}async*subscribe($={}){let Z=`sub_${this.nextId++}`,J={id:Z,queue:[],predicate:$.predicate,signal:$.signal,aborted:!1};this.subscribers.set(Z,J);let X=()=>{if(J.aborted=!0,this.subscribers.delete(Z),J.resolve){let Y=J.resolve;J.resolve=void 0,Y()}};$.signal?.addEventListener("abort",X,{once:!0});try{while(!J.aborted&&!$.signal?.aborted){if(J.queue.length===0){await new Promise((Q)=>{J.resolve=Q});continue}let Y=J.queue.shift();if(Y)yield Y}}finally{$.signal?.removeEventListener("abort",X),X()}}}function $f0($,Z){let J=N8($,{ownerGeneration:$.ariaOwnerGeneration});if(!J)return;let X=J.resolveVerifiedPrincipalByFingerprint(Z);if(!X||X==="ambiguous")return X;return{nodeId:X.nodeId,displayNameSnapshot:X.displayNameSnapshot?.trim()||X.nodeId,...X.signingPublicKey?{signingPublicKey:x0.parse(X.signingPublicKey)}:{},principalFingerprint:X.principalFingerprint,transportPublicKey:B$.parse(X.transportPublicKey),...X.isLocalAuthority?{isLocalAuthority:!0}:{}}}function Zf0($,Z){let J=N8($)?.resolveRemoteBinding(Z);if(!J)return;return{nodeId:J.nodeId,displayNameSnapshot:J.displayNameSnapshot?.trim()||J.nodeId,...J.signingPublicKey?{signingPublicKey:x0.parse(J.signingPublicKey)}:{},principalFingerprint:J.principalFingerprint,transportPublicKey:B$.parse(J.transportPublicKey)}}function Jf0($){let Z=N8($.server);if(!Z)throw Error("Local principal binding authority unavailable");let J=G0.parse(Z.resolveLocalNodeIdentity().nodeId),X=$.server.ariaRevocationStore?.getPeerRevocationGeneration?.($.targetNodeId)??0;return{localNodeId:J,targetNodeId:$.targetNodeId,revocationGeneration:X+1,operatorConfirmation:$.operatorConfirmation}}function Xf0($,Z){let J=$.ariaBasePath?.trim();if(!J)return;let X=new M$({ariaHome:J});try{let Y=X.readRuntimeOwnerRecord(Z)?.ownerGeneration??0,Q=X.readRuntimeBootstrapRecord(Z)?.ownerGeneration??0,G=Math.max(Y,Q,0);return G>0?G:void 0}finally{X.close()}}function Vg($){return $.payload&&typeof $.payload==="object"&&!Array.isArray($.payload)?$.payload:null}function Wg($,Z){if($.operation!==Z.operation)switch(Z.label){case"peer listing":return{valid:!1,error:"Envelope operation mismatch for peer listing"};case"registration":return{valid:!1,error:"Envelope operation mismatch for registration"};case"revocation":return{valid:!1,error:"Envelope operation mismatch for revocation"}}if($.target.nodeId!==Z.targetNodeId)switch(Z.label){case"peer listing":return{valid:!1,error:"Envelope target mismatch for peer listing"};case"registration":return{valid:!1,error:"Envelope target mismatch for registration"};case"revocation":return{valid:!1,error:"Envelope target mismatch for revocation"}}let J=IY({method:"POST",path:Z.path,body:Z.payload,operation:Z.operation,targetKey:Z.targetNodeId});if($.contextHash!==J)switch(Z.label){case"peer listing":return{valid:!1,error:"Envelope context mismatch for peer listing"};case"registration":return{valid:!1,error:"Register body does not match signed envelope payload"};case"revocation":return{valid:!1,error:"Envelope context mismatch for revocation"}}return{valid:!0}}function Hg($,Z,J){let X,Y=!1,Q,G=aW($,{keyResolver:(V)=>{let W=$f0(Z,V);if(W==="ambiguous"){Y=!0,X=void 0;return}return X=W,X?.signingPublicKey},nonceStore:J,authorize:Z.ariaPeerTrustStore?(V,W,H)=>{let K=G0.safeParse(V.nodeId);if(!K.success||!X)return Q="Unable to resolve authenticated peer principal",!1;if(K.data!==X.nodeId)return Q="Envelope principal claim does not match authenticated durable principal",!1;if(X.isLocalAuthority)return!0;let U={"network.register":"send_message","network.revoke":"revoke_peer","network.list_peers":"send_message","pair.relay":"delegate_task"}[W];return H.nodeId,!U||Z.ariaPeerTrustStore.peerHasCapability(K.data,U)}:(V,W,H)=>{let K=G0.safeParse(V.nodeId);if(H.nodeId,!K.success||!X)return Q="Unable to resolve authenticated peer principal",!1;if(K.data!==X.nodeId)return Q="Envelope principal claim does not match authenticated durable principal",!1;return!0}});if(Y)return{valid:!1,error:"Unable to resolve authenticated peer principal"};if(!G.valid&&Q)return{valid:!1,error:Q};if(G.valid&&X){let V=$.principal?.nodeId?.trim();if(V&&V!==X.nodeId)return{valid:!1,error:"Envelope principal claim does not match authenticated durable principal"};return{...G,principalFingerprint:X.principalFingerprint,principal:X}}return G}function Yf0($,Z){let J=Z.nodeId;if(Z.decision.targetNodeId!==J)throw Error("Revocation decision target mismatch");let X=N8($,{ownerGeneration:$.ariaOwnerGeneration??Xf0($,Z.decision.localNodeId)});if(!X)throw Error("Local principal binding authority unavailable");if($.ariaRevocationStore)$.ariaRevocationStore.revoke({nodeId:J,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{},fingerprint:Z.fingerprint,revokedAt:Z.revokedAt,localNodeId:Z.decision.localNodeId,operatorConfirmation:Z.decision.operatorConfirmation,revocationGeneration:Z.decision.revocationGeneration});return X.recordVerifiedRevocation({nodeId:J,fingerprint:Z.fingerprint,revocationGeneration:Z.decision.revocationGeneration,revokedAt:Z.revokedAt,revokedBy:Z.decision.localNodeId,operatorConfirmation:Z.decision.operatorConfirmation,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{}}),$.ariaPeerSigningKeyStore?.delete(J),$.ariaRelayCleanup?.(J),$.ariaRevocationBroadcast?.({nodeId:J,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{},revokedAt:Z.revokedAt}),{revoked:!0,nodeId:Z.nodeId,...Z.displayNameSnapshot?{displayNameSnapshot:Z.displayNameSnapshot}:{}}}function Qf0($,Z,J,X){let Y=$.ariaNetworkManager;if(!Y)throw Error("Network manager not available");if(!Y.applyPeerRevocation)throw Error("Network manager missing applyPeerRevocation()");let Q=N8($);if(!Q)throw Error("Local principal binding authority unavailable");let G=G0.parse(Q.resolveLocalNodeIdentity().nodeId),V="local_operator_confirmed",W=G;if(X.envelope){let O=Hg(X.envelope,$,Z);if(!O.valid)throw Error(O.error??"Envelope validation failed");if(!O.principal?.nodeId||O.principal.nodeId!==G)throw Error("Remote revocation not permitted \u2014 revocation is a local operator decision only");if(W=O.principal.nodeId??G,!Vg(X.envelope))throw Error("MutationEnvelope payload must be an object");let q=Wg(X.envelope,{operation:"network.revoke",label:"revocation",path:"/api/v1/network/revoke",targetNodeId:X.nodeId,payload:{nodeId:X.nodeId}});if(!q.valid)throw Error(q.error)}if(!J.check(W))throw Error("Rate limit exceeded for revocations");let H=Zf0($,X.nodeId);if(!H?.nodeId)throw Error("Peer not found");let{nodeId:K,displayNameSnapshot:z,principalFingerprint:U}=H;if(!K||!U)throw Error("Peer not found");let B=G0.parse(K),F=Jf0({server:$,targetNodeId:B,operatorConfirmation:V}),D=Y.applyPeerRevocation({nodeId:B,fingerprint:U});if(!D.revoked)throw Error(D.errorCode==="principal_unresolved"?"Peer principal unresolved":"Peer not found");return Yf0($,{nodeId:B,displayNameSnapshot:z??D.displayNameSnapshot,fingerprint:U,revokedAt:D.revokedAt,decision:F})}async function Gf0($,Z){let J=$.ariaNetworkManager;if(!J)throw Error("Network manager not available");if(!J.applyPeerRegistration)throw Error("Network manager missing applyPeerRegistration()");let X=J.applyPeerRegistration.bind(J),Y=(z)=>{if(!z.registered){let U=String(z.errorCode);if(U==="not_found")throw Error("Peer not found");if(U==="revoked")throw Error("Peer revoked");if(U==="missing_endpoint_revision")throw Error("endpointRevision required for endpoint mutations");if(U==="stale_revision")throw Error("Rejected stale endpoint revision");if(U==="conflicting_revision")throw Error("Rejected conflicting endpoint revision");if(U==="node_id_mismatch")throw Error("Rejected durable nodeId rewrite for authenticated peer");throw Error(`Peer ${U} cannot complete register while awaiting pending_verification state convergence`)}return z},Q=await $.ariaNetworkReadControl?.getPeerView?.(Z.nodeId);if(Q){let{identityState:z}=n2(Q);if(!qG(z))throw Error(`Peer ${Q.status} cannot complete register while awaiting pending_verification state convergence`)}let{endpointHost:G,endpointPort:V}=Z,W=typeof G==="string"&&typeof V==="number",H=$.ariaBasePath,K=null;if(W){if(!H)throw Error("ARIA base path unavailable for endpoint registration");let z=N8($,{ownerGeneration:$.ariaOwnerGeneration});if(!z)throw Error("Principal binding authority unavailable for endpoint registration");try{K=wP({ariaHome:H,ownerGeneration:$.ariaOwnerGeneration,authority:z,nodeId:Z.nodeId,endpointHost:G,endpointPort:V,endpointRevision:Z.endpointRevision??0,apply:({endpointHost:U,endpointPort:B,endpointRevision:F})=>{return Y(X({nodeId:Z.nodeId,endpointHost:U,endpointPort:B,endpointRevision:F}))}}).projected}catch(U){if(U instanceof R2)throw Error(U.message);throw U}}if(K??=Y(X({nodeId:Z.nodeId,...Z.endpointHost!==void 0?{endpointHost:Z.endpointHost}:{},...Z.endpointPort!==void 0?{endpointPort:Z.endpointPort}:{},...Z.endpointRevision!==void 0?{endpointRevision:Z.endpointRevision}:{}})),typeof K.endpointRevision!=="number"||!Number.isInteger(K.endpointRevision)||K.endpointRevision<0)throw Error("Invariant violation: successful registration must include a non-negative endpointRevision");return K}async function V50($){if(kP($),!$.ariaNonceStore)throw Error("DurableNonceStore required for network routes. Decorate server with ariaNonceStore before registering network routes.");if(!$.ariaNonceStore.isDurable)throw Error("DurableNonceStore required \u2014 InMemoryNonceStore is not crash-safe. "+"Use DurableNonceStore backed by SQLite.");let Z=$.ariaNonceStore,J=new t1(10,60000);N6($,"ariaNetworkAdminControl",{revokePeer:async(X)=>Qf0($,Z,J,{nodeId:X.nodeId,envelope:X.envelope,rateLimitFallbackKey:X.rateLimitFallbackKey??"local-runtime"})}),N6($,"ariaNetworkRegistrationControl",{registerPeer:async(X)=>Gf0($,X)}),$.post("/api/v1/network/peers",{schema:{body:{type:"object",properties:{envelope:{type:"object"}}}}},async(X,Y)=>{let Q=$.ariaNetworkReadControl?.listPeers;if(!Q)return Y.status(503).send({error:"Network manager not available"});if(!X.body.envelope)return Y.status(401).send({error:"MutationEnvelope required"});let G=Hg(X.body.envelope,$,Z);if(!G.valid)return Y.status(403).send({error:G.error??"Envelope validation failed"});let V=G0.safeParse(G.principal?.nodeId).data;if(!V)return Y.status(403).send({error:"Unable to resolve authenticated peer principal"});let W=Vg(X.body.envelope);if(!W)return Y.status(400).send({error:"MutationEnvelope payload must be an object"});let H=Wg(X.body.envelope,{operation:"network.list_peers",label:"peer listing",path:"/api/v1/network/peers",targetNodeId:V,payload:W});if(!H.valid)return Y.status(403).send({error:H.error});try{return Y.send({peers:await Q()})}catch(K){let z=K instanceof Error?K.message:String(K);if(z==="Network manager not available")return Y.status(503).send({error:z});throw K}}),$.post("/api/v1/network/register",{schema:{body:{type:"object",required:["nodeId"],properties:{nodeId:{type:"string",minLength:1,maxLength:512},displayNameSnapshot:{type:"string",maxLength:256},endpointHost:{type:"string",maxLength:256},endpointPort:{type:"integer",minimum:1,maximum:65535},endpointRevision:{type:"integer",minimum:0},capabilities:{type:"array",items:{type:"string",maxLength:50},maxItems:20},envelope:{type:"object"}}}}},async(X,Y)=>{let Q=$.ariaNetworkRegistrationControl?.registerPeer;if(!Q)return Y.status(503).send({error:"Network manager not available"});if(!X.body.envelope)return Y.status(401).send({error:"MutationEnvelope required for registration"});let G=Hg(X.body.envelope,$,Z);if(!G.valid)return Y.status(403).send({error:G.error??"Envelope validation failed"});let V=Vg(X.body.envelope);if(!V)return Y.status(400).send({error:"MutationEnvelope payload must be an object"});let W=G.principal?.nodeId;if(!W)return Y.status(403).send({error:"Unable to resolve authenticated peer principal"});let H=G0.parse(W);if(typeof X.body.endpointHost==="string"||typeof X.body.endpointPort==="number"){if(!(typeof X.body.endpointHost==="string"&&typeof X.body.endpointPort==="number"))return Y.status(400).send({error:"endpointHost and endpointPort must be provided together"});if(typeof X.body.endpointRevision!=="number"||!Number.isInteger(X.body.endpointRevision)||X.body.endpointRevision<0)return Y.status(400).send({error:"endpointRevision required for endpoint mutations"})}let z=G0.parse(X.body.nodeId.trim());if(z!==H)return Y.status(403).send({error:"Register body nodeId does not match authenticated durable principal"});let U={nodeId:z};if(typeof X.body.nodeId==="string"&&X.body.nodeId.trim().length>0&&X.body.nodeId.trim()!==W)return Y.status(403).send({error:"Envelope principal claim does not match registration nodeId"});if(typeof X.body.displayNameSnapshot==="string"&&X.body.displayNameSnapshot.trim().length>0)U.displayNameSnapshot=X.body.displayNameSnapshot;if(typeof X.body.endpointHost==="string")U.endpointHost=X.body.endpointHost;if(typeof X.body.endpointPort==="number")U.endpointPort=X.body.endpointPort;if(typeof X.body.endpointRevision==="number")U.endpointRevision=X.body.endpointRevision;if(Array.isArray(X.body.capabilities))U.capabilities=[...X.body.capabilities];let B=Wg(X.body.envelope,{operation:"network.register",label:"registration",path:"/api/v1/network/register",targetNodeId:G0.parse(W),payload:U});if(!B.valid)return Y.status(403).send({error:B.error});let F=typeof V.nodeId==="string"&&V.nodeId.trim().length>0?G0.parse(V.nodeId.trim()):void 0;if(F&&z!==F)return Y.status(403).send({error:"Envelope payload mismatch for registration nodeId"});let D=typeof V.endpointHost==="string"&&V.endpointHost.length>0?V.endpointHost:void 0;if(typeof X.body.endpointHost==="string"&&X.body.endpointHost.length>0&&D&&X.body.endpointHost!==D)return Y.status(403).send({error:"Envelope payload mismatch for registration endpointHost"});let O=typeof V.endpointPort==="number"&&Number.isInteger(V.endpointPort)&&V.endpointPort>=1&&V.endpointPort<=65535?V.endpointPort:void 0;if(typeof X.body.endpointPort==="number"&&O!==void 0&&X.body.endpointPort!==O)return Y.status(403).send({error:"Envelope payload mismatch for registration endpointPort"});let L=typeof V.endpointRevision==="number"&&Number.isInteger(V.endpointRevision)&&V.endpointRevision>=0?V.endpointRevision:void 0;if(typeof X.body.endpointRevision==="number"&&L!==void 0&&X.body.endpointRevision!==L)return Y.status(403).send({error:"Envelope payload mismatch for registration endpointRevision"});try{let q=await Q({nodeId:H,...X.body.endpointHost!==void 0||D!==void 0?{endpointHost:X.body.endpointHost??D}:{},...X.body.endpointPort!==void 0||O!==void 0?{endpointPort:X.body.endpointPort??O}:{},...X.body.endpointRevision!==void 0||L!==void 0?{endpointRevision:X.body.endpointRevision??L}:{}});return Y.send({registered:!0,nodeId:q.nodeId,...q.displayNameSnapshot?{displayNameSnapshot:q.displayNameSnapshot}:{},peerStatus:q.peerStatus,lastSeen:q.lastSeen,heartbeatUpdated:q.heartbeatUpdated,endpointUpdated:q.endpointUpdated,endpointRevision:q.endpointRevision})}catch(q){let A=q instanceof Error?q.message:String(q);if(A==="Network manager not available"||A==="Network manager missing applyPeerRegistration()")return Y.status(503).send({error:A});if(A==="Peer not found")return Y.status(404).send({error:A});if(A==="Peer revoked")return Y.status(409).send({error:A});if(A==="Direct transport endpoint already owned by another peer principal")return Y.status(409).send({error:A});if(A==="endpointRevision required for endpoint mutations")return Y.status(400).send({error:A});if(A==="Rejected durable nodeId rewrite for authenticated peer"||A==="Rejected stale endpoint revision"||A==="Rejected conflicting endpoint revision"||A.includes("cannot complete register while awaiting pending_verification state convergence"))return Y.status(409).send({error:A});throw q}}),$.post("/api/v1/network/revoke",{schema:{body:HG}},async(X,Y)=>{let Q=$.ariaNetworkAdminControl?.revokePeer;if(!Q)return Y.status(503).send({error:"Network manager not available"});try{let G=YX.parse(X.body),V=G0.parse(G.nodeId);return Y.send(await Q({nodeId:V,envelope:G.envelope,rateLimitFallbackKey:X.ip}))}catch(G){let V=G instanceof Error?G.message:String(G);if(V==="Network manager not available"||V==="Network manager missing applyPeerRevocation()")return Y.status(503).send({error:V});if(V.includes("Remote revocation not permitted"))return Y.status(403).send({error:V});if(V==="Peer not found")return Y.status(404).send({error:V});if(V==="Rate limit exceeded for revocations")return Y.status(429).send({error:V});return Y.status(403).send({error:V})}}),$.get("/api/v1/network/revocations",async(X,Y)=>{let Q=eZ($,X);if(!Q.ok)return Y.status(403).send({error:Q.error,reason:Q.reason});let G=$.ariaRevocationStore;if(!G)return Y.status(503).send({error:"Revocation store not available"});return Y.send({revocations:G.list().map((V)=>({nodeId:V.nodeId,...V.displayNameSnapshot?{displayNameSnapshot:V.displayNameSnapshot}:{},fingerprint:V.fingerprint,revokedAt:V.revokedAt,localNodeId:V.localNodeId,operatorConfirmation:V.operatorConfirmation,...V.reason?{reason:V.reason}:{},...typeof V.revocationGeneration==="number"?{revocationGeneration:V.revocationGeneration}:{}}))})})}var W50=E(()=>{V8();b0();m4();_J();Jg();sx();O6();MJ()});function H50($,Z){let J=N8($)?.resolveRemoteBinding(Z);if(!J)return;return{nodeId:J.nodeId,principalFingerprint:J.principalFingerprint,transportPublicKey:B$.parse(J.transportPublicKey),continuityRevision:J.continuityRevision,displayNameSnapshot:J.displayNameSnapshot}}function vP($,Z,J){let X=G0.safeParse(Z);if(!X.success)return{ok:!1,error:"Invalid nodeId"};let Y=N8($);if(!Y)return{ok:!1,error:"Unknown peer"};let Q=Y.resolveNodeIdFromVerifiedPrincipal({claimedNodeId:X.data,signingPublicKey:J});if(!Q)return{ok:!1,error:"Unknown peer"};let G=Vf0(J);if(!G)return{ok:!1,error:"Invalid signing public key"};if(Q.principalFingerprint!==G)return{ok:!1,error:"Signing key mismatch"};return{ok:!0,fingerprint:G,nodeId:Q.nodeId,...Q.displayNameSnapshot?{displayNameSnapshot:Q.displayNameSnapshot}:{}}}var Vf0;var Kg=E(()=>{W8();MJ();Vf0=C2});import*as hH from"crypto";function zf0($,Z){let J=H50($,Z);if(!J)return{ok:!1,error:"Target peer not registered"};return{ok:!0,nodeId:J.nodeId,...J.displayNameSnapshot?{displayNameSnapshot:J.displayNameSnapshot}:{}}}async function K50($){let Z=new Map,J=new NZ;$.decorate("ariaRelayCleanup",(X)=>{let Y=Z.get(X);if(!Y)return;Z.delete(X);try{Y.socket.close()}catch{}}),$.get("/api/v1/relay",{websocket:!0},(X,Y)=>{let Q=!1,G=null,V=null,W=null,H=null,K=null,z=setTimeout(()=>{if(!Q)D4(X,{type:"auth_error",error:"Authentication timeout"}),X.close()},30000);X.on("message",(F)=>{try{let D=typeof F==="string"?F:F.toString(),O=JSON.parse(D);if(!Q)U(O);else B(O)}catch(D){D4(X,{type:"error",error:D instanceof Error?D.message:"Invalid message"})}}),X.on("close",()=>{if(clearTimeout(z),K&&Z.get(K.nodeId)===K)Z.delete(K.nodeId)}),X.on("error",()=>{if(clearTimeout(z),K&&Z.get(K.nodeId)===K)Z.delete(K.nodeId)});function U(F){if(F.type==="auth"){let{nodeId:D,signingPublicKey:O}=F,L=G0.safeParse(D);if(!L.success){D4(X,{type:"auth_error",error:"Invalid nodeId"}),X.close();return}if(typeof O!=="string"){D4(X,{type:"auth_error",error:"Missing signing public key"}),X.close();return}let q=x0.safeParse(O);if(!q.success){D4(X,{type:"auth_error",error:"Invalid signing public key"}),X.close();return}let A=vP($,L.data,q.data);if(!A.ok){D4(X,{type:"auth_error",error:A.error}),X.close();return}V=A.nodeId,W=A.displayNameSnapshot??null,H=q.data,G=hH.randomBytes(Kf0).toString("hex"),D4(X,{type:"challenge",nonce:G})}else if(F.type==="challenge_response"){if(!G||!V||!H){D4(X,{type:"auth_error",error:"No pending challenge"}),X.close();return}let D=F.signature;if(typeof D!=="string"){D4(X,{type:"auth_error",error:"Missing signature"}),X.close();return}if(!Uf0(G,D,H)){D4(X,{type:"auth_error",error:"Invalid signature"}),X.close();return}clearTimeout(z),Q=!0;let O=Z.get(V);if(O)try{O.socket.close()}catch{}let L={nodeId:V,...W?{displayNameSnapshot:W}:{},signingPublicKey:H,socket:X,packetCount:0,windowStart:Date.now()};K=L,Z.set(V,L),D4(X,{type:"auth_ok",nodeId:V,...W?{displayNameSnapshot:W}:{}}),G=null}}function B(F){if(F.type!=="relay"||!K)return;let{toNodeId:D,data:O}=F,L=G0.safeParse(D);if(!L.success){D4(X,{type:"error",error:"Target nodeId required"});return}if(typeof O!=="string")return;let q=Date.now(),A=zf0($,L.data);if(!A.ok){D4(X,{type:"error",error:A.error}),J.record(L.data,!1,0);return}let N=Date.now();if(N-K.windowStart>60000)K.packetCount=0,K.windowStart=N;if(K.packetCount++,K.packetCount>Hf0){D4(X,{type:"error",error:"Rate limit exceeded"});return}if(Math.ceil(O.length*3/4)>Wf0){D4(X,{type:"error",error:"Payload too large"});return}let M=Z.get(A.nodeId);if(!M){D4(X,{type:"peer_offline",nodeId:A.nodeId,...A.displayNameSnapshot?{displayNameSnapshot:A.displayNameSnapshot}:{}}),J.record(A.nodeId,!1,0);return}D4(M.socket,{type:"relay",fromNodeId:K.nodeId,...K.displayNameSnapshot?{displayNameSnapshot:K.displayNameSnapshot}:{},data:O});let T=Date.now()-q;J.record(A.nodeId,!0,T)}})}function D4($,Z){try{$.send(JSON.stringify(Z))}catch{}}function Uf0($,Z,J){try{let X=Buffer.from(J,"base64"),Y=hH.createPublicKey({key:X,format:"der",type:"spki"});return hH.verify(null,Buffer.from($),Y,Buffer.from(Z,"base64"))}catch{return!1}}var Wf0=65535,Hf0=1000,Kf0=32;var z50=E(()=>{V8();b0();Kg();m4()});import zg from"crypto";function U50($){try{return f0.parse(zg.createHash("sha256").update(Buffer.from($,"base64")).digest("hex"))}catch{return}}function B50($,Z){let J=U50($.previousPublicKey);if(!J||J!==$.statement.previousPrincipalFingerprint)return{kind:"fingerprint_key_mismatch",field:"previous"};let X=U50($.newPublicKey);if(!X||X!==$.statement.newPrincipalFingerprint)return{kind:"fingerprint_key_mismatch",field:"new"};if($.statement.previousPrincipalFingerprint!==Z.principalFingerprint)return{kind:"previous_fingerprint_mismatch",expected:Z.principalFingerprint,actual:$.statement.previousPrincipalFingerprint};if($.statement.bindingGeneration<=Z.continuityRevision)return{kind:"generation_not_monotonic",current:Z.continuityRevision,proposed:$.statement.bindingGeneration};if(Z.revocationGeneration!==void 0){if($.statement.revocationGeneration!==Z.revocationGeneration)return{kind:"revocation_generation_mismatch",expected:Z.revocationGeneration,actual:$.statement.revocationGeneration}}let Y=zg.createPublicKey({key:Buffer.from($.previousPublicKey,"base64"),format:"der",type:"spki"});if(!JP($.statement,$.delegationSignature,Y))return{kind:"delegation_signature_invalid"};let Q=zg.createPublicKey({key:Buffer.from($.newPublicKey,"base64"),format:"der",type:"spki"});if(!JP($.statement,$.acceptanceSignature,Q))return{kind:"acceptance_signature_invalid"};return $}var F50=E(()=>{b0();Vx()});import X7 from"crypto";import*as q50 from"os";import*as E50 from"path";import*as Bf0 from"http";import*as Ff0 from"https";function hP($){return{id:$.id,nodeId:G0.parse($.nodeId),displayNameSnapshot:$.displayNameSnapshot,principalFingerprint:f0.parse($.principalFingerprint)}}function WQ($,Z,J){Ef0({nodeStore:$,nodeId:Z,previousBinding:J.binding})}function Ug($,Z){if(!($ instanceof Error))return null;if($.message.includes("direct transport endpoint conflict"))return{statusCode:409,message:"Direct transport endpoint already owned by another peer principal"};if($.message.includes("Peer binding continuity revision conflict")||$.message.includes("continuity revision conflict"))return{statusCode:409,message:Z};return null}async function N50($,Z){let{targetNodeId:J,signingPublicKey:X}=Z;try{let G=await c6($,"Pair relay target bootstrap unavailable");if(G.nodeId.trim()===J)return G.signingPublicKey===X?{status:"found"}:{status:"mismatch"}}catch{}let Y=N8($);if(!Y)return{status:"missing"};if(!Y.resolveContinuityBase(J))return{status:"missing"};return Y.resolveNodeIdFromVerifiedPrincipal({claimedNodeId:J,signingPublicKey:X})?{status:"found"}:{status:"mismatch"}}function Af0($,Z,J){let X=gW(),Y;if(J)try{Y=cW(X.publicKey,Buffer.from(J,"base64"))}catch{}let Q=mW(X.privateKey,$),G=ZM(Z,Q);return{encryptedToken:G.ciphertext,ephemeralPublicKey:X.publicKey,ephemeralKeySignature:Y,nonce:G.nonce,tag:G.tag}}function i0($,Z){let J=Error(Z);return J.statusCode=$,J}function sF($,Z=500){return typeof $==="object"&&$!==null&&"statusCode"in $&&typeof $.statusCode==="number"?$.statusCode??Z:Z}function Bg($,Z){let J=$.safeParse(Z);if(J.success)return J.data;let X=J.error.issues[0],Y=X?.path.join("."),Q=X?Y&&Y.length>0?`${Y}: ${X.message}`:X.message:"Invalid request";throw i0(400,Q)}function A50($){return{nodeId:$.nodeId,principalFingerprint:$.principalFingerprint,transportPublicKey:$.transportPublicKey,continuityRevision:$.continuityRevision,displayNameSnapshot:$.displayNameSnapshot,controlEndpointHost:$.controlEndpoint.host,controlEndpointPort:$.controlEndpoint.port,controlTlsCaFingerprint:$.controlEndpoint.tlsCaFingerprint}}function qf0($){let Z=$.peerInfo.controlEndpoint;if(Z&&typeof Z==="object"&&typeof Z.host==="string"&&typeof Z.port==="number"&&typeof Z.tlsCaFingerprint==="string"&&typeof Z.tlsServerIdentity==="string"&&typeof Z.protocolVersion==="number")return Z;throw i0(500,"Accepted invite did not return the remote control endpoint tlsServerIdentity for durable peer binding")}function Ef0($){if($.previousBinding)$.nodeStore.commitPairContinuity($.previousBinding);else $.nodeStore.deletePeerBinding($.nodeId)}function _f0($){if(!$)throw i0(503,"Network manager not available");let Z=[];if(typeof $.applyDirectPairActivation!=="function")Z.push("applyDirectPairActivation");if(Z.length>0)throw i0(503,`Network manager missing direct-pair activation capabilities: ${Z.join(", ")}`);return $}async function _50($){let Z=new Map,J=$.ariaDurablePairStore,X=new Map,Y=new Map,Q=0,G=new Map,V=new Map;function W(j){return{id:j.id,nodeId:G0.parse(j.nodeId),displayNameSnapshot:j.displayNameSnapshot,principalFingerprint:j.principalFingerprint,signingPublicKey:j.signingPublicKey,port:j.port,host:j.host,responderControlHostHint:j.responderControlHostHint,ingressHost:j.ingressHost,createdAt:j.createdAt,expiresAt:j.expiresAt,ephemeralPublicKey:j.ephemeralPublicKey,ephemeralKeySignature:j.ephemeralKeySignature,caCert:j.caCert,relayed:j.relayed??!1,targetNodeId:j.relayTargetNodeId?G0.parse(j.relayTargetNodeId):void 0}}function H(j){return{id:j.id,nodeId:j.nodeId,displayNameSnapshot:j.displayNameSnapshot,principalFingerprint:j.principalFingerprint,signingPublicKey:x0.parse(j.signingPublicKey),port:j.port,host:j.host,responderControlHostHint:j.responderControlHostHint,ingressHost:j.ingressHost??j.host,createdAt:j.createdAt,expiresAt:j.expiresAt,ephemeralPublicKey:j.ephemeralPublicKey,ephemeralKeySignature:j.ephemeralKeySignature,caCert:j.caCert,relayed:j.relayed,relayTargetNodeId:j.targetNodeId}}function K(j){if(X.set(j.id,j),j.relayed&&j.relayTargetNodeId){let b=V.get(j.relayTargetNodeId)??[];b.push(j),V.set(j.relayTargetNodeId,b)}J?.store(W(j))}function z(j,b){if(!b)return;let v=V.get(b);if(!v)return;let c=v.filter((C)=>C.id!==j);if(c.length===0)V.delete(b);else V.set(b,c)}function U(j,b){X.delete(j),z(j,b),J?.delete(j)}function B(){if(!J)return;J.cleanup();for(let j of J.findAllActive()){let b=H(j);if(X.set(b.id,b),b.relayed&&b.relayTargetNodeId){let v=V.get(b.relayTargetNodeId)??[];v.push(b),V.set(b.relayTargetNodeId,v)}}}B();function F(j){let b=(v)=>v==="127.0.0.1"||v==="::1"||v==="::ffff:127.0.0.1"||v==="localhost";return b(j.raw.socket?.remoteAddress)||b(j.ip)}function D(j){let{nodeId:b,signingPublicKey:v}=j,c=N8($);if(!c)return{ok:!0};if(c?.resolveContinuityBase(b)&&!c.resolveNodeIdFromVerifiedPrincipal({claimedNodeId:b,signingPublicKey:v}))return{ok:!1,error:`Peer principal "${b}" identity mismatch for signing key`};return{ok:!0}}function O(j){return j.peerDisplayName?.trim()||j.peerNodeId.trim()}async function L(j){let{networkManager:b,payload:v,requestIp:c,isLocalCall:C}=j,f=_f0(b),{peerWgPubkey:g,peerSigningPubkey:l,transportEndpoint:$0,controlEndpoint:Y0,psk:x}=v,r=x0.parse(l);try{if(!Y0.tlsServerIdentity?.trim())throw i0(400,"Accept invite requires controlEndpoint.tlsServerIdentity");bZ(Y0.protocolVersion,"pair control endpoint")}catch(L0){throw i0(400,L0.message)}let J0=f.getConfig?.(),X0=k(),n=J0?.publicKey??X0?.publicKey,K0=(typeof J0?.signingPublicKey==="string"?x0.safeParse(J0.signingPublicKey).data:void 0)??X0?.signingPublicKey;if(n&&g===n||K0&&r===K0)throw i0(409,"Direct pairing payload matches the local machine identity");let z0=O(v),O0=G0.parse(v.peerNodeId),R0=C9(r);if(!R0||v.principalFingerprint!==R0)throw i0(400,"Direct pair principal fingerprint mismatch");if(!D({nodeId:O0,signingPublicKey:r}).ok)throw P.warn(`[pair/direct] Rejected signing key overwrite for peer "${z0}" \u2014 use interactive pairing for key rotation`),i0(409,`Signing key identity mismatch for peer "${z0}" \u2014 revoke and re-pair required`);let Z0=C?$0.host:c||$0.host,H0=N8($);if(!H0)throw i0(503,"Principal binding authority unavailable for direct pair activation");let B0=QQ({nodeId:O0,principalFingerprint:f0.parse(v.principalFingerprint),signingPublicKey:r});if("error"in B0)throw i0(400,"Direct pair principal fingerprint mismatch");let F0=$.ariaBasePath,V0=$.ariaRuntimeOwnerGeneration??$.ariaOwnerGeneration;if(!F0)throw i0(503,"ARIA base path unavailable for direct pair activation");let D0=new M$({ariaHome:F0,...V0!==void 0?{ownerGeneration:V0}:{}}),C0=D0.readPeerBinding(O0);D0.close();let _0=C0&&C0.principalFingerprint===B0.principalFingerprint&&C0.transportPublicKey===g?C0.continuityRevision:(C0?.continuityRevision??0)+1;try{H0.commitFirstTrustBind(B0,{transportPublicKey:g,continuityRevision:_0,endpointHost:Z0,endpointPort:$0.port,endpointRevision:Y0.endpointRevision??C0?.endpointRevision??0,displayNameSnapshot:z0,controlEndpointHost:Y0.host,controlEndpointPort:Y0.port,controlTlsCaFingerprint:Y0.tlsCaFingerprint,projectSigningKey:!1})}catch(L0){let P0=Ug(L0,`Direct pair continuity conflict for peer "${z0}"`);if(P0)throw i0(P0.statusCode,P0.message);throw L0}try{await f.applyDirectPairActivation({nodeId:O0,displayNameSnapshot:z0,peerPublicKey:g,signingPublicKey:r,transportEndpoint:{host:Z0,port:$0.port},controlEndpoint:Y0,presharedKey:x})}catch(L0){if(V0!==void 0){let P0=new M$({ariaHome:F0,ownerGeneration:V0});try{WQ(P0,O0,{binding:C0})}finally{P0.close()}}throw L0}return{received:!0,pairingProofState:"pending_verification"}}function q(j){if(Z.size>=O50&&!Z.has(j)){let f=Date.now();for(let[g,l]of Z)if(f>l.resetAt)Z.delete(g);if(Z.size>=O50){let g=Z.keys().next().value;if(g)Z.delete(g)}}let b=Date.now(),v=Z.get(j);if(!v||b>v.resetAt)return Z.set(j,{count:1,resetAt:b+Nf0}),!0;let C=j==="127.0.0.1"||j==="::1"||j==="::ffff:127.0.0.1"||j==="localhost"?Of0:Df0;if(v.count>=C)return!1;return v.count++,!0}let A=setInterval(()=>{let j=Date.now();J?.cleanup();for(let[b,v]of X)if(j>v.expiresAt){U(b,v.relayTargetNodeId);let c=Y.get(b);if(c)clearTimeout(c.timer),c.resolve({accepted:!1}),Y.delete(b)}for(let[b,v]of Z)if(j>v.resetAt)Z.delete(b);for(let[b]of G)if(!X.has(b))G.delete(b)},60000);A.unref(),$.addHook("onClose",()=>{clearInterval(A);for(let[,j]of Y)clearTimeout(j.timer)});async function N(){let j;try{j=await c6($,"Local pair bootstrap")}catch{throw i0(503,"Runtime bootstrap unavailable \u2014 pairing requires bootstrap authority")}if(j.phase==="degraded"||j.degradedReason||j.failedPhase)throw i0(503,"Runtime bootstrap is not healthy enough for pairing");let b=j.tls.caFingerprint.trim().toLowerCase(),v=t7(j.tls.caCertPem).toLowerCase();if(b!==v)throw i0(503,"Runtime bootstrap advertised an inconsistent TLS fingerprint");return j}function _(j,b,v,c){let C=b.getConfig?.(),f=v?.trim().replace(/^\[|\]$/g,""),g=f&&(f==="localhost"||O8(f))?f:void 0;return{host:VQ({ingressHost:c??g,peerHost:g,externalHost:C?.externalEndpoint?.address?.trim()??j.controlEndpoint.host}),port:j.controlEndpoint.port,tlsCaFingerprint:d$.parse(j.tls.caFingerprint),tlsServerIdentity:$7(j),protocolVersion:j.protocolVersion,endpointRevision:C?.endpointRevision??0}}function M(j){let b=j.hostname?.trim().replace(/^\[|\]$/g,"");if(!b)return;if(b==="localhost"||O8(b))return b;return}function T(){return $.ariaNetworkManager?.getConfig?.()?.coordinationUrl||void 0}function k(){let j=$.ariaBasePath?.trim(),b=$.ariaNetworkManager?.getConfig?.(),v,c,C,f;if(j){let $0=new M$({ariaHome:j});try{let Y0=$0.readNodeMetadata();if(Y0){v=Y0.nodeId;let x=$0.readRuntimeBootstrapRecord(Y0.nodeId);c=x?.displayNameSnapshot,C=x?.transportPublicKey,f=x?.signingPublicKey}}finally{$0.close()}}let g=v?.trim()??$.ariaNodeId?.trim()??b?.nodeId?.trim(),l=c?.trim()??$.ariaNetworkManager?.getLocalDisplayNameSnapshot?.()?.trim();if(!b&&!v&&!l)return null;return{nodeId:g,displayNameSnapshot:l,publicKey:C??(typeof b?.publicKey==="string"&&b.publicKey.trim().length>0?b.publicKey:void 0),signingPublicKey:f??(typeof b?.signingPublicKey==="string"?x0.safeParse(b.signingPublicKey.trim()).data:void 0),signingPrivateKey:typeof b?.signingPrivateKey==="string"&&b.signingPrivateKey.trim().length>0?b.signingPrivateKey:void 0}}function R(j,b){if(!j)return{ok:!1,status:401,error:"MutationEnvelope required for direct pairing"};let v=iW(j.payload);if(!v.ok)return{ok:!1,status:400,error:v.error};let c=v.data,C=$.ariaNonceStore;if(!C||typeof C.consume!=="function"||typeof C.isConsumed!=="function"||!C.isDurable)return{ok:!1,status:503,error:"Durable nonce store required for direct pairing"};let f=F(b),g=k(),l=g?.nodeId,$0=x0.parse(c.peerSigningPubkey),Y0=f?[g?.signingPublicKey,$0].filter((X0)=>Boolean(X0)):[$0],x=f?new Set([l,c.peerNodeId].filter((X0)=>Boolean(X0))):new Set([c.peerNodeId]);if(Y0.length===0)return{ok:!1,status:503,error:"Signing key unavailable for direct pairing"};if(!l)return{ok:!1,status:503,error:"Local node identity unavailable for direct pairing"};if(j.operation!=="pair.direct")return{ok:!1,status:403,error:"Direct pairing envelope operation mismatch"};if(j.target.nodeId!==l)return{ok:!1,status:403,error:"Direct pairing envelope target mismatch"};if(!x.has(j.principal.nodeId))return{ok:!1,status:403,error:"Direct pairing envelope principal mismatch"};if(g?.publicKey&&j.target.transportPublicKey!==g.publicKey)return{ok:!1,status:403,error:"Direct pairing envelope target transport mismatch"};if(!Y0.some((X0)=>C9(X0)===j.principal.principalFingerprint))return{ok:!1,status:403,error:"Direct pairing envelope fingerprint mismatch"};let r=IY({method:"POST",path:"/api/v1/pair/direct",body:{...c},operation:"pair.direct",targetKey:l});if(j.contextHash!==r)return{ok:!1,status:403,error:"Direct pairing envelope context mismatch"};let J0=aW(j,{keyResolver:(X0)=>{let n=f0.safeParse(X0);if(!n.success)return;return Y0.find((K0)=>C9(K0)===n.data)},nonceStore:C,namespace:"mesh"});if(!J0.valid)return{ok:!1,status:403,error:J0.error??"Direct pairing envelope validation failed"};return{ok:!0,payload:c}}async function a(){let j=Date.now(),b=[];for(let[v,c]of X)if(j>c.expiresAt)U(v,c.relayTargetNodeId);else if(!c.relayed)b.push(hP(c));for(let[,v]of V)for(let c of v)if(j<c.expiresAt)b.push(hP(c));return b}async function o(j){let b=VX.parse(j),v=G0.parse(k()?.nodeId??(await N()).nodeId),c=X.get(b.id);if(c)U(b.id,c.relayTargetNodeId);let{ingressHost:C,displayNameSnapshot:f,...g}=b;K({...g,displayNameSnapshot:f??b.nodeId,ingressHost:C,host:C,createdAt:Date.now(),relayed:!0,relayTargetNodeId:v})}async function u(j){let{requestId:b,accepted:v}=j,c=X.get(b);if(!c)throw i0(404,"Pair request not found or expired");if(Date.now()>c.expiresAt)throw U(b,c.relayTargetNodeId),i0(404,"Pair request not found or expired");if(!v)return U(b,c.relayTargetNodeId),await S(b,c,{accepted:!1}),{accepted:!1};let C=$.ariaNetworkManager;if(!C)throw i0(503,"Network manager not available");if(!c.ephemeralPublicKey)throw i0(400,"Encrypted pairing required \u2014 ephemeralPublicKey missing from pair request");if(!c.ephemeralKeySignature)throw i0(400,"Signed ephemeral key required \u2014 ephemeralKeySignature missing");if(!I(c.ephemeralPublicKey,c.ephemeralKeySignature,c.signingPublicKey))throw i0(400,"Ephemeral key signature verification failed \u2014 possible MITM");let g=D({nodeId:G0.parse(c.nodeId),signingPublicKey:c.signingPublicKey});if(!g.ok)throw i0(409,g.error);let l=C.getConfig(),$0=await N(),Y0=k(),x=$0.signingPublicKey?.trim()??l?.signingPublicKey??Y0?.signingPublicKey??"",r=$0.displayNameSnapshot?.trim()||Y0?.displayNameSnapshot?.trim()||void 0,J0=$0.tls.caCertPem,X0=l?.signingPrivateKey??Y0?.signingPrivateKey??"";if(!x||!X0)throw Error("Hard cutover requires the responder signing identity to build a principal-addressed invite");let n=G0.parse($0.nodeId);if(!r)throw Error("Hard cutover requires the responder display snapshot to build a principal-addressed invite");let{token:K0}=C.invite(c.displayNameSnapshot,{nodeId:c.nodeId,durationMs:xP,controlEndpoint:_($0,C,c.responderControlHostHint,c.ingressHost),caCert:$0.tls.caCertPem,transportHostOverride:c.responderControlHostHint??c.ingressHost}),z0=OM(DM({issuerNodeId:n,issuerDisplayName:r,issuerSigningPublicKey:x,audienceNodeId:c.nodeId,audienceDisplayName:c.displayNameSnapshot,initialTier:"member",namespace:"default",expiresAt:c.expiresAt,transportInviteToken:K0},X0)),O0=Af0(c.ephemeralPublicKey,z0,X0),R0={accepted:!0,encryptedToken:O0.encryptedToken,ephemeralPublicKey:O0.ephemeralPublicKey,ephemeralKeySignature:O0.ephemeralKeySignature,nonce:O0.nonce,tag:O0.tag,caCert:J0};return await S(b,c,R0),{accepted:!0,inviteToken:z0}}async function w(j){let{inviteToken:b,nodeId:v,displayNameSnapshot:c,transportEndpoint:C,controlEndpoint:f,continuity:g}=j;try{bZ(f.protocolVersion,"pair control endpoint")}catch(_$){throw i0(400,_$.message)}let l=$.ariaNetworkManager;if(!l?.acceptInvite)throw i0(503,"Network manager or acceptInvite not available");let $0,Y0,x,r=oW(b);if(!r)throw i0(400,"Invalid invite token: unsupported token format");let J0=$.ariaInviteConsumeLedger,X0;try{X0=await c6($,"Local runtime bootstrap unavailable for invite validation")}catch(_$){throw i0(503,_$.message)}let n=X0.nodeId.trim(),K0=X0.displayNameSnapshot?.trim()??n;if(r.claims.nonce&&J0?.isConsumed(r.claims.nonce))throw i0(400,"Invalid invite token: Invite token already consumed (nonce reuse)");let z0=NM(r,{isNonceConsumed:(_$)=>J0?.isConsumed(_$)??!1,myNodeId:n});if(!z0.valid)throw P.warn(`[pair] V4 invite validation failed: ${z0.error} (localNodeId=${n}, localDisplayNameSnapshot=${K0}, audienceNodeId=${r.claims.audienceNodeId})`),i0(400,`Invalid invite token: ${z0.error}`);if($0=typeof r.claims.transportInviteToken==="string"?r.claims.transportInviteToken:void 0,!$0)throw i0(400,"Invalid invite token: missing embedded transport token");if(r.claims.nonce)Y0=r.claims.nonce;let O0=r.claims.issuerNodeId?.trim();if(!O0)throw i0(400,"Invite token did not carry issuer nodeId");if(x=O0,v!==O0)throw i0(400,"Invite token issuer nodeId mismatch");let R0=x0.safeParse(r.claims.issuerSigningPublicKey?.trim()).data;if(!R0)throw i0(400,"Invite token did not carry issuer signing public key");let I0=C9(R0);if(!I0)throw i0(400,"Invite token carried an invalid issuer signing public key");let Z0=f0.parse(I0),H0=typeof c==="string"&&c.trim().length>0?c.trim():typeof r.claims.issuerDisplayName==="string"&&r.claims.issuerDisplayName.trim().length>0?r.claims.issuerDisplayName.trim():O0,B0=g?a2.parse(g):void 0,F0=B0?.statement,V0=F0?.bindingGeneration??1,D0=$.ariaBasePath??E50.join(q50.homedir(),".aria"),C0=G0.parse(O0),_0=N8($);if(!_0)throw i0(503,"Principal binding authority unavailable for invite acceptance");let L0=$.ariaRevocationStore?.isPeerRevoked?.(C0)===!0,P0=L0?$.ariaRevocationStore?.getPeerRevocationGeneration?.(C0)??null:null;if(L0&&!B0)throw i0(409,"Peer is revoked; continuity approval is required before re-binding nodeId");if(B0){if(!F0||F0.nodeId!==O0)throw i0(400,"Continuity bind nodeId mismatch");if(F0.newPrincipalFingerprint!==Z0)throw _0.recordRevocationConflict({nodeId:C0,previousFingerprint:Z0,conflictingFingerprint:F0.newPrincipalFingerprint,reason:"continuity bind principal fingerprint mismatch"}),i0(409,"Continuity bind principal fingerprint mismatch");if(L0&&P0!==null&&F0.revocationGeneration!==P0)throw i0(409,"Continuity bind is stale");let _$=_0.resolveRemoteBinding(C0);if(_$&&_$.continuityRevision>V0)throw i0(409,"Continuity bind is stale");if(_$&&_$.continuityRevision===V0&&F0.newTransportPublicKey&&!wF(_$,A50({nodeId:C0,principalFingerprint:Z0,transportPublicKey:F0.newTransportPublicKey,continuityRevision:V0,displayNameSnapshot:H0,controlEndpoint:f})))throw i0(409,"Continuity bind is stale")}let c0=await l.acceptInvite($0,{nodeId:G0.parse(O0),displayNameSnapshot:H0,transportEndpoint:C,controlEndpoint:f}),z$=c0.name??H0,A0=B$.safeParse(c0.publicKey).data;if(!A0)throw i0(500,"Accepted invite did not return transport public key for continuity commit");let u0=Z0,U$=qf0({peerInfo:c0}),s0=$.ariaRuntimeOwnerGeneration??$.ariaOwnerGeneration;if(s0===void 0)throw i0(503,"Runtime owner generation unavailable for durable invite acceptance");let V$=new M$({ariaHome:D0,ownerGeneration:s0});try{let _$=_0.resolveRemoteBinding(C0),r8={binding:_$??null};if(B0&&_$&&_$.continuityRevision>V0)throw i0(409,"Continuity bind is stale");let p$=A50({nodeId:C0,principalFingerprint:u0,transportPublicKey:A0,continuityRevision:V0,displayNameSnapshot:z$,controlEndpoint:U$});if(_$&&_$.continuityRevision===V0&&!wF(_$,p$))throw i0(409,"Continuity bind is stale");if(B0){if(!_$)throw i0(409,"Continuity bind requires an existing peer binding");let c$=B50(B0,{principalFingerprint:_$.principalFingerprint,continuityRevision:_$.continuityRevision});if("kind"in c$)throw i0({delegation_signature_invalid:403,acceptance_signature_invalid:403,fingerprint_key_mismatch:403,generation_not_monotonic:409,previous_fingerprint_mismatch:409}[c$.kind]??403,`Continuity bind verification failed: ${c$.kind}`);try{if(_0.commitVerifiedContinuityBind(C0,c$,{transportPublicKey:A0,endpointHost:C.host,endpointPort:C.port,endpointRevision:f.endpointRevision??0,displayNameSnapshot:z$,controlEndpointHost:f.host,controlEndpointPort:f.port,controlTlsCaFingerprint:f.tlsCaFingerprint,projectSigningKey:!1}).continuityRevision!==V0)throw i0(409,"Continuity bind is stale");if(L0&&$.ariaRevocationStore?.isPeerRevoked?.(C0)===!0)$.ariaRevocationStore.clearRevocationForNodeId?.(C0,F0.revocationGeneration)}catch(z9){let d4=Ug(z9,"Continuity bind is stale");if(d4?.message==="Direct transport endpoint already owned by another peer principal")throw WQ(V$,C0,r8),i0(d4.statusCode,d4.message);if(z9 instanceof Error&&z9.message.includes("could not clear revoked principal binding"))throw _0.recordRevocationConflict({nodeId:C0,previousFingerprint:Z0,conflictingFingerprint:F0?.newPrincipalFingerprint??u0,reason:"continuity bind could not clear revoked principal binding"}),WQ(V$,C0,r8),i0(409,"Continuity bind could not clear revoked principal binding");if(d4)throw WQ(V$,C0,r8),i0(d4.statusCode,d4.message);throw WQ(V$,C0,r8),z9}}else try{let c$=QQ({nodeId:C0,principalFingerprint:u0,signingPublicKey:R0});if("error"in c$)throw i0(400,"Invite token signing principal fingerprint mismatch");_0.commitFirstTrustBind(c$,{transportPublicKey:p$.transportPublicKey,continuityRevision:p$.continuityRevision,endpointHost:C.host,endpointPort:C.port,endpointRevision:f.endpointRevision??0,displayNameSnapshot:p$.displayNameSnapshot,controlEndpointHost:p$.controlEndpointHost,controlEndpointPort:p$.controlEndpointPort,controlTlsCaFingerprint:p$.controlTlsCaFingerprint,projectSigningKey:!1})}catch(c$){let z9=Ug(c$,"Continuity proposal is stale");if(z9)throw WQ(V$,C0,r8),i0(z9.statusCode,z9.message);throw WQ(V$,C0,r8),c$}}finally{V$.close()}if(Y0)$.ariaInviteConsumeLedger?.consume(Y0,x??"unknown",n);return{success:!0,nodeId:C0,...z$?{displayNameSnapshot:z$}:{}}}async function m(j,b={ip:"127.0.0.1",raw:{socket:{remoteAddress:"127.0.0.1"}}}){let v=$.ariaNetworkManager;if(!v)throw i0(503,"Network manager not available");let c=F(b),C=R(j.envelope,b),f=iW(j),g=f.ok?"Invalid direct pairing payload":f.error;if(!q(b.ip))throw i0(429,"Too many pair requests. Try again in 1 minute.");if(!c&&!C.ok)throw i0(C.status,C.error);let l=C.ok?C.payload:f.ok?f.data:null;if(!l)throw i0(400,g);return L({networkManager:v,payload:l,requestIp:b.ip,isLocalCall:c})}N6($,"ariaPairControl",{listPendingPairRequests:async()=>a(),ingestRelayedPairRequest:async(j)=>o(j),respondToPairRequest:async(j)=>u(j),acceptInvite:async(j)=>w(j),directPair:async(j,b)=>m(j,b)});function I(j,b,v){try{let c=X7.createPublicKey({key:Buffer.from(v,"base64"),format:"der",type:"spki"});return X7.verify(null,Buffer.from(j,"base64"),c,Buffer.from(b,"base64"))}catch{return!1}}async function S(j,b,v){let c=Y.get(j);if(c)clearTimeout(c.timer),c.resolve(v),Y.delete(j),G.delete(j),U(j,b.relayTargetNodeId);else G.set(j,v);if(z(j,b.relayTargetNodeId),b.relayed){let C=T();if(C)try{let f=new URL(`${C}/api/v1/pair/relay-response`),g=f.protocol==="https:"?Ff0:Bf0,l,$0;try{let x=k(),r=x0.safeParse($.ariaNetworkManager?.getConfig?.()?.signingPublicKey).data,J0=$.ariaNetworkManager?.getConfig?.()?.signingPrivateKey??x?.signingPrivateKey;if(J0){let X0=X7.createPrivateKey({key:Buffer.from(J0,"base64"),format:"der",type:"pkcs8"}),n=`${j}:${v.accepted}`;l=X7.sign(null,Buffer.from(n,"utf8"),X0).toString("base64"),$0=r??x?.signingPublicKey}}catch{return}if(!l||!$0)return;let Y0=JSON.stringify({requestId:j,accepted:v.accepted,responseSignature:l,responderSigningKey:$0,encryptedToken:v.encryptedToken,ephemeralPublicKey:v.ephemeralPublicKey,ephemeralKeySignature:v.ephemeralKeySignature,nonce:v.nonce,tag:v.tag,caCert:v.caCert});await new Promise((x,r)=>{let J0=g.request(f,{method:"POST",headers:{"Content-Type":"application/json"}},(X0)=>{X0.resume(),X0.on("end",x)});J0.on("error",r),J0.write(Y0),J0.end()})}catch{}}}$.post("/api/v1/pair/request",async(j,b)=>{try{let v=Bg(QX,j.body);if(!q(j.ip))return b.status(429).send({error:"Too many pair requests. Try again in 1 minute."});let{displayNameSnapshot:c,nodeId:C,signingPublicKey:f,port:g,ephemeralPublicKey:l,ephemeralKeySignature:$0,caCert:Y0}=v,x=j.ip,r=G0.parse(C.trim()),J0=M(j),X0=VQ({ingressHost:j.raw.socket?.localAddress,peerHost:j.ip,externalHost:J0}),n=C9(f);if(!n)return b.status(400).send({error:"Invalid signingPublicKey"});let K0=await N();if(X.size>=L50)return b.status(503).send({error:"Too many pending pair requests. Try again later."});for(let[,F0]of X)if(F0.nodeId===r&&Date.now()<F0.expiresAt)return b.status(409).send({error:"Pair request for this peer principal already pending"});let z0=X7.randomBytes(16).toString("hex"),O0=Date.now();K({id:z0,nodeId:r,displayNameSnapshot:c,principalFingerprint:n,signingPublicKey:f,port:g,host:x,responderControlHostHint:J0,ingressHost:X0,createdAt:O0,expiresAt:O0+xP,ephemeralPublicKey:l,ephemeralKeySignature:$0,caCert:Y0});let I0=$.ariaNetworkManager?.getConfig(),Z0=I0?.signingPublicKey?X7.createHash("sha256").update(Buffer.from(I0.signingPublicKey,"base64")).digest("hex"):"",H0=K0.tls.caCertPem;if(v.wait===!0){let F0=await new Promise((V0)=>{let D0=setTimeout(()=>{Y.delete(z0),V0(null)},D50);Y.set(z0,{resolve:V0,timer:D0})});if(U(z0),F0?.accepted)return b.send({requestId:z0,status:"accepted",responderFingerprint:Z0,protocolVersion:2,...H0&&{caCert:H0},...F0});return b.send({requestId:z0,status:"rejected",responderFingerprint:Z0,protocolVersion:2,...H0&&{caCert:H0}})}return b.send({requestId:z0,status:"pending",responderFingerprint:Z0,protocolVersion:2,...H0&&{caCert:H0}})}catch(v){return b.status(sF(v,500)).send({error:v.message})}}),$.get("/api/v1/pair/pending",async(j,b)=>{if(!F(j))return b.code(403).send({error:"localhost-only"});let v=Date.now(),c=[];for(let[C,f]of X)if(v>f.expiresAt)U(C,f.relayTargetNodeId);else if(!f.relayed)c.push(hP(f));for(let[,C]of V)for(let f of C)if(v<f.expiresAt)c.push(hP(f));return b.send({requests:c})}),$.get("/api/v1/pair/status/:requestId",async(j,b)=>{let{requestId:v}=j.params,c=X.get(v);if(!c)return b.status(404).send({error:"Pair request not found or expired"});if(Date.now()>c.expiresAt)return U(v,c.relayTargetNodeId),b.status(404).send({error:"Pair request not found or expired"});if(!c.relayed&&c.host!==j.ip)return b.status(403).send({error:"IP mismatch \u2014 long-poll must come from the original requester"});let C=G.get(v);if(C){if(G.delete(v),U(v,c.relayTargetNodeId),!C.accepted)return b.send({accepted:!1});if(!C.encryptedToken||!C.ephemeralPublicKey||!C.nonce||!C.tag)return b.send({accepted:!1});return b.send({accepted:!0,encryptedToken:C.encryptedToken,ephemeralPublicKey:C.ephemeralPublicKey,nonce:C.nonce,tag:C.tag,...C.caCert&&{caCert:C.caCert}})}if(Y.has(v))return b.status(409).send({error:"Another long-poll is already waiting"});if(Q>=Lf0)return b.status(503).send({error:"Too many active pairing requests. Try again later."});Q++;try{let f=await new Promise((g)=>{let l=setTimeout(()=>{Y.delete(v),g({accepted:!1})},D50);Y.set(v,{resolve:g,timer:l})});if(f.accepted){if(f.encryptedToken&&f.ephemeralPublicKey&&f.nonce&&f.tag)return b.send({accepted:!0,encryptedToken:f.encryptedToken,ephemeralPublicKey:f.ephemeralPublicKey,...f.ephemeralKeySignature&&{ephemeralKeySignature:f.ephemeralKeySignature},nonce:f.nonce,tag:f.tag,...f.caCert&&{caCert:f.caCert}})}return b.send({accepted:!1})}finally{Q=Math.max(0,Q-1)}}),$.post("/api/v1/pair/respond",{schema:{body:{type:"object",required:["requestId","accepted"],properties:{requestId:{type:"string",minLength:1,maxLength:64},accepted:{type:"boolean"}}}}},async(j,b)=>{if(!F(j))return b.code(403).send({error:"localhost-only"});try{let v=await u(j.body);return b.send(v)}catch(v){return b.status(sF(v,500)).send({error:v.message})}}),$.post("/api/v1/pair/accept-invite",async(j,b)=>{if(!F(j))return b.code(403).send({error:"localhost-only"});try{let v=Bg(A4,j.body),c=$.ariaPairControl?.acceptInvite;if(!c)throw i0(503,"Pair control or acceptInvite not available");let C=await c(v);return b.send(C)}catch(v){return b.status(sF(v,500)).send({error:v.message})}}),$.post("/api/v1/pair/relay",async(j,b)=>{try{let v=Bg(GX,j.body);if(!q(j.ip))return b.status(429).send({error:"Too many pair requests. Try again in 1 minute."});let{targetNodeId:c,displayNameSnapshot:C,nodeId:f,signingPublicKey:g,port:l,ephemeralPublicKey:$0,ephemeralKeySignature:Y0,caCert:x}=v,r=G0.parse(f.trim()),J0=C9(g);if(!J0)return b.status(400).send({error:"Invalid signingPublicKey"});if($0&&Y0){if(!I($0,Y0,g))return b.status(403).send({error:"Relay authentication failed \u2014 invalid ephemeral key signature"})}if(X.size>=L50)return b.status(503).send({error:"Too many pending pair requests. Try again later."});let X0=10;if((V.get(c)??[]).filter((I0)=>Date.now()<I0.expiresAt).length>=X0)return b.status(429).send({error:`Too many pending relay requests for target principal "${c}"`});let z0=X7.randomBytes(16).toString("hex"),O0=Date.now(),R0={id:z0,nodeId:r,displayNameSnapshot:C,principalFingerprint:J0,signingPublicKey:g,port:l,host:j.ip,ingressHost:VQ({ingressHost:j.raw.socket?.localAddress,peerHost:j.ip}),createdAt:O0,expiresAt:O0+xP,ephemeralPublicKey:$0,ephemeralKeySignature:Y0,caCert:x,relayed:!0,relayTargetNodeId:c};return K(R0),b.send({relayed:!0,requestId:z0})}catch(v){return b.status(sF(v,500)).send({error:v.message})}}),$.get("/api/v1/pair/relay-pending",{schema:{querystring:KG}},async(j,b)=>{let{targetNodeId:v,signingPublicKey:c,signature:C,timestamp:f}=j.query,g=Number(f),l=Date.now();if(isNaN(g)||Math.abs(l-g)>xP)return b.status(403).send({error:"Timestamp expired or invalid"});let $0=`relay-pending:${v}:${f}`,Y0=!1;try{let X0=X7.createPublicKey({key:Buffer.from(c,"base64"),format:"der",type:"spki"});Y0=X7.verify(null,Buffer.from($0,"utf8"),X0,Buffer.from(C,"base64"))}catch{Y0=!1}if(!Y0)return b.status(403).send({error:"Invalid signature \u2014 identity verification failed"});let x=await N50($,{targetNodeId:v,signingPublicKey:c});if(x.status==="missing")return b.status(403).send({error:"Target peer identity not registered \u2014 complete pairing first"});if(x.status==="mismatch")return b.status(403).send({error:"Signing key does not match registered key for target peer"});let r=V.get(v)??[],J0=r.filter((X0)=>l<X0.expiresAt);if(J0.length!==r.length)V.set(v,J0);return b.send({requests:J0})}),$.post("/api/v1/pair/relay-response",{schema:{body:{type:"object",required:["requestId","accepted","responseSignature","responderSigningKey"],properties:{requestId:{type:"string",minLength:1,maxLength:64},accepted:{type:"boolean"},responseSignature:{type:"string",minLength:1,maxLength:512},responderSigningKey:{type:"string",minLength:1,maxLength:512},encryptedToken:{type:"string",maxLength:4096},ephemeralPublicKey:{type:"string",maxLength:512},ephemeralKeySignature:{type:"string",maxLength:512},nonce:{type:"string",maxLength:64},tag:{type:"string",maxLength:64},caCert:{type:"string",maxLength:4096}}}}},async(j,b)=>{let{requestId:v,accepted:c,responseSignature:C,responderSigningKey:f,encryptedToken:g,ephemeralPublicKey:l,ephemeralKeySignature:$0,nonce:Y0,tag:x,caCert:r}=j.body;{let z0=`${v}:${c}`,O0=!1;try{let R0=X7.createPublicKey({key:Buffer.from(f,"base64"),format:"der",type:"spki"});O0=X7.verify(null,Buffer.from(z0,"utf8"),R0,Buffer.from(C,"base64"))}catch{O0=!1}if(!O0)return b.status(403).send({error:"Relay response signature verification failed"})}let J0=X.get(v);if(J0&&J0.relayTargetNodeId&&f){let z0=x0.safeParse(f);if(!z0.success)return b.status(400).send({error:"Invalid responder signing key"});if((await N50($,{targetNodeId:G0.parse(J0.relayTargetNodeId),signingPublicKey:z0.data})).status==="mismatch")return b.status(403).send({error:"Responder signing key does not match expected target peer identity"})}let X0=X.get(v);if(!X0)return b.status(404).send({error:"Pair request not found or expired"});let n=!c?{accepted:!1}:{accepted:!0,encryptedToken:g,ephemeralPublicKey:l,ephemeralKeySignature:$0,nonce:Y0,tag:x,caCert:r},K0=Y.get(v);if(!K0)return G.set(v,n),z(v,X0.relayTargetNodeId),b.send({relayed:!0});return clearTimeout(K0.timer),Y.delete(v),G.delete(v),U(v,X0.relayTargetNodeId),K0.resolve(n),b.send({relayed:!0})}),$.post("/api/v1/pair/direct",{schema:{body:{oneOf:[{...BG},{type:"object",required:["envelope"],properties:{envelope:{type:"object"}}}]}}},async(j,b)=>{try{if(!j.body?.envelope||typeof j.body.envelope!=="object")return b.status(401).send({error:"MutationEnvelope required for direct pairing"});let v=$.ariaPairControl?.directPair;if(!v)return b.status(503).send({error:"Pair control not available"});return b.send(await v(j.body,j))}catch(v){let c=sF(v,500),C=v instanceof Error?v.message:String(v);return b.status(c).send({error:c===500?`Failed to configure tunnel: ${C}`:C})}})}var xP=300000,D50=300000,Df0=3,Of0=30,Nf0=60000,O50=1e4,Lf0=50,L50=1000;var M50=E(()=>{S0();m4();MJ();GQ();O6();rx();V8();b0();F50()});import{createHash as Mf0}from"crypto";function Pf0($,Z){if(Z<=0)return"";let[J,X]=$.split(":",2);if(!J||!X)throw Error("Join challenge payload malformed");let Y=0;for(;;){let Q=`${J}:${Y}`,G=Mf0("sha256").update(`${Q}:${X}`).digest(),V=0;for(let W of G){if(W===0){V+=8;continue}V+=Math.clz32(W)-24;break}if(V>=Z)return Q;Y+=1}}async function j50($){$.post("/api/v1/invite-relay/join",async(Z,J)=>{try{let X=Z.body&&typeof Z.body==="object"?Z.body:{},Y=typeof X.inviteToken==="string"&&X.inviteToken.trim().length>0?X.inviteToken.trim():null;if(!Y)return J.status(400).send({error:"inviteToken is required"});let Q=l2.parse(X.joinRequest),G=P50.decodeInviteToken(Y),V=G.controlEndpoint,W=G.caCert?.trim(),H=V?.tlsServerIdentity?.trim();if(!V||!W||!H)return J.status(400).send({error:"Invite token missing relay bootstrap trust data"});let K=`https://${V.host}:${V.port}/api/v1/join/challenge`,z=await x6(K,{ca:W,expectedTlsIdentity:H});if(z.status!==200)return J.status(502).send({error:`Invite relay challenge failed: ${z.status}`});let U=await z.json();if(!U.challenge||typeof U.challenge!=="string")return J.status(502).send({error:"Invite relay challenge payload was invalid"});let B=Pf0(U.challenge,U.difficulty??4),F=`https://${V.host}:${V.port}/api/v1/join`,D=JSON.stringify({...Q,proofOfWork:B}),O=await x6(F,{method:"POST",body:D,ca:W,expectedTlsIdentity:H,headers:{"Content-Type":"application/json","Content-Length":Buffer.byteLength(D).toString()}});if(O.status!==200)return J.status(502).send({error:`Invite relay join failed: ${O.status}`});return J.send(await O.json())}catch(X){return J.status(400).send({error:X.message})}})}var P50;var T50=E(()=>{V8();b0();P50=U7(MH(),1)});import*as HQ from"crypto";async function C50($){let Z=new Map,J=50,X=1000,Y=new Map,Q=0;$.get("/api/v1/ws/revocations",{websocket:!0},(G,V)=>{let W=V.ip??V.socket?.remoteAddress??"unknown",H=Y.get(W)??0;if(H>=50||Q>=1000){G.close(1013,"Too many connections");return}Y.set(W,H+1),Q++;let K=!1,z=!0,U=null,B=null,F=null,D=null,O=null,L=setTimeout(()=>{if(!K)u4(G,{type:"auth_error",error:"Authentication timeout"}),G.close()},1e4);G.on("message",(N)=>{try{let _=typeof N==="string"?N:N.toString(),M;try{M=JSON.parse(_)}catch{u4(G,{type:K?"error":"auth_error",error:"Malformed message"}),G.close();return}if(!K)A(M)}catch(_){u4(G,{type:K?"error":"auth_error",error:_ instanceof Error?_.message:"Authentication failed"}),G.close()}});function q(){if(!z)return;z=!1;let N=(Y.get(W)??1)-1;if(N<=0)Y.delete(W);else Y.set(W,N);Q--}G.on("close",()=>{if(clearTimeout(L),F&&Z.get(F)?.socket===G)Z.delete(F);q()}),G.on("error",()=>{if(clearTimeout(L),F&&Z.get(F)?.socket===G)Z.delete(F);q()});function A(N){if(N.type==="auth"){let{nodeId:_,signingPublicKey:M}=N,T=G0.safeParse(_);if(!T.success){u4(G,{type:"auth_error",error:"Invalid nodeId"}),G.close();return}if(typeof M!=="string"){u4(G,{type:"auth_error",error:"Missing signing public key"}),G.close();return}let k=x0.safeParse(M);if(!k.success){u4(G,{type:"auth_error",error:"Invalid signing public key"}),G.close();return}let R=vP($,T.data,k.data);if(!R.ok){u4(G,{type:"auth_error",error:R.error}),G.close();return}if($.ariaRevocationStore?.isPeerRevoked?.(R.nodeId)){u4(G,{type:"auth_error",error:"Peer has been revoked"}),G.close();return}F=R.nodeId,D=R.displayNameSnapshot??null,O=M,U=HQ.randomBytes(jf0).toString("hex"),B=HQ.randomBytes(Tf0).toString("hex");let a=`${U}:${B}`;u4(G,{type:"challenge",nonce:a})}else if(N.type==="challenge_response"){if(!U||!B||!F||!O){u4(G,{type:"auth_error",error:"No pending challenge"}),G.close();return}let _=N.signature;if(typeof _!=="string"){u4(G,{type:"auth_error",error:"Missing signature"}),G.close();return}let M=`${U}:${B}`;if(!Cf0(M,_,O)){u4(G,{type:"auth_error",error:"Invalid signature"}),G.close();return}if($.ariaRevocationStore?.isPeerRevoked?.(F)){u4(G,{type:"auth_error",error:"Peer has been revoked"}),G.close();return}let T=Z.get(F);if(T&&T.socket!==G)try{T.socket.close()}catch{}Z.set(F,{socket:G,...D?{displayNameSnapshot:D}:{}}),clearTimeout(L),K=!0,u4(G,{type:"auth_ok",nodeId:F,...D?{displayNameSnapshot:D}:{}})}}}),$.decorate("ariaRevocationBroadcast",(G)=>{let V=G.nodeId,W=G.displayNameSnapshot??Z.get(V)?.displayNameSnapshot,H=Z.get(V);if(H){Z.delete(V);try{u4(H.socket,{type:"revoked",nodeId:V,...W?{displayNameSnapshot:W}:{}}),H.socket.close()}catch{}}for(let[,K]of Z)try{u4(K.socket,{type:"revocation",nodeId:V,...W?{displayNameSnapshot:W}:{},revokedAt:G.revokedAt})}catch{}})}function u4($,Z){try{$.send(JSON.stringify(Z))}catch{}}function Cf0($,Z,J){try{let X=Buffer.from(J,"base64"),Y=HQ.createPublicKey({key:X,format:"der",type:"spki"});return HQ.verify(null,Buffer.from($),Y,Buffer.from(Z,"base64"))}catch{return!1}}var jf0=32,Tf0=16;var R50=E(()=>{b0();Kg();m4()});import{existsSync as Rf0,mkdirSync as wf0,readFileSync as Sf0,renameSync as If0,writeFileSync as bf0}from"fs";import{dirname as kf0}from"path";function ff0($){if(!Array.isArray($))return;let Z=[];for(let J of $){if(!J||typeof J!=="object")continue;let X=J;if(typeof X.id!=="string"||typeof X.name!=="string")continue;Z.push({id:X.id,name:X.name,arguments:X.arguments&&typeof X.arguments==="object"?X.arguments:void 0,...typeof X.thoughtSignature==="string"?{thoughtSignature:X.thoughtSignature}:{}})}return Z.length>0?Z:void 0}function S50($){let Z=[];for(let J of $){if(!J||typeof J!=="object")continue;let X=typeof J.role==="string"?J.role:"";if(!X)continue;let Y=typeof J.content==="string"?J.content:"",Q=typeof J.name==="string"?J.name:void 0,G=typeof J.toolCallId==="string"?J.toolCallId:void 0,V=ff0(J.toolCalls);Z.push({role:X,content:Y,...Q?{name:Q}:{},...G?{toolCallId:G}:{},...V?{toolCalls:V}:{}})}return Z}function I50($){if($.size<=w50)return;let Z=[...$.values()].sort((J,X)=>{let Y=Date.parse(J.updatedAt)-Date.parse(X.updatedAt);if(Y!==0)return Y;return Date.parse(J.createdAt)-Date.parse(X.createdAt)});for(let J of Z){if($.size<=w50)break;$.delete(J.id)}}function yf0($){let Z=new Map;if(!Rf0($))return Z;try{let J=JSON.parse(Sf0($,"utf-8"));if(!J||typeof J!=="object"||!Array.isArray(J.sessions))return Z;for(let X of J.sessions){if(!X||typeof X!=="object")continue;if(typeof X.id!=="string")continue;Z.set(X.id,{id:X.id,arionName:typeof X.arionName==="string"?X.arionName:null,createdAt:typeof X.createdAt==="string"?X.createdAt:new Date().toISOString(),updatedAt:typeof X.updatedAt==="string"?X.updatedAt:new Date().toISOString(),completedAt:typeof X.completedAt==="string"?X.completedAt:null,messages:S50(Array.isArray(X.messages)?X.messages:[])})}}catch{return new Map}return I50(Z),Z}function vf0($,Z){let J=kf0($);wf0(J,{recursive:!0});let X={version:1,sessions:[...Z.values()]},Y=`${$}.${process.pid}.${Date.now().toString(36)}.${Math.random().toString(36).slice(2)}.tmp`;bf0(Y,JSON.stringify(X),"utf-8"),If0(Y,$)}function b50($){let Z=yf0($),J=()=>{I50(Z);try{vf0($,Z)}catch(X){console.warn("[Server] Failed to persist session history:",X instanceof Error?X.message:String(X))}};return{upsertSession(X,Y,Q){let G=new Date().toISOString(),V=Z.get(X),W=S50(Y),H=Q?.completed===!0;Z.set(X,{id:X,arionName:Q?.arionName??V?.arionName??null,createdAt:V?.createdAt??G,updatedAt:G,completedAt:H?V?.completedAt??G:null,messages:W.length>0?W:V?.messages??[]}),J()},markCompleted(X){let Y=new Date().toISOString(),Q=Z.get(X);Z.set(X,{id:X,arionName:Q?.arionName??null,createdAt:Q?.createdAt??Y,updatedAt:Y,completedAt:Q?.completedAt??Y,messages:Q?.messages??[]}),J()},markStaleSessionsCompleted(X){let Y=Date.now()-X*86400000,Q=new Date().toISOString(),G=0;for(let V of Z.values()){if(V.completedAt!==null)continue;if(V.messages.length===0)continue;if(Date.parse(V.updatedAt)>=Y)continue;V.completedAt=V.completedAt??Q,V.updatedAt=Q,G++}if(G>0)J();return G},getIncompleteSessions(X){return[...Z.values()].filter((Y)=>Y.completedAt===null&&Y.messages.length>0).sort((Y,Q)=>Date.parse(Q.updatedAt)-Date.parse(Y.updatedAt)).slice(0,Math.max(0,X)).map((Y)=>({id:Y.id,messageCount:Y.messages.length}))},getIncompleteSessionsWithMetadata(X){return[...Z.values()].filter((Y)=>Y.completedAt===null&&Y.messages.length>0).sort((Y,Q)=>Date.parse(Q.updatedAt)-Date.parse(Y.updatedAt)).slice(0,Math.max(0,X)).map((Y)=>({id:Y.id,messageCount:Y.messages.length,arionName:Y.arionName??void 0}))},getSession(X){let Y=Z.get(X);if(!Y)return null;return{id:Y.id,messages:Y.messages.map((Q)=>({role:Q.role,content:Q.content,...Q.toolCallId?{toolCallId:Q.toolCallId}:{},...Q.toolCalls?{toolCalls:[...Q.toolCalls]}:{}}))}}}}var w50=500;var k50=()=>{};var f50=E(()=>{V8()});function y50($){let Z=new M$({ariaHome:$.ariaHome,ownerGeneration:$.ownerGeneration});return{revoke(J){Z.revoke(J)},isPeerRevoked(J){return Z.isPeerRevoked(J)},read(J){let X=Z.readRevocation(J);if(!X)return null;return{...X,localNodeId:X.revokedBy}},getPeerRevocationGeneration(J){return Z.getPeerRevocationGeneration(J)},clearRevocationForNodeId(J,X){return Z.clearRevocationForNodeId(J,X)},list(){return Z.listRevocations().map((J)=>({...J,localNodeId:J.revokedBy}))},close(){Z.close()}}}var v50=E(()=>{O6()});function h50($){let Z=y50({ariaHome:$.ariaHome,ownerGeneration:$.ownerGeneration}),J=new pW($.networkStateDb),X=new dW($.networkStateDb),Y=new rW($.networkStateDb),Q=new XJ($.networkStateDb),G=new sW($.networkStateDb);return{revocationStore:Z,peerSigningKeyStore:J,durablePairStore:X,nonceStore:Y,peerTrustStore:Q,inviteConsumeLedger:G}}var x50=E(()=>{f50();v50()});var g50={};A$(g50,{recoverCrashedSessions:()=>r3});var m50=E(()=>{wB()});var c50={};A$(c50,{ArionStorage:()=>T9});var u50=E(()=>{EB()});import hf0 from"fastify";import xf0 from"@fastify/cors";import gf0 from"@fastify/websocket";import mf0 from"path";import cf0 from"crypto";async function uf0(){let[{recoverCrashedSessions:$},{ArionStorage:Z}]=await Promise.all([Promise.resolve().then(() => (m50(),g50)),Promise.resolve().then(() => (u50(),c50))]);return{recoverCrashedSessions:$,ArionStorage:Z}}function pf0(){let $=process;if($[p50])return;$[p50]=!0,process.on("unhandledRejection",(Z)=>{console.error("[Server] Unhandled promise rejection:",Z)}),process.on("uncaughtException",(Z)=>{console.error("[Server] Uncaught exception \u2014 shutting down:",Z),process.exit(1)})}function df0($){try{let Z=new URL($);return Z.hostname==="localhost"||Z.hostname==="127.0.0.1"||Z.hostname==="::1"||Z.hostname==="[::1]"}catch{return!1}}function lf0($){if(!$)return $;try{let Z=new URL($,"http://localhost");if(Z.searchParams.has("api_key"))return Z.searchParams.set("api_key","REDACTED"),Z.pathname+Z.search}catch{return $.replace(/([?&])api_key=[^&]*/g,"$1api_key=REDACTED")}return $}function af0($,Z){if(Z&&typeof Z.upsertSession==="function")return Z;return $}function nf0($,Z){let J=$.getIncompleteSessionsWithMetadata;if(typeof J==="function")return J(Z);return $.getIncompleteSessions(Z).map((X)=>({id:X.id,messageCount:X.messageCount,arionName:void 0}))}function d50($,Z){let J=$.trim()||"ARIA";return Z?.memoriaPath||`arions/${J}/memory.db`}function if0($){return cf0.createHash("sha256").update(Buffer.from($,"base64")).digest("hex")}function of0($){let Z=$?.trim();if(Z)return Z;let J=process.env.ARIA_HOME?.trim();if(J)return J;return M2()}async function gP($={}){let{port:Z=3000,host:J="127.0.0.1",enableCrashRecovery:X=!0,crashRecoverySessionHistory:Y}=$,Q=of0($.basePath),V=($.nodeId?await Qx({ariaHome:Q,nodeId:$.nodeId}):null)?.nodeId??$.nodeId,W=$.ownerGeneration??(V?1:void 0),H=hf0({...$.tls&&{https:{cert:$.tls.cert,key:$.tls.key}},logger:$.silent?!1:{level:"info",serializers:{req(o){let u=o;return{method:u.method,url:lf0(u.url),hostname:u.hostname,remoteAddress:u.ip}}}},connectionTimeout:330000,requestTimeout:330000,bodyLimit:1048576}),K=new Gg;H.decorate("ariaInboxEventHub",K);let z=BZ.subscribeStoredEvents((o)=>{H.ariaInboxEventHub?.publish({...o,senderNodeId:o.senderNodeId})});H.addHook("onClose",async()=>{z()}),H.register(xf0,{origin:(o,u)=>{if(!o||df0(o))u(null,!0);else u(Error("Not allowed by CORS"),!1)},methods:["GET","POST","PUT","DELETE","OPTIONS"],allowedHeaders:["Content-Type","Authorization"]}),H.decorate("config",{port:Z,host:J}),H.decorate("ariaRuntimeId",$.runtimeId),H.decorate("ariaNodeId",V),H.decorate("ariaOwnerGeneration",W),H.decorate("ariaBasePath",Q);let U=new l50.NetworkStateStore({ariaHome:Q}),B=U.open();H.addHook("onClose",async()=>{U.close()});let F=b50(mf0.join(Q,"server-session-history.json")),D=Y??F,O=af0(F,Y),L=hZ({ariaHome:Q}),q=$.router??await E1({ariaHome:Q,anthropic:L.legacyApiKeys.anthropic,openai:L.legacyApiKeys.openai,google:L.legacyApiKeys.google,...L.bedrock?{bedrock:L.bedrock}:{},authResolver:$.authResolver??L.authResolver}),A=$.memoriaFactory??new i8(Q,q).toFactory();H.decorate("ariaMemoriaFactory",A),H.decorate("ariaRouter",q),H.decorate("ariaSessionHistory",O);let N=$.authResolver?{authResolver:$.authResolver,createOverlayResolver:()=>$.authResolver}:L;H.decorate("ariaAuthResolver",N.authResolver),H.decorate("ariaCreateOverlayAuthResolver",N.createOverlayResolver);try{let u=(await A.get(d50($.arionName??"ARIA"))).storage?.createMessageStore();if(u)H.decorate("ariaMessageStore",u)}catch(o){P.debug("[Server] MessageStore not available \u2014 /api/v1/message requires EventQueue sink or will return 503:",o?.message??o)}let _=A;H.addHook("onClose",async()=>{await _.closeAll()});let M,T,k=!1;try{let o=h50({ariaHome:Q,networkStateDb:B,ownerGeneration:W??1});T=o.revocationStore,H.decorate("ariaRevocationStore",T),M=o.peerSigningKeyStore,H.decorate("ariaPeerSigningKeyStore",M),H.decorate("ariaDurablePairStore",o.durablePairStore),H.decorate("ariaNonceStore",o.nonceStore),H.decorate("ariaPeerTrustStore",o.peerTrustStore),H.decorate("ariaInviteConsumeLedger",o.inviteConsumeLedger),k=!0}catch{P.debug("[Server] Durable network stores not available")}if(T)H.addHook("onClose",async()=>{T?.close()});if($.networkManager)H.decorate("ariaNetworkManager",$.networkManager),$.networkManager.addPeerActivationListener?.(({nodeId:u,displayNameSnapshot:w,signingPublicKey:m})=>{M?.set(u,m,w);let I=H.ariaPeerTrustStore;if(I?.getTier(u)==="probe")I.setTier({nodeId:u,displayName:w,fingerprint:f0.parse(if0(m)),tier:"member",promotedBy:"verified-ingress",reason:"Verified signed ingress activated paired peer"});P.debug(`[Server] Peer "${w}" activated after identity verification`)});if(J!=="127.0.0.1"&&J!=="localhost"&&!$.tls)throw Error("Refusing to bind to non-localhost without TLS. Provide tls config or use host=127.0.0.1.");if($.attachedLocalHttpClientAuthority)KP(H,$.attachedLocalHttpClientAuthority);if(H.get("/health",async()=>{return{status:"ok"}}),await H.register(gf0),H.setSchemaErrorFormatter((o,u)=>{let m=o[0]?.message||"Validation failed";return Error(m)}),H.setErrorHandler((o,u,w)=>{if(o.validation)return w.status(400).send({success:!1,error:o.message});throw o}),await H70(H),H.register(z70),H.register(j70),H.register(d10),H.register(w70),await Q50(H),await a70(H),await i70(H),await s70(H),k)await C50(H);if(k)await V50(H);await K50(H),await _50(H),await j50(H),pf0();let R=!1,a=async(o)=>{if(!X)return;if(o?.startup&&R)return;if(!A||!q||!D)return;if(o?.startup)R=!0;let{recoverCrashedSessions:u,ArionStorage:w}=await uf0(),I=nf0(D,3),S=new w(Q);await S.initialize().catch((C)=>{P.warn("[Server] Storage initialization failed:",C?.message??C)});let j=async(C)=>{let f=C.trim()||"ARIA",g=await S.get(f).catch(()=>null);return d50(f,g)};if(I.length===0){let C=await j("ARIA");try{let f=await A.get(C),g=await u({sessionHistory:D,memoria:f,router:q,signal:o?.signal});if(g.recovered>0)console.debug(`[Server] Recovered learning from ${g.recovered} incomplete session${g.recovered===1?"":"s"}.`)}catch(f){console.warn("[Server] Crash recovery failed:",f?.message??String(f))}finally{if(typeof A?.evict==="function")await A.evict(C).catch((f)=>{P.warn("[Server] Memoria factory evict failed:",f?.message??f)})}return}let b=new Map;for(let C of I){let f=(C.arionName?.trim()||"ARIA").toLowerCase(),g=b.get(f)??[];g.push(C),b.set(f,g)}let v=0,c=0;for(let[C,f]of b.entries()){if(o?.signal?.aborted)break;let g=new Set(f.map((x)=>x.id)),l=f[0]?.arionName?.trim()||C||"ARIA",$0=await j(l),Y0={getIncompleteSessions(x){return f.slice(0,Math.max(0,x)).map((r)=>({id:r.id,messageCount:r.messageCount}))},getSession(x){if(!g.has(x))return null;return D.getSession(x)},markCompleted(x){if(!g.has(x))return;D.markCompleted(x)},markStaleSessionsCompleted(x){return D.markStaleSessionsCompleted(x)}};try{let x=await A.get($0),r=await u({sessionHistory:Y0,memoria:x,router:q,signal:o?.signal});v+=r.recovered,c+=r.errors}catch(x){c++,console.warn("[Server] Crash recovery failed:",x?.message??String(x))}finally{if(typeof A?.evict==="function")await A.evict($0).catch((x)=>{P.warn("[Server] Memoria factory evict failed:",x?.message??x)})}}if(v>0)console.debug(`[Server] Recovered learning from ${v} incomplete session${v===1?"":"s"}.`);if(c>0)console.warn(`[Server] Crash recovery encountered ${c} error${c===1?"":"s"}.`)};return H.decorate("ariaRecoverCrashedSessions",async(o)=>{await a({signal:o})}),{server:H,listen:async()=>{return await a({startup:!0}),H.listen({port:Z,host:J})}}}var l50,p50;var Fg=E(()=>{_H();vF();R6();S0();b0();K70();U70();T70();mF();ox();n70();o70();r70();G50();a3();W50();z50();M50();T50();R50();k50();SH();x50();_J();iY();m4();l50=U7(Ix(),1),p50=Symbol.for("./process-handlers-registered")});import{randomUUID as sf0}from"crypto";async function xH($){if($.ariaRunControl)return $.ariaRunControl;let{ensureRuntimeRunControl:Z}=await Promise.resolve().then(() => (lF(),dF));if(Z($),!$.ariaRunControl)throw Error("Local control run surface unavailable");return $.ariaRunControl}function a50($){return{runId:`run-${sf0()}`,wait:()=>$}}async function rf0($){await new Promise((Z)=>setTimeout(Z,Math.max($,0)))}async function*n50($,Z={pollIntervalMs:1000}){let J=new Map,X=Z.initialAfterCreatedAt??0;while(!0){let Y=await $(),Q=!1;for(let G of Y){if(typeof G.createdAt==="number"&&G.createdAt<X)continue;let V=typeof G.id==="string"?G.id:G.nodeId;if(typeof V==="string"){let W=Z.getVersionKey?.(G)??JSON.stringify(G);if(J.get(V)===W)continue;J.set(V,W)}if(typeof G.createdAt==="number")X=Math.max(X,G.createdAt);Q=!0,yield G}if(!Q)await rf0(Z.pollIntervalMs)}}function mP($){let Z=$.pollIntervalMs??1000,J=()=>{if(!$.server)throw Error("Local control server transport unavailable");return $.server},X=()=>{let z=J().ariaRuntimeMessageControl;if(!z)throw Error("Local control message surface unavailable");return z},Y=()=>{let z=J().ariaRuntimeBootstrapControl;if(!z)throw Error("Local control bootstrap surface unavailable");return z},Q=()=>{let z=J().ariaPeerLocalControl;if(!z)throw Error("Local control peer surface unavailable");return z},G=()=>{let z=J().ariaPairControl;if(!z)throw Error("Local control pair surface unavailable");return z},V=()=>{let z=J().ariaNetworkAdminControl;if(!z)throw Error("Local control network admin surface unavailable");return z},W=async()=>{let z=typeof $.status==="function"?await $.status():$.status;return f8.parse(z)},H=async(z)=>{let U=r9.optional().parse(z);return(await X().listInbox({limit:U?.limit??100,unreadOnly:U?.unreadOnly??!1})).map((F)=>c8.parse({...F,inboxAddress:M8.parse(F.inboxAddress)})).filter((F)=>typeof U?.cursor?.afterCreatedAt==="number"?F.createdAt>=U.cursor.afterCreatedAt:!0)};return{async submitRun(z){let U=j8.parse(z),B=(await xH(J())).submitRun;if(!B)throw Error("Local control run surface unavailable");return a50(B(U).then((F)=>k9.parse(F)))},async submitRunAsAttachedClient(z,U){if($.submitRunAsAttachedClient)return $.submitRunAsAttachedClient(z,U);let B=j8.parse(U),F=(await xH(J())).submitRun;if(!F)throw Error("Local control run surface unavailable");return a50(F(B,{clientId:z.clientId}).then((D)=>k9.parse(D)))},async resumeRun(z){let U=a4.parse(z),B=(await xH(J())).resumeRun;if(!B)throw Error("Local control resume surface unavailable");return k9.parse(await B(U))},async resumeRunAsAttachedClient(z,U){let B=a4.parse(U),F=(await xH(J())).resumeRun;if(!F)throw Error("Local control resume surface unavailable");return k9.parse(await F(B,{clientId:z.clientId}))},async*streamRun(z,U){let B=j8.parse(z),F=(await xH(J())).streamRun;if(!F)throw Error("Local control stream surface unavailable");for await(let D of F(B,U))yield E6.parse(D)},async*streamRunAsAttachedClient(z,U,B){let F=j8.parse(U),D=(await xH(J())).streamRun;if(!D)throw Error("Local control stream surface unavailable");for await(let O of D(F,B,{clientId:z.clientId}))yield E6.parse(O)},subscribeRuntimeEvents(z){if(!$.subscribeRuntimeEvents)throw Error("Local control runtime event surface unavailable");return $.subscribeRuntimeEvents(q7.optional().parse(z))},async sendBestEffort(z){let U=G8.parse(z);return n4.parse(await X().sendBestEffort(U))},async sendBestEffortAsAttachedClient(z,U){let B=G8.parse(U);return n4.parse(await X().sendBestEffort({...B,rawMessage:iF(B.rawMessage,nF(z.clientId))}))},async sendDurable(z){let U=G8.parse(z);return i4.parse(await X().sendDurable(U))},async sendDurableAsAttachedClient(z,U){let B=G8.parse(U);return i4.parse(await X().sendDurable({...B,rawMessage:iF(B.rawMessage,nF(z.clientId))}))},listInbox:H,subscribeInbox(z){return n50(()=>H({limit:100,unreadOnly:!1}),{pollIntervalMs:Z,initialAfterCreatedAt:z?.afterCreatedAt??0})},async listPeers(){return(await Q().listPeers()).map((z)=>q4.parse(z))},async listNearbyPeers(){return(await Q().listNearbyPeers()).map((z)=>{let U=z,{tlsFingerprint:B,...F}=z;return _6.parse({...F,...U.tlsCaFingerprint===void 0&&typeof B==="string"?{tlsCaFingerprint:B}:{}})})},subscribePeers(){return n50(async()=>(await Q().listPeers()).map((z)=>q4.parse(z)),{pollIntervalMs:Z,getVersionKey:(z)=>[z.updatedAt,z.endpointRevision,z.identityState,z.transportState,z.lastSeenAt??"",z.transportPublicKey,z.displayNameSnapshot??""].join("|")})},async getRuntimeStatus(){return W()},async getModelSnapshot(){if(!$.getModelSnapshot)throw Error("Model snapshot unavailable");return $.getModelSnapshot()},async getModelSnapshotAsAttachedClient(z){if(!$.getModelSnapshotAsAttachedClient)throw Error("Attached model snapshot unavailable");return $.getModelSnapshotAsAttachedClient(z)},async refreshModelSnapshot(z){if(!$.refreshModelSnapshot)throw Error("Model refresh unavailable");return $.refreshModelSnapshot(z)},async refreshModelSnapshotAsAttachedClient(z,U){if(!$.refreshModelSnapshotAsAttachedClient)throw Error("Attached model refresh unavailable");return $.refreshModelSnapshotAsAttachedClient(z,U)},async setCurrentModel(z){if(!$.setCurrentModel)throw Error("Model selection unavailable");return $.setCurrentModel(z)},async getSessionCredentialOverlayState(){if(!$.getSessionCredentialOverlayState)return{providers:[]};return $.getSessionCredentialOverlayState()},async setSessionCredentialOverlay(z){if(!$.setSessionCredentialOverlay)throw Error("Session credential overlay unavailable");return $.setSessionCredentialOverlay(z)},async clearSessionCredentialOverlay(){if(!$.clearSessionCredentialOverlay)throw Error("Session credential overlay unavailable");return $.clearSessionCredentialOverlay()},async startAutonomousLoop(z){if(!$.startAutonomousLoop)throw Error("Autonomous loop start unavailable");return f8.parse(await $.startAutonomousLoop(z))},async stopAutonomousLoop(){if(!$.stopAutonomousLoop)throw Error("Autonomous loop stop unavailable");return f8.parse(await $.stopAutonomousLoop())},async getRuntimeBootstrap(){return u8.parse(await Y().getRuntimeBootstrap())},async listPendingPairRequests(){return(await G().listPendingPairRequests()).map((z)=>M6.parse(z))},async respondToPairRequest(z){return P6.parse(await G().respondToPairRequest(_4.parse(z)))},async createInvite(z){return s4.parse(await Q().createInvite(o4.parse(z)))},async listPendingInvites(){return(await Q().listPendingInvites()).map((z)=>E4.parse(z))},async acceptInviteToken(z){return e4.parse(await Q().acceptInviteToken(t4.parse(z)))},async cancelInvite(z){return o6.parse(await Q().cancelInvite(i6.parse(z)))},async invitePeer(z){return n6.parse(await Q().invitePeer(r4.parse(z)))},async acceptInvite(z){return V1.parse(await G().acceptInvite(A4.parse(z)))},async directPair(z){return j6.parse(await G().directPair(U9.parse(z)))},async revokePeer(z){return T6.parse(await V().revokePeer(M4.parse(z)))},async repairPeer(z){return s6.parse(await Q().repairPeer($6.parse(z)))},async appendSessionMessages(z,U){K().addConversationMessages(z,U)},async markSessionCompleted(z){K().markCompleted(z)},async replaceSessionMessages(z,U){K().replaceConversationMessages(z,U)}};function K(){if(!$.sessionHistory)throw Error("Session history writer unavailable on this daemon");return $.sessionHistory}}var Dg=E(()=>{b0();Xg()});function cP($){let{server:Z}=$,J=()=>{let Y=Z.ariaPairControl;if(!Y)throw Error("Runtime admin surface unavailable");return Y},X=()=>{let Y=Z.ariaNetworkAdminControl;if(!Y)throw Error("Runtime admin surface unavailable");return Y};return{async listPendingPairRequests(){return(await J().listPendingPairRequests()).map((Y)=>M6.parse(Y))},async respondToPairRequest(Y){return P6.parse(await J().respondToPairRequest(_4.parse(Y)))},async directPair(Y){return j6.parse(await J().directPair(U9.parse(Y)))},async revokePeer(Y){return T6.parse(await X().revokePeer(M4.parse(Y)))}}}var Og=E(()=>{b0()});function Ng($,Z,J){let X=$.readRuntimeBootstrapRecord(Z);if(!X)return 1;return X.bootstrapRevision+1}function i50($){let Z=$.networkManager.getConfig?.()??null,J=kF({nodeId:$.nodeId,runtimeId:$.runtimeId,ownerGeneration:$.ownerGeneration,controlPort:$.controlPort,caFingerprint:$.caFingerprint,caCertPem:$.caCertPem,networkManager:$.networkManager,networkConfig:Z,displayNameSnapshot:$.displayNameSnapshot,controlHost:$.controlHost,bootstrapRevision:Ng($.nodeStore,$.nodeId,$.ownerGeneration),phase:$.phase});return $.nodeStore.writeRuntimeBootstrapRecord(J)}var Lg=E(()=>{XP();O6()});import*as Ag from"path";import*as s50 from"fs/promises";import{randomUUID as o50}from"crypto";function tf0($,Z,J,X){let Y=new k4($),Q=async()=>!1;function G(V){let H={...Z,...V,maxTurns:null,onApprovalNeeded:Q,stateDir:J};if(X){let K=typeof H.activeQuestId==="string"?H.activeQuestId.trim():"",z=K.length>0?X.ensureMemoriaSessionId(K):void 0;if(z){try{X.session.observer?.setSessionId(z)}catch(U){console.warn("[runtime-autonomous-loop] Observer session binding failed (non-critical):",U?.message)}if(X.session.observationEngine)H.observationEngine=X.session.observationEngine,H.observationSessionId=z,H.originalSystemPrompt=X.session.originalSystemPrompt}}return H}return{stream(V,W){return Y.stream(V,G(W))},async resume(V,W){return Y.resume(V,G(W))}}}class qg{options;started=!1;starting=!1;stopController=null;bootstrapAbortController=null;startPromise=null;loopPromise=null;session=null;releaseMailbox=null;lastWakeTickAt=null;lastCheckpointResult="never";currentWakeTrigger=null;constructor($){this.options=$}summarizeSafetyPolicy(){return{...this.options.safetyPolicy?.allowedToolCategories?{allowedToolCategories:[...this.options.safetyPolicy.allowedToolCategories]}:{},...this.options.safetyPolicy?.allowedShellCommands?{allowedShellCommands:[...this.options.safetyPolicy.allowedShellCommands]}:{},...typeof this.options.safetyPolicy?.maxWriteOpsPerMinute==="number"?{maxWriteOpsPerMinute:this.options.safetyPolicy.maxWriteOpsPerMinute}:{},...typeof this.options.safetyPolicy?.maxGitPushesPerHour==="number"?{maxGitPushesPerHour:this.options.safetyPolicy.maxGitPushesPerHour}:{}}}getStatusSummary($){return{status:this.started||this.starting||this.startPromise?"running":"stopped",intervalMs:this.options.intervalMs??null,lastWakeTickAt:this.lastWakeTickAt,lastCheckpointResult:this.lastCheckpointResult,safetyPolicySummary:this.summarizeSafetyPolicy(),ownerClientKind:$}}async start(){if(this.started)return;if(this.startPromise){await this.startPromise;return}this.starting=!0,this.bootstrapAbortController=new AbortController;let $=this.options.signal?AbortSignal.any([this.options.signal,this.bootstrapAbortController.signal]):this.bootstrapAbortController.signal;this.startPromise=(async()=>{let{ariaHome:Z,arionName:J,runtimeControl:X,router:Y,memoriaFactory:Q,runSessionConfig:G,mcpServers:V,authResolver:W,intervalMs:H,safetyPolicy:K,nodeStore:z}=this.options,U=new x1,B=X.networkManager,F={verificationConfig:{freshnessGuard:U,replayGuard:U},...X.nodeId?{localInboxAddress:{kind:"node",nodeId:X.nodeId}}:{},commitIngressReceipt:z?(O,L)=>{let{resolvedNodeId:q,resolvedPeerFingerprint:A}=L;if(!q)throw Error("[runtime-autonomous-loop] Accepted ingress is missing resolvedNodeId");if(!A)throw Error("[runtime-autonomous-loop] Accepted ingress is missing resolvedPeerFingerprint");z.commitIngressReceipt({messageId:String(O.id),senderNodeId:q,senderFingerprint:f0.parse(A),runtimeId:X.runtimeId})}:void 0,activateVerifiedPeer:typeof B.activatePendingPeer==="function"?(O)=>{B.activatePendingPeer?.(G0.parse(O))}:void 0,revocationStore:X.revocationStore,collectiveMemory:X.networkCoordinator?.collectiveMemory},D=await OZ.create({arionName:J,config:G,storagePath:Z,router:Y,memoriaFactory:Q,abortSignal:$,initialTask:"Autonomous daemon wake loop",mcpServers:V,authResolver:W,networkManager:X.networkManager,runtimeId:X.runtimeId,nodeId:X.nodeId,runtimeIngressAuthority:F});try{let O=D.memoria.storage,L=D.toRunOptions({maxTurns:null});if(X.networkCoordinator)L.networkIntelligence=X.networkCoordinator;let q=Ag.join(Z,"arions",J,"daemon");await s50.mkdir(q,{recursive:!0});let A=O?.getConnection?.()??null,N=typeof O?.withConnection==="function",_=N?B6.fromConnectionOwner(O)??(A?new B6(A):null):A?new B6(A):null,M=N?QJ.fromConnectionOwner(O)??(A?new QJ(A):null):A?new QJ(A):null,T=N?JJ.fromConnectionOwner(O)??(A?new JJ(A):null):A?new JJ(A):null;if(!_||!M||!T)throw Error(`Memoria durable stores unavailable for arion "${J}"`);try{for(let b of M.findRecoverable())M.fail(b.id,"Process crashed \u2014 recovered on runtime startup")}catch(b){console.warn(`[runtime-autonomous-loop] Delegation crash recovery failed (non-critical): ${b}`)}let k=new i_,R=new o_,a=new s_(Ag.join(q,"audit.jsonl")),o=D.getRuntimeOutbox();if(o)this.releaseMailbox=X.registerMailbox(o);let{nodeId:u,networkManager:w}=X;if(w.addMessageListener)w.addMessageListener(()=>{return this.currentWakeTrigger?.(),!1});if(o&&u){let b=o;D.errorHandler.setBroadcaster({broadcast(v){try{for(let c of B?.listPeers?.()??[])if(c.status==="active"){let C=c.nodeId;if(!C)continue;let f={id:`msg-${o50()}`,version:1,sender:{id:u,name:J,type:"leader"},type:v.type,content:JSON.stringify(v.payload),recipient:{id:C,name:c.name},metadata:{errorBroadcast:!0},priority:0,timestamp:Date.now()};b.sendBestEffort(f)}}catch{}}})}let m=new Map,I=(b)=>{let v=b.trim();if(!v)return;let c=m.get(v);if(c)return c;let C=o50();try{D.memoria.session(C)}catch(f){console.warn("[runtime-autonomous-loop] Memoria session start failed (non-critical):",f?.message)}return m.set(v,C),C},S=new AbortController,j=AbortSignal.any([$,S.signal]);this.stopController=S,this.session=D,this.loopPromise=uy({arionName:J,runtimeId:X.runtimeId,localNodeId:u,stateDir:q,ariaDir:Z,intervalMs:H??60000,questStore:_,createRunner:()=>tf0(Y,L,q,{session:D,ensureMemoriaSessionId:I}),buildSystemPrompt:()=>D.systemPrompt,signal:j,eventQueue:T,stuckDetector:k,correctionLadder:R,safetyPolicy:K,auditLog:a,mailbox:D.mailbox,messageStore:D.messageStore,freshnessGuard:F.verificationConfig?.freshnessGuard,replayGuard:F.verificationConfig?.replayGuard,commitIngressReceipt:F.commitIngressReceipt,activateVerifiedPeer:F.activateVerifiedPeer,delegationExecutor:D.remoteDelegationSettlement,peerKeyRegistry:{get(b){return B.getAllPeerSigningKeysByPrincipal?.()?.get(b)},get size(){return B.getAllPeerSigningKeysByPrincipal?.()?.size??0}},revocationStore:F.revocationStore,collectiveMemory:F.collectiveMemory,recoverCrashedSessions:X.server.server.ariaRecoverCrashedSessions?({signal:b})=>X.server.server.ariaRecoverCrashedSessions?.(b):void 0,onWakeTick:(b)=>{this.lastWakeTickAt=b},onWakeReady:(b)=>{this.currentWakeTrigger=b},onCheckpointWriteResult:(b)=>{this.lastCheckpointResult=b},onQuestPostRun:async({quest:b,task:v,response:c,messages:C,signal:f,runReflection:g})=>{let l=m.get(b.id);try{await wW(D,{task:v,arionName:J,config:G,storagePath:Z,router:Y,memoriaFactory:Q,abortSignal:f,mcpServers:V,authResolver:W},c,l,{runReflection:g,runDeepConsolidation:g,messages:C})}finally{if(l)m.delete(b.id)}}}).catch((b)=>{this.lastCheckpointResult="error";let v=b instanceof Error?b.message:String(b);if(v.includes("Daemon lock already held")){P.warn(`[runtime-autonomous-loop] Skipping autonomous loop for "${J}": ${v}`);return}throw P.error(`[runtime-autonomous-loop] Fatal wake-loop failure for "${J}": ${v}`),b}),this.started=!0}catch(O){throw this.releaseMailbox?.(),this.releaseMailbox=null,this.stopController?.abort(),this.stopController=null,this.loopPromise=null,await D.close(),this.session=null,O}finally{if(this.starting=!1,!this.started)this.bootstrapAbortController=null,this.startPromise=null}})(),await this.startPromise}async stop(){if(!this.started&&!this.starting&&!this.startPromise)return;this.bootstrapAbortController?.abort(),this.stopController?.abort();try{await this.startPromise}catch{}let $=this.loopPromise,Z=this.session,J=this.releaseMailbox;this.started=!1,this.starting=!1,this.bootstrapAbortController=null,this.startPromise=null,this.stopController=null,this.loopPromise=null,this.session=null,this.releaseMailbox=null;try{await $}catch{}finally{J?.(),await Z?.close()}}}var r50=E(()=>{V8();a3();b0();S0()});var t50=()=>{};var e50=E(()=>{t50();V_();PB();r_();H_();Q_()});function $20($={}){return W_($)}var Z20=E(()=>{e50()});import*as jJ from"fs";import*as $1 from"path";import{randomBytes as J20,randomUUID as ef0}from"crypto";function X20($){let Z=x0.safeParse($);return Z.success?Z.data:void 0}function G20($){if($y0.has($))return!0;return $.toLowerCase().endsWith(".localhost")}function Y20($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid coordination URL: ${$}`)}let J=Z.hostname.toLowerCase();if(Z.protocol==="https:")return Z;if(Z.protocol==="http:"&&G20(J))return Z;throw Error(`Insecure coordination URL "${$}". Use https:// (http:// allowed only for localhost).`)}function Zy0($){let{startTunnel:Z,stopTunnel:J,heartbeat:X,applyPeerRepair:Y,activeTunnelCount:Q}=$;if(typeof Z!=="function"||typeof J!=="function"||typeof X!=="function"||typeof Y!=="function"||typeof Q!=="number")throw Error("[node-runtime] Peer discovery requires startTunnel, stopTunnel, heartbeat, applyPeerRepair, and activeTunnelCount on the runtime network manager.");return{startTunnel:Z.bind($),stopTunnel:J.bind($),heartbeat:X.bind($),applyPeerRepair:Y.bind($),activeTunnelCount:Q}}function Jy0($){if($.port)return Number.parseInt($.port,10);return $.protocol==="https:"?443:80}function _g($){if(typeof $!=="string")return;let Z=$.trim();if(!Z)return;return Z.replace(/^\[|\]$/g,"").toLowerCase()}function Xy0($,Z){let J=$1.resolve($1.join($,"network","trusted-cas")),X=$1.resolve($1.join(J,`${Z.trim().toLowerCase()}.pem`));if(!X.startsWith(`${J}${$1.sep}`))throw Error("Trusted CA path escapes trusted-cas directory");return X}function Yy0($,Z){if(!Z)return;try{return jJ.readFileSync(Xy0($,Z),"utf8")}catch{return}}function Qy0($){if($.coordinationUrl.protocol!=="https:")return;let Z=_g($.coordinationUrl.hostname),J=Jy0($.coordinationUrl),X=_g($.localExternalAddress);if(J===$.localBoundPort&&Z&&(G20(Z)||X!==void 0&&Z===X))return{coordinationCaCert:$.localCaCert,coordinationTlsIdentity:$.nodeId};if(!Z)return;let Q=new RP({ariaHome:$.ariaHome}).resolveBindingByControlEndpoint({host:Z,port:J});if(!Q||Q==="ambiguous")return;let G=Yy0($.ariaHome,Q.controlTlsCaFingerprint);if(!G)return;return{coordinationCaCert:G,coordinationTlsIdentity:Q.principalFingerprint}}function Gy0($){return{displayNameSnapshot:$.displayNameSnapshot,nodeId:G0.parse($.nodeId),host:$.host,port:$.port,principalFingerprint:f0.parse($.fingerprint),version:$.version,...$.tlsCaFingerprint?{tlsCaFingerprint:$.tlsCaFingerprint}:{},...$.transport?{transport:$.transport}:{},...$.status?{status:$.status}:{}}}function Eg($){if(!$.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='messages'").get())throw new rF("legacy messages schema requires hard reset: missing messages table");let J=new Set($.prepare("PRAGMA table_info(messages)").all().map((Q)=>Q.name)),X=["inbox_address_kind","inbox_address_id"].filter((Q)=>!J.has(Q));if(X.length>0)throw new rF(`legacy messages schema requires hard reset: missing columns: ${X.join(", ")}`);if($.prepare("SELECT COUNT(*) AS count FROM messages WHERE inbox_address_kind IS NULL OR inbox_address_id IS NULL").get().count>0)throw new rF("legacy messages schema requires hard reset: null inbox address rows")}class tF{options;nodeId;runtimeIdValue;started=!1;runtimeControl=null;networkStateStore;relayPollTimer;stunClient;discoveryService;mdnsDiscovery;privateLanDiscovery;nearbyPeerDiscovery;nodeStore;ownsNetworkManager=!1;ownsNodeStore=!1;bootstrapOwnerGeneration=1;unsubscribeRuntimeIngressListener;unsubscribeTransportListener;localControlSocket;sessionHistoryWriter;autonomousLoop;autonomousLoopStartPromise=null;autonomousLoopBootstrap;storageDiagnostics;modelDiscovery;discoveredModels=[];currentModelName;modelRefreshInFlightCount=0;modelLastRefreshAt;daemonSessionCredentialOverlay=null;daemonSessionDiscovery=null;cachedArionManager=null;publishRuntimeEventFn=null;daemonSessionModelCatalog=null;resolvedMemoriaFactory;ownsResolvedMemoriaFactory=!1;networkingReadyResolve;networkingReadyReject;networkingReady;constructor($){this.options=$,this.nodeId=$.nodeId;let Z=$.networkManager?.getLocalDisplayNameSnapshot?.()?.trim()||$.arionName;this.runtimeIdValue=k8.parse(`${Z}~${J20(2).toString("hex")}`),this.autonomousLoopBootstrap={memoriaFactory:$.memoriaFactory,router:$.router,authResolver:$.authResolver,runSessionConfig:$.runSessionConfig,mcpServers:$.mcpServers,daemonSafetyPolicy:$.daemonSafetyPolicy,autonomousIntervalMs:$.autonomousIntervalMs},this.resolvedMemoriaFactory=$.memoriaFactory,this.modelDiscovery=new _1({authResolver:$.authResolver,cacheDir:$.ariaHome}),this.networkingReady=new Promise((J,X)=>{this.networkingReadyResolve=J,this.networkingReadyReject=X}),this.networkingReady.catch(()=>{})}get runtimeId(){return this.runtimeIdValue}resolvedBootstrapOwnerGeneration(){return this.options.ownerGenerationHint??this.options.ownerGeneration??1}currentStorageDiagnostics(){return this.storageDiagnostics}nextBootstrapRevision($){if(!this.nodeStore)return 0;return Ng(this.nodeStore,this.nodeId,$)}resolveBootstrapControlHost($){let Z=($??this.runtimeControl?.networkManager)?.getConfig?.();return _g(Z?.externalEndpoint?.address)??"127.0.0.1"}isRecoverableDaemonBindError($){let Z=$?.code;return Z==="EADDRINUSE"||Z==="EADDRNOTAVAIL"||Z==="EAFNOSUPPORT"}daemonBindCandidates($){let Z=[],J=(X,Y)=>{if(!Z.some((Q)=>Q.host===X&&Q.port===Y))Z.push({host:X,port:Y})};if(J("0.0.0.0",$),$!==0)J("0.0.0.0",0);if(J("127.0.0.1",$),$!==0)J("127.0.0.1",0);return Z}publishBootstrapPhase($,Z){if(!this.nodeStore)return;let J=this.nextBootstrapRevision(Z.ownerGeneration),X=this.nodeStore.writeRuntimeBootstrapRecord(kF({nodeId:this.nodeId,runtimeId:Z.runtimeId,arionName:this.options.arionName,ownerGeneration:Z.ownerGeneration,bootstrapRevision:J,phase:$,controlPort:Z.controlPort,controlHost:Z.controlHost??this.resolveBootstrapControlHost(Z.networkManager),caFingerprint:d$.parse(Z.certs.fingerprint),caCertPem:Z.certs.caCert,networkManager:Z.networkManager,displayNameSnapshot:Z.displayNameSnapshot,publishedAt:new Date().toISOString(),degradedReason:Z.degradedReason,failedPhase:Z.failedPhase}));if(X.ownerGeneration!==Z.ownerGeneration||X.bootstrapRevision!==J)throw Error(`[node-runtime] Runtime bootstrap publication rejected for ${this.nodeId} at generation ${Z.ownerGeneration} revision ${J}`)}configureAutonomousLoop($){return this.autonomousLoopBootstrap={...this.autonomousLoopBootstrap,...$},this.autonomousLoopBootstrap}summarizeAutonomousLoopSafetyPolicy(){return{...this.autonomousLoopBootstrap.daemonSafetyPolicy?.allowedToolCategories?{allowedToolCategories:[...this.autonomousLoopBootstrap.daemonSafetyPolicy.allowedToolCategories]}:{},...this.autonomousLoopBootstrap.daemonSafetyPolicy?.allowedShellCommands?{allowedShellCommands:[...this.autonomousLoopBootstrap.daemonSafetyPolicy.allowedShellCommands]}:{},...typeof this.autonomousLoopBootstrap.daemonSafetyPolicy?.maxWriteOpsPerMinute==="number"?{maxWriteOpsPerMinute:this.autonomousLoopBootstrap.daemonSafetyPolicy.maxWriteOpsPerMinute}:{},...typeof this.autonomousLoopBootstrap.daemonSafetyPolicy?.maxGitPushesPerHour==="number"?{maxGitPushesPerHour:this.autonomousLoopBootstrap.daemonSafetyPolicy.maxGitPushesPerHour}:{}}}resolveDefaultModelName(){let $=this.options.runSessionConfig?.preferredTier;return ZZ($??"balanced")?.shortName}async getArionManager(){if(this.cachedArionManager)return this.cachedArionManager;let $=new T9(this.options.ariaHome);await $.initialize();let Z=await this.ensureMemoriaFactory();if(!Z)throw Error("Memoria factory unavailable for Arion manager access");let J=new R8($,Z);return await J.initialize(),this.cachedArionManager=J,J}async ensureMemoriaFactory(){if(this.resolvedMemoriaFactory)return this.resolvedMemoriaFactory;if(!this.options.router)return;let{MemoriaPool:$}=await Promise.resolve().then(() => (_H(),kZ0)),Z=new $(this.options.ariaHome,this.options.router);return this.resolvedMemoriaFactory=Z.toFactory(),this.ownsResolvedMemoriaFactory=!0,this.autonomousLoopBootstrap={...this.autonomousLoopBootstrap,memoriaFactory:this.resolvedMemoriaFactory},this.resolvedMemoriaFactory}createSessionOverlayState(){let $=this.daemonSessionCredentialOverlay;return{providers:$?Object.keys($.credentials).sort():[]}}buildCredentialOverlay($){if(($.providers?.length??0)>0&&($.credentials?.length??0)===0)throw Error("Provider-only overlay input must be resolved client-side into explicit credentials before sending to the daemon.");let Z={credentials:{}};for(let J of $.credentials??[]){let X=J.provider.trim().toLowerCase();if(!X||!J.apiKey?.trim())continue;Z.credentials[X]={provider:X,source:J.source??"config",credentialType:J.credentialType??"api_key",apiKey:J.apiKey.trim()}}return Z}async applySessionCredentialOverlay($){let Z=this.buildCredentialOverlay($);return this.daemonSessionCredentialOverlay=Z,this.daemonSessionDiscovery=null,this.daemonSessionModelCatalog=null,this.createSessionOverlayState()}clearSessionCredentialOverlayState(){return this.daemonSessionCredentialOverlay=null,this.daemonSessionDiscovery=null,this.daemonSessionModelCatalog=null,this.createSessionOverlayState()}providerStatuses($,Z,J=this.modelDiscovery){let X=J.getCachedProviderResults(),Y=new Set(j4(this.discoveredModels).map((Q)=>Q.provider));if(Y.size===0)for(let Q of j4())Y.add(Q.provider);for(let Q of Object.keys(X))Y.add(Q);return[...Y].sort().map((Q)=>{let G=X[Q];if(!G)return{provider:Q,status:$,...Z?{reason:Z}:{}};let V=G.success?$==="verified"?"verified":"cached":G.error?.includes("No API key")||G.error?.includes("No AWS region")?"requires_auth":G.error?.includes("Cannot find package")?"unavailable":"error";return{provider:Q,status:V,...G.error&&!G.success?{reason:G.error}:{},lastCheckedAt:G.discoveredAt}})}async loadCurrentModelName(){if(this.currentModelName)return this.currentModelName;let $=this.resolveDefaultModelName();try{let X=(await(await this.getArionManager()).get(this.options.arionName))?.preferredModel?.trim();if(X)return this.currentModelName=J6(X)?.shortName??X,this.currentModelName}catch{}return this.currentModelName=$,$}async persistCurrentModel($){let Z=await this.getArionManager();if(typeof Z.setPreferredModel==="function")await Z.setPreferredModel(this.options.arionName,$.shortName);let J=B5();h10({...J,preferredTier:$.tier,activeArion:this.options.arionName})}async buildModelSnapshot($="cached",Z,J){let X=await this.loadCurrentModelName(),Y=J?.models??this.discoveredModels,Q=J?.lastRefreshAt??this.modelLastRefreshAt,G=J?.discovery??this.modelDiscovery,V=Y.length>0;return{models:j4(Y),...X?{currentModel:X}:{},status:{nodeId:this.nodeId,runtimeId:this.runtimeId,port:this.runtimeControl?.port??0,attachedClients:0,...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()},...Q?{lastRefreshAt:Q}:{},stale:!V,refreshInFlight:this.modelRefreshInFlightCount>0,providerStatuses:this.providerStatuses($,Z,G)}}publishModelSnapshotUpdated($,Z){$("model_snapshot_updated",{currentModel:Z.currentModel,modelCount:Z.models.length,lastRefreshAt:Z.lastRefreshAt,stale:Z.stale,refreshInFlight:Z.refreshInFlight,providerStatuses:Z.providerStatuses})}resolveOverlayAuthResolver($,Z){let J=this.daemonSessionCredentialOverlay??void 0,X=Z?{credentials:{...J?.credentials??{},...Z.credentials}}:J,Y=this.options.authResolver;if(!X||!Y)return Y;return XV(Y,X)}createOverlayModelDiscovery($,Z){if(Z||!this.daemonSessionCredentialOverlay)return new _1({authResolver:this.resolveOverlayAuthResolver(void 0,Z),cacheDir:this.options.ariaHome});let J=this.daemonSessionDiscovery;if(!J)J=new _1({authResolver:this.resolveOverlayAuthResolver(),cacheDir:this.options.ariaHome}),this.daemonSessionDiscovery=J;return J}async doRefreshModelSnapshot($,Z,J){this.modelRefreshInFlightCount++;let X=J?this.buildCredentialOverlay(J):void 0,Y=Z?this.createOverlayModelDiscovery(void 0,X):X?new _1({authResolver:this.resolveOverlayAuthResolver(void 0,X),cacheDir:this.options.ariaHome}):this.modelDiscovery,Q=$==="force"?"verified":"cached";try{let G=$==="force"?await Y.refresh(!0):await Y.getCachedOrRefresh(),V=new Date().toISOString();if(Z)return this.daemonSessionModelCatalog={models:G,lastRefreshAt:V},this.buildModelSnapshot(Q,void 0,{models:G,lastRefreshAt:V,discovery:Y});this.discoveredModels=G,this.modelLastRefreshAt=V;let W=await this.buildModelSnapshot(Q,void 0,{discovery:Y});if(this.publishRuntimeEventFn)this.publishModelSnapshotUpdated(this.publishRuntimeEventFn,W);return W}catch(G){let V=Y.getCachedModels();if(Z){let W=this.daemonSessionModelCatalog,H=V.length>0?V:W?.models??[],K=W?.lastRefreshAt;return this.buildModelSnapshot(H.length>0?"cached":"error",G instanceof Error?G.message:String(G),{models:H,lastRefreshAt:K,discovery:Y})}return this.discoveredModels=V,this.buildModelSnapshot(this.discoveredModels.length>0?"cached":"error",G instanceof Error?G.message:String(G),{discovery:Y})}finally{this.modelRefreshInFlightCount--}}async refreshModelSnapshot($,Z){return this.doRefreshModelSnapshot("cached",$,Z)}async forceRefreshModelSnapshot($,Z){return this.doRefreshModelSnapshot("force",$,Z)}async setCurrentModelSnapshot($){let Z=$.trim();if(!Z)throw Error("Model name is required");let J=await this.refreshModelSnapshot(!1),X=J6(Z,J.models);if(!X)J=await this.forceRefreshModelSnapshot(!1),X=J6(Z,J.models);if(!X)throw Error(`Unknown model: ${$}`);return await this.persistCurrentModel(X),this.currentModelName=X.shortName,{...J,currentModel:X.shortName,providerStatuses:this.providerStatuses("verified")}}getAutonomousLoopStatus(){if(this.autonomousLoop)return this.autonomousLoop.getStatusSummary(this.options.ownerClientKind??null);return{status:"stopped",intervalMs:this.autonomousLoopBootstrap.autonomousIntervalMs??null,lastWakeTickAt:null,lastCheckpointResult:"never",safetyPolicySummary:this.summarizeAutonomousLoopSafetyPolicy(),ownerClientKind:this.options.ownerClientKind??null}}async stopAutonomousLoop(){if(this.autonomousLoop)await this.autonomousLoop.stop(),this.autonomousLoop=void 0;this.autonomousLoopStartPromise=null}async startAutonomousLoop(){let $=this.autonomousLoopBootstrap.router,Z=this.autonomousLoopBootstrap.memoriaFactory??await this.ensureMemoriaFactory();if(!this.runtimeControl||!Z||!$)return;if(this.autonomousLoopStartPromise){await this.autonomousLoopStartPromise;return}if(!this.autonomousLoop)this.autonomousLoop=new qg({ariaHome:this.options.ariaHome,arionName:this.options.arionName,runtimeControl:this.runtimeControl,router:$,memoriaFactory:Z,runSessionConfig:this.autonomousLoopBootstrap.runSessionConfig??{activeArion:this.options.arionName},mcpServers:this.autonomousLoopBootstrap.mcpServers,authResolver:this.autonomousLoopBootstrap.authResolver,intervalMs:this.autonomousLoopBootstrap.autonomousIntervalMs,safetyPolicy:this.autonomousLoopBootstrap.daemonSafetyPolicy,signal:this.options.signal,nodeStore:this.nodeStore});this.autonomousLoopStartPromise=this.autonomousLoop.start().catch((J)=>{if(J instanceof Error&&J.kind==="StaleOwnerError"){let X=J;P.warn(`[node-runtime] Runtime superseded at generation ${X.claimedGeneration} (current: ${X.currentGeneration}). Shutting down immediately.`),this.shutdown().catch(()=>{});return}P.error(`[node-runtime] Autonomous loop failed to start for "${this.options.arionName}": ${J instanceof Error?J.message:String(J)}`)}),await this.autonomousLoopStartPromise}async start(){if(this.started&&this.runtimeControl)return;let{ariaHome:$,arionName:Z,signal:J,nodeId:X}=this.options,Y=this.options.memoriaFactory,Q=this.options.nodeStore??new M$({ariaHome:$});if(this.bootstrapOwnerGeneration=this.options.ownerGenerationHint??Math.max(Q.readRuntimeOwnerRecord(this.nodeId)?.ownerGeneration??0,Q.readRuntimeBootstrapRecord(this.nodeId)?.ownerGeneration??0)+1,!this.options.nodeStore)Q.close();this.nodeStore??=this.options.nodeStore??new M$({ariaHome:$,ownerGeneration:this.bootstrapOwnerGeneration}),this.ownsNodeStore=!this.options.nodeStore;let G=this.nodeStore,V=null,W;this.networkStateStore??=new Q20.NetworkStateStore({ariaHome:$});let H;try{H=this.networkStateStore.open(),this.networkStateStore.claimOwnerEpoch(this.bootstrapOwnerGeneration),this.storageDiagnostics={...this.storageDiagnostics??{},networkState:this.networkStateStore.getCapabilities()}}catch(Z0){if(Z0 instanceof Error&&Z0.kind==="StaleOwnerError")throw Z0;throw Error(`[node-runtime] Canonical network state store unavailable: ${Z0 instanceof Error?Z0.message:String(Z0)}`)}if(Y&&typeof Y.get==="function")try{let Z0=await Y.get(`arions/${Z}/memory.db`),H0=Z0.storage?.getCapabilities?.();if(H0)this.storageDiagnostics={...this.storageDiagnostics??{},memoria:H0};let B0=Z0.storage?.getConnection?.();if(B0)Eg(B0);let F0=(B0?new BZ(B0):null)??Z0.storage?.createMessageStore?.({validateSchema:Eg})??BZ.fromConnectionOwner(Z0.storage,{validateSchema:Eg});if(F0)V=F0,W=new x1}catch(Z0){if(Z0 instanceof rF)throw Error(`[node-runtime] Canonical runtime message store unavailable: ${Z0.message}`);P.debug(`[node-runtime] Runtime message store unavailable for ${Z}: ${Z0 instanceof Error?Z0.message:String(Z0)}`)}let K=this.options.networkManager;if(!K)try{let Z0=new TJ.PeerRegistry(H),H0=new TJ.NetworkManager($,Z,Z0);H0.setLocalNodeId(this.nodeId),await H0.initialize(),K=H0}catch(Z0){throw Error(`[node-runtime] NetworkManager unavailable: ${Z0 instanceof Error?Z0.message:String(Z0)}`)}if(!K)throw Error("[node-runtime] NetworkManager unavailable");let z=K,U=z.getConfig(),B=X20(U?.signingPublicKey),F=B?C9(B):null;if(!F)throw Error("[node-runtime] Runtime principal fingerprint unavailable");let D=this.nodeId,O=D,L=$M($,F);if(!L.serverCert||!L.serverKey)throw Error("TLS certificates unavailable \u2014 networking requires TLS for all peer communication.");P.debug(`[node-runtime] TLS CA fingerprint: ${L.fingerprint}`);let q=U?.coordinationUrl&&typeof U.publicKey==="string"&&B&&U.signingPrivateKey?Zy0(K):void 0,A=z.getLocalDisplayNameSnapshot?.()?.trim();if(!A)throw Error("[node-runtime] Runtime bootstrap display name unavailable");let N=this.runtimeIdValue,_=this.resolvedBootstrapOwnerGeneration(),M=this.options.silent??!1,T=this.options.port??0,k=async(Z0)=>await gP({port:Z0.port,host:Z0.host,basePath:$,arionName:this.options.arionName,nodeId:this.nodeId,networkManager:K,memoriaFactory:Y,router:this.options.router,authResolver:this.options.authResolver,enableCrashRecovery:!1,runtimeId:N,ownerGeneration:_,tls:{cert:L.serverCert,key:L.serverKey},silent:M}),R,a,o;for(let Z0 of this.daemonBindCandidates(T)){let H0;try{H0=await k(Z0),a=await H0.listen(),R=H0;break}catch(B0){if(o=B0,await H0?.server.close().catch(()=>{return}),!this.isRecoverableDaemonBindError(B0))throw B0;P.warn(`[node-runtime] daemon bind ${Z0.host}:${Z0.port} failed (${B0.code??"unknown"}); retrying`)}}if(!R||!a)throw o instanceof Error?o:Error(String(o));let u=R.server.ariaMessageStore;if(u)V=u,W??=new x1;let w=typeof a==="string"&&a.includes(":")?Number.parseInt(a.split(":").pop(),10):0;if(!w)throw Error("Server bound to port 0 \u2014 OS failed to assign a port");P.debug(`[node-runtime] HTTPS server listening on ${a}`);let m=R.server.ariaRevocationStore;if(!m)throw await R.server.close(),Error("[node-runtime] Canonical revocation authority unavailable");let I=_,S=(Z0,H0={})=>{this.publishBootstrapPhase(Z0,{controlPort:w,runtimeId:N,ownerGeneration:I,certs:L,networkManager:K,displayNameSnapshot:A,...H0})},j=()=>{let Z0=G.readRuntimeBootstrapRecord(this.nodeId);if(!Z0||Z0.runtimeId!==N||Z0.ownerGeneration!==I||!["control_ready","network_ready","mesh_ready"].includes(Z0.phase))return;S(Z0.phase)};if(B)R.server.ariaPeerSigningKeyStore?.set(this.nodeId,B,A);this.ownsNetworkManager=!this.options.networkManager;let b=new Set,v=this.publishRuntimeEventFn=(Z0,H0={})=>{let B0=G.appendRuntimeEvent({nodeId:this.nodeId,runtimeId:N,kind:Z0,payload:H0});for(let F0 of b)F0(B0);return B0},c=async function*(Z0){let H0=Z0?.afterRevision??0,B0=G.listRuntimeEvents().filter((D0)=>(D0.revision??0)>H0),F0,V0=(D0)=>{if((D0.revision??0)<=H0)return;B0.push(D0);let C0=F0;F0=void 0,C0?.()};b.add(V0);try{while(!0){if(B0.length>0){yield B0.shift();continue}await new Promise((D0)=>{F0=D0})}}finally{b.delete(V0)}},C=$20({receiptStore:G,localNodeId:this.nodeId,signingKey:typeof U?.signingPrivateKey==="string"?U.signingPrivateKey:void 0,onReceiptCommitted:(Z0)=>{let H0=Z0.status==="queued_for_route"?"durable_send_queued":Z0.status==="dispatching"?"durable_send_dispatching":Z0.status==="acked"?"durable_send_acked":Z0.status==="expired"?"durable_send_expired":null;if(!H0)return;v(H0,{messageId:Z0.messageId,senderNodeId:Z0.senderNodeId,recipientNodeId:Z0.recipientNodeId,transport:Z0.transport,status:Z0.status,deliveryLifecycleRevision:Z0.deliveryLifecycleRevision,updatedAt:Z0.updatedAt})},faultCheckpoint:typeof this.options.faultCheckpoint==="function"?(Z0,H0)=>this.options.faultCheckpoint?.(Z0,H0):void 0}),f=new Set,g=new Map,l=(Z0,H0)=>{if(!Z0)return;g.set(Z0,H0)},$0=(Z0)=>{if(!Z0)return;g.delete(Z0)},Y0=(Z0)=>{let H0=g.get(Z0);if(H0)return H0;let B0=K.getActiveTransports?.()?.find((F0)=>F0.nodeId===Z0);if(B0)return l(Z0,B0.transport),B0.transport;return},x=(Z0)=>{let{sender:H0,recipient:B0}=Z0;if(!H0?.name||!B0?.name||!H0.id||!B0.id)return;let F0=G0.safeParse(H0.id).data,V0=G0.safeParse(B0.id).data;if(!F0||!V0)return;let D0=Y0(F0);if(!D0)return;try{D0.sendPlaintext(Buffer.from(JSON.stringify({deliveryAck:{protocolVersion:1,messageId:String(Z0.id),senderNodeId:V0,recipientNodeId:F0,storedAt:Date.now()}})))}catch(C0){P.debug(`[node-runtime] delivery ack send failed for ${String(Z0.id)}: ${C0 instanceof Error?C0.message:String(C0)}`)}};{let Z0=K,H0=[],B0=!1,F0=(L0,P0,c0)=>{let z$=H0.findIndex((A0)=>A0.nodeId===c0);if(z$>=0){H0[z$]={displayNameSnapshot:L0,transport:P0,nodeId:c0};return}H0.push({displayNameSnapshot:L0,transport:P0,nodeId:c0})},V0=(L0,P0)=>{this.options.mailboxRef.current.registerTunnel(L0,P0)},D0=()=>{if(B0||!this.options.mailboxRef?.current)return;for(let{transport:L0,nodeId:P0}of H0)V0(P0,L0);H0.length=0,B0=!0},C0=(L0,P0,c0)=>{if(l(c0,P0),C.registerTunnel(c0,P0),this.options.mailboxRef?.current)D0(),V0(c0,P0);else F0(L0,P0,c0);this.options.onTransportEstablished?.(L0,P0)},_0=(L0,P0)=>{let c0=Z0.getActiveTransports?.()?.find((A0)=>A0.nodeId===P0);if(c0){if(l(P0,c0.transport),C.registerTunnel(G0.parse(P0),c0.transport),this.options.mailboxRef?.current)D0(),V0(P0,c0.transport);else F0(c0.displayNameSnapshot,c0.transport,P0);return}$0(P0),C.unregisterTunnel(G0.parse(P0)),this.options.mailboxRef?.current?.unregisterTunnel(G0.parse(P0));let z$=H0.findIndex((A0)=>A0.nodeId===P0);if(z$>=0)H0.splice(z$,1);this.options.onTransportTornDown?.(L0)};this.unsubscribeTransportListener=Z0.addTransportListener?.({onRouteBootstrapAvailable:(L0,P0,c0)=>{this.options.mailboxRef?.current?.registerTunnel(c0,P0)},onTransportUp:C0,onTransportDown:_0});for(let{displayNameSnapshot:L0,transport:P0,nodeId:c0}of Z0.getActiveTransports?.()??[])C0(L0,P0,c0);if(this.options.mailboxRef){let L0=setInterval(()=>{if(this.options.mailboxRef?.current)D0(),clearInterval(L0)},2000);if(L0.unref)L0.unref()}}let r=!(this.options.ownerClientKind==="local-api"&&this.options.runtimeLifecycle==="scoped"),J0,X0,n,K0=new Promise((Z0,H0)=>{X0=Z0,n=H0}),z0=()=>K0;setImmediate(()=>{this.startNetworkingSubsystems({enableBackgroundDiscovery:r,networkManager:K,networkStateDb:H,peerDiscoveryNetworkManager:q,certs:L,boundPort:w,localNodeId:D,localDisplayNameSnapshot:A,localSigningPublicKey:B,ariaHome:$,signal:J,runtimeId:N,republishCurrentBootstrapPhaseIfEndpointChanged:j,commitBootstrapPhase:S,resolveDiscoveryBarrier:X0,rejectDiscoveryBarrier:n})});let O0=[];if(O0.push(K.addDeliveryAckListener((Z0)=>{C.handleDeliveryAck(Z0)})),V)O0.push(K.addMessageListener((Z0)=>{let H0=Z0;if(!H0?.id||!H0.sender||!H0.content)return!1;if(!O)return P.debug("[node-runtime] Rejected ingress message: missing local recipient node id"),!1;let B0=V2({id:`runtime-${String(H0.id)}`,source:"arion",content:JSON.stringify({ariaMessage:H0})},V,{createQuest(){return null}},P,K.getAllPeerSigningKeysByPrincipal?.()??new Map,void 0,m,void 0,{verificationConfig:{expectedRecipientNodeId:O,...W?{freshnessGuard:W}:{}},localInboxAddress:{kind:"node",nodeId:O},commitIngressReceipt:(F0,V0)=>{let{resolvedNodeId:D0,resolvedPeerFingerprint:C0}=V0;if(!D0)throw Error("[node-runtime] accepted ingress is missing resolvedNodeId");if(!C0)throw Error("[node-runtime] accepted ingress is missing resolvedPeerFingerprint");G.commitIngressReceipt({messageId:String(H0.id),senderNodeId:G0.parse(D0),senderFingerprint:f0.parse(C0),runtimeId:N})},commitVerifiedPeerActivation:typeof K.activatePendingPeer==="function"?(F0)=>{if(!F0.resolvedNodeId)throw Error("[node-runtime] accepted ingress is missing resolvedNodeId for activation");K.activatePendingPeer?.(F0.resolvedNodeId)}:void 0,acknowledgeReceipt:x,faultCheckpoint:typeof this.options.faultCheckpoint==="function"?(F0,V0)=>this.options.faultCheckpoint?.(F0,V0):void 0});if(!B0)P.debug(`[node-runtime] Rejected remote ingress message ${String(H0.id)} sender=${String(H0.sender?.id??"unknown")} recipient=${String(H0.recipient?.id??"unknown")}`);return B0?!0:!1}));this.unsubscribeRuntimeIngressListener=()=>{for(let Z0 of O0.splice(0))Z0()};let R0=(Z0)=>{let H0=K;if(H0.getActiveTransports)for(let{transport:V0,nodeId:D0}of H0.getActiveTransports())Z0.registerTunnel(D0,V0);let B0;if(H0.addTransportListener)B0=H0.addTransportListener({onRouteBootstrapAvailable:(V0,D0,C0)=>{Z0.registerTunnel(C0,D0)},onTransportUp:(V0,D0,C0)=>{Z0.registerTunnel(C0,D0)},onTransportDown:(V0,D0)=>{let C0=H0.getActiveTransports?.()?.find((_0)=>_0.nodeId===D0);if(C0){Z0.registerTunnel(D0,C0.transport);return}Z0.unregisterTunnel(D0)}});let F0=Symbol("attachedMailbox");if(f.add(F0),this.options.mailboxRef)this.options.mailboxRef.current=Z0;return()=>{if(B0?.(),f.delete(F0),this.options.mailboxRef?.current===Z0)this.options.mailboxRef.current=null}};try{if(!R.server.ariaRuntimeOutbox)R.server.decorate("ariaRuntimeOutbox",C);else R.server.ariaRuntimeOutbox=C}catch{R.server.ariaRuntimeOutbox=C}S("starting");let I0="tls_bound";S("tls_bound");try{let Z0=cP({server:R.server}),H0=(A0)=>e$(A0),B0=new Map,F0=(A0)=>A0.state==="live"&&(!A0.leaseSocket||!A0.leaseSocket.destroyed&&A0.leaseSocket.writable),V0=(A0)=>A0!=="daemon-launcher",D0=()=>{let A0=Array.from(B0.values()).filter((s0)=>F0(s0)&&V0(s0.clientKind)),u0=new Set,U$=0;for(let s0 of A0){if(s0.pid!=null){if(u0.has(s0.pid))continue;u0.add(s0.pid)}U$++}return U$},C0=(A0)=>{let u0=B0.get(A0.clientId);if(!u0||u0.state!=="live")return!1;return u0.clientAuthTokenHash===H0(A0.clientAuthToken)},_0=async({clientId:A0})=>{let u0=Array.from(B0.entries()).filter(([,p$])=>F0(p$)).filter(([,p$])=>V0(p$.clientKind)),U$=new Map,s0=[];for(let p$ of u0){let c$=p$[1].pid;if(c$==null){s0.push(p$);continue}let z9=U$.get(c$);if(!z9||p$[1].attachedAt>z9[1].attachedAt)U$.set(c$,p$)}let V$=[...U$.values(),...s0],r8=B0.get(A0)?.pid;return V$.map(([p$,c$])=>({clientId:p$,clientKind:c$.clientKind,displayLabel:c$.displayName?`${c$.displayName} (pid ${c$.pid??"?"})`:c$.pid?`${Z} (pid ${c$.pid})`:c$.clientKind==="pipe"?"Attached pipe":"Attached terminal",self:p$===A0||r8!=null&&c$.pid!=null&&r8===c$.pid,attachedAt:c$.attachedAt,lastSeenAt:c$.lastSeenAt}))};try{let A0=$1.join(this.options.ariaHome,"arions",this.options.arionName,"history.db");if(jJ.existsSync(A0))this.sessionHistoryWriter=new Z6(A0)}catch(A0){P.warn("[NodeRuntime] Failed to open session history writer:",A0?.message)}let L0=mP({status:()=>({nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}),getModelSnapshot:async()=>{return{...await this.buildModelSnapshot("cached"),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},getModelSnapshotAsAttachedClient:async(A0)=>{let u0=this.daemonSessionModelCatalog,U$=u0?.models??this.discoveredModels,s0=u0?.lastRefreshAt??this.modelLastRefreshAt;return{...await this.buildModelSnapshot("cached",void 0,{models:U$,lastRefreshAt:s0}),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},refreshModelSnapshot:async(A0)=>{return{...await this.forceRefreshModelSnapshot(!1,A0),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},refreshModelSnapshotAsAttachedClient:async(A0,u0)=>{return{...await this.forceRefreshModelSnapshot(!0,u0),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},setCurrentModel:async(A0)=>{return{...await this.setCurrentModelSnapshot(A0),status:{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),...this.currentStorageDiagnostics()?{storage:this.currentStorageDiagnostics()}:{},autonomousLoop:this.getAutonomousLoopStatus()}}},getSessionCredentialOverlayState:async()=>{return this.createSessionOverlayState()},setSessionCredentialOverlay:async(A0)=>{return this.applySessionCredentialOverlay(A0)},clearSessionCredentialOverlay:async()=>{return this.clearSessionCredentialOverlayState()},submitRunAsAttachedClient:async(A0,u0)=>{let U$=R.server.ariaRunControl;if(!U$)throw Error("Runtime run control unavailable");let s0=this.daemonSessionCredentialOverlay??void 0,V$=await U$.submitRun(u0,{clientId:A0.clientId,...s0?{overlay:s0}:{}});return{runId:V$.status===200&&V$.body&&typeof V$.body.id==="string"?V$.body.id:`attached:${A0.clientId}:${Date.now()}`,async wait(){return V$.body}}},startAutonomousLoop:async(A0)=>{return this.configureAutonomousLoop({...typeof A0?.intervalMs==="number"?{autonomousIntervalMs:A0.intervalMs}:{},...A0?.safetyPolicy?{daemonSafetyPolicy:A0.safetyPolicy}:{}}),await this.startAutonomousLoop(),{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),autonomousLoop:this.getAutonomousLoopStatus()}},stopAutonomousLoop:async()=>{return await this.stopAutonomousLoop(),{nodeId:this.nodeId,runtimeId:N,port:w,attachedClients:D0(),autonomousLoop:this.getAutonomousLoopStatus()}},server:R.server,subscribeRuntimeEvents:c,sessionHistory:this.sessionHistoryWriter??void 0});try{if(!R.server.ariaRuntimeLocalControl)R.server.decorate("ariaRuntimeLocalControl",L0);else R.server.ariaRuntimeLocalControl=L0}catch{R.server.ariaRuntimeLocalControl=L0}KP(R.server,{authorizeAttachedClient:(A0,u0)=>{let U$=N4.safeParse(A0);if(!U$.success)return!1;return C0({clientId:U$.data,clientAuthToken:u0})}});try{if(!R.server.ariaAttachedClientControl)R.server.decorate("ariaAttachedClientControl",{listAttachedClients:_0,countAttachedClients:D0,authorizeAttachedClient:C0});else R.server.ariaAttachedClientControl={listAttachedClients:_0,countAttachedClients:D0,authorizeAttachedClient:C0}}catch{R.server.ariaAttachedClientControl={listAttachedClients:_0,countAttachedClients:D0,authorizeAttachedClient:C0}}let P0=()=>{let A0=R.server.ariaRuntimeMessageControl;if(!A0)throw Error("Runtime message control unavailable for local attach");return A0},c0=()=>{let A0=R.server.ariaPeerLocalControl;if(!A0)throw Error("Peer local control unavailable for local attach");return A0},z$=async()=>(this.nearbyPeerDiscovery?.getVisiblePeers()??[]).map(Gy0);try{let u0={...R.server.ariaPeerLocalControl??{},listNearbyPeers:async()=>z$()};if(!R.server.ariaPeerLocalControl)R.server.decorate("ariaPeerLocalControl",u0);else R.server.ariaPeerLocalControl=u0}catch{R.server.ariaPeerLocalControl={listNearbyPeers:async()=>z$()}}I0="control_ready",this.localControlSocket=await k10({socketPath:this.options.runtimeSocketPath??$1.join($,"node",`${this.nodeId}.sock`),localControl:L0,listInbox:async(A0)=>(await P0().listInbox({limit:A0?.limit??100,unreadOnly:A0?.unreadOnly??!1})).filter((u0)=>typeof A0?.cursor?.afterCreatedAt==="number"?u0.createdAt>=A0.cursor.afterCreatedAt:!0),listDirectClientInbox:async(A0,u0)=>{let U$=P0().listDirectClientInbox;if(!U$)throw Error("Direct client inbox not available");let s0=u0?.cursor?.afterCreatedAt,V$=await U$({clientId:A0.clientId,limit:u0?.limit??100,unreadOnly:u0?.unreadOnly??!1});return typeof s0==="number"?V$.filter((_$)=>_$.createdAt>=s0):V$},subscribeRuntimeEvents:c,listPeers:async()=>c0().listPeers(),listNearbyPeers:async()=>z$(),attachClient:async({clientKind:A0,pid:u0,displayName:U$})=>{let s0=N4.parse(u0?`client-pid-${u0}`:`client-${ef0()}`),V$=B0.get(s0),_$=J20(32).toString("hex"),r8=V$?.attachedAt??new Date().toISOString();return B0.set(s0,{clientKind:A0,attachedAt:r8,lastSeenAt:new Date().toISOString(),clientAuthTokenHash:H0(_$),state:"live",pid:u0,displayName:U$}),v("client_attached",{clientId:s0,clientKind:A0,ownership:V$?"reattached":"new"}),{clientId:s0,clientAuthToken:_$}},onClientLeaseSocket:(A0,u0)=>{let U$=B0.get(A0);if(U$)U$.leaseSocket=u0},listAttachedClients:async(A0)=>_0({clientId:A0.clientId}),authorizeAttachedClient:C0,detachClient:async({clientId:A0})=>{let u0=B0.get(A0);if(!u0)return{detached:!1};return u0.state="draining",R.server.ariaMessageStore?.deleteForInbox?.({kind:"client",clientId:A0}),B0.delete(A0),v("client_detached",{clientId:A0,clientKind:u0.clientKind}),{detached:!0}},onMessageReceived:(A0)=>{K.addMessageListener?.(()=>{return A0(),!1})},log:(A0,u0)=>{try{let U$=$1.join($,"logs");jJ.mkdirSync(U$,{recursive:!0});let s0=JSON.stringify({ts:new Date().toISOString(),level:A0,source:"local-control-socket",message:u0});jJ.appendFileSync($1.join(U$,"daemon-auth.jsonl"),s0+`
|
|
5427
5428
|
`)}catch{}}}),S("control_ready"),this.runtimeControl={nodeId:this.nodeId,runtimeId:N,displayNameSnapshot:A,port:w,networkManager:K,server:R,certs:L,runtimeOutbox:C,revocationStore:m,networkCoordinator:J0,localControl:L0,runtimeAdmin:Z0,waitForInitialDiscovery:z0,registerMailbox:R0};try{if(!R.server.ariaRuntimeBootstrapControl)R.server.decorate("ariaRuntimeBootstrapControl",{getRuntimeBootstrap:async()=>{let A0=G.readRuntimeBootstrapRecord(this.nodeId);if(!A0)throw Error("Runtime bootstrap unavailable");return A0}});else R.server.ariaRuntimeBootstrapControl={getRuntimeBootstrap:async()=>{let A0=G.readRuntimeBootstrapRecord(this.nodeId);if(!A0)throw Error("Runtime bootstrap unavailable");return A0}}}catch{R.server.ariaRuntimeBootstrapControl={getRuntimeBootstrap:async()=>{let A0=G.readRuntimeBootstrapRecord(this.nodeId);if(!A0)throw Error("Runtime bootstrap unavailable");return A0}}}I0="network_ready",S("network_ready"),this.started=!0}catch(Z0){try{S("degraded",{degradedReason:Z0 instanceof Error?Z0.message:String(Z0),failedPhase:I0})}catch{}if(this.relayPollTimer)clearTimeout(this.relayPollTimer);if(this.unsubscribeRuntimeIngressListener?.(),this.unsubscribeTransportListener?.(),this.stunClient?.stop(),this.discoveryService?.stop(),await this.nearbyPeerDiscovery?.stop(),this.unsubscribeRuntimeIngressListener=void 0,this.unsubscribeTransportListener=void 0,this.relayPollTimer=void 0,this.stunClient=void 0,this.discoveryService=void 0,this.mdnsDiscovery=void 0,this.privateLanDiscovery=void 0,this.nearbyPeerDiscovery=void 0,this.autonomousLoop){try{await this.autonomousLoop.stop()}catch{}this.autonomousLoop=void 0}this.autonomousLoopStartPromise=null;try{await this.localControlSocket?.close()}catch{}this.localControlSocket=void 0;try{await R?.server.close()}catch{}if(this.ownsNetworkManager)try{await K.shutdown?.()}catch{}if(this.ownsNodeStore){try{this.nodeStore?.close()}catch{}this.nodeStore=void 0,this.ownsNodeStore=!1}if(this.networkStateStore?.close(),this.networkStateStore=void 0,this.ownsResolvedMemoriaFactory)await this.resolvedMemoriaFactory?.closeAll?.().catch(()=>{}),this.resolvedMemoriaFactory=void 0,this.ownsResolvedMemoriaFactory=!1;throw this.ownsNetworkManager=!1,this.runtimeControl=null,this.started=!1,Z0}}async startNetworkingSubsystems($){let{enableBackgroundDiscovery:Z,networkManager:J,networkStateDb:X,peerDiscoveryNetworkManager:Y,certs:Q,boundPort:G,localNodeId:V,localDisplayNameSnapshot:W,localSigningPublicKey:H,ariaHome:K,signal:z,runtimeId:U,republishCurrentBootstrapPhaseIfEndpointChanged:B,commitBootstrapPhase:F,resolveDiscoveryBarrier:D,rejectDiscoveryBarrier:O}=$;P.info("[node-runtime] Starting networking subsystems (deferred)");try{let L,q=async()=>{};if(Z){L=new XF(X);let A=J;this.stunClient=new TJ.StunClient(void 0,60000),this.stunClient.start((T)=>{let k=A.getConfig();if(!k)return;if(k.externalEndpoint?.address!==T.address||k.externalEndpoint?.port!==T.port)P.debug(`[node-runtime] STUN endpoint changed: ${k.externalEndpoint?.address??"?"}:${k.externalEndpoint?.port??"?"} \u2192 ${T.address}:${T.port}`),A.updateExternalEndpoint?.(T.address,T.port),B(),this.discoveryService?.heartbeat().catch(()=>{}),A.resetRelayUpgradeBackoff?.()});let N=A.getConfig();if(N?.coordinationUrl){let T;try{T=Y20(N.coordinationUrl).toString()}catch(R){P.debug(`[node-runtime] Peer discovery disabled: ${R.message}`)}let k=X20(N.signingPublicKey);if(T&&typeof N.publicKey==="string"&&k&&N.signingPrivateKey&&Y){let R=new URL(T),a=Qy0({ariaHome:K,nodeId:this.nodeId,coordinationUrl:R,localCaCert:Q.caCert,localBoundPort:G,localExternalAddress:N.externalEndpoint?.address});if(R.protocol==="https:"&&!a)P.debug(`[node-runtime] Peer discovery disabled: no pinned coordination trust for ${T}`);else{let o=B$.parse(N.publicKey),u=f0.parse(e$(Buffer.from(k,"base64"))),w=(m,I)=>{let j=nW({operation:m,principal:{nodeId:V,principalFingerprint:u,transportPublicKey:o,bindingGeneration:1,displayNameSnapshot:W},target:{nodeId:V,principalFingerprint:u,transportPublicKey:o,bindingGeneration:1,displayNameSnapshot:W},namespace:"mesh",policyEpoch:1,payload:I});return lW(j,N.signingPrivateKey)};this.discoveryService=new TJ.PeerDiscoveryService({networkManager:Y,nodeId:this.nodeId,coordinationUrl:T,displayNameSnapshot:W,signal:z,pollIntervalMs:60000,signingPublicKey:k,signingPrivateKey:N.signingPrivateKey,envelopeSigner:w,...a??{},getLocalRegistrationState:()=>{let m=A.getConfig(),I=m?.externalEndpoint?.address?.trim(),S=m?.listenPort,j=typeof m?.endpointRevision==="number"?m.endpointRevision:void 0;if(!I||typeof S!=="number"||!Number.isInteger(S)||S<1)return;return{endpointHost:I,endpointPort:S,endpointRevision:typeof j==="number"&&Number.isInteger(j)&&j>=0?j:0}}}),this.discoveryService.on("peerJoined",(m)=>{P.debug(`[node-runtime] Peer discovered: ${m}`)}),this.discoveryService.on("peerLeft",(m)=>{P.debug(`[node-runtime] Peer left: ${m}`)}),this.discoveryService.on("error",(m)=>{P.debug(`[node-runtime] Peer discovery error: ${m.message}`)}),this.discoveryService.start(),q=()=>this.discoveryService.waitForInitialSync()}}}if(H){this.mdnsDiscovery=new rB({nodeId:this.nodeId,displayNameSnapshot:W,signingPublicKey:H,httpPort:G,signal:z,tlsCaFingerprint:d$.parse(Q.fingerprint)}),this.mdnsDiscovery.on("peerFound",(k)=>{P.debug(`[node-runtime] mDNS peer visible: ${k.displayNameSnapshot} (${k.host})`)}),this.mdnsDiscovery.on("peerLost",(k)=>{P.debug(`[node-runtime] mDNS peer gone: ${k}`)}),this.mdnsDiscovery.on("error",(k)=>{P.debug(`[node-runtime] mDNS disabled (multicast may be blocked): ${k.message}`)});let T=[this.mdnsDiscovery];if(Z)this.privateLanDiscovery=new tB({nodeId:this.nodeId,displayNameSnapshot:W,signingPublicKey:H,httpPort:G,signal:z,tlsCaFingerprint:d$.parse(Q.fingerprint),getAdvertisedHosts:()=>{let k=A.getConfig();return SY({externalHost:k?.externalEndpoint?.address})}}),this.privateLanDiscovery.on("peerFound",(k)=>{P.debug(`[node-runtime] private-LAN peer visible: ${k.displayNameSnapshot} (${k.host})`)}),this.privateLanDiscovery.on("peerLost",(k)=>{P.debug(`[node-runtime] private-LAN peer gone: ${k.nodeId} (${k.host})`)}),this.privateLanDiscovery.on("error",(k)=>{P.debug(`[node-runtime] private-LAN discovery degraded: ${k.message}`)}),T.push(this.privateLanDiscovery);this.nearbyPeerDiscovery=new eB(T),this.nearbyPeerDiscovery.start()}let _=A.getConfig(),M;if(_?.coordinationUrl)try{M=Y20(_.coordinationUrl).toString()}catch{M=void 0}if(M){let T=new Set,k=z,R=this.runtimeControl?.server?.server?.ariaPairControl;if(!R?.ingestRelayedPairRequest)throw Error("Relay pairing requires runtime-owned pair control ingestion");let a=R.ingestRelayedPairRequest,o=async()=>{if(k?.aborted)return;try{let u=A.getConfig(),w=u?.signingPrivateKey,m=x0.safeParse(u?.signingPublicKey).data;if(!w||!m)return;let I=Date.now().toString(),S=`relay-pending:${V}:${I}`,j="";try{let{createPrivateKey:C,sign:f}=await import("crypto"),g=C({key:Buffer.from(w,"base64"),format:"der",type:"pkcs8"});j=f(null,Buffer.from(S,"utf8"),g).toString("base64")}catch{return}let b=new URLSearchParams({targetNodeId:V,signingPublicKey:m,signature:j,timestamp:I}),v=await x6(`${M}/api/v1/pair/relay-pending?${b}`,{signal:AbortSignal.timeout(5000)});if(!v.ok)return;let c=zG.parse(await v.json());if(!c.requests?.length)return;for(let C of c.requests){if(T.has(C.id))continue;try{await a(C),T.add(C.id)}catch{T.delete(C.id)}}if(T.size>1e4)T.clear()}catch{}finally{if(!k?.aborted)this.relayPollTimer=setTimeout(()=>{o()},5000)}};o()}}else P.debug("[node-runtime] Skipping private-LAN, coordination, STUN, and relay discovery for scoped local-api runtime");if(P.info("[node-runtime] Networking subsystems started successfully (deferred)"),this.discoveryService)q().then(()=>{F("mesh_ready"),D()}).catch((A)=>{try{F("degraded",{degradedReason:A instanceof Error?A.message:String(A),failedPhase:"mesh_ready"})}catch{}D()});else F("mesh_ready"),D();this.networkingReadyResolve?.()}catch(L){P.error(`[node-runtime] Failed to start networking subsystems: ${L instanceof Error?L.message:String(L)}`);try{F("degraded",{degradedReason:L instanceof Error?L.message:String(L),failedPhase:"mesh_ready"})}catch{}D(),this.networkingReadyReject?.(L instanceof Error?L:Error(String(L)))}}async shutdown(){if(!this.started||!this.runtimeControl)return;if(this.publishBootstrapPhase("stopped",{controlPort:this.runtimeControl.port,runtimeId:this.runtimeControl.runtimeId,ownerGeneration:this.resolvedBootstrapOwnerGeneration(),certs:this.runtimeControl.certs,networkManager:this.runtimeControl.networkManager,displayNameSnapshot:this.runtimeControl.displayNameSnapshot}),this.relayPollTimer)clearTimeout(this.relayPollTimer);if(this.unsubscribeRuntimeIngressListener?.(),this.unsubscribeTransportListener?.(),this.stunClient?.stop(),this.discoveryService?.stop(),await this.nearbyPeerDiscovery?.stop(),this.autonomousLoop)await this.autonomousLoop.stop(),this.autonomousLoop=void 0;this.autonomousLoopStartPromise=null,await this.localControlSocket?.close(),this.localControlSocket=void 0;try{this.sessionHistoryWriter?.close()}catch{}this.sessionHistoryWriter=void 0;try{await this.runtimeControl.server.server.close()}catch{}if(this.ownsNetworkManager)try{await this.runtimeControl.networkManager.shutdown?.()}catch{}if(this.ownsNodeStore)this.nodeStore?.close();if(this.networkStateStore?.close(),this.ownsResolvedMemoriaFactory)await this.resolvedMemoriaFactory?.closeAll?.().catch(()=>{});this.runtimeControl=null,this.started=!1,this.relayPollTimer=void 0,this.stunClient=void 0,this.discoveryService=void 0,this.mdnsDiscovery=void 0,this.privateLanDiscovery=void 0,this.nearbyPeerDiscovery=void 0,this.networkStateStore=void 0,this.nodeStore=void 0,this.ownsNodeStore=!1,this.bootstrapOwnerGeneration=1,this.unsubscribeRuntimeIngressListener=void 0,this.unsubscribeTransportListener=void 0,this.resolvedMemoriaFactory=this.options.memoriaFactory,this.ownsResolvedMemoriaFactory=!1}control(){if(!this.runtimeControl)throw Error("[node-runtime] start() must be called before control()");return this.runtimeControl}}var TJ,Q20,$y0,rF;var Mg=E(()=>{wR();gZ0();R6();Z4();a3();b0();b0();W8();S0();XP();Fg();SH();Dg();_J();O6();MJ();Og();Lg();r50();Z20();TJ=U7(MH(),1),Q20=U7(Ix(),1),$y0=new Set(["localhost","127.0.0.1","::1"]);rF=class rF extends Error{}});class eF{nodeStore;ownsNodeStore;constructor($){if($.nodeStore){this.nodeStore=$.nodeStore,this.ownsNodeStore=!1;return}if(!$.ariaHome)throw Error("[runtime-event-journal] ariaHome or nodeStore is required");this.nodeStore=new M$({ariaHome:$.ariaHome}),this.ownsNodeStore=!0}close(){if(this.ownsNodeStore)this.nodeStore.close()}record($){return this.nodeStore.appendRuntimeEvent($)}list(){return this.nodeStore.listRuntimeEvents()}}var Pg=E(()=>{O6()});var H20={};A$(H20,{writeRuntimeOwnerRecord:()=>wg,runtimeSocketsDirectory:()=>_2,runtimeSocketPathForNodeId:()=>$Q,runtimeOwnerRecordPathForNodeId:()=>eY,resolveRuntimeRootDirectory:()=>z5,removeRuntimeOwnerRecord:()=>Rg,readRuntimeOwnerRecord:()=>Cg,listRuntimeOwnerRecords:()=>jH,getHostSupervisor:()=>JD,findRuntimeOwnerRecordByAriaHome:()=>TH,HostSupervisorSplitBrainError:()=>$D,HostSupervisor:()=>ZD});import{createHash as Lk$,randomUUID as Vy0}from"crypto";import{appendFileSync as Wy0,mkdirSync as Hy0}from"fs";import{homedir as Ky0}from"os";import{join as V20}from"path";import*as W20 from"v8";function zy0($){let Z=$.networkManager.getConfig?.();if(typeof Z?.signingPublicKey!=="string"||Z.signingPublicKey.trim().length===0)throw Error(`[host-supervisor] Runtime control missing durable principal TLS identity for ${$.nodeId}`);let J=x0.parse(Z.signingPublicKey.trim()),X=C9(J);if(!X)throw Error(`[host-supervisor] Runtime control missing durable principal TLS identity for ${$.nodeId}`);return f0.parse(X)}function Uy0($){let Z=$.nodeStore.readRuntimeBootstrapRecord($.nodeId);if(!Z)return;try{let J=aF(Z,`[host-supervisor] Runtime bootstrap for ${$.nodeId}`);return{host:J.controlEndpoint.host,port:J.controlEndpoint.port,tlsCaFingerprint:d$.parse(J.tls.caFingerprint),tlsServerIdentity:$7(J,`[host-supervisor] Runtime bootstrap for ${$.nodeId}`),protocolVersion:J.protocolVersion}}catch(J){P.warn(`[host-supervisor] Suppressing local control endpoint for ${$.nodeId}: ${J instanceof Error?J.message:String(J)}`);return}}function By0($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}async function Tg($,Z){let J=uP.get($)??Promise.resolve(),X,Y=new Promise((Q)=>{X=Q});uP.set($,J.then(()=>Y)),await J;try{return await Z()}finally{if(X?.(),uP.get($)===Y)uP.delete($)}}class ZD{runtimeRoot;heartbeatIntervalMs;staleClientTtlMs;runtimeFactory;isPidAlive;heartbeatCount=0;memoryLogPath=null;peakRssMb=0;isHeartbeatStale($){let Z=new Date($.lastHeartbeat).getTime();if(isNaN(Z))return!0;let J=this.now().getTime()-this.heartbeatIntervalMs*3;return Z<J}now;resolveNode;gcRanOnce=!1;constructor($={}){this.runtimeRoot=$.runtimeRoot??z5(),this.heartbeatIntervalMs=$.heartbeatIntervalMs??5000,this.staleClientTtlMs=$.staleClientTtlMs??Fy0,this.runtimeFactory=$.runtimeFactory??(async(Z)=>{let J=new tF(Z);return{runtimeId:J.runtimeId,start:()=>J.start(),configureAutonomousLoop:(X)=>J.configureAutonomousLoop(X),startAutonomousLoop:()=>J.startAutonomousLoop(),shutdown:()=>J.shutdown(),runtimeControl:()=>J.control()}}),this.isPidAlive=$.isPidAlive??By0,this.now=$.now??(()=>new Date),this.resolveNode=$.resolveNode??IF}runStartupGCOnce(){if(this.gcRanOnce)return;this.gcRanOnce=!0;try{let $=S10(this.runtimeRoot);if($.removedOwnerRecords>0||$.removedSockets>0)console.log(`[host-supervisor] Startup GC: removed ${$.removedOwnerRecords} stale owner records and ${$.removedSockets} orphaned sockets`)}catch{}}async attach($){this.runStartupGCOnce();let Z=s1($.ariaHome),J=await this.resolveNode({ariaHome:Z});return Tg(J.nodeId,async()=>{let X=new M$({ariaHome:Z}),Y=S2.get(J.nodeId);if(Y)return X.close(),this.attachClient(Y,$.clientKind,"reattached",$.runtimeLifecycle??"persistent");let Q=X.readRuntimeOwnerRecord(J.nodeId),G=X.readRuntimeBootstrapRecord(J.nodeId),V=Math.max(Q?.ownerGeneration??0,G?.ownerGeneration??0)+1;if(X.close(),Q){let K=this.isPidAlive(Q.runtimePid),z=this.isHeartbeatStale(Q);if(K&&!z)throw new $D(Q)}let W=new M$({ariaHome:Z,ownerGeneration:V}),H=new eF({nodeStore:W});if(Q)W.removeRuntimeOwnerRecord(Q.nodeId),ZQ(this.runtimeRoot,Q.nodeId),yx(this.runtimeRoot,Q.nodeId),H.record({nodeId:J.nodeId,runtimeId:Q.runtimeId,kind:"runtime_stale",payload:{staleRuntimePid:Q.runtimePid,staleRuntimeId:Q.runtimeId}});try{let K=$Q(this.runtimeRoot,J.nodeId),z=await this.runtimeFactory({ariaHome:Z,arionName:$.arionName,nodeId:J.nodeId,ownerGenerationHint:V,runtimeSocketPath:K,nodeStore:W,memoriaFactory:$.memoriaFactory,router:$.router,authResolver:$.authResolver,networkManager:$.networkManager,port:$.port,mailboxRef:$.mailboxRef,runSessionConfig:$.runSessionConfig,mcpServers:$.mcpServers,daemonSafetyPolicy:$.daemonSafetyPolicy,autonomousIntervalMs:$.autonomousIntervalMs,ownerClientKind:$.clientKind,runtimeLifecycle:$.runtimeLifecycle,silent:$.silent}),U=z.runtimeId?k8.parse(z.runtimeId):void 0;if(!U)throw Error("[host-supervisor] Runtime factory did not expose a stable runtimeId");let B=this.now().toISOString(),F=this.writeRuntimeOwnerRecord({schemaVersion:1,nodeId:J.nodeId,ariaHome:Z,runtimePid:process.pid,runtimeId:U,displayNameSnapshot:$.arionName,runtimeSocket:K,startedAt:B,lastHeartbeat:B,ownerGeneration:V});await z.start();let D=z.runtimeControl?.()??z.control?.();if(!D)throw Error("[host-supervisor] Runtime factory did not expose a control surface");if(D.runtimeId!==U)throw Error("[host-supervisor] Runtime control runtimeId drifted during startup");let O=this.writeRuntimeOwnerRecord({...F,displayNameSnapshot:D.displayNameSnapshot??$.arionName,lastHeartbeat:this.now().toISOString()}),L={nodeId:J.nodeId,ariaHome:Z,runtime:z,runtimeControl:D,ownerRecord:O,nodeStore:W,eventJournal:H,clients:new Map,heartbeatTimer:this.startHeartbeatLoop(J.nodeId)};S2.set(J.nodeId,L),L.ownerRecord=this.writeHeartbeatRecord(L),this.publishBootstrapRecord(L,"mesh_ready"),L.eventJournal.record({nodeId:L.nodeId,runtimeId:L.runtimeControl.runtimeId,kind:"runtime_started",payload:{ownerGeneration:L.ownerRecord.ownerGeneration,runtimeSocket:L.ownerRecord.runtimeSocket}});let q=this.attachClient(L,$.clientKind,"started",$.runtimeLifecycle??"persistent");if($.clientKind==="daemon-launcher")setTimeout(()=>{L.runtime.startAutonomousLoop?.()},0);return q}catch(K){throw W.removeRuntimeOwnerRecord(J.nodeId),ZQ(this.runtimeRoot,J.nodeId),H.close(),W.close(),K}})}async shutdownRuntime($){await Tg($,async()=>{let Z=S2.get($);if(!Z){ZQ(this.runtimeRoot,$);return}try{await Z.runtime.shutdown()}catch(J){throw J}clearInterval(Z.heartbeatTimer);try{Z.eventJournal.record({nodeId:Z.nodeId,runtimeId:Z.runtimeControl.runtimeId,kind:"runtime_stopped",payload:{remainingClients:Z.clients.size}}),this.publishBootstrapRecord(Z,"stopped")}finally{S2.delete($),Z.nodeStore.removeRuntimeOwnerRecord($),ZQ(this.runtimeRoot,$),yx(this.runtimeRoot,$),Z.eventJournal.close(),Z.nodeStore.close()}})}async startRuntimeAutonomousLoop($,Z){await Tg($,async()=>{let J=S2.get($);if(!J)throw Error(`[host-supervisor] Cannot start autonomous loop; runtime ${$} is not owned by this process`);try{J.runtime.configureAutonomousLoop?.(Z),await J.runtime.startAutonomousLoop?.()}catch(X){throw P.error(`[host-supervisor] Failed to start autonomous loop for node ${$}: ${X instanceof Error?X.message:String(X)}`),X}})}listRuntimes(){return jH(this.runtimeRoot).filter((Z)=>{if(Z.runtimePid===process.pid&&S2.has(Z.nodeId))return!0;if(this.isPidAlive(Z.runtimePid))return!0;return ZQ(this.runtimeRoot,Z.nodeId),!1}).sort((Z,J)=>J.lastHeartbeat.localeCompare(Z.lastHeartbeat)).map((Z)=>{let J=S2.get(Z.nodeId),X=Z.lastHeartbeat,Y=J?Uy0(J):void 0;return YG.parse({nodeId:Z.nodeId,runtimeId:Z.runtimeId,lastHeartbeat:X,controlEndpoint:Y,displayNameSnapshot:Z.displayNameSnapshot})})}attachClient($,Z,J,X="persistent"){let Y=this.now().toISOString(),Q=N4.parse(`client-${Vy0()}`);return $.clients.set(Q,{clientId:Q,clientKind:Z,attachedAt:Y,lastSeenAt:Y}),$.eventJournal.record({nodeId:$.nodeId,runtimeId:$.runtimeControl.runtimeId,kind:"client_attached",payload:{clientId:Q,clientKind:Z,ownership:J}}),{nodeId:$.nodeId,runtimeId:$.runtimeControl.runtimeId,clientId:Q,ownership:J,control:$.runtimeControl.localControl,runtime:$.runtimeControl,release:async(G)=>{if($.clients.delete(Q),$.eventJournal.record({nodeId:$.nodeId,runtimeId:$.runtimeControl.runtimeId,kind:"client_detached",payload:{clientId:Q,clientKind:Z}}),J==="started"&&X==="scoped"&&G?.preserveRuntime!==!0)await this.shutdownRuntime($.nodeId)}}}startHeartbeatLoop($){let Z=setInterval(()=>{let J=S2.get($);if(!J){clearInterval(Z);return}if(J.ownerRecord=this.writeHeartbeatRecord(J),this.evictStaleClients(J),this.heartbeatCount++,this.heartbeatCount%Dy0===0)this.logMemorySnapshot(J)},this.heartbeatIntervalMs);return Z.unref?.(),Z}evictStaleClients($){let Z=this.now().getTime()-this.staleClientTtlMs;for(let[J,X]of $.clients)if(new Date(X.lastSeenAt).getTime()<Z)$.clients.delete(J),P.debug(`[host-supervisor] Evicted stale client ${J} (${X.clientKind}, last seen ${X.lastSeenAt})`),$.eventJournal.record({nodeId:$.nodeId,runtimeId:$.runtimeControl.runtimeId,kind:"client_detached",payload:{clientId:J,clientKind:X.clientKind,reason:"stale_eviction"}})}logMemorySnapshot($){try{if(!this.memoryLogPath){let Q=V20(Ky0(),".aria","logs");Hy0(Q,{recursive:!0}),this.memoryLogPath=V20(Q,"memory-timeline.jsonl")}let Z=process.memoryUsage(),J=W20.getHeapStatistics(),X=Math.round(Z.rss/1024/1024);if(X>this.peakRssMb)this.peakRssMb=X;let Y={ts:new Date().toISOString(),pid:process.pid,uptimeS:Math.round(process.uptime()),rssMb:X,peakRssMb:this.peakRssMb,heapUsedMb:Math.round(Z.heapUsed/1024/1024*10)/10,heapTotalMb:Math.round(Z.heapTotal/1024/1024*10)/10,externalMb:Math.round(Z.external/1024/1024*10)/10,arrayBuffersMb:Math.round(Z.arrayBuffers/1024/1024*10)/10,heapSpaces:{totalPhysicalSizeKb:Math.round(J.total_physical_size/1024),mallocedMemoryKb:Math.round(J.malloced_memory/1024),externalMemoryKb:Math.round(J.external_memory/1024),nativeContexts:J.number_of_native_contexts,detachedContexts:J.number_of_detached_contexts},clients:$.clients.size};Wy0(this.memoryLogPath,JSON.stringify(Y)+`
|
|
5428
5429
|
`)}catch{}}writeHeartbeatRecord($){let Z={...$.ownerRecord,lastHeartbeat:this.now().toISOString()},J=this.writeRuntimeOwnerRecord(Z);return $.ownerRecord=J,J}writeRuntimeOwnerRecord($){let Z=S2.get($.nodeId),J;if(Z)J=Z.nodeStore.writeRuntimeOwnerRecord($);else{let X=new M$({ariaHome:$.ariaHome,ownerGeneration:$.ownerGeneration});try{J=X.writeRuntimeOwnerRecord($)}finally{X.close()}}return fx(this.runtimeRoot,J),J}publishBootstrapRecord($,Z){let J=$.nodeStore.readRuntimeBootstrapRecord($.nodeId);if(J&&J.runtimeId===$.runtimeControl.runtimeId&&J.ownerGeneration===$.ownerRecord.ownerGeneration&&J.phase===Z)return;zy0($.runtimeControl),i50({nodeStore:$.nodeStore,nodeId:$.nodeId,runtimeId:$.runtimeControl.runtimeId,ownerGeneration:$.ownerRecord.ownerGeneration,controlPort:$.runtimeControl.port,caFingerprint:d$.parse($.runtimeControl.certs.fingerprint),caCertPem:$.runtimeControl.certs.caCert,networkManager:$.runtimeControl.networkManager,displayNameSnapshot:$.runtimeControl.displayNameSnapshot,phase:Z,controlHost:"127.0.0.1"})}}function JD(){if(!jg)jg=new ZD;return jg}function Cg($,Z){return kx($,Z)}function Rg($,Z){ZQ($,Z)}function wg($,Z){let J=new M$({ariaHome:Z.ariaHome,ownerGeneration:Z.ownerGeneration});try{let X=J.writeRuntimeOwnerRecord(Z);return fx($,X),X}finally{J.close()}}var $D,S2,uP,jg=null,Fy0=600000,Dy0=12;var pP=E(()=>{V8();b0();S0();iY();O6();Mg();Pg();vx();GQ();Lg();$D=class $D extends Error{nodeId;ownerPid;ownerRuntimeId;constructor($){super(`[host-supervisor] Refusing to start a second runtime for node ${$.nodeId}; live owner pid ${$.runtimePid} already claims runtime ${$.runtimeId}`);this.name="HostSupervisorSplitBrainError",this.nodeId=$.nodeId,this.ownerPid=$.runtimePid,this.ownerRuntimeId=$.runtimeId}};S2=new Map,uP=new Map});var bg={};A$(bg,{resolveLocalControlClientSync:()=>Ig,resolveLocalControlClient:()=>VD,requestRuntimeSocketLease:()=>YD,requestOneShotLease:()=>Sy0,createResilientAttachedClient:()=>gH,attachLocalControlClient:()=>GD,attachExistingLocalControlClient:()=>QD});import*as D20 from"net";import{appendFileSync as Oy0,mkdirSync as Ny0}from"fs";import{join as O20}from"path";import{randomUUID as Ly0}from"crypto";async function N20($){await new Promise((Z)=>setTimeout(Z,Math.max($,0)))}function Ey0(){return K20??=Promise.resolve().then(() => (pP(),H20)),K20}function _y0(){return z20??=Promise.resolve().then(() => (iY(),Jx)),z20}function My0(){return U20??=Promise.resolve().then(() => (O6(),wZ0)),U20}async function L20($){let{resolveOrCreateNode:Z}=await _y0();return Z({ariaHome:$})}async function dP($,Z){let{NodeStore:J}=await My0(),X=new J({ariaHome:$});try{return X.readRuntimeOwnerRecord(Z)}finally{X.close()}}function Sg($){if(!($ instanceof Error))return!1;let Z=$.message;return Z.includes("connect ENOENT")||Z.includes("ECONNREFUSED")||Z.includes("Missing runtime owner record")||Z.includes("not attachable")||Z.includes("not control-ready")}async function XD($){let Z=await dP($.ariaHome,$.nodeId);if(!Z)throw Error(`[local-control-client] Missing runtime owner record for node ${$.nodeId}`);let J=Py0({runtimeSocket:Z.runtimeSocket,pollIntervalMs:$.pollIntervalMs}),X=NZ0($.nodeId,await J.getRuntimeBootstrap()),Y,Q,G;if($.clientKind)G=await gH({runtimeSocket:Z.runtimeSocket,clientKind:$.clientKind,logDir:O20($.ariaHome,"logs")}),Y=G.getClientId(),Q=G.getClientAuthToken();let V=null;return{nodeId:$.nodeId,runtimeId:X.runtimeId,port:X.controlEndpoint.port,ownership:$.ownership,...Y?{attachedClientId:Y}:{},...Q?{attachedClientAuthToken:Q}:{},control:G?G.api:J,getConnectionState:G?(()=>{let W=G;return()=>W.getState()})():void 0,onConnectionStateChange:G?(()=>{let W=G;return(H)=>W.onStateChange(H)})():void 0,release:async(W)=>{if(V)return V;return V=(async()=>{let H=G;G=void 0,Y=void 0,Q=void 0,await H?.release().catch(()=>{}),await $.release(W)})(),V}}}async function YD($,Z){let J=W1.parse({id:Ly0(),method:"attachClient",payload:Z});return new Promise((X,Y)=>{let Q=D20.createConnection($),G="",V=!1,W=!1,H,K=new Promise((U)=>{H=U}),z=()=>{if(W)return;if(W=!0,H?.(),!V)V=!0,Y(Error("Local control socket closed before establishing an attached-client lease"))};Q.setEncoding("utf8"),Q.once("connect",()=>{Q.write(`${JSON.stringify(J)}
|
|
5429
5430
|
`)}),Q.once("error",(U)=>{if(!V){V=!0,Y(U);return}z()}),Q.once("end",z),Q.once("close",z),Q.on("data",async(U)=>{G+=U;let B=G.indexOf(`
|
|
@@ -5459,7 +5460,7 @@ ASSISTANT: ${Y.assistant}`).filter((Y)=>Y.length>50).join(`
|
|
|
5459
5460
|
`)}catch{}}function Th0($){if(!process.env.DEBUG)return;try{let Z=($/1000).toFixed(1);process.stderr.write(`[InkREPL][DEBUG] System sleep/suspend detected: ${Z}s
|
|
5460
5461
|
`)}catch{}}function Ch0($){if($==="high"||$==="dangerous")return"high";if($==="moderate")return"moderate";return"low"}function Rh0($){for(let Z=$.length-1;Z>=0;Z--)if($[Z]?.role==="assistant")return $[Z].content;return""}function wh0($){return`${$.provider}/${$.shortName}`}function e30($,Z,J){let X=J>1?`Run paused: answer question ${Z+1} of ${J} to continue.`:"Run paused: answer the question below to continue.",Y=Array.isArray($.options)&&$.options.length>0?`
|
|
5461
5462
|
Options: ${$.options.join(" | ")}`:"";return`${X}
|
|
5462
|
-
${$.question}${Y}`}function Sh0({session:$,manager:Z,router:J,aria:X,localControlManager:Y,cliContext:Q,sessionHistory:G,initialModel:V="sonnet-4.5",inputHistory:W=[],onSaveInput:H,initialMessage:K,resumeSessionId:z,cachedUserName:U,initialAvailableModels:B=j4(),refreshAvailableModels:F,credentialHints:D,authResolver:O}){let{exit:L}=Ph0(),{committedItems:q,streamingItems:A,isStreaming:N,dispatch:_,setItems:M}=s30(),T=H$(),k=T.preferredTier||"balanced",a=ZZ(k,D)?.shortName||V,[o,u]=p0(a),w=m$(a),[m,I]=p0(T.effortLevel??"high"),S=N,j=m$(!1),b=m$(!1),v=m$(!1),c=m$(!1),C=m$(Promise.resolve()),f=m$(null),[g,l]=p0(null),[$0,Y0]=p0(),[x,r]=p0([]),[J0,X0]=p0(U??null),[n,K0]=p0(0),[z0,O0]=p0([]),[R0,I0]=p0("browse"),[Z0,H0]=p0(!1),[B0,F0]=p0([]),[V0,D0]=p0(B);m8(()=>{let y=Y.getControl();if(!y)return;let t=!0;return y.getModelSnapshot?.().then((h)=>{if(!t)return;if(D0(h.models),h.currentModel)u(h.currentModel),w.current=h.currentModel}).catch(()=>{}),()=>{t=!1}},[Y]);let[C0,_0]=p0(void 0),[L0,P0]=p0(void 0),[c0,z$]=p0(void 0),[A0,u0]=p0(void 0),[U$,
|
|
5463
|
+
${$.question}${Y}`}function Sh0({session:$,manager:Z,router:J,aria:X,localControlManager:Y,cliContext:Q,sessionHistory:G,initialModel:V="sonnet-4.5",inputHistory:W=[],onSaveInput:H,initialMessage:K,resumeSessionId:z,cachedUserName:U,initialAvailableModels:B=j4(),refreshAvailableModels:F,credentialHints:D,authResolver:O}){let{exit:L}=Ph0(),{committedItems:q,streamingItems:A,isStreaming:N,dispatch:_,setItems:M}=s30(),T=H$(),k=T.preferredTier||"balanced",a=ZZ(k,D)?.shortName||V,[o,u]=p0(a),w=m$(a),[m,I]=p0(T.effortLevel??"high"),S=N,j=m$(!1),b=m$(!1),v=m$(!1),c=m$(!1),C=m$(Promise.resolve()),f=m$(null),[g,l]=p0(null),[$0,Y0]=p0(),[x,r]=p0([]),[J0,X0]=p0(U??null),[n,K0]=p0(0),[z0,O0]=p0([]),[R0,I0]=p0("browse"),[Z0,H0]=p0(!1),[B0,F0]=p0([]),[V0,D0]=p0(B);m8(()=>{let y=Y.getControl();if(!y)return;let t=!0;return y.getModelSnapshot?.().then((h)=>{if(!t)return;if(D0(h.models),h.currentModel)u(h.currentModel),w.current=h.currentModel}).catch(()=>{}),()=>{t=!1}},[Y]);let[C0,_0]=p0(void 0),[L0,P0]=p0(void 0),[c0,z$]=p0(void 0),[A0,u0]=p0(void 0),[U$,s0]=p0({running:!1}),[V$,_$]=p0(null),[r8,p$]=p0("connected"),c$=m$(Date.now()+15000),z9=m$(!1),d4=m$(null),A5=m$(0),GK=m$(""),VK=m$(0),V7=m$(null),W7=100,WK=T.autonomy??ZJ.autonomy,f2=m$(WK),[HK,ZO]=p0(WK),mJ=e0((y)=>{f2.current=y,ZO(y),I$({...H$(),autonomy:y})},[]),[JO,jQ]=p0(!1),[XO,TQ]=p0(null),[YO,CQ]=p0(null),[KK,RQ]=p0(null),[QO,wQ]=p0(null),[GO,SQ]=p0(null),[IQ,bQ]=p0(null),[VO,kQ]=p0(null),[WO,fQ]=p0(null),[zK,UK]=p0(null),[HO,yQ]=p0(null),[vQ,hQ]=p0(null),[KO,y2]=p0(!1),[zO,BK]=p0(!1),[FT,UO]=p0(null),[DT,xQ]=p0(!1),[BO,H7]=p0(null),[OT,gQ]=p0(!1),[FK,cJ]=p0(null),[NT,v2]=p0(null),[LT,FO]=p0(null),[q5,DK]=p0(null),[h2,AT]=p0([]),[OK,qT]=p0([]),[ET,Yu]=p0(void 0),[Qu,Gu]=p0(void 0),[NK,uJ]=p0(null),[DO,_T]=p0(void 0),[LK,A6]=p0(null),[m0,J$]=p0(null),mQ=m$(null),cQ=m$(0),[AK,qK]=p0(null);m8(()=>{w.current=o},[o]),m8(()=>{g2.current=$.getPrimary()?.name||T.activeArion||"ARIA"},[$,T.activeArion]);let[i9,x2]=p0(null),OO=e0((y)=>new Promise((t)=>{cQ.current+=1,qK({id:cQ.current,toolName:y.toolName,input:y.input,riskLevel:y.riskLevel,...y.issues?{issues:y.issues}:{},resolve:t})}),[]),K7=e0((y)=>{$.addToHistory(y)},[$]),NO=e0((y)=>{let t=mG(y);if(G&&C$.current)G.persistMessagesNonBlocking(C$.current,[t]);if(w9.jsonlLogger?.log({type:"user_message",content:y,id:t.id}),b.current)b.current=!1;else M((h)=>[...h,t]);K7({role:"user",content:y})},[K7,G]),uQ=e0((y)=>{let t=y&&typeof y==="object"&&"diagnostic"in y?y.diagnostic:void 0;w9.jsonlLogger?.log({type:"error",error:{message:G1(k0(y),t)??k0(y),...t===void 0?{}:{diagnostic:t}}})},[]),pJ=e0((y,t)=>{let h=Rh0(y).trim();if(!h)return;K7({role:"assistant",content:h,...t?{arion:t}:{}})},[K7]),[LO,dJ]=p0({turnCount:0,totalTokens:0,estimatedCost:0,wallTimeSeconds:0,contextTokens:0,contextStale:!1}),[EK,pQ]=p0(0),[dQ,MT]=p0(null);m8(()=>{let y=!1;return(async()=>{try{let t=await Y.resolveRuntimeSocket();if(!y)MT(t)}catch{}})(),()=>{y=!0}},[Y]);let[TZ]=p0(()=>{let y=dh(),t=H$(),h=t.theme;if(!h&&y.display.theme){h=y.display.theme;try{I$({...t,theme:h})}catch(i){P.warn("[Theme] YAML\u2192JSON migration failed (non-fatal):",i.message)}}if(h)if(b7().includes(h))I7(h);else P.warn(`[Theme] Invalid theme "${h}" in config, using default`);return y}),Vu=m$(TZ.persistence.otelEndpoint?new lB(TZ.persistence.otelEndpoint):new dB),[PT,jT]=p0(TZ.display.mode),[CZ,lQ]=p0(()=>{let{mode:y,syntaxHighlighting:t,maxToolOutputLines:h,maxThinkingPreview:i,...Q0}=TZ.display;return Q0}),[AO,aQ]=p0(void 0),[TT,p6]=p0([]),[CT,RT]=p0(0),[wT,RZ]=p0(),g2=m$($.getPrimary()?.name||T.activeArion||"ARIA"),[qO,d6]=p0(null),nQ=m$(0),iQ=m$(0),_8=m$(null),wZ=m$(null);m8(()=>{let y=H$().soundEnabled;return uY(y!==!1),mM(),()=>{X60()}},[]),m8(()=>{return Rn({thresholdMs:uS,onStall:jh0,onSleep:Th0})},[]);let X1=m$([]),C$=m$(null),m2=m$(null),oQ=m$(null);if(!oQ.current){let y=process.env.ARIA_HOME??`${process.env.HOME}/.aria`,t=new i8(y,J,()=>C$.current);oQ.current=t.toFactory()}m8(()=>{return()=>{let y=C$.current;(async()=>{if(y&&G)try{G.markCompleted(y)}catch(h){P.warn("[InkREPL] SessionHistory completion mark failed:",h)}if(y&&m2.current)try{await m2.current.endSession(y)}catch(h){P.warn("[InkREPL] Memoria session end failed (non-critical):",h)}await oQ.current?.closeAll()})().catch((h)=>{P.warn("[InkREPL] MemoriaPool cleanup failed:",h?.message)})}},[]);let SZ=m$(null);if(!SZ.current)SZ.current=Y;let E5=e0(async(y)=>{let t=Date.now()+20000;while(Date.now()<t){if(y?.aborted)return null;let h=SZ.current?.getControl()??null;if(h)return h;await new Promise((i)=>setTimeout(i,250))}return SZ.current?.getControl()??null},[]),ST=e0(async()=>{return await E5()??null},[E5]),Wu=e0(()=>{return SZ.current?.getControl()??null},[]);m8(()=>{SZ.current=Y;let y=Y.getAttached();if(y)P.debug(`[InkREPL] Bound shared local-control manager to runtime ${y.runtimeId} on port ${y.port} (${y.ownership}, node ${y.nodeId})`);return(async()=>{try{let t=`${process.env.ARIA_HOME??`${process.env.HOME}/.aria`}/run`,h=`${t}/agent-bridge.json`,i=`${h}.${process.pid}.tmp`,Q0=r0("fs"),j0=dQ??await Y.resolveRuntimeSocket();Q0.mkdirSync(t,{recursive:!0}),Q0.writeFileSync(i,JSON.stringify({socketPath:j0,clientId:y?.attachedClientId??null,nodeId:y?.nodeId??null,pid:process.pid,updatedAt:new Date().toISOString()},null,2)),Q0.renameSync(i,h),P.debug(`[InkREPL] Wrote agent-bridge.json (clientId=${y?.attachedClientId??"n/a"}, socket=${j0})`)}catch(t){P.debug(`[InkREPL] Failed to write agent-bridge.json: ${t instanceof Error?t.message:String(t)}`)}})(),()=>{SZ.current=null}},[Y,dQ]);let N0=FD(()=>{if(!G||!Q)return null;let y=new Proxy({},{get(h,i){return async(...Q0)=>{let j0=$.getPrimary(),M0=(j0&&typeof $.getArionMemoria==="function"?await $.getArionMemoria(j0):null)??X.components.memoria,n0=M0[i];if(typeof n0!=="function")throw Error(`Memoria method ${String(i)} is unavailable`);return n0.apply(M0,Q0)}}}),t=SZ.current.getControl();return new BD({cli:Q,localControl:t,sessionLedger:G,resolveRuntimeSocket:()=>Y.resolveRuntimeSocket(),...a30({cli:Q,activeArionName:$.getPrimary()?.name??Q.config.activeArion??"ARIA",overrides:{memoria:y,arionManager:{list:()=>Z.list(),hatch:(h)=>Z.hatch(h),get:async(h)=>{return(await Z.list()).find((Q0)=>Q0.name.toLowerCase()===h.toLowerCase())??null},wake:(h)=>Z.wake(h),rest:(h)=>$.dismiss(h)},config:{async getTheme(){return e()},async setTheme(h){if(!b7().includes(h))throw Error(`Unknown theme: ${h}`);I7(h);let Q0=H$();return Q0.theme=h,I$(Q0),{theme:h}},async getAutonomy(){return f2.current},async setAutonomy(h){if(!iZ.includes(h))throw Error(`Invalid autonomy level: ${h}`);return mJ(h),{autonomy:h}},async getActiveArion(){return g2.current??$.getPrimary()?.name??Q.config.activeArion},async setActiveArion(h){g2.current=h;let i=H$();i.activeArion=h,I$(i)}},modelDiscovery:{async listAvailable(){return V0},async refresh(){return V0},async getCurrentModel(){return o},async setCurrentModel(h){let i=h.trim();if(!i)throw Error("Model name is required");u(i),w.current=i;let Q0=$.getPrimary();if(Q0)await Z.setPreferredModel(Q0.name,i);return{currentModel:i}}}}}),system:{async restart(h){return{accepted:!0,reason:typeof h.reason==="string"&&h.reason.trim().length>0?h.reason.trim():"Restart requested"}},async terminalSetup(){if(!yX())return{supported:!1,message:"terminal-setup is supported only in iTerm2 (macOS) and VSCode terminal."};return{supported:!0,output:PA().trim()}}}})},[X,V0,Q,Z,o,$,G,mJ]);m8(()=>{if(!N0)return;return d4.current?.(),d4.current=null,p$(N0.getConnectionState()),d4.current=N0.onConnectionStateChange((y)=>{if(Date.now()<c$.current&&!z9.current&&y!=="connected")return;if(y==="connected")z9.current=!0;p$(y)}),()=>{d4.current?.(),d4.current=null}},[N0]);let T0=e0(async(y,t)=>{if(!N0)throw Error(`Headless kernel unavailable for ${y}`);let h=null,i=null;for await(let Q0 of N0.dispatch({kind:"request",requestId:`${y}:${pH()}`,op:y,input:t}))if(Q0.kind==="interaction.required")h=Q0;else if(Q0.kind==="result")i=Q0;return{interactionFrame:h,resultFrame:i}},[N0]);m8(()=>{let y=!1,t=async()=>{try{let i=await T0("client.inbox.list",{limit:100,unreadOnly:!0}).catch(()=>null),Q0=i?null:await T0("message.inbox.list",{limit:100,unreadOnly:!0}),j0=i??Q0,M0=(j0?.resultFrame?.ok&&Array.isArray(j0.resultFrame.result.events)?j0.resultFrame.result.events:[]).length;if(!y)pQ(M0)}catch(i){if(Dm(i)){y=!0,clearInterval(h);return}if(!y)pQ(0)}};t();let h=setInterval(()=>{if(!y)t()},3000);return()=>{y=!0,clearInterval(h)}},[T0]),m8(()=>{let y=!1,t=N0;if(!t?.subscribeDirectClientInbox)return;let h=SZ.current?.getAttached(),i=h?.nodeId,Q0=h?.attachedClientId,j0=new Map,w0=30000;return(async()=>{while(!y){try{let a0=t.subscribeDirectClientInbox({afterCreatedAt:Date.now()});for await(let n0 of a0){if(y)break;if(n0.senderNodeId===i)continue;if(n0.senderClientId&&Q0&&n0.senderClientId===Q0)continue;if(n0.recipientClientId&&Q0&&n0.recipientClientId!==Q0)continue;let o$=`${n0.senderNodeId}\x00${n0.content}`,b8=Date.now(),o9=j0.get(o$);if(o9&&b8-o9.ts<w0){o9.count++,o9.ts=b8;continue}if(j0.set(o$,{ts:b8,count:1}),j0.size>200){for(let[z7,vT]of j0)if(b8-vT.ts>=w0)j0.delete(z7)}let T$=n0.senderDisplayNameSnapshot?.trim()||n0.senderNodeId||"Unknown",lJ=n0.senderClientId?.match(/^client-pid-(\d+)$/)?.[1],f$=lJ?`${T$} (pid ${lJ})`:T$,s$=typeof n0.content==="string"?n0.content:JSON.stringify(n0.content),Y8=f$!=="Unknown"?f$:n0.senderNodeId||"unknown",[p2,$G]=FL(f$,Y8,s$,n0.id);if(G&&C$.current)G.persistMessagesNonBlocking(C$.current,[p2,$G]);if(M((z7)=>[...z7,p2,$G]),!j.current)b.current=!0,Uu.current(`[Incoming message from "${f$}" (${Y8})]
|
|
5463
5464
|
|
|
5464
5465
|
${s$}
|
|
5465
5466
|
|
|
@@ -5484,7 +5485,7 @@ ${b8}
|
|
|
5484
5485
|
|
|
5485
5486
|
Use /model <name> or /model <provider>/<name> to switch.`)])}catch(M0){M((a0)=>[...a0,Y$(`Model listing failed: ${M0.message}`)])}else try{let{resultFrame:M0}=await T0("model.set",{model:j0});if(!M0)throw Error("model.set produced no result frame");if(!M0.ok)throw Error(M0.error.message);let a0=M0.result.currentModel??j0;u(a0),w.current=a0,M((n0)=>[...n0,l0(`Switched model to ${a0}`)])}catch(M0){M((a0)=>[...a0,Y$(`Unknown model: ${h}. Use /model list to see available models. ${M0.message}`)])}break}case"auth":{let h=t?.trim()||"",[i,...Q0]=h.length>0?h.split(/\s+/):[],j0=(i??"").toLowerCase();if(j0==="import-env"){try{let w0=Q0.filter((n0)=>n0.trim().length>0),{resultFrame:M0}=await T0("auth.import_env_session",{...w0.length?{providers:w0}:{}});if(!M0)throw Error("auth.import_env_session produced no result frame");if(!M0.ok)throw Error(M0.error.message);let a0=M0.result.providers??[];M((n0)=>[...n0,l0(a0.length>0?`Imported session credentials for: ${a0.join(", ")}`:"No matching env credentials found to import into session scope.")])}catch(w0){M((M0)=>[...M0,Y$(`Auth import failed: ${w0.message}`)])}break}if(j0==="clear-session"){try{let{resultFrame:w0}=await T0("auth.clear_session",{});if(!w0)throw Error("auth.clear_session produced no result frame");if(!w0.ok)throw Error(w0.error.message);M((M0)=>[...M0,l0("Cleared session credential overlay.")])}catch(w0){M((M0)=>[...M0,Y$(`Auth clear failed: ${w0.message}`)])}break}if(j0==="status-session"){try{let{resultFrame:w0}=await T0("auth.status",{});if(!w0)throw Error("auth.status produced no result frame");if(!w0.ok)throw Error(w0.error.message);let M0=w0.result.sessionProviders??[];M((a0)=>[...a0,l0(M0.length>0?`Session credential overlay providers: ${M0.join(", ")}`:"No session credential overlay providers are currently set.")])}catch(w0){M((M0)=>[...M0,Y$(`Auth status failed: ${w0.message}`)])}break}M((w0)=>[...w0,l0("Usage: /auth import-env [provider ...] | /auth clear-session | /auth status-session")]);break}case"autonomy":{if(t&&t.trim())try{let h=t.trim().toLowerCase(),{resultFrame:i}=await T0("config.autonomy.set",{autonomy:h});if(!i)throw Error("config.autonomy.set produced no result frame");if(!i.ok)throw Error(i.error.message);M((Q0)=>[...Q0,l0(`Autonomy level set to: ${h}`)])}catch(h){M((i)=>[...i,Y$(`Invalid autonomy level: ${t.trim().toLowerCase()}. ${h.message}`)])}else jQ(!0);break}case"memories":{try{let{resultFrame:h}=await T0("memory.list",{limit:20});if(!h)throw Error("memory.list produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result,Q0=typeof i.count==="number"?i.count:0;if(Q0===0)M((j0)=>[...j0,l0("No memories stored. Use /remember to store memories.")]);else{let w0=(Array.isArray(i.memories)?i.memories:[]).map((M0)=>` [${M0.id.slice(0,8)}] ${M0.content.slice(0,80)}${M0.content.length>80?"...":""}`).join(`
|
|
5486
5487
|
`);M((M0)=>[...M0,l0(`Memories (${Q0} total):
|
|
5487
|
-
${w0}`)])}}catch(h){M((i)=>[...i,Y$(`Failed to list memories: ${h.message}`)])}break}case"forget":{try{let{resultFrame:h}=await T0("memory.forget",{id:t??""});if(!h)throw Error("memory.forget produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result;if(M((Q0)=>[...Q0,l0(String(i.message??"Memory deleted."))]),typeof i.count==="number")K0(i.count)}catch(h){M((i)=>[...i,Y$(`Failed to delete memory: ${h.message}`)])}break}case"daemon":{let h=(t??"").trim().toLowerCase();if(h==="start"||h==="stop"||h==="restart"){await Du(h);break}if(h.length>0){M((i)=>[...i,l0("Usage: /daemon [start|stop|restart]")]);break}(async()=>{await fT(),_$(null),u0((i)=>(i??0)+1)})();break}case"terminal-setup":{try{let{resultFrame:h}=await T0("system.terminal_setup",{});if(!h)throw Error("system.terminal_setup produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result;M((Q0)=>[...Q0,l0(i.supported===!1?i.message??"terminal-setup is unavailable.":i.output??"")])}catch(h){M((i)=>[...i,Y$(`terminal-setup failed: ${h.message}`)])}break}case"login":{try{await Y1("auth.login",t??"")}catch(h){M((i)=>[...i,Y$(`Login failed: ${h.message}`)])}break}case"logout":{try{await Y1("auth.logout",t??"")}catch(h){M((i)=>[...i,Y$(`Logout failed: ${h.message}`)])}break}case"theme":{let h=(t??"").trim().toLowerCase();if(!h){P0((i)=>(i??0)+1);break}try{let{resultFrame:i}=await T0("config.theme.set",{theme:h});if(!i)throw Error("config.theme.set produced no result frame");if(!i.ok)throw Error(i.error.message);M((Q0)=>[...Q0,l0(`Theme changed to ${BA(h)?.displayName??h} (${h})`)])}catch(i){let Q0=b7();M((j0)=>[...j0,Y$(`Unknown theme "${h}". Available: ${Q0.join(", ")}. ${i.message}`)])}break}case"invite":{await sQ0(t?.trim());break}case"join":{let h=t?.trim();if(h)await Ou(h);else A6(null),_T((i)=>(i??0)+1);break}case"peers":{Yu((h)=>(h??0)+1);break}case"clients":{Gu((h)=>(h??0)+1);break}default:{M((h)=>[...h,l0(`Unknown command: /${y}. Type /help for available commands.`)]);break}}},[Z,J,X,o,V0,Hu,D,T0,L,q6,M5,c2,bT,V,l6,$,tQ]);X8.current=Bu;let lQ0=e0(async(y,t)=>{if(t==="mention")return;try{if(t==="become"){let{resultFrame:h}=await T0("arion.become",{name:y});if(!h)throw Error("arion.become produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result.arion;if(!i)throw Error(`Arion ${y} not found`);let j0=H$().preferredTier||"balanced",w0=ZZ(j0,D),M0=i.preferredModel?qL(i.preferredModel):void 0,a0=(M0?JZ(M0,D).shortName:void 0)||w0?.shortName||V;u(a0),w.current=a0,M((b8)=>[...b8,l0(`Switched to ${i.name} (model: ${a0})`)]);let o$=await(await q6()).count();K0(o$)}else if(t==="rest"){let{resultFrame:h}=await T0("arion.rest",{name:y});if(!h)throw Error("arion.rest produced no result frame");if(!h.ok)throw Error(h.error.message);M((i)=>[...i,l0(`${y} is now resting`)])}else if(t==="wake"){let{resultFrame:h}=await T0("arion.wake",{name:y});if(!h)throw Error("arion.wake produced no result frame");if(!h.ok)throw Error(h.error.message);M((i)=>[...i,l0(`${y} is now awake`)])}await l6()}catch(h){M((i)=>[...i,Y$(`Error: ${h.message}`)])}},[D,T0,q6,V,l6]),Fu=e0(async(y,t)=>{let{resultFrame:h}=await T0("model.set",{model:y});if(!h)throw Error("model.set produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result.currentModel??y;if(u(i),w.current=i,t){I(t);let Q0=H$();Q0.effortLevel=t,I$(Q0)}M((Q0)=>[...Q0,l0(`Switched to ${i}`)])},[T0]);sQ.current=Fu;let kT=e0(async(y)=>{try{let{resultFrame:t}=await T0("config.theme.set",{theme:y.name});if(!t)throw Error("config.theme.set produced no result frame");if(!t.ok)throw Error(t.error.message);M((h)=>[...h,l0(`Theme changed to ${y.displayName} (${y.name})`)])}catch(t){M((h)=>[...h,Y$(`Theme change failed: ${t.message}`)])}},[T0]),aQ0=m$(kT);aQ0.current=kT;let fT=e0(async()=>{try{let{resultFrame:y}=await T0("daemon.status",{});if(y?.ok){let t=y.result??{},h=t.autonomousLoop??{};return r0({running:!0,port:t.port,nodeId:t.nodeId,runtimeId:t.runtimeId,loopStatus:h.status,clients:t.attachedClients}),!0}}catch{}return r0({running:!1}),!1},[T0]),Du=e0(async(y)=>{_$({start:"Starting daemon\u2026",stop:"Stopping daemon\u2026",restart:"Restarting daemon\u2026"}[y]??`${y}\u2026`);try{let h=y==="restart"?"daemon.restart":y==="start"?"daemon.start":"daemon.stop",{resultFrame:i}=await T0(h,{});if(i&&!i.ok)throw Error(i.error?.message??`${y} failed`);if(y==="stop")r0({running:!1}),M((Q0)=>[...Q0,l0("\u25A0 Daemon stopped.")]);else await fT(),M((Q0)=>[...Q0,l0(y==="restart"?"\u21BB Daemon restarted.":"\u25B6 Daemon started.")])}catch(h){M((i)=>[...i,Y$(`Daemon ${y} failed: ${h.message}`)])}finally{_$(null)}},[T0,fT]),nQ0=e0(async(y)=>{if(y.status==="connected"){try{}catch{}M((i)=>[...i,l0(`\u2713 Already connected to ${y.displayNameSnapshot} (same identity, shared server on port ${y.port}).`)]);return}let t=y.host&&O8(y.host);if(y.transport!=="wan"&&y.host&&!t){M((i)=>[...i,Y$(`Rejected: ${y.host} is not a private LAN address.`)]);return}try{if(!y.principalFingerprint)throw Error(`${y.displayNameSnapshot} did not advertise a principal fingerprint`);if(!y.tlsCaFingerprint)throw Error(`${y.displayNameSnapshot} did not advertise a TLS fingerprint`);if(!y.host||!y.port)throw Error(`${y.displayNameSnapshot} did not advertise a control endpoint`);let{resultFrame:i}=await T0("peer.connect",{nodeId:y.nodeId,displayName:y.displayNameSnapshot,principalFingerprint:y.principalFingerprint,controlEndpoint:{host:y.host,port:y.port,tlsCaFingerprint:y.tlsCaFingerprint,tlsServerIdentity:y.principalFingerprint,protocolVersion:1},transport:y.transport});if(!i)throw Error("peer.connect produced no result frame");if(!i.ok)throw Error(i.error.message);let Q0=i.result.invite;if(!Q0)throw Error("peer.connect returned no invite payload");M((j0)=>[...j0,l0(Q0.mode==="wan_pair"?`Paired with ${Q0.displayNameSnapshot??Q0.nodeId}. Awaiting verified ingress before the runtime marks the peer active.`:`Paired with ${Q0.displayNameSnapshot??Q0.nodeId}. WG tunnel will connect when accepted.`)])}catch(i){M((Q0)=>[...Q0,Y$(`Failed to connect to ${y.displayNameSnapshot}: ${i.message}`)])}},[T0]),iQ0=e0(async()=>{if(!m0)return;let{id:y,nodeId:t,displayNameSnapshot:h}=m0,i=h??t;J$(null),M((Q0)=>[...Q0,l0(`Accepting connection from ${i}...`)]);try{let{resultFrame:Q0}=await T0("peer.pending.respond",{requestId:y,accepted:!0});if(!Q0)throw Error("peer.pending.respond produced no result frame");if(!Q0.ok)throw Error(Q0.error.message);let j0=Q0.result.response??{};if(j0.error)throw Error(j0.error);if(j0.accepted)M((w0)=>[...w0,l0(`Connected to ${i}. Tunnel established.`)])}catch(Q0){M((j0)=>[...j0,Y$(`Failed to accept connection: ${Q0.message}`)])}},[T0,m0]),oQ0=e0(()=>{if(!m0)return;let{id:y,nodeId:t,displayNameSnapshot:h}=m0,i=h??t;J$(null),M((Q0)=>[...Q0,l0(`Rejected connection from ${i}.`)]),T0("peer.pending.respond",{requestId:y,accepted:!1}).catch(()=>{})},[T0,m0]),sQ0=e0(async(y)=>{try{let{resultFrame:t}=await T0("peer.invite",{...y?.trim()?{inviteLabel:y.trim()}:{}});if(!t)throw Error("peer.invite produced no result frame");if(!t.ok)throw Error(t.error.message);let h=t.result.invite;if(!h)throw Error("peer.invite returned no invite payload");uJ(h)}catch(t){M((h)=>[...h,Y$(`Failed to create invite: ${t.message}`)])}},[T0]),Ou=e0(async(y)=>{try{let{resultFrame:t}=await T0("peer.accept_invite",{inviteToken:y});if(!t)throw Error("peer.accept_invite produced no result frame");if(!t.ok)throw Error(t.error.message);let h=t.result.accepted;if(!h)throw Error("peer.accept_invite returned no accepted payload");A6(null),M((i)=>[...i,l0(`Paired with ${h.displayNameSnapshot??h.nodeId}.`)])}catch(t){let h=`Failed to accept invite: ${t.message}`;A6(h),M((i)=>[...i,Y$(h)])}},[T0]);m8(()=>{let y=!0,t=null;return(async()=>{if(t=setInterval(async()=>{try{let{resultFrame:Q0}=await T0("peer.pending.list",{});if(!y||!Q0?.ok)return;let j0=Q0.result.requests??[];if(j0.length&&!m0)J$(j0[0])}catch(Q0){if(Dm(Q0)){if(t)clearInterval(t);mQ.current=null;return}}},5000),mQ.current=t,!y)clearInterval(t),t=null,mQ.current=null})(),()=>{if(y=!1,t)clearInterval(t);mQ.current=null}},[T0,m0]);let rQ0=e0(async(y)=>{I0(y),await EO()},[EO]),tQ0=e0(async(y)=>{if(R0==="forget")try{let{resultFrame:t}=await T0("memory.forget",{id:y.id});if(!t)throw Error("memory.forget produced no result frame");if(!t.ok)throw Error(t.error.message);let h=y.content.length>50?y.content.slice(0,50)+"...":y.content;M((i)=>[...i,l0(`Forgot: "${h}"`)]),await EO()}catch(t){M((h)=>[...h,Y$(`Error forgetting: ${t.message}`)])}},[T0,R0,EO]),eQ=e0(()=>{TQ(null),CQ(null),RQ(null),wQ(null),SQ(null),bQ(null),kQ(null),fQ(null),UK(null),yQ(null),hQ(null),y2(!1),BK(!1),UO(null),xQ(!1),H7(null),gQ(!1),cJ(null),v2(null),FO(null),DK(null)},[]),_K=e0((y)=>{let t=y,h=t.success!==!1,i=t.message??(h?"Authentication updated.":"Auth failed.");M((Q0)=>[...Q0,h?l0(i):Y$(i)])},[]),TO=e0(async(y)=>{if(eQ(),y.interaction.kind==="selection"){cJ({interactionId:y.interactionId,interaction:y.interaction}),FO(y.interaction.prompt),v2(y.interaction.options.map((t)=>({id:t.id,label:t.label,description:t.description,method:t.id,status:t.description?.includes("connected")?"connected":t.description?.includes("available")?"available":"none"})));return}if(y.interaction.kind==="credential_input"){let t=y.interaction.fields[0];if(!t)throw Error("Auth interaction requires at least one credential field");if(y.interaction.mode==="oauth_authorization_code"&&y.interaction.authorizeUrl&&y.interaction.provider){cJ({interactionId:y.interactionId,interaction:y.interaction}),RQ(y.interaction.provider),wQ(y.interaction.authorizeUrl),SQ(y.interaction.expectedState??null),bQ(t.key);return}cJ({interactionId:y.interactionId,interaction:y.interaction}),DK({title:t.label,hint:y.interaction.prompt,fieldKey:t.key});return}if(y.interaction.kind==="oauth_device"){cJ({interactionId:y.interactionId,interaction:y.interaction}),kQ(y.interaction.provider??"github-copilot"),fQ(y.interaction.profileLabel??null),UK(y.interaction.verificationUri),yQ(y.interaction.userCode);return}},[_K,eQ,N0]),Y1=e0(async(y,t)=>{eQ();let{interactionFrame:h,resultFrame:i}=await T0(y,{args:t});if(h&&h.source==="auth"){await TO(h);return}if(!i)throw Error(`${y} produced no result frame`);if(i.ok){_K(i.result);return}throw Error(i.error.message)},[_K,eQ,T0,TO]),u2=e0(async(y)=>{if(!FK)throw Error("No pending auth interaction to respond to");let{interactionId:t}=FK,h=null,i=null;for await(let Q0 of N0.dispatch({kind:"interaction.respond",requestId:`auth:${pH()}`,interactionId:t,response:y}))if(Q0.kind==="interaction.required"&&Q0.source==="auth")h=Q0;else if(Q0.kind==="result")i=Q0;if(h){await TO(h);return}if(eQ(),!i)throw Error("auth interaction produced no result frame");if(i.ok){_K(i.result);return}if(i.error.code==="INTERACTION_REQUIRED")return;M((Q0)=>[...Q0,Y$(`Login failed: ${i.error.message}`)])},[_K,eQ,N0,FK,TO]),eQ0=FD(()=>qL(o)?.maxContextTokens,[o]),$G0=FD(()=>{return q.map((y,t)=>{let i=(Array.isArray(y.content)?y.content:[y.content]).filter((Q0)=>typeof Q0==="object"&&Q0!==null&&("type"in Q0)&&Q0.type==="text").map((Q0)=>Q0.text).join("").trim();if(!i||y.role==="system")return null;return{index:t,role:y.role,text:i,arion:y.arion?.name,createdAt:y.createdAt}}).filter((y)=>y!==null)},[q]),[ZG0,Yl0]=p0(void 0),[JG0,yT]=p0(void 0),XG0=e0(async(y,t)=>{if(!C$.current||j.current)return;let h=0;for(let Q0=0;Q0<y;Q0++){let j0=q[Q0];if(j0&&j0.role!=="system")h++}let i=h;try{let{resultFrame:Q0}=await T0("session.fork",{sessionId:C$.current,messageLimit:i});if(!Q0?.ok){let w0=Q0?.error?.message??"Fork failed";M((M0)=>[...M0,Y$(`Edit failed: ${w0}`)]);return}let j0=Q0.result;await c2(j0.newSessionId),yT(t)}catch(Q0){M((j0)=>[...j0,Y$(`Edit failed: ${Q0.message}`)])}},[q,T0,c2]);return Om(v60,{staticRenderEpoch:CT,session:$,model:o,maxContextTokens:eQ0,banner:Om($b,{onComplete:()=>{},skipAnimation:!0,version:dM,whatsNew:g60}),messages:q,previewMessages:A,isStreaming:S,queuedMessage:g,onCancelQueuedMessage:mQ0,responseTime:$0,commands:Mh,arions:x,models:kQ0,memories:z0,memoryBrowserMode:R0,isLoadingMemories:Z0,userName:J0,memoryCount:n,metrics:LO,displayMode:PT,displayConfig:CZ,showThinking:CZ.showThinking,showCosts:CZ.showCosts,showTraces:CZ.showTraces,pipelineTiming:AO,spans:TT,activeArion:wT,onSubmit:M5,onCommand:Bu,onSelectArion:lQ0,onSelectModel:Fu,onSelectMemory:tQ0,onOpenMemoryBrowser:rQ0,onToggleThinking:uQ0,onToggleCosts:pQ0,onToggleTraces:dQ0,onCycleDisplayMode:cQ0,sessions:B0,onSelectSession:c2,onLoadSessions:fQ0,onSearchSessions:yQ0,onLoadMoreSessions:vQ0,openSessionOverlaySignal:C0,openThemeOverlaySignal:L0,openSoundOverlaySignal:c0,openDaemonOverlaySignal:A0,daemonStatus:U$,daemonActionStatus:V$,onDaemonAction:Du,connectionState:r8,inviteShare:NK?{inviteToken:NK.inviteToken,inviteLabel:NK.pendingInvite.inviteLabel,expiresAt:NK.pendingInvite.expiresAt??null}:null,onInviteShareClose:()=>{uJ(null)},openJoinInviteOverlaySignal:DO,onJoinInviteSubmit:Ou,onJoinInviteCancel:()=>{A6(null)},joinInviteError:LK,onSelectTheme:kT,inputHistory:W,onSaveInput:H,openMessageEditOverlaySignal:ZG0,editableMessages:$G0,onEditMessage:XG0,prefillInput:JG0,onPrefillConsumed:()=>yT(void 0),obsCtx:qO,onCancel:gQ0,approvalRequest:AK,onApprovalChoice:(y)=>{if(AK)AK.resolve(y),qK(null)},effortLevel:m,showAutonomySelector:JO,autonomyLevel:HK,onAutonomySelect:(y)=>{mJ(y),jQ(!1),M((t)=>[...t,l0(`Autonomy level set to: ${y}`)])},onCycleAutonomy:()=>{let y=iZ.indexOf(f2.current),t=iZ[(y+1)%iZ.length];mJ(t)},onCycleEffort:()=>{let y=["low","medium","high","max"],t=y.indexOf(m),h=y[(t+1)%y.length];I(h);let i=H$();i.effortLevel=h,I$(i)},onAutonomyCancel:()=>{jQ(!1)},authInteractionOptions:NT,authInteractionTitle:LT,onAuthInteractionSelect:async(y)=>{await u2({kind:"selection",selected:y})},onAuthInteractionCancel:async()=>{await u2({kind:"cancel"})},authInteractionInput:q5?{title:q5.title,...q5.hint?{hint:q5.hint}:{}}:null,onAuthInteractionInputSubmit:async(y)=>{if(!q5)return;await u2({kind:"credential_input",values:{[q5.fieldKey]:y}})},onAuthInteractionInputCancel:async()=>{await u2({kind:"cancel"})},loginPickerProviders:XO,onLoginProviderSelect:async(y)=>{TQ(null),await Y1("auth.login",y.id)},onLoginPickerCancel:()=>{TQ(null)},anthropicMethodOptions:vQ,onAnthropicMethodSelect:async(y)=>{hQ(null),await Y1("auth.login",`anthropic --method ${y.id}`)},onAnthropicMethodCancel:()=>hQ(null),anthropicKeyInputVisible:KO,onAnthropicKeySubmit:async(y)=>{y2(!1),await Y1("auth.login",`anthropic ${y}`)},onAnthropicKeyCancel:()=>y2(!1),anthropicSetupTokenVisible:zO,onAnthropicSetupTokenSubmit:async(y)=>{BK(!1),await Y1("auth.login",`anthropic --setup-token ${y}`)},onAnthropicSetupTokenCancel:()=>BK(!1),openaiMethodOptions:FT,onOpenAIMethodSelect:async(y)=>{UO(null),await Y1("auth.login",`openai --method ${y.id}`)},onOpenAIMethodCancel:()=>UO(null),openaiKeyInputVisible:DT,onOpenAIKeySubmit:async(y)=>{xQ(!1),await Y1("auth.login",`openai ${y}`)},onOpenAIKeyCancel:()=>xQ(!1),googleMethodOptions:BO,onGoogleMethodSelect:async(y)=>{H7(null),await Y1("auth.login",`google --method ${y.id}`)},onGoogleMethodCancel:()=>H7(null),googleKeyInputVisible:OT,onGoogleKeySubmit:async(y)=>{gQ(!1),await Y1("auth.login",`google ${y}`)},onGoogleKeyCancel:()=>gQ(!1),copilotSourceOptions:YO,onCopilotSourceSelect:async(y)=>{CQ(null),await Y1("auth.login",`github-copilot --from ${y.id}`)},onCopilotSourceCancel:()=>CQ(null),oauthProvider:KK,oauthAuthorizeUrl:QO,oauthExpectedState:GO,onOAuthComplete:(y)=>{RQ(null),wQ(null),SQ(null),bQ(null),M((t)=>[...t,y.success?l0(y.message):Y$(y.message)])},onOAuthCodeSubmit:async(y)=>{if(!IQ)throw Error("No pending OAuth field key");await u2({kind:"credential_input",values:{[IQ]:y}})},onOAuthCancel:async()=>{await u2({kind:"cancel"})},copilotDeviceProvider:VO,copilotDeviceProfileLabel:WO,copilotDeviceVerificationUri:zK,copilotDeviceUserCode:HO,onCopilotDeviceComplete:(y)=>{kQ(null),fQ(null),UK(null),yQ(null),M((t)=>[...t,y.success?l0(y.message):Y$(y.message)])},onCopilotDeviceApprove:async()=>{await u2({kind:"oauth_device",acknowledged:!0})},onCopilotDeviceCancel:async()=>{await u2({kind:"cancel"})},nearbyPeers:h2,localClients:OK,onSelectPeer:nQ0,onSelectClient:()=>{},onPeerCancel:()=>{},onClientsCancel:()=>{},openPeersOverlaySignal:ET,openClientsOverlaySignal:Qu,incomingPairRequest:m0,onAcceptPairRequest:iQ0,onRejectPairRequest:oQ0,onCancelPairing:void 0,meshMessageCount:EK,runtimeSocket:dQ,clientId:N0?.getAttachedCredentials()?.clientId??null,clientAuthToken:N0?.getAttachedCredentials()?.clientAuthToken??null,resolveCredentials:async()=>{try{return N0?.getAttachedCredentials()??null}catch{return null}}})}async function DD($,Z,J,X,Y,Q,G=[],V,W,H,K,z,U,B,F,D){let O=new Fm(Y),L=W,q=O.getControl();if(W&&!(W instanceof FH)&&q!=null)L=new FH(W,q);let{waitUntilExit:A,unmount:N}=Mh0(Om(Sh0,{session:$,manager:Z,router:J,aria:X,localControlManager:O,cliContext:Q,sessionHistory:L,inputHistory:G,onSaveInput:V,initialMessage:H,resumeSessionId:z,cachedUserName:K,initialAvailableModels:U,refreshAvailableModels:B,credentialHints:F,authResolver:D}),{exitOnCtrlC:!1,patchConsole:!0}),_,M,T=!1,k=()=>{if(!_)_=()=>{process.exit(0)},process.on("SIGINT",_);if(!M)M=setTimeout(()=>{P.debug("[InkREPL] Graceful shutdown timed out after 5s \u2014 forcing exit"),process.exit(0)},5000),M.unref?.()},R=()=>{if(T)return;T=!0,process.removeListener("SIGINT",R),k(),O.release().catch((a)=>{P.warn("[InkREPL] Local-control release during SIGINT failed:",a?.message??a)}),N()};process.on("SIGINT",R);try{await A(),k();try{let{sessionId:a,sessionHistory:o,memoriaSession:u,memoriaFactory:w}=w9;if(o&&a)try{o.markCompleted(a)}catch(m){P.warn("[InkREPL] Failed to mark session completed:",m?.message??m)}if(u&&a)try{await u.endSession(a)}catch(m){P.warn("[InkREPL] Failed to end Memoria session:",m?.message??m)}if(w)try{await w.closeAll()}catch(m){P.warn("[InkREPL] Failed to close Memoria factory:",m?.message??m)}if(w9.jsonlLogger){try{await w9.jsonlLogger.close()}catch(m){P.warn("[InkREPL] Failed to close JSONL logger:",m?.message??m)}w9.jsonlLogger=null}}finally{if(M)clearTimeout(M),M=void 0}}finally{if(process.removeListener("SIGINT",R),_)process.removeListener("SIGINT",_);await O.release().catch((a)=>{P.warn("[InkREPL] Local-control release on shutdown failed:",a?.message??a)})}try{await X.shutdown()}catch(a){P.warn("[InkREPL] Shutdown failed:",a?.message)}}var w9;var Nm=E(()=>{h60();P1();EV();zh();x60();Oh();Ph();V8();Th();E0();V8();b0();Z4();V8();S0();aY();Rh();Y4();AV();ch();lh();zZ0();Zj();n30();jA();i30();r30();w9={sessionId:null,sessionHistory:null,memoriaSession:null,memoriaFactory:null,jsonlLogger:null}});import{Command as Ih0}from"commander";async function Xj(){let $=x9(),Z=new T9($),X=new i8($).toFactory(),Y=new R8(Z,X);return await Y.initialize(),Y}function OD(){let $=new Ih0("arions").description("Manage Arion personas");return $.command("list").description("List all Arions with status").option("--status <status>","Filter by status (active, resting, retired)").action(async(Z)=>{try{let X=await(await Xj()).list(),Y=Z.status?X.filter((Q)=>Q.status===Z.status):X;if(Y.length===0){console.log("No Arions found.");return}console.log(`
|
|
5488
|
+
${w0}`)])}}catch(h){M((i)=>[...i,Y$(`Failed to list memories: ${h.message}`)])}break}case"forget":{try{let{resultFrame:h}=await T0("memory.forget",{id:t??""});if(!h)throw Error("memory.forget produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result;if(M((Q0)=>[...Q0,l0(String(i.message??"Memory deleted."))]),typeof i.count==="number")K0(i.count)}catch(h){M((i)=>[...i,Y$(`Failed to delete memory: ${h.message}`)])}break}case"daemon":{let h=(t??"").trim().toLowerCase();if(h==="start"||h==="stop"||h==="restart"){await Du(h);break}if(h.length>0){M((i)=>[...i,l0("Usage: /daemon [start|stop|restart]")]);break}(async()=>{await fT(),_$(null),u0((i)=>(i??0)+1)})();break}case"terminal-setup":{try{let{resultFrame:h}=await T0("system.terminal_setup",{});if(!h)throw Error("system.terminal_setup produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result;M((Q0)=>[...Q0,l0(i.supported===!1?i.message??"terminal-setup is unavailable.":i.output??"")])}catch(h){M((i)=>[...i,Y$(`terminal-setup failed: ${h.message}`)])}break}case"login":{try{await Y1("auth.login",t??"")}catch(h){M((i)=>[...i,Y$(`Login failed: ${h.message}`)])}break}case"logout":{try{await Y1("auth.logout",t??"")}catch(h){M((i)=>[...i,Y$(`Logout failed: ${h.message}`)])}break}case"theme":{let h=(t??"").trim().toLowerCase();if(!h){P0((i)=>(i??0)+1);break}try{let{resultFrame:i}=await T0("config.theme.set",{theme:h});if(!i)throw Error("config.theme.set produced no result frame");if(!i.ok)throw Error(i.error.message);M((Q0)=>[...Q0,l0(`Theme changed to ${BA(h)?.displayName??h} (${h})`)])}catch(i){let Q0=b7();M((j0)=>[...j0,Y$(`Unknown theme "${h}". Available: ${Q0.join(", ")}. ${i.message}`)])}break}case"invite":{await sQ0(t?.trim());break}case"join":{let h=t?.trim();if(h)await Ou(h);else A6(null),_T((i)=>(i??0)+1);break}case"peers":{Yu((h)=>(h??0)+1);break}case"clients":{Gu((h)=>(h??0)+1);break}default:{M((h)=>[...h,l0(`Unknown command: /${y}. Type /help for available commands.`)]);break}}},[Z,J,X,o,V0,Hu,D,T0,L,q6,M5,c2,bT,V,l6,$,tQ]);X8.current=Bu;let lQ0=e0(async(y,t)=>{if(t==="mention")return;try{if(t==="become"){let{resultFrame:h}=await T0("arion.become",{name:y});if(!h)throw Error("arion.become produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result.arion;if(!i)throw Error(`Arion ${y} not found`);let j0=H$().preferredTier||"balanced",w0=ZZ(j0,D),M0=i.preferredModel?qL(i.preferredModel):void 0,a0=(M0?JZ(M0,D).shortName:void 0)||w0?.shortName||V;u(a0),w.current=a0,M((b8)=>[...b8,l0(`Switched to ${i.name} (model: ${a0})`)]);let o$=await(await q6()).count();K0(o$)}else if(t==="rest"){let{resultFrame:h}=await T0("arion.rest",{name:y});if(!h)throw Error("arion.rest produced no result frame");if(!h.ok)throw Error(h.error.message);M((i)=>[...i,l0(`${y} is now resting`)])}else if(t==="wake"){let{resultFrame:h}=await T0("arion.wake",{name:y});if(!h)throw Error("arion.wake produced no result frame");if(!h.ok)throw Error(h.error.message);M((i)=>[...i,l0(`${y} is now awake`)])}await l6()}catch(h){M((i)=>[...i,Y$(`Error: ${h.message}`)])}},[D,T0,q6,V,l6]),Fu=e0(async(y,t)=>{let{resultFrame:h}=await T0("model.set",{model:y});if(!h)throw Error("model.set produced no result frame");if(!h.ok)throw Error(h.error.message);let i=h.result.currentModel??y;if(u(i),w.current=i,t){I(t);let Q0=H$();Q0.effortLevel=t,I$(Q0)}M((Q0)=>[...Q0,l0(`Switched to ${i}`)])},[T0]);sQ.current=Fu;let kT=e0(async(y)=>{try{let{resultFrame:t}=await T0("config.theme.set",{theme:y.name});if(!t)throw Error("config.theme.set produced no result frame");if(!t.ok)throw Error(t.error.message);M((h)=>[...h,l0(`Theme changed to ${y.displayName} (${y.name})`)])}catch(t){M((h)=>[...h,Y$(`Theme change failed: ${t.message}`)])}},[T0]),aQ0=m$(kT);aQ0.current=kT;let fT=e0(async()=>{try{let{resultFrame:y}=await T0("daemon.status",{});if(y?.ok){let t=y.result??{},h=t.autonomousLoop??{};return s0({running:!0,port:t.port,nodeId:t.nodeId,runtimeId:t.runtimeId,loopStatus:h.status,clients:t.attachedClients}),!0}}catch{}return s0({running:!1}),!1},[T0]),Du=e0(async(y)=>{_$({start:"Starting daemon\u2026",stop:"Stopping daemon\u2026",restart:"Restarting daemon\u2026"}[y]??`${y}\u2026`);try{let h=y==="restart"?"daemon.restart":y==="start"?"daemon.start":"daemon.stop",{resultFrame:i}=await T0(h,{});if(i&&!i.ok)throw Error(i.error?.message??`${y} failed`);if(y==="stop")s0({running:!1}),M((Q0)=>[...Q0,l0("\u25A0 Daemon stopped.")]);else await fT(),M((Q0)=>[...Q0,l0(y==="restart"?"\u21BB Daemon restarted.":"\u25B6 Daemon started.")])}catch(h){M((i)=>[...i,Y$(`Daemon ${y} failed: ${h.message}`)])}finally{_$(null)}},[T0,fT]),nQ0=e0(async(y)=>{if(y.status==="connected"){try{}catch{}M((i)=>[...i,l0(`\u2713 Already connected to ${y.displayNameSnapshot} (same identity, shared server on port ${y.port}).`)]);return}let t=y.host&&O8(y.host);if(y.transport!=="wan"&&y.host&&!t){M((i)=>[...i,Y$(`Rejected: ${y.host} is not a private LAN address.`)]);return}try{if(!y.principalFingerprint)throw Error(`${y.displayNameSnapshot} did not advertise a principal fingerprint`);if(!y.tlsCaFingerprint)throw Error(`${y.displayNameSnapshot} did not advertise a TLS fingerprint`);if(!y.host||!y.port)throw Error(`${y.displayNameSnapshot} did not advertise a control endpoint`);let{resultFrame:i}=await T0("peer.connect",{nodeId:y.nodeId,displayName:y.displayNameSnapshot,principalFingerprint:y.principalFingerprint,controlEndpoint:{host:y.host,port:y.port,tlsCaFingerprint:y.tlsCaFingerprint,tlsServerIdentity:y.principalFingerprint,protocolVersion:1},transport:y.transport});if(!i)throw Error("peer.connect produced no result frame");if(!i.ok)throw Error(i.error.message);let Q0=i.result.invite;if(!Q0)throw Error("peer.connect returned no invite payload");M((j0)=>[...j0,l0(Q0.mode==="wan_pair"?`Paired with ${Q0.displayNameSnapshot??Q0.nodeId}. Awaiting verified ingress before the runtime marks the peer active.`:`Paired with ${Q0.displayNameSnapshot??Q0.nodeId}. WG tunnel will connect when accepted.`)])}catch(i){M((Q0)=>[...Q0,Y$(`Failed to connect to ${y.displayNameSnapshot}: ${i.message}`)])}},[T0]),iQ0=e0(async()=>{if(!m0)return;let{id:y,nodeId:t,displayNameSnapshot:h}=m0,i=h??t;J$(null),M((Q0)=>[...Q0,l0(`Accepting connection from ${i}...`)]);try{let{resultFrame:Q0}=await T0("peer.pending.respond",{requestId:y,accepted:!0});if(!Q0)throw Error("peer.pending.respond produced no result frame");if(!Q0.ok)throw Error(Q0.error.message);let j0=Q0.result.response??{};if(j0.error)throw Error(j0.error);if(j0.accepted)M((w0)=>[...w0,l0(`Connected to ${i}. Tunnel established.`)])}catch(Q0){M((j0)=>[...j0,Y$(`Failed to accept connection: ${Q0.message}`)])}},[T0,m0]),oQ0=e0(()=>{if(!m0)return;let{id:y,nodeId:t,displayNameSnapshot:h}=m0,i=h??t;J$(null),M((Q0)=>[...Q0,l0(`Rejected connection from ${i}.`)]),T0("peer.pending.respond",{requestId:y,accepted:!1}).catch(()=>{})},[T0,m0]),sQ0=e0(async(y)=>{try{let{resultFrame:t}=await T0("peer.invite",{...y?.trim()?{inviteLabel:y.trim()}:{}});if(!t)throw Error("peer.invite produced no result frame");if(!t.ok)throw Error(t.error.message);let h=t.result.invite;if(!h)throw Error("peer.invite returned no invite payload");uJ(h)}catch(t){M((h)=>[...h,Y$(`Failed to create invite: ${t.message}`)])}},[T0]),Ou=e0(async(y)=>{try{let{resultFrame:t}=await T0("peer.accept_invite",{inviteToken:y});if(!t)throw Error("peer.accept_invite produced no result frame");if(!t.ok)throw Error(t.error.message);let h=t.result.accepted;if(!h)throw Error("peer.accept_invite returned no accepted payload");A6(null),M((i)=>[...i,l0(`Paired with ${h.displayNameSnapshot??h.nodeId}.`)])}catch(t){let h=`Failed to accept invite: ${t.message}`;A6(h),M((i)=>[...i,Y$(h)])}},[T0]);m8(()=>{let y=!0,t=null;return(async()=>{if(t=setInterval(async()=>{try{let{resultFrame:Q0}=await T0("peer.pending.list",{});if(!y||!Q0?.ok)return;let j0=Q0.result.requests??[];if(j0.length&&!m0)J$(j0[0])}catch(Q0){if(Dm(Q0)){if(t)clearInterval(t);mQ.current=null;return}}},5000),mQ.current=t,!y)clearInterval(t),t=null,mQ.current=null})(),()=>{if(y=!1,t)clearInterval(t);mQ.current=null}},[T0,m0]);let rQ0=e0(async(y)=>{I0(y),await EO()},[EO]),tQ0=e0(async(y)=>{if(R0==="forget")try{let{resultFrame:t}=await T0("memory.forget",{id:y.id});if(!t)throw Error("memory.forget produced no result frame");if(!t.ok)throw Error(t.error.message);let h=y.content.length>50?y.content.slice(0,50)+"...":y.content;M((i)=>[...i,l0(`Forgot: "${h}"`)]),await EO()}catch(t){M((h)=>[...h,Y$(`Error forgetting: ${t.message}`)])}},[T0,R0,EO]),eQ=e0(()=>{TQ(null),CQ(null),RQ(null),wQ(null),SQ(null),bQ(null),kQ(null),fQ(null),UK(null),yQ(null),hQ(null),y2(!1),BK(!1),UO(null),xQ(!1),H7(null),gQ(!1),cJ(null),v2(null),FO(null),DK(null)},[]),_K=e0((y)=>{let t=y,h=t.success!==!1,i=t.message??(h?"Authentication updated.":"Auth failed.");M((Q0)=>[...Q0,h?l0(i):Y$(i)])},[]),TO=e0(async(y)=>{if(eQ(),y.interaction.kind==="selection"){cJ({interactionId:y.interactionId,interaction:y.interaction}),FO(y.interaction.prompt),v2(y.interaction.options.map((t)=>({id:t.id,label:t.label,description:t.description,method:t.id,status:t.description?.includes("connected")?"connected":t.description?.includes("available")?"available":"none"})));return}if(y.interaction.kind==="credential_input"){let t=y.interaction.fields[0];if(!t)throw Error("Auth interaction requires at least one credential field");if(y.interaction.mode==="oauth_authorization_code"&&y.interaction.authorizeUrl&&y.interaction.provider){cJ({interactionId:y.interactionId,interaction:y.interaction}),RQ(y.interaction.provider),wQ(y.interaction.authorizeUrl),SQ(y.interaction.expectedState??null),bQ(t.key);return}cJ({interactionId:y.interactionId,interaction:y.interaction}),DK({title:t.label,hint:y.interaction.prompt,fieldKey:t.key});return}if(y.interaction.kind==="oauth_device"){cJ({interactionId:y.interactionId,interaction:y.interaction}),kQ(y.interaction.provider??"github-copilot"),fQ(y.interaction.profileLabel??null),UK(y.interaction.verificationUri),yQ(y.interaction.userCode);return}},[_K,eQ,N0]),Y1=e0(async(y,t)=>{eQ();let{interactionFrame:h,resultFrame:i}=await T0(y,{args:t});if(h&&h.source==="auth"){await TO(h);return}if(!i)throw Error(`${y} produced no result frame`);if(i.ok){_K(i.result);return}throw Error(i.error.message)},[_K,eQ,T0,TO]),u2=e0(async(y)=>{if(!FK)throw Error("No pending auth interaction to respond to");let{interactionId:t}=FK,h=null,i=null;for await(let Q0 of N0.dispatch({kind:"interaction.respond",requestId:`auth:${pH()}`,interactionId:t,response:y}))if(Q0.kind==="interaction.required"&&Q0.source==="auth")h=Q0;else if(Q0.kind==="result")i=Q0;if(h){await TO(h);return}if(eQ(),!i)throw Error("auth interaction produced no result frame");if(i.ok){_K(i.result);return}if(i.error.code==="INTERACTION_REQUIRED")return;M((Q0)=>[...Q0,Y$(`Login failed: ${i.error.message}`)])},[_K,eQ,N0,FK,TO]),eQ0=FD(()=>qL(o)?.maxContextTokens,[o]),$G0=FD(()=>{return q.map((y,t)=>{let i=(Array.isArray(y.content)?y.content:[y.content]).filter((Q0)=>typeof Q0==="object"&&Q0!==null&&("type"in Q0)&&Q0.type==="text").map((Q0)=>Q0.text).join("").trim();if(!i||y.role==="system")return null;return{index:t,role:y.role,text:i,arion:y.arion?.name,createdAt:y.createdAt}}).filter((y)=>y!==null)},[q]),[ZG0,Yl0]=p0(void 0),[JG0,yT]=p0(void 0),XG0=e0(async(y,t)=>{if(!C$.current||j.current)return;let h=0;for(let Q0=0;Q0<y;Q0++){let j0=q[Q0];if(j0&&j0.role!=="system")h++}let i=h;try{let{resultFrame:Q0}=await T0("session.fork",{sessionId:C$.current,messageLimit:i});if(!Q0?.ok){let w0=Q0?.error?.message??"Fork failed";M((M0)=>[...M0,Y$(`Edit failed: ${w0}`)]);return}let j0=Q0.result;await c2(j0.newSessionId),yT(t)}catch(Q0){M((j0)=>[...j0,Y$(`Edit failed: ${Q0.message}`)])}},[q,T0,c2]);return Om(v60,{staticRenderEpoch:CT,session:$,model:o,maxContextTokens:eQ0,banner:Om($b,{onComplete:()=>{},skipAnimation:!0,version:dM,whatsNew:g60}),messages:q,previewMessages:A,isStreaming:S,queuedMessage:g,onCancelQueuedMessage:mQ0,responseTime:$0,commands:Mh,arions:x,models:kQ0,memories:z0,memoryBrowserMode:R0,isLoadingMemories:Z0,userName:J0,memoryCount:n,metrics:LO,displayMode:PT,displayConfig:CZ,showThinking:CZ.showThinking,showCosts:CZ.showCosts,showTraces:CZ.showTraces,pipelineTiming:AO,spans:TT,activeArion:wT,onSubmit:M5,onCommand:Bu,onSelectArion:lQ0,onSelectModel:Fu,onSelectMemory:tQ0,onOpenMemoryBrowser:rQ0,onToggleThinking:uQ0,onToggleCosts:pQ0,onToggleTraces:dQ0,onCycleDisplayMode:cQ0,sessions:B0,onSelectSession:c2,onLoadSessions:fQ0,onSearchSessions:yQ0,onLoadMoreSessions:vQ0,openSessionOverlaySignal:C0,openThemeOverlaySignal:L0,openSoundOverlaySignal:c0,openDaemonOverlaySignal:A0,daemonStatus:U$,daemonActionStatus:V$,onDaemonAction:Du,connectionState:r8,inviteShare:NK?{inviteToken:NK.inviteToken,inviteLabel:NK.pendingInvite.inviteLabel,expiresAt:NK.pendingInvite.expiresAt??null}:null,onInviteShareClose:()=>{uJ(null)},openJoinInviteOverlaySignal:DO,onJoinInviteSubmit:Ou,onJoinInviteCancel:()=>{A6(null)},joinInviteError:LK,onSelectTheme:kT,inputHistory:W,onSaveInput:H,openMessageEditOverlaySignal:ZG0,editableMessages:$G0,onEditMessage:XG0,prefillInput:JG0,onPrefillConsumed:()=>yT(void 0),obsCtx:qO,onCancel:gQ0,approvalRequest:AK,onApprovalChoice:(y)=>{if(AK)AK.resolve(y),qK(null)},effortLevel:m,showAutonomySelector:JO,autonomyLevel:HK,onAutonomySelect:(y)=>{mJ(y),jQ(!1),M((t)=>[...t,l0(`Autonomy level set to: ${y}`)])},onCycleAutonomy:()=>{let y=iZ.indexOf(f2.current),t=iZ[(y+1)%iZ.length];mJ(t)},onCycleEffort:()=>{let y=["low","medium","high","max"],t=y.indexOf(m),h=y[(t+1)%y.length];I(h);let i=H$();i.effortLevel=h,I$(i)},onAutonomyCancel:()=>{jQ(!1)},authInteractionOptions:NT,authInteractionTitle:LT,onAuthInteractionSelect:async(y)=>{await u2({kind:"selection",selected:y})},onAuthInteractionCancel:async()=>{await u2({kind:"cancel"})},authInteractionInput:q5?{title:q5.title,...q5.hint?{hint:q5.hint}:{}}:null,onAuthInteractionInputSubmit:async(y)=>{if(!q5)return;await u2({kind:"credential_input",values:{[q5.fieldKey]:y}})},onAuthInteractionInputCancel:async()=>{await u2({kind:"cancel"})},loginPickerProviders:XO,onLoginProviderSelect:async(y)=>{TQ(null),await Y1("auth.login",y.id)},onLoginPickerCancel:()=>{TQ(null)},anthropicMethodOptions:vQ,onAnthropicMethodSelect:async(y)=>{hQ(null),await Y1("auth.login",`anthropic --method ${y.id}`)},onAnthropicMethodCancel:()=>hQ(null),anthropicKeyInputVisible:KO,onAnthropicKeySubmit:async(y)=>{y2(!1),await Y1("auth.login",`anthropic ${y}`)},onAnthropicKeyCancel:()=>y2(!1),anthropicSetupTokenVisible:zO,onAnthropicSetupTokenSubmit:async(y)=>{BK(!1),await Y1("auth.login",`anthropic --setup-token ${y}`)},onAnthropicSetupTokenCancel:()=>BK(!1),openaiMethodOptions:FT,onOpenAIMethodSelect:async(y)=>{UO(null),await Y1("auth.login",`openai --method ${y.id}`)},onOpenAIMethodCancel:()=>UO(null),openaiKeyInputVisible:DT,onOpenAIKeySubmit:async(y)=>{xQ(!1),await Y1("auth.login",`openai ${y}`)},onOpenAIKeyCancel:()=>xQ(!1),googleMethodOptions:BO,onGoogleMethodSelect:async(y)=>{H7(null),await Y1("auth.login",`google --method ${y.id}`)},onGoogleMethodCancel:()=>H7(null),googleKeyInputVisible:OT,onGoogleKeySubmit:async(y)=>{gQ(!1),await Y1("auth.login",`google ${y}`)},onGoogleKeyCancel:()=>gQ(!1),copilotSourceOptions:YO,onCopilotSourceSelect:async(y)=>{CQ(null),await Y1("auth.login",`github-copilot --from ${y.id}`)},onCopilotSourceCancel:()=>CQ(null),oauthProvider:KK,oauthAuthorizeUrl:QO,oauthExpectedState:GO,onOAuthComplete:(y)=>{RQ(null),wQ(null),SQ(null),bQ(null),M((t)=>[...t,y.success?l0(y.message):Y$(y.message)])},onOAuthCodeSubmit:async(y)=>{if(!IQ)throw Error("No pending OAuth field key");await u2({kind:"credential_input",values:{[IQ]:y}})},onOAuthCancel:async()=>{await u2({kind:"cancel"})},copilotDeviceProvider:VO,copilotDeviceProfileLabel:WO,copilotDeviceVerificationUri:zK,copilotDeviceUserCode:HO,onCopilotDeviceComplete:(y)=>{kQ(null),fQ(null),UK(null),yQ(null),M((t)=>[...t,y.success?l0(y.message):Y$(y.message)])},onCopilotDeviceApprove:async()=>{await u2({kind:"oauth_device",acknowledged:!0})},onCopilotDeviceCancel:async()=>{await u2({kind:"cancel"})},nearbyPeers:h2,localClients:OK,onSelectPeer:nQ0,onSelectClient:()=>{},onPeerCancel:()=>{},onClientsCancel:()=>{},openPeersOverlaySignal:ET,openClientsOverlaySignal:Qu,incomingPairRequest:m0,onAcceptPairRequest:iQ0,onRejectPairRequest:oQ0,onCancelPairing:void 0,meshMessageCount:EK,runtimeSocket:dQ,clientId:N0?.getAttachedCredentials()?.clientId??null,clientAuthToken:N0?.getAttachedCredentials()?.clientAuthToken??null,resolveCredentials:async()=>{try{return N0?.getAttachedCredentials()??null}catch{return null}}})}async function DD($,Z,J,X,Y,Q,G=[],V,W,H,K,z,U,B,F,D){let O=new Fm(Y),L=W,q=O.getControl();if(W&&!(W instanceof FH)&&q!=null)L=new FH(W,q);let{waitUntilExit:A,unmount:N}=Mh0(Om(Sh0,{session:$,manager:Z,router:J,aria:X,localControlManager:O,cliContext:Q,sessionHistory:L,inputHistory:G,onSaveInput:V,initialMessage:H,resumeSessionId:z,cachedUserName:K,initialAvailableModels:U,refreshAvailableModels:B,credentialHints:F,authResolver:D}),{exitOnCtrlC:!1,patchConsole:!0}),_,M,T=!1,k=()=>{if(!_)_=()=>{process.exit(0)},process.on("SIGINT",_);if(!M)M=setTimeout(()=>{P.debug("[InkREPL] Graceful shutdown timed out after 5s \u2014 forcing exit"),process.exit(0)},5000),M.unref?.()},R=()=>{if(T)return;T=!0,process.removeListener("SIGINT",R),k(),O.release().catch((a)=>{P.warn("[InkREPL] Local-control release during SIGINT failed:",a?.message??a)}),N()};process.on("SIGINT",R);try{await A(),k();try{let{sessionId:a,sessionHistory:o,memoriaSession:u,memoriaFactory:w}=w9;if(o&&a)try{o.markCompleted(a)}catch(m){P.warn("[InkREPL] Failed to mark session completed:",m?.message??m)}if(u&&a)try{await u.endSession(a)}catch(m){P.warn("[InkREPL] Failed to end Memoria session:",m?.message??m)}if(w)try{await w.closeAll()}catch(m){P.warn("[InkREPL] Failed to close Memoria factory:",m?.message??m)}if(w9.jsonlLogger){try{await w9.jsonlLogger.close()}catch(m){P.warn("[InkREPL] Failed to close JSONL logger:",m?.message??m)}w9.jsonlLogger=null}}finally{if(M)clearTimeout(M),M=void 0}}finally{if(process.removeListener("SIGINT",R),_)process.removeListener("SIGINT",_);await O.release().catch((a)=>{P.warn("[InkREPL] Local-control release on shutdown failed:",a?.message??a)})}try{await X.shutdown()}catch(a){P.warn("[InkREPL] Shutdown failed:",a?.message)}}var w9;var Nm=E(()=>{h60();P1();EV();zh();x60();Oh();Ph();V8();Th();E0();V8();b0();Z4();V8();S0();aY();Rh();Y4();AV();ch();lh();zZ0();Zj();n30();jA();i30();r30();w9={sessionId:null,sessionHistory:null,memoriaSession:null,memoriaFactory:null,jsonlLogger:null}});import{Command as Ih0}from"commander";async function Xj(){let $=x9(),Z=new T9($),X=new i8($).toFactory(),Y=new R8(Z,X);return await Y.initialize(),Y}function OD(){let $=new Ih0("arions").description("Manage Arion personas");return $.command("list").description("List all Arions with status").option("--status <status>","Filter by status (active, resting, retired)").action(async(Z)=>{try{let X=await(await Xj()).list(),Y=Z.status?X.filter((Q)=>Q.status===Z.status):X;if(Y.length===0){console.log("No Arions found.");return}console.log(`
|
|
5488
5489
|
Arions:`),console.log("\u2500".repeat(60));for(let Q of Y){let G=Q.status==="active"?"\u25CF":Q.status==="resting"?"\u25CB":"\xD7";if(console.log(`${G} ${Q.name} [${Q.status}]`),console.log(` Style: ${Q.personality.style}`),console.log(` Traits: ${Q.personality.traits.join(", ")}`),Q.skills.length>0)console.log(` Skills: ${Q.skills.map((V)=>V.name).join(", ")}`);console.log()}}catch(J){console.error("Error listing Arions:",J.message),process.exit(1)}}),$.command("hatch").description("Create a new Arion").argument("<name>","Name for the new Arion").option("-t, --traits <traits>","Comma-separated personality traits").option("-s, --style <style>","Communication style (formal, casual, technical, friendly)").option("--skills <skills>","Comma-separated skills").action(async(Z,J)=>{try{let X=await Xj(),Y=J.traits?J.traits.split(",").map((W)=>W.trim()):["helpful","curious"],Q=J.style||"friendly",G=J.skills?J.skills.split(",").map((W)=>({name:W.trim(),level:"intermediate"})):[],V=await X.hatch({name:Z,personality:{traits:Y,style:Q},skills:G,createdBy:"cli"});if(console.log(`
|
|
5489
5490
|
Hatched new Arion: ${V.name}`),console.log(` ID: ${V.id}`),console.log(` Status: ${V.status}`),console.log(` Style: ${V.personality.style}`),console.log(` Traits: ${V.personality.traits.join(", ")}`),V.skills.length>0)console.log(` Skills: ${V.skills.map((W)=>W.name).join(", ")}`)}catch(X){console.error("Error hatching Arion:",X.message),process.exit(1)}}),$.command("become").description("Switch to an Arion").argument("<name>","Name of the Arion to switch to").action(async(Z)=>{try{let J=await Xj(),X=await J.get(Z);if(!X)console.error(`Arion not found: ${Z}`),process.exit(1);if(X.status==="retired")console.error(`Cannot become retired Arion: ${Z}`),process.exit(1);if(X.status==="resting")await J.wake(Z);let Y=H$();Y.activeArion=X.name,I$(Y),console.log(`
|
|
5490
5491
|
Switched to Arion: ${X.name}`),console.log(` Style: ${X.personality.style}`),console.log(` Traits: ${X.personality.traits.join(", ")}`)}catch(J){console.error("Error switching Arion:",J.message),process.exit(1)}}),$.command("retire").description("Retire an Arion (permanent)").argument("<name>","Name of the Arion to retire").option("--confirm","Confirm retirement (required)").action(async(Z,J)=>{try{if(!J.confirm)console.error("Retirement is permanent. Use --confirm to proceed."),process.exit(1);await(await Xj()).retire(Z,{confirm:!0});let Y=H$();if(Y.activeArion?.toLowerCase()===Z.toLowerCase())delete Y.activeArion,I$(Y);console.log(`
|
|
@@ -5784,7 +5785,7 @@ Additional context: ${$.additionalContext}`:`Continue the previous task: ${Y.tas
|
|
|
5784
5785
|
|
|
5785
5786
|
Token security model: bearer credential in plaintext payload form. Share only via secure channels. They can join with: aria pairing join <token>`,data:{token:X.token,...Y?{displayName:Y}:{}}}}catch(X){return{success:!1,message:`invite failed: ${X.message}`}}case"revoke":{if(!$.nodeId)return{success:!1,message:"nodeId is required for revoke action"};if(!J.revokePeer(G0.parse($.nodeId)))return{success:!1,message:`node "${$.nodeId}" not found`};return{success:!0,message:`Revoked access for "${$.nodeId}". They will be disconnected.`,data:{nodeId:$.nodeId,revoked:!0}}}case"list_peers":{let X=J.listPeers();if(X.length===0)return{success:!0,message:"No peers connected. Use manage_network(invite) to add peers.",data:{peers:[]}};let Y=X.map((Q)=>`${Q.displayNameSnapshot??Q.nodeId} (membership=${Q.membershipStatus??Q.status}, route=${Q.routeOwnership??"current"}, session=${Q.sessionState??"none"}, delivery=${Q.deliveryReadiness??"cannot_address"}) \u2014 ${Q.endpointHost??"unknown"}:${Q.endpointPort??"?"}`).join(`
|
|
5786
5787
|
`);return{success:!0,message:`${X.length} peer(s):
|
|
5787
|
-
${Y}`,data:{peers:X}}}case"status":{let X=J.status(),Y=X.signingPublicKey??null;return{success:!0,message:X.configured?`Network active. Node: ${X.nodeId?.slice(0,12)??"unknown"}... Transport: ${X.transportPublicKey?.slice(0,12)??"unknown"}... Port: ${X.listenPort}. External: ${X.externalEndpoint?`${X.externalEndpoint.address}:${X.externalEndpoint.port}`:"unknown"}. Peers: ${X.activePeers} trusted / ${X.totalPeers} total. Sessions: ${X.connectedPeers??0} connected, ${X.handshakingPeers??0} handshaking. Delivery: ${X.queueOnlyPeers??0} queue-only, ${X.supersededPeers??0} superseded.`+(Y?` Signing key: ${Y.slice(0,12)}...`:""):"Network not configured. It will be created automatically on next startup.",data:{...X,signingPublicKey:Y}}}default:return{success:!1,message:`Unknown action: ${$.action}`}}}}),eu0=s8({name:"list_clients",description:"List same-home attached clients that share this runtime. Use this before sending a direct local message to another attached terminal by exact clientId.",parameters:aD.object({}),category:"arion",riskLevel:"safe",isReadOnly:!0,execute:async($,Z)=>{let X=Z.networkControl?.listAttachedClients;if(!X)return{success:!1,message:"Same-home client directory is not available for this runtime."};let Y=await Promise.resolve(X()),Q=Y.find((V)=>V.self)??null,G=Y.filter((V)=>!V.self);if(Y.length===0)return{success:!0,message:"No same-home attached clients are currently available.",data:{clients:[],otherClients:[],selfClient:null}};return{success:!0,message:G.length>0?`${G.length} other same-home client(s) available`:"No other same-home attached clients are currently available.",data:{clients:Y,otherClients:G,selfClient:Q}}}}),rj=[tu0,eu0]});var $p0,kc;var fc=E(()=>{K9();$p0={name:"deploy",description:"Deploy ARIA to a remote machine via SSH. Detects OS, installs Node.js + bun, clones/syncs repo, builds, discovers/provisions TLS certs, opens firewall ports, configures ~/.aria, and starts the daemon. Returns host, port, fingerprint, and TLS type.",category:"arion",parameters:{type:"object",properties:{target:{type:"string",description:"SSH target (e.g. 'claude@10.0.0.1' or 'hostname')"},repo_url:{type:"string",description:"Git repo URL (default: current repo origin)"},branch:{type:"string",description:"Branch to deploy (default: main)"},arion_name:{type:"string",description:"Arion identity name (default: hostname of target)"},coordination_url:{type:"string",description:"Coordination server URL for mesh registration"},ssh_key_path:{type:"string",description:"Path to SSH private key (default: ~/.ssh/id_ed25519)"},commit_hash:{type:"string",description:"Git commit hash to checkout after clone (pins exact code version, prevents MITM on branch refs)"},verify_signatures:{type:"boolean",description:"Verify GPG signature on HEAD commit after checkout. Fails deploy if signature is invalid or missing."}},required:["target"]},riskLevel:"dangerous",requiresConfirmation:!0,isReadOnly:!1,loadingTier:"always",execute:Hc},kc=[$p0]});var Zp0,Jp0,Xp0,Yp0,Qp0,Gp0,Vp0,Wp0,Hp0,Kp0,zp0,Up0,ej;var $T=E(()=>{K9();Zp0={name:"ask_user",description:"Ask the user clarifying questions. Supports optional multiple-choice answers. Use when you need user input to proceed.",category:"meta",parameters:{type:"object",properties:{questions:{type:"array",description:"List of questions to ask the user",items:{type:"object",properties:{question:{type:"string",description:"The question to ask"},options:{type:"array",items:{type:"string"},description:"Optional multiple-choice answers"}},required:["question"]}}},required:["questions"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:xD},Jp0={name:"quest_update",description:"Create, update, or complete quests (task tracking). Quests persist in a structured database across sessions.",category:"meta",parameters:{type:"object",properties:{quests:{type:"array",description:"List of quests to create or update",items:{type:"object",properties:{id:{type:"string",description:"Quest ID (omit to create a new quest)"},title:{type:"string",description:"Quest title"},status:{type:"string",enum:["open","active","blocked","done"],description:"Quest status: open (ready), active (in progress), blocked, done"},priority:{type:"number",description:"Priority 0-4 (0 = highest, default 2)",minimum:0,maximum:4},blocked_by:{type:"string",description:"ID of quest blocking this one"},notes:{type:"string",description:"Progress notes or context"}},required:[]}}},required:["quests"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:gD},Xp0={name:"quest_list",description:"List current quests with their status, priority, and dependencies.",category:"meta",parameters:{type:"object",properties:{status:{type:"string",enum:["all","open","active","blocked","done"],description:"Filter by status (default: all)",default:"all"}},required:[]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:mD},Yp0={name:"search",description:"Search for tools, skills, and capabilities across Memoria, local skill files, skill registries, and optional web/package sources.",category:"meta",parameters:{type:"object",properties:{query:{type:"string",description:"What to find \u2014 tool name, skill name, or capability description"},sources:{type:"array",items:{type:"string",enum:["memoria","local","registry","web"]},default:["memoria","local","registry"],description:"Where to search. memoria=learned tools/skills, local=SKILL.md files, registry=skills.sh+clawhub, web=npm/brew+general"},limit:{type:"number",minimum:1,maximum:50,default:10}},required:["query"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:DQ},Qp0={name:"learn_tool",description:"Learn a CLI tool from `<command> --help` and persist it as callable tool knowledge. (Deprecated \u2014 use learn instead)",category:"meta",parameters:{type:"object",properties:{command:{type:"string",description:"CLI command name (supports subcommands)"},name:{type:"string"},description:{type:"string"},category:{type:"string",enum:["filesystem","code","shell","web","data","memory","meta","arion"]}},required:["command"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:($,Z)=>I2({source:{type:"cli",command:String($.command??"")}},Z)},Gp0={name:"learn_skill",description:"Learn a skill from a SKILL.md file or inline content and persist it in Memoria. (Deprecated \u2014 use learn instead)",category:"meta",parameters:{type:"object",properties:{path:{type:"string",description:"Path to SKILL.md (optional if using inline content)"},name:{type:"string"},description:{type:"string"},content:{type:"string"},tags:{type:"array",items:{type:"string"}},toolIds:{type:"array",items:{type:"string"}}},required:[]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:($,Z)=>I2({source:{type:"file",path:String($.path??"")}},Z)},Vp0={name:"learn",description:"Backward-compatible learning tool. Delegates to learn_tool (CLI) or learn_skill (file).",category:"meta",parameters:{type:"object",properties:{source:{type:"object",properties:{type:{type:"string",enum:["cli","file"]},command:{type:"string"},path:{type:"string"}},required:["type"]}},required:["source"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:I2},Wp0={name:"create_tool",description:"Create a reusable script-backed tool and save it to Memoria for future discovery/use.",category:"meta",parameters:{type:"object",properties:{name:{type:"string"},description:{type:"string"},command:{type:"string",description:"Shell command to wrap (optional if script provided)"},script:{type:"string",description:"Script body to write (optional if command provided)"},argsSchema:{type:"object",additionalProperties:!0},tags:{type:"array",items:{type:"string"}}},required:["name","description"]},riskLevel:"dangerous",isReadOnly:!1,loadingTier:"always",execute:cD},Hp0={name:"create_skill",description:"Create a reusable skill/procedure and optionally link it to the current arion profile.",category:"meta",parameters:{type:"object",properties:{name:{type:"string"},description:{type:"string"},content:{type:"string"},level:{type:"string",enum:["beginner","intermediate","advanced","expert"]},tags:{type:"array",items:{type:"string"}},toolIds:{type:"array",items:{type:"string"}}},required:["name","description","content"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:uD},Kp0={name:"use_skill",description:"Retrieve a learned skill by name/id and record its execution metrics.",category:"meta",parameters:{type:"object",properties:{name:{type:"string"},skillId:{type:"string"},success:{type:"boolean",default:!0},durationMs:{type:"number"},notes:{type:"string"}},required:[]},riskLevel:"safe",isReadOnly:!1,loadingTier:"always",execute:pD},zp0={name:"restart",description:"Restart ARIA through the RelaunchSupervisor. Use when you need to pick up code changes after a build, recover from a corrupted state, or when explicitly asked to restart. Fails closed when no supervisor is attached.",category:"meta",parameters:{type:"object",properties:{reason:{type:"string",description:"Why the restart is needed (logged for diagnostics)"}}},riskLevel:"dangerous",requiresConfirmation:!0,loadingTier:"always",execute:Wc},Up0={name:"self_diagnose",description:"Gather comprehensive diagnostic context for debugging ARIA's own errors, crashes, and runtime issues. Returns structured data from configs, error logs, crash dumps, databases, active quests, sessions, network, and model state \u2014 all in one call. Use this as the first step when investigating any ARIA bug or unexpected behavior.",category:"meta",parameters:{type:"object",properties:{focus:{type:"string",description:"Optional keyword to filter errors/crashes (e.g. 'quest_update', 'OOM', 'crash')"},sections:{type:"array",items:{type:"string",enum:["runtime","errors","crashes","databases","daemon","network"]},description:"Optional subset of sections to return (default: all 6)"},since:{type:"string",description:"ISO timestamp cutoff \u2014 only show events after this (default: last 1h)"},limit:{type:"number",description:"Max entries per section (default: 10)",default:10}}},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Qc},ej=[Zp0,Jp0,Xp0,Yp0,Vp0,Qp0,Gp0,Wp0,Hp0,Kp0,zp0,Up0]});var Bp0,ZT;var JT=E(()=>{ED();Bp0={name:"session_history",description:"List, search, and manage conversation session history. Actions: 'list' shows recent sessions, 'search' finds sessions by message content (full-text search), 'get' retrieves a full session transcript, 'current' shows current session info, 'stats' shows session statistics, 'delete' removes a session, 'set_title' renames a session.",category:"memory",parameters:{type:"object",properties:{action:{type:"string",enum:["list","search","get","current","stats","delete","set_title"],description:"Action to perform"},query:{type:"string",description:"Search query (required for 'search' action)"},sessionId:{type:"string",description:"Session ID or prefix \u2014 8+ chars for prefix match, full UUID for exact match (required for 'get', 'delete', 'set_title')"},title:{type:"string",description:"New title (required for 'set_title' action)"},limit:{type:"number",description:"Maximum number of results to return (default 20)",default:20},offset:{type:"number",description:"Pagination offset (default 0)",default:0},messageLimit:{type:"number",description:"Maximum messages to return per session for 'get' action (default 50)",default:50}},required:["action"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"deferred",skipApprovalForInput:($)=>{return $?.action!=="delete"},execute:($,Z)=>{return lH($,Z)}},ZT=[Bp0]});import{z as D8}from"zod";var Fp0,XT;var YT=E(()=>{ZK();MR();Fp0=s8({name:"frg",description:"Native fastripgrep tool via napi-rs. Wraps the original frg commands in one tool: init, index, search, update, status, replace, man, completions, watch, and upgrade-safe metadata.",category:"code",riskLevel:"safe",isReadOnly:!1,loadingTier:"always",parameters:D8.object({command:D8.enum(["init","index","search","update","status","replace","man","completions","watch","upgrade"]).describe("Original frg command to run"),pattern:D8.string().optional().describe("Regex pattern for search/replace"),replacement:D8.string().optional().describe("Replacement string for replace"),path:D8.string().optional().describe("Repository or directory to operate on (defaults to current working directory)"),noIndex:D8.boolean().optional().describe("Skip the index and do a brute-force scan for search"),literal:D8.boolean().optional().describe("Treat pattern as a fixed string"),caseInsensitive:D8.boolean().optional().describe("Enable case-insensitive matching"),smartCase:D8.boolean().optional().describe("Use smart-case matching"),filesOnly:D8.boolean().optional().describe("Return only file paths with matches"),count:D8.boolean().optional().describe("Return match counts per file"),maxCount:D8.number().optional().describe("Maximum matches per file"),quiet:D8.boolean().optional().describe("Only report whether a match exists"),context:D8.number().optional().describe("Context lines for search matches"),json:D8.boolean().optional().describe("Compatibility flag matching upstream JSON mode"),glob:D8.string().optional().describe("Glob filter for candidate files"),fileType:D8.string().optional().describe("File extension/type filter"),follow:D8.boolean().optional().describe("Follow symbolic links"),extraPatterns:D8.array(D8.string()).optional().describe("Additional regex patterns combined with OR"),maxFilesize:D8.number().optional().describe("Maximum file size in bytes while indexing/updating/init"),force:D8.boolean().optional().describe("Compatibility flag for forced rebuilds"),write:D8.boolean().optional().describe("Actually apply replace changes instead of previewing"),hook:D8.boolean().optional().describe("Install a post-commit git hook when using init"),shell:D8.enum(["bash","elvish","fish","powershell","zsh"]).optional().describe("Shell target when using completions")}),execute:_z}),XT=[Fp0]});var Dp0,Op0,Np0,Lp0,Ap0,qp0,Ep0,_p0,QT;var GT=E(()=>{Mc();Dp0={name:"rg",description:"Fast text/regex search (ripgrep). SIMD-accelerated, .gitignore-aware. Returns structured JSON matches with file, line, and text. Use for finding strings, patterns, identifiers. Fastest grep available.",category:"code",parameters:{type:"object",properties:{pattern:{type:"string",description:"Search pattern (regex by default)"},path:{type:"string",description:"File or directory to search (default: working dir)"},ignore_case:{type:"boolean",description:"Case-insensitive search (-i)"},smart_case:{type:"boolean",description:"Case-insensitive unless pattern has uppercase (-S)"},fixed_strings:{type:"boolean",description:"Treat pattern as literal string, not regex (-F)"},word_regexp:{type:"boolean",description:"Match whole words only (-w)"},file_type:{type:"string",description:"File type filter: ts, py, rs, go, java, etc. (-t TYPE)"},glob:{type:"string",description:"Glob filter, prefix ! to exclude (-g GLOB)"},context:{type:"number",description:"Context lines around matches (-C NUM)"},max_count:{type:"number",description:"Max matches per file (-m NUM)",default:100},invert:{type:"boolean",description:"Show lines NOT matching (-v)"},files_only:{type:"boolean",description:"Only print file names with matches (-l)"},count:{type:"boolean",description:"Only print match count per file (-c)"},extra_args:{type:"array",items:{type:"string"},description:"Additional rg flags: ['--pcre2','-U','--max-depth=3','--hidden','--no-ignore','--type-not=test']"}},required:["pattern"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Dc},Op0={name:"ug",description:"Text search with fuzzy matching, boolean queries, and archive search (ugrep). Superset of ripgrep features. Use fuzzy for approximate matching (typos), bool for AND/OR/NOT queries, decompress for searching inside zip/tar/gz.",category:"code",parameters:{type:"object",properties:{pattern:{type:"string",description:"Search pattern (regex by default)"},path:{type:"string",description:"File or directory to search (default: working dir)"},ignore_case:{type:"boolean",description:"Case-insensitive (-i)"},smart_case:{type:"boolean",description:"Smart case: insensitive unless uppercase present (-j)"},fixed_strings:{type:"boolean",description:"Literal string matching (-F)"},word_regexp:{type:"boolean",description:"Match whole words only (-w)"},file_type:{type:"string",description:"File type filter (-t TYPE)"},glob:{type:"string",description:"Glob filter (-g GLOB)"},context:{type:"number",description:"Context lines around matches (-C NUM)"},max_count:{type:"number",description:"Max matches per file (-m NUM)",default:100},fuzzy:{oneOf:[{type:"boolean"},{type:"number"}],description:"Fuzzy matching (-Z). true=default distance, number=max Levenshtein distance"},bool:{type:"boolean",description:"Boolean query mode (-%%). Pattern uses AND/OR/NOT: 'auth AND NOT test'"},neg_pattern:{type:"string",description:"Negative pattern \u2014 reject matching lines (-N PATTERN)"},files_only:{type:"boolean",description:"Only print file names (-l)"},count:{type:"boolean",description:"Only print match count per file (-c)"},decompress:{type:"boolean",description:"Search inside compressed files and archives (-z)"},extra_args:{type:"array",items:{type:"string"},description:"Additional ug flags: ['--depth=3','-O=ts,js','--min-size=1K','--format=%f:%n:%o']"}},required:["pattern"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Oc},Np0={name:"probe",description:"Ranked semantic code search with token budgeting (Probe). Returns complete functions/classes, not line fragments. 4 commands: search (ES-style boolean queries with BM25 ranking), extract (get code by file:line or file#symbol), symbols (list symbols in file), query (AST pattern matching). Use max_tokens for LLM context budgeting, session for pagination.",category:"code",parameters:{type:"object",properties:{command:{type:"string",enum:["search","extract","symbols","query"],default:"search",description:"search=semantic search, extract=get code by line/symbol, symbols=list symbols, query=AST pattern"},query:{type:"string",description:"Search query (ES syntax: AND/OR/NOT, ext:rs, file:path, dir:tests) or AST pattern for query command"},path:{type:"string",description:"Directory to search (default: working dir)"},exact:{type:"boolean",description:"Exact match (true) vs stemmed search (false). 'getUserData' exact vs 'get','user','data'"},max_tokens:{type:"number",description:"Token budget \u2014 limit total output tokens for LLM context"},max_results:{type:"number",description:"Maximum number of results"},session:{type:"string",description:"Session ID for pagination. Reuse to get next page (dedup previous results)"},language:{type:"string",description:"Language filter: rust, typescript, python, go, java, etc."},reranker:{type:"string",description:"Ranking algorithm: bm25 (default), tfidf, hybrid, hybrid2"},allow_tests:{type:"boolean",description:"Include test files in results"},files:{type:"array",items:{type:"string"},description:"File specs for extract and symbols commands: ['src/auth.ts:42', 'src/auth.ts#handleAuth', 'src/auth.ts:10-50']"},extra_args:{type:"array",items:{type:"string"},description:"Additional probe flags: ['--files-only','--no-merge','--lsp','--timeout=60']"}},required:[]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Nc},Lp0={name:"sg",description:"AST structural pattern matching and rewriting (ast-grep). Patterns look like real code. $NAME matches single node, $$$ARGS matches variadic, $_ is wildcard. Examples: 'console.log($MSG)', 'async function $NAME($$$PARAMS) { $$$BODY }'. Set rewrite for search-and-replace refactoring. Use command='scan' with inline_rules for YAML rules.",category:"code",parameters:{type:"object",properties:{command:{type:"string",enum:["run","scan"],default:"run",description:"run=pattern match/rewrite, scan=rule-based scanning"},pattern:{type:"string",description:"AST pattern. $NAME=single node, $$$ARGS=variadic, $_=wildcard. Examples: 'console.log($MSG)', 'async function $NAME($$$PARAMS) { $$$BODY }'"},language:{type:"string",description:"Language: typescript, python, rust, go, java, javascript, c, cpp, ruby, php, swift, kotlin"},rewrite:{type:"string",description:"Replacement pattern with same metavariables. Example: pattern='console.log($MSG)' rewrite='logger.info($MSG)'"},strictness:{type:"string",enum:["cst","smart","ast","relaxed","signature"],description:"Matching strictness. smart=default, ast=ignore punctuation, relaxed=ignore comments"},globs:{type:"string",description:"File glob filter, prefix ! to exclude"},rule:{type:"string",description:"Path to a YAML rule file (for scan)"},inline_rules:{type:"string",description:"Inline YAML rule text (for scan). Example: 'id: no-console\\nlanguage: TypeScript\\nrule:\\n pattern: console.log($$$)'"},path:{type:"string",description:"Directory to search (default: working dir)"},update_all:{type:"boolean",description:"Apply all rewrites without confirmation (-U)"},context:{type:"number",description:"Context lines around matches (-C NUM)"},extra_args:{type:"array",items:{type:"string"},description:"Additional sg flags: ['--selector=function_declaration','--threads=4','--no-ignore=hidden']"}},required:[]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Lc},Ap0={name:"cbm",description:"Code knowledge graph (codebase-memory-mcp). Index codebases, search symbols, trace call chains, analyze blast radius. Run action='index' once per project. Then: search (symbols by name/type/file), trace (who calls this? what does it call?), impact (what breaks if I change this?), "+"context (360\xB0 view: definition + callers + callees in one call), architecture (project overview), "+"snippet (read source by qualified name), code_search (graph-augmented grep), cypher (raw Cypher query).",category:"code",parameters:{type:"object",properties:{action:{type:"string",enum:["index","search","trace","impact","context","snippet","code_search","architecture","schema","cypher","list_projects","delete_project","status"],description:"Action to perform"},path:{type:"string",description:"Repository path to index"},mode:{type:"string",enum:["full","fast"],description:"full=with git history, fast=skip git"},name:{type:"string",description:"Symbol name or regex pattern"},label:{type:"string",description:"Node type: Function, Class, Method, Interface, Enum, Type, Module, File, Route, Package"},file:{type:"string",description:"File path filter"},direction:{type:"string",enum:["inbound","outbound","both"],default:"both",description:"inbound=callers, outbound=callees"},depth:{type:"number",description:"Traversal depth (1-5)",default:3},edge_types:{type:"array",items:{type:"string"},description:"Filter edges: CALLS, IMPORTS, INHERITS, IMPLEMENTS, USES_TYPE, TESTS, HTTP_CALLS"},scope:{type:"string",description:"Git diff scope: 'staged', 'HEAD~1', branch name"},base_branch:{type:"string",description:"Git branch for comparison",default:"main"},qualified_name:{type:"string",description:"Full qualified name from search results (for snippet)"},include_neighbors:{type:"boolean",description:"Include caller/callee names (for snippet)"},code_pattern:{type:"string",description:"Text search pattern (for code_search)"},regex:{type:"boolean",description:"Use regex for code_search"},code_mode:{type:"string",enum:["compact","full","files"],description:"Output mode for code_search"},query:{type:"string",description:"Cypher query string (for cypher action)"},max_rows:{type:"number",description:"Max rows for cypher query"},project:{type:"string",description:"Project name (auto-detected if one project indexed)"},limit:{type:"number",description:"Max results",default:20},context:{type:"number",description:"Context lines for code_search"}},required:["action"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Ac},qp0={name:"lsp",description:"Compiler-accurate code intelligence via native LSP (Language Server Protocol). "+"Spawns real language servers directly \u2014 same as VS Code and Claude Code. "+"No Serena, no MCP, no HTTP. Supports: TypeScript, Python, Go, Rust, C/C++, Swift, Java, Kotlin, Lua, PHP, Ruby, C#. Actions: definition (go-to-definition), references (find all references), hover (type info + docs), symbols (document symbol list), rename (safe cross-file rename). Line and character are 0-based. Server starts on first use and stays warm.",category:"code",parameters:{type:"object",properties:{action:{type:"string",enum:["definition","references","hover","symbols","rename"],description:"definition=go to definition, references=find all references, hover=type info and docs, symbols=list all symbols in file, rename=rename symbol across codebase"},file:{type:"string",description:"File path (relative or absolute). Language server auto-detected from extension."},line:{type:"number",description:"0-based line number (for definition, references, hover, rename)"},character:{type:"number",description:"0-based column/character offset (for definition, references, hover, rename)"},new_name:{type:"string",description:"New symbol name (for rename action only)"}},required:["action","file"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:qc},Ep0={name:"serena",description:"Compiler-accurate LSP symbol navigation and editing via Serena HTTP project server. Use for symbol-level operations by name path (not line/column). Actions: find_symbol, find_references, overview, replace_body, insert_after, insert_before, rename, search. Requires: uvx --from 'git+https://github.com/oraios/serena' serena start-project-server --port 9750",category:"code",parameters:{type:"object",properties:{action:{type:"string",enum:["find_symbol","find_references","overview","replace_body","insert_after","insert_before","rename","search"],description:"Serena action"},name_path:{type:"string",description:"Symbol name path: 'handleAuth', 'MyClass/myMethod', '/TopLevel/Nested'"},relative_path:{type:"string",description:"Restrict to file or directory"},include_body:{type:"boolean",description:"Include source code of the symbol"},include_info:{type:"boolean",description:"Include hover info (docstring, signature)"},depth:{type:"number",description:"Descendants depth (1=immediate children)"},body:{type:"string",description:"New code content (for replace_body/insert)"},new_name:{type:"string",description:"New symbol name (for rename)"},pattern:{type:"string",description:"Regex pattern (for search action)"},context_before:{type:"number",description:"Context lines before match"},context_after:{type:"number",description:"Context lines after match"},paths_include:{type:"string",description:"Glob to include files"},paths_exclude:{type:"string",description:"Glob to exclude files"},extra_args:{type:"object",description:"Additional Serena API params"}},required:["action"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Ec},_p0={name:"fff",description:"Frecency-aware fuzzy file finder and grep (fff). Files you access often rank higher. 3 actions: grep (search file contents), find_files (fuzzy file search by topic), multi_grep (OR-search across multiple patterns). Use constraints for filtering: '*.rs' (type), 'src/' (dir), 'schema.rs' (file), '!test/' (exclude).",category:"code",parameters:{type:"object",properties:{action:{type:"string",enum:["grep","find_files","multi_grep"],description:"grep=search contents, find_files=fuzzy file search, multi_grep=OR-search multiple patterns"},query:{type:"string",description:"Search text or topic description"},patterns:{type:"array",items:{type:"string"},description:"Multiple patterns for OR-search (multi_grep only)"},constraints:{type:"string",description:"Inline constraints: '*.rs' (type), 'src/' (dir), 'schema.rs' (file), '!test/' (exclude)"},path:{type:"string",description:"Directory to search (default: working dir)"}},required:["action"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:_c},QT=[Dp0,Op0,Np0,Lp0,Ap0,qp0,Ep0,_p0]});var oX0=IZ((p4)=>{var __dirname="/Users/hole/aria/.bundle-stage/search/dist",Mp0=p4&&p4.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),Pp0=p4&&p4.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),jp0=p4&&p4.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")Mp0(J,Z,X[Y])}return Pp0(J,Z),J}}();Object.defineProperty(p4,"__esModule",{value:!0});p4.buildIndex=Cp0;p4.syncIndex=Rp0;p4.indexStatus=wp0;p4.search=Sp0;p4.notifyFileChanged=Ip0;p4.notifyFileDeleted=bp0;p4.dropIndex=kp0;p4.assertNativeAddonAvailable=fp0;var Tp0=jp0(s0("path")),VT=null;function hJ(){if(VT)return VT;try{return VT=(()=>{throw new Error("Cannot require module "+"@aria-cli/search");})(),VT}catch($){let Z=$ instanceof Error?$.message:String($);throw Error(`@aria-cli/search: Failed to load native addon via ${Tp0.join(__dirname,"../index.js")} (${process.platform}-${process.arch}). ${Z}`)}}function Cp0($,Z){return hJ().buildIndex($,Z??null)}function Rp0($){return hJ().syncIndex($)}function wp0($){return hJ().indexStatus($)}function Sp0($){return hJ().search($)}function Ip0($,Z,J){return hJ().notifyFileChanged($,Z,J??null)}function bp0($,Z){return hJ().notifyFileDeleted($,Z)}function kp0($){return hJ().dropIndex($)}function fp0(){hJ()}});import*as sX0 from"path";async function rX0($,Z){let J=$,X=sX0.resolve(Z.workingDir,J.directory||".");try{let Y=b2.indexStatus(X);if(Y.state==="none")b2.buildIndex(X),DR(X);else if(Y.state==="stale"){try{b2.syncIndex(X)}catch{b2.buildIndex(X)}DR(X)}sp(X);let Q=rp(X),G=b2.search({pattern:J.pattern,directory:X,maxResults:J.maxResults??1000,fileGlob:J.fileGlob,fileType:J.fileType,caseSensitive:J.caseSensitive??!0,literal:J.literal??!1,context:J.context??0,sessionWrites:Q.sessionWrites,sessionDeletes:Q.sessionDeletes}),V=G.length>=(J.maxResults??1000);return q0(`Found ${G.length} matches for "${J.pattern}"${V?" (truncated)":""}`,{matches:G,truncated:V})}catch(Y){let Q=Y instanceof Error?Y.message:String(Y);return p(`Search failed: ${Q}`)}}var b2;var tX0=E(()=>{B9();VL();b2=U7(oX0(),1)});var yp0,WT;var HT=E(()=>{tX0();yp0={name:"grep",description:"Search for patterns in files using regular expressions. Indexed for sub-millisecond speed. Builds index automatically on first use. Supports regex, literal strings, file type filters, and glob patterns.",category:"filesystem",parameters:{type:"object",properties:{pattern:{type:"string",description:"Regex pattern to search for. Use literal: true for exact string matching."},directory:{type:"string",description:"Directory to search in (default: current working directory)",default:"."},fileGlob:{type:"string",description:"Glob pattern to filter files (e.g. '*.ts', 'src/**/*.rs')"},fileType:{type:"string",description:"File extension filter (e.g. 'ts', 'rs', 'py'). Simpler than glob for single types."},caseSensitive:{type:"boolean",description:"Case-sensitive matching (default: true)",default:!0},literal:{type:"boolean",description:"Treat pattern as a literal string, not regex (default: false)",default:!1},maxResults:{type:"number",description:"Maximum number of matches to return (default: 1000)",default:1000},context:{type:"number",description:"Number of context lines before and after each match (default: 0)",default:0}},required:["pattern"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:rX0},WT=[yp0]});function eX0($){switch($){case"error":return 3;case"warning":return 2;case"info":case"log":return 1;case"debug":return 0;default:return 1}}function XY0($,Z){if(!Z)return[...$];let J=eX0(Z);return $.filter((X)=>eX0(X.type)>=J)}function YY0($,Z){let J=typeof Z==="string"?Z.trim():"";if(!J)return[...$];return $.filter((X)=>X.url.includes(J))}function QY0($){if(!$.length)return"No console messages captured.";return $.map((Z)=>`[${Z.type.toUpperCase()}] ${Z.text}`).join(`
|
|
5788
|
+
${Y}`,data:{peers:X}}}case"status":{let X=J.status(),Y=X.signingPublicKey??null;return{success:!0,message:X.configured?`Network active. Node: ${X.nodeId?.slice(0,12)??"unknown"}... Transport: ${X.transportPublicKey?.slice(0,12)??"unknown"}... Port: ${X.listenPort}. External: ${X.externalEndpoint?`${X.externalEndpoint.address}:${X.externalEndpoint.port}`:"unknown"}. Peers: ${X.activePeers} trusted / ${X.totalPeers} total. Sessions: ${X.connectedPeers??0} connected, ${X.handshakingPeers??0} handshaking. Delivery: ${X.queueOnlyPeers??0} queue-only, ${X.supersededPeers??0} superseded.`+(Y?` Signing key: ${Y.slice(0,12)}...`:""):"Network not configured. It will be created automatically on next startup.",data:{...X,signingPublicKey:Y}}}default:return{success:!1,message:`Unknown action: ${$.action}`}}}}),eu0=s8({name:"list_clients",description:"List same-home attached clients that share this runtime. Use this before sending a direct local message to another attached terminal by exact clientId.",parameters:aD.object({}),category:"arion",riskLevel:"safe",isReadOnly:!0,execute:async($,Z)=>{let X=Z.networkControl?.listAttachedClients;if(!X)return{success:!1,message:"Same-home client directory is not available for this runtime."};let Y=await Promise.resolve(X()),Q=Y.find((V)=>V.self)??null,G=Y.filter((V)=>!V.self);if(Y.length===0)return{success:!0,message:"No same-home attached clients are currently available.",data:{clients:[],otherClients:[],selfClient:null}};return{success:!0,message:G.length>0?`${G.length} other same-home client(s) available`:"No other same-home attached clients are currently available.",data:{clients:Y,otherClients:G,selfClient:Q}}}}),rj=[tu0,eu0]});var $p0,kc;var fc=E(()=>{K9();$p0={name:"deploy",description:"Deploy ARIA to a remote machine via SSH. Detects OS, installs Node.js + bun, clones/syncs repo, builds, discovers/provisions TLS certs, opens firewall ports, configures ~/.aria, and starts the daemon. Returns host, port, fingerprint, and TLS type.",category:"arion",parameters:{type:"object",properties:{target:{type:"string",description:"SSH target (e.g. 'claude@10.0.0.1' or 'hostname')"},repo_url:{type:"string",description:"Git repo URL (default: current repo origin)"},branch:{type:"string",description:"Branch to deploy (default: main)"},arion_name:{type:"string",description:"Arion identity name (default: hostname of target)"},coordination_url:{type:"string",description:"Coordination server URL for mesh registration"},ssh_key_path:{type:"string",description:"Path to SSH private key (default: ~/.ssh/id_ed25519)"},commit_hash:{type:"string",description:"Git commit hash to checkout after clone (pins exact code version, prevents MITM on branch refs)"},verify_signatures:{type:"boolean",description:"Verify GPG signature on HEAD commit after checkout. Fails deploy if signature is invalid or missing."}},required:["target"]},riskLevel:"dangerous",requiresConfirmation:!0,isReadOnly:!1,loadingTier:"always",execute:Hc},kc=[$p0]});var Zp0,Jp0,Xp0,Yp0,Qp0,Gp0,Vp0,Wp0,Hp0,Kp0,zp0,Up0,ej;var $T=E(()=>{K9();Zp0={name:"ask_user",description:"Ask the user clarifying questions. Supports optional multiple-choice answers. Use when you need user input to proceed.",category:"meta",parameters:{type:"object",properties:{questions:{type:"array",description:"List of questions to ask the user",items:{type:"object",properties:{question:{type:"string",description:"The question to ask"},options:{type:"array",items:{type:"string"},description:"Optional multiple-choice answers"}},required:["question"]}}},required:["questions"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:xD},Jp0={name:"quest_update",description:"Create, update, or complete quests (task tracking). Quests persist in a structured database across sessions.",category:"meta",parameters:{type:"object",properties:{quests:{type:"array",description:"List of quests to create or update",items:{type:"object",properties:{id:{type:"string",description:"Quest ID (omit to create a new quest)"},title:{type:"string",description:"Quest title"},status:{type:"string",enum:["open","active","blocked","done"],description:"Quest status: open (ready), active (in progress), blocked, done"},priority:{type:"number",description:"Priority 0-4 (0 = highest, default 2)",minimum:0,maximum:4},blocked_by:{type:"string",description:"ID of quest blocking this one"},notes:{type:"string",description:"Progress notes or context"}},required:[]}}},required:["quests"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:gD},Xp0={name:"quest_list",description:"List current quests with their status, priority, and dependencies.",category:"meta",parameters:{type:"object",properties:{status:{type:"string",enum:["all","open","active","blocked","done"],description:"Filter by status (default: all)",default:"all"}},required:[]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:mD},Yp0={name:"search",description:"Search for tools, skills, and capabilities across Memoria, local skill files, skill registries, and optional web/package sources.",category:"meta",parameters:{type:"object",properties:{query:{type:"string",description:"What to find \u2014 tool name, skill name, or capability description"},sources:{type:"array",items:{type:"string",enum:["memoria","local","registry","web"]},default:["memoria","local","registry"],description:"Where to search. memoria=learned tools/skills, local=SKILL.md files, registry=skills.sh+clawhub, web=npm/brew+general"},limit:{type:"number",minimum:1,maximum:50,default:10}},required:["query"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:DQ},Qp0={name:"learn_tool",description:"Learn a CLI tool from `<command> --help` and persist it as callable tool knowledge. (Deprecated \u2014 use learn instead)",category:"meta",parameters:{type:"object",properties:{command:{type:"string",description:"CLI command name (supports subcommands)"},name:{type:"string"},description:{type:"string"},category:{type:"string",enum:["filesystem","code","shell","web","data","memory","meta","arion"]}},required:["command"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:($,Z)=>I2({source:{type:"cli",command:String($.command??"")}},Z)},Gp0={name:"learn_skill",description:"Learn a skill from a SKILL.md file or inline content and persist it in Memoria. (Deprecated \u2014 use learn instead)",category:"meta",parameters:{type:"object",properties:{path:{type:"string",description:"Path to SKILL.md (optional if using inline content)"},name:{type:"string"},description:{type:"string"},content:{type:"string"},tags:{type:"array",items:{type:"string"}},toolIds:{type:"array",items:{type:"string"}}},required:[]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:($,Z)=>I2({source:{type:"file",path:String($.path??"")}},Z)},Vp0={name:"learn",description:"Backward-compatible learning tool. Delegates to learn_tool (CLI) or learn_skill (file).",category:"meta",parameters:{type:"object",properties:{source:{type:"object",properties:{type:{type:"string",enum:["cli","file"]},command:{type:"string"},path:{type:"string"}},required:["type"]}},required:["source"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:I2},Wp0={name:"create_tool",description:"Create a reusable script-backed tool and save it to Memoria for future discovery/use.",category:"meta",parameters:{type:"object",properties:{name:{type:"string"},description:{type:"string"},command:{type:"string",description:"Shell command to wrap (optional if script provided)"},script:{type:"string",description:"Script body to write (optional if command provided)"},argsSchema:{type:"object",additionalProperties:!0},tags:{type:"array",items:{type:"string"}}},required:["name","description"]},riskLevel:"dangerous",isReadOnly:!1,loadingTier:"always",execute:cD},Hp0={name:"create_skill",description:"Create a reusable skill/procedure and optionally link it to the current arion profile.",category:"meta",parameters:{type:"object",properties:{name:{type:"string"},description:{type:"string"},content:{type:"string"},level:{type:"string",enum:["beginner","intermediate","advanced","expert"]},tags:{type:"array",items:{type:"string"}},toolIds:{type:"array",items:{type:"string"}}},required:["name","description","content"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"always",execute:uD},Kp0={name:"use_skill",description:"Retrieve a learned skill by name/id and record its execution metrics.",category:"meta",parameters:{type:"object",properties:{name:{type:"string"},skillId:{type:"string"},success:{type:"boolean",default:!0},durationMs:{type:"number"},notes:{type:"string"}},required:[]},riskLevel:"safe",isReadOnly:!1,loadingTier:"always",execute:pD},zp0={name:"restart",description:"Restart ARIA through the RelaunchSupervisor. Use when you need to pick up code changes after a build, recover from a corrupted state, or when explicitly asked to restart. Fails closed when no supervisor is attached.",category:"meta",parameters:{type:"object",properties:{reason:{type:"string",description:"Why the restart is needed (logged for diagnostics)"}}},riskLevel:"dangerous",requiresConfirmation:!0,loadingTier:"always",execute:Wc},Up0={name:"self_diagnose",description:"Gather comprehensive diagnostic context for debugging ARIA's own errors, crashes, and runtime issues. Returns structured data from configs, error logs, crash dumps, databases, active quests, sessions, network, and model state \u2014 all in one call. Use this as the first step when investigating any ARIA bug or unexpected behavior.",category:"meta",parameters:{type:"object",properties:{focus:{type:"string",description:"Optional keyword to filter errors/crashes (e.g. 'quest_update', 'OOM', 'crash')"},sections:{type:"array",items:{type:"string",enum:["runtime","errors","crashes","databases","daemon","network"]},description:"Optional subset of sections to return (default: all 6)"},since:{type:"string",description:"ISO timestamp cutoff \u2014 only show events after this (default: last 1h)"},limit:{type:"number",description:"Max entries per section (default: 10)",default:10}}},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Qc},ej=[Zp0,Jp0,Xp0,Yp0,Vp0,Qp0,Gp0,Wp0,Hp0,Kp0,zp0,Up0]});var Bp0,ZT;var JT=E(()=>{ED();Bp0={name:"session_history",description:"List, search, and manage conversation session history. Actions: 'list' shows recent sessions, 'search' finds sessions by message content (full-text search), 'get' retrieves a full session transcript, 'current' shows current session info, 'stats' shows session statistics, 'delete' removes a session, 'set_title' renames a session.",category:"memory",parameters:{type:"object",properties:{action:{type:"string",enum:["list","search","get","current","stats","delete","set_title"],description:"Action to perform"},query:{type:"string",description:"Search query (required for 'search' action)"},sessionId:{type:"string",description:"Session ID or prefix \u2014 8+ chars for prefix match, full UUID for exact match (required for 'get', 'delete', 'set_title')"},title:{type:"string",description:"New title (required for 'set_title' action)"},limit:{type:"number",description:"Maximum number of results to return (default 20)",default:20},offset:{type:"number",description:"Pagination offset (default 0)",default:0},messageLimit:{type:"number",description:"Maximum messages to return per session for 'get' action (default 50)",default:50}},required:["action"]},riskLevel:"moderate",isReadOnly:!1,loadingTier:"deferred",skipApprovalForInput:($)=>{return $?.action!=="delete"},execute:($,Z)=>{return lH($,Z)}},ZT=[Bp0]});import{z as D8}from"zod";var Fp0,XT;var YT=E(()=>{ZK();MR();Fp0=s8({name:"frg",description:"Native fastripgrep tool via napi-rs. Wraps the original frg commands in one tool: init, index, search, update, status, replace, man, completions, watch, and upgrade-safe metadata.",category:"code",riskLevel:"safe",isReadOnly:!1,loadingTier:"always",parameters:D8.object({command:D8.enum(["init","index","search","update","status","replace","man","completions","watch","upgrade"]).describe("Original frg command to run"),pattern:D8.string().optional().describe("Regex pattern for search/replace"),replacement:D8.string().optional().describe("Replacement string for replace"),path:D8.string().optional().describe("Repository or directory to operate on (defaults to current working directory)"),noIndex:D8.boolean().optional().describe("Skip the index and do a brute-force scan for search"),literal:D8.boolean().optional().describe("Treat pattern as a fixed string"),caseInsensitive:D8.boolean().optional().describe("Enable case-insensitive matching"),smartCase:D8.boolean().optional().describe("Use smart-case matching"),filesOnly:D8.boolean().optional().describe("Return only file paths with matches"),count:D8.boolean().optional().describe("Return match counts per file"),maxCount:D8.number().optional().describe("Maximum matches per file"),quiet:D8.boolean().optional().describe("Only report whether a match exists"),context:D8.number().optional().describe("Context lines for search matches"),json:D8.boolean().optional().describe("Compatibility flag matching upstream JSON mode"),glob:D8.string().optional().describe("Glob filter for candidate files"),fileType:D8.string().optional().describe("File extension/type filter"),follow:D8.boolean().optional().describe("Follow symbolic links"),extraPatterns:D8.array(D8.string()).optional().describe("Additional regex patterns combined with OR"),maxFilesize:D8.number().optional().describe("Maximum file size in bytes while indexing/updating/init"),force:D8.boolean().optional().describe("Compatibility flag for forced rebuilds"),write:D8.boolean().optional().describe("Actually apply replace changes instead of previewing"),hook:D8.boolean().optional().describe("Install a post-commit git hook when using init"),shell:D8.enum(["bash","elvish","fish","powershell","zsh"]).optional().describe("Shell target when using completions")}),execute:_z}),XT=[Fp0]});var Dp0,Op0,Np0,Lp0,Ap0,qp0,Ep0,_p0,QT;var GT=E(()=>{Mc();Dp0={name:"rg",description:"Fast text/regex search (ripgrep). SIMD-accelerated, .gitignore-aware. Returns structured JSON matches with file, line, and text. Use for finding strings, patterns, identifiers. Fastest grep available.",category:"code",parameters:{type:"object",properties:{pattern:{type:"string",description:"Search pattern (regex by default)"},path:{type:"string",description:"File or directory to search (default: working dir)"},ignore_case:{type:"boolean",description:"Case-insensitive search (-i)"},smart_case:{type:"boolean",description:"Case-insensitive unless pattern has uppercase (-S)"},fixed_strings:{type:"boolean",description:"Treat pattern as literal string, not regex (-F)"},word_regexp:{type:"boolean",description:"Match whole words only (-w)"},file_type:{type:"string",description:"File type filter: ts, py, rs, go, java, etc. (-t TYPE)"},glob:{type:"string",description:"Glob filter, prefix ! to exclude (-g GLOB)"},context:{type:"number",description:"Context lines around matches (-C NUM)"},max_count:{type:"number",description:"Max matches per file (-m NUM)",default:100},invert:{type:"boolean",description:"Show lines NOT matching (-v)"},files_only:{type:"boolean",description:"Only print file names with matches (-l)"},count:{type:"boolean",description:"Only print match count per file (-c)"},extra_args:{type:"array",items:{type:"string"},description:"Additional rg flags: ['--pcre2','-U','--max-depth=3','--hidden','--no-ignore','--type-not=test']"}},required:["pattern"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Dc},Op0={name:"ug",description:"Text search with fuzzy matching, boolean queries, and archive search (ugrep). Superset of ripgrep features. Use fuzzy for approximate matching (typos), bool for AND/OR/NOT queries, decompress for searching inside zip/tar/gz.",category:"code",parameters:{type:"object",properties:{pattern:{type:"string",description:"Search pattern (regex by default)"},path:{type:"string",description:"File or directory to search (default: working dir)"},ignore_case:{type:"boolean",description:"Case-insensitive (-i)"},smart_case:{type:"boolean",description:"Smart case: insensitive unless uppercase present (-j)"},fixed_strings:{type:"boolean",description:"Literal string matching (-F)"},word_regexp:{type:"boolean",description:"Match whole words only (-w)"},file_type:{type:"string",description:"File type filter (-t TYPE)"},glob:{type:"string",description:"Glob filter (-g GLOB)"},context:{type:"number",description:"Context lines around matches (-C NUM)"},max_count:{type:"number",description:"Max matches per file (-m NUM)",default:100},fuzzy:{oneOf:[{type:"boolean"},{type:"number"}],description:"Fuzzy matching (-Z). true=default distance, number=max Levenshtein distance"},bool:{type:"boolean",description:"Boolean query mode (-%%). Pattern uses AND/OR/NOT: 'auth AND NOT test'"},neg_pattern:{type:"string",description:"Negative pattern \u2014 reject matching lines (-N PATTERN)"},files_only:{type:"boolean",description:"Only print file names (-l)"},count:{type:"boolean",description:"Only print match count per file (-c)"},decompress:{type:"boolean",description:"Search inside compressed files and archives (-z)"},extra_args:{type:"array",items:{type:"string"},description:"Additional ug flags: ['--depth=3','-O=ts,js','--min-size=1K','--format=%f:%n:%o']"}},required:["pattern"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Oc},Np0={name:"probe",description:"Ranked semantic code search with token budgeting (Probe). Returns complete functions/classes, not line fragments. 4 commands: search (ES-style boolean queries with BM25 ranking), extract (get code by file:line or file#symbol), symbols (list symbols in file), query (AST pattern matching). Use max_tokens for LLM context budgeting, session for pagination.",category:"code",parameters:{type:"object",properties:{command:{type:"string",enum:["search","extract","symbols","query"],default:"search",description:"search=semantic search, extract=get code by line/symbol, symbols=list symbols, query=AST pattern"},query:{type:"string",description:"Search query (ES syntax: AND/OR/NOT, ext:rs, file:path, dir:tests) or AST pattern for query command"},path:{type:"string",description:"Directory to search (default: working dir)"},exact:{type:"boolean",description:"Exact match (true) vs stemmed search (false). 'getUserData' exact vs 'get','user','data'"},max_tokens:{type:"number",description:"Token budget \u2014 limit total output tokens for LLM context"},max_results:{type:"number",description:"Maximum number of results"},session:{type:"string",description:"Session ID for pagination. Reuse to get next page (dedup previous results)"},language:{type:"string",description:"Language filter: rust, typescript, python, go, java, etc."},reranker:{type:"string",description:"Ranking algorithm: bm25 (default), tfidf, hybrid, hybrid2"},allow_tests:{type:"boolean",description:"Include test files in results"},files:{type:"array",items:{type:"string"},description:"File specs for extract and symbols commands: ['src/auth.ts:42', 'src/auth.ts#handleAuth', 'src/auth.ts:10-50']"},extra_args:{type:"array",items:{type:"string"},description:"Additional probe flags: ['--files-only','--no-merge','--lsp','--timeout=60']"}},required:[]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Nc},Lp0={name:"sg",description:"AST structural pattern matching and rewriting (ast-grep). Patterns look like real code. $NAME matches single node, $$$ARGS matches variadic, $_ is wildcard. Examples: 'console.log($MSG)', 'async function $NAME($$$PARAMS) { $$$BODY }'. Set rewrite for search-and-replace refactoring. Use command='scan' with inline_rules for YAML rules.",category:"code",parameters:{type:"object",properties:{command:{type:"string",enum:["run","scan"],default:"run",description:"run=pattern match/rewrite, scan=rule-based scanning"},pattern:{type:"string",description:"AST pattern. $NAME=single node, $$$ARGS=variadic, $_=wildcard. Examples: 'console.log($MSG)', 'async function $NAME($$$PARAMS) { $$$BODY }'"},language:{type:"string",description:"Language: typescript, python, rust, go, java, javascript, c, cpp, ruby, php, swift, kotlin"},rewrite:{type:"string",description:"Replacement pattern with same metavariables. Example: pattern='console.log($MSG)' rewrite='logger.info($MSG)'"},strictness:{type:"string",enum:["cst","smart","ast","relaxed","signature"],description:"Matching strictness. smart=default, ast=ignore punctuation, relaxed=ignore comments"},globs:{type:"string",description:"File glob filter, prefix ! to exclude"},rule:{type:"string",description:"Path to a YAML rule file (for scan)"},inline_rules:{type:"string",description:"Inline YAML rule text (for scan). Example: 'id: no-console\\nlanguage: TypeScript\\nrule:\\n pattern: console.log($$$)'"},path:{type:"string",description:"Directory to search (default: working dir)"},update_all:{type:"boolean",description:"Apply all rewrites without confirmation (-U)"},context:{type:"number",description:"Context lines around matches (-C NUM)"},extra_args:{type:"array",items:{type:"string"},description:"Additional sg flags: ['--selector=function_declaration','--threads=4','--no-ignore=hidden']"}},required:[]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Lc},Ap0={name:"cbm",description:"Code knowledge graph (codebase-memory-mcp). Index codebases, search symbols, trace call chains, analyze blast radius. Run action='index' once per project. Then: search (symbols by name/type/file), trace (who calls this? what does it call?), impact (what breaks if I change this?), "+"context (360\xB0 view: definition + callers + callees in one call), architecture (project overview), "+"snippet (read source by qualified name), code_search (graph-augmented grep), cypher (raw Cypher query).",category:"code",parameters:{type:"object",properties:{action:{type:"string",enum:["index","search","trace","impact","context","snippet","code_search","architecture","schema","cypher","list_projects","delete_project","status"],description:"Action to perform"},path:{type:"string",description:"Repository path to index"},mode:{type:"string",enum:["full","fast"],description:"full=with git history, fast=skip git"},name:{type:"string",description:"Symbol name or regex pattern"},label:{type:"string",description:"Node type: Function, Class, Method, Interface, Enum, Type, Module, File, Route, Package"},file:{type:"string",description:"File path filter"},direction:{type:"string",enum:["inbound","outbound","both"],default:"both",description:"inbound=callers, outbound=callees"},depth:{type:"number",description:"Traversal depth (1-5)",default:3},edge_types:{type:"array",items:{type:"string"},description:"Filter edges: CALLS, IMPORTS, INHERITS, IMPLEMENTS, USES_TYPE, TESTS, HTTP_CALLS"},scope:{type:"string",description:"Git diff scope: 'staged', 'HEAD~1', branch name"},base_branch:{type:"string",description:"Git branch for comparison",default:"main"},qualified_name:{type:"string",description:"Full qualified name from search results (for snippet)"},include_neighbors:{type:"boolean",description:"Include caller/callee names (for snippet)"},code_pattern:{type:"string",description:"Text search pattern (for code_search)"},regex:{type:"boolean",description:"Use regex for code_search"},code_mode:{type:"string",enum:["compact","full","files"],description:"Output mode for code_search"},query:{type:"string",description:"Cypher query string (for cypher action)"},max_rows:{type:"number",description:"Max rows for cypher query"},project:{type:"string",description:"Project name (auto-detected if one project indexed)"},limit:{type:"number",description:"Max results",default:20},context:{type:"number",description:"Context lines for code_search"}},required:["action"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Ac},qp0={name:"lsp",description:"Compiler-accurate code intelligence via native LSP (Language Server Protocol). "+"Spawns real language servers directly \u2014 same as VS Code and Claude Code. "+"No Serena, no MCP, no HTTP. Supports: TypeScript, Python, Go, Rust, C/C++, Swift, Java, Kotlin, Lua, PHP, Ruby, C#. Actions: definition (go-to-definition), references (find all references), hover (type info + docs), symbols (document symbol list), rename (safe cross-file rename). Line and character are 0-based. Server starts on first use and stays warm.",category:"code",parameters:{type:"object",properties:{action:{type:"string",enum:["definition","references","hover","symbols","rename"],description:"definition=go to definition, references=find all references, hover=type info and docs, symbols=list all symbols in file, rename=rename symbol across codebase"},file:{type:"string",description:"File path (relative or absolute). Language server auto-detected from extension."},line:{type:"number",description:"0-based line number (for definition, references, hover, rename)"},character:{type:"number",description:"0-based column/character offset (for definition, references, hover, rename)"},new_name:{type:"string",description:"New symbol name (for rename action only)"}},required:["action","file"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:qc},Ep0={name:"serena",description:"Compiler-accurate LSP symbol navigation and editing via Serena HTTP project server. Use for symbol-level operations by name path (not line/column). Actions: find_symbol, find_references, overview, replace_body, insert_after, insert_before, rename, search. Requires: uvx --from 'git+https://github.com/oraios/serena' serena start-project-server --port 9750",category:"code",parameters:{type:"object",properties:{action:{type:"string",enum:["find_symbol","find_references","overview","replace_body","insert_after","insert_before","rename","search"],description:"Serena action"},name_path:{type:"string",description:"Symbol name path: 'handleAuth', 'MyClass/myMethod', '/TopLevel/Nested'"},relative_path:{type:"string",description:"Restrict to file or directory"},include_body:{type:"boolean",description:"Include source code of the symbol"},include_info:{type:"boolean",description:"Include hover info (docstring, signature)"},depth:{type:"number",description:"Descendants depth (1=immediate children)"},body:{type:"string",description:"New code content (for replace_body/insert)"},new_name:{type:"string",description:"New symbol name (for rename)"},pattern:{type:"string",description:"Regex pattern (for search action)"},context_before:{type:"number",description:"Context lines before match"},context_after:{type:"number",description:"Context lines after match"},paths_include:{type:"string",description:"Glob to include files"},paths_exclude:{type:"string",description:"Glob to exclude files"},extra_args:{type:"object",description:"Additional Serena API params"}},required:["action"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:Ec},_p0={name:"fff",description:"Frecency-aware fuzzy file finder and grep (fff). Files you access often rank higher. 3 actions: grep (search file contents), find_files (fuzzy file search by topic), multi_grep (OR-search across multiple patterns). Use constraints for filtering: '*.rs' (type), 'src/' (dir), 'schema.rs' (file), '!test/' (exclude).",category:"code",parameters:{type:"object",properties:{action:{type:"string",enum:["grep","find_files","multi_grep"],description:"grep=search contents, find_files=fuzzy file search, multi_grep=OR-search multiple patterns"},query:{type:"string",description:"Search text or topic description"},patterns:{type:"array",items:{type:"string"},description:"Multiple patterns for OR-search (multi_grep only)"},constraints:{type:"string",description:"Inline constraints: '*.rs' (type), 'src/' (dir), 'schema.rs' (file), '!test/' (exclude)"},path:{type:"string",description:"Directory to search (default: working dir)"}},required:["action"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:_c},QT=[Dp0,Op0,Np0,Lp0,Ap0,qp0,Ep0,_p0]});var oX0=IZ((p4)=>{var __dirname="/Users/hole/aria/.bundle-stage/search/dist",Mp0=p4&&p4.__createBinding||(Object.create?function($,Z,J,X){if(X===void 0)X=J;var Y=Object.getOwnPropertyDescriptor(Z,J);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[J]}};Object.defineProperty($,X,Y)}:function($,Z,J,X){if(X===void 0)X=J;$[X]=Z[J]}),Pp0=p4&&p4.__setModuleDefault||(Object.create?function($,Z){Object.defineProperty($,"default",{enumerable:!0,value:Z})}:function($,Z){$.default=Z}),jp0=p4&&p4.__importStar||function(){var $=function(Z){return $=Object.getOwnPropertyNames||function(J){var X=[];for(var Y in J)if(Object.prototype.hasOwnProperty.call(J,Y))X[X.length]=Y;return X},$(Z)};return function(Z){if(Z&&Z.__esModule)return Z;var J={};if(Z!=null){for(var X=$(Z),Y=0;Y<X.length;Y++)if(X[Y]!=="default")Mp0(J,Z,X[Y])}return Pp0(J,Z),J}}();Object.defineProperty(p4,"__esModule",{value:!0});p4.buildIndex=Cp0;p4.syncIndex=Rp0;p4.indexStatus=wp0;p4.search=Sp0;p4.notifyFileChanged=Ip0;p4.notifyFileDeleted=bp0;p4.dropIndex=kp0;p4.assertNativeAddonAvailable=fp0;var Tp0=jp0(r0("path")),VT=null;function hJ(){if(VT)return VT;try{return VT=null,VT}catch($){let Z=$ instanceof Error?$.message:String($);throw Error(`@aria-cli/search: Failed to load native addon via ${Tp0.join(__dirname,"../index.js")} (${process.platform}-${process.arch}). ${Z}`)}}function Cp0($,Z){return hJ().buildIndex($,Z??null)}function Rp0($){return hJ().syncIndex($)}function wp0($){return hJ().indexStatus($)}function Sp0($){return hJ().search($)}function Ip0($,Z,J){return hJ().notifyFileChanged($,Z,J??null)}function bp0($,Z){return hJ().notifyFileDeleted($,Z)}function kp0($){return hJ().dropIndex($)}function fp0(){hJ()}});import*as sX0 from"path";async function rX0($,Z){let J=$,X=sX0.resolve(Z.workingDir,J.directory||".");try{let Y=b2.indexStatus(X);if(Y.state==="none")b2.buildIndex(X),DR(X);else if(Y.state==="stale"){try{b2.syncIndex(X)}catch{b2.buildIndex(X)}DR(X)}sp(X);let Q=rp(X),G=b2.search({pattern:J.pattern,directory:X,maxResults:J.maxResults??1000,fileGlob:J.fileGlob,fileType:J.fileType,caseSensitive:J.caseSensitive??!0,literal:J.literal??!1,context:J.context??0,sessionWrites:Q.sessionWrites,sessionDeletes:Q.sessionDeletes}),V=G.length>=(J.maxResults??1000);return q0(`Found ${G.length} matches for "${J.pattern}"${V?" (truncated)":""}`,{matches:G,truncated:V})}catch(Y){let Q=Y instanceof Error?Y.message:String(Y);return p(`Search failed: ${Q}`)}}var b2;var tX0=E(()=>{B9();VL();b2=U7(oX0(),1)});var yp0,WT;var HT=E(()=>{tX0();yp0={name:"grep",description:"Search for patterns in files using regular expressions. Indexed for sub-millisecond speed. Builds index automatically on first use. Supports regex, literal strings, file type filters, and glob patterns.",category:"filesystem",parameters:{type:"object",properties:{pattern:{type:"string",description:"Regex pattern to search for. Use literal: true for exact string matching."},directory:{type:"string",description:"Directory to search in (default: current working directory)",default:"."},fileGlob:{type:"string",description:"Glob pattern to filter files (e.g. '*.ts', 'src/**/*.rs')"},fileType:{type:"string",description:"File extension filter (e.g. 'ts', 'rs', 'py'). Simpler than glob for single types."},caseSensitive:{type:"boolean",description:"Case-sensitive matching (default: true)",default:!0},literal:{type:"boolean",description:"Treat pattern as a literal string, not regex (default: false)",default:!1},maxResults:{type:"number",description:"Maximum number of matches to return (default: 1000)",default:1000},context:{type:"number",description:"Number of context lines before and after each match (default: 0)",default:0}},required:["pattern"]},riskLevel:"safe",isReadOnly:!0,loadingTier:"always",execute:rX0},WT=[yp0]});function eX0($){switch($){case"error":return 3;case"warning":return 2;case"info":case"log":return 1;case"debug":return 0;default:return 1}}function XY0($,Z){if(!Z)return[...$];let J=eX0(Z);return $.filter((X)=>eX0(X.type)>=J)}function YY0($,Z){let J=typeof Z==="string"?Z.trim():"";if(!J)return[...$];return $.filter((X)=>X.url.includes(J))}function QY0($){if(!$.length)return"No console messages captured.";return $.map((Z)=>`[${Z.type.toUpperCase()}] ${Z.text}`).join(`
|
|
5788
5789
|
`)}function GY0($){if(!$.length)return"No network requests captured.";return $.map((Z)=>{let J=Z.status!==void 0?` ${Z.status}`:"",X=Z.failureText?` (FAILED: ${Z.failureText})`:"";return`${Z.method}${J} ${Z.url}${X}`}).join(`
|
|
5789
5790
|
`)}var $Y0=500,ZY0=500,JY0=200;function WY0(){return $8}function EQ(){return qQ}function vc($){qQ=$}function HY0(){return XK}function KY0(){return L5}function iD($){if(VY0.has($))return;VY0.add($),$.on("console",(...Z)=>{let J=Z[0];if(!J)return;let X={type:typeof J.type==="function"?J.type():"log",text:typeof J.text==="function"?J.text():String(J),timestamp:new Date().toISOString()};if(XK.push(X),XK.length>$Y0)XK.shift()}),$.on("pageerror",(...Z)=>{let J=Z[0];if(nD.push({message:J?.message?String(J.message):String(J),name:J?.name?String(J.name):void 0,timestamp:new Date().toISOString()}),nD.length>JY0)nD.shift()}),$.on("request",(...Z)=>{let J=Z[0];if(!J)return;KT+=1;let X={id:`r${KT}`,timestamp:new Date().toISOString(),method:typeof J.method==="function"?J.method():"GET",url:typeof J.url==="function"?J.url():"",resourceType:typeof J.resourceType==="function"?J.resourceType():void 0};if(L5.push(X),L5.length>ZY0)L5.shift()}),$.on("response",(...Z)=>{let J=Z[0];if(!J)return;let X=typeof J.url==="function"?J.url():"";for(let Y=L5.length-1;Y>=0;Y-=1){let Q=L5[Y];if(Q&&Q.url===X&&Q.status===void 0){Q.status=typeof J.status==="function"?J.status():void 0,Q.ok=typeof J.ok==="function"?J.ok():void 0;break}}}),$.on("requestfailed",(...Z)=>{let J=Z[0];if(!J)return;let X=typeof J.url==="function"?J.url():"";for(let Y=L5.length-1;Y>=0;Y-=1){let Q=L5[Y];if(Q&&Q.url===X&&Q.ok===void 0){Q.ok=!1,Q.failureText=typeof J.failure==="function"?J.failure()?.errorText:void 0;break}}})}function xp0($){return typeof $==="object"&&$!==null&&typeof $.launch==="function"}function gp0($){let Z=$,J=Z?.chromium??Z?.default?.chromium;if(xp0(J))return J;let X=Z&&typeof Z==="object"?Object.keys(Z).sort().join(", "):String(Z);throw Error(`Invalid playwright module shape: missing chromium.launch (module keys: ${X||"(none)"}).`)}async function oD($){if($8){if($?.url)try{await $8.page.goto($.url,yc)}catch(G){let V=G instanceof Error?G.message:String(G);throw Error(`Navigation to ${$.url} failed: ${V}. Session remains active; use 'snapshot' or retry 'navigate'.`)}return $8}let Z;try{Z=await hp0()}catch{throw Error(`playwright is not installed. Run: npx playwright install chromium
|
|
5790
5791
|
Or: npm install playwright && npx playwright install chromium`)}let X=await gp0(Z).launch({headless:$?.headless!==!1}),Y=X.newContext?await X.newContext({viewport:{width:1280,height:720},userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}):X.contexts()[0]??(()=>{throw Error("No browser context available")})(),Q=Y.pages?.().length?Y.pages()[0]:await Y.newPage();if(iD(Q),$8={browser:X,context:Y,page:Q},qQ={},XK.length=0,L5.length=0,nD.length=0,KT=0,$?.url)try{await Q.goto($.url,yc)}catch(G){let V=G instanceof Error?G.message:String(G);throw Error(`Browser launched, but initial navigation to ${$.url} failed: ${V}. Session remains active; use 'snapshot' or retry 'navigate'.`)}return $8}async function zY0(){let $=$8;if($8=null,qQ={},XK.length=0,L5.length=0,nD.length=0,KT=0,$)try{await $.browser.close()}catch{}}function UY0(){if(!$8)return[];return $8.context.pages().map((Z,J)=>({index:J,url:Z.url(),active:Z===$8.page}))}async function BY0($){if(!$8)return{index:0,url:(await oD({url:$})).page.url()};let Z=await $8.context.newPage();if(iD(Z),$8.page=Z,qQ={},$)await Z.goto($,yc);return{index:$8.context.pages().length-1,url:Z.url()}}async function FY0($){if(!$8)await oD();if(!$8)throw Error("No tabs open.");let Z=$8.context.pages();if($<0||$>=Z.length)throw Error(`Tab index ${$} out of range (0..${Z.length-1})`);let J=Z[$];return $8.page=J,iD(J),qQ={},{url:J.url()}}async function DY0($){if(!$8)throw Error("No tabs open.");let Z=$8.context.pages(),J=$??Z.indexOf($8.page);if(J<0||J>=Z.length)throw Error(`Tab index ${J} out of range`);let X=Z[J];await X.close();let Y=$8.context.pages();if(!Y.length){let Q=await $8.context.newPage();$8.page=Q,iD(Q)}else if(X===$8.page){let Q=Math.min(J,Y.length-1);$8.page=Y[Q],iD($8.page)}qQ={}}var $8=null,qQ,XK,L5,nD,KT=0,yc,vp0=()=>Function('return import("playwright")')(),hp0,VY0;var OY0=E(()=>{qQ={},XK=[],L5=[],nD=[],yc={timeout:20000,waitUntil:"domcontentloaded"};hp0=vp0,VY0=new WeakSet});function up0($,Z){let J=Object.values(Z).filter((X)=>hc.has(X.role)).length;return{lines:$.split(`
|