agentix-cli 0.79.4 → 0.80.1

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 (129) hide show
  1. package/dist/{App-PFMTQ7J5.js → App-KVH5POXZ.js} +2 -2
  2. package/dist/{ChatApp-ZBSU2F6J.js → ChatApp-LD4TXJWP.js} +2 -2
  3. package/dist/{agent-AMU6E27Z.js → agent-FUMJM6OW.js} +2 -2
  4. package/dist/{board-dashboard-OJSOA4OL.js → board-dashboard-OS5J3F73.js} +340 -215
  5. package/dist/board-dashboard-OS5J3F73.js.map +1 -0
  6. package/dist/{chunk-LPDQ2KK4.js → chunk-3UN6CXRL.js} +2 -2
  7. package/dist/chunk-42Y3BXXS.js +15 -0
  8. package/dist/{chunk-YKPISR5J.js.map → chunk-42Y3BXXS.js.map} +1 -1
  9. package/dist/chunk-6JJ3GODZ.js +57 -0
  10. package/dist/chunk-6JJ3GODZ.js.map +1 -0
  11. package/dist/{chunk-LNQOJC57.js → chunk-7IGSJGXI.js} +2 -2
  12. package/dist/{chunk-ROIPXJ6L.js → chunk-AF46YOLU.js} +192 -191
  13. package/dist/chunk-AF46YOLU.js.map +1 -0
  14. package/dist/chunk-API4IZZG.js +2 -0
  15. package/dist/chunk-API4IZZG.js.map +1 -0
  16. package/dist/{chunk-T7GFKM63.js → chunk-BEHC3X42.js} +191 -195
  17. package/dist/chunk-BEHC3X42.js.map +1 -0
  18. package/dist/{chunk-EAYHYAF3.js → chunk-BJPIRNP6.js} +2 -2
  19. package/dist/{chunk-2ZQ42Q4L.js → chunk-BVZFYBBP.js} +2 -2
  20. package/dist/chunk-GTJIKXDB.js +2 -0
  21. package/dist/chunk-GTJIKXDB.js.map +1 -0
  22. package/dist/{chunk-M4XUZA3O.js → chunk-H7253EHW.js} +2 -2
  23. package/dist/{chunk-EUVMKZUC.js → chunk-MOQNLS5Z.js} +2 -2
  24. package/dist/{chunk-XFCSJUGY.js → chunk-MYRSNJJ4.js} +2 -2
  25. package/dist/{chunk-X6WZ54UJ.js → chunk-NOAAK2XI.js} +79 -79
  26. package/dist/chunk-NOAAK2XI.js.map +1 -0
  27. package/dist/chunk-OVN5LVJY.js +11 -0
  28. package/dist/chunk-OVN5LVJY.js.map +1 -0
  29. package/dist/{chunk-7QRCAHPX.js → chunk-PE55MMLK.js} +2 -2
  30. package/dist/{chunk-6SJTBTDG.js → chunk-R42S57G6.js} +2 -2
  31. package/dist/chunk-SHEUCITK.js +2 -0
  32. package/dist/chunk-SHEUCITK.js.map +1 -0
  33. package/dist/{chunk-WVYOXM45.js → chunk-TEFMZY6B.js} +2 -2
  34. package/dist/{chunk-WNI2P7S6.js → chunk-UB63NQQL.js} +2 -2
  35. package/dist/{chunk-HTKSZZXK.js → chunk-UR3ZIDMA.js} +2 -2
  36. package/dist/{chunk-MGCTX2BB.js → chunk-UXSYVMPK.js} +2 -2
  37. package/dist/{chunk-5RRORS5S.js → chunk-XESESMKN.js} +57 -57
  38. package/dist/chunk-XESESMKN.js.map +1 -0
  39. package/dist/{chunk-CNSPC4BZ.js → chunk-YCI3KUYF.js} +2 -2
  40. package/dist/{chunk-R7WZUUYO.js → chunk-Z3XUGXPD.js} +2 -2
  41. package/dist/{chunk-RD5EKHGZ.js → chunk-ZR3NZLJL.js} +2 -2
  42. package/dist/cli.js +1 -1
  43. package/dist/cli.js.map +1 -1
  44. package/dist/client-TJ5YZOEE.js +2 -0
  45. package/dist/config-4WZ7Y34V.js +2 -0
  46. package/dist/config-mutator-5Z7EEB5N.js +2 -0
  47. package/dist/{doctor-DST4SVW4.js → doctor-7K3NRBNN.js} +2 -2
  48. package/dist/{facts-2K6UX5GD.js → facts-U7BUYRXN.js} +2 -2
  49. package/dist/{facts-2K6UX5GD.js.map → facts-U7BUYRXN.js.map} +1 -1
  50. package/dist/index.d.ts +82 -12
  51. package/dist/index.js +1 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/program-KMQNX6YK.js +2 -0
  54. package/dist/{promote-CQCRZCYB.js → promote-NDC3X54P.js} +2 -2
  55. package/dist/query-F7BD3JPE.js +2 -0
  56. package/dist/registry-5NBHBVY3.js +2 -0
  57. package/dist/{request-planner-TNDIQMHS.js → request-planner-H74KHFGJ.js} +2 -2
  58. package/dist/{review-candidates-SXVIYCVE.js → review-candidates-IPJWEXR2.js} +2 -2
  59. package/dist/routing-3RSG7SKW.js +2 -0
  60. package/dist/schedule-tool-7NYAK43U.js +2 -0
  61. package/dist/scheduler-24O7PADJ.js +2 -0
  62. package/dist/seat-TOM2WHQR.js +2 -0
  63. package/dist/{select-WKMMUWLU.js → select-BUWOD47K.js} +2 -2
  64. package/dist/{set-enabled-RIE3PLNJ.js → set-enabled-XWSFTICB.js} +2 -2
  65. package/dist/tool-GUINJ2BQ.js +4 -0
  66. package/dist/tool-GUINJ2BQ.js.map +1 -0
  67. package/dist/tool-VOA4HSVP.js +4 -0
  68. package/dist/tool-VOA4HSVP.js.map +1 -0
  69. package/dist/wiki-VFME4T2H.js +2 -0
  70. package/package.json +1 -1
  71. package/dist/board-dashboard-OJSOA4OL.js.map +0 -1
  72. package/dist/chunk-2ACZWM7F.js +0 -22
  73. package/dist/chunk-2ACZWM7F.js.map +0 -1
  74. package/dist/chunk-5RRORS5S.js.map +0 -1
  75. package/dist/chunk-7XB2CVC3.js +0 -2
  76. package/dist/chunk-7XB2CVC3.js.map +0 -1
  77. package/dist/chunk-ROIPXJ6L.js.map +0 -1
  78. package/dist/chunk-T7GFKM63.js.map +0 -1
  79. package/dist/chunk-X6WZ54UJ.js.map +0 -1
  80. package/dist/chunk-YKPISR5J.js +0 -15
  81. package/dist/client-XAE7NLE2.js +0 -2
  82. package/dist/config-5HAWFIEL.js +0 -2
  83. package/dist/config-mutator-Y7KAC4AC.js +0 -2
  84. package/dist/program-SSCPEHTW.js +0 -2
  85. package/dist/query-WSLKGCQN.js +0 -2
  86. package/dist/registry-6HKQKIBD.js +0 -2
  87. package/dist/routing-GQWG65DQ.js +0 -2
  88. package/dist/schedule-tool-WXRMJMW6.js +0 -2
  89. package/dist/scheduler-YW6JFH3Z.js +0 -2
  90. package/dist/seat-K2JSQIZ4.js +0 -2
  91. package/dist/tool-TAMRBONN.js +0 -4
  92. package/dist/tool-TAMRBONN.js.map +0 -1
  93. package/dist/wiki-WBRXHY7J.js +0 -2
  94. /package/dist/{App-PFMTQ7J5.js.map → App-KVH5POXZ.js.map} +0 -0
  95. /package/dist/{ChatApp-ZBSU2F6J.js.map → ChatApp-LD4TXJWP.js.map} +0 -0
  96. /package/dist/{agent-AMU6E27Z.js.map → agent-FUMJM6OW.js.map} +0 -0
  97. /package/dist/{chunk-LPDQ2KK4.js.map → chunk-3UN6CXRL.js.map} +0 -0
  98. /package/dist/{chunk-LNQOJC57.js.map → chunk-7IGSJGXI.js.map} +0 -0
  99. /package/dist/{chunk-EAYHYAF3.js.map → chunk-BJPIRNP6.js.map} +0 -0
  100. /package/dist/{chunk-2ZQ42Q4L.js.map → chunk-BVZFYBBP.js.map} +0 -0
  101. /package/dist/{chunk-M4XUZA3O.js.map → chunk-H7253EHW.js.map} +0 -0
  102. /package/dist/{chunk-EUVMKZUC.js.map → chunk-MOQNLS5Z.js.map} +0 -0
  103. /package/dist/{chunk-XFCSJUGY.js.map → chunk-MYRSNJJ4.js.map} +0 -0
  104. /package/dist/{chunk-7QRCAHPX.js.map → chunk-PE55MMLK.js.map} +0 -0
  105. /package/dist/{chunk-6SJTBTDG.js.map → chunk-R42S57G6.js.map} +0 -0
  106. /package/dist/{chunk-WVYOXM45.js.map → chunk-TEFMZY6B.js.map} +0 -0
  107. /package/dist/{chunk-WNI2P7S6.js.map → chunk-UB63NQQL.js.map} +0 -0
  108. /package/dist/{chunk-HTKSZZXK.js.map → chunk-UR3ZIDMA.js.map} +0 -0
  109. /package/dist/{chunk-MGCTX2BB.js.map → chunk-UXSYVMPK.js.map} +0 -0
  110. /package/dist/{chunk-CNSPC4BZ.js.map → chunk-YCI3KUYF.js.map} +0 -0
  111. /package/dist/{chunk-R7WZUUYO.js.map → chunk-Z3XUGXPD.js.map} +0 -0
  112. /package/dist/{chunk-RD5EKHGZ.js.map → chunk-ZR3NZLJL.js.map} +0 -0
  113. /package/dist/{client-XAE7NLE2.js.map → client-TJ5YZOEE.js.map} +0 -0
  114. /package/dist/{config-5HAWFIEL.js.map → config-4WZ7Y34V.js.map} +0 -0
  115. /package/dist/{config-mutator-Y7KAC4AC.js.map → config-mutator-5Z7EEB5N.js.map} +0 -0
  116. /package/dist/{doctor-DST4SVW4.js.map → doctor-7K3NRBNN.js.map} +0 -0
  117. /package/dist/{program-SSCPEHTW.js.map → program-KMQNX6YK.js.map} +0 -0
  118. /package/dist/{promote-CQCRZCYB.js.map → promote-NDC3X54P.js.map} +0 -0
  119. /package/dist/{query-WSLKGCQN.js.map → query-F7BD3JPE.js.map} +0 -0
  120. /package/dist/{registry-6HKQKIBD.js.map → registry-5NBHBVY3.js.map} +0 -0
  121. /package/dist/{request-planner-TNDIQMHS.js.map → request-planner-H74KHFGJ.js.map} +0 -0
  122. /package/dist/{review-candidates-SXVIYCVE.js.map → review-candidates-IPJWEXR2.js.map} +0 -0
  123. /package/dist/{routing-GQWG65DQ.js.map → routing-3RSG7SKW.js.map} +0 -0
  124. /package/dist/{schedule-tool-WXRMJMW6.js.map → schedule-tool-7NYAK43U.js.map} +0 -0
  125. /package/dist/{scheduler-YW6JFH3Z.js.map → scheduler-24O7PADJ.js.map} +0 -0
  126. /package/dist/{seat-K2JSQIZ4.js.map → seat-TOM2WHQR.js.map} +0 -0
  127. /package/dist/{select-WKMMUWLU.js.map → select-BUWOD47K.js.map} +0 -0
  128. /package/dist/{set-enabled-RIE3PLNJ.js.map → set-enabled-XWSFTICB.js.map} +0 -0
  129. /package/dist/{wiki-WBRXHY7J.js.map → wiki-VFME4T2H.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import{c as te,d as ne,e as F,f as C,g as j,h as B}from"./chunk-O5U5NVLR.js";import{a as ee}from"./chunk-CL53UVOF.js";import{a as Q,b as Z}from"./chunk-HTKSZZXK.js";import{a as V}from"./chunk-M4XUZA3O.js";import{B as O,D as G,E as _,H as M}from"./chunk-YKPISR5J.js";import{existsSync as W,readFileSync as ce,writeFileSync as pe,appendFileSync as Ae,mkdirSync as Se}from"fs";import{dirname as Ce,resolve as P}from"path";import{fileURLToPath as Ie}from"url";import{hostname as Ee}from"os";import{spawn as Te}from"child_process";M();import{existsSync as re,readFileSync as ae,writeFileSync as L,copyFileSync as ye}from"fs";import{resolve as ie}from"path";function oe(e,t={}){let n=t.configPath||ie(process.cwd(),"agentx.json");if(!re(n))throw new Error(`agentx.json not found at ${n}`);let a=JSON.parse(ae(n,"utf-8")),r=e(a),i=typeof r=="string"?{summary:r}:r,s=JSON.stringify(a,null,2)+`
1
+ import{c as te,d as ne,e as F,f as C,g as j,h as B}from"./chunk-O5U5NVLR.js";import{a as ee}from"./chunk-CL53UVOF.js";import{a as Q,b as Z}from"./chunk-UR3ZIDMA.js";import{a as V}from"./chunk-H7253EHW.js";import{C as O,E as G,F as _,I as M}from"./chunk-42Y3BXXS.js";import{existsSync as W,readFileSync as ce,writeFileSync as pe,appendFileSync as Ae,mkdirSync as Se}from"fs";import{dirname as Ce,resolve as P}from"path";import{fileURLToPath as Ie}from"url";import{hostname as Ee}from"os";import{spawn as Te}from"child_process";M();import{existsSync as re,readFileSync as ae,writeFileSync as L,copyFileSync as ye}from"fs";import{resolve as ie}from"path";function oe(e,t={}){let n=t.configPath||ie(process.cwd(),"agentx.json");if(!re(n))throw new Error(`agentx.json not found at ${n}`);let a=JSON.parse(ae(n,"utf-8")),r=e(a),i=typeof r=="string"?{summary:r}:r,s=JSON.stringify(a,null,2)+`
2
2
  `,l=n+".tmp";L(l,s,"utf-8");try{JSON.parse(ae(l,"utf-8"))}catch(c){throw new Error(`config did not round-trip cleanly: ${c.message}`)}let o;return t.skipBackup||(o=`${n}.bak.${Date.now()}`,ye(n,o)),L(n,s,"utf-8"),t.skipReload||ke().catch(()=>{}),{summary:i.summary,payload:i.payload,backupPath:o}}function se(e,t={}){let n=t.configPath||ie(process.cwd(),"agentx.json");if(re(n)&&!t.overwrite)throw new Error(`agentx.json already exists at ${n}. Pass overwrite=true to replace it.`);return L(n,JSON.stringify(e,null,2)+`
3
3
  `,"utf-8"),{file:n}}async function ke(){try{let t=_().dashboard.daemonUrl?.replace(/\/+$/,"")||"http://127.0.0.1:18800";await fetch(`${t}/reload`,{method:"POST"}).catch(()=>null)}catch{}}function le(e,t){let n=e.configExists?e.agentCount===0?"Add your first agent":"Add another agent":"Set up your team",a=`<header class="ax-topbar">
4
4
  <div class="ax-topbar__left">
@@ -737,4 +737,4 @@ tr:hover td { background: var(--bg-hover); }
737
737
  <h3><a href="${l}/article/${encodeURIComponent(c.path)}">${d(c.meta.title)}</a></h3>
738
738
  </div>`;return $(`${t} \xB7 ${n}`,I(r),o)}function U(e,t,n){let a=e.rebuildIndex(),r=J(a.articles.map(s=>({title:s.title,path:s.path,tags:s.tags}))),i='<div class="nav-section">';i+=`<div class="nav-section-title">${d(t)}</div>`,i+=`<a class="nav-item${n?"":" active"}" href="/">Home</a>`,i+='<a class="nav-item" href="/lint">Health check</a>',i+="</div>";for(let[s,l]of r){i+='<div class="nav-section">',i+=`<div class="nav-section-title">${q(s)}</div>`;for(let o of l){let c=o.path===n;i+=`<a class="nav-item${c?" active":""}" href="/article/${encodeURIComponent(o.path)}">${d(o.title)}</a>`}i+="</div>"}return i}function Ye(e){let{wikiDir:t,agentFilter:n,peerUrls:a=[],mode:r="graph",pathPrefix:i=""}=e,s=i.replace(/\/+$/,""),l=new V(t,void 0,r),o=a.length>0?new D(a):null;return async(c,g)=>{let x=new URL(c.url||"/","http://localhost"),p=decodeURIComponent(x.pathname),f=s&&p.startsWith(s)?p.slice(s.length)||"/":p,h=null,T=200;try{if(f.startsWith("/remote/")&&o){let y=f.slice(8).split("/article/");if(y.length===2){let[b,v]=y,m=b.indexOf("/"),k=decodeURIComponent(b.slice(0,m)),u=b.slice(m+1),w=await o.getRemoteArticle(k,u,v);if(w){let z=await o.getRemoteAgents(),N=[...l.summary(),...z.map(S=>({...S,agentId:`${S.agentId} @${S.nodeId}`}))],A=`<div class="breadcrumb"><a href="/">Hub</a> / <span class="tag">remote</span> ${d(u)} @ ${d(k)}</div>`;A+=`<h1>${d(w.meta.title)}</h1>`,A+='<dl class="meta">',A+=`<dt>Tags</dt><dd>${(w.meta.tags||[]).map(S=>`<span class="tag">${S}</span>`).join(" ")}</dd>`,A+=`<dt>Owner</dt><dd>${d(w.meta.owner)}</dd>`,A+=`<dt>Source</dt><dd><span class="tag">remote</span> ${d(k)}</dd>`,A+=`<dt>Updated</dt><dd>${w.meta.lastUpdated}</dd>`,A+="</dl>";let E=new Map;A+=H(w.content,E),h=$(w.meta.title,I(N),A)}}}if(!h&&n){let y=l.getAgentWiki(n);if(f==="/"||f===""){let b=y.rebuildIndex(),v=l.getAgentEntries(n),m=`<h1>${d(n)}</h1>`;if(m+='<div class="stats">',m+=`<div class="stat-card"><div class="number">${b.articles.length}</div><div class="label">Articles</div></div>`,m+=`<div class="stat-card"><div class="number">${v.length}</div><div class="label">Entries</div></div>`,m+="</div>",b.articles.length>0){m+="<h2>Articles</h2><table><tr><th>Title</th><th>Type</th><th>Updated</th></tr>";for(let k of b.articles)m+=`<tr><td><a href="/article/${encodeURIComponent(k.path)}">${d(k.title)}</a></td><td><span class="tag">${(k.tags||[]).slice(0,3).join(", ")}</span></td><td>${k.lastUpdated||""}</td></tr>`;m+="</table>"}h=$(n,U(y,n),m)}else if(f.startsWith("/article/")){let b=f.slice(9),v=y.readArticle(b);if(v){let m=y.rebuildIndex(),k=new Map;for(let w of m.articles)k.set(w.title,w.path);let u=`<h1>${d(v.meta.title)}</h1>`;u+='<dl class="meta">',u+=`<dt>Tags</dt><dd>${(v.meta.tags||[]).map(w=>`<span class="tag">${w}</span>`).join(" ")}</dd>`,u+=`<dt>Updated</dt><dd>${v.meta.lastUpdated}</dd>`,v.meta.sources?.length&&(u+=`<dt>Sources</dt><dd>${v.meta.sources.length} entries</dd>`),u+="</dl>",u+=H(v.content,k),h=$(v.meta.title,U(y,n,b),u)}}else if(f==="/lint"){let b=y.lint(),v="<h1>Health Check</h1>";if(b.length===0)v+='<p style="color:green;">No issues.</p>';else{v+="<table><tr><th>Type</th><th>Article</th><th>Issue</th></tr>";for(let m of b)v+=`<tr><td><span class="tag">${m.type}</span></td><td>${d(m.article)}</td><td>${d(m.message)}</td></tr>`;v+="</table>"}h=$("Health Check",U(y,n),v)}else if(f==="/search"){let b=x.searchParams.get("q")||"",v=await y.findRelevantReranked(b,void 0,20),m=`<h1>Search: "${d(b)}"</h1>`;for(let k of v)m+=`<div class="entry-card"><h3><a href="/article/${encodeURIComponent(k.path)}">${d(k.meta.title)}</a></h3><p>${d(k.content.slice(0,200))}...</p></div>`;v.length===0&&(m+="<p>No results.</p>"),h=$(`Search: ${b}`,U(y,n),m)}else if(f.startsWith("/tag/")){let b=decodeURIComponent(f.slice(5)),v=y.findByTags([b],void 0,100),m=`<h1>Tag: <a class="tag" href="#">${d(b)}</a></h1>`;m+=`<p>${v.length} article${v.length===1?"":"s"} tagged <code>${d(b)}</code></p>`;for(let k of v)m+=`<div class="entry-card"><h3><a href="/article/${encodeURIComponent(k.path)}">${d(k.meta.title)}</a></h3><div class="meta-line">${R((k.meta.tags||[]).slice(0,6))}</div></div>`;v.length===0&&(m+="<p>No articles with this tag.</p>"),h=$(`Tag: ${b}`,U(y,n),m)}}else{let y=o?await o.getRemoteAgents():[],b=l.summary(),v=new Map(b.map(u=>[u.agentId,u])),m=[],k=new Set;for(let u of b){let w=y.find(z=>z.agentId===u.agentId);w&&w.totalArticles>u.totalArticles?m.push({...w,totalEntries:Math.max(u.totalEntries,w.totalEntries),unabsorbed:Math.max(u.unabsorbed,w.unabsorbed)}):m.push(u),k.add(u.agentId)}for(let u of y)k.has(u.agentId)||(m.push(u),k.add(u.agentId));if(f==="/"||f==="")h=Me(l,m,y);else if(f==="/entries")h=Le(l,m);else if(f==="/search")h=Je(l,x.searchParams.get("q")||"",m);else if(f.startsWith("/tag/"))h=qe(l,decodeURIComponent(f.slice(5)),m);else if(f.match(/^\/agent\/[^/]+\/tag\/.+/)){let u=f.match(/^\/agent\/([^/]+)\/tag\/(.+)$/);h=Ke(l,decodeURIComponent(u[1]),decodeURIComponent(u[2]),m)}else if(f.startsWith("/agent/")){let u=f.slice(7),w=u.indexOf("/article/");if(w===-1)h=Fe(l,u,m);else{let z=u.slice(0,w),N=u.slice(w+9);if(h=je(l,z,N,m),!h&&o){let A=y.find(E=>E.agentId===z);if(A){let E=await o.getRemoteArticle(A.peerUrl,z,N);if(E){let S=`<div class="breadcrumb"><a href="/">Hub</a> / <span class="tag">remote @ ${d(A.nodeId)}</span> / ${d(z)}</div>`;S+=`<h1>${d(E.meta.title)}</h1>`,S+='<dl class="meta">',S+=`<dt>Tags</dt><dd>${(E.meta.tags||[]).map(be=>`<span class="tag">${be}</span>`).join(" ")}</dd>`,S+=`<dt>Source</dt><dd><span class="tag">remote</span> ${d(A.nodeId)}</dd>`,S+=`<dt>Updated</dt><dd>${E.meta.lastUpdated}</dd>`,S+="</dl>",S+=H(E.content,new Map),h=$(E.meta.title,I(m),S)}}}}}}if(!h){T=404;let y=n?U(l.getAgentWiki(n),n):I(l.summary());h=$("Not Found",y,"<h1>Page not found</h1>")}}catch(y){T=500,h=$("Error","",`<h1>Error</h1><pre>${d(y.message)}</pre>`)}g.writeHead(T,{"Content-Type":"text/html; charset=utf-8"}),g.end(s?Xe(h,s):h)}}function Xe(e,t){e=e.replace(/(\s(?:href|action)=")\/(?!\/)/g,`$1${t}/`),e=e.replace(new RegExp(`(${t})${t}/`,"g"),`${t}/`);let n=`<a href="/admin" style="position:fixed;top:10px;right:14px;z-index:9999;padding:5px 11px;background:rgba(0,0,0,0.55);color:#fff;font:12px/1.2 'IBM Plex Sans',system-ui,sans-serif;text-decoration:none;border-radius:6px;border:1px solid rgba(255,255,255,0.18);backdrop-filter:blur(6px)">\u2190 Dashboard</a>`;return e=e.replace(/<body([^>]*)>/,`<body$1>${n}`),e}function Kt(e,t=4200,n,a=[],r="graph"){let i=Ye({wikiDir:e,agentFilter:n,peerUrls:a,mode:r});Ne((l,o)=>{i(l,o)}).listen(t)}import{createCipheriv as Ge,createDecipheriv as Ve,createHash as Qe,randomBytes as K,randomInt as Ze,scryptSync as et,timingSafeEqual as tt}from"crypto";import{existsSync as nt,mkdirSync as at,readFileSync as rt,renameSync as it,writeFileSync as ot}from"fs";import{dirname as st,resolve as lt}from"path";var Y="23456789ABCDEFGHJKMNPQRSTUVWXYZ",X=8,dt=10*60*1e3,ct=".agentx/pair-codes.json",pt={N:16384,r:8,p:1};function gt(){let e="";for(let t=0;t<X;t++)e+=Y[Ze(Y.length)];return e}function Qt(e){return`${e.slice(0,4)}-${e.slice(4)}`}function mt(e){if(typeof e!="string"||e.length>64)return null;let t=e.toUpperCase().replace(/[\s\-‐-―]/g,"");if(t.length!==X)return null;for(let n of t)if(!Y.includes(n))return null;return t}var ve=class{constructor(t=process.cwd(),n=ct,a=Date.now){this.now=a;this.file=lt(t,n)}file;create(t){let n=this.load(),a=gt(),{id:r,key:i}=xe(a,n.salt),s=this.now(),l=new Date(s+dt).toISOString();return n.codes=n.codes.filter(o=>Date.parse(o.expiresAt)>s),n.codes.push({id:r,tokenId:t.tokenId,name:t.name,sealed:ut(i,t.token),createdAt:new Date(s).toISOString(),expiresAt:l}),this.save(n),{code:a,expiresAt:l}}redeem(t){let n=this.load(),a=mt(t),{id:r,key:i}=xe(a??"-".repeat(X),n.salt);if(!a)return null;let s=Buffer.from(r),l=n.codes.find(c=>c.id.length===r.length&&tt(Buffer.from(c.id),s));if(!l||Date.parse(l.expiresAt)<=this.now())return null;let o=ft(i,l.sealed);return o?(n.codes=n.codes.filter(c=>c!==l&&Date.parse(c.expiresAt)>this.now()),this.save(n),{token:o,tokenId:l.tokenId,name:l.name}):null}load(){if(nt(this.file))try{let t=JSON.parse(rt(this.file,"utf-8"));if(t&&typeof t.salt=="string"&&Array.isArray(t.codes))return t}catch{}return{salt:K(16).toString("hex"),codes:[]}}save(t){at(st(this.file),{recursive:!0});let n=`${this.file}.${process.pid}.${K(4).toString("hex")}.tmp`;ot(n,JSON.stringify(t,null,2)+`
739
739
  `,{encoding:"utf-8",mode:384}),it(n,this.file)}};function xe(e,t){let n=et(e,Buffer.from(t,"hex"),64,pt);return{id:"sha256:"+Qe("sha256").update(n.subarray(0,32)).digest("hex"),key:n.subarray(32)}}function ut(e,t){let n=K(12),a=Ge("aes-256-gcm",e,n),r=Buffer.concat([a.update(t,"utf-8"),a.final()]);return Buffer.concat([n,a.getAuthTag(),r]).toString("base64")}function ft(e,t){try{let n=Buffer.from(t,"base64"),a=Ve("aes-256-gcm",e,n.subarray(0,12));return a.setAuthTag(n.subarray(12,28)),Buffer.concat([a.update(n.subarray(28)),a.final()]).toString("utf-8")}catch{return null}}var ht="https://ntfy.sh";function en(e){return{enabled:!!e?.enabled,server:e?.server||ht,topicSet:!!e?.topic,tokenSet:!!e?.token}}function tn(e,t){let n={...e??{}};if("enabled"in t&&(n.enabled=!!t.enabled),"server"in t){let a=String(t.server).trim().replace(/\/+$/,"");if(!/^https?:\/\/\S+$/.test(a))throw new Error("ntfy server must be an http(s) URL");n.server=a}if("topic"in t){let a=String(t.topic).trim();if(!a)throw new Error("ntfy topic cannot be empty");n.topic=a}if("token"in t){let a=String(t.token??"").trim();a?n.token=a:delete n.token}if(n.enabled&&!n.topic)throw new Error("set a topic before enabling ntfy");return n}export{oe as a,ge as b,Pt as c,Rt as d,Ut as e,dt as f,Qt as g,ve as h,Dt as i,Ht as j,Ot as k,en as l,tn as m,Ye as n,Kt as o};
740
- //# sourceMappingURL=chunk-LPDQ2KK4.js.map
740
+ //# sourceMappingURL=chunk-3UN6CXRL.js.map
@@ -0,0 +1,15 @@
1
+ import{a as p,b as se}from"./chunk-QIJLFPWE.js";import{z as s}from"zod";var le,ue,ce,de,me,pe,fe,ge,be,E,$=p(()=>{"use strict";le=s.enum(["mon","tue","wed","thu","fri","sat","sun"]),ue=s.object({days:s.array(le).default(["mon","tue","wed","thu","fri"]),start:s.string().regex(/^\d{2}:\d{2}$/),end:s.string().regex(/^\d{2}:\d{2}$/),lunch:s.object({start:s.string().regex(/^\d{2}:\d{2}$/),end:s.string().regex(/^\d{2}:\d{2}$/)}).optional()}),ce=s.object({title:s.string(),responsibilities:s.array(s.string()).default([]),sopPath:s.string().optional(),kpis:s.array(s.string()).default([])}),de=s.object({role:s.string(),reportsTo:s.string().optional(),schedule:ue,utilizationTarget:s.number().min(0).max(1).default(.8)}),me=s.object({channel:s.string(),chatId:s.string(),accountId:s.string().optional()}),pe=s.discriminatedUnion("type",[s.object({type:s.literal("backlog"),path:s.string().default(".agentx/backlog.md")}),s.object({type:s.literal("gitlab"),projects:s.array(s.string()).default([])}),s.object({type:s.literal("wiki"),path:s.string(),glob:s.string().default("**/*.md")})]),fe=s.object({id:s.string(),pm:s.string().optional(),client:s.string().optional()}),ge=s.object({channel:s.string().optional(),chatId:s.string().optional(),username:s.string().optional(),senderId:s.string().optional(),client:s.string(),project:s.string().optional(),displayName:s.string().optional()}),be=s.object({name:s.string().optional(),kind:s.enum(["client","internal","own"]).optional(),respondWithin:s.string().optional(),standing:s.array(s.string()).default([])}),E=s.object({enabled:s.boolean().default(!1),timezone:s.string().default("UTC"),mainChannel:me,workSource:pe,roles:s.record(s.string(),ce).default({}),orgChart:s.record(s.string(),de).default({}),projects:s.array(fe).default([]),contactMap:s.array(ge).default([]),clients:s.record(s.string(),be).default({}),workTickMinutes:s.number().int().min(1).max(60).default(15),idleQueueThreshold:s.number().int().min(0).default(0),standup:s.object({enabled:s.boolean().default(!0),plansDir:s.string().default(".agentx/plans"),maxAgentsPerDay:s.number().int().min(1).max(100).default(20),dryRun:s.boolean().default(!1)}).default({})})});import{z as u}from"zod";function It(n,o){let t=new Set(n.labels||[]);if(n.state==="closed"){let r=o.find(i=>i.kind==="closed");if(r)return r.id}for(let r of o)if(r.kind==="scoped-label"&&r.scopedLabel&&t.has(r.scopedLabel))return r.id;for(let r of o)if(r.kind==="label"&&r.mapsToLabel&&t.has(r.mapsToLabel))return r.id;let a=o.find(r=>r.kind==="open-backlog");if(a){let r=a.scopedPrefix+"::";return[...t].some(l=>l.startsWith(r))?null:a.id}return o[0]?.id??null}function Pt(n,o){let t=[],a=[],r=!1,i=!1;return o.kind==="scoped-label"&&o.scopedLabel?t.push(o.scopedLabel):o.kind==="label"&&o.mapsToLabel?t.push(o.mapsToLabel):o.kind==="closed"&&(r=!0),n&&(n.kind==="scoped-label"&&n.scopedLabel?a.push(n.scopedLabel):n.kind==="label"&&n.mapsToLabel?a.push(n.mapsToLabel):n.kind==="closed"&&o.kind!=="closed"&&(i=!0)),{addLabels:t.length?t:void 0,removeLabels:a.length?a:void 0,closeIssue:r||void 0,reopen:i||void 0}}var he,ye,xe,Se,we,ke,T,ve,C,_=p(()=>{"use strict";he=u.object({name:u.string(),color:u.string().regex(/^#[0-9a-f]{6}$/i).default("#6366f1"),description:u.string().optional()}),ye=u.object({id:u.string().regex(/^[a-z0-9_-]+$/,"column id must be lowercase slug"),title:u.string(),kind:u.enum(["open-backlog","scoped-label","closed","label"]).default("label"),mapsToLabel:u.string().optional(),scopedLabel:u.string().optional(),scopedPrefix:u.string().default("Status"),accent:u.string().optional()}),xe=u.object({enabled:u.boolean().default(!0),staleDoingMinutes:u.number().int().min(1).default(45),respectLunchBreak:u.boolean().default(!0),respectSchedule:u.boolean().default(!0),action:u.enum(["badge","notify"]).default("badge")}),Se=u.discriminatedUnion("type",[u.object({type:u.literal("gitlab"),projects:u.array(u.string()).min(1)})]),we=[{id:"open",title:"Open",kind:"open-backlog",scopedPrefix:"Status",accent:"#6b7280"},{id:"todo",title:"To Do",kind:"scoped-label",scopedLabel:"Status::To Do",scopedPrefix:"Status",accent:"#fb7a35"},{id:"doing",title:"Doing",kind:"scoped-label",scopedLabel:"Status::Doing",scopedPrefix:"Status",accent:"#22c55e"},{id:"onhold",title:"On Hold",kind:"scoped-label",scopedLabel:"Status::On Hold",scopedPrefix:"Status",accent:"#f59e0b"},{id:"review",title:"Review",kind:"scoped-label",scopedLabel:"Status::Review",scopedPrefix:"Status",accent:"#3b82f6"},{id:"closed",title:"Closed",kind:"closed",scopedPrefix:"Status",accent:"#6b7280"}],ke=u.object({id:u.string().regex(/^[a-z0-9_-]+$/,"board id must be lowercase slug"),name:u.string(),source:Se,primaryToolLabel:u.string().optional(),labels:u.array(he).default([]),columns:u.array(ye).min(1).default(we),timeRangeDays:u.number().int().min(1).max(365).default(30),closedWindowDays:u.number().int().min(1).max(365).default(30),reconciliation:xe.default({})}),T=u.array(ke).default([]),ve=u.object({name:u.string(),url:u.string(),dashboardUrl:u.string().optional(),token:u.string().optional(),dashboardToken:u.string().optional()}),C=u.object({enabled:u.boolean().default(!1),port:u.number().int().default(4202),bind:u.string().default("127.0.0.1"),token:u.string().optional(),daemonUrl:u.string().default("http://localhost:18800"),daemons:u.array(ve).default([]),draftAgent:u.string().optional()}).default({})});import{z as je}from"zod";function zt(n){return n==="report"||n==="propose"}function $e(n){return n.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(Boolean).map(o=>o.toLowerCase())}function v(n){return $e(n).slice(2).join(" ").replace(/\b(merge|pull)\s+requests?\b/g,"mergerequest").split(" ").filter(Boolean)}function I(n){let o=n.replace(/<<-?\s*(['"]?)([A-Za-z_][A-Za-z0-9_]*)\1([\s\S]*?)^\s*\2\s*$/gm,(r,i,l,c)=>!i&&/\$\(|`/.test(c)?r:r.split(`
2
+ `)[0]+`
3
+ `),t="",a=0;for(;a<o.length;){let r=o[a];if(r==="\\"){t+=o.slice(a,a+2),a+=2;continue}if(r==="'"){let i=o.indexOf("'",a+1);if(i<0)return null;t+="''",a=i+1;continue}if(r==='"'){let i=a+1;for(;i<o.length&&o[i]!=='"';)i+=o[i]==="\\"?2:1;if(i>=o.length)return null;let l=o.slice(a+1,i);t+=/\$\(|`/.test(l)?` ${l} `:'""',a=i+1;continue}t+=r,a++}return t}function P(n){return n.split(/\|\||&&|[;|&\n`()]|\$\(|<\(|>\(/).map(o=>o.trim().split(/\s+/).filter(Boolean)).filter(o=>o.length>0)}function M(n){let o=0;for(;o<n.length;){let t=n[o];if(_e.has(t))return[];if(Ce.has(t)||/^[A-Za-z_][A-Za-z0-9_]*=/.test(t)){o++;continue}break}return n.slice(o)}function O(n){let o=0;for(;o<n.length&&n[o].startsWith("-");)o+=/^-(C|c)$|^--(git-dir|work-tree|namespace)$/.test(n[o])?2:1;return{sub:n[o],rest:n.slice(o+1)}}function Le(n){let[o,...t]=n,a=o.replace(/^.*\//,"");if(!Re.has(a))return`\`${a}\` is not a read-only command`;let r=i=>t.some(l=>i.test(l));switch(a){case"find":return r(/^-(exec|execdir|ok|okdir|delete|fprint|fprint0|fprintf|fls)$/)?"find with -exec/-delete":null;case"sort":return r(/^(-o|--output)/)?"sort -o writes a file":null;case"git":{if(r(/^(-c|--exec-path|--output)/))return"git option that can execute or write";let{sub:i,rest:l}=O(t);return!i||!De.has(i)?`git ${i??""} is not read-only`.trim():i==="branch"&&l.some(c=>/^-(d|D|m|M|c|C|f|u)$|^--(delete|move|copy|force|set-upstream|unset-upstream|edit-description)/.test(c)||!c.startsWith("-"))?"git branch that changes branches":i==="tag"&&l.some(c=>!/^(-l|--list|-n\d*|--contains|--points-at|--sort=.*|--merged|--no-merged)$/.test(c))?"git tag that creates or deletes tags":i==="remote"&&l.length>0&&!/^(-v|--verbose|show|get-url)$/.test(l[0])?"git remote that changes remotes":i==="config"&&!l.some(c=>/^(--get|--get-all|--get-regexp|--list|-l)$/.test(c))?"git config write":i==="reflog"&&l.length>0&&!/^(show|-)/.test(l[0])?"git reflog that expires or deletes":null}case"gh":case"glab":{let[i,l]=t.filter(c=>!c.startsWith("-"));if(i==="search")return null;if(i==="api"){let c=t.findIndex(f=>/^(-X|--method)$/.test(f));return c>=0&&!/^GET$/i.test(t[c+1]??"")?`${a} api with a non-GET method`:r(/^-X(?!GET$)\w+|^--method=(?!GET$)/i)?`${a} api with a non-GET method`:r(/^(-f|-F|--field|--raw-field|--input)/)?`${a} api with a request body`:null}return!l||!Be.has(l)?`${a} ${i??""} ${l??""} is not read-only`.replace(/\s+/g," ").trim():null}case"curl":{let i=t.findIndex(l=>/^(-X|--request)$/.test(l));return i>=0&&!/^(GET|HEAD|OPTIONS)$/i.test(t[i+1]??"")||r(/^-X(?!GET$|HEAD$)\w+|^--request=(?!GET$|HEAD$)/i)?"curl with a non-GET method":r(/^(-d|--data|--data-\w+|--json|-F|--form|-T|--upload-file|-o|--output|-O|--remote-name|-K|--config)/)?"curl that sends a body or writes a file":null}default:return null}}function Ie(n){let o=n.replace(/\d*>>?\s*\/dev\/null/g," ").replace(/&>>?\s*\/dev\/null/g," ").replace(/\d*>&\s*\d+/g," ");return/[>]/.test(o)}function Pe(n){let o=I(n);if(o===null)return m("report","shell","command too irregular to verify as read-only");if(Ie(o))return m("report","shell","output redirection writes a file");for(let t of P(o)){let a=M(t);if(a.length===0)continue;let r=Le(a);if(r)return m("report","shell",r)}return g}function Me(n){if(Ae.has(n.tool))return m("report","write",`${n.tool} modifies files`);if(n.tool==="Bash")return Pe(n.command??"");if(Ee.has(n.tool))return g;if(n.tool.startsWith("mcp__")){let o=v(n.tool),t=o.find(a=>Te.has(a));return t?m("report","outward",`tool "${n.tool}" can change state (${t})`):o.some(a=>B.has(a))?g:m("report","outward",`tool "${n.tool}" is not recognisably read-only`)}return m("report","tool",`tool "${n.tool}" is not on the read-only list`)}function We(n){let o=[];for(let a=0;a<n.length;a++){let r=n[a];if(He.test(r)){a++;continue}if(/^(--force.*|-d|--delete|--mirror|--all|--tags|--prune)$/.test(r)||/^-[a-zA-Z]*f/.test(r))return m("propose","push","force, delete, mirror and tag pushes are act-level actions");r.startsWith("-")||o.push(r)}let t=o.slice(1);if(t.length===0)return m("propose","push","name the feature branch explicitly: git push <remote> <branch>");for(let a of t){if(a.startsWith("+")||a.startsWith(":"))return m("propose","push",`refspec "${a}" force-pushes or deletes`);let r=(a.includes(":")?a.slice(a.indexOf(":")+1):a).replace(/^refs\/heads\//,"");if(Fe.test(r))return m("propose","push",`pushing to "${r}" is an act-level action; push a feature branch and open a merge request`)}return null}function qe(n){for(let t of Oe)if(t.re.test(n))return m("propose",t.id,t.reason);let o=I(n);if(o===null)return m("propose","shell","command too irregular to verify");for(let t of P(o)){let a=M(t);if(a.length===0)continue;let r=[R(a[0]),...a.slice(1)].join(" ");for(let i of ze)if(i.re.test(r))return m("propose",i.id,i.reason);if(R(a[0])==="git"){let{sub:i,rest:l}=O(a.slice(1));if(i==="push"){let c=We(l);if(c)return c}}}return g}function Ue(n){if(n.tool==="Bash")return qe(n.command??"");if(n.tool.startsWith("mcp__")){let o=v(n.tool).find(t=>L.has(t));if(o)return m("propose","outward",`tool "${n.tool}" performs an act-level action (${o})`);if(Ke(v(n.tool)))return m("propose","delegate",`tool "${n.tool}" hands work to another agent, which would run at its own full autonomy`)}return g}function Ke(n){return n.includes("delegate")||n.includes("handoff")||n.includes("agent")&&n.some(o=>o==="send"||o==="ask"||o==="message"||o==="task")?!0:n.includes("task")&&!n.some(o=>B.has(o))}function Ft(n,o){return n==="report"?Me(o):n==="propose"?Ue(o):g}function Ht(n){return n==="report"?"[Autonomy: report] This routine runs read-only. Investigate and report; do not modify files, run mutating commands, or post anywhere. Your final answer is the deliverable. Blocked actions are enforced and logged; if something needs doing, describe it in the report instead.":n==="propose"?"[Autonomy: propose] You may edit files, commit, push a named feature branch, and open a merge request or draft. You may not merge, deploy, delete, force-push, push to protected branches, or operate hosts. These limits are enforced and logged; leave act-level steps as clear recommendations.":""}var D,g,m,Ae,Ee,B,L,Te,Ce,_e,R,Re,De,Be,Oe,ze,Fe,He,z=p(()=>{"use strict";D=je.enum(["report","propose","act"]);g={allowed:!0,ruleId:null,reason:null},m=(n,o,t)=>({allowed:!1,ruleId:`autonomy.${n}.${o}`,reason:t}),Ae=new Set(["Write","Edit","MultiEdit","NotebookEdit"]),Ee=new Set(["Read","Glob","Grep","LS","NotebookRead","WebFetch","WebSearch","TodoWrite","TodoRead","Task","Agent","Skill","ToolSearch","BashOutput","KillShell","ExitPlanMode","EnterPlanMode","ListMcpResourcesTool","ReadMcpResourceTool"]);B=new Set(["get","list","search","read","view","fetch","query","find","show","describe","status","diff","inspect","lookup","count","stats","browse","whoami","download"]),L=new Set(["merge","delete","remove","destroy","drop","deploy","publish","release","approve","archive","revoke","purge","close","transfer","force","rollback","restart","erase","unprotect","truncate","wipe","kill","terminate","unpublish","promote"]),Te=new Set([...L,"create","update","post","send","write","edit","add","set","comment","reply","push","run","execute","exec","trigger","upload","move","rename","cancel","retry","assign","label","react","invite","notify","schedule","start","stop","submit","save","patch","put","insert","upsert","apply","install","import","mark","toggle","enable","disable","open","commit","sync","reset","store","remember","forget","broadcast","message","call","dispatch","enqueue","resolve","unassign","lock","unlock","pin"]);Ce=new Set(["then","do","else","elif","if","while","until","!","{","}","time"]),_e=new Set(["done","fi","esac","for","case","select","in",";;"]);R=n=>n.replace(/^.*\//,""),Re=new Set(["ls","pwd","cd","cat","head","tail","wc","grep","egrep","fgrep","rg","fd","tree","stat","file","du","df","date","whoami","id","hostname","uname","which","type","sort","uniq","cut","tr","diff","cmp","comm","basename","dirname","realpath","readlink","jq","column","nl","seq","true","false","test","[","sleep","ps","uptime","echo","printf","base64","md5","md5sum","shasum","sha256sum","less","more","printenv","dig","nslookup","host","find","git","gh","glab","curl"]),De=new Set(["status","log","diff","show","rev-parse","ls-files","ls-tree","blame","shortlog","describe","cat-file","grep","branch","tag","remote","config","reflog","rev-list","merge-base","name-rev","show-ref","for-each-ref","whatchanged"]),Be=new Set(["view","list","diff","status","checks","ls"]);Oe=[{id:"merge",re:/merge_when_pipeline_succeeds|\bauto[_-]merge\b/i,reason:"auto-merging is an act-level action"},{id:"merge",re:/\b(curl|wget|http|gh\s+api|glab\s+api)\b[^\n]*\/merges?\b/i,reason:"calling a merge endpoint is an act-level action"},{id:"delete",re:/(?:^|\W)(drop|truncate)\s+(table|database|schema|index|collection)\b|(?:^|\W)delete\s+from\b|\bflushall\b|\bflushdb\b/i,reason:"destroying data is an act-level action"},{id:"delete",re:/(-X|--request)[\s=]*['"]?DELETE\b/i,reason:"HTTP DELETE is an act-level action"},{id:"delegate",re:/\b(curl|wget|http)\b[^\n]*(localhost|127\.0\.0\.1|\[::1\])[^\n]*\/(ask|task|send|chat|mesh|workflows?|crons?|reload|config)\b/i,reason:"calling the local daemon to dispatch work escapes this routine's limit"}],ze=[{id:"merge",re:/^(gh\s+pr\s+merge|glab\s+mr\s+merge)\b/i,reason:"merging is an act-level action"},{id:"delete",re:/^rm\s+(.*\s)?(-\w*[rR]\w*|--recursive)\b|^(shred|dropdb)\b|^find\b.*\s-delete\b/i,reason:"deleting is an act-level action"},{id:"delete",re:/^git\s+(clean\s+-\w*f|reset\s+--hard|branch\s+(-\w*[dD]\w*|--delete)|tag\s+(-d|--delete)|stash\s+(drop|clear)|remote\s+(remove|rm))\b/i,reason:"deleting is an act-level action"},{id:"delete",re:/^(gh|glab)\s+\S+\s+delete\b|^docker\s+(rm|rmi|volume\s+rm|system\s+prune)\b|^(kubectl\s+delete|aws\s+s3\s+(rm|rb)|gsutil\s+rm)\b|^doctl\s+.*\sdelete\b/i,reason:"deleting is an act-level action"},{id:"deploy",re:/^(kubectl\s+(apply|rollout|scale|set|patch|replace|create|edit)|helm\s+(install|upgrade|rollback|uninstall|delete)|terraform\s+(apply|destroy|import|taint)|pulumi\s+(up|destroy)|docker\s+push|netlify\s+deploy|fly(ctl)?\s+deploy|serverless\s+deploy|vercel\b.*--prod)\b/i,reason:"deploying is an act-level action"},{id:"deploy",re:/^((npm|pnpm|yarn|bun)(\s+run)?|make|just|task|rake)\s+(\S+:)?deploy\b|^((ba|z)?sh|node|python3?)\s+\S*deploy[^\s/]*$|^\S*\/deploy(\.\w+)?\b|^deploy(\.\w+)?\b/i,reason:"deploying is an act-level action"},{id:"deploy",re:/^((npm|pnpm|yarn|bun)\s+publish|cargo\s+publish|twine\s+upload|(gh|glab)\s+release\s+(create|upload|edit)|(npx\s+)?prisma\s+(migrate\s+(deploy|reset)|db\s+push))\b/i,reason:"publishing or migrating is an act-level action"},{id:"prod",re:/^(ssh|scp|sudo|doas|systemctl|launchctl|service|kill|pkill|killall|reboot|shutdown)\b|^rsync\b.*\s\S+:\S*/i,reason:"operating hosts and services is an act-level action"},{id:"delegate",re:/^(agentx|agentix)\s+(ask|send|task|exec|run|chat|mesh|cron|workflow|daemon|config)\b/i,reason:"handing work to another agent or reconfiguring the daemon escapes this routine's limit"}],Fe=/^(main|master|trunk|develop|development|prod|production|staging|stable|release([/-].*)?|HEAD|@)$/i,He=/^(-o|--push-option|--repo|--receive-pack|--exec)$/});function Xe(n){let o=String(n??"").trim().toLowerCase();if(!o)return{ok:!1,error:"is empty"};let t=o.split("+").map(i=>i.trim());if(t.some(i=>!i))return{ok:!1,error:`"${n}" has an empty part; write it like opt+space`};let a=Ye[t[t.length-1]]??t[t.length-1],r=new Set;for(let i of t.slice(0,-1)){let l=Ne[i];if(!l)return{ok:!1,error:`"${i}" is not a modifier; use ctrl, opt, shift or cmd`};if(r.has(l))return{ok:!1,error:`"${n}" names ${l} twice`};r.add(l)}return Ve(a)?!F(a)&&!["ctrl","opt","cmd"].some(i=>r.has(i))?{ok:!1,error:`"${n}" needs ctrl, opt or cmd, or it would take that key away from your typing`}:{ok:!0,value:[...Ze.filter(i=>r.has(i)),a].join("+")}:{ok:!1,error:`"${a}" is not a key AgentX Voice can use; use a letter, a digit, f1 to f20, or space, period, comma, slash, return, tab`}}function H(n){let o=Xe(n);return o.ok?void 0:o.error}function qt(n){let o={ctrl:"\u2303",opt:"\u2325",shift:"\u21E7",cmd:"\u2318"},t={space:"Space",period:".",comma:",",slash:"/",semicolon:";",quote:"'",minus:"-",equal:"=",leftbracket:"[",rightbracket:"]",backslash:"\\",grave:"`",return:"Return",tab:"Tab"},a=n.split("+"),r=a.pop()??"";return a.map(i=>o[i]??i).join("")+(t[r]??r.toUpperCase())}var Ne,Ze,Ge,Ye,F,Ve,h,W=p(()=>{"use strict";Ne={ctrl:"ctrl",control:"ctrl",opt:"opt",option:"opt",alt:"opt",shift:"shift",cmd:"cmd",command:"cmd"},Ze=["ctrl","opt","shift","cmd"],Ge=["space","period","comma","slash","semicolon","quote","minus","equal","leftbracket","rightbracket","backslash","grave","return","tab"],Ye={".":"period",",":"comma","/":"slash",";":"semicolon","'":"quote","-":"minus","=":"equal","`":"grave",enter:"return"},F=n=>/^f([1-9]|1[0-9]|20)$/.test(n),Ve=n=>/^[a-z0-9]$/.test(n)||Ge.includes(n)||F(n);h={talk:"opt+space",stop:"cmd+opt+period",paste:"cmd+opt+v"}});function Je(n){let o=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(n);if(!o)return null;let[t,a,r]=o.slice(1).map(k=>parseInt(k,16)/255),i=Math.max(t,a,r),l=Math.min(t,a,r),c=i-l;return c<.04?null:((i===t?(a-r)/c%6:i===a?(r-t)/c+2:(t-a)/c+4)*60+360)%360}function Qe(n){let o=Je(n);if(o===null)return b.find(r=>r.id==="lagoon");let t=b[0],a=360;for(let r of b){let i=Math.abs(r.hue-o),l=Math.min(i,360-i);l<a&&(t=r,a=l)}return t}function Kt(n,o){let t=b.find(a=>a.id===n);return t?{...t,set:!0}:{...Qe(o),set:!1}}var b,q,U=p(()=>{"use strict";b=[{id:"sunrise",label:"Sunrise",hue:18,colors:["#E8505B","#F2726F","#F79A5A","#FBBF4A","#FFE3A3"]},{id:"desert",label:"Desert",hue:36,colors:["#A4492C","#C8683E","#D9905E","#E7B98A","#F6E3C4"]},{id:"forest",label:"Forest",hue:100,colors:["#2F5D34","#4C7D3A","#6FA046","#9CC25E","#D5EBA4"]},{id:"lagoon",label:"Lagoon",hue:172,colors:["#0B6E73","#0E9594","#1FBFB2","#56DCCB","#B8F4EA"]},{id:"ocean",label:"Ocean",hue:205,colors:["#15457E","#1C6BA8","#2B93CF","#5DBBE8","#BFE6FA"]},{id:"dusk",label:"Dusk",hue:268,colors:["#2E2A7A","#5B3E9E","#8C4FB0","#C8649E","#F4A7B9"]},{id:"blossom",label:"Blossom",hue:330,colors:["#A3245B","#CF3F78","#E8699A","#F49BB8","#FFD6E0"]}],q=b.map(n=>n.id)});function K(n){let o=(n.match(/[؀-ۿ]/g)??[]).length,t=(n.match(/[a-zA-ZÀ-ÿ]/g)??[]).length;if(o&&o>=t)return"ar";let a=0,r=0;for(let i of n.toLowerCase().replace(/[’]/g,"'").match(/[a-zà-ÿœ']+/g)??[])et.has(i)&&a++,tt.has(i)||i.startsWith("l'")||i.startsWith("d'")||i.startsWith("qu'")?r++:nt.test(i)&&(r+=.5);return a===r?null:a>r?"en":"fr"}var et,tt,nt,N=p(()=>{"use strict";et=new Set("the and is are was were i you he she we they it this that to of in for with not but yes what have has will would can your my".split(" ")),tt=new Set("le la les des du de un une et est sont je tu il elle nous vous ils elles ce cette c'est pas pour que qui avec dans sur au aux mais tr\xE8s oui non merci bonjour votre mon".split(" ")),nt=/[éèêëàâçùûîïôœ]/});function Yt(n,o=j){let t=n;if(t=t.replace(/```[\s\S]*?```/g,". "),t=t.replace(/`[^`]*`/g,""),t=t.replace(/\*\*(.*?)\*\*/g,"$1"),t=t.replace(/__(.*?)__/g,"$1"),t=t.replace(/\*([^*]+)\*/g,"$1"),t=t.replace(/_([^_]+)_/g,"$1"),t=t.replace(/~~(.*?)~~/g,"$1"),t=t.replace(/\[([^\]]+)\]\([^)]+\)/g,"$1"),t=t.replace(/!\[([^\]]*)\]\([^)]+\)/g,"image$1 "),t=t.replace(/^#{1,6}\s+/gm,""),t=t.replace(/^[\s]*[-*+]\s+/gm,". "),t=t.replace(/^[\s]*\d+\.\s+/gm,". "),t=t.replace(/^[-=_]{3,}$/gm,""),t=t.replace(/^>\s*/gm,""),t=t.replace(/https?:\/\/\S+/g,"link"),t=t.replace(/\/\w+(\/\w+)+/g,a=>a.split("/").filter(Boolean).join(" slash ")),t=t.replace(/&/g," and "),t=t.replace(/@/g," at "),t=t.replace(/=>/g," returns "),t=t.replace(/->/g," to "),t=t.replace(/\|/g," or "),t=t.replace(/\be\.g\./gi,"for example"),t=t.replace(/\bi\.e\./gi,"that is"),t=t.replace(/\betc\./gi,"etcetera"),t=t.replace(/\bvs\.?\b/gi,"versus"),t=t.replace(/\n{2,}/g,". "),t=t.replace(/\n/g," "),t=t.replace(/\s+/g," "),t=t.replace(/\.\s*\./g,"."),t=t.replace(/\s+([.,!?])/g,"$1"),t=t.trim().replace(/^[.,:;]+\s*/,""),t.length>o){let a=t.slice(0,o),r=([...t.slice(0,o+1).matchAll(/[.!?؟](?=\s)/g)].at(-1)?.index??-1)+1;t=(r>=o/2?a.slice(0,r):a.replace(/\s+\S*$/,"")+"...")+" "+ot[K(a)??"en"]}return t}var j,ot,Z=p(()=>{"use strict";N();j=500,ot={en:"The rest is on screen.",fr:"La suite est \xE0 l'\xE9cran.",ar:"\u0627\u0644\u0628\u0627\u0642\u064A \u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629."}});import{z as d}from"zod";var G,at,Y,V=p(()=>{"use strict";G=d.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"use HH:MM, 24-hour"),at=d.object({id:d.string().regex(/^[a-z0-9][a-z0-9_-]{0,63}$/,"lowercase letters, digits, - and _"),enabled:d.boolean().default(!0),chats:d.array(d.string().min(1)).default([]),senders:d.array(d.string().min(1)).default([]),agent:d.string().min(1),prompt:d.string().max(4e3).optional(),quietHours:d.object({start:G,end:G}).optional(),autoAck:d.boolean().default(!1)}).refine(n=>n.chats.length>0||n.senders.length>0,{message:"a rule needs at least one chat or sender"}),Y=d.object({enabled:d.boolean().default(!1),secretEnv:d.string().regex(/^[A-Z_][A-Z0-9_]*$/).default("WACLI_WEBHOOK_SECRET"),batchSeconds:d.number().int().min(0).max(600).default(20),timezone:d.string().optional(),allowAutoAck:d.boolean().default(!1),describeMedia:d.boolean().default(!0),wacli:d.object({bin:d.string().default("wacli"),account:d.string().optional(),store:d.string().optional()}).default({}),rules:d.array(at).default([])}).default({})});var _t={};se(_t,{INTEGRATION_KINDS:()=>mt,approvalsConfigSchema:()=>re,callsSchema:()=>oe,cameraBotSchema:()=>ne,daemonConfigSchema:()=>ie,eventSubscriptionSchema:()=>te,expandEnvVars:()=>w,loadDaemonConfig:()=>Tt,requestsConfigSchema:()=>ae,validateWorkspaces:()=>Ct});import{z as e}from"zod";import{readFileSync as X,existsSync as x}from"fs";import{resolve as S}from"path";function rt(n){let o=S(n,".env");if(!x(o))return;let t=X(o,"utf-8");for(let a of t.split(`
4
+ `)){let r=a.trim();if(!r||r.startsWith("#"))continue;let i=r.indexOf("=");if(i===-1)continue;let l=r.slice(0,i).trim(),c=r.slice(i+1).trim();process.env[l]||(process.env[l]=c)}}function w(n){if(typeof n=="string")return n.replace(/\$\{(\w+)\}/g,(o,t)=>process.env[t]||"");if(Array.isArray(n))return n.map(w);if(n!==null&&typeof n=="object"){let o={};for(let[t,a]of Object.entries(n))o[t]=w(a);return o}return n}function $t(n,o){let t=[],a=new Set;for(let r of n){let i=r.path.join("."),l=/^channels\.telegram\.accounts\.([^.]+)\.token$/.exec(i);if(l&&r.message.toLowerCase().includes("required")){let c=l[1],f=`tg:${c}`;if(a.has(f))continue;a.add(f),t.push(`Hint: Telegram account "${c}" is enabled but has no bot token.
5
+ Either:
6
+ A) Open ${o} and set channels.telegram.accounts.${c}.token to your bot token (or "\${TG_${c.toUpperCase()}_BOT_TOKEN}" + the matching .env entry).
7
+ B) If you don't need Telegram on this instance, remove the entire "telegram" block under "channels" (or set channels.telegram.enabled to false AND drop accounts.${c}).`)}}return t}function Tt(n){let o=n?[n]:[S(process.cwd(),"agentx.json"),S(process.cwd(),".agentx/config.json")];rt(process.cwd());let t,a;for(let c of o)if(x(c)){t=X(c,"utf-8"),a=c;break}if(!t||!a)throw new Error(`No config found. Create agentx.json or .agentx/config.json
8
+ Searched: ${o.join(", ")}`);let r;try{r=JSON.parse(t)}catch(c){throw new Error(`Invalid JSON in ${a}: ${c.message}`)}let i=w(r),l=ie.safeParse(i);if(!l.success){let c=l.error.issues.map(A=>` ${A.path.join(".")}: ${A.message}`).join(`
9
+ `),f=$t(l.error.issues,a),k=f.length?`
10
+
11
+ ${f.join(`
12
+
13
+ `)}`:"";throw new Error(`Config validation failed (${a}):
14
+ ${c}${k}`)}return l.data}function Ct(n){let o=[];for(let[t,a]of Object.entries(n.agents)){if(!x(a.workspace)){o.push(`Agent "${t}": workspace not found at ${a.workspace}`);continue}if(a.tier==="claude-code"){let l=S(a.workspace,".claude");x(l)||o.push(`Agent "${t}": no .claude/ directory in workspace ${a.workspace}. Claude Code native features (hooks, MCP, skills) won't be available.`)}let r=a.provider||"claude",i=n.providers[r];!["claude-code","codex-cli","opencode"].includes(a.tier)&&(!i||!i.apiKey)&&o.push(`Agent "${t}": provider "${r}" has no API key configured. Set providers.${r}.apiKey in config or use a CLI-backed tier ("claude-code", "codex-cli", or "opencode").`)}for(let[t,a]of Object.entries(n.crons))n.agents[a.agent]||o.push(`Cron "${t}": references unknown agent "${a.agent}"`);if(n.channels.telegram.enabled)for(let[t,a]of Object.entries(n.channels.telegram.accounts))n.agents[a.agentBinding]||o.push(`Telegram account "${t}": references unknown agent "${a.agentBinding}"`);return o}var it,st,lt,ut,ct,dt,mt,J,Q,y,ee,te,pt,ft,ne,gt,bt,ht,yt,xt,St,wt,kt,vt,oe,jt,At,Et,ae,re,ie,Rt=p(()=>{$();_();z();W();U();Z();V();it=e.object({apiKey:e.string().optional(),defaultModel:e.string().optional(),baseUrl:e.string().optional(),thinking:e.boolean().optional()}),st=e.object({type:e.literal("stdio").optional(),command:e.string(),args:e.array(e.string()).default([]),env:e.record(e.string(),e.string()).optional()}),lt=e.object({type:e.literal("http"),url:e.string().url(),headers:e.record(e.string(),e.string()).optional()}),ut=e.union([lt,st]),ct=e.object({tokenEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),privateAppTokenEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),apiKeyEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),refreshTokenEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),clientIdEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),clientSecretEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),auth:e.literal("keyring").optional(),sessionDir:e.string().optional()}).strict(),dt=e.object({kind:e.string().min(1),label:e.string().min(1),credentials:ct.default({}),metadata:e.record(e.string(),e.union([e.string(),e.number(),e.boolean()])).default({}),enabled:e.boolean().default(!0)}),mt=["telegram-bot","whatsapp","gitlab-user","github-user","gmail","hotmail","smtp","hubspot","salesforce","pipedrive","odoo","trello","linear","asana","jira","notion","stripe","sentry","vercel","twilio","custom"],J=e.enum(["system","elevenlabs"]),Q=e.union([e.string(),e.record(e.string(),e.string())]),y=e.string().superRefine((n,o)=>{let t=H(n);t&&o.addIssue({code:e.ZodIssueCode.custom,message:`shortcut ${t}`})}),ee=e.object({provider:J.optional(),system:Q.optional(),fallbacks:e.array(e.string().min(1)).optional(),elevenlabsVoiceId:e.string().optional(),gender:e.enum(["female","male","neutral"]).optional(),style:e.string().optional(),intro:e.string().optional(),narrate:e.enum(["off","on","all"]).optional(),rate:e.number().min(.75).max(1.5).optional(),priority:e.enum(["high","normal","low"]).optional(),hotkey:y.optional()}),te=e.object({kinds:e.array(e.string().min(1)).min(1),agents:e.array(e.string().min(1)).optional(),nodes:e.array(e.string().min(1)).optional(),match:e.string().min(1).optional(),delivery:e.enum(["pull","digest","wake"]).default("pull"),maxPerHour:e.number().int().min(1).max(60).default(4)}),pt=e.object({name:e.string(),workspace:e.string(),tier:e.enum(["claude-code","codex-cli","opencode","sdk","orchestrator"]).default("claude-code"),provider:e.string().optional(),model:e.string().optional(),systemPrompt:e.string().optional(),mentions:e.array(e.string()).default([]),intents:e.array(e.string()).default([]),maxDelegationDepth:e.number().int().min(0).max(50).default(5),mcp:e.record(e.string(),ut).optional(),codegraph:e.boolean().default(!1),contextStrategy:e.enum(["layered","planner"]).optional(),contextReferences:e.boolean().default(!1),richMessages:e.boolean().default(!0),maxConcurrent:e.number().default(1),maxExecutionMinutes:e.number().int().min(1).max(240).default(20),preSpawnTimeoutSec:e.number().int().min(10).max(3600).default(300),drainTimeoutSeconds:e.number().int().min(0).max(86400).optional(),permissionMode:e.string().default("default"),billing:e.enum(["subscription","api"]).default("subscription"),toolUseRequired:e.array(e.string()).default([]),gitlabAutoReply:e.boolean().optional(),persistentProcess:e.boolean().default(!1),queueMode:e.enum(["collect","followup","drop"]).default("collect"),heartbeat:e.object({enabled:e.boolean().default(!1),intervalMinutes:e.number().default(30),prompt:e.string().default("Check inbox, pending tasks, and system health. Report anything that needs attention."),channel:e.string().default("heartbeat")}).default({}),access:e.enum(["private","public"]).default("private"),admin:e.boolean().optional(),subscriptions:e.array(te).default([]),integrations:e.array(dt).default([]),voice:ee.optional(),presence:e.object({color:e.string().regex(/^#[0-9a-fA-F]{6}$/).optional(),palette:e.enum(q).optional(),initial:e.string().max(2).optional(),label:e.string().optional(),allowActions:e.boolean().optional()}).optional()}),ft=e.object({token:e.string(),agentBinding:e.string(),allowFrom:e.array(e.string()).optional(),pollInbound:e.boolean().default(!0)}),ne=e.object({frameIntervalSeconds:e.number().int().min(0).max(3600).default(0),maxSessionMinutes:e.number().int().min(1).max(240).default(10),maxFrameEdge:e.number().int().min(160).max(3840).default(1024),keepFrames:e.boolean().default(!1)}).default({}),gt=e.object({telegram:e.object({enabled:e.boolean().default(!1),accounts:e.record(e.string(),ft).default({}),policy:e.object({dm:e.enum(["pair","block"]).default("pair"),group:e.enum(["mention-required","all"]).default("mention-required"),allowFrom:e.array(e.string()).optional()}).default({})}).default({}),whatsapp:e.object({enabled:e.boolean().default(!1),sessionDir:e.string().default(".agentx/whatsapp-sessions"),defaultAgent:e.string().optional(),allowFrom:e.array(e.string()).optional(),routes:e.array(e.object({contact:e.string().optional(),group:e.string().optional(),agent:e.string()})).default([]),ingest:e.object({enabled:e.boolean().default(!1),mode:e.enum(["metadata-only","messages"]).default("metadata-only"),allowContacts:e.array(e.string()).default([]),allowGroups:e.array(e.string()).default([]),denyContacts:e.array(e.string()).default([]),denyGroups:e.array(e.string()).default([]),messageCap:e.number().int().min(1).max(500).default(50),historyDays:e.number().int().min(1).max(365).default(30),contactRefreshDays:e.number().int().min(1).max(90).default(7),throttle:e.object({minMsBetweenCalls:e.number().int().min(100).default(1500),maxCallsPerMinute:e.number().int().min(1).default(20),maxChatsPerSweep:e.number().int().min(1).default(25)}).default({}),retentionDays:e.number().int().min(0).default(0)}).default({})}).default({}),gitlab:e.object({enabled:e.boolean().default(!1),webhookPort:e.number().default(18810),webhookSecret:e.string().optional(),host:e.string().default("https://gitlab.com"),token:e.string().optional(),autoReplyLegacy:e.boolean().default(!0),routes:e.array(e.object({project:e.string(),agent:e.string()})).default([]),agentMappings:e.array(e.object({agentId:e.string(),gitlabUsernames:e.array(e.string()).default([]),keywords:e.array(e.string()).default([]),token:e.string().optional(),node:e.string().optional()})).default([]),agentUsernamePrefixes:e.array(e.string().min(1)).default([])}).default({}),github:e.object({enabled:e.boolean().default(!1),autoReplyLegacy:e.boolean().default(!0),token:e.string().optional(),tokenFile:e.string().optional(),appId:e.number().optional(),clientId:e.string().optional(),privateKeyFile:e.string().optional(),webhookSecret:e.string().optional(),routes:e.array(e.object({repo:e.string(),agent:e.string()})).default([]),agentMappings:e.array(e.object({agentId:e.string(),githubUsernames:e.array(e.string()).default([]),token:e.string().optional(),tokenFile:e.string().optional(),node:e.string().optional()})).default([])}).default({}),ntfy:e.object({enabled:e.boolean().default(!1),server:e.string().default("https://ntfy.sh"),topic:e.string().optional(),token:e.string().optional(),defaultPriority:e.number().int().min(1).max(5).default(3),defaultTitle:e.string().optional()}).default({}),push:e.object({enabled:e.boolean().default(!1),keysFile:e.string().default(".agentx/push-keys.json"),subject:e.string().regex(/^(mailto:|https:\/\/)/,"must start with mailto: or https://").optional(),relayTo:e.string().optional(),ttlSeconds:e.number().int().min(0).max(2419200).default(86400),keepRecent:e.number().int().min(0).max(1e3).default(50),allowedHosts:e.array(e.string().min(1)).default(["fcm.googleapis.com","push.services.mozilla.com","push.apple.com","notify.windows.com"])}).default({}),webrtc:e.object({enabled:e.boolean().default(!1),stunServers:e.array(e.string()).default(["stun:stun.l.google.com:19302"]),turnServers:e.array(e.object({urls:e.string(),username:e.string().optional(),credential:e.string().optional()})).default([]),allowedCallers:e.array(e.string()).default([]),ringNotify:e.array(e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()})).default([]),callUrlBase:e.string().optional(),bot:e.object({enabled:e.boolean().default(!1),defaultAgentId:e.string().optional(),whisperBackend:e.enum(["auto","mlx","openai"]).default("auto"),whisperModel:e.string().optional(),whisperLanguage:e.string().default("auto"),mlxBinary:e.string().optional(),transcriptChannel:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional(),maxCallMinutes:e.number().int().min(1).max(240).default(30)}).default({}),camera:e.object({width:e.number().int().min(160).max(3840).default(1280),height:e.number().int().min(120).max(2160).default(720),frameRate:e.number().int().min(1).max(60).default(15),maxSeconds:e.number().int().min(10).max(7200).default(600),bot:ne}).default({})}).default({})}),bt=e.object({enabled:e.boolean().default(!0),schedule:e.string(),timezone:e.string().default("UTC"),agent:e.string(),prompt:e.string().default(""),command:e.string().optional(),timeout:e.number().default(600),model:e.string().optional(),maxOutputTokens:e.number().int().min(50).max(8e3).optional(),autonomy:D.optional(),onError:e.union([e.enum(["log","notify","disable"]),e.array(e.enum(["log","notify","disable"]))]).default("log").transform(n=>Array.isArray(n)?n:[n]),notify:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional(),fireToken:e.string().optional(),createdBy:e.string().optional(),approval:e.object({action:e.enum(["create","delete"]),requestedBy:e.string(),requestedAt:e.string()}).optional()}).refine(n=>!!(n.command?.trim()||n.prompt?.trim()),{message:"a cron needs either a prompt (dispatch an agent) or a command (run it directly)"}).refine(n=>!(n.command?.trim()&&n.autonomy&&n.autonomy!=="act"),{message:"autonomy applies to agent routines; a command cron runs no agent (remove autonomy or the command)"}),ht=e.object({name:e.string(),triggers:e.array(e.object({pattern:e.string(),channel:e.string().optional()})),allowedContacts:e.array(e.string()).optional(),agent:e.string(),prompt:e.string(),schedule:e.string().optional(),timezone:e.string().default("UTC"),notify:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional()}),yt=e.object({url:e.string(),name:e.string(),token:e.string().optional()}),xt=e.object({name:e.string(),agent:e.string(),enabled:e.boolean().default(!0)}),St=e.object({enabled:e.boolean().default(!1),peers:e.array(yt).default([]),inboxes:e.array(xt).default([]),discovery:e.enum(["static","mdns"]).default("static"),healthCheck:e.object({interval:e.number().default(60),timeout:e.number().default(10)}).default({}),feed:e.object({enabled:e.boolean().default(!0),skipTypes:e.array(e.string().min(1)).default(["task:step"])}).default({}),delegation:e.object({asyncWhenHuman:e.boolean().default(!0),timeoutMinutes:e.number().int().min(1).max(240).default(30)}).default({})}),wt=e.object({enabled:e.boolean().default(!1),baseDir:e.string().default(".agentx/graph"),draftAgent:e.string().optional(),reviewAgent:e.string().optional(),autoApproveStructure:e.enum(["strict","extend-leaves","any"]).default("extend-leaves"),autoApproveConfidence:e.number().min(0).max(1).default(1),classifierModel:e.string().default("claude-haiku-4-5-20251001"),retrievalWeights:e.object({graph:e.number().min(0).default(.6),bm25:e.number().min(0).default(.4)}).default({})}).default({}),kt=e.object({mode:e.enum(["off","shadow","active"]).default("off"),backend:e.string().optional(),model:e.string().optional(),timeoutMs:e.number().int().min(100).default(1e4),temperature:e.number().min(.01).default(1),explore:e.number().min(0).max(1).default(.15),holdout:e.number().min(0).max(1).optional()}).default({}),vt=e.object({enabled:e.boolean().default(!1),dbPath:e.string().default(".agentx/decisions/decisions.sqlite"),redactState:e.boolean().default(!1),keepStateRows:e.number().int().min(0).default(2e3),defaultBackend:e.string().default("local"),backends:e.object({local:e.object({provider:e.string().default("claude-code"),model:e.string().default("claude-haiku-4-5-20251001"),structureMode:e.enum(["auto","tool","text"]).default("auto"),normalizeProbabilities:e.boolean().default(!0),nRetryMalformedStructure:e.number().int().min(0).max(3).default(1),maxStateChars:e.number().int().min(500).default(24e3)}).default({}),simpleJev:e.object({baseUrl:e.string().default("http://127.0.0.1:8000/v1"),model:e.string().optional(),apiKeyEnv:e.string().optional(),timeoutMs:e.number().int().min(100).default(3e4),maxStateChars:e.number().int().min(500).default(6e3),maxChoiceOptions:e.number().int().min(2).max(255).default(50)}).default({}),jev:e.object({baseUrl:e.string().default("https://openrouter.ai/api/alpha"),path:e.string().default("/decisions"),model:e.string().default("jev-latest"),apiKeyEnv:e.string().default("OPENROUTER_API_KEY"),timeoutMs:e.number().int().min(100).default(3e4),maxStateChars:e.number().int().min(500).default(9e4),maxChoiceOptions:e.number().int().min(2).max(255).default(255)}).default({}),typesafe:e.object({baseUrl:e.string().default("https://api.typesafe.ai/v1"),path:e.string().default("/systemone"),model:e.string().default("jev-latest"),apiKeyEnv:e.string().default("TYPESAFE_API_KEY"),timeoutMs:e.number().int().min(100).default(3e4),maxStateChars:e.number().int().min(500).default(9e4),maxChoiceOptions:e.number().int().min(2).max(255).default(255)}).default({})}).default({}),seats:e.record(e.string(),kt).default({}),routing:e.object({cheapModel:e.string().optional(),cheapModels:e.object({"claude-code":e.string().optional(),"codex-cli":e.string().optional()}).optional()}).default({})}).default({}),oe=e.object({allow:e.array(e.string()).default([]),maxPerHour:e.number().int().min(1).max(60).default(3),ringSeconds:e.number().int().min(10).max(300).default(45),maxCallMinutes:e.number().int().min(1).max(240).default(30),ringSound:e.string().regex(/^[\w -]+$/).default("Submarine"),summary:e.boolean().default(!0)}).default({}),jt=e.object({longTaskThreshold:e.number().default(30),destination:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional(),channel:e.string().optional(),on:e.object({taskComplete:e.boolean().default(!0),taskError:e.boolean().default(!0),taskQueued:e.boolean().default(!1)}).default({}),local:e.object({banner:e.boolean().default(!0),sound:e.boolean().default(!0),soundName:e.string().regex(/^[\w -]+$/).default("Glass"),volume:e.number().min(0).max(1).default(.4),icon:e.string().optional()}).default({})}).default({}),At=e.object({x:e.number(),y:e.number(),width:e.number().positive(),height:e.number().positive()}),Et=e.object({maxPixels:e.number().int().positive().default(12e5),timeoutMs:e.number().int().positive().default(5e3),intervalMs:e.number().int().positive().default(100),changeThreshold:e.number().min(0).max(1).default(.015),stableMs:e.number().int().nonnegative().default(400),regions:e.record(e.string().regex(/^[a-z][\w-]*$/),At).default({}),buffer:e.object({enabled:e.boolean().default(!1),seconds:e.number().positive().max(120).default(10),fps:e.number().positive().max(10).default(2),region:e.string().default("screen"),maxPixels:e.number().int().positive().default(3e5)}).default({})}).default({}),ae=e.object({enabled:e.boolean().default(!1),channels:e.array(e.string().min(1)).default([]),from:e.array(e.string().regex(/^[a-z0-9_-]+:\S+$/i,"use channel:id, for example telegram:123456789")).default([]),staleAfterHours:e.number().positive().max(24*365).default(24),retentionDays:e.number().positive().max(3650).default(90)}).default({}),re=e.object({defaultExpiryDays:e.number().positive().max(365).default(3),maxExpiryDays:e.number().positive().max(365).default(30),laterHours:e.number().positive().max(24*30).default(24),notifyAgent:e.boolean().default(!0),digest:e.object({enabled:e.boolean().default(!0),time:e.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"use HH:MM, 24-hour").default("09:00"),timezone:e.string().refine(n=>{try{return new Intl.DateTimeFormat("en-US",{timeZone:n}),!0}catch{return!1}},"unknown timezone").optional(),destination:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional()}).default({}),popup:e.object({enabled:e.boolean().default(!1),style:e.enum(["card","dialog"]).default("card"),theme:e.enum(["system","light","dark"]).default("system"),speak:e.boolean().default(!0),voice:e.string().regex(/^[\w .()-]+$/,"a voice name, as `say -v '?'` lists them").optional(),sound:e.string().regex(/^[\w -]*$/,"a sound name, like chime or Glass").default("chime"),volume:e.number().min(0).max(1).default(.4),timeoutSeconds:e.number().int().min(10).max(3600).default(600)}).default({}),checkin:e.object({enabled:e.boolean().default(!1),times:e.array(e.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"use HH:MM, 24-hour")).default(["11:00","14:00","17:00"]),dailyAt:e.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"use HH:MM, 24-hour").default("09:00"),timezone:e.string().refine(n=>{try{return new Intl.DateTimeFormat("en-US",{timeZone:n}),!0}catch{return!1}},"unknown timezone").optional(),lists:e.array(e.string().min(1)).default(["Reminders"]),agent:e.string().min(1).optional(),dueWithinHours:e.number().positive().max(24*30).default(24),maxAsksPerPass:e.number().int().min(1).max(20).default(5),composeTimeoutSeconds:e.number().int().min(30).max(3600).default(300)}).default({})}).default({}),ie=e.object({node:e.object({id:e.string(),name:e.string(),bind:e.string().default("127.0.0.1:18800"),defaultAgent:e.string().optional()}),providers:e.record(e.string(),it).default({}),agents:e.record(e.string(),pt).default({}),channels:gt.default({}),crons:e.record(e.string(),bt).default({}),services:e.record(e.string(),ht).default({}),notifications:jt,calls:oe,whatsappTriage:Y,approvals:re,shutdown:e.object({drainTimeoutSeconds:e.number().int().min(0).max(86400).optional(),restart:e.object({allowBy:e.string().optional(),window:e.string().regex(/^\d{1,2}:\d{2}$/,"window must be HH:MM").optional(),windowWaitMinutes:e.number().int().min(1).max(1440).default(180),forbidOnTimeoutRestart:e.boolean().default(!1)}).default({})}).default({}),resume:e.object({enabled:e.boolean().default(!0),maxAgeMinutes:e.number().int().positive().default(30),maxAttempts:e.number().int().min(0).default(1),reportOnlyChannels:e.array(e.string()).default([]),directChannels:e.array(e.string()).default([]),crashLoop:e.object({restarts:e.number().int().positive().default(3),windowMinutes:e.number().positive().default(10)}).default({})}).default({}),requests:ae,reminders:e.object({enabled:e.boolean().default(!1),lists:e.array(e.string().min(1)).default(["AgentX"]),pollSeconds:e.number().int().min(15).default(60),lookbackHours:e.number().positive().default(24),command:e.string().min(1).default("remindctl")}).default({}),demo:e.object({startupTimeoutSeconds:e.number().int().positive().max(3600).optional()}).default({}),events:e.object({ringSize:e.number().int().min(1).max(1e5).default(1e3)}).default({}),screen:Et,mesh:St.default({}),meshVoices:e.record(e.string(),ee.omit({rate:!0,priority:!0,hotkey:!0}).extend({name:e.string().optional()})).default({}),voice:e.object({provider:J.default("system"),fallback:e.enum(["system","none"]).default("system"),system:Q.optional(),locale:e.string().default("en"),listener:e.string().optional(),stt:e.enum(["auto","elevenlabs","local"]).default("auto"),allowUnmeasured:e.boolean().default(!1),spokenMaxChars:e.number().int().min(300).max(1500).default(j),localStt:e.enum(["mlx-whisper","parakeet"]).default("mlx-whisper"),endOfTurn:e.enum(["vad","volume"]).default("vad"),hotkeys:e.object({talk:y.default(h.talk),stop:y.default(h.stop),paste:y.default(h.paste)}).default({}),card:e.object({timeout:e.number().min(0).max(600).default(30),maxHeight:e.number().min(120).max(800).default(320)}).default({})}).default({}),business:E.optional(),boards:T,dashboard:C,graph:wt,decisions:vt,workflows:e.object({enabled:e.boolean().default(!1),dir:e.string().default(".agentx/workflows"),n8n:e.object({baseUrl:e.string().default(""),apiKey:e.string().default("")}).default({baseUrl:"",apiKey:""}),matching:e.object({enabled:e.boolean().default(!1),mode:e.enum(["suggest","auto"]).default("suggest"),autoRunThreshold:e.number().min(0).max(1).default(.85),suggestThreshold:e.number().min(0).max(1).default(.65)}).default({}),editor:e.enum(["disabled","readonly","edit"]).default("edit")}).default({}),procedures:e.object({enabled:e.boolean().default(!0),dir:e.string().default(".agentx/procedures"),extraction:e.object({enabled:e.boolean().default(!1),onTaskCompletion:e.boolean().default(!1),minOccurrences:e.number().int().min(2).default(3),sinceDays:e.number().int().min(1).default(7),maxClusters:e.number().int().min(1).default(5),via:e.string().optional()}).default({}),injection:e.object({enabled:e.boolean().default(!0),maxProcedures:e.number().int().min(1).default(2),minScore:e.number().min(0).max(1).default(.5)}).default({})}).default({}),webhooks:e.array(e.object({id:e.string().regex(/^[a-z0-9][a-z0-9_-]*$/,"webhook id must be lowercase slug"),source:e.string().min(1),agentId:e.string(),secretEnv:e.string().optional(),description:e.string().optional(),enabled:e.boolean().default(!0),node:e.string().optional(),triggers:e.record(e.string(),e.string()).optional(),defaultWorkflow:e.string().optional()})).default([]),session:e.object({staleMinutes:e.number().int().min(1).max(1440).default(720),maxTurnsPerSession:e.number().int().min(2).max(200).default(40),tierTwoThresholdTokens:e.number().int().min(5e4).max(2e5).default(18e4),contextStrategy:e.enum(["layered","planner"]).default("layered"),maxClaudeCodeDispatchesPerHour:e.number().int().min(1).max(1e4).default(80),maxClaudeCodeDispatchesPer5h:e.number().int().min(1).max(5e4).default(180),continuityStateTurns:e.number().int().min(0).max(5).default(0)}).default({}),plugins:e.array(e.string()).default([]),processPool:e.object({maxIdleSeconds:e.number().int().min(5).max(86400).default(30),maxAgeSeconds:e.number().int().min(60).max(86400).default(2700),sweepIntervalSeconds:e.number().int().min(1).max(300).default(5)}).default({})})});export{It as a,Pt as b,_ as c,D as d,zt as e,Ft as f,Ht as g,z as h,Xe as i,qt as j,h as k,W as l,b as m,q as n,Qe as o,Kt as p,U as q,K as r,N as s,Yt as t,Z as u,Y as v,V as w,mt as x,te as y,ne as z,oe as A,ae as B,re as C,ie as D,w as E,Tt as F,Ct as G,_t as H,Rt as I};
15
+ //# sourceMappingURL=chunk-42Y3BXXS.js.map