@arcforge/axon 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/index.js +4 -4
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -794,10 +794,10 @@ ${Kt.stack??""}`}),Kh(nt,"reload")}});let Xt=new Map;if(se.provide(MPe,Xt),se.pr
|
|
|
794
794
|
${gn}`:""}`})},se.config.performance=!1,se.config.compilerOptions.isCustomElement=()=>!0,se.config.errorHandler=(nt,Kt,gn)=>{Kh(nt,`vue:${gn}`)};let Mn=(nt)=>{if(Hh.value===null)Kh(nt,"uncaughtException")},tt=(nt)=>{if(Hh.value===null)Kh(nt,"unhandledRejection")};process.on("uncaughtException",Mn),process.on("unhandledRejection",tt),cb("vterm:app:mount"),se.mount(ke),await new Promise((nt)=>queueMicrotask(nt)),oe(),cb("vterm:boot:complete",{durationMs:Date.now()-(d??Date.now())});let wt={screen:n,app:se,snapshot:CSa(n),async unmount(){if(NPe(),process.off("uncaughtException",Mn),process.off("unhandledRejection",tt),n.off("resize",$e),n.off("drain",fe),N!==null)clearTimeout(N),N=null;for(let nt of Xt.values())await nt.close();se.unmount(),n.cleanup(),n.destroy()},render(){oe()}};if(n.key(g,Ot),t.onMounted)try{t.onMounted(wt)}catch(nt){Kh(nt,"onMounted")}return wt}async function w2e(e){let t=Date.now(),{entry:n,layout:a,highlight:r,ui:i}=e;if(cb("vterm:boot",{cwd:process.cwd()}),EPe(),TPe(),cb("vterm:console:capture"),r)mWe(r);cb("vterm:highlight:config",{theme:r?.theme});let s=new $0e,c=new q0e({inputParser:s,alternateScreen:!0,hideCursor:!0,cursor:i?.cursor,width:e.dimensions?.width,height:e.dimensions?.height});c.initialize(),cb("vterm:driver:init",{width:c.width,height:c.height});let u={};if(e.styles?.length)for(let y of e.styles){if(!y||typeof y!=="object"||Array.isArray(y))continue;Object.assign(u,y)}let A=typeof a==="object"&&a!==null?a:null,p=e.routes??[],d=e.layouts instanceof Map?e.layouts:new Map;cb("vterm:routes:load",{count:p.length,paths:p.map((y)=>y.path??y.name??"?")});let g=e.errorPage??jb.defineComponent({name:"VTermError",setup(){return()=>jb.h("div",{style:{color:"red",padding:"1",display:"flex",flexDirection:"column"}},[jb.h("p",{style:{color:"brightred"}},"Runtime Error"),jb.h("p",{style:{color:"white"}},String(Hh.value?.message??Hh.value??"Unknown error")),jb.h("p",{style:{color:"yellow"}},String(Hh.value?.stack?.split(`
|
|
795
795
|
`)[1]??""))])}}),f;if(p.length>0)f=A??jb.defineComponent({name:"AppRoot",setup(){return()=>jb.h($c)}});else{if(!n)throw Error("No entry component or routes provided to vterm()");f=typeof n==="string"?(()=>{throw Error(`vterm build error: entry must be a component object in production, got string "${n}"`)})():n}let b=f;return f=jb.defineComponent({name:"VTermRoot",setup(){return jb.onErrorCaptured((y)=>{return Kh(y,"component"),!1}),()=>Hh.value!==null?jb.h(g):jb.h(b)}}),Zyt({options:e,driver:c,inputParser:s,component:f,allStyles:u,routes:p,layoutsMap:d,notFoundComponent:e.notFoundComponent,bootStart:t})}var bi=ko(Eo(),1);import $0 from"fs";import Vyt from"path";import Is from"path";import Yyt from"os";function VG(e){let t=e?.root??Is.join(Yyt.homedir(),".capsuleer"),n=Is.join(t,"environment");return{root:t,manifest:Is.join(t,"manifest.json"),env:Is.join(t,"env.json"),environment:n,entrypoint:Is.join(n,"index.ts"),readyMarker:Is.join(n,".ready")}}function k2e(){let{existsSync:e}=nb("fs"),t=Is.dirname(new URL(import.meta.url).pathname),n=Is.join(t,"..",".."),a=Is.join(n,"@capsuleer","cli","bin","capsuleer.ts");if(e(a))return a;let r=Is.join(n,".bin","capsuleer");if(e(r))return r;return"capsuleer"}function GA(e,t){let n=t?.root??Is.join(Yyt.homedir(),".axon");if(!e)return{root:n,cache:Is.join(n,"cache"),activeProfile:Is.join(n,"active-profile.json")};let a=Is.join(n,"profiles",e);return{root:a,auth:Is.join(a,"auth.json"),settings:Is.join(a,"settings.json"),policy:Is.join(a,"policy.json"),credentials:Is.join(a,"credentials.json"),keybinds:Is.join(a,"keybinds.json"),themes:Is.join(a,"themes.json"),history:Is.join(a,"history.jsonl"),agents:{root:Is.join(a,"agents"),agent:(r)=>Is.join(a,"agents",r),config:(r)=>Is.join(a,"agents",r,"config.json"),policy:(r)=>Is.join(a,"agents",r,"policy.json"),store:(r,i,s)=>Is.join(a,"agents",r,"store",i,`${s}.json`),storeDir:(r,i)=>Is.join(a,"agents",r,"store",i),sessions:{root:(r)=>Is.join(a,"agents",r,"sessions"),index:(r)=>Is.join(a,"agents",r,"sessions","index.json"),session:(r,i)=>Is.join(a,"agents",r,"sessions",`${i}.jsonl`)},voice:{root:(r)=>Is.join(a,"agents",r,"voice"),index:(r)=>Is.join(a,"agents",r,"voice","index.json"),recording:(r,i)=>Is.join(a,"agents",r,"voice",`${i}.wav`)}},models:{root:Is.join(a,"models"),model:(r)=>Is.join(a,"models",r),sessions:{root:(r)=>Is.join(a,"models",r,"sessions"),index:(r)=>Is.join(a,"models",r,"sessions","index.json"),session:(r,i)=>Is.join(a,"models",r,"sessions",`${i}.jsonl`)}},cache:Is.join(n,"cache")}}function El(e,t,n){if(e)return;let a=Error(t);if(a.code="ASSERTION_FAILED",a.service="core/assert",a.recoverable=!1,a.actionable=!1,a.timestamp=Date.now(),console.error("[assert]",t),n)n(a)}function xSa(){return Date.now().toString(36)}var XG=Dt.ref([]),Xo={list:Dt.readonly(XG),push(e){XG.value.push({...e,id:xSa(),timestamp:Date.now()})},dismiss(e){XG.value=XG.value.filter((t)=>t.id!==e)},clear(){XG.value=[]}};function Xyt(e){let t=Dt.ref(!1),n=Dt.ref(0),a=null,r=!1;function i(D,I){if(D?.code==="ENOSPC"){if(!r)r=!0,Xo.push({kind:"error",title:"Disk Full",message:"Your disk is full \u2014 session history is not being saved. Free up space to restore normal operation.",source:"store",dismissable:!1})}else console.error(`[store] write failed (${I}):`,D)}function s(D){try{$0.mkdirSync(D,{recursive:!0})}catch(I){console.error("[store] failed to create directory:",D,I)}}function c(D,I){try{if(!$0.existsSync(D))return I;let x=$0.readFileSync(D,"utf-8");return JSON.parse(x)}catch(x){return console.warn("[store] failed to read JSON:",D,x),I}}function u(D,I){try{s(Vyt.dirname(D)),$0.writeFileSync(D,JSON.stringify(I,null,2),"utf-8")}catch(x){throw i(x,D),x}}function A(){return t.value&&a!==null}let p={list(){if(n.value,!A())return[];let D=a.agents.root,I=[];try{if(!$0.existsSync(D))return I;let x=$0.readdirSync(D);for(let k of x){let E=this.get(k);if(E)I.push(E)}}catch(x){console.error("[store] failed to list agents:",x)}return I},get(D){if(!A())return null;let I=a.agents.config(D);return c(I,null)},save(D){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.agents.config(D.name),D),n.value++},remove(D){El(t.value,"store not ready"),El(a,"paths not initialized");let I=a.agents.agent(D);try{if($0.existsSync(I))$0.rmSync(I,{recursive:!0})}catch(x){throw console.error("[store] failed to remove agent:",D,x),x}n.value++}},d={list(D,I){if(!A())return[];let x=I?a.agents.sessions.index:a.models.sessions.index;return c(x(D),[])},create(D){El(t.value,"store not ready"),El(a,"paths not initialized");let I=this.list(D.agentName,D.userOwned);if(!I.some((k)=>k.id===D.id)){I.push(D);let E=(D.userOwned?a.agents.sessions.index:a.models.sessions.index)(D.agentName);u(E,I)}},remove(D,I,x){El(t.value,"store not ready"),El(a,"paths not initialized");let k=this.list(D,I).filter((N)=>N.id!==x),B=(I?a.agents.sessions.index:a.models.sessions.index)(D);u(B,k);let T=(I?a.agents.sessions.session:a.models.sessions.session)(D,x);try{if($0.existsSync(T))$0.unlinkSync(T)}catch(N){console.error("[store] failed to remove session file:",T,N)}},appendEvent(D,I,x,k){El(t.value,"store not ready"),El(a,"paths not initialized");let B=(I?a.agents.sessions.session:a.models.sessions.session)(D,x);if(r)return;try{s(Vyt.dirname(B)),$0.appendFileSync(B,JSON.stringify(k)+`
|
|
796
796
|
`,"utf-8")}catch(Q){throw i(Q,B),Q}},loadEvents(D,I,x){El(t.value,"store not ready"),El(a,"paths not initialized");let E=(I?a.agents.sessions.session:a.models.sessions.session)(D,x);try{if(!$0.existsSync(E))return[];return $0.readFileSync(E,"utf-8").trim().split(`
|
|
797
|
-
`).filter(Boolean).map((T)=>JSON.parse(T))}catch(B){return console.error("[store] failed to load events:",E,B),[]}},updateMeta(D,I,x){El(t.value,"store not ready"),El(a,"paths not initialized");let k=this.list(D,I),E=k.findIndex((B)=>B.id===x.id);if(E>=0){k[E]=x;let Q=(I?a.agents.sessions.index:a.models.sessions.index)(D);u(Q,k)}}},g={themeId:"arc",selectedAgent:null,scrollback:1000,fontSize:14};return{ready:t,agents:p,sessions:d,settings:{get(){if(!A())return{...g};return c(a.settings,{...g})},set(D){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.settings,D)}},keybinds:{get(){if(!A())return{};return c(a.keybinds,{})},set(D){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.keybinds,D)}},credentials:{get(){if(!A())return{};return c(a.credentials,{})},set(D){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.credentials,D)},clear(){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.credentials,{})}},async init(D){a=GA(D,{root:e}),s(a.agents.root),s(a.models.root),t.value=!0},teardown(){t.value=!1,a=null}}}import UD from"fs";import ewt from"path";var vSa=300000,BSa=86400000;function twt(e){try{UD.mkdirSync(e,{recursive:!0})}catch(n){console.error("[cache] failed to create directory:",n)}let t=new Map;return{get(n,a,r){let i=r?.soft??vSa,s=r?.hard??BSa,c=ewt.join(e,`${n}.json`),u=Dt.ref(null),A=null,p=0;try{if(UD.existsSync(c)){let b=UD.readFileSync(c,"utf-8"),y=JSON.parse(b);A=y.data,p=y.timestamp,u.value=A}}catch(b){console.debug("[cache] failed to read:",n,b)}let d=Date.now(),g=p?d-p:1/0;if(!A||g>i){let b=`${n}:fetching`,y=t.get(b);if(!y)y=a().then((D)=>{try{let I={data:D,timestamp:d};UD.mkdirSync(e,{recursive:!0}),UD.writeFileSync(c,JSON.stringify(I),"utf-8")}catch(I){console.error("[cache] failed to write:",n,I)}return u.value=D,t.delete(b),D}).catch((D)=>{if(console.error("[cache] fetch failed:",n,D),A&&g>s)Xo.push({kind:"warning",title:"Stale Cache",message:`Using stale cache for ${n} (fetch failed)`,source:"cache",dismissable:!0}),u.value=A;t.delete(b)}),t.set(b,y);else y.then(()=>{try{if(UD.existsSync(c)){let D=UD.readFileSync(c,"utf-8"),I=JSON.parse(D);u.value=I.data}}catch(D){console.debug("[cache] failed to read after dedup:",n,D)}})}return u},invalidate(n){let a=ewt.join(e,`${n}.json`);try{if(UD.existsSync(a))UD.unlinkSync(a)}catch(r){console.error("[cache] failed to invalidate:",n,r)}}}}var Qae=typeof AXON_VERSION<"u"?AXON_VERSION:"0.0.0-dev",ESa="https://registry.npmjs.org/axon/latest",DSa="bun add -g axon@latest";function nwt(e){let t=Dt.ref(null),n=e??global.fetch,a=Qae==="0.0.0-dev";return{get currentVersion(){return Qae},get latestVersion(){return t.value},get hasUpdate(){if(a)return!1;if(!t.value)return!1;return t.value!==Qae},async check(){if(a)return;try{let r=await n(ESa);if(!r.ok)throw Error(`HTTP ${r.status}`);let s=(await r.json()).version;if(s&&s!==Qae)t.value=s,Xo.push({kind:"info",title:"Update Available",message:`Axon ${s} is available. Run: ${DSa}`,source:"updater",dismissable:!0,action:{label:"View Release",handler:async()=>{}}})}catch(r){console.debug("[updater] check failed:",r)}},reset(){t.value=null}}}function Pb(){return process.env.AXON_API_BASE??"https://axon.arclabs.it"}async function awt(e){let t=await fetch(`${Pb()}/api/auth/device/authorize`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e?{hint:e}:{})});if(!t.ok)throw Error(`authorize failed: ${t.status}`);return await t.json()}async function rwt(e,t){let n=new URLSearchParams({device_code:e}),a=await fetch(`${Pb()}/api/auth/device/poll?${n}`,{method:"GET",signal:t});if(!a.ok)throw Error(`poll failed: ${a.status}`);return await a.json()}async function iwt(e){let t=await fetch(`${Pb()}/api/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}});if(!t.ok){let r=await t.text().catch(()=>"");throw Error(`refresh failed: ${t.status} ${r}`)}let n=await t.text(),a;try{a=JSON.parse(n)}catch{throw Error(`refresh returned invalid JSON (status ${t.status}): ${n.slice(0,200)}`)}return{accessToken:a.access_token||a.accessToken,user:a.user}}async function eU(e){let t=await fetch(`${Pb()}/api/users/me`,{method:"GET",headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw Error(`getMe failed: ${t.status}`);return(await t.json()).user}import Ym from"fs";import Aj from"path";function Fae(e){try{let t=e.split(".");if(t.length!==3)return console.warn("[auth] token is not a JWT, using 24h default"),Date.now()+86400000;let n=t[1],a=n+"=".repeat((4-n.length%4)%4),r=Buffer.from(a,"base64").toString("utf-8"),s=JSON.parse(r).exp;if(!s)return console.warn("[auth] JWT has no exp claim, using 24h default"),Date.now()+86400000;return s*1000}catch(t){return console.warn("[auth] failed to parse JWT:",t),Date.now()+86400000}}function C2e(e,t){try{let n=t.auth;if(!Ym.existsSync(n))return null;let a=Ym.readFileSync(n,"utf-8");return JSON.parse(a)}catch(n){return console.debug("[auth] failed to read auth record:",n),null}}function tU(e,t,n){try{let a=n.auth,r=Aj.dirname(a);Ym.mkdirSync(r,{recursive:!0}),Ym.writeFileSync(a,JSON.stringify(t,null,2),"utf-8")}catch(a){throw console.error("[auth] failed to write auth record:",a),a}}function owt(e){try{let t=e.activeProfile;if(!Ym.existsSync(t))return null;let n=Ym.readFileSync(t,"utf-8");return JSON.parse(n).userId||null}catch(t){return console.debug("[auth] failed to read active profile:",t),null}}function x2e(e,t){try{let n=t.activeProfile,a=Aj.dirname(n);Ym.mkdirSync(a,{recursive:!0}),Ym.writeFileSync(n,JSON.stringify({userId:e},null,2),"utf-8")}catch(n){throw console.error("[auth] failed to write active profile:",n),n}}function Sae(e){try{let t=Aj.join(e.root,"profiles");if(!Ym.existsSync(t))return[];let n=Ym.readdirSync(t,{withFileTypes:!0}),a=[];for(let r of n){if(!r.isDirectory())continue;let i=Aj.join(t,r.name,"auth.json");if(!Ym.existsSync(i))continue;try{let s=JSON.parse(Ym.readFileSync(i,"utf-8"));a.push({id:r.name,email:s.user.email})}catch{}}return a}catch(t){return console.error("[auth] failed to list profiles:",t),[]}}function swt(e){try{let t=e.activeProfile;if(Ym.existsSync(t))Ym.unlinkSync(t)}catch(t){console.error("[auth] failed to delete active profile:",t)}}function cwt(e,t){try{let n=Aj.join(t.root,"profiles"),a=Aj.join(n,e);if(Ym.existsSync(a))Ym.rmSync(a,{recursive:!0})}catch(n){throw console.error("[auth] failed to delete profile:",n),n}}var FSa=300000;function uwt(){let e=null,t=2147483647;function n(a){let r=Date.now(),i=a-FSa;if(i<=r)return 0;return Math.min(i-r,t)}return{start(a,r,i){this.stop();let s=a.expiresAt?.value;if(!s){console.warn("[auth] no expiresAt, skipping refresh timer");return}let c=n(s);e=setTimeout(()=>{(async()=>{try{let u=a.accessToken?.value;if(!u){console.warn("[auth] no token for refresh"),a.user.value=null;return}let A=await iwt(u);a.accessToken.value=A.accessToken;let p=Fae(A.accessToken);a.expiresAt.value=p;let d={accessToken:A.accessToken,expiresAt:p,user:A.user};tU(i,d,r),this.start(a,r,i)}catch(u){console.error("[auth] token refresh failed:",u),a.user.value=null,a.accessToken.value=null,Xo.push({kind:"error",title:"Session expired",message:"Your session has expired. Please log in again.",source:"auth",dismissable:!0})}})()},c)},stop(){if(e)clearTimeout(e),e=null}}}function es(e,t,n,a){return{code:e,message:t,service:n,recoverable:a?.recoverable??!0,timestamp:Date.now()}}var lwt=!0,Tae={voice:{visualizer:{minHz:120,maxHz:4000,bucketCount:96,noiseGate:0.05,sharpen:0.7,peakHold:0,rollingMaxDecay:0.7}},devAgents:[{name:"Helios (dev)",description:"Local dev agent",model:{id:"helios-dev",endpoint:"ws://localhost:3010",pathway:"api/chat"},userOwned:!1,devOnly:!0}]};function Mwt(e){let{paths:t,emitError:n,emit:a}=e,r=t;function i(E){return r(E)}function s(){return r()}let c=Dt.ref(null),u=Dt.ref(null),A=Dt.ref("idle"),p=Dt.ref(null),d=Dt.ref(null),g=uwt(),f=null,b=Dt.ref(null),y=Dt.ref([]);function D(E){if(n)n(E)}function I(E){if(!E){c.value=null,u.value=null,d.value=null;return}if(E.expiresAt<=Date.now()){c.value=null,u.value=null,d.value=null;return}c.value=E.user,u.value=E.accessToken,d.value=E.expiresAt}async function x(E,B=5){let Q=B*1000;while(A.value==="polling"){try{let T=await rwt(E,f?.signal);if(T.status==="approved"&&T.access_token&&T.user){A.value="approved",Xo.clear(),c.value=T.user,u.value=T.access_token;let N=Fae(T.access_token);d.value=N;let j={accessToken:T.access_token,expiresAt:N,user:T.user},O=i(T.user.id);tU(T.user.id,j,O);let $=s();x2e(T.user.id,$),y.value=Sae($),b.value=T.user.id,g.start({user:c,accessToken:u,expiresAt:d},O,T.user.id),f=null;return}}catch(T){if(T instanceof Error&&T.message.includes("abort")){f=null,A.value="idle";return}console.error("[auth] poll failed:",T),A.value="error";let N=es("DEVICE_POLL_FAILED","Device authorization polling failed","auth",{recoverable:!0});D(N);return}await new Promise((T)=>setTimeout(T,Q))}}return{user:c,accessToken:u,status:A,userCode:p,expiresAt:d,async init(){A.value="idle";let E=s();y.value=Sae(E);let B=owt(E);if(!B){c.value=null;return}let Q=i(B),T=C2e(B,Q);if(b.value=B,!T)return;if(T.expiresAt<=Date.now()){if(lwt)c.value=T.user,u.value=T.accessToken;try{let j=await eU(T.accessToken),O={accessToken:T.accessToken,expiresAt:Date.now()+86400000,user:j};tU(B,O,Q),I(O),g.start({user:c,accessToken:u,expiresAt:d},Q,B)}catch(j){console.error("[auth] session expired and server rejected token:",j),c.value=null,u.value=null,Xo.push({kind:"error",title:"Session expired",message:"Your session has expired. Please log in again.",source:"auth",dismissable:!0})}return}I(T),eU(T.accessToken).then((j)=>{c.value=j}).catch((j)=>{console.debug("[auth] background user refresh failed (OK, using stored):",j)}),g.start({user:c,accessToken:u,expiresAt:d},Q,B)},async startLogin(E){A.value="authorizing",f=new AbortController;try{let B=await awt(E);if(p.value=B.user_code,A.value="polling",B.verification_uri_complete){let Q=(await Promise.resolve().then(() => (Pwt(),jwt))).default;await Q(B.verification_uri_complete)}if(await x(B.device_code,B.interval),c.value)a?.({type:"axon:auth:login",userId:c.value.id})}catch(B){console.error("[auth] authorize failed:",B),A.value="error";let Q=es("DEVICE_AUTHORIZE_FAILED","Failed to start login process","auth",{recoverable:!0});D(Q)}},async logout(){let E=c.value?.id??null;g.stop(),f?.abort(),f=null,c.value=null,u.value=null,p.value=null,d.value=null,b.value=null,A.value="idle",swt(s()),a?.({type:"axon:auth:logout",userId:E})},async refreshUser(){if(!u.value)return;try{c.value=await eU(u.value)}catch{}},profiles:{list:y,active:Dt.computed(()=>b.value),async switch(E){a?.({type:"axon:auth:profile:switch",toUserId:E}),g.stop(),c.value=null,u.value=null,d.value=null;let B=i(E),Q=C2e(E,B);if(I(Q),b.value=E,Q){x2e(E,s());try{let T=await eU(Q.accessToken);c.value=T}catch(T){console.debug("[auth] background user refresh on switch failed:",T)}if(d.value)g.start({user:c,accessToken:u,expiresAt:d},B,E)}},async remove(E){if(E===b.value)throw es("CANNOT_REMOVE_ACTIVE_PROFILE","Cannot remove the active profile. Switch to another profile first.","auth",{recoverable:!0,actionable:!0});let B=s();cwt(E,B),y.value=Sae(B)}}}}import b4 from"fs";import qwt from"path";var iU=[{id:"arc",name:"Arc",shiki:"arcnight",ui:{primary:"#00B4D8",background:"#1e1e1e",textLight:"#e0e0e0",textDark:"#808080"}},{id:"dracula",name:"Dracula",shiki:"dracula",ui:{primary:"#BD93F9",background:"#282a36",textLight:"#f8f8f2",textDark:"#6272a4"}},{id:"nord",name:"Nord",shiki:"nord",ui:{primary:"#88C0D0",background:"#2e3440",textLight:"#eceff4",textDark:"#4c566a"}},{id:"monokai",name:"Monokai",shiki:"monokai",ui:{primary:"#A6E22E",background:"#272822",textLight:"#f8f8f2",textDark:"#75715e"}},{id:"github-light",name:"GitHub Light",shiki:"github-light",ui:{primary:"#0969DA",background:"#ffffff",textLight:"#24292f",textDark:"#57606a"}}],dj={themeId:"arc",selectedAgent:null,scrollback:1000,fontSize:14};function $wt(e){let t=e?.paths??GA,n=e?.emit,a=Dt.ref({...dj}),r=new Map,i=Dt.ref([]),s=null,c=dj.themeId;iU.forEach((b)=>{r.set(b.id,b)}),i.value=Array.from(r.values());function u(){i.value=Array.from(r.values())}async function A(b){try{let y=t(b);if(!b4.existsSync(y.settings))return{...dj};let D=b4.readFileSync(y.settings,"utf-8"),I=JSON.parse(D);return{...dj,...I}}catch(y){return console.error("[prefs] failed to read settings:",y),{...dj}}}function p(b,y){try{if(!b){console.warn("[prefs] writeSettings called without userId");return}let D=t(b),I=qwt.dirname(D.settings);b4.mkdirSync(I,{recursive:!0}),b4.writeFileSync(D.settings,JSON.stringify(y,null,2),"utf-8")}catch(D){throw console.error("[prefs] failed to write settings:",D),D}}async function d(b){try{let y=t(b);if(!b4.existsSync(y.themes))return[];let D=b4.readFileSync(y.themes,"utf-8");return JSON.parse(D)}catch(y){return console.error("[prefs] failed to read themes:",y),[]}}function g(b){try{let y=t(b),D=qwt.dirname(y.themes),I=Array.from(r.values()).filter((x)=>!iU.some((k)=>k.id===x.id));b4.mkdirSync(D,{recursive:!0}),b4.writeFileSync(y.themes,JSON.stringify(I,null,2),"utf-8")}catch(y){throw console.error("[prefs] failed to write themes:",y),y}}let f={theme:Dt.computed(()=>{let b=a.value.themeId,y=r.get(b);if(y)return y;return r.get("arc")||iU[0]}),settings:Dt.computed(()=>({...a.value})),async set(b,y){if(a.value[b]=y,s)p(s,a.value);n?.({type:"axon:prefs:set",key:b,value:y})},async setTheme(b){if(!r.get(b)){console.warn("[prefs] theme not found:",b);return}await f.set("themeId",b),c=b,n?.({type:"axon:prefs:theme",themeId:b})},previewTheme(b){if(!r.has(b))return;a.value={...a.value,themeId:b}},cancelThemePreview(){a.value={...a.value,themeId:c}},themes:{list:Dt.readonly(i),get(b){return r.get(b)},register(b){r.set(b.id,b),u()},async save(b){if(f.themes.register(b),s)g(s)},async remove(b){let y=iU.some((D)=>D.id===b);if(El(!y,`Cannot remove built-in theme: ${b}`),r.delete(b),u(),s)g(s)}},async init(b){s=b;let y=await A(b);a.value=y,c=y.themeId,(await d(b)).forEach((I)=>{f.themes.register(I)})},teardown(){s=null,a.value={...dj},r.clear(),iU.forEach((b)=>{r.set(b.id,b)}),u()}};return f}var Rwt="agent-registry";function G2e(e){let t=Dt.ref([]),n=Dt.ref(!1),a=Dt.ref(null);async function r(){let c=await fetch(`${Pb()}/api/agents`);if(!c.ok)throw Error(`Failed to fetch agent registry: ${c.statusText}`);return await c.json()}async function i(){try{n.value=!0,a.value=null;let c=e.get(Rwt,r);if(c.value!==null)t.value=c.value;await new Promise((u)=>{let A=setInterval(()=>{if(c.value!==null)t.value=c.value,clearInterval(A),u()},10);setTimeout(()=>{clearInterval(A),u()},5000)})}catch(c){let u=c instanceof Error?c.message:"Failed to load agent registry";a.value=u,console.error("[agent-registry] failed to load:",c),Xo.push({kind:"error",title:"Registry Load Failed",message:"Failed to load agent registry.",source:"registries",dismissable:!0})}finally{n.value=!1}}async function s(){try{e.invalidate(Rwt),await i()}catch(c){console.error("[agent-registry] failed to refresh:",c)}}return{list:Dt.readonly(t),isRefreshing:Dt.computed(()=>n.value),loadError:Dt.computed(()=>a.value),load:i,refresh:s}}var Owt="module-registry";function U2e(e){let t=Dt.ref([]),n=Dt.ref(""),a=Dt.ref(!1),r=Dt.computed(()=>{if(!n.value)return t.value;let p=n.value.toLowerCase();return t.value.filter((d)=>d.id.toLowerCase().includes(p)||d.description.toLowerCase().includes(p)||d.tags.some((g)=>g.toLowerCase().includes(p)))});async function i(){let p=await fetch(`${Pb()}/api/capsuleer/modules`);if(!p.ok)throw Error(`Failed to fetch module registry: ${p.statusText}`);return await p.json()}async function s(){try{a.value=!0;let p=e.get(Owt,i);if(p.value!==null)t.value=p.value;await new Promise((d)=>{let g=setInterval(()=>{if(p.value!==null)t.value=p.value,clearInterval(g),d()},10);setTimeout(()=>{clearInterval(g),d()},5000)})}catch(p){console.error("[module-registry] failed to load:",p),Xo.push({kind:"error",title:"Module Registry Load Failed",message:"Failed to load module registry.",source:"registries",dismissable:!0})}finally{a.value=!1}}async function c(){try{e.invalidate(Owt),await s()}catch(p){console.error("[module-registry] failed to refresh:",p)}}function u(p){n.value=p??""}async function A(p){try{let d=await fetch(`${Pb()}/api/capsuleer/modules/${p}`);if(!d.ok){if(d.status===404)return null;throw Error(`Failed to fetch module: ${d.statusText}`)}return await d.json()}catch(d){return console.error("[module-registry] failed to get module:",d),null}}return{list:Dt.readonly(r),isRefreshing:Dt.computed(()=>a.value),load:s,refresh:c,search:u,get:A}}var Gwt="model-registry";function Uwt(e){let t=Dt.ref([]),n=Dt.ref(!1),a=Dt.ref(null);async function r(){let c=await fetch(`${Pb()}/api/models`);if(!c.ok)throw Error(`Failed to fetch model registry: ${c.statusText}`);return await c.json()}async function i(){try{n.value=!0,a.value=null;let c=e.get(Gwt,r);if(c.value!==null)t.value=c.value;await new Promise((u)=>{let A=setInterval(()=>{if(c.value!==null)t.value=c.value,clearInterval(A),u()},10);setTimeout(()=>{clearInterval(A),u()},5000)})}catch(c){let u=c instanceof Error?c.message:"Failed to load model registry";a.value=u,console.error("[model-registry] failed to load:",c)}finally{n.value=!1}}async function s(){try{e.invalidate(Gwt),await i()}catch(c){console.error("[model-registry] failed to refresh:",c)}}return{list:Dt.readonly(t),isRefreshing:Dt.computed(()=>n.value),loadError:Dt.computed(()=>a.value),load:i,refresh:s}}import h4 from"fs";import zwt from"path";function Hwt(e){let t=e?.paths??VG;function n(a){let r=t({root:a});function i(){try{if(!h4.existsSync(r.manifest))return[];let p=h4.readFileSync(r.manifest,"utf-8");return JSON.parse(p)}catch(p){return console.error("[capsule] failed to load manifest:",p),[]}}function s(p){try{h4.mkdirSync(zwt.dirname(r.manifest),{recursive:!0}),h4.writeFileSync(r.manifest,JSON.stringify(p,null,2),"utf-8")}catch(d){throw console.error("[capsule] failed to save manifest:",d),d}}async function c(p,d){let f=await Bun.spawn(["bun","x","capsuleer",p,...d],{stdout:"inherit",stderr:"inherit"}).exited;if(f!==0)throw Error(`capsuleer exited with code ${f}`)}let u={list(){return i()},async install(p){try{Xo.push({kind:"info",title:"Installing Module",message:`Installing ${p}...`,source:"capsule",dismissable:!0}),await c("install",[p]),Xo.push({kind:"success",title:"Module Installed",message:`${p} installed successfully.`,source:"capsule",dismissable:!0})}catch(d){console.error("[capsule] install failed:",d);let g=es("CAPSULE_INSTALL_FAILED",`Failed to install module ${p}: ${d instanceof Error?d.message:"unknown error"}`,"capsule",{recoverable:!0});throw Xo.push({kind:"error",title:"Install Failed",message:`Failed to install ${p}.`,source:"capsule",dismissable:!0}),g}},async remove(p){try{Xo.push({kind:"info",title:"Removing Module",message:`Removing ${p}...`,source:"capsule",dismissable:!0}),await c("remove",[p]),Xo.push({kind:"success",title:"Module Removed",message:`${p} removed successfully.`,source:"capsule",dismissable:!0})}catch(d){console.error("[capsule] remove failed:",d);let g=es("CAPSULE_REMOVE_FAILED",`Failed to remove module ${p}: ${d instanceof Error?d.message:"unknown error"}`,"capsule",{recoverable:!0});throw Xo.push({kind:"error",title:"Remove Failed",message:`Failed to remove ${p}.`,source:"capsule",dismissable:!0}),g}}},A={get(){try{if(!h4.existsSync(r.env))return{};let p=h4.readFileSync(r.env,"utf-8");return JSON.parse(p)}catch(p){return console.error("[capsule] failed to read env:",p),{}}},async set(p,d){try{let g=A.get();g[p]=d,h4.mkdirSync(zwt.dirname(r.env),{recursive:!0}),h4.writeFileSync(r.env,JSON.stringify(g,null,2),"utf-8")}catch(g){throw console.error("[capsule] failed to set env:",g),g}}};return{modules:u,env:A}}return{blueprint:n(VG().root)}}import{existsSync as gTa,readFileSync as fTa,writeFileSync as bTa,rmSync as Kwt}from"fs";import{spawn as hTa}from"child_process";function Jwt(e){try{return fTa(e,"utf-8").trim()}catch{return null}}function Wwt(e){try{let{readFileSync:t,realpathSync:n}=nb("fs"),a=nb("path"),r=n(e),i=a.join(a.dirname(r),"..","package.json");return JSON.parse(t(i,"utf-8")).version??null}catch{return null}}function z2e(e={}){let t=VG(e.capsuleerRoot?{root:e.capsuleerRoot}:void 0),n=Dt.ref("idle"),a=Dt.ref(null),r=null;function i(){return Jwt(t.readyMarker)!==null}async function s(){let A=k2e();if(!gTa(A)&&A!=="capsuleer"){let d=`capsuleer binary not found at: ${A}. Try reinstalling Axon.`;throw Xo.push({kind:"error",title:"Capsuleer Setup Failed",message:d,source:"capsuleer",dismissable:!0}),Error(d)}Xo.push({kind:"info",title:"Setting Up Capsuleer",message:"Installing capsule environment...",source:"capsuleer",dismissable:!1}),await new Promise((d,g)=>{if(e.spawnInstall){e.spawnInstall().then(d).catch(g);return}let f=hTa(A,["env:install"],{stdio:["ignore","pipe","pipe"],env:{...process.env,NO_COLOR:"1"}}),b="";f.stdout?.on("data",(y)=>{let D=y.toString();for(let I of D.split(`
|
|
798
|
-
`)){let
|
|
799
|
-
`).filter((
|
|
800
|
-
`).trim();
|
|
797
|
+
`).filter(Boolean).map((T)=>JSON.parse(T))}catch(B){return console.error("[store] failed to load events:",E,B),[]}},updateMeta(D,I,x){El(t.value,"store not ready"),El(a,"paths not initialized");let k=this.list(D,I),E=k.findIndex((B)=>B.id===x.id);if(E>=0){k[E]=x;let Q=(I?a.agents.sessions.index:a.models.sessions.index)(D);u(Q,k)}}},g={themeId:"arc",selectedAgent:null,scrollback:1000,fontSize:14};return{ready:t,agents:p,sessions:d,settings:{get(){if(!A())return{...g};return c(a.settings,{...g})},set(D){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.settings,D)}},keybinds:{get(){if(!A())return{};return c(a.keybinds,{})},set(D){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.keybinds,D)}},credentials:{get(){if(!A())return{};return c(a.credentials,{})},set(D){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.credentials,D)},clear(){El(t.value,"store not ready"),El(a,"paths not initialized"),u(a.credentials,{})}},async init(D){a=GA(D,{root:e}),s(a.agents.root),s(a.models.root),t.value=!0},teardown(){t.value=!1,a=null}}}import UD from"fs";import ewt from"path";var vSa=300000,BSa=86400000;function twt(e){try{UD.mkdirSync(e,{recursive:!0})}catch(n){console.error("[cache] failed to create directory:",n)}let t=new Map;return{get(n,a,r){let i=r?.soft??vSa,s=r?.hard??BSa,c=ewt.join(e,`${n}.json`),u=Dt.ref(null),A=null,p=0;try{if(UD.existsSync(c)){let b=UD.readFileSync(c,"utf-8"),y=JSON.parse(b);A=y.data,p=y.timestamp,u.value=A}}catch(b){console.debug("[cache] failed to read:",n,b)}let d=Date.now(),g=p?d-p:1/0;if(!A||g>i){let b=`${n}:fetching`,y=t.get(b);if(!y)y=a().then((D)=>{try{let I={data:D,timestamp:d};UD.mkdirSync(e,{recursive:!0}),UD.writeFileSync(c,JSON.stringify(I),"utf-8")}catch(I){console.error("[cache] failed to write:",n,I)}return u.value=D,t.delete(b),D}).catch((D)=>{if(console.error("[cache] fetch failed:",n,D),A&&g>s)Xo.push({kind:"warning",title:"Stale Cache",message:`Using stale cache for ${n} (fetch failed)`,source:"cache",dismissable:!0}),u.value=A;t.delete(b)}),t.set(b,y);else y.then(()=>{try{if(UD.existsSync(c)){let D=UD.readFileSync(c,"utf-8"),I=JSON.parse(D);u.value=I.data}}catch(D){console.debug("[cache] failed to read after dedup:",n,D)}})}return u},invalidate(n){let a=ewt.join(e,`${n}.json`);try{if(UD.existsSync(a))UD.unlinkSync(a)}catch(r){console.error("[cache] failed to invalidate:",n,r)}}}}var Qae=typeof AXON_VERSION<"u"?AXON_VERSION:"0.0.0-dev",ESa="https://registry.npmjs.org/axon/latest",DSa="bun add -g axon@latest";function nwt(e){let t=Dt.ref(null),n=e??global.fetch,a=Qae==="0.0.0-dev";return{get currentVersion(){return Qae},get latestVersion(){return t.value},get hasUpdate(){if(a)return!1;if(!t.value)return!1;return t.value!==Qae},async check(){if(a)return;try{let r=await n(ESa);if(!r.ok)throw Error(`HTTP ${r.status}`);let s=(await r.json()).version;if(s&&s!==Qae)t.value=s,Xo.push({kind:"info",title:"Update Available",message:`Axon ${s} is available. Run: ${DSa}`,source:"updater",dismissable:!0,action:{label:"View Release",handler:async()=>{}}})}catch(r){console.debug("[updater] check failed:",r)}},reset(){t.value=null}}}function Pb(){return process.env.AXON_API_BASE??"https://axon.arclabs.it"}async function awt(e){let t=await fetch(`${Pb()}/api/auth/device/authorize`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e?{hint:e}:{})});if(!t.ok)throw Error(`authorize failed: ${t.status}`);return await t.json()}async function rwt(e,t){let n=new URLSearchParams({device_code:e}),a=await fetch(`${Pb()}/api/auth/device/poll?${n}`,{method:"GET",signal:t});if(!a.ok)throw Error(`poll failed: ${a.status}`);return await a.json()}async function iwt(e){let t=await fetch(`${Pb()}/api/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}});if(!t.ok){let r=await t.text().catch(()=>"");throw Error(`refresh failed: ${t.status} ${r}`)}let n=await t.text(),a;try{a=JSON.parse(n)}catch{throw Error(`refresh returned invalid JSON (status ${t.status}): ${n.slice(0,200)}`)}return{accessToken:a.access_token||a.accessToken,user:a.user}}async function eU(e){let t=await fetch(`${Pb()}/api/users/me`,{method:"GET",headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw Error(`getMe failed: ${t.status}`);return(await t.json()).user}import Ym from"fs";import Aj from"path";function Fae(e){try{let t=e.split(".");if(t.length!==3)return console.warn("[auth] token is not a JWT, using 24h default"),Date.now()+86400000;let n=t[1],a=n+"=".repeat((4-n.length%4)%4),r=Buffer.from(a,"base64").toString("utf-8"),s=JSON.parse(r).exp;if(!s)return console.warn("[auth] JWT has no exp claim, using 24h default"),Date.now()+86400000;return s*1000}catch(t){return console.warn("[auth] failed to parse JWT:",t),Date.now()+86400000}}function C2e(e,t){try{let n=t.auth;if(!Ym.existsSync(n))return null;let a=Ym.readFileSync(n,"utf-8");return JSON.parse(a)}catch(n){return console.debug("[auth] failed to read auth record:",n),null}}function tU(e,t,n){try{let a=n.auth,r=Aj.dirname(a);Ym.mkdirSync(r,{recursive:!0}),Ym.writeFileSync(a,JSON.stringify(t,null,2),"utf-8")}catch(a){throw console.error("[auth] failed to write auth record:",a),a}}function owt(e){try{let t=e.activeProfile;if(!Ym.existsSync(t))return null;let n=Ym.readFileSync(t,"utf-8");return JSON.parse(n).userId||null}catch(t){return console.debug("[auth] failed to read active profile:",t),null}}function x2e(e,t){try{let n=t.activeProfile,a=Aj.dirname(n);Ym.mkdirSync(a,{recursive:!0}),Ym.writeFileSync(n,JSON.stringify({userId:e},null,2),"utf-8")}catch(n){throw console.error("[auth] failed to write active profile:",n),n}}function Sae(e){try{let t=Aj.join(e.root,"profiles");if(!Ym.existsSync(t))return[];let n=Ym.readdirSync(t,{withFileTypes:!0}),a=[];for(let r of n){if(!r.isDirectory())continue;let i=Aj.join(t,r.name,"auth.json");if(!Ym.existsSync(i))continue;try{let s=JSON.parse(Ym.readFileSync(i,"utf-8"));a.push({id:r.name,email:s.user.email})}catch{}}return a}catch(t){return console.error("[auth] failed to list profiles:",t),[]}}function swt(e){try{let t=e.activeProfile;if(Ym.existsSync(t))Ym.unlinkSync(t)}catch(t){console.error("[auth] failed to delete active profile:",t)}}function cwt(e,t){try{let n=Aj.join(t.root,"profiles"),a=Aj.join(n,e);if(Ym.existsSync(a))Ym.rmSync(a,{recursive:!0})}catch(n){throw console.error("[auth] failed to delete profile:",n),n}}var FSa=300000;function uwt(){let e=null,t=2147483647;function n(a){let r=Date.now(),i=a-FSa;if(i<=r)return 0;return Math.min(i-r,t)}return{start(a,r,i){this.stop();let s=a.expiresAt?.value;if(!s){console.warn("[auth] no expiresAt, skipping refresh timer");return}let c=n(s);e=setTimeout(()=>{(async()=>{try{let u=a.accessToken?.value;if(!u){console.warn("[auth] no token for refresh"),a.user.value=null;return}let A=await iwt(u);a.accessToken.value=A.accessToken;let p=Fae(A.accessToken);a.expiresAt.value=p;let d={accessToken:A.accessToken,expiresAt:p,user:A.user};tU(i,d,r),this.start(a,r,i)}catch(u){console.error("[auth] token refresh failed:",u),a.user.value=null,a.accessToken.value=null,Xo.push({kind:"error",title:"Session expired",message:"Your session has expired. Please log in again.",source:"auth",dismissable:!0})}})()},c)},stop(){if(e)clearTimeout(e),e=null}}}function es(e,t,n,a){return{code:e,message:t,service:n,recoverable:a?.recoverable??!0,timestamp:Date.now()}}var lwt=!0,Tae={voice:{visualizer:{minHz:120,maxHz:4000,bucketCount:96,noiseGate:0.05,sharpen:0.7,peakHold:0,rollingMaxDecay:0.7}},devAgents:[{name:"Helios (dev)",description:"Local dev agent",model:{id:"helios-dev",endpoint:"ws://localhost:3010",pathway:"api/chat"},userOwned:!1,devOnly:!0}]};function Mwt(e){let{paths:t,emitError:n,emit:a}=e,r=t;function i(E){return r(E)}function s(){return r()}let c=Dt.ref(null),u=Dt.ref(null),A=Dt.ref("idle"),p=Dt.ref(null),d=Dt.ref(null),g=uwt(),f=null,b=Dt.ref(null),y=Dt.ref([]);function D(E){if(n)n(E)}function I(E){if(!E){c.value=null,u.value=null,d.value=null;return}if(E.expiresAt<=Date.now()){c.value=null,u.value=null,d.value=null;return}c.value=E.user,u.value=E.accessToken,d.value=E.expiresAt}async function x(E,B=5){let Q=B*1000;while(A.value==="polling"){try{let T=await rwt(E,f?.signal);if(T.status==="approved"&&T.access_token&&T.user){A.value="approved",Xo.clear(),c.value=T.user,u.value=T.access_token;let N=Fae(T.access_token);d.value=N;let j={accessToken:T.access_token,expiresAt:N,user:T.user},O=i(T.user.id);tU(T.user.id,j,O);let $=s();x2e(T.user.id,$),y.value=Sae($),b.value=T.user.id,g.start({user:c,accessToken:u,expiresAt:d},O,T.user.id),f=null;return}}catch(T){if(T instanceof Error&&T.message.includes("abort")){f=null,A.value="idle";return}console.error("[auth] poll failed:",T),A.value="error";let N=es("DEVICE_POLL_FAILED","Device authorization polling failed","auth",{recoverable:!0});D(N);return}await new Promise((T)=>setTimeout(T,Q))}}return{user:c,accessToken:u,status:A,userCode:p,expiresAt:d,async init(){A.value="idle";let E=s();y.value=Sae(E);let B=owt(E);if(!B){c.value=null;return}let Q=i(B),T=C2e(B,Q);if(b.value=B,!T)return;if(T.expiresAt<=Date.now()){if(lwt)c.value=T.user,u.value=T.accessToken;try{let j=await eU(T.accessToken),O={accessToken:T.accessToken,expiresAt:Date.now()+86400000,user:j};tU(B,O,Q),I(O),g.start({user:c,accessToken:u,expiresAt:d},Q,B)}catch(j){console.error("[auth] session expired and server rejected token:",j),c.value=null,u.value=null,Xo.push({kind:"error",title:"Session expired",message:"Your session has expired. Please log in again.",source:"auth",dismissable:!0})}return}I(T),eU(T.accessToken).then((j)=>{c.value=j}).catch((j)=>{console.debug("[auth] background user refresh failed (OK, using stored):",j)}),g.start({user:c,accessToken:u,expiresAt:d},Q,B)},async startLogin(E){A.value="authorizing",f=new AbortController;try{let B=await awt(E);if(p.value=B.user_code,A.value="polling",B.verification_uri_complete){let Q=(await Promise.resolve().then(() => (Pwt(),jwt))).default;await Q(B.verification_uri_complete)}if(await x(B.device_code,B.interval),c.value)a?.({type:"axon:auth:login",userId:c.value.id})}catch(B){console.error("[auth] authorize failed:",B),A.value="error";let Q=es("DEVICE_AUTHORIZE_FAILED","Failed to start login process","auth",{recoverable:!0});D(Q)}},async logout(){let E=c.value?.id??null;g.stop(),f?.abort(),f=null,c.value=null,u.value=null,p.value=null,d.value=null,b.value=null,A.value="idle",swt(s()),a?.({type:"axon:auth:logout",userId:E})},async refreshUser(){if(!u.value)return;try{c.value=await eU(u.value)}catch{}},profiles:{list:y,active:Dt.computed(()=>b.value),async switch(E){a?.({type:"axon:auth:profile:switch",toUserId:E}),g.stop(),c.value=null,u.value=null,d.value=null;let B=i(E),Q=C2e(E,B);if(I(Q),b.value=E,Q){x2e(E,s());try{let T=await eU(Q.accessToken);c.value=T}catch(T){console.debug("[auth] background user refresh on switch failed:",T)}if(d.value)g.start({user:c,accessToken:u,expiresAt:d},B,E)}},async remove(E){if(E===b.value)throw es("CANNOT_REMOVE_ACTIVE_PROFILE","Cannot remove the active profile. Switch to another profile first.","auth",{recoverable:!0,actionable:!0});let B=s();cwt(E,B),y.value=Sae(B)}}}}import b4 from"fs";import qwt from"path";var iU=[{id:"arc",name:"Arc",shiki:"arcnight",ui:{primary:"#00B4D8",background:"#1e1e1e",textLight:"#e0e0e0",textDark:"#808080"}},{id:"dracula",name:"Dracula",shiki:"dracula",ui:{primary:"#BD93F9",background:"#282a36",textLight:"#f8f8f2",textDark:"#6272a4"}},{id:"nord",name:"Nord",shiki:"nord",ui:{primary:"#88C0D0",background:"#2e3440",textLight:"#eceff4",textDark:"#4c566a"}},{id:"monokai",name:"Monokai",shiki:"monokai",ui:{primary:"#A6E22E",background:"#272822",textLight:"#f8f8f2",textDark:"#75715e"}},{id:"github-light",name:"GitHub Light",shiki:"github-light",ui:{primary:"#0969DA",background:"#ffffff",textLight:"#24292f",textDark:"#57606a"}}],dj={themeId:"arc",selectedAgent:null,scrollback:1000,fontSize:14};function $wt(e){let t=e?.paths??GA,n=e?.emit,a=Dt.ref({...dj}),r=new Map,i=Dt.ref([]),s=null,c=dj.themeId;iU.forEach((b)=>{r.set(b.id,b)}),i.value=Array.from(r.values());function u(){i.value=Array.from(r.values())}async function A(b){try{let y=t(b);if(!b4.existsSync(y.settings))return{...dj};let D=b4.readFileSync(y.settings,"utf-8"),I=JSON.parse(D);return{...dj,...I}}catch(y){return console.error("[prefs] failed to read settings:",y),{...dj}}}function p(b,y){try{if(!b){console.warn("[prefs] writeSettings called without userId");return}let D=t(b),I=qwt.dirname(D.settings);b4.mkdirSync(I,{recursive:!0}),b4.writeFileSync(D.settings,JSON.stringify(y,null,2),"utf-8")}catch(D){throw console.error("[prefs] failed to write settings:",D),D}}async function d(b){try{let y=t(b);if(!b4.existsSync(y.themes))return[];let D=b4.readFileSync(y.themes,"utf-8");return JSON.parse(D)}catch(y){return console.error("[prefs] failed to read themes:",y),[]}}function g(b){try{let y=t(b),D=qwt.dirname(y.themes),I=Array.from(r.values()).filter((x)=>!iU.some((k)=>k.id===x.id));b4.mkdirSync(D,{recursive:!0}),b4.writeFileSync(y.themes,JSON.stringify(I,null,2),"utf-8")}catch(y){throw console.error("[prefs] failed to write themes:",y),y}}let f={theme:Dt.computed(()=>{let b=a.value.themeId,y=r.get(b);if(y)return y;return r.get("arc")||iU[0]}),settings:Dt.computed(()=>({...a.value})),async set(b,y){if(a.value[b]=y,s)p(s,a.value);n?.({type:"axon:prefs:set",key:b,value:y})},async setTheme(b){if(!r.get(b)){console.warn("[prefs] theme not found:",b);return}await f.set("themeId",b),c=b,n?.({type:"axon:prefs:theme",themeId:b})},previewTheme(b){if(!r.has(b))return;a.value={...a.value,themeId:b}},cancelThemePreview(){a.value={...a.value,themeId:c}},themes:{list:Dt.readonly(i),get(b){return r.get(b)},register(b){r.set(b.id,b),u()},async save(b){if(f.themes.register(b),s)g(s)},async remove(b){let y=iU.some((D)=>D.id===b);if(El(!y,`Cannot remove built-in theme: ${b}`),r.delete(b),u(),s)g(s)}},async init(b){s=b;let y=await A(b);a.value=y,c=y.themeId,(await d(b)).forEach((I)=>{f.themes.register(I)})},teardown(){s=null,a.value={...dj},r.clear(),iU.forEach((b)=>{r.set(b.id,b)}),u()}};return f}var Rwt="agent-registry";function G2e(e){let t=Dt.ref([]),n=Dt.ref(!1),a=Dt.ref(null);async function r(){let c=await fetch(`${Pb()}/api/agents`);if(!c.ok)throw Error(`Failed to fetch agent registry: ${c.statusText}`);return await c.json()}async function i(){try{n.value=!0,a.value=null;let c=e.get(Rwt,r);if(c.value!==null)t.value=c.value;await new Promise((u)=>{let A=setInterval(()=>{if(c.value!==null)t.value=c.value,clearInterval(A),u()},10);setTimeout(()=>{clearInterval(A),u()},5000)})}catch(c){let u=c instanceof Error?c.message:"Failed to load agent registry";a.value=u,console.error("[agent-registry] failed to load:",c),Xo.push({kind:"error",title:"Registry Load Failed",message:"Failed to load agent registry.",source:"registries",dismissable:!0})}finally{n.value=!1}}async function s(){try{e.invalidate(Rwt),await i()}catch(c){console.error("[agent-registry] failed to refresh:",c)}}return{list:Dt.readonly(t),isRefreshing:Dt.computed(()=>n.value),loadError:Dt.computed(()=>a.value),load:i,refresh:s}}var Owt="module-registry";function U2e(e){let t=Dt.ref([]),n=Dt.ref(""),a=Dt.ref(!1),r=Dt.computed(()=>{if(!n.value)return t.value;let p=n.value.toLowerCase();return t.value.filter((d)=>d.id.toLowerCase().includes(p)||d.description.toLowerCase().includes(p)||d.tags.some((g)=>g.toLowerCase().includes(p)))});async function i(){let p=await fetch(`${Pb()}/api/capsuleer/modules`);if(!p.ok)throw Error(`Failed to fetch module registry: ${p.statusText}`);return await p.json()}async function s(){try{a.value=!0;let p=e.get(Owt,i);if(p.value!==null)t.value=p.value;await new Promise((d)=>{let g=setInterval(()=>{if(p.value!==null)t.value=p.value,clearInterval(g),d()},10);setTimeout(()=>{clearInterval(g),d()},5000)})}catch(p){console.error("[module-registry] failed to load:",p),Xo.push({kind:"error",title:"Module Registry Load Failed",message:"Failed to load module registry.",source:"registries",dismissable:!0})}finally{a.value=!1}}async function c(){try{e.invalidate(Owt),await s()}catch(p){console.error("[module-registry] failed to refresh:",p)}}function u(p){n.value=p??""}async function A(p){try{let d=await fetch(`${Pb()}/api/capsuleer/modules/${p}`);if(!d.ok){if(d.status===404)return null;throw Error(`Failed to fetch module: ${d.statusText}`)}return await d.json()}catch(d){return console.error("[module-registry] failed to get module:",d),null}}return{list:Dt.readonly(r),isRefreshing:Dt.computed(()=>a.value),load:s,refresh:c,search:u,get:A}}var Gwt="model-registry";function Uwt(e){let t=Dt.ref([]),n=Dt.ref(!1),a=Dt.ref(null);async function r(){let c=await fetch(`${Pb()}/api/models`);if(!c.ok)throw Error(`Failed to fetch model registry: ${c.statusText}`);return await c.json()}async function i(){try{n.value=!0,a.value=null;let c=e.get(Gwt,r);if(c.value!==null)t.value=c.value;await new Promise((u)=>{let A=setInterval(()=>{if(c.value!==null)t.value=c.value,clearInterval(A),u()},10);setTimeout(()=>{clearInterval(A),u()},5000)})}catch(c){let u=c instanceof Error?c.message:"Failed to load model registry";a.value=u,console.error("[model-registry] failed to load:",c)}finally{n.value=!1}}async function s(){try{e.invalidate(Gwt),await i()}catch(c){console.error("[model-registry] failed to refresh:",c)}}return{list:Dt.readonly(t),isRefreshing:Dt.computed(()=>n.value),loadError:Dt.computed(()=>a.value),load:i,refresh:s}}import h4 from"fs";import zwt from"path";function Hwt(e){let t=e?.paths??VG;function n(a){let r=t({root:a});function i(){try{if(!h4.existsSync(r.manifest))return[];let p=h4.readFileSync(r.manifest,"utf-8");return JSON.parse(p)}catch(p){return console.error("[capsule] failed to load manifest:",p),[]}}function s(p){try{h4.mkdirSync(zwt.dirname(r.manifest),{recursive:!0}),h4.writeFileSync(r.manifest,JSON.stringify(p,null,2),"utf-8")}catch(d){throw console.error("[capsule] failed to save manifest:",d),d}}async function c(p,d){let f=await Bun.spawn(["bun","x","capsuleer",p,...d],{stdout:"inherit",stderr:"inherit"}).exited;if(f!==0)throw Error(`capsuleer exited with code ${f}`)}let u={list(){return i()},async install(p){try{Xo.push({kind:"info",title:"Installing Module",message:`Installing ${p}...`,source:"capsule",dismissable:!0}),await c("install",[p]),Xo.push({kind:"success",title:"Module Installed",message:`${p} installed successfully.`,source:"capsule",dismissable:!0})}catch(d){console.error("[capsule] install failed:",d);let g=es("CAPSULE_INSTALL_FAILED",`Failed to install module ${p}: ${d instanceof Error?d.message:"unknown error"}`,"capsule",{recoverable:!0});throw Xo.push({kind:"error",title:"Install Failed",message:`Failed to install ${p}.`,source:"capsule",dismissable:!0}),g}},async remove(p){try{Xo.push({kind:"info",title:"Removing Module",message:`Removing ${p}...`,source:"capsule",dismissable:!0}),await c("remove",[p]),Xo.push({kind:"success",title:"Module Removed",message:`${p} removed successfully.`,source:"capsule",dismissable:!0})}catch(d){console.error("[capsule] remove failed:",d);let g=es("CAPSULE_REMOVE_FAILED",`Failed to remove module ${p}: ${d instanceof Error?d.message:"unknown error"}`,"capsule",{recoverable:!0});throw Xo.push({kind:"error",title:"Remove Failed",message:`Failed to remove ${p}.`,source:"capsule",dismissable:!0}),g}}},A={get(){try{if(!h4.existsSync(r.env))return{};let p=h4.readFileSync(r.env,"utf-8");return JSON.parse(p)}catch(p){return console.error("[capsule] failed to read env:",p),{}}},async set(p,d){try{let g=A.get();g[p]=d,h4.mkdirSync(zwt.dirname(r.env),{recursive:!0}),h4.writeFileSync(r.env,JSON.stringify(g,null,2),"utf-8")}catch(g){throw console.error("[capsule] failed to set env:",g),g}}};return{modules:u,env:A}}return{blueprint:n(VG().root)}}import{existsSync as gTa,readFileSync as fTa,writeFileSync as bTa,rmSync as Kwt}from"fs";import{spawn as hTa}from"child_process";function Jwt(e){try{return fTa(e,"utf-8").trim()}catch{return null}}function Wwt(e){try{let{readFileSync:t,realpathSync:n}=nb("fs"),a=nb("path"),r=n(e),i=a.join(a.dirname(r),"..","package.json");return JSON.parse(t(i,"utf-8")).version??null}catch{return null}}function z2e(e={}){let t=VG(e.capsuleerRoot?{root:e.capsuleerRoot}:void 0),n=Dt.ref("idle"),a=Dt.ref(null),r=null;function i(){return Jwt(t.readyMarker)!==null}async function s(){let A=k2e();if(!gTa(A)&&A!=="capsuleer"){let p=`capsuleer binary not found at: ${A}. Try reinstalling Axon.`;throw Xo.push({kind:"error",title:"Capsuleer Setup Failed",message:p,source:"capsuleer",dismissable:!0}),Error(p)}Xo.push({kind:"info",title:"Setting Up Capsuleer",message:"Installing capsule environment...",source:"capsuleer",dismissable:!1}),await new Promise((p,d)=>{if(e.spawnInstall){e.spawnInstall().then(p).catch(d);return}let g=hTa(A,["env:install"],{stdio:["ignore","pipe","pipe"],env:{...process.env,NO_COLOR:"1"}}),f="";g.stdout?.on("data",(b)=>{let y=b.toString();for(let D of y.split(`
|
|
798
|
+
`)){let I=D.trim();if(I)console.log("[capsuleer]",I)}}),g.stderr?.on("data",(b)=>{f+=b.toString()}),g.on("close",(b)=>{if(b===0)p();else{let y=/^(Resolving|Resolved,|Saved lockfile|[+\-]\s+\S+@|\d+ packages?)/,D=f.split(`
|
|
799
|
+
`).filter((I)=>I.trim()&&!y.test(I.trim())).join(`
|
|
800
|
+
`).trim();d(Error(D||`Installation failed (exit code ${b}). Check that bun is installed and you have network access.`))}}),g.on("error",(b)=>{let D=b.message.includes("ENOENT")?`capsuleer binary not found${A!=="capsuleer"?` at: ${A}`:" on PATH"}. Try reinstalling Axon.`:b.message;d(Error(D))})});try{let p=Wwt(A);bTa(t.readyMarker,p??"unknown","utf-8")}catch(p){console.warn("[capsuleer] Could not write .ready marker:",p instanceof Error?p.message:p)}}async function c(){if(i()){let A=Jwt(t.readyMarker),p=Wwt(k2e());if(p&&A!==p){console.log(`[capsuleer] CLI upgraded (${A} \u2192 ${p}), reinstalling environment...`);try{Kwt(t.readyMarker)}catch{}}else{n.value="ready";return}}if(n.value==="error")throw Error(a.value??"Capsuleer installation failed. Call reset() to retry.");if(n.value==="installing"&&r)return r;n.value="installing",a.value=null,r=s();try{await r,n.value="ready",Xo.push({kind:"info",title:"Capsuleer Ready",message:"Capsule environment installed successfully.",source:"capsuleer",dismissable:!0})}catch(A){try{Kwt(t.environment,{recursive:!0,force:!0})}catch{}let p=A instanceof Error?A.message:"Unknown error";throw n.value="error",a.value=p,Xo.push({kind:"error",title:"Capsuleer Setup Failed",message:p,source:"capsuleer",dismissable:!0}),A}finally{r=null}}function u(){if(n.value!=="error")return;n.value="idle",a.value=null}return{status:n,error:a,ensure:c,isInstalled:i,reset:u}}import _f from"fs";import eDe from"path";var J2e=(e,t)=>t.some((n)=>e instanceof n),Zwt,Ywt;function _Ta(){return Zwt||(Zwt=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function yTa(){return Ywt||(Ywt=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}var W2e=new WeakMap,H2e=new WeakMap,qae=new WeakMap;function wTa(e){let t=new Promise((n,a)=>{let r=()=>{e.removeEventListener("success",i),e.removeEventListener("error",s)},i=()=>{n(Mae(e.result)),r()},s=()=>{a(e.error),r()};e.addEventListener("success",i),e.addEventListener("error",s)});return qae.set(t,e),t}function kTa(e){if(W2e.has(e))return;let t=new Promise((n,a)=>{let r=()=>{e.removeEventListener("complete",i),e.removeEventListener("error",s),e.removeEventListener("abort",s)},i=()=>{n(),r()},s=()=>{a(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",i),e.addEventListener("error",s),e.addEventListener("abort",s)});W2e.set(e,t)}var Z2e={get(e,t,n){if(e instanceof IDBTransaction){if(t==="done")return W2e.get(e);if(t==="store")return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return Mae(e[t])},set(e,t,n){return e[t]=n,!0},has(e,t){if(e instanceof IDBTransaction&&(t==="done"||t==="store"))return!0;return t in e}};function tkt(e){Z2e=e(Z2e)}function CTa(e){if(yTa().includes(e))return function(...t){return e.apply(Y2e(this),t),Mae(this.request)};return function(...t){return Mae(e.apply(Y2e(this),t))}}function xTa(e){if(typeof e==="function")return CTa(e);if(e instanceof IDBTransaction)kTa(e);if(J2e(e,_Ta()))return new Proxy(e,Z2e);return e}function Mae(e){if(e instanceof IDBRequest)return wTa(e);if(H2e.has(e))return H2e.get(e);let t=xTa(e);if(t!==e)H2e.set(e,t),qae.set(t,e);return t}var Y2e=(e)=>qae.get(e);var vTa=["get","getKey","getAll","getAllKeys","count"],BTa=["put","add","delete","clear"],K2e=new Map;function Vwt(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&typeof t==="string"))return;if(K2e.get(t))return K2e.get(t);let n=t.replace(/FromIndex$/,""),a=t!==n,r=BTa.includes(n);if(!(n in(a?IDBIndex:IDBObjectStore).prototype)||!(r||vTa.includes(n)))return;let i=async function(s,...c){let u=this.transaction(s,r?"readwrite":"readonly"),A=u.store;if(a)A=A.index(c.shift());return(await Promise.all([A[n](...c),r&&u.done]))[0]};return K2e.set(t,i),i}tkt((e)=>({...e,get:(t,n,a)=>Vwt(t,n)||e.get(t,n,a),has:(t,n)=>!!Vwt(t,n)||e.has(t,n)}));var ETa=["continue","continuePrimaryKey","advance"],Xwt={},V2e=new WeakMap,nkt=new WeakMap,DTa={get(e,t){if(!ETa.includes(t))return e[t];let n=Xwt[t];if(!n)n=Xwt[t]=function(...a){V2e.set(this,nkt.get(this)[t](...a))};return n}};async function*ITa(...e){let t=this;if(!(t instanceof IDBCursor))t=await t.openCursor(...e);if(!t)return;t=t;let n=new Proxy(t,DTa);nkt.set(n,t),qae.set(n,Y2e(t));while(t)yield n,t=await(V2e.get(n)||t.continue()),V2e.delete(n)}function ekt(e,t){return t===Symbol.asyncIterator&&J2e(e,[IDBIndex,IDBObjectStore,IDBCursor])||t==="iterate"&&J2e(e,[IDBIndex,IDBObjectStore])}tkt((e)=>({...e,get(t,n,a){if(ekt(t,n))return ITa;return e.get(t,n,a)},has(t,n){return ekt(t,n)||e.has(t,n)}}));import{webcrypto as rkt}from"crypto";var akt="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var QTa=128,_4,y4;function ikt(e){if(!_4||_4.length<e)_4=Buffer.allocUnsafe(e*QTa),rkt.getRandomValues(_4),y4=0;else if(y4+e>_4.length)rkt.getRandomValues(_4),y4=0;y4+=e}function FTa(e){return ikt(e|=0),_4.subarray(y4-e,y4)}function STa(e,t,n){let a=(2<<31-Math.clz32(e.length-1|1))-1,r=Math.ceil(1.6*a*t/e.length);return(i=t)=>{if(!i)return"";let s="";while(!0){let c=n(r),u=r;while(u--)if(s+=e[c[u]&a]||"",s.length>=i)return s}}}function okt(e,t=21){return STa(e,t,FTa)}function skt(e=21){ikt(e|=0);let t="";for(let n=y4-e;n<y4;n++)t+=akt[_4[n]&63];return t}function X2e(e="nano",t,n){switch(e){case"nano":return skt(typeof t==="number"?t:void 0);case"custom":{if(typeof t!=="string"||typeof n!=="number")throw Error("[$id]: Custom ID requires (alphabet: string, length: number)");return okt(t,n)()}default:throw Error(`[$id]: Unsupported type: ${e}`)}}function tDe(e,t,n,a,r="New Session"){let i=Date.now(),s={id:X2e(),agentName:e,userOwned:t,title:r,createdAt:i,updatedAt:i,messageCount:0};return NTa(s,n,a),s}function nDe(e,t,n,a,r){if(!a)return[];try{let i=r(a),c=(n?i.agents.sessions.session:i.models.sessions.session)(t,e);if(!_f.existsSync(c))return[];let A=_f.readFileSync(c,"utf-8").trim().split(`
|
|
801
801
|
`).filter(Boolean),p=[];for(let d of A)try{let g=JSON.parse(d);if(g?.time==null||typeof g.time.ms!=="number"){console.error("[sessions] skipping malformed entry (missing time.ms):",g?.type??d.slice(0,80));continue}p.push(g)}catch{console.error("[sessions] skipping unparseable line:",d.slice(0,80))}return p}catch(i){return console.error("[sessions] failed to load events:",i),[]}}function oU(e,t,n,a,r,i){if(!a)return;try{let s=r(a),u=(n?s.agents.sessions.session:s.models.sessions.session)(t,e),A=eDe.dirname(u);if(!_f.existsSync(A))_f.mkdirSync(A,{recursive:!0});_f.appendFileSync(u,JSON.stringify(i)+`
|
|
802
802
|
`,"utf-8")}catch(s){throw console.error("[sessions] failed to append event:",s),s}}function sU(e,t,n,a){if(!n)return[];try{let r=a(n),s=(t?r.agents.sessions.index:r.models.sessions.index)(e);if(!_f.existsSync(s))return[];let c=_f.readFileSync(s,"utf-8");return JSON.parse(c)}catch(r){return console.error("[sessions] failed to list sessions:",r),[]}}function ckt(e,t,n,a,r,i,s){let c=nDe(e,t,n,a,r),u=c.length;if(i){if(u=c.findIndex((p)=>p.id===i)+1,u===0)u=c.length}let A=tDe(t,n,a,r,s||"Branched Session");if(a!==null){let p=r(a),d=n?p.agents.sessions.session:p.models.sessions.session,g=d(t,e),f=d(t,A.id);if(u===c.length&&_f.existsSync(g))_f.mkdirSync(eDe.dirname(f),{recursive:!0}),_f.copyFileSync(g,f);else for(let b=0;b<u;b++)oU(A.id,t,n,a,r,c[b]);TTa(A.id,t,n,a,r,{...A,messageCount:u})}return A}function ukt(e,t,n,a,r){if(!a)return;try{let s=sU(t,n,a,r).filter((p)=>p.id!==e);aDe(s,t,n,a,r);let c=r(a),A=(n?c.agents.sessions.session:c.models.sessions.session)(t,e);if(_f.existsSync(A))_f.unlinkSync(A)}catch(i){throw console.error("[sessions] failed to remove session:",i),i}}function TTa(e,t,n,a,r,i){if(!a)return;try{let s=sU(t,n,a,r),c=s.findIndex((u)=>u.id===e);if(c>=0)s[c]=i,aDe(s,t,n,a,r)}catch(s){throw console.error("[sessions] failed to update session meta:",s),s}}function aDe(e,t,n,a,r){if(!a)return;try{let i=r(a),c=(n?i.agents.sessions.index:i.models.sessions.index)(t),u=eDe.dirname(c);if(!_f.existsSync(u))_f.mkdirSync(u,{recursive:!0});_f.writeFileSync(c,JSON.stringify(e,null,2),"utf-8")}catch(i){throw console.error("[sessions] failed to save index:",i),i}}function NTa(e,t,n){if(!t)return;let a=sU(e.agentName,e.userOwned,t,n);if(!a.some((i)=>i.id===e.id))a.push(e),aDe(a,e.agentName,e.userOwned,t,n)}function lkt(){let e=new Map;return{register(t,n){return e.set(t,n),()=>e.delete(t)},dispatch(t){let a=t.payload?.type;if(!a){console.warn("[ws2/dispatcher] envelope missing payload.type, dropped");return}let r=e.get(a);if(!r){console.warn(`[ws2/dispatcher] unknown type "${a}", dropped`);return}r(t.payload)}}}var Akt="2";function O0(e,t,n,a){return{version:"2",timestamp:Date.now(),kind:e,origin:t,payload:n,...a?.correlationId!==void 0&&{correlationId:a.correlationId},...a?.parentId!==void 0&&{parentId:a.parentId}}}function pkt(e){let t=new WebSocket(e),n=null,a=null,r=null,i=[];return t.onopen=()=>{for(let s of i)t.send(s);i.length=0},t.onmessage=(s)=>{try{let c=JSON.parse(s.data);if(c.version!==Akt){t.close(1008,"unsupported version");return}n?.(c)}catch(c){r?.(c)}},t.onclose=(s)=>{a?.(s.code,s.reason)},t.onerror=(s)=>{r?.(s)},{onMessage(s){n=s},onClose(s){a=s},onError(s){r=s},send(s){let c=JSON.stringify(s);if(t.readyState===WebSocket.OPEN)t.send(c);else if(t.readyState===WebSocket.CONNECTING)i.push(c)},close(){if(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)t.close(1000,"client disconnect")}}}class _A extends Error{code;constructor(e,t){super(t??e);this.code=e;this.name="CognosError"}}var jTa=5000;function dkt(e){let t=null,n=null;return{perform(a){return new Promise((r,i)=>{function s(A,p){clearTimeout(c),t=null,n=null,A(p)}let c=setTimeout(()=>{s(i,new _A("HANDSHAKE_TIMEOUT","handshake timed out after 5 seconds"))},jTa);t=(A)=>s(r,A),n=(A)=>s(i,A);let u={type:"handshake",...a.auth!==void 0&&{auth:a.auth},...a.context!==void 0&&{context:a.context},...a.capsule!==void 0&&{capsule:a.capsule}};e.send(O0("control","client",u))})},onOk(a){t?.({sessionId:a.sessionId})},onError(a){let i={unauthorized:"UNAUTHORIZED",context_too_large:"CONTEXT_TOO_LARGE",server_error:"SERVER_ERROR",connection_limit:"CONNECTION_LIMIT"}[a.code]??a.code;n?.(new _A(i,a.message))}}}function mkt(){let e=null;async function*t(a,r){try{while(!0){while(a.queue.length>0)yield a.queue.shift();if(a.terminalError)throw a.terminalError;if(a.terminalDone)break;let i=await new Promise((s)=>{if(a.queue.length>0){s({kind:"chunk",value:a.queue.shift()});return}if(a.terminalError){s({kind:"error",error:a.terminalError});return}if(a.terminalDone){s({kind:"done"});return}a.wake=s});if(i.kind==="done")break;if(i.kind==="error")throw i.error;yield i.value}}finally{if(e===a)e=null}}function n(a,r){if(a.wake){let i=a.wake;a.wake=null,i(r)}}return{get isActive(){return e!==null},invoke(a,r,i,s){if(e!==null)throw new _A("PATHWAY_BUSY","a pathway is already active");let c=crypto.randomUUID(),u={requestId:c,wake:null,queue:[],terminal:!1,terminalError:null,terminalDone:!1};e=u;let A={type:"pathway:invoke",requestId:c,pathway:a,body:r,...s?.correlationId!==void 0&&{correlationId:s.correlationId},...s?.parentId!==void 0&&{parentId:s.parentId}};return i(O0("pathway","client",A,s)),{stream:t(u,i),abort:()=>{if(u.terminal)return;if(u.terminal=!0,u.terminalDone=!0,i(O0("pathway","client",{type:"pathway:cancel",requestId:c})),e===u)e=null;n(u,{kind:"done"})}}},onChunk(a){if(!e||e.requestId!==a.requestId)return;let r=e;if(r.wake)n(r,{kind:"chunk",value:a.data});else r.queue.push(a.data)},onEnd(a){if(!e||e.requestId!==a.requestId)return;let r=e;r.terminal=!0,r.terminalDone=!0,e=null,n(r,{kind:"done"})},onError(a){if(!e||e.requestId!==a.requestId)return;let r=e;r.terminal=!0,r.terminalError=new _A(a.code,a.message),e=null,n(r,{kind:"error",error:r.terminalError})},cancelActive(){if(!e)return;let a=e;a.terminal=!0,a.terminalError=new _A("CONNECTION_LOST","connection was lost"),e=null,n(a,{kind:"error",error:a.terminalError})}}}var PTa=1e4;function gkt(e=PTa){let t=new Map;return{invoke(n,a,r,i){return new Promise((s,c)=>{let u=crypto.randomUUID(),A=setTimeout(()=>{t.delete(u),c(new _A("REQUEST_TIMEOUT","request timed out"))},e);t.set(u,{resolve:s,reject:c,timer:A});let p={type:"request:invoke",requestId:u,name:n,body:a,...i?.correlationId!==void 0&&{correlationId:i.correlationId},...i?.parentId!==void 0&&{parentId:i.parentId}};r(O0("request","client",p,i))})},onResponse(n){let a=t.get(n.requestId);if(!a)return;t.delete(n.requestId),clearTimeout(a.timer),a.resolve(n.result)},onError(n){let a=t.get(n.requestId);if(!a)return;t.delete(n.requestId),clearTimeout(a.timer),a.reject(new _A(n.code,n.message))},rejectAll(n){for(let[,a]of t)clearTimeout(a.timer),a.reject(n);t.clear()}}}function fkt(e){let t=null,n=null;function a(r){n?.(r)}return{attach(r,i){t=r,n=i},respond(r,i){a(O0("capsule","client",{type:"capsule:escalation:response",escalationId:r,allow:i}))},onEscalation(r){e?.(r)},onInvoke(r){if(!t){let g={type:"capsule:error",invocationId:r.invocationId,ok:!1,code:"capsule_not_attached",message:"no capsule is attached"};a(O0("capsule","client",g));return}let i=t,{invocationId:s,method:c,args:u}=r,A=(g)=>{a(O0("capsule","client",{type:"capsule:result",invocationId:s,ok:!0,result:g}))},p=(g,f)=>{a(O0("capsule","client",{type:"capsule:error",invocationId:s,ok:!1,code:g,message:f}))},d=(g)=>{a(O0("capsule","client",{type:"capsule:event",invocationId:s,event:g}))};if(c==="run"){let[g,f]=u,b=i.onEvent(d);i.run(g,f).then((y)=>{b(),A(y)}).catch((y)=>{b(),p("capsule_exec_error",y instanceof Error?y.message:String(y))})}else if(c==="query"){let[g,f]=u,b=i.onEvent(d);i.query(g,f).then((y)=>{b(),A(y)}).catch((y)=>{b(),p("capsule_exec_error",y instanceof Error?y.message:String(y))})}else if(c==="proc:spawn"){let[g,f]=u;try{let b=i.proc.spawn(g,f);A(b)}catch(b){p("capsule_exec_error",b instanceof Error?b.message:String(b))}}else if(c==="proc:kill"){let[g]=u;try{i.proc.kill(g),A(null)}catch(f){p("capsule_exec_error",f instanceof Error?f.message:String(f))}}else if(c==="proc:input"){let[g,f]=u;try{i.proc.sendInput(g,f)}catch{}}else if(c==="modules:install"){let[g]=u;i.modules.install(g).then(()=>{A(null)}).catch((f)=>{p("capsule_modules_error",f instanceof Error?f.message:String(f))})}else if(c==="modules:remove"){let[g]=u;i.modules.remove(g).then(()=>{A(null)}).catch((f)=>{p("capsule_modules_error",f instanceof Error?f.message:String(f))})}}}}function bkt(e={}){let t=e.initialDelayMs??1000,n=e.maxDelayMs??30000,a=e.maxAttempts,r=!1,i=null,s=0;function c(){let A=Math.min(t*Math.pow(2,s),n),p=A*0.1*(Math.random()*2-1);return Math.max(0,A+p)}async function u(A){while(!r){if(a!==void 0&&s>=a)break;let p=c();if(await new Promise((d)=>{i=setTimeout(d,p)}),r)break;s++;try{await A();break}catch{}}}return{start(A){r=!1,s=0,u(A)},stop(){if(r=!0,i!==null)clearTimeout(i),i=null}}}function hkt(e){let t="disconnected",n=null,a=!1,r=null,i=null,s=0,c=mkt(),u=gkt(),A=fkt(e.on?.escalation),p=e.reconnect?bkt(e.reconnect):null,d=null;function g(E){if(!e.on?.event)return;try{e.on.event({...E,time:Date.now()})}catch{}}function f(E){t=E;try{e.on?.status?.(E)}catch{}}async function b(){if(!e.auth)return;if(typeof e.auth==="string")return e.auth;return e.auth()}async function y(){if(!e.context)return;if(typeof e.context==="function")return e.context();return e.context}function D(){if(!e.capsule)return;if(typeof e.capsule==="function")return e.capsule();return e.capsule}function I(){return D()!=null?{}:void 0}function x(){if(n=null,d=null,i=null,c.cancelActive(),u.rejectAll(new _A("CONNECTION_LOST","connection was lost")),!a&&p)s++,g({type:"ws:client:reconnecting",attempt:s,url:e.url}),f("reconnecting"),p.start(()=>k(!0));else g({type:"ws:client:disconnected",url:e.url,deliberate:a}),f("disconnected")}async function k(E=!1){if(r)return r;g({type:"ws:client:connecting",url:e.url,isReconnect:E}),f(E?"reconnecting":"connecting");let B=Date.now(),Q=pkt(e.url);i=Q;let T=lkt(),N=dkt(Q),j=(H)=>Q.send(H);d=j,T.register("handshake:ok",(H)=>N.onOk(H)),T.register("handshake:error",(H)=>N.onError(H)),T.register("pathway:chunk",(H)=>c.onChunk(H)),T.register("pathway:end",(H)=>c.onEnd(H)),T.register("pathway:error",(H)=>c.onError(H)),T.register("request:response",(H)=>u.onResponse(H)),T.register("request:error",(H)=>u.onError(H)),T.register("capsule:invoke",(H)=>A.onInvoke(H)),T.register("capsule:escalation",(H)=>{let K=H;g({type:"ws:client:capsule:escalation",escalationId:K.escalationId,module:K.module,fn:K.fn,rule:K.rule}),A.onEscalation({escalationId:K.escalationId,module:K.module,fn:K.fn,args:K.args,rule:K.rule})}),Q.onMessage((H)=>{T.dispatch(H)});let O=!1;return r=new Promise((H,K)=>{Q.onClose((Z,X)=>{if(!O)if(O=!0,g({type:"ws:client:handshake:failed",code:Z,reason:X,url:e.url}),Z===409)K(new _A("CONNECTION_LIMIT","server already has an active connection"));else K(new _A("CONNECTION_CLOSED",`closed with code ${Z}: ${X}`));else x()}),Q.onError(()=>{if(!O)O=!0,g({type:"ws:client:connection:error",url:e.url}),K(new _A("CONNECTION_ERROR","WebSocket connection error"))}),b().then((Z)=>y().then((X)=>{let oe=I();return N.perform({auth:Z,context:X,capsule:oe})})).then(({sessionId:Z})=>{O=!0,n=Z,s=0;let X=D();if(X)A.attach(X,j);g({type:"ws:client:connected",sessionId:Z,url:e.url,durationMs:Date.now()-B,isReconnect:E}),f("connected"),H()}).catch((Z)=>{if(!O)O=!0,g({type:"ws:client:handshake:failed",url:e.url,error:Z instanceof Error?Z.message:String(Z),durationMs:Date.now()-B}),K(Z instanceof _A?Z:new _A("HANDSHAKE_FAILED",String(Z)))})}).then(()=>{r=null},(H)=>{throw r=null,d=null,i=null,f("disconnected"),H}),r}return{get status(){return t},get sessionId(){return n},async connect(){a=!1,await k(!1)},disconnect(){a=!0,p?.stop(),c.cancelActive(),u.rejectAll(new _A("CONNECTION_LOST","disconnected")),n=null;let E=i;d=null,i=null,g({type:"ws:client:disconnected",url:e.url,deliberate:!0}),f("disconnected"),E?.close()},pathway(E,B,Q){if(!d)throw new _A("NOT_CONNECTED","not connected");let T=d;g({type:"ws:client:pathway:invoke",pathway:E,correlationId:Q?.correlationId,parentId:Q?.parentId});let N=c.invoke(E,B,T,Q);return{stream:N.stream,abort:N.abort}},request(E,B,Q){if(!d)return Promise.reject(new _A("NOT_CONNECTED","not connected"));return g({type:"ws:client:request:invoke",name:E,correlationId:Q?.correlationId,parentId:Q?.parentId}),u.invoke(E,B,d,Q)},capsule:{respond(E,B){A.respond(E,B)}}}}function _kt(e,t,n,a,r,i,s){let c=Dt.ref("offline"),u=Dt.ref(0),A=null;function p(g){c.value=g,r?.(g)}function d(){return hkt({url:e,auth:()=>{let f=t();return console.log(`[transport] auth callback: token=${f?f.slice(0,20)+"...":"null"}`),f??""},context:()=>{let f=a();if(!f||!f.openrouter)return{};return{credentials:{openrouter:f.openrouter}}},capsule:()=>{let f=n();if(!f)return null;return f.asWs2Instance()},reconnect:{initialDelayMs:2000,maxDelayMs:30000,maxAttempts:0},on:{status:(f)=>{if(console.log(`[transport] ws2 status \u2192 ${f}`),f==="connected")p("online"),u.value=0;else if(f==="connecting")u.value+=1,p("connecting");else if(f==="reconnecting")u.value+=1,p("reconnecting");else if(f==="disconnected")A=null,p("offline"),u.value=0},escalation:(f)=>{i?.(f)},event:s?(f)=>s(f):void 0}})}return{async connect(){if(A)return;A=d(),p("connecting"),console.log(`[transport] connecting to ${e}`);try{await A.connect(),console.log(`[transport] connected to ${e}`)}catch(g){let f=g instanceof Error?g.message:String(g);throw console.error(`[transport] connect failed (${e}):`,f),A=null,g}},disconnect(){if(!A)return;A.disconnect(),A=null,u.value=0,p("offline")},async reconnect(){if(A)A.disconnect(),A=null,p("offline");A=d(),p("connecting"),console.log(`[transport] reconnecting to ${e} (credentials changed)`);try{await A.connect()}catch(g){let f=g instanceof Error?g.message:String(g);throw console.error(`[transport] reconnect failed (${e}):`,f),A=null,g}},async*pathway(g,f,b){if(!A)throw Error("transport not connected");let{stream:y,abort:D}=A.pathway(g,f);if(b)b.addEventListener("abort",()=>D(),{once:!0});try{for await(let I of y)yield I}catch(I){throw console.error("[transport] pathway error:",I),I}},async request(g,f){if(!A)throw Error("transport not connected");return A.request(g,f)},respondEscalation(g,f){if(!A)throw Error("transport not connected");A.capsule.respond(g,f)},status:Dt.readonly(c),reconnectAttempt:Dt.readonly(u)}}function ykt(e){return{name:e.name,description:e.description,env:e.env||{},boot:e.boot||(()=>Promise.resolve()),shutdown:e.shutdown||(()=>Promise.resolve()),scope:[],entrypoint:e.entrypoint,policy:e.policy,inproc:e.inproc}}rDe();import{spawn as RTa}from"child_process";import{randomUUID as iDe}from"crypto";import{homedir as OTa}from"os";import{join as GTa}from"path";var kkt=1000,UTa=GTa(OTa(),".capsuleer","environment","index.ts");async function Ckt(e={}){let t=e.entrypoint??UTa,n=["run"];if(e.maxMemoryMb)n.push(`--max-old-space-size=${e.maxMemoryMb}`);n.push(t);let a=RTa("bun",n,{cwd:e.cwd,env:{...process.env,...e.env},stdio:["pipe","pipe","pipe"]});a.stdout.setEncoding("utf8");let r=new Set,i=new Map,s=new Map,c=new Map,u=new Map;i.set(".",{procId:".",command:"bun "+n.join(" "),status:"running",stdout:[],stderr:[],startedAt:Date.now()});let A="",p="";a.stdout.on("data",(g)=>{A+=g;let f=A.split(`
|
|
803
803
|
`);A=f.pop()||"";for(let b of f){if(!b.trim())continue;let y=p?p+`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arcforge/axon",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.15",
|
|
4
4
|
"description": "coding agent cli",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"README.md"
|
|
15
15
|
],
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@capsuleer/cli": "^0.1.
|
|
17
|
+
"@capsuleer/cli": "^0.1.3",
|
|
18
18
|
"fft.js": "^4.0.4",
|
|
19
19
|
"open": "^11.0.0"
|
|
20
20
|
}
|