agentix-cli 0.65.0 → 0.67.0

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.
Files changed (52) hide show
  1. package/apps/mac-voice/Sources/AgentXVoice/AgentClient.swift +29 -8
  2. package/apps/mac-voice/Sources/AgentXVoice/MiniOrbs.swift +219 -0
  3. package/apps/mac-voice/Sources/AgentXVoice/Panel.swift +32 -3
  4. package/apps/mac-voice/Sources/AgentXVoice/PillBusy.swift +126 -0
  5. package/apps/mac-voice/Sources/AgentXVoice/StatusMenu.swift +53 -12
  6. package/apps/mac-voice/Sources/AgentXVoice/main.swift +49 -3
  7. package/dist/{agent-HUKCS3AK.js → agent-LKL3XATA.js} +2 -2
  8. package/dist/{board-dashboard-S4V4WR2N.js → board-dashboard-ZE2A3ARS.js} +823 -371
  9. package/dist/board-dashboard-ZE2A3ARS.js.map +1 -0
  10. package/dist/{chunk-WWMFNLKD.js → chunk-2NYP4OQU.js} +3 -3
  11. package/dist/chunk-2NYP4OQU.js.map +1 -0
  12. package/dist/{chunk-HSJRI3NW.js → chunk-3DNBE7WD.js} +152 -152
  13. package/dist/chunk-3DNBE7WD.js.map +1 -0
  14. package/dist/{chunk-ECBKTFTL.js → chunk-6H3U3CII.js} +16 -16
  15. package/dist/chunk-6H3U3CII.js.map +1 -0
  16. package/dist/{chunk-EOKOGQZG.js → chunk-A5COMJRC.js} +2 -2
  17. package/dist/{chunk-AVDWFQZ5.js → chunk-F2LML4IL.js} +2 -2
  18. package/dist/chunk-JWDJMFU6.js +4 -0
  19. package/dist/chunk-JWDJMFU6.js.map +1 -0
  20. package/dist/{chunk-LEFRNHZF.js → chunk-PRHIW6SQ.js} +4 -4
  21. package/dist/{chunk-OTTAKMGC.js → chunk-UHUYGEXK.js} +5 -5
  22. package/dist/chunk-UHUYGEXK.js.map +1 -0
  23. package/dist/cli.js +1 -1
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.js +1 -1
  26. package/dist/{program-DZCKFNHD.js → program-ZRGI76RT.js} +2 -2
  27. package/dist/push-announce-PM5FZJRW.js +3 -0
  28. package/dist/push-announce-PM5FZJRW.js.map +1 -0
  29. package/dist/push-prefs-YOJNTOJF.js +2 -0
  30. package/dist/push-store-5VJ4FNI4.js +2 -0
  31. package/dist/{registry-P7IAAFCX.js → registry-EUO2D6JT.js} +2 -2
  32. package/dist/registry-EUO2D6JT.js.map +1 -0
  33. package/dist/rotation-memo-5MTSJ4FH.js +15 -0
  34. package/dist/rotation-memo-5MTSJ4FH.js.map +1 -0
  35. package/dist/web/activity-graph.global.js +7 -7
  36. package/dist/web/activity-graph.global.js.map +1 -1
  37. package/package.json +1 -1
  38. package/dist/board-dashboard-S4V4WR2N.js.map +0 -1
  39. package/dist/chunk-ECBKTFTL.js.map +0 -1
  40. package/dist/chunk-HSJRI3NW.js.map +0 -1
  41. package/dist/chunk-OTTAKMGC.js.map +0 -1
  42. package/dist/chunk-WWMFNLKD.js.map +0 -1
  43. package/dist/push-store-LXTYULUF.js +0 -2
  44. package/dist/rotation-memo-453FXKHQ.js +0 -13
  45. package/dist/rotation-memo-453FXKHQ.js.map +0 -1
  46. /package/dist/{agent-HUKCS3AK.js.map → agent-LKL3XATA.js.map} +0 -0
  47. /package/dist/{chunk-EOKOGQZG.js.map → chunk-A5COMJRC.js.map} +0 -0
  48. /package/dist/{chunk-AVDWFQZ5.js.map → chunk-F2LML4IL.js.map} +0 -0
  49. /package/dist/{chunk-LEFRNHZF.js.map → chunk-PRHIW6SQ.js.map} +0 -0
  50. /package/dist/{program-DZCKFNHD.js.map → program-ZRGI76RT.js.map} +0 -0
  51. /package/dist/{push-store-LXTYULUF.js.map → push-prefs-YOJNTOJF.js.map} +0 -0
  52. /package/dist/{registry-P7IAAFCX.js.map → push-store-5VJ4FNI4.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{a as n}from"./chunk-LEFRNHZF.js";import"./chunk-5WMHW4A6.js";import"./chunk-N42YWYIR.js";import"./chunk-WMDDQVCI.js";import"./chunk-Z3IP66SL.js";import"./chunk-C4CDVE2E.js";import"./chunk-RKPAVWXF.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-SZDACK6O.js";import"./chunk-HSJRI3NW.js";import"./chunk-EOKOGQZG.js";import"./chunk-5QP56S4O.js";import"./chunk-BYJ3A55Y.js";import"./chunk-LQRBGQIR.js";import"./chunk-ZVP6GB4G.js";import"./chunk-I2SD4XZ6.js";import"./chunk-XT3E5MLX.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import"./chunk-OTTAKMGC.js";import"./chunk-ECBKTFTL.js";import"./chunk-WP6KLXTP.js";import"./chunk-N6EWZGIX.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-AVDWFQZ5.js";import"./chunk-SFQUP3BP.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-VDMYBPYB.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";var r=["SIGINT","SIGTERM"];function o(t=process){for(let i of r)t.on(i,()=>{t.listenerCount(i)<=1&&t.exit(0)})}o();async function s(){let t=await n();if(process.argv.slice(2).length===0){t.outputHelp();return}t.parse()}s();
2
+ import{a as n}from"./chunk-PRHIW6SQ.js";import"./chunk-5WMHW4A6.js";import"./chunk-WMDDQVCI.js";import"./chunk-Z3IP66SL.js";import"./chunk-N42YWYIR.js";import"./chunk-C4CDVE2E.js";import"./chunk-RKPAVWXF.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-SZDACK6O.js";import"./chunk-3DNBE7WD.js";import"./chunk-A5COMJRC.js";import"./chunk-5QP56S4O.js";import"./chunk-ZVP6GB4G.js";import"./chunk-BYJ3A55Y.js";import"./chunk-LQRBGQIR.js";import"./chunk-I2SD4XZ6.js";import"./chunk-XT3E5MLX.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import"./chunk-UHUYGEXK.js";import"./chunk-6H3U3CII.js";import"./chunk-N6EWZGIX.js";import"./chunk-WP6KLXTP.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-F2LML4IL.js";import"./chunk-SFQUP3BP.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-VDMYBPYB.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";var r=["SIGINT","SIGTERM"];function o(t=process){for(let i of r)t.on(i,()=>{t.listenerCount(i)<=1&&t.exit(0)})}o();async function s(){let t=await n();if(process.argv.slice(2).length===0){t.outputHelp();return}t.parse()}s();
3
3
  //# sourceMappingURL=cli.js.map
package/dist/index.d.ts CHANGED
@@ -1393,6 +1393,8 @@ interface AgentSkill {
1393
1393
  description: string;
1394
1394
  tags: string[];
1395
1395
  examples?: string[];
1396
+ /** AgentX: the agent's on-screen colour ("#RRGGBB"), for peers' voice widgets. */
1397
+ color?: string;
1396
1398
  }
1397
1399
  type TaskState = "submitted" | "working" | "input-required" | "completed" | "failed" | "canceled";
1398
1400
  interface Task {
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as L}from"./chunk-Y57CULGE.js";import{a as St,b as kt,c as vt,d as xt,da as Tt,e as $t,ea as Mt,f as Ct,g as Pt,h as bt}from"./chunk-HSJRI3NW.js";import"./chunk-EOKOGQZG.js";import"./chunk-5QP56S4O.js";import"./chunk-BYJ3A55Y.js";import"./chunk-LQRBGQIR.js";import"./chunk-ZVP6GB4G.js";import"./chunk-I2SD4XZ6.js";import"./chunk-XT3E5MLX.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import{S as yt,l as lt,m as ct,n as dt,o as mt,p as pt}from"./chunk-OTTAKMGC.js";import"./chunk-ECBKTFTL.js";import"./chunk-WP6KLXTP.js";import"./chunk-N6EWZGIX.js";import"./chunk-DP7RTNDM.js";import{s as ut}from"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-AVDWFQZ5.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import{a as gt,b as ft,e as ht}from"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import{j as it,k as rt,l as at}from"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-SZJMS7K4.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{a as Fe,b as Le,c as A,d as De}from"./chunk-VDMYBPYB.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{u as tt,w as st,x as ot,z as nt}from"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
1
+ import{a as L}from"./chunk-Y57CULGE.js";import{a as St,b as kt,c as vt,d as xt,da as Tt,e as $t,ea as Mt,f as Ct,g as Pt,h as bt}from"./chunk-3DNBE7WD.js";import"./chunk-A5COMJRC.js";import"./chunk-5QP56S4O.js";import"./chunk-ZVP6GB4G.js";import"./chunk-BYJ3A55Y.js";import"./chunk-LQRBGQIR.js";import"./chunk-I2SD4XZ6.js";import"./chunk-XT3E5MLX.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import{S as yt,l as lt,m as ct,n as dt,o as mt,p as pt}from"./chunk-UHUYGEXK.js";import"./chunk-6H3U3CII.js";import"./chunk-N6EWZGIX.js";import"./chunk-WP6KLXTP.js";import"./chunk-DP7RTNDM.js";import{s as ut}from"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-F2LML4IL.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import{a as gt,b as ft,e as ht}from"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import{j as it,k as rt,l as at}from"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-SZJMS7K4.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{a as Fe,b as Le,c as A,d as De}from"./chunk-VDMYBPYB.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{u as tt,w as st,x as ot,z as nt}from"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
2
2
  `)}
3
3
 
4
4
  ${t}`}async function It(o){let{loadLocalSkills:e}=await import("./loader-EVHZ2R73.js");return e(o)}async function Ot(o,e,t,s,i){let a=[{role:"system",content:`You are a skill author for the Agent Skills ecosystem (skills.sh).
@@ -1,2 +1,2 @@
1
- import{a}from"./chunk-LEFRNHZF.js";import"./chunk-5WMHW4A6.js";import"./chunk-N42YWYIR.js";import"./chunk-WMDDQVCI.js";import"./chunk-Z3IP66SL.js";import"./chunk-C4CDVE2E.js";import"./chunk-RKPAVWXF.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-SZDACK6O.js";import"./chunk-HSJRI3NW.js";import"./chunk-EOKOGQZG.js";import"./chunk-5QP56S4O.js";import"./chunk-BYJ3A55Y.js";import"./chunk-LQRBGQIR.js";import"./chunk-ZVP6GB4G.js";import"./chunk-I2SD4XZ6.js";import"./chunk-XT3E5MLX.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import"./chunk-OTTAKMGC.js";import"./chunk-ECBKTFTL.js";import"./chunk-WP6KLXTP.js";import"./chunk-N6EWZGIX.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-AVDWFQZ5.js";import"./chunk-SFQUP3BP.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-VDMYBPYB.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{a as buildProgram};
2
- //# sourceMappingURL=program-DZCKFNHD.js.map
1
+ import{a}from"./chunk-PRHIW6SQ.js";import"./chunk-5WMHW4A6.js";import"./chunk-WMDDQVCI.js";import"./chunk-Z3IP66SL.js";import"./chunk-N42YWYIR.js";import"./chunk-C4CDVE2E.js";import"./chunk-RKPAVWXF.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-SZDACK6O.js";import"./chunk-3DNBE7WD.js";import"./chunk-A5COMJRC.js";import"./chunk-5QP56S4O.js";import"./chunk-ZVP6GB4G.js";import"./chunk-BYJ3A55Y.js";import"./chunk-LQRBGQIR.js";import"./chunk-I2SD4XZ6.js";import"./chunk-XT3E5MLX.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-2D3RYIDU.js";import"./chunk-L53FTKEP.js";import"./chunk-UHUYGEXK.js";import"./chunk-6H3U3CII.js";import"./chunk-N6EWZGIX.js";import"./chunk-WP6KLXTP.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-F2LML4IL.js";import"./chunk-SFQUP3BP.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-VDMYBPYB.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{a as buildProgram};
2
+ //# sourceMappingURL=program-ZRGI76RT.js.map
@@ -0,0 +1,3 @@
1
+ import"./chunk-QIJLFPWE.js";var h=200;function f(n){let t=n.agentId?`${n.agentId}: ${n.summary}`:n.summary,r=[...t];return r.length>200?r.slice(0,200-1).join("")+"\u2026":t}function l(n){let t=n.now??Date.now,r=n.startedAt??t(),m=n.maxAgeMs??10*6e4,p=n.log??(()=>{}),s=new Set;return n.bus.subscribe(o=>{if(o.kind!=="announce")return;let i=`${o.node}:${o.id}`;if(s.has(i))return;s.add(i),s.size>1e3&&s.delete(s.values().next().value);let u=Date.parse(o.at);if(!Number.isFinite(u)||u<r||u<t()-m)return;let a=[...new Set(n.store.list().map(e=>e.deviceId))].filter(e=>n.prefs.on(e,"announce"));if(a.length===0)return;let g=`Announcement
2
+ ${f(o)}`;for(let e of a)n.send({channel:"push",chatId:e,text:g}).catch(c=>{p(`push: announcement not sent to ${e}: ${c?.message??c}`)})})}export{h as ANNOUNCE_PUSH_MAX,f as announceBody,l as attachAnnouncePush};
3
+ //# sourceMappingURL=push-announce-PM5FZJRW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/channels/push-announce.ts"],"sourcesContent":["import type { EnvelopeListener } from \"@/events/bus\"\nimport type { EventEnvelope } from \"@/events/envelope\"\nimport type { OutgoingMessage } from \"./types\"\nimport type { PushStore } from \"./push-store\"\nimport type { PushPrefs } from \"./push-prefs\"\n\n// --- Push a notification for each new mesh announcement (#268) ---\n//\n// Runs only on the node that hosts the phone app (the one running\n// PushAdapter). Announcements from other nodes reach this node's bus\n// through the peer feed, so listening to the bus covers the whole mesh\n// and each announcement is pushed once, by one node.\n//\n// Not pushed:\n// - the same event twice (key node:id; the bus already refuses repeats\n// from the feed, this guards against a second path in),\n// - anything published before this process started, which is what the\n// feed's first-contact backfill and catch-up reads bring in,\n// - anything older than `maxAgeMs`, so a peer that reconnects after a\n// long outage doesn't fire a stack of stale notifications,\n// - phones that turned \"Notify me of announcements\" off (push_prefs\n// switch \"announce\").\n\n/** Longest announcement text in a notification body. */\nexport const ANNOUNCE_PUSH_MAX = 200\nconst SEEN_MAX = 1000\n\nexport interface AnnouncePushDeps {\n bus: { subscribe(fn: EnvelopeListener): () => void }\n store: Pick<PushStore, \"list\">\n prefs: Pick<PushPrefs, \"on\">\n /** The PushAdapter's send; chatId is one phone's device id. */\n send: (msg: OutgoingMessage) => Promise<unknown>\n /** Events stamped before this are replays. Defaults to attach time. */\n startedAt?: number\n maxAgeMs?: number\n now?: () => number\n log?: (...args: unknown[]) => void\n}\n\nexport function announceBody(e: Pick<EventEnvelope, \"summary\" | \"agentId\">): string {\n const text = e.agentId ? `${e.agentId}: ${e.summary}` : e.summary\n const chars = [...text]\n return chars.length > ANNOUNCE_PUSH_MAX ? chars.slice(0, ANNOUNCE_PUSH_MAX - 1).join(\"\") + \"…\" : text\n}\n\n/** Subscribes to the bus; returns the unsubscribe function. */\nexport function attachAnnouncePush(deps: AnnouncePushDeps): () => void {\n const now = deps.now ?? Date.now\n const startedAt = deps.startedAt ?? now()\n const maxAgeMs = deps.maxAgeMs ?? 10 * 60_000\n const log = deps.log ?? (() => {})\n const seen = new Set<string>()\n\n return deps.bus.subscribe((e) => {\n if (e.kind !== \"announce\") return\n const key = `${e.node}:${e.id}`\n if (seen.has(key)) return\n seen.add(key)\n if (seen.size > SEEN_MAX) seen.delete(seen.values().next().value as string)\n\n const at = Date.parse(e.at)\n if (!Number.isFinite(at) || at < startedAt || at < now() - maxAgeMs) return\n\n const devices = [...new Set(deps.store.list().map((s) => s.deviceId))]\n .filter((id) => deps.prefs.on(id, \"announce\"))\n if (devices.length === 0) return\n const text = `Announcement\\n${announceBody(e)}`\n for (const chatId of devices) {\n deps.send({ channel: \"push\", chatId, text }).catch((err: any) => {\n log(`push: announcement not sent to ${chatId}: ${err?.message ?? err}`)\n })\n }\n })\n}\n"],"mappings":"4BAwBO,IAAMA,EAAoB,IAgB1B,SAASC,EAAaC,EAAuD,CAClF,IAAMC,EAAOD,EAAE,QAAU,GAAGA,EAAE,YAAYA,EAAE,UAAYA,EAAE,QACpDE,EAAQ,CAAC,GAAGD,CAAI,EACtB,OAAOC,EAAM,OAAS,IAAoBA,EAAM,MAAM,EAAG,IAAoB,CAAC,EAAE,KAAK,EAAE,EAAI,SAAMD,CACnG,CAGO,SAASE,EAAmBC,EAAoC,CACrE,IAAMC,EAAMD,EAAK,KAAO,KAAK,IACvBE,EAAYF,EAAK,WAAaC,EAAI,EAClCE,EAAWH,EAAK,UAAY,GAAK,IACjCI,EAAMJ,EAAK,MAAQ,IAAM,CAAC,GAC1BK,EAAO,IAAI,IAEjB,OAAOL,EAAK,IAAI,UAAWJ,GAAM,CAC/B,GAAIA,EAAE,OAAS,WAAY,OAC3B,IAAMU,EAAM,GAAGV,EAAE,QAAQA,EAAE,KAC3B,GAAIS,EAAK,IAAIC,CAAG,EAAG,OACnBD,EAAK,IAAIC,CAAG,EACRD,EAAK,KAAO,KAAUA,EAAK,OAAOA,EAAK,OAAO,EAAE,KAAK,EAAE,KAAe,EAE1E,IAAME,EAAK,KAAK,MAAMX,EAAE,EAAE,EAC1B,GAAI,CAAC,OAAO,SAASW,CAAE,GAAKA,EAAKL,GAAaK,EAAKN,EAAI,EAAIE,EAAU,OAErE,IAAMK,EAAU,CAAC,GAAG,IAAI,IAAIR,EAAK,MAAM,KAAK,EAAE,IAAKS,GAAMA,EAAE,QAAQ,CAAC,CAAC,EAClE,OAAQC,GAAOV,EAAK,MAAM,GAAGU,EAAI,UAAU,CAAC,EAC/C,GAAIF,EAAQ,SAAW,EAAG,OAC1B,IAAMX,EAAO;AAAA,EAAiBF,EAAaC,CAAC,IAC5C,QAAWe,KAAUH,EACnBR,EAAK,KAAK,CAAE,QAAS,OAAQ,OAAAW,EAAQ,KAAAd,CAAK,CAAC,EAAE,MAAOe,GAAa,CAC/DR,EAAI,kCAAkCO,MAAWC,GAAK,SAAWA,GAAK,CACxE,CAAC,CAEL,CAAC,CACH","names":["ANNOUNCE_PUSH_MAX","announceBody","e","text","chars","attachAnnouncePush","deps","now","startedAt","maxAgeMs","log","seen","key","at","devices","s","id","chatId","err"]}
@@ -0,0 +1,2 @@
1
+ import{a,b}from"./chunk-JWDJMFU6.js";import"./chunk-QIJLFPWE.js";export{a as PUSH_PREFS,b as PushPrefs};
2
+ //# sourceMappingURL=push-prefs-YOJNTOJF.js.map
@@ -0,0 +1,2 @@
1
+ import{a}from"./chunk-2NYP4OQU.js";import"./chunk-JWDJMFU6.js";import"./chunk-QIJLFPWE.js";export{a as PushStore};
2
+ //# sourceMappingURL=push-store-5VJ4FNI4.js.map
@@ -1,2 +1,2 @@
1
- import{I as a,J as b,K as c,L as d,M as e,N as f,O as g,P as h,Q as i,R as j,S as k,T as l}from"./chunk-OTTAKMGC.js";import"./chunk-ECBKTFTL.js";import"./chunk-WP6KLXTP.js";import"./chunk-N6EWZGIX.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{k as AgentRegistry,f as TRACE_STEP_SUMMARY_BYTES,c as buildEntryMeta,d as buildEventDigest,e as buildWikiContext,g as clipForTrace,j as emitTraceStepsFromStreamEvent,i as firstMissingRequiredTool,b as getGlobalRegistry,l as richReplyPrompt,a as setGlobalRegistry,h as tallyToolUses};
2
- //# sourceMappingURL=registry-P7IAAFCX.js.map
1
+ import{I as a,J as b,K as c,L as d,M as e,N as f,O as g,P as h,Q as i,R as j,S as k,T as l}from"./chunk-UHUYGEXK.js";import"./chunk-6H3U3CII.js";import"./chunk-N6EWZGIX.js";import"./chunk-WP6KLXTP.js";import"./chunk-DP7RTNDM.js";import"./chunk-BHE5TJSN.js";import"./chunk-EA7H3EUX.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-LQ5J6COO.js";import"./chunk-DWADWDMU.js";import"./chunk-NO2HOK4B.js";import"./chunk-QD6IICK7.js";import"./chunk-VWTBHLMX.js";import"./chunk-AZBOYKQA.js";import"./chunk-WGWNVLVW.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-P4GOKVK2.js";import"./chunk-TFVUOC2C.js";import"./chunk-2GIDVZ4H.js";import"./chunk-PTB2TPOC.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-FX3D7YON.js";import"./chunk-QOYAX2FT.js";import"./chunk-SZJMS7K4.js";import"./chunk-7I7IEX4S.js";import"./chunk-DSYKYZMT.js";import"./chunk-OVF37EXJ.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{k as AgentRegistry,f as TRACE_STEP_SUMMARY_BYTES,c as buildEntryMeta,d as buildEventDigest,e as buildWikiContext,g as clipForTrace,j as emitTraceStepsFromStreamEvent,i as firstMissingRequiredTool,b as getGlobalRegistry,l as richReplyPrompt,a as setGlobalRegistry,h as tallyToolUses};
2
+ //# sourceMappingURL=registry-EUO2D6JT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,15 @@
1
+ import{a as u,c}from"./chunk-2GIDVZ4H.js";import"./chunk-QIJLFPWE.js";import{execFile as f}from"child_process";var g=3e4,w="haiku",y=`You are about to lose this working session due to context-size rotation. Before that happens, write a compact memo of what you should carry forward to your next session on the same conversation.
2
+
3
+ Include only durable facts a future turn would otherwise have to rediscover:
4
+ - Names, handles, agent ids, telegram/whatsapp/gitlab usernames
5
+ - File paths, URLs, project namespaces, ssh hosts, ports
6
+ - Decisions made and their reasoning
7
+ - Open tasks or commitments to follow up on
8
+ - Identifiers (issue numbers, PR numbers, ticket ids) the user referred to
9
+
10
+ Do not restate the state of an outside system (billing, account, plan, outage, deploy) unless you checked it in this session; then say how and when you checked (e.g. "active per GET /v1/user, 2026-09-28").
11
+
12
+ Format: 3-12 short bullet points. Each \u2264120 chars. No prose, no preamble, no header. If the session was uninformative or just casual chat, reply with exactly the literal text "(no memo)".
13
+
14
+ Begin the memo now.`;async function E(n,r){let m=Date.now();if(!r)return{memo:null,reason:"no-resume",durationMs:0};let i=["-p",y,"--output-format","json","--resume",r,"--model",w];n.permissionMode==="bypassPermissions"&&i.push("--dangerously-skip-permissions");let d=c(u(n.workspace),n.billing);return new Promise(p=>{let a=!1,e=(t,s)=>{a||(a=!0,p({memo:t,reason:s,durationMs:Date.now()-m}))};f("claude",i,{cwd:n.workspace,env:d,timeout:g,maxBuffer:1024*1024},(t,s,b)=>{if(t)return t.killed?e(null,"timeout"):e(null,`error:${t.message.slice(0,80)}`);try{let l=JSON.parse(s||"{}"),o=typeof l.result=="string"?l.result.trim():"";if(!o||o==="(no memo)")return e(null,"empty");let h=o.length>4096?o.slice(0,4096)+"\u2026":o;return e(h,"ok")}catch{return e(null,"parse-error")}}).on("error",()=>e(null,"spawn-error"))})}export{E as extractRotationMemo};
15
+ //# sourceMappingURL=rotation-memo-5MTSJ4FH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agents/rotation-memo.ts"],"sourcesContent":["import { execFile } from \"child_process\"\nimport type { AgentDef } from \"@/daemon/config\"\nimport { buildAgentEnv, claudeBillingEnv } from \"@/utils/workspace-env\"\n\n// --- Pre-rotation memo extraction ---\n//\n// Just before agentx clears `claudeSessionId` (tier-2 / max-turns / stale\n// rotation), we ask the dying Claude session to dump the facts and\n// decisions it should carry forward. The agent has full working-memory\n// of its tool-use history at this moment — the only chance to capture\n// it before --resume is dropped and the next turn starts with a blank\n// session.\n//\n// The memo persists into MemoryStore, where the existing findRelevant\n// path injects it into future turns naturally. No new wiring on the\n// read side; one-shot LLM call on the write side.\n//\n// Hard rule: never block rotation. Timeout, errors, empty memos all\n// mean \"skip this round of memo capture\". Memory continuity is a\n// best-effort enhancement, not a correctness requirement.\n\nconst MEMO_TIMEOUT_MS = 30_000\nconst MEMO_MODEL = \"haiku\" // cheapest fast model — memo is summarisation, not reasoning\n\nconst MEMO_PROMPT =\n \"You are about to lose this working session due to context-size rotation. \" +\n \"Before that happens, write a compact memo of what you should carry forward \" +\n \"to your next session on the same conversation.\\n\\n\" +\n \"Include only durable facts a future turn would otherwise have to rediscover:\\n\" +\n \"- Names, handles, agent ids, telegram/whatsapp/gitlab usernames\\n\" +\n \"- File paths, URLs, project namespaces, ssh hosts, ports\\n\" +\n \"- Decisions made and their reasoning\\n\" +\n \"- Open tasks or commitments to follow up on\\n\" +\n \"- Identifiers (issue numbers, PR numbers, ticket ids) the user referred to\\n\\n\" +\n \"Do not restate the state of an outside system (billing, account, plan, outage, \" +\n \"deploy) unless you checked it in this session; then say how and when you checked \" +\n \"(e.g. \\\"active per GET /v1/user, 2026-09-28\\\").\\n\\n\" +\n \"Format: 3-12 short bullet points. Each ≤120 chars. No prose, no preamble, \" +\n \"no header. If the session was uninformative or just casual chat, reply with \" +\n \"exactly the literal text \\\"(no memo)\\\".\\n\\n\" +\n \"Begin the memo now.\"\n\nexport interface RotationMemoResult {\n /** The extracted memo text, or null when extraction failed/skipped. */\n memo: string | null\n /** Why we skipped or what happened — \"ok\", \"timeout\", \"error\", \"empty\", \"no-resume\". */\n reason: string\n /** Wall-clock time spent in the extractor. */\n durationMs: number\n}\n\n/** Ask the dying Claude session for a carry-forward memo. Spawns one\n * short claude CLI call with --resume on the about-to-be-dropped\n * session id, asks for a compact memo, returns the text. Never throws\n * — every failure mode resolves with `memo=null` so the caller can\n * proceed with the rotation regardless. */\nexport async function extractRotationMemo(\n agent: AgentDef,\n resumeSessionId: string | undefined,\n): Promise<RotationMemoResult> {\n const start = Date.now()\n if (!resumeSessionId) {\n return { memo: null, reason: \"no-resume\", durationMs: 0 }\n }\n\n const args: string[] = [\n \"-p\", MEMO_PROMPT,\n \"--output-format\", \"json\",\n \"--resume\", resumeSessionId,\n \"--model\", MEMO_MODEL,\n ]\n if (agent.permissionMode === \"bypassPermissions\") {\n args.push(\"--dangerously-skip-permissions\")\n }\n\n const env = claudeBillingEnv(buildAgentEnv(agent.workspace), agent.billing)\n\n return new Promise<RotationMemoResult>((resolve) => {\n let settled = false\n const finish = (memo: string | null, reason: string) => {\n if (settled) return\n settled = true\n resolve({ memo, reason, durationMs: Date.now() - start })\n }\n\n const child = execFile(\n \"claude\",\n args,\n {\n cwd: agent.workspace,\n env,\n timeout: MEMO_TIMEOUT_MS,\n maxBuffer: 1024 * 1024, // 1 MB; the memo itself is tiny\n },\n (err, stdout, _stderr) => {\n if (err) {\n // execFile signals timeout via signal SIGTERM + err.killed\n if ((err as NodeJS.ErrnoException & { killed?: boolean }).killed) {\n return finish(null, \"timeout\")\n }\n return finish(null, `error:${err.message.slice(0, 80)}`)\n }\n try {\n const data = JSON.parse(stdout || \"{}\")\n // claude -p --output-format json yields { result, ... }\n const text = typeof data.result === \"string\" ? data.result.trim() : \"\"\n if (!text || text === \"(no memo)\") return finish(null, \"empty\")\n // Defensive cap: memos > 4 KB are almost certainly the LLM\n // ignoring instructions and dumping prose. Truncate.\n const capped = text.length > 4096 ? text.slice(0, 4096) + \"…\" : text\n return finish(capped, \"ok\")\n } catch {\n return finish(null, \"parse-error\")\n }\n },\n )\n child.on(\"error\", () => finish(null, \"spawn-error\"))\n })\n}\n"],"mappings":"sEAAA,OAAS,YAAAA,MAAgB,gBAqBzB,IAAMC,EAAkB,IAClBC,EAAa,QAEbC,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBA+BF,eAAsBC,EACpBC,EACAC,EAC6B,CAC7B,IAAMC,EAAQ,KAAK,IAAI,EACvB,GAAI,CAACD,EACH,MAAO,CAAE,KAAM,KAAM,OAAQ,YAAa,WAAY,CAAE,EAG1D,IAAME,EAAiB,CACrB,KAAML,EACN,kBAAmB,OACnB,WAAYG,EACZ,UAAWJ,CACb,EACIG,EAAM,iBAAmB,qBAC3BG,EAAK,KAAK,gCAAgC,EAG5C,IAAMC,EAAMC,EAAiBC,EAAcN,EAAM,SAAS,EAAGA,EAAM,OAAO,EAE1E,OAAO,IAAI,QAA6BO,GAAY,CAClD,IAAIC,EAAU,GACRC,EAAS,CAACC,EAAqBC,IAAmB,CAClDH,IACJA,EAAU,GACVD,EAAQ,CAAE,KAAAG,EAAM,OAAAC,EAAQ,WAAY,KAAK,IAAI,EAAIT,CAAM,CAAC,EAC1D,EAEcU,EACZ,SACAT,EACA,CACE,IAAKH,EAAM,UACX,IAAAI,EACA,QAASR,EACT,UAAW,KAAO,IACpB,EACA,CAACiB,EAAKC,EAAQC,IAAY,CACxB,GAAIF,EAEF,OAAKA,EAAqD,OACjDJ,EAAO,KAAM,SAAS,EAExBA,EAAO,KAAM,SAASI,EAAI,QAAQ,MAAM,EAAG,EAAE,GAAG,EAEzD,GAAI,CACF,IAAMG,EAAO,KAAK,MAAMF,GAAU,IAAI,EAEhCG,EAAO,OAAOD,EAAK,QAAW,SAAWA,EAAK,OAAO,KAAK,EAAI,GACpE,GAAI,CAACC,GAAQA,IAAS,YAAa,OAAOR,EAAO,KAAM,OAAO,EAG9D,IAAMS,EAASD,EAAK,OAAS,KAAOA,EAAK,MAAM,EAAG,IAAI,EAAI,SAAMA,EAChE,OAAOR,EAAOS,EAAQ,IAAI,CAC5B,MAAE,CACA,OAAOT,EAAO,KAAM,aAAa,CACnC,CACF,CACF,EACM,GAAG,QAAS,IAAMA,EAAO,KAAM,aAAa,CAAC,CACrD,CAAC,CACH","names":["execFile","MEMO_TIMEOUT_MS","MEMO_MODEL","MEMO_PROMPT","extractRotationMemo","agent","resumeSessionId","start","args","env","claudeBillingEnv","buildAgentEnv","resolve","settled","finish","memo","reason","execFile","err","stdout","_stderr","data","text","capped"]}