agentix-cli 0.105.1 → 0.107.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 (121) hide show
  1. package/dist/{App-HQKQH7ER.js → App-GRPPB7IF.js} +2 -2
  2. package/dist/{ChatApp-DE7QNKTD.js → ChatApp-ZEIEXPOB.js} +2 -2
  3. package/dist/{agent-LYZ3FCFB.js → agent-J22ODKSX.js} +2 -2
  4. package/dist/{board-dashboard-Q7K4ZJ2S.js → board-dashboard-DUT3XBS7.js} +4 -4
  5. package/dist/chunk-36AXN6ZB.js +11 -0
  6. package/dist/chunk-36AXN6ZB.js.map +1 -0
  7. package/dist/{chunk-UVE624RW.js → chunk-3RLYCNGP.js} +2 -2
  8. package/dist/{chunk-ZLLJQICH.js → chunk-4YBFKN3B.js} +2 -2
  9. package/dist/{chunk-RQ4J2WHD.js → chunk-55MUAKXA.js} +2 -2
  10. package/dist/{chunk-DTO22ALU.js → chunk-CXCXMOTB.js} +2 -2
  11. package/dist/chunk-FQGEDMG6.js +2 -0
  12. package/dist/chunk-FQGEDMG6.js.map +1 -0
  13. package/dist/{chunk-WY3EV2FB.js → chunk-GFON223J.js} +2 -2
  14. package/dist/{chunk-27IFUCJ6.js → chunk-H5ZNKPXN.js} +2 -2
  15. package/dist/{chunk-7ZSGT4NO.js → chunk-IRH2O2QB.js} +2 -2
  16. package/dist/{chunk-4HBRZGW3.js → chunk-JUJPQWLG.js} +2 -2
  17. package/dist/{chunk-WCSVPH5M.js → chunk-JYFE6SQU.js} +2 -2
  18. package/dist/chunk-M6NIPFRY.js +54 -0
  19. package/dist/chunk-M6NIPFRY.js.map +1 -0
  20. package/dist/{chunk-5NXB5YHK.js → chunk-N72AJ2LS.js} +247 -240
  21. package/dist/chunk-N72AJ2LS.js.map +1 -0
  22. package/dist/{chunk-GWZMRGQO.js → chunk-NL6JSS4E.js} +2 -2
  23. package/dist/{chunk-Y4KJCUQO.js → chunk-O5BBV4ZV.js} +2 -2
  24. package/dist/{chunk-D6BN5AIP.js → chunk-OTCF46CF.js} +2 -2
  25. package/dist/{chunk-LTS4A7AP.js → chunk-PEDNM2FA.js} +2 -2
  26. package/dist/{chunk-WT7MLOMA.js → chunk-S4RQ6Q2B.js} +2 -2
  27. package/dist/chunk-UDJAODAB.js +100 -0
  28. package/dist/chunk-UDJAODAB.js.map +1 -0
  29. package/dist/{chunk-QDIEP4NK.js → chunk-UEOG3H25.js} +2 -2
  30. package/dist/chunk-UIDHTIPG.js +153 -0
  31. package/dist/chunk-UIDHTIPG.js.map +1 -0
  32. package/dist/{chunk-MORQGMXG.js → chunk-UOOFNFEO.js} +2 -2
  33. package/dist/{chunk-OLZVLA4T.js → chunk-XQMLRZHY.js} +2 -2
  34. package/dist/cli.js +1 -1
  35. package/dist/{client-GLZXM7T3.js → client-WTC7P6PE.js} +2 -2
  36. package/dist/config-WG62KB23.js +2 -0
  37. package/dist/config-mutator-7REOEXW4.js +2 -0
  38. package/dist/{doctor-JNHPILIA.js → doctor-XDR22CFD.js} +2 -2
  39. package/dist/index.d.ts +287 -3
  40. package/dist/index.js +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/{program-UA4WZRTD.js → program-PZO6XJYZ.js} +170 -170
  43. package/dist/program-PZO6XJYZ.js.map +1 -0
  44. package/dist/{promote-2HKB5NOG.js → promote-YEODWQX2.js} +2 -2
  45. package/dist/{query-OR2CWXUA.js → query-DC3O3QBJ.js} +2 -2
  46. package/dist/registry-PT5SRRZA.js +2 -0
  47. package/dist/{request-planner-ASZDSP2Q.js → request-planner-EP2XYPKZ.js} +2 -2
  48. package/dist/{review-candidates-PDTQVHFG.js → review-candidates-VKH372WW.js} +2 -2
  49. package/dist/routing-OOIZ6433.js +2 -0
  50. package/dist/schedule-tool-W45LNZGX.js +2 -0
  51. package/dist/scheduler-YXU4G5NH.js +2 -0
  52. package/dist/{seat-5A73RLRK.js → seat-AGGELF3C.js} +2 -2
  53. package/dist/{select-CODD2FVV.js → select-6SXEU2NV.js} +2 -2
  54. package/dist/{set-enabled-2COGGCQQ.js → set-enabled-GLWP7YDW.js} +2 -2
  55. package/dist/token-tracker-W7DFDEFN.js +2 -0
  56. package/dist/{tool-LNPR4PNJ.js → tool-23P66PKZ.js} +2 -2
  57. package/dist/{tool-3X755YK2.js → tool-UF6LOS6K.js} +2 -2
  58. package/dist/usage-channels-KBLEC4NE.js +2 -0
  59. package/dist/usage-channels-KBLEC4NE.js.map +1 -0
  60. package/dist/wiki-6SCKSY4I.js +2 -0
  61. package/dist/workspace-setup-EA3G42NY.js +2 -0
  62. package/dist/workspace-setup-EA3G42NY.js.map +1 -0
  63. package/package.json +2 -1
  64. package/dist/chunk-5NXB5YHK.js.map +0 -1
  65. package/dist/chunk-5XRD5DDP.js +0 -152
  66. package/dist/chunk-5XRD5DDP.js.map +0 -1
  67. package/dist/chunk-73TOQOLZ.js +0 -54
  68. package/dist/chunk-73TOQOLZ.js.map +0 -1
  69. package/dist/chunk-DWADWDMU.js +0 -96
  70. package/dist/chunk-DWADWDMU.js.map +0 -1
  71. package/dist/chunk-PGW64HAT.js +0 -2
  72. package/dist/chunk-PGW64HAT.js.map +0 -1
  73. package/dist/config-X7GKGKLR.js +0 -2
  74. package/dist/config-mutator-FCJVNIY5.js +0 -2
  75. package/dist/program-UA4WZRTD.js.map +0 -1
  76. package/dist/registry-ER6WLLPN.js +0 -2
  77. package/dist/routing-EFZBY6WW.js +0 -2
  78. package/dist/schedule-tool-63WNEZPE.js +0 -2
  79. package/dist/scheduler-IFHH326C.js +0 -2
  80. package/dist/wiki-REOU5NBI.js +0 -2
  81. package/dist/workspace-setup-42ARC42I.js +0 -2
  82. /package/dist/{App-HQKQH7ER.js.map → App-GRPPB7IF.js.map} +0 -0
  83. /package/dist/{ChatApp-DE7QNKTD.js.map → ChatApp-ZEIEXPOB.js.map} +0 -0
  84. /package/dist/{agent-LYZ3FCFB.js.map → agent-J22ODKSX.js.map} +0 -0
  85. /package/dist/{board-dashboard-Q7K4ZJ2S.js.map → board-dashboard-DUT3XBS7.js.map} +0 -0
  86. /package/dist/{chunk-UVE624RW.js.map → chunk-3RLYCNGP.js.map} +0 -0
  87. /package/dist/{chunk-ZLLJQICH.js.map → chunk-4YBFKN3B.js.map} +0 -0
  88. /package/dist/{chunk-RQ4J2WHD.js.map → chunk-55MUAKXA.js.map} +0 -0
  89. /package/dist/{chunk-DTO22ALU.js.map → chunk-CXCXMOTB.js.map} +0 -0
  90. /package/dist/{chunk-WY3EV2FB.js.map → chunk-GFON223J.js.map} +0 -0
  91. /package/dist/{chunk-27IFUCJ6.js.map → chunk-H5ZNKPXN.js.map} +0 -0
  92. /package/dist/{chunk-7ZSGT4NO.js.map → chunk-IRH2O2QB.js.map} +0 -0
  93. /package/dist/{chunk-4HBRZGW3.js.map → chunk-JUJPQWLG.js.map} +0 -0
  94. /package/dist/{chunk-WCSVPH5M.js.map → chunk-JYFE6SQU.js.map} +0 -0
  95. /package/dist/{chunk-GWZMRGQO.js.map → chunk-NL6JSS4E.js.map} +0 -0
  96. /package/dist/{chunk-Y4KJCUQO.js.map → chunk-O5BBV4ZV.js.map} +0 -0
  97. /package/dist/{chunk-D6BN5AIP.js.map → chunk-OTCF46CF.js.map} +0 -0
  98. /package/dist/{chunk-LTS4A7AP.js.map → chunk-PEDNM2FA.js.map} +0 -0
  99. /package/dist/{chunk-WT7MLOMA.js.map → chunk-S4RQ6Q2B.js.map} +0 -0
  100. /package/dist/{chunk-QDIEP4NK.js.map → chunk-UEOG3H25.js.map} +0 -0
  101. /package/dist/{chunk-MORQGMXG.js.map → chunk-UOOFNFEO.js.map} +0 -0
  102. /package/dist/{chunk-OLZVLA4T.js.map → chunk-XQMLRZHY.js.map} +0 -0
  103. /package/dist/{client-GLZXM7T3.js.map → client-WTC7P6PE.js.map} +0 -0
  104. /package/dist/{config-X7GKGKLR.js.map → config-WG62KB23.js.map} +0 -0
  105. /package/dist/{config-mutator-FCJVNIY5.js.map → config-mutator-7REOEXW4.js.map} +0 -0
  106. /package/dist/{doctor-JNHPILIA.js.map → doctor-XDR22CFD.js.map} +0 -0
  107. /package/dist/{promote-2HKB5NOG.js.map → promote-YEODWQX2.js.map} +0 -0
  108. /package/dist/{query-OR2CWXUA.js.map → query-DC3O3QBJ.js.map} +0 -0
  109. /package/dist/{registry-ER6WLLPN.js.map → registry-PT5SRRZA.js.map} +0 -0
  110. /package/dist/{request-planner-ASZDSP2Q.js.map → request-planner-EP2XYPKZ.js.map} +0 -0
  111. /package/dist/{review-candidates-PDTQVHFG.js.map → review-candidates-VKH372WW.js.map} +0 -0
  112. /package/dist/{routing-EFZBY6WW.js.map → routing-OOIZ6433.js.map} +0 -0
  113. /package/dist/{schedule-tool-63WNEZPE.js.map → schedule-tool-W45LNZGX.js.map} +0 -0
  114. /package/dist/{scheduler-IFHH326C.js.map → scheduler-YXU4G5NH.js.map} +0 -0
  115. /package/dist/{seat-5A73RLRK.js.map → seat-AGGELF3C.js.map} +0 -0
  116. /package/dist/{select-CODD2FVV.js.map → select-6SXEU2NV.js.map} +0 -0
  117. /package/dist/{set-enabled-2COGGCQQ.js.map → set-enabled-GLWP7YDW.js.map} +0 -0
  118. /package/dist/{wiki-REOU5NBI.js.map → token-tracker-W7DFDEFN.js.map} +0 -0
  119. /package/dist/{tool-LNPR4PNJ.js.map → tool-23P66PKZ.js.map} +0 -0
  120. /package/dist/{tool-3X755YK2.js.map → tool-UF6LOS6K.js.map} +0 -0
  121. /package/dist/{workspace-setup-42ARC42I.js.map → wiki-6SCKSY4I.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import{a as j,b as O,c as T,d as D,e as _,j as N}from"./chunk-GWZMRGQO.js";import{b as R}from"./chunk-2GIDVZ4H.js";import{v as C,w as I}from"./chunk-DTO22ALU.js";import{b as v,c as W}from"./chunk-QOYAX2FT.js";import{readFileSync as Y,existsSync as B}from"fs";I();import{resolve as x}from"path";import{execSync as L}from"child_process";async function nt(n,a,o,t={}){let u=t.selectorModel??"haiku",g=t.synthModel??"sonnet",l=t.maxCandidates??3,r=t.maxHops??2,s=t.maxArticles??8,h=t.timeoutMs??6e4,p=t.log??console.error.bind(console,"[wiki-query]"),m=t.messagePath?.length?t.messagePath:void 0,w=t.graphWeight??$,i=x(a.baseDir,"_index.md");if(!B(i))return A("no-catalog",n,"No _index.md found \u2014 run `agentx wiki status` to rebuild.");let e=Y(i,"utf-8"),d=Date.now(),f=[],y="";try{let c=await G(n,a,o,l,m,w);c?(f=c,y=`[wiki-rerank seat] ${c.map(k=>k.title).join(" | ")}`):(y=await Q(q(n,e,l,m),u,h),f=K(y))}catch(c){return p("selector failed:",c?.message),{...A("error",n,`Selector: ${c?.message||"unknown"}`),trace:{selectorMs:Date.now()-d,synthesisMs:0,selectorOutput:y}}}let S=Date.now()-d;if(f.length===0)return{...A("no-candidates",n,"Selector returned no candidates."),trace:{selectorMs:S,synthesisMs:0,selectorOutput:y}};let b=F(f,a,o,r,s);if(b.length===0)return{...A("no-candidates",n,"Candidates did not resolve to readable articles."),candidates:f,trace:{selectorMs:S,synthesisMs:0,selectorOutput:y}};let M=Date.now(),P="";try{P=await Q(J(n,b),g,h*2)}catch(c){return p("synthesis failed:",c?.message),{...A("error",n,`Synthesis: ${c?.message||"unknown"}`),candidates:f,walked:b.map(k=>({title:k.meta.title,path:k.path,type:k.meta.type,hop:k.hop??0})),trace:{selectorMs:S,synthesisMs:Date.now()-M,selectorOutput:y}}}let E=Date.now()-M;return{answer:P.trim(),citations:b.map(c=>({title:c.meta.title,path:c.path,type:c.meta.type})),candidates:f,walked:b.map(c=>({title:c.meta.title,path:c.path,type:c.meta.type,hop:c.hop??0})),status:"ok",trace:{selectorMs:S,synthesisMs:E,selectorOutput:y}}}function A(n,a,o){return{answer:"",citations:[],candidates:[],walked:[],status:n,error:o}}function F(n,a,o,t,u){let g=new Map;for(let s of a.listArticles(o||""))g.set(s.meta.title.toLowerCase(),s.path);let l=new Map,r=[];for(let s of n)l.has(s.path)||r.push({path:s.path,hop:0});for(;r.length&&l.size<u;){let s=r.shift();if(l.has(s.path)||s.hop>t)continue;let h=o?a.readArticleAs(s.path,o):a.readArticle(s.path);if(h&&(l.set(s.path,{...h,hop:s.hop}),!(s.hop>=t)))for(let p of h.meta.related||[]){let m=g.get(p.toLowerCase());m&&!l.has(m)&&r.push({path:m,hop:s.hop+1})}}return Array.from(l.values())}async function G(n,a,o,t,u,g=$){try{let r=(a.rebuildIndex().articles??[]).filter(i=>i.path&&!i.path.includes("/_versions/"));if(r.length<2)return null;let h=H(n,r,u,g).slice(0,O).map(i=>({id:`k${i}`,title:r[i].title||r[i].path,tags:r[i].tags,excerpt:[r[i].type?`type: ${r[i].type}`:"",(r[i].related??[]).length?`related: ${(r[i].related??[]).join(", ")}`:"",(r[i].graphPath??[]).length?`graph: ${(r[i].graphPath??[]).join(" \u203A ")}`:""].filter(Boolean).join(" \xB7 ")})),p=await C(j,T({query:n,candidates:h,excerptChars:300}),D(h),{features:{agent:o??"unknown",stage:"catalog-selector"}});if(!p||p.mode!=="active")return null;let w=_(p.answers,h).ranked.slice(0,t).map(i=>r[Number(i.slice(1))]).filter(Boolean).map(i=>({title:i.title,path:i.path}));return w.length>0?w:null}catch{return null}}var $=.6;function H(n,a,o,t=$){let u=a.map(e=>[e.title,(e.tags??[]).join(" "),(e.related??[]).join(" ")].join(" ")),g=W(n,v(u)),l=g.reduce((e,d)=>Math.max(e,d.score),0),r=new Map(g.map(e=>[e.docIndex,l>0?e.score/l:0])),s=!!o?.length,h=e=>s&&e.graphPath?.length?N(o,e.graphPath):0,p=(e,d)=>d.score-e.score||e.i-d.i,m=a.map((e,d)=>({i:d,score:(r.get(d)??0)*(1+t*h(e))})).filter(e=>r.has(e.i)).sort(p),w=a.map((e,d)=>({i:d,score:h(e)})).filter(e=>!r.has(e.i)&&e.score>0).sort(p),i=[...m,...w].map(e=>e.i);for(let e=0;e<a.length;e++)i.includes(e)||i.push(e);return i}function q(n,a,o,t){let u=t?.length?`
1
+ import{a as j,b as O,c as T,d as D,e as _,j as N}from"./chunk-NL6JSS4E.js";import{b as R}from"./chunk-2GIDVZ4H.js";import{v as C,w as I}from"./chunk-CXCXMOTB.js";import{b as v,c as W}from"./chunk-QOYAX2FT.js";import{readFileSync as Y,existsSync as B}from"fs";I();import{resolve as x}from"path";import{execSync as L}from"child_process";async function nt(n,a,o,t={}){let u=t.selectorModel??"haiku",g=t.synthModel??"sonnet",l=t.maxCandidates??3,r=t.maxHops??2,s=t.maxArticles??8,h=t.timeoutMs??6e4,p=t.log??console.error.bind(console,"[wiki-query]"),m=t.messagePath?.length?t.messagePath:void 0,w=t.graphWeight??$,i=x(a.baseDir,"_index.md");if(!B(i))return A("no-catalog",n,"No _index.md found \u2014 run `agentx wiki status` to rebuild.");let e=Y(i,"utf-8"),d=Date.now(),f=[],y="";try{let c=await G(n,a,o,l,m,w);c?(f=c,y=`[wiki-rerank seat] ${c.map(k=>k.title).join(" | ")}`):(y=await Q(q(n,e,l,m),u,h),f=K(y))}catch(c){return p("selector failed:",c?.message),{...A("error",n,`Selector: ${c?.message||"unknown"}`),trace:{selectorMs:Date.now()-d,synthesisMs:0,selectorOutput:y}}}let S=Date.now()-d;if(f.length===0)return{...A("no-candidates",n,"Selector returned no candidates."),trace:{selectorMs:S,synthesisMs:0,selectorOutput:y}};let b=F(f,a,o,r,s);if(b.length===0)return{...A("no-candidates",n,"Candidates did not resolve to readable articles."),candidates:f,trace:{selectorMs:S,synthesisMs:0,selectorOutput:y}};let M=Date.now(),P="";try{P=await Q(J(n,b),g,h*2)}catch(c){return p("synthesis failed:",c?.message),{...A("error",n,`Synthesis: ${c?.message||"unknown"}`),candidates:f,walked:b.map(k=>({title:k.meta.title,path:k.path,type:k.meta.type,hop:k.hop??0})),trace:{selectorMs:S,synthesisMs:Date.now()-M,selectorOutput:y}}}let E=Date.now()-M;return{answer:P.trim(),citations:b.map(c=>({title:c.meta.title,path:c.path,type:c.meta.type})),candidates:f,walked:b.map(c=>({title:c.meta.title,path:c.path,type:c.meta.type,hop:c.hop??0})),status:"ok",trace:{selectorMs:S,synthesisMs:E,selectorOutput:y}}}function A(n,a,o){return{answer:"",citations:[],candidates:[],walked:[],status:n,error:o}}function F(n,a,o,t,u){let g=new Map;for(let s of a.listArticles(o||""))g.set(s.meta.title.toLowerCase(),s.path);let l=new Map,r=[];for(let s of n)l.has(s.path)||r.push({path:s.path,hop:0});for(;r.length&&l.size<u;){let s=r.shift();if(l.has(s.path)||s.hop>t)continue;let h=o?a.readArticleAs(s.path,o):a.readArticle(s.path);if(h&&(l.set(s.path,{...h,hop:s.hop}),!(s.hop>=t)))for(let p of h.meta.related||[]){let m=g.get(p.toLowerCase());m&&!l.has(m)&&r.push({path:m,hop:s.hop+1})}}return Array.from(l.values())}async function G(n,a,o,t,u,g=$){try{let r=(a.rebuildIndex().articles??[]).filter(i=>i.path&&!i.path.includes("/_versions/"));if(r.length<2)return null;let h=H(n,r,u,g).slice(0,O).map(i=>({id:`k${i}`,title:r[i].title||r[i].path,tags:r[i].tags,excerpt:[r[i].type?`type: ${r[i].type}`:"",(r[i].related??[]).length?`related: ${(r[i].related??[]).join(", ")}`:"",(r[i].graphPath??[]).length?`graph: ${(r[i].graphPath??[]).join(" \u203A ")}`:""].filter(Boolean).join(" \xB7 ")})),p=await C(j,T({query:n,candidates:h,excerptChars:300}),D(h),{features:{agent:o??"unknown",stage:"catalog-selector"}});if(!p||p.mode!=="active")return null;let w=_(p.answers,h).ranked.slice(0,t).map(i=>r[Number(i.slice(1))]).filter(Boolean).map(i=>({title:i.title,path:i.path}));return w.length>0?w:null}catch{return null}}var $=.6;function H(n,a,o,t=$){let u=a.map(e=>[e.title,(e.tags??[]).join(" "),(e.related??[]).join(" ")].join(" ")),g=W(n,v(u)),l=g.reduce((e,d)=>Math.max(e,d.score),0),r=new Map(g.map(e=>[e.docIndex,l>0?e.score/l:0])),s=!!o?.length,h=e=>s&&e.graphPath?.length?N(o,e.graphPath):0,p=(e,d)=>d.score-e.score||e.i-d.i,m=a.map((e,d)=>({i:d,score:(r.get(d)??0)*(1+t*h(e))})).filter(e=>r.has(e.i)).sort(p),w=a.map((e,d)=>({i:d,score:h(e)})).filter(e=>!r.has(e.i)&&e.score>0).sort(p),i=[...m,...w].map(e=>e.i);for(let e=0;e<a.length;e++)i.includes(e)||i.push(e);return i}function q(n,a,o,t){let u=t?.length?`
2
2
  ## Intent
3
3
 
4
4
  The request was classified under the intent-graph path "${t.join(" \u203A ")}". Prefer articles filed under the same branch when their titles are equally plausible.
@@ -46,4 +46,4 @@ ${o}
46
46
  Answer the question in 2\u20136 sentences. Cite articles by their title in square brackets like [Article Title]. If the articles do not answer the question, say so plainly (do not invent). Prefer concrete facts over hedging.
47
47
 
48
48
  Output ONLY the answer \u2014 no preamble, no "here is my answer:", no markdown fencing.`}function K(n){let a=n.match(/\[[\s\S]*?\]/);if(!a)return[];try{let o=JSON.parse(a[0]);return Array.isArray(o)?o.filter(t=>t&&typeof t.title=="string"&&typeof t.path=="string").map(t=>({title:t.title,path:t.path})):[]}catch{return[]}}async function Q(n,a,o){let{writeFileSync:t,mkdirSync:u,rmSync:g}=await import("fs"),{tmpdir:l}=await import("os"),r=x(l(),`agentx-wiki-query-${process.pid}`);u(r,{recursive:!0});let s=x(r,`prompt-${Date.now()}.txt`);t(s,n);try{let h=`cat '${s}' | claude -p - --output-format json --max-turns 1 --model ${a} --disallowedTools "Bash Read Write Edit Glob Grep Agent WebSearch WebFetch NotebookEdit"`,p=L(h,{env:R({...process.env}),encoding:"utf-8",timeout:o,maxBuffer:4*1024*1024});try{let m=JSON.parse(p);return String(m.result||m.content||"")}catch{return p}}finally{try{g(s,{force:!0})}catch{}}}export{nt as a,$ as b,H as c};
49
- //# sourceMappingURL=chunk-MORQGMXG.js.map
49
+ //# sourceMappingURL=chunk-UOOFNFEO.js.map
@@ -1,2 +1,2 @@
1
- import{a as o}from"./chunk-UVE624RW.js";import{resolve as a}from"path";import{existsSync as d,readdirSync as c,mkdirSync as l}from"fs";var g=class{baseDir;agentsDir;mode;sharedStore;agentStores=new Map;log;constructor(t=a(process.cwd(),".agentx/wiki"),e=console.error.bind(console,"[wiki-hub]"),r="graph"){this.baseDir=t,this.agentsDir=a(t,"agents"),this.mode=r,this.log=e,l(this.agentsDir,{recursive:!0}),this.sharedStore=new o(t,e)}getMode(){return this.mode}getAgentWiki(t){let e=`${t}:${this.mode}`;if(this.agentStores.has(e))return this.agentStores.get(e);let r=a(this.agentsDir,t,this.mode),i=new o(r,this.log);return this.agentStores.set(e,i),i}getBaseDir(){return this.baseDir}getSharedStore(){return this.sharedStore}listAgents(){let t=new Set,e=this.sharedStore.listEntries();for(let r of e)t.add(r.agentId);if(d(this.agentsDir))for(let r of c(this.agentsDir))!r.startsWith("_")&&!r.startsWith(".")&&t.add(r);return[...t].sort()}getAgentEntries(t){return this.sharedStore.listEntries({agentId:t})}getUnabsorbedEntries(t){let e=this.getAgentWiki(t),r=this.getAgentEntries(t),i=new Set,n=e.rebuildIndex();for(let s of n.articles)if(s.sources)for(let h of s.sources)i.add(h);return r.filter(s=>!i.has(s.id))}summary(){return this.listAgents().map(e=>{let r=this.getAgentEntries(e),n=this.getAgentWiki(e).rebuildIndex(),s=this.getUnabsorbedEntries(e);return{agentId:e,totalEntries:r.length,totalArticles:n.articles.length,unabsorbed:s.length,articles:n.articles}})}};export{g as a};
2
- //# sourceMappingURL=chunk-OLZVLA4T.js.map
1
+ import{a as o}from"./chunk-3RLYCNGP.js";import{resolve as a}from"path";import{existsSync as d,readdirSync as c,mkdirSync as l}from"fs";var g=class{baseDir;agentsDir;mode;sharedStore;agentStores=new Map;log;constructor(t=a(process.cwd(),".agentx/wiki"),e=console.error.bind(console,"[wiki-hub]"),r="graph"){this.baseDir=t,this.agentsDir=a(t,"agents"),this.mode=r,this.log=e,l(this.agentsDir,{recursive:!0}),this.sharedStore=new o(t,e)}getMode(){return this.mode}getAgentWiki(t){let e=`${t}:${this.mode}`;if(this.agentStores.has(e))return this.agentStores.get(e);let r=a(this.agentsDir,t,this.mode),i=new o(r,this.log);return this.agentStores.set(e,i),i}getBaseDir(){return this.baseDir}getSharedStore(){return this.sharedStore}listAgents(){let t=new Set,e=this.sharedStore.listEntries();for(let r of e)t.add(r.agentId);if(d(this.agentsDir))for(let r of c(this.agentsDir))!r.startsWith("_")&&!r.startsWith(".")&&t.add(r);return[...t].sort()}getAgentEntries(t){return this.sharedStore.listEntries({agentId:t})}getUnabsorbedEntries(t){let e=this.getAgentWiki(t),r=this.getAgentEntries(t),i=new Set,n=e.rebuildIndex();for(let s of n.articles)if(s.sources)for(let h of s.sources)i.add(h);return r.filter(s=>!i.has(s.id))}summary(){return this.listAgents().map(e=>{let r=this.getAgentEntries(e),n=this.getAgentWiki(e).rebuildIndex(),s=this.getUnabsorbedEntries(e);return{agentId:e,totalEntries:r.length,totalArticles:n.articles.length,unabsorbed:s.length,articles:n.articles}})}};export{g as a};
2
+ //# sourceMappingURL=chunk-XQMLRZHY.js.map
package/dist/cli.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{b as o}from"./chunk-JXF54PT7.js";import"./chunk-QIJLFPWE.js";var s=o(process.versions.node);s&&(console.error(s),process.exit(1));var{buildProgram:r}=await import("./program-UA4WZRTD.js"),{installCliSignalExit:i}=await import("./signal-exit-WL7G3EEZ.js");i();var e=await r();process.argv.slice(2).length===0?e.outputHelp():e.parse();
2
+ import{b as o}from"./chunk-JXF54PT7.js";import"./chunk-QIJLFPWE.js";var s=o(process.versions.node);s&&(console.error(s),process.exit(1));var{buildProgram:r}=await import("./program-PZO6XJYZ.js"),{installCliSignalExit:i}=await import("./signal-exit-WL7G3EEZ.js");i();var e=await r();process.argv.slice(2).length===0?e.outputHelp():e.parse();
3
3
  //# sourceMappingURL=cli.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f,g}from"./chunk-4HBRZGW3.js";import"./chunk-73TOQOLZ.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";export{b as fetchAgents,d as fetchCrons,c as fetchProcesses,e as killProcess,a as resolveConn,f as sendTask,g as streamTask};
2
- //# sourceMappingURL=client-GLZXM7T3.js.map
1
+ import{a,b,c,d,e,f,g}from"./chunk-JUJPQWLG.js";import"./chunk-M6NIPFRY.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";export{b as fetchAgents,d as fetchCrons,c as fetchProcesses,e as killProcess,a as resolveConn,f as sendTask,g as streamTask};
2
+ //# sourceMappingURL=client-WTC7P6PE.js.map
@@ -0,0 +1,2 @@
1
+ import{$ as e,X as a,Y as b,Z as c,_ as d,aa as f,ba as g,ca as h,da as i,ea as j,fa as k,ga as l,ha as m,ia as n,ka as o}from"./chunk-M6NIPFRY.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";o();export{a as INTEGRATION_KINDS,j as approvalsConfigSchema,d as callsSchema,c as cameraBotSchema,k as daemonConfigSchema,b as eventSubscriptionSchema,l as expandEnvVars,m as loadDaemonConfig,h as membersConfigSchema,g as peopleConfigSchema,f as personSchema,i as requestStatusConfigSchema,e as requestsConfigSchema,n as validateWorkspaces};
2
+ //# sourceMappingURL=config-WG62KB23.js.map
@@ -0,0 +1,2 @@
1
+ import{a,b,c,d,e}from"./chunk-JYFE6SQU.js";import"./chunk-M6NIPFRY.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";export{b as applyConfigMutation,a as findConfigPath,d as getAtPath,c as setAtPath,e as unsetAtPath};
2
+ //# sourceMappingURL=config-mutator-7REOEXW4.js.map
@@ -1,2 +1,2 @@
1
- import{b as a,c as b,d as c,e as d,f as e}from"./chunk-Y4KJCUQO.js";import"./chunk-S2GAEH2F.js";import"./chunk-JXF54PT7.js";import"./chunk-73TOQOLZ.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";export{e as daemonVoiceCheck,b as doctor,a as runDoctorChecks,c as runNotificationChecks,d as runReminderChecks};
2
- //# sourceMappingURL=doctor-JNHPILIA.js.map
1
+ import{b as a,c as b,d as c,e as d,f as e}from"./chunk-O5BBV4ZV.js";import"./chunk-S2GAEH2F.js";import"./chunk-JXF54PT7.js";import"./chunk-M6NIPFRY.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";export{e as daemonVoiceCheck,b as doctor,a as runDoctorChecks,c as runNotificationChecks,d as runReminderChecks};
2
+ //# sourceMappingURL=doctor-XDR22CFD.js.map
package/dist/index.d.ts CHANGED
@@ -1585,6 +1585,35 @@ declare const agentConfigSchema: z.ZodObject<{
1585
1585
  * e.g. benchmark agents never draw on the fleet's subscription quota.
1586
1586
  * An "api" agent with no key fails its task rather than falling back. */
1587
1587
  billing: z.ZodDefault<z.ZodEnum<["subscription", "api"]>>;
1588
+ /** Run GitHub coding tasks as Claude cloud sessions (`claude --cloud`)
1589
+ * instead of local runs (#622). Off by default. Needs
1590
+ * `channels.github.cloudSessions: true` too. Only a task from the GitHub
1591
+ * channel for an issue or pull request of a repository this node has a
1592
+ * checkout of (the project rule's `runbook` path, or the agent's
1593
+ * workspace) goes to the cloud; everything else runs locally. The result
1594
+ * is a pull request, not a reply. A launch that fails falls back to a
1595
+ * local run. See src/agents/cloud-sessions.ts. */
1596
+ cloudSessions: z.ZodDefault<z.ZodObject<{
1597
+ enabled: z.ZodDefault<z.ZodBoolean>;
1598
+ /** Launches per calendar day for this agent; 0 = no cap. */
1599
+ maxPerDay: z.ZodDefault<z.ZodNumber>;
1600
+ /** Hours a launched session counts as open: no local run starts for
1601
+ * its issue, and comments on the issue are forwarded to it. */
1602
+ openHours: z.ZodDefault<z.ZodNumber>;
1603
+ /** Seconds `claude --cloud` may take to print the session id before
1604
+ * the launch is given up and the task runs locally. */
1605
+ launchTimeoutSeconds: z.ZodDefault<z.ZodNumber>;
1606
+ }, "strip", z.ZodTypeAny, {
1607
+ enabled: boolean;
1608
+ maxPerDay: number;
1609
+ openHours: number;
1610
+ launchTimeoutSeconds: number;
1611
+ }, {
1612
+ enabled?: boolean | undefined;
1613
+ maxPerDay?: number | undefined;
1614
+ openHours?: number | undefined;
1615
+ launchTimeoutSeconds?: number | undefined;
1616
+ }>>;
1588
1617
  /** Improvement plan #3 — tool-use-required preset. When set,
1589
1618
  * AgentX inspects the stream-json events from each task and
1590
1619
  * fails the response with `tool_required_not_called: <name>`
@@ -1864,6 +1893,12 @@ declare const agentConfigSchema: z.ZodObject<{
1864
1893
  preSpawnTimeoutSec: number;
1865
1894
  permissionMode: string;
1866
1895
  billing: "api" | "subscription";
1896
+ cloudSessions: {
1897
+ enabled: boolean;
1898
+ maxPerDay: number;
1899
+ openHours: number;
1900
+ launchTimeoutSeconds: number;
1901
+ };
1867
1902
  toolUseRequired: string[];
1868
1903
  persistentProcess: boolean;
1869
1904
  queueMode: "drop" | "collect" | "followup";
@@ -1978,6 +2013,12 @@ declare const agentConfigSchema: z.ZodObject<{
1978
2013
  drainTimeoutSeconds?: number | undefined;
1979
2014
  permissionMode?: string | undefined;
1980
2015
  billing?: "api" | "subscription" | undefined;
2016
+ cloudSessions?: {
2017
+ enabled?: boolean | undefined;
2018
+ maxPerDay?: number | undefined;
2019
+ openHours?: number | undefined;
2020
+ launchTimeoutSeconds?: number | undefined;
2021
+ } | undefined;
1981
2022
  toolUseRequired?: string[] | undefined;
1982
2023
  gitlabAutoReply?: boolean | undefined;
1983
2024
  persistentProcess?: boolean | undefined;
@@ -2394,6 +2435,35 @@ declare const daemonConfigSchema: z.ZodObject<{
2394
2435
  * e.g. benchmark agents never draw on the fleet's subscription quota.
2395
2436
  * An "api" agent with no key fails its task rather than falling back. */
2396
2437
  billing: z.ZodDefault<z.ZodEnum<["subscription", "api"]>>;
2438
+ /** Run GitHub coding tasks as Claude cloud sessions (`claude --cloud`)
2439
+ * instead of local runs (#622). Off by default. Needs
2440
+ * `channels.github.cloudSessions: true` too. Only a task from the GitHub
2441
+ * channel for an issue or pull request of a repository this node has a
2442
+ * checkout of (the project rule's `runbook` path, or the agent's
2443
+ * workspace) goes to the cloud; everything else runs locally. The result
2444
+ * is a pull request, not a reply. A launch that fails falls back to a
2445
+ * local run. See src/agents/cloud-sessions.ts. */
2446
+ cloudSessions: z.ZodDefault<z.ZodObject<{
2447
+ enabled: z.ZodDefault<z.ZodBoolean>;
2448
+ /** Launches per calendar day for this agent; 0 = no cap. */
2449
+ maxPerDay: z.ZodDefault<z.ZodNumber>;
2450
+ /** Hours a launched session counts as open: no local run starts for
2451
+ * its issue, and comments on the issue are forwarded to it. */
2452
+ openHours: z.ZodDefault<z.ZodNumber>;
2453
+ /** Seconds `claude --cloud` may take to print the session id before
2454
+ * the launch is given up and the task runs locally. */
2455
+ launchTimeoutSeconds: z.ZodDefault<z.ZodNumber>;
2456
+ }, "strip", z.ZodTypeAny, {
2457
+ enabled: boolean;
2458
+ maxPerDay: number;
2459
+ openHours: number;
2460
+ launchTimeoutSeconds: number;
2461
+ }, {
2462
+ enabled?: boolean | undefined;
2463
+ maxPerDay?: number | undefined;
2464
+ openHours?: number | undefined;
2465
+ launchTimeoutSeconds?: number | undefined;
2466
+ }>>;
2397
2467
  /** Improvement plan #3 — tool-use-required preset. When set,
2398
2468
  * AgentX inspects the stream-json events from each task and
2399
2469
  * fails the response with `tool_required_not_called: <name>`
@@ -2673,6 +2743,12 @@ declare const daemonConfigSchema: z.ZodObject<{
2673
2743
  preSpawnTimeoutSec: number;
2674
2744
  permissionMode: string;
2675
2745
  billing: "api" | "subscription";
2746
+ cloudSessions: {
2747
+ enabled: boolean;
2748
+ maxPerDay: number;
2749
+ openHours: number;
2750
+ launchTimeoutSeconds: number;
2751
+ };
2676
2752
  toolUseRequired: string[];
2677
2753
  persistentProcess: boolean;
2678
2754
  queueMode: "drop" | "collect" | "followup";
@@ -2787,6 +2863,12 @@ declare const daemonConfigSchema: z.ZodObject<{
2787
2863
  drainTimeoutSeconds?: number | undefined;
2788
2864
  permissionMode?: string | undefined;
2789
2865
  billing?: "api" | "subscription" | undefined;
2866
+ cloudSessions?: {
2867
+ enabled?: boolean | undefined;
2868
+ maxPerDay?: number | undefined;
2869
+ openHours?: number | undefined;
2870
+ launchTimeoutSeconds?: number | undefined;
2871
+ } | undefined;
2790
2872
  toolUseRequired?: string[] | undefined;
2791
2873
  gitlabAutoReply?: boolean | undefined;
2792
2874
  persistentProcess?: boolean | undefined;
@@ -3139,6 +3221,10 @@ declare const daemonConfigSchema: z.ZodObject<{
3139
3221
  /** Legacy auto-reply — same semantics as gitlab.autoReplyLegacy.
3140
3222
  * Defaults true; set false once agent skills use channel.reply. */
3141
3223
  autoReplyLegacy: z.ZodDefault<z.ZodBoolean>;
3224
+ /** Let agents whose `cloudSessions.enabled` is on send this channel's
3225
+ * issue and pull request tasks to Claude cloud sessions (#622). Off by
3226
+ * default: both this and the agent setting must be on. */
3227
+ cloudSessions: z.ZodDefault<z.ZodBoolean>;
3142
3228
  /** GitHub PAT or env var (${GITHUB_TOKEN}) for posting comments back. */
3143
3229
  token: z.ZodOptional<z.ZodString>;
3144
3230
  /** Path to file containing the token (first line read at startup). */
@@ -3199,6 +3285,7 @@ declare const daemonConfigSchema: z.ZodObject<{
3199
3285
  debounceSeconds: z.ZodDefault<z.ZodNumber>;
3200
3286
  }, "strip", z.ZodTypeAny, {
3201
3287
  enabled: boolean;
3288
+ cloudSessions: boolean;
3202
3289
  routes: {
3203
3290
  agent: string;
3204
3291
  repo: string;
@@ -3224,6 +3311,7 @@ declare const daemonConfigSchema: z.ZodObject<{
3224
3311
  }, {
3225
3312
  enabled?: boolean | undefined;
3226
3313
  token?: string | undefined;
3314
+ cloudSessions?: boolean | undefined;
3227
3315
  routes?: {
3228
3316
  agent: string;
3229
3317
  repo: string;
@@ -3632,6 +3720,7 @@ declare const daemonConfigSchema: z.ZodObject<{
3632
3720
  };
3633
3721
  github: {
3634
3722
  enabled: boolean;
3723
+ cloudSessions: boolean;
3635
3724
  routes: {
3636
3725
  agent: string;
3637
3726
  repo: string;
@@ -3780,6 +3869,7 @@ declare const daemonConfigSchema: z.ZodObject<{
3780
3869
  github?: {
3781
3870
  enabled?: boolean | undefined;
3782
3871
  token?: string | undefined;
3872
+ cloudSessions?: boolean | undefined;
3783
3873
  routes?: {
3784
3874
  agent: string;
3785
3875
  repo: string;
@@ -4292,9 +4382,6 @@ declare const daemonConfigSchema: z.ZodObject<{
4292
4382
  rules: z.ZodDefault<z.ZodArray<z.ZodEffects<z.ZodObject<{
4293
4383
  id: z.ZodString;
4294
4384
  enabled: z.ZodDefault<z.ZodBoolean>;
4295
- /**
4296
- * Load .env file into process.env (simple, no dependency).
4297
- */
4298
4385
  chats: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
4299
4386
  senders: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
4300
4387
  agent: z.ZodString;
@@ -5169,6 +5256,19 @@ declare const daemonConfigSchema: z.ZodObject<{
5169
5256
  * keeps a cut answer over the 280 characters the Mac pill opens
5170
5257
  * at (AnswerView.isWorthShowing), so "on screen" stays true. */
5171
5258
  spokenMaxChars: z.ZodDefault<z.ZodNumber>;
5259
+ /** A transcript with no words (empty, or only bracketed markers such
5260
+ * as "[background noise]") gets a fixed reply from /ask and wakes no
5261
+ * agent. `markers` is what counts as a marker, without the brackets. */
5262
+ noiseFilter: z.ZodDefault<z.ZodObject<{
5263
+ enabled: z.ZodDefault<z.ZodBoolean>;
5264
+ markers: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
5265
+ }, "strip", z.ZodTypeAny, {
5266
+ enabled: boolean;
5267
+ markers: string[];
5268
+ }, {
5269
+ enabled?: boolean | undefined;
5270
+ markers?: string[] | undefined;
5271
+ }>>;
5172
5272
  /** The on-device engine behind "local" and every fallback:
5173
5273
  * mlx-whisper (Python, all languages) or Parakeet (Core ML, 25
5174
5274
  * European languages, no Arabic; 483 MB downloaded on first use into
@@ -5237,6 +5337,10 @@ declare const daemonConfigSchema: z.ZodObject<{
5237
5337
  stt: "auto" | "local" | "elevenlabs";
5238
5338
  allowUnmeasured: boolean;
5239
5339
  spokenMaxChars: number;
5340
+ noiseFilter: {
5341
+ enabled: boolean;
5342
+ markers: string[];
5343
+ };
5240
5344
  localStt: "mlx-whisper" | "parakeet";
5241
5345
  endOfTurn: "volume" | "vad";
5242
5346
  hotkeys: {
@@ -5265,6 +5369,10 @@ declare const daemonConfigSchema: z.ZodObject<{
5265
5369
  stt?: "auto" | "local" | "elevenlabs" | undefined;
5266
5370
  allowUnmeasured?: boolean | undefined;
5267
5371
  spokenMaxChars?: number | undefined;
5372
+ noiseFilter?: {
5373
+ enabled?: boolean | undefined;
5374
+ markers?: string[] | undefined;
5375
+ } | undefined;
5268
5376
  localStt?: "mlx-whisper" | "parakeet" | undefined;
5269
5377
  endOfTurn?: "volume" | "vad" | undefined;
5270
5378
  hotkeys?: {
@@ -6493,6 +6601,76 @@ declare const daemonConfigSchema: z.ZodObject<{
6493
6601
  * context. The promotion gate for that wants labelled production rows,
6494
6602
  * not a good afternoon on a fixture. Raise it to collect them. */
6495
6603
  continuityStateTurns: z.ZodDefault<z.ZodNumber>;
6604
+ /** How much a session is given when it starts, per channel (#615).
6605
+ * `full` is the classic start. `lean` starts Claude Code with only
6606
+ * the `agentx` MCP server (no user-level connectors), only the
6607
+ * project's settings (no global CLAUDE.md, user skills or plugins),
6608
+ * and asks for the landscape, chat history and cross-chat context
6609
+ * through MCP tools instead of pushing them into the prompt. A
6610
+ * channel missing here keeps the built-in default: github, a2a,
6611
+ * workflow and cron are lean; every other channel is full. Only
6612
+ * claude-code and codex-cli agents have a lean start; other tiers
6613
+ * are always full. See src/agents/session-profile.ts. */
6614
+ profileByChannel: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEnum<["full", "lean"]>>>;
6615
+ /** What a lean start keeps. */
6616
+ lean: z.ZodDefault<z.ZodObject<{
6617
+ /** MCP servers from the workspace's .mcp.json kept in a lean
6618
+ * session, by name. `agentx` is always added. */
6619
+ mcpServers: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6620
+ /** Claude Code setting sources a lean session reads. Without `user`,
6621
+ * the global CLAUDE.md, user skills, plugins and user-level MCP
6622
+ * connectors are not loaded. `project` is the workspace. */
6623
+ settingSources: z.ZodDefault<z.ZodArray<z.ZodEnum<["user", "project", "local"]>, "many">>;
6624
+ /** Replace the pushed landscape, chat history and cross-chat
6625
+ * context with one line naming the tools that fetch them. */
6626
+ contextOnDemand: z.ZodDefault<z.ZodBoolean>;
6627
+ }, "strip", z.ZodTypeAny, {
6628
+ mcpServers: string[];
6629
+ settingSources: ("user" | "local" | "project")[];
6630
+ contextOnDemand: boolean;
6631
+ }, {
6632
+ mcpServers?: string[] | undefined;
6633
+ settingSources?: ("user" | "local" | "project")[] | undefined;
6634
+ contextOnDemand?: boolean | undefined;
6635
+ }>>;
6636
+ /** ObservationPack (#621). A large tool result stays in the context
6637
+ * and is re-read on every later request. With this on, a Claude Code
6638
+ * PostToolUse hook saves a text result over `limitBytes` to
6639
+ * `.agentx/observations/<agent id>/` and shows the model its first and last
6640
+ * bytes plus the path of the saved original, which it can Read or
6641
+ * grep. Off by default. claude-code agents only. Turning it on, or
6642
+ * changing `tools`, takes a daemon restart (the hook is written into
6643
+ * each workspace's .claude/settings.json at start); turning it off
6644
+ * applies on save. See src/agents/observation-pack.ts. */
6645
+ observationPack: z.ZodDefault<z.ZodObject<{
6646
+ enabled: z.ZodDefault<z.ZodBoolean>;
6647
+ /** A text result larger than this many bytes is packed. */
6648
+ limitBytes: z.ZodDefault<z.ZodNumber>;
6649
+ /** Bytes of the start and of the end of the original the model sees. */
6650
+ headBytes: z.ZodDefault<z.ZodNumber>;
6651
+ tailBytes: z.ZodDefault<z.ZodNumber>;
6652
+ /** Tools the pack applies to. Each entry must match the whole tool
6653
+ * name and may be a regular expression. `Read` is left out by
6654
+ * default: an agent that sees only the two ends of a file it is
6655
+ * about to edit has to read it again in pages. */
6656
+ tools: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6657
+ /** Days a saved original is kept. 0 keeps every original. */
6658
+ retentionDays: z.ZodDefault<z.ZodNumber>;
6659
+ }, "strip", z.ZodTypeAny, {
6660
+ enabled: boolean;
6661
+ tools: string[];
6662
+ retentionDays: number;
6663
+ limitBytes: number;
6664
+ headBytes: number;
6665
+ tailBytes: number;
6666
+ }, {
6667
+ enabled?: boolean | undefined;
6668
+ tools?: string[] | undefined;
6669
+ retentionDays?: number | undefined;
6670
+ limitBytes?: number | undefined;
6671
+ headBytes?: number | undefined;
6672
+ tailBytes?: number | undefined;
6673
+ }>>;
6496
6674
  }, "strip", z.ZodTypeAny, {
6497
6675
  contextStrategy: "layered" | "planner";
6498
6676
  staleMinutes: number;
@@ -6500,6 +6678,20 @@ declare const daemonConfigSchema: z.ZodObject<{
6500
6678
  tierTwoThresholdTokens: number;
6501
6679
  tierTwoThresholdTokensByChannel: Record<string, number>;
6502
6680
  continuityStateTurns: number;
6681
+ lean: {
6682
+ mcpServers: string[];
6683
+ settingSources: ("user" | "local" | "project")[];
6684
+ contextOnDemand: boolean;
6685
+ };
6686
+ profileByChannel: Record<string, "full" | "lean">;
6687
+ observationPack: {
6688
+ enabled: boolean;
6689
+ tools: string[];
6690
+ retentionDays: number;
6691
+ limitBytes: number;
6692
+ headBytes: number;
6693
+ tailBytes: number;
6694
+ };
6503
6695
  maxClaudeCodeDispatchesPerHour?: number | undefined;
6504
6696
  maxClaudeCodeDispatchesPer5h?: number | undefined;
6505
6697
  }, {
@@ -6511,6 +6703,20 @@ declare const daemonConfigSchema: z.ZodObject<{
6511
6703
  maxClaudeCodeDispatchesPerHour?: number | undefined;
6512
6704
  maxClaudeCodeDispatchesPer5h?: number | undefined;
6513
6705
  continuityStateTurns?: number | undefined;
6706
+ lean?: {
6707
+ mcpServers?: string[] | undefined;
6708
+ settingSources?: ("user" | "local" | "project")[] | undefined;
6709
+ contextOnDemand?: boolean | undefined;
6710
+ } | undefined;
6711
+ profileByChannel?: Record<string, "full" | "lean"> | undefined;
6712
+ observationPack?: {
6713
+ enabled?: boolean | undefined;
6714
+ tools?: string[] | undefined;
6715
+ retentionDays?: number | undefined;
6716
+ limitBytes?: number | undefined;
6717
+ headBytes?: number | undefined;
6718
+ tailBytes?: number | undefined;
6719
+ } | undefined;
6514
6720
  }>>;
6515
6721
  /** Move B — JS/TS plugins. Each entry is an installed npm package name
6516
6722
  * (e.g. `agentx-plugin-mattermost` or `@acme/plugin-mattermost`); the
@@ -6573,6 +6779,12 @@ declare const daemonConfigSchema: z.ZodObject<{
6573
6779
  preSpawnTimeoutSec: number;
6574
6780
  permissionMode: string;
6575
6781
  billing: "api" | "subscription";
6782
+ cloudSessions: {
6783
+ enabled: boolean;
6784
+ maxPerDay: number;
6785
+ openHours: number;
6786
+ launchTimeoutSeconds: number;
6787
+ };
6576
6788
  toolUseRequired: string[];
6577
6789
  persistentProcess: boolean;
6578
6790
  queueMode: "drop" | "collect" | "followup";
@@ -6689,6 +6901,10 @@ declare const daemonConfigSchema: z.ZodObject<{
6689
6901
  stt: "auto" | "local" | "elevenlabs";
6690
6902
  allowUnmeasured: boolean;
6691
6903
  spokenMaxChars: number;
6904
+ noiseFilter: {
6905
+ enabled: boolean;
6906
+ markers: string[];
6907
+ };
6692
6908
  localStt: "mlx-whisper" | "parakeet";
6693
6909
  endOfTurn: "volume" | "vad";
6694
6910
  hotkeys: {
@@ -6802,6 +7018,7 @@ declare const daemonConfigSchema: z.ZodObject<{
6802
7018
  };
6803
7019
  github: {
6804
7020
  enabled: boolean;
7021
+ cloudSessions: boolean;
6805
7022
  routes: {
6806
7023
  agent: string;
6807
7024
  repo: string;
@@ -7240,6 +7457,20 @@ declare const daemonConfigSchema: z.ZodObject<{
7240
7457
  tierTwoThresholdTokens: number;
7241
7458
  tierTwoThresholdTokensByChannel: Record<string, number>;
7242
7459
  continuityStateTurns: number;
7460
+ lean: {
7461
+ mcpServers: string[];
7462
+ settingSources: ("user" | "local" | "project")[];
7463
+ contextOnDemand: boolean;
7464
+ };
7465
+ profileByChannel: Record<string, "full" | "lean">;
7466
+ observationPack: {
7467
+ enabled: boolean;
7468
+ tools: string[];
7469
+ retentionDays: number;
7470
+ limitBytes: number;
7471
+ headBytes: number;
7472
+ tailBytes: number;
7473
+ };
7243
7474
  maxClaudeCodeDispatchesPerHour?: number | undefined;
7244
7475
  maxClaudeCodeDispatchesPer5h?: number | undefined;
7245
7476
  };
@@ -7376,6 +7607,12 @@ declare const daemonConfigSchema: z.ZodObject<{
7376
7607
  drainTimeoutSeconds?: number | undefined;
7377
7608
  permissionMode?: string | undefined;
7378
7609
  billing?: "api" | "subscription" | undefined;
7610
+ cloudSessions?: {
7611
+ enabled?: boolean | undefined;
7612
+ maxPerDay?: number | undefined;
7613
+ openHours?: number | undefined;
7614
+ launchTimeoutSeconds?: number | undefined;
7615
+ } | undefined;
7379
7616
  toolUseRequired?: string[] | undefined;
7380
7617
  gitlabAutoReply?: boolean | undefined;
7381
7618
  persistentProcess?: boolean | undefined;
@@ -7466,6 +7703,10 @@ declare const daemonConfigSchema: z.ZodObject<{
7466
7703
  stt?: "auto" | "local" | "elevenlabs" | undefined;
7467
7704
  allowUnmeasured?: boolean | undefined;
7468
7705
  spokenMaxChars?: number | undefined;
7706
+ noiseFilter?: {
7707
+ enabled?: boolean | undefined;
7708
+ markers?: string[] | undefined;
7709
+ } | undefined;
7469
7710
  localStt?: "mlx-whisper" | "parakeet" | undefined;
7470
7711
  endOfTurn?: "volume" | "vad" | undefined;
7471
7712
  hotkeys?: {
@@ -7646,6 +7887,7 @@ declare const daemonConfigSchema: z.ZodObject<{
7646
7887
  github?: {
7647
7888
  enabled?: boolean | undefined;
7648
7889
  token?: string | undefined;
7890
+ cloudSessions?: boolean | undefined;
7649
7891
  routes?: {
7650
7892
  agent: string;
7651
7893
  repo: string;
@@ -8079,6 +8321,20 @@ declare const daemonConfigSchema: z.ZodObject<{
8079
8321
  maxClaudeCodeDispatchesPerHour?: number | undefined;
8080
8322
  maxClaudeCodeDispatchesPer5h?: number | undefined;
8081
8323
  continuityStateTurns?: number | undefined;
8324
+ lean?: {
8325
+ mcpServers?: string[] | undefined;
8326
+ settingSources?: ("user" | "local" | "project")[] | undefined;
8327
+ contextOnDemand?: boolean | undefined;
8328
+ } | undefined;
8329
+ profileByChannel?: Record<string, "full" | "lean"> | undefined;
8330
+ observationPack?: {
8331
+ enabled?: boolean | undefined;
8332
+ tools?: string[] | undefined;
8333
+ retentionDays?: number | undefined;
8334
+ limitBytes?: number | undefined;
8335
+ headBytes?: number | undefined;
8336
+ tailBytes?: number | undefined;
8337
+ } | undefined;
8082
8338
  } | undefined;
8083
8339
  plugins?: string[] | undefined;
8084
8340
  processPool?: {
@@ -9556,6 +9812,11 @@ interface AgentTask {
9556
9812
  * Seeds an empty AgentX session the same way a channel adapter's
9557
9813
  * seedHistory does, so a new or rotated session starts with it. */
9558
9814
  seedHistory?: SeededMessage[];
9815
+ /** Extra flags for the `claude` CLI, set by the registry from the
9816
+ * channel's session profile (lean: strict MCP config, setting sources;
9817
+ * see agents/session-profile.ts). Spawn-per-task and persistent
9818
+ * processes carry them alike. Ignored by other tiers. */
9819
+ claudeArgs?: string[];
9559
9820
  /** Routine autonomy level (cron job / workflow agent step). `report` and
9560
9821
  * `propose` are enforced for THIS task only via a per-spawn guard hook
9561
9822
  * (see guard/autonomy-enforce.ts); unset or `act` = the agent's normal
@@ -9669,6 +9930,16 @@ interface AgentResponse {
9669
9930
  * the task instead of a spawned provider (attach mode). Claude Code
9670
9931
  * session id of the terminal that wrote the reply. */
9671
9932
  viaAttachedSession?: string;
9933
+ /** Set when the task went to a Claude cloud session instead of a local
9934
+ * run (#622): the session's id and claude.ai/code URL. `followUp` marks
9935
+ * a comment forwarded to a session that was already open. The result of
9936
+ * the session is a pull request, so `content` is only the notice posted
9937
+ * on the issue. */
9938
+ cloudSession?: {
9939
+ id: string;
9940
+ url: string;
9941
+ followUp?: boolean;
9942
+ };
9672
9943
  /** Set on tasks that ran under a restricted autonomy level. */
9673
9944
  autonomy?: AutonomyLevel;
9674
9945
  /** Tool calls the autonomy guard blocked during this task — what the
@@ -11413,6 +11684,9 @@ declare class AgentRegistry {
11413
11684
  private taskAborts;
11414
11685
  /** Runs a daemon shutdown stopped, with the reason each one reports. */
11415
11686
  private interruptedRuns;
11687
+ /** Claude cloud sessions this node launched (#622), by issue. Created on
11688
+ * first use so a fleet with the setting off never touches the file. */
11689
+ private cloudSessions?;
11416
11690
  /** The context each running task was started with, by RunningTask id.
11417
11691
  * Kept apart from RunningTask because /agents serialises that, and a
11418
11692
  * context can carry a whole conversation history. Read by A2A
@@ -11536,6 +11810,16 @@ declare class AgentRegistry {
11536
11810
  * Get the primary channel handle for an agent (e.g. "@my_bot" on telegram).
11537
11811
  */
11538
11812
  private getChannelHandle;
11813
+ /** The store of cloud sessions this node launched (#622). */
11814
+ private cloudSessionStore;
11815
+ /** Where this task runs (#622): a Claude cloud session, a follow-up to one
11816
+ * already open for its issue, or locally. Decided before the dispatch
11817
+ * gates, which only guard a local spawn. Cheap when the setting is off. */
11818
+ private planCloudSession;
11819
+ /** Launches the cloud session (or forwards to the open one) and records
11820
+ * it on the trace. Null means: run locally, the reason is logged and on
11821
+ * the trace. */
11822
+ private runCloudSession;
11539
11823
  /**
11540
11824
  * Execute a task on an agent. Respects maxConcurrent limit.
11541
11825
  *
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as St,b as kt,c as vt,d as xt,e as $t,f as Ct,g as Pt,h as bt,ha as Tt,ia as Mt}from"./chunk-5NXB5YHK.js";import"./chunk-WT7MLOMA.js";import"./chunk-GTJIKXDB.js";import"./chunk-D6BN5AIP.js";import"./chunk-DG5I6PPM.js";import"./chunk-ZVP6GB4G.js";import"./chunk-S2GAEH2F.js";import"./chunk-VZLIBDLH.js";import"./chunk-EKJG63EJ.js";import"./chunk-ZLLJQICH.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-ACFQBLPX.js";import"./chunk-LQE73AZR.js";import"./chunk-2D3RYIDU.js";import"./chunk-3Z5P2CWS.js";import"./chunk-E5OV6RTG.js";import"./chunk-PPUN7YHA.js";import{Z as yt,m as lt,n as ct,o as dt,p as mt,q as pt}from"./chunk-5XRD5DDP.js";import"./chunk-QDIEP4NK.js";import"./chunk-GLQLCBJS.js";import"./chunk-DP7RTNDM.js";import{a as L}from"./chunk-C245D4BZ.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-27IFUCJ6.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-Y4CYQV7G.js";import"./chunk-LLNPKE7H.js";import"./chunk-SHEUCITK.js";import"./chunk-RQ4J2WHD.js";import"./chunk-SZDACK6O.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import{s as ut}from"./chunk-LTS4A7AP.js";import"./chunk-WCSVPH5M.js";import"./chunk-VWTBHLMX.js";import"./chunk-OLZVLA4T.js";import{a as ht}from"./chunk-UVE624RW.js";import"./chunk-KA2UIZXG.js";import"./chunk-GQ76J72O.js";import"./chunk-ILEC3IAV.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-PGW64HAT.js";import"./chunk-MYVHVJWZ.js";import"./chunk-DWADWDMU.js";import"./chunk-23A5K5UW.js";import"./chunk-QD6IICK7.js";import"./chunk-CECHWYJ2.js";import"./chunk-MORQGMXG.js";import{f as gt,g as ft}from"./chunk-GWZMRGQO.js";import"./chunk-WPNRDEHW.js";import"./chunk-2GIDVZ4H.js";import{j as it,k as rt,l as at}from"./chunk-DTO22ALU.js";import"./chunk-72SZI2UW.js";import"./chunk-FX3D7YON.js";import"./chunk-FCPTN6NF.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-5MUJZODV.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{b as Fe,c as Le,d as A,e as De}from"./chunk-JHCI6XCJ.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{ca as tt,ea as st,fa as ot,ha as nt}from"./chunk-73TOQOLZ.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
1
+ import{a as St,b as kt,c as vt,d as xt,e as $t,f as Ct,g as Pt,h as bt,ia as Tt,ja as Mt}from"./chunk-N72AJ2LS.js";import"./chunk-S4RQ6Q2B.js";import"./chunk-OTCF46CF.js";import"./chunk-S2GAEH2F.js";import"./chunk-GTJIKXDB.js";import"./chunk-DG5I6PPM.js";import"./chunk-ZVP6GB4G.js";import"./chunk-PPUN7YHA.js";import"./chunk-VZLIBDLH.js";import"./chunk-EKJG63EJ.js";import"./chunk-4YBFKN3B.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-ACFQBLPX.js";import"./chunk-LQE73AZR.js";import"./chunk-2D3RYIDU.js";import"./chunk-3Z5P2CWS.js";import"./chunk-E5OV6RTG.js";import{aa as yt,m as lt,n as ct,o as dt,p as mt,q as pt}from"./chunk-UIDHTIPG.js";import"./chunk-UEOG3H25.js";import"./chunk-GLQLCBJS.js";import"./chunk-DP7RTNDM.js";import{a as L}from"./chunk-C245D4BZ.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-H5ZNKPXN.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-LLNPKE7H.js";import"./chunk-SHEUCITK.js";import"./chunk-Y4CYQV7G.js";import"./chunk-55MUAKXA.js";import"./chunk-GV7S5BAX.js";import"./chunk-SZDACK6O.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import{s as ut}from"./chunk-PEDNM2FA.js";import"./chunk-JYFE6SQU.js";import"./chunk-VWTBHLMX.js";import"./chunk-XQMLRZHY.js";import{a as ht}from"./chunk-3RLYCNGP.js";import"./chunk-36AXN6ZB.js";import"./chunk-KA2UIZXG.js";import"./chunk-GQ76J72O.js";import"./chunk-ILEC3IAV.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-GSX4NK2N.js";import"./chunk-FQGEDMG6.js";import"./chunk-MYVHVJWZ.js";import"./chunk-UDJAODAB.js";import"./chunk-23A5K5UW.js";import"./chunk-QD6IICK7.js";import"./chunk-CECHWYJ2.js";import"./chunk-UOOFNFEO.js";import{f as gt,g as ft}from"./chunk-NL6JSS4E.js";import"./chunk-WPNRDEHW.js";import"./chunk-2GIDVZ4H.js";import{j as it,k as rt,l as at}from"./chunk-CXCXMOTB.js";import"./chunk-72SZI2UW.js";import"./chunk-FX3D7YON.js";import"./chunk-FCPTN6NF.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-5MUJZODV.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{b as Fe,c as Le,d as A,e as De}from"./chunk-JHCI6XCJ.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{fa as tt,ha as st,ia as ot,ka as nt}from"./chunk-M6NIPFRY.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
2
2
  `)}
3
3
 
4
4
  ${t}`}async function It(o){let{loadLocalSkills:e}=await import("./loader-YFVSSYSL.js");return e(o)}async function Ot(o,e,t,s,i){let a=[{role:"system",content:`You are a skill author for the Agent Skills ecosystem (skills.sh).