agentix-cli 0.125.1 → 0.126.2

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 (95) hide show
  1. package/dist/absorb-eval-5Y5IZWW2.js +2 -0
  2. package/dist/{agent-YJFWFQ6A.js → agent-WJTYM5HR.js} +2 -2
  3. package/dist/{board-dashboard-SPYYHH54.js → board-dashboard-DQR2OSV7.js} +2 -2
  4. package/dist/{board-dashboard-SPYYHH54.js.map → board-dashboard-DQR2OSV7.js.map} +1 -1
  5. package/dist/{chunk-NW7RVE57.js → chunk-2C3X6DVD.js} +2 -2
  6. package/dist/chunk-2W3X6H7Z.js +51 -0
  7. package/dist/chunk-2W3X6H7Z.js.map +1 -0
  8. package/dist/chunk-3PGPN323.js +2 -0
  9. package/dist/chunk-3PGPN323.js.map +1 -0
  10. package/dist/{chunk-CECHWYJ2.js → chunk-4VVHGR7H.js} +1 -1
  11. package/dist/chunk-4VVHGR7H.js.map +1 -0
  12. package/dist/{chunk-UOAJWNRF.js → chunk-D6SWAB5J.js} +6 -6
  13. package/dist/chunk-EO4DEEXL.js +2 -0
  14. package/dist/chunk-EO4DEEXL.js.map +1 -0
  15. package/dist/{chunk-INLKJEEN.js → chunk-FVG2BADS.js} +2 -2
  16. package/dist/{chunk-YKYMGIQ5.js → chunk-GUQDPA6R.js} +2 -2
  17. package/dist/{chunk-5RE2B5YQ.js → chunk-JIXNSA67.js} +2 -2
  18. package/dist/{chunk-BN5QMNON.js → chunk-JUIL2EW3.js} +2 -2
  19. package/dist/{chunk-ITATBKUL.js → chunk-LVV7JBHM.js} +2 -2
  20. package/dist/{chunk-FX3D7YON.js → chunk-MCI3DIWW.js} +2 -2
  21. package/dist/{chunk-4WKBK7EQ.js → chunk-O4XEQTEN.js} +2 -2
  22. package/dist/chunk-QX2B4TJU.js +3 -0
  23. package/dist/chunk-QX2B4TJU.js.map +1 -0
  24. package/dist/{chunk-IS4DA5CR.js → chunk-UUVFH7BO.js} +4 -4
  25. package/dist/chunk-UUVFH7BO.js.map +1 -0
  26. package/dist/{chunk-VHT7HESZ.js → chunk-VXKNB4AW.js} +2 -2
  27. package/dist/{chunk-5VWOK3GQ.js → chunk-WUDVBPQV.js} +2 -2
  28. package/dist/{chunk-WX47PYHL.js → chunk-YNA5T43U.js} +2 -2
  29. package/dist/chunk-Z7XXUYBB.js +894 -0
  30. package/dist/chunk-Z7XXUYBB.js.map +1 -0
  31. package/dist/chunk-ZQWWMAMJ.js +105 -0
  32. package/dist/chunk-ZQWWMAMJ.js.map +1 -0
  33. package/dist/cli.js +1 -1
  34. package/dist/{context-planner-BKHPKDX5.js → context-planner-3JDA7FNR.js} +2 -2
  35. package/dist/extract-json-7775Q7KO.js +2 -0
  36. package/dist/graph-5ZJ7YACP.js +2 -0
  37. package/dist/hub-53YQQCVA.js +2 -0
  38. package/dist/index.d.ts +45 -1
  39. package/dist/index.js +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/load-NK3MIYXP.js +2 -0
  42. package/dist/{program-JNRKGK3U.js → program-LGCT7FFJ.js} +260 -271
  43. package/dist/program-LGCT7FFJ.js.map +1 -0
  44. package/dist/promote-MQYJMGGZ.js +2 -0
  45. package/dist/push-bridge-325SXDGN.js +1 -1
  46. package/dist/{query-RV6SHTRN.js → query-DNJONEKC.js} +2 -2
  47. package/dist/registry-5A3SLBVJ.js +2 -0
  48. package/dist/registry-5A3SLBVJ.js.map +1 -0
  49. package/dist/{request-planner-2G73AJ4S.js → request-planner-XYHM26CO.js} +2 -2
  50. package/dist/{review-candidates-S34UICQD.js → review-candidates-XRBAMRBH.js} +2 -2
  51. package/dist/{routing-K2LAUFRL.js → routing-OMIWZKNC.js} +2 -2
  52. package/dist/routing-OMIWZKNC.js.map +1 -0
  53. package/dist/{seat-ZJT5T2NO.js → seat-LKBZ6SDS.js} +2 -2
  54. package/dist/seat-LKBZ6SDS.js.map +1 -0
  55. package/dist/{select-Y23SKHCJ.js → select-BSC3TFMZ.js} +2 -2
  56. package/dist/types-ROL44T62.js +2 -0
  57. package/dist/types-ROL44T62.js.map +1 -0
  58. package/dist/wiki-BT3H2WCD.js +2 -0
  59. package/dist/wiki-BT3H2WCD.js.map +1 -0
  60. package/package.json +1 -1
  61. package/dist/chunk-BFCNSZHN.js +0 -745
  62. package/dist/chunk-BFCNSZHN.js.map +0 -1
  63. package/dist/chunk-CECHWYJ2.js.map +0 -1
  64. package/dist/chunk-IS4DA5CR.js.map +0 -1
  65. package/dist/chunk-XSDUORMZ.js +0 -105
  66. package/dist/chunk-XSDUORMZ.js.map +0 -1
  67. package/dist/program-JNRKGK3U.js.map +0 -1
  68. package/dist/promote-GXZ7BLVG.js +0 -2
  69. package/dist/registry-PPJO5I6J.js +0 -2
  70. package/dist/types-NZOBHQGS.js +0 -2
  71. package/dist/wiki-WJM5XNFS.js +0 -2
  72. /package/dist/{agent-YJFWFQ6A.js.map → absorb-eval-5Y5IZWW2.js.map} +0 -0
  73. /package/dist/{promote-GXZ7BLVG.js.map → agent-WJTYM5HR.js.map} +0 -0
  74. /package/dist/{chunk-NW7RVE57.js.map → chunk-2C3X6DVD.js.map} +0 -0
  75. /package/dist/{chunk-UOAJWNRF.js.map → chunk-D6SWAB5J.js.map} +0 -0
  76. /package/dist/{chunk-INLKJEEN.js.map → chunk-FVG2BADS.js.map} +0 -0
  77. /package/dist/{chunk-YKYMGIQ5.js.map → chunk-GUQDPA6R.js.map} +0 -0
  78. /package/dist/{chunk-5RE2B5YQ.js.map → chunk-JIXNSA67.js.map} +0 -0
  79. /package/dist/{chunk-BN5QMNON.js.map → chunk-JUIL2EW3.js.map} +0 -0
  80. /package/dist/{chunk-ITATBKUL.js.map → chunk-LVV7JBHM.js.map} +0 -0
  81. /package/dist/{chunk-FX3D7YON.js.map → chunk-MCI3DIWW.js.map} +0 -0
  82. /package/dist/{chunk-4WKBK7EQ.js.map → chunk-O4XEQTEN.js.map} +0 -0
  83. /package/dist/{chunk-VHT7HESZ.js.map → chunk-VXKNB4AW.js.map} +0 -0
  84. /package/dist/{chunk-5VWOK3GQ.js.map → chunk-WUDVBPQV.js.map} +0 -0
  85. /package/dist/{chunk-WX47PYHL.js.map → chunk-YNA5T43U.js.map} +0 -0
  86. /package/dist/{context-planner-BKHPKDX5.js.map → context-planner-3JDA7FNR.js.map} +0 -0
  87. /package/dist/{query-RV6SHTRN.js.map → extract-json-7775Q7KO.js.map} +0 -0
  88. /package/dist/{registry-PPJO5I6J.js.map → graph-5ZJ7YACP.js.map} +0 -0
  89. /package/dist/{routing-K2LAUFRL.js.map → hub-53YQQCVA.js.map} +0 -0
  90. /package/dist/{seat-ZJT5T2NO.js.map → load-NK3MIYXP.js.map} +0 -0
  91. /package/dist/{types-NZOBHQGS.js.map → promote-MQYJMGGZ.js.map} +0 -0
  92. /package/dist/{wiki-WJM5XNFS.js.map → query-DNJONEKC.js.map} +0 -0
  93. /package/dist/{request-planner-2G73AJ4S.js.map → request-planner-XYHM26CO.js.map} +0 -0
  94. /package/dist/{review-candidates-S34UICQD.js.map → review-candidates-XRBAMRBH.js.map} +0 -0
  95. /package/dist/{select-Y23SKHCJ.js.map → select-BSC3TFMZ.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import{a as Re}from"./chunk-GTJIKXDB.js";import{q as Kt}from"./chunk-S2GAEH2F.js";import{a as ne,b as w}from"./chunk-BGG3ZSMW.js";import{b as Jt}from"./chunk-WCXXXAHV.js";import{f as Yt,g as Ae,i as V,j as q,l as Zt}from"./chunk-AKLZ4YO2.js";import{t as Xt,u as Gt}from"./chunk-YKYMGIQ5.js";import{d as Ht,e as zt}from"./chunk-AQASR6KR.js";import{G as Nt,I as te,J as ve,L as $e,b as Se}from"./chunk-ITATBKUL.js";import{a as Vt,b as qt,d as Bt}from"./chunk-Y4CYQV7G.js";import{a as Lt,b as Ot}from"./chunk-SHEUCITK.js";import{g as Mt,h as jt,i as Wt,k as Ft,l as Ut}from"./chunk-QQYXYJOG.js";import{q as Pt}from"./chunk-5DFUUYEA.js";import{a as Ct,b as Dt}from"./chunk-WMTGAVPW.js";import{A as Rt,B as _t,ga as xe,n as ee,na as It,o as St,oa as Et,p as vt,q as Jr,ra as Tt,y as $t,z as At}from"./chunk-46JKX6CT.js";import{f as ke,n as Zr}from"./chunk-UIBUZ2N3.js";import{a as we,h as Yr}from"./chunk-BRK6M6LA.js";import{existsSync as Qr,readdirSync as ei,readFileSync as ti,statSync as ni}from"fs";import{resolve as ri}from"path";function Qt(t,e,n=Date.now(),i=7){let r=i*864e5,s=new Map;for(let o of e){let a=s.get(o.workflowId);a?a.push(o):s.set(o.workflowId,[o])}return t.map(o=>{let a=s.get(o.id)??[],l=a.filter(f=>n-f.at<=r),c=a.filter(f=>n-f.at>r&&n-f.at<=r*2),u=l.filter(f=>f.status==="failed").length,d=a.filter(f=>f.status==="paused").length,p=a.length?Math.max(...a.map(f=>f.at)):null,g=a.length?c.length>0&&l.length===0?"dormant":l.length>0&&u*2>=l.length?"failing":l.length>0?"active":"quiet":"never";return{id:o.id,name:o.name||o.id,state:g,lastRunAt:p,recent:l.length,prior:c.length,failed:u,paused:d}}).sort((o,a)=>{let l={dormant:0,failing:1,active:2,quiet:3,never:4};return l[o.state]-l[a.state]||(a.lastRunAt??0)-(o.lastRunAt??0)})}var re=new Map;function Ea(t,e=1e3){if(!Qr(t))return[];let n=ei(t).filter(s=>s.endsWith(".jsonl")).map(s=>{let o=ri(t,s);return{path:o,mtime:ni(o).mtimeMs}}).sort((s,o)=>o.mtime-s.mtime).slice(0,e),i=new Set(n.map(s=>s.path));for(let s of re.keys())i.has(s)||re.delete(s);let r=[];for(let{path:s,mtime:o}of n){let a=re.get(s);if(a&&a.mtime===o){a.summary&&r.push(a.summary);continue}let l=ii(s,o);re.set(s,{mtime:o,summary:l}),l&&r.push(l)}return r}function ii(t,e){try{let n=ti(t,"utf-8").split(`
1
+ import{a as Re}from"./chunk-GTJIKXDB.js";import{q as Kt}from"./chunk-S2GAEH2F.js";import{a as ne,b as w}from"./chunk-BGG3ZSMW.js";import{b as Jt}from"./chunk-WCXXXAHV.js";import{f as Yt,g as Ae,i as V,j as q,l as Zt}from"./chunk-AKLZ4YO2.js";import{a as Vt,b as qt,d as Bt}from"./chunk-Y4CYQV7G.js";import{a as Lt,b as Ot}from"./chunk-SHEUCITK.js";import{g as Mt,h as jt,i as Wt,k as Ft,l as Ut}from"./chunk-QQYXYJOG.js";import{t as Xt,u as Gt}from"./chunk-GUQDPA6R.js";import{d as Ht,e as zt}from"./chunk-AQASR6KR.js";import{G as Nt,I as te,J as ve,L as $e,b as Se}from"./chunk-LVV7JBHM.js";import{q as Pt}from"./chunk-5DFUUYEA.js";import{a as Ct,b as Dt}from"./chunk-WMTGAVPW.js";import{A as Rt,B as _t,ga as xe,n as ee,na as It,o as St,oa as Et,p as vt,q as Jr,ra as Tt,y as $t,z as At}from"./chunk-46JKX6CT.js";import{f as ke,n as Zr}from"./chunk-UIBUZ2N3.js";import{a as we,h as Yr}from"./chunk-BRK6M6LA.js";import{existsSync as Qr,readdirSync as ei,readFileSync as ti,statSync as ni}from"fs";import{resolve as ri}from"path";function Qt(t,e,n=Date.now(),i=7){let r=i*864e5,s=new Map;for(let o of e){let a=s.get(o.workflowId);a?a.push(o):s.set(o.workflowId,[o])}return t.map(o=>{let a=s.get(o.id)??[],l=a.filter(f=>n-f.at<=r),c=a.filter(f=>n-f.at>r&&n-f.at<=r*2),u=l.filter(f=>f.status==="failed").length,d=a.filter(f=>f.status==="paused").length,p=a.length?Math.max(...a.map(f=>f.at)):null,g=a.length?c.length>0&&l.length===0?"dormant":l.length>0&&u*2>=l.length?"failing":l.length>0?"active":"quiet":"never";return{id:o.id,name:o.name||o.id,state:g,lastRunAt:p,recent:l.length,prior:c.length,failed:u,paused:d}}).sort((o,a)=>{let l={dormant:0,failing:1,active:2,quiet:3,never:4};return l[o.state]-l[a.state]||(a.lastRunAt??0)-(o.lastRunAt??0)})}var re=new Map;function Ea(t,e=1e3){if(!Qr(t))return[];let n=ei(t).filter(s=>s.endsWith(".jsonl")).map(s=>{let o=ri(t,s);return{path:o,mtime:ni(o).mtimeMs}}).sort((s,o)=>o.mtime-s.mtime).slice(0,e),i=new Set(n.map(s=>s.path));for(let s of re.keys())i.has(s)||re.delete(s);let r=[];for(let{path:s,mtime:o}of n){let a=re.get(s);if(a&&a.mtime===o){a.summary&&r.push(a.summary);continue}let l=ii(s,o);re.set(s,{mtime:o,summary:l}),l&&r.push(l)}return r}function ii(t,e){try{let n=ti(t,"utf-8").split(`
2
2
  `).filter(Boolean);if(!n.length)return null;let i=JSON.parse(n[0]),r=i.run?.workflowId;if(!r)return null;let s=i.run?.status??"unknown";for(let o=n.length-1;o>=0;o--){let a=JSON.parse(n[o]),l=a.status??a.run?.status;if(l){s=l;break}}return{workflowId:r,status:s,at:e}}catch{return null}}var si={failStreak:3,disabledDays:30,missedFires:2,graceMs:15*6e4},k={routines:200,summary:160,filters:6,filterValue:60,text:120},oi=(t,e,n)=>{try{return Pt(t,e,n)}catch{return null}},en=864e5;function Pa(t){let e=t.now??Date.now(),n={...si,...t.thresholds},i=t.nextFire??oi,r=[];for(let a of t.crons){let l=t.cronRuns.get(a.id)??[],c=a.timezone||"UTC",u=l.map(g=>({at:Date.parse(g.startedAt),status:g.status})),d=l[0],p={id:`cron:${a.id}`,source:"cron",kind:"schedule",name:$(a.id,k.text),trigger:{schedule:$(a.schedule,k.text),timezone:c},agent:a.agent||null,enabled:a.enabled,state:a.enabled?"enabled":"disabled",nextRunAt:a.enabled?_e(a.nextRun)??_e(i(a.schedule,new Date(e),c)):null,lastRun:d?{at:d.startedAt,status:d.status,summary:pi(d.status==="success"?void 0:d.errorSummary,k.summary)}:null,lastSuccessAt:l.find(g=>g.status==="success")?.startedAt??null,consecutiveFailures:tn(u),sampledRuns:l.length,flags:[],attention:null};p.flags=nn(p,u,a.schedule,c,null,e,n,i),r.push(rn(p))}let s=new Map(Qt(t.workflows.map(a=>({id:a.id,name:a.title})),t.workflowRuns,e).map(a=>[a.id,a])),o=new Map;for(let a of t.workflowRuns){let l=o.get(a.workflowId);l?l.push(a):o.set(a.workflowId,[a])}for(let a of t.workflows){let l=a.nodes.find(I=>I.type.startsWith("trigger."));if(!l||l.type!=="trigger.cron"&&l.type!=="trigger.hook")continue;let c=l.config??{},u=a.state||"active",d=u==="active",p=(o.get(a.id)??[]).slice().sort((I,ye)=>ye.at-I.at),g=p.map(I=>({at:I.at,status:ci(I.status)})),f=g[0],h=l.type==="trigger.cron",b=typeof c.spec=="string"?c.spec:"",C=typeof c.timezone=="string"?c.timezone:"UTC",M={id:`workflow:${a.id}`,source:"workflow",kind:h?"schedule":"event",name:$(a.title||a.id,k.text),trigger:h?{schedule:$(b,k.text),timezone:C}:{event:$(typeof c.event=="string"?c.event:"",k.text),filters:di(c.filter,a)},agent:ui(a),enabled:d,state:u,nextRunAt:h&&d&&b?_e(i(b,new Date(e),C)):null,lastRun:f?{at:new Date(f.at).toISOString(),status:f.status}:null,lastSuccessAt:(()=>{let I=g.find(ye=>ye.status==="success");return I?new Date(I.at).toISOString():null})(),consecutiveFailures:tn(g),sampledRuns:p.length,flags:[],attention:null},Q=Date.parse(a.updated||a.created||"");M.flags=h?nn(M,g,b,C,Number.isFinite(Q)?Q:null,e,n,i):ai(M,s.get(a.id)?.state==="dormant",Number.isFinite(Q)?Q:null,e,n),r.push(rn(M))}return r.sort(li).slice(0,k.routines)}function tn(t){let e=0;for(let n of t)if(!(n.status==="running"||n.status==="paused"||n.status==="unknown"))if(n.status==="failed"||n.status==="timeout")e++;else break;return e}function nn(t,e,n,i,r,s,o,a){let l=[],c=e.length?e[0].at:null;if(!t.enabled){let p=on(c,r,s,o);return p&&l.push(p),l}if(t.consecutiveFailures>=o.failStreak&&l.push({reason:"failing",detail:`${t.consecutiveFailures} failed attempts in a row`}),c===null)return l.push({reason:"never-ran",detail:"No persisted attempt"}),l;let u=new Date(c),d=null;for(let p=0;p<o.missedFires&&(d=a(n,u,i),!!d);p++)u=d;return d&&s>d.getTime()+o.graceMs&&l.push({reason:"overdue",detail:`No attempt since ${new Date(c).toISOString()}; ${o.missedFires} scheduled fires missed`}),l}function ai(t,e,n,i,r){let s=[],o=t.lastRun?Date.parse(t.lastRun.at):null;if(!t.enabled){let a=on(o,n,i,r);return a&&s.push(a),s}return t.consecutiveFailures>=r.failStreak&&s.push({reason:"failing",detail:`${t.consecutiveFailures} failed runs in a row`}),o===null?s.push({reason:"never-ran",detail:"No run recorded for this trigger"}):e&&s.push({reason:"dormant",detail:"Fired in the prior week, silent in the last one"}),s}function on(t,e,n,i){let r=Math.max(t??0,e??0);return r&&n-r<i.disabledDays*en?null:{reason:"disabled-long",detail:r?`Disabled; no activity for ${Math.floor((n-r)/en)} days`:"Disabled and never ran"}}function rn(t){let e=new Set(t.flags.map(n=>n.reason));return t.attention=e.has("failing")?"critical":e.has("overdue")||e.has("dormant")||e.has("never-ran")?"warning":e.has("disabled-long")?"info":null,t}var sn={critical:0,warning:1,info:2};function li(t,e){let n=t.attention?sn[t.attention]:3,i=e.attention?sn[e.attention]:3;return n-i||Number(e.enabled)-Number(t.enabled)||t.name.localeCompare(e.name)}function ci(t){switch(t){case"completed":case"ok":return"success";case"failed":return"failed";case"timeout":return"timeout";case"canceled":return"canceled";case"running":return"running";case"paused":return"paused";default:return"unknown"}}function ui(t){if(t.ownerAgent)return $(t.ownerAgent,k.text);let e=t.nodes.find(n=>n.type==="agent"&&typeof n.config?.agentId=="string"&&n.config.agentId);return e?$(String(e.config.agentId),k.text):null}function di(t,e){let n=[],i=e?.project;if(i&&n.push($(`project=${i}`,k.filterValue)),t&&typeof t=="object"&&!Array.isArray(t))for(let[r,s]of Object.entries(t)){let o=Array.isArray(s)?s.map(String):s==null?[]:[String(s)];o.length&&n.push($(`${r}=${o.join(",")}`,k.filterValue))}return n.slice(0,k.filters)}function _e(t){if(!t)return null;let e=t instanceof Date?t:new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function $(t,e){return t.length<=e?t:t.slice(0,e-3)+"..."}function pi(t,e){return t===void 0?void 0:$(t,e)}import{existsSync as H,readdirSync as Pi,readFileSync as Ni}from"fs";import{resolve as R}from"path";import{randomBytes as cn}from"crypto";import{existsSync as fi,mkdirSync as mi,readdirSync as hi,readFileSync as bi,renameSync as un,unlinkSync as yi,writeFileSync as wi}from"fs";import{resolve as dn}from"path";function an(t){return[...t.account?["--account",t.account]:[],...t.store?["--store",t.store]:[]]}var gi=t=>t.trim().split(`
3
3
  `).pop()?.slice(0,300)||"no output";async function ln(t,e,n,i=Re){let r=await i(t.bin,[...an(t),"send","text","--to",e,"--message",n,"--no-preview"],{timeoutMs:6e4});return r.code===0?{ok:!0}:{ok:!1,error:`wacli send failed: ${gi(r.stderr||r.stdout)}`}}async function Oa(t,e,n,i,r=Re){return(await r(t.bin,[...an(t),"--read-only","media","download","--chat",e,"--id",n,"--output",i],{timeoutMs:12e4})).code===0}var ki=2e3,xi=t=>ln(t.wacli,t.to,t.text);function Ie(t){return dn(t,".agentx","whatsapp-triage","drafts")}var Si=t=>/^[a-z0-9-]{8,64}$/.test(t),ie=(t,e)=>dn(Ie(t),`${e}.json`);function pn(t,e){mi(Ie(t),{recursive:!0});let n=ie(t,e.id),i=`${n}.${process.pid}.tmp`;wi(i,JSON.stringify(e,null,2)+`
4
4
  `,{mode:384}),un(i,n)}function Va(t,e,n=Date.now()){let i=e.text.trim().slice(0,ki);if(!i)throw new Error("empty draft");let r={...e,text:i,id:`${n.toString(36)}-${cn(4).toString("hex")}`,status:"pending",created_at:new Date(n).toISOString()};return pn(t,r),r}function se(t,e){if(!Si(e))return null;try{return JSON.parse(bi(ie(t,e),"utf-8"))}catch{return null}}function gn(t,e){let n=Ie(t);return fi(n)?hi(n).filter(i=>i.endsWith(".json")).map(i=>se(t,i.slice(0,-5))).filter(i=>!!i&&(!e||i.status===e)).sort((i,r)=>i.created_at.localeCompare(r.created_at)):[]}async function fn(t,e,n,i={}){let r=se(t,e);if(!r||r.status!=="pending")return{ok:!1,error:`no reply draft "${e}" is waiting`};let s=`${ie(t,e)}.${process.pid}.${cn(3).toString("hex")}.claim`;try{un(ie(t,e),s)}catch{return{ok:!1,error:`reply draft "${e}" is already being decided`}}let o={...r,decided_by:i.by??"operator",decided_at:new Date(i.now??Date.now()).toISOString()};if(n==="no")o.status="rejected";else{let a=await(i.send??xi)(r).catch(l=>({ok:!1,error:String(l?.message??l)}));a.ok?o.status="sent":(o.status="failed",o.error=a.error)}pn(t,o);try{yi(s)}catch{}return o.status==="failed"?{ok:!1,error:o.error??"send failed"}:{ok:!0,draft:o}}import{mkdirSync as vi,readFileSync as $i,renameSync as Ai,writeFileSync as Ri}from"fs";import{resolve as _i}from"path";function mn(t){return _i(Ae(t),"_state.json")}function A(t){try{let e=JSON.parse($i(mn(t),"utf-8"));return{snoozed:e&&typeof e.snoozed=="object"&&e.snoozed?e.snoozed:{},...typeof e?.lastDigest=="string"?{lastDigest:e.lastDigest}:{},...e?.popped&&typeof e.popped=="object"?{popped:e.popped}:{},...typeof e?.passAt=="string"?{passAt:e.passAt}:{},...Array.isArray(e?.wanted)?{wanted:e.wanted.filter(n=>typeof n=="string")}:{}}}catch{return{snoozed:{}}}}function B(t,e){vi(Ae(t),{recursive:!0});let n=mn(t),i=`${n}.${process.pid}.tmp`;Ri(i,JSON.stringify(e,null,2)+`
@@ -529,4 +529,4 @@ Document the arguments, commands, or files the skill expects. Example:
529
529
  claude-code ${xt(t)} --arg value
530
530
  \`\`\`
531
531
  `}Tt();var zr={maxPixels:12e5,timeoutMs:5e3,intervalMs:100,changeThreshold:.015,stableMs:400,regions:{},buffer:{enabled:!1,seconds:10,fps:2,region:"screen",maxPixels:3e5}};function Xr(t){return{...zr,...t??{},regions:{...t?.regions??{}},buffer:{...zr.buffer,...t?.buffer??{}}}}function td(t){try{return Xr(Et(t).screen)}catch{return Xr(void 0)}}var Ra=/^[a-z][\w-]*$/,Gr=["window","screen","menubar","notifications"];function Z(t,e,n,i){let r=Number(t);if(t===""||t===null||!Number.isFinite(r)||!n(r))throw new Error(`${e} must be ${i}`);return r}var be=(t,e)=>Z(t,e,n=>Number.isInteger(n)&&n>0,"a whole number above 0");function Kr(t){let e=typeof t=="string"?t.split(",").map(Number):[t?.x,t?.y,t?.width,t?.height].map(Number);if(e.length!==4||!e.every(Number.isFinite)||e[2]<=0||e[3]<=0)throw new Error("a region is x,y,width,height in screen points, with width and height above 0");return{x:e[0],y:e[1],width:e[2],height:e[3]}}function nd(t,e){let n={...t??{}};if("maxPixels"in e&&(n.maxPixels=be(e.maxPixels,"maxPixels")),"timeoutMs"in e&&(n.timeoutMs=be(e.timeoutMs,"timeoutMs")),"intervalMs"in e&&(n.intervalMs=be(e.intervalMs,"intervalMs")),"stableMs"in e&&(n.stableMs=Z(e.stableMs,"stableMs",r=>Number.isInteger(r)&&r>=0,"a whole number, 0 or more")),"changeThreshold"in e&&(n.changeThreshold=Z(e.changeThreshold,"changeThreshold",r=>r>=0&&r<=1,"between 0 and 1")),e.regions&&typeof e.regions=="object"){let r={...n.regions??{}};for(let[s,o]of Object.entries(e.regions)){if(!Ra.test(s))throw new Error(`region name "${s}" must be lowercase letters, digits, - or _`);o===null?delete r[s]:r[s]=Kr(o)}n.regions=r}if(e.buffer&&typeof e.buffer=="object"){let r=e.buffer,s={...n.buffer??{}};"enabled"in r&&(s.enabled=!!r.enabled),"seconds"in r&&(s.seconds=Z(r.seconds,"buffer.seconds",o=>o>0&&o<=120,"above 0 and at most 120")),"fps"in r&&(s.fps=Z(r.fps,"buffer.fps",o=>o>0&&o<=10,"above 0 and at most 10")),"maxPixels"in r&&(s.maxPixels=be(r.maxPixels,"buffer.maxPixels")),"region"in r&&(s.region=String(r.region).trim()),n.buffer=s}let i=n.buffer?.region;if(i!==void 0&&!Gr.includes(i)&&!n.regions?.[i])try{Kr(i)}catch{throw new Error(`buffer.region "${i}" is not a region \u2014 use ${[...Gr,...Object.keys(n.regions??{})].join(", ")}, or x,y,w,h`)}return n}export{Qt as a,Ea as b,tt as c,Ks as d,Js as e,mc as f,hc as g,bc as h,ar as i,wc as j,xc as k,D as l,lr as m,k as n,Pa as o,Oa as p,xi as q,Va as r,fn as s,A as t,Xa as u,Ga as v,Ya as w,oe as x,Za as y,xn as z,il as A,z as B,wl as C,kl as D,_n as E,cr as F,$c as G,_c as H,vr as I,eu as J,tu as K,au as L,qo as M,lu as N,Sl as O,vl as P,$l as Q,Al as R,Rl as S,_l as T,El as U,Tl as V,Wl as W,Me as X,Fl as Y,Ul as Z,X as _,G as $,Ko as aa,bu as ba,yu as ca,wu as da,ku as ea,ct as fa,xu as ga,Fe as ha,Ue as ia,pe as ja,ms as ka,bs as la,zl as ma,qe as na,Be as oa,ys as pa,ws as qa,Xn as ra,Yn as sa,Xl as ta,Ss as ua,Gl as va,Ts as wa,Ps as xa,He as ya,Ls as za,Zn as Aa,P as Ba,Lr as Ca,Or as Da,Mr as Ea,_u as Fa,ia as Ga,Wr as Ha,Fr as Ia,ju as Ja,Wu as Ka,ka as La,Fu as Ma,Vr as Na,ge as Oa,oc as Pa,ir as Qa,ze as Ra,Qe as Sa,gc as Ta,Bu as Ua,Hu as Va,zu as Wa,Xu as Xa,Gu as Ya,Ku as Za,Ju as _a,Yu as $a,Zu as ab,zr as bb,Xr as cb,td as db,Gr as eb,nd as fb};
532
- //# sourceMappingURL=chunk-4WKBK7EQ.js.map
532
+ //# sourceMappingURL=chunk-O4XEQTEN.js.map
@@ -0,0 +1,3 @@
1
+ import{a as f}from"./chunk-3PGPN323.js";import{existsSync as m,readFileSync as k,statSync as P,writeFileSync as O}from"fs";import{resolve as h}from"path";import g from"js-yaml";var n=(e=5)=>({panel:"history",title:"History",source:"history",show:e,importance:["major","normal"],fold:"minor",rollup:{min:5,days:30}}),c={panel:"discussed",title:"Discussed",source:"discussed",show:3,access:"owner"},s=(e=1)=>({panel:"notes",title:"Notes",source:"notes",show:e}),_=["device","server","app","domain","account","agent"],v=[{id:"person",label:"Person",plural:"People",pillar:"parties",schema:"Person",icon:"person",lens:[{panel:"roles",title:"Roles over time",from:["role_at","member_of","founded"],show:6,display:"timeline"},{panel:"relations",title:"Relations",from:["works_with","reports_to","client_of","related"],types:["person","organization"],show:5,group_by:"role"},{panel:"belongings",title:"Belongings",from:["owns","uses","related"],types:_,show:5},{panel:"obligations",title:"Obligations they carry",from:["subject_to"],show:3},n(),c,s()]},{id:"organization",label:"Organization",plural:"Organizations",pillar:"parties",schema:"Organization",icon:"org",lens:[{panel:"people",title:"People and roles",from:["role_at","member_of","founded"],show:6,group_by:"role"},{panel:"facts",title:"Key facts",from:["registered_with","located_in","identifier","legal_form"],show:6},{panel:"obligations",title:"Obligations and next due dates",from:["subject_to"],show:4},{panel:"agreements",title:"Agreements",source:"linked",types:["contract"],show:4},{panel:"decisions",title:"Decisions",source:"linked",types:["decision","policy"],show:4},n(),c,s()]},{id:"place",label:"Place",plural:"Places",pillar:"places",schema:"Place",icon:"pin",lens:[{panel:"here",title:"What is here",from:["located_in","related"],show:6},{panel:"laws",title:"Laws that apply here",from:["applies_in"],show:5},n(),s()]},{id:"jurisdiction",label:"Jurisdiction",plural:"Jurisdictions",pillar:"places",schema:"AdministrativeArea",icon:"pin",lens:[{panel:"laws",title:"Laws in force",from:["applies_in"],show:6},{panel:"authorities",title:"Authorities with reach",from:["jurisdiction_of"],show:5},{panel:"here",title:"What is here",from:["located_in"],show:5},s()]},{id:"device",label:"Device",plural:"Devices",pillar:"assets",schema:"Product",icon:"device",lens:[{panel:"state",title:"State now",source:"readings",latest:!0,show:6},n(),{panel:"apps",title:"Installed apps",from:["installed_on"],show:5},c,{panel:"parties",title:"Owner, user, location",from:["owns","uses","located_in","related"],types:["person","organization","place"],show:5},s()]},{id:"server",label:"Server",plural:"Servers",pillar:"assets",schema:"Product",icon:"server",lens:[{panel:"state",title:"State now",source:"readings",latest:!0,show:6},n(),{panel:"hosts",title:"Hosted services",from:["installed_on","runs_on"],show:6},c,{panel:"parties",title:"Owner and location",from:["owns","uses","located_in"],show:4},s()]},{id:"app",label:"App or system",plural:"Apps",pillar:"assets",schema:"SoftwareApplication",icon:"app",lens:[{panel:"installs",title:"Where it runs",from:["installed_on","runs_on"],show:5},{panel:"licence",title:"Licence or subscription",from:["party_to","licensed_by"],show:3},n(),c,s()]},{id:"domain",label:"Domain",plural:"Domains",pillar:"assets",schema:"WebSite",icon:"globe",lens:[{panel:"holder",title:"Holder",from:["owns","registrar"],show:3},{panel:"dues",title:"Renewal and due dates",source:"linked",types:["due_date"],show:4},{panel:"services",title:"Linked services",from:["related"],show:5},n(),s()]},{id:"account",label:"Account",plural:"Accounts",pillar:"assets",schema:"Service",icon:"key",lens:[{panel:"holder",title:"Holder",from:["owns","uses"],show:3},{panel:"dues",title:"Renewal and due dates",source:"linked",types:["due_date"],show:4},n(),s()]},{id:"agent",label:"Agent",plural:"Agents",pillar:"assets",schema:"SoftwareApplication",icon:"agent",lens:[{panel:"runs",title:"Where it runs",from:["runs_on","installed_on","related"],types:["server","device"],show:4},{panel:"works",title:"Works for",from:["works_for","uses","related"],types:["person","organization","project"],show:5},n(),c,s()]},{id:"project",label:"Project",plural:"Projects",pillar:"offerings",schema:"Project",icon:"project",lens:[{panel:"people",title:"Client and people",from:["client_of","works_on","related"],types:["person","organization","agent"],show:6,group_by:"role"},{panel:"agreements",title:"Agreements",source:"linked",types:["contract"],show:3},{panel:"decisions",title:"Decisions",source:"linked",types:["decision","policy"],show:4},n(6),c,s()]},{id:"offering",label:"Offering",plural:"Offerings",pillar:"offerings",schema:"Offer",icon:"project",lens:[{panel:"clients",title:"Clients",from:["client_of","related"],types:["organization","person"],show:5},n(),s()]},{id:"contract",label:"Agreement",plural:"Agreements",pillar:"agreements",schema:"Contract",icon:"contract",lens:[{panel:"parties",title:"Parties and roles",from:["party_to"],show:5,group_by:"role"},{panel:"terms",title:"Key terms and dates",from:["starts","renews","notice","amount"],show:6},{panel:"obligations",title:"Obligations it creates",from:["creates"],show:5},{panel:"amendments",title:"Amendments",from:["amends"],show:4},n(),s()]},{id:"legal_source",label:"Legal source",plural:"Legal sources",pillar:"law",schema:"Legislation",icon:"law",lens:[{panel:"reference",title:"Gazette reference and dates",from:["identifier","published_in","in_force_from","legal_force","issued_by"],show:6},{panel:"creates",title:"Obligations, penalties and reliefs it creates",from:["creates","created_by"],show:6},{panel:"amends",title:"Amends and amended by",from:["amends","repeals","implements"],show:5},{panel:"applies",title:"Where it applies",from:["applies_in"],show:3},s()]},{id:"obligation",label:"Obligation",plural:"Obligations",pillar:"law",schema:"LegalRuleML Obligation",icon:"law",lens:[{panel:"rule",title:"Who must do what, by when",from:["action","bearer","due_rule","amount_rule","authority","status"],show:6},{panel:"dues",title:"Next due dates",source:"linked",types:["due_date"],show:4},{panel:"sources",title:"Source articles",from:["created_by","changed_by"],show:4},{panel:"penalties",title:"Penalties and reliefs",from:["penalty_for","relieves"],show:4},{panel:"procedure",title:"Procedure",from:["procedure"],show:2},{panel:"bearers",title:"Who carries it",from:["subject_to"],show:5},n(4),s()]},{id:"penalty",label:"Penalty",plural:"Penalties",pillar:"law",schema:"LegalRuleML Penalty",icon:"law",lens:[{panel:"rule",title:"For which failure, how much",from:["penalty_for","kind","amount_rule","created_by"],show:6},s()]},{id:"relief",label:"Relief",plural:"Reliefs",pillar:"law",schema:"LegalRuleML Permission",icon:"law",lens:[{panel:"rule",title:"What it relieves, for whom, until when",from:["relieves","bearer","condition","created_by"],show:6},s()]},{id:"due_date",label:"Due date",plural:"Due dates",pillar:"law",schema:"Event",icon:"calendar",lens:[{panel:"due",title:"Due",from:["due_for","bearer","due","status","fulfilled_by"],show:6},s()]},{id:"event",label:"Event",plural:"Events",pillar:"events",schema:"Event",icon:"calendar",lens:[s(1),{panel:"involved",title:"Who and what was involved",from:["involves","affects","related"],show:8},{panel:"followed",title:"What followed",source:"linked",types:["event","decision"],show:4},c]},{id:"decision",label:"Decision",plural:"Decisions",pillar:"decisions",schema:"ChooseAction",icon:"decision",lens:[s(1),{panel:"affects",title:"What it affects",from:["affects","creates","related"],show:6},{panel:"replaced",title:"Replaced by",from:["replaced_by"],show:2},c]},{id:"policy",label:"Policy",plural:"Policies",pillar:"decisions",schema:"LegalRuleML Obligation",icon:"decision",lens:[{panel:"rule",title:"Rule",from:["action","bearer","creates","created_by"],show:6},{panel:"affects",title:"What it affects",from:["affects","related"],show:6},s()]},{id:"procedure",label:"Procedure",plural:"Procedures",pillar:"procedures",schema:"HowTo",icon:"steps",lens:[s(1),{panel:"triggers",title:"What triggers it",from:["procedure","triggered_by","related"],show:5},{panel:"runs",title:"Last runs",source:"linked",types:["event"],show:4}]},{id:"topic",label:"Topic",plural:"Topics",pillar:"topics",schema:"skos:Concept",icon:"topic",lens:[s(1),{panel:"related",title:"Related",from:["related"],show:8},n(4)]}],d={version:1,pillars:[{id:"parties",label:"Parties",description:"People and organisations, and the roles between them",icon:"person"},{id:"places",label:"Places & Jurisdictions",description:"Where things are, and whose rules apply there",icon:"pin"},{id:"assets",label:"Assets",description:"What is owned or run: devices, servers, apps, domains, accounts, agents",icon:"server"},{id:"offerings",label:"Offerings & Projects",description:"What is sold, built or delivered",icon:"project"},{id:"agreements",label:"Agreements",description:"Contracts, subscriptions and their terms",icon:"contract"},{id:"law",label:"Law & Obligations",description:"Legal sources, the obligations they create, penalties, reliefs and due dates",icon:"law"},{id:"events",label:"Events",description:"What happened, by importance",icon:"calendar"},{id:"decisions",label:"Decisions & Policies",description:"Why things are the way they are",icon:"decision"},{id:"procedures",label:"Procedures",description:"How things are done",icon:"steps"},{id:"topics",label:"Topics",description:"Pages no type fits yet. A growing count means a type is missing.",icon:"topic",sidebar:!1}],types:v,properties:[{id:"related",label:"related to",inverse:"related to"},{id:"role_at",label:"role at",inverse:"people",wikidata:"P108",range:["organization"]},{id:"member_of",label:"member of",inverse:"members",wikidata:"P463"},{id:"founded",label:"founded",inverse:"founded by",wikidata:"P112"},{id:"works_with",label:"works with",inverse:"works with"},{id:"reports_to",label:"reports to",inverse:"manages"},{id:"client_of",label:"client of",inverse:"clients",wikidata:"P1972"},{id:"works_on",label:"works on",inverse:"people"},{id:"works_for",label:"works for",inverse:"agents",wikidata:"P108"},{id:"owns",label:"owns",inverse:"owned by",wikidata:"P1830"},{id:"uses",label:"uses",inverse:"used by",wikidata:"P2283"},{id:"located_in",label:"located in",inverse:"here",wikidata:"P276"},{id:"installed_on",label:"installed on",inverse:"installed apps",range:["device","server"]},{id:"runs_on",label:"runs on",inverse:"hosts"},{id:"registered_with",label:"registered with",inverse:"registered"},{id:"identifier",label:"identifier",wikidata:"P1448"},{id:"legal_form",label:"legal form",wikidata:"P1454"},{id:"registrar",label:"registrar"},{id:"licensed_by",label:"licensed by",inverse:"licences"},{id:"party_to",label:"party to",inverse:"parties"},{id:"starts",label:"starts"},{id:"renews",label:"renews"},{id:"notice",label:"notice period"},{id:"amount",label:"amount"},{id:"creates",label:"creates",inverse:"created by"},{id:"created_by",label:"created by",inverse:"creates"},{id:"changed_by",label:"changed by",inverse:"changes"},{id:"amends",label:"amends",inverse:"amended by",wikidata:"P144"},{id:"repeals",label:"repeals",inverse:"repealed by"},{id:"implements",label:"implements",inverse:"implemented by"},{id:"issued_by",label:"issued by",inverse:"issues"},{id:"published_in",label:"published in",wikidata:"P1433"},{id:"in_force_from",label:"in force from",wikidata:"P7588"},{id:"legal_force",label:"legal force"},{id:"applies_in",label:"applies in",inverse:"laws that apply",wikidata:"P1001"},{id:"jurisdiction_of",label:"authority in",inverse:"authorities"},{id:"subject_to",label:"subject to",inverse:"carried by"},{id:"action",label:"action"},{id:"bearer",label:"bearer"},{id:"due_rule",label:"due"},{id:"amount_rule",label:"amount"},{id:"authority",label:"authority",inverse:"collects"},{id:"status",label:"status"},{id:"penalty_for",label:"penalty for",inverse:"penalties"},{id:"relieves",label:"relieves",inverse:"reliefs"},{id:"condition",label:"condition"},{id:"kind",label:"kind"},{id:"procedure",label:"procedure",inverse:"carries out"},{id:"due_for",label:"due for",inverse:"due dates"},{id:"due",label:"due on"},{id:"fulfilled_by",label:"fulfilled by",inverse:"fulfils"},{id:"involves",label:"involves",inverse:"events",wikidata:"P710"},{id:"affects",label:"affects",inverse:"affected by"},{id:"replaced_by",label:"replaced by",inverse:"replaces",wikidata:"P1366"},{id:"triggered_by",label:"triggered by",inverse:"triggers"},{id:"mentions",label:"mentions",inverse:"discussed in"},{id:"reading",label:"reading"}],importance:{default:"normal",major_set_by:"owner",rollup:{min:5,days:30}},sidebar:{pins_max:5,pins:[]},classify:[{type:"agent",legacy:["person","concept","project"],title:"\\bagents?\\b|\\bbot\\b"},{type:"server",legacy:["place","concept"],title:"\\b(server|vps|host|node)\\b"},{type:"device",legacy:["place","concept"],title:"\\b(laptop|macbook|desktop|phone|tablet|printer|router)\\b"},{type:"person",legacy:["person"]},{type:"event",legacy:["event"]},{type:"decision",legacy:["decision"]},{type:"procedure",legacy:["pattern"]},{type:"place",legacy:["place"]},{type:"project",legacy:["project"]},{type:"organization",path:["clients","customers","vendors","suppliers","organizations","orgs","companies"]},{type:"organization",tags:["organization","company","client","vendor","supplier","agency","bank"]},{type:"server",path:["servers","hosts","infrastructure"]},{type:"server",tags:["server","vps","host"]},{type:"device",path:["devices"]},{type:"device",tags:["device","laptop","phone","printer"]},{type:"agent",tags:["agent"],title:"\\bagent\\b"},{type:"app",path:["apps","systems","services"]},{type:"domain",tags:["domain","dns"]},{type:"contract",path:["contracts","agreements"]},{type:"contract",tags:["contract","agreement","subscription"]},{type:"legal_source",path:["laws","legislation"]},{type:"legal_source",tags:["law","legislation","decree"]},{type:"obligation",path:["obligations","compliance"]},{type:"obligation",tags:["obligation","compliance"]},{type:"policy",path:["policies"]},{type:"policy",tags:["policy"]},{type:"procedure",path:["runbooks","procedures"]},{type:"procedure",tags:["runbook","procedure","how-to"]}],fallback_type:"topic"};var y="ontology.yaml",b=new Map;function z(e){let t=h(e,y);if(!m(t))return{ontology:d,errors:[],file:null};let p=P(t).mtimeMs,l=b.get(t);if(l&&l.mtimeMs===p)return l.loaded;let a,i=[];try{a=g.load(k(t,"utf-8"))}catch(w){i.push(`${y} is not valid YAML: ${w.message}`),a={}}let r=A(d,u(a)?a:{},i);i.push(...j(r));let o={ontology:r,errors:i,file:t};return b.set(t,{mtimeMs:p,loaded:o}),o}function T(e){let t=h(e,y);if(m(t))throw new Error(`${t} already exists`);let p=["# Wiki ontology: pillars, types, typed relations, event importance and lenses.","# Edit any section; what you leave out falls back to the built-in defaults.","# Check it with: agentx wiki ontology check",""].join(`
2
+ `);return O(t,p+g.dump(d,{lineWidth:120,noRefs:!0})),t}function A(e,t,p=[]){let l=structuredClone(e);typeof t.version=="number"&&(l.version=t.version);for(let a of["pillars","types","properties"]){let i=t[a];if(i!==void 0){if(!Array.isArray(i)){p.push(`${a} must be a list`);continue}l[a]=L(l[a],i,a,p)}}return u(t.importance)&&(l.importance={...l.importance,...t.importance}),u(t.sidebar)&&(l.sidebar={...l.sidebar,...t.sidebar}),t.classify!==void 0&&(Array.isArray(t.classify)?l.classify=t.classify:p.push("classify must be a list")),typeof t.fallback_type=="string"&&(l.fallback_type=t.fallback_type),l}function L(e,t,p,l){let a=e.map(i=>({...i}));for(let i of t){if(!u(i)||typeof i.id!="string"){l.push(`every item in ${p} needs an id`);continue}let r=a.findIndex(o=>o.id===i.id);r===-1?a.push(i):a[r]={...a[r],...i}}return a}function j(e){let t=[],p=new Set(e.pillars.map(i=>i.id)),l=new Set(e.types.map(i=>i.id)),a=new Set(e.properties.map(i=>i.id));for(let i of e.types){p.has(i.pillar)||t.push(`type ${i.id}: unknown pillar "${i.pillar}"`);for(let r of i.lens??[]){for(let o of S(r))a.has(o)||t.push(`type ${i.id}, panel ${r.panel}: unknown property "${o}"`);for(let o of r.types??[])l.has(o)||t.push(`type ${i.id}, panel ${r.panel}: unknown type "${o}"`);for(let o of r.importance??[])f.includes(o)||t.push(`type ${i.id}, panel ${r.panel}: unknown importance "${o}"`)}}for(let i of e.classify)if(l.has(i.type)||t.push(`classify: unknown type "${i.type}"`),i.title)try{new RegExp(i.title,"i")}catch{t.push(`classify: bad title pattern "${i.title}"`)}return l.has(e.fallback_type)||t.push(`fallback_type: unknown type "${e.fallback_type}"`),f.includes(e.importance.default)||t.push(`importance.default: unknown level "${e.importance.default}"`),e.sidebar.pins.length>e.sidebar.pins_max&&t.push(`sidebar.pins: ${e.sidebar.pins.length} pins, only the first ${e.sidebar.pins_max} are shown`),t}function S(e){return e.from?Array.isArray(e.from)?e.from:[e.from]:[]}function M(e){return e.source?e.source:e.panel==="history"||e.panel==="discussed"||e.panel==="notes"?e.panel:e.latest?"readings":e.from?"statements":"linked"}function u(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}export{y as a,z as b,T as c,A as d,j as e,S as f,M as g};
3
+ //# sourceMappingURL=chunk-QX2B4TJU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/wiki/ontology/load.ts","../src/wiki/ontology/defaults.ts"],"sourcesContent":["// --- Load and check `ontology.yaml` (#811) ---\n//\n// The file is optional. Each section the owner writes is merged over the\n// defaults: pillars, types and properties by `id` (a listed id replaces\n// the fields it sets, a new id is added), `importance` and `sidebar`\n// field by field, and `classify` as a whole list. Problems are reported,\n// never thrown, so a typo in the file cannot take the wiki down.\n\nimport { existsSync, readFileSync, statSync, writeFileSync } from \"fs\"\nimport { resolve } from \"path\"\nimport yaml from \"js-yaml\"\nimport { DEFAULT_ONTOLOGY } from \"./defaults\"\nimport { IMPORTANCE_LEVELS, type LensPanel, type Ontology, type PanelSource } from \"./types\"\n\nexport const ONTOLOGY_FILE = \"ontology.yaml\"\n\nexport interface LoadedOntology {\n ontology: Ontology\n /** Problems found in the file. The defaults are used where they apply. */\n errors: string[]\n /** Path of the file read, or null when the defaults were used as they are. */\n file: string | null\n}\n\nconst cache = new Map<string, { mtimeMs: number; loaded: LoadedOntology }>()\n\nexport function loadOntology(wikiDir: string): LoadedOntology {\n const file = resolve(wikiDir, ONTOLOGY_FILE)\n if (!existsSync(file)) return { ontology: DEFAULT_ONTOLOGY, errors: [], file: null }\n\n const mtimeMs = statSync(file).mtimeMs\n const hit = cache.get(file)\n if (hit && hit.mtimeMs === mtimeMs) return hit.loaded\n\n let raw: unknown\n const errors: string[] = []\n try {\n raw = yaml.load(readFileSync(file, \"utf-8\"))\n } catch (err) {\n errors.push(`${ONTOLOGY_FILE} is not valid YAML: ${(err as Error).message}`)\n raw = {}\n }\n const ontology = mergeOntology(DEFAULT_ONTOLOGY, isObject(raw) ? raw : {}, errors)\n errors.push(...checkOntology(ontology))\n const loaded = { ontology, errors, file }\n cache.set(file, { mtimeMs, loaded })\n return loaded\n}\n\n/** Write the defaults as a starting `ontology.yaml`. Refuses to overwrite. */\nexport function writeDefaultOntology(wikiDir: string): string {\n const file = resolve(wikiDir, ONTOLOGY_FILE)\n if (existsSync(file)) throw new Error(`${file} already exists`)\n const header = [\n \"# Wiki ontology: pillars, types, typed relations, event importance and lenses.\",\n \"# Edit any section; what you leave out falls back to the built-in defaults.\",\n \"# Check it with: agentx wiki ontology check\",\n \"\",\n ].join(\"\\n\")\n writeFileSync(file, header + yaml.dump(DEFAULT_ONTOLOGY, { lineWidth: 120, noRefs: true }))\n return file\n}\n\nexport function mergeOntology(base: Ontology, over: Record<string, unknown>, errors: string[] = []): Ontology {\n const out: Ontology = structuredClone(base)\n if (typeof over.version === \"number\") out.version = over.version\n for (const key of [\"pillars\", \"types\", \"properties\"] as const) {\n const list = over[key]\n if (list === undefined) continue\n if (!Array.isArray(list)) { errors.push(`${key} must be a list`); continue }\n out[key] = mergeById(out[key] as Array<{ id: string }>, list, key, errors) as never\n }\n if (isObject(over.importance)) out.importance = { ...out.importance, ...over.importance } as Ontology[\"importance\"]\n if (isObject(over.sidebar)) out.sidebar = { ...out.sidebar, ...over.sidebar } as Ontology[\"sidebar\"]\n if (over.classify !== undefined) {\n if (Array.isArray(over.classify)) out.classify = over.classify as Ontology[\"classify\"]\n else errors.push(\"classify must be a list\")\n }\n if (typeof over.fallback_type === \"string\") out.fallback_type = over.fallback_type\n return out\n}\n\nfunction mergeById(base: Array<{ id: string }>, list: unknown[], key: string, errors: string[]): Array<{ id: string }> {\n const out = base.map(x => ({ ...x }))\n for (const item of list) {\n if (!isObject(item) || typeof item.id !== \"string\") { errors.push(`every item in ${key} needs an id`); continue }\n const at = out.findIndex(x => x.id === item.id)\n if (at === -1) out.push(item as { id: string })\n else out[at] = { ...out[at], ...item }\n }\n return out\n}\n\n/** Problems that make part of the ontology unusable. */\nexport function checkOntology(o: Ontology): string[] {\n const errors: string[] = []\n const pillars = new Set(o.pillars.map(p => p.id))\n const types = new Set(o.types.map(t => t.id))\n const props = new Set(o.properties.map(p => p.id))\n for (const t of o.types) {\n if (!pillars.has(t.pillar)) errors.push(`type ${t.id}: unknown pillar \"${t.pillar}\"`)\n for (const p of t.lens ?? []) {\n for (const f of panelFrom(p)) if (!props.has(f)) errors.push(`type ${t.id}, panel ${p.panel}: unknown property \"${f}\"`)\n for (const ty of p.types ?? []) if (!types.has(ty)) errors.push(`type ${t.id}, panel ${p.panel}: unknown type \"${ty}\"`)\n for (const lv of p.importance ?? []) if (!IMPORTANCE_LEVELS.includes(lv)) errors.push(`type ${t.id}, panel ${p.panel}: unknown importance \"${lv}\"`)\n }\n }\n for (const r of o.classify) {\n if (!types.has(r.type)) errors.push(`classify: unknown type \"${r.type}\"`)\n if (r.title) {\n try { new RegExp(r.title, \"i\") } catch { errors.push(`classify: bad title pattern \"${r.title}\"`) }\n }\n }\n if (!types.has(o.fallback_type)) errors.push(`fallback_type: unknown type \"${o.fallback_type}\"`)\n if (!IMPORTANCE_LEVELS.includes(o.importance.default)) errors.push(`importance.default: unknown level \"${o.importance.default}\"`)\n if (o.sidebar.pins.length > o.sidebar.pins_max) {\n errors.push(`sidebar.pins: ${o.sidebar.pins.length} pins, only the first ${o.sidebar.pins_max} are shown`)\n }\n return errors\n}\n\nexport function panelFrom(p: LensPanel): string[] {\n if (!p.from) return []\n return Array.isArray(p.from) ? p.from : [p.from]\n}\n\nexport function panelSource(p: LensPanel): PanelSource {\n if (p.source) return p.source\n if (p.panel === \"history\" || p.panel === \"discussed\" || p.panel === \"notes\") return p.panel\n if (p.latest) return \"readings\"\n if (p.from) return \"statements\"\n return \"linked\"\n}\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v)\n}\n","// --- Default wiki ontology (#811) ---\n//\n// Generic starting point: nine pillars, the types inside them, the typed\n// relations between them and a lens for every type. An owner overrides\n// any section in `<wiki>/ontology.yaml`; `agentx wiki ontology init`\n// writes this file out as a starting point. Keep it free of any\n// particular organisation, person, country or product.\n\nimport type { LensPanel, Ontology, TypeDef } from \"./types\"\n\nconst history = (show = 5): LensPanel => ({\n panel: \"history\", title: \"History\", source: \"history\", show,\n importance: [\"major\", \"normal\"], fold: \"minor\", rollup: { min: 5, days: 30 },\n})\nconst discussed: LensPanel = { panel: \"discussed\", title: \"Discussed\", source: \"discussed\", show: 3, access: \"owner\" }\nconst notes = (show = 1): LensPanel => ({ panel: \"notes\", title: \"Notes\", source: \"notes\", show })\n\nconst ASSET_TYPES = [\"device\", \"server\", \"app\", \"domain\", \"account\", \"agent\"]\n\nconst types: TypeDef[] = [\n // Parties\n {\n id: \"person\", label: \"Person\", plural: \"People\", pillar: \"parties\", schema: \"Person\", icon: \"person\",\n lens: [\n { panel: \"roles\", title: \"Roles over time\", from: [\"role_at\", \"member_of\", \"founded\"], show: 6, display: \"timeline\" },\n { panel: \"relations\", title: \"Relations\", from: [\"works_with\", \"reports_to\", \"client_of\", \"related\"], types: [\"person\", \"organization\"], show: 5, group_by: \"role\" },\n { panel: \"belongings\", title: \"Belongings\", from: [\"owns\", \"uses\", \"related\"], types: ASSET_TYPES, show: 5 },\n { panel: \"obligations\", title: \"Obligations they carry\", from: [\"subject_to\"], show: 3 },\n history(),\n discussed,\n notes(),\n ],\n },\n {\n id: \"organization\", label: \"Organization\", plural: \"Organizations\", pillar: \"parties\", schema: \"Organization\", icon: \"org\",\n lens: [\n { panel: \"people\", title: \"People and roles\", from: [\"role_at\", \"member_of\", \"founded\"], show: 6, group_by: \"role\" },\n { panel: \"facts\", title: \"Key facts\", from: [\"registered_with\", \"located_in\", \"identifier\", \"legal_form\"], show: 6 },\n { panel: \"obligations\", title: \"Obligations and next due dates\", from: [\"subject_to\"], show: 4 },\n { panel: \"agreements\", title: \"Agreements\", source: \"linked\", types: [\"contract\"], show: 4 },\n { panel: \"decisions\", title: \"Decisions\", source: \"linked\", types: [\"decision\", \"policy\"], show: 4 },\n history(),\n discussed,\n notes(),\n ],\n },\n // Places & Jurisdictions\n {\n id: \"place\", label: \"Place\", plural: \"Places\", pillar: \"places\", schema: \"Place\", icon: \"pin\",\n lens: [\n { panel: \"here\", title: \"What is here\", from: [\"located_in\", \"related\"], show: 6 },\n { panel: \"laws\", title: \"Laws that apply here\", from: [\"applies_in\"], show: 5 },\n history(),\n notes(),\n ],\n },\n {\n id: \"jurisdiction\", label: \"Jurisdiction\", plural: \"Jurisdictions\", pillar: \"places\", schema: \"AdministrativeArea\", icon: \"pin\",\n lens: [\n { panel: \"laws\", title: \"Laws in force\", from: [\"applies_in\"], show: 6 },\n { panel: \"authorities\", title: \"Authorities with reach\", from: [\"jurisdiction_of\"], show: 5 },\n { panel: \"here\", title: \"What is here\", from: [\"located_in\"], show: 5 },\n notes(),\n ],\n },\n // Assets\n {\n id: \"device\", label: \"Device\", plural: \"Devices\", pillar: \"assets\", schema: \"Product\", icon: \"device\",\n lens: [\n { panel: \"state\", title: \"State now\", source: \"readings\", latest: true, show: 6 },\n history(),\n { panel: \"apps\", title: \"Installed apps\", from: [\"installed_on\"], show: 5 },\n discussed,\n { panel: \"parties\", title: \"Owner, user, location\", from: [\"owns\", \"uses\", \"located_in\", \"related\"], types: [\"person\", \"organization\", \"place\"], show: 5 },\n notes(),\n ],\n },\n {\n id: \"server\", label: \"Server\", plural: \"Servers\", pillar: \"assets\", schema: \"Product\", icon: \"server\",\n lens: [\n { panel: \"state\", title: \"State now\", source: \"readings\", latest: true, show: 6 },\n history(),\n { panel: \"hosts\", title: \"Hosted services\", from: [\"installed_on\", \"runs_on\"], show: 6 },\n discussed,\n { panel: \"parties\", title: \"Owner and location\", from: [\"owns\", \"uses\", \"located_in\"], show: 4 },\n notes(),\n ],\n },\n {\n id: \"app\", label: \"App or system\", plural: \"Apps\", pillar: \"assets\", schema: \"SoftwareApplication\", icon: \"app\",\n lens: [\n { panel: \"installs\", title: \"Where it runs\", from: [\"installed_on\", \"runs_on\"], show: 5 },\n { panel: \"licence\", title: \"Licence or subscription\", from: [\"party_to\", \"licensed_by\"], show: 3 },\n history(),\n discussed,\n notes(),\n ],\n },\n {\n id: \"domain\", label: \"Domain\", plural: \"Domains\", pillar: \"assets\", schema: \"WebSite\", icon: \"globe\",\n lens: [\n { panel: \"holder\", title: \"Holder\", from: [\"owns\", \"registrar\"], show: 3 },\n { panel: \"dues\", title: \"Renewal and due dates\", source: \"linked\", types: [\"due_date\"], show: 4 },\n { panel: \"services\", title: \"Linked services\", from: [\"related\"], show: 5 },\n history(),\n notes(),\n ],\n },\n {\n id: \"account\", label: \"Account\", plural: \"Accounts\", pillar: \"assets\", schema: \"Service\", icon: \"key\",\n lens: [\n { panel: \"holder\", title: \"Holder\", from: [\"owns\", \"uses\"], show: 3 },\n { panel: \"dues\", title: \"Renewal and due dates\", source: \"linked\", types: [\"due_date\"], show: 4 },\n history(),\n notes(),\n ],\n },\n {\n id: \"agent\", label: \"Agent\", plural: \"Agents\", pillar: \"assets\", schema: \"SoftwareApplication\", icon: \"agent\",\n lens: [\n { panel: \"runs\", title: \"Where it runs\", from: [\"runs_on\", \"installed_on\", \"related\"], types: [\"server\", \"device\"], show: 4 },\n { panel: \"works\", title: \"Works for\", from: [\"works_for\", \"uses\", \"related\"], types: [\"person\", \"organization\", \"project\"], show: 5 },\n history(),\n discussed,\n notes(),\n ],\n },\n // Offerings & Projects\n {\n id: \"project\", label: \"Project\", plural: \"Projects\", pillar: \"offerings\", schema: \"Project\", icon: \"project\",\n lens: [\n { panel: \"people\", title: \"Client and people\", from: [\"client_of\", \"works_on\", \"related\"], types: [\"person\", \"organization\", \"agent\"], show: 6, group_by: \"role\" },\n { panel: \"agreements\", title: \"Agreements\", source: \"linked\", types: [\"contract\"], show: 3 },\n { panel: \"decisions\", title: \"Decisions\", source: \"linked\", types: [\"decision\", \"policy\"], show: 4 },\n history(6),\n discussed,\n notes(),\n ],\n },\n {\n id: \"offering\", label: \"Offering\", plural: \"Offerings\", pillar: \"offerings\", schema: \"Offer\", icon: \"project\",\n lens: [\n { panel: \"clients\", title: \"Clients\", from: [\"client_of\", \"related\"], types: [\"organization\", \"person\"], show: 5 },\n history(),\n notes(),\n ],\n },\n // Agreements\n {\n id: \"contract\", label: \"Agreement\", plural: \"Agreements\", pillar: \"agreements\", schema: \"Contract\", icon: \"contract\",\n lens: [\n { panel: \"parties\", title: \"Parties and roles\", from: [\"party_to\"], show: 5, group_by: \"role\" },\n { panel: \"terms\", title: \"Key terms and dates\", from: [\"starts\", \"renews\", \"notice\", \"amount\"], show: 6 },\n { panel: \"obligations\", title: \"Obligations it creates\", from: [\"creates\"], show: 5 },\n { panel: \"amendments\", title: \"Amendments\", from: [\"amends\"], show: 4 },\n history(),\n notes(),\n ],\n },\n // Law & Obligations\n {\n id: \"legal_source\", label: \"Legal source\", plural: \"Legal sources\", pillar: \"law\", schema: \"Legislation\", icon: \"law\",\n lens: [\n { panel: \"reference\", title: \"Gazette reference and dates\", from: [\"identifier\", \"published_in\", \"in_force_from\", \"legal_force\", \"issued_by\"], show: 6 },\n { panel: \"creates\", title: \"Obligations, penalties and reliefs it creates\", from: [\"creates\", \"created_by\"], show: 6 },\n { panel: \"amends\", title: \"Amends and amended by\", from: [\"amends\", \"repeals\", \"implements\"], show: 5 },\n { panel: \"applies\", title: \"Where it applies\", from: [\"applies_in\"], show: 3 },\n notes(),\n ],\n },\n {\n id: \"obligation\", label: \"Obligation\", plural: \"Obligations\", pillar: \"law\", schema: \"LegalRuleML Obligation\", icon: \"law\",\n lens: [\n { panel: \"rule\", title: \"Who must do what, by when\", from: [\"action\", \"bearer\", \"due_rule\", \"amount_rule\", \"authority\", \"status\"], show: 6 },\n { panel: \"dues\", title: \"Next due dates\", source: \"linked\", types: [\"due_date\"], show: 4 },\n { panel: \"sources\", title: \"Source articles\", from: [\"created_by\", \"changed_by\"], show: 4 },\n { panel: \"penalties\", title: \"Penalties and reliefs\", from: [\"penalty_for\", \"relieves\"], show: 4 },\n { panel: \"procedure\", title: \"Procedure\", from: [\"procedure\"], show: 2 },\n { panel: \"bearers\", title: \"Who carries it\", from: [\"subject_to\"], show: 5 },\n history(4),\n notes(),\n ],\n },\n {\n id: \"penalty\", label: \"Penalty\", plural: \"Penalties\", pillar: \"law\", schema: \"LegalRuleML Penalty\", icon: \"law\",\n lens: [\n { panel: \"rule\", title: \"For which failure, how much\", from: [\"penalty_for\", \"kind\", \"amount_rule\", \"created_by\"], show: 6 },\n notes(),\n ],\n },\n {\n id: \"relief\", label: \"Relief\", plural: \"Reliefs\", pillar: \"law\", schema: \"LegalRuleML Permission\", icon: \"law\",\n lens: [\n { panel: \"rule\", title: \"What it relieves, for whom, until when\", from: [\"relieves\", \"bearer\", \"condition\", \"created_by\"], show: 6 },\n notes(),\n ],\n },\n {\n id: \"due_date\", label: \"Due date\", plural: \"Due dates\", pillar: \"law\", schema: \"Event\", icon: \"calendar\",\n lens: [\n { panel: \"due\", title: \"Due\", from: [\"due_for\", \"bearer\", \"due\", \"status\", \"fulfilled_by\"], show: 6 },\n notes(),\n ],\n },\n // Events\n {\n id: \"event\", label: \"Event\", plural: \"Events\", pillar: \"events\", schema: \"Event\", icon: \"calendar\",\n lens: [\n notes(1),\n { panel: \"involved\", title: \"Who and what was involved\", from: [\"involves\", \"affects\", \"related\"], show: 8 },\n { panel: \"followed\", title: \"What followed\", source: \"linked\", types: [\"event\", \"decision\"], show: 4 },\n discussed,\n ],\n },\n // Decisions & Policies\n {\n id: \"decision\", label: \"Decision\", plural: \"Decisions\", pillar: \"decisions\", schema: \"ChooseAction\", icon: \"decision\",\n lens: [\n notes(1),\n { panel: \"affects\", title: \"What it affects\", from: [\"affects\", \"creates\", \"related\"], show: 6 },\n { panel: \"replaced\", title: \"Replaced by\", from: [\"replaced_by\"], show: 2 },\n discussed,\n ],\n },\n {\n id: \"policy\", label: \"Policy\", plural: \"Policies\", pillar: \"decisions\", schema: \"LegalRuleML Obligation\", icon: \"decision\",\n lens: [\n { panel: \"rule\", title: \"Rule\", from: [\"action\", \"bearer\", \"creates\", \"created_by\"], show: 6 },\n { panel: \"affects\", title: \"What it affects\", from: [\"affects\", \"related\"], show: 6 },\n notes(),\n ],\n },\n // Procedures\n {\n id: \"procedure\", label: \"Procedure\", plural: \"Procedures\", pillar: \"procedures\", schema: \"HowTo\", icon: \"steps\",\n lens: [\n notes(1),\n { panel: \"triggers\", title: \"What triggers it\", from: [\"procedure\", \"triggered_by\", \"related\"], show: 5 },\n { panel: \"runs\", title: \"Last runs\", source: \"linked\", types: [\"event\"], show: 4 },\n ],\n },\n // Topics (fallback, not in the sidebar)\n {\n id: \"topic\", label: \"Topic\", plural: \"Topics\", pillar: \"topics\", schema: \"skos:Concept\", icon: \"topic\",\n lens: [\n notes(1),\n { panel: \"related\", title: \"Related\", from: [\"related\"], show: 8 },\n history(4),\n ],\n },\n]\n\nexport const DEFAULT_ONTOLOGY: Ontology = {\n version: 1,\n pillars: [\n { id: \"parties\", label: \"Parties\", description: \"People and organisations, and the roles between them\", icon: \"person\" },\n { id: \"places\", label: \"Places & Jurisdictions\", description: \"Where things are, and whose rules apply there\", icon: \"pin\" },\n { id: \"assets\", label: \"Assets\", description: \"What is owned or run: devices, servers, apps, domains, accounts, agents\", icon: \"server\" },\n { id: \"offerings\", label: \"Offerings & Projects\", description: \"What is sold, built or delivered\", icon: \"project\" },\n { id: \"agreements\", label: \"Agreements\", description: \"Contracts, subscriptions and their terms\", icon: \"contract\" },\n { id: \"law\", label: \"Law & Obligations\", description: \"Legal sources, the obligations they create, penalties, reliefs and due dates\", icon: \"law\" },\n { id: \"events\", label: \"Events\", description: \"What happened, by importance\", icon: \"calendar\" },\n { id: \"decisions\", label: \"Decisions & Policies\", description: \"Why things are the way they are\", icon: \"decision\" },\n { id: \"procedures\", label: \"Procedures\", description: \"How things are done\", icon: \"steps\" },\n { id: \"topics\", label: \"Topics\", description: \"Pages no type fits yet. A growing count means a type is missing.\", icon: \"topic\", sidebar: false },\n ],\n types,\n properties: [\n { id: \"related\", label: \"related to\", inverse: \"related to\" },\n { id: \"role_at\", label: \"role at\", inverse: \"people\", wikidata: \"P108\", range: [\"organization\"] },\n { id: \"member_of\", label: \"member of\", inverse: \"members\", wikidata: \"P463\" },\n { id: \"founded\", label: \"founded\", inverse: \"founded by\", wikidata: \"P112\" },\n { id: \"works_with\", label: \"works with\", inverse: \"works with\" },\n { id: \"reports_to\", label: \"reports to\", inverse: \"manages\" },\n { id: \"client_of\", label: \"client of\", inverse: \"clients\", wikidata: \"P1972\" },\n { id: \"works_on\", label: \"works on\", inverse: \"people\" },\n { id: \"works_for\", label: \"works for\", inverse: \"agents\", wikidata: \"P108\" },\n { id: \"owns\", label: \"owns\", inverse: \"owned by\", wikidata: \"P1830\" },\n { id: \"uses\", label: \"uses\", inverse: \"used by\", wikidata: \"P2283\" },\n { id: \"located_in\", label: \"located in\", inverse: \"here\", wikidata: \"P276\" },\n { id: \"installed_on\", label: \"installed on\", inverse: \"installed apps\", range: [\"device\", \"server\"] },\n { id: \"runs_on\", label: \"runs on\", inverse: \"hosts\" },\n { id: \"registered_with\", label: \"registered with\", inverse: \"registered\" },\n { id: \"identifier\", label: \"identifier\", wikidata: \"P1448\" },\n { id: \"legal_form\", label: \"legal form\", wikidata: \"P1454\" },\n { id: \"registrar\", label: \"registrar\" },\n { id: \"licensed_by\", label: \"licensed by\", inverse: \"licences\" },\n { id: \"party_to\", label: \"party to\", inverse: \"parties\" },\n { id: \"starts\", label: \"starts\" },\n { id: \"renews\", label: \"renews\" },\n { id: \"notice\", label: \"notice period\" },\n { id: \"amount\", label: \"amount\" },\n { id: \"creates\", label: \"creates\", inverse: \"created by\" },\n { id: \"created_by\", label: \"created by\", inverse: \"creates\" },\n { id: \"changed_by\", label: \"changed by\", inverse: \"changes\" },\n { id: \"amends\", label: \"amends\", inverse: \"amended by\", wikidata: \"P144\" },\n { id: \"repeals\", label: \"repeals\", inverse: \"repealed by\" },\n { id: \"implements\", label: \"implements\", inverse: \"implemented by\" },\n { id: \"issued_by\", label: \"issued by\", inverse: \"issues\" },\n { id: \"published_in\", label: \"published in\", wikidata: \"P1433\" },\n { id: \"in_force_from\", label: \"in force from\", wikidata: \"P7588\" },\n { id: \"legal_force\", label: \"legal force\" },\n { id: \"applies_in\", label: \"applies in\", inverse: \"laws that apply\", wikidata: \"P1001\" },\n { id: \"jurisdiction_of\", label: \"authority in\", inverse: \"authorities\" },\n { id: \"subject_to\", label: \"subject to\", inverse: \"carried by\" },\n { id: \"action\", label: \"action\" },\n { id: \"bearer\", label: \"bearer\" },\n { id: \"due_rule\", label: \"due\" },\n { id: \"amount_rule\", label: \"amount\" },\n { id: \"authority\", label: \"authority\", inverse: \"collects\" },\n { id: \"status\", label: \"status\" },\n { id: \"penalty_for\", label: \"penalty for\", inverse: \"penalties\" },\n { id: \"relieves\", label: \"relieves\", inverse: \"reliefs\" },\n { id: \"condition\", label: \"condition\" },\n { id: \"kind\", label: \"kind\" },\n { id: \"procedure\", label: \"procedure\", inverse: \"carries out\" },\n { id: \"due_for\", label: \"due for\", inverse: \"due dates\" },\n { id: \"due\", label: \"due on\" },\n { id: \"fulfilled_by\", label: \"fulfilled by\", inverse: \"fulfils\" },\n { id: \"involves\", label: \"involves\", inverse: \"events\", wikidata: \"P710\" },\n { id: \"affects\", label: \"affects\", inverse: \"affected by\" },\n { id: \"replaced_by\", label: \"replaced by\", inverse: \"replaces\", wikidata: \"P1366\" },\n { id: \"triggered_by\", label: \"triggered by\", inverse: \"triggers\" },\n { id: \"mentions\", label: \"mentions\", inverse: \"discussed in\" },\n { id: \"reading\", label: \"reading\" },\n ],\n importance: {\n default: \"normal\",\n major_set_by: \"owner\",\n rollup: { min: 5, days: 30 },\n },\n sidebar: { pins_max: 5, pins: [] },\n classify: [\n // Old pages filed agents as people and machines as places; the title\n // tells them apart until absorb writes `class` on the page.\n { type: \"agent\", legacy: [\"person\", \"concept\", \"project\"], title: \"\\\\bagents?\\\\b|\\\\bbot\\\\b\" },\n { type: \"server\", legacy: [\"place\", \"concept\"], title: \"\\\\b(server|vps|host|node)\\\\b\" },\n { type: \"device\", legacy: [\"place\", \"concept\"], title: \"\\\\b(laptop|macbook|desktop|phone|tablet|printer|router)\\\\b\" },\n { type: \"person\", legacy: [\"person\"] },\n { type: \"event\", legacy: [\"event\"] },\n { type: \"decision\", legacy: [\"decision\"] },\n { type: \"procedure\", legacy: [\"pattern\"] },\n { type: \"place\", legacy: [\"place\"] },\n // Folder and tag rules below refine untyped and concept pages only.\n { type: \"project\", legacy: [\"project\"] },\n { type: \"organization\", path: [\"clients\", \"customers\", \"vendors\", \"suppliers\", \"organizations\", \"orgs\", \"companies\"] },\n { type: \"organization\", tags: [\"organization\", \"company\", \"client\", \"vendor\", \"supplier\", \"agency\", \"bank\"] },\n { type: \"server\", path: [\"servers\", \"hosts\", \"infrastructure\"] },\n { type: \"server\", tags: [\"server\", \"vps\", \"host\"] },\n { type: \"device\", path: [\"devices\"] },\n { type: \"device\", tags: [\"device\", \"laptop\", \"phone\", \"printer\"] },\n { type: \"agent\", tags: [\"agent\"], title: \"\\\\bagent\\\\b\" },\n { type: \"app\", path: [\"apps\", \"systems\", \"services\"] },\n { type: \"domain\", tags: [\"domain\", \"dns\"] },\n { type: \"contract\", path: [\"contracts\", \"agreements\"] },\n { type: \"contract\", tags: [\"contract\", \"agreement\", \"subscription\"] },\n { type: \"legal_source\", path: [\"laws\", \"legislation\"] },\n { type: \"legal_source\", tags: [\"law\", \"legislation\", \"decree\"] },\n { type: \"obligation\", path: [\"obligations\", \"compliance\"] },\n { type: \"obligation\", tags: [\"obligation\", \"compliance\"] },\n { type: \"policy\", path: [\"policies\"] },\n { type: \"policy\", tags: [\"policy\"] },\n { type: \"procedure\", path: [\"runbooks\", \"procedures\"] },\n { type: \"procedure\", tags: [\"runbook\", \"procedure\", \"how-to\"] },\n ],\n fallback_type: \"topic\",\n}\n"],"mappings":"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","names":["existsSync","readFileSync","statSync","writeFileSync","resolve","yaml","history","show","discussed","notes","ASSET_TYPES","types","DEFAULT_ONTOLOGY","ONTOLOGY_FILE","cache","loadOntology","wikiDir","file","resolve","existsSync","DEFAULT_ONTOLOGY","mtimeMs","statSync","hit","raw","errors","yaml","readFileSync","err","ontology","mergeOntology","isObject","checkOntology","loaded","writeDefaultOntology","header","writeFileSync","base","over","out","key","list","mergeById","x","item","at","o","pillars","p","types","t","props","f","panelFrom","ty","lv","IMPORTANCE_LEVELS","r","panelSource","v"]}
@@ -1,4 +1,4 @@
1
- import{Aa as iu,D as Un,Ea as ou,F as Ed,Fa as qn,Ga as fi,Ha as au,Ia as cu,J as Cd,Ja as lu,Ka as du,L as Pd,Ma as uu,N as Md,O as ui,P as _d,Q as Ge,R as Od,S as Gn,Ta as hu,U as hi,Ua as gu,V as Dd,W as pi,X as Ye,Y as Bd,Z as qd,a as ql,aa as Qe,b as si,ba as Vd,bb as yi,ca as Jd,cb as wi,da as Xd,ea as Kd,eb as pu,f as ri,fa as zd,g as Vl,ga as Yd,h as Jl,i as Fe,ia as me,j as Xl,ja as Wn,k as Kl,ka as mi,la as Qd,m as zl,ma as Wt,na as Zd,o as Yl,oa as Ae,p as ld,pa as eu,q as dd,qa as tu,r as ud,ra as nu,s as hd,sa as Hn,t as gd,ta as Bn,u as pd,ua as su,v as md,va as ru,w as fd,x as yd,y as li}from"./chunk-4WKBK7EQ.js";import{d as Wl,g as Hl,h as Bl}from"./chunk-5RE2B5YQ.js";import{m as Zl,n as ed,o as oi,p as xe,r as td,s as pe}from"./chunk-S2GAEH2F.js";import{c as Hd}from"./chunk-BGG3ZSMW.js";import{a as Ql}from"./chunk-ZVP6GB4G.js";import{d as nd}from"./chunk-XGOBZCYC.js";import{g as sd}from"./chunk-LQE73AZR.js";import{b as rd,c as id}from"./chunk-2D3RYIDU.js";import{i as wd,m as di,n as bd,p as kd,q as vd,r as Sd,s as $d,t as Id,u as Td}from"./chunk-WEPON4FP.js";import{f as ai,g as od,h as Ln,i as ft,k as Ue,m as ad,n as cd,o as ci,p as Fn}from"./chunk-AKLZ4YO2.js";import{a as xd}from"./chunk-PPUN7YHA.js";import{a as Ad,b as Rd}from"./chunk-VZLIBDLH.js";import{b as Nd,c as jd,d as gi,e as Ld,f as Fd,g as Ud,h as Gd,i as Wd}from"./chunk-EKJG63EJ.js";import{o as ii}from"./chunk-YKYMGIQ5.js";import{b as jn}from"./chunk-EMGB23H5.js";import{A as Uc,B as Gc,C as Wc,D as ae,E as Bc,F as qc,G as Vc,H as Jc,I as Xc,J as Kc,K as zc,L as Al,M as Rl,N as El,O as Cl,P as Pl,Q as Ml,U as Dl,a as gc,b as Vr,c as mc,ca as Nl,d as $c,e as Ic,f as Ft,h as Xr,i as Kr,j as zr,k as Yr,l as Tc,s as xc,t as Ec,u as Ut,v as Cc,w as _c,x as B,z as Fc}from"./chunk-UOAJWNRF.js";import{A as Sl,B as $l,C as Il,D as Tl,E as xl,G as _l,M as Ol,a as Ac,c as Pc,d as Mc,e as ze,f as De,l as Yc,m as Qc,o as dl,p as ul,q as ml,r as fl,s as yl,t as wl,v as ni,w as On,x as bl,y as kl,z as vl}from"./chunk-ITATBKUL.js";import{b as il,c as ol,d as ei,f as Mn,g as al,h as cl,i as ll,j as Gt,k as _n}from"./chunk-GLQLCBJS.js";import{a as Qr,b as Rc}from"./chunk-6W74CHNW.js";import{A as jl,B as Dn,C as Ll,h as _a,n as Oa,o as Pr}from"./chunk-5VWOK3GQ.js";import{b as Ca}from"./chunk-SFQUP3BP.js";import{a as Le}from"./chunk-Y4CYQV7G.js";import{a as Fl,b as Nn,c as Ul,d as Gl}from"./chunk-LLNPKE7H.js";import{a as pt,b as mt}from"./chunk-SHEUCITK.js";import{a as Zc,b as Zr,c as el,d as tl,e as nl,i as sl}from"./chunk-76Z4VHDX.js";import{b as Hc}from"./chunk-W4YR2RO2.js";import{b as oe,d as gt,f as En,g as Cn,i as le,j as rl,k as Ne,l as je,m as pl,s as ti}from"./chunk-5DFUUYEA.js";import{a as hl,b as gl}from"./chunk-WMTGAVPW.js";import{d as Oc,e as Dc,f as Nc,g as jc,h as Lc,j as Pn}from"./chunk-X5C5W3E4.js";import{c as hc}from"./chunk-MYVHVJWZ.js";import{d as fc,e as yc,f as Jr,g as Rn,h as wc,i as bc,j as kc,k as vc,q as Sc}from"./chunk-AV7T3SYT.js";import{b as pc}from"./chunk-56KNKUFF.js";import{d as Da,e as nw,m as lc,n as hw,q as dc,v as uc,y as ht,z as An}from"./chunk-BN5QMNON.js";import{a as Ke,b as Lt,f as qr}from"./chunk-72SZI2UW.js";import{a as Mr,b as tw}from"./chunk-FCPTN6NF.js";import{a as vn,b as ew}from"./chunk-7I7IEX4S.js";import{b as Pa,e as Ma}from"./chunk-JHCI6XCJ.js";import{e as Ve}from"./chunk-DSYKYZMT.js";import{$ as Hr,A as Qa,B as Ur,C as Gr,E as Wr,G as Za,H as ec,J as xn,K as tc,L as nc,M as sc,N as rc,O as cw,R as ic,U as oc,V as ac,Z as lw,ba as dw,d as ut,e as ja,f as Or,g as sw,h as Sn,i as Dr,j as $n,l as Je,m as Nr,n as La,o as rw,oa as Br,p as In,pa as cc,q as iw,r as Tn,ra as uw,s as Fa,t as ow,w as za,x as Ya}from"./chunk-46JKX6CT.js";import{a as Wa,b as Ha,c as Ba,e as qa,f as Lr,g as Va,h as Ja,i as Fr,j as Xa,k as Ka,n as aw}from"./chunk-UIBUZ2N3.js";import{e as Xe,f as Ua,g as Ga,h as jr}from"./chunk-BRK6M6LA.js";import{b as _r,e as Na}from"./chunk-2QNT5JDS.js";import{d as dt}from"./chunk-QIJLFPWE.js";import{existsSync as $i,readFileSync as Ii}from"fs";var mu=["answer","narration","line"];function fu(r){return r==="/voice/queue"||r.startsWith("/voice/queue/")}async function yu(r,e,t,n,s){if(n==="/voice/queue"){if(t==="GET")return{status:200,body:r.view()};if(t!=="POST")return{status:405,body:{error:"GET or POST"}};let c=String(s.text??"").trim(),l=String(s.agentId??s.agent??""),d=String(s.kind??"line");if(!c||!l||!mu.includes(d))return{status:400,body:{error:`Required: text and agentId; kind is ${mu.join(" | ")}`}};if(c.length>5e3)return{status:413,body:{error:"text is over 5000 characters"}};let u=e(l);if(!u)return{status:404,body:{error:`Unknown agent: ${l}`}};let{item:p,done:f}=r.enqueue({voice:u,text:c,agentId:l,kind:d});return s.wait!==!0?{status:202,body:{item:p}}:{status:200,body:{item:p,played:await f}}}if(t==="POST"&&n==="/voice/queue/pause")return r.pause(),{status:200,body:r.view()};if(t==="POST"&&n==="/voice/queue/resume")return r.resume(),{status:200,body:r.view()};let[,,,i,o,a]=n.split("/");if(t!=="POST"||!i||a!==void 0)return{status:404,body:{error:"Not found"}};switch(o){case"skip":return r.skip(i)?{status:200,body:r.view()}:bi(i);case"front":return r.front(i)?{status:200,body:r.view()}:bi(i);case"replay":{let c=r.replay(i);return c?{status:202,body:{item:c}}:bi(i)}default:return{status:404,body:{error:"Not found"}}}}function wu(r){let e=n=>`${n.agentId??"someone"} (${n.kind}): "${n.text.length>80?`${n.text.slice(0,79)}\u2026`:n.text}" [${n.id}]`;return[r.playing?`Speaking: ${e(r.playing)}`:r.paused?"Paused: the listener is speaking; the queue plays on after.":"Nothing is speaking.",...r.waiting.map((n,s)=>`${s+1}. waiting: ${e(n)}`)].join(`
1
+ import{Aa as iu,D as Un,Ea as ou,F as Ed,Fa as qn,Ga as fi,Ha as au,Ia as cu,J as Cd,Ja as lu,Ka as du,L as Pd,Ma as uu,N as Md,O as ui,P as _d,Q as Ge,R as Od,S as Gn,Ta as hu,U as hi,Ua as gu,V as Dd,W as pi,X as Ye,Y as Bd,Z as qd,a as ql,aa as Qe,b as si,ba as Vd,bb as yi,ca as Jd,cb as wi,da as Xd,ea as Kd,eb as pu,f as ri,fa as zd,g as Vl,ga as Yd,h as Jl,i as Fe,ia as me,j as Xl,ja as Wn,k as Kl,ka as mi,la as Qd,m as zl,ma as Wt,na as Zd,o as Yl,oa as Ae,p as ld,pa as eu,q as dd,qa as tu,r as ud,ra as nu,s as hd,sa as Hn,t as gd,ta as Bn,u as pd,ua as su,v as md,va as ru,w as fd,x as yd,y as li}from"./chunk-O4XEQTEN.js";import{d as Wl,g as Hl,h as Bl}from"./chunk-JIXNSA67.js";import{a as Ql}from"./chunk-ZVP6GB4G.js";import{m as Zl,n as ed,o as oi,p as xe,r as td,s as pe}from"./chunk-S2GAEH2F.js";import{a as Ad,b as Rd}from"./chunk-VZLIBDLH.js";import{b as Nd,c as jd,d as gi,e as Ld,f as Fd,g as Ud,h as Gd,i as Wd}from"./chunk-EKJG63EJ.js";import{c as Hd}from"./chunk-BGG3ZSMW.js";import{d as nd}from"./chunk-XGOBZCYC.js";import{g as sd}from"./chunk-LQE73AZR.js";import{b as rd,c as id}from"./chunk-2D3RYIDU.js";import{i as wd,m as di,n as bd,p as kd,q as vd,r as Sd,s as $d,t as Id,u as Td}from"./chunk-WEPON4FP.js";import{f as ai,g as od,h as Ln,i as ft,k as Ue,m as ad,n as cd,o as ci,p as Fn}from"./chunk-AKLZ4YO2.js";import{a as xd}from"./chunk-PPUN7YHA.js";import{a as Le}from"./chunk-Y4CYQV7G.js";import{a as Fl,b as Nn,c as Ul,d as Gl}from"./chunk-LLNPKE7H.js";import{a as pt,b as mt}from"./chunk-SHEUCITK.js";import{o as ii}from"./chunk-GUQDPA6R.js";import{b as jn}from"./chunk-EMGB23H5.js";import{A as Uc,B as Gc,C as Wc,D as ae,E as Bc,F as qc,G as Vc,H as Jc,I as Xc,J as Kc,K as zc,L as Al,M as Rl,N as El,O as Cl,P as Pl,Q as Ml,U as Dl,a as gc,b as Vr,c as mc,ca as Nl,d as $c,e as Ic,f as Ft,h as Xr,i as Kr,j as zr,k as Yr,l as Tc,s as xc,t as Ec,u as Ut,v as Cc,w as _c,x as B,z as Fc}from"./chunk-D6SWAB5J.js";import{A as Sl,B as $l,C as Il,D as Tl,E as xl,G as _l,M as Ol,a as Ac,c as Pc,d as Mc,e as ze,f as De,l as Yc,m as Qc,o as dl,p as ul,q as ml,r as fl,s as yl,t as wl,v as ni,w as On,x as bl,y as kl,z as vl}from"./chunk-LVV7JBHM.js";import{b as il,c as ol,d as ei,f as Mn,g as al,h as cl,i as ll,j as Gt,k as _n}from"./chunk-GLQLCBJS.js";import{a as Qr,b as Rc}from"./chunk-6W74CHNW.js";import{A as jl,B as Dn,C as Ll,h as _a,n as Oa,o as Pr}from"./chunk-WUDVBPQV.js";import{b as Ca}from"./chunk-SFQUP3BP.js";import{d as Oc,e as Dc,f as Nc,g as jc,h as Lc,j as Pn}from"./chunk-X5C5W3E4.js";import{a as Zc,b as Zr,c as el,d as tl,e as nl,i as sl}from"./chunk-76Z4VHDX.js";import{b as Hc}from"./chunk-W4YR2RO2.js";import{b as oe,d as gt,f as En,g as Cn,i as le,j as rl,k as Ne,l as je,m as pl,s as ti}from"./chunk-5DFUUYEA.js";import{a as hl,b as gl}from"./chunk-WMTGAVPW.js";import{b as pc}from"./chunk-56KNKUFF.js";import{d as Da,e as nw,m as lc,n as hw,q as dc,v as uc,y as ht,z as An}from"./chunk-JUIL2EW3.js";import{a as Ke,b as Lt,f as qr}from"./chunk-72SZI2UW.js";import{a as Mr,b as tw}from"./chunk-FCPTN6NF.js";import{c as hc}from"./chunk-MYVHVJWZ.js";import{d as fc,e as yc,f as Jr,g as Rn,h as wc,i as bc,j as kc,k as vc,q as Sc}from"./chunk-AV7T3SYT.js";import{a as vn,b as ew}from"./chunk-7I7IEX4S.js";import{b as Pa,e as Ma}from"./chunk-JHCI6XCJ.js";import{e as Ve}from"./chunk-DSYKYZMT.js";import{$ as Hr,A as Qa,B as Ur,C as Gr,E as Wr,G as Za,H as ec,J as xn,K as tc,L as nc,M as sc,N as rc,O as cw,R as ic,U as oc,V as ac,Z as lw,ba as dw,d as ut,e as ja,f as Or,g as sw,h as Sn,i as Dr,j as $n,l as Je,m as Nr,n as La,o as rw,oa as Br,p as In,pa as cc,q as iw,r as Tn,ra as uw,s as Fa,t as ow,w as za,x as Ya}from"./chunk-46JKX6CT.js";import{a as Wa,b as Ha,c as Ba,e as qa,f as Lr,g as Va,h as Ja,i as Fr,j as Xa,k as Ka,n as aw}from"./chunk-UIBUZ2N3.js";import{e as Xe,f as Ua,g as Ga,h as jr}from"./chunk-BRK6M6LA.js";import{b as _r,e as Na}from"./chunk-2QNT5JDS.js";import{d as dt}from"./chunk-QIJLFPWE.js";import{existsSync as $i,readFileSync as Ii}from"fs";var mu=["answer","narration","line"];function fu(r){return r==="/voice/queue"||r.startsWith("/voice/queue/")}async function yu(r,e,t,n,s){if(n==="/voice/queue"){if(t==="GET")return{status:200,body:r.view()};if(t!=="POST")return{status:405,body:{error:"GET or POST"}};let c=String(s.text??"").trim(),l=String(s.agentId??s.agent??""),d=String(s.kind??"line");if(!c||!l||!mu.includes(d))return{status:400,body:{error:`Required: text and agentId; kind is ${mu.join(" | ")}`}};if(c.length>5e3)return{status:413,body:{error:"text is over 5000 characters"}};let u=e(l);if(!u)return{status:404,body:{error:`Unknown agent: ${l}`}};let{item:p,done:f}=r.enqueue({voice:u,text:c,agentId:l,kind:d});return s.wait!==!0?{status:202,body:{item:p}}:{status:200,body:{item:p,played:await f}}}if(t==="POST"&&n==="/voice/queue/pause")return r.pause(),{status:200,body:r.view()};if(t==="POST"&&n==="/voice/queue/resume")return r.resume(),{status:200,body:r.view()};let[,,,i,o,a]=n.split("/");if(t!=="POST"||!i||a!==void 0)return{status:404,body:{error:"Not found"}};switch(o){case"skip":return r.skip(i)?{status:200,body:r.view()}:bi(i);case"front":return r.front(i)?{status:200,body:r.view()}:bi(i);case"replay":{let c=r.replay(i);return c?{status:202,body:{item:c}}:bi(i)}default:return{status:404,body:{error:"Not found"}}}}function wu(r){let e=n=>`${n.agentId??"someone"} (${n.kind}): "${n.text.length>80?`${n.text.slice(0,79)}\u2026`:n.text}" [${n.id}]`;return[r.playing?`Speaking: ${e(r.playing)}`:r.paused?"Paused: the listener is speaking; the queue plays on after.":"Nothing is speaking.",...r.waiting.map((n,s)=>`${s+1}. waiting: ${e(n)}`)].join(`
2
2
  `)}var bi=r=>({status:404,body:{error:`No such line in the queue: ${r}`}});import{resolve as Ti}from"path";dw();var gw={name:"agentx",version:"0.1.0"},pw=["2024-11-05","2025-03-26","2025-06-18","2025-11-25"],mw="2024-11-05";function fw(r){return typeof r=="string"&&pw.includes(r)?r:mw}var yw={tools:{},elicitation:{form:{}}},ww=0;async function bu(r,e){let t=++ww;return Ze({jsonrpc:"2.0",id:`elicit-${t}`,method:"elicitation/create",params:{mode:"form",message:r,requestedSchema:e}}),new Promise(n=>{Ht.set(`elicit-${t}`,s=>{s?.action==="accept"&&s.content?n(s.content):n(null)}),setTimeout(()=>{Ht.has(`elicit-${t}`)&&(Ht.delete(`elicit-${t}`),n(null))},6e4)})}var Ht=new Map,bw="http://localhost:18800",ki;function kw(){if(process.env.AGENTX_DAEMON_URL)return process.env.AGENTX_DAEMON_URL;for(let r of["agentx.json",".agentx/config.json"])try{let e=Ti(process.cwd(),r);if(!$i(e))continue;let t=JSON.parse(Ii(e,"utf-8"))?.node?.bind;if(typeof t!="string"||!t.includes(":"))continue;{let n=t.lastIndexOf(":"),s=t.slice(0,n),i=t.slice(n+1),o=!s||s==="0.0.0.0"||s==="::"||s==="*"?"127.0.0.1":s;if(i)return`http://${o}:${i}`}}catch{}return bw}function J(){return ki===void 0&&(ki=kw()),ki}var vi;function vw(r){try{let e=Ti(process.cwd(),".env");if(!$i(e))return"";for(let t of Ii(e,"utf-8").split(`
3
3
  `)){let n=t.trim().replace(/^export\s+/,"");if(!n.startsWith(`${r}=`))continue;let s=n.slice(r.length+1).trim();return/^(["']).*\1$/.test(s)?s.slice(1,-1):s}}catch{}return""}function Sw(r=process.env){if(r.AGENTX_TOKEN)return r.AGENTX_TOKEN;if(r.MESH_TOKEN)return r.MESH_TOKEN;let e=vw("MESH_TOKEN");if(e)return e;for(let t of["agentx.json",".agentx/config.json"])try{let n=Ti(process.cwd(),t);if(!$i(n))continue;let s=JSON.parse(Ii(n,"utf-8"))?.dashboard?.token;if(typeof s=="string"&&s)return s}catch{}return""}function $w(){return vi===void 0&&(vi=Sw()),vi}var X=(r,e)=>{let t=$w();if(!t)return fetch(r,e);let n=new Headers(e?.headers);return n.has("Authorization")||n.set("Authorization",`Bearer ${t}`),fetch(r,{...e,headers:n})};function Si(r=process.env){let e={};return r.AGENTX_TASK_ID&&(e.callerTaskId=r.AGENTX_TASK_ID),r.AGENTX_CHANNEL&&(e.callerChannel=r.AGENTX_CHANNEL),r.AGENTX_CHAT_ID&&(e.callerChatId=r.AGENTX_CHAT_ID),e}async function Iw(){let r=process.env.AGENTX_AGENT_ID,e=Si();if(!(!r||!e.callerChannel||!e.callerChatId))try{let t=new URLSearchParams({channel:e.callerChannel,chatId:e.callerChatId}),n=await X(`${J()}/agents/${encodeURIComponent(r)}/intent-path?${t}`,{signal:AbortSignal.timeout(2e3)});if(!n.ok)return;let s=await n.json();return{...Array.isArray(s.path)&&s.path.length?{path:s.path}:{},...typeof s.graphWeight=="number"?{graphWeight:s.graphWeight}:{}}}catch{return}}var Tw=/\x1B\[[0-9;]*[A-Za-z]/g;function yt(r){return r.replace(Tw,"")}async function xw(r,e,t){let n=await X(`${J()}/recall`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agent:r,channel:e,limit:Math.min(Math.max(t??30,1),100)})}),s=await n.json().catch(()=>({}));if(!n.ok)return{content:[{type:"text",text:`Error: ${s.error||n.statusText}`}]};let i=s.turns||[],o=e?`on ${e}`:"on any channel";return i.length===0?{content:[{type:"text",text:`No other messages ${o} today for ${r}.`}]}:{content:[{type:"text",text:Aw(i,!!s.hasMore)}]}}function Aw(r,e){let t=new Map;for(let s of r){let i=`${s.channel}/${s.chatId}`;t.has(i)||t.set(i,[]),t.get(i).push(s)}let n=[];for(let[s,i]of t){let o=[...i].sort((a,c)=>a.ts.localeCompare(c.ts)).map(a=>{let c=a.role==="agent"?"you":a.senderName||"user";return` [${a.ts.slice(11,16)}] ${c}: ${a.content.slice(0,300)}`});n.push(`From ${s}:
4
4
  ${o.join(`
@@ -35,7 +35,7 @@ Open it with your Read tool.`}]}}case"agentx_health":{let s=await(await X(`${J()
35
35
  `)}]}}case"agentx_attach_answer":{let n=process.env.CLAUDE_CODE_SESSION_ID;if(!n)return{content:[{type:"text",text:"Not running inside a Claude Code session \u2014 attach mode is unavailable here."}]};let s=await X(`${J()}/attach/answer`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:n,text:String(e.text??"")})}),i=await s.json();if(!s.ok)return{content:[{type:"text",text:`Could not answer: ${i?.error??s.status}`}]};let o=i.pending>0?` ${i.pending} still queued.`:"";return{content:[{type:"text",text:`Sent to ${i.item?.channel}.${o}`}]}}case"agentx_events":{let n=process.env.AGENTX_AGENT_ID||e.agentId;if(!n)return{content:[{type:"text",text:"Error: agentId is required (no AGENTX_AGENT_ID in this session)."}]};let s=new URLSearchParams;typeof e.since=="string"&&e.since&&s.set("since",e.since),typeof e.limit=="number"&&s.set("limit",String(e.limit));let i=await X(`${J()}/agents/${encodeURIComponent(n)}/events?${s}`,{signal:AbortSignal.timeout(1e4)}),o=await i.json().catch(()=>({}));if(!i.ok)return{content:[{type:"text",text:`Error: ${o.error||i.statusText}`}]};let{formatEventLine:a}=await import("./subscriptions-RYVPHVIV.js");return{content:[{type:"text",text:Ew(n,o,a)}]}}case"agentx_crons":{let s=await(await X(`${J()}/crons/health`)).json(),i=`Healthy: ${s.healthy}, Failing: ${s.failing}, Disabled: ${s.disabled}, Missed: ${s.missed}`,o=(s.jobs||[]).map(a=>` ${a.id}: ${a.status}${a.consecutiveErrors?` (${a.consecutiveErrors} errors)`:""}${a.lastError?` \u2014 ${a.lastError.slice(0,100)}`:""}`).join(`
36
36
  `);return{content:[{type:"text",text:`${i}
37
37
 
38
- ${o}`}]}}case"agentx_schedule":{let{runScheduleTool:n,resolveScheduleCaller:s}=await import("./schedule-tool-YRANRFHO.js");return{content:[{type:"text",text:await n(e,s(e),{notifyOperator:async(o,a)=>{let c=await X(`${J()}/send`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:o.channel,chatId:o.chatId,accountId:o.accountId,text:a}),signal:AbortSignal.timeout(1e4)});if(!c.ok){let l=await c.json().catch(()=>({}));throw new Error(l?.error||`HTTP ${c.status}`)}}})}]}}case"agentx_approval":{let{runApprovalTool:n}=await import("./tool-5JTCSRTW.js");return{content:[{type:"text",text:await n(e,{daemonUrl:J(),fetch:X})}]}}case"agentx_request":{let{runRequestTool:n}=await import("./tool-FZEC5FQX.js");return{content:[{type:"text",text:await n(e,{daemonUrl:J(),fetch:X})}]}}case"agentx_workflow":{let{runWorkflowTool:n}=await import("./follow-up-tool-AIOLNUF7.js");return{content:[{type:"text",text:await n(e,{daemonUrl:J()})}]}}case"agentx_wiki_query":{let n=String(e.question||"").trim();if(!n)return{content:[{type:"text",text:"Error: `question` is required."}]};let{WikiHub:s}=await import("./wiki-WJM5XNFS.js"),{agenticQuery:i}=await import("./query-RV6SHTRN.js"),{resolve:o}=await import("path"),a=e.wiki_dir||o(process.cwd(),".agentx/wiki"),c=new s(a,void 0,"graph"),l=e.agent||"";if(!l){let{existsSync:k}=await import("fs");for(let S of c.listAgents()){let $=o(c.getAgentWiki(S).baseDir,"_index.md");if(k($)){l=S;break}}}if(!l)return{content:[{type:"text",text:"Error: no agent has a wiki catalog yet. Run `agentx wiki absorb` first."}]};let d=c.getAgentWiki(l),u=typeof e.max_hops=="number"?Math.min(3,Math.max(0,e.max_hops)):2,p=await Iw(),f=await i(n,d,l,{maxHops:u,messagePath:p?.path,...p?.graphWeight!==void 0?{graphWeight:p.graphWeight}:{}});if(f.status!=="ok")return{content:[{type:"text",text:`Query returned status "${f.status}"${f.error?`: ${f.error}`:""}`}]};let g=f.citations.map(k=>` - ${k.title} [${k.type||"?"}] (${k.path})`).join(`
38
+ ${o}`}]}}case"agentx_schedule":{let{runScheduleTool:n,resolveScheduleCaller:s}=await import("./schedule-tool-YRANRFHO.js");return{content:[{type:"text",text:await n(e,s(e),{notifyOperator:async(o,a)=>{let c=await X(`${J()}/send`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:o.channel,chatId:o.chatId,accountId:o.accountId,text:a}),signal:AbortSignal.timeout(1e4)});if(!c.ok){let l=await c.json().catch(()=>({}));throw new Error(l?.error||`HTTP ${c.status}`)}}})}]}}case"agentx_approval":{let{runApprovalTool:n}=await import("./tool-5JTCSRTW.js");return{content:[{type:"text",text:await n(e,{daemonUrl:J(),fetch:X})}]}}case"agentx_request":{let{runRequestTool:n}=await import("./tool-FZEC5FQX.js");return{content:[{type:"text",text:await n(e,{daemonUrl:J(),fetch:X})}]}}case"agentx_workflow":{let{runWorkflowTool:n}=await import("./follow-up-tool-AIOLNUF7.js");return{content:[{type:"text",text:await n(e,{daemonUrl:J()})}]}}case"agentx_wiki_query":{let n=String(e.question||"").trim();if(!n)return{content:[{type:"text",text:"Error: `question` is required."}]};let{WikiHub:s}=await import("./wiki-BT3H2WCD.js"),{agenticQuery:i}=await import("./query-DNJONEKC.js"),{resolve:o}=await import("path"),a=e.wiki_dir||o(process.cwd(),".agentx/wiki"),c=new s(a,void 0,"graph"),l=e.agent||"";if(!l){let{existsSync:k}=await import("fs");for(let S of c.listAgents()){let $=o(c.getAgentWiki(S).baseDir,"_index.md");if(k($)){l=S;break}}}if(!l)return{content:[{type:"text",text:"Error: no agent has a wiki catalog yet. Run `agentx wiki absorb` first."}]};let d=c.getAgentWiki(l),u=typeof e.max_hops=="number"?Math.min(3,Math.max(0,e.max_hops)):2,p=await Iw(),f=await i(n,d,l,{maxHops:u,messagePath:p?.path,...p?.graphWeight!==void 0?{graphWeight:p.graphWeight}:{}});if(f.status!=="ok")return{content:[{type:"text",text:`Query returned status "${f.status}"${f.error?`: ${f.error}`:""}`}]};let g=f.citations.map(k=>` - ${k.title} [${k.type||"?"}] (${k.path})`).join(`
39
39
  `),b=f.walked.length;return{content:[{type:"text",text:`${f.answer}
40
40
 
41
41
  Citations (${b} article${b===1?"":"s"} walked):
@@ -521,7 +521,7 @@ ${l}`)}let S={agentId:o,message:k,context:{channel:b,sender:g?"opencode":"openai
521
521
 
522
522
  `)}}function Dh(r){r.writeHead(200,{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"})}function Nh(r,e,t,n,s,i){r.write(`data: ${JSON.stringify({id:e,object:"chat.completion.chunk",created:t,model:n,choices:[{index:0,delta:s,finish_reason:i}]})}
523
523
 
524
- `)}function jh(r,e,t,n,s,i){let o=i?.usage?.inputTokens??0,a=i?.usage?.outputTokens??Math.ceil(s.length/4);zi(r,200,{id:e,object:"chat.completion",created:t,model:n,choices:[{index:0,message:{role:"assistant",content:s},finish_reason:"stop"}],usage:{prompt_tokens:o,completion_tokens:a,total_tokens:o+a}})}function zi(r,e,t){r.writeHead(e,{"Content-Type":"application/json"}),r.end(JSON.stringify(t))}var Zt=class{module;minLevel;constructor(e,t="info"){this.module=e,this.minLevel=t}child(e){return new Zt(`${this.module}:${e}`,this.minLevel)}debug(e,t){this.emit("debug",e,t)}info(e,t){this.emit("info",e,t)}warn(e,t){this.emit("warn",e,t)}error(e,t){this.emit("error",e,t)}asConsoleLog(){return(...e)=>{let n=e.map(s=>typeof s=="string"?s:JSON.stringify(s)).join(" ").replace(/^\[agentx\]\s*/,"");n&&this.info(n)}}emit(e,t,n){if(Zt.levelOrder[e]<Zt.levelOrder[this.minLevel])return;let s={time:new Date().toISOString(),level:e,module:this.module,msg:t,...n},i=e==="error"?"ERROR":e==="warn"?"WARN":"",o=`[${this.module}]`,a=i?`${o} ${i}: ${t}`:`${o} ${t}`;console.error(a)}},Qt=Zt;dt(Qt,"levelOrder",{debug:0,info:1,warn:2,error:3});import{realpathSync as Mk,statSync as _k}from"fs";var It={version:"0.125.1",commit:"77c1258",startedAt:new Date(Date.now()-process.uptime()*1e3).toISOString()};function Ok(r,e){let t=e.mtimeMs!==null&&e.mtimeMs>Date.parse(r.startedAt),n=!!e.version&&!!r.version&&e.version!==r.version;return{newer:t||n,changedAt:e.mtimeMs===null?null:new Date(e.mtimeMs).toISOString(),version:e.version}}function Fh(){let r=null;try{r=_k(Mk(process.argv[1])).mtimeMs}catch{}let e=oh().version;return Ok(It,{mtimeMs:r,version:e&&e!=="0.0.0"?e:null})}import{randomUUID as Dk}from"crypto";var bs=class{constructor(e=new _c){this.core=e}count=0;subscribe(e,t){this.count++;let n=this.core.subscribe((i,o)=>{if(!o||!Nk.includes(o.kind))return;let a={...o,rootId:i.rootId,node:i.node};Lk(e,a)&&t(a)}),s=!0;return()=>{s&&(s=!1,this.count--,n())}}publish(e){let t={id:typeof e.id=="string"?e.id:Dk(),at:typeof e.at=="string"?e.at:new Date().toISOString(),...e},{type:n,summary:s,ref:i,agentId:o}=jk(t);this.core.publish({id:t.id,at:t.at,kind:t.kind,type:n,summary:s,ref:i,agentId:o,rootId:typeof e.rootId=="string"?e.rootId:void 0,data:t})}get size(){return this.count}},Nk=["run","task","signal","mesh","channel","status"];function jk(r){switch(r.kind){case"run":return{type:r.phase,ref:r.runId,summary:[r.workflowId,r.nodeId,r.phase,r.note].filter(Boolean).join(" ")};case"task":return{type:r.phase,ref:r.taskId,summary:`${r.title??r.taskId} ${r.phase}`};case"signal":return{type:"emitted",summary:`signal ${r.name} (${r.scope})`};case"mesh":return{type:r.delta,summary:`peer ${r.peer} ${r.delta}`};case"channel":return{type:r.direction,ref:r.messageId,agentId:r.agentId,summary:`${r.channel} ${r.direction==="in"?"inbound":"outbound"}`};case"status":return{type:"status",summary:r.message}}}function Lk(r,e){return!(r.kinds&&r.kinds.length>0&&!r.kinds.includes(e.kind)||r.workflowId&&(e.kind==="run"&&e.workflowId!==r.workflowId||e.kind==="task"&&e.workflowId!==r.workflowId||e.kind==="signal"&&e.workflowId&&e.workflowId!==r.workflowId)||r.runId&&(e.kind==="run"&&e.runId!==r.runId||e.kind==="task"&&e.runId!==r.runId)||r.actor&&(e.kind!=="task"||!(e.assignedTo?.includes(r.actor)||e.submittedBy===r.actor))||r.channel&&(e.kind!=="channel"||e.channel!==r.channel))}function Uh(r){if(!r)return;let e=["run","task","signal","mesh","channel","status"],n=r.split(",").map(s=>s.trim()).filter(Boolean).filter(s=>e.includes(s));return n.length?n:void 0}import{createHmac as ks,timingSafeEqual as Gh}from"crypto";var vs=class{registry;config;mesh;webhookEntries;log;workflowDispatcher;hooks;constructor(e,t={},n=console.error.bind(console,"[webhook]"),s,i=[],o){this.registry=e,this.config=t,this.log=n,this.mesh=s,this.webhookEntries=i,this.hooks=o}hookEventFor(e,t){if(e==="stripe")return"on:stripe-event";if(e==="sentry")return"on:sentry-issue";if(e==="vercel")return"on:vercel-deployment";if(e==="hubspot")return"on:hubspot-event";if(e==="odoo")return"on:odoo-event";if(e==="github"){let n=(t??"").split(".")[0];return n==="issues"||n==="issue_comment"?"on:github-issue":n==="pull_request"||n==="pull_request_review"?"on:github-pr":n==="push"?"on:github-push":null}return null}async fireHookSafe(e,t,n,s){let i=this.hookEventFor(e,t);if(!i||!this.hooks||!this.hooks.has(i))return;let o={};if(e==="github"){let a=s;typeof a.sender?.login=="string"&&(o.author=a.sender.login),typeof a.repository?.full_name=="string"&&(o.repo=a.repository.full_name);let c=a.issue?.number??a.pull_request?.number;typeof c=="number"&&(o.number=c)}try{await this.hooks.execute(i,{event:i,source:e,eventType:t,agentId:n,payload:s,...o})}catch(a){this.log(`${i} hook error (non-fatal): ${a?.message??a}`)}}setWorkflowDispatcher(e){this.workflowDispatcher=e}setWebhookEntries(e){this.webhookEntries=e}async handle(e,t,n){let s=n.replace(/^\/webhook\/?/,"").split("/").filter(Boolean),i=s[0],o=s[1];if(!i){this.sendJson(t,400,{error:"Missing agent ID. Use /webhook/:agentId"});return}let{raw:a,parsed:c}=await this.readBody(e),l=o||this.detectSource(e.headers);if(process.env.AGENTX_WEBHOOK_DEBUG_HEADERS==="1"){let y={};for(let[k,S]of Object.entries(e.headers))(k.startsWith("x-hubspot")||k.startsWith("x-hub")||k.startsWith("x-github")||k.startsWith("x-gitlab")||k.startsWith("stripe")||k.startsWith("sentry")||k.startsWith("x-vercel")||k.startsWith("x-odoo")||k.startsWith("x-webhook")||k==="user-agent"||k==="content-type"||k==="host"||k==="x-forwarded-host"||k==="x-forwarded-proto"||k==="x-forwarded-for")&&(y[k]=S);this.log(`Webhook [${l}] reqUrl=${e.url} headers: ${JSON.stringify(y)}`)}let d=this.validateSignature(e.headers,a,l,i,e.url);if(d){this.log(`Webhook [${l}] -> ${i}: REJECTED (${d})`),this.sendJson(t,401,{error:d});return}let u=this.buildSummary(l,c,e.headers);this.log(`Webhook [${l}] -> ${i}: ${u.slice(0,100)}`);let p=this.extractEventType(l,c,e.headers),f=this.webhookEntries.find(y=>y.enabled&&y.agentId===i&&y.source===l),g=p&&f?.triggers?.[p]||f?.defaultWorkflow||null;if(await this.fireHookSafe(l,p,i,c),g&&this.workflowDispatcher)try{let y=await this.workflowDispatcher.dispatchWorkflow({workflowId:g,entityRef:{kind:"webhook",id:`${l}:${i}:${p??"\u2014"}:${Date.now()}`},event:{kind:"webhook",source:l,eventType:p,payload:c},trigger:{source:l}});this.log(`Webhook [${l}/${p??"\u2014"}] -> workflow=${g} (claimed=${y.claimed})`),this.sendJson(t,202,{ok:!0,agent:i,source:l,eventType:p,workflow:g,claimed:y.claimed});return}catch(y){this.log(`Workflow dispatch failed [${l}/${p}/${g}]: ${y.message}`)}let b=this.webhookEntries.find(y=>y.enabled&&y.node&&y.agentId===i&&y.source===l);if(b?.node&&this.mesh){this.sendJson(t,202,{ok:!0,agent:i,source:l,node:b.node,status:"accepted"}),this.mesh.sendTask(b.node,u,i,{context:{channel:`webhook:${l}`,sender:`webhook:${l}`}}).then(y=>this.log(`Mesh-forwarded webhook [${l}] -> ${b.node}/${i}: ${y?.slice(0,100)||"ok"}`),y=>this.log(`Mesh forward failed [${l}] -> ${b.node}/${i}: ${y.message}`));return}try{let y=await this.registry.execute({message:u,agentId:i,context:{channel:`webhook:${l}`,sender:`webhook:${l}`}});this.sendJson(t,y.error?500:200,{ok:!y.error,agent:i,source:l,response:y.content?.slice(0,500),error:y.error,duration:y.duration})}catch(y){this.sendJson(t,500,{error:y.message})}}extractEventType(e,t,n){let s=i=>{let o=n[i.toLowerCase()];return Array.isArray(o)?o[0]:o};if(e==="github"){let i=s("x-github-event");if(!i)return;let o=typeof t.action=="string"?t.action:void 0;return o?`${i}.${o}`:i}if(e==="gitlab")return s("x-gitlab-event")||(typeof t.object_kind=="string"?t.object_kind:void 0);if(e==="stripe")return typeof t.type=="string"?t.type:void 0;if(e==="sentry")return s("sentry-hook-resource");if(e==="hubspot"){if(Array.isArray(t)&&t.length>0){let i=t[0];if(i&&typeof i.subscriptionType=="string")return i.subscriptionType}return typeof t.subscriptionType=="string"?t.subscriptionType:void 0}if(e==="odoo")return typeof t.event=="string"?t.event:typeof t.subscriptionType=="string"?t.subscriptionType:typeof t.model=="string"?typeof t.action=="string"?`${t.model}.${t.action}`:t.model:void 0}detectSource(e){return e["x-gitlab-event"]||e["x-gitlab-token"]?"gitlab":e["x-github-event"]?"github":e["stripe-signature"]?"stripe":e["sentry-hook-resource"]?"sentry":e["x-vercel-signature"]?"vercel":e["x-hubspot-signature-v3"]||e["x-hubspot-signature-version"]?"hubspot":e["x-odoo-database"]||e["x-odoo-signature"]?"odoo":e["x-hub-signature-256"]?"github":"unknown"}buildSummary(e,t,n){let s=[`[Webhook from ${e}]`];switch(e){case"gitlab":{let o=n["x-gitlab-event"]||t.object_kind||"event",a=t.project?.path_with_namespace||"",c=t.user?.name||t.user_username||"";if(s.push(`Event: ${o}`),a&&s.push(`Project: ${a}`),c&&s.push(`User: ${c}`),t.ref&&s.push(`Ref: ${t.ref}`),t.commits&&Array.isArray(t.commits)){s.push(`Commits: ${t.commits.length}`);for(let d of t.commits.slice(0,3))s.push(` - ${d.message?.split(`
524
+ `)}function jh(r,e,t,n,s,i){let o=i?.usage?.inputTokens??0,a=i?.usage?.outputTokens??Math.ceil(s.length/4);zi(r,200,{id:e,object:"chat.completion",created:t,model:n,choices:[{index:0,message:{role:"assistant",content:s},finish_reason:"stop"}],usage:{prompt_tokens:o,completion_tokens:a,total_tokens:o+a}})}function zi(r,e,t){r.writeHead(e,{"Content-Type":"application/json"}),r.end(JSON.stringify(t))}var Zt=class{module;minLevel;constructor(e,t="info"){this.module=e,this.minLevel=t}child(e){return new Zt(`${this.module}:${e}`,this.minLevel)}debug(e,t){this.emit("debug",e,t)}info(e,t){this.emit("info",e,t)}warn(e,t){this.emit("warn",e,t)}error(e,t){this.emit("error",e,t)}asConsoleLog(){return(...e)=>{let n=e.map(s=>typeof s=="string"?s:JSON.stringify(s)).join(" ").replace(/^\[agentx\]\s*/,"");n&&this.info(n)}}emit(e,t,n){if(Zt.levelOrder[e]<Zt.levelOrder[this.minLevel])return;let s={time:new Date().toISOString(),level:e,module:this.module,msg:t,...n},i=e==="error"?"ERROR":e==="warn"?"WARN":"",o=`[${this.module}]`,a=i?`${o} ${i}: ${t}`:`${o} ${t}`;console.error(a)}},Qt=Zt;dt(Qt,"levelOrder",{debug:0,info:1,warn:2,error:3});import{realpathSync as Mk,statSync as _k}from"fs";var It={version:"0.126.2",commit:"1e41256",startedAt:new Date(Date.now()-process.uptime()*1e3).toISOString()};function Ok(r,e){let t=e.mtimeMs!==null&&e.mtimeMs>Date.parse(r.startedAt),n=!!e.version&&!!r.version&&e.version!==r.version;return{newer:t||n,changedAt:e.mtimeMs===null?null:new Date(e.mtimeMs).toISOString(),version:e.version}}function Fh(){let r=null;try{r=_k(Mk(process.argv[1])).mtimeMs}catch{}let e=oh().version;return Ok(It,{mtimeMs:r,version:e&&e!=="0.0.0"?e:null})}import{randomUUID as Dk}from"crypto";var bs=class{constructor(e=new _c){this.core=e}count=0;subscribe(e,t){this.count++;let n=this.core.subscribe((i,o)=>{if(!o||!Nk.includes(o.kind))return;let a={...o,rootId:i.rootId,node:i.node};Lk(e,a)&&t(a)}),s=!0;return()=>{s&&(s=!1,this.count--,n())}}publish(e){let t={id:typeof e.id=="string"?e.id:Dk(),at:typeof e.at=="string"?e.at:new Date().toISOString(),...e},{type:n,summary:s,ref:i,agentId:o}=jk(t);this.core.publish({id:t.id,at:t.at,kind:t.kind,type:n,summary:s,ref:i,agentId:o,rootId:typeof e.rootId=="string"?e.rootId:void 0,data:t})}get size(){return this.count}},Nk=["run","task","signal","mesh","channel","status"];function jk(r){switch(r.kind){case"run":return{type:r.phase,ref:r.runId,summary:[r.workflowId,r.nodeId,r.phase,r.note].filter(Boolean).join(" ")};case"task":return{type:r.phase,ref:r.taskId,summary:`${r.title??r.taskId} ${r.phase}`};case"signal":return{type:"emitted",summary:`signal ${r.name} (${r.scope})`};case"mesh":return{type:r.delta,summary:`peer ${r.peer} ${r.delta}`};case"channel":return{type:r.direction,ref:r.messageId,agentId:r.agentId,summary:`${r.channel} ${r.direction==="in"?"inbound":"outbound"}`};case"status":return{type:"status",summary:r.message}}}function Lk(r,e){return!(r.kinds&&r.kinds.length>0&&!r.kinds.includes(e.kind)||r.workflowId&&(e.kind==="run"&&e.workflowId!==r.workflowId||e.kind==="task"&&e.workflowId!==r.workflowId||e.kind==="signal"&&e.workflowId&&e.workflowId!==r.workflowId)||r.runId&&(e.kind==="run"&&e.runId!==r.runId||e.kind==="task"&&e.runId!==r.runId)||r.actor&&(e.kind!=="task"||!(e.assignedTo?.includes(r.actor)||e.submittedBy===r.actor))||r.channel&&(e.kind!=="channel"||e.channel!==r.channel))}function Uh(r){if(!r)return;let e=["run","task","signal","mesh","channel","status"],n=r.split(",").map(s=>s.trim()).filter(Boolean).filter(s=>e.includes(s));return n.length?n:void 0}import{createHmac as ks,timingSafeEqual as Gh}from"crypto";var vs=class{registry;config;mesh;webhookEntries;log;workflowDispatcher;hooks;constructor(e,t={},n=console.error.bind(console,"[webhook]"),s,i=[],o){this.registry=e,this.config=t,this.log=n,this.mesh=s,this.webhookEntries=i,this.hooks=o}hookEventFor(e,t){if(e==="stripe")return"on:stripe-event";if(e==="sentry")return"on:sentry-issue";if(e==="vercel")return"on:vercel-deployment";if(e==="hubspot")return"on:hubspot-event";if(e==="odoo")return"on:odoo-event";if(e==="github"){let n=(t??"").split(".")[0];return n==="issues"||n==="issue_comment"?"on:github-issue":n==="pull_request"||n==="pull_request_review"?"on:github-pr":n==="push"?"on:github-push":null}return null}async fireHookSafe(e,t,n,s){let i=this.hookEventFor(e,t);if(!i||!this.hooks||!this.hooks.has(i))return;let o={};if(e==="github"){let a=s;typeof a.sender?.login=="string"&&(o.author=a.sender.login),typeof a.repository?.full_name=="string"&&(o.repo=a.repository.full_name);let c=a.issue?.number??a.pull_request?.number;typeof c=="number"&&(o.number=c)}try{await this.hooks.execute(i,{event:i,source:e,eventType:t,agentId:n,payload:s,...o})}catch(a){this.log(`${i} hook error (non-fatal): ${a?.message??a}`)}}setWorkflowDispatcher(e){this.workflowDispatcher=e}setWebhookEntries(e){this.webhookEntries=e}async handle(e,t,n){let s=n.replace(/^\/webhook\/?/,"").split("/").filter(Boolean),i=s[0],o=s[1];if(!i){this.sendJson(t,400,{error:"Missing agent ID. Use /webhook/:agentId"});return}let{raw:a,parsed:c}=await this.readBody(e),l=o||this.detectSource(e.headers);if(process.env.AGENTX_WEBHOOK_DEBUG_HEADERS==="1"){let y={};for(let[k,S]of Object.entries(e.headers))(k.startsWith("x-hubspot")||k.startsWith("x-hub")||k.startsWith("x-github")||k.startsWith("x-gitlab")||k.startsWith("stripe")||k.startsWith("sentry")||k.startsWith("x-vercel")||k.startsWith("x-odoo")||k.startsWith("x-webhook")||k==="user-agent"||k==="content-type"||k==="host"||k==="x-forwarded-host"||k==="x-forwarded-proto"||k==="x-forwarded-for")&&(y[k]=S);this.log(`Webhook [${l}] reqUrl=${e.url} headers: ${JSON.stringify(y)}`)}let d=this.validateSignature(e.headers,a,l,i,e.url);if(d){this.log(`Webhook [${l}] -> ${i}: REJECTED (${d})`),this.sendJson(t,401,{error:d});return}let u=this.buildSummary(l,c,e.headers);this.log(`Webhook [${l}] -> ${i}: ${u.slice(0,100)}`);let p=this.extractEventType(l,c,e.headers),f=this.webhookEntries.find(y=>y.enabled&&y.agentId===i&&y.source===l),g=p&&f?.triggers?.[p]||f?.defaultWorkflow||null;if(await this.fireHookSafe(l,p,i,c),g&&this.workflowDispatcher)try{let y=await this.workflowDispatcher.dispatchWorkflow({workflowId:g,entityRef:{kind:"webhook",id:`${l}:${i}:${p??"\u2014"}:${Date.now()}`},event:{kind:"webhook",source:l,eventType:p,payload:c},trigger:{source:l}});this.log(`Webhook [${l}/${p??"\u2014"}] -> workflow=${g} (claimed=${y.claimed})`),this.sendJson(t,202,{ok:!0,agent:i,source:l,eventType:p,workflow:g,claimed:y.claimed});return}catch(y){this.log(`Workflow dispatch failed [${l}/${p}/${g}]: ${y.message}`)}let b=this.webhookEntries.find(y=>y.enabled&&y.node&&y.agentId===i&&y.source===l);if(b?.node&&this.mesh){this.sendJson(t,202,{ok:!0,agent:i,source:l,node:b.node,status:"accepted"}),this.mesh.sendTask(b.node,u,i,{context:{channel:`webhook:${l}`,sender:`webhook:${l}`}}).then(y=>this.log(`Mesh-forwarded webhook [${l}] -> ${b.node}/${i}: ${y?.slice(0,100)||"ok"}`),y=>this.log(`Mesh forward failed [${l}] -> ${b.node}/${i}: ${y.message}`));return}try{let y=await this.registry.execute({message:u,agentId:i,context:{channel:`webhook:${l}`,sender:`webhook:${l}`}});this.sendJson(t,y.error?500:200,{ok:!y.error,agent:i,source:l,response:y.content?.slice(0,500),error:y.error,duration:y.duration})}catch(y){this.sendJson(t,500,{error:y.message})}}extractEventType(e,t,n){let s=i=>{let o=n[i.toLowerCase()];return Array.isArray(o)?o[0]:o};if(e==="github"){let i=s("x-github-event");if(!i)return;let o=typeof t.action=="string"?t.action:void 0;return o?`${i}.${o}`:i}if(e==="gitlab")return s("x-gitlab-event")||(typeof t.object_kind=="string"?t.object_kind:void 0);if(e==="stripe")return typeof t.type=="string"?t.type:void 0;if(e==="sentry")return s("sentry-hook-resource");if(e==="hubspot"){if(Array.isArray(t)&&t.length>0){let i=t[0];if(i&&typeof i.subscriptionType=="string")return i.subscriptionType}return typeof t.subscriptionType=="string"?t.subscriptionType:void 0}if(e==="odoo")return typeof t.event=="string"?t.event:typeof t.subscriptionType=="string"?t.subscriptionType:typeof t.model=="string"?typeof t.action=="string"?`${t.model}.${t.action}`:t.model:void 0}detectSource(e){return e["x-gitlab-event"]||e["x-gitlab-token"]?"gitlab":e["x-github-event"]?"github":e["stripe-signature"]?"stripe":e["sentry-hook-resource"]?"sentry":e["x-vercel-signature"]?"vercel":e["x-hubspot-signature-v3"]||e["x-hubspot-signature-version"]?"hubspot":e["x-odoo-database"]||e["x-odoo-signature"]?"odoo":e["x-hub-signature-256"]?"github":"unknown"}buildSummary(e,t,n){let s=[`[Webhook from ${e}]`];switch(e){case"gitlab":{let o=n["x-gitlab-event"]||t.object_kind||"event",a=t.project?.path_with_namespace||"",c=t.user?.name||t.user_username||"";if(s.push(`Event: ${o}`),a&&s.push(`Project: ${a}`),c&&s.push(`User: ${c}`),t.ref&&s.push(`Ref: ${t.ref}`),t.commits&&Array.isArray(t.commits)){s.push(`Commits: ${t.commits.length}`);for(let d of t.commits.slice(0,3))s.push(` - ${d.message?.split(`
525
525
  `)[0]||"no message"} (${d.author?.name||""})`)}let l=t.object_attributes;if(l?.title&&(s.push(`Title: ${l.title}`),s.push(`State: ${l.state||""}`),s.push(`Action: ${l.action||""}`),l.source_branch&&s.push(`Branch: ${l.source_branch} -> ${l.target_branch}`),l.url&&s.push(`URL: ${l.url}`)),l?.iid&&!l?.source_branch&&(s.push(`Issue #${l.iid}: ${l.title||""}`),l.description&&s.push(`Description: ${l.description.slice(0,200)}`)),t.object_kind==="pipeline"){let d=t.object_attributes;s.push(`Pipeline: ${d?.status||""} (${d?.ref||""})`),s.push(`Duration: ${d?.duration||0}s`)}break}case"github":{let o=n["x-github-event"]||"event",a=t.repository?.full_name||"",c=t.sender?.login||"";if(s.push(`Event: ${o}`),a&&s.push(`Repository: ${a}`),c&&s.push(`Sender: ${c}`),t.ref&&s.push(`Ref: ${t.ref}`),t.commits&&Array.isArray(t.commits))for(let u of t.commits.slice(0,3))s.push(` - ${u.message?.split(`
526
526
  `)[0]||""} (${u.author?.name||""})`);let l=t.pull_request;l&&(s.push(`PR #${l.number}: ${l.title}`),s.push(`Action: ${t.action}`),s.push(`Branch: ${l.head?.ref} -> ${l.base?.ref}`));let d=t.issue;d&&(s.push(`Issue #${d.number}: ${d.title}`),s.push(`Action: ${t.action}`));break}case"stripe":{let o=t.type||"event",a=t.data?.object||{};s.push(`Event: ${o}`),a.amount&&s.push(`Amount: ${(a.amount/100).toFixed(2)} ${a.currency?.toUpperCase()||""}`),a.customer_email&&s.push(`Customer: ${a.customer_email}`),a.description&&s.push(`Description: ${a.description}`),a.status&&s.push(`Status: ${a.status}`);break}case"sentry":{let o=n["sentry-hook-resource"]||"event";s.push(`Resource: ${o}`);let a=t.data||t;a.error?.title&&s.push(`Error: ${a.error.title}`),a.error?.culprit&&s.push(`Culprit: ${a.error.culprit}`),a.error?.metadata?.value&&s.push(`Message: ${a.error.metadata.value}`),t.url&&s.push(`URL: ${t.url}`);break}case"hubspot":{let o=Array.isArray(t)?t:null,a=o||null;if(a&&a.length){s.push(`Events: ${a.length}`);for(let l of a.slice(0,3)){let d=l.subscriptionType??"?",u=l.objectId??"?",p=l.changeFlag??l.changeSource??"";s.push(` - ${d} (object ${u}${p?`, ${p}`:""})`)}}else{let l=t.subscriptionType??"event",d=t.objectId??"?";s.push(`Event: ${l} (object ${d})`)}let c=a?.[0]?.portalId??t.portalId;c!=null&&s.push(`Portal: ${c}`);break}case"odoo":{let o=typeof t.event=="string"&&t.event||typeof t.subscriptionType=="string"&&t.subscriptionType||typeof t.model=="string"&&(typeof t.action=="string"?`${t.model}.${t.action}`:t.model)||"event";s.push(`Event: ${o}`);let a=n["x-odoo-database"]||(typeof t.database=="string"?t.database:"");a&&s.push(`Database: ${a}`);let c=t.record||t;c?.id&&s.push(`Record id: ${c.id}`),c?.name&&s.push(`Name: ${String(c.name).slice(0,200)}`),c?.partner_id?.[1]&&s.push(`Partner: ${c.partner_id[1]}`),c?.email&&s.push(`Email: ${c.email}`),c?.amount_total!=null&&s.push(`Amount: ${c.amount_total}`),c?.state&&s.push(`State: ${c.state}`);break}default:s.push(`Headers: ${JSON.stringify(Object.keys(n).filter(o=>o.startsWith("x-")).slice(0,5))}`),s.push(`Payload keys: ${Object.keys(t).slice(0,10).join(", ")}`);let i=JSON.stringify(t).slice(0,500);s.push(`Body: ${i}`)}return s.join(`
527
527
  `)}async readBody(e){return new Promise(t=>{let n="";e.on("data",s=>n+=s.toString()),e.on("end",()=>{let s;try{s=n?JSON.parse(n):{}}catch{s={raw:n}}t({raw:n,parsed:s})}),e.on("error",()=>t({raw:"",parsed:{}}))})}validateSignature(e,t,n,s,i){let o=this.webhookEntries.find(d=>d.enabled&&d.agentId===s&&d.source===n);if(!o?.secretEnv)return null;let a=process.env[o.secretEnv];if(!a)return`webhook entry "${o.id}" expects env ${o.secretEnv} but it is unset`;let c=d=>{let u=e[d.toLowerCase()];return Array.isArray(u)?u[0]:u};if(n==="github"){let d=c("x-hub-signature-256");if(!d)return"missing X-Hub-Signature-256";let u="sha256="+ks("sha256",a).update(t).digest("hex");return Tt(u,d)}if(n==="gitlab"){let d=c("x-gitlab-token");return d?Tt(a,d):"missing X-Gitlab-Token"}if(n==="stripe"){let d=c("stripe-signature");if(!d)return"missing Stripe-Signature";let u=Object.fromEntries(d.split(",").map(f=>f.split("=")));if(!u.t||!u.v1)return"malformed Stripe-Signature";let p=ks("sha256",a).update(`${u.t}.${t}`).digest("hex");return Tt(p,u.v1)}if(n==="hubspot"){let d=c("x-hubspot-signature-v3"),u=c("x-hubspot-request-timestamp");if(!d)return"missing X-HubSpot-Signature-v3";if(!u)return"missing X-HubSpot-Request-Timestamp";let p=parseInt(u,10);if(!Number.isFinite(p))return"malformed X-HubSpot-Request-Timestamp";let f=Date.now()-p;if(f>5*6e4)return`HubSpot webhook is ${Math.floor(f/1e3)}s old (>5min replay window)`;let g="POST",b=i||e["x-original-uri"]||e["x-forwarded-path"]||"",y=e["x-forwarded-host"],k=e.host,S=e["x-forwarded-proto"]||"https",$=new Set;y&&b&&$.add(`${S}://${y}${b}`),k&&b&&$.add(`https://${k}${b}`),k&&b&&$.add(`http://${k}${b}`),b&&$.add(b),$.add("");for(let P of $){let D=ks("sha256",a).update(`${g}${P}${t}${u}`).digest("base64");if(d.length===D.length&&Gh(Buffer.from(d),Buffer.from(D)))return null}return`signature mismatch (tried ${$.size} URI variants)`}if(n==="odoo"){let d=c("x-odoo-signature");if(d){let p=ks("sha256",a).update(t).digest("hex"),f=d.startsWith("sha256=")?d.slice(7):d;return Tt(p,f)}let u=c("x-odoo-webhook-token")??c("x-webhook-secret");return u?Tt(a,u):"missing X-Odoo-Signature or X-Odoo-Webhook-Token"}let l=c("x-webhook-secret");return l?Tt(a,l):"missing X-Webhook-Secret"}sendJson(e,t,n){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(n,null,2))}};function Tt(r,e){if(r.length!==e.length)return"signature mismatch";let t=Buffer.from(r),n=Buffer.from(e);return Gh(t,n)?null:"signature mismatch"}aw();tw();qa();function Fk(r){return{insertTaskHistory:r.prepare(`
@@ -1151,4 +1151,4 @@ data: ${JSON.stringify(V)}
1151
1151
  `)}catch{}},j=setInterval(()=>{try{t.write(`: ping
1152
1152
 
1153
1153
  `)}catch{}},15e3);j.unref?.();let L=new AbortController;t.on("close",()=>{t.writableEnded||L.abort()});try{for await(let U of this.mesh.sendTaskStream(h.peer,h.message,h.agent,{context:h.context,signal:L.signal,vouchOwner:v}))E(U.event,U.data)}catch(U){E("error",{error:U?.message??String(U)})}finally{clearInterval(j);try{t.end()}catch{}}break}let A=h.context,M=typeof h.senderAgentId=="string"?h.senderAgentId:void 0;if(Py(h,!0)==="callback"){let E=this.delegationGate(e,h,{callee:h.agent,peer:h.peer,message:h.message,calleeContext:A});if(!("track"in E)){let j=br(E);this.json(t,j.status,j.body);break}}if(h.async===!0){let E=A?.channel,j=A?.chatId;if(!E||!j){this.json(t,400,{error:"async requires context.channel and context.chatId \u2014 there is no route back otherwise"});return}let L=`mesh-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;this.json(t,202,{accepted:!0,taskId:L,deliverTo:`${E}:${j}`,note:"result will be delivered to the originating chat when the peer finishes"});let U=h.peer,V=h.agent,ye=this.mesh;(async()=>{let H=Date.now(),q;try{q=await ye.sendTask(U,h.message,V,{vouchOwner:v,context:A,senderAgentId:M}),this.log(`[mesh/task async ${L}] ${U}/${V??"default"} finished in ${Date.now()-H}ms`)}catch(Y){q=`Delegation to ${U}/${V??"default"} failed: ${Y?.message??Y}`,this.log(`[mesh/task async ${L}] failed: ${Y?.message??Y}`)}try{await this.router.sendOutbound({channel:E,chatId:j,text:q,agentId:A?.agentId??M,accountId:A?.accountId})}catch(Y){this.log(`[mesh/task async ${L}] delivery failed: ${Y?.message??Y}`)}})();break}let _=await this.mesh.sendTask(h.peer,h.message,h.agent,{context:A,senderAgentId:M,vouchOwner:v});this.json(t,200,{response:_});break}case"POST /webrtc/signal/out":{if(!this.webrtc){this.json(t,404,{error:"WebRTC signaling not enabled"});return}let m=await W(e);if(!m.kind||!m.callId||!m.from||!m.to){this.json(t,400,{error:"Missing: kind, callId, from, to"});return}let w=await this.webrtc.handleOutgoing(m);this.json(t,w.ok?200:400,w);break}case"POST /webrtc/signal":{if(!this.webrtc){this.json(t,404,{error:"WebRTC signaling not enabled"});return}let m=await W(e);if(!m.kind||!m.callId||!m.from||!m.to){this.json(t,400,{error:"Missing: kind, callId, from, to"});return}let w=this.webrtc.handleIncoming(m);this.json(t,w.ok?200:400,w);break}case"POST /webrtc/bot/invite":{if(!this.botManager){this.json(t,404,{error:"WebRTC bot not enabled (channels.webrtc.bot.enabled=false)"});return}let h=await W(e),m=h.callId,w=h.target,v=h.agentId||this.config.channels.webrtc?.bot.defaultAgentId;if(!m||!w||!v){this.json(t,400,{error:"Missing: callId, target, agentId (or defaultAgentId in config)"});return}let I=await this.botManager.invite({callId:m,target:w,agentId:v});this.json(t,I.ok?200:500,I);break}case"GET /webrtc/bots":{if(!this.botManager){this.json(t,404,{error:"WebRTC bot not enabled"});return}this.json(t,200,{active:this.botManager.active()});break}case"GET /webrtc/history":{if(!this.botManager){this.json(t,404,{error:"WebRTC bot not enabled"});return}this.json(t,200,{active:this.botManager.active(),history:this.botManager.history()});break}case"GET /webrtc/config":{let h=this.config.channels.webrtc;if(!h?.enabled){this.json(t,404,{error:"WebRTC signaling not enabled"});return}this.json(t,200,{localName:this.config.node.name,iceServers:[...h.stunServers.map(m=>({urls:m})),...h.turnServers],peers:this.mesh?.directory().map(m=>({name:m.peer,healthy:m.healthy}))||[],camera:h.camera,agents:this.registry.list().map(m=>({id:m.id,name:m.name}))});break}case"GET /.well-known/agent-card.json":this.json(t,200,{name:this.config.node.name,description:`AgentX daemon node "${this.config.node.name}"`,url:`http://${this.config.node.bind}`,version:"1.0.0",capabilities:{streaming:!1,pushNotifications:!1,stateTransitionHistory:!1},skills:this.registry.list().map(h=>{let m=this.config.agents[h.id]||{},w=typeof m.description=="string"&&m.description.trim()||xT(m.systemPrompt)||`Agent "${h.name}" (${h.tier})`,v=Array.isArray(m.mentions)?m.mentions.slice(0,4):[];return{id:h.id,name:h.name,description:w,tags:[h.tier,...v],color:he(h.id,m).color}}),channels:this.router.getChannelNames(),githubLogins:this.github?.postingAccounts()??[],defaultInputModes:["text"],defaultOutputModes:["text"]});break;case"GET /wiki/agents":{let h=this.registry.getWikiHub();this.json(t,200,{nodeId:this.config.node.id,agents:h.summary()});break}case"GET /wiki/entries":{let h=this.registry.getWikiHub(),m=n.searchParams.get("agent")||void 0,w=n.searchParams.get("after")||void 0,v=m?h.getAgentEntries(m):h.getSharedStore().listEntries({after:w});this.json(t,200,{nodeId:this.config.node.id,count:v.length,entries:v.map(I=>({id:I.id,date:I.date,agentId:I.agentId,source:I.source,sourceContext:I.sourceContext,content:I.content}))});break}case"GET /wiki/articles":{let h=this.registry.getWikiHub(),m=n.searchParams.get("agent");if(!m){this.json(t,400,{error:"?agent= required"});break}let v=h.getAgentWiki(m).rebuildIndex();this.json(t,200,{nodeId:this.config.node.id,agentId:m,articles:v.articles});break}case"GET /wiki/article":{let h=this.registry.getWikiHub(),m=n.searchParams.get("agent"),w=n.searchParams.get("path");if(!m||!w){this.json(t,400,{error:"?agent= and ?path= required"});break}let I=h.getAgentWiki(m).readArticle(w);if(!I){this.json(t,404,{error:"Article not found"});break}this.json(t,200,{nodeId:this.config.node.id,agentId:m,path:I.path,title:I.meta.title,tags:I.meta.tags,owner:I.meta.owner,created:I.meta.created,lastUpdated:I.meta.lastUpdated,sources:I.meta.sources,content:I.content});break}case"GET /graph/schema":{let h=this.registry.getGraphStore();if(!h){this.json(t,404,{error:"graph disabled on this node"});break}this.json(t,200,{nodeId:this.config.node.id,schema:h.loadSchema()});break}case"GET /graph/nodes":{let h=this.registry.getGraphStore();if(!h){this.json(t,404,{error:"graph disabled on this node"});break}this.json(t,200,{nodeId:this.config.node.id,...h.loadNodes()});break}case"GET /graph/classifications":{let h=this.registry.getGraphStore();if(!h){this.json(t,404,{error:"graph disabled on this node"});break}let m=n.searchParams.get("status")||"approved",w=Math.max(1,Math.min(1e3,parseInt(n.searchParams.get("limit")||"200",10)||200)),v=h.listByStatus(m,w);this.json(t,200,{nodeId:this.config.node.id,status:m,count:v.length,classifications:v});break}default:this.json(t,404,{error:"Not found",endpoints:["GET /health","GET /agents","GET /crons","GET /routines \u2014 schedules + cron/hook workflows with staleness flags","GET /mesh","GET /wiki/agents","GET /wiki/entries[?agent=X&after=YYYY-MM-DD]","GET /wiki/articles?agent=X","GET /graph/schema","GET /graph/nodes","GET /graph/classifications[?status=approved|pending|rejected&limit=N]","POST /task { agent, message, context?, freshSession?: bool }","GET /agents/:id \u2014 resolved agent config (permission, tier, model, persistentProcess, toolUseRequired)","POST /agents/:id/selftest { message? } \u2014 canary probe; runs a fresh-session task and reports {ok, durationMs, tokens, billedModel}","GET /traces[?agentId=&channel=&chatId=&workflowRunId=&status=&since=&until=&limit=]","GET /traces/:taskId \u2014 full per-task execution trace (steps + tokens)","GET /voice/history[?agent=&limit=&before=] \u2014 past voice exchanges, bounded summaries","GET /voice/history/:id \u2014 one voice exchange in full; POST /voice/history/:id/replay","GET /api/processes \u2014 live persistent claude processes (JSON)","POST /api/processes/kill { agentId, channel, chatId, reason? }","GET /api/actions/builtin \u2014 list shipped built-in typed actions","POST /api/actions/builtin/:name \u2014 run a built-in with JSON body input","POST /mesh/task { peer, message }","POST /webhook/:agentId[/:source] \u2014 webhook callback","POST /reload \u2014 re-read agentx.json (hot-swaps crons)","GET /usage/plan \u2014 Claude plan windows, cold-dispatch counters, active holds","POST /usage/plan/lift \u2014 drop the active Claude plan holds","GET /daemon/restart \u2014 in-flight count, service manager, pending restart","POST /daemon/restart \u2014 restart when idle { timeoutMinutes?, onTimeout? }","POST /daemon/restart/cancel","GET /.well-known/agent-card.json","GET /call \u2014 browser UI for P2P A/V calls (requires channels.webrtc.enabled)","GET /webrtc/config \u2014 ICE servers + peer directory for the call page","GET /webrtc/events?callId=&as= \u2014 SSE stream of signaling events","POST /webrtc/signal/out \u2014 browser-originated signal, forwarded to remote peer","POST /webrtc/signal \u2014 remote-peer-originated signal, fanned out to local browser","POST /webrtc/bot/invite { callId, target, agentId } \u2014 spawn a transcribing bot peer for a call","GET /webrtc/bots \u2014 active bot sessions","POST /webrtc/camera/watch { callId, agentId } \u2014 an agent watches the phone camera share","GET /webrtc/camera/watch \u2014 agents watching a camera now","POST /webrtc/camera/watch/:id/look { note? } \u2014 ask the watching agent what it sees","POST /webrtc/camera/watch/:id/stream { seconds, note? } \u2014 the agent keeps watching for a while (0 stops)","POST /webrtc/camera/look { agentId } \u2014 from an agent's run: the newest frame as a PNG path"]})}}catch(i){this.json(t,500,{error:i.message})}}async handleOpenAICompat(e,t,n){let s=await W(e);await Lh(e,t,n,s,{execute:(i,o,a,c)=>this.registry.execute(i,o,a,c),agentIds:Object.keys(this.config.agents),cancel:(i,o,a,c)=>{let l=this.registry.list().find(d=>d.id===i)?.runningTasks.filter(d=>d.channel===o&&d.chatId===a)||[];for(let d of l)this.registry.cancelRunningTask(d.id,c)},log:i=>this.log(i)})}json(e,t,n){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(n,null,2))}resolveGitlabTokenForAgent(e){if(!e)return{token:this.config.channels.gitlab?.token,source:"global"};let t=(this.config.channels.gitlab?.agentMappings||[]).find(s=>s.agentId===e);if(t?.token)return{token:t.token,source:"agentMappings"};let n=pm(this.config,e,"gitlab-user","tokenEnv");return n.status==="ok"&&n.value?{token:n.value,source:`integrations(${n.envVar})`}:this.config.channels.gitlab?.token?{token:this.config.channels.gitlab.token,source:"global"}:{token:void 0,source:n.status}}resolveTodayUsage(){let e=ug();if(e==="json")return this.registry.getTodayUsage();let t=dg(this.db);return e==="sqlite"||Object.keys(t.agents).length>0?t:this.registry.getTodayUsage()}installAgentMemorySurface(){let e=parseInt(this.config.node.bind.split(":")[1]||"18800",10);for(let t of this.registry.list()){let n=t.workspace;if(!(!n||!Nt(n)))try{let s=te(n,".claude","skills");Qy(s,{recursive:!0});let i=te(s,mm);if(!Nt(i))xa(i,Eo(e)),this.log(` memory-skill: installed remember.md \u2192 ${t.id}`);else{let o=ym(kn(i,"utf-8"),e);o&&(xa(i,o),this.log(` memory-skill: updated remember.md \u2192 ${t.id}`))}this.agentMemory.syncToWorkspace(t.id,n,this.config.session.memoryIndexMaxChars)}catch(s){this.log(` memory-skill: ${t.id} install failed \u2014 ${s?.message??s}`)}}}installAgentMcpConfig(){for(let[e,t]of Object.entries(this.config.agents)){let n=t.workspace;if(!n||!Nt(n))continue;let s=this.config.workflows.enabled&&this.config.workflows.followUp.enabled&&(this.config.workflows.followUp.agents[e]??!0),i=Kc(fc(t),this.config.requests.enabled||s?Xc():null);try{switch(zc(n,i)){case"installed":this.log(` mcp: installed ${Object.keys(i).length} server(s) \u2192 ${e}`);break;case"updated":this.log(` mcp: updated .mcp.json (${Object.keys(i).length} server(s)) \u2192 ${e}`);break;case"removed":this.log(` mcp: removed managed .mcp.json (config now empty) \u2192 ${e}`);break;case"skipped-operator-owned":Object.keys(i).length>0&&this.log(` mcp: ${e} has operator-owned .mcp.json \u2014 skipping (delete file or marker to let agentx manage)`);break;case"noop":break}}catch(o){this.log(` mcp: ${e} install failed \u2014 ${o?.message??o}`)}}}workspaceFor(e){for(let t of this.registry.list())if(t.id===e)return t.workspace;return null}handleMemoryApi(e,t,n,s){return Jp(e,t,n,s,{mem:this.agentMemory,workspaceFor:i=>this.workspaceFor(i),runningTaskOwner:i=>this.registry.runningTaskOwner(i),indexMaxChars:()=>this.config.session.memoryIndexMaxChars})}async handleWorkflowEvent(e,t){if(!this.workflowDispatcher){this.json(t,503,{error:"workflow engine not enabled on this node"});return}let n;try{n=await ne(e)}catch(c){this.json(t,400,{error:"invalid JSON body",message:c.message});return}let s=n?.payload??n,i=s?.event,o=s?.entityRef;if(!i?.id||!o?.backend||!o?.id){this.json(t,400,{error:"missing event or entityRef"});return}let a=n?.kind;try{if(a==="trigger"&&s.trigger){let p=typeof n?.fromPeer=="string"?n.fromPeer:"unknown";this.log(`[workflows/mesh] received trigger from "${p}" source="${s.trigger.source}" chat="${s.trigger.chat??"*"}"`);let f=await this.workflowDispatcher.dispatch({trigger:s.trigger,entityRef:o,event:i,fromRemote:{peer:p}});this.log(`[workflows/mesh] dispatched broadcast: matched=${f.claimed.length} ${f.claimed.length?`(${f.claimed.map(g=>g.id).join(", ")})`:"[none \u2014 no workflow with mesh.allowRemote matched]"}`),this.json(t,202,{ok:!0,mode:"trigger-broadcast",matched:f.claimed.map(g=>g.id)});return}let d=(s.workflowId?this.workflowStore?.get(s.workflowId):null)?.nodes.find(p=>p.type.startsWith("trigger."))?.config??{},u={source:String(d.source??"hook"),project:d.filter?.project,repo:d.filter?.repo,chat:d.filter?.chat,labels:d.filter?.labels};await this.workflowDispatcher.dispatch({trigger:u,entityRef:o,event:i}),this.json(t,202,{ok:!0})}catch(c){this.log(`[workflows] /workflow/event failed: ${c.message}`),this.json(t,500,{error:c.message})}}async postToPushHost(e,t,n){let s=e.toLowerCase(),i=this.mesh?.directory().find(c=>c.peer.toLowerCase()===s);if(!i)throw new Error(`push: channels.push.relayTo "${e}" is not a mesh peer of this node`);let o=await fetch(`${i.peerUrl}${t}`,{method:"POST",headers:{"Content-Type":"application/json",...this.mesh.authHeaders(i.peer)},body:JSON.stringify(n),signal:AbortSignal.timeout(15e3)});if(!o.ok)throw new Error(`push: ${i.peer} ${t} -> ${o.status} ${(await o.text().catch(()=>"")).slice(0,200)}`);let a=await o.json().catch(()=>({}));if(t==="/channel/send")return a.messageId??void 0;if(typeof a.status!="number")throw new Error(`push: ${i.peer} ${t} gave no answer`);return{status:a.status,body:a.body??{}}}async handlePushApp(e,t){let n;try{n=await ne(e)}catch(c){this.json(t,400,{error:"invalid JSON body",message:c.message});return}let{handlePushBridge:s,pushOrigin:i}=await import("./push-bridge-325SXDGN.js"),o=this.config.channels.push;if(!o?.enabled){this.json(t,200,{status:503,body:{error:`Notifications are off on ${this.config.node.name}.`}});return}if(o.relayTo){if(n?.origin!==void 0){this.json(t,200,{status:409,body:{error:`${this.config.node.name} relays its notifications too (channels.push.relayTo = ${o.relayTo})`}});return}if(n?.op!=="app"){this.json(t,400,{error:"op must be app"});return}try{this.json(t,200,await this.postToPushHost(o.relayTo,"/push/app",{op:"app",origin:i(this.config.node.name),call:n.call}))}catch(c){this.log(`[push] /push/app to ${o.relayTo} failed: ${c.message}`),this.json(t,502,{error:c.message})}return}let a=this.pushBridgeCaller(e);"error"in a&&n?.op!=="roster"&&this.log(`[push] /push/app from ${e.socket?.remoteAddress||"?"} refused: ${a.error}`),this.json(t,200,s(n,a,this.pushHost??null,this.pushHost?void 0:`Notifications are not running on ${this.config.node.name}. Check channels.push.subject and the database there.`))}pushBridgeCaller(e){return nd(String(e.headers.authorization||""),this.config.mesh.peers,process.env.MESH_TOKEN)}async handleChannelSend(e,t){let n;try{n=await ne(e)}catch(l){this.json(t,400,{error:"invalid JSON body",message:l.message});return}let s=String(n?.channel??""),i=String(n?.chatId??""),o=String(n?.text??"");if(!s||!i||!o){this.json(t,400,{error:"channel, chatId, and text are required"});return}if(!this.router.getChannel(s)){this.json(t,404,{error:`channel "${s}" not hosted on this node`});return}let c;if(n.relayed===!0&&n.origin!==void 0){let l=this.pushBridgeCaller(e);if("origin"in l)c=l.origin;else if(i!=="default"){this.json(t,403,{error:l.error});return}}if(s==="push"&&i.includes(":")){let{scopedPushTarget:l}=await import("./push-bridge-325SXDGN.js"),d=l(i,this.pushBridgeCaller(e));if("error"in d){this.json(t,403,{error:d.error});return}}try{let l=await this.router.sendOutbound({channel:s,chatId:i,text:o,accountId:typeof n.accountId=="string"?n.accountId:void 0,parseMode:typeof n.parseMode=="string"?n.parseMode:void 0,replyTo:typeof n.replyTo=="string"?n.replyTo:void 0,buttons:Array.isArray(n.buttons)?n.buttons:void 0,agentId:typeof n.agentId=="string"?n.agentId:void 0,relayed:n.relayed===!0?!0:void 0,origin:c},{recordInSession:!1});this.json(t,200,{ok:!0,messageId:l??null})}catch(l){this.log(`[mesh] /channel/send "${s}" failed: ${l.message}`),this.json(t,500,{error:l.message})}}async handleChannelChats(e,t,n={}){let s=new Set,i=[],o=[],a=(l,d)=>{let u=0;for(let p of l)!p.id||s.has(p.id)||(s.add(p.id),i.push({...p,source:d}),u++);u>0&&o.push(`${d}:${u}`)},c=this.router.getChannel(t);if(c?.listKnownChats)try{a(c.listKnownChats(),"local")}catch{}else if(c?.listChats)try{a(c.listChats().map(l=>({id:l.jid,name:l.name,kind:l.isGroup?"group":"dm"})),"local")}catch{}if(!n.localOnly&&this.mesh){let l=this.mesh.directory().filter(d=>d.healthy&&d.channels?.includes(t));await Promise.allSettled(l.map(async d=>{try{let u=await fetch(`${d.peerUrl}/channels/${encodeURIComponent(t)}/chats?local=1`,{headers:this.mesh.authHeaders(d.peer),signal:AbortSignal.timeout(5e3)});if(!u.ok)return;let p=await u.json();Array.isArray(p.chats)&&a(p.chats.map(f=>({id:f.id,name:f.name,kind:f.kind??"dm",accountId:f.accountId})),`mesh:${d.peer}`)}catch{}}))}this.json(e,200,{channel:t,source:o.join(", ")||"none",chats:i})}async handleWorkflowManualRun(e,t,n){if(!this.workflowDispatcher||!this.workflowStore){this.json(t,503,{error:"workflow engine not enabled on this node"});return}let s;try{s=await ne(e)}catch{s={}}try{let i=await gm({get:o=>this.workflowStore.get(o),dispatchWorkflow:o=>this.workflowDispatcher.dispatchWorkflow(o),startRun:o=>this.workflowDispatcher.startRun(o)},n,s);this.json(t,i.status,i.body)}catch(i){this.log(`[workflows] manual run "${n}" failed: ${i.message}`),this.json(t,500,{error:i.message})}}},Aa=Ra;dt(Aa,"MESH_PROTECTED_PATHS",new Set(["/task","/ask","/mesh/task","/mesh/inbox/send","/workflow/event","/workflow/transition","/channel/send","/push/app","/webrtc/signal","/gitlab/react","/gitlab/send-note","/gitlab/log-time","/channel/edit-comment","/github/send-comment"]));function xT(r){if(typeof r!="string")return"";let e=r.trim();if(!e)return"";let t=e.match(/^[^.!?\n]+[.!?]?/),n=(t?t[0]:e).trim();return n.length>140?n.slice(0,137)+"\u2026":n}function ne(r){return new Promise((e,t)=>{let n="";r.setEncoding("utf8"),r.on("data",s=>{n+=s}),r.on("end",()=>{try{e(n?JSON.parse(n):{})}catch(s){t(s)}}),r.on("error",t)})}function AT(r,e){let t=["model","workspace","tier","permissionMode","mcpServers"],n=new Set,s=new Set([...Object.keys(r),...Object.keys(e)]);for(let i of s){let o=r[i],a=e[i];if(!o||!a){n.add("add/remove");continue}for(let c of t)JSON.stringify(o[c])!==JSON.stringify(a[c])&&n.add(`${i}.${c}`)}return Array.from(n).slice(0,6)}async function W(r){return new Promise((e,t)=>{let n="";r.on("data",s=>n+=s.toString()),r.on("end",()=>{try{e(n?JSON.parse(n):{})}catch{e({})}}),r.on("error",t)})}ew();function K2(r){typeof r=="string"&&(vn.error(r),process.exit(1)),r instanceof Error&&(vn.error(r.message),process.exit(1)),vn.error("Something went wrong. Please try again."),process.exit(1)}export{UT as a,xi as b,et as c,qt as d,Xt as e,rt as f,ns as g,oh as h,eg as i,Kk as j,zk as k,ig as l,We as m,ot as n,cg as o,at as p,AE as q,RE as r,Is as s,mC as t,$S as u,So as v,RP as w,EP as x,CP as y,nm as z,t0 as A,DP as B,NP as C,rn as D,Ct as E,on as F,cM as G,Om as H,V0 as I,e_ as J,Bs as K,Wo as L,Ho as M,Ks as N,he as O,If as P,Qs as Q,H$ as R,jf as S,q$ as T,Gf as U,tr as V,pn as W,ir as X,ar as Y,Jf as Z,sa as _,qe as $,Ie as aa,ty as ba,ny as ca,sy as da,ry as ea,Ar as fa,Hy as ga,$a as ha,qy as ia,pT as ja,wN as ka,Aa as la,K2 as ma};
1154
- //# sourceMappingURL=chunk-IS4DA5CR.js.map
1154
+ //# sourceMappingURL=chunk-UUVFH7BO.js.map