aggroot 1.4.5 → 1.4.6
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.
- package/dist/index.cjs +3 -3
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -44243,7 +44243,7 @@ ${l}`))}showConfig(){let t=this._deps.cliService.currentAgentName??"\u672A\u9009
|
|
|
44243
44243
|
\u672A\u627E\u5230\u5339\u914D\u7684\u8BB0\u5FC6`));else{let y=`\u{1F50D} \u641C\u7D22 "${f}"
|
|
44244
44244
|
|
|
44245
44245
|
`;for(let T of _)y+=`- **${T.name}** (${T.type}) \u2014 ${T.description}
|
|
44246
|
-
`;this._deps.output(oa(y))}break}default:this._deps.output(oa("\u274C \u672A\u77E5\u5B50\u547D\u4EE4\n\n\u53EF\u7528: `/memory list` | `/memory add <type> <name> | <\u5185\u5BB9>` | `/memory delete <\u540D\u79F0>` | `/memory search <\u5173\u952E\u8BCD>`"))}}showHistory(){let t=[];t.push(""),t.push(Ht.bold.white("\u8F93\u5165\u5386\u53F2:")),t.push(Ht.gray("\u2500".repeat(40)));let r=this._deps.historyManager.getHistory().slice(-10);for(let l=0;l<r.length;l++)t.push(Ht.dim(` ${l+1}. `)+r[l]);t.push(Ht.gray("\u2500".repeat(40))),t.push(""),this._deps.outputBatch(t)}async handleUpgrade(t){let r=this._deps.upgradeExecutor;if(t==="check"){this._deps.output(oa("\u{1F50D} \u6B63\u5728\u68C0\u67E5\u66F4\u65B0..."));let _=await r.checkForUpdate();if(!_){this._deps.output(oa("\u274C \u65E0\u6CD5\u83B7\u53D6\u7248\u672C\u4FE1\u606F\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5"));return}_.hasUpdate?this._deps.output(oa(`\u{1F504} \u53D1\u73B0\u65B0\u7248\u672C
|
|
44246
|
+
`;this._deps.output(oa(y))}break}default:this._deps.output(oa("\u274C \u672A\u77E5\u5B50\u547D\u4EE4\n\n\u53EF\u7528: `/memory list` | `/memory add <type> <name> | <\u5185\u5BB9>` | `/memory delete <\u540D\u79F0>` | `/memory search <\u5173\u952E\u8BCD>`"))}}showHistory(){let t=[];t.push(""),t.push(Ht.bold.white("\u8F93\u5165\u5386\u53F2:")),t.push(Ht.gray("\u2500".repeat(40)));let r=this._deps.historyManager.getHistory().slice(-10);for(let l=0;l<r.length;l++)t.push(Ht.dim(` ${l+1}. `)+r[l]);t.push(Ht.gray("\u2500".repeat(40))),t.push(""),this._deps.outputBatch(t)}async handleUpgrade(t){let r=this._deps.upgradeExecutor;if(t==="check"){this._deps.output(oa("\u{1F50D} \u6B63\u5728\u68C0\u67E5\u66F4\u65B0..."));let _=await r.checkForUpdate({force:!0});if(!_){this._deps.output(oa("\u274C \u65E0\u6CD5\u83B7\u53D6\u7248\u672C\u4FE1\u606F\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5"));return}_.hasUpdate?this._deps.output(oa(`\u{1F504} \u53D1\u73B0\u65B0\u7248\u672C
|
|
44247
44247
|
|
|
44248
44248
|
- **\u5F53\u524D\u7248\u672C**: ${_.currentVersion}
|
|
44249
44249
|
- **\u6700\u65B0\u7248\u672C**: ${_.latestVersion}
|
|
@@ -44254,7 +44254,7 @@ ${l}`))}showConfig(){let t=this._deps.cliService.currentAgentName??"\u672A\u9009
|
|
|
44254
44254
|
|
|
44255
44255
|
\u8BF7\u786E\u4FDD npm \u5DF2\u5B89\u88C5\u5E76\u5728 PATH \u4E2D`));return}if(!l.isNpmGlobalInstall){this._deps.output(oa(`\u274C \u5F53\u524D\u975E npm \u5168\u5C40\u5B89\u88C5\uFF0C\u4E0D\u652F\u6301\u81EA\u52A8\u5347\u7EA7
|
|
44256
44256
|
|
|
44257
|
-
\u8BF7\u901A\u8FC7\u6E90\u7801\u65B9\u5F0F\u624B\u52A8\u66F4\u65B0`));return}this._deps.output(oa("\u{1F50D} \u6B63\u5728\u68C0\u67E5\u66F4\u65B0..."));let u=await r.checkForUpdate();if(!u){this._deps.output(oa("\u274C \u65E0\u6CD5\u83B7\u53D6\u7248\u672C\u4FE1\u606F\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5"));return}if(!u.hasUpdate){this._deps.output(oa(`\u2705 \u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\u672C (**${vv}**)`));return}this._deps.output(oa(`\u{1F504} \u53D1\u73B0\u65B0\u7248\u672C **${u.latestVersion}** (\u5F53\u524D: ${vv})
|
|
44257
|
+
\u8BF7\u901A\u8FC7\u6E90\u7801\u65B9\u5F0F\u624B\u52A8\u66F4\u65B0`));return}this._deps.output(oa("\u{1F50D} \u6B63\u5728\u68C0\u67E5\u66F4\u65B0..."));let u=await r.checkForUpdate({force:!0});if(!u){this._deps.output(oa("\u274C \u65E0\u6CD5\u83B7\u53D6\u7248\u672C\u4FE1\u606F\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5"));return}if(!u.hasUpdate){this._deps.output(oa(`\u2705 \u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\u672C (**${vv}**)`));return}this._deps.output(oa(`\u{1F504} \u53D1\u73B0\u65B0\u7248\u672C **${u.latestVersion}** (\u5F53\u524D: ${vv})
|
|
44258
44258
|
|
|
44259
44259
|
\u23F3 \u6B63\u5728\u5347\u7EA7...`));let f=await r.upgrade(void 0,l,u);f.success?this._deps.output(oa(`\u2705 \u5347\u7EA7\u6210\u529F!
|
|
44260
44260
|
|
|
@@ -44319,7 +44319,7 @@ ${l.error??"\u672A\u77E5\u9519\u8BEF"}`))}reset(){this._deps.cliService.resetAge
|
|
|
44319
44319
|
`)}catch{}let l=this.menuResolve,u=this.items[this.selectedIndex];if(this.menuMode==="navigation"){if(r==="\x1B[A")return this.selectedIndex=(this.selectedIndex-1+this.items.length)%this.items.length,this.render(),!0;if(r==="\x1B[B")return this.selectedIndex=(this.selectedIndex+1)%this.items.length,this.render(),!0;if(r==="\x1B[C"||r==="\x1BOC")return u?.isDirectory&&(this.cleanup(),l({action:"enter_dir",selected:u.value})),!0;if(r==="\x1B[D"||r==="\x1BOD")return this.cleanup(),l({action:"go_back",selected:""}),!0;if(r==="\r"||r===`
|
|
44320
44320
|
`||r.charCodeAt(0)===13||r.charCodeAt(0)===10)return u&&(this.cleanup(),l({action:"select",selected:u.value})),!0;if(r==="\x1B"||r.charCodeAt(0)===27)return this.cleanup(),l(null),!0;if(r.charCodeAt(0)===3)return this.cleanup(),process.emit("SIGINT"),l(null),!0;if(r.charCodeAt(0)===127||r.charCodeAt(0)===8)return this.cleanup(),l(null),!0}else{if(r==="\x1B[A")return this.selectedIndex=this.findNextSelectable(this.selectedIndex,-1),this.render(),!0;if(r==="\x1B[B")return this.selectedIndex=this.findNextSelectable(this.selectedIndex,1),this.render(),!0;if(r==="\r"||r===`
|
|
44321
44321
|
`||r.charCodeAt(0)===13||r.charCodeAt(0)===10){let f=this.items[this.selectedIndex];return!f||!this.isSelectable(this.selectedIndex)?(this.selectedIndex=this.findNextSelectable(this.selectedIndex,1),this.render(),!0):(this.cleanup(),l(f?{selected:f.value,prefix:this.prefix}:null),!0)}if(r==="\x1B"||r.charCodeAt(0)===27)return this.isFiltering?(this.filterText="",this.isFiltering=!1,this.applyFilter(),this.render(),!0):(this.cleanup(),l(null),!0);if(r.charCodeAt(0)===3)return this.cleanup(),process.emit("SIGINT"),l(null),!0;if(r.charCodeAt(0)===127||r.charCodeAt(0)===8)return this.isFiltering&&this.filterText.length>0?(this.filterText=this.filterText.slice(0,-1),this.filterText.length===0&&(this.isFiltering=!1),this.applyFilter(),this.render(),!0):(this.cleanup(),l(null),!0);if(r.length===1){let f=r.charCodeAt(0);if(f>=32&&f<=126)return this.filterText+=r.toLowerCase(),this.isFiltering=!0,this.applyFilter(),this.render(),!0}}return!1}insertLinesForMenu(){let t=process.stdout.rows||24,l=Math.min(this.items.length,15)+1,u=this.menuHeader?1:0,f=l+u+1,_=0;this.hasModelOutput?(this.lastPushedLines=0,this.hasModelOutput=!1,_=f):this.lastPushedLines>=f?_=0:_=f-this.lastPushedLines,this.lastPushedLines+=_;let y=process.stdout.columns||80,T=this.getStatusBar?this.getStatusBar():"",I=this.stripAnsi(T),O=2+Math.max(1,Math.ceil([...I].length/y))+1,L="";for(let J=0;J<O;J++){let V=t-J;V>0&&(L+=`\x1B[${V};1H\x1B[2K`)}if(this.stdout.write(L),_>0){this.stdout.write(`\x1B[${t-2};1H`);let J=`
|
|
44322
|
-
`.repeat(_);this.stdout.write(J)}this.savedCursorRow=Math.max(1,t-2-l-u)}applyFilter(){if(!this.filterText)this.items=[...this.allItems];else{let t=this.allItems.filter(r=>r.selectable===!1?!0:r.name.toLowerCase().includes(this.filterText)||(r.description?.toLowerCase().includes(this.filterText)??!1));this.items=t.filter((r,l)=>{if(r.selectable===!1){let u=t[l+1];return u&&u.selectable!==!1}return!0})}this.selectedIndex=this.isSelectable(0)?0:this.findNextSelectable(0,1)}render(){let t=Math.min(this.items.length,15),r=Math.max(0,Math.min(this.selectedIndex-3,this.items.length-t));this._visibleStart=r;let l=Math.min(this.items.length,r+t),u=[];this.menuHeader&&u.push(Ht.yellow.bold(this.menuHeader)),this.isFiltering&&u.push(Ht.yellow(` \u641C\u7D22: ${this.filterText}_`));for(let L=r;L<l;L++){let J=this.items[L],V=L===this.selectedIndex,K=V?"\u25B6":" ",ye=this.stripAnsi(J.name);if(J.selectable===!1){u.push(Ht.gray.dim(` ${ye}`));continue}let he=V?Ht.cyan.bold(ye):Ht.gray(ye);if(J.description){let Ae=V?Ht.cyan.dim(` \u2014 ${J.description}`):Ht.gray.dim(` \u2014 ${J.description}`);he+=Ae}u.push(` ${K} ${he}`)}let f=this.prefix==="@",_=this.isFiltering?f?"\u8F93\u5165\u7B5B\u9009 \u2191\u2193 \u2190\u2192 Enter Esc":"\u8F93\u5165\u7B5B\u9009 \u2191\u2193 Enter Esc":f?"\u2191\u2193 \u2190\u2192 Enter Esc":"\u2191\u2193 Enter Esc";u.push(Ht.gray(` ${_}`));let y="";y+="\x1B[?25l";let T=process.stdout.rows||24;this.menuStartRow=Math.max(1,this.savedCursorRow);let I=this.menuLines;for(let L=0;L<I;L++){let J=this.menuStartRow+L;J>0&&(y+=`\x1B[${J};1H`,y+="\x1B[2K")}let P=process.stdout.columns||80;for(let L=0;L<u.length;L++){let J=this.menuStartRow+L;y+=`\x1B[${J};1H`,y+="\x1B[2K",y+=this.truncateToWidth(u[L],P)}if(this.menuLines=Math.max(this.menuLines,u.length),this.getStatusBar){let L=this.menuStartRow+this.menuLines;for(let J=L;J<T;J++)J>0&&(y+=`\x1B[${J};1H`,y+="\x1B[2K");y+=`\x1B[${T};1H`,y+="\x1B[2K",y+=this.truncateToWidth(this.getStatusBar(),P)}let O=this.selectedIndex-this._visibleStart;if(O>=0&&O<u.length){let L=this.menuStartRow+(this.menuHeader?1:0)+O;y+=`\x1B[${L};1H`}y+="\x1B[?25h",this.stdout.write(y)}stripAnsi(t){return t.replace(/\x1b\[[0-9;]*m/g,"")}truncateToWidth(t,r){let l=t.split(/(\x1b\[[0-9;]*m)/),u=0,f="";for(let _ of l)if(_.startsWith("\x1B["))f+=_;else for(let y of _){let T=zk(y);if(u+T>r)return f;u+=T,f+=y}return f}cleanup(){this.isActive=!1,this.menuHeader="",this.menuResolve=null,this.filterText="",this.isFiltering=!1,this.stdout.write("\x1B[?25l");let t=this.menuStartRow>0?this.menuStartRow:this.savedCursorRow,r=process.stdout.rows||24;for(let l=t;l<=r;l++)this.stdout.write(`\x1B[${l};1H\x1B[2K`);this.stdout.write("\x1B[?25h"),this.menuLines=0,this.dispatcher?this.dispatcher.unregister(this.menuContextName):this.dataHandler&&(this.stdin.removeListener("data",this.dataHandler),this.dataHandler=null)}get active(){return this.isActive}};ne();var Wve=class{contexts=[];register(t){this.contexts.push(t),this.contexts.sort((r,l)=>l.priority-r.priority)}unregister(t){this.contexts=this.contexts.filter(r=>r.name!==t)}dispatch(t){for(let r of this.contexts)if(r.isActive()&&r.handle(t))return!0;return!1}getActiveContexts(){return this.contexts.filter(t=>t.isActive()).map(t=>t.name)}};ne();var Bve=class{getCommandRegistry;getAgents;suggestion=null;constructor(t,r){this.getCommandRegistry=t,this.getAgents=r}updateSuggestions(t,r){if(this.suggestion=null,!t||t.length===0)return;let l=[...t];if(r===l.length){if(t.startsWith("/")&&t.length>1&&!t.includes(" ")){let u=this.getCommandRegistry();if(u){let f=u.getCommands(),_=t.toLowerCase(),y=f.find(T=>T.name.toLowerCase().startsWith(_)&&T.name.toLowerCase()!==_);if(y){let T=y.name.slice(t.length);this.suggestion={text:T,fullReplacement:y.name,source:"command"}}}return}if(t.startsWith("#")&&t.length>1&&!t.includes(" ")){let u=this.getAgents(),f=t.toLowerCase(),_=u.find(y=>`#${y.toLowerCase()}`.startsWith(f)&&`#${y.toLowerCase()}`!==f);if(_){let y=`#${_}`,T=y.slice(t.length);this.suggestion={text:T,fullReplacement:y,source:"agent"}}return}}}getSuggestion(){return this.suggestion}clear(){this.suggestion=null}accept(){if(!this.suggestion)return null;let t=this.suggestion.fullReplacement;return this.suggestion=null,t}};cB();var oYe=require("node:path"),q5t=require("node:fs");ne();var zve=require("node:fs"),e$e=require("node:path"),t$e=require("node:fs"),Gve=class{filePath;heartbeatTimer=null;constructor(t){this.filePath=(0,e$e.join)(t,"instances.json")}async register(t){let l=(await this.loadAll()).filter(u=>u.pid!==t.pid);l.push(t),await this.saveAll(l)}async unregister(t){let l=(await this.loadAll()).filter(u=>u.id!==t);await this.saveAll(l)}async updateHeartbeat(t){let r=await this.loadAll(),l=r.find(u=>u.id===t);l&&(l.lastHeartbeat=Date.now(),await this.saveAll(r))}startHeartbeat(t,r=3e4){this.stopHeartbeat(),this.heartbeatTimer=setInterval(async()=>{try{await this.updateHeartbeat(t)}catch{}},r)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}async listInstances(){return this.loadAll()}async listResumable(){return(await this.loadAll()).filter(r=>r.sessionId).sort((r,l)=>l.lastHeartbeat-r.lastHeartbeat)}isProcessAlive(t){try{return process.kill(t,0),!0}catch{return!1}}async cleanup(t=10080*60*1e3){let r=await this.loadAll(),l=Date.now(),u=r.filter(_=>this.isProcessAlive(_.pid)?!0:l-_.lastHeartbeat<t),f=r.length-u.length;return f>0&&await this.saveAll(u),f}async loadAll(){if(!(0,t$e.existsSync)(this.filePath))return[];try{let t=await zve.promises.readFile(this.filePath,"utf-8");return JSON.parse(t).instances??[]}catch{return[]}}async saveAll(t){let r=(0,e$e.join)(this.filePath,"..");(0,t$e.existsSync)(r)||await zve.promises.mkdir(r,{recursive:!0}),await zve.promises.writeFile(this.filePath,JSON.stringify({version:1,instances:t},null,2),"utf-8")}};ne();var kF=bs(require("node:path"),1),D2t=bs(require("node:crypto"),1),Ev=require("node:fs");zd();var F4n=Ma("file-history-store"),jve=class{_baseDir;constructor(t){this._baseDir=t}async recordChange(t,r,l,u="unknown"){let f=this.getSessionDir(t);this.ensureDir(f);let _=this.hashContent(l),y=await this.loadIndex(t),T=y.filter(V=>V.filePath===r),P=(T.length>0?Math.max(...T.map(V=>V.version)):0)+1,O=`${_}@v${P}`,L=kF.join(f,O);(0,Ev.writeFileSync)(L,l,"utf-8");let J={version:P,filePath:r,contentHash:_,timestamp:Date.now(),source:u,sessionId:t};return y.push(J),await this.saveIndex(t,y),F4n.debug(`Recorded file change: ${r} v${P} (source: ${u})`),P}async undo(t,r){let l=await this.loadIndex(t);if(l.length===0)return[];let u=[];if(r){let f=await this.undoFile(t,r,l);f&&u.push(f)}else{let _=Math.max(...l.map(I=>I.timestamp))-2e3,y=l.filter(I=>I.timestamp>=_),T=[...new Set(y.map(I=>I.filePath))];for(let I of T){let P=await this.undoFile(t,I,l);P&&u.push(P)}}return u}async undoFile(t,r,l){let u=l.filter(P=>P.filePath===r).sort((P,O)=>O.version-P.version);if(u.length===0)return null;let f=u[0],_=this.getSessionDir(t),y=`${f.contentHash}@v${f.version}`,T=kF.join(_,y);if(u.length>1){let P=u[1],O=`${P.contentHash}@v${P.version}`,L=kF.join(_,O);try{let J=(0,Ev.readFileSync)(L,"utf-8");(0,Ev.writeFileSync)(r,J,"utf-8")}catch{return{success:!1,filePath:r,restoredVersion:f.version-1,error:"Failed to read previous version"}}}else try{let{unlink:P}=await import("node:fs/promises");await P(r)}catch{}let I=l.filter(P=>!(P.filePath===r&&P.version===f.version));await this.saveIndex(t,I);try{let{unlink:P}=await import("node:fs/promises");await P(T)}catch{}return{success:!0,filePath:r,restoredVersion:f.version-1}}async getFileHistory(t,r){return(await this.loadIndex(t)).filter(u=>u.filePath===r).sort((u,f)=>u.version-f.version)}async getSessionHistory(t){return(await this.loadIndex(t)).sort((l,u)=>l.timestamp-u.timestamp)}async cleanup(t){let r=this.getSessionDir(t);try{let{rm:l}=await import("node:fs/promises");await l(r,{recursive:!0,force:!0})}catch{}}async cleanupOldSessions(t=10080*60*1e3){let r=kF.join(this._baseDir,"file-history");if(!(0,Ev.existsSync)(r))return 0;let l=Date.now(),u=0;try{let f=(0,Ev.readdirSync)(r);for(let _ of f){let y=kF.join(r,_);try{let T=(0,Ev.statSync)(y);if(T.isDirectory()&&l-T.mtimeMs>t){let{rm:I}=await import("node:fs/promises");await I(y,{recursive:!0,force:!0}),u++}}catch{}}}catch{}return u}getSessionDir(t){return kF.join(this._baseDir,"file-history",t)}ensureDir(t){(0,Ev.existsSync)(t)||(0,Ev.mkdirSync)(t,{recursive:!0})}hashContent(t){return D2t.createHash("sha256").update(t).digest("hex").slice(0,12)}getIndexFilePath(t){return kF.join(this.getSessionDir(t),"_index.json")}async loadIndex(t){let r=this.getIndexFilePath(t);if(!(0,Ev.existsSync)(r))return[];try{let l=(0,Ev.readFileSync)(r,"utf-8");return JSON.parse(l)}catch{return[]}}async saveIndex(t,r){let l=this.getIndexFilePath(t),u=this.getSessionDir(t);this.ensureDir(u);let f=l+".tmp";(0,Ev.writeFileSync)(f,JSON.stringify(r,null,2),"utf-8");try{let{rename:_}=await import("node:fs/promises");await _(f,l)}catch{(0,Ev.writeFileSync)(l,JSON.stringify(r,null,2),"utf-8")}}};var GAe=require("node:fs"),J5t=bs(require("node:readline"),1);ef();ne();var fB=require("fs/promises"),Dte=require("path");Gx();zd();ef();var Vve=Ma("settings-loader"),Uve="settings.json",LF;(function(o){o[o.Enterprise=0]="Enterprise",o[o.User=1]="User",o[o.Project=2]="Project"})(LF||(LF={}));function W4n(){return process.platform==="win32"?(0,Dte.join)(process.env.ProgramData??"C:\\ProgramData","aggroot",Uve):"/etc/aggroot/settings.json"}function B4n(o){return[{path:W4n(),source:LF.Enterprise},{path:(0,Dte.join)(Ra,Uve),source:LF.User},{path:K3(o,Uve),source:LF.Project}]}async function z4n(o){try{let t=await(0,fB.readFile)(o,"utf-8"),r=JSON.parse(t);return Vve.debug({path:o},"Loaded settings file"),r}catch(t){return t.code==="ENOENT"||Vve.warn({path:o,error:String(t)},"Failed to load settings file"),null}}function G4n(o,t,r){let l={...o};return t.permissions&&(l.permissions={allow:[...l.permissions?.allow??[],...t.permissions.allow],deny:[...l.permissions?.deny??[],...t.permissions.deny],ask:[...l.permissions?.ask??[],...t.permissions.ask]}),t.hooks&&(l.hooks={...l.hooks,...t.hooks}),t.env&&(l.env={...l.env,...t.env}),t.mcp&&(l.mcp={...l.mcp,...t.mcp}),t.features&&(l.features={...l.features,...t.features}),t.preferences&&(l.preferences={...l.preferences,...t.preferences}),r===LF.Enterprise&&t.policy&&(l.policy=t.policy),t.version&&(!l.version||t.version>l.version)&&(l.version=t.version),l}function j4n(o){let t=o.policy;if(!t)return o;let r={...o};return t.allowManagedMcpServersOnly&&t.allowedMcpServers&&r.mcp?.autoConnectServers&&(r.mcp.autoConnectServers=r.mcp.autoConnectServers.filter(l=>t.allowedMcpServers.includes(l))),t.blockedTools?.length&&(r.permissions={allow:[...r.permissions?.allow??[]],deny:[...r.permissions?.deny??[],...t.blockedTools],ask:[...r.permissions?.ask??[]]}),t.requireApproval?.length&&(r.permissions={allow:[...r.permissions?.allow??[]],deny:[...r.permissions?.deny??[]],ask:[...r.permissions?.ask??[],...t.requireApproval]}),r}async function P2t(o){let t=B4n(o),r=await Promise.all(t.map(({path:u})=>z4n(u))),l={};for(let u=0;u<r.length;u++){let f=r[u];if(!f)continue;let _=t[u].source;l.policy?.disableUserOverride&&_===LF.User||l.policy?.disableProjectOverride&&_===LF.Project||(l=G4n(l,f,_))}return l=j4n(l),l}async function Pte(o){let t=(0,Dte.join)(Ra,Uve);try{let r={};try{let l=await(0,fB.readFile)(t,"utf-8");r=JSON.parse(l)}catch{}r.preferences={...r.preferences,...o},await(0,fB.mkdir)(Ra,{recursive:!0}),await(0,fB.writeFile)(t,JSON.stringify(r,null,2),"utf-8"),Vve.info({path:t,prefs:o},"User preferences saved")}catch(r){Vve.warn({error:String(r)},"Failed to save user preferences (non-fatal)")}}FQ();ne();ne();var aU=require("node:fs/promises"),n$e=require("node:path"),r$e=require("node:fs"),i$e=bs(require("node:https"),1);qT();qT();ef();var Rte=class{_cachePath;_registryBase;_checkIntervalMs;_enabled;constructor(t){this._cachePath=(0,n$e.join)(t?.dataDir??Ra,KIt),this._registryBase=t?.registryBase??"https://registry.npmjs.org",this._checkIntervalMs=t?.checkIntervalMs??$It,this._enabled=t?.enabled??!0}async checkForUpdate(t){if(!this._enabled)return null;if(!t?.force){let _=await this._loadCache();if(_&&Date.now()-new Date(_.lastCheckTime).getTime()<this._checkIntervalMs)return{hasUpdate:this._isNewer(_.latestVersion,vv),currentVersion:vv,latestVersion:_.latestVersion,checkedAt:_.lastCheckTime}}let r=await this._fetchLatestVersion();if(!r)return null;let l=this._isNewer(r,vv),u=new Date().toISOString(),f={lastCheckTime:u,latestVersion:r,currentVersionAtCheck:vv,hasUpdate:l};return await this._saveCache(f),{hasUpdate:l,currentVersion:vv,latestVersion:r,checkedAt:u}}async checkInBackground(){try{return await this.checkForUpdate()}catch{return null}}async getCachedResult(){let t=await this._loadCache();return t?{hasUpdate:this._isNewer(t.latestVersion,vv),currentVersion:vv,latestVersion:t.latestVersion,checkedAt:t.lastCheckTime}:null}_isNewer(t,r){let l=t.replace(/^v/,"").split(".").map(Number),u=r.replace(/^v/,"").split(".").map(Number);for(let f=0;f<3;f++){if((l[f]??0)>(u[f]??0))return!0;if((l[f]??0)<(u[f]??0))return!1}return!1}_fetchLatestVersion(){let t=`${this._registryBase}/aggroot/latest`;return new Promise(r=>{let l=setTimeout(()=>{u.destroy(),r(null)},hje),u=i$e.default.get(t,f=>{if(f.statusCode===301||f.statusCode===302){let y=f.headers.location;if(y){clearTimeout(l),r(this._fetchFromUrl(y));return}}if(f.statusCode!==200){clearTimeout(l),f.resume(),r(null);return}let _="";f.on("data",y=>{_+=y.toString()}),f.on("end",()=>{clearTimeout(l);try{let y=JSON.parse(_);r(y.version??null)}catch{r(null)}}),f.on("error",()=>{clearTimeout(l),r(null)})});u.on("error",()=>{clearTimeout(l),r(null)})})}_fetchFromUrl(t){return new Promise(r=>{let l=setTimeout(()=>{u.destroy(),r(null)},hje),u=i$e.default.get(t,f=>{if(f.statusCode!==200){clearTimeout(l),f.resume(),r(null);return}let _="";f.on("data",y=>{_+=y.toString()}),f.on("end",()=>{clearTimeout(l);try{let y=JSON.parse(_);r(y.version??null)}catch{r(null)}})});u.on("error",()=>{clearTimeout(l),r(null)})})}async _loadCache(){try{if(!(0,r$e.existsSync)(this._cachePath))return null;let t=await(0,aU.readFile)(this._cachePath,"utf-8");return JSON.parse(t)}catch{return null}}async _saveCache(t){try{let r=(0,n$e.join)(this._cachePath,"..");(0,r$e.existsSync)(r)||await(0,aU.mkdir)(r,{recursive:!0}),await(0,aU.writeFile)(this._cachePath,JSON.stringify(t,null,2),"utf-8")}catch{}}};ne();var Kve=require("node:child_process"),N2t=require("node:util"),k2t=require("node:fs"),s$e=require("node:path");qT();qT();ne();var lU=require("node:fs/promises"),o$e=require("node:path"),Hve=require("node:fs"),R2t=require("node:child_process"),M2t=require("node:util");ef();qT();var V4n=(0,M2t.promisify)(R2t.execFile),Mte=class{_rollbackPath;constructor(t){this._rollbackPath=(0,o$e.join)(t??Ra,qIt)}async createBackup(t,r){let l={previousVersion:t,upgradedFrom:t,upgradedTo:"",upgradedAt:new Date().toISOString(),installPath:r};await this._save(l)}async markUpgraded(t){let r=await this._load();r&&(r.upgradedTo=t,await this._save(r))}async isRollbackAvailable(){let t=await this._load();return t!==null&&!!t.previousVersion}async getRollbackInfo(){return this._load()}async rollback(t){let r=await this._load();if(!r||!r.previousVersion)return{success:!1,version:"",error:"\u6CA1\u6709\u53EF\u56DE\u6EDA\u7684\u7248\u672C\u4FE1\u606F"};let l=t??"npm";try{let{stdout:u,stderr:f}=await V4n(l,["install","-g",`aggroot@${r.previousVersion}`],{timeout:pge,encoding:"utf-8",shell:!0}),_=f?.trim();return _&&!_.includes("WARN")&&!_.includes("warn")?{success:!1,version:r.previousVersion,error:_}:(await this.clearRollback(),{success:!0,version:r.previousVersion})}catch(u){return{success:!1,version:r.previousVersion,error:u.message??String(u)}}}async clearRollback(){try{if((0,Hve.existsSync)(this._rollbackPath)){let{unlink:t}=await import("node:fs/promises");await t(this._rollbackPath)}}catch{}}async _load(){try{if(!(0,Hve.existsSync)(this._rollbackPath))return null;let t=await(0,lU.readFile)(this._rollbackPath,"utf-8");return JSON.parse(t)}catch{return null}}async _save(t){try{let r=(0,o$e.join)(this._rollbackPath,"..");(0,Hve.existsSync)(r)||await(0,lU.mkdir)(r,{recursive:!0}),await(0,lU.writeFile)(this._rollbackPath,JSON.stringify(t,null,2),"utf-8")}catch{}}};var $ve=(0,N2t.promisify)(Kve.execFile),Nte=class{_updateChecker;_rollbackManager;constructor(t){this._updateChecker=new Rte({dataDir:t?.dataDir}),this._rollbackManager=new Mte(t?.dataDir)}get updateChecker(){return this._updateChecker}get rollbackManager(){return this._rollbackManager}async getInstallInfo(){let t=await this._findNpm(),r=await this._isNpmGlobalInstall(),l="";if(t)try{let{stdout:u}=await $ve(t,["root","-g"],{timeout:1e4,encoding:"utf-8",shell:!0});l=(0,s$e.join)(u.trim(),"aggroot")}catch{}return{isNpmGlobalInstall:r,installPath:l,version:vv,npmPath:t}}async upgrade(t,r,l){let u=vv;t?.({step:"checking-env",message:"\u6B63\u5728\u68C0\u67E5\u5347\u7EA7\u73AF\u5883...",percent:5});let f=r??await this.getInstallInfo();if(!f.npmPath)return{success:!1,fromVersion:u,toVersion:"",error:"\u672A\u627E\u5230 npm \u547D\u4EE4\uFF0C\u65E0\u6CD5\u6267\u884C\u5347\u7EA7\u3002\u8BF7\u786E\u4FDD npm \u5DF2\u5B89\u88C5\u5E76\u5728 PATH \u4E2D\u3002"};if(!f.isNpmGlobalInstall)return{success:!1,fromVersion:u,toVersion:"",error:"\u5F53\u524D\u975E npm \u5168\u5C40\u5B89\u88C5\uFF0C\u4E0D\u652F\u6301\u81EA\u52A8\u5347\u7EA7\u3002\u8BF7\u901A\u8FC7\u6E90\u7801\u65B9\u5F0F\u624B\u52A8\u66F4\u65B0\u3002"};t?.({step:"checking-version",message:"\u6B63\u5728\u68C0\u67E5\u6700\u65B0\u7248\u672C...",percent:15});let _=l??await this._updateChecker.checkForUpdate({force:!0});if(!_)return{success:!1,fromVersion:u,toVersion:"",error:"\u65E0\u6CD5\u83B7\u53D6\u6700\u65B0\u7248\u672C\u4FE1\u606F\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u3002"};if(!_.hasUpdate)return{success:!1,fromVersion:u,toVersion:vv,error:`\u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\u672C (${vv})`};let y=_.latestVersion;t?.({step:"backing-up",message:"\u6B63\u5728\u5907\u4EFD\u56DE\u6EDA\u4FE1\u606F...",percent:25}),await this._rollbackManager.createBackup(u,f.installPath),t?.({step:"downloading",message:`\u6B63\u5728\u4E0B\u8F7D aggroot@${y}...`,percent:30});let T=await this._spawnNpmInstall(y,t);return T.success?(t?.({step:"verifying",message:"\u6B63\u5728\u9A8C\u8BC1\u5B89\u88C5...",percent:90}),await this._verifyInstallation(f.npmPath,y)?(await this._rollbackManager.markUpgraded(y),t?.({step:"done",message:"\u5347\u7EA7\u5B8C\u6210",percent:100}),{success:!0,fromVersion:u,toVersion:y}):{success:!1,fromVersion:u,toVersion:y,error:"\u5B89\u88C5\u9A8C\u8BC1\u5931\u8D25\uFF0C\u65B0\u7248\u672C\u53EF\u80FD\u672A\u6B63\u786E\u5B89\u88C5\u3002\u8BF7\u624B\u52A8\u68C0\u67E5\u3002"}):{success:!1,fromVersion:u,toVersion:y,error:T.error??"npm \u5B89\u88C5\u5931\u8D25"}}async rollback(t){if(!(await this.getInstallInfo()).npmPath)return{success:!1,version:"",error:"\u672A\u627E\u5230 npm \u547D\u4EE4\uFF0C\u65E0\u6CD5\u6267\u884C\u56DE\u6EDA\u3002"};t?.({step:"installing",message:"\u6B63\u5728\u56DE\u6EDA\u5230\u4E0A\u4E00\u7248\u672C...",percent:30});let l=await this._rollbackManager.getRollbackInfo();if(!l)return{success:!1,version:"",error:"\u6CA1\u6709\u53EF\u56DE\u6EDA\u7684\u7248\u672C\u4FE1\u606F"};let u=await this._spawnNpmInstall(l.previousVersion,t);return u.success?(await this._rollbackManager.clearRollback(),t?.({step:"done",message:"\u56DE\u6EDA\u5B8C\u6210",percent:100}),{success:!0,version:l.previousVersion}):{success:!1,version:l.previousVersion,error:u.error}}async checkForUpdate(){return this._updateChecker.checkForUpdate()}_spawnNpmInstall(t,r){return new Promise(l=>{let u=(0,Kve.spawn)("npm",["install","-g",`aggroot@${t}`],{shell:!0,timeout:pge}),f="";u.stdout?.on("data",_=>{let y=_.toString("utf-8");this._parseNpmProgress(y,t,r)}),u.stderr?.on("data",_=>{f+=_.toString("utf-8")}),u.on("close",_=>{if(_!==0){let T=f.split(`
|
|
44322
|
+
`.repeat(_);this.stdout.write(J)}this.savedCursorRow=Math.max(1,t-2-l-u)}applyFilter(){if(!this.filterText)this.items=[...this.allItems];else{let t=this.allItems.filter(r=>r.selectable===!1?!0:r.name.toLowerCase().includes(this.filterText)||(r.description?.toLowerCase().includes(this.filterText)??!1));this.items=t.filter((r,l)=>{if(r.selectable===!1){let u=t[l+1];return u&&u.selectable!==!1}return!0})}this.selectedIndex=this.isSelectable(0)?0:this.findNextSelectable(0,1)}render(){let t=Math.min(this.items.length,15),r=Math.max(0,Math.min(this.selectedIndex-3,this.items.length-t));this._visibleStart=r;let l=Math.min(this.items.length,r+t),u=[];this.menuHeader&&u.push(Ht.yellow.bold(this.menuHeader)),this.isFiltering&&u.push(Ht.yellow(` \u641C\u7D22: ${this.filterText}_`));for(let L=r;L<l;L++){let J=this.items[L],V=L===this.selectedIndex,K=V?"\u25B6":" ",ye=this.stripAnsi(J.name);if(J.selectable===!1){u.push(Ht.gray.dim(` ${ye}`));continue}let he=V?Ht.cyan.bold(ye):Ht.gray(ye);if(J.description){let Ae=V?Ht.cyan.dim(` \u2014 ${J.description}`):Ht.gray.dim(` \u2014 ${J.description}`);he+=Ae}u.push(` ${K} ${he}`)}let f=this.prefix==="@",_=this.isFiltering?f?"\u8F93\u5165\u7B5B\u9009 \u2191\u2193 \u2190\u2192 Enter Esc":"\u8F93\u5165\u7B5B\u9009 \u2191\u2193 Enter Esc":f?"\u2191\u2193 \u2190\u2192 Enter Esc":"\u2191\u2193 Enter Esc";u.push(Ht.gray(` ${_}`));let y="";y+="\x1B[?25l";let T=process.stdout.rows||24;this.menuStartRow=Math.max(1,this.savedCursorRow);let I=this.menuLines;for(let L=0;L<I;L++){let J=this.menuStartRow+L;J>0&&(y+=`\x1B[${J};1H`,y+="\x1B[2K")}let P=process.stdout.columns||80;for(let L=0;L<u.length;L++){let J=this.menuStartRow+L;y+=`\x1B[${J};1H`,y+="\x1B[2K",y+=this.truncateToWidth(u[L],P)}if(this.menuLines=Math.max(this.menuLines,u.length),this.getStatusBar){let L=this.menuStartRow+this.menuLines;for(let J=L;J<T;J++)J>0&&(y+=`\x1B[${J};1H`,y+="\x1B[2K");y+=`\x1B[${T};1H`,y+="\x1B[2K",y+=this.truncateToWidth(this.getStatusBar(),P)}let O=this.selectedIndex-this._visibleStart;if(O>=0&&O<u.length){let L=this.menuStartRow+(this.menuHeader?1:0)+O;y+=`\x1B[${L};1H`}y+="\x1B[?25h",this.stdout.write(y)}stripAnsi(t){return t.replace(/\x1b\[[0-9;]*m/g,"")}truncateToWidth(t,r){let l=t.split(/(\x1b\[[0-9;]*m)/),u=0,f="";for(let _ of l)if(_.startsWith("\x1B["))f+=_;else for(let y of _){let T=zk(y);if(u+T>r)return f;u+=T,f+=y}return f}cleanup(){this.isActive=!1,this.menuHeader="",this.menuResolve=null,this.filterText="",this.isFiltering=!1,this.stdout.write("\x1B[?25l");let t=this.menuStartRow>0?this.menuStartRow:this.savedCursorRow,r=process.stdout.rows||24;for(let l=t;l<=r;l++)this.stdout.write(`\x1B[${l};1H\x1B[2K`);this.stdout.write("\x1B[?25h"),this.menuLines=0,this.dispatcher?this.dispatcher.unregister(this.menuContextName):this.dataHandler&&(this.stdin.removeListener("data",this.dataHandler),this.dataHandler=null)}get active(){return this.isActive}};ne();var Wve=class{contexts=[];register(t){this.contexts.push(t),this.contexts.sort((r,l)=>l.priority-r.priority)}unregister(t){this.contexts=this.contexts.filter(r=>r.name!==t)}dispatch(t){for(let r of this.contexts)if(r.isActive()&&r.handle(t))return!0;return!1}getActiveContexts(){return this.contexts.filter(t=>t.isActive()).map(t=>t.name)}};ne();var Bve=class{getCommandRegistry;getAgents;suggestion=null;constructor(t,r){this.getCommandRegistry=t,this.getAgents=r}updateSuggestions(t,r){if(this.suggestion=null,!t||t.length===0)return;let l=[...t];if(r===l.length){if(t.startsWith("/")&&t.length>1&&!t.includes(" ")){let u=this.getCommandRegistry();if(u){let f=u.getCommands(),_=t.toLowerCase(),y=f.find(T=>T.name.toLowerCase().startsWith(_)&&T.name.toLowerCase()!==_);if(y){let T=y.name.slice(t.length);this.suggestion={text:T,fullReplacement:y.name,source:"command"}}}return}if(t.startsWith("#")&&t.length>1&&!t.includes(" ")){let u=this.getAgents(),f=t.toLowerCase(),_=u.find(y=>`#${y.toLowerCase()}`.startsWith(f)&&`#${y.toLowerCase()}`!==f);if(_){let y=`#${_}`,T=y.slice(t.length);this.suggestion={text:T,fullReplacement:y,source:"agent"}}return}}}getSuggestion(){return this.suggestion}clear(){this.suggestion=null}accept(){if(!this.suggestion)return null;let t=this.suggestion.fullReplacement;return this.suggestion=null,t}};cB();var oYe=require("node:path"),q5t=require("node:fs");ne();var zve=require("node:fs"),e$e=require("node:path"),t$e=require("node:fs"),Gve=class{filePath;heartbeatTimer=null;constructor(t){this.filePath=(0,e$e.join)(t,"instances.json")}async register(t){let l=(await this.loadAll()).filter(u=>u.pid!==t.pid);l.push(t),await this.saveAll(l)}async unregister(t){let l=(await this.loadAll()).filter(u=>u.id!==t);await this.saveAll(l)}async updateHeartbeat(t){let r=await this.loadAll(),l=r.find(u=>u.id===t);l&&(l.lastHeartbeat=Date.now(),await this.saveAll(r))}startHeartbeat(t,r=3e4){this.stopHeartbeat(),this.heartbeatTimer=setInterval(async()=>{try{await this.updateHeartbeat(t)}catch{}},r)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}async listInstances(){return this.loadAll()}async listResumable(){return(await this.loadAll()).filter(r=>r.sessionId).sort((r,l)=>l.lastHeartbeat-r.lastHeartbeat)}isProcessAlive(t){try{return process.kill(t,0),!0}catch{return!1}}async cleanup(t=10080*60*1e3){let r=await this.loadAll(),l=Date.now(),u=r.filter(_=>this.isProcessAlive(_.pid)?!0:l-_.lastHeartbeat<t),f=r.length-u.length;return f>0&&await this.saveAll(u),f}async loadAll(){if(!(0,t$e.existsSync)(this.filePath))return[];try{let t=await zve.promises.readFile(this.filePath,"utf-8");return JSON.parse(t).instances??[]}catch{return[]}}async saveAll(t){let r=(0,e$e.join)(this.filePath,"..");(0,t$e.existsSync)(r)||await zve.promises.mkdir(r,{recursive:!0}),await zve.promises.writeFile(this.filePath,JSON.stringify({version:1,instances:t},null,2),"utf-8")}};ne();var kF=bs(require("node:path"),1),D2t=bs(require("node:crypto"),1),Ev=require("node:fs");zd();var F4n=Ma("file-history-store"),jve=class{_baseDir;constructor(t){this._baseDir=t}async recordChange(t,r,l,u="unknown"){let f=this.getSessionDir(t);this.ensureDir(f);let _=this.hashContent(l),y=await this.loadIndex(t),T=y.filter(V=>V.filePath===r),P=(T.length>0?Math.max(...T.map(V=>V.version)):0)+1,O=`${_}@v${P}`,L=kF.join(f,O);(0,Ev.writeFileSync)(L,l,"utf-8");let J={version:P,filePath:r,contentHash:_,timestamp:Date.now(),source:u,sessionId:t};return y.push(J),await this.saveIndex(t,y),F4n.debug(`Recorded file change: ${r} v${P} (source: ${u})`),P}async undo(t,r){let l=await this.loadIndex(t);if(l.length===0)return[];let u=[];if(r){let f=await this.undoFile(t,r,l);f&&u.push(f)}else{let _=Math.max(...l.map(I=>I.timestamp))-2e3,y=l.filter(I=>I.timestamp>=_),T=[...new Set(y.map(I=>I.filePath))];for(let I of T){let P=await this.undoFile(t,I,l);P&&u.push(P)}}return u}async undoFile(t,r,l){let u=l.filter(P=>P.filePath===r).sort((P,O)=>O.version-P.version);if(u.length===0)return null;let f=u[0],_=this.getSessionDir(t),y=`${f.contentHash}@v${f.version}`,T=kF.join(_,y);if(u.length>1){let P=u[1],O=`${P.contentHash}@v${P.version}`,L=kF.join(_,O);try{let J=(0,Ev.readFileSync)(L,"utf-8");(0,Ev.writeFileSync)(r,J,"utf-8")}catch{return{success:!1,filePath:r,restoredVersion:f.version-1,error:"Failed to read previous version"}}}else try{let{unlink:P}=await import("node:fs/promises");await P(r)}catch{}let I=l.filter(P=>!(P.filePath===r&&P.version===f.version));await this.saveIndex(t,I);try{let{unlink:P}=await import("node:fs/promises");await P(T)}catch{}return{success:!0,filePath:r,restoredVersion:f.version-1}}async getFileHistory(t,r){return(await this.loadIndex(t)).filter(u=>u.filePath===r).sort((u,f)=>u.version-f.version)}async getSessionHistory(t){return(await this.loadIndex(t)).sort((l,u)=>l.timestamp-u.timestamp)}async cleanup(t){let r=this.getSessionDir(t);try{let{rm:l}=await import("node:fs/promises");await l(r,{recursive:!0,force:!0})}catch{}}async cleanupOldSessions(t=10080*60*1e3){let r=kF.join(this._baseDir,"file-history");if(!(0,Ev.existsSync)(r))return 0;let l=Date.now(),u=0;try{let f=(0,Ev.readdirSync)(r);for(let _ of f){let y=kF.join(r,_);try{let T=(0,Ev.statSync)(y);if(T.isDirectory()&&l-T.mtimeMs>t){let{rm:I}=await import("node:fs/promises");await I(y,{recursive:!0,force:!0}),u++}}catch{}}}catch{}return u}getSessionDir(t){return kF.join(this._baseDir,"file-history",t)}ensureDir(t){(0,Ev.existsSync)(t)||(0,Ev.mkdirSync)(t,{recursive:!0})}hashContent(t){return D2t.createHash("sha256").update(t).digest("hex").slice(0,12)}getIndexFilePath(t){return kF.join(this.getSessionDir(t),"_index.json")}async loadIndex(t){let r=this.getIndexFilePath(t);if(!(0,Ev.existsSync)(r))return[];try{let l=(0,Ev.readFileSync)(r,"utf-8");return JSON.parse(l)}catch{return[]}}async saveIndex(t,r){let l=this.getIndexFilePath(t),u=this.getSessionDir(t);this.ensureDir(u);let f=l+".tmp";(0,Ev.writeFileSync)(f,JSON.stringify(r,null,2),"utf-8");try{let{rename:_}=await import("node:fs/promises");await _(f,l)}catch{(0,Ev.writeFileSync)(l,JSON.stringify(r,null,2),"utf-8")}}};var GAe=require("node:fs"),J5t=bs(require("node:readline"),1);ef();ne();var fB=require("fs/promises"),Dte=require("path");Gx();zd();ef();var Vve=Ma("settings-loader"),Uve="settings.json",LF;(function(o){o[o.Enterprise=0]="Enterprise",o[o.User=1]="User",o[o.Project=2]="Project"})(LF||(LF={}));function W4n(){return process.platform==="win32"?(0,Dte.join)(process.env.ProgramData??"C:\\ProgramData","aggroot",Uve):"/etc/aggroot/settings.json"}function B4n(o){return[{path:W4n(),source:LF.Enterprise},{path:(0,Dte.join)(Ra,Uve),source:LF.User},{path:K3(o,Uve),source:LF.Project}]}async function z4n(o){try{let t=await(0,fB.readFile)(o,"utf-8"),r=JSON.parse(t);return Vve.debug({path:o},"Loaded settings file"),r}catch(t){return t.code==="ENOENT"||Vve.warn({path:o,error:String(t)},"Failed to load settings file"),null}}function G4n(o,t,r){let l={...o};return t.permissions&&(l.permissions={allow:[...l.permissions?.allow??[],...t.permissions.allow],deny:[...l.permissions?.deny??[],...t.permissions.deny],ask:[...l.permissions?.ask??[],...t.permissions.ask]}),t.hooks&&(l.hooks={...l.hooks,...t.hooks}),t.env&&(l.env={...l.env,...t.env}),t.mcp&&(l.mcp={...l.mcp,...t.mcp}),t.features&&(l.features={...l.features,...t.features}),t.preferences&&(l.preferences={...l.preferences,...t.preferences}),r===LF.Enterprise&&t.policy&&(l.policy=t.policy),t.version&&(!l.version||t.version>l.version)&&(l.version=t.version),l}function j4n(o){let t=o.policy;if(!t)return o;let r={...o};return t.allowManagedMcpServersOnly&&t.allowedMcpServers&&r.mcp?.autoConnectServers&&(r.mcp.autoConnectServers=r.mcp.autoConnectServers.filter(l=>t.allowedMcpServers.includes(l))),t.blockedTools?.length&&(r.permissions={allow:[...r.permissions?.allow??[]],deny:[...r.permissions?.deny??[],...t.blockedTools],ask:[...r.permissions?.ask??[]]}),t.requireApproval?.length&&(r.permissions={allow:[...r.permissions?.allow??[]],deny:[...r.permissions?.deny??[]],ask:[...r.permissions?.ask??[],...t.requireApproval]}),r}async function P2t(o){let t=B4n(o),r=await Promise.all(t.map(({path:u})=>z4n(u))),l={};for(let u=0;u<r.length;u++){let f=r[u];if(!f)continue;let _=t[u].source;l.policy?.disableUserOverride&&_===LF.User||l.policy?.disableProjectOverride&&_===LF.Project||(l=G4n(l,f,_))}return l=j4n(l),l}async function Pte(o){let t=(0,Dte.join)(Ra,Uve);try{let r={};try{let l=await(0,fB.readFile)(t,"utf-8");r=JSON.parse(l)}catch{}r.preferences={...r.preferences,...o},await(0,fB.mkdir)(Ra,{recursive:!0}),await(0,fB.writeFile)(t,JSON.stringify(r,null,2),"utf-8"),Vve.info({path:t,prefs:o},"User preferences saved")}catch(r){Vve.warn({error:String(r)},"Failed to save user preferences (non-fatal)")}}FQ();ne();ne();var aU=require("node:fs/promises"),n$e=require("node:path"),r$e=require("node:fs"),i$e=bs(require("node:https"),1);qT();qT();ef();var Rte=class{_cachePath;_registryBase;_checkIntervalMs;_enabled;constructor(t){this._cachePath=(0,n$e.join)(t?.dataDir??Ra,KIt),this._registryBase=t?.registryBase??"https://registry.npmjs.org",this._checkIntervalMs=t?.checkIntervalMs??$It,this._enabled=t?.enabled??!0}async checkForUpdate(t){if(!this._enabled)return null;if(!t?.force){let _=await this._loadCache();if(_&&Date.now()-new Date(_.lastCheckTime).getTime()<this._checkIntervalMs)return{hasUpdate:this._isNewer(_.latestVersion,vv),currentVersion:vv,latestVersion:_.latestVersion,checkedAt:_.lastCheckTime}}let r=await this._fetchLatestVersion();if(!r)return null;let l=this._isNewer(r,vv),u=new Date().toISOString(),f={lastCheckTime:u,latestVersion:r,currentVersionAtCheck:vv,hasUpdate:l};return await this._saveCache(f),{hasUpdate:l,currentVersion:vv,latestVersion:r,checkedAt:u}}async checkInBackground(){try{return await this.checkForUpdate()}catch{return null}}async getCachedResult(){let t=await this._loadCache();return t?{hasUpdate:this._isNewer(t.latestVersion,vv),currentVersion:vv,latestVersion:t.latestVersion,checkedAt:t.lastCheckTime}:null}_isNewer(t,r){let l=t.replace(/^v/,"").split(".").map(Number),u=r.replace(/^v/,"").split(".").map(Number);for(let f=0;f<3;f++){if((l[f]??0)>(u[f]??0))return!0;if((l[f]??0)<(u[f]??0))return!1}return!1}_fetchLatestVersion(){let t=`${this._registryBase}/aggroot/latest`;return new Promise(r=>{let l=setTimeout(()=>{u.destroy(),r(null)},hje),u=i$e.default.get(t,f=>{if(f.statusCode===301||f.statusCode===302){let y=f.headers.location;if(y){clearTimeout(l),r(this._fetchFromUrl(y));return}}if(f.statusCode!==200){clearTimeout(l),f.resume(),r(null);return}let _="";f.on("data",y=>{_+=y.toString()}),f.on("end",()=>{clearTimeout(l);try{let y=JSON.parse(_);r(y.version??null)}catch{r(null)}}),f.on("error",()=>{clearTimeout(l),r(null)})});u.on("error",()=>{clearTimeout(l),r(null)})})}_fetchFromUrl(t){return new Promise(r=>{let l=setTimeout(()=>{u.destroy(),r(null)},hje),u=i$e.default.get(t,f=>{if(f.statusCode!==200){clearTimeout(l),f.resume(),r(null);return}let _="";f.on("data",y=>{_+=y.toString()}),f.on("end",()=>{clearTimeout(l);try{let y=JSON.parse(_);r(y.version??null)}catch{r(null)}})});u.on("error",()=>{clearTimeout(l),r(null)})})}async _loadCache(){try{if(!(0,r$e.existsSync)(this._cachePath))return null;let t=await(0,aU.readFile)(this._cachePath,"utf-8");return JSON.parse(t)}catch{return null}}async _saveCache(t){try{let r=(0,n$e.join)(this._cachePath,"..");(0,r$e.existsSync)(r)||await(0,aU.mkdir)(r,{recursive:!0}),await(0,aU.writeFile)(this._cachePath,JSON.stringify(t,null,2),"utf-8")}catch{}}};ne();var Kve=require("node:child_process"),N2t=require("node:util"),k2t=require("node:fs"),s$e=require("node:path");qT();qT();ne();var lU=require("node:fs/promises"),o$e=require("node:path"),Hve=require("node:fs"),R2t=require("node:child_process"),M2t=require("node:util");ef();qT();var V4n=(0,M2t.promisify)(R2t.execFile),Mte=class{_rollbackPath;constructor(t){this._rollbackPath=(0,o$e.join)(t??Ra,qIt)}async createBackup(t,r){let l={previousVersion:t,upgradedFrom:t,upgradedTo:"",upgradedAt:new Date().toISOString(),installPath:r};await this._save(l)}async markUpgraded(t){let r=await this._load();r&&(r.upgradedTo=t,await this._save(r))}async isRollbackAvailable(){let t=await this._load();return t!==null&&!!t.previousVersion}async getRollbackInfo(){return this._load()}async rollback(t){let r=await this._load();if(!r||!r.previousVersion)return{success:!1,version:"",error:"\u6CA1\u6709\u53EF\u56DE\u6EDA\u7684\u7248\u672C\u4FE1\u606F"};let l=t??"npm";try{let{stdout:u,stderr:f}=await V4n(l,["install","-g",`aggroot@${r.previousVersion}`],{timeout:pge,encoding:"utf-8",shell:!0}),_=f?.trim();return _&&!_.includes("WARN")&&!_.includes("warn")?{success:!1,version:r.previousVersion,error:_}:(await this.clearRollback(),{success:!0,version:r.previousVersion})}catch(u){return{success:!1,version:r.previousVersion,error:u.message??String(u)}}}async clearRollback(){try{if((0,Hve.existsSync)(this._rollbackPath)){let{unlink:t}=await import("node:fs/promises");await t(this._rollbackPath)}}catch{}}async _load(){try{if(!(0,Hve.existsSync)(this._rollbackPath))return null;let t=await(0,lU.readFile)(this._rollbackPath,"utf-8");return JSON.parse(t)}catch{return null}}async _save(t){try{let r=(0,o$e.join)(this._rollbackPath,"..");(0,Hve.existsSync)(r)||await(0,lU.mkdir)(r,{recursive:!0}),await(0,lU.writeFile)(this._rollbackPath,JSON.stringify(t,null,2),"utf-8")}catch{}}};var $ve=(0,N2t.promisify)(Kve.execFile),Nte=class{_updateChecker;_rollbackManager;constructor(t){this._updateChecker=new Rte({dataDir:t?.dataDir}),this._rollbackManager=new Mte(t?.dataDir)}get updateChecker(){return this._updateChecker}get rollbackManager(){return this._rollbackManager}async getInstallInfo(){let t=await this._findNpm(),r=await this._isNpmGlobalInstall(),l="";if(t)try{let{stdout:u}=await $ve(t,["root","-g"],{timeout:1e4,encoding:"utf-8",shell:!0});l=(0,s$e.join)(u.trim(),"aggroot")}catch{}return{isNpmGlobalInstall:r,installPath:l,version:vv,npmPath:t}}async upgrade(t,r,l){let u=vv;t?.({step:"checking-env",message:"\u6B63\u5728\u68C0\u67E5\u5347\u7EA7\u73AF\u5883...",percent:5});let f=r??await this.getInstallInfo();if(!f.npmPath)return{success:!1,fromVersion:u,toVersion:"",error:"\u672A\u627E\u5230 npm \u547D\u4EE4\uFF0C\u65E0\u6CD5\u6267\u884C\u5347\u7EA7\u3002\u8BF7\u786E\u4FDD npm \u5DF2\u5B89\u88C5\u5E76\u5728 PATH \u4E2D\u3002"};if(!f.isNpmGlobalInstall)return{success:!1,fromVersion:u,toVersion:"",error:"\u5F53\u524D\u975E npm \u5168\u5C40\u5B89\u88C5\uFF0C\u4E0D\u652F\u6301\u81EA\u52A8\u5347\u7EA7\u3002\u8BF7\u901A\u8FC7\u6E90\u7801\u65B9\u5F0F\u624B\u52A8\u66F4\u65B0\u3002"};t?.({step:"checking-version",message:"\u6B63\u5728\u68C0\u67E5\u6700\u65B0\u7248\u672C...",percent:15});let _=l??await this._updateChecker.checkForUpdate({force:!0});if(!_)return{success:!1,fromVersion:u,toVersion:"",error:"\u65E0\u6CD5\u83B7\u53D6\u6700\u65B0\u7248\u672C\u4FE1\u606F\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u3002"};if(!_.hasUpdate)return{success:!1,fromVersion:u,toVersion:vv,error:`\u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\u672C (${vv})`};let y=_.latestVersion;t?.({step:"backing-up",message:"\u6B63\u5728\u5907\u4EFD\u56DE\u6EDA\u4FE1\u606F...",percent:25}),await this._rollbackManager.createBackup(u,f.installPath),t?.({step:"downloading",message:`\u6B63\u5728\u4E0B\u8F7D aggroot@${y}...`,percent:30});let T=await this._spawnNpmInstall(y,t);return T.success?(t?.({step:"verifying",message:"\u6B63\u5728\u9A8C\u8BC1\u5B89\u88C5...",percent:90}),await this._verifyInstallation(f.npmPath,y)?(await this._rollbackManager.markUpgraded(y),t?.({step:"done",message:"\u5347\u7EA7\u5B8C\u6210",percent:100}),{success:!0,fromVersion:u,toVersion:y}):{success:!1,fromVersion:u,toVersion:y,error:"\u5B89\u88C5\u9A8C\u8BC1\u5931\u8D25\uFF0C\u65B0\u7248\u672C\u53EF\u80FD\u672A\u6B63\u786E\u5B89\u88C5\u3002\u8BF7\u624B\u52A8\u68C0\u67E5\u3002"}):{success:!1,fromVersion:u,toVersion:y,error:T.error??"npm \u5B89\u88C5\u5931\u8D25"}}async rollback(t){if(!(await this.getInstallInfo()).npmPath)return{success:!1,version:"",error:"\u672A\u627E\u5230 npm \u547D\u4EE4\uFF0C\u65E0\u6CD5\u6267\u884C\u56DE\u6EDA\u3002"};t?.({step:"installing",message:"\u6B63\u5728\u56DE\u6EDA\u5230\u4E0A\u4E00\u7248\u672C...",percent:30});let l=await this._rollbackManager.getRollbackInfo();if(!l)return{success:!1,version:"",error:"\u6CA1\u6709\u53EF\u56DE\u6EDA\u7684\u7248\u672C\u4FE1\u606F"};let u=await this._spawnNpmInstall(l.previousVersion,t);return u.success?(await this._rollbackManager.clearRollback(),t?.({step:"done",message:"\u56DE\u6EDA\u5B8C\u6210",percent:100}),{success:!0,version:l.previousVersion}):{success:!1,version:l.previousVersion,error:u.error}}async checkForUpdate(t){return this._updateChecker.checkForUpdate(t)}_spawnNpmInstall(t,r){return new Promise(l=>{let u=(0,Kve.spawn)("npm",["install","-g",`aggroot@${t}`],{shell:!0,timeout:pge}),f="";u.stdout?.on("data",_=>{let y=_.toString("utf-8");this._parseNpmProgress(y,t,r)}),u.stderr?.on("data",_=>{f+=_.toString("utf-8")}),u.on("close",_=>{if(_!==0){let T=f.split(`
|
|
44323
44323
|
`).filter(I=>I.trim()&&!I.includes("WARN")&&!I.includes("warn"));f.includes("ERR!")?l({success:!1,error:`npm \u5B89\u88C5\u5931\u8D25: ${T.join(`
|
|
44324
44324
|
`)}`}):l({success:!1,error:`npm \u5B89\u88C5\u5931\u8D25 (\u9000\u51FA\u7801: ${_})`});return}let y=f.split(`
|
|
44325
44325
|
`).filter(T=>T.trim()&&!T.includes("WARN")&&!T.includes("warn"));if(y.length>0&&f.includes("ERR!")){l({success:!1,error:`npm \u5B89\u88C5\u5931\u8D25: ${y.join(`
|