agentix-cli 0.81.1 → 0.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/{App-HF6W6CV2.js → App-3AZUZJPW.js} +2 -2
  2. package/dist/{ChatApp-74VBWP7R.js → ChatApp-ACIKF3GC.js} +2 -2
  3. package/dist/{agent-75URYGWI.js → agent-X2UYZ3ZE.js} +2 -2
  4. package/dist/{board-dashboard-TWEF5XVE.js → board-dashboard-65HGTFRC.js} +485 -235
  5. package/dist/board-dashboard-65HGTFRC.js.map +1 -0
  6. package/dist/{chunk-ATXE3EMV.js → chunk-5LD6TA4A.js} +2 -2
  7. package/dist/{chunk-ES7Z64Z5.js → chunk-6G72CCT2.js} +2 -2
  8. package/dist/{chunk-LUL4ILAQ.js → chunk-6PTO6DWW.js} +2 -2
  9. package/dist/{chunk-R64DAHBH.js → chunk-AW3YGAVS.js} +5 -5
  10. package/dist/{chunk-GUAJNZIX.js → chunk-BM6ZLX6F.js} +2 -2
  11. package/dist/{chunk-5GXCOHDM.js → chunk-C4YY6746.js} +2 -2
  12. package/dist/{chunk-4KJ3PCAI.js → chunk-CG3FSQ23.js} +2 -2
  13. package/dist/{chunk-JG3O5GL6.js → chunk-CT36XINH.js} +2 -2
  14. package/dist/{chunk-BDM4VTBR.js → chunk-E3SVSIUU.js} +3 -3
  15. package/dist/chunk-E3SVSIUU.js.map +1 -0
  16. package/dist/{chunk-WWU2D65N.js → chunk-E63BQ6VJ.js} +2 -2
  17. package/dist/chunk-FSHQMXM3.js +5 -0
  18. package/dist/{chunk-XF65CDNS.js.map → chunk-FSHQMXM3.js.map} +1 -1
  19. package/dist/{chunk-TW4L6RP2.js → chunk-ISRGFMQC.js} +2 -2
  20. package/dist/{chunk-V4GXHBOH.js → chunk-KUUIIZEH.js} +5 -5
  21. package/dist/{chunk-74FSHUB3.js → chunk-LQLMNBJS.js} +2 -2
  22. package/dist/{chunk-XQ7MVPWP.js → chunk-ONGL6EKZ.js} +2 -2
  23. package/dist/{chunk-3FCYKGU6.js → chunk-PLTX6YGD.js} +2 -2
  24. package/dist/{chunk-LTHQXWZN.js → chunk-VQN36LEB.js} +2 -2
  25. package/dist/{chunk-BB3ESU74.js → chunk-WIGJ5BVG.js} +2 -2
  26. package/dist/{chunk-HUQRPEDP.js → chunk-X7STXQOX.js} +2 -2
  27. package/dist/chunk-XMDA4JYK.js +748 -0
  28. package/dist/chunk-XMDA4JYK.js.map +1 -0
  29. package/dist/{chunk-ZUAV3PTL.js → chunk-ZUCJK5PL.js} +2 -2
  30. package/dist/cli.js +1 -1
  31. package/dist/client-QE4D43K3.js +2 -0
  32. package/dist/config-ME774GIO.js +2 -0
  33. package/dist/config-mutator-2AUDHSVD.js +2 -0
  34. package/dist/{doctor-6EWW7NC2.js → doctor-GS2ZHLWU.js} +2 -2
  35. package/dist/index.js +1 -1
  36. package/dist/{program-7UH4FCA3.js → program-R646G4NP.js} +195 -195
  37. package/dist/{program-7UH4FCA3.js.map → program-R646G4NP.js.map} +1 -1
  38. package/dist/{promote-ZZWMGVO2.js → promote-ZJCGGVRD.js} +2 -2
  39. package/dist/{query-OQBB7EFS.js → query-UMGPOBEJ.js} +2 -2
  40. package/dist/{registry-MDWD7EAO.js → registry-WD5B2DQQ.js} +2 -2
  41. package/dist/{request-planner-HX44G2SX.js → request-planner-L2S4KMMU.js} +2 -2
  42. package/dist/{review-candidates-FBDLPU6H.js → review-candidates-R23QNJ2Q.js} +2 -2
  43. package/dist/{routing-3SZHWHUA.js → routing-PUQUADQ6.js} +2 -2
  44. package/dist/schedule-tool-3DAJU764.js +2 -0
  45. package/dist/scheduler-JTPIGC5K.js +2 -0
  46. package/dist/{seat-2HJG3UNW.js → seat-O5IC5M5D.js} +2 -2
  47. package/dist/{select-UKAOL7QB.js → select-KCCT7OJZ.js} +2 -2
  48. package/dist/{set-enabled-ADFSNG5A.js → set-enabled-FEUPS2WI.js} +2 -2
  49. package/dist/{tool-GPCJM7U5.js → tool-WGPZW3SR.js} +2 -2
  50. package/dist/{tool-VKQIDEG7.js → tool-YOXUNCTU.js} +2 -2
  51. package/dist/wiki-QSBAE5ZK.js +2 -0
  52. package/package.json +1 -1
  53. package/dist/board-dashboard-TWEF5XVE.js.map +0 -1
  54. package/dist/chunk-BDM4VTBR.js.map +0 -1
  55. package/dist/chunk-VVW4JYV6.js +0 -740
  56. package/dist/chunk-VVW4JYV6.js.map +0 -1
  57. package/dist/chunk-XF65CDNS.js +0 -5
  58. package/dist/client-JDY2FZUF.js +0 -2
  59. package/dist/config-JCETBKWT.js +0 -2
  60. package/dist/config-mutator-YQWTY47O.js +0 -2
  61. package/dist/schedule-tool-5FULSHWJ.js +0 -2
  62. package/dist/scheduler-ITOKSMYT.js +0 -2
  63. package/dist/wiki-QUVWB4IN.js +0 -2
  64. /package/dist/{App-HF6W6CV2.js.map → App-3AZUZJPW.js.map} +0 -0
  65. /package/dist/{ChatApp-74VBWP7R.js.map → ChatApp-ACIKF3GC.js.map} +0 -0
  66. /package/dist/{agent-75URYGWI.js.map → agent-X2UYZ3ZE.js.map} +0 -0
  67. /package/dist/{chunk-ATXE3EMV.js.map → chunk-5LD6TA4A.js.map} +0 -0
  68. /package/dist/{chunk-ES7Z64Z5.js.map → chunk-6G72CCT2.js.map} +0 -0
  69. /package/dist/{chunk-LUL4ILAQ.js.map → chunk-6PTO6DWW.js.map} +0 -0
  70. /package/dist/{chunk-R64DAHBH.js.map → chunk-AW3YGAVS.js.map} +0 -0
  71. /package/dist/{chunk-GUAJNZIX.js.map → chunk-BM6ZLX6F.js.map} +0 -0
  72. /package/dist/{chunk-5GXCOHDM.js.map → chunk-C4YY6746.js.map} +0 -0
  73. /package/dist/{chunk-4KJ3PCAI.js.map → chunk-CG3FSQ23.js.map} +0 -0
  74. /package/dist/{chunk-JG3O5GL6.js.map → chunk-CT36XINH.js.map} +0 -0
  75. /package/dist/{chunk-WWU2D65N.js.map → chunk-E63BQ6VJ.js.map} +0 -0
  76. /package/dist/{chunk-TW4L6RP2.js.map → chunk-ISRGFMQC.js.map} +0 -0
  77. /package/dist/{chunk-V4GXHBOH.js.map → chunk-KUUIIZEH.js.map} +0 -0
  78. /package/dist/{chunk-74FSHUB3.js.map → chunk-LQLMNBJS.js.map} +0 -0
  79. /package/dist/{chunk-XQ7MVPWP.js.map → chunk-ONGL6EKZ.js.map} +0 -0
  80. /package/dist/{chunk-3FCYKGU6.js.map → chunk-PLTX6YGD.js.map} +0 -0
  81. /package/dist/{chunk-LTHQXWZN.js.map → chunk-VQN36LEB.js.map} +0 -0
  82. /package/dist/{chunk-BB3ESU74.js.map → chunk-WIGJ5BVG.js.map} +0 -0
  83. /package/dist/{chunk-HUQRPEDP.js.map → chunk-X7STXQOX.js.map} +0 -0
  84. /package/dist/{chunk-ZUAV3PTL.js.map → chunk-ZUCJK5PL.js.map} +0 -0
  85. /package/dist/{client-JDY2FZUF.js.map → client-QE4D43K3.js.map} +0 -0
  86. /package/dist/{config-JCETBKWT.js.map → config-ME774GIO.js.map} +0 -0
  87. /package/dist/{config-mutator-YQWTY47O.js.map → config-mutator-2AUDHSVD.js.map} +0 -0
  88. /package/dist/{doctor-6EWW7NC2.js.map → doctor-GS2ZHLWU.js.map} +0 -0
  89. /package/dist/{promote-ZZWMGVO2.js.map → promote-ZJCGGVRD.js.map} +0 -0
  90. /package/dist/{query-OQBB7EFS.js.map → query-UMGPOBEJ.js.map} +0 -0
  91. /package/dist/{registry-MDWD7EAO.js.map → registry-WD5B2DQQ.js.map} +0 -0
  92. /package/dist/{request-planner-HX44G2SX.js.map → request-planner-L2S4KMMU.js.map} +0 -0
  93. /package/dist/{review-candidates-FBDLPU6H.js.map → review-candidates-R23QNJ2Q.js.map} +0 -0
  94. /package/dist/{routing-3SZHWHUA.js.map → routing-PUQUADQ6.js.map} +0 -0
  95. /package/dist/{schedule-tool-5FULSHWJ.js.map → schedule-tool-3DAJU764.js.map} +0 -0
  96. /package/dist/{scheduler-ITOKSMYT.js.map → scheduler-JTPIGC5K.js.map} +0 -0
  97. /package/dist/{seat-2HJG3UNW.js.map → seat-O5IC5M5D.js.map} +0 -0
  98. /package/dist/{select-UKAOL7QB.js.map → select-KCCT7OJZ.js.map} +0 -0
  99. /package/dist/{set-enabled-ADFSNG5A.js.map → set-enabled-FEUPS2WI.js.map} +0 -0
  100. /package/dist/{tool-GPCJM7U5.js.map → tool-WGPZW3SR.js.map} +0 -0
  101. /package/dist/{tool-VKQIDEG7.js.map → tool-YOXUNCTU.js.map} +0 -0
  102. /package/dist/{wiki-QUVWB4IN.js.map → wiki-QSBAE5ZK.js.map} +0 -0
