@aria-cli/cli 1.0.14 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.aria-build-stamp.json +1 -1
- package/dist/attached-local-control-client-2jz8vmjb.js +1 -0
- package/dist/cli-context.js +1 -0
- package/dist/commands/index.js +1 -0
- package/dist/config.js +1 -0
- package/dist/daemon-service-esj85cr7.js +1 -0
- package/dist/ensure-daemon.js +1 -0
- package/dist/history/index.js +1 -0
- package/dist/index-00jaxgt2.js +2 -0
- package/dist/index-5v7br509.js +2 -0
- package/dist/index-718zvjhe.js +12 -0
- package/dist/index-76vaj0sr.js +321 -0
- package/dist/index-92syx5hd.js +149 -0
- package/dist/index-9j6r3gr8.js +2 -0
- package/dist/index-g5devafm.js +0 -0
- package/dist/index-j035n0mr.js +2 -0
- package/dist/index-nnqfqvqh.js +2 -0
- package/dist/index-sx36201d.js +5 -0
- package/dist/index-sxga6d5s.js +2 -0
- package/dist/index-wbm34jf5.js +24 -0
- package/dist/index-xjwfqz7t.js +2 -0
- package/dist/index-y2vy5jks.js +4 -0
- package/dist/index.js +1 -505
- package/dist/ink-repl.js +1 -0
- package/dist/kernel-0tytvcv0.js +1 -0
- package/dist/local-control-client.js +1 -0
- package/dist/repl-cleanup.js +1 -0
- package/dist/runtime-cutover-reset-0nywfrh6.js +1 -0
- package/dist/session-ybzq2j2n.js +1 -0
- package/dist/session.js +1 -0
- package/dist/ui/components/Banner.d.ts +1 -1
- package/package.json +10 -10
|
File without changes
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{za as E}from"./index-9j6r3gr8.js";import X from"node:path";function $(j){try{return process.kill(j,0),!0}catch{return!1}}var b=new Set(["control_ready","network_ready","mesh_ready"]);function W(j){return(async()=>{try{let{resolveRuntimeRootDirectory:F,findRuntimeOwnerRecordByAriaHome:J,removeRuntimeOwnerRecord:G}=await import("@aria-cli/server"),I=F(),z=J(I,j);if(!z?.runtimeSocket)return null;if(!$(z.runtimePid))return G(I,z.nodeId),null;let{createResilientAttachedClient:K}=await import("./attached-local-control-client-2jz8vmjb.js"),q=await K({runtimeSocket:z.runtimeSocket,clientKind:"local-api",logDir:X.join(j,"logs")});try{let L=await q.api.getRuntimeBootstrap();if(!b.has(L.phase))return await q.release(),G(I,z.nodeId),null}catch{return await q.release(),null}return{control:q.api,release:()=>q.release()}}catch{return null}})()}async function B(j){let F=await W(j.ariaDir);if(F)return F;let{createDaemonService:J}=await import("./daemon-service-esj85cr7.js"),G=j.config.activeArion??"ARIA";await J({cli:j,cwd:process.cwd(),arionName:G}).start({});let{resolveRuntimeRootDirectory:z}=await import("@aria-cli/server"),K=z(),q=X.join(K,"owners"),L=Date.now()+15000,P=null,Q=null;try{let{watch:Y,mkdirSync:Z,existsSync:_}=await import("node:fs");if(!_(q))Z(q,{recursive:!0,mode:448});try{P=Y(q,()=>Q?.()),P.on("error",()=>{})}catch{}let T=50;while(Date.now()<L){let U=await W(j.ariaDir);if(U)return U;await new Promise((V)=>{Q=V,setTimeout(V,T)}),Q=null,T=Math.min(Math.round(T*1.5),200)}}finally{P?.close()}throw Error("Daemon started but socket not reachable. Check ARIA_HOME.")}
|
|
2
|
+
export{B as k};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import*as k from"fs";import*as K from"os";import{getModelById as Q,getModelByShortName as R,isValidTier as J}from"@aria-cli/models";import{log as z}from"@aria-cli/types";function L(){if(process.env.ARIA_HOME)return process.env.ARIA_HOME;return`${process.env.HOME||K.homedir()}/.aria`}function O(){return`${L()}/config.json`}function U(){try{let q=O();if(k.existsSync(q)){let b=JSON.parse(k.readFileSync(q,"utf-8"));try{if(b.defaultModel&&!b.preferredTier){let G=Q(b.defaultModel)||R(b.defaultModel);if(!G)z.warn(`Unknown model "${b.defaultModel}" migrated to balanced tier (Sonnet 4.5)`);let H=G?.tier||"balanced";b.preferredTier=J(H)?H:"balanced",delete b.defaultModel,F(b)}if(b.preferredTier!==void 0&&!J(b.preferredTier))z.warn(`Invalid tier "${b.preferredTier}" corrected to balanced tier`),b.preferredTier="balanced",F(b);let x=!1;if(!b.awsRegion&&process.env.AWS_REGION)b.awsRegion=process.env.AWS_REGION,x=!0;if(!b.awsProfile&&process.env.AWS_PROFILE)b.awsProfile=process.env.AWS_PROFILE,x=!0;if(x)F(b)}catch(x){z.warn("Config migration failed, using config as-is:",x instanceof Error?x.message:x)}return b}}catch(q){z.warn("[Config] Failed to load config file:",q)}return{}}var Y=U;function F(q){let b=L();if(!k.existsSync(b))k.mkdirSync(b,{recursive:!0});k.writeFileSync(O(),JSON.stringify(q,null,2),"utf-8")}
|
|
2
|
+
export{L as ua,O as va,U as wa,Y as xa,F as ya};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{ua as j}from"./index-nnqfqvqh.js";import{za as M}from"./index-9j6r3gr8.js";import*as N from"node:net";import{appendFileSync as C,mkdirSync as m}from"node:fs";import{join as I}from"node:path";import{randomUUID as c}from"node:crypto";import{createRuntimeSocketAttachedLocalControlClient as u,createRuntimeSocketLocalControlClient as d,createTrustedRuntimeError as a,AttachedClientLeaseGrantSchema as l,LocalControlSocketAttachClientRequestSchema as p,LocalControlSocketAttachClientResponseSchema as i,LocalControlSocketRequestSchema as n,LocalControlSocketResponseSchema as s}from"@aria-cli/tools";import{RuntimeBootstrapRecordSchema as yB}from"@aria-cli/tools";function x(B){return B==="control_ready"||B==="network_ready"||B==="mesh_ready"}function T(B,R){if(R.nodeId!==B)throw Error(`[local-control-client] Runtime bootstrap node mismatch for ${B}: received ${R.nodeId}`);if(!x(R.phase))throw Error(`[local-control-client] Runtime bootstrap for ${B} is not attachable (phase=${R.phase})`);return R}var O;async function k(){let B=j();if(O?.ariaDir===B)return O.handler;let{CentralErrorHandler:R}=await import("@aria-cli/aria/error-handler"),z=new R({ariaDir:B});return O={ariaDir:B,handler:z},z}async function H(B,R){await(await k()).report(B,{workingDir:process.cwd(),providerState:{lastProvider:"trusted-local-control",lastModel:R.endpoint,...typeof R.responseStatus==="number"?{lastStatusCode:R.responseStatus}:{}},configSnapshot:{transport:R.transport,endpoint:R.endpoint,...typeof R.responseStatus==="number"?{responseStatus:R.responseStatus}:{},payload:R.payload}})}async function v(B){await new Promise((R)=>setTimeout(R,Math.max(B,0)))}var r=1e4,t=250,S,L,E;function o(){return S??=import("@aria-cli/server/runtime/host-supervisor"),S}function e(){return L??=import("@aria-cli/server/runtime/node-metadata"),L}function BB(){return E??=import("@aria-cli/server/runtime/node-store"),E}async function g(B){let{resolveOrCreateNode:R}=await e();return R({ariaHome:B})}async function q(B,R){let{NodeStore:z}=await BB(),U=new z({ariaHome:B});try{return U.readRuntimeOwnerRecord(R)}finally{U.close()}}function K(B){if(!(B instanceof Error))return!1;let R=B.message;return R.includes("connect ENOENT")||R.includes("ECONNREFUSED")||R.includes("Missing runtime owner record")||R.includes("not attachable")||R.includes("not control-ready")}async function D(B){let R=await q(B.ariaHome,B.nodeId);if(!R)throw Error(`[local-control-client] Missing runtime owner record for node ${B.nodeId}`);let z=$B({runtimeSocket:R.runtimeSocket,pollIntervalMs:B.pollIntervalMs}),U=T(B.nodeId,await z.getRuntimeBootstrap()),Y,y,$;if(B.clientKind)$=await _B({runtimeSocket:R.runtimeSocket,clientKind:B.clientKind,logDir:I(B.ariaHome,"logs")}),Y=$.getClientId(),y=$.getClientAuthToken();let w=null;return{nodeId:B.nodeId,runtimeId:U.runtimeId,port:U.controlEndpoint.port,ownership:B.ownership,...Y?{attachedClientId:Y}:{},...y?{attachedClientAuthToken:y}:{},control:$?$.api:z,release:async(V)=>{if(w)return w;return w=(async()=>{let F=$;$=void 0,Y=void 0,y=void 0,await F?.release().catch(()=>{}),await B.release(V)})(),w}}}async function RB(B,R){let z=n.parse({id:c(),method:"attachClient",payload:R});return new Promise((U,Y)=>{let y=N.createConnection(B),$="",w=!1,V=!1,F,J=new Promise((P)=>{F=P}),G=()=>{if(V)return;if(V=!0,F?.(),!w)w=!0,Y(Error("Local control socket closed before establishing an attached-client lease"))};y.setEncoding("utf8"),y.once("connect",()=>{y.write(`${JSON.stringify(z)}
|
|
2
|
+
`)}),y.once("error",(P)=>{if(!w){w=!0,Y(P);return}G()}),y.once("end",G),y.once("close",G),y.on("data",async(P)=>{$+=P;let A=$.indexOf(`
|
|
3
|
+
`);if(A===-1||w)return;try{let _=s.parse(JSON.parse($.slice(0,A)));if(_.id!==z.id){w=!0,y.destroy(),Y(Error("Local control socket response ID mismatch"));return}if(!_.ok){let Z=a(_.error,_.diagnostic);await H(Z,{endpoint:"attachClient",responseStatus:null,payload:_,transport:"runtime_socket_attach"}),w=!0,y.destroy(),Y(Z);return}let X=l.parse(i.parse(_.payload));w=!0,U({clientId:X.clientId,clientAuthToken:X.clientAuthToken,release:async()=>{if(!V)y.destroy();await J}})}catch(_){w=!0,y.destroy(),Y(_)}})})}async function GB(B){let R=await g(B.ariaHome);if(!await q(B.ariaHome,R.nodeId))return null;let z=Date.now()+r;while(Date.now()<z)try{return await D({ariaHome:B.ariaHome,nodeId:R.nodeId,ownership:"reattached",release:async()=>{},pollIntervalMs:B.pollIntervalMs,clientKind:B.clientKind})}catch(U){if(!K(U))throw U;if(!await q(B.ariaHome,R.nodeId))return null;await v(t)}return null}function $B(B){if(B.auth)return u({runtimeSocket:B.runtimeSocket,pollIntervalMs:B.pollIntervalMs,auth:B.auth});return d(B)}async function bB(B){let R=async($,w)=>{let V=B.pollIntervalMs??100,F=Date.now()+Math.max(V*20,2000),J=null;while(Date.now()<F){if(B.signal?.aborted)throw Error(`[local-control-client] Attach-only client ${w} aborted while waiting for a live runtime owner on node ${$}`);try{if(!await q(B.ariaHome,$))J=Error(`[local-control-client] No live runtime owner available for attach-only client ${w} on node ${$}`);else return await D({ariaHome:B.ariaHome,nodeId:$,ownership:"reattached",release:async()=>{},pollIntervalMs:B.pollIntervalMs,clientKind:w})}catch(G){if(!K(G))throw G;J=G}await v(V)}throw J??Error(`[local-control-client] No live runtime owner available for attach-only client ${w} on node ${$}`)},{getHostSupervisor:z,HostSupervisorSplitBrainError:U}=await o(),Y=z(),y;try{y=await Y.attach({ariaHome:B.ariaHome,arionName:B.arionName,clientKind:B.clientKind,memoriaFactory:B.memoriaFactory,router:B.router,authResolver:B.authResolver,runSessionConfig:B.runSessionConfig,mcpServers:B.mcpServers,daemonSafetyPolicy:B.daemonSafetyPolicy,autonomousIntervalMs:B.autonomousIntervalMs,signal:B.signal,silent:B.silent,runtimeLifecycle:B.runtimeLifecycle,port:B.port})}catch($){if($ instanceof U)return D({ariaHome:B.ariaHome,nodeId:$.nodeId,ownership:"reattached",release:async()=>{},pollIntervalMs:B.pollIntervalMs,clientKind:B.clientKind});throw $}try{return await y.runtime.waitForInitialDiscovery(),await D({ariaHome:B.ariaHome,nodeId:y.nodeId,ownership:y.ownership,pollIntervalMs:B.pollIntervalMs,clientKind:B.clientKind,release:($)=>y.release($)})}catch($){throw await y.release(),$}}async function JB(B){let R=await g(B.ariaHome);try{return(await D({ariaHome:B.ariaHome,nodeId:R.nodeId,ownership:"reattached",release:async()=>{},pollIntervalMs:B.pollIntervalMs})).control}catch(z){if(K(z))return null;throw z}}function PB(B){return null}var b=[0,250,500,1000];function W(B){if(!(B instanceof Error))return!1;let R=B.message;if(R.includes("attached-local-client-only"))return!0;if(R.includes("ECONNRESET"))return!0;if(R.includes("ECONNREFUSED"))return!0;if(R.includes("EPIPE"))return!0;if(R.includes("connect ENOENT"))return!0;if(R.includes("socket hang up"))return!0;if(R.includes("closed before"))return!0;return!1}function h(B){if(B<=0)return Promise.resolve();return new Promise((R)=>{setTimeout(R,B).unref?.()})}async function _B(B){let{runtimeSocket:R,clientKind:z="local-api"}=B,U=!1,Y,y,$=null,w=null,V=(_)=>{if(!B.logDir)return;try{m(B.logDir,{recursive:!0}),C(I(B.logDir,"reattach.jsonl"),JSON.stringify({ts:new Date().toISOString(),pid:process.pid,..._})+`
|
|
4
|
+
`)}catch{}};async function F(){if(w)await w().catch(()=>{}),w=null;let _=await RB(R,p.parse({clientKind:z,lease:!0,pid:process.pid,displayName:B.displayName}));Y=_.clientId,y=_.clientAuthToken,w=()=>_.release(),$=u({runtimeSocket:R,auth:{clientId:_.clientId,clientAuthToken:_.clientAuthToken}}),V({event:"lease_acquired",clientId:_.clientId})}await F();async function J(_,X){if(U)throw Error("ResilientAttachedClient has been released");try{return await X($)}catch(Z){if(!W(Z))throw Z;V({event:"reattach_start",method:_,error:Z.message});for(let Q=0;Q<b.length;Q++){if(U)throw Error("ResilientAttachedClient has been released");await h(b[Q]??0);try{await F();let f=await X($);return V({event:"reattach_success",method:_,attempt:Q}),f}catch(f){if(V({event:"reattach_retry_failed",method:_,attempt:Q,error:f.message,willRetry:W(f)&&Q<b.length-1}),!W(f)||Q===b.length-1)throw f}}throw Z}}async function*G(_,X){if(U)throw Error("ResilientAttachedClient has been released");try{yield*X($);return}catch(Z){if(!W(Z))throw Z;V({event:"reattach_stream_start",method:_,error:Z.message});for(let Q=0;Q<b.length;Q++){if(U)throw Error("ResilientAttachedClient has been released");await h(b[Q]??0);try{await F(),yield*X($),V({event:"reattach_stream_success",method:_,attempt:Q});return}catch(f){if(V({event:"reattach_stream_retry_failed",method:_,attempt:Q,error:f.message,willRetry:W(f)&&Q<b.length-1}),!W(f)||Q===b.length-1)throw f}}}}let P=new Set(["streamRun","subscribeRuntimeEvents","subscribeInbox","subscribePeers","subscribeDirectClientInbox"]);return{api:new Proxy({},{get(_,X){if(X==="then"||X==="catch"||X==="finally")return;if(P.has(X))return(...Z)=>G(X,(Q)=>Q[X](...Z));return(...Z)=>J(X,(Q)=>Q[X](...Z))}}),getClientId:()=>Y,getClientAuthToken:()=>y,release:async()=>{U=!0;let _=Error("release() caller").stack;if(w)await w().catch(()=>{}),w=null;V({event:"released",clientId:Y,releaseStack:_})}}}
|
|
5
|
+
export{RB as oa,GB as pa,bB as qa,JB as ra,PB as sa,_B as ta};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ua as B,xa as R,ya as m}from"./index-nnqfqvqh.js";import{createRuntimeDefaultRouter as Kq,getCliModels as N,ModelDiscovery as Qq}from"@aria-cli/models";import{createRuntimeAuthContext as Wq}from"@aria-cli/auth";import{MemoriaPool as Zq}from"@aria-cli/aria";import{readFile as D}from"fs/promises";import{join as C}from"path";import{homedir as p}from"os";var f={mcp:{servers:[]}};async function L(x){try{let q=await D(x,"utf-8"),J=JSON.parse(q);if(J.mcp?.servers){for(let z of J.mcp.servers)if(z.env){for(let[Q,K]of Object.entries(z.env))if(typeof K==="string"&&K.startsWith("${")&&K.endsWith("}")){let Z=K.slice(2,-1);z.env[Q]=process.env[Z]||""}}}if(J.mcp?.servers)for(let z of J.mcp.servers){if(!z.name||typeof z.name!=="string")throw Error('Invalid MCP server config: missing "name" field');if(!z.transport)throw Error(`MCP server "${z.name}": missing "transport" field`);if(z.transport&&!["stdio","sse"].includes(z.transport))throw Error(`MCP server "${z.name}": unknown transport "${z.transport}"`);if(z.transport==="stdio"&&!z.command)throw Error(`MCP server "${z.name}": stdio transport requires "command" field`);if(z.transport==="sse"&&!z.url)throw Error(`MCP server "${z.name}": sse transport requires "url" field`)}return J}catch(q){if(q.code==="ENOENT")return null;throw q}}function y(x,q){let J=x.mcp?.servers||[],z=q.mcp?.servers||[],Q=new Set(z.map((K)=>K.name));return{mcp:{servers:[...J.filter((K)=>!Q.has(K.name)),...z]}}}async function F(x){let q={...f},J=C(p(),".aria","config.json"),z=await L(J);if(z)q=y(q,z);if(x){let Q=C(x,"aria.config.json"),K=await L(Q);if(K)q=y(q,K)}return q}import{readFileSync as g}from"fs";import{join as u}from"path";import{homedir as c}from"os";import{parse as w}from"yaml";var H={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}},U=["minimal","standard","debug"];function Gq(x){let q=U.indexOf(x);return U[(q+1)%U.length]}function Vq(x,q){let J=H[x],z={};if(q.showThinking!==J.showThinking)z.showThinking=q.showThinking;if(q.showCosts!==J.showCosts)z.showCosts=q.showCosts;if(q.showToolArgs!==J.showToolArgs)z.showToolArgs=q.showToolArgs;if(q.toolOutput!==J.toolOutput)z.toolOutput=q.toolOutput;if(q.showTraces!==J.showTraces)z.showTraces=q.showTraces;if(q.showPipelineTiming!==J.showPipelineTiming)z.showPipelineTiming=q.showPipelineTiming;if(q.showStatusBar!==J.showStatusBar)z.showStatusBar=q.showStatusBar;return z}function Fq(x,q){return{...H[x],...q??{}}}import{log as n}from"@aria-cli/types";var v={jsonlEnabled:!0,jsonlRetentionDays:1/0,jsonlMaxSizeMb:1/0,otelEndpoint:null},d={mode:"standard",syntaxHighlighting:!0,maxToolOutputLines:5,maxThinkingPreview:80};function t(){return{display:{...H.standard,...d},persistence:{...v}}}var l=new Set(["minimal","standard","debug"]),s=new Set(["hidden","collapsed","standard","expanded"]),i=new Set(["dark","light","dark-accessible","light-accessible","claude-dark","claude-light","claude-dark-daltonized","claude-light-daltonized"]);function o(x){return typeof x==="string"&&l.has(x)}function a(x){return typeof x==="string"&&s.has(x)}function r(x){return typeof x==="string"&&i.has(x)}function $(x){return typeof x==="boolean"}function Y(x){return typeof x==="number"&&Number.isInteger(x)&&x>0}function e(x){return typeof x==="number"&&Number.isInteger(x)&&x>=0}function qq(x){try{let q=g(x,"utf-8"),J=w(q);if(J===null||J===void 0||typeof J!=="object")return null;return J}catch(q){if(q.code==="ENOENT")return null;throw q}}function xq(x){let q={};if(o(x.mode))q.mode=x.mode;if(r(x.theme))q.theme=x.theme;if($(x.thinking))q.showThinking=x.thinking;if($(x.costs))q.showCosts=x.costs;if($(x.toolArgs))q.showToolArgs=x.toolArgs;if(a(x.toolOutput))q.toolOutput=x.toolOutput;if($(x.traces))q.showTraces=x.traces;if($(x.pipelineTiming))q.showPipelineTiming=x.pipelineTiming;if($(x.statusBar))q.showStatusBar=x.statusBar;if($(x.syntaxHighlighting))q.syntaxHighlighting=x.syntaxHighlighting;if(Y(x.maxToolOutputLines))q.maxToolOutputLines=x.maxToolOutputLines;if(e(x.maxThinkingPreview))q.maxThinkingPreview=x.maxThinkingPreview;return q}function zq(x){let q={};if($(x.jsonlEnabled))q.jsonlEnabled=x.jsonlEnabled;if(Y(x.jsonlRetentionDays)||x.jsonlRetentionDays===1/0)q.jsonlRetentionDays=x.jsonlRetentionDays;if(Y(x.jsonlMaxSizeMb)||x.jsonlMaxSizeMb===1/0)q.jsonlMaxSizeMb=x.jsonlMaxSizeMb;if(x.otelEndpoint===null)q.otelEndpoint=null;else if(typeof x.otelEndpoint==="string"&&x.otelEndpoint.length>0)q.otelEndpoint=x.otelEndpoint;return q}function _(x,q,J){return{...x,...q?j(q):{},...J?j(J):{}}}function Jq(x){let q=t(),J=x??u(c(),".aria","config.yaml"),z;try{z=qq(J)}catch(G){return n.warn(`[AriaConfig] Failed to parse ${J}: ${G.message}. Using defaults.`),q}if(z===null)return q;let Q=typeof z.display==="object"&&z.display!==null?z.display:{},K=xq(Q),Z=K.mode??q.display.mode,b=H[Z],W=_(b,K),k=typeof z.persistence==="object"&&z.persistence!==null?z.persistence:{},X=zq(k);return{display:{...W,mode:Z,theme:K.theme,syntaxHighlighting:K.syntaxHighlighting??q.display.syntaxHighlighting,maxToolOutputLines:K.maxToolOutputLines??q.display.maxToolOutputLines,maxThinkingPreview:K.maxThinkingPreview??q.display.maxThinkingPreview},persistence:{...q.persistence,...j(X)}}}function j(x){let q={};for(let[J,z]of Object.entries(x))if(z!==void 0)q[J]=z;return q}async function Sq(x){let q=R(),J=await F(x?.cwd??process.cwd()),z=x?.startupMode??"interactive",Q=q.awsRegion||process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION,K=q.awsProfile||process.env.AWS_PROFILE,Z=!1;if(!q.awsRegion&&process.env.AWS_REGION)q.awsRegion=process.env.AWS_REGION,Z=!0;if(!q.awsProfile&&process.env.AWS_PROFILE)q.awsProfile=process.env.AWS_PROFILE,Z=!0;if(Z)m(q);if(Q&&!process.env.AWS_REGION)process.env.AWS_REGION=Q;if(K&&!process.env.AWS_PROFILE)process.env.AWS_PROFILE=K;let W=Wq({ariaHome:B(),...Q||K?{bedrock:{awsRegion:Q,awsProfile:K}}:{}}).authResolver,k=await Kq({ariaHome:B(),authResolver:W,...Q||K?{bedrock:{awsRegion:Q,awsProfile:K}}:{}}),X=B(),G=new Zq(X,k),A=z!=="daemon"?await W.resolve("anthropic"):null,I=z!=="daemon"?await W.resolve("openai"):null,T=z!=="daemon"?await W.resolve("google"):null,h=z!=="daemon"?await W.resolve("github-copilot"):null,V=new Qq({authResolver:W,googleApiKey:T?.apiKey||q.googleApiKey,anthropicApiKey:A?.apiKey||q.anthropicApiKey,openaiApiKey:I?.apiKey,awsRegion:Q,awsProfile:K,cacheDir:X}),S=z==="daemon"?N():N(V.getCachedModels()),P=async(E)=>{if(z==="daemon")return N();let O=E?await V.refresh(!0):await V.getCachedOrRefresh();return N(O)},M={availableProviders:[...Q?["bedrock","bedrock-converse"]:[],...A?.apiKey?["anthropic"]:[],...I?.apiKey?["openai"]:[],...h?.apiKey?["github-copilot"]:[],...T?.apiKey?["google"]:[]]};return{config:q,router:k,pool:G,memoriaFactory:G.toFactory(),ariaDir:X,projectConfig:J,discovery:V,availableModels:S,refreshAvailableModels:P,credentialHints:M,authResolver:W}}
|
|
2
|
+
export{Gq as ja,Vq as ka,Fq as la,Jq as ma,Sq as na};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import{D as re,E as ae,P as ki,W as Ne}from"./index-76vaj0sr.js";import{aa as Fi}from"./index-5v7br509.js";import{ba as g,ca as H,da as k,ia as Oe}from"./index-xjwfqz7t.js";import{na as Ni}from"./index-sxga6d5s.js";import{qa as vi}from"./index-sx36201d.js";import{xa as N,ya as j}from"./index-nnqfqvqh.js";import{za as B}from"./index-9j6r3gr8.js";import Ai,{join as me}from"node:path";import{appendFileSync as nt,mkdirSync as tt}from"node:fs";import{ArionManager as ot,ArionStorage as rt,MemoriaPool as at}from"@aria-cli/aria";import{selectRunnableModelVariant as U}from"@aria-cli/models";import{HEADLESS_OPERATION_SCHEMAS as Pi}from"@aria-cli/tools";function $i(e){return{name:e.name??"ARIA",...e.emoji?{emoji:e.emoji}:{},personality:{traits:["helpful","curious"],style:"friendly"},...e.description?{profile:{background:e.description}}:{},createdBy:"headless"}}function Ui(e,i){let n=i?.trim();return n?`I want to create a new arion named "${e}". ${n}`:`I want to create a new arion named "${e}". Help me design their personality.`}function de(e){let i=e.arionManager;if(!i?.list||!i.hatch||!i.get||!i.wake||!i.rest)return{"arion.list":k("arionManager","arion.list"),"arion.hatch":k("arionManager","arion.hatch"),"arion.become":k("arionManager","arion.become"),"arion.rest":k("arionManager","arion.rest"),"arion.wake":k("arionManager","arion.wake"),"arion.create":k("arionManager","arion.create")};return{"arion.list":async function*(n){let t=i.list;yield g(n,"arion.list",{arions:await t()})},"arion.hatch":async function*(n,t){let o=i.get,r=t.name?.trim(),a=t.description?.trim();if(!r){yield H(n,"arion.hatch","ARION_HATCH_FAILED","arion.hatch requires a name");return}if(await o(r)){yield H(n,"arion.hatch","ARION_ALREADY_EXISTS",`An arion named "${r}" already exists.`);return}yield g(n,"arion.hatch",{mode:"guided",prompt:Ui(r,a),name:r,...a?{description:a}:{}})},"arion.create":async function*(n,t){let o=i.hatch,r=await o($i(t));yield g(n,"arion.create",{arion:r})},"arion.become":async function*(n,t){let{get:o,wake:r}=i,a=t.name?.trim();if(!a){yield H(n,"arion.become","ARION_BECOME_FAILED","arion.become requires a name");return}let s=await o(a);if(!s){yield H(n,"arion.become","ARION_NOT_FOUND",`Arion ${a} not found`);return}if(s.status==="resting")await r(a);await e.config?.setActiveArion?.(a);let c=await e.config?.getActiveArion?.()??a;yield g(n,"arion.become",{arion:s,activeArion:c})},"arion.rest":async function*(n,t){let o=i.rest,r=t.name?.trim();if(!r){yield H(n,"arion.rest","ARION_REST_FAILED","arion.rest requires a name");return}await o(r),yield g(n,"arion.rest",{success:!0,name:r})},"arion.wake":async function*(n,t){let o=i.wake,r=t.name?.trim();if(!r){yield H(n,"arion.wake","ARION_WAKE_FAILED","arion.wake requires a name");return}await o(r),yield g(n,"arion.wake",{success:!0,name:r})}}}function fe(e,i){let n=e.auth;if(!n?.status||!n.login||!n.logout)return{"auth.status":k("auth","auth.status"),"auth.login":k("auth","auth.login"),"auth.logout":k("auth","auth.logout")};return{"auth.status":async function*(t){let o=await n.status();yield g(t,"auth.status",{...o&&typeof o==="object"?o:{}})},"auth.login":async function*(t,o,r){yield*i.login(t,o,r)},"auth.logout":async function*(t,o){yield*i.logout(t,o)}}}import{ensureAuthProfileStore as G,syncExternalCliCredentials as X,isProfileInCooldown as Gi,upsertAuthProfile as M,updateAuthProfileStoreWithLockSync as Wi,refreshBedrockSsoToken as Yi,loginBedrockSso as Bi,listProfilesForProvider as W,loginWithGitHubCopilotToken as ge,readClaudeCodeCredentialsCached as Ke,readCodexCredentialsCached as Me,readGeminiCredentialsCached as Se,normalizeProviderId as Vi,OPENAI_CODEX_OAUTH_PROFILE_ID as Ji}from"@aria-cli/auth";import{spawnSync as oe}from"node:child_process";function Qi(){try{let e=oe("gh",["auth","token","-h","github.com"],{encoding:"utf8",timeout:5000});if(e.error)return{error:e.error.message};if(e.status!==0){let n=(e.stderr||"").trim(),t=(e.stdout||"").trim();return{error:n||t||`gh auth token exited with status ${e.status}`}}let i=(e.stdout||"").trim();if(i.length<8)return{error:"gh auth token returned an empty/short token"};return{token:i}}catch(e){return{error:e instanceof Error?e.message:String(e)}}}function Zi(e="github.com"){try{let i=oe("gh",["auth","status","-h",e],{encoding:"utf8",timeout:5000}),n=`${i.stdout||""}
|
|
2
|
+
${i.stderr||""}`,t=new Set;for(let o of n.split(/\r?\n/)){let r=o.match(/Logged in to .* account\s+([^\s]+)/i);if(r?.[1])t.add(r[1])}return[...t]}catch{return[]}}function Xi(e,i="github.com"){try{let n=oe("gh",["auth","token","-h",i,"-u",e],{encoding:"utf8",timeout:5000});if(n.error)return{error:n.error.message};if(n.status!==0)return{error:(n.stderr||n.stdout||"").trim()||"gh token failed"};let t=(n.stdout||"").trim();if(t.length<8)return{error:"empty/short token"};return{token:t}}catch(n){return{error:n instanceof Error?n.message:String(n)}}}function zi(){try{let e=`${process.env.HOME||""}/.copilot/config.json`,n=(oe("node",["-e",`const fs=require('fs');const p=${JSON.stringify(e)};if(!fs.existsSync(p)){process.exit(0);}const j=JSON.parse(fs.readFileSync(p,'utf8'));const login=j?.last_logged_in_user?.login||j?.logged_in_users?.[0]?.login||'';if(login)process.stdout.write(login);`],{encoding:"utf8",timeout:5000}).stdout||"").trim();return n?{login:n}:{}}catch(e){return{error:e instanceof Error?e.message:String(e)}}}function Ii(e){let i=e?.trim()??"";if(!i)return{useGhToken:!0,autoSelectSource:!0};let n=i.split(/\s+/).filter(Boolean),t,o,r=!0,a=!1,s=(c)=>{let l=n[c+1];return l&&!l.startsWith("--")?l:void 0};for(let c=0;c<n.length;c+=1){let l=n[c];if(l==="--profile"||l==="--label"){let f=s(c);if(f)o=f,c+=1;continue}if(l.startsWith("--profile=")||l.startsWith("--label=")){o=l.split("=",2)[1]?.trim()||o;continue}if(l==="--source"){let f=s(c)?.toLowerCase();if(f==="device")r=!1;else if(f==="auto")a=!0;c+=f?1:0;continue}if(l.startsWith("--source=")){let f=l.split("=",2)[1]?.toLowerCase();if(f==="device")r=!1;else if(f==="auto")a=!0;continue}if(!l.startsWith("--")&&!t)t=l,r=!1}if(t&&t.length>0)r=!1;return{token:t,profileLabel:o,useGhToken:r,autoSelectSource:a}}function te(e){let i=(e||"").trim();if(!i)return;return i.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||void 0}function je(){let e=[],i=new Set,n=["GH_TOKEN","GITHUB_TOKEN","COPILOT_GITHUB_TOKEN"];for(let s of n){let c=process.env[s]?.trim();if(c&&c.length>=8){let l=`env:${s}`;if(!i.has(l))e.push({id:l,label:`Using ${s} from environment`,source:"env",token:c,status:"connected"}),i.add(l);break}}let t=Zi("github.com");for(let s of t){let c=Xi(s,"github.com").token,l=`GitHub CLI account: ${s}`,f=`gh:${s}`;if(!i.has(f))e.push({id:f,label:l,source:"gh",login:s,token:c,profileLabel:te(s),status:c?"connected":"none"}),i.add(f)}let o=G();X(o);let r=W(o,"github-copilot");for(let s of r){let c=o.profiles[s];if(!c)continue;let l=s.split(":").slice(1).join(":")||s,f=`profile:${l}`;if(i.has(f))continue;let u=c.type==="oauth"&&c.refresh?c.refresh:void 0,m=c.type==="oauth"&&Date.now()<c.expires;e.push({id:f,label:`Copilot profile: ${l}`,source:"copilot",login:l,token:u,profileLabel:te(l),status:m||u?"connected":"none"}),i.add(f)}let a=zi();if(a.login){let s=`copilot:${a.login}`;if(!i.has(s)&&!i.has(`profile:${a.login}`))e.push({id:s,label:`Copilot CLI last login: ${a.login}`,source:"copilot",login:a.login,profileLabel:te(a.login),status:"connected"}),i.add(s)}return e.push({id:"device:new",label:"Sign in with a new GitHub account (device flow)",source:"device",status:"none"}),e}function qi(){let e=[],i=process.env.ANTHROPIC_API_KEY?.trim();if(i&&i.length>8){let r=i.startsWith("sk-ant-api");e.push({id:"env-key",label:"Using ANTHROPIC_API_KEY from environment",description:r?"API key detected":"Key format unrecognized",method:"env-key",status:r?"connected":"none"})}let n=G();X(n);let t=W(n,"anthropic");for(let r of t){let a=n.profiles[r];if(!a)continue;let s=(a.type==="oauth"||a.type==="token")&&"expires"in a&&typeof a.expires==="number"&&a.expires>Date.now();e.push({id:`profile:${r}`,label:`Saved profile: ${r}`,description:s?"Credentials active":"Credentials expired — will refresh on use",method:"api-key",status:s?"connected":"available"})}let o=Ke();if(o){let r=o.expires>Date.now();e.push({id:"claude-cli",label:"Import from Claude Code CLI",description:r?"Use existing Claude Code credentials from keychain":"Credentials expired, will refresh",method:"claude-cli",status:r?"connected":"available"})}e.push({id:"subscription",label:"Claude account with subscription",description:"Pro, Max, Team, or Enterprise",method:"subscription",status:ye("anthropic")==="connected"?"connected":"none"}),e.push({id:"console",label:"Anthropic Console account",description:"API usage billing",method:"console",status:"none"}),e.push({id:"setup-token",label:"Paste setup-token",description:"From `claude setup-token` or admin provisioning",method:"setup-token",status:"none"});{let r=ye("bedrock"),a=!!process.env.AWS_PROFILE?.trim();e.push({id:"bedrock",label:"3rd-party platform",description:a?`Amazon Bedrock (AWS_PROFILE=${process.env.AWS_PROFILE})`:"Amazon Bedrock — set AWS_PROFILE to configure",method:"bedrock",status:r==="connected"?"connected":a?"available":"none"})}return e}async function en(e){switch(e){case"subscription":return{mode:"oauth",provider:"anthropic"};case"console":case"api-key":return{mode:"anthropic_key_input",provider:"anthropic"};case"setup-token":return{mode:"anthropic_setup_token",provider:"anthropic"};case"env-key":{let i=process.env.ANTHROPIC_API_KEY?.trim();if(!i)return{mode:"direct",result:{success:!1,message:"ANTHROPIC_API_KEY not set in environment"}};return M({profileId:"anthropic:env",credential:{type:"api_key",provider:"anthropic",key:i}}),{mode:"direct",result:{success:!0,message:"Saved ANTHROPIC_API_KEY from environment"}}}case"claude-cli":{let i=Ke();if(!i)return{mode:"direct",result:{success:!1,message:"No Claude Code credentials found. Run `claude login` first."}};if(i.type==="oauth")return M({profileId:"anthropic:claude-cli",credential:{type:"oauth",provider:"anthropic",access:i.access,refresh:i.refresh,expires:i.expires}}),{mode:"direct",result:{success:!0,message:"Imported Claude Code OAuth credentials"}};if(i.type==="token")return M({profileId:"anthropic:claude-cli",credential:{type:"token",provider:"anthropic",token:i.token,expires:i.expires}}),{mode:"direct",result:{success:!0,message:"Imported Claude Code token"}};return{mode:"direct",result:{success:!1,message:"Unknown Claude Code credential type"}}}case"bedrock":return $e();default:{if(e.startsWith("profile:"))return{mode:"direct",result:{success:!0,message:`Selected profile: ${e.replace("profile:","")}`}};return{mode:"direct",result:{success:!1,message:`Unknown method: ${e}`}}}}}function nn(){let e=[],i=process.env.OPENAI_API_KEY?.trim();if(i&&i.length>8){let r=i.startsWith("sk-");e.push({id:"env-key",label:"Using OPENAI_API_KEY from environment",description:r?"API key detected":"Key format unrecognized",method:"env-key",status:r?"connected":"none"})}let n=G();X(n);let t=new Set;for(let r of["openai","openai-codex"]){let a=W(n,r);for(let s of a){if(t.has(s))continue;t.add(s);let c=n.profiles[s];if(!c)continue;let l=(c.type==="oauth"||c.type==="token")&&"expires"in c&&typeof c.expires==="number"&&c.expires>Date.now();e.push({id:`profile:${s}`,label:`Saved profile: ${s}`,description:l?"Credentials active":"Credentials expired — will refresh on use",method:"profile",status:l?"connected":"available"})}}let o=Me();if(o){let r=o.expires>Date.now();e.push({id:"codex-import",label:"Import from Codex CLI",description:r?"Use existing Codex credentials":"Credentials expired, will refresh",method:"codex-import",status:r?"connected":"available"})}return e.push({id:"api-key",label:"Paste API key",description:"Enter your OpenAI sk-* API key",method:"api-key",status:"none"}),e}async function tn(e){switch(e){case"api-key":return{mode:"openai_key_input",provider:"openai"};case"env-key":{let i=process.env.OPENAI_API_KEY?.trim();if(!i)return{mode:"direct",result:{success:!1,message:"OPENAI_API_KEY not set in environment"}};return M({profileId:"openai:env",credential:{type:"api_key",provider:"openai",key:i}}),{mode:"direct",result:{success:!0,message:"Saved OPENAI_API_KEY from environment"}}}case"codex-import":{let i=Me();if(!i)return{mode:"direct",result:{success:!1,message:"No Codex CLI credentials found. Run `codex auth` first."}};return M({profileId:Ji,credential:{type:"oauth",provider:"openai",access:i.access,refresh:i.refresh,expires:i.expires}}),{mode:"direct",result:{success:!0,message:"Imported Codex CLI OAuth credentials"}}}default:{if(e.startsWith("profile:"))return{mode:"direct",result:{success:!0,message:`Selected profile: ${e.replace("profile:","")}`}};return{mode:"direct",result:{success:!1,message:`Unknown method: ${e}`}}}}}function on(){let e=[],i=(process.env.GOOGLE_API_KEY??process.env.GEMINI_API_KEY)?.trim();if(i&&i.length>8){let r=i.startsWith("AIza");e.push({id:"env-key",label:`Using ${process.env.GOOGLE_API_KEY?"GOOGLE_API_KEY":"GEMINI_API_KEY"} from environment`,description:r?"API key detected":"Key format unrecognized",method:"env-key",status:r?"connected":"none"})}let n=G();X(n);let t=W(n,"google");for(let r of t){let a=n.profiles[r];if(!a)continue;let s=(a.type==="oauth"||a.type==="token")&&"expires"in a&&typeof a.expires==="number"&&a.expires>Date.now();e.push({id:`profile:${r}`,label:`Saved profile: ${r}`,description:s?"Credentials active":"Credentials expired — will refresh on use",method:"profile",status:s?"connected":"available"})}let o=Se();if(o){let r=o.expires>Date.now();e.push({id:"gemini-import",label:"Import from Gemini CLI",description:r?"Use existing Gemini CLI credentials":"Credentials expired, will refresh",method:"gemini-import",status:r?"connected":"available"})}return e.push({id:"api-key",label:"Paste API key",description:"Enter your Google AIza* API key",method:"api-key",status:"none"}),e.push({id:"oauth",label:"Gemini CLI OAuth",description:"Sign in via browser-based OAuth flow",method:"oauth",status:"none"}),e}async function rn(e){switch(e){case"api-key":return{mode:"google_key_input",provider:"google"};case"oauth":return{mode:"oauth",provider:"google"};case"env-key":{let i=(process.env.GOOGLE_API_KEY??process.env.GEMINI_API_KEY)?.trim();if(!i)return{mode:"direct",result:{success:!1,message:"GOOGLE_API_KEY / GEMINI_API_KEY not set in environment"}};return M({profileId:"google:env",credential:{type:"api_key",provider:"google",key:i}}),{mode:"direct",result:{success:!0,message:"Saved Google API key from environment"}}}case"gemini-import":{let i=Se();if(!i)return{mode:"direct",result:{success:!1,message:"No Gemini CLI credentials found. Run `gemini auth` first."}};return M({profileId:"google:gemini-cli",credential:{type:"oauth",provider:"google",access:i.access,refresh:i.refresh,expires:i.expires}}),{mode:"direct",result:{success:!0,message:"Imported Gemini CLI OAuth credentials"}}}default:{if(e.startsWith("profile:"))return{mode:"direct",result:{success:!0,message:`Selected profile: ${e.replace("profile:","")}`}};return{mode:"direct",result:{success:!1,message:`Unknown method: ${e}`}}}}}var ue=["bedrock","anthropic","google","openai","github-copilot"],an={bedrock:"Bedrock (AWS SSO)",anthropic:"Anthropic",google:"Google (Gemini)",openai:"OpenAI","github-copilot":"GitHub Copilot"};function cn(e){return ue.includes(e)}var ln={anthropic:["ANTHROPIC_API_KEY"],openai:["OPENAI_API_KEY"],google:["GOOGLE_API_KEY","GEMINI_API_KEY"],"github-copilot":["GH_TOKEN","GITHUB_TOKEN","COPILOT_GITHUB_TOKEN"],bedrock:["AWS_PROFILE"]};function ye(e){let i=Wi({updater:(r)=>X(r)})??G(),n=Vi(e),t=W(i,n);for(let r of t){let a=i.profiles[r];if(!a)continue;if(Gi(i,r))continue;if(a.type==="api_key"&&a.key?.trim())return"connected";if(a.type==="oauth"&&"expires"in a){let s=a.expires;if(s&&s<Date.now())continue;return"connected"}if(a.type==="token"){let s=a.expires;if(!s||Date.now()<s)return"connected";continue}return"connected"}let o=ln[n]??[];for(let r of o)if(process.env[r]?.trim())return"connected";return t.length>0?"expired":"none"}function z(){return ue.map((e)=>{let i=ye(e),n=G(),t=W(n,e),o;for(let r of t){let a=n.profiles[r];if(a?.email){o=a.email;break}}return{id:e,label:an[e],status:i,...o?{email:o}:{}}})}async function $e(e){if(await Yi(e))return{mode:"direct",result:{success:!0,message:"Bedrock SSO token refreshed (silent)"}};if(await Bi(e))return{mode:"direct",result:{success:!0,message:"Bedrock SSO login succeeded — credentials refreshed"}};return{mode:"direct",result:{success:!1,message:["Bedrock SSO login failed.","Try running manually: aws sso login --profile "+(e||process.env.AWS_PROFILE||"default")].join(`
|
|
3
|
+
`)}}}function ne(e,i){if(i.length<8)return{mode:"direct",result:{success:!1,message:"API key too short (minimum 8 characters)"}};let n=`${e}:manual`;return M({profileId:n,credential:{type:"api_key",provider:e,key:i}}),{mode:"direct",result:{success:!0,message:`Saved ${e} API key (profile: ${n})`}}}function sn(e){if(e.length<8)return{mode:"direct",result:{success:!1,message:"Setup token too short (minimum 8 characters)"}};let i="anthropic:setup-token";return M({profileId:i,credential:{type:"api_key",provider:"anthropic",key:e}}),{mode:"direct",result:{success:!0,message:`Saved Anthropic setup token (profile: ${i})`}}}async function mn(e,i){if(!cn(e))return{mode:"direct",result:{success:!1,message:`Unknown provider "${e}". Supported: ${ue.join(", ")}`}};if(e==="bedrock"){let t=i?.trim()||void 0;return $e(t)}if(e==="github-copilot"){let t=Ii(i);if(!t.token&&!t.profileLabel&&t.autoSelectSource)return{mode:"copilot_source_picker",provider:"github-copilot",options:je()};if(t.token){let o=await ge({githubToken:t.token,profileLabel:t.profileLabel});return{mode:"direct",result:{success:o.success,message:o.message}}}if(t.useGhToken){let o=Qi();if(o.token){let r=await ge({githubToken:o.token,profileLabel:t.profileLabel});if(r.success)return{mode:"direct",result:{success:!0,message:`${r.message} (imported from gh auth token)`}};return{mode:"copilot_device",provider:"github-copilot",profileLabel:t.profileLabel,message:`gh auth token import failed: ${r.message}
|
|
4
|
+
Falling back to interactive device login...`}}return{mode:"copilot_device",provider:"github-copilot",profileLabel:t.profileLabel,...o.error?{message:`Could not read gh auth token: ${o.error}`}:{}}}return{mode:"copilot_device",provider:"github-copilot",profileLabel:t.profileLabel}}if(e==="anthropic"){let t=i?.trim();if(t?.startsWith("--setup-token")){let r=t.replace(/^--setup-token\s*/,"").trim();return sn(r)}if(t?.startsWith("--method")){let r=t.replace(/^--method\s*/,"").trim();return en(r)}if(t)return ne(e,t);return{mode:"anthropic_method_picker",provider:"anthropic",options:qi()}}if(e==="openai"){let t=i?.trim();if(t?.startsWith("--method")){let r=t.replace(/^--method\s*/,"").trim();return tn(r)}if(t)return ne(e,t);return{mode:"openai_method_picker",provider:"openai",options:nn()}}if(e==="google"){let t=i?.trim();if(t?.startsWith("--method")){let r=t.replace(/^--method\s*/,"").trim();return rn(r)}if(t)return ne(e,t);return{mode:"google_method_picker",provider:"google",options:on()}}let n=i?.trim();if(n)return ne(e,n);return{mode:"oauth",provider:e}}async function Ue(e){let i=e.trim().split(/\s+/),n=i[0]?.toLowerCase()||"",t=i.slice(1).join(" ").trim();if(!n)return{mode:"picker",providers:z()};if(n==="github-copilot"&&t.startsWith("--from ")){let o=t.slice(7).trim(),a=je().find((s)=>s.id===o);if(!a)return{mode:"direct",result:{success:!1,message:`Unknown Copilot source: ${o}`}};if(a.source==="device")return{mode:"copilot_device",provider:"github-copilot",profileLabel:a.profileLabel};if(a.token){let s=await ge({githubToken:a.token,profileLabel:a.profileLabel});return{mode:"direct",result:{success:s.success,message:s.message}}}if(a.login)return{mode:"copilot_device",provider:"github-copilot",profileLabel:te(a.login)}}return mn(n,t||void 0)}import{ensureAuthProfileStore as Ge,listProfilesForProvider as dn,updateAuthProfileStoreWithLockSync as We}from"@aria-cli/auth";function fn(e){let i=Ge(),n=dn(i,e);if(n.length===0)return{success:!1,message:`No credentials found for "${e}"`};We({updater:(o)=>{for(let r of n){let a=o.profiles[r]?.provider;if(delete o.profiles[r],a&&o.lastGood)delete o.lastGood[a]}if(o.usageStats)for(let r of n)delete o.usageStats[r];return!0}});let t=n.length===1?"profile":"profiles";return{success:!0,message:`Disconnected ${e} (removed ${n.length} ${t})`}}function gn(){let e=Ge(),i=Object.keys(e.profiles).length;if(i===0)return{success:!1,message:"No providers connected"};return We({updater:(t)=>{return t.profiles={},t.lastGood=void 0,t.usageStats=void 0,!0}}),{success:!0,message:`Cleared all credentials (${i} ${i===1?"profile":"profiles"} removed)`}}function Ye(e){let i=e.trim().toLowerCase();if(i==="all")return{mode:"direct",result:gn()};if(i)return{mode:"direct",result:fn(i)};let t=z().filter((o)=>o.status!=="none");if(t.length===0)return{mode:"direct",result:{success:!0,message:"No providers connected"}};return{mode:"picker",providers:t}}function Be(){return z()}async function Ve(e){return Ue(e)}function Je(e){return Ye(e)}function Qe(e){if(typeof e.args==="string"&&e.args.trim().length>0)return e.args.trim();let i=[];if(typeof e.provider==="string"&&e.provider.trim().length>0)i.push(e.provider.trim());if(typeof e.method==="string"&&e.method.trim().length>0)i.push(e.method.trim());if(typeof e.source==="string"&&e.source.trim().length>0)i.push("--source",e.source.trim());if(typeof e.profileLabel==="string"&&e.profileLabel.trim().length>0)i.push("--profile",e.profileLabel.trim());if(typeof e.credential==="string"&&e.credential.trim().length>0)i.push(e.credential.trim());return i.join(" ")}function Ze(e){if(typeof e.args==="string"&&e.args.trim().length>0)return e.args.trim();if(typeof e.provider==="string"&&e.provider.trim().length>0)return e.provider.trim();return""}function Xe(e){return"listAttachedClients"in e&&typeof e.listAttachedClients==="function"&&"listDirectClientInbox"in e&&typeof e.listDirectClientInbox==="function"}function he(e){return{"client.list":async function*(i){if(!Xe(e.localControl)){yield H(i,"client.list","MISSING_SERVICE","Attached local-control client directory is unavailable.");return}yield g(i,"client.list",{clients:await e.localControl.listAttachedClients()})},"client.inbox.list":async function*(i,n){if(!Xe(e.localControl)){yield H(i,"client.inbox.list","MISSING_SERVICE","Attached local-control client inbox is unavailable.");return}yield g(i,"client.inbox.list",{events:await e.localControl.listDirectClientInbox(n)})}}}function ke(e){let i=e.config;if(!i?.getTheme||!i.setTheme||!i.getAutonomy||!i.setAutonomy)return{"config.theme.get":k("config","config.theme.get"),"config.theme.set":k("config","config.theme.set"),"config.autonomy.get":k("config","config.autonomy.get"),"config.autonomy.set":k("config","config.autonomy.set")};return{"config.theme.get":async function*(n){try{yield g(n,"config.theme.get",{theme:await i.getTheme()})}catch(t){yield H(n,"config.theme.get","CONFIG_THEME_GET_FAILED",t instanceof Error?t.message:String(t))}},"config.theme.set":async function*(n,t){let o=t.theme?.trim();if(!o){yield H(n,"config.theme.set","CONFIG_THEME_SET_FAILED","config.theme.set requires a theme");return}try{let r=await i.setTheme(o);yield g(n,"config.theme.set",{theme:o,...r&&typeof r==="object"?r:{}})}catch(r){yield H(n,"config.theme.set","CONFIG_THEME_SET_FAILED",r instanceof Error?r.message:String(r))}},"config.autonomy.get":async function*(n){try{yield g(n,"config.autonomy.get",{autonomy:await i.getAutonomy()})}catch(t){yield H(n,"config.autonomy.get","CONFIG_AUTONOMY_GET_FAILED",t instanceof Error?t.message:String(t))}},"config.autonomy.set":async function*(n,t){let o=t.autonomy?.trim();if(!o){yield H(n,"config.autonomy.set","CONFIG_AUTONOMY_SET_FAILED","config.autonomy.set requires an autonomy level");return}try{let r=await i.setAutonomy(o);yield g(n,"config.autonomy.set",{autonomy:o,...r&&typeof r==="object"?r:{}})}catch(r){yield H(n,"config.autonomy.set","CONFIG_AUTONOMY_SET_FAILED",r instanceof Error?r.message:String(r))}}}}function ze(e){let i=e.daemon;if(!i?.start||!i.status||!i.stop)return{"daemon.start":k("daemon","daemon.start"),"daemon.status":k("daemon","daemon.status"),"daemon.stop":k("daemon","daemon.stop")};return{"daemon.start":async function*(n,t){try{yield g(n,"daemon.start",await i.start(t))}catch(o){yield H(n,"daemon.start","DAEMON_START_FAILED",o instanceof Error?o.message:String(o))}},"daemon.status":async function*(n,t){try{yield g(n,"daemon.status",await i.status(t))}catch(o){yield H(n,"daemon.status","DAEMON_STATUS_FAILED",o instanceof Error?o.message:String(o))}},"daemon.stop":async function*(n,t){try{yield g(n,"daemon.stop",await i.stop(t))}catch(o){yield H(n,"daemon.stop","DAEMON_STOP_FAILED",o instanceof Error?o.message:String(o))}}}}function He(e){let i=e.memoria;if(!i)return{"memory.remember":k("memoria","memory.remember"),"memory.recall":k("memoria","memory.recall"),"memory.list":k("memoria","memory.list"),"memory.forget":k("memoria","memory.forget"),"memory.recall_knowledge":k("memoria","memory.recall_knowledge")};return{"memory.remember":async function*(n,t){let o=t.text?.trim();if(!o){yield H(n,"memory.remember","MEMORY_REMEMBER_FAILED","memory.remember requires text");return}let r=await i.remember(o);if(!r?.id){yield H(n,"memory.remember","MEMORY_REMEMBER_FAILED","Failed to store memory");return}let a=await i.count(),s=o.length>50?`${o.slice(0,50)}...`:o;yield g(n,"memory.remember",{success:!0,message:`Remembered: "${s}"`,data:{id:r.id,count:a}})},"memory.recall":async function*(n,t){let o=t.query?.trim();if(!o){yield H(n,"memory.recall","MEMORY_RECALL_FAILED","memory.recall requires a query");return}let r=await i.recall(o),a=Array.isArray(r.memories)?r.memories:[];if(a.length===0){yield g(n,"memory.recall",{success:!0,message:"No memories found matching your query.",count:0,memories:[]});return}yield g(n,"memory.recall",{success:!0,message:`Found ${a.length} memories:`,count:a.length,memories:a})},"memory.list":async function*(n,t){let o=t,r=await i.list({...typeof o.limit==="number"?{limit:o.limit}:{},...typeof o.offset==="number"?{offset:o.offset}:{}}),a=typeof o.query==="string"&&o.query.trim().length>0?r.filter((s)=>s.content.toLowerCase().includes(o.query.trim().toLowerCase())):r;yield g(n,"memory.list",{memories:a,count:a.length})},"memory.forget":async function*(n,t){let o=t.id?.trim();if(!o){yield H(n,"memory.forget","MEMORY_FORGET_FAILED","memory.forget requires an id");return}let r=await i.deleteMemory(o);yield g(n,"memory.forget",{success:!0,message:r?`Deleted memory ${o}.`:`Memory ${o} not found or already deleted.`,deleted:r})},"memory.recall_knowledge":async function*(n,t){let o=t,r=o.topic?.trim();if(!r){yield H(n,"memory.recall_knowledge","MEMORY_RECALL_KNOWLEDGE_FAILED","memory.recall_knowledge requires a topic");return}let a=await i.recallTools({query:r,...typeof o.limit==="number"?{limit:o.limit}:{}});yield g(n,"memory.recall_knowledge",{tools:a,count:a.length})}}}import{randomUUID as qe}from"node:crypto";import{OutboundMessageSchema as yn}from"@aria-cli/tools";function un(e){let i=e.trim();if(!i)return null;let n=i.indexOf(" ");if(n<=0)return null;let t=i.slice(0,n).trim(),o=i.slice(n+1).trim();if(!t||!o)return null;return{recipient:t,content:o}}function Y(e){return e.displayNameSnapshot?.trim()||e.nodeId}function Re(e){return e.displayLabel.trim()||e.clientId}function Ie(e){let i=Re(e);return i===e.clientId?e.clientId:`${i} (${e.clientId})`}function ei(e){let i=e.trim().replace(/^@/,""),n=i.indexOf("#");if(n>0)return{peer:i.slice(0,n),client:i.slice(n+1)||void 0};let t=i.indexOf("/");if(t>0)return{peer:i.slice(0,t),arion:i.slice(t+1)||void 0};return{peer:i}}function hn(e,i){let{peer:n}=ei(i),t=e.find((r)=>r.nodeId.toLowerCase()===n);if(t)return t;let o=e.filter((r)=>Y(r).toLowerCase()===n);if(o.length===1)return o[0];return null}function kn(e,i){let n=i.trim().toLowerCase().replace(/^@/,"");return e.filter((t)=>Y(t).toLowerCase()===n).length>1}function Hn(e,i){let n=i.trim().toLowerCase().replace(/^@/,"");return e.find((t)=>t.clientId.toLowerCase()===n)??null}function Rn(e,i){let n=i.trim().toLowerCase();return e.find((t)=>Re(t).toLowerCase()===n)??null}function _n(e){let i={};if(e.targetArion)i.targetArion=e.targetArion;if(e.targetClient)i.targetClient=e.targetClient;let n=Object.keys(i).length>0;return{rawMessage:{version:1,id:`headless-send-${qe()}`,sender:{id:e.senderNodeId,name:e.senderName,type:"arion"},recipient:{id:e.recipient.nodeId,name:Y(e.recipient),type:"peer"},type:"message",content:e.content,timestamp:Date.now(),priority:2,...n?{metadata:i}:{}},to:e.recipient.nodeId,type:"message",content:e.content,priority:2,...n?{metadata:i}:{}}}function pn(e){return{rawMessage:{version:1,id:`headless-send-${qe()}`,sender:{id:e.senderNodeId,name:e.senderName,type:"arion"},recipient:{id:e.recipient.clientId,name:Re(e.recipient),type:"client"},type:"message",content:e.content,timestamp:Date.now(),priority:2},recipientInbox:{kind:"client",clientId:e.recipient.clientId},type:"message",content:e.content,priority:2}}async function Cn(e,i){let n=typeof i.args==="string"&&i.args.trim().length>0?un(i.args):i.recipient&&i.content?{recipient:i.recipient,content:i.content}:null;if(!n)return{ok:!1,code:"MESSAGE_SEND_FAILED",message:"Usage: /send <peer-name|node-id|client-id> <message>"};let[t,o,r]=await Promise.all([e.localControl.listPeers(),e.localControl.listAttachedClients(),e.localControl.getRuntimeStatus()]),a=i.senderName?.trim()||"ARIA",s=Hn(o,n.recipient);if(s){if(s.self)return{ok:!1,code:"MESSAGE_SEND_FAILED",message:"Cannot send a same-home message to yourself."};return{ok:!0,outbound:pn({senderNodeId:r.nodeId,senderName:a,recipient:s,content:n.content}),message:`Sent message to ${Ie(s)}.`}}if(kn(t,n.recipient))return{ok:!1,code:"MESSAGE_SEND_FAILED",message:`Multiple peers match "${n.recipient}". Use the nodeId instead.`};let c=hn(t,n.recipient);if(!c){let u=Rn(o,n.recipient);if(u)return{ok:!1,code:"MESSAGE_SEND_FAILED",message:`Same-home clients require the exact clientId. Use /clients to choose ${Ie(u)}.`};return{ok:!1,code:"MESSAGE_SEND_FAILED",message:`Recipient "${n.recipient}" not found.`}}let l=ei(n.recipient),f=l.arion?`${Y(c)}/${l.arion}`:l.client?`${Y(c)}#${l.client}`:Y(c);return{ok:!0,outbound:_n({senderNodeId:r.nodeId,senderName:a,recipient:c,content:n.content,targetArion:l.arion,targetClient:l.client}),message:`Sent message to ${f}.`}}function Dn(e,i){if(e.deliveryState==="queued_for_route")return i.replace(/^Sent/,"Queued");if(e.deliveryState==="dispatching")return`${i.slice(0,-1)}; awaiting acknowledgement.`;if(e.delivered)return i.replace(/^Sent/,"Delivered");return i}function _e(e){return{"message.send":async function*(i,n){let t=yn.safeParse(n);if(t.success){yield g(i,"message.send",{receipt:await e.localControl.sendDurable(t.data)});return}if(!(n&&typeof n==="object"&&(typeof n.args==="string"||typeof n.recipient==="string"||typeof n.content==="string"))){yield H(i,"message.send","INVALID_INPUT","Invalid input for message.send");return}let r=await Cn(e,n);if(!r.ok){yield H(i,"message.send",r.code,r.message);return}let a=await e.localControl.sendDurable(r.outbound);yield g(i,"message.send",{receipt:a,message:Dn(a,r.message)})},"message.inbox.list":async function*(i,n){yield g(i,"message.inbox.list",{events:await e.localControl.listInbox(n)})}}}function pe(e){let i=e.modelDiscovery;if(!i?.listAvailable||!i.refresh||!i.setCurrentModel)return{"model.list":k("modelDiscovery","model.list"),"model.set":k("modelDiscovery","model.set"),"model.refresh":k("modelDiscovery","model.refresh")};return{"model.list":async function*(n){let t=i.listAvailable;yield g(n,"model.list",{models:await t(),currentModel:await i.getCurrentModel?.()})},"model.set":async function*(n,t){let o=i.setCurrentModel,r=t.model?.trim();if(!r){yield H(n,"model.set","MODEL_SET_FAILED","model.set requires a model");return}let a=await o(r);yield g(n,"model.set",{currentModel:r,...a&&typeof a==="object"?a:{}})},"model.refresh":async function*(n){let t=i.refresh;yield g(n,"model.refresh",{models:await t(!0)})}}}function Ce(e){return{"peer.list":async function*(i){yield g(i,"peer.list",{peers:await e.localControl.listPeers()})},"peer.list_nearby":async function*(i){yield g(i,"peer.list_nearby",{peers:await e.localControl.listNearbyPeers()})},"peer.pending.list":async function*(i){yield g(i,"peer.pending.list",{requests:await e.localControl.listPendingPairRequests()})},"peer.pending.respond":async function*(i,n){yield g(i,"peer.pending.respond",{response:await e.localControl.respondToPairRequest(n)})},"peer.invite":async function*(i,n){yield g(i,"peer.invite",{invite:await e.localControl.createInvite(n)})},"peer.connect":async function*(i,n){yield g(i,"peer.connect",{invite:await e.localControl.invitePeer(n)})},"peer.accept_invite":async function*(i,n){yield g(i,"peer.accept_invite",{accepted:await e.localControl.acceptInviteToken(n)})},"peer.direct_pair":async function*(i,n){yield g(i,"peer.direct_pair",{pair:await e.localControl.directPair(n)})},"peer.repair":async function*(i,n){yield g(i,"peer.repair",{repair:await e.localControl.repairPeer(n)})},"peer.revoke":async function*(i,n){yield g(i,"peer.revoke",{revoke:await e.localControl.revokePeer(n)})}}}function De(e){return{"run.start":async function*(i,n,t){yield*e.start(i,n,t?.signal)},"run.resume":async function*(i,n,t){yield*e.resume(i,n,t?.signal)},"run.abort":async function*(i,n,t){yield*e.abort(i,n,t?.activeRunController)},"interaction.respond":async function*(i,n,t){let o=n&&typeof n==="object"&&"kind"in n?n:{kind:"interaction.respond",requestId:i,...n};yield*e.respond(o,t?.signal)}}}function ii(e){let i=e.hook;if(!i?.extract||!i.reflect||!i.consolidate||!i.ingest||!i.harvest)return{"hook.extract":k("hook","hook.extract"),"hook.reflect":k("hook","hook.reflect"),"hook.consolidate":k("hook","hook.consolidate"),"hook.ingest":k("hook","hook.ingest"),"hook.harvest":k("hook","hook.harvest")};return{"hook.extract":async function*(n,t,o){try{yield g(n,"hook.extract",await i.extract(t,{signal:o?.signal}))}catch(r){yield H(n,"hook.extract","HOOK_EXTRACT_FAILED",r instanceof Error?r.message:String(r))}},"hook.reflect":async function*(n,t,o){try{yield g(n,"hook.reflect",await i.reflect(t,{signal:o?.signal}))}catch(r){yield H(n,"hook.reflect","HOOK_REFLECT_FAILED",r instanceof Error?r.message:String(r))}},"hook.consolidate":async function*(n,t,o){try{yield g(n,"hook.consolidate",await i.consolidate(t,{signal:o?.signal}))}catch(r){yield H(n,"hook.consolidate","HOOK_CONSOLIDATE_FAILED",r instanceof Error?r.message:String(r))}},"hook.ingest":async function*(n,t,o){try{yield g(n,"hook.ingest",await i.ingest(t,{signal:o?.signal}))}catch(r){yield H(n,"hook.ingest","HOOK_INGEST_FAILED",r instanceof Error?r.message:String(r))}},"hook.harvest":async function*(n,t,o){try{yield g(n,"hook.harvest",await i.harvest(t,{signal:o?.signal}))}catch(r){yield H(n,"hook.harvest","HOOK_HARVEST_FAILED",r instanceof Error?r.message:String(r))}}}}function ni(e){let i=e.system;if(!i?.restart||!i.terminalSetup)return{"system.restart":k("system","system.restart"),"system.terminal_setup":k("system","system.terminal_setup")};return{"system.restart":async function*(n,t){yield g(n,"system.restart",await i.restart(t))},"system.terminal_setup":async function*(n){yield g(n,"system.terminal_setup",await i.terminalSetup())}}}import An from"node:path";import{lightReflection as On}from"@aria-cli/aria";import{ingestClaudeCodeHistory as En}from"@aria-cli/memoria-bridge";var ti=50,Ln=5;function p(e){if(!e?.aborted)return;let i=e.reason instanceof Error&&e.reason.message?e.reason.message:"The operation was aborted",n=Error(i);throw n.name="AbortError",n}function wn(e={}){let i={preHarvest:e.preHarvest===!0,feedback:e.feedback===!0,extract:e.extract===!0,stats:e.stats===!0,cleanup:e.cleanup===!0,cost:e.cost===!0,all:e.all===!0,limit:typeof e.limit==="number"&&Number.isInteger(e.limit)&&e.limit>0?e.limit:50};if(i.all)i.preHarvest=!0,i.extract=!0,i.stats=!0;return i}async function oi(e,i,n={}){if(p(n.signal),!i)return{output:{error:"no input on stdin"},exitCode:1};let t;try{if(t=JSON.parse(i),!Array.isArray(t))throw Error("expected array")}catch{return{output:{error:"stdin must be JSON array of {user, assistant} pairs"},exitCode:1}}if(t.length>ti)return{output:{error:`hook.extract accepts at most ${ti} pairs per request`},exitCode:1};let o=[],r=0,a=Array.from({length:Math.min(Ln,t.length)},async()=>{while(!0){p(n.signal);let s=r;if(r+=1,s>=t.length)return;let c=t[s];if(!c.user||!c.assistant){o[s]={user:c.user??"",extracted:0,error:"missing user or assistant"};continue}try{let l=await e.extractFromConversation(c.user,c.assistant);p(n.signal);let f=l?.learned;o[s]={user:c.user.slice(0,80),extracted:Array.isArray(f)?f.length:0}}catch(l){p(n.signal),o[s]={user:c.user.slice(0,80),extracted:0,error:l instanceof Error?l.message:String(l)}}}});return await Promise.all(a),{output:{extracted:o}}}async function Ee(e,i,n,t={}){p(t.signal);let o=[];if(n)try{let r=JSON.parse(n);if(Array.isArray(r)){for(let a of r)if(a.role&&a.content)o.push({role:a.role,content:typeof a.content==="string"?a.content:JSON.stringify(a.content)})}}catch{o.push({role:"user",content:"Session review"}),o.push({role:"assistant",content:n})}if(o.length<2)return{output:{findings:null,reason:"insufficient conversation"}};try{let r=await On(i,e,o);return p(t.signal),{output:{findings:r}}}catch(r){return p(t.signal),{output:{findings:null,error:r instanceof Error?r.message:String(r)}}}}async function ri(e,i={}){p(i.signal);try{let n=await e.reflect({full:!1});return p(i.signal),{output:n}}catch(n){return p(i.signal),{output:{error:n instanceof Error?n.message:String(n)}}}}async function ai(e,i={}){p(i.signal);try{let n=await En(e);return p(i.signal),{output:n}}catch(n){return p(i.signal),{output:{error:n instanceof Error?n.message:String(n)}}}}async function ci(e,i,n={},t={}){p(t.signal);let o=wn(n);if(!o.preHarvest&&!o.feedback&&!o.extract&&!o.stats&&!o.cleanup&&!o.cost)return{output:{help:"Use hook.harvest via `aria call` or the persistent headless server.",actions:["--pre-harvest: session quality scoring + tool intelligence (DuckDB, no LLM)","--extract: session extraction WITH LLM","--stats: health dashboard (includes learning velocity + dupe rate)","--cost: cost intelligence by model/project/day","--cleanup: garbage removal","--all: pre-harvest + extract + stats","--feedback: (deprecated, no-op)"]}};let r={};if(o.preHarvest){process.stderr.write(`[harvest] Running pre-harvest DuckDB analytics...
|
|
5
|
+
`);try{let{createAnalytics:a,scoreSessionQuality:s,mineToolFrequencies:c,mineWorkflowPatterns:l,detectTemporalDrift:f,getCostIntelligence:u}=await import("@aria-cli/memoria-bridge/analytics"),m=null;p(t.signal);try{m=await a();let y=m.expandPath("~/.claude/projects/**/*.jsonl");p(t.signal);let R=await s(m,y);p(t.signal);let T=await c(m,y);p(t.signal);let F=await l(m,y);p(t.signal);let x=await f(m,y);p(t.signal);let _=await u(m,y);p(t.signal),r.preHarvest={score:R,toolFreq:T,workflows:F,drift:x,cost:_}}catch(y){p(t.signal),r.preHarvest={error:y instanceof Error?y.message:String(y)}}finally{await m?.close().catch(()=>{})}}catch(a){p(t.signal),r.preHarvest={error:a instanceof Error?a.message:String(a)}}}if(o.cost&&!o.preHarvest){process.stderr.write(`[harvest] Running standalone cost analytics...
|
|
6
|
+
`);try{let{createAnalytics:a,getCostIntelligence:s}=await import("@aria-cli/memoria-bridge/analytics"),c=null;try{p(t.signal),c=await a();let l=c.expandPath("~/.claude/projects/**/*.jsonl");p(t.signal),r.cost=await s(c,l),p(t.signal)}finally{await c?.close().catch(()=>{})}}catch(a){p(t.signal),r.cost={error:a instanceof Error?a.message:String(a)}}}if(o.extract)process.stderr.write(`[harvest] Running extraction...
|
|
7
|
+
`),p(t.signal),r.extract=xn(await Ee(e,i,"",t));if(o.stats)try{p(t.signal),r.stats=await e.reflect({full:!1}),p(t.signal)}catch(a){p(t.signal),r.stats={error:a instanceof Error?a.message:String(a)}}if(o.cleanup)r.cleanup={skipped:!0,message:"cleanup remains a no-op in headless cutover"};if(o.cost&&o.preHarvest)r.cost=r.preHarvest?.cost??null;if(o.feedback)process.stderr.write(`[harvest] --feedback is deprecated and has no effect. Use --pre-harvest instead.
|
|
8
|
+
`),r.feedback={deprecated:!0};return{output:r}}function xn(e){return e.output}function Pn(e){return An.join("arions",e,"memory.db")}function I(e){if(e.output&&typeof e.output==="object")return e.output;return{value:e.output}}function li(e){let i=()=>process.env.ARIA_MEMORY_PATH||Pn(e.getArionName?.()??e.arionName),n=async(t)=>{let o=await e.cli.pool.get(e.resolveMemoriaPath?await e.resolveMemoriaPath():i());return t(o)};return{async extract(t,o){return n(async(r)=>I(await oi(r,JSON.stringify(t.pairs??[]),{signal:o?.signal})))},async reflect(t,o){let r=typeof t.conversation==="string"?t.conversation:JSON.stringify(t.messages??[]);return n(async(a)=>I(await Ee(a,e.cli.router,r,o)))},async consolidate(t,o){return n(async(r)=>I(await ri(r,o)))},async ingest(t,o){return n(async(r)=>I(await ai(r,o)))},async harvest(t,o){return n(async(r)=>I(await ci(r,e.cli.router,t,o)))}}}import{randomUUID as si}from"node:crypto";import{buildAuthorizeUrl as bn,completeGitHubCopilotDeviceFlow as Tn,exchangeCodeForTokens as Nn,generatePkce as vn,generateState as Fn,getOAuthConfig as Kn,requestGitHubCopilotDeviceCode as Mn,upsertAuthProfile as Sn}from"@aria-cli/auth";function D(e,i,n,t,o){return{kind:"result",requestId:e,op:i,ok:!1,error:{code:n,message:t,...o?{details:o}:{}}}}function V(e,i,n){return{kind:"result",requestId:e,op:i,ok:!0,result:n}}function mi(e){return e.map((i)=>({id:i.id,label:i.label,...i.email||i.status?{description:[i.status,i.email].filter(Boolean).join(" · ")}:{}}))}function di(e){return e.map((i)=>({id:i.id,label:i.label,...i.description||i.status?{description:[i.description,i.status].filter(Boolean).join(" · ")}:{}}))}function Le(e){return{interactionId:e.interactionId,source:e.source,interaction:e.interaction}}function jn(e,i){return{...e,__authPending:i}}function $n(e){let i=e.__authPending;if(!i||typeof i!=="object")return null;return i}class we{auth;sessionLedger;getActiveArionName;constructor(e,i,n){this.auth=e;this.sessionLedger=i;this.getActiveArionName=n}async*login(e,i,n){if(!this.auth?.login||!this.auth.status){yield D(e,"auth.login","MISSING_SERVICE","Kernel service auth is not configured for auth.login.");return}let t=await this.auth.login(i);yield*this.framesForInitialLoginResult(e,"auth.login",t,n)}async*logout(e,i){if(!this.auth?.logout){yield D(e,"auth.logout","MISSING_SERVICE","Kernel service auth is not configured for auth.logout.");return}let n=await this.auth.logout(i);if(n.mode==="direct"){if(n.result.success){yield V(e,"auth.logout",n.result);return}yield D(e,"auth.logout","AUTH_LOGOUT_FAILED",n.result.message);return}let t=await this.persistNewInteraction(e,{pending:{type:"logout-provider"},interaction:{kind:"selection",prompt:"Choose a provider to disconnect.",options:mi(n.providers)}});yield t,yield D(e,"auth.logout","INTERACTION_REQUIRED","auth.logout requires additional interaction before it can continue.",Le(t))}async*respond(e,i){let n=this.sessionLedger.getInteraction(e.interactionId);if(!n||n.source!=="auth"){yield D(e.requestId,"interaction.respond","INTERACTION_NOT_FOUND",`Unknown interaction ${e.interactionId}`);return}let t=$n(n.prompt);if(!t){yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_STATE",`Interaction ${e.interactionId} is missing auth resume state.`);return}let o=`auth:${e.requestId}`,r=this.sessionLedger.claimSessionForMutation(n.sessionId,o,30000),a=!1,s=()=>{if(a)return;a=!0,this.sessionLedger.releaseSessionClaim(n.sessionId,o)};try{if(e.response.kind==="cancel"){this.sessionLedger.cancelInteraction(n.sessionId,n.interactionId,{ownerId:o,expectedRevision:r.revision}),s(),yield D(e.requestId,"interaction.respond","INTERACTION_CANCELED","Interaction canceled.");return}switch(t.type){case"login-provider":{if(e.response.kind!=="selection"){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE","Provider selection requires a selection response.");return}let c=await this.auth?.login?.({args:e.response.selected});this.sessionLedger.recordInteractionResponse(n.sessionId,n.interactionId,e.response,{ownerId:o,expectedRevision:r.revision}),yield*this.framesForContinuedLoginResult(e.requestId,c,n.sessionId,o,r.revision+1,i);return}case"logout-provider":{if(e.response.kind!=="selection"){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE","Provider selection requires a selection response.");return}let c=await this.auth?.logout?.({args:e.response.selected});if(this.sessionLedger.recordInteractionResponse(n.sessionId,n.interactionId,e.response,{ownerId:o,expectedRevision:r.revision}),this.sessionLedger.completeRun(n.sessionId,{success:c.mode==="direct"?c.result.success:!1,message:c.mode==="direct"?c.result.message:"auth.logout requires additional interaction."},{ownerId:o,expectedRevision:r.revision+1}),s(),c.mode==="direct"&&c.result.success){yield V(e.requestId,"interaction.respond",c.result);return}yield D(e.requestId,"interaction.respond","AUTH_LOGOUT_FAILED",c.mode==="direct"?c.result.message:"auth.logout requires interaction.");return}case"login-method":{if(e.response.kind!=="selection"){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE","Method selection requires a selection response.");return}let c=await this.auth?.login?.({args:`${t.provider} --method ${e.response.selected}`});this.sessionLedger.recordInteractionResponse(n.sessionId,n.interactionId,e.response,{ownerId:o,expectedRevision:r.revision}),yield*this.framesForContinuedLoginResult(e.requestId,c,n.sessionId,o,r.revision+1,i);return}case"copilot-source":{if(e.response.kind!=="selection"){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE","GitHub Copilot source selection requires a selection response.");return}let c=await this.auth?.login?.({args:`github-copilot --from ${e.response.selected}`});this.sessionLedger.recordInteractionResponse(n.sessionId,n.interactionId,e.response,{ownerId:o,expectedRevision:r.revision}),yield*this.framesForContinuedLoginResult(e.requestId,c,n.sessionId,o,r.revision+1,i);return}case"credential-input":{if(e.response.kind!=="credential_input"){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE","Credential input requires a credential_input response.");return}let c=e.response.values[t.fieldKey];if(typeof c!=="string"||c.trim().length===0){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE",`Missing credential field ${t.fieldKey}.`);return}let l=await this.auth?.login?.({args:`${t.commandPrefix} ${c.trim()}`.trim()});this.sessionLedger.recordInteractionResponse(n.sessionId,n.interactionId,e.response,{ownerId:o,expectedRevision:r.revision}),yield*this.framesForContinuedLoginResult(e.requestId,l,n.sessionId,o,r.revision+1,i);return}case"oauth-code":{if(e.response.kind!=="credential_input"){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE","OAuth code entry requires a credential_input response.");return}let c=e.response.values[t.fieldKey];if(typeof c!=="string"||c.trim().length===0){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE",`Missing credential field ${t.fieldKey}.`);return}this.sessionLedger.recordInteractionResponse(n.sessionId,n.interactionId,e.response,{ownerId:o,expectedRevision:r.revision});let l=await Nn(t.provider,c.trim(),t.codeVerifier);Sn({profileId:`${t.provider}:oauth`,credential:{type:"oauth",provider:t.provider,access:l.access,refresh:l.refresh,expires:l.expires}}),this.sessionLedger.completeRun(n.sessionId,{success:!0,message:`Logged in to ${t.provider} successfully`},{ownerId:o,expectedRevision:r.revision+1}),s(),yield V(e.requestId,"interaction.respond",{success:!0,message:`Logged in to ${t.provider} successfully`});return}case"copilot-device":{if(e.response.kind!=="oauth_device"){s(),yield D(e.requestId,"interaction.respond","INVALID_INTERACTION_RESPONSE","GitHub Copilot device flow requires an oauth_device response.");return}this.sessionLedger.recordInteractionResponse(n.sessionId,n.interactionId,e.response,{ownerId:o,expectedRevision:r.revision});let c=await Tn({deviceCode:t.deviceCode,profileLabel:t.profileLabel,signal:i?.signal});if(this.sessionLedger.completeRun(n.sessionId,c,{ownerId:o,expectedRevision:r.revision+1}),s(),c.success){yield V(e.requestId,"interaction.respond",c);return}yield D(e.requestId,"interaction.respond","AUTH_LOGIN_FAILED",c.message);return}}}catch(c){s(),yield D(e.requestId,"interaction.respond","AUTH_INTERACTION_FAILED",c instanceof Error?c.message:String(c))}}async*framesForInitialLoginResult(e,i,n,t){if(n.mode==="direct"){if(n.result.success){yield V(e,i,n.result);return}yield D(e,i,"AUTH_LOGIN_FAILED",n.result.message);return}let o=await this.buildLoginInteractionSpec(n,t),r=await this.persistNewInteraction(e,o);yield r,yield D(e,i,"INTERACTION_REQUIRED","auth.login requires additional interaction before it can continue.",Le(r))}async*framesForContinuedLoginResult(e,i,n,t,o,r){if(i.mode==="direct"){if(this.sessionLedger.completeRun(n,i.result,{ownerId:t,expectedRevision:o}),this.sessionLedger.releaseSessionClaim(n,t),i.result.success){yield V(e,"interaction.respond",i.result);return}yield D(e,"interaction.respond","AUTH_LOGIN_FAILED",i.result.message);return}let a=await this.buildLoginInteractionSpec(i,r),s=this.persistContinuedInteraction(e,a,n,t,o);yield s,yield D(e,"interaction.respond","INTERACTION_REQUIRED","auth.login requires additional interaction before it can continue.",Le(s))}async buildLoginInteractionSpec(e,i){switch(e.mode){case"picker":return{pending:{type:"login-provider"},interaction:{kind:"selection",prompt:"Choose a provider to sign in with.",options:mi(e.providers)}};case"anthropic_method_picker":case"openai_method_picker":case"google_method_picker":return{pending:{type:"login-method",provider:e.provider},interaction:{kind:"selection",prompt:`Choose how to sign in to ${e.provider}.`,options:di(e.options)}};case"copilot_source_picker":return{pending:{type:"copilot-source"},interaction:{kind:"selection",prompt:"Choose a GitHub Copilot credential source.",options:di(e.options)}};case"anthropic_key_input":case"openai_key_input":case"google_key_input":return{pending:{type:"credential-input",commandPrefix:e.provider,fieldKey:"apiKey"},interaction:{kind:"credential_input",prompt:`Enter the API key for ${e.provider}.`,provider:e.provider,fields:[this.secretField("apiKey",`${e.provider} API key`)]}};case"anthropic_setup_token":return{pending:{type:"credential-input",commandPrefix:"anthropic --setup-token",fieldKey:"setupToken"},interaction:{kind:"credential_input",prompt:"Enter the Anthropic setup token.",provider:"anthropic",fields:[this.secretField("setupToken","Anthropic setup token")]}};case"oauth":{let{codeVerifier:n,codeChallenge:t}=vn(),o=Kn(e.provider),r=o.redirectUri.startsWith("http://127.0.0.1")?Fn():n,a=bn(e.provider,t,r);return{pending:{type:"oauth-code",provider:e.provider,fieldKey:"authorizationCode",codeVerifier:n},interaction:{kind:"credential_input",prompt:`Sign in to ${e.provider} to continue.`,provider:e.provider,mode:"oauth_authorization_code",authorizeUrl:a,callbackMode:o.redirectUri.startsWith("http://127.0.0.1")?"local_callback":"manual_code",...o.redirectUri.startsWith("http://127.0.0.1")?{expectedState:r}:{},fields:[{key:"authorizationCode",label:"Authorization code"}]}}}case"copilot_device":{let n=await Mn({signal:i?.signal});return{pending:{type:"copilot-device",profileLabel:e.profileLabel,deviceCode:n},interaction:{kind:"oauth_device",prompt:e.message??"Open the verification URL, enter the device code, then confirm to continue.",provider:"github-copilot",...e.profileLabel?{profileLabel:e.profileLabel}:{},verificationUri:n.verificationUri,userCode:n.userCode,expiresAt:new Date(n.expiresAt).toISOString(),intervalSeconds:Math.ceil(n.intervalMs/1000)}}}}}async persistNewInteraction(e,i){let n=`auth:${si()}`;if(!this.sessionLedger.loadSession(n))this.sessionLedger.createSession(await this.getActiveArionName(),"auth",n);let t=`auth:${e}`,o=this.sessionLedger.claimSessionForMutation(n,t,30000);try{return this.persistInteractionRecord(e,n,t,o.revision,i.pending,i.interaction)}finally{this.sessionLedger.releaseSessionClaim(n,t)}}persistContinuedInteraction(e,i,n,t,o){let r=this.persistInteractionRecord(e,n,t,o,i.pending,i.interaction);return this.sessionLedger.releaseSessionClaim(n,t),r}persistInteractionRecord(e,i,n,t,o,r){let a=`auth:${si()}`;return this.sessionLedger.recordPausedRun(i,`auth:${i}`,{kind:"auth"},{kind:"auth"},{interactionId:a,requestId:e,source:"auth",kind:r.kind,prompt:jn(r,o)},{ownerId:n,expectedRevision:t}),{kind:"interaction.required",requestId:e,interactionId:a,source:"auth",interaction:r}}secretField(e,i){return{key:e,label:i,secret:!0}}}import{randomUUID as fi}from"node:crypto";import{isDeepStrictEqual as Un}from"node:util";import{resolveTrustedRuntimeErrorMessage as Gn}from"@aria-cli/tools";var gi=30000,Wn=1e4;function Yn(){return{output:"",messages:[],toolCalls:[],usage:void 0,turnCount:0,thinking:[],nativeToolResults:[],pipelineTiming:void 0,guardrailEvents:[],handoffs:[],pausedState:null}}function Bn(e){return{success:!e.pausedState,...e.output?{output:e.output}:{},...e.messages.length>0?{messages:e.messages}:{},...e.toolCalls.length>0?{toolCalls:e.toolCalls}:{},...e.usage!==void 0?{usage:e.usage}:{},...e.turnCount>0?{turnCount:e.turnCount}:{},...e.thinking.length>0?{thinking:e.thinking}:{},...e.nativeToolResults.length>0?{nativeToolResults:e.nativeToolResults}:{},...e.pipelineTiming!==void 0?{pipelineTiming:e.pipelineTiming}:{},...e.guardrailEvents.length>0?{guardrailEvents:e.guardrailEvents}:{},...e.handoffs.length>0?{handoffs:e.handoffs}:{},...e.pausedState?{state:e.pausedState}:{}}}function Vn(e,i,n){return{code:e,message:i,...n?{details:n}:{}}}function w(e,i,n,t,o){return{kind:"result",requestId:e,op:i,ok:!1,error:Vn(n,t,o)}}function xe(e,i,n){return{kind:"result",requestId:e,op:i,ok:!0,result:n}}function yi(e){return{...e.arion?{arion:e.arion}:{},...e.cwd?{cwd:e.cwd}:{},...e.requestedModel?{requestedModel:e.requestedModel}:{},...e.preferredTier?{preferredTier:e.preferredTier}:{},...typeof e.budget==="number"?{budget:e.budget}:{},...typeof e.maxTurns==="number"?{maxTurns:e.maxTurns}:{},...e.autonomy?{autonomy:e.autonomy}:{},...e.allowedTools?{allowedTools:e.allowedTools}:{},...e.deniedTools?{deniedTools:e.deniedTools}:{},...typeof e.noMemory==="boolean"?{noMemory:e.noMemory}:{},...e.systemPrompt?{systemPrompt:e.systemPrompt}:{}}}function ui(e,i){if(e.arion||!i)return e;return{...e,arion:i}}function Jn(e){let{sessionId:i,...n}=e;return n}function Qn(e){let{sessionId:i,...n}=e;return n}function hi(e,i){if(e.requestedModel||!i)return e;return{...e,requestedModel:i}}function S(e,i,n){if(!Array.isArray(n)||n.length===0)return;e.replaceConversationMessages(i,ki(n))}function Ae(e,i,n){if((n.pendingUserQuestions?.length??0)>0){let t=`${i}:questionnaire:${fi()}`,o={kind:"questionnaire",questions:n.pendingUserQuestions??[]};return{record:{interactionId:t,requestId:e,source:"run",kind:o.kind,prompt:o},frame:{kind:"interaction.required",requestId:e,interactionId:t,source:"run",interaction:o}}}if((n.pendingToolCalls?.length??0)>0){let t=n.pendingToolCalls[0],o=`${i}:tool-approval:${fi()}`,r={kind:"tool_approval",toolName:t.name,toolInput:t.arguments,prompt:`Approval required for ${t.name}`};return{record:{interactionId:o,requestId:e,source:"run",kind:r.kind,prompt:r},frame:{kind:"interaction.required",requestId:e,interactionId:o,source:"run",interaction:r}}}return null}function Zn(e,i,n,t,o){let r={state:e,...o??{}};if(i.kind==="tool_approval"){if(n.response.kind!=="confirm")throw Error(`Interaction ${i.interactionId} requires a confirm response`);return{...r,approvalMode:n.response.approved?"approve":"deny",...t>=0?{}:{}}}if(i.kind==="questionnaire"){if(n.response.kind!=="questionnaire")throw Error(`Interaction ${i.interactionId} requires a questionnaire response`);return{...r,askUserAnswers:n.response.answers}}throw Error(`Unsupported run interaction kind ${i.kind}`)}class P{ctx;constructor(e){this.ctx=e}renewSessionLease(e,i){let n=this.ctx.sessionLedger;if(typeof n.renewSessionClaim==="function")return n.renewSessionClaim(e,i,gi);return n.claimSessionForMutation(e,i,gi)}clearRunningSession(e,i,n){let t=this.ctx.sessionLedger;if(typeof t.clearActiveRun==="function")return t.clearActiveRun(e,{ownerId:i,expectedRevision:n});return t.completeRun(e,{},{ownerId:i,expectedRevision:n})}releaseClaimOnce(e,i){let n=!1;return()=>{if(n)return;n=!0,this.ctx.sessionLedger.releaseSessionClaim(e,i)}}static isAbortError(e){return e instanceof Error&&(e.name==="AbortError"||e.message==="The operation was aborted"||e.message==="This operation was aborted")}static createAbortReason(e,i){let n=Error(i);return n.name="AbortError",n.code=e,n}static getAbortCode(e,i){let n=e?.aborted?e.reason:i;if(n&&typeof n==="object"&&"code"in n&&typeof n.code==="string")return n.code;return e?.aborted||P.isAbortError(i)?"RUN_ABORTED":null}static getAbortMessage(e,i){let n=e?.aborted?e.reason:i;if(n instanceof Error&&n.message)return n.message;return"Run aborted before completion."}async*start(e,i,n){let t=i.sessionId?.trim()||e,o=`headless:${e}`,r=this.ctx.getSessionModel?.(),a=this.ctx.getSessionArion?.(),s=hi(ui(i,a),r),c=s.arion??this.ctx.getSessionArion?.()??"ARIA",l=s.requestedModel??s.preferredTier??"balanced",f=yi(s);if(!this.ctx.sessionLedger.loadSession(t))this.ctx.sessionLedger.createSession(c,l,t);let u=this.ctx.sessionLedger.claimSessionForMutation(t,o,30000),m=this.releaseClaimOnce(t,o),y=Yn(),R=new AbortController,T=null,F=null,x=null;if(n){let _=()=>{R.abort(P.createAbortReason("CONNECTION_CLOSED","Connection closed before request completed"))};if(n.aborted)_();else n.addEventListener("abort",_,{once:!0}),T=()=>n.removeEventListener("abort",_)}F=setInterval(()=>{try{u=this.renewSessionLease(t,o)}catch(_){R.abort(P.createAbortReason("SESSION_LEASE_LOST",_ instanceof Error?_.message:String(_)))}},Wn);try{for await(let C of this.ctx.localControl.streamRun(Jn(s),R.signal)){if(R.signal.aborted){m();return}this.consumeRunEvent(y,C),yield{kind:"event",requestId:e,seq:y.turnCount+y.toolCalls.length+y.thinking.length,op:"run.start",event:C}}if(R.signal.aborted){S(this.ctx.sessionLedger,t,y.messages),this.clearRunningSession(t,o,u.revision),m();let C=P.getAbortCode(R.signal);if(C!=="CONNECTION_CLOSED")yield w(e,"run.start",C??"RUN_ABORTED",P.getAbortMessage(R.signal),{sessionId:t,runId:`run:${t}`});return}if(y.pausedState){S(this.ctx.sessionLedger,t,y.pausedState.messages);let C=Ae(e,t,y.pausedState);if(this.ctx.sessionLedger.recordPausedRun(t,`run:${t}`,y.pausedState,f,C?.record,{ownerId:o,expectedRevision:u.revision}),m(),C)yield C.frame;yield w(e,"run.start","INTERACTION_REQUIRED","Run paused and requires interaction before it can continue.",{sessionId:t,...C?{interactionId:C.frame.interactionId,source:C.frame.source,interaction:C.frame.interaction}:{}});return}let _=Bn(y);x=()=>{let C=Array.isArray(_.messages)?_.messages.length:0;re(`orchestrator:persistTranscript(${C} msgs)`);let E=performance.now();S(this.ctx.sessionLedger,t,_.messages);let A=performance.now();re("orchestrator:completeRun"),this.ctx.sessionLedger.completeRun(t,_,{ownerId:o,expectedRevision:u.revision});let Z=performance.now();ae(),m();let ee=Z-E;if(ee>100)try{process.stderr.write(`[Orchestrator][DIAG] deferredPersistence: total=${ee.toFixed(0)}ms transcript=${(A-E).toFixed(0)}ms completeRun=${(Z-A).toFixed(0)}ms msgs=${C}
|
|
9
|
+
`)}catch{}},yield xe(e,"run.start",_)}catch(_){try{if(R.signal.aborted||P.isAbortError(_))S(this.ctx.sessionLedger,t,y.messages),this.clearRunningSession(t,o,u.revision);m()}catch{}if(R.signal.aborted||P.isAbortError(_)){let C=P.getAbortCode(R.signal,_);if(C!=="CONNECTION_CLOSED")yield w(e,"run.start",C??"RUN_ABORTED",P.getAbortMessage(R.signal,_),{sessionId:t,runId:`run:${t}`});return}yield w(e,"run.start","RUN_START_FAILED",_ instanceof Error?_.message:String(_))}finally{if(F)clearInterval(F);if(T?.(),x){let _=x;x=null,setTimeout(()=>{try{re("orchestrator:deferredPersistence");let C=performance.now();_();let E=performance.now()-C;if(ae(),E>200)try{process.stderr.write(`[Orchestrator][DIAG] deferredPersistence blocked ${E.toFixed(0)}ms
|
|
10
|
+
`)}catch{}}catch{ae(),m()}},0)}}}async*resume(e,i,n){let t=i.sessionId?.trim(),o=`headless:${e}`,r=this.ctx.getSessionModel?.(),a=this.ctx.getSessionArion?.(),s=hi(ui(i,a),r),c=Qn(s),l=yi(c),f=!1,u=null;try{if(n?.aborted)return;if(t){if(!this.ctx.sessionLedger.loadSession(t))this.ctx.sessionLedger.createSession(s.arion??this.ctx.getSessionArion?.()??"ARIA",s.requestedModel??s.preferredTier??"balanced",t),f=!0;u=this.ctx.sessionLedger.claimSessionForMutation(t,o,30000)}let m=await this.ctx.localControl.resumeRun(c);if(n?.aborted){if(t&&u){if(this.ctx.sessionLedger.releaseSessionClaim(t,o),f)this.ctx.sessionLedger.deleteSession(t)}return}if(t&&u){if(m.state){let y=m.state;S(this.ctx.sessionLedger,t,y.messages);let R=Ae(e,t,y);if(this.ctx.sessionLedger.recordPausedRun(t,`run:${t}`,y,l,R?.record,{ownerId:o,expectedRevision:u.revision}),this.ctx.sessionLedger.releaseSessionClaim(t,o),R)yield R.frame;yield w(e,"run.resume","INTERACTION_REQUIRED","Run paused and requires interaction before it can continue.",{sessionId:t,...R?{interactionId:R.frame.interactionId,source:R.frame.source,interaction:R.frame.interaction}:{}});return}S(this.ctx.sessionLedger,t,m.messages),this.ctx.sessionLedger.completeRun(t,m,{ownerId:o,expectedRevision:u.revision}),this.ctx.sessionLedger.releaseSessionClaim(t,o)}yield xe(e,"run.resume",m)}catch(m){if(t&&u)try{if(this.ctx.sessionLedger.releaseSessionClaim(t,o),f)this.ctx.sessionLedger.deleteSession(t)}catch{}if(n?.aborted||P.isAbortError(m))return;yield w(e,"run.resume","RUN_RESUME_FAILED",m instanceof Error?m.message:String(m))}}async*abort(e,i,n){if(await(n??this.ctx.activeRunController)?.abort(i)){yield{kind:"result",requestId:e,op:"run.abort",ok:!0,result:{aborted:!0,...i.runId?{runId:i.runId}:{},...i.sessionId?{sessionId:i.sessionId}:{}}};return}yield w(e,"run.abort","RUN_NOT_FOUND","No active run matched the requested runId or sessionId.",{...i.runId?{runId:i.runId}:{},...i.sessionId?{sessionId:i.sessionId}:{}})}async*respond(e,i){let n=this.ctx.sessionLedger.getInteraction(e.interactionId);if(!n){yield w(e.requestId,"interaction.respond","INTERACTION_NOT_FOUND",`Unknown interaction ${e.interactionId}`);return}if(n.source!=="run"){yield w(e.requestId,"interaction.respond","UNSUPPORTED_INTERACTION_SOURCE",`Interaction source ${n.source} is not handled by the run orchestrator`);return}let t=this.ctx.sessionLedger.getSessionRuntimeState(n.sessionId);if(!t?.pausedState){yield w(e.requestId,"interaction.respond","SESSION_NOT_PAUSED",`Session ${n.sessionId} is not paused`);return}let o=`headless:${e.requestId}`;try{if(i?.aborted)return;let r=this.ctx.sessionLedger.claimSessionForMutation(n.sessionId,o,30000),a=e.response,s=r.revision;if(n.status==="pending")this.ctx.sessionLedger.recordInteractionResponse(n.sessionId,n.interactionId,a,{ownerId:o,expectedRevision:r.revision}),s+=1;else if(n.status==="answered"){if(!n.response){this.ctx.sessionLedger.releaseSessionClaim(n.sessionId,o),yield w(e.requestId,"interaction.respond","INVALID_INTERACTION_STATE",`Interaction ${n.interactionId} is missing its recorded response`);return}if(!Un(n.response,a)){this.ctx.sessionLedger.releaseSessionClaim(n.sessionId,o),yield w(e.requestId,"interaction.respond","INTERACTION_ALREADY_ANSWERED",`Interaction ${n.interactionId} was already answered with a different response`);return}a=n.response}else{this.ctx.sessionLedger.releaseSessionClaim(n.sessionId,o),yield w(e.requestId,"interaction.respond","INTERACTION_NOT_PENDING",`Interaction ${n.interactionId} is not resumable in state ${n.status}`);return}let c=Zn(t.pausedState,n,{...e,response:a},t.revision,t.policySnapshot),l=await this.ctx.localControl.resumeRun(c);if(i?.aborted){this.ctx.sessionLedger.releaseSessionClaim(n.sessionId,o);return}if(l.state){let f=l.state;S(this.ctx.sessionLedger,n.sessionId,f.messages);let u=Ae(e.requestId,n.sessionId,f);if(this.ctx.sessionLedger.recordPausedRun(n.sessionId,t.activeRunId??`run:${n.sessionId}`,f,t.policySnapshot??{},u?.record,{ownerId:o,expectedRevision:s}),this.ctx.sessionLedger.releaseSessionClaim(n.sessionId,o),u)yield u.frame;yield w(e.requestId,"interaction.respond","INTERACTION_REQUIRED","Run paused again and requires another interaction.",{sessionId:n.sessionId,...u?{interactionId:u.frame.interactionId,source:u.frame.source,interaction:u.frame.interaction}:{}});return}S(this.ctx.sessionLedger,n.sessionId,l.messages),this.ctx.sessionLedger.completeRun(n.sessionId,l,{ownerId:o,expectedRevision:s}),this.ctx.sessionLedger.releaseSessionClaim(n.sessionId,o),yield xe(e.requestId,"interaction.respond",l)}catch(r){try{this.ctx.sessionLedger.releaseSessionClaim(n.sessionId,o)}catch{}if(i?.aborted||P.isAbortError(r))return;yield w(e.requestId,"interaction.respond","INTERACTION_RESPONSE_FAILED",r instanceof Error?r.message:String(r))}}consumeRunEvent(e,i){switch(i.type){case"text_delta":e.output+=i.content;break;case"tool_result":e.toolCalls.push({id:i.id,name:i.name,input:i.input,result:i.result,durationMs:i.durationMs});break;case"usage_update":e.usage=i.usage;break;case"turn_complete":e.turnCount=i.turnNumber;break;case"guardrail_rejected":e.guardrailEvents.push({stage:i.stage,message:i.message});break;case"pipeline_timing":e.pipelineTiming=i.report;break;case"messages_snapshot":e.messages=Array.isArray(i.messages)?i.messages:[];break;case"thinking_end":if(i.blocks)e.thinking.push(...i.blocks);break;case"native_tool_result":e.nativeToolResults.push(i.metadata);break;case"handoff_start":e.handoffs.push({type:"start",target:i.target,id:i.id});break;case"handoff_result":e.handoffs.push({type:"result",target:i.target,id:i.id,result:i.result});break;case"paused":e.pausedState=i.state;break;case"error":throw Error(Gn(i.error.message,"diagnostic"in i.error?i.error.diagnostic:void 0)??i.error.message);default:break}}}import{EOL as J,homedir as Xn,platform as Pe}from"os";import{readFileSync as zn,writeFileSync as In}from"fs";import{join as ce}from"path";import{spawnSync as qn}from"node:child_process";function Oo(){return N().shiftEnterKeyBindingInstalled===!0}function be(){let e=(process.env.TERM_PROGRAM??"").toLowerCase();return Pe()==="darwin"&&e==="iterm.app"||e==="vscode"}function et(){if(qn("defaults",["write","com.googlecode.iterm2","GlobalKeyMap","-dict-add","0xd-0x20000-0x24",`<dict>
|
|
11
|
+
<key>Text</key>
|
|
12
|
+
<string>\\n</string>
|
|
13
|
+
<key>Action</key>
|
|
14
|
+
<integer>12</integer>
|
|
15
|
+
<key>Version</key>
|
|
16
|
+
<integer>1</integer>
|
|
17
|
+
<key>Keycode</key>
|
|
18
|
+
<integer>13</integer>
|
|
19
|
+
<key>Modifiers</key>
|
|
20
|
+
<integer>131072</integer>
|
|
21
|
+
</dict>`]).status!==0)throw Error("Failed to install iTerm2 Shift+Enter key binding");return`Installed iTerm2 Shift+Enter key binding${J}See iTerm2 → Preferences → Keys${J}`}function it(){let e=ce(Xn(),Pe()==="win32"?ce("AppData","Roaming","Code","User"):Pe()==="darwin"?ce("Library","Application Support","Code","User"):ce(".config","Code","User"),"keybindings.json"),i=[];try{let t=zn(e,"utf-8").trim();if(i=t?JSON.parse(t):[],!Array.isArray(i))i=[]}catch{i=[]}if(i.find((t)=>t.key==="shift+enter"&&t.command==="workbench.action.terminal.sendSequence"&&t.when==="terminalFocus"))return`Found existing VSCode terminal Shift+Enter key binding. Remove it to continue.${J}See ${e}${J}`;return i.push({key:"shift+enter",command:"workbench.action.terminal.sendSequence",args:{text:`\\\r
|
|
22
|
+
`},when:"terminalFocus"}),In(e,JSON.stringify(i,null,2),"utf-8"),`Installed VSCode terminal Shift+Enter key binding${J}See ${e}${J}`}function Hi(){if(!be())throw Error("terminal-setup is supported only in iTerm2 (macOS) and VSCode terminal");let i=(process.env.TERM_PROGRAM??"").toLowerCase()==="vscode"?it():et(),n=N();return n.shiftEnterKeyBindingInstalled=!0,j(n),i}var Q={name:"dark",displayName:"Dark",colors:{primary:"#5f97cd",secondary:"#888888",text:"#ffffff",textMuted:"#999999",textInverse:"#000000",success:"#4eba65",error:"#ff6b80",warning:"#ffc107",info:"#00d9ff",diffAdded:"#4eba65",diffAddedDimmed:"#2d5a35",diffRemoved:"#ff6b80",diffRemovedDimmed:"#8a3a45",arion:{cyan:"#00d9ff",magenta:"#bd00ff",yellow:"#ffc107",green:"#4eba65",blue:"#5f97cd",red:"#ff6b80",white:"#ffffff"}},symbols:{prompt:"❯",divider:"─",success:"✓",error:"✗",warning:"⚠",info:"ℹ",pending:"○",bullet:"•",arrow:"→"},banner:{gradient:{start:"#00D9FF",middle:"#BD00FF",end:"#6366F1"},animationDuration:1600}};var q={name:"light",displayName:"Light",colors:{primary:"#5f97cd",secondary:"#999999",text:"#000000",textMuted:"#666666",textInverse:"#ffffff",success:"#2c7a39",error:"#ab2b3f",warning:"#b8860b",info:"#0077aa",diffAdded:"#2c7a39",diffAddedDimmed:"#a8d5b1",diffRemoved:"#ab2b3f",diffRemovedDimmed:"#e8b4bc",arion:{cyan:"#0077aa",magenta:"#aa0077",yellow:"#b8860b",green:"#2c7a39",blue:"#5f97cd",red:"#ab2b3f",white:"#333333"}},symbols:{prompt:"❯",divider:"─",success:"✓",error:"✗",warning:"⚠",info:"ℹ",pending:"○",bullet:"•",arrow:"→"},banner:{gradient:{start:"#0077aa",middle:"#aa0077",end:"#5f5fd7"},animationDuration:1600}};var Ri={...Q,name:"dark-accessible",displayName:"Dark (Accessible)",colors:{...Q.colors,success:"#006699",error:"#cc0000",warning:"#ffaa00",diffAdded:"#006699",diffAddedDimmed:"#003d5c",diffRemoved:"#cc0000",diffRemovedDimmed:"#660000"}};var _i={...q,name:"light-accessible",displayName:"Light (Accessible)",colors:{...q.colors,success:"#005588",error:"#aa0000",warning:"#996600",diffAdded:"#005588",diffAddedDimmed:"#b3d4e8",diffRemoved:"#aa0000",diffRemovedDimmed:"#e8b3b3"}};var pi={name:"claude-dark",displayName:"Claude Dark",colors:{primary:"#5f97cd",secondary:"#888888",text:"#ffffff",textMuted:"#999999",textInverse:"#000000",success:"#4eba65",error:"#ff6b80",warning:"#ffc107",info:"#b1b9f9",diffAdded:"#225c2b",diffAddedDimmed:"#47584a",diffRemoved:"#7a2936",diffRemovedDimmed:"#69484d",arion:{cyan:"#b1b9f9",magenta:"#fd5db1",yellow:"#ffc107",green:"#4eba65",blue:"#5f97cd",red:"#ff6b80",white:"#ffffff"}},symbols:{prompt:"❯",divider:"─",success:"✓",error:"✗",warning:"⚠",info:"ℹ",pending:"○",bullet:"•",arrow:"→"},banner:{gradient:{start:"#fd5db1",middle:"#5f97cd",end:"#b1b9f9"},animationDuration:1600}};var Ci={name:"claude-light",displayName:"Claude Light",colors:{primary:"#5f97cd",secondary:"#999999",text:"#000000",textMuted:"#666666",textInverse:"#ffffff",success:"#2c7a39",error:"#ab2b3f",warning:"#966c1e",info:"#5769f7",diffAdded:"#69db7c",diffAddedDimmed:"#c7e1cb",diffRemoved:"#ffa8b4",diffRemovedDimmed:"#fdd2d8",arion:{cyan:"#5769f7",magenta:"#ff0087",yellow:"#966c1e",green:"#2c7a39",blue:"#5f97cd",red:"#ab2b3f",white:"#333333"}},symbols:{prompt:"❯",divider:"─",success:"✓",error:"✗",warning:"⚠",info:"ℹ",pending:"○",bullet:"•",arrow:"→"},banner:{gradient:{start:"#ff0087",middle:"#5f97cd",end:"#5769f7"},animationDuration:1600}};var Di={name:"claude-dark-daltonized",displayName:"Claude Dark (Daltonized)",colors:{primary:"#5f97cd",secondary:"#888888",text:"#ffffff",textMuted:"#999999",textInverse:"#000000",success:"#3399ff",error:"#ff6666",warning:"#ffcc00",info:"#99ccff",diffAdded:"#004466",diffAddedDimmed:"#3e515b",diffRemoved:"#660000",diffRemovedDimmed:"#3e2c2c",arion:{cyan:"#99ccff",magenta:"#3399ff",yellow:"#ffcc00",green:"#3399ff",blue:"#5f97cd",red:"#ff6666",white:"#ffffff"}},symbols:{prompt:"❯",divider:"─",success:"✓",error:"✗",warning:"⚠",info:"ℹ",pending:"○",bullet:"•",arrow:"→"},banner:{gradient:{start:"#3399ff",middle:"#5f97cd",end:"#99ccff"},animationDuration:1600}};var Oi={name:"claude-light-daltonized",displayName:"Claude Light (Daltonized)",colors:{primary:"#5f97cd",secondary:"#999999",text:"#000000",textMuted:"#666666",textInverse:"#ffffff",success:"#006699",error:"#cc0000",warning:"#ff9900",info:"#3366ff",diffAdded:"#99ccff",diffAddedDimmed:"#d1e7fd",diffRemoved:"#ffcccc",diffRemovedDimmed:"#ffe9e9",arion:{cyan:"#3366ff",magenta:"#0066cc",yellow:"#ff9900",green:"#006699",blue:"#5f97cd",red:"#cc0000",white:"#333333"}},symbols:{prompt:"❯",divider:"─",success:"✓",error:"✗",warning:"⚠",info:"ℹ",pending:"○",bullet:"•",arrow:"→"},banner:{gradient:{start:"#0066cc",middle:"#5f97cd",end:"#3366cc"},animationDuration:1600}};var le={dark:Q,light:q,"dark-accessible":Ri,"light-accessible":_i,"claude-dark":pi,"claude-light":Ci,"claude-dark-daltonized":Di,"claude-light-daltonized":Oi},Ei=Q;function Li(e){if(le[e])Ei=le[e]}function wi(){return Ei}function xi(){return Object.keys(le)}function Yo(e){return le[e]}async function ct(e){let i=[];for(let n of e.sessionLedgers??[])try{n?.close()}catch(t){i.push(t)}for(let n of e.attachedClients??[])try{await n?.release()}catch(t){i.push(t)}try{await e.daemon?.releaseAll?.()}catch(n){i.push(n)}try{await e.managerPool?.closeAll()}catch(n){i.push(n)}try{await e.cli?.pool.closeAll()}catch(n){i.push(n)}if(i.length===1)throw i[0];if(i.length>1)throw AggregateError(i,"Failed to release headless kernel bootstrap resources")}function $(e){if(!(e instanceof Error))return!1;let i=e.message;if(i.includes("attached-local-client-only"))return!0;if(i.includes("ECONNRESET"))return!0;if(i.includes("ECONNREFUSED"))return!0;if(i.includes("EPIPE"))return!0;if(i.includes("connect ENOENT"))return!0;if(i.includes("socket hang up"))return!0;if(i.includes("closed before"))return!0;if(i.includes("has been released"))return!0;if(i.includes("no daemon found"))return!0;return!1}function Te(e){if(!$(e))return e instanceof Error?e:Error(String(e));let i=e,n=i.message,t=i.reason??"",o=n.includes("ECONNRESET")||n.includes("ECONNREFUSED")||n.includes("EPIPE")||n.includes("connect ENOENT")||n.includes("socket hang up")||n.includes("closed before"),r=o?"Lost connection to the ARIA daemon. It may have restarted. Run `aria` again to reconnect.":t==="invalid_or_expired_lease"||t===""?"The ARIA daemon restarted and your session could not be restored. Run `aria` again to start a new session.":t==="missing_client_id"||t==="missing_proof"?"Client credentials were not sent. This is likely a bug — please report it.":t==="no_authority"?"The daemon has no attached-client authority configured. It may still be starting up.":`Session authentication failed (${t}). Run \`aria\` again to start a new session.`;return Object.assign(Error(`Session expired: ${r} (${i.message})`),{code:"ARIA_SESSION_EXPIRED",reason:o?"connection_lost":t,cause:i},i.diagnostic!==void 0?{diagnostic:i.diagnostic}:{})}var K=[0,250,500,1000,2000,3000],se;function v(e,i){try{if(!se)se=me(e,"logs"),tt(se,{recursive:!0});let n=JSON.stringify({ts:new Date().toISOString(),pid:process.pid,...i});nt(me(se,"reattach.jsonl"),n+`
|
|
23
|
+
`)}catch{}}function bi(e){if(e<=0)return Promise.resolve();return new Promise((i)=>{setTimeout(i,e).unref?.()})}function Ki(e,i,n){let t=null,o=()=>{if(!t)t=e();return t},r=()=>{t=null,i?.()};async function a(c){try{let l=await o();return await c(l)}catch(l){if(!$(l))throw l;let f=l instanceof Error?l.message:String(l),u=l.reason;if(n)v(n,{event:"reattach_start",trigger:f,reason:u,maxAttempts:K.length});for(let m=0;m<K.length;m++){await bi(K[m]??0),r();try{let y=await o();if(n)v(n,{event:"reattach_success",attempt:m,trigger:f});return await c(y)}catch(y){let R=y instanceof Error?y.message:String(y);if(n)v(n,{event:"reattach_retry_failed",attempt:m,error:R,willRetry:$(y)&&m<K.length-1});if(!$(y)||m===K.length-1){if(n)v(n,{event:"reattach_exhausted",attempts:m+1,finalError:R});throw Te(y)}}}throw Te(l)}}async function*s(c){let l;try{let m=await o();yield*c(m);return}catch(m){if(!$(m))throw m;l=m instanceof Error?m:Error(String(m))}let f=l?.message??"unknown",u=l?.reason;if(n)v(n,{event:"reattach_stream_start",trigger:f,reason:u,maxAttempts:K.length});for(let m=0;m<K.length;m++){await bi(K[m]??0),r();try{let y=await o();if(n)v(n,{event:"reattach_stream_success",attempt:m,trigger:f});yield*c(y);return}catch(y){let R=y instanceof Error?y.message:String(y);if(n)v(n,{event:"reattach_stream_retry_failed",attempt:m,error:R,willRetry:$(y)&&m<K.length-1});if(!$(y)||m===K.length-1){if(n)v(n,{event:"reattach_stream_exhausted",attempts:m+1,finalError:R});throw Te(y)}}}}return{submitRun(c){return a((l)=>l.submitRun(c))},resumeRun(c){return a((l)=>l.resumeRun(c))},async*streamRun(c,l){yield*s((f)=>f.streamRun(c,l))},async*subscribeRuntimeEvents(c){yield*s((l)=>l.subscribeRuntimeEvents(c))},sendBestEffort(c){return a((l)=>l.sendBestEffort(c))},sendDurable(c){return a((l)=>l.sendDurable(c))},listInbox(c){return a((l)=>l.listInbox(c))},async*subscribeInbox(c){yield*s((l)=>l.subscribeInbox(c))},listPeers(){return a((c)=>c.listPeers())},listNearbyPeers(){return a((c)=>c.listNearbyPeers())},async*subscribePeers(){yield*s((c)=>c.subscribePeers())},getRuntimeStatus(){return a((c)=>c.getRuntimeStatus())},getRuntimeBootstrap(){return a((c)=>c.getRuntimeBootstrap())},listPendingPairRequests(){return a((c)=>c.listPendingPairRequests())},respondToPairRequest(c){return a((l)=>l.respondToPairRequest(c))},createInvite(c){return a((l)=>l.createInvite(c))},listPendingInvites(){return a((c)=>c.listPendingInvites())},acceptInviteToken(c){return a((l)=>l.acceptInviteToken(c))},cancelInvite(c){return a((l)=>l.cancelInvite(c))},invitePeer(c){return a((l)=>l.invitePeer(c))},acceptInvite(c){return a((l)=>l.acceptInvite(c))},directPair(c){return a((l)=>l.directPair(c))},revokePeer(c){return a((l)=>l.revokePeer(c))},repairPeer(c){return a((l)=>l.repairPeer(c))},listAttachedClients(){return a((c)=>c.listAttachedClients())},listDirectClientInbox(c){return a((l)=>l.listDirectClientInbox(c))},async*subscribeDirectClientInbox(c){yield*s((l)=>l.subscribeDirectClientInbox(c))}}}var lt=1e4;function st(e,i,n){return new Promise((t,o)=>{let r=setTimeout(()=>{o(Error(n))},i);r.unref?.(),e.then((a)=>{clearTimeout(r),t(a)},(a)=>{clearTimeout(r),o(a)})})}function Ti(e,i,n,t,o){return{kind:"result",requestId:e,op:i,ok:!1,error:{code:n,message:t,...o?{details:o}:{}}}}function mt(e,i,n){let t=e.trim().toLowerCase();if(!t)return;let o=[...i].sort((m,y)=>m.shortName.localeCompare(y.shortName)),r=o.find((m)=>{return`${m.provider}/${m.shortName}`.toLowerCase()===t});if(r)return r;let a=o.find((m)=>m.shortName.toLowerCase()===t);if(a)return U(a,n);let s=o.find((m)=>m.shortName.toLowerCase().startsWith(t));if(s)return U(s,n);let c=o.find((m)=>{return`${m.provider}/${m.shortName}`.toLowerCase().startsWith(t)});if(c)return c;let l=o.find((m)=>m.tier.toLowerCase()===t);if(l)return U(l,n);let f=o.find((m)=>m.displayName.toLowerCase().includes(t));if(f)return U(f,n);let u=o.find((m)=>m.provider.toLowerCase().includes(t));return u?U(u,n):void 0}function dt(e){let i=new P({localControl:e.localControl,sessionLedger:e.sessionLedger,activeRunController:e.activeRunController,getSessionModel:e.getSessionModel,getSessionArion:e.getSessionArion}),n=new we(e.auth,e.sessionLedger,async()=>await e.config?.getActiveArion?.()??e.cli?.config?.activeArion??"ARIA"),t=De(i),o=He(e),r=de(e),a=pe(e),s=fe(e,n),c=ke(e),l=ze(e),f=ii(e),u=ni(e),m=Ce(e),y=he(e),R=_e(e),T=Oe(e);return{"run.start":t["run.start"],"run.resume":t["run.resume"],"run.abort":t["run.abort"],"interaction.respond":async function*(F,x,_){let C=x&&typeof x==="object"&&"kind"in x?x:{kind:"interaction.respond",requestId:F,...x};if(e.sessionLedger.getInteraction(C.interactionId)?.source==="auth"){yield*n.respond(C,_);return}yield*t["interaction.respond"](F,C,_)},"session.list":T["session.list"],"session.read":T["session.read"],"session.load":T["session.load"],"session.fork":T["session.fork"],"memory.remember":o["memory.remember"],"memory.recall":o["memory.recall"],"memory.list":o["memory.list"],"memory.forget":o["memory.forget"],"memory.recall_knowledge":o["memory.recall_knowledge"],"arion.list":r["arion.list"],"arion.hatch":r["arion.hatch"],"arion.become":r["arion.become"],"arion.rest":r["arion.rest"],"arion.wake":r["arion.wake"],"arion.create":r["arion.create"],"model.list":a["model.list"],"model.set":a["model.set"],"model.refresh":a["model.refresh"],"auth.status":s["auth.status"],"auth.login":s["auth.login"],"auth.logout":s["auth.logout"],"peer.list":m["peer.list"],"peer.list_nearby":m["peer.list_nearby"],"peer.pending.list":m["peer.pending.list"],"peer.pending.respond":m["peer.pending.respond"],"peer.invite":m["peer.invite"],"peer.connect":m["peer.connect"],"peer.accept_invite":m["peer.accept_invite"],"peer.direct_pair":m["peer.direct_pair"],"peer.repair":m["peer.repair"],"peer.revoke":m["peer.revoke"],"client.list":y["client.list"],"client.inbox.list":y["client.inbox.list"],"message.send":R["message.send"],"message.inbox.list":R["message.inbox.list"],"config.theme.get":c["config.theme.get"],"config.theme.set":c["config.theme.set"],"config.autonomy.get":c["config.autonomy.get"],"config.autonomy.set":c["config.autonomy.set"],"system.restart":u["system.restart"],"system.terminal_setup":u["system.terminal_setup"],"daemon.start":l["daemon.start"],"daemon.status":l["daemon.status"],"daemon.stop":l["daemon.stop"],"hook.extract":f["hook.extract"],"hook.reflect":f["hook.reflect"],"hook.consolidate":f["hook.consolidate"],"hook.ingest":f["hook.ingest"],"hook.harvest":f["hook.harvest"]}}class Mi{ctx;handlers;constructor(e,i){this.ctx=e;if(!i){let n=!1,t=e.localControl;e.localControl=Ki(async()=>{if(!n)return t;let{createResilientAttachedClient:o}=await import("./attached-local-control-client-2jz8vmjb.js"),r=await import("@aria-cli/server"),a=r.resolveRuntimeRootDirectory(),s=r.findRuntimeOwnerRecordByAriaHome(a,e.cli.ariaDir);if(!s?.runtimeSocket)throw Error("Cannot reconnect: no daemon found after restart");return(await o({runtimeSocket:s.runtimeSocket,clientKind:"local-api",logDir:me(e.cli.ariaDir,"logs")})).api},()=>{n=!0},e.cli.ariaDir)}this.handlers=i??dt(e)}async*dispatch(e,i={}){if(e.kind==="interaction.respond"){let o=Pi["interaction.respond"].input.safeParse({interactionId:e.interactionId,response:e.response});if(!o.success){yield Ti(e.requestId,"interaction.respond","INVALID_INPUT",o.error.issues.map((r)=>`${r.path.join(".")||"<root>"} ${r.message}`).join("; "));return}yield*this.handlers["interaction.respond"](e.requestId,e,i);return}let n=e,t=Pi[n.op].input.safeParse(n.input);if(!t.success){yield Ti(n.requestId,n.op,"INVALID_INPUT",t.error.issues.map((o)=>`${o.path.join(".")||"<root>"} ${o.message}`).join("; "));return}yield*this.handlers[n.op](n.requestId,t.data,i)}getContext(){return this.ctx}}async function Cr(e){let i=null,n=null,t=null,o=new Map,r=new Map,a=new Set,s=!1,c=async()=>{if(s)return;s=!0;let l=await Promise.allSettled([...r.values(),...a.values()]);await ct({sessionLedgers:[...o.values()],attachedClients:l.flatMap((f)=>f.status==="fulfilled"?[f.value]:[]),daemon:t,managerPool:n,cli:i})};try{i=await Ni({cwd:e?.cwd,skipDiscoveryRefresh:!0});let l=i,f=e?.arionName??l.config.activeArion??"ARIA",u,m=()=>f,y=()=>u,R=(d)=>{f=d;let h=N();h.activeArion=d,j(h)},T=(d)=>{let h=o.get(d);if(!h)h=new Ne(Ne.resolvePerArionPath(l.ariaDir,d)),o.set(d,h);return h},F=async()=>{try{let{resolveRuntimeRootDirectory:d,findRuntimeOwnerRecordByAriaHome:h}=await import("@aria-cli/server"),{createResilientAttachedClient:O}=await import("./local-control-client.js"),b=d(),L=h(b,l.ariaDir);if(!L?.runtimeSocket)return null;let ie=await O({runtimeSocket:L.runtimeSocket,clientKind:"local-api",logDir:me(l.ariaDir,"logs")});return{nodeId:L.nodeId,runtimeId:L.runtimeId??"daemon",port:0,ownership:"reattached",control:ie.api,attachedClientId:ie.getClientId(),attachedClientAuthToken:ie.getClientAuthToken(),release:()=>ie.release()}}catch(d){return v(l.ariaDir,{event:"daemon_socket_connect_failed",error:d instanceof Error?d.message:String(d)}),null}},x=async(d)=>{let h=r.get(d);if(!h)h=(async()=>{let O=await F();if(O){if(v(l.ariaDir,{event:"ensureAttachedClient_resolved",path:"daemon_socket",arionName:d}),s)await O.release().catch(()=>{});return O}v(l.ariaDir,{event:"ensureAttachedClient_fallback",path:"attachLocalControlClient",arionName:d});let b;try{b=await vi({ariaHome:l.ariaDir,arionName:d,clientKind:"local-api",runtimeLifecycle:"scoped",memoriaFactory:l.memoriaFactory,router:l.router,authResolver:l.authResolver,runSessionConfig:l.config,mcpServers:l.projectConfig.mcp?.servers,silent:!0})}catch(L){if(L instanceof Error&&L.message.includes("already in use"))throw Error("A daemon is running but could not be reached. Ensure ARIA_HOME matches the daemon's home directory, or stop the daemon with: aria-stop");throw L}if(s)await b.release().catch(()=>{});return b})(),r.set(d,h);return st(h,lt,`Timed out attaching local control for ${d}`).catch((O)=>{throw a.add(h),h.finally(()=>{a.delete(h)}),r.delete(d),O})},_=Ki(async()=>{return(await x(m())).control},()=>{let d=m(),h=r.get(d);if(h)a.add(h),h.then((O)=>O.release().catch(()=>{})).finally(()=>a.delete(h)),r.delete(d)},l.ariaDir),C=new Proxy({},{get(d,h){let O=T(m()),b=O[h];return typeof b==="function"?b.bind(O):b}});T(f),n=new at(l.ariaDir);let E=new ot(new rt(l.ariaDir),n.toFactory());E.setRouter(l.router),await E.initialize();let A=l.availableModels,Z=async()=>{let d=m();return(await E.get(d))?.memoriaPath??Ai.join("arions",d,"memory.db")},ee=async()=>{return await l.pool.get(await Z())},Si=new Proxy({},{get(d,h){return async(...O)=>{let b=await ee(),L=b[h];if(typeof L!=="function")return L;return L.apply(b,O)}}});t=Fi({cli:l,cwd:e?.cwd??process.cwd(),arionName:m(),getArionName:m,localControl:_});let ji=li({cli:l,arionName:m(),getArionName:m,resolveMemoriaPath:Z}),ve={cli:l,localControl:_,sessionLedger:C,arionManager:{list:()=>E.list(),hatch:(d)=>E.hatch(d),get:(d)=>E.get(d),wake:(d)=>E.wake(d),rest:(d,h)=>E.rest(d,h)},memoria:Si,config:{async getTheme(){return N().theme??wi().name},async setTheme(d){if(!xi().includes(d))throw Error(`Unknown theme: ${d}`);Li(d);let O=N();return O.theme=d,j(O),{theme:d}},async getAutonomy(){return N().autonomy??"balanced"},async setAutonomy(d){if(!["minimal","balanced","high","full"].includes(d))throw Error(`Invalid autonomy level: ${d}`);let h=N();return h.autonomy=d,j(h),{autonomy:d}},async getActiveArion(){return m()},async setActiveArion(d){R(d)}},auth:{async status(){return{providers:Be()}},async login(d){return Ve(Qe(d))},async logout(d){return Je(Ze(d))}},modelDiscovery:{async listAvailable(){return A},async refresh(d){return A=await l.refreshAvailableModels(d),A},async getCurrentModel(){if(u)return u;let d=await E.get(m());if(d?.preferredModel)return u=d.preferredModel,u;let h=N().preferredTier??l.config.preferredTier;if(!h)return A[0]?.shortName;return u=U(A.find((O)=>O.tier===h)??A[0],l.credentialHints)?.shortName??A[0]?.shortName,u},async setCurrentModel(d){let h=mt(d,A,l.credentialHints);if(!h)throw Error(`Unknown model: ${d}`);u=h.shortName;let O=m();if(await E.get(O))await E.setPreferredModel(O,h.shortName);let L=N();return L.preferredTier=h.tier,j(L),{currentModel:h.shortName,tier:h.tier}},async getSessionModel(){return u}},daemon:t,hook:ji,system:{async restart(d){return{accepted:!0,reason:typeof d.reason==="string"&&d.reason.trim().length>0?d.reason.trim():"Restart requested"}},async terminalSetup(){if(!be())return{supported:!1,message:"terminal-setup is supported only in iTerm2 (macOS) and VSCode terminal."};return{supported:!0,output:Hi().trim()}}},getSessionModel:y,getSessionArion:m},Fe=await E.get(m());if(Fe?.preferredModel)u=Fe.preferredModel;else{let d=N().preferredTier??l.config.preferredTier;u=U(A.find((h)=>h.tier===d)??A[0],l.credentialHints)?.shortName??A[0]?.shortName}return{kernel:new Mi(ve),ctx:ve,async release(){await c()}}}catch(l){try{await c()}catch(f){throw AggregateError([l,f],"Headless kernel bootstrap failed and resource cleanup also failed")}throw l}}
|
|
24
|
+
export{Li as p,wi as q,xi as r,Yo as s,Oo as t,be as u,Hi as v,z as w,Ue as x,Ye as y,dt as z,Mi as A,Cr as B};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{HEADLESS_OPERATION_SCHEMAS as u}from"@aria-cli/tools";function d(s,e,o){let n=u[e].result.safeParse(o);if(!n.success)throw Error(`Invalid headless result for ${e}: ${n.error.issues.map((t)=>`${t.path.join(".")||"<root>"} ${t.message}`).join("; ")}`);return{kind:"result",requestId:s,op:e,ok:!0,result:n.data}}function r(s,e,o,n,t){return{kind:"result",requestId:s,op:e,ok:!1,error:{code:o,message:n,...t?{details:t}:{}}}}function I(s,e){return async function*(o){yield r(o,e,"MISSING_SERVICE",`Kernel service ${s} is not configured for ${e}.`)}}function c(s){return{...s,createdAt:s.createdAt.toISOString(),updatedAt:s.updatedAt.toISOString(),...s.completedAt?{completedAt:s.completedAt.toISOString()}:{}}}function l(s){let e=s.sessionId;return typeof e==="string"?e.trim():""}function f(s,e,o){let n=o,t=typeof n.query==="string"&&n.query.trim().length>0?e.searchSessionSummaries(n.query,n.limit??20,n.offset??0):e.listSessions(n.limit??20,n.offset??0);return d(s,"session.list",{sessions:t.map(c)})}function S(s,e,o){let n=l(o);if(!n)return r(s,"session.read","SESSION_READ_FAILED","session.read requires a sessionId");let t=e.findSessionByPrefix(n)??n,i=e.loadSessionMessages(t);if(!i)return r(s,"session.read","SESSION_NOT_FOUND",`Session ${n} not found`);return d(s,"session.read",{session:i})}function g(s,e,o){let n=l(o);if(!n)return r(s,"session.load","SESSION_LOAD_FAILED","session.load requires a sessionId");let t=e.findSessionByPrefix(n)??n,i=e.loadSession(t);if(!i)return r(s,"session.load","SESSION_NOT_FOUND",`Session ${n} not found`);return d(s,"session.load",{session:i.session,loaded:!0,...i.runtimeState?{runtimeState:i.runtimeState}:{},...i.pendingInteraction?{pendingInteraction:i.pendingInteraction}:{}})}function m(s,e,o){let n=o,t=typeof n.sessionId==="string"?n.sessionId.trim():"";if(!t)return r(s,"session.fork","SESSION_FORK_FAILED","session.fork requires a sessionId");let i=e.findSessionByPrefix(t)??t;try{let a=e.forkSession(i,{messageLimit:n.messageLimit});return d(s,"session.fork",{newSessionId:a.newSessionId,sourceSessionId:a.sourceSessionId,messagesCopied:a.messagesCopied,title:a.title})}catch(a){return r(s,"session.fork","SESSION_NOT_FOUND",a.message)}}function y(s){return{"session.list":async function*(e,o){yield f(e,s.sessionLedger,o)},"session.read":async function*(e,o){yield S(e,s.sessionLedger,o)},"session.load":async function*(e,o){yield g(e,s.sessionLedger,o)},"session.fork":async function*(e,o){yield m(e,s.sessionLedger,o)}}}
|
|
2
|
+
export{d as ba,r as ca,I as da,f as ea,S as fa,g as ga,m as ha,y as ia};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{ua as q}from"./index-nnqfqvqh.js";import*as V from"node:fs";import*as Q from"node:path";import{resolveRuntimeRootDirectory as z,runtimeSocketsDirectory as C}from"@aria-cli/server";import J from"better-sqlite3";function M(B){let G=Q.resolve(B);try{return V.realpathSync.native(G)}catch{return G}}function j(){return Q.join(process.env.HOME??"/tmp",".aria")}function _(B){return Q.join(B,"node","node-state.db")}function O(B){return`${_(B)}.lock`}function L(B){return Q.join(B,"node","runtime-cutover-last-report.json")}function $(B){if(!Number.isFinite(B)||B<=0)return!1;try{return process.kill(B,0),!0}catch{return!1}}function X(B,G){if(!V.existsSync(B)){G.skippedPaths.push(B);return}V.rmSync(B,{recursive:!0,force:!0}),G.removedPaths.push(B)}function Z(B,G){for(let T of[B,`${B}-wal`,`${B}-shm`])X(T,G)}function N(B){let G=Q.join(B,"arions");if(!V.existsSync(G))return[];return V.readdirSync(G,{withFileTypes:!0}).filter((T)=>T.isDirectory()).map((T)=>Q.join(G,T.name))}function S(B){let G=Q.join(B,"owners");if(!V.existsSync(G))return[];let T=new Set;for(let K of V.readdirSync(G)){if(!K.endsWith(".json"))continue;try{let U=V.readFileSync(Q.join(G,K),"utf8"),W=JSON.parse(U);if(typeof W.runtimePid==="number"&&$(W.runtimePid))T.add(W.runtimePid)}catch{}}return[...T]}function g(B,G,T){if(!V.existsSync(B))return[];let K=new Set;for(let U of V.readdirSync(B)){if(!G(U))continue;try{let W=JSON.parse(V.readFileSync(Q.join(B,U),"utf8")),Y=T(W);if(Y!==null&&$(Y))K.add(Y)}catch{}}return[...K]}function F(B){return g(B,(G)=>G.startsWith("presence-")&&G.endsWith(".json"),(G)=>{if(typeof G==="object"&&G!==null&&"pid"in G&&typeof G.pid==="number")return G.pid;return null})}function w(B){let G=_(B);if(!V.existsSync(G))return[];let T=new J(G,{readonly:!0});try{return T.prepare(`SELECT runtime_pid
|
|
2
|
+
FROM runtime_owner_records`).all().map((U)=>U.runtime_pid).filter((U)=>Number.isFinite(U)&&$(U))}catch{return[]}finally{T.close()}}function A(B,G){let T=j(),K=F(T),U=S(G),W=w(B),Y=[...new Set([...K,...U,...W])];if(Y.length>0)throw Error(`[runtime-cutover-reset] refuse live runtime mutation while runtime is live (pids: ${Y.join(", ")}). Stop all ARIA daemons/clients first.`)}function x(B,G){let T=_(B);if(!V.existsSync(T))return{runtimeOwnerRecords:0,runtimeEvents:0};let K=new J(T);try{let U=K.prepare("DELETE FROM runtime_owner_records").run().changes,W=K.prepare("DELETE FROM runtime_events").run().changes;return G.preservedPaths.push(T),{runtimeOwnerRecords:U,runtimeEvents:W}}finally{K.close()}}function E(B,G){let T=j();X(Q.join(T,"mesh-events.db"),G),X(Q.join(T,"mesh-events.db-wal"),G),X(Q.join(T,"mesh-events.db-shm"),G),X(Q.join(T,"event_queue"),G),X(Q.join(T,"event_queue.db"),G),X(Q.join(T,"event_queue.db-wal"),G),X(Q.join(T,"event_queue.db-shm"),G),X(Q.join(z(),"host-supervisor.sock"),G);let K=[...new Set([T,B])];for(let U of K){if(!V.existsSync(U))continue;for(let W of V.readdirSync(U)){let Y=W.startsWith("daemon-info-")&&(W.endsWith(".json")||W.endsWith(".json.lock")),k=U===T&&W.startsWith("presence-")&&W.endsWith(".json");if(Y||k)X(Q.join(U,W),G)}}}function I(B,G,T,K){Z(Q.join(B,"network","state.db"),K),X(Q.join(B,"network","trusted-cas"),K),X(Q.join(B,"server-session-history.json"),K),X(Q.join(B,"sessions"),K),Z(Q.join(B,"history.db"),K);for(let U of N(B))Z(Q.join(U,"memory.db"),K),Z(Q.join(U,"history.db"),K),X(Q.join(U,"daemon"),K),X(Q.join(U,"logs"),K);if(X(Q.join(G,"owners"),K),X(C(G),K),T)return Z(_(B),K),X(O(B),K),X(Q.join(B,"network","config.json"),K),X(Q.join(B,"network","tls"),K),{runtimeOwnerRecords:0,runtimeEvents:0};return K.preservedPaths.push(Q.join(B,"network","config.json")),K.preservedPaths.push(Q.join(B,"network","tls")),x(B,K)}function b(B){return V.mkdirSync(Q.dirname(B.reportPath),{recursive:!0}),V.writeFileSync(B.reportPath,`${JSON.stringify(B,null,2)}
|
|
3
|
+
`,"utf8"),B}function y(B){console.log("[runtime-cutover-reset] completed"),console.log(` ariaHome: ${B.ariaHome}`),console.log(` fullReset: ${B.fullReset?"yes":"no"}`),console.log(` preserveLocalNodeIdentity: ${B.preserveLocalNodeIdentity?"yes":"no"}`),console.log(` deleted: ${B.deletedPaths.length}`),console.log(` preserved: ${B.preservedPaths.length}`),console.log(` cleared runtime owner records: ${B.cleared.runtimeOwnerRecords}`),console.log(` cleared runtime journal events: ${B.cleared.runtimeEvents}`),console.log(` report: ${B.reportPath}`)}async function R(B={}){let G=M(B.ariaHome??q()),T=z(),K=B.fullNodeReset??B.fullReset??!1,U=B.preserveLocalNodeIdentity??!K;A(G,T);let W={ariaHome:G,runtimeRoot:T,generatedAt:new Date().toISOString(),fullReset:K,fullNodeReset:K,preserveLocalNodeIdentity:U,reportPath:L(G),removedPaths:[],deletedPaths:[],preservedPaths:[],skippedPaths:[],cleared:{runtimeOwnerRecords:0,runtimeEvents:0}};return E(G,W),W.cleared=I(G,T,K,W),W.deletedPaths=[...W.removedPaths],b(W)}async function P(B={}){let G=await R(B);if(B.json){console.log(JSON.stringify(G,null,2));return}y(G)}
|
|
4
|
+
export{R as i,P as j};
|