@aria-cli/cli 1.0.18 → 1.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/aria.js +8 -8
- package/bin/install-owner-lease.js +1 -1
- package/dist/.aria-build-stamp.json +1 -1
- package/dist/cli-context.js +1 -1
- package/dist/commands/index.js +356 -1
- package/dist/config.js +1 -1
- package/dist/ensure-daemon.js +4 -1
- package/dist/history/index.js +321 -1
- package/dist/index.js +503 -1
- package/dist/ink-repl.js +491 -1
- package/dist/local-control-client.js +4 -1
- package/dist/release-notes.d.ts +1 -1
- package/dist/repl-cleanup.js +1 -0
- package/dist/session.js +1 -1
- package/package.json +10 -10
- package/dist/attached-local-control-client-2jz8vmjb.js +0 -1
- package/dist/daemon-service-esj85cr7.js +0 -1
- package/dist/index-00jaxgt2.js +0 -2
- package/dist/index-5v7br509.js +0 -2
- package/dist/index-718zvjhe.js +0 -12
- package/dist/index-76vaj0sr.js +0 -321
- package/dist/index-92syx5hd.js +0 -149
- package/dist/index-9j6r3gr8.js +0 -2
- package/dist/index-g5devafm.js +0 -0
- package/dist/index-j035n0mr.js +0 -2
- package/dist/index-nnqfqvqh.js +0 -2
- package/dist/index-sx36201d.js +0 -5
- package/dist/index-sxga6d5s.js +0 -2
- package/dist/index-wbm34jf5.js +0 -24
- package/dist/index-xjwfqz7t.js +0 -2
- package/dist/index-y2vy5jks.js +0 -4
- package/dist/kernel-0tytvcv0.js +0 -1
- package/dist/runtime-cutover-reset-0nywfrh6.js +0 -1
- package/dist/session-ybzq2j2n.js +0 -1
package/bin/aria.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";import{writeFileSync as F,appendFileSync as U,mkdirSync as z}from"node:fs";import{join as y}from"node:path";import{homedir as L}from"node:os";import{createHash as J}from"node:crypto";import{RESTART_KIND_ENV as V,RESUME_SESSION_ENV as A}from"@aria-cli/types";import"../dist/repl-cleanup.js";import{installOwnerLease as W}from"./install-owner-lease.js";function $(o,
|
|
3
|
-
`)[1]?.trim()??"",x=Math.floor(Date.now()/1e4),R=J("sha256").update(`${
|
|
4
|
-
`)){const l=M.match(/\((?:file:\/\/)?([^:)]+):\d+:\d+\)/);l?.[1]?.includes("packages/")&&!l[1].includes("node_modules")&&w.push(l[1])}const k={id:`crash-${R}`,timestamp:u.timestamp,severity:0,category:"crash",domain:"cli",name:
|
|
5
|
-
`,"utf-8")}catch{}}process.on("uncaughtException",(o,
|
|
2
|
+
"use strict";import{writeFileSync as F,appendFileSync as U,mkdirSync as z}from"node:fs";import{join as y}from"node:path";import{homedir as L}from"node:os";import{createHash as J}from"node:crypto";import{RESTART_KIND_ENV as V,RESUME_SESSION_ENV as A}from"@aria-cli/types";import"../dist/repl-cleanup.js";import{installOwnerLease as W}from"./install-owner-lease.js";function $(o,s){try{const i=y(L(),".aria","crash-reports");z(i,{recursive:!0});const p=process.env[A]||"unknown",m=process.memoryUsage(),u={timestamp:new Date().toISOString(),sessionId:p,type:o,error:{message:s?.message??String(s),stack:s?.stack??void 0,name:s?.name??void 0},process:{pid:process.pid,heapUsedMb:Math.round(m.heapUsed/1024/1024*100)/100,rssMb:Math.round(m.rss/1024/1024*100)/100,uptime:Math.round(process.uptime())}};F(y(i,"latest.json"),JSON.stringify(u,null,2));const e=y(L(),".aria"),c=y(e,"error-events.jsonl"),S=s?.stack?.split(`
|
|
3
|
+
`)[1]?.trim()??"",x=Math.floor(Date.now()/1e4),R=J("sha256").update(`${s?.message??""}|${S}|${x}`).digest("hex").slice(0,12),v=[];let n=s?.cause;const f=new Set;for(;n instanceof Error&&!f.has(n);)f.add(n),v.push(`${n.name}: ${n.message}`),n=n.cause;const w=[];if(s?.stack)for(const M of s.stack.split(`
|
|
4
|
+
`)){const l=M.match(/\((?:file:\/\/)?([^:)]+):\d+:\d+\)/);l?.[1]?.includes("packages/")&&!l[1].includes("node_modules")&&w.push(l[1])}const k={id:`crash-${R}`,timestamp:u.timestamp,severity:0,category:"crash",domain:"cli",name:s?.name??"UnknownError",message:s?.message??String(s),code:s?.code??void 0,stackTrace:s?.stack,causeChain:v,recoverable:!1,state:{environment:{nodeVersion:process.version,platform:process.platform},processInfo:u.process},relatedFiles:w,relatedErrors:[],status:"new"};U(c,JSON.stringify(k)+`
|
|
5
|
+
`,"utf-8")}catch{}}process.on("uncaughtException",(o,s)=>{$("uncaughtException",o),process.stderr.write(`[aria] FATAL uncaughtException (origin: ${s}):
|
|
6
6
|
`),process.stderr.write(`${o?.stack??o}
|
|
7
7
|
`),process.exit(1)}),process.on("unhandledRejection",o=>{$("unhandledRejection",o),process.stderr.write(`[aria] FATAL unhandledRejection:
|
|
8
8
|
`),process.stderr.write(`${o?.stack??o}
|
|
9
9
|
`),process.exit(1)}),W();const a=process.argv.slice(2);if(a[0]==="-v"||a[0]==="--version")import("../dist/commands/index.js").then(({program:o})=>o.parseAsync(process.argv)).catch(o=>{process.stderr.write(`Error: ${o.message}
|
|
10
|
-
`),process.exitCode=1});else{const o=["daemon","auth","arions","headless","call","pairing","runtime-cutover-reset","--help","-h"],
|
|
11
|
-
`),process.exit(2)),i=a[++e]):(a[e]==="-c"||a[e]==="--continue")&&!
|
|
12
|
-
`),process.exit(2)),!i&&!p&&process.env[A]&&(i=process.env[A],delete process.env[A],delete process.env[V]);const u=!
|
|
10
|
+
`),process.exitCode=1});else{const o=["daemon","auth","arions","headless","call","pairing","runtime-cutover-reset","--help","-h"],s=a.length>0&&(o.includes(a[0])||a[0].startsWith("--"));let i=null,p=!1;const m=[];for(let e=0;e<a.length;e++)(a[e]==="-r"||a[e]==="--resume")&&!s?(e+1>=a.length&&(process.stderr.write(`Error: -r/--resume requires a session ID
|
|
11
|
+
`),process.exit(2)),i=a[++e]):(a[e]==="-c"||a[e]==="--continue")&&!s?p=!0:m.push(a[e]);i&&p&&(process.stderr.write(`Error: -r/--resume and -c/--continue are mutually exclusive
|
|
12
|
+
`),process.exit(2)),!i&&!p&&process.env[A]&&(i=process.env[A],delete process.env[A],delete process.env[V]);const u=!s&&m.length>0?m.join(" "):void 0;s?import("../dist/commands/index.js").then(({program:e})=>{e.parseAsync(process.argv).catch(c=>{console.error("Error:",c.message),process.exit(1)})}):process.execArgv.some(e=>e.includes("max-old-space-size"))?Promise.resolve().then(async()=>{const{createCliContext:e}=await import("../dist/cli-context.js"),{getAriaDir:c}=await import("../dist/config.js"),{ensureDaemon:S}=await import("../dist/ensure-daemon.js"),x=c(),R=e(),[{attachExistingLocalControlClient:v},{startInkRepl:n},{ArionManager:f,ArionStorage:w},{Memoria:k},{ArionSession:M},{SessionHistory:l}]=await Promise.all([import("../dist/local-control-client.js"),import("../dist/ink-repl.js"),import("@aria-cli/aria"),import("@aria-cli/memoria"),import("../dist/session.js"),import("../dist/history/index.js")]),r=await R;await S(r);const D=await v({ariaHome:x,clientKind:"tui"}),P=process.env.ARIA_MEMORY_PATH||`${r.ariaDir}/arions/ARIA/memory.db`,d=new k({path:P,router:r.router});d.initialize().catch(t=>{console.debug(`[aria] Memoria background init failed (will retry on use): ${t?.message??t}`)});const N={components:{memoria:d},async recallUserName(){try{const t=d.storage?.getDatabase?.();if(!t)return null;const h=t.prepare("SELECT value FROM config WHERE key = 'user_profile'").get();return h?.value?JSON.parse(h.value).name??null:null}catch{return null}},async shutdown(){await d.close()}},T=new w(r.ariaDir),E=new f(T,r.memoriaFactory);if(await E.initialize(),E.setRouter(r.router),!D)throw new Error("[aria] Attached REPL requires an existing local-control runtime");const b=r.config.activeArion?.trim()||"ARIA",_=l.resolvePerArionPath(r.ariaDir,b);l.migrateJsonlLogs(r.ariaDir,b);const g=new l(_),j=g.getInputHistory(100),C=t=>g.addInputHistory(t);let I;if(i){const t=g.findSessionByPrefix(i);t||(process.stderr.write(`Error: No session found matching "${i}"
|
|
13
13
|
`),process.exit(2)),I=t}else if(p){const t=g.listSessions(1);t.length===0&&(process.stderr.write(`Error: No recent sessions to continue
|
|
14
|
-
`),process.exit(2)),I=t[0].id}const O=new M({manager:E,router:
|
|
14
|
+
`),process.exit(2)),I=t[0].id}const O=new M({manager:E,router:r.router,memoria:N.components.memoria,onArionRest:async()=>{}});await O.initialize(r.config.activeArion);let H=null;try{const t=d.storage?.getDatabase?.();if(t){const h=t.prepare("SELECT value FROM config WHERE key = 'user_profile'").get();h?.value&&(H=JSON.parse(h.value).name??null)}}catch{}await n(O,E,r.router,N,D,r,j,C,g,u,H,I,r.availableModels,r.refreshAvailableModels,r.credentialHints,r.authResolver)}).catch(e=>{$("ink-repl-rejected",e),console.error("Error starting Ink REPL:",e.message),process.exit(1)}):(process.on("SIGINT",()=>{}),import("node:child_process").then(({spawn:e})=>{e(process.execPath,["--max-old-space-size=8192",...process.execArgv,process.argv[1],...process.argv.slice(2)],{stdio:"inherit"}).on("close",c=>process.exit(c??1))}))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const
|
|
1
|
+
"use strict";const u=1e3;export function installOwnerLease({env:a=process.env,processRef:e=process,pollMs:f=1e3,onOwnerGone:c}={}){const o=a.ARIA_HARNESS_OWNER_PID;if(!o)return()=>{};const t=Number.parseInt(o,10);if(!Number.isFinite(t)||t<=0)throw new Error(`ARIA_HARNESS_OWNER_PID must be a positive integer, got: ${o}`);let r=!1;const s=setInterval(()=>{if(!r)try{e.kill(t,0)}catch(n){const l=n&&typeof n=="object"&&"code"in n?n.code:void 0;if(l&&l!=="ESRCH")return;if(r=!0,clearInterval(s),c){c(t);return}e.kill(e.pid,"SIGTERM")}},f);s.unref?.();const i=()=>{r||(r=!0,clearInterval(s))};return e.once("exit",i),i}
|
package/dist/cli-context.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{createRequire as r}from"node:module";var s=Object.defineProperty;var a=(x)=>x;function o(x,q){this[x]=a.bind(null,q)}var i=(x,q)=>{for(var J in q)s(x,J,{get:q[J],enumerable:!0,configurable:!0,set:o.bind(q,J)})};var k=(x,q)=>()=>(x&&(q=x(x=0)),q);var hq=r(import.meta.url);var xq={};i(xq,{saveConfig:()=>G,loadConfig:()=>A,loadAndMigrateConfig:()=>m,getConfigPath:()=>I,getAriaDir:()=>H});import*as Z from"fs";import*as O from"os";import{getModelById as e,getModelByShortName as qq,isValidTier as h}from"@aria-cli/models";import{log as Y}from"@aria-cli/types";function H(){if(process.env.ARIA_HOME)return process.env.ARIA_HOME;return`${process.env.HOME||O.homedir()}/.aria`}function I(){return`${H()}/config.json`}function m(){try{let x=I();if(Z.existsSync(x)){let q=JSON.parse(Z.readFileSync(x,"utf-8"));try{if(q.defaultModel&&!q.preferredTier){let z=e(q.defaultModel)||qq(q.defaultModel);if(!z)Y.warn(`Unknown model "${q.defaultModel}" migrated to balanced tier (Sonnet 4.5)`);let Q=z?.tier||"balanced";q.preferredTier=h(Q)?Q:"balanced",delete q.defaultModel,G(q)}if(q.preferredTier!==void 0&&!h(q.preferredTier))Y.warn(`Invalid tier "${q.preferredTier}" corrected to balanced tier`),q.preferredTier="balanced",G(q);let J=!1;if(!q.awsRegion&&process.env.AWS_REGION)q.awsRegion=process.env.AWS_REGION,J=!0;if(!q.awsProfile&&process.env.AWS_PROFILE)q.awsProfile=process.env.AWS_PROFILE,J=!0;if(J)G(q)}catch(J){Y.warn("Config migration failed, using config as-is:",J instanceof Error?J.message:J)}return q}}catch(x){Y.warn("[Config] Failed to load config file:",x)}return{}}function G(x){let q=H();if(!Z.existsSync(q))Z.mkdirSync(q,{recursive:!0});Z.writeFileSync(I(),JSON.stringify(x,null,2),"utf-8")}var A;var P=k(()=>{A=m});import{readFile as zq}from"fs/promises";import{join as E}from"path";import{homedir as Jq}from"os";async function M(x){try{let q=await zq(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 $=K.slice(2,-1);z.env[Q]=process.env[$]||""}}}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 D(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 b(x){let q={...Kq},J=E(Jq(),".aria","config.json"),z=await M(J);if(z)q=D(q,z);if(x){let Q=E(x,"aria.config.json"),K=await M(Q);if(K)q=D(q,K)}return q}var Kq;var p=k(()=>{Kq={mcp:{servers:[]}}});function uq(x){let q=L.indexOf(x);return L[(q+1)%L.length]}function wq(x,q){let J=F[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 vq(x,q){return{...F[x],...q??{}}}var F,L;var u=k(()=>{F={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}},L=["minimal","standard","debug"]});import{readFileSync as Qq}from"fs";import{join as Wq}from"path";import{homedir as Zq}from"os";import{parse as $q}from"yaml";import{log as Xq}from"@aria-cli/types";function Gq(){return{display:{...F.standard,...kq},persistence:{...Hq}}}function Uq(x){return typeof x==="string"&&Vq.has(x)}function Bq(x){return typeof x==="string"&&Fq.has(x)}function Yq(x){return typeof x==="string"&&Nq.has(x)}function X(x){return typeof x==="boolean"}function T(x){return typeof x==="number"&&Number.isInteger(x)&&x>0}function bq(x){return typeof x==="number"&&Number.isInteger(x)&&x>=0}function jq(x){try{let q=Qq(x,"utf-8"),J=$q(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 Iq(x){let q={};if(Uq(x.mode))q.mode=x.mode;if(Yq(x.theme))q.theme=x.theme;if(X(x.thinking))q.showThinking=x.thinking;if(X(x.costs))q.showCosts=x.costs;if(X(x.toolArgs))q.showToolArgs=x.toolArgs;if(Bq(x.toolOutput))q.toolOutput=x.toolOutput;if(X(x.traces))q.showTraces=x.traces;if(X(x.pipelineTiming))q.showPipelineTiming=x.pipelineTiming;if(X(x.statusBar))q.showStatusBar=x.statusBar;if(X(x.syntaxHighlighting))q.syntaxHighlighting=x.syntaxHighlighting;if(T(x.maxToolOutputLines))q.maxToolOutputLines=x.maxToolOutputLines;if(bq(x.maxThinkingPreview))q.maxThinkingPreview=x.maxThinkingPreview;return q}function Aq(x){let q={};if(X(x.jsonlEnabled))q.jsonlEnabled=x.jsonlEnabled;if(T(x.jsonlRetentionDays)||x.jsonlRetentionDays===1/0)q.jsonlRetentionDays=x.jsonlRetentionDays;if(T(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 w(x,q,J){return{...x,...q?y(q):{},...J?y(J):{}}}function Lq(x){let q=Gq(),J=x??Wq(Zq(),".aria","config.yaml"),z;try{z=jq(J)}catch(U){return Xq.warn(`[AriaConfig] Failed to parse ${J}: ${U.message}. Using defaults.`),q}if(z===null)return q;let Q=typeof z.display==="object"&&z.display!==null?z.display:{},K=Iq(Q),$=K.mode??q.display.mode,_=F[$],W=w(_,K),N=typeof z.persistence==="object"&&z.persistence!==null?z.persistence:{},V=Aq(N);return{display:{...W,mode:$,theme:K.theme,syntaxHighlighting:K.syntaxHighlighting??q.display.syntaxHighlighting,maxToolOutputLines:K.maxToolOutputLines??q.display.maxToolOutputLines,maxThinkingPreview:K.maxThinkingPreview??q.display.maxThinkingPreview},persistence:{...q.persistence,...y(V)}}}function y(x){let q={};for(let[J,z]of Object.entries(x))if(z!==void 0)q[J]=z;return q}var Hq,kq,Vq,Fq,Nq;var v=k(()=>{u();Hq={jsonlEnabled:!0,jsonlRetentionDays:1/0,jsonlMaxSizeMb:1/0,otelEndpoint:null},kq={mode:"standard",syntaxHighlighting:!0,maxToolOutputLines:5,maxThinkingPreview:80};Vq=new Set(["minimal","standard","debug"]),Fq=new Set(["hidden","collapsed","standard","expanded"]),Nq=new Set(["dark","light","dark-accessible","light-accessible","claude-dark","claude-light","claude-dark-daltonized","claude-light-daltonized"])});var f=k(()=>{p();v()});import{createRuntimeDefaultRouter as Tq,getCliModels as j,ModelDiscovery as yq}from"@aria-cli/models";import{createRuntimeAuthContext as _q}from"@aria-cli/auth";import{MemoriaPool as Cq}from"@aria-cli/aria";async function Jx(x){let q=A(),J=await b(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,$=!1;if(!q.awsRegion&&process.env.AWS_REGION)q.awsRegion=process.env.AWS_REGION,$=!0;if(!q.awsProfile&&process.env.AWS_PROFILE)q.awsProfile=process.env.AWS_PROFILE,$=!0;if($)G(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=_q({ariaHome:H(),...Q||K?{bedrock:{awsRegion:Q,awsProfile:K}}:{}}).authResolver,N=await Tq({ariaHome:H(),authResolver:W,...Q||K?{bedrock:{awsRegion:Q,awsProfile:K}}:{}}),V=H(),U=new Cq(V,N),C=z!=="daemon"?await W.resolve("anthropic"):null,R=z!=="daemon"?await W.resolve("openai"):null,S=z!=="daemon"?await W.resolve("google"):null,c=z!=="daemon"?await W.resolve("github-copilot"):null,B=new yq({authResolver:W,googleApiKey:S?.apiKey||q.googleApiKey,anthropicApiKey:C?.apiKey||q.anthropicApiKey,openaiApiKey:R?.apiKey,awsRegion:Q,awsProfile:K,cacheDir:V}),d=z==="daemon"?j():j(B.getCachedModels()),g=async(t)=>{if(z==="daemon")return j();let l=t?await B.refresh(!0):await B.getCachedOrRefresh();return j(l)},n={availableProviders:[...Q?["bedrock","bedrock-converse"]:[],...C?.apiKey?["anthropic"]:[],...R?.apiKey?["openai"]:[],...c?.apiKey?["github-copilot"]:[],...S?.apiKey?["google"]:[]]};return{config:q,router:N,pool:U,memoriaFactory:U.toFactory(),ariaDir:V,projectConfig:J,discovery:B,availableModels:d,refreshAvailableModels:g,credentialHints:n,authResolver:W}}var Rq=k(()=>{P();f()});Rq();export{Jx as createCliContext};
|