@@ -1,6 +1,6 @@
1
- import{a as Ie}from"./chunk-GTJIKXDB.js";import{q as Kt}from"./chunk-S2GAEH2F.js";import{a as k}from"./chunk-CL53UVOF.js";import{t as Ht,u as qt}from"./chunk-WWU2D65N.js";import{d as Bt,e as zt}from"./chunk-AQASR6KR.js";import{b as Se,u as Ct,w as ne,x as ve,z as $e}from"./chunk-ES7Z64Z5.js";import{a as Mt,b as jt,c as Vt,d as Wt,e as Ft,f as Ut}from"./chunk-Y4CYQV7G.js";import{a as Dt,b as Et}from"./chunk-SHEUCITK.js";import{g as Tt,h as Pt,i as Lt,k as Ot,l as Nt}from"./chunk-BB3ESU74.js";import{q as _t}from"./chunk-4KJ3PCAI.js";import{a as At,b as Rt}from"./chunk-XF65CDNS.js";import{$ as vt,A as Jr,V as xe,aa as $t,da as It,r as te,s as bt,t as wt,u as Kr,y as xt,z as St}from"./chunk-LTHQXWZN.js";import{a as ke,h as Gr}from"./chunk-UCKKAWLZ.js";import{a as kt,i as Xr}from"./chunk-PN6XHTG5.js";import{existsSync as Yr,readdirSync as Zr,readFileSync as Qr,statSync as ei}from"fs";import{resolve as ti}from"path";function Gt(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)??[],c=a.filter(g=>n-g.at<=r),l=a.filter(g=>n-g.at>r&&n-g.at<=r*2),u=c.filter(g=>g.status==="failed").length,d=a.filter(g=>g.status==="paused").length,p=a.length?Math.max(...a.map(g=>g.at)):null,f=a.length?l.length>0&&c.length===0?"dormant":c.length>0&&u*2>=c.length?"failing":c.length>0?"active":"quiet":"never";return{id:o.id,name:o.name||o.id,state:f,lastRunAt:p,recent:c.length,prior:l.length,failed:u,paused:d}}).sort((o,a)=>{let c={dormant:0,failing:1,active:2,quiet:3,never:4};return c[o.state]-c[a.state]||(a.lastRunAt??0)-(o.lastRunAt??0)})}var re=new Map;function ja(t,e=1e3){if(!Yr(t))return[];let n=Zr(t).filter(s=>s.endsWith(".jsonl")).map(s=>{let o=ti(t,s);return{path:o,mtime:ei(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 c=ni(s,o);re.set(s,{mtime:o,summary:c}),c&&r.push(c)}return r}function ni(t,e){try{let n=Qr(t,"utf-8").split(`
1
+ import{a as Ie}from"./chunk-GTJIKXDB.js";import{q as Kt}from"./chunk-S2GAEH2F.js";import{a as k}from"./chunk-CL53UVOF.js";import{t as Ht,u as qt}from"./chunk-E63BQ6VJ.js";import{d as Bt,e as zt}from"./chunk-AQASR6KR.js";import{b as Se,u as Ct,w as ne,x as ve,z as $e}from"./chunk-6G72CCT2.js";import{a as Mt,b as jt,c as Vt,d as Wt,e as Ft,f as Ut}from"./chunk-Y4CYQV7G.js";import{a as Dt,b as Et}from"./chunk-SHEUCITK.js";import{g as Tt,h as Pt,i as Lt,k as Ot,l as Nt}from"./chunk-WIGJ5BVG.js";import{q as _t}from"./chunk-CG3FSQ23.js";import{a as At,b as Rt}from"./chunk-FSHQMXM3.js";import{A as St,B as Jr,W as xe,aa as vt,ba as $t,ea as It,r as te,s as bt,t as wt,u as Kr,z as xt}from"./chunk-VQN36LEB.js";import{a as ke,h as Gr}from"./chunk-UCKKAWLZ.js";import{a as kt,i as Xr}from"./chunk-PN6XHTG5.js";import{existsSync as Yr,readdirSync as Zr,readFileSync as Qr,statSync as ei}from"fs";import{resolve as ti}from"path";function Gt(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)??[],c=a.filter(g=>n-g.at<=r),l=a.filter(g=>n-g.at>r&&n-g.at<=r*2),u=c.filter(g=>g.status==="failed").length,d=a.filter(g=>g.status==="paused").length,p=a.length?Math.max(...a.map(g=>g.at)):null,f=a.length?l.length>0&&c.length===0?"dormant":c.length>0&&u*2>=c.length?"failing":c.length>0?"active":"quiet":"never";return{id:o.id,name:o.name||o.id,state:f,lastRunAt:p,recent:c.length,prior:l.length,failed:u,paused:d}}).sort((o,a)=>{let c={dormant:0,failing:1,active:2,quiet:3,never:4};return c[o.state]-c[a.state]||(a.lastRunAt??0)-(o.lastRunAt??0)})}var re=new Map;function ja(t,e=1e3){if(!Yr(t))return[];let n=Zr(t).filter(s=>s.endsWith(".jsonl")).map(s=>{let o=ti(t,s);return{path:o,mtime:ei(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 c=ni(s,o);re.set(s,{mtime:o,summary:c}),c&&r.push(c)}return r}function ni(t,e){try{let n=Qr(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]),c=a.status??a.run?.status;if(c){s=c;break}}return{workflowId:r,status:s,at:e}}catch{return null}}var ri={failStreak:3,disabledDays:30,missedFires:2,graceMs:15*6e4},x={routines:200,summary:160,filters:6,filterValue:60,text:120},ii=(t,e,n)=>{try{return _t(t,e,n)}catch{return null}},Xt=864e5;function Ua(t){let e=t.now??Date.now(),n={...ri,...t.thresholds},i=t.nextFire??ii,r=[];for(let a of t.crons){let c=t.cronRuns.get(a.id)??[],l=a.timezone||"UTC",u=c.map(f=>({at:Date.parse(f.startedAt),status:f.status})),d=c[0],p={id:`cron:${a.id}`,source:"cron",kind:"schedule",name:I(a.id,x.text),trigger:{schedule:I(a.schedule,x.text),timezone:l},agent:a.agent||null,enabled:a.enabled,state:a.enabled?"enabled":"disabled",nextRunAt:a.enabled?Ae(a.nextRun)??Ae(i(a.schedule,new Date(e),l)):null,lastRun:d?{at:d.startedAt,status:d.status,summary:ui(d.status==="success"?void 0:d.errorSummary,x.summary)}:null,lastSuccessAt:c.find(f=>f.status==="success")?.startedAt??null,consecutiveFailures:Jt(u),sampledRuns:c.length,flags:[],attention:null};p.flags=Yt(p,u,a.schedule,l,null,e,n,i),r.push(Zt(p))}let s=new Map(Gt(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 c=o.get(a.workflowId);c?c.push(a):o.set(a.workflowId,[a])}for(let a of t.workflows){let c=a.nodes.find(_=>_.type.startsWith("trigger."));if(!c||c.type!=="trigger.cron"&&c.type!=="trigger.hook")continue;let l=c.config??{},u=a.state||"active",d=u==="active",p=(o.get(a.id)??[]).slice().sort((_,we)=>we.at-_.at),f=p.map(_=>({at:_.at,status:ai(_.status)})),g=f[0],h=c.type==="trigger.cron",y=typeof l.spec=="string"?l.spec:"",T=typeof l.timezone=="string"?l.timezone:"UTC",F={id:`workflow:${a.id}`,source:"workflow",kind:h?"schedule":"event",name:I(a.title||a.id,x.text),trigger:h?{schedule:I(y,x.text),timezone:T}:{event:I(typeof l.event=="string"?l.event:"",x.text),filters:li(l.filter,a)},agent:ci(a),enabled:d,state:u,nextRunAt:h&&d&&y?Ae(i(y,new Date(e),T)):null,lastRun:g?{at:new Date(g.at).toISOString(),status:g.status}:null,lastSuccessAt:(()=>{let _=f.find(we=>we.status==="success");return _?new Date(_.at).toISOString():null})(),consecutiveFailures:Jt(f),sampledRuns:p.length,flags:[],attention:null},ee=Date.parse(a.updated||a.created||"");F.flags=h?Yt(F,f,y,T,Number.isFinite(ee)?ee:null,e,n,i):si(F,s.get(a.id)?.state==="dormant",Number.isFinite(ee)?ee:null,e,n),r.push(Zt(F))}return r.sort(oi).slice(0,x.routines)}function Jt(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 Yt(t,e,n,i,r,s,o,a){let c=[],l=e.length?e[0].at:null;if(!t.enabled){let p=en(l,r,s,o);return p&&c.push(p),c}if(t.consecutiveFailures>=o.failStreak&&c.push({reason:"failing",detail:`${t.consecutiveFailures} failed attempts in a row`}),l===null)return c.push({reason:"never-ran",detail:"No persisted attempt"}),c;let u=new Date(l),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&&c.push({reason:"overdue",detail:`No attempt since ${new Date(l).toISOString()}; ${o.missedFires} scheduled fires missed`}),c}function si(t,e,n,i,r){let s=[],o=t.lastRun?Date.parse(t.lastRun.at):null;if(!t.enabled){let a=en(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 en(t,e,n,i){let r=Math.max(t??0,e??0);return r&&n-r<i.disabledDays*Xt?null:{reason:"disabled-long",detail:r?`Disabled; no activity for ${Math.floor((n-r)/Xt)} days`:"Disabled and never ran"}}function Zt(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 Qt={critical:0,warning:1,info:2};function oi(t,e){let n=t.attention?Qt[t.attention]:3,i=e.attention?Qt[e.attention]:3;return n-i||Number(e.enabled)-Number(t.enabled)||t.name.localeCompare(e.name)}function ai(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 ci(t){if(t.ownerAgent)return I(t.ownerAgent,x.text);let e=t.nodes.find(n=>n.type==="agent"&&typeof n.config?.agentId=="string"&&n.config.agentId);return e?I(String(e.config.agentId),x.text):null}function li(t,e){let n=[],i=e?.project;if(i&&n.push(I(`project=${i}`,x.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(I(`${r}=${o.join(",")}`,x.filterValue))}return n.slice(0,x.filters)}function Ae(t){if(!t)return null;let e=t instanceof Date?t:new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function I(t,e){return t.length<=e?t:t.slice(0,e-3)+"..."}function ui(t,e){return t===void 0?void 0:I(t,e)}import{createHash as di,randomBytes as tn}from"crypto";import{existsSync as pi,mkdirSync as fi,readFileSync as gi,writeFileSync as mi}from"fs";import{resolve as hi,dirname as yi}from"path";var Re="agx_live_",bi=".agentx/tokens.json",nn=class{file;constructor(e=process.cwd(),n=bi){this.file=hi(e,n)}load(){if(!pi(this.file))return[];try{return JSON.parse(gi(this.file,"utf-8"))}catch{return[]}}save(e){fi(yi(this.file),{recursive:!0}),mi(this.file,JSON.stringify(e,null,2)+`
3
- `,"utf-8")}create(e){if(!e.name?.trim())throw new Error("Token name is required.");if(!Array.isArray(e.scopes)||e.scopes.length===0)throw new Error("At least one scope is required.");for(let o of e.scopes)if(!wi(o))throw new Error(`Invalid scope: ${o}`);let n=tn(32).toString("hex"),i=Re+n,r={id:"tok_"+tn(4).toString("hex"),name:e.name.trim(),prefix:Re+n.slice(0,4),hash:rn(i),scopes:[...e.scopes],createdAt:new Date().toISOString(),expiresAt:e.expiresInDays?new Date(Date.now()+e.expiresInDays*86400*1e3).toISOString():void 0},s=this.load();return s.push(r),this.save(s),{token:i,record:r}}list(){return this.load()}revoke(e){let n=this.load(),i=n.find(r=>r.id===e);return i?(i.revokedAt=new Date().toISOString(),this.save(n),i):null}isActive(e){let n=this.load().find(i=>i.id===e);return!!n&&!n.revokedAt&&!(n.expiresAt&&Date.parse(n.expiresAt)<Date.now())}verify(e){if(!e||!e.startsWith(Re))return null;let n=rn(e),i=this.load(),r=i.find(a=>a.hash===n);if(!r||r.revokedAt||r.expiresAt&&Date.parse(r.expiresAt)<Date.now())return null;let s=Date.now(),o=r.lastUsedAt?Date.parse(r.lastUsedAt):0;if(s-o>6e4){r.lastUsedAt=new Date(s).toISOString();try{this.save(i)}catch{}}return r}};function Ka(t,e){return!!(t.scopes.includes(e)||e.startsWith("agent:")&&t.scopes.includes("agent:*")||e==="dashboard:read"&&t.scopes.includes("dashboard:write"))}function wi(t){return t==="dashboard:read"||t==="dashboard:write"||t==="agent:*"||/^agent:[a-z0-9][a-z0-9_-]*$/.test(t)||t==="mesh:peer"||t==="app"}function rn(t){return"sha256:"+di("sha256").update(t).digest("hex")}function Ga(t){let e=t.headers.authorization,n=Array.isArray(e)?e[0]:e;if(n&&n.toLowerCase().startsWith("bearer "))return n.slice(7).trim();if(t.url)try{let r=new URL(t.url,"http://localhost").searchParams.get("token");if(r)return r}catch{}return null}import{existsSync as ae,readdirSync as Gi,readFileSync as Xi}from"fs";import{resolve as O}from"path";import{randomBytes as an}from"crypto";import{existsSync as xi,mkdirSync as Si,readdirSync as vi,readFileSync as $i,renameSync as cn,unlinkSync as Ii,writeFileSync as Ai}from"fs";import{resolve as ln}from"path";function sn(t){return[...t.account?["--account",t.account]:[],...t.store?["--store",t.store]:[]]}var ki=t=>t.trim().split(`
3
+ `,"utf-8")}create(e){if(!e.name?.trim())throw new Error("Token name is required.");if(!Array.isArray(e.scopes)||e.scopes.length===0)throw new Error("At least one scope is required.");for(let o of e.scopes)if(!wi(o))throw new Error(`Invalid scope: ${o}`);let n=tn(32).toString("hex"),i=Re+n,r={id:"tok_"+tn(4).toString("hex"),name:e.name.trim(),prefix:Re+n.slice(0,4),hash:rn(i),scopes:[...e.scopes],createdAt:new Date().toISOString(),expiresAt:e.expiresInDays?new Date(Date.now()+e.expiresInDays*86400*1e3).toISOString():void 0},s=this.load();return s.push(r),this.save(s),{token:i,record:r}}list(){return this.load()}revoke(e){let n=this.load(),i=n.find(r=>r.id===e);return i?(i.revokedAt=new Date().toISOString(),this.save(n),i):null}isActive(e){let n=this.load().find(i=>i.id===e);return!!n&&!n.revokedAt&&!(n.expiresAt&&Date.parse(n.expiresAt)<Date.now())}verify(e){if(!e||!e.startsWith(Re))return null;let n=rn(e),i=this.load(),r=i.find(a=>a.hash===n);if(!r||r.revokedAt||r.expiresAt&&Date.parse(r.expiresAt)<Date.now())return null;let s=Date.now(),o=r.lastUsedAt?Date.parse(r.lastUsedAt):0;if(s-o>6e4){r.lastUsedAt=new Date(s).toISOString();try{this.save(i)}catch{}}return r}};function Ka(t,e){return!!(t.scopes.includes(e)||e.startsWith("agent:")&&t.scopes.includes("agent:*")||e==="dashboard:read"&&t.scopes.includes("dashboard:write"))}function wi(t){return t==="dashboard:read"||t==="dashboard:write"||t==="agent:*"||/^agent:[a-z0-9][a-z0-9_-]*$/.test(t)||t==="mesh:peer"||t==="app"||/^member:[a-z0-9][a-z0-9_-]{0,39}$/.test(t)}function rn(t){return"sha256:"+di("sha256").update(t).digest("hex")}function Ga(t){let e=t.headers.authorization,n=Array.isArray(e)?e[0]:e;if(n&&n.toLowerCase().startsWith("bearer "))return n.slice(7).trim();if(t.url)try{let r=new URL(t.url,"http://localhost").searchParams.get("token");if(r)return r}catch{}return null}import{existsSync as ae,readdirSync as Gi,readFileSync as Xi}from"fs";import{resolve as O}from"path";import{randomBytes as an}from"crypto";import{existsSync as xi,mkdirSync as Si,readdirSync as vi,readFileSync as $i,renameSync as cn,unlinkSync as Ii,writeFileSync as Ai}from"fs";import{resolve as ln}from"path";function sn(t){return[...t.account?["--account",t.account]:[],...t.store?["--store",t.store]:[]]}var ki=t=>t.trim().split(`
4
4
  `).pop()?.slice(0,300)||"no output";async function on(t,e,n,i=Ie){let r=await i(t.bin,[...sn(t),"send","text","--to",e,"--message",n,"--no-preview"],{timeoutMs:6e4});return r.code===0?{ok:!0}:{ok:!1,error:`wacli send failed: ${ki(r.stderr||r.stdout)}`}}async function Ya(t,e,n,i,r=Ie){return(await r(t.bin,[...sn(t),"--read-only","media","download","--chat",e,"--id",n,"--output",i],{timeoutMs:12e4})).code===0}var Ri=2e3,_i=t=>on(t.wacli,t.to,t.text);function _e(t){return ln(t,".agentx","whatsapp-triage","drafts")}var Ci=t=>/^[a-z0-9-]{8,64}$/.test(t),ie=(t,e)=>ln(_e(t),`${e}.json`);function un(t,e){Si(_e(t),{recursive:!0});let n=ie(t,e.id),i=`${n}.${process.pid}.tmp`;Ai(i,JSON.stringify(e,null,2)+`
5
5
  `,{mode:384}),cn(i,n)}function rc(t,e,n=Date.now()){let i=e.text.trim().slice(0,Ri);if(!i)throw new Error("empty draft");let r={...e,text:i,id:`${n.toString(36)}-${an(4).toString("hex")}`,status:"pending",created_at:new Date(n).toISOString()};return un(t,r),r}function se(t,e){if(!Ci(e))return null;try{return JSON.parse($i(ie(t,e),"utf-8"))}catch{return null}}function dn(t,e){let n=_e(t);return xi(n)?vi(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 pn(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}.${an(3).toString("hex")}.claim`;try{cn(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??_i)(r).catch(c=>({ok:!1,error:String(c?.message??c)}));a.ok?o.status="sent":(o.status="failed",o.error=a.error)}un(t,o);try{Ii(s)}catch{}return o.status==="failed"?{ok:!1,error:o.error??"send failed"}:{ok:!0,draft:o}}import{existsSync as Di,mkdirSync as Ei,readdirSync as Ti,readFileSync as Pi,renameSync as Li,writeFileSync as Oi}from"fs";import{resolve as mn}from"path";function fn(t,e){let n=t.list?` in the "${t.list}" list`:"",i=[`This card came from the operator's reminder "${t.title}"${n} (id ${t.id}).`];return i.push(e?`Do what the operator chose, then tick the reminder off: remindctl complete ${t.id}`:"Leave the reminder open; it will come back at a later check-in."),i}var gn=["discard","keep","pause","approve"],A={title:120,ask:300,recommend:300,source:500,note:500,pendingPerAgent:25},Ni={defaultExpiryDays:3,maxExpiryDays:30};function U(t){return mn(t,".agentx","approvals")}var Mi=/^[a-z0-9][a-z0-9-]{0,80}$/;function hn(t){return Mi.test(t)}function yn(t,e){if(!hn(e))throw new Error(`invalid card id: ${e}`);return mn(U(t),`${e}.json`)}function ji(t,e){let n=new Date(t).toISOString().slice(0,10),i=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return`${n}-${i||"card"}-${Math.random().toString(36).slice(2,6)}`}function oe(t,e){Ei(U(t),{recursive:!0});let n=yn(t,e.id),i=`${n}.${process.pid}.tmp`;Oi(i,JSON.stringify(e,null,2)+`
6
6
  `),Li(i,n)}function P(t,e){if(!hn(e))return null;try{return JSON.parse(Pi(yn(t,e),"utf-8"))}catch{return null}}function L(t,e){let n=U(t);if(!Di(n))return[];let i=[];for(let r of Ti(n).filter(s=>s.endsWith(".json")&&!s.startsWith("_")).sort()){let s=P(t,r.slice(0,-5));s&&(!e||s.status===e)&&i.push(s)}return i}function w(t){return typeof t=="string"?t.replace(/\s+/g," ").trim():""}function Vi(t,e,n){let i=e+n.maxExpiryDays*864e5,r,s=w(t);if(!s)r=e+n.defaultExpiryDays*864e5;else{let o=/^(\d+)\s*([hd])$/i.exec(s);if(o)r=e+Number(o[1])*(o[2].toLowerCase()==="d"?864e5:36e5);else if(r=Date.parse(s),Number.isNaN(r))return{ok:!1,error:`expires must be an ISO date or time, or like "12h" / "3d" (got "${s}")`}}return r<=e?{ok:!1,error:"expires must be in the future"}:{ok:!0,at:new Date(Math.min(r,i)).toISOString()}}function Wi(t,e={}){let n=e.now??Date.now(),i=e.settings??Ni,r=w(t.title),s=w(t.ask),o=w(t.recommend),a=w(t.raised_by);if(!r)return{ok:!1,error:"title is required"};if(!s)return{ok:!1,error:"ask is required: the yes/no question"};if(!o)return{ok:!1,error:"recommend is required: your advice and why, in one line"};if(!a)return{ok:!1,error:"raised_by is required: the agent id"};if(r.length>A.title)return{ok:!1,error:`title is longer than ${A.title} characters`};if(s.length>A.ask)return{ok:!1,error:`ask is longer than ${A.ask} characters`};if(o.length>A.recommend)return{ok:!1,error:`recommend is longer than ${A.recommend} characters`};let c=w(t.if_silent).toLowerCase();if(!gn.includes(c))return{ok:!1,error:`if_silent must be one of ${gn.join(", ")}`};let l=Vi(t.expires,n,i);if(!l.ok)return l;let u=w(t.source);if(u.length>A.source)return{ok:!1,error:`source is longer than ${A.source} characters`};if(u&&/^[a-z][a-z0-9+.-]*:/i.test(u)&&!/^https?:\/\//i.test(u))return{ok:!1,error:"source must be an http(s) link or a plain reference"};let d=Vt(t);if(!d.ok)return d;let p,f=t.reply;return f&&typeof f=="object"&&w(f.channel)&&w(f.chatId)&&(p={channel:w(f.channel),chatId:w(f.chatId),...w(f.accountId)?{accountId:w(f.accountId)}:{}}),{ok:!0,card:{id:ji(n,r),title:r,ask:s,recommend:o,if_silent:c,expires:l.at,...u?{source:u}:{},raised_by:a,created_at:new Date(n).toISOString(),...p?{reply:p}:{},...d.value,...e.origin?{origin:e.origin}:{},status:"pending"}}}function uc(t,e,n={}){let i=Wi(e,n);if(!i.ok)return i;let r=L(t,"pending").filter(s=>s.raised_by===i.card.raised_by).length;return r>=A.pendingPerAgent?{ok:!1,error:`${i.card.raised_by} already has ${r} cards waiting; wait for decisions before raising more`}:(oe(t,i.card),i)}function bn(t,e,n,i={}){let r=P(t,e);if(!r)return{ok:!1,error:`no card "${e}"`};if(r.status!=="pending")return{ok:!1,error:`card "${e}" is already ${r.status}`};let s=Ft(r,n,i);if(!s.ok)return s;let o=w(i.note).slice(0,A.note),a={...r,status:"decided",verdict:n,decided_by:i.by??"operator",decided_at:new Date(i.now??Date.now()).toISOString(),...o?{note:o}:{},...s.choice?{choice:s.choice}:{},...s.text?{text:s.text}:{}};return oe(t,a),{ok:!0,card:a}}function dc(t,e=Date.now()){let n=[];for(let i of L(t,"pending")){if(Date.parse(i.expires)>e)continue;let r={...i,status:"expired",outcome:i.if_silent,decided_by:"expiry",decided_at:new Date(e).toISOString()};oe(t,r),n.push(r)}return n}function pc(t){return L(t).filter(e=>e.status!=="pending"&&!e.agent_notified_at)}function fc(t,e,n=Date.now()){let i=P(t,e);!i||i.agent_notified_at||oe(t,{...i,agent_notified_at:new Date(n).toISOString()})}function gc(t){let e=t.status==="decided"?t.verdict==="yes"?"The operator said YES.":"The operator said NO.":`Nobody answered before it expired, so the default applied: ${t.outcome??t.if_silent}.`,n=[`[Approval result] Your decision card "${t.title}" (${t.id}) is closed.`,`Question: ${t.ask}`,e];return t.status==="decided"&&t.verdict==="yes"&&n.push(...Ut(t)),t.note&&n.push(`Operator note: ${t.note}`),t.source&&n.push(`Source: ${t.source}`),t.origin&&n.push(...fn(t.origin,t.status==="decided"&&t.verdict==="yes")),t.reply&&n.push(`You raised it from ${t.reply.channel} chat ${t.reply.chatId}; reply there if the requester should know.`),n.push("Act on this result now. Do not raise the same card again."),n.join(`
@@ -480,4 +480,4 @@ Document the arguments, commands, or files the skill expects. Example:
480
480
  claude-code ${yt(t)} --arg value
481
481
  \`\`\`
482
482
  `}It();var Br={maxPixels:12e5,timeoutMs:5e3,intervalMs:100,changeThreshold:.015,stableMs:400,regions:{},buffer:{enabled:!1,seconds:10,fps:2,region:"screen",maxPixels:3e5}};function zr(t){return{...Br,...t??{},regions:{...t?.regions??{}},buffer:{...Br.buffer,...t?.buffer??{}}}}function gd(t){try{return zr($t(t).screen)}catch{return zr(void 0)}}var Oa=/^[a-z][\w-]*$/,Hr=["window","screen","menubar","notifications"];function Q(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)=>Q(t,e,n=>Number.isInteger(n)&&n>0,"a whole number above 0");function qr(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 md(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=Q(e.stableMs,"stableMs",r=>Number.isInteger(r)&&r>=0,"a whole number, 0 or more")),"changeThreshold"in e&&(n.changeThreshold=Q(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(!Oa.test(s))throw new Error(`region name "${s}" must be lowercase letters, digits, - or _`);o===null?delete r[s]:r[s]=qr(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=Q(r.seconds,"buffer.seconds",o=>o>0&&o<=120,"above 0 and at most 120")),"fps"in r&&(s.fps=Q(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&&!Hr.includes(i)&&!n.regions?.[i])try{qr(i)}catch{throw new Error(`buffer.region "${i}" is not a region \u2014 use ${[...Hr,...Object.keys(n.regions??{})].join(", ")}, or x,y,w,h`)}return n}export{Gt as a,ja as b,et as c,uo as d,po as e,Ol as f,Nl as g,Ml as h,lr as i,Vl as j,Fl as k,N as l,ur as m,x as n,Ua as o,nn as p,Ka as q,rn as r,Ga as s,gn as t,A as u,U as v,hn as w,P as x,uc as y,dc as z,pc as A,fc as B,gc as C,Ya as D,_i as E,rc as F,pn as G,C as H,wc as I,kc as J,vn as K,Ac as L,Rn as M,Wc as N,Cn as O,vr as P,fu as Q,gu as R,ku as S,Zo as T,xu as U,Uc as V,Bc as W,zc as X,Hc as Y,qc as Z,Kc as _,Xc as $,Jc as aa,sl as ba,Ne as ca,ol as da,al as ea,G as fa,X as ga,ia as ha,Du as ia,Eu as ja,Tu as ka,Pu as la,st as ma,Lu as na,Ve as oa,We as pa,fe as qa,Ds as ra,Ts as sa,pl as ta,Ue as ua,Be as va,Ps as wa,Ls as xa,Xn as ya,Qn as za,fl as Aa,Ms as Ba,gl as Ca,Hs as Da,Gs as Ea,ze as Fa,Js as Ga,er as Ha,M as Ia,Tr as Ja,Pr as Ka,Lr as La,Wu as Ma,fa as Na,Nr as Oa,Mr as Pa,Yu as Qa,Zu as Ra,Ca as Sa,Qu as Ta,Vr as Ua,ge as Va,Al as Wa,or as Xa,He as Ya,Ze as Za,Pl as _a,rd as $a,id as ab,sd as bb,od as cb,ad as db,cd as eb,ld as fb,ud as gb,dd as hb,Br as ib,zr as jb,gd as kb,Hr as lb,md as mb};
483
- //# sourceMappingURL=chunk-BDM4VTBR.js.map
483
+ //# sourceMappingURL=chunk-E3SVSIUU.js.map