@mk-co/neox-cli 2.0.45 → 2.0.46

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/sdk/index.js CHANGED
@@ -2,10 +2,10 @@ import*as Me from'fs';import Me__default,{realpathSync,readlinkSync,readdirSync,
2
2
  `)}function _g(a){return a.replace(/'/g,"'\\''")}function ia(a,e,t){if(process.env.CLI_DEBUG!=="1")return;let s=Ft(a,e,t);m.info("CURL","=== LLM Request CURL Command ==="),m.info("CURL",s),m.info("CURL","=== End CURL Command ==="),process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
3
3
  [CURL] === LLM Request CURL Command ===`),console.log(s),console.log(`[CURL] === End CURL Command ===
4
4
  `));}function ye(a,e,t){if(process.env.CLI_DEBUG==="1"&&(m.debug(a,e,t),process.env.CLI_DEBUG_CONSOLE==="1")){let s=a?`[${a}]`:"";t!==void 0?console.log(s,e,t):console.log(s,e);}}function Ag(){process.on("uncaughtException",a=>{m.error("CRASH","Uncaught Exception",{name:a.name,message:a.message,stack:a.stack}),setTimeout(()=>process.exit(1),100);}),process.on("unhandledRejection",a=>{m.error("CRASH","Unhandled Rejection",{reason:a instanceof Error?{name:a.name,message:a.message,stack:a.stack}:a});});try{process.on("SIGTTIN","ignore"),process.on("SIGTTOU","ignore"),m.info("SIGNAL","TTY control signals (SIGTTIN/SIGTTOU) initialized in crashHandler");}catch{}process.on("exit",()=>{m.close();});}var na,m,xg,ra,Rg,W=vg(()=>{na=class{logDir;enabled=true;initialized=false;writeStream=null;currentLogFile=null;backpressured=false;constructor(){this.logDir=se__default.join(Dn__default.homedir(),".neox","logs");}init(){if(!this.initialized)try{Me__default.existsSync(this.logDir)||Me__default.mkdirSync(this.logDir,{recursive:!0}),this.initialized=!0;}catch{this.enabled=false;}}getLogFilePath(){let e=new Date().toISOString().split("T")[0];return se__default.join(this.logDir,`cli-${e}.log`)}ensureStream(){if(!this.enabled||(this.init(),!this.initialized))return null;let e=this.getLogFilePath();return this.currentLogFile!==e&&(this.writeStream&&this.writeStream.end(),this.writeStream=Me__default.createWriteStream(e,{flags:"a"}),this.writeStream.on("error",()=>{this.enabled=false,this.currentLogFile=null;let t=this.writeStream;this.writeStream=null;try{t?.destroy();}catch{}}),this.currentLogFile=e),this.writeStream}formatLocalTime(){let e=new Date,t=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),r=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),o=String(e.getSeconds()).padStart(2,"0"),l=String(e.getMilliseconds()).padStart(3,"0");return `${t}-${s}-${n} ${r}:${i}:${o}.${l}`}formatMessage(e,t,s,n){let r=this.formatLocalTime(),i=e.toUpperCase().padEnd(5),o=t?`[${t}]`:"",l=`${r} ${i} ${o} ${s}`;if(n!==void 0)try{let c=this.safeStringify(n);l+=` ${c}`;}catch{l+=" [Serialization Error]";}return l+`
5
- `}safeStringify(e){let t=new WeakSet;return JSON.stringify(e,(s,n)=>{if(typeof n=="object"&&n!==null){if(t.has(n))return "[Circular]";t.add(n);}return s==="parser"||s==="socket"||s==="_httpMessage"||s==="req"||s==="res"?"[Omitted]":n&&n.type==="Buffer"&&Array.isArray(n.data)?"[Buffer]":typeof n=="function"?"[Function]":n instanceof Error?{name:n.name,message:n.message,stack:n.stack}:n})}write(e,t,s,n){if(!this.enabled||this.backpressured&&e==="debug")return;let r=this.formatMessage(e,t,s,n);if(process.env.CLI_DEBUG_CONSOLE==="1")try{process.stderr.write(r);}catch{}let i=this.ensureStream();if(!i)return;!i.write(r)&&!this.backpressured&&(this.backpressured=true,i.once("drain",()=>{this.backpressured=false;}));}debug(e,t,s){this.write("debug",e,t,s);}info(e,t,s){this.write("info",e,t,s);}warn(e,t,s){this.write("warn",e,t,s);}error(e,t,s){this.write("error",e,t,s);}log(e,...t){let s=t.map(n=>{if(typeof n=="string")return n;try{return this.safeStringify(n)}catch{return String(n)}}).join(" ");this.write("info",e,s);}setEnabled(e){this.enabled=e;}getLogDir(){return this.logDir}getCurrentLogFile(){return this.currentLogFile}close(){this.writeStream&&(this.writeStream.end(),this.writeStream=null,this.currentLogFile=null);}},m=new na,xg=new Set(["api_key","apikey","authorization","token","access_token","refresh_token","password","secret"]);ra=class{intervalId=null;lastHeartbeat=Date.now();heartbeatCount=0;stdinPausedCount=0;enabled=false;pid=process.pid;start(e=5e3){if(!(this.intervalId||process.env.CLI_DEBUG!=="1")){if(!process.stdin.isTTY){m.debug("HEALTH",`Skipping health monitor in non-TTY process (pid=${this.pid})`);return}this.enabled=true,this.lastHeartbeat=Date.now(),this.heartbeatCount=0,this.stdinPausedCount=0,m.info("HEALTH",`Health monitor started (interval: ${e}ms, pid=${this.pid})`),this.intervalId=setInterval(()=>{this.checkHealth();},e),this.intervalId.unref();}}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null,this.enabled=false,m.info("HEALTH","Health monitor stopped"));}stdinDestroyedCount=0;checkHealth(){let e=Date.now(),t=e-this.lastHeartbeat;this.lastHeartbeat=e,this.heartbeatCount++;let s=this.getStdinState();if(s.isPaused?this.stdinPausedCount++:this.stdinPausedCount=0,s.destroyed){if(this.stdinDestroyedCount++,this.stdinDestroyedCount>=3){m.warn("HEALTH",`[pid=${this.pid}] stdin destroyed for ${this.stdinDestroyedCount} checks, exiting to avoid zombie process`),this.stop(),setTimeout(()=>{process.exit(0);},100);return}}else this.stdinDestroyedCount=0;m.debug("HEALTH",`[pid=${this.pid}] Heartbeat #${this.heartbeatCount}`,{elapsed:`${t}ms`,stdin:s,stdinPausedCount:this.stdinPausedCount}),this.stdinPausedCount>=3&&m.warn("HEALTH",`[pid=${this.pid}] \u26A0\uFE0F stdin has been paused for ${this.stdinPausedCount} consecutive checks!`,{stdin:s}),t>1e4&&m.warn("HEALTH",`[pid=${this.pid}] \u26A0\uFE0F Event loop delay detected: ${t}ms (expected ~5000ms)`);}getStdinState(){let e=process.stdin;return {isPaused:typeof e.isPaused=="function"?e.isPaused():false,isTTY:!!e.isTTY,isRaw:!!e.isRaw,readable:e.readable,destroyed:e.destroyed}}logStdinState(e){if(process.env.CLI_DEBUG!=="1")return;let t=this.getStdinState();m.debug("STDIN",`[${e}] stdin state`,t);}logInkState(e,t){process.env.CLI_DEBUG==="1"&&m.debug("INK",`[${e}]`,t);}},Rg=new ra;});var Ju=Xc((l0,Hu)=>{Hu.exports=qu;function qu(a,e,t){a instanceof RegExp&&(a=Wu(a,t)),e instanceof RegExp&&(e=Wu(e,t));var s=zu(a,e,t);return s&&{start:s[0],end:s[1],pre:t.slice(0,s[0]),body:t.slice(s[0]+a.length,s[1]),post:t.slice(s[1]+e.length)}}function Wu(a,e){var t=e.match(a);return t?t[0]:null}qu.range=zu;function zu(a,e,t){var s,n,r,i,o,l=t.indexOf(a),c=t.indexOf(e,l+1),u=l;if(l>=0&&c>0){if(a===e)return [l,c];for(s=[],r=t.length;u>=0&&!o;)u==l?(s.push(u),l=t.indexOf(a,u+1)):s.length==1?o=[s.pop(),c]:(n=s.pop(),n<r&&(r=n,i=c),c=t.indexOf(e,u+1)),u=l<c&&l>=0?l:c;s.length&&(o=[r,i]);}return o}});var td=Xc((c0,ed)=>{var Ku=Ju();ed.exports=Mf;var Vu="\0SLASH"+Math.random()+"\0",Yu="\0OPEN"+Math.random()+"\0",Ba="\0CLOSE"+Math.random()+"\0",Xu="\0COMMA"+Math.random()+"\0",Qu="\0PERIOD"+Math.random()+"\0";function ja(a){return parseInt(a,10)==a?parseInt(a,10):a.charCodeAt(0)}function Ef(a){return a.split("\\\\").join(Vu).split("\\{").join(Yu).split("\\}").join(Ba).split("\\,").join(Xu).split("\\.").join(Qu)}function If(a){return a.split(Vu).join("\\").split(Yu).join("{").split(Ba).join("}").split(Xu).join(",").split(Qu).join(".")}function Zu(a){if(!a)return [""];var e=[],t=Ku("{","}",a);if(!t)return a.split(",");var s=t.pre,n=t.body,r=t.post,i=s.split(",");i[i.length-1]+="{"+n+"}";var o=Zu(r);return r.length&&(i[i.length-1]+=o.shift(),i.push.apply(i,o)),e.push.apply(e,i),e}function Mf(a){return a?(a.substr(0,2)==="{}"&&(a="\\{\\}"+a.substr(2)),Wn(Ef(a),true).map(If)):[]}function Pf(a){return "{"+a+"}"}function Df(a){return /^-?0\d/.test(a)}function Of(a,e){return a<=e}function Lf(a,e){return a>=e}function Wn(a,e){var t=[],s=Ku("{","}",a);if(!s)return [a];var n=s.pre,r=s.post.length?Wn(s.post,false):[""];if(/\$$/.test(s.pre))for(var i=0;i<r.length;i++){var o=n+"{"+s.body+"}"+r[i];t.push(o);}else {var l=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(s.body),c=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(s.body),u=l||c,d=s.body.indexOf(",")>=0;if(!u&&!d)return s.post.match(/,(?!,).*\}/)?(a=s.pre+"{"+s.body+Ba+s.post,Wn(a)):[a];var p;if(u)p=s.body.split(/\.\./);else if(p=Zu(s.body),p.length===1&&(p=Wn(p[0],false).map(Pf),p.length===1))return r.map(function(R){return s.pre+p[0]+R});var h;if(u){var g=ja(p[0]),f=ja(p[1]),b=Math.max(p[0].length,p[1].length),y=p.length==3?Math.abs(ja(p[2])):1,w=Of,C=f<g;C&&(y*=-1,w=Lf);var S=p.some(Df);h=[];for(var T=g;w(T,f);T+=y){var _;if(c)_=String.fromCharCode(T),_==="\\"&&(_="");else if(_=String(T),S){var M=b-_.length;if(M>0){var F=new Array(M+1).join("0");T<0?_="-"+F+_.slice(1):_=F+_;}}h.push(_);}}else {h=[];for(var x=0;x<p.length;x++)h.push.apply(h,Wn(p[x],false));}for(var x=0;x<h.length;x++)for(var i=0;i<r.length;i++){var o=n+h[x]+r[i];(!e||u||o)&&t.push(o);}}return t}});W();var Wr=class{hosts=new Map;hostConfigs=new Map;workspacePath=null;setWorkspace(e){this.workspacePath=e;for(let t of this.hosts.values())try{t.setWorkDir(e);}catch{}}getWorkspace(){return this.workspacePath}getHost(e){return this.hosts.get(e)}hasHost(e){return this.hosts.has(e)}getHostConfig(e){return this.hostConfigs.get(e)}clearHost(e){this.hosts.delete(e),this.hostConfigs.delete(e);}clearAll(){for(let e of this.hosts.values())try{e.interrupt();}catch{}this.hosts.clear(),this.hostConfigs.clear();}forEachHost(e){for(let[t,s]of this.hosts.entries())e(s,t);}async getOrCreateHost(e){let{sessionId:t,configKey:s,createHost:n}=e,r=this.hosts.get(t);if(r){let o=this.hostConfigs.get(t);if(o===s)return m.info("HOST_CONTROLLER",`\u{1F504} Reusing existing host for session=${t}, configKey=${s}`),r;m.info("HOST_CONTROLLER",`\u{1F5D1}\uFE0F Clearing old host: session=${t}, oldKey=${o}, newKey=${s}`),this.clearHost(t);}m.info("HOST_CONTROLLER",`\u2728 Creating NEW host: session=${t}, configKey=${s}`);let i=await n();return this.hosts.set(t,i),this.hostConfigs.set(t,s),this.workspacePath&&i.setWorkDir(this.workspacePath),i}};function me(a){return a===null?"":typeof a=="string"?a:a.filter(e=>e.type==="text").map(e=>e.text).join("")}var Eg={unknown:0,normal:1,warn:2,soft_limit:3,limit:4};function qr(a){if(!a)return 0;let e=a.trim();return e.length?Math.ceil(e.length/4):0}function Mt(a){let e=me(a.content),t=qr(e),s=a.tool_calls?.length?qr(JSON.stringify(a.tool_calls)):0;return t+s}function tt(a){return a.reduce((e,t)=>e+Mt(t),0)}function Bs(a){let e={systemTokens:0,userTokens:0,assistantTokens:0,toolCallTokens:0,toolResultTokens:0,totalTokens:0};for(let t of a){let s=me(t.content),n=qr(s),r=t.tool_calls?.length?qr(JSON.stringify(t.tool_calls)):0;switch(t.role){case "system":e.systemTokens+=n;break;case "user":e.userTokens+=n;break;case "assistant":e.assistantTokens+=n,e.toolCallTokens+=r;break;case "tool":e.toolResultTokens+=n;break;default:e.userTokens+=n+r;}}return e.totalTokens=e.systemTokens+e.userTokens+e.assistantTokens+e.toolCallTokens+e.toolResultTokens,e}function Ig(a,e,t){return !a.contextWindow&&!a.autoCompactLimit?"unknown":a.autoCompactLimit&&e>=a.autoCompactLimit?"limit":t===void 0||a.contextWindow===void 0?"unknown":t>=a.warnThresholds.hard?"limit":t>=a.warnThresholds.soft?"soft_limit":t>=a.warnThresholds.warn?"warn":"normal"}var zr=class{profile;promptTokensActual=0;completionTokensActual=0;promptTokensEstimate=0;completionTokensEstimate=0;constructor(e){this.profile=e;}updateProfile(e){this.profile=e,this.reset();}reset(){this.promptTokensActual=0,this.completionTokensActual=0,this.promptTokensEstimate=0,this.completionTokensEstimate=0;}setPromptEstimateFromMessages(e){return this.promptTokensActual>0?(this.completionTokensEstimate=0,this.getSnapshot()):(this.promptTokensEstimate=tt(e),this.promptTokensActual=0,this.completionTokensActual=0,this.completionTokensEstimate=0,this.getSnapshot())}addEstimatedOutputTokens(e){return this.completionTokensEstimate=Math.max(0,this.completionTokensEstimate+e),this.getSnapshot()}recordActualUsage(e,t,s){return this.promptTokensActual=e,this.completionTokensActual=t,this.promptTokensEstimate=0,this.completionTokensEstimate=0,this.getSnapshot(s)}getSnapshot(e){let t=this.promptTokensActual||this.promptTokensEstimate,s=this.completionTokensActual+this.completionTokensEstimate,n=t+s,r=this.profile.contextWindow?n/this.profile.contextWindow:void 0,i=Ig(this.profile,n,r);return {profile:this.profile,tokensUsed:n,promptTokens:t,completionTokens:s,messageCount:e,pressure:r,state:i,timestamp:Date.now()}}getStateRank(e){return Eg[e]}estimateMessagesForDisplay(e){return tt(e)}recordCalibration(e,t,s){if(process.env.CLI_DEBUG){let n=t+s,r=e>0?n/e:0;console.log(`[MemoryPressure] \u6821\u51C6: \u4F30\u7B97=${e}, \u5B9E\u9645=${n}, \u6BD4\u7387=${r.toFixed(3)}`);}}};function Gs(){let a=new Date,e=a.toISOString().slice(0,10).replace(/-/g,""),t=a.toISOString().slice(11,19).replace(/:/g,""),s=Math.random().toString(36).slice(2,6);return `session_${e}_${t}_${s}`}var hs=class a{sessionId;filePath;directory;options;sequenceNumber=0;initialized=false;constructor(e){typeof e=="string"&&(e={sessionId:e}),this.sessionId=e.sessionId,this.options=e,this.directory=e.directory||se__default.join(Dn__default.homedir(),".neox","sessions"),this.filePath=se__default.join(this.directory,`${this.sessionId}.jsonl`);}async ensureDirectory(){await ce__default.mkdir(this.directory,{recursive:true});}async ensureInitialized(){if(!this.initialized){await this.ensureDirectory();try{await ce__default.access(this.filePath);let e=await this.readAllItems();e.length>0&&(this.sequenceNumber=Math.max(...e.map(t=>t.seq))+1);}catch{if(this.options.autoCreateMeta!==false){let e={sessionId:this.sessionId,createdAt:new Date().toISOString(),agentName:this.options.agentName,model:this.options.model};await this.appendItem({type:"meta",data:e});}}this.initialized=true;}}async readAllItems(){let e=[];try{let t=Me__default.createReadStream(this.filePath,{encoding:"utf-8"}),s=la.createInterface({input:t,crlfDelay:1/0});for await(let n of s)if(n.trim())try{let r=JSON.parse(n);e.push(r);}catch{console.warn(`Invalid JSONL line: ${n.slice(0,50)}...`);}}catch(t){if(t.code!=="ENOENT")throw t}return e.sort((t,s)=>t.seq-s.seq),e}async appendItem(e){await this.ensureDirectory();let t={item:e,timestamp:Date.now(),seq:this.sequenceNumber++},s=JSON.stringify(t)+`
5
+ `}safeStringify(e){let t=new WeakSet;return JSON.stringify(e,(s,n)=>{if(typeof n=="object"&&n!==null){if(t.has(n))return "[Circular]";t.add(n);}return s==="parser"||s==="socket"||s==="_httpMessage"||s==="req"||s==="res"?"[Omitted]":n&&n.type==="Buffer"&&Array.isArray(n.data)?"[Buffer]":typeof n=="function"?"[Function]":n instanceof Error?{name:n.name,message:n.message,stack:n.stack}:n})}write(e,t,s,n){if(!this.enabled||this.backpressured&&e==="debug")return;let r=this.formatMessage(e,t,s,n);if(process.env.CLI_DEBUG_CONSOLE==="1")try{process.stderr.write(r);}catch{}let i=this.ensureStream();if(!i)return;!i.write(r)&&!this.backpressured&&(this.backpressured=true,i.once("drain",()=>{this.backpressured=false;}));}debug(e,t,s){this.write("debug",e,t,s);}info(e,t,s){this.write("info",e,t,s);}warn(e,t,s){this.write("warn",e,t,s);}error(e,t,s){this.write("error",e,t,s);}log(e,...t){let s=t.map(n=>{if(typeof n=="string")return n;try{return this.safeStringify(n)}catch{return String(n)}}).join(" ");this.write("info",e,s);}setEnabled(e){this.enabled=e;}getLogDir(){return this.logDir}getCurrentLogFile(){return this.currentLogFile}close(){this.writeStream&&(this.writeStream.end(),this.writeStream=null,this.currentLogFile=null);}},m=new na,xg=new Set(["api_key","apikey","authorization","token","access_token","refresh_token","password","secret"]);ra=class{intervalId=null;lastHeartbeat=Date.now();heartbeatCount=0;stdinPausedCount=0;enabled=false;pid=process.pid;start(e=5e3){if(!(this.intervalId||process.env.CLI_DEBUG!=="1")){if(!process.stdin.isTTY){m.debug("HEALTH",`Skipping health monitor in non-TTY process (pid=${this.pid})`);return}this.enabled=true,this.lastHeartbeat=Date.now(),this.heartbeatCount=0,this.stdinPausedCount=0,m.info("HEALTH",`Health monitor started (interval: ${e}ms, pid=${this.pid})`),this.intervalId=setInterval(()=>{this.checkHealth();},e),this.intervalId.unref();}}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null,this.enabled=false,m.info("HEALTH","Health monitor stopped"));}stdinDestroyedCount=0;checkHealth(){let e=Date.now(),t=e-this.lastHeartbeat;this.lastHeartbeat=e,this.heartbeatCount++;let s=this.getStdinState();if(s.isPaused?this.stdinPausedCount++:this.stdinPausedCount=0,s.destroyed){if(this.stdinDestroyedCount++,this.stdinDestroyedCount>=3){m.warn("HEALTH",`[pid=${this.pid}] stdin destroyed for ${this.stdinDestroyedCount} checks, exiting to avoid zombie process`),this.stop(),setTimeout(()=>{process.exit(0);},100);return}}else this.stdinDestroyedCount=0;m.debug("HEALTH",`[pid=${this.pid}] Heartbeat #${this.heartbeatCount}`,{elapsed:`${t}ms`,stdin:s,stdinPausedCount:this.stdinPausedCount}),this.stdinPausedCount>=3&&m.warn("HEALTH",`[pid=${this.pid}] \u26A0\uFE0F stdin has been paused for ${this.stdinPausedCount} consecutive checks!`,{stdin:s}),t>1e4&&m.warn("HEALTH",`[pid=${this.pid}] \u26A0\uFE0F Event loop delay detected: ${t}ms (expected ~5000ms)`);}getStdinState(){let e=process.stdin;return {isPaused:typeof e.isPaused=="function"?e.isPaused():false,isTTY:!!e.isTTY,isRaw:!!e.isRaw,readable:e.readable,destroyed:e.destroyed}}logStdinState(e){if(process.env.CLI_DEBUG!=="1")return;let t=this.getStdinState();m.debug("STDIN",`[${e}] stdin state`,t);}logInkState(e,t){process.env.CLI_DEBUG==="1"&&m.debug("INK",`[${e}]`,t);}},Rg=new ra;});var Ju=Xc((l0,Hu)=>{Hu.exports=qu;function qu(a,e,t){a instanceof RegExp&&(a=Wu(a,t)),e instanceof RegExp&&(e=Wu(e,t));var s=zu(a,e,t);return s&&{start:s[0],end:s[1],pre:t.slice(0,s[0]),body:t.slice(s[0]+a.length,s[1]),post:t.slice(s[1]+e.length)}}function Wu(a,e){var t=e.match(a);return t?t[0]:null}qu.range=zu;function zu(a,e,t){var s,n,r,i,o,l=t.indexOf(a),c=t.indexOf(e,l+1),u=l;if(l>=0&&c>0){if(a===e)return [l,c];for(s=[],r=t.length;u>=0&&!o;)u==l?(s.push(u),l=t.indexOf(a,u+1)):s.length==1?o=[s.pop(),c]:(n=s.pop(),n<r&&(r=n,i=c),c=t.indexOf(e,u+1)),u=l<c&&l>=0?l:c;s.length&&(o=[r,i]);}return o}});var td=Xc((c0,ed)=>{var Ku=Ju();ed.exports=Mf;var Vu="\0SLASH"+Math.random()+"\0",Yu="\0OPEN"+Math.random()+"\0",Ba="\0CLOSE"+Math.random()+"\0",Xu="\0COMMA"+Math.random()+"\0",Qu="\0PERIOD"+Math.random()+"\0";function ja(a){return parseInt(a,10)==a?parseInt(a,10):a.charCodeAt(0)}function Ef(a){return a.split("\\\\").join(Vu).split("\\{").join(Yu).split("\\}").join(Ba).split("\\,").join(Xu).split("\\.").join(Qu)}function If(a){return a.split(Vu).join("\\").split(Yu).join("{").split(Ba).join("}").split(Xu).join(",").split(Qu).join(".")}function Zu(a){if(!a)return [""];var e=[],t=Ku("{","}",a);if(!t)return a.split(",");var s=t.pre,n=t.body,r=t.post,i=s.split(",");i[i.length-1]+="{"+n+"}";var o=Zu(r);return r.length&&(i[i.length-1]+=o.shift(),i.push.apply(i,o)),e.push.apply(e,i),e}function Mf(a){return a?(a.substr(0,2)==="{}"&&(a="\\{\\}"+a.substr(2)),Wn(Ef(a),true).map(If)):[]}function Pf(a){return "{"+a+"}"}function Df(a){return /^-?0\d/.test(a)}function Of(a,e){return a<=e}function Lf(a,e){return a>=e}function Wn(a,e){var t=[],s=Ku("{","}",a);if(!s)return [a];var n=s.pre,r=s.post.length?Wn(s.post,false):[""];if(/\$$/.test(s.pre))for(var i=0;i<r.length;i++){var o=n+"{"+s.body+"}"+r[i];t.push(o);}else {var l=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(s.body),c=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(s.body),u=l||c,d=s.body.indexOf(",")>=0;if(!u&&!d)return s.post.match(/,(?!,).*\}/)?(a=s.pre+"{"+s.body+Ba+s.post,Wn(a)):[a];var p;if(u)p=s.body.split(/\.\./);else if(p=Zu(s.body),p.length===1&&(p=Wn(p[0],false).map(Pf),p.length===1))return r.map(function(R){return s.pre+p[0]+R});var h;if(u){var g=ja(p[0]),f=ja(p[1]),b=Math.max(p[0].length,p[1].length),y=p.length==3?Math.abs(ja(p[2])):1,w=Of,C=f<g;C&&(y*=-1,w=Lf);var S=p.some(Df);h=[];for(var T=g;w(T,f);T+=y){var _;if(c)_=String.fromCharCode(T),_==="\\"&&(_="");else if(_=String(T),S){var M=b-_.length;if(M>0){var F=new Array(M+1).join("0");T<0?_="-"+F+_.slice(1):_=F+_;}}h.push(_);}}else {h=[];for(var x=0;x<p.length;x++)h.push.apply(h,Wn(p[x],false));}for(var x=0;x<h.length;x++)for(var i=0;i<r.length;i++){var o=n+h[x]+r[i];(!e||u||o)&&t.push(o);}}return t}});W();var Wr=class{hosts=new Map;hostConfigs=new Map;workspacePath=null;setWorkspace(e){this.workspacePath=e;for(let t of this.hosts.values())try{t.setWorkDir(e);}catch{}}getWorkspace(){return this.workspacePath}getHost(e){return this.hosts.get(e)}hasHost(e){return this.hosts.has(e)}getHostConfig(e){return this.hostConfigs.get(e)}clearHost(e){this.hosts.delete(e),this.hostConfigs.delete(e);}clearAll(){for(let e of this.hosts.values())try{e.interrupt();}catch{}this.hosts.clear(),this.hostConfigs.clear();}forEachHost(e){for(let[t,s]of this.hosts.entries())e(s,t);}async getOrCreateHost(e){let{sessionId:t,configKey:s,createHost:n}=e,r=this.hosts.get(t);if(r){let o=this.hostConfigs.get(t);if(o===s)return m.info("HOST_CONTROLLER",`\u{1F504} Reusing existing host for session=${t}, configKey=${s}`),r;m.info("HOST_CONTROLLER",`\u{1F5D1}\uFE0F Clearing old host: session=${t}, oldKey=${o}, newKey=${s}`),this.clearHost(t);}m.info("HOST_CONTROLLER",`\u2728 Creating NEW host: session=${t}, configKey=${s}`);let i=await n();return this.hosts.set(t,i),this.hostConfigs.set(t,s),this.workspacePath&&i.setWorkDir(this.workspacePath),i}};function me(a){return a===null?"":typeof a=="string"?a:a.filter(e=>e.type==="text").map(e=>e.text).join("")}var Eg={unknown:0,normal:1,warn:2,soft_limit:3,limit:4};function qr(a){if(!a)return 0;let e=a.trim();return e.length?Math.ceil(e.length/4):0}function Mt(a){let e=me(a.content),t=qr(e),s=a.tool_calls?.length?qr(JSON.stringify(a.tool_calls)):0;return t+s}function tt(a){return a.reduce((e,t)=>e+Mt(t),0)}function Bs(a){let e={systemTokens:0,userTokens:0,assistantTokens:0,toolCallTokens:0,toolResultTokens:0,totalTokens:0};for(let t of a){let s=me(t.content),n=qr(s),r=t.tool_calls?.length?qr(JSON.stringify(t.tool_calls)):0;switch(t.role){case "system":e.systemTokens+=n;break;case "user":e.userTokens+=n;break;case "assistant":e.assistantTokens+=n,e.toolCallTokens+=r;break;case "tool":e.toolResultTokens+=n;break;default:e.userTokens+=n+r;}}return e.totalTokens=e.systemTokens+e.userTokens+e.assistantTokens+e.toolCallTokens+e.toolResultTokens,e}function Ig(a,e,t){return !a.contextWindow&&!a.autoCompactLimit?"unknown":a.autoCompactLimit&&e>=a.autoCompactLimit?"limit":t===void 0||a.contextWindow===void 0?"unknown":t>=a.warnThresholds.hard?"limit":t>=a.warnThresholds.soft?"soft_limit":t>=a.warnThresholds.warn?"warn":"normal"}var zr=class{profile;promptTokensActual=0;completionTokensActual=0;promptTokensEstimate=0;completionTokensEstimate=0;constructor(e){this.profile=e;}updateProfile(e){this.profile=e,this.reset();}reset(){this.promptTokensActual=0,this.completionTokensActual=0,this.promptTokensEstimate=0,this.completionTokensEstimate=0;}setPromptEstimateFromMessages(e){return this.promptTokensActual>0?(this.completionTokensEstimate=0,this.getSnapshot()):(this.promptTokensEstimate=tt(e),this.promptTokensActual=0,this.completionTokensActual=0,this.completionTokensEstimate=0,this.getSnapshot())}addEstimatedOutputTokens(e){return this.completionTokensEstimate=Math.max(0,this.completionTokensEstimate+e),this.getSnapshot()}recordActualUsage(e,t,s){return this.promptTokensActual=e,this.completionTokensActual=t,this.promptTokensEstimate=0,this.completionTokensEstimate=0,this.getSnapshot(s)}getSnapshot(e){let t=this.promptTokensActual||this.promptTokensEstimate,s=this.completionTokensActual+this.completionTokensEstimate,n=t+s,r=this.profile.contextWindow?n/this.profile.contextWindow:void 0,i=Ig(this.profile,n,r);return {profile:this.profile,tokensUsed:n,promptTokens:t,completionTokens:s,messageCount:e,pressure:r,state:i,timestamp:Date.now()}}getStateRank(e){return Eg[e]}estimateMessagesForDisplay(e){return tt(e)}recordCalibration(e,t,s){if(process.env.CLI_DEBUG){let n=t+s,r=e>0?n/e:0;console.log(`[MemoryPressure] \u6821\u51C6: \u4F30\u7B97=${e}, \u5B9E\u9645=${n}, \u6BD4\u7387=${r.toFixed(3)}`);}}};function Gs(){let a=new Date,e=a.toISOString().slice(0,10).replace(/-/g,""),t=a.toISOString().slice(11,19).replace(/:/g,""),s=Math.random().toString(36).slice(2,6);return `session_${e}_${t}_${s}`}var fs=class a{sessionId;filePath;directory;options;sequenceNumber=0;initialized=false;constructor(e){typeof e=="string"&&(e={sessionId:e}),this.sessionId=e.sessionId,this.options=e,this.directory=e.directory||se__default.join(Dn__default.homedir(),".neox","sessions"),this.filePath=se__default.join(this.directory,`${this.sessionId}.jsonl`);}async ensureDirectory(){await ce__default.mkdir(this.directory,{recursive:true});}async ensureInitialized(){if(!this.initialized){await this.ensureDirectory();try{await ce__default.access(this.filePath);let e=await this.readAllItems();e.length>0&&(this.sequenceNumber=Math.max(...e.map(t=>t.seq))+1);}catch{if(this.options.autoCreateMeta!==false){let e={sessionId:this.sessionId,createdAt:new Date().toISOString(),agentName:this.options.agentName,model:this.options.model};await this.appendItem({type:"meta",data:e});}}this.initialized=true;}}async readAllItems(){let e=[];try{let t=Me__default.createReadStream(this.filePath,{encoding:"utf-8"}),s=la.createInterface({input:t,crlfDelay:1/0});for await(let n of s)if(n.trim())try{let r=JSON.parse(n);e.push(r);}catch{console.warn(`Invalid JSONL line: ${n.slice(0,50)}...`);}}catch(t){if(t.code!=="ENOENT")throw t}return e.sort((t,s)=>t.seq-s.seq),e}async appendItem(e){await this.ensureDirectory();let t={item:e,timestamp:Date.now(),seq:this.sequenceNumber++},s=JSON.stringify(t)+`
6
6
  `;await ce__default.appendFile(this.filePath,s,"utf-8");}async writeAllItems(e){await this.ensureDirectory();let t=e.map(s=>JSON.stringify(s)).join(`
7
7
  `);await ce__default.writeFile(this.filePath,t?t+`
8
- `:"","utf-8"),e.length>0?this.sequenceNumber=Math.max(...e.map(s=>s.seq))+1:this.sequenceNumber=0;}async getItems(e){await this.ensureInitialized();let s=(await this.readAllItems()).map(n=>n.item);return e===void 0?s:s.slice(-e)}async addItems(e){if(e.length!==0){await this.ensureInitialized();for(let t of e)await this.appendItem(t);}}async popItem(){await this.ensureInitialized();let e=await this.readAllItems();if(e.length===0)return null;let t=e.pop();return await this.writeAllItems(e),t.item}async popItems(e){if(e<=0)return [];await this.ensureInitialized();let t=await this.readAllItems();if(t.length===0)return [];let s=Math.min(e,t.length),n=t.splice(-s);return await this.writeAllItems(t),n.map(r=>r.item)}async createCheckpoint(e,t){await this.ensureInitialized();let s=`cp_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,n={type:"checkpoint",data:{id:s,name:e,description:t}};return await this.appendItem(n),s}async rollbackToCheckpoint(e){await this.ensureInitialized();let t=await this.readAllItems(),s=t.findIndex(i=>i.item.type==="checkpoint"&&i.item.data.id===e);if(s===-1)throw new Error(`Checkpoint not found: ${e}`);let n=t.slice(0,s+1),r=t.length-n.length;return await this.writeAllItems(n),r}async getCheckpoints(){await this.ensureInitialized();let e=await this.readAllItems(),t=[];for(let s of e)if(s.item.type==="checkpoint"){let n=s.item;t.push({id:n.data.id,name:n.data.name,timestamp:s.timestamp});}return t}async clearSession(){try{await ce__default.unlink(this.filePath);}catch(e){if(e.code!=="ENOENT")throw e}this.sequenceNumber=0,this.initialized=false;}async getMeta(){await this.ensureInitialized();let e=await this.readAllItems();for(let t of e)if(t.item.type==="meta")return t.item.data;return null}async getMessages(){await this.ensureInitialized();let e=await this.readAllItems(),t=[];for(let s of e)s.item.type==="message"&&t.push(s.item.data);return t}async getItemCount(){return (await this.readAllItems()).length}async getTimeline(){return await this.ensureInitialized(),await this.readAllItems()}async replaceTimeline(e){await this.ensureDirectory();let t=e.map((s,n)=>({item:s.item,timestamp:s.timestamp??Date.now(),seq:n}));await this.writeAllItems(t),this.initialized=true;}static async listSessions(e){let t=e||se__default.join(Dn__default.homedir(),".neox","sessions");try{return (await ce__default.readdir(t)).filter(n=>n.endsWith(".jsonl")).map(n=>n.replace(".jsonl",""))}catch{return []}}static async getMostRecentId(e){let t=e||se__default.join(Dn__default.homedir(),".neox","sessions");try{let n=(await ce__default.readdir(t)).filter(i=>i.endsWith(".jsonl"));if(n.length===0)return null;let r=await Promise.all(n.map(async i=>({name:i.replace(".jsonl",""),mtime:(await ce__default.stat(se__default.join(t,i))).mtime})));return r.sort((i,o)=>o.mtime.getTime()-i.mtime.getTime()),r[0].name}catch{return null}}static async deleteSession(e,t){let s=t||se__default.join(Dn__default.homedir(),".neox","sessions"),n=se__default.join(s,`${e}.jsonl`);try{return await ce__default.unlink(n),!0}catch{return false}}static async getSessionInfo(e,t){let s=t||se__default.join(Dn__default.homedir(),".neox","sessions"),n=se__default.join(s,`${e}.jsonl`);try{let r=await ce__default.stat(n);return {sessionId:e,filePath:n,size:r.size,createdAt:r.birthtime,updatedAt:r.mtime}}catch{return null}}static create(e){return new a({sessionId:Gs(),...e})}};W();function X(a,e,t,s){return {type:"ephemeral",status:e,tool:a,summary:t,final:e==="success"||e==="already_done",...s}}function ve(a,e,t,s,n){return {type:"contextual",status:e,tool:a,summary:t,content:s,...n}}function Yt(a,e,t,s){return {type:"summarized",status:e,tool:a,summary:t,...s}}function eu(a){m.info("TOOL_RESULT",`\u{1F504} getResultForLLM input: ${a.tool}`,{type:a.type,status:a.status,tool:a.tool,hasContent:!!a.content,contentLength:a.content?.length||0,summary:a.summary?.substring(0,100)});let e;if(a.type==="ephemeral")if(a.status==="error")a.tool==="edit_file"?e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,error:a.error,verify_hint:a.verify_hint,file_path:a.file_path,actual_content:a.actual_content,expected_start_line:a.expected_start_line,similar_matches:a.metadata?.similar_matches,suggestions:a.metadata?.suggestions}):e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,error:a.error,verify_hint:a.verify_hint,file_path:a.file_path,similar_matches:a.metadata?.similar_matches,suggestions:a.metadata?.suggestions});else {let t=a.metadata?.edit_info;if(a.tool==="edit_file"&&t){let s=t.old_string?t.old_string.length>1e3?t.old_string.substring(0,1e3)+"...":t.old_string:void 0,n=t.new_string?t.new_string.length>1e3?t.new_string.substring(0,1e3)+"...":t.new_string:void 0;e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,final:a.final,file_path:a.file_path,old_string_preview:s,new_string_preview:n,start_line:t.start_line});}else e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,final:a.final,file_path:a.file_path});}else a.type==="summarized"?e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,error:a.error}):e=JSON.stringify(a);return m.info("TOOL_RESULT",`\u2705 getResultForLLM output: ${a.tool}`,{type:a.type,tool:a.tool,llmResultLength:e.length,llmResultPreview:e.substring(0,500)}),e}var oa={write_file:"ephemeral",Write:"ephemeral",edit_file:"ephemeral",Edit:"ephemeral",create_directory:"ephemeral",mkdir:"ephemeral",delete_file:"ephemeral",rename_file:"ephemeral",apply_patch:"ephemeral",move_file:"ephemeral",copy_file:"ephemeral",git_commit:"ephemeral",git_add:"ephemeral",git_push:"ephemeral",git_checkout:"ephemeral",git_branch:"ephemeral",git_merge:"ephemeral",git_stash:"ephemeral",npm_install:"ephemeral",npm_uninstall:"ephemeral",pip_install:"ephemeral",readfile:"contextual",search:"contextual",grep:"contextual",Grep:"contextual",glob:"contextual",Glob:"contextual",search_files:"contextual",ripgrep:"contextual",ls:"contextual",list_directory:"contextual",show_tree:"contextual",git_diff:"contextual",git_status:"contextual",git_blame:"contextual",git_branch_list:"contextual",git_log:"contextual",git_show:"contextual",web_search:"contextual",WebSearch:"contextual",web_fetch:"contextual",WebFetch:"contextual",analyze_code:"contextual",search_symbol:"contextual",get_definitions:"contextual",get_references:"contextual",execute_shell:"summarized",Bash:"summarized",bash:"summarized",shell:"summarized",run_tests:"summarized",run_lint:"summarized",run_format:"summarized",test:"summarized",pytest:"summarized",jest:"summarized",build:"summarized",compile:"summarized",npm_build:"summarized",code_interpreter:"summarized",python_exec:"summarized",browser_debug:"summarized"};function aa(a){if(a.startsWith("mcp__"))return "summarized";if(a in oa)return oa[a];let e=a.toLowerCase();for(let[t,s]of Object.entries(oa))if(t.toLowerCase()===e)return s;return "contextual"}function tu(a){return aa(a)==="contextual"}W();function On(a){if(!a)return 0;let e=0;for(let t of a){let s=t.codePointAt(0)||0;s>=19968&&s<=40959||s>=12288&&s<=12351||s>=65280&&s<=65519||s>=44032&&s<=55215?e+=.67:e+=.25;}return Math.ceil(e)}var at=class{messages=[];maxMessages;constructor(e=500){this.maxMessages=e;}add(e){let t=typeof e.content=="string"?e.content:JSON.stringify(e.content),s=On(t),n={...e,_timestamp:Date.now(),_estimatedTokens:s};if(this.messages.push(n),e.role==="assistant"&&e.tool_calls&&e.tool_calls.length>0&&process.env.CLI_DEBUG==="1"&&m.debug("MEMORY","Assistant message with tool_calls added:",{toolCallCount:e.tool_calls.length,toolCallIds:e.tool_calls.map(r=>({id:r.id,name:r.function.name}))}),this.messages.length>this.maxMessages){let r=this.messages.filter(l=>l.role==="system"),o=this.messages.filter(l=>l.role!=="system").slice(-(this.maxMessages-r.length));this.messages=[...r,...o];}}addToolResult(e,t,s){let n=aa(t),r=null;try{let c=JSON.parse(s);c.type&&c.status&&c.summary&&(r=c);}catch{}let i,o=n;m.info("MEMORY","addToolResult: parsedResult\uFF1A"+r),m.info("MEMORY","addToolResult: effectiveResultType\uFF1A"+o),r?(o=r.type||n,i=eu(r),m.info("MEMORY","\u7CBE\u7B80\u7ED3\u679C: content \uFF1A"+i),m.info("MEMORY",`addToolResult: ${t} parsed as ToolResult`,{parsedResult:JSON.stringify(r).substring(0,500),contentAfter:i.substring(0,500),rawLength:s.length,contentLength:i.length})):(i=s,m.debug("MEMORY",`addToolResult: ${t} using raw output`,{rawOutput:s.substring(0,500),rawLength:s.length}));let l={role:"tool",tool_call_id:e,name:t,content:i,_resultType:o,_toolName:t,_timestamp:Date.now(),_estimatedTokens:On(i)};if(process.env.CLI_DEBUG==="1"&&m.debug("MEMORY","Tool result message added:",{toolName:t,toolCallId:e,contentLength:i.length,contentPreview:i.substring(0,200)}),this.messages.push(l),this.messages.length>this.maxMessages){let c=this.messages.filter(p=>p.role==="system"),d=this.messages.filter(p=>p.role!=="system").slice(-(this.maxMessages-c.length));this.messages=[...c,...d];}}stripMetadata(e){let{_resultType:t,_toolName:s,_timestamp:n,_estimatedTokens:r,_tag:i,...o}=e;return o}getAll(){return this.messages.map(e=>this.stripMetadata(e))}getRawMessages(){return this.messages}getMessagesForLLM(){let e=this.messages.map(t=>this.stripMetadata(t));if(process.env.CLI_DEBUG==="1"){let t=e.filter(r=>r.role==="assistant"),s=e.filter(r=>r.role==="tool");m.debug("MEMORY","Messages for LLM:",{totalMessages:e.length,assistantCount:t.length,toolCount:s.length,messageSequence:e.map(r=>r.role).join(" -> ")}),e.slice(-5).forEach((r,i)=>{r.role==="assistant"&&r.tool_calls?m.debug("MEMORY",`Message ${e.length-5+i} (assistant):`,{toolCalls:r.tool_calls.map(o=>({id:o.id,name:o.function.name}))}):r.role==="tool"&&m.debug("MEMORY",`Message ${e.length-5+i} (tool):`,{name:r.name,tool_call_id:r.tool_call_id,contentLength:typeof r.content=="string"?r.content.length:0});});}return e}hasConversationMessages(){return this.messages.some(e=>e.role==="user"||e.role==="assistant")}upsertSystemTagged(e,t){let s=t.trim();if(!s){this.removeSystemTagged(e);return}let n=this.messages.findIndex(o=>o.role==="system"&&o._tag===e);if(n>=0){let o=this.messages[n];if(o.content===s)return;this.messages[n]={...o,content:s,_timestamp:Date.now(),_estimatedTokens:On(s)};return}let r={role:"system",content:s,_tag:e,_timestamp:Date.now(),_estimatedTokens:On(s)},i=this.getSystemInsertIndex();this.messages=[...this.messages.slice(0,i),r,...this.messages.slice(i)];}removeSystemTagged(e){let t=this.messages.length;this.messages=this.messages.filter(s=>!(s.role==="system"&&s._tag===e)),t!==this.messages.length&&process.env.CLI_DEBUG==="1"&&m.debug("MEMORY",`Removed system tag: ${e}`);}getSystemInsertIndex(){let e=0;for(;e<this.messages.length&&this.messages[e].role==="system";)e+=1;return e}cleanupEphemeral(){let e=this.messages.length,t=new Set;for(let s of this.messages)if(s.role==="assistant"&&s.tool_calls)for(let n of s.tool_calls)n.id&&t.add(n.id);return this.messages=this.messages.filter(s=>s._resultType!=="ephemeral"||s.role!=="tool"||!s.tool_call_id?true:t.has(s.tool_call_id)),e-this.messages.length}getStats(){let e={total:this.messages.length,ephemeral:0,contextual:0,summarized:0,other:0};for(let t of this.messages)t._resultType==="ephemeral"?e.ephemeral++:t._resultType==="contextual"?e.contextual++:t._resultType==="summarized"?e.summarized++:e.other++;return e}checkContextHealth(){let e={ephemeral:{count:0,tokens:0},contextual:{count:0,tokens:0},summarized:{count:0,tokens:0},other:{count:0,tokens:0}},t=0,s=0,n=0;for(let o of this.messages){let l=o._estimatedTokens||On(typeof o.content=="string"?o.content:JSON.stringify(o.content));t+=l,o.role==="tool"?(n++,s+=l,o._resultType==="ephemeral"?(e.ephemeral.count++,e.ephemeral.tokens+=l):o._resultType==="contextual"?(e.contextual.count++,e.contextual.tokens+=l):o._resultType==="summarized"?(e.summarized.count++,e.summarized.tokens+=l):(e.other.count++,e.other.tokens+=l)):(e.other.count++,e.other.tokens+=l);}let r=t>0?s/t:0,i=[];return r>.5?i.push(`Tool results\u5360\u7528 ${(r*100).toFixed(1)}% \u7684\u4E0A\u4E0B\u6587\uFF08\u8D85\u8FC750%\u8B66\u6212\u7EBF\uFF09`):r>.4&&i.push(`Tool results\u5360\u7528 ${(r*100).toFixed(1)}% \u7684\u4E0A\u4E0B\u6587\uFF08\u63A5\u8FD1\u8B66\u6212\u7EBF\uFF09`),t>18e4?i.push(`\u4E0A\u4E0B\u6587\u5DF2\u8FBE ${t} tokens\uFF08\u8D85\u8FC7180k\uFF0C\u5EFA\u8BAE\u6E05\u7406\uFF09`):t>15e4&&i.push(`\u4E0A\u4E0B\u6587\u5DF2\u8FBE ${t} tokens\uFF08\u63A5\u8FD1180k\uFF09`),n>100?i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8FC7\u957F\uFF08${n} \u6761\uFF09`):n>60&&i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8F83\u957F\uFF08${n} \u6761\uFF09`),e.ephemeral.count>10&&i.push(`\u79EF\u7D2F\u4E86 ${e.ephemeral.count} \u6761 ephemeral \u6D88\u606F\uFF0C\u5EFA\u8BAE\u6E05\u7406`),{totalTokens:t,toolResultTokens:s,toolResultRatio:r,messageCount:this.messages.length,toolMessageCount:n,warnings:i,shouldCompress:r>.3||t>12e4,shouldCleanup:t>15e4||e.ephemeral.count>5,byType:e}}getTokenSummary(){let e=this.checkContextHealth(),t=[`Total: ${e.totalTokens} tokens`,`Tool: ${e.toolResultTokens} (${(e.toolResultRatio*100).toFixed(1)}%)`,`Messages: ${e.messageCount}`];return e.byType.ephemeral.count>0&&t.push(`Ephemeral: ${e.byType.ephemeral.count}`),t.join(" | ")}getMemoryFootprint(){let e=JSON.stringify(this.messages),t=new Blob([e]).size,s=Math.round(t/1024*10)/10,n=this.messages.length*150,r=t+n,i=Math.round(r/1024*10)/10;return {totalKB:i,messagesKB:s,messageCount:this.messages.length,averageKBPerMessage:this.messages.length>0?Math.round(i/this.messages.length*10)/10:0}}logMemoryStats(){let e=this.checkContextHealth(),t=this.getMemoryFootprint();m.info("MEMORY_STATS","ShortTermMemory snapshot",{memoryTotalKB:t.totalKB,memoryMessagesKB:t.messagesKB,avgKBPerMessage:t.averageKBPerMessage,totalTokens:e.totalTokens,toolResultTokens:e.toolResultTokens,toolResultRatio:`${(e.toolResultRatio*100).toFixed(1)}%`,messageCount:e.messageCount,toolMessageCount:e.toolMessageCount,maxMessages:this.maxMessages,byType:{ephemeral:`${e.byType.ephemeral.count} msgs, ${e.byType.ephemeral.tokens} tokens`,contextual:`${e.byType.contextual.count} msgs, ${e.byType.contextual.tokens} tokens`,summarized:`${e.byType.summarized.count} msgs, ${e.byType.summarized.tokens} tokens`,other:`${e.byType.other.count} msgs, ${e.byType.other.tokens} tokens`},warnings:e.warnings.length>0?e.warnings:["None"],shouldCompress:e.shouldCompress,shouldCleanup:e.shouldCleanup});}clear(){let e=this.messages.filter(t=>t.role==="system");this.messages=e;}setMessages(e){let t=Array.isArray(e)?e:[],s=t.filter(o=>o.role==="system"),n=t.filter(o=>o.role!=="system"),r=Math.max(0,this.maxMessages-s.length),i=r>0?n.slice(-r):[];this.messages=[...s,...i].map(o=>({...o,_timestamp:Date.now()}));}get length(){return this.messages.length}};var Xt=class{directory;options;sessionCache=new Map;constructor(e){this.options=e||{},this.directory=e?.directory||se__default.join(Dn__default.homedir(),".neox","sessions");}async getSession(e){if(this.sessionCache.has(e))return this.sessionCache.get(e);let t=new hs({sessionId:e,directory:this.directory,agentName:this.options.defaultAgentName,model:this.options.defaultModel});return this.sessionCache.set(e,t),t}async listSessions(){let e=[];try{await ce__default.mkdir(this.directory,{recursive:!0});let t=await ce__default.readdir(this.directory);for(let s of t){if(!s.endsWith(".jsonl"))continue;let n=s.replace(".jsonl",""),r=se__default.join(this.directory,s);try{let i=await ce__default.stat(r),o=await this.readSessionMeta(r),l=await this.countItems(r);e.push({sessionId:n,createdAt:i.birthtime,updatedAt:i.mtime,itemCount:l,agentName:o?.agentName});}catch{}}}catch(t){if(t.code!=="ENOENT")throw t}return e.sort((t,s)=>s.updatedAt.getTime()-t.updatedAt.getTime()),e}async getMostRecent(){let e=await this.listSessions();return e.length===0?null:this.getSession(e[0].sessionId)}async deleteSession(e){this.sessionCache.delete(e);let t=se__default.join(this.directory,`${e}.jsonl`);try{return await ce__default.unlink(t),!0}catch{return false}}async searchSessions(e){let t=await this.listSessions(),s=e.toLowerCase(),n=[];for(let r of t){if(r.sessionId.toLowerCase().includes(s)){n.push(r);continue}if(r.agentName?.toLowerCase().includes(s)){n.push(r);continue}let i=se__default.join(this.directory,`${r.sessionId}.jsonl`);await this.searchInFile(i,s)&&n.push(r);}return n}async createSession(e){let t=e?.sessionId||Gs(),s=new hs({sessionId:t,directory:this.directory,agentName:e?.agentName||this.options.defaultAgentName,model:e?.model||this.options.defaultModel});return this.sessionCache.set(t,s),s}async getOrCreateSession(e){return e?this.getSession(e):this.createSession()}async continueOrCreate(){let e=await this.getMostRecent();return e||this.createSession()}async cleanupOldSessions(e=30){let t=await this.listSessions(),s=Date.now()-e*24*60*60*1e3,n=0;for(let r of t)r.updatedAt.getTime()<s&&await this.deleteSession(r.sessionId)&&n++;return n}getDirectory(){return this.directory}async getSessionCount(){return (await this.listSessions()).length}async exportSession(e){let t=await this.getSession(e),s=await t.getItems(),n=await t.getMeta();return JSON.stringify({sessionId:e,meta:n,items:s,exportedAt:new Date().toISOString()},null,2)}async readSessionMeta(e){try{let t=createReadStream(e,{encoding:"utf-8"}),s=la.createInterface({input:t,crlfDelay:1/0});for await(let n of s)if(n.trim())try{let r=JSON.parse(n);if(r.item?.type==="meta")return s.close(),r.item.data}catch{}}catch{}return null}async countItems(e){let t=0;try{let s=createReadStream(e,{encoding:"utf-8"}),n=la.createInterface({input:s,crlfDelay:1/0});for await(let r of n)r.trim()&&t++;}catch{}return t}async searchInFile(e,t){try{let s=createReadStream(e,{encoding:"utf-8"}),n=la.createInterface({input:s,crlfDelay:1/0});for await(let r of n)if(r.toLowerCase().includes(t))return n.close(),!0}catch{}return false}};var Fg={python:{command:"python3",args:["{file}"],extension:".py",useTempFile:true},javascript:{command:"node",args:["{file}"],extension:".js",useTempFile:true},typescript:{command:"npx",args:["tsx","{file}"],extension:".ts",useTempFile:true},bash:{command:"bash",args:["{file}"],extension:".sh",useTempFile:true},shell:{command:"sh",args:["{file}"],extension:".sh",useTempFile:true}},jg={timeout:3e4,maxMemoryMB:512,maxCPUPercent:50,allowNetwork:true,allowFileSystem:true,workingDirectory:process.cwd(),env:{},captureImages:false,maxOutputSize:1e4},wt=class{config;constructor(e={}){this.config={...jg,...e};}async execute(e,t){let s=Date.now(),n=Fg[t];if(!n)return {success:false,stdout:"",stderr:"",exitCode:1,executionTime:0,error:`Unsupported language: ${t}`};if(!await this.checkRuntimeAvailable(n.command))return {success:false,stdout:"",stderr:"",exitCode:1,executionTime:0,error:`Runtime not found: ${n.command}. Please install it first.`};let i=null;try{n.useTempFile&&(i=await this.createTempFile(e,n.extension));let o=n.args.map(g=>g.replace("{file}",i||"")),l=i?se__default.dirname(i):this.config.workingDirectory,c=[n.command,...o].join(" "),u={...Object.fromEntries(Object.entries(process.env).filter(([g,f])=>f!==void 0)),...this.config.env};t==="python"&&this.config.captureImages&&(u.MPLBACKEND="Agg");let d=await this.executeCommand(n.command,o,u,l),p=[];this.config.captureImages&&i&&(p=await this.captureGeneratedImages(se__default.dirname(i)));let h=Date.now()-s;return {...d,executionTime:h,command:c,workingDirectory:l,images:p&&p.length>0?p:void 0}}catch(o){let l=Date.now()-s;return {success:false,stdout:o.stdout||"",stderr:o.stderr||"",exitCode:o.exitCode||1,executionTime:l,error:o.message,timedOut:o.timedOut||false}}finally{i&&await this.cleanupTempFile(i);}}async checkRuntimeAvailable(e){try{return await execa(e,["--version"],{timeout:5e3}),!0}catch{return false}}async createTempFile(e,t){let s=await ce__default.mkdtemp(se__default.join(Dn__default.tmpdir(),"neox-code-")),n=se__default.join(s,`script${t}`);return await ce__default.writeFile(n,e,"utf-8"),n}async executeCommand(e,t,s,n){try{let{stdout:r,stderr:i,exitCode:o}=await execa(e,t,{timeout:this.config.timeout,cwd:n,env:s,all:!0,reject:!1}),l=this.truncateOutput(r),c=this.truncateOutput(i);return {success:o===0,stdout:l,stderr:c,exitCode:o||0}}catch(r){throw r.timedOut?{stdout:r.stdout||"",stderr:r.stderr||"",exitCode:-1,message:`Execution timed out after ${this.config.timeout}ms`,timedOut:true}:{stdout:r.stdout||"",stderr:r.stderr||"",exitCode:r.exitCode||1,message:r.message}}}truncateOutput(e){if(e.length<=this.config.maxOutputSize)return e;let t=Math.floor(this.config.maxOutputSize/2);return e.slice(0,t)+`
8
+ `:"","utf-8"),e.length>0?this.sequenceNumber=Math.max(...e.map(s=>s.seq))+1:this.sequenceNumber=0;}async getItems(e){await this.ensureInitialized();let s=(await this.readAllItems()).map(n=>n.item);return e===void 0?s:s.slice(-e)}async addItems(e){if(e.length!==0){await this.ensureInitialized();for(let t of e)await this.appendItem(t);}}async popItem(){await this.ensureInitialized();let e=await this.readAllItems();if(e.length===0)return null;let t=e.pop();return await this.writeAllItems(e),t.item}async popItems(e){if(e<=0)return [];await this.ensureInitialized();let t=await this.readAllItems();if(t.length===0)return [];let s=Math.min(e,t.length),n=t.splice(-s);return await this.writeAllItems(t),n.map(r=>r.item)}async createCheckpoint(e,t){await this.ensureInitialized();let s=`cp_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,n={type:"checkpoint",data:{id:s,name:e,description:t}};return await this.appendItem(n),s}async rollbackToCheckpoint(e){await this.ensureInitialized();let t=await this.readAllItems(),s=t.findIndex(i=>i.item.type==="checkpoint"&&i.item.data.id===e);if(s===-1)throw new Error(`Checkpoint not found: ${e}`);let n=t.slice(0,s+1),r=t.length-n.length;return await this.writeAllItems(n),r}async getCheckpoints(){await this.ensureInitialized();let e=await this.readAllItems(),t=[];for(let s of e)if(s.item.type==="checkpoint"){let n=s.item;t.push({id:n.data.id,name:n.data.name,timestamp:s.timestamp});}return t}async clearSession(){try{await ce__default.unlink(this.filePath);}catch(e){if(e.code!=="ENOENT")throw e}this.sequenceNumber=0,this.initialized=false;}async getMeta(){await this.ensureInitialized();let e=await this.readAllItems();for(let t of e)if(t.item.type==="meta")return t.item.data;return null}async getMessages(){await this.ensureInitialized();let e=await this.readAllItems(),t=[];for(let s of e)s.item.type==="message"&&t.push(s.item.data);return t}async getItemCount(){return (await this.readAllItems()).length}async getTimeline(){return await this.ensureInitialized(),await this.readAllItems()}async replaceTimeline(e){await this.ensureDirectory();let t=e.map((s,n)=>({item:s.item,timestamp:s.timestamp??Date.now(),seq:n}));await this.writeAllItems(t),this.initialized=true;}static async listSessions(e){let t=e||se__default.join(Dn__default.homedir(),".neox","sessions");try{return (await ce__default.readdir(t)).filter(n=>n.endsWith(".jsonl")).map(n=>n.replace(".jsonl",""))}catch{return []}}static async getMostRecentId(e){let t=e||se__default.join(Dn__default.homedir(),".neox","sessions");try{let n=(await ce__default.readdir(t)).filter(i=>i.endsWith(".jsonl"));if(n.length===0)return null;let r=await Promise.all(n.map(async i=>({name:i.replace(".jsonl",""),mtime:(await ce__default.stat(se__default.join(t,i))).mtime})));return r.sort((i,o)=>o.mtime.getTime()-i.mtime.getTime()),r[0].name}catch{return null}}static async deleteSession(e,t){let s=t||se__default.join(Dn__default.homedir(),".neox","sessions"),n=se__default.join(s,`${e}.jsonl`);try{return await ce__default.unlink(n),!0}catch{return false}}static async getSessionInfo(e,t){let s=t||se__default.join(Dn__default.homedir(),".neox","sessions"),n=se__default.join(s,`${e}.jsonl`);try{let r=await ce__default.stat(n);return {sessionId:e,filePath:n,size:r.size,createdAt:r.birthtime,updatedAt:r.mtime}}catch{return null}}static create(e){return new a({sessionId:Gs(),...e})}};W();function X(a,e,t,s){return {type:"ephemeral",status:e,tool:a,summary:t,final:e==="success"||e==="already_done",...s}}function ve(a,e,t,s,n){return {type:"contextual",status:e,tool:a,summary:t,content:s,...n}}function Yt(a,e,t,s){return {type:"summarized",status:e,tool:a,summary:t,...s}}function eu(a){m.info("TOOL_RESULT",`\u{1F504} getResultForLLM input: ${a.tool}`,{type:a.type,status:a.status,tool:a.tool,hasContent:!!a.content,contentLength:a.content?.length||0,summary:a.summary?.substring(0,100)});let e;if(a.type==="ephemeral")if(a.status==="error")a.tool==="edit_file"?e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,error:a.error,verify_hint:a.verify_hint,file_path:a.file_path,actual_content:a.actual_content,expected_start_line:a.expected_start_line,similar_matches:a.metadata?.similar_matches,suggestions:a.metadata?.suggestions}):e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,error:a.error,verify_hint:a.verify_hint,file_path:a.file_path,similar_matches:a.metadata?.similar_matches,suggestions:a.metadata?.suggestions});else {let t=a.metadata?.edit_info;if(a.tool==="edit_file"&&t){let s=t.old_string?t.old_string.length>1e3?t.old_string.substring(0,1e3)+"...":t.old_string:void 0,n=t.new_string?t.new_string.length>1e3?t.new_string.substring(0,1e3)+"...":t.new_string:void 0;e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,final:a.final,file_path:a.file_path,old_string_preview:s,new_string_preview:n,start_line:t.start_line});}else e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,final:a.final,file_path:a.file_path});}else a.type==="summarized"?e=JSON.stringify({status:a.status,tool:a.tool,summary:a.summary,error:a.error}):e=JSON.stringify(a);return m.info("TOOL_RESULT",`\u2705 getResultForLLM output: ${a.tool}`,{type:a.type,tool:a.tool,llmResultLength:e.length,llmResultPreview:e.substring(0,500)}),e}var oa={write_file:"ephemeral",Write:"ephemeral",edit_file:"ephemeral",Edit:"ephemeral",create_directory:"ephemeral",mkdir:"ephemeral",delete_file:"ephemeral",rename_file:"ephemeral",apply_patch:"ephemeral",move_file:"ephemeral",copy_file:"ephemeral",git_commit:"ephemeral",git_add:"ephemeral",git_push:"ephemeral",git_checkout:"ephemeral",git_branch:"ephemeral",git_merge:"ephemeral",git_stash:"ephemeral",npm_install:"ephemeral",npm_uninstall:"ephemeral",pip_install:"ephemeral",readfile:"contextual",search:"contextual",grep:"contextual",Grep:"contextual",glob:"contextual",Glob:"contextual",search_files:"contextual",ripgrep:"contextual",ls:"contextual",list_directory:"contextual",show_tree:"contextual",git_diff:"contextual",git_status:"contextual",git_blame:"contextual",git_branch_list:"contextual",git_log:"contextual",git_show:"contextual",web_search:"contextual",WebSearch:"contextual",web_fetch:"contextual",WebFetch:"contextual",analyze_code:"contextual",search_symbol:"contextual",get_definitions:"contextual",get_references:"contextual",execute_shell:"summarized",Bash:"summarized",bash:"summarized",shell:"summarized",run_tests:"summarized",run_lint:"summarized",run_format:"summarized",test:"summarized",pytest:"summarized",jest:"summarized",build:"summarized",compile:"summarized",npm_build:"summarized",code_interpreter:"summarized",python_exec:"summarized",browser_debug:"summarized"};function aa(a){if(a.startsWith("mcp__"))return "summarized";if(a in oa)return oa[a];let e=a.toLowerCase();for(let[t,s]of Object.entries(oa))if(t.toLowerCase()===e)return s;return "contextual"}function tu(a){return aa(a)==="contextual"}W();function On(a){if(!a)return 0;let e=0;for(let t of a){let s=t.codePointAt(0)||0;s>=19968&&s<=40959||s>=12288&&s<=12351||s>=65280&&s<=65519||s>=44032&&s<=55215?e+=.67:e+=.25;}return Math.ceil(e)}var at=class{messages=[];maxMessages;constructor(e=500){this.maxMessages=e;}add(e){let t=typeof e.content=="string"?e.content:JSON.stringify(e.content),s=On(t),n={...e,_timestamp:Date.now(),_estimatedTokens:s};if(this.messages.push(n),e.role==="assistant"&&e.tool_calls&&e.tool_calls.length>0&&process.env.CLI_DEBUG==="1"&&m.debug("MEMORY","Assistant message with tool_calls added:",{toolCallCount:e.tool_calls.length,toolCallIds:e.tool_calls.map(r=>({id:r.id,name:r.function.name}))}),this.messages.length>this.maxMessages){let r=this.messages.filter(l=>l.role==="system"),o=this.messages.filter(l=>l.role!=="system").slice(-(this.maxMessages-r.length));this.messages=[...r,...o];}}addToolResult(e,t,s){let n=aa(t),r=null;try{let c=JSON.parse(s);c.type&&c.status&&c.summary&&(r=c);}catch{}let i,o=n;m.info("MEMORY","addToolResult: parsedResult\uFF1A"+r),m.info("MEMORY","addToolResult: effectiveResultType\uFF1A"+o),r?(o=r.type||n,i=eu(r),m.info("MEMORY","\u7CBE\u7B80\u7ED3\u679C: content \uFF1A"+i),m.info("MEMORY",`addToolResult: ${t} parsed as ToolResult`,{parsedResult:JSON.stringify(r).substring(0,500),contentAfter:i.substring(0,500),rawLength:s.length,contentLength:i.length})):(i=s,m.debug("MEMORY",`addToolResult: ${t} using raw output`,{rawOutput:s.substring(0,500),rawLength:s.length}));let l={role:"tool",tool_call_id:e,name:t,content:i,_resultType:o,_toolName:t,_timestamp:Date.now(),_estimatedTokens:On(i)};if(process.env.CLI_DEBUG==="1"&&m.debug("MEMORY","Tool result message added:",{toolName:t,toolCallId:e,contentLength:i.length,contentPreview:i.substring(0,200)}),this.messages.push(l),this.messages.length>this.maxMessages){let c=this.messages.filter(p=>p.role==="system"),d=this.messages.filter(p=>p.role!=="system").slice(-(this.maxMessages-c.length));this.messages=[...c,...d];}}stripMetadata(e){let{_resultType:t,_toolName:s,_timestamp:n,_estimatedTokens:r,_tag:i,...o}=e;return o}getAll(){return this.messages.map(e=>this.stripMetadata(e))}getRawMessages(){return this.messages}getMessagesForLLM(){let e=this.messages.map(t=>this.stripMetadata(t));if(process.env.CLI_DEBUG==="1"){let t=e.filter(r=>r.role==="assistant"),s=e.filter(r=>r.role==="tool");m.debug("MEMORY","Messages for LLM:",{totalMessages:e.length,assistantCount:t.length,toolCount:s.length,messageSequence:e.map(r=>r.role).join(" -> ")}),e.slice(-5).forEach((r,i)=>{r.role==="assistant"&&r.tool_calls?m.debug("MEMORY",`Message ${e.length-5+i} (assistant):`,{toolCalls:r.tool_calls.map(o=>({id:o.id,name:o.function.name}))}):r.role==="tool"&&m.debug("MEMORY",`Message ${e.length-5+i} (tool):`,{name:r.name,tool_call_id:r.tool_call_id,contentLength:typeof r.content=="string"?r.content.length:0});});}return e}hasConversationMessages(){return this.messages.some(e=>e.role==="user"||e.role==="assistant")}upsertSystemTagged(e,t){let s=t.trim();if(!s){this.removeSystemTagged(e);return}let n=this.messages.findIndex(o=>o.role==="system"&&o._tag===e);if(n>=0){let o=this.messages[n];if(o.content===s)return;this.messages[n]={...o,content:s,_timestamp:Date.now(),_estimatedTokens:On(s)};return}let r={role:"system",content:s,_tag:e,_timestamp:Date.now(),_estimatedTokens:On(s)},i=this.getSystemInsertIndex();this.messages=[...this.messages.slice(0,i),r,...this.messages.slice(i)];}removeSystemTagged(e){let t=this.messages.length;this.messages=this.messages.filter(s=>!(s.role==="system"&&s._tag===e)),t!==this.messages.length&&process.env.CLI_DEBUG==="1"&&m.debug("MEMORY",`Removed system tag: ${e}`);}getSystemInsertIndex(){let e=0;for(;e<this.messages.length&&this.messages[e].role==="system";)e+=1;return e}cleanupEphemeral(){let e=this.messages.length,t=new Set;for(let s of this.messages)if(s.role==="assistant"&&s.tool_calls)for(let n of s.tool_calls)n.id&&t.add(n.id);return this.messages=this.messages.filter(s=>s._resultType!=="ephemeral"||s.role!=="tool"||!s.tool_call_id?true:t.has(s.tool_call_id)),e-this.messages.length}getStats(){let e={total:this.messages.length,ephemeral:0,contextual:0,summarized:0,other:0};for(let t of this.messages)t._resultType==="ephemeral"?e.ephemeral++:t._resultType==="contextual"?e.contextual++:t._resultType==="summarized"?e.summarized++:e.other++;return e}checkContextHealth(){let e={ephemeral:{count:0,tokens:0},contextual:{count:0,tokens:0},summarized:{count:0,tokens:0},other:{count:0,tokens:0}},t=0,s=0,n=0;for(let o of this.messages){let l=o._estimatedTokens||On(typeof o.content=="string"?o.content:JSON.stringify(o.content));t+=l,o.role==="tool"?(n++,s+=l,o._resultType==="ephemeral"?(e.ephemeral.count++,e.ephemeral.tokens+=l):o._resultType==="contextual"?(e.contextual.count++,e.contextual.tokens+=l):o._resultType==="summarized"?(e.summarized.count++,e.summarized.tokens+=l):(e.other.count++,e.other.tokens+=l)):(e.other.count++,e.other.tokens+=l);}let r=t>0?s/t:0,i=[];return r>.5?i.push(`Tool results\u5360\u7528 ${(r*100).toFixed(1)}% \u7684\u4E0A\u4E0B\u6587\uFF08\u8D85\u8FC750%\u8B66\u6212\u7EBF\uFF09`):r>.4&&i.push(`Tool results\u5360\u7528 ${(r*100).toFixed(1)}% \u7684\u4E0A\u4E0B\u6587\uFF08\u63A5\u8FD1\u8B66\u6212\u7EBF\uFF09`),t>18e4?i.push(`\u4E0A\u4E0B\u6587\u5DF2\u8FBE ${t} tokens\uFF08\u8D85\u8FC7180k\uFF0C\u5EFA\u8BAE\u6E05\u7406\uFF09`):t>15e4&&i.push(`\u4E0A\u4E0B\u6587\u5DF2\u8FBE ${t} tokens\uFF08\u63A5\u8FD1180k\uFF09`),n>100?i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8FC7\u957F\uFF08${n} \u6761\uFF09`):n>60&&i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8F83\u957F\uFF08${n} \u6761\uFF09`),e.ephemeral.count>10&&i.push(`\u79EF\u7D2F\u4E86 ${e.ephemeral.count} \u6761 ephemeral \u6D88\u606F\uFF0C\u5EFA\u8BAE\u6E05\u7406`),{totalTokens:t,toolResultTokens:s,toolResultRatio:r,messageCount:this.messages.length,toolMessageCount:n,warnings:i,shouldCompress:r>.3||t>12e4,shouldCleanup:t>15e4||e.ephemeral.count>5,byType:e}}getTokenSummary(){let e=this.checkContextHealth(),t=[`Total: ${e.totalTokens} tokens`,`Tool: ${e.toolResultTokens} (${(e.toolResultRatio*100).toFixed(1)}%)`,`Messages: ${e.messageCount}`];return e.byType.ephemeral.count>0&&t.push(`Ephemeral: ${e.byType.ephemeral.count}`),t.join(" | ")}getMemoryFootprint(){let e=JSON.stringify(this.messages),t=new Blob([e]).size,s=Math.round(t/1024*10)/10,n=this.messages.length*150,r=t+n,i=Math.round(r/1024*10)/10;return {totalKB:i,messagesKB:s,messageCount:this.messages.length,averageKBPerMessage:this.messages.length>0?Math.round(i/this.messages.length*10)/10:0}}logMemoryStats(){let e=this.checkContextHealth(),t=this.getMemoryFootprint();m.info("MEMORY_STATS","ShortTermMemory snapshot",{memoryTotalKB:t.totalKB,memoryMessagesKB:t.messagesKB,avgKBPerMessage:t.averageKBPerMessage,totalTokens:e.totalTokens,toolResultTokens:e.toolResultTokens,toolResultRatio:`${(e.toolResultRatio*100).toFixed(1)}%`,messageCount:e.messageCount,toolMessageCount:e.toolMessageCount,maxMessages:this.maxMessages,byType:{ephemeral:`${e.byType.ephemeral.count} msgs, ${e.byType.ephemeral.tokens} tokens`,contextual:`${e.byType.contextual.count} msgs, ${e.byType.contextual.tokens} tokens`,summarized:`${e.byType.summarized.count} msgs, ${e.byType.summarized.tokens} tokens`,other:`${e.byType.other.count} msgs, ${e.byType.other.tokens} tokens`},warnings:e.warnings.length>0?e.warnings:["None"],shouldCompress:e.shouldCompress,shouldCleanup:e.shouldCleanup});}clear(){let e=this.messages.filter(t=>t.role==="system");this.messages=e;}setMessages(e){let t=Array.isArray(e)?e:[],s=t.filter(o=>o.role==="system"),n=t.filter(o=>o.role!=="system"),r=Math.max(0,this.maxMessages-s.length),i=r>0?n.slice(-r):[];this.messages=[...s,...i].map(o=>({...o,_timestamp:Date.now()}));}get length(){return this.messages.length}};var Xt=class{directory;options;sessionCache=new Map;constructor(e){this.options=e||{},this.directory=e?.directory||se__default.join(Dn__default.homedir(),".neox","sessions");}async getSession(e){if(this.sessionCache.has(e))return this.sessionCache.get(e);let t=new fs({sessionId:e,directory:this.directory,agentName:this.options.defaultAgentName,model:this.options.defaultModel});return this.sessionCache.set(e,t),t}async listSessions(){let e=[];try{await ce__default.mkdir(this.directory,{recursive:!0});let t=await ce__default.readdir(this.directory);for(let s of t){if(!s.endsWith(".jsonl"))continue;let n=s.replace(".jsonl",""),r=se__default.join(this.directory,s);try{let i=await ce__default.stat(r),o=await this.readSessionMeta(r),l=await this.countItems(r);e.push({sessionId:n,createdAt:i.birthtime,updatedAt:i.mtime,itemCount:l,agentName:o?.agentName});}catch{}}}catch(t){if(t.code!=="ENOENT")throw t}return e.sort((t,s)=>s.updatedAt.getTime()-t.updatedAt.getTime()),e}async getMostRecent(){let e=await this.listSessions();return e.length===0?null:this.getSession(e[0].sessionId)}async deleteSession(e){this.sessionCache.delete(e);let t=se__default.join(this.directory,`${e}.jsonl`);try{return await ce__default.unlink(t),!0}catch{return false}}async searchSessions(e){let t=await this.listSessions(),s=e.toLowerCase(),n=[];for(let r of t){if(r.sessionId.toLowerCase().includes(s)){n.push(r);continue}if(r.agentName?.toLowerCase().includes(s)){n.push(r);continue}let i=se__default.join(this.directory,`${r.sessionId}.jsonl`);await this.searchInFile(i,s)&&n.push(r);}return n}async createSession(e){let t=e?.sessionId||Gs(),s=new fs({sessionId:t,directory:this.directory,agentName:e?.agentName||this.options.defaultAgentName,model:e?.model||this.options.defaultModel});return this.sessionCache.set(t,s),s}async getOrCreateSession(e){return e?this.getSession(e):this.createSession()}async continueOrCreate(){let e=await this.getMostRecent();return e||this.createSession()}async cleanupOldSessions(e=30){let t=await this.listSessions(),s=Date.now()-e*24*60*60*1e3,n=0;for(let r of t)r.updatedAt.getTime()<s&&await this.deleteSession(r.sessionId)&&n++;return n}getDirectory(){return this.directory}async getSessionCount(){return (await this.listSessions()).length}async exportSession(e){let t=await this.getSession(e),s=await t.getItems(),n=await t.getMeta();return JSON.stringify({sessionId:e,meta:n,items:s,exportedAt:new Date().toISOString()},null,2)}async readSessionMeta(e){try{let t=createReadStream(e,{encoding:"utf-8"}),s=la.createInterface({input:t,crlfDelay:1/0});for await(let n of s)if(n.trim())try{let r=JSON.parse(n);if(r.item?.type==="meta")return s.close(),r.item.data}catch{}}catch{}return null}async countItems(e){let t=0;try{let s=createReadStream(e,{encoding:"utf-8"}),n=la.createInterface({input:s,crlfDelay:1/0});for await(let r of n)r.trim()&&t++;}catch{}return t}async searchInFile(e,t){try{let s=createReadStream(e,{encoding:"utf-8"}),n=la.createInterface({input:s,crlfDelay:1/0});for await(let r of n)if(r.toLowerCase().includes(t))return n.close(),!0}catch{}return false}};var Fg={python:{command:"python3",args:["{file}"],extension:".py",useTempFile:true},javascript:{command:"node",args:["{file}"],extension:".js",useTempFile:true},typescript:{command:"npx",args:["tsx","{file}"],extension:".ts",useTempFile:true},bash:{command:"bash",args:["{file}"],extension:".sh",useTempFile:true},shell:{command:"sh",args:["{file}"],extension:".sh",useTempFile:true}},jg={timeout:3e4,maxMemoryMB:512,maxCPUPercent:50,allowNetwork:true,allowFileSystem:true,workingDirectory:process.cwd(),env:{},captureImages:false,maxOutputSize:1e4},wt=class{config;constructor(e={}){this.config={...jg,...e};}async execute(e,t){let s=Date.now(),n=Fg[t];if(!n)return {success:false,stdout:"",stderr:"",exitCode:1,executionTime:0,error:`Unsupported language: ${t}`};if(!await this.checkRuntimeAvailable(n.command))return {success:false,stdout:"",stderr:"",exitCode:1,executionTime:0,error:`Runtime not found: ${n.command}. Please install it first.`};let i=null;try{n.useTempFile&&(i=await this.createTempFile(e,n.extension));let o=n.args.map(g=>g.replace("{file}",i||"")),l=i?se__default.dirname(i):this.config.workingDirectory,c=[n.command,...o].join(" "),u={...Object.fromEntries(Object.entries(process.env).filter(([g,f])=>f!==void 0)),...this.config.env};t==="python"&&this.config.captureImages&&(u.MPLBACKEND="Agg");let d=await this.executeCommand(n.command,o,u,l),p=[];this.config.captureImages&&i&&(p=await this.captureGeneratedImages(se__default.dirname(i)));let h=Date.now()-s;return {...d,executionTime:h,command:c,workingDirectory:l,images:p&&p.length>0?p:void 0}}catch(o){let l=Date.now()-s;return {success:false,stdout:o.stdout||"",stderr:o.stderr||"",exitCode:o.exitCode||1,executionTime:l,error:o.message,timedOut:o.timedOut||false}}finally{i&&await this.cleanupTempFile(i);}}async checkRuntimeAvailable(e){try{return await execa(e,["--version"],{timeout:5e3}),!0}catch{return false}}async createTempFile(e,t){let s=await ce__default.mkdtemp(se__default.join(Dn__default.tmpdir(),"neox-code-")),n=se__default.join(s,`script${t}`);return await ce__default.writeFile(n,e,"utf-8"),n}async executeCommand(e,t,s,n){try{let{stdout:r,stderr:i,exitCode:o}=await execa(e,t,{timeout:this.config.timeout,cwd:n,env:s,all:!0,reject:!1}),l=this.truncateOutput(r),c=this.truncateOutput(i);return {success:o===0,stdout:l,stderr:c,exitCode:o||0}}catch(r){throw r.timedOut?{stdout:r.stdout||"",stderr:r.stderr||"",exitCode:-1,message:`Execution timed out after ${this.config.timeout}ms`,timedOut:true}:{stdout:r.stdout||"",stderr:r.stderr||"",exitCode:r.exitCode||1,message:r.message}}}truncateOutput(e){if(e.length<=this.config.maxOutputSize)return e;let t=Math.floor(this.config.maxOutputSize/2);return e.slice(0,t)+`
9
9
 
10
10
  ... [Truncated ${e.length-this.config.maxOutputSize} characters] ...
11
11
 
@@ -162,7 +162,7 @@ auto_login: { username: "admin", password: "123456" }`,properties:{username:{typ
162
162
  - \u9700\u8981\u67E5\u770B\u9875\u9762\u5B9E\u9645\u6E32\u67D3\u6548\u679C\uFF08\u5E03\u5C40\u3001\u6837\u5F0F\u3001\u5185\u5BB9\uFF09
163
163
  - \u7528\u6237\u62A5\u544A UI \u663E\u793A\u95EE\u9898\u4F46\u6CA1\u6709\u63D0\u4F9B\u622A\u56FE
164
164
 
165
- \u9ED8\u8BA4 false\uFF0C\u56E0\u4E3A\u622A\u56FE\u4F1A\u589E\u52A0\u54CD\u5E94\u5927\u5C0F\u3002`,default:false},headless:{type:"boolean",description:"\u662F\u5426\u4F7F\u7528 headless \u6A21\u5F0F\uFF08\u4E0D\u663E\u793A\u6D4F\u89C8\u5668\u7A97\u53E3\uFF09\u3002\u9ED8\u8BA4 true\u3002\u6CE8\u610F\uFF1A\u5982\u679C\u540C\u65F6\u8BBE\u7F6E open_for_login: true \u4E0E allow_manual_login: true\uFF0C\u6B64\u53C2\u6570\u4F1A\u88AB\u5FFD\u7565",default:true}},required:[]},async function(a){throw new Error("debug_in_browser tool must be created via createDebugInBrowserTool(workspacePath) to provide workspace context")}};W();var fs=null;function Vr(){if(fs!==null)return fs;if(process.platform!=="linux")return fs=false,false;if(process.env.WSL_DISTRO_NAME||process.env.WSLENV||process.env.WSL_INTEROP)return fs=true,true;try{let a=Me__default.readFileSync("/proc/version","utf-8").toLowerCase();if(a.includes("microsoft")||a.includes("wsl"))return fs=!0,!0}catch{}try{if(Me__default.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop"))return fs=!0,!0}catch{}return fs=false,false}var $n=join(homedir(),".neox","browser-profile");function ga(){return $n}function Yr(){return existsSync($n)||(mkdirSync($n,{recursive:true}),m.info("CHROME",`Created browser profile directory: ${$n}`)),$n}async function lu(){let a=platform(),e={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary","/Applications/Chromium.app/Contents/MacOS/Chromium"],win32:["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",(process.env.LOCALAPPDATA||"")+"\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files\\Google\\Chrome Beta\\Application\\chrome.exe"],linux:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium"],wsl:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe","/mnt/c/Users/"+(process.env.USER||"")+"/AppData/Local/Google/Chrome/Application/chrome.exe"]},t;Vr()?(t=[...e.linux||[],...e.wsl||[]],m.debug("CHROME","WSL detected, checking both Linux and Windows Chrome paths")):t=e[a]||[];for(let s of t)if(existsSync(s))return m.info("CHROME",`Found Chrome at: ${s}`),{path:s,version:"unknown",available:true};return m.warn("CHROME","No Chrome installation found"),null}async function ha(a={}){let{headless:e=true,useProfile:t=true}=a,s=await lu();if(!s)throw new Error("Chrome not found. Please install Google Chrome from https://www.google.com/chrome/");m.info("CHROME",`Launching Chrome (headless: ${e}, useProfile: ${t})...`);let n={executablePath:s.path,headless:e,args:["--no-sandbox","--disable-setuid-sandbox","--disable-dev-shm-usage","--disable-accelerated-2d-canvas","--no-first-run","--no-zygote","--disable-gpu"],defaultViewport:{width:1280,height:720}};if(t){let i=Yr();n.userDataDir=i,m.info("CHROME",`Using profile directory: ${i}`);}let r=await Hg.launch(n);return m.info("CHROME","Chrome launched successfully"),r}W();var Jg=["xhr","fetch"],cu=["stylesheet","script","image","font","media"];function Kg(a,e){return a?e==="error"?a>=400:e==="4xx"?a>=400&&a<500:e==="5xx"?a>=500:e.split(",").map(s=>parseInt(s.trim(),10)).includes(a):false}async function Xr(a,e,t){let s=Date.now(),n={xhr_only:true,include_body:true,body_max_length:5e3,max_results:20,...t.network_filter},r=t.network_capture_mode||"cdp",i=[],o=[],c=new Map,u=new Map,d=`
165
+ \u9ED8\u8BA4 false\uFF0C\u56E0\u4E3A\u622A\u56FE\u4F1A\u589E\u52A0\u54CD\u5E94\u5927\u5C0F\u3002`,default:false},headless:{type:"boolean",description:"\u662F\u5426\u4F7F\u7528 headless \u6A21\u5F0F\uFF08\u4E0D\u663E\u793A\u6D4F\u89C8\u5668\u7A97\u53E3\uFF09\u3002\u9ED8\u8BA4 true\u3002\u6CE8\u610F\uFF1A\u5982\u679C\u540C\u65F6\u8BBE\u7F6E open_for_login: true \u4E0E allow_manual_login: true\uFF0C\u6B64\u53C2\u6570\u4F1A\u88AB\u5FFD\u7565",default:true}},required:[]},async function(a){throw new Error("debug_in_browser tool must be created via createDebugInBrowserTool(workspacePath) to provide workspace context")}};W();var ys=null;function Vr(){if(ys!==null)return ys;if(process.platform!=="linux")return ys=false,false;if(process.env.WSL_DISTRO_NAME||process.env.WSLENV||process.env.WSL_INTEROP)return ys=true,true;try{let a=Me__default.readFileSync("/proc/version","utf-8").toLowerCase();if(a.includes("microsoft")||a.includes("wsl"))return ys=!0,!0}catch{}try{if(Me__default.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop"))return ys=!0,!0}catch{}return ys=false,false}var $n=join(homedir(),".neox","browser-profile");function ga(){return $n}function Yr(){return existsSync($n)||(mkdirSync($n,{recursive:true}),m.info("CHROME",`Created browser profile directory: ${$n}`)),$n}async function lu(){let a=platform(),e={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary","/Applications/Chromium.app/Contents/MacOS/Chromium"],win32:["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",(process.env.LOCALAPPDATA||"")+"\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files\\Google\\Chrome Beta\\Application\\chrome.exe"],linux:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium"],wsl:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe","/mnt/c/Users/"+(process.env.USER||"")+"/AppData/Local/Google/Chrome/Application/chrome.exe"]},t;Vr()?(t=[...e.linux||[],...e.wsl||[]],m.debug("CHROME","WSL detected, checking both Linux and Windows Chrome paths")):t=e[a]||[];for(let s of t)if(existsSync(s))return m.info("CHROME",`Found Chrome at: ${s}`),{path:s,version:"unknown",available:true};return m.warn("CHROME","No Chrome installation found"),null}async function ha(a={}){let{headless:e=true,useProfile:t=true}=a,s=await lu();if(!s)throw new Error("Chrome not found. Please install Google Chrome from https://www.google.com/chrome/");m.info("CHROME",`Launching Chrome (headless: ${e}, useProfile: ${t})...`);let n={executablePath:s.path,headless:e,args:["--no-sandbox","--disable-setuid-sandbox","--disable-dev-shm-usage","--disable-accelerated-2d-canvas","--no-first-run","--no-zygote","--disable-gpu"],defaultViewport:{width:1280,height:720}};if(t){let i=Yr();n.userDataDir=i,m.info("CHROME",`Using profile directory: ${i}`);}let r=await Hg.launch(n);return m.info("CHROME","Chrome launched successfully"),r}W();var Jg=["xhr","fetch"],cu=["stylesheet","script","image","font","media"];function Kg(a,e){return a?e==="error"?a>=400:e==="4xx"?a>=400&&a<500:e==="5xx"?a>=500:e.split(",").map(s=>parseInt(s.trim(),10)).includes(a):false}async function Xr(a,e,t){let s=Date.now(),n={xhr_only:true,include_body:true,body_max_length:5e3,max_results:20,...t.network_filter},r=t.network_capture_mode||"cdp",i=[],o=[],c=new Map,u=new Map,d=`
166
166
  (function() {
167
167
  if (window.__NEOX_INJECTED__) return;
168
168
  window.__NEOX_CONSOLE_LOGS__ = window.__NEOX_CONSOLE_LOGS__ || [];
@@ -367,10 +367,10 @@ Examples:
367
367
 
368
368
  \u793A\u4F8B:
369
369
  {"mode": "structure"} \u2192 {"root_dirs": ["src","config","test"], "modules": ["auth","health","order"]}`,parameters:{type:"object",properties:{directory:{type:"string",description:"\u76EE\u5F55\u8DEF\u5F84 (\u9ED8\u8BA4: \u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55)"},mode:{type:"string",enum:["structure","shallow","normal","deep"],description:"\u626B\u63CF\u6A21\u5F0F: structure(\u7ED3\u6784JSON), shallow(\u6D45\u5C42), normal(\u6B63\u5E38), deep(\u6DF1\u5C42)\u3002\u9ED8\u8BA4: structure"},max_depth:{type:"number",description:"\u6700\u5927\u6DF1\u5EA6 (structure/shallow \u56FA\u5B9A\u4E3A 1-2\uFF0C\u5176\u4ED6\u6A21\u5F0F\u9ED8\u8BA4 3)"}}},async function({directory:a=".",mode:e="structure",max_depth:t}){try{let s=Bh(a),n=Gh(s);if(!(await ce__default.stat(s)).isDirectory())return `[x] \u4E0D\u662F\u76EE\u5F55: ${n}`;let i=await Ph(s);if(e==="structure")return await Nh(s,n,i);let o=e==="shallow",l=t??(o?1:e==="deep"?5:3),u=await Su(s,i,{maxDepth:l,currentDepth:0,shallow:o,expandInteresting:e!=="shallow"}),d=[];d.push(`[~] ${n}/`),d.push(""),i.types.length>0?d.push(`[?] \u68C0\u6D4B\u5230\u9879\u76EE\u7C7B\u578B: ${i.descriptions.join(", ")}`):d.push("[?] \u672A\u68C0\u6D4B\u5230\u7279\u5B9A\u9879\u76EE\u7C7B\u578B"),d.push(`\u{1F4CA} \u626B\u63CF\u6A21\u5F0F: ${e} | \u6700\u5927\u6DF1\u5EA6: ${l}`),d.push(""),d.push("\u56FE\u4F8B: [+][*] \u91CD\u70B9\u76EE\u5F55 | [~][>>] \u5DF2\u8DF3\u8FC7 | [~] \u666E\u901A\u76EE\u5F55"),d.push("\u2500".repeat(50)),d.push(""),u.length===0?d.push("(\u7A7A\u76EE\u5F55)"):d.push(...Ra(u));let p=Tu(u),h=_u(u);return d.push(""),d.push("\u2500".repeat(50)),d.push(`\u7EDF\u8BA1: ${h} \u4E2A\u91CD\u70B9\u76EE\u5F55 | ${p} \u4E2A\u5DF2\u8DF3\u8FC7\u76EE\u5F55`),o&&(d.push(""),d.push('\u{1F4A1} \u63D0\u793A: \u4F7F\u7528 mode="normal" \u6DF1\u5165\u63A2\u7D22\u611F\u5174\u8DA3\u7684\u76EE\u5F55')),Fh(d).join(`
370
- `)}catch(s){return s.code==="ENOENT"?`[x] \u76EE\u5F55\u4E0D\u5B58\u5728: ${a}`:`[x] \u626B\u63CF\u5931\u8D25: ${s.message}`}}};function Tu(a){let e=0;for(let t of a)t.skipped&&e++,t.children&&(e+=Tu(t.children));return e}function _u(a){let e=0;for(let t of a)t.isInteresting&&e++,t.children&&(e+=_u(t.children));return e}function qh(){return se__default.join(Dn__default.homedir(),".neox")}var bs=qh(),Aa=se__default.join(bs,"config.json");se__default.join(bs,"sounds");function Au(a){let e=a,t=false;if(typeof e.supervisor<"u"&&(e={...e},delete e.supervisor,t=true),e.assistant?.supervisorAgent){e===a&&(e={...e});let n={...e.assistant};delete n.supervisorAgent,Object.keys(n).length===0?delete e.assistant:e.assistant={...n,workerPool:n.workerPool??[]},t=true;}let s=e.runConfig?.modes;if(s){let n={...s},r=false;["assistant","cooperate"].forEach(i=>{let o=n[i];o&&!Array.isArray(o.workerPool)&&(n[i]={...o,workerPool:[]},r=true);}),r&&(e===a&&(e={...e}),e.runConfig={...e.runConfig,modes:n},t=true);}return {config:e,changed:t}}function Le(){try{let a=Me__default.readFileSync(Aa,"utf-8"),e=JSON.parse(a),{config:t,changed:s}=Au(e);if(s)try{vs(t);}catch{}return t}catch{return {}}}function vs(a){try{let{config:e}=Au(a);Me__default.existsSync(bs)||Me__default.mkdirSync(bs,{recursive:!0}),Me__default.writeFileSync(Aa,JSON.stringify(e,null,2),"utf-8");}catch(e){let t=e;throw t.code==="EACCES"||t.code==="EPERM"?(console.error(`
370
+ `)}catch(s){return s.code==="ENOENT"?`[x] \u76EE\u5F55\u4E0D\u5B58\u5728: ${a}`:`[x] \u626B\u63CF\u5931\u8D25: ${s.message}`}}};function Tu(a){let e=0;for(let t of a)t.skipped&&e++,t.children&&(e+=Tu(t.children));return e}function _u(a){let e=0;for(let t of a)t.isInteresting&&e++,t.children&&(e+=_u(t.children));return e}function qh(){return se__default.join(Dn__default.homedir(),".neox")}var vs=qh(),Aa=se__default.join(vs,"config.json");se__default.join(vs,"sounds");function Au(a){let e=a,t=false;if(typeof e.supervisor<"u"&&(e={...e},delete e.supervisor,t=true),e.assistant?.supervisorAgent){e===a&&(e={...e});let n={...e.assistant};delete n.supervisorAgent,Object.keys(n).length===0?delete e.assistant:e.assistant={...n,workerPool:n.workerPool??[]},t=true;}let s=e.runConfig?.modes;if(s){let n={...s},r=false;["assistant","cooperate"].forEach(i=>{let o=n[i];o&&!Array.isArray(o.workerPool)&&(n[i]={...o,workerPool:[]},r=true);}),r&&(e===a&&(e={...e}),e.runConfig={...e.runConfig,modes:n},t=true);}return {config:e,changed:t}}function Le(){try{let a=Me__default.readFileSync(Aa,"utf-8"),e=JSON.parse(a),{config:t,changed:s}=Au(e);if(s)try{ws(t);}catch{}return t}catch{return {}}}function ws(a){try{let{config:e}=Au(a);Me__default.existsSync(vs)||Me__default.mkdirSync(vs,{recursive:!0}),Me__default.writeFileSync(Aa,JSON.stringify(e,null,2),"utf-8");}catch(e){let t=e;throw t.code==="EACCES"||t.code==="EPERM"?(console.error(`
371
371
  \u274C Permission denied: Cannot write to config file`),console.error(` Location: ${Aa}`),console.error(`
372
- Please check directory permissions or try:`),console.error(` sudo chown -R $USER "${bs}"
373
- `)):console.error("[Config] Failed to save configuration:",t.message),e}}var zh=/^user_([0-9a-f]{64})_account__session_([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/,Hh=/^[0-9a-f]{64}$/,Jh=/session_([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i;function Eu(a){let e=a.toString("hex");return `${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}function Kh(){let a=randomBytes(16);return a[6]=a[6]&15|64,a[8]=a[8]&63|128,Eu(a)}function Vh(a){return a.match(zh)?.[1]??null}function Yh(a){let e=createHash("sha256").update(a).digest(),t=Buffer.from(e.subarray(0,16));return t[6]=t[6]&15|64,t[8]=t[8]&63|128,Eu(t)}function Xh(){let a=Le(),e=typeof a.anthropicClientId=="string"?a.anthropicClientId.trim().toLowerCase():"";if(e&&Hh.test(e))return e;let t=typeof a.anthropicProxyUserId=="string"?a.anthropicProxyUserId.trim().toLowerCase():"",n=(t?Vh(t):null)||randomBytes(32).toString("hex");return a.anthropicClientId=n,vs(a),n}function Iu(a,e){let t=Xh(),n=(a?a.match(Jh):null)?.[1]?.toLowerCase()||Yh(a||e||Kh());return `user_${t}_account__session_${n}`}var Mu="2023-06-01";function Qh(a){return a.replace(/\/+$/,"")}function Zh(a){let e=a?.providers;if(!e||typeof e!="object")return null;let t=a.defaultProviderId&&e[a.defaultProviderId];return t||Object.values(e)[0]||null}function ef(a){return a&&(a.lastSelectedModel||a.defaultModel||a.models?.[0]?.name)||"claude-sonnet-4-5"}function Pu(a){let e=(a?.protocol||"").toLowerCase();return e==="anthropic"||e==="anthropic-openai"}function tf(a){return /\/v1\/messages(?:\?|$)/.test(a)}function sf(a,e){return a.includes("api.anthropic.com")?{"anthropic-api-key":e,"anthropic-version":Mu,"Content-Type":"application/json",Accept:"application/json"}:{Authorization:`Bearer ${e}`,"anthropic-version":Mu,"Content-Type":"application/json",Accept:"application/json","anthropic-dangerous-direct-browser-access":"true","x-app":"cli"}}function nf(a){let e=String(a?.title||a?.name||"").trim(),t=String(a?.url||a?.link||"").trim(),s=String(a?.description||a?.snippet||a?.content||"").trim();if(!e||!t)return null;let n="unknown";try{n=new URL(t).hostname;}catch{n="unknown";}return {title:e,url:t,description:s,hostname:n}}function Du(a){let e=[];if(Array.isArray(a?.results)&&e.push(...a.results),Array.isArray(a?.organic)&&e.push(...a.organic),Array.isArray(a?.content))for(let r of a.content)r?.type==="web_search_tool_result"&&Array.isArray(r.content)&&e.push(...r.content);let t=e.map(nf).filter(r=>!!r),s=new Set,n=[];for(let r of t){let i=`${r.url}::${r.title}`;s.has(i)||(s.add(i),n.push(r));}return n}function rf(a,e){let t=String(a?.webSearch?.url||"").trim();return t||(!e?.baseUrl||!Pu(e)?null:`${Qh(e.baseUrl)}/v1/messages`)}async function of(a,e,t,s,n){let i=new AbortController,o=setTimeout(()=>i.abort(),3e4);try{let l=(n||s?.apiKey||"").trim(),c=tf(a)&&Pu(s),u=c?sf(a,l):{"Content-Type":"application/json",Accept:"application/json"},d=c?{model:ef(s),max_tokens:2048,stream:!1,tools:[{type:"web_search_20250305",name:"web_search",max_uses:1}],messages:[{role:"user",content:`Perform a web search for the query: ${e}`}]}:{query:e,q:e,max_results:t,limit:t};if(c&&!l)return {results:[],error:"\u672A\u627E\u5230 Provider API Key\uFF0C\u65E0\u6CD5\u53D1\u8D77 WebSearch \u8BF7\u6C42"};let p=await fetch(a,{method:"POST",headers:u,body:JSON.stringify(d),signal:i.signal});if(!p.ok)return {results:[],error:`WebSearch \u8BF7\u6C42\u5931\u8D25: HTTP ${p.status} ${p.statusText}`};let h=await p.json(),g=Du(h).slice(0,Math.min(Math.max(1,t),20));return g.length===0?{results:[],error:"WebSearch \u8BF7\u6C42\u6210\u529F\uFF0C\u4F46\u672A\u8FD4\u56DE\u53EF\u89E3\u6790\u7ED3\u679C"}:{results:g}}catch(l){return l?.name==="AbortError"?{results:[],error:"WebSearch \u8BF7\u6C42\u8D85\u65F6\uFF0830s\uFF09"}:{results:[],error:`WebSearch \u8BF7\u6C42\u5F02\u5E38: ${l?.message||"\u672A\u77E5\u9519\u8BEF"}`}}finally{clearTimeout(o);}}async function af(a,e,t){let s=await fetch("https://google.serper.dev/search",{method:"POST",headers:{"X-API-KEY":t,"Content-Type":"application/json"},body:JSON.stringify({q:a.trim(),num:Math.min(Math.max(1,e),20)})});if(!s.ok)return s.status===401?{results:[],error:"Serper API Key \u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E"}:s.status===429?{results:[],error:"Serper \u914D\u989D\u5DF2\u7528\u5B8C\uFF0C\u8BF7\u524D\u5F80 serper.dev \u67E5\u770B\u989D\u5EA6"}:{results:[],error:`Serper \u8BF7\u6C42\u5931\u8D25: HTTP ${s.status} ${s.statusText}`};let n=await s.json();return {results:Du(n).slice(0,Math.min(Math.max(1,e),20))}}var Ia={name:"web_search",description:`Search the web with ClaudeCode-style server WebSearch.
372
+ Please check directory permissions or try:`),console.error(` sudo chown -R $USER "${vs}"
373
+ `)):console.error("[Config] Failed to save configuration:",t.message),e}}var zh=/^user_([0-9a-f]{64})_account__session_([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/,Hh=/^[0-9a-f]{64}$/,Jh=/session_([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/i;function Eu(a){let e=a.toString("hex");return `${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}function Kh(){let a=randomBytes(16);return a[6]=a[6]&15|64,a[8]=a[8]&63|128,Eu(a)}function Vh(a){return a.match(zh)?.[1]??null}function Yh(a){let e=createHash("sha256").update(a).digest(),t=Buffer.from(e.subarray(0,16));return t[6]=t[6]&15|64,t[8]=t[8]&63|128,Eu(t)}function Xh(){let a=Le(),e=typeof a.anthropicClientId=="string"?a.anthropicClientId.trim().toLowerCase():"";if(e&&Hh.test(e))return e;let t=typeof a.anthropicProxyUserId=="string"?a.anthropicProxyUserId.trim().toLowerCase():"",n=(t?Vh(t):null)||randomBytes(32).toString("hex");return a.anthropicClientId=n,ws(a),n}function Iu(a,e){let t=Xh(),n=(a?a.match(Jh):null)?.[1]?.toLowerCase()||Yh(a||e||Kh());return `user_${t}_account__session_${n}`}var Mu="2023-06-01";function Qh(a){return a.replace(/\/+$/,"")}function Zh(a){let e=a?.providers;if(!e||typeof e!="object")return null;let t=a.defaultProviderId&&e[a.defaultProviderId];return t||Object.values(e)[0]||null}function ef(a){return a&&(a.lastSelectedModel||a.defaultModel||a.models?.[0]?.name)||"claude-sonnet-4-5"}function Pu(a){let e=(a?.protocol||"").toLowerCase();return e==="anthropic"||e==="anthropic-openai"}function tf(a){return /\/v1\/messages(?:\?|$)/.test(a)}function sf(a,e){return a.includes("api.anthropic.com")?{"anthropic-api-key":e,"anthropic-version":Mu,"Content-Type":"application/json",Accept:"application/json"}:{Authorization:`Bearer ${e}`,"anthropic-version":Mu,"Content-Type":"application/json",Accept:"application/json","anthropic-dangerous-direct-browser-access":"true","x-app":"cli"}}function nf(a){let e=String(a?.title||a?.name||"").trim(),t=String(a?.url||a?.link||"").trim(),s=String(a?.description||a?.snippet||a?.content||"").trim();if(!e||!t)return null;let n="unknown";try{n=new URL(t).hostname;}catch{n="unknown";}return {title:e,url:t,description:s,hostname:n}}function Du(a){let e=[];if(Array.isArray(a?.results)&&e.push(...a.results),Array.isArray(a?.organic)&&e.push(...a.organic),Array.isArray(a?.content))for(let r of a.content)r?.type==="web_search_tool_result"&&Array.isArray(r.content)&&e.push(...r.content);let t=e.map(nf).filter(r=>!!r),s=new Set,n=[];for(let r of t){let i=`${r.url}::${r.title}`;s.has(i)||(s.add(i),n.push(r));}return n}function rf(a,e){let t=String(a?.webSearch?.url||"").trim();return t||(!e?.baseUrl||!Pu(e)?null:`${Qh(e.baseUrl)}/v1/messages`)}async function of(a,e,t,s,n){let i=new AbortController,o=setTimeout(()=>i.abort(),3e4);try{let l=(n||s?.apiKey||"").trim(),c=tf(a)&&Pu(s),u=c?sf(a,l):{"Content-Type":"application/json",Accept:"application/json"},d=c?{model:ef(s),max_tokens:2048,stream:!1,tools:[{type:"web_search_20250305",name:"web_search",max_uses:1}],messages:[{role:"user",content:`Perform a web search for the query: ${e}`}]}:{query:e,q:e,max_results:t,limit:t};if(c&&!l)return {results:[],error:"\u672A\u627E\u5230 Provider API Key\uFF0C\u65E0\u6CD5\u53D1\u8D77 WebSearch \u8BF7\u6C42"};let p=await fetch(a,{method:"POST",headers:u,body:JSON.stringify(d),signal:i.signal});if(!p.ok)return {results:[],error:`WebSearch \u8BF7\u6C42\u5931\u8D25: HTTP ${p.status} ${p.statusText}`};let h=await p.json(),g=Du(h).slice(0,Math.min(Math.max(1,t),20));return g.length===0?{results:[],error:"WebSearch \u8BF7\u6C42\u6210\u529F\uFF0C\u4F46\u672A\u8FD4\u56DE\u53EF\u89E3\u6790\u7ED3\u679C"}:{results:g}}catch(l){return l?.name==="AbortError"?{results:[],error:"WebSearch \u8BF7\u6C42\u8D85\u65F6\uFF0830s\uFF09"}:{results:[],error:`WebSearch \u8BF7\u6C42\u5F02\u5E38: ${l?.message||"\u672A\u77E5\u9519\u8BEF"}`}}finally{clearTimeout(o);}}async function af(a,e,t){let s=await fetch("https://google.serper.dev/search",{method:"POST",headers:{"X-API-KEY":t,"Content-Type":"application/json"},body:JSON.stringify({q:a.trim(),num:Math.min(Math.max(1,e),20)})});if(!s.ok)return s.status===401?{results:[],error:"Serper API Key \u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E"}:s.status===429?{results:[],error:"Serper \u914D\u989D\u5DF2\u7528\u5B8C\uFF0C\u8BF7\u524D\u5F80 serper.dev \u67E5\u770B\u989D\u5EA6"}:{results:[],error:`Serper \u8BF7\u6C42\u5931\u8D25: HTTP ${s.status} ${s.statusText}`};let n=await s.json();return {results:Du(n).slice(0,Math.min(Math.max(1,e),20))}}var Ia={name:"web_search",description:`Search the web with ClaudeCode-style server WebSearch.
374
374
 
375
375
  Priority:
376
376
  1. Custom WebSearch URL (if configured)
@@ -619,7 +619,7 @@ By default, this will terminate the debugged program. Set terminateDebuggee=fals
619
619
  `),o=i.length,l=Math.max(1,s),c=Math.min(l+n-1,o),u=i.slice(l-1,c);return {success:true,path:t,totalLines:o,startLine:l,endLine:c,content:He(u,l),truncated:c<o,strategy:"chunk"}}async readFull(e,t,s){let n=await ce.readFile(e,"utf-8"),r=Ys(n).split(`
620
620
  `),i=r.length,o=Math.min(i,s),l=r.slice(0,o);return {success:true,path:t,totalLines:i,startLine:1,endLine:o,content:He(l,1),truncated:o<i,strategy:"full"}}buildSymbolPattern(e,t,s){let n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r={function:`(function|async\\s+function|const|let|var)\\s+${n}\\s*[=(<]`,class:`class\\s+${n}(\\s+extends|\\s+implements|\\s*\\{|\\s*$)`,interface:`interface\\s+${n}(\\s+extends|\\s*\\{|\\s*$)`,method:s?`(${n}|${s}\\.${n})\\s*\\(`:`${n}\\s*\\(`,variable:`(const|let|var)\\s+${n}\\s*[=:]`,type:`type\\s+${n}\\s*[=<]`,enum:`enum\\s+${n}\\s*\\{`,constant:`(const|final|static\\s+final)\\s+[A-Z_]+\\s*${n}`};return t&&r[t]?r[t]:`(function|class|interface|type|enum|const|let|var|def|fn|func)\\s+${n}|${n}\\s*(=|\\()`}resolvePath(e){return se.isAbsolute(e)?e:se.resolve(this.workspacePath,e)}errorResult(e,t){return {success:false,path:e,totalLines:0,startLine:0,endLine:0,content:"",truncated:false,strategy:"chunk",error:t}}};function Fa(a){return new di(a)}var cd=Sg(td());var qn=a=>{if(typeof a!="string")throw new TypeError("invalid pattern");if(a.length>65536)throw new TypeError("pattern is too long")};var Nf={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",true],"[:alpha:]":["\\p{L}\\p{Nl}",true],"[:ascii:]":["\\x00-\\x7f",false],"[:blank:]":["\\p{Zs}\\t",true],"[:cntrl:]":["\\p{Cc}",true],"[:digit:]":["\\p{Nd}",true],"[:graph:]":["\\p{Z}\\p{C}",true,true],"[:lower:]":["\\p{Ll}",true],"[:print:]":["\\p{C}",true],"[:punct:]":["\\p{P}",true],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",true],"[:upper:]":["\\p{Lu}",true],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",true],"[:xdigit:]":["A-Fa-f0-9",false]},zn=a=>a.replace(/[[\]\\-]/g,"\\$&"),$f=a=>a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),sd=a=>a.join(""),nd=(a,e)=>{let t=e;if(a.charAt(t)!=="[")throw new Error("not in a brace expression");let s=[],n=[],r=t+1,i=false,o=false,l=false,c=false,u=t,d="";e:for(;r<a.length;){let f=a.charAt(r);if((f==="!"||f==="^")&&r===t+1){c=true,r++;continue}if(f==="]"&&i&&!l){u=r+1;break}if(i=true,f==="\\"&&!l){l=true,r++;continue}if(f==="["&&!l){for(let[b,[y,w,C]]of Object.entries(Nf))if(a.startsWith(b,r)){if(d)return ["$.",false,a.length-t,true];r+=b.length,C?n.push(y):s.push(y),o=o||w;continue e}}if(l=false,d){f>d?s.push(zn(d)+"-"+zn(f)):f===d&&s.push(zn(f)),d="",r++;continue}if(a.startsWith("-]",r+1)){s.push(zn(f+"-")),r+=2;continue}if(a.startsWith("-",r+1)){d=f,r+=2;continue}s.push(zn(f)),r++;}if(u<r)return ["",false,0,false];if(!s.length&&!n.length)return ["$.",false,a.length-t,true];if(n.length===0&&s.length===1&&/^\\?.$/.test(s[0])&&!c){let f=s[0].length===2?s[0].slice(-1):s[0];return [$f(f),false,u-t,false]}let p="["+(c?"^":"")+sd(s)+"]",h="["+(c?"":"^")+sd(n)+"]";return [s.length&&n.length?"("+p+"|"+h+")":s.length?p:h,o,u-t,true]};var kt=(a,{windowsPathsNoEscape:e=false}={})=>e?a.replace(/\[([^\/\\])\]/g,"$1"):a.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");var Ff=new Set(["!","?","+","*","@"]),rd=a=>Ff.has(a),jf="(?!(?:^|/)\\.\\.?(?:$|/))",mi="(?!\\.)",Bf=new Set(["[","."]),Gf=new Set(["..","."]),Uf=new Set("().*{}+?[]^$\\!"),Wf=a=>a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Ga="[^/]",id=Ga+"*?",od=Ga+"+?",Xs=class a{type;#e;#t;#i=false;#n=[];#o;#w;#c;#d=false;#a;#l;#r=false;constructor(e,t,s={}){this.type=e,e&&(this.#t=true),this.#o=t,this.#e=this.#o?this.#o.#e:this,this.#a=this.#e===this?s:this.#e.#a,this.#c=this.#e===this?[]:this.#e.#c,e==="!"&&!this.#e.#d&&this.#c.push(this),this.#w=this.#o?this.#o.#n.length:0;}get hasMagic(){if(this.#t!==void 0)return this.#t;for(let e of this.#n)if(typeof e!="string"&&(e.type||e.hasMagic))return this.#t=true;return this.#t}toString(){return this.#l!==void 0?this.#l:this.type?this.#l=this.type+"("+this.#n.map(e=>String(e)).join("|")+")":this.#l=this.#n.map(e=>String(e)).join("")}#f(){if(this!==this.#e)throw new Error("should only call on root");if(this.#d)return this;this.toString(),this.#d=true;let e;for(;e=this.#c.pop();){if(e.type!=="!")continue;let t=e,s=t.#o;for(;s;){for(let n=t.#w+1;!s.type&&n<s.#n.length;n++)for(let r of e.#n){if(typeof r=="string")throw new Error("string part in extglob AST??");r.copyIn(s.#n[n]);}t=s,s=t.#o;}}return this}push(...e){for(let t of e)if(t!==""){if(typeof t!="string"&&!(t instanceof a&&t.#o===this))throw new Error("invalid part: "+t);this.#n.push(t);}}toJSON(){let e=this.type===null?this.#n.slice().map(t=>typeof t=="string"?t:t.toJSON()):[this.type,...this.#n.map(t=>t.toJSON())];return this.isStart()&&!this.type&&e.unshift([]),this.isEnd()&&(this===this.#e||this.#e.#d&&this.#o?.type==="!")&&e.push({}),e}isStart(){if(this.#e===this)return true;if(!this.#o?.isStart())return false;if(this.#w===0)return true;let e=this.#o;for(let t=0;t<this.#w;t++){let s=e.#n[t];if(!(s instanceof a&&s.type==="!"))return false}return true}isEnd(){if(this.#e===this||this.#o?.type==="!")return true;if(!this.#o?.isEnd())return false;if(!this.type)return this.#o?.isEnd();let e=this.#o?this.#o.#n.length:0;return this.#w===e-1}copyIn(e){typeof e=="string"?this.push(e):this.push(e.clone(this));}clone(e){let t=new a(this.type,e);for(let s of this.#n)t.copyIn(s);return t}static#y(e,t,s,n){let r=false,i=false,o=-1,l=false;if(t.type===null){let h=s,g="";for(;h<e.length;){let f=e.charAt(h++);if(r||f==="\\"){r=!r,g+=f;continue}if(i){h===o+1?(f==="^"||f==="!")&&(l=true):f==="]"&&!(h===o+2&&l)&&(i=false),g+=f;continue}else if(f==="["){i=true,o=h,l=false,g+=f;continue}if(!n.noext&&rd(f)&&e.charAt(h)==="("){t.push(g),g="";let b=new a(f,t);h=a.#y(e,b,h,n),t.push(b);continue}g+=f;}return t.push(g),h}let c=s+1,u=new a(null,t),d=[],p="";for(;c<e.length;){let h=e.charAt(c++);if(r||h==="\\"){r=!r,p+=h;continue}if(i){c===o+1?(h==="^"||h==="!")&&(l=true):h==="]"&&!(c===o+2&&l)&&(i=false),p+=h;continue}else if(h==="["){i=true,o=c,l=false,p+=h;continue}if(rd(h)&&e.charAt(c)==="("){u.push(p),p="";let g=new a(h,u);u.push(g),c=a.#y(e,g,c,n);continue}if(h==="|"){u.push(p),p="",d.push(u),u=new a(null,t);continue}if(h===")")return p===""&&t.#n.length===0&&(t.#r=true),u.push(p),p="",t.push(...d,u),c;p+=h;}return t.type=null,t.#t=void 0,t.#n=[e.substring(s-1)],c}static fromGlob(e,t={}){let s=new a(null,void 0,t);return a.#y(e,s,0,t),s}toMMPattern(){if(this!==this.#e)return this.#e.toMMPattern();let e=this.toString(),[t,s,n,r]=this.toRegExpSource();if(!(n||this.#t||this.#a.nocase&&!this.#a.nocaseMagicOnly&&e.toUpperCase()!==e.toLowerCase()))return s;let o=(this.#a.nocase?"i":"")+(r?"u":"");return Object.assign(new RegExp(`^${t}$`,o),{_src:t,_glob:e})}get options(){return this.#a}toRegExpSource(e){let t=e??!!this.#a.dot;if(this.#e===this&&this.#f(),!this.type){let l=this.isStart()&&this.isEnd(),c=this.#n.map(h=>{let[g,f,b,y]=typeof h=="string"?a.#p(h,this.#t,l):h.toRegExpSource(e);return this.#t=this.#t||b,this.#i=this.#i||y,g}).join(""),u="";if(this.isStart()&&typeof this.#n[0]=="string"&&!(this.#n.length===1&&Gf.has(this.#n[0]))){let g=Bf,f=t&&g.has(c.charAt(0))||c.startsWith("\\.")&&g.has(c.charAt(2))||c.startsWith("\\.\\.")&&g.has(c.charAt(4)),b=!t&&!e&&g.has(c.charAt(0));u=f?jf:b?mi:"";}let d="";return this.isEnd()&&this.#e.#d&&this.#o?.type==="!"&&(d="(?:$|\\/)"),[u+c+d,kt(c),this.#t=!!this.#t,this.#i]}let s=this.type==="*"||this.type==="+",n=this.type==="!"?"(?:(?!(?:":"(?:",r=this.#m(t);if(this.isStart()&&this.isEnd()&&!r&&this.type!=="!"){let l=this.toString();return this.#n=[l],this.type=null,this.#t=void 0,[l,kt(this.toString()),false,false]}let i=!s||e||t||!mi?"":this.#m(true);i===r&&(i=""),i&&(r=`(?:${r})(?:${i})*?`);let o="";if(this.type==="!"&&this.#r)o=(this.isStart()&&!t?mi:"")+od;else {let l=this.type==="!"?"))"+(this.isStart()&&!t&&!e?mi:"")+id+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&i?")":this.type==="*"&&i?")?":`)${this.type}`;o=n+r+l;}return [o,kt(r),this.#t=!!this.#t,this.#i]}#m(e){return this.#n.map(t=>{if(typeof t=="string")throw new Error("string type in extglob ast??");let[s,n,r,i]=t.toRegExpSource(e);return this.#i=this.#i||i,s}).filter(t=>!(this.isStart()&&this.isEnd())||!!t).join("|")}static#p(e,t,s=false){let n=false,r="",i=false;for(let o=0;o<e.length;o++){let l=e.charAt(o);if(n){n=false,r+=(Uf.has(l)?"\\":"")+l;continue}if(l==="\\"){o===e.length-1?r+="\\\\":n=true;continue}if(l==="["){let[c,u,d,p]=nd(e,o);if(d){r+=c,i=i||u,o+=d-1,t=t||p;continue}}if(l==="*"){s&&e==="*"?r+=od:r+=id,t=true;continue}if(l==="?"){r+=Ga,t=true;continue}r+=Wf(l);}return [r,kt(e),!!t,i]}};var Qs=(a,{windowsPathsNoEscape:e=false}={})=>e?a.replace(/[?*()[\]]/g,"[$&]"):a.replace(/[?*()[\]\\]/g,"\\$&");var Ye=(a,e,t={})=>(qn(e),!t.nocomment&&e.charAt(0)==="#"?false:new ct(e,t).match(a)),qf=/^\*+([^+@!?\*\[\(]*)$/,zf=a=>e=>!e.startsWith(".")&&e.endsWith(a),Hf=a=>e=>e.endsWith(a),Jf=a=>(a=a.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(a)),Kf=a=>(a=a.toLowerCase(),e=>e.toLowerCase().endsWith(a)),Vf=/^\*+\.\*+$/,Yf=a=>!a.startsWith(".")&&a.includes("."),Xf=a=>a!=="."&&a!==".."&&a.includes("."),Qf=/^\.\*+$/,Zf=a=>a!=="."&&a!==".."&&a.startsWith("."),ey=/^\*+$/,ty=a=>a.length!==0&&!a.startsWith("."),sy=a=>a.length!==0&&a!=="."&&a!=="..",ny=/^\?+([^+@!?\*\[\(]*)?$/,ry=([a,e=""])=>{let t=ud([a]);return e?(e=e.toLowerCase(),s=>t(s)&&s.toLowerCase().endsWith(e)):t},iy=([a,e=""])=>{let t=dd([a]);return e?(e=e.toLowerCase(),s=>t(s)&&s.toLowerCase().endsWith(e)):t},oy=([a,e=""])=>{let t=dd([a]);return e?s=>t(s)&&s.endsWith(e):t},ay=([a,e=""])=>{let t=ud([a]);return e?s=>t(s)&&s.endsWith(e):t},ud=([a])=>{let e=a.length;return t=>t.length===e&&!t.startsWith(".")},dd=([a])=>{let e=a.length;return t=>t.length===e&&t!=="."&&t!==".."},pd=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",ad={win32:{sep:"\\"},posix:{sep:"/"}},ly=pd==="win32"?ad.win32.sep:ad.posix.sep;Ye.sep=ly;var Ge=Symbol("globstar **");Ye.GLOBSTAR=Ge;var cy="[^/]",uy=cy+"*?",dy="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",py="(?:(?!(?:\\/|^)\\.).)*?",my=(a,e={})=>t=>Ye(t,a,e);Ye.filter=my;var pt=(a,e={})=>Object.assign({},a,e),gy=a=>{if(!a||typeof a!="object"||!Object.keys(a).length)return Ye;let e=Ye;return Object.assign((s,n,r={})=>e(s,n,pt(a,r)),{Minimatch:class extends e.Minimatch{constructor(n,r={}){super(n,pt(a,r));}static defaults(n){return e.defaults(pt(a,n)).Minimatch}},AST:class extends e.AST{constructor(n,r,i={}){super(n,r,pt(a,i));}static fromGlob(n,r={}){return e.AST.fromGlob(n,pt(a,r))}},unescape:(s,n={})=>e.unescape(s,pt(a,n)),escape:(s,n={})=>e.escape(s,pt(a,n)),filter:(s,n={})=>e.filter(s,pt(a,n)),defaults:s=>e.defaults(pt(a,s)),makeRe:(s,n={})=>e.makeRe(s,pt(a,n)),braceExpand:(s,n={})=>e.braceExpand(s,pt(a,n)),match:(s,n,r={})=>e.match(s,n,pt(a,r)),sep:e.sep,GLOBSTAR:Ge})};Ye.defaults=gy;var md=(a,e={})=>(qn(a),e.nobrace||!/\{(?:(?!\{).)*\}/.test(a)?[a]:(0, cd.default)(a));Ye.braceExpand=md;var hy=(a,e={})=>new ct(a,e).makeRe();Ye.makeRe=hy;var fy=(a,e,t={})=>{let s=new ct(e,t);return a=a.filter(n=>s.match(n)),s.options.nonull&&!a.length&&a.push(e),a};Ye.match=fy;var ld=/[?*]|[+@!]\(.*?\)|\[|\]/,yy=a=>a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),ct=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(e,t={}){qn(e),t=t||{},this.options=t,this.pattern=e,this.platform=t.platform||pd,this.isWindows=this.platform==="win32",this.windowsPathsNoEscape=!!t.windowsPathsNoEscape||t.allowWindowsEscape===false,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!t.preserveMultipleSlashes,this.regexp=null,this.negate=false,this.nonegate=!!t.nonegate,this.comment=false,this.empty=false,this.partial=!!t.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=t.windowsNoMagicRoot!==void 0?t.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make();}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return true;for(let e of this.set)for(let t of e)if(typeof t!="string")return true;return false}debug(...e){}make(){let e=this.pattern,t=this.options;if(!t.nocomment&&e.charAt(0)==="#"){this.comment=true;return}if(!e){this.empty=true;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],t.debug&&(this.debug=(...r)=>console.error(...r)),this.debug(this.pattern,this.globSet);let s=this.globSet.map(r=>this.slashSplit(r));this.globParts=this.preprocess(s),this.debug(this.pattern,this.globParts);let n=this.globParts.map((r,i,o)=>{if(this.isWindows&&this.windowsNoMagicRoot){let l=r[0]===""&&r[1]===""&&(r[2]==="?"||!ld.test(r[2]))&&!ld.test(r[3]),c=/^[a-z]:/i.test(r[0]);if(l)return [...r.slice(0,4),...r.slice(4).map(u=>this.parse(u))];if(c)return [r[0],...r.slice(1).map(u=>this.parse(u))]}return r.map(l=>this.parse(l))});if(this.debug(this.pattern,n),this.set=n.filter(r=>r.indexOf(false)===-1),this.isWindows)for(let r=0;r<this.set.length;r++){let i=this.set[r];i[0]===""&&i[1]===""&&this.globParts[r][2]==="?"&&typeof i[3]=="string"&&/^[a-z]:$/i.test(i[3])&&(i[2]="?");}this.debug(this.pattern,this.set);}preprocess(e){if(this.options.noglobstar)for(let s=0;s<e.length;s++)for(let n=0;n<e[s].length;n++)e[s][n]==="**"&&(e[s][n]="*");let{optimizationLevel:t=1}=this.options;return t>=2?(e=this.firstPhasePreProcess(e),e=this.secondPhasePreProcess(e)):t>=1?e=this.levelOneOptimize(e):e=this.adjascentGlobstarOptimize(e),e}adjascentGlobstarOptimize(e){return e.map(t=>{let s=-1;for(;(s=t.indexOf("**",s+1))!==-1;){let n=s;for(;t[n+1]==="**";)n++;n!==s&&t.splice(s,n-s);}return t})}levelOneOptimize(e){return e.map(t=>(t=t.reduce((s,n)=>{let r=s[s.length-1];return n==="**"&&r==="**"?s:n===".."&&r&&r!==".."&&r!=="."&&r!=="**"?(s.pop(),s):(s.push(n),s)},[]),t.length===0?[""]:t))}levelTwoFileOptimize(e){Array.isArray(e)||(e=this.slashSplit(e));let t=false;do{if(t=false,!this.preserveMultipleSlashes){for(let n=1;n<e.length-1;n++){let r=e[n];n===1&&r===""&&e[0]===""||(r==="."||r==="")&&(t=true,e.splice(n,1),n--);}e[0]==="."&&e.length===2&&(e[1]==="."||e[1]==="")&&(t=true,e.pop());}let s=0;for(;(s=e.indexOf("..",s+1))!==-1;){let n=e[s-1];n&&n!=="."&&n!==".."&&n!=="**"&&(t=true,e.splice(s-1,2),s-=2);}}while(t);return e.length===0?[""]:e}firstPhasePreProcess(e){let t=false;do{t=false;for(let s of e){let n=-1;for(;(n=s.indexOf("**",n+1))!==-1;){let i=n;for(;s[i+1]==="**";)i++;i>n&&s.splice(n+1,i-n);let o=s[n+1],l=s[n+2],c=s[n+3];if(o!==".."||!l||l==="."||l===".."||!c||c==="."||c==="..")continue;t=true,s.splice(n,1);let u=s.slice(0);u[n]="**",e.push(u),n--;}if(!this.preserveMultipleSlashes){for(let i=1;i<s.length-1;i++){let o=s[i];i===1&&o===""&&s[0]===""||(o==="."||o==="")&&(t=true,s.splice(i,1),i--);}s[0]==="."&&s.length===2&&(s[1]==="."||s[1]==="")&&(t=true,s.pop());}let r=0;for(;(r=s.indexOf("..",r+1))!==-1;){let i=s[r-1];if(i&&i!=="."&&i!==".."&&i!=="**"){t=true;let l=r===1&&s[r+1]==="**"?["."]:[];s.splice(r-1,2,...l),s.length===0&&s.push(""),r-=2;}}}}while(t);return e}secondPhasePreProcess(e){for(let t=0;t<e.length-1;t++)for(let s=t+1;s<e.length;s++){let n=this.partsMatch(e[t],e[s],!this.preserveMultipleSlashes);if(n){e[t]=[],e[s]=n;break}}return e.filter(t=>t.length)}partsMatch(e,t,s=false){let n=0,r=0,i=[],o="";for(;n<e.length&&r<t.length;)if(e[n]===t[r])i.push(o==="b"?t[r]:e[n]),n++,r++;else if(s&&e[n]==="**"&&t[r]===e[n+1])i.push(e[n]),n++;else if(s&&t[r]==="**"&&e[n]===t[r+1])i.push(t[r]),r++;else if(e[n]==="*"&&t[r]&&(this.options.dot||!t[r].startsWith("."))&&t[r]!=="**"){if(o==="b")return false;o="a",i.push(e[n]),n++,r++;}else if(t[r]==="*"&&e[n]&&(this.options.dot||!e[n].startsWith("."))&&e[n]!=="**"){if(o==="a")return false;o="b",i.push(t[r]),n++,r++;}else return false;return e.length===t.length&&i}parseNegate(){if(this.nonegate)return;let e=this.pattern,t=false,s=0;for(let n=0;n<e.length&&e.charAt(n)==="!";n++)t=!t,s++;s&&(this.pattern=e.slice(s)),this.negate=t;}matchOne(e,t,s=false){let n=this.options;if(this.isWindows){let f=typeof e[0]=="string"&&/^[a-z]:$/i.test(e[0]),b=!f&&e[0]===""&&e[1]===""&&e[2]==="?"&&/^[a-z]:$/i.test(e[3]),y=typeof t[0]=="string"&&/^[a-z]:$/i.test(t[0]),w=!y&&t[0]===""&&t[1]===""&&t[2]==="?"&&typeof t[3]=="string"&&/^[a-z]:$/i.test(t[3]),C=b?3:f?0:void 0,S=w?3:y?0:void 0;if(typeof C=="number"&&typeof S=="number"){let[T,_]=[e[C],t[S]];T.toLowerCase()===_.toLowerCase()&&(t[S]=T,S>C?t=t.slice(S):C>S&&(e=e.slice(C)));}}let{optimizationLevel:r=1}=this.options;r>=2&&(e=this.levelTwoFileOptimize(e)),this.debug("matchOne",this,{file:e,pattern:t}),this.debug("matchOne",e.length,t.length);for(var i=0,o=0,l=e.length,c=t.length;i<l&&o<c;i++,o++){this.debug("matchOne loop");var u=t[o],d=e[i];if(this.debug(t,u,d),u===false)return false;if(u===Ge){this.debug("GLOBSTAR",[t,u,d]);var p=i,h=o+1;if(h===c){for(this.debug("** at the end");i<l;i++)if(e[i]==="."||e[i]===".."||!n.dot&&e[i].charAt(0)===".")return false;return true}for(;p<l;){var g=e[p];if(this.debug(`
621
621
  globstar while`,e,p,t,h,g),this.matchOne(e.slice(p),t.slice(h),s))return this.debug("globstar found match!",p,l,g),true;if(g==="."||g===".."||!n.dot&&g.charAt(0)==="."){this.debug("dot detected!",e,p,t,h);break}this.debug("globstar swallow a segment, and continue"),p++;}return !!(s&&(this.debug(`
622
- >>> no match, partial?`,e,p,t,h),p===l))}let f;if(typeof u=="string"?(f=d===u,this.debug("string match",u,d,f)):(f=u.test(d),this.debug("pattern match",u,d,f)),!f)return false}if(i===l&&o===c)return true;if(i===l)return s;if(o===c)return i===l-1&&e[i]==="";throw new Error("wtf?")}braceExpand(){return md(this.pattern,this.options)}parse(e){qn(e);let t=this.options;if(e==="**")return Ge;if(e==="")return "";let s,n=null;(s=e.match(ey))?n=t.dot?sy:ty:(s=e.match(qf))?n=(t.nocase?t.dot?Kf:Jf:t.dot?Hf:zf)(s[1]):(s=e.match(ny))?n=(t.nocase?t.dot?iy:ry:t.dot?oy:ay)(s):(s=e.match(Vf))?n=t.dot?Xf:Yf:(s=e.match(Qf))&&(n=Zf);let r=Xs.fromGlob(e,this.options).toMMPattern();return n&&typeof r=="object"&&Reflect.defineProperty(r,"test",{value:n}),r}makeRe(){if(this.regexp||this.regexp===false)return this.regexp;let e=this.set;if(!e.length)return this.regexp=false,this.regexp;let t=this.options,s=t.noglobstar?uy:t.dot?dy:py,n=new Set(t.nocase?["i"]:[]),r=e.map(l=>{let c=l.map(u=>{if(u instanceof RegExp)for(let d of u.flags.split(""))n.add(d);return typeof u=="string"?yy(u):u===Ge?Ge:u._src});return c.forEach((u,d)=>{let p=c[d+1],h=c[d-1];u!==Ge||h===Ge||(h===void 0?p!==void 0&&p!==Ge?c[d+1]="(?:\\/|"+s+"\\/)?"+p:c[d]=s:p===void 0?c[d-1]=h+"(?:\\/|"+s+")?":p!==Ge&&(c[d-1]=h+"(?:\\/|\\/"+s+"\\/)"+p,c[d+1]=Ge));}),c.filter(u=>u!==Ge).join("/")}).join("|"),[i,o]=e.length>1?["(?:",")"]:["",""];r="^"+i+r+o+"$",this.negate&&(r="^(?!"+r+").+$");try{this.regexp=new RegExp(r,[...n].join(""));}catch{this.regexp=false;}return this.regexp}slashSplit(e){return this.preserveMultipleSlashes?e.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(e)?["",...e.split(/\/+/)]:e.split(/\/+/)}match(e,t=this.partial){if(this.debug("match",e,this.pattern),this.comment)return false;if(this.empty)return e==="";if(e==="/"&&t)return true;let s=this.options;this.isWindows&&(e=e.split("\\").join("/"));let n=this.slashSplit(e);this.debug(this.pattern,"split",n);let r=this.set;this.debug(this.pattern,"set",r);let i=n[n.length-1];if(!i)for(let o=n.length-2;!i&&o>=0;o--)i=n[o];for(let o=0;o<r.length;o++){let l=r[o],c=n;if(s.matchBase&&l.length===1&&(c=[i]),this.matchOne(c,l,t))return s.flipNegate?true:!this.negate}return s.flipNegate?false:this.negate}static defaults(e){return Ye.defaults(e).Minimatch}};Ye.AST=Xs;Ye.Minimatch=ct;Ye.escape=Qs;Ye.unescape=kt;var Zs=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,hd=new Set,Ua=typeof process=="object"&&process?process:{},fd=(a,e,t,s)=>{typeof Ua.emitWarning=="function"?Ua.emitWarning(a,e,t,s):console.error(`[${t}] ${e}: ${a}`);},gi=globalThis.AbortController,gd=globalThis.AbortSignal;if(typeof gi>"u"){gd=class{onabort;_onabort=[];reason;aborted=false;addEventListener(s,n){this._onabort.push(n);}},gi=class{constructor(){e();}signal=new gd;abort(s){if(!this.signal.aborted){this.signal.reason=s,this.signal.aborted=true;for(let n of this.signal._onabort)n(s);this.signal.onabort?.(s);}}};let a=Ua.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{a&&(a=false,fd("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e));};}var by=a=>!hd.has(a);var Zt=a=>a&&a===Math.floor(a)&&a>0&&isFinite(a),yd=a=>Zt(a)?a<=Math.pow(2,8)?Uint8Array:a<=Math.pow(2,16)?Uint16Array:a<=Math.pow(2,32)?Uint32Array:a<=Number.MAX_SAFE_INTEGER?en:null:null,en=class extends Array{constructor(e){super(e),this.fill(0);}},Wa=class a{heap;length;static#e=false;static create(e){let t=yd(e);if(!t)return [];a.#e=true;let s=new a(e,t);return a.#e=false,s}constructor(e,t){if(!a.#e)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new t(e),this.length=0;}push(e){this.heap[this.length++]=e;}pop(){return this.heap[--this.length]}},Hn=class a{#e;#t;#i;#n;#o;#w;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#c;#d;#a;#l;#r;#f;#y;#m;#p;#k;#h;#x;#T;#v;#C;#S;#g;static unsafeExposeInternals(e){return {starts:e.#T,ttls:e.#v,sizes:e.#x,keyMap:e.#a,keyList:e.#l,valList:e.#r,next:e.#f,prev:e.#y,get head(){return e.#m},get tail(){return e.#p},free:e.#k,isBackgroundFetch:t=>e.#u(t),backgroundFetch:(t,s,n,r)=>e.#F(t,s,n,r),moveToTail:t=>e.#B(t),indexes:t=>e.#R(t),rindexes:t=>e.#A(t),isStale:t=>e.#b(t)}}get max(){return this.#e}get maxSize(){return this.#t}get calculatedSize(){return this.#d}get size(){return this.#c}get fetchMethod(){return this.#o}get memoMethod(){return this.#w}get dispose(){return this.#i}get disposeAfter(){return this.#n}constructor(e){let{max:t=0,ttl:s,ttlResolution:n=1,ttlAutopurge:r,updateAgeOnGet:i,updateAgeOnHas:o,allowStale:l,dispose:c,disposeAfter:u,noDisposeOnSet:d,noUpdateTTL:p,maxSize:h=0,maxEntrySize:g=0,sizeCalculation:f,fetchMethod:b,memoMethod:y,noDeleteOnFetchRejection:w,noDeleteOnStaleGet:C,allowStaleOnFetchRejection:S,allowStaleOnFetchAbort:T,ignoreFetchAbort:_}=e;if(t!==0&&!Zt(t))throw new TypeError("max option must be a nonnegative integer");let M=t?yd(t):Array;if(!M)throw new Error("invalid max value: "+t);if(this.#e=t,this.#t=h,this.maxEntrySize=g||this.#t,this.sizeCalculation=f,this.sizeCalculation){if(!this.#t&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(y!==void 0&&typeof y!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#w=y,b!==void 0&&typeof b!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#o=b,this.#S=!!b,this.#a=new Map,this.#l=new Array(t).fill(void 0),this.#r=new Array(t).fill(void 0),this.#f=new M(t),this.#y=new M(t),this.#m=0,this.#p=0,this.#k=Wa.create(t),this.#c=0,this.#d=0,typeof c=="function"&&(this.#i=c),typeof u=="function"?(this.#n=u,this.#h=[]):(this.#n=void 0,this.#h=void 0),this.#C=!!this.#i,this.#g=!!this.#n,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!p,this.noDeleteOnFetchRejection=!!w,this.allowStaleOnFetchRejection=!!S,this.allowStaleOnFetchAbort=!!T,this.ignoreFetchAbort=!!_,this.maxEntrySize!==0){if(this.#t!==0&&!Zt(this.#t))throw new TypeError("maxSize must be a positive integer if specified");if(!Zt(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#I();}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!C,this.updateAgeOnGet=!!i,this.updateAgeOnHas=!!o,this.ttlResolution=Zt(n)||n===0?n:1,this.ttlAutopurge=!!r,this.ttl=s||0,this.ttl){if(!Zt(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#E();}if(this.#e===0&&this.ttl===0&&this.#t===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#e&&!this.#t){let F="LRU_CACHE_UNBOUNDED";by(F)&&(hd.add(F),fd("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",F,a));}}getRemainingTTL(e){return this.#a.has(e)?1/0:0}#E(){let e=new en(this.#e),t=new en(this.#e);this.#v=e,this.#T=t,this.#P=(r,i,o=Zs.now())=>{if(t[r]=i!==0?o:0,e[r]=i,i!==0&&this.ttlAutopurge){let l=setTimeout(()=>{this.#b(r)&&this.#M(this.#l[r],"expire");},i+1);l.unref&&l.unref();}},this.#_=r=>{t[r]=e[r]!==0?Zs.now():0;},this.#s=(r,i)=>{if(e[i]){let o=e[i],l=t[i];if(!o||!l)return;r.ttl=o,r.start=l,r.now=s||n();let c=r.now-l;r.remainingTTL=o-c;}};let s=0,n=()=>{let r=Zs.now();if(this.ttlResolution>0){s=r;let i=setTimeout(()=>s=0,this.ttlResolution);i.unref&&i.unref();}return r};this.getRemainingTTL=r=>{let i=this.#a.get(r);if(i===void 0)return 0;let o=e[i],l=t[i];if(!o||!l)return 1/0;let c=(s||n())-l;return o-c},this.#b=r=>{let i=t[r],o=e[r];return !!o&&!!i&&(s||n())-i>o};}#_=()=>{};#s=()=>{};#P=()=>{};#b=()=>false;#I(){let e=new en(this.#e);this.#d=0,this.#x=e,this.#D=t=>{this.#d-=e[t],e[t]=0;},this.#L=(t,s,n,r)=>{if(this.#u(s))return 0;if(!Zt(n))if(r){if(typeof r!="function")throw new TypeError("sizeCalculation must be a function");if(n=r(s,t),!Zt(n))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return n},this.#O=(t,s,n)=>{if(e[t]=s,this.#t){let r=this.#t-e[t];for(;this.#d>r;)this.#$(true);}this.#d+=e[t],n&&(n.entrySize=s,n.totalCalculatedSize=this.#d);};}#D=e=>{};#O=(e,t,s)=>{};#L=(e,t,s,n)=>{if(s||n)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#R({allowStale:e=this.allowStale}={}){if(this.#c)for(let t=this.#p;!(!this.#N(t)||((e||!this.#b(t))&&(yield t),t===this.#m));)t=this.#y[t];}*#A({allowStale:e=this.allowStale}={}){if(this.#c)for(let t=this.#m;!(!this.#N(t)||((e||!this.#b(t))&&(yield t),t===this.#p));)t=this.#f[t];}#N(e){return e!==void 0&&this.#a.get(this.#l[e])===e}*entries(){for(let e of this.#R())this.#r[e]!==void 0&&this.#l[e]!==void 0&&!this.#u(this.#r[e])&&(yield [this.#l[e],this.#r[e]]);}*rentries(){for(let e of this.#A())this.#r[e]!==void 0&&this.#l[e]!==void 0&&!this.#u(this.#r[e])&&(yield [this.#l[e],this.#r[e]]);}*keys(){for(let e of this.#R()){let t=this.#l[e];t!==void 0&&!this.#u(this.#r[e])&&(yield t);}}*rkeys(){for(let e of this.#A()){let t=this.#l[e];t!==void 0&&!this.#u(this.#r[e])&&(yield t);}}*values(){for(let e of this.#R())this.#r[e]!==void 0&&!this.#u(this.#r[e])&&(yield this.#r[e]);}*rvalues(){for(let e of this.#A())this.#r[e]!==void 0&&!this.#u(this.#r[e])&&(yield this.#r[e]);}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(e,t={}){for(let s of this.#R()){let n=this.#r[s],r=this.#u(n)?n.__staleWhileFetching:n;if(r!==void 0&&e(r,this.#l[s],this))return this.get(this.#l[s],t)}}forEach(e,t=this){for(let s of this.#R()){let n=this.#r[s],r=this.#u(n)?n.__staleWhileFetching:n;r!==void 0&&e.call(t,r,this.#l[s],this);}}rforEach(e,t=this){for(let s of this.#A()){let n=this.#r[s],r=this.#u(n)?n.__staleWhileFetching:n;r!==void 0&&e.call(t,r,this.#l[s],this);}}purgeStale(){let e=false;for(let t of this.#A({allowStale:true}))this.#b(t)&&(this.#M(this.#l[t],"expire"),e=true);return e}info(e){let t=this.#a.get(e);if(t===void 0)return;let s=this.#r[t],n=this.#u(s)?s.__staleWhileFetching:s;if(n===void 0)return;let r={value:n};if(this.#v&&this.#T){let i=this.#v[t],o=this.#T[t];if(i&&o){let l=i-(Zs.now()-o);r.ttl=l,r.start=Date.now();}}return this.#x&&(r.size=this.#x[t]),r}dump(){let e=[];for(let t of this.#R({allowStale:true})){let s=this.#l[t],n=this.#r[t],r=this.#u(n)?n.__staleWhileFetching:n;if(r===void 0||s===void 0)continue;let i={value:r};if(this.#v&&this.#T){i.ttl=this.#v[t];let o=Zs.now()-this.#T[t];i.start=Math.floor(Date.now()-o);}this.#x&&(i.size=this.#x[t]),e.unshift([s,i]);}return e}load(e){this.clear();for(let[t,s]of e){if(s.start){let n=Date.now()-s.start;s.start=Zs.now()-n;}this.set(t,s.value,s);}}set(e,t,s={}){if(t===void 0)return this.delete(e),this;let{ttl:n=this.ttl,start:r,noDisposeOnSet:i=this.noDisposeOnSet,sizeCalculation:o=this.sizeCalculation,status:l}=s,{noUpdateTTL:c=this.noUpdateTTL}=s,u=this.#L(e,t,s.size||0,o);if(this.maxEntrySize&&u>this.maxEntrySize)return l&&(l.set="miss",l.maxEntrySizeExceeded=true),this.#M(e,"set"),this;let d=this.#c===0?void 0:this.#a.get(e);if(d===void 0)d=this.#c===0?this.#p:this.#k.length!==0?this.#k.pop():this.#c===this.#e?this.#$(false):this.#c,this.#l[d]=e,this.#r[d]=t,this.#a.set(e,d),this.#f[this.#p]=d,this.#y[d]=this.#p,this.#p=d,this.#c++,this.#O(d,u,l),l&&(l.set="add"),c=false;else {this.#B(d);let p=this.#r[d];if(t!==p){if(this.#S&&this.#u(p)){p.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:h}=p;h!==void 0&&!i&&(this.#C&&this.#i?.(h,e,"set"),this.#g&&this.#h?.push([h,e,"set"]));}else i||(this.#C&&this.#i?.(p,e,"set"),this.#g&&this.#h?.push([p,e,"set"]));if(this.#D(d),this.#O(d,u,l),this.#r[d]=t,l){l.set="replace";let h=p&&this.#u(p)?p.__staleWhileFetching:p;h!==void 0&&(l.oldValue=h);}}else l&&(l.set="update");}if(n!==0&&!this.#v&&this.#E(),this.#v&&(c||this.#P(d,n,r),l&&this.#s(l,d)),!i&&this.#g&&this.#h){let p=this.#h,h;for(;h=p?.shift();)this.#n?.(...h);}return this}pop(){try{for(;this.#c;){let e=this.#r[this.#m];if(this.#$(!0),this.#u(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#g&&this.#h){let e=this.#h,t;for(;t=e?.shift();)this.#n?.(...t);}}}#$(e){let t=this.#m,s=this.#l[t],n=this.#r[t];return this.#S&&this.#u(n)?n.__abortController.abort(new Error("evicted")):(this.#C||this.#g)&&(this.#C&&this.#i?.(n,s,"evict"),this.#g&&this.#h?.push([n,s,"evict"])),this.#D(t),e&&(this.#l[t]=void 0,this.#r[t]=void 0,this.#k.push(t)),this.#c===1?(this.#m=this.#p=0,this.#k.length=0):this.#m=this.#f[t],this.#a.delete(s),this.#c--,t}has(e,t={}){let{updateAgeOnHas:s=this.updateAgeOnHas,status:n}=t,r=this.#a.get(e);if(r!==void 0){let i=this.#r[r];if(this.#u(i)&&i.__staleWhileFetching===void 0)return false;if(this.#b(r))n&&(n.has="stale",this.#s(n,r));else return s&&this.#_(r),n&&(n.has="hit",this.#s(n,r)),true}else n&&(n.has="miss");return false}peek(e,t={}){let{allowStale:s=this.allowStale}=t,n=this.#a.get(e);if(n===void 0||!s&&this.#b(n))return;let r=this.#r[n];return this.#u(r)?r.__staleWhileFetching:r}#F(e,t,s,n){let r=t===void 0?void 0:this.#r[t];if(this.#u(r))return r;let i=new gi,{signal:o}=s;o?.addEventListener("abort",()=>i.abort(o.reason),{signal:i.signal});let l={signal:i.signal,options:s,context:n},c=(f,b=false)=>{let{aborted:y}=i.signal,w=s.ignoreFetchAbort&&f!==void 0;if(s.status&&(y&&!b?(s.status.fetchAborted=true,s.status.fetchError=i.signal.reason,w&&(s.status.fetchAbortIgnored=true)):s.status.fetchResolved=true),y&&!w&&!b)return d(i.signal.reason);let C=h;return this.#r[t]===h&&(f===void 0?C.__staleWhileFetching?this.#r[t]=C.__staleWhileFetching:this.#M(e,"fetch"):(s.status&&(s.status.fetchUpdated=true),this.set(e,f,l.options))),f},u=f=>(s.status&&(s.status.fetchRejected=true,s.status.fetchError=f),d(f)),d=f=>{let{aborted:b}=i.signal,y=b&&s.allowStaleOnFetchAbort,w=y||s.allowStaleOnFetchRejection,C=w||s.noDeleteOnFetchRejection,S=h;if(this.#r[t]===h&&(!C||S.__staleWhileFetching===void 0?this.#M(e,"fetch"):y||(this.#r[t]=S.__staleWhileFetching)),w)return s.status&&S.__staleWhileFetching!==void 0&&(s.status.returnedStale=true),S.__staleWhileFetching;if(S.__returned===S)throw f},p=(f,b)=>{let y=this.#o?.(e,r,l);y&&y instanceof Promise&&y.then(w=>f(w===void 0?void 0:w),b),i.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(f(void 0),s.allowStaleOnFetchAbort&&(f=w=>c(w,true)));});};s.status&&(s.status.fetchDispatched=true);let h=new Promise(p).then(c,u),g=Object.assign(h,{__abortController:i,__staleWhileFetching:r,__returned:void 0});return t===void 0?(this.set(e,g,{...l.options,status:void 0}),t=this.#a.get(e)):this.#r[t]=g,g}#u(e){if(!this.#S)return false;let t=e;return !!t&&t instanceof Promise&&t.hasOwnProperty("__staleWhileFetching")&&t.__abortController instanceof gi}async fetch(e,t={}){let{allowStale:s=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,ttl:i=this.ttl,noDisposeOnSet:o=this.noDisposeOnSet,size:l=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:p=this.allowStaleOnFetchRejection,ignoreFetchAbort:h=this.ignoreFetchAbort,allowStaleOnFetchAbort:g=this.allowStaleOnFetchAbort,context:f,forceRefresh:b=false,status:y,signal:w}=t;if(!this.#S)return y&&(y.fetch="get"),this.get(e,{allowStale:s,updateAgeOnGet:n,noDeleteOnStaleGet:r,status:y});let C={allowStale:s,updateAgeOnGet:n,noDeleteOnStaleGet:r,ttl:i,noDisposeOnSet:o,size:l,sizeCalculation:c,noUpdateTTL:u,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:p,allowStaleOnFetchAbort:g,ignoreFetchAbort:h,status:y,signal:w},S=this.#a.get(e);if(S===void 0){y&&(y.fetch="miss");let T=this.#F(e,S,C,f);return T.__returned=T}else {let T=this.#r[S];if(this.#u(T)){let R=s&&T.__staleWhileFetching!==void 0;return y&&(y.fetch="inflight",R&&(y.returnedStale=true)),R?T.__staleWhileFetching:T.__returned=T}let _=this.#b(S);if(!b&&!_)return y&&(y.fetch="hit"),this.#B(S),n&&this.#_(S),y&&this.#s(y,S),T;let M=this.#F(e,S,C,f),x=M.__staleWhileFetching!==void 0&&s;return y&&(y.fetch=_?"stale":"refresh",x&&_&&(y.returnedStale=true)),x?M.__staleWhileFetching:M.__returned=M}}async forceFetch(e,t={}){let s=await this.fetch(e,t);if(s===void 0)throw new Error("fetch() returned undefined");return s}memo(e,t={}){let s=this.#w;if(!s)throw new Error("no memoMethod provided to constructor");let{context:n,forceRefresh:r,...i}=t,o=this.get(e,i);if(!r&&o!==void 0)return o;let l=s(e,o,{options:i,context:n});return this.set(e,l,i),l}get(e,t={}){let{allowStale:s=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,status:i}=t,o=this.#a.get(e);if(o!==void 0){let l=this.#r[o],c=this.#u(l);return i&&this.#s(i,o),this.#b(o)?(i&&(i.get="stale"),c?(i&&s&&l.__staleWhileFetching!==void 0&&(i.returnedStale=true),s?l.__staleWhileFetching:void 0):(r||this.#M(e,"expire"),i&&s&&(i.returnedStale=true),s?l:void 0)):(i&&(i.get="hit"),c?l.__staleWhileFetching:(this.#B(o),n&&this.#_(o),l))}else i&&(i.get="miss");}#j(e,t){this.#y[t]=e,this.#f[e]=t;}#B(e){e!==this.#p&&(e===this.#m?this.#m=this.#f[e]:this.#j(this.#y[e],this.#f[e]),this.#j(this.#p,e),this.#p=e);}delete(e){return this.#M(e,"delete")}#M(e,t){let s=false;if(this.#c!==0){let n=this.#a.get(e);if(n!==void 0)if(s=true,this.#c===1)this.#G(t);else {this.#D(n);let r=this.#r[n];if(this.#u(r)?r.__abortController.abort(new Error("deleted")):(this.#C||this.#g)&&(this.#C&&this.#i?.(r,e,t),this.#g&&this.#h?.push([r,e,t])),this.#a.delete(e),this.#l[n]=void 0,this.#r[n]=void 0,n===this.#p)this.#p=this.#y[n];else if(n===this.#m)this.#m=this.#f[n];else {let i=this.#y[n];this.#f[i]=this.#f[n];let o=this.#f[n];this.#y[o]=this.#y[n];}this.#c--,this.#k.push(n);}}if(this.#g&&this.#h?.length){let n=this.#h,r;for(;r=n?.shift();)this.#n?.(...r);}return s}clear(){return this.#G("delete")}#G(e){for(let t of this.#A({allowStale:true})){let s=this.#r[t];if(this.#u(s))s.__abortController.abort(new Error("deleted"));else {let n=this.#l[t];this.#C&&this.#i?.(s,n,e),this.#g&&this.#h?.push([s,n,e]);}}if(this.#a.clear(),this.#r.fill(void 0),this.#l.fill(void 0),this.#v&&this.#T&&(this.#v.fill(0),this.#T.fill(0)),this.#x&&this.#x.fill(0),this.#m=0,this.#p=0,this.#k.length=0,this.#d=0,this.#c=0,this.#g&&this.#h){let t=this.#h,s;for(;s=t?.shift();)this.#n?.(...s);}}};var bd=typeof process=="object"&&process?process:{stdout:null,stderr:null},wy=a=>!!a&&typeof a=="object"&&(a instanceof ts||a instanceof Sd||Cy(a)||Sy(a)),Cy=a=>!!a&&typeof a=="object"&&a instanceof EventEmitter&&typeof a.pipe=="function"&&a.pipe!==Sd.Writable.prototype.pipe,Sy=a=>!!a&&typeof a=="object"&&a instanceof EventEmitter&&typeof a.write=="function"&&typeof a.end=="function",Ut=Symbol("EOF"),Wt=Symbol("maybeEmitEnd"),es=Symbol("emittedEnd"),hi=Symbol("emittingEnd"),Jn=Symbol("emittedError"),fi=Symbol("closed"),vd=Symbol("read"),yi=Symbol("flush"),wd=Symbol("flushChunk"),xt=Symbol("encoding"),tn=Symbol("decoder"),Ne=Symbol("flowing"),Kn=Symbol("paused"),sn=Symbol("resume"),$e=Symbol("buffer"),Xe=Symbol("pipes"),Fe=Symbol("bufferLength"),qa=Symbol("bufferPush"),bi=Symbol("bufferShift"),Je=Symbol("objectMode"),Ee=Symbol("destroyed"),za=Symbol("error"),Ha=Symbol("emitData"),Cd=Symbol("emitEnd"),Ja=Symbol("emitEnd2"),Dt=Symbol("async"),Ka=Symbol("abort"),vi=Symbol("aborted"),Vn=Symbol("signal"),ws=Symbol("dataListeners"),ut=Symbol("discarded"),Yn=a=>Promise.resolve().then(a),ky=a=>a(),xy=a=>a==="end"||a==="finish"||a==="prefinish",Ty=a=>a instanceof ArrayBuffer||!!a&&typeof a=="object"&&a.constructor&&a.constructor.name==="ArrayBuffer"&&a.byteLength>=0,_y=a=>!Buffer.isBuffer(a)&&ArrayBuffer.isView(a),wi=class{src;dest;opts;ondrain;constructor(e,t,s){this.src=e,this.dest=t,this.opts=s,this.ondrain=()=>e[sn](),this.dest.on("drain",this.ondrain);}unpipe(){this.dest.removeListener("drain",this.ondrain);}proxyErrors(e){}end(){this.unpipe(),this.opts.end&&this.dest.end();}},Va=class extends wi{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe();}constructor(e,t,s){super(e,t,s),this.proxyErrors=n=>t.emit("error",n),e.on("error",this.proxyErrors);}},Ry=a=>!!a.objectMode,Ay=a=>!a.objectMode&&!!a.encoding&&a.encoding!=="buffer",ts=class extends EventEmitter{[Ne]=false;[Kn]=false;[Xe]=[];[$e]=[];[Je];[xt];[Dt];[tn];[Ut]=false;[es]=false;[hi]=false;[fi]=false;[Jn]=null;[Fe]=0;[Ee]=false;[Vn];[vi]=false;[ws]=0;[ut]=false;writable=true;readable=true;constructor(...e){let t=e[0]||{};if(super(),t.objectMode&&typeof t.encoding=="string")throw new TypeError("Encoding and objectMode may not be used together");Ry(t)?(this[Je]=true,this[xt]=null):Ay(t)?(this[xt]=t.encoding,this[Je]=false):(this[Je]=false,this[xt]=null),this[Dt]=!!t.async,this[tn]=this[xt]?new StringDecoder(this[xt]):null,t&&t.debugExposeBuffer===true&&Object.defineProperty(this,"buffer",{get:()=>this[$e]}),t&&t.debugExposePipes===true&&Object.defineProperty(this,"pipes",{get:()=>this[Xe]});let{signal:s}=t;s&&(this[Vn]=s,s.aborted?this[Ka]():s.addEventListener("abort",()=>this[Ka]()));}get bufferLength(){return this[Fe]}get encoding(){return this[xt]}set encoding(e){throw new Error("Encoding must be set at instantiation time")}setEncoding(e){throw new Error("Encoding must be set at instantiation time")}get objectMode(){return this[Je]}set objectMode(e){throw new Error("objectMode must be set at instantiation time")}get async(){return this[Dt]}set async(e){this[Dt]=this[Dt]||!!e;}[Ka](){this[vi]=true,this.emit("abort",this[Vn]?.reason),this.destroy(this[Vn]?.reason);}get aborted(){return this[vi]}set aborted(e){}write(e,t,s){if(this[vi])return false;if(this[Ut])throw new Error("write after end");if(this[Ee])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),true;typeof t=="function"&&(s=t,t="utf8"),t||(t="utf8");let n=this[Dt]?Yn:ky;if(!this[Je]&&!Buffer.isBuffer(e)){if(_y(e))e=Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if(Ty(e))e=Buffer.from(e);else if(typeof e!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[Je]?(this[Ne]&&this[Fe]!==0&&this[yi](true),this[Ne]?this.emit("data",e):this[qa](e),this[Fe]!==0&&this.emit("readable"),s&&n(s),this[Ne]):e.length?(typeof e=="string"&&!(t===this[xt]&&!this[tn]?.lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xt]&&(e=this[tn].write(e)),this[Ne]&&this[Fe]!==0&&this[yi](true),this[Ne]?this.emit("data",e):this[qa](e),this[Fe]!==0&&this.emit("readable"),s&&n(s),this[Ne]):(this[Fe]!==0&&this.emit("readable"),s&&n(s),this[Ne])}read(e){if(this[Ee])return null;if(this[ut]=false,this[Fe]===0||e===0||e&&e>this[Fe])return this[Wt](),null;this[Je]&&(e=null),this[$e].length>1&&!this[Je]&&(this[$e]=[this[xt]?this[$e].join(""):Buffer.concat(this[$e],this[Fe])]);let t=this[vd](e||null,this[$e][0]);return this[Wt](),t}[vd](e,t){if(this[Je])this[bi]();else {let s=t;e===s.length||e===null?this[bi]():typeof s=="string"?(this[$e][0]=s.slice(e),t=s.slice(0,e),this[Fe]-=e):(this[$e][0]=s.subarray(e),t=s.subarray(0,e),this[Fe]-=e);}return this.emit("data",t),!this[$e].length&&!this[Ut]&&this.emit("drain"),t}end(e,t,s){return typeof e=="function"&&(s=e,e=void 0),typeof t=="function"&&(s=t,t="utf8"),e!==void 0&&this.write(e,t),s&&this.once("end",s),this[Ut]=true,this.writable=false,(this[Ne]||!this[Kn])&&this[Wt](),this}[sn](){this[Ee]||(!this[ws]&&!this[Xe].length&&(this[ut]=true),this[Kn]=false,this[Ne]=true,this.emit("resume"),this[$e].length?this[yi]():this[Ut]?this[Wt]():this.emit("drain"));}resume(){return this[sn]()}pause(){this[Ne]=false,this[Kn]=true,this[ut]=false;}get destroyed(){return this[Ee]}get flowing(){return this[Ne]}get paused(){return this[Kn]}[qa](e){this[Je]?this[Fe]+=1:this[Fe]+=e.length,this[$e].push(e);}[bi](){return this[Je]?this[Fe]-=1:this[Fe]-=this[$e][0].length,this[$e].shift()}[yi](e=false){do;while(this[wd](this[bi]())&&this[$e].length);!e&&!this[$e].length&&!this[Ut]&&this.emit("drain");}[wd](e){return this.emit("data",e),this[Ne]}pipe(e,t){if(this[Ee])return e;this[ut]=false;let s=this[es];return t=t||{},e===bd.stdout||e===bd.stderr?t.end=false:t.end=t.end!==false,t.proxyErrors=!!t.proxyErrors,s?t.end&&e.end():(this[Xe].push(t.proxyErrors?new Va(this,e,t):new wi(this,e,t)),this[Dt]?Yn(()=>this[sn]()):this[sn]()),e}unpipe(e){let t=this[Xe].find(s=>s.dest===e);t&&(this[Xe].length===1?(this[Ne]&&this[ws]===0&&(this[Ne]=false),this[Xe]=[]):this[Xe].splice(this[Xe].indexOf(t),1),t.unpipe());}addListener(e,t){return this.on(e,t)}on(e,t){let s=super.on(e,t);if(e==="data")this[ut]=false,this[ws]++,!this[Xe].length&&!this[Ne]&&this[sn]();else if(e==="readable"&&this[Fe]!==0)super.emit("readable");else if(xy(e)&&this[es])super.emit(e),this.removeAllListeners(e);else if(e==="error"&&this[Jn]){let n=t;this[Dt]?Yn(()=>n.call(this,this[Jn])):n.call(this,this[Jn]);}return s}removeListener(e,t){return this.off(e,t)}off(e,t){let s=super.off(e,t);return e==="data"&&(this[ws]=this.listeners("data").length,this[ws]===0&&!this[ut]&&!this[Xe].length&&(this[Ne]=false)),s}removeAllListeners(e){let t=super.removeAllListeners(e);return (e==="data"||e===void 0)&&(this[ws]=0,!this[ut]&&!this[Xe].length&&(this[Ne]=false)),t}get emittedEnd(){return this[es]}[Wt](){!this[hi]&&!this[es]&&!this[Ee]&&this[$e].length===0&&this[Ut]&&(this[hi]=true,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[fi]&&this.emit("close"),this[hi]=false);}emit(e,...t){let s=t[0];if(e!=="error"&&e!=="close"&&e!==Ee&&this[Ee])return false;if(e==="data")return !this[Je]&&!s?false:this[Dt]?(Yn(()=>this[Ha](s)),true):this[Ha](s);if(e==="end")return this[Cd]();if(e==="close"){if(this[fi]=true,!this[es]&&!this[Ee])return false;let r=super.emit("close");return this.removeAllListeners("close"),r}else if(e==="error"){this[Jn]=s,super.emit(za,s);let r=!this[Vn]||this.listeners("error").length?super.emit("error",s):false;return this[Wt](),r}else if(e==="resume"){let r=super.emit("resume");return this[Wt](),r}else if(e==="finish"||e==="prefinish"){let r=super.emit(e);return this.removeAllListeners(e),r}let n=super.emit(e,...t);return this[Wt](),n}[Ha](e){for(let s of this[Xe])s.dest.write(e)===false&&this.pause();let t=this[ut]?false:super.emit("data",e);return this[Wt](),t}[Cd](){return this[es]?false:(this[es]=true,this.readable=false,this[Dt]?(Yn(()=>this[Ja]()),true):this[Ja]())}[Ja](){if(this[tn]){let t=this[tn].end();if(t){for(let s of this[Xe])s.dest.write(t);this[ut]||super.emit("data",t);}}for(let t of this[Xe])t.end();let e=super.emit("end");return this.removeAllListeners("end"),e}async collect(){let e=Object.assign([],{dataLength:0});this[Je]||(e.dataLength=0);let t=this.promise();return this.on("data",s=>{e.push(s),this[Je]||(e.dataLength+=s.length);}),await t,e}async concat(){if(this[Je])throw new Error("cannot concat in objectMode");let e=await this.collect();return this[xt]?e.join(""):Buffer.concat(e,e.dataLength)}async promise(){return new Promise((e,t)=>{this.on(Ee,()=>t(new Error("stream destroyed"))),this.on("error",s=>t(s)),this.on("end",()=>e());})}[Symbol.asyncIterator](){this[ut]=false;let e=false,t=async()=>(this.pause(),e=true,{value:void 0,done:true});return {next:()=>{if(e)return t();let n=this.read();if(n!==null)return Promise.resolve({done:false,value:n});if(this[Ut])return t();let r,i,o=d=>{this.off("data",l),this.off("end",c),this.off(Ee,u),t(),i(d);},l=d=>{this.off("error",o),this.off("end",c),this.off(Ee,u),this.pause(),r({value:d,done:!!this[Ut]});},c=()=>{this.off("error",o),this.off("data",l),this.off(Ee,u),t(),r({done:true,value:void 0});},u=()=>o(new Error("stream destroyed"));return new Promise((d,p)=>{i=p,r=d,this.once(Ee,u),this.once("error",o),this.once("end",c),this.once("data",l);})},throw:t,return:t,[Symbol.asyncIterator](){return this}}}[Symbol.iterator](){this[ut]=false;let e=false,t=()=>(this.pause(),this.off(za,t),this.off(Ee,t),this.off("end",t),e=true,{done:true,value:void 0}),s=()=>{if(e)return t();let n=this.read();return n===null?t():{done:false,value:n}};return this.once("end",t),this.once(za,t),this.once(Ee,t),{next:s,throw:t,return:t,[Symbol.iterator](){return this}}}destroy(e){if(this[Ee])return e?this.emit("error",e):this.emit(Ee),this;this[Ee]=true,this[ut]=true,this[$e].length=0,this[Fe]=0;let t=this;return typeof t.close=="function"&&!this[fi]&&t.close(),e?this.emit("error",e):this.emit(Ee),this}static get isStream(){return wy}};var $y=realpathSync.native,Qn={lstatSync:lstatSync,readdir:readdir$1,readdirSync:readdirSync,readlinkSync:readlinkSync,realpathSync:$y,promises:{lstat:lstat,readdir:readdir,readlink:readlink,realpath:realpath}},Rd=a=>!a||a===Qn||a===Me?Qn:{...Qn,...a,promises:{...Qn.promises,...a.promises||{}}},Ad=/^\\\\\?\\([a-z]:)\\?$/i,Uy=a=>a.replace(/\//g,"\\").replace(Ad,"$1\\"),Wy=/[\\\/]/,gt=0,Ed=1,Id=2,Ot=4,Md=6,Pd=8,Cs=10,Dd=12,mt=15,Xn=~mt,Xa=16,kd=32,Zn=64,Tt=128,Ci=256,ki=512,xd=Zn|Tt|ki,qy=1023,Qa=a=>a.isFile()?Pd:a.isDirectory()?Ot:a.isSymbolicLink()?Cs:a.isCharacterDevice()?Id:a.isBlockDevice()?Md:a.isSocket()?Dd:a.isFIFO()?Ed:gt,Td=new Map,er=a=>{let e=Td.get(a);if(e)return e;let t=a.normalize("NFKD");return Td.set(a,t),t},_d=new Map,Si=a=>{let e=_d.get(a);if(e)return e;let t=er(a.toLowerCase());return _d.set(a,t),t},xi=class extends Hn{constructor(){super({max:256});}},el=class extends Hn{constructor(e=16*1024){super({maxSize:e,sizeCalculation:t=>t.length+1});}},Od=Symbol("PathScurry setAsCwd"),Ke=class{name;root;roots;parent;nocase;isCWD=false;#e;#t;get dev(){return this.#t}#i;get mode(){return this.#i}#n;get nlink(){return this.#n}#o;get uid(){return this.#o}#w;get gid(){return this.#w}#c;get rdev(){return this.#c}#d;get blksize(){return this.#d}#a;get ino(){return this.#a}#l;get size(){return this.#l}#r;get blocks(){return this.#r}#f;get atimeMs(){return this.#f}#y;get mtimeMs(){return this.#y}#m;get ctimeMs(){return this.#m}#p;get birthtimeMs(){return this.#p}#k;get atime(){return this.#k}#h;get mtime(){return this.#h}#x;get ctime(){return this.#x}#T;get birthtime(){return this.#T}#v;#C;#S;#g;#E;#_;#s;#P;#b;#I;get parentPath(){return (this.parent||this).fullpath()}get path(){return this.parentPath}constructor(e,t=gt,s,n,r,i,o){this.name=e,this.#v=r?Si(e):er(e),this.#s=t&qy,this.nocase=r,this.roots=n,this.root=s||this,this.#P=i,this.#S=o.fullpath,this.#E=o.relative,this.#_=o.relativePosix,this.parent=o.parent,this.parent?this.#e=this.parent.#e:this.#e=Rd(o.fs);}depth(){return this.#C!==void 0?this.#C:this.parent?this.#C=this.parent.depth()+1:this.#C=0}childrenCache(){return this.#P}resolve(e){if(!e)return this;let t=this.getRootString(e),n=e.substring(t.length).split(this.splitSep);return t?this.getRoot(t).#D(n):this.#D(n)}#D(e){let t=this;for(let s of e)t=t.child(s);return t}children(){let e=this.#P.get(this);if(e)return e;let t=Object.assign([],{provisional:0});return this.#P.set(this,t),this.#s&=~Xa,t}child(e,t){if(e===""||e===".")return this;if(e==="..")return this.parent||this;let s=this.children(),n=this.nocase?Si(e):er(e);for(let l of s)if(l.#v===n)return l;let r=this.parent?this.sep:"",i=this.#S?this.#S+r+e:void 0,o=this.newChild(e,gt,{...t,parent:this,fullpath:i});return this.canReaddir()||(o.#s|=Tt),s.push(o),o}relative(){if(this.isCWD)return "";if(this.#E!==void 0)return this.#E;let e=this.name,t=this.parent;if(!t)return this.#E=this.name;let s=t.relative();return s+(!s||!t.parent?"":this.sep)+e}relativePosix(){if(this.sep==="/")return this.relative();if(this.isCWD)return "";if(this.#_!==void 0)return this.#_;let e=this.name,t=this.parent;if(!t)return this.#_=this.fullpathPosix();let s=t.relativePosix();return s+(!s||!t.parent?"":"/")+e}fullpath(){if(this.#S!==void 0)return this.#S;let e=this.name,t=this.parent;if(!t)return this.#S=this.name;let n=t.fullpath()+(t.parent?this.sep:"")+e;return this.#S=n}fullpathPosix(){if(this.#g!==void 0)return this.#g;if(this.sep==="/")return this.#g=this.fullpath();if(!this.parent){let n=this.fullpath().replace(/\\/g,"/");return /^[a-z]:\//i.test(n)?this.#g=`//?/${n}`:this.#g=n}let e=this.parent,t=e.fullpathPosix(),s=t+(!t||!e.parent?"":"/")+this.name;return this.#g=s}isUnknown(){return (this.#s&mt)===gt}isType(e){return this[`is${e}`]()}getType(){return this.isUnknown()?"Unknown":this.isDirectory()?"Directory":this.isFile()?"File":this.isSymbolicLink()?"SymbolicLink":this.isFIFO()?"FIFO":this.isCharacterDevice()?"CharacterDevice":this.isBlockDevice()?"BlockDevice":this.isSocket()?"Socket":"Unknown"}isFile(){return (this.#s&mt)===Pd}isDirectory(){return (this.#s&mt)===Ot}isCharacterDevice(){return (this.#s&mt)===Id}isBlockDevice(){return (this.#s&mt)===Md}isFIFO(){return (this.#s&mt)===Ed}isSocket(){return (this.#s&mt)===Dd}isSymbolicLink(){return (this.#s&Cs)===Cs}lstatCached(){return this.#s&kd?this:void 0}readlinkCached(){return this.#b}realpathCached(){return this.#I}readdirCached(){let e=this.children();return e.slice(0,e.provisional)}canReadlink(){if(this.#b)return true;if(!this.parent)return false;let e=this.#s&mt;return !(e!==gt&&e!==Cs||this.#s&Ci||this.#s&Tt)}calledReaddir(){return !!(this.#s&Xa)}isENOENT(){return !!(this.#s&Tt)}isNamed(e){return this.nocase?this.#v===Si(e):this.#v===er(e)}async readlink(){let e=this.#b;if(e)return e;if(this.canReadlink()&&this.parent)try{let t=await this.#e.promises.readlink(this.fullpath()),s=(await this.parent.realpath())?.resolve(t);if(s)return this.#b=s}catch(t){this.#u(t.code);return}}readlinkSync(){let e=this.#b;if(e)return e;if(this.canReadlink()&&this.parent)try{let t=this.#e.readlinkSync(this.fullpath()),s=this.parent.realpathSync()?.resolve(t);if(s)return this.#b=s}catch(t){this.#u(t.code);return}}#O(e){this.#s|=Xa;for(let t=e.provisional;t<e.length;t++){let s=e[t];s&&s.#L();}}#L(){this.#s&Tt||(this.#s=(this.#s|Tt)&Xn,this.#R());}#R(){let e=this.children();e.provisional=0;for(let t of e)t.#L();}#A(){this.#s|=ki,this.#N();}#N(){if(this.#s&Zn)return;let e=this.#s;(e&mt)===Ot&&(e&=Xn),this.#s=e|Zn,this.#R();}#$(e=""){e==="ENOTDIR"||e==="EPERM"?this.#N():e==="ENOENT"?this.#L():this.children().provisional=0;}#F(e=""){e==="ENOTDIR"?this.parent.#N():e==="ENOENT"&&this.#L();}#u(e=""){let t=this.#s;t|=Ci,e==="ENOENT"&&(t|=Tt),(e==="EINVAL"||e==="UNKNOWN")&&(t&=Xn),this.#s=t,e==="ENOTDIR"&&this.parent&&this.parent.#N();}#j(e,t){return this.#M(e,t)||this.#B(e,t)}#B(e,t){let s=Qa(e),n=this.newChild(e.name,s,{parent:this}),r=n.#s&mt;return r!==Ot&&r!==Cs&&r!==gt&&(n.#s|=Zn),t.unshift(n),t.provisional++,n}#M(e,t){for(let s=t.provisional;s<t.length;s++){let n=t[s];if((this.nocase?Si(e.name):er(e.name))===n.#v)return this.#G(e,n,s,t)}}#G(e,t,s,n){let r=t.name;return t.#s=t.#s&Xn|Qa(e),r!==e.name&&(t.name=e.name),s!==n.provisional&&(s===n.length-1?n.pop():n.splice(s,1),n.unshift(t)),n.provisional++,t}async lstat(){if((this.#s&Tt)===0)try{return this.#z(await this.#e.promises.lstat(this.fullpath())),this}catch(e){this.#F(e.code);}}lstatSync(){if((this.#s&Tt)===0)try{return this.#z(this.#e.lstatSync(this.fullpath())),this}catch(e){this.#F(e.code);}}#z(e){let{atime:t,atimeMs:s,birthtime:n,birthtimeMs:r,blksize:i,blocks:o,ctime:l,ctimeMs:c,dev:u,gid:d,ino:p,mode:h,mtime:g,mtimeMs:f,nlink:b,rdev:y,size:w,uid:C}=e;this.#k=t,this.#f=s,this.#T=n,this.#p=r,this.#d=i,this.#r=o,this.#x=l,this.#m=c,this.#t=u,this.#w=d,this.#a=p,this.#i=h,this.#h=g,this.#y=f,this.#n=b,this.#c=y,this.#l=w,this.#o=C;let S=Qa(e);this.#s=this.#s&Xn|S|kd,S!==gt&&S!==Ot&&S!==Cs&&(this.#s|=Zn);}#W=[];#q=false;#H(e){this.#q=false;let t=this.#W.slice();this.#W.length=0,t.forEach(s=>s(null,e));}readdirCB(e,t=false){if(!this.canReaddir()){t?e(null,[]):queueMicrotask(()=>e(null,[]));return}let s=this.children();if(this.calledReaddir()){let r=s.slice(0,s.provisional);t?e(null,r):queueMicrotask(()=>e(null,r));return}if(this.#W.push(e),this.#q)return;this.#q=true;let n=this.fullpath();this.#e.readdir(n,{withFileTypes:true},(r,i)=>{if(r)this.#$(r.code),s.provisional=0;else {for(let o of i)this.#j(o,s);this.#O(s);}this.#H(s.slice(0,s.provisional));});}#U;async readdir(){if(!this.canReaddir())return [];let e=this.children();if(this.calledReaddir())return e.slice(0,e.provisional);let t=this.fullpath();if(this.#U)await this.#U;else {let s=()=>{};this.#U=new Promise(n=>s=n);try{for(let n of await this.#e.promises.readdir(t,{withFileTypes:!0}))this.#j(n,e);this.#O(e);}catch(n){this.#$(n.code),e.provisional=0;}this.#U=void 0,s();}return e.slice(0,e.provisional)}readdirSync(){if(!this.canReaddir())return [];let e=this.children();if(this.calledReaddir())return e.slice(0,e.provisional);let t=this.fullpath();try{for(let s of this.#e.readdirSync(t,{withFileTypes:!0}))this.#j(s,e);this.#O(e);}catch(s){this.#$(s.code),e.provisional=0;}return e.slice(0,e.provisional)}canReaddir(){if(this.#s&xd)return false;let e=mt&this.#s;return e===gt||e===Ot||e===Cs}shouldWalk(e,t){return (this.#s&Ot)===Ot&&!(this.#s&xd)&&!e.has(this)&&(!t||t(this))}async realpath(){if(this.#I)return this.#I;if(!((ki|Ci|Tt)&this.#s))try{let e=await this.#e.promises.realpath(this.fullpath());return this.#I=this.resolve(e)}catch{this.#A();}}realpathSync(){if(this.#I)return this.#I;if(!((ki|Ci|Tt)&this.#s))try{let e=this.#e.realpathSync(this.fullpath());return this.#I=this.resolve(e)}catch{this.#A();}}[Od](e){if(e===this)return;e.isCWD=false,this.isCWD=true;let t=new Set([]),s=[],n=this;for(;n&&n.parent;)t.add(n),n.#E=s.join(this.sep),n.#_=s.join("/"),n=n.parent,s.push("..");for(n=e;n&&n.parent&&!t.has(n);)n.#E=void 0,n.#_=void 0,n=n.parent;}},Ti=class a extends Ke{sep="\\";splitSep=Wy;constructor(e,t=gt,s,n,r,i,o){super(e,t,s,n,r,i,o);}newChild(e,t=gt,s={}){return new a(e,t,this.root,this.roots,this.nocase,this.childrenCache(),s)}getRootString(e){return win32.parse(e).root}getRoot(e){if(e=Uy(e.toUpperCase()),e===this.root.name)return this.root;for(let[t,s]of Object.entries(this.roots))if(this.sameRoot(e,t))return this.roots[e]=s;return this.roots[e]=new nn(e,this).root}sameRoot(e,t=this.root.name){return e=e.toUpperCase().replace(/\//g,"\\").replace(Ad,"$1\\"),e===t}},_i=class a extends Ke{splitSep="/";sep="/";constructor(e,t=gt,s,n,r,i,o){super(e,t,s,n,r,i,o);}getRootString(e){return e.startsWith("/")?"/":""}getRoot(e){return this.root}newChild(e,t=gt,s={}){return new a(e,t,this.root,this.roots,this.nocase,this.childrenCache(),s)}},Ri=class{root;rootPath;roots;cwd;#e;#t;#i;nocase;#n;constructor(e=process.cwd(),t,s,{nocase:n,childrenCacheSize:r=16*1024,fs:i=Qn}={}){this.#n=Rd(i),(e instanceof URL||e.startsWith("file://"))&&(e=fileURLToPath(e));let o=t.resolve(e);this.roots=Object.create(null),this.rootPath=this.parseRootPath(o),this.#e=new xi,this.#t=new xi,this.#i=new el(r);let l=o.substring(this.rootPath.length).split(s);if(l.length===1&&!l[0]&&l.pop(),n===void 0)throw new TypeError("must provide nocase setting to PathScurryBase ctor");this.nocase=n,this.root=this.newRoot(this.#n),this.roots[this.rootPath]=this.root;let c=this.root,u=l.length-1,d=t.sep,p=this.rootPath,h=false;for(let g of l){let f=u--;c=c.child(g,{relative:new Array(f).fill("..").join(d),relativePosix:new Array(f).fill("..").join("/"),fullpath:p+=(h?"":d)+g}),h=true;}this.cwd=c;}depth(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.depth()}childrenCache(){return this.#i}resolve(...e){let t="";for(let r=e.length-1;r>=0;r--){let i=e[r];if(!(!i||i===".")&&(t=t?`${i}/${t}`:i,this.isAbsolute(i)))break}let s=this.#e.get(t);if(s!==void 0)return s;let n=this.cwd.resolve(t).fullpath();return this.#e.set(t,n),n}resolvePosix(...e){let t="";for(let r=e.length-1;r>=0;r--){let i=e[r];if(!(!i||i===".")&&(t=t?`${i}/${t}`:i,this.isAbsolute(i)))break}let s=this.#t.get(t);if(s!==void 0)return s;let n=this.cwd.resolve(t).fullpathPosix();return this.#t.set(t,n),n}relative(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.relative()}relativePosix(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.relativePosix()}basename(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.name}dirname(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),(e.parent||e).fullpath()}async readdir(e=this.cwd,t={withFileTypes:true}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s}=t;if(e.canReaddir()){let n=await e.readdir();return s?n:n.map(r=>r.name)}else return []}readdirSync(e=this.cwd,t={withFileTypes:true}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true}=t;return e.canReaddir()?s?e.readdirSync():e.readdirSync().map(n=>n.name):[]}async lstat(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.lstat()}lstatSync(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.lstatSync()}async readlink(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e.withFileTypes,e=this.cwd);let s=await e.readlink();return t?s:s?.fullpath()}readlinkSync(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e.withFileTypes,e=this.cwd);let s=e.readlinkSync();return t?s:s?.fullpath()}async realpath(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e.withFileTypes,e=this.cwd);let s=await e.realpath();return t?s:s?.fullpath()}realpathSync(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e.withFileTypes,e=this.cwd);let s=e.realpathSync();return t?s:s?.fullpath()}async walk(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t,o=[];(!r||r(e))&&o.push(s?e:e.fullpath());let l=new Set,c=(d,p)=>{l.add(d),d.readdirCB((h,g)=>{if(h)return p(h);let f=g.length;if(!f)return p();let b=()=>{--f===0&&p();};for(let y of g)(!r||r(y))&&o.push(s?y:y.fullpath()),n&&y.isSymbolicLink()?y.realpath().then(w=>w?.isUnknown()?w.lstat():w).then(w=>w?.shouldWalk(l,i)?c(w,b):b()):y.shouldWalk(l,i)?c(y,b):b();},true);},u=e;return new Promise((d,p)=>{c(u,h=>{if(h)return p(h);d(o);});})}walkSync(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t,o=[];(!r||r(e))&&o.push(s?e:e.fullpath());let l=new Set([e]);for(let c of l){let u=c.readdirSync();for(let d of u){(!r||r(d))&&o.push(s?d:d.fullpath());let p=d;if(d.isSymbolicLink()){if(!(n&&(p=d.realpathSync())))continue;p.isUnknown()&&p.lstatSync();}p.shouldWalk(l,i)&&l.add(p);}}return o}[Symbol.asyncIterator](){return this.iterate()}iterate(e=this.cwd,t={}){return typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd),this.stream(e,t)[Symbol.asyncIterator]()}[Symbol.iterator](){return this.iterateSync()}*iterateSync(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t;(!r||r(e))&&(yield s?e:e.fullpath());let o=new Set([e]);for(let l of o){let c=l.readdirSync();for(let u of c){(!r||r(u))&&(yield s?u:u.fullpath());let d=u;if(u.isSymbolicLink()){if(!(n&&(d=u.realpathSync())))continue;d.isUnknown()&&d.lstatSync();}d.shouldWalk(o,i)&&o.add(d);}}}stream(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t,o=new ts({objectMode:true});(!r||r(e))&&o.write(s?e:e.fullpath());let l=new Set,c=[e],u=0,d=()=>{let p=false;for(;!p;){let h=c.shift();if(!h){u===0&&o.end();return}u++,l.add(h);let g=(b,y,w=false)=>{if(b)return o.emit("error",b);if(n&&!w){let C=[];for(let S of y)S.isSymbolicLink()&&C.push(S.realpath().then(T=>T?.isUnknown()?T.lstat():T));if(C.length){Promise.all(C).then(()=>g(null,y,true));return}}for(let C of y)C&&(!r||r(C))&&(o.write(s?C:C.fullpath())||(p=true));u--;for(let C of y){let S=C.realpathCached()||C;S.shouldWalk(l,i)&&c.push(S);}p&&!o.flowing?o.once("drain",d):f||d();},f=true;h.readdirCB(g,true),f=false;}};return d(),o}streamSync(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t,o=new ts({objectMode:true}),l=new Set;(!r||r(e))&&o.write(s?e:e.fullpath());let c=[e],u=0,d=()=>{let p=false;for(;!p;){let h=c.shift();if(!h){u===0&&o.end();return}u++,l.add(h);let g=h.readdirSync();for(let f of g)(!r||r(f))&&(o.write(s?f:f.fullpath())||(p=true));u--;for(let f of g){let b=f;if(f.isSymbolicLink()){if(!(n&&(b=f.realpathSync())))continue;b.isUnknown()&&b.lstatSync();}b.shouldWalk(l,i)&&c.push(b);}}p&&!o.flowing&&o.once("drain",d);};return d(),o}chdir(e=this.cwd){let t=this.cwd;this.cwd=typeof e=="string"?this.cwd.resolve(e):e,this.cwd[Od](t);}},nn=class extends Ri{sep="\\";constructor(e=process.cwd(),t={}){let{nocase:s=true}=t;super(e,win32,"\\",{...t,nocase:s}),this.nocase=s;for(let n=this.cwd;n;n=n.parent)n.nocase=this.nocase;}parseRootPath(e){return win32.parse(e).root.toUpperCase()}newRoot(e){return new Ti(this.rootPath,Ot,void 0,this.roots,this.nocase,this.childrenCache(),{fs:e})}isAbsolute(e){return e.startsWith("/")||e.startsWith("\\")||/^[a-z]:(\/|\\)/i.test(e)}},rn=class extends Ri{sep="/";constructor(e=process.cwd(),t={}){let{nocase:s=false}=t;super(e,posix,"/",{...t,nocase:s}),this.nocase=s;}parseRootPath(e){return "/"}newRoot(e){return new _i(this.rootPath,Ot,void 0,this.roots,this.nocase,this.childrenCache(),{fs:e})}isAbsolute(e){return e.startsWith("/")}},tr=class extends rn{constructor(e=process.cwd(),t={}){let{nocase:s=true}=t;super(e,{...t,nocase:s});}};process.platform==="win32"?Ti:_i;var Ld=process.platform==="win32"?nn:process.platform==="darwin"?tr:rn;var zy=a=>a.length>=1,Hy=a=>a.length>=1,on=class a{#e;#t;#i;length;#n;#o;#w;#c;#d;#a;#l=true;constructor(e,t,s,n){if(!zy(e))throw new TypeError("empty pattern list");if(!Hy(t))throw new TypeError("empty glob list");if(t.length!==e.length)throw new TypeError("mismatched pattern list and glob list lengths");if(this.length=e.length,s<0||s>=this.length)throw new TypeError("index out of range");if(this.#e=e,this.#t=t,this.#i=s,this.#n=n,this.#i===0){if(this.isUNC()){let[r,i,o,l,...c]=this.#e,[u,d,p,h,...g]=this.#t;c[0]===""&&(c.shift(),g.shift());let f=[r,i,o,l,""].join("/"),b=[u,d,p,h,""].join("/");this.#e=[f,...c],this.#t=[b,...g],this.length=this.#e.length;}else if(this.isDrive()||this.isAbsolute()){let[r,...i]=this.#e,[o,...l]=this.#t;i[0]===""&&(i.shift(),l.shift());let c=r+"/",u=o+"/";this.#e=[c,...i],this.#t=[u,...l],this.length=this.#e.length;}}}pattern(){return this.#e[this.#i]}isString(){return typeof this.#e[this.#i]=="string"}isGlobstar(){return this.#e[this.#i]===Ge}isRegExp(){return this.#e[this.#i]instanceof RegExp}globString(){return this.#w=this.#w||(this.#i===0?this.isAbsolute()?this.#t[0]+this.#t.slice(1).join("/"):this.#t.join("/"):this.#t.slice(this.#i).join("/"))}hasMore(){return this.length>this.#i+1}rest(){return this.#o!==void 0?this.#o:this.hasMore()?(this.#o=new a(this.#e,this.#t,this.#i+1,this.#n),this.#o.#a=this.#a,this.#o.#d=this.#d,this.#o.#c=this.#c,this.#o):this.#o=null}isUNC(){let e=this.#e;return this.#d!==void 0?this.#d:this.#d=this.#n==="win32"&&this.#i===0&&e[0]===""&&e[1]===""&&typeof e[2]=="string"&&!!e[2]&&typeof e[3]=="string"&&!!e[3]}isDrive(){let e=this.#e;return this.#c!==void 0?this.#c:this.#c=this.#n==="win32"&&this.#i===0&&this.length>1&&typeof e[0]=="string"&&/^[a-z]:$/i.test(e[0])}isAbsolute(){let e=this.#e;return this.#a!==void 0?this.#a:this.#a=e[0]===""&&e.length>1||this.isDrive()||this.isUNC()}root(){let e=this.#e[0];return typeof e=="string"&&this.isAbsolute()&&this.#i===0?e:""}checkFollowGlobstar(){return !(this.#i===0||!this.isGlobstar()||!this.#l)}markFollowGlobstar(){return this.#i===0||!this.isGlobstar()||!this.#l?false:(this.#l=false,true)}};var Jy=typeof process=="object"&&process&&typeof process.platform=="string"?process.platform:"linux",an=class{relative;relativeChildren;absolute;absoluteChildren;platform;mmopts;constructor(e,{nobrace:t,nocase:s,noext:n,noglobstar:r,platform:i=Jy}){this.relative=[],this.absolute=[],this.relativeChildren=[],this.absoluteChildren=[],this.platform=i,this.mmopts={dot:true,nobrace:t,nocase:s,noext:n,noglobstar:r,optimizationLevel:2,platform:i,nocomment:true,nonegate:true};for(let o of e)this.add(o);}add(e){let t=new ct(e,this.mmopts);for(let s=0;s<t.set.length;s++){let n=t.set[s],r=t.globParts[s];if(!n||!r)throw new Error("invalid pattern object");for(;n[0]==="."&&r[0]===".";)n.shift(),r.shift();let i=new on(n,r,0,this.platform),o=new ct(i.globString(),this.mmopts),l=r[r.length-1]==="**",c=i.isAbsolute();c?this.absolute.push(o):this.relative.push(o),l&&(c?this.absoluteChildren.push(o):this.relativeChildren.push(o));}}ignored(e){let t=e.fullpath(),s=`${t}/`,n=e.relative()||".",r=`${n}/`;for(let i of this.relative)if(i.match(n)||i.match(r))return true;for(let i of this.absolute)if(i.match(t)||i.match(s))return true;return false}childrenIgnored(e){let t=e.fullpath()+"/",s=(e.relative()||".")+"/";for(let n of this.relativeChildren)if(n.match(s))return true;for(let n of this.absoluteChildren)if(n.match(t))return true;return false}};var tl=class a{store;constructor(e=new Map){this.store=e;}copy(){return new a(new Map(this.store))}hasWalked(e,t){return this.store.get(e.fullpath())?.has(t.globString())}storeWalked(e,t){let s=e.fullpath(),n=this.store.get(s);n?n.add(t.globString()):this.store.set(s,new Set([t.globString()]));}},sl=class{store=new Map;add(e,t,s){let n=(t?2:0)|(s?1:0),r=this.store.get(e);this.store.set(e,r===void 0?n:n&r);}entries(){return [...this.store.entries()].map(([e,t])=>[e,!!(t&2),!!(t&1)])}},nl=class{store=new Map;add(e,t){if(!e.canReaddir())return;let s=this.store.get(e);s?s.find(n=>n.globString()===t.globString())||s.push(t):this.store.set(e,[t]);}get(e){let t=this.store.get(e);if(!t)throw new Error("attempting to walk unknown path");return t}entries(){return this.keys().map(e=>[e,this.store.get(e)])}keys(){return [...this.store.keys()].filter(e=>e.canReaddir())}},sr=class a{hasWalkedCache;matches=new sl;subwalks=new nl;patterns;follow;dot;opts;constructor(e,t){this.opts=e,this.follow=!!e.follow,this.dot=!!e.dot,this.hasWalkedCache=t?t.copy():new tl;}processPatterns(e,t){this.patterns=t;let s=t.map(n=>[e,n]);for(let[n,r]of s){this.hasWalkedCache.storeWalked(n,r);let i=r.root(),o=r.isAbsolute()&&this.opts.absolute!==false;if(i){n=n.resolve(i==="/"&&this.opts.root!==void 0?this.opts.root:i);let d=r.rest();if(d)r=d;else {this.matches.add(n,true,false);continue}}if(n.isENOENT())continue;let l,c,u=false;for(;typeof(l=r.pattern())=="string"&&(c=r.rest());)n=n.resolve(l),r=c,u=true;if(l=r.pattern(),c=r.rest(),u){if(this.hasWalkedCache.hasWalked(n,r))continue;this.hasWalkedCache.storeWalked(n,r);}if(typeof l=="string"){let d=l===".."||l===""||l===".";this.matches.add(n.resolve(l),o,d);continue}else if(l===Ge){(!n.isSymbolicLink()||this.follow||r.checkFollowGlobstar())&&this.subwalks.add(n,r);let d=c?.pattern(),p=c?.rest();if(!c||(d===""||d===".")&&!p)this.matches.add(n,o,d===""||d===".");else if(d===".."){let h=n.parent||n;p?this.hasWalkedCache.hasWalked(h,p)||this.subwalks.add(h,p):this.matches.add(h,o,true);}}else l instanceof RegExp&&this.subwalks.add(n,r);}return this}subwalkTargets(){return this.subwalks.keys()}child(){return new a(this.opts,this.hasWalkedCache)}filterEntries(e,t){let s=this.subwalks.get(e),n=this.child();for(let r of t)for(let i of s){let o=i.isAbsolute(),l=i.pattern(),c=i.rest();l===Ge?n.testGlobstar(r,i,c,o):l instanceof RegExp?n.testRegExp(r,l,c,o):n.testString(r,l,c,o);}return n}testGlobstar(e,t,s,n){if((this.dot||!e.name.startsWith("."))&&(t.hasMore()||this.matches.add(e,n,false),e.canReaddir()&&(this.follow||!e.isSymbolicLink()?this.subwalks.add(e,t):e.isSymbolicLink()&&(s&&t.checkFollowGlobstar()?this.subwalks.add(e,s):t.markFollowGlobstar()&&this.subwalks.add(e,t)))),s){let r=s.pattern();if(typeof r=="string"&&r!==".."&&r!==""&&r!==".")this.testString(e,r,s.rest(),n);else if(r===".."){let i=e.parent||e;this.subwalks.add(i,s);}else r instanceof RegExp&&this.testRegExp(e,r,s.rest(),n);}}testRegExp(e,t,s,n){t.test(e.name)&&(s?this.subwalks.add(e,s):this.matches.add(e,n,false));}testString(e,t,s,n){e.isNamed(t)&&(s?this.subwalks.add(e,s):this.matches.add(e,n,false));}};var Ky=(a,e)=>typeof a=="string"?new an([a],e):Array.isArray(a)?new an(a,e):a,Ai=class{path;patterns;opts;seen=new Set;paused=false;aborted=false;#e=[];#t;#i;signal;maxDepth;includeChildMatches;constructor(e,t,s){if(this.patterns=e,this.path=t,this.opts=s,this.#i=!s.posix&&s.platform==="win32"?"\\":"/",this.includeChildMatches=s.includeChildMatches!==false,(s.ignore||!this.includeChildMatches)&&(this.#t=Ky(s.ignore??[],s),!this.includeChildMatches&&typeof this.#t.add!="function")){let n="cannot ignore child matches, ignore lacks add() method.";throw new Error(n)}this.maxDepth=s.maxDepth||1/0,s.signal&&(this.signal=s.signal,this.signal.addEventListener("abort",()=>{this.#e.length=0;}));}#n(e){return this.seen.has(e)||!!this.#t?.ignored?.(e)}#o(e){return !!this.#t?.childrenIgnored?.(e)}pause(){this.paused=true;}resume(){if(this.signal?.aborted)return;this.paused=false;let e;for(;!this.paused&&(e=this.#e.shift());)e();}onResume(e){this.signal?.aborted||(this.paused?this.#e.push(e):e());}async matchCheck(e,t){if(t&&this.opts.nodir)return;let s;if(this.opts.realpath){if(s=e.realpathCached()||await e.realpath(),!s)return;e=s;}let r=e.isUnknown()||this.opts.stat?await e.lstat():e;if(this.opts.follow&&this.opts.nodir&&r?.isSymbolicLink()){let i=await r.realpath();i&&(i.isUnknown()||this.opts.stat)&&await i.lstat();}return this.matchCheckTest(r,t)}matchCheckTest(e,t){return e&&(this.maxDepth===1/0||e.depth()<=this.maxDepth)&&(!t||e.canReaddir())&&(!this.opts.nodir||!e.isDirectory())&&(!this.opts.nodir||!this.opts.follow||!e.isSymbolicLink()||!e.realpathCached()?.isDirectory())&&!this.#n(e)?e:void 0}matchCheckSync(e,t){if(t&&this.opts.nodir)return;let s;if(this.opts.realpath){if(s=e.realpathCached()||e.realpathSync(),!s)return;e=s;}let r=e.isUnknown()||this.opts.stat?e.lstatSync():e;if(this.opts.follow&&this.opts.nodir&&r?.isSymbolicLink()){let i=r.realpathSync();i&&(i?.isUnknown()||this.opts.stat)&&i.lstatSync();}return this.matchCheckTest(r,t)}matchFinish(e,t){if(this.#n(e))return;if(!this.includeChildMatches&&this.#t?.add){let r=`${e.relativePosix()}/**`;this.#t.add(r);}let s=this.opts.absolute===void 0?t:this.opts.absolute;this.seen.add(e);let n=this.opts.mark&&e.isDirectory()?this.#i:"";if(this.opts.withFileTypes)this.matchEmit(e);else if(s){let r=this.opts.posix?e.fullpathPosix():e.fullpath();this.matchEmit(r+n);}else {let r=this.opts.posix?e.relativePosix():e.relative(),i=this.opts.dotRelative&&!r.startsWith(".."+this.#i)?"."+this.#i:"";this.matchEmit(r?i+r+n:"."+n);}}async match(e,t,s){let n=await this.matchCheck(e,s);n&&this.matchFinish(n,t);}matchSync(e,t,s){let n=this.matchCheckSync(e,s);n&&this.matchFinish(n,t);}walkCB(e,t,s){this.signal?.aborted&&s(),this.walkCB2(e,t,new sr(this.opts),s);}walkCB2(e,t,s,n){if(this.#o(e))return n();if(this.signal?.aborted&&n(),this.paused){this.onResume(()=>this.walkCB2(e,t,s,n));return}s.processPatterns(e,t);let r=1,i=()=>{--r===0&&n();};for(let[o,l,c]of s.matches.entries())this.#n(o)||(r++,this.match(o,l,c).then(()=>i()));for(let o of s.subwalkTargets()){if(this.maxDepth!==1/0&&o.depth()>=this.maxDepth)continue;r++;let l=o.readdirCached();o.calledReaddir()?this.walkCB3(o,l,s,i):o.readdirCB((c,u)=>this.walkCB3(o,u,s,i),true);}i();}walkCB3(e,t,s,n){s=s.filterEntries(e,t);let r=1,i=()=>{--r===0&&n();};for(let[o,l,c]of s.matches.entries())this.#n(o)||(r++,this.match(o,l,c).then(()=>i()));for(let[o,l]of s.subwalks.entries())r++,this.walkCB2(o,l,s.child(),i);i();}walkCBSync(e,t,s){this.signal?.aborted&&s(),this.walkCB2Sync(e,t,new sr(this.opts),s);}walkCB2Sync(e,t,s,n){if(this.#o(e))return n();if(this.signal?.aborted&&n(),this.paused){this.onResume(()=>this.walkCB2Sync(e,t,s,n));return}s.processPatterns(e,t);let r=1,i=()=>{--r===0&&n();};for(let[o,l,c]of s.matches.entries())this.#n(o)||this.matchSync(o,l,c);for(let o of s.subwalkTargets()){if(this.maxDepth!==1/0&&o.depth()>=this.maxDepth)continue;r++;let l=o.readdirSync();this.walkCB3Sync(o,l,s,i);}i();}walkCB3Sync(e,t,s,n){s=s.filterEntries(e,t);let r=1,i=()=>{--r===0&&n();};for(let[o,l,c]of s.matches.entries())this.#n(o)||this.matchSync(o,l,c);for(let[o,l]of s.subwalks.entries())r++,this.walkCB2Sync(o,l,s.child(),i);i();}},nr=class extends Ai{matches=new Set;constructor(e,t,s){super(e,t,s);}matchEmit(e){this.matches.add(e);}async walk(){if(this.signal?.aborted)throw this.signal.reason;return this.path.isUnknown()&&await this.path.lstat(),await new Promise((e,t)=>{this.walkCB(this.path,this.patterns,()=>{this.signal?.aborted?t(this.signal.reason):e(this.matches);});}),this.matches}walkSync(){if(this.signal?.aborted)throw this.signal.reason;return this.path.isUnknown()&&this.path.lstatSync(),this.walkCBSync(this.path,this.patterns,()=>{if(this.signal?.aborted)throw this.signal.reason}),this.matches}},rr=class extends Ai{results;constructor(e,t,s){super(e,t,s),this.results=new ts({signal:this.signal,objectMode:true}),this.results.on("drain",()=>this.resume()),this.results.on("resume",()=>this.resume());}matchEmit(e){this.results.write(e),this.results.flowing||this.pause();}stream(){let e=this.path;return e.isUnknown()?e.lstat().then(()=>{this.walkCB(e,this.patterns,()=>this.results.end());}):this.walkCB(e,this.patterns,()=>this.results.end()),this.results}streamSync(){return this.path.isUnknown()&&this.path.lstatSync(),this.walkCBSync(this.path,this.patterns,()=>this.results.end()),this.results}};var Yy=typeof process=="object"&&process&&typeof process.platform=="string"?process.platform:"linux",_t=class{absolute;cwd;root;dot;dotRelative;follow;ignore;magicalBraces;mark;matchBase;maxDepth;nobrace;nocase;nodir;noext;noglobstar;pattern;platform;realpath;scurry;stat;signal;windowsPathsNoEscape;withFileTypes;includeChildMatches;opts;patterns;constructor(e,t){if(!t)throw new TypeError("glob options required");if(this.withFileTypes=!!t.withFileTypes,this.signal=t.signal,this.follow=!!t.follow,this.dot=!!t.dot,this.dotRelative=!!t.dotRelative,this.nodir=!!t.nodir,this.mark=!!t.mark,t.cwd?(t.cwd instanceof URL||t.cwd.startsWith("file://"))&&(t.cwd=fileURLToPath(t.cwd)):this.cwd="",this.cwd=t.cwd||"",this.root=t.root,this.magicalBraces=!!t.magicalBraces,this.nobrace=!!t.nobrace,this.noext=!!t.noext,this.realpath=!!t.realpath,this.absolute=t.absolute,this.includeChildMatches=t.includeChildMatches!==false,this.noglobstar=!!t.noglobstar,this.matchBase=!!t.matchBase,this.maxDepth=typeof t.maxDepth=="number"?t.maxDepth:1/0,this.stat=!!t.stat,this.ignore=t.ignore,this.withFileTypes&&this.absolute!==void 0)throw new Error("cannot set absolute and withFileTypes:true");if(typeof e=="string"&&(e=[e]),this.windowsPathsNoEscape=!!t.windowsPathsNoEscape||t.allowWindowsEscape===false,this.windowsPathsNoEscape&&(e=e.map(l=>l.replace(/\\/g,"/"))),this.matchBase){if(t.noglobstar)throw new TypeError("base matching requires globstar");e=e.map(l=>l.includes("/")?l:`./**/${l}`);}if(this.pattern=e,this.platform=t.platform||Yy,this.opts={...t,platform:this.platform},t.scurry){if(this.scurry=t.scurry,t.nocase!==void 0&&t.nocase!==t.scurry.nocase)throw new Error("nocase option contradicts provided scurry option")}else {let l=t.platform==="win32"?nn:t.platform==="darwin"?tr:t.platform?rn:Ld;this.scurry=new l(this.cwd,{nocase:t.nocase,fs:t.fs});}this.nocase=this.scurry.nocase;let s=this.platform==="darwin"||this.platform==="win32",n={...t,dot:this.dot,matchBase:this.matchBase,nobrace:this.nobrace,nocase:this.nocase,nocaseMagicOnly:s,nocomment:true,noext:this.noext,nonegate:true,optimizationLevel:2,platform:this.platform,windowsPathsNoEscape:this.windowsPathsNoEscape,debug:!!this.opts.debug},r=this.pattern.map(l=>new ct(l,n)),[i,o]=r.reduce((l,c)=>(l[0].push(...c.set),l[1].push(...c.globParts),l),[[],[]]);this.patterns=i.map((l,c)=>{let u=o[c];if(!u)throw new Error("invalid pattern object");return new on(l,u,0,this.platform)});}async walk(){return [...await new nr(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).walk()]}walkSync(){return [...new nr(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).walkSync()]}stream(){return new rr(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).stream()}streamSync(){return new rr(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).streamSync()}iterateSync(){return this.streamSync()[Symbol.iterator]()}[Symbol.iterator](){return this.iterateSync()}iterate(){return this.stream()[Symbol.asyncIterator]()}[Symbol.asyncIterator](){return this.iterate()}};var rl=(a,e={})=>{Array.isArray(a)||(a=[a]);for(let t of a)if(new ct(t,e).hasMagic())return true;return false};function Ei(a,e={}){return new _t(a,e).streamSync()}function $d(a,e={}){return new _t(a,e).stream()}function Fd(a,e={}){return new _t(a,e).walkSync()}async function Nd(a,e={}){return new _t(a,e).walk()}function Ii(a,e={}){return new _t(a,e).iterateSync()}function jd(a,e={}){return new _t(a,e).iterate()}var Xy=Ei,Qy=Object.assign($d,{sync:Ei}),Zy=Ii,eb=Object.assign(jd,{sync:Ii}),tb=Object.assign(Fd,{stream:Ei,iterate:Ii}),ln=Object.assign(Nd,{glob:Nd,globSync:Fd,sync:tb,globStream:$d,stream:Qy,globStreamSync:Ei,streamSync:Xy,globIterate:jd,iterate:eb,globIterateSync:Ii,iterateSync:Zy,Glob:_t,hasMagic:rl,escape:Qs,unescape:kt});ln.glob=ln;var ir=class{languageId="typescript";extensions=[".ts",".tsx",".js",".jsx",".mjs",".cjs"];async parse(e,t){let s=e.split(`
622
+ >>> no match, partial?`,e,p,t,h),p===l))}let f;if(typeof u=="string"?(f=d===u,this.debug("string match",u,d,f)):(f=u.test(d),this.debug("pattern match",u,d,f)),!f)return false}if(i===l&&o===c)return true;if(i===l)return s;if(o===c)return i===l-1&&e[i]==="";throw new Error("wtf?")}braceExpand(){return md(this.pattern,this.options)}parse(e){qn(e);let t=this.options;if(e==="**")return Ge;if(e==="")return "";let s,n=null;(s=e.match(ey))?n=t.dot?sy:ty:(s=e.match(qf))?n=(t.nocase?t.dot?Kf:Jf:t.dot?Hf:zf)(s[1]):(s=e.match(ny))?n=(t.nocase?t.dot?iy:ry:t.dot?oy:ay)(s):(s=e.match(Vf))?n=t.dot?Xf:Yf:(s=e.match(Qf))&&(n=Zf);let r=Xs.fromGlob(e,this.options).toMMPattern();return n&&typeof r=="object"&&Reflect.defineProperty(r,"test",{value:n}),r}makeRe(){if(this.regexp||this.regexp===false)return this.regexp;let e=this.set;if(!e.length)return this.regexp=false,this.regexp;let t=this.options,s=t.noglobstar?uy:t.dot?dy:py,n=new Set(t.nocase?["i"]:[]),r=e.map(l=>{let c=l.map(u=>{if(u instanceof RegExp)for(let d of u.flags.split(""))n.add(d);return typeof u=="string"?yy(u):u===Ge?Ge:u._src});return c.forEach((u,d)=>{let p=c[d+1],h=c[d-1];u!==Ge||h===Ge||(h===void 0?p!==void 0&&p!==Ge?c[d+1]="(?:\\/|"+s+"\\/)?"+p:c[d]=s:p===void 0?c[d-1]=h+"(?:\\/|"+s+")?":p!==Ge&&(c[d-1]=h+"(?:\\/|\\/"+s+"\\/)"+p,c[d+1]=Ge));}),c.filter(u=>u!==Ge).join("/")}).join("|"),[i,o]=e.length>1?["(?:",")"]:["",""];r="^"+i+r+o+"$",this.negate&&(r="^(?!"+r+").+$");try{this.regexp=new RegExp(r,[...n].join(""));}catch{this.regexp=false;}return this.regexp}slashSplit(e){return this.preserveMultipleSlashes?e.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(e)?["",...e.split(/\/+/)]:e.split(/\/+/)}match(e,t=this.partial){if(this.debug("match",e,this.pattern),this.comment)return false;if(this.empty)return e==="";if(e==="/"&&t)return true;let s=this.options;this.isWindows&&(e=e.split("\\").join("/"));let n=this.slashSplit(e);this.debug(this.pattern,"split",n);let r=this.set;this.debug(this.pattern,"set",r);let i=n[n.length-1];if(!i)for(let o=n.length-2;!i&&o>=0;o--)i=n[o];for(let o=0;o<r.length;o++){let l=r[o],c=n;if(s.matchBase&&l.length===1&&(c=[i]),this.matchOne(c,l,t))return s.flipNegate?true:!this.negate}return s.flipNegate?false:this.negate}static defaults(e){return Ye.defaults(e).Minimatch}};Ye.AST=Xs;Ye.Minimatch=ct;Ye.escape=Qs;Ye.unescape=kt;var Zs=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,hd=new Set,Ua=typeof process=="object"&&process?process:{},fd=(a,e,t,s)=>{typeof Ua.emitWarning=="function"?Ua.emitWarning(a,e,t,s):console.error(`[${t}] ${e}: ${a}`);},gi=globalThis.AbortController,gd=globalThis.AbortSignal;if(typeof gi>"u"){gd=class{onabort;_onabort=[];reason;aborted=false;addEventListener(s,n){this._onabort.push(n);}},gi=class{constructor(){e();}signal=new gd;abort(s){if(!this.signal.aborted){this.signal.reason=s,this.signal.aborted=true;for(let n of this.signal._onabort)n(s);this.signal.onabort?.(s);}}};let a=Ua.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{a&&(a=false,fd("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e));};}var by=a=>!hd.has(a);var Zt=a=>a&&a===Math.floor(a)&&a>0&&isFinite(a),yd=a=>Zt(a)?a<=Math.pow(2,8)?Uint8Array:a<=Math.pow(2,16)?Uint16Array:a<=Math.pow(2,32)?Uint32Array:a<=Number.MAX_SAFE_INTEGER?en:null:null,en=class extends Array{constructor(e){super(e),this.fill(0);}},Wa=class a{heap;length;static#e=false;static create(e){let t=yd(e);if(!t)return [];a.#e=true;let s=new a(e,t);return a.#e=false,s}constructor(e,t){if(!a.#e)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new t(e),this.length=0;}push(e){this.heap[this.length++]=e;}pop(){return this.heap[--this.length]}},Hn=class a{#e;#t;#i;#n;#o;#w;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#c;#d;#a;#l;#r;#f;#y;#m;#p;#k;#h;#x;#T;#v;#C;#S;#g;static unsafeExposeInternals(e){return {starts:e.#T,ttls:e.#v,sizes:e.#x,keyMap:e.#a,keyList:e.#l,valList:e.#r,next:e.#f,prev:e.#y,get head(){return e.#m},get tail(){return e.#p},free:e.#k,isBackgroundFetch:t=>e.#u(t),backgroundFetch:(t,s,n,r)=>e.#F(t,s,n,r),moveToTail:t=>e.#B(t),indexes:t=>e.#R(t),rindexes:t=>e.#A(t),isStale:t=>e.#b(t)}}get max(){return this.#e}get maxSize(){return this.#t}get calculatedSize(){return this.#d}get size(){return this.#c}get fetchMethod(){return this.#o}get memoMethod(){return this.#w}get dispose(){return this.#i}get disposeAfter(){return this.#n}constructor(e){let{max:t=0,ttl:s,ttlResolution:n=1,ttlAutopurge:r,updateAgeOnGet:i,updateAgeOnHas:o,allowStale:l,dispose:c,disposeAfter:u,noDisposeOnSet:d,noUpdateTTL:p,maxSize:h=0,maxEntrySize:g=0,sizeCalculation:f,fetchMethod:b,memoMethod:y,noDeleteOnFetchRejection:w,noDeleteOnStaleGet:C,allowStaleOnFetchRejection:S,allowStaleOnFetchAbort:T,ignoreFetchAbort:_}=e;if(t!==0&&!Zt(t))throw new TypeError("max option must be a nonnegative integer");let M=t?yd(t):Array;if(!M)throw new Error("invalid max value: "+t);if(this.#e=t,this.#t=h,this.maxEntrySize=g||this.#t,this.sizeCalculation=f,this.sizeCalculation){if(!this.#t&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(y!==void 0&&typeof y!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#w=y,b!==void 0&&typeof b!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#o=b,this.#S=!!b,this.#a=new Map,this.#l=new Array(t).fill(void 0),this.#r=new Array(t).fill(void 0),this.#f=new M(t),this.#y=new M(t),this.#m=0,this.#p=0,this.#k=Wa.create(t),this.#c=0,this.#d=0,typeof c=="function"&&(this.#i=c),typeof u=="function"?(this.#n=u,this.#h=[]):(this.#n=void 0,this.#h=void 0),this.#C=!!this.#i,this.#g=!!this.#n,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!p,this.noDeleteOnFetchRejection=!!w,this.allowStaleOnFetchRejection=!!S,this.allowStaleOnFetchAbort=!!T,this.ignoreFetchAbort=!!_,this.maxEntrySize!==0){if(this.#t!==0&&!Zt(this.#t))throw new TypeError("maxSize must be a positive integer if specified");if(!Zt(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#I();}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!C,this.updateAgeOnGet=!!i,this.updateAgeOnHas=!!o,this.ttlResolution=Zt(n)||n===0?n:1,this.ttlAutopurge=!!r,this.ttl=s||0,this.ttl){if(!Zt(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#E();}if(this.#e===0&&this.ttl===0&&this.#t===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#e&&!this.#t){let F="LRU_CACHE_UNBOUNDED";by(F)&&(hd.add(F),fd("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",F,a));}}getRemainingTTL(e){return this.#a.has(e)?1/0:0}#E(){let e=new en(this.#e),t=new en(this.#e);this.#v=e,this.#T=t,this.#P=(r,i,o=Zs.now())=>{if(t[r]=i!==0?o:0,e[r]=i,i!==0&&this.ttlAutopurge){let l=setTimeout(()=>{this.#b(r)&&this.#M(this.#l[r],"expire");},i+1);l.unref&&l.unref();}},this.#_=r=>{t[r]=e[r]!==0?Zs.now():0;},this.#s=(r,i)=>{if(e[i]){let o=e[i],l=t[i];if(!o||!l)return;r.ttl=o,r.start=l,r.now=s||n();let c=r.now-l;r.remainingTTL=o-c;}};let s=0,n=()=>{let r=Zs.now();if(this.ttlResolution>0){s=r;let i=setTimeout(()=>s=0,this.ttlResolution);i.unref&&i.unref();}return r};this.getRemainingTTL=r=>{let i=this.#a.get(r);if(i===void 0)return 0;let o=e[i],l=t[i];if(!o||!l)return 1/0;let c=(s||n())-l;return o-c},this.#b=r=>{let i=t[r],o=e[r];return !!o&&!!i&&(s||n())-i>o};}#_=()=>{};#s=()=>{};#P=()=>{};#b=()=>false;#I(){let e=new en(this.#e);this.#d=0,this.#x=e,this.#D=t=>{this.#d-=e[t],e[t]=0;},this.#L=(t,s,n,r)=>{if(this.#u(s))return 0;if(!Zt(n))if(r){if(typeof r!="function")throw new TypeError("sizeCalculation must be a function");if(n=r(s,t),!Zt(n))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return n},this.#O=(t,s,n)=>{if(e[t]=s,this.#t){let r=this.#t-e[t];for(;this.#d>r;)this.#$(true);}this.#d+=e[t],n&&(n.entrySize=s,n.totalCalculatedSize=this.#d);};}#D=e=>{};#O=(e,t,s)=>{};#L=(e,t,s,n)=>{if(s||n)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#R({allowStale:e=this.allowStale}={}){if(this.#c)for(let t=this.#p;!(!this.#N(t)||((e||!this.#b(t))&&(yield t),t===this.#m));)t=this.#y[t];}*#A({allowStale:e=this.allowStale}={}){if(this.#c)for(let t=this.#m;!(!this.#N(t)||((e||!this.#b(t))&&(yield t),t===this.#p));)t=this.#f[t];}#N(e){return e!==void 0&&this.#a.get(this.#l[e])===e}*entries(){for(let e of this.#R())this.#r[e]!==void 0&&this.#l[e]!==void 0&&!this.#u(this.#r[e])&&(yield [this.#l[e],this.#r[e]]);}*rentries(){for(let e of this.#A())this.#r[e]!==void 0&&this.#l[e]!==void 0&&!this.#u(this.#r[e])&&(yield [this.#l[e],this.#r[e]]);}*keys(){for(let e of this.#R()){let t=this.#l[e];t!==void 0&&!this.#u(this.#r[e])&&(yield t);}}*rkeys(){for(let e of this.#A()){let t=this.#l[e];t!==void 0&&!this.#u(this.#r[e])&&(yield t);}}*values(){for(let e of this.#R())this.#r[e]!==void 0&&!this.#u(this.#r[e])&&(yield this.#r[e]);}*rvalues(){for(let e of this.#A())this.#r[e]!==void 0&&!this.#u(this.#r[e])&&(yield this.#r[e]);}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(e,t={}){for(let s of this.#R()){let n=this.#r[s],r=this.#u(n)?n.__staleWhileFetching:n;if(r!==void 0&&e(r,this.#l[s],this))return this.get(this.#l[s],t)}}forEach(e,t=this){for(let s of this.#R()){let n=this.#r[s],r=this.#u(n)?n.__staleWhileFetching:n;r!==void 0&&e.call(t,r,this.#l[s],this);}}rforEach(e,t=this){for(let s of this.#A()){let n=this.#r[s],r=this.#u(n)?n.__staleWhileFetching:n;r!==void 0&&e.call(t,r,this.#l[s],this);}}purgeStale(){let e=false;for(let t of this.#A({allowStale:true}))this.#b(t)&&(this.#M(this.#l[t],"expire"),e=true);return e}info(e){let t=this.#a.get(e);if(t===void 0)return;let s=this.#r[t],n=this.#u(s)?s.__staleWhileFetching:s;if(n===void 0)return;let r={value:n};if(this.#v&&this.#T){let i=this.#v[t],o=this.#T[t];if(i&&o){let l=i-(Zs.now()-o);r.ttl=l,r.start=Date.now();}}return this.#x&&(r.size=this.#x[t]),r}dump(){let e=[];for(let t of this.#R({allowStale:true})){let s=this.#l[t],n=this.#r[t],r=this.#u(n)?n.__staleWhileFetching:n;if(r===void 0||s===void 0)continue;let i={value:r};if(this.#v&&this.#T){i.ttl=this.#v[t];let o=Zs.now()-this.#T[t];i.start=Math.floor(Date.now()-o);}this.#x&&(i.size=this.#x[t]),e.unshift([s,i]);}return e}load(e){this.clear();for(let[t,s]of e){if(s.start){let n=Date.now()-s.start;s.start=Zs.now()-n;}this.set(t,s.value,s);}}set(e,t,s={}){if(t===void 0)return this.delete(e),this;let{ttl:n=this.ttl,start:r,noDisposeOnSet:i=this.noDisposeOnSet,sizeCalculation:o=this.sizeCalculation,status:l}=s,{noUpdateTTL:c=this.noUpdateTTL}=s,u=this.#L(e,t,s.size||0,o);if(this.maxEntrySize&&u>this.maxEntrySize)return l&&(l.set="miss",l.maxEntrySizeExceeded=true),this.#M(e,"set"),this;let d=this.#c===0?void 0:this.#a.get(e);if(d===void 0)d=this.#c===0?this.#p:this.#k.length!==0?this.#k.pop():this.#c===this.#e?this.#$(false):this.#c,this.#l[d]=e,this.#r[d]=t,this.#a.set(e,d),this.#f[this.#p]=d,this.#y[d]=this.#p,this.#p=d,this.#c++,this.#O(d,u,l),l&&(l.set="add"),c=false;else {this.#B(d);let p=this.#r[d];if(t!==p){if(this.#S&&this.#u(p)){p.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:h}=p;h!==void 0&&!i&&(this.#C&&this.#i?.(h,e,"set"),this.#g&&this.#h?.push([h,e,"set"]));}else i||(this.#C&&this.#i?.(p,e,"set"),this.#g&&this.#h?.push([p,e,"set"]));if(this.#D(d),this.#O(d,u,l),this.#r[d]=t,l){l.set="replace";let h=p&&this.#u(p)?p.__staleWhileFetching:p;h!==void 0&&(l.oldValue=h);}}else l&&(l.set="update");}if(n!==0&&!this.#v&&this.#E(),this.#v&&(c||this.#P(d,n,r),l&&this.#s(l,d)),!i&&this.#g&&this.#h){let p=this.#h,h;for(;h=p?.shift();)this.#n?.(...h);}return this}pop(){try{for(;this.#c;){let e=this.#r[this.#m];if(this.#$(!0),this.#u(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#g&&this.#h){let e=this.#h,t;for(;t=e?.shift();)this.#n?.(...t);}}}#$(e){let t=this.#m,s=this.#l[t],n=this.#r[t];return this.#S&&this.#u(n)?n.__abortController.abort(new Error("evicted")):(this.#C||this.#g)&&(this.#C&&this.#i?.(n,s,"evict"),this.#g&&this.#h?.push([n,s,"evict"])),this.#D(t),e&&(this.#l[t]=void 0,this.#r[t]=void 0,this.#k.push(t)),this.#c===1?(this.#m=this.#p=0,this.#k.length=0):this.#m=this.#f[t],this.#a.delete(s),this.#c--,t}has(e,t={}){let{updateAgeOnHas:s=this.updateAgeOnHas,status:n}=t,r=this.#a.get(e);if(r!==void 0){let i=this.#r[r];if(this.#u(i)&&i.__staleWhileFetching===void 0)return false;if(this.#b(r))n&&(n.has="stale",this.#s(n,r));else return s&&this.#_(r),n&&(n.has="hit",this.#s(n,r)),true}else n&&(n.has="miss");return false}peek(e,t={}){let{allowStale:s=this.allowStale}=t,n=this.#a.get(e);if(n===void 0||!s&&this.#b(n))return;let r=this.#r[n];return this.#u(r)?r.__staleWhileFetching:r}#F(e,t,s,n){let r=t===void 0?void 0:this.#r[t];if(this.#u(r))return r;let i=new gi,{signal:o}=s;o?.addEventListener("abort",()=>i.abort(o.reason),{signal:i.signal});let l={signal:i.signal,options:s,context:n},c=(f,b=false)=>{let{aborted:y}=i.signal,w=s.ignoreFetchAbort&&f!==void 0;if(s.status&&(y&&!b?(s.status.fetchAborted=true,s.status.fetchError=i.signal.reason,w&&(s.status.fetchAbortIgnored=true)):s.status.fetchResolved=true),y&&!w&&!b)return d(i.signal.reason);let C=h;return this.#r[t]===h&&(f===void 0?C.__staleWhileFetching?this.#r[t]=C.__staleWhileFetching:this.#M(e,"fetch"):(s.status&&(s.status.fetchUpdated=true),this.set(e,f,l.options))),f},u=f=>(s.status&&(s.status.fetchRejected=true,s.status.fetchError=f),d(f)),d=f=>{let{aborted:b}=i.signal,y=b&&s.allowStaleOnFetchAbort,w=y||s.allowStaleOnFetchRejection,C=w||s.noDeleteOnFetchRejection,S=h;if(this.#r[t]===h&&(!C||S.__staleWhileFetching===void 0?this.#M(e,"fetch"):y||(this.#r[t]=S.__staleWhileFetching)),w)return s.status&&S.__staleWhileFetching!==void 0&&(s.status.returnedStale=true),S.__staleWhileFetching;if(S.__returned===S)throw f},p=(f,b)=>{let y=this.#o?.(e,r,l);y&&y instanceof Promise&&y.then(w=>f(w===void 0?void 0:w),b),i.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(f(void 0),s.allowStaleOnFetchAbort&&(f=w=>c(w,true)));});};s.status&&(s.status.fetchDispatched=true);let h=new Promise(p).then(c,u),g=Object.assign(h,{__abortController:i,__staleWhileFetching:r,__returned:void 0});return t===void 0?(this.set(e,g,{...l.options,status:void 0}),t=this.#a.get(e)):this.#r[t]=g,g}#u(e){if(!this.#S)return false;let t=e;return !!t&&t instanceof Promise&&t.hasOwnProperty("__staleWhileFetching")&&t.__abortController instanceof gi}async fetch(e,t={}){let{allowStale:s=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,ttl:i=this.ttl,noDisposeOnSet:o=this.noDisposeOnSet,size:l=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:p=this.allowStaleOnFetchRejection,ignoreFetchAbort:h=this.ignoreFetchAbort,allowStaleOnFetchAbort:g=this.allowStaleOnFetchAbort,context:f,forceRefresh:b=false,status:y,signal:w}=t;if(!this.#S)return y&&(y.fetch="get"),this.get(e,{allowStale:s,updateAgeOnGet:n,noDeleteOnStaleGet:r,status:y});let C={allowStale:s,updateAgeOnGet:n,noDeleteOnStaleGet:r,ttl:i,noDisposeOnSet:o,size:l,sizeCalculation:c,noUpdateTTL:u,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:p,allowStaleOnFetchAbort:g,ignoreFetchAbort:h,status:y,signal:w},S=this.#a.get(e);if(S===void 0){y&&(y.fetch="miss");let T=this.#F(e,S,C,f);return T.__returned=T}else {let T=this.#r[S];if(this.#u(T)){let R=s&&T.__staleWhileFetching!==void 0;return y&&(y.fetch="inflight",R&&(y.returnedStale=true)),R?T.__staleWhileFetching:T.__returned=T}let _=this.#b(S);if(!b&&!_)return y&&(y.fetch="hit"),this.#B(S),n&&this.#_(S),y&&this.#s(y,S),T;let M=this.#F(e,S,C,f),x=M.__staleWhileFetching!==void 0&&s;return y&&(y.fetch=_?"stale":"refresh",x&&_&&(y.returnedStale=true)),x?M.__staleWhileFetching:M.__returned=M}}async forceFetch(e,t={}){let s=await this.fetch(e,t);if(s===void 0)throw new Error("fetch() returned undefined");return s}memo(e,t={}){let s=this.#w;if(!s)throw new Error("no memoMethod provided to constructor");let{context:n,forceRefresh:r,...i}=t,o=this.get(e,i);if(!r&&o!==void 0)return o;let l=s(e,o,{options:i,context:n});return this.set(e,l,i),l}get(e,t={}){let{allowStale:s=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,status:i}=t,o=this.#a.get(e);if(o!==void 0){let l=this.#r[o],c=this.#u(l);return i&&this.#s(i,o),this.#b(o)?(i&&(i.get="stale"),c?(i&&s&&l.__staleWhileFetching!==void 0&&(i.returnedStale=true),s?l.__staleWhileFetching:void 0):(r||this.#M(e,"expire"),i&&s&&(i.returnedStale=true),s?l:void 0)):(i&&(i.get="hit"),c?l.__staleWhileFetching:(this.#B(o),n&&this.#_(o),l))}else i&&(i.get="miss");}#j(e,t){this.#y[t]=e,this.#f[e]=t;}#B(e){e!==this.#p&&(e===this.#m?this.#m=this.#f[e]:this.#j(this.#y[e],this.#f[e]),this.#j(this.#p,e),this.#p=e);}delete(e){return this.#M(e,"delete")}#M(e,t){let s=false;if(this.#c!==0){let n=this.#a.get(e);if(n!==void 0)if(s=true,this.#c===1)this.#G(t);else {this.#D(n);let r=this.#r[n];if(this.#u(r)?r.__abortController.abort(new Error("deleted")):(this.#C||this.#g)&&(this.#C&&this.#i?.(r,e,t),this.#g&&this.#h?.push([r,e,t])),this.#a.delete(e),this.#l[n]=void 0,this.#r[n]=void 0,n===this.#p)this.#p=this.#y[n];else if(n===this.#m)this.#m=this.#f[n];else {let i=this.#y[n];this.#f[i]=this.#f[n];let o=this.#f[n];this.#y[o]=this.#y[n];}this.#c--,this.#k.push(n);}}if(this.#g&&this.#h?.length){let n=this.#h,r;for(;r=n?.shift();)this.#n?.(...r);}return s}clear(){return this.#G("delete")}#G(e){for(let t of this.#A({allowStale:true})){let s=this.#r[t];if(this.#u(s))s.__abortController.abort(new Error("deleted"));else {let n=this.#l[t];this.#C&&this.#i?.(s,n,e),this.#g&&this.#h?.push([s,n,e]);}}if(this.#a.clear(),this.#r.fill(void 0),this.#l.fill(void 0),this.#v&&this.#T&&(this.#v.fill(0),this.#T.fill(0)),this.#x&&this.#x.fill(0),this.#m=0,this.#p=0,this.#k.length=0,this.#d=0,this.#c=0,this.#g&&this.#h){let t=this.#h,s;for(;s=t?.shift();)this.#n?.(...s);}}};var bd=typeof process=="object"&&process?process:{stdout:null,stderr:null},wy=a=>!!a&&typeof a=="object"&&(a instanceof ts||a instanceof Sd||Cy(a)||Sy(a)),Cy=a=>!!a&&typeof a=="object"&&a instanceof EventEmitter&&typeof a.pipe=="function"&&a.pipe!==Sd.Writable.prototype.pipe,Sy=a=>!!a&&typeof a=="object"&&a instanceof EventEmitter&&typeof a.write=="function"&&typeof a.end=="function",Ut=Symbol("EOF"),Wt=Symbol("maybeEmitEnd"),es=Symbol("emittedEnd"),hi=Symbol("emittingEnd"),Jn=Symbol("emittedError"),fi=Symbol("closed"),vd=Symbol("read"),yi=Symbol("flush"),wd=Symbol("flushChunk"),xt=Symbol("encoding"),tn=Symbol("decoder"),Ne=Symbol("flowing"),Kn=Symbol("paused"),sn=Symbol("resume"),$e=Symbol("buffer"),Xe=Symbol("pipes"),Fe=Symbol("bufferLength"),qa=Symbol("bufferPush"),bi=Symbol("bufferShift"),Je=Symbol("objectMode"),Ee=Symbol("destroyed"),za=Symbol("error"),Ha=Symbol("emitData"),Cd=Symbol("emitEnd"),Ja=Symbol("emitEnd2"),Dt=Symbol("async"),Ka=Symbol("abort"),vi=Symbol("aborted"),Vn=Symbol("signal"),Cs=Symbol("dataListeners"),ut=Symbol("discarded"),Yn=a=>Promise.resolve().then(a),ky=a=>a(),xy=a=>a==="end"||a==="finish"||a==="prefinish",Ty=a=>a instanceof ArrayBuffer||!!a&&typeof a=="object"&&a.constructor&&a.constructor.name==="ArrayBuffer"&&a.byteLength>=0,_y=a=>!Buffer.isBuffer(a)&&ArrayBuffer.isView(a),wi=class{src;dest;opts;ondrain;constructor(e,t,s){this.src=e,this.dest=t,this.opts=s,this.ondrain=()=>e[sn](),this.dest.on("drain",this.ondrain);}unpipe(){this.dest.removeListener("drain",this.ondrain);}proxyErrors(e){}end(){this.unpipe(),this.opts.end&&this.dest.end();}},Va=class extends wi{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe();}constructor(e,t,s){super(e,t,s),this.proxyErrors=n=>t.emit("error",n),e.on("error",this.proxyErrors);}},Ry=a=>!!a.objectMode,Ay=a=>!a.objectMode&&!!a.encoding&&a.encoding!=="buffer",ts=class extends EventEmitter{[Ne]=false;[Kn]=false;[Xe]=[];[$e]=[];[Je];[xt];[Dt];[tn];[Ut]=false;[es]=false;[hi]=false;[fi]=false;[Jn]=null;[Fe]=0;[Ee]=false;[Vn];[vi]=false;[Cs]=0;[ut]=false;writable=true;readable=true;constructor(...e){let t=e[0]||{};if(super(),t.objectMode&&typeof t.encoding=="string")throw new TypeError("Encoding and objectMode may not be used together");Ry(t)?(this[Je]=true,this[xt]=null):Ay(t)?(this[xt]=t.encoding,this[Je]=false):(this[Je]=false,this[xt]=null),this[Dt]=!!t.async,this[tn]=this[xt]?new StringDecoder(this[xt]):null,t&&t.debugExposeBuffer===true&&Object.defineProperty(this,"buffer",{get:()=>this[$e]}),t&&t.debugExposePipes===true&&Object.defineProperty(this,"pipes",{get:()=>this[Xe]});let{signal:s}=t;s&&(this[Vn]=s,s.aborted?this[Ka]():s.addEventListener("abort",()=>this[Ka]()));}get bufferLength(){return this[Fe]}get encoding(){return this[xt]}set encoding(e){throw new Error("Encoding must be set at instantiation time")}setEncoding(e){throw new Error("Encoding must be set at instantiation time")}get objectMode(){return this[Je]}set objectMode(e){throw new Error("objectMode must be set at instantiation time")}get async(){return this[Dt]}set async(e){this[Dt]=this[Dt]||!!e;}[Ka](){this[vi]=true,this.emit("abort",this[Vn]?.reason),this.destroy(this[Vn]?.reason);}get aborted(){return this[vi]}set aborted(e){}write(e,t,s){if(this[vi])return false;if(this[Ut])throw new Error("write after end");if(this[Ee])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),true;typeof t=="function"&&(s=t,t="utf8"),t||(t="utf8");let n=this[Dt]?Yn:ky;if(!this[Je]&&!Buffer.isBuffer(e)){if(_y(e))e=Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if(Ty(e))e=Buffer.from(e);else if(typeof e!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[Je]?(this[Ne]&&this[Fe]!==0&&this[yi](true),this[Ne]?this.emit("data",e):this[qa](e),this[Fe]!==0&&this.emit("readable"),s&&n(s),this[Ne]):e.length?(typeof e=="string"&&!(t===this[xt]&&!this[tn]?.lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[xt]&&(e=this[tn].write(e)),this[Ne]&&this[Fe]!==0&&this[yi](true),this[Ne]?this.emit("data",e):this[qa](e),this[Fe]!==0&&this.emit("readable"),s&&n(s),this[Ne]):(this[Fe]!==0&&this.emit("readable"),s&&n(s),this[Ne])}read(e){if(this[Ee])return null;if(this[ut]=false,this[Fe]===0||e===0||e&&e>this[Fe])return this[Wt](),null;this[Je]&&(e=null),this[$e].length>1&&!this[Je]&&(this[$e]=[this[xt]?this[$e].join(""):Buffer.concat(this[$e],this[Fe])]);let t=this[vd](e||null,this[$e][0]);return this[Wt](),t}[vd](e,t){if(this[Je])this[bi]();else {let s=t;e===s.length||e===null?this[bi]():typeof s=="string"?(this[$e][0]=s.slice(e),t=s.slice(0,e),this[Fe]-=e):(this[$e][0]=s.subarray(e),t=s.subarray(0,e),this[Fe]-=e);}return this.emit("data",t),!this[$e].length&&!this[Ut]&&this.emit("drain"),t}end(e,t,s){return typeof e=="function"&&(s=e,e=void 0),typeof t=="function"&&(s=t,t="utf8"),e!==void 0&&this.write(e,t),s&&this.once("end",s),this[Ut]=true,this.writable=false,(this[Ne]||!this[Kn])&&this[Wt](),this}[sn](){this[Ee]||(!this[Cs]&&!this[Xe].length&&(this[ut]=true),this[Kn]=false,this[Ne]=true,this.emit("resume"),this[$e].length?this[yi]():this[Ut]?this[Wt]():this.emit("drain"));}resume(){return this[sn]()}pause(){this[Ne]=false,this[Kn]=true,this[ut]=false;}get destroyed(){return this[Ee]}get flowing(){return this[Ne]}get paused(){return this[Kn]}[qa](e){this[Je]?this[Fe]+=1:this[Fe]+=e.length,this[$e].push(e);}[bi](){return this[Je]?this[Fe]-=1:this[Fe]-=this[$e][0].length,this[$e].shift()}[yi](e=false){do;while(this[wd](this[bi]())&&this[$e].length);!e&&!this[$e].length&&!this[Ut]&&this.emit("drain");}[wd](e){return this.emit("data",e),this[Ne]}pipe(e,t){if(this[Ee])return e;this[ut]=false;let s=this[es];return t=t||{},e===bd.stdout||e===bd.stderr?t.end=false:t.end=t.end!==false,t.proxyErrors=!!t.proxyErrors,s?t.end&&e.end():(this[Xe].push(t.proxyErrors?new Va(this,e,t):new wi(this,e,t)),this[Dt]?Yn(()=>this[sn]()):this[sn]()),e}unpipe(e){let t=this[Xe].find(s=>s.dest===e);t&&(this[Xe].length===1?(this[Ne]&&this[Cs]===0&&(this[Ne]=false),this[Xe]=[]):this[Xe].splice(this[Xe].indexOf(t),1),t.unpipe());}addListener(e,t){return this.on(e,t)}on(e,t){let s=super.on(e,t);if(e==="data")this[ut]=false,this[Cs]++,!this[Xe].length&&!this[Ne]&&this[sn]();else if(e==="readable"&&this[Fe]!==0)super.emit("readable");else if(xy(e)&&this[es])super.emit(e),this.removeAllListeners(e);else if(e==="error"&&this[Jn]){let n=t;this[Dt]?Yn(()=>n.call(this,this[Jn])):n.call(this,this[Jn]);}return s}removeListener(e,t){return this.off(e,t)}off(e,t){let s=super.off(e,t);return e==="data"&&(this[Cs]=this.listeners("data").length,this[Cs]===0&&!this[ut]&&!this[Xe].length&&(this[Ne]=false)),s}removeAllListeners(e){let t=super.removeAllListeners(e);return (e==="data"||e===void 0)&&(this[Cs]=0,!this[ut]&&!this[Xe].length&&(this[Ne]=false)),t}get emittedEnd(){return this[es]}[Wt](){!this[hi]&&!this[es]&&!this[Ee]&&this[$e].length===0&&this[Ut]&&(this[hi]=true,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[fi]&&this.emit("close"),this[hi]=false);}emit(e,...t){let s=t[0];if(e!=="error"&&e!=="close"&&e!==Ee&&this[Ee])return false;if(e==="data")return !this[Je]&&!s?false:this[Dt]?(Yn(()=>this[Ha](s)),true):this[Ha](s);if(e==="end")return this[Cd]();if(e==="close"){if(this[fi]=true,!this[es]&&!this[Ee])return false;let r=super.emit("close");return this.removeAllListeners("close"),r}else if(e==="error"){this[Jn]=s,super.emit(za,s);let r=!this[Vn]||this.listeners("error").length?super.emit("error",s):false;return this[Wt](),r}else if(e==="resume"){let r=super.emit("resume");return this[Wt](),r}else if(e==="finish"||e==="prefinish"){let r=super.emit(e);return this.removeAllListeners(e),r}let n=super.emit(e,...t);return this[Wt](),n}[Ha](e){for(let s of this[Xe])s.dest.write(e)===false&&this.pause();let t=this[ut]?false:super.emit("data",e);return this[Wt](),t}[Cd](){return this[es]?false:(this[es]=true,this.readable=false,this[Dt]?(Yn(()=>this[Ja]()),true):this[Ja]())}[Ja](){if(this[tn]){let t=this[tn].end();if(t){for(let s of this[Xe])s.dest.write(t);this[ut]||super.emit("data",t);}}for(let t of this[Xe])t.end();let e=super.emit("end");return this.removeAllListeners("end"),e}async collect(){let e=Object.assign([],{dataLength:0});this[Je]||(e.dataLength=0);let t=this.promise();return this.on("data",s=>{e.push(s),this[Je]||(e.dataLength+=s.length);}),await t,e}async concat(){if(this[Je])throw new Error("cannot concat in objectMode");let e=await this.collect();return this[xt]?e.join(""):Buffer.concat(e,e.dataLength)}async promise(){return new Promise((e,t)=>{this.on(Ee,()=>t(new Error("stream destroyed"))),this.on("error",s=>t(s)),this.on("end",()=>e());})}[Symbol.asyncIterator](){this[ut]=false;let e=false,t=async()=>(this.pause(),e=true,{value:void 0,done:true});return {next:()=>{if(e)return t();let n=this.read();if(n!==null)return Promise.resolve({done:false,value:n});if(this[Ut])return t();let r,i,o=d=>{this.off("data",l),this.off("end",c),this.off(Ee,u),t(),i(d);},l=d=>{this.off("error",o),this.off("end",c),this.off(Ee,u),this.pause(),r({value:d,done:!!this[Ut]});},c=()=>{this.off("error",o),this.off("data",l),this.off(Ee,u),t(),r({done:true,value:void 0});},u=()=>o(new Error("stream destroyed"));return new Promise((d,p)=>{i=p,r=d,this.once(Ee,u),this.once("error",o),this.once("end",c),this.once("data",l);})},throw:t,return:t,[Symbol.asyncIterator](){return this}}}[Symbol.iterator](){this[ut]=false;let e=false,t=()=>(this.pause(),this.off(za,t),this.off(Ee,t),this.off("end",t),e=true,{done:true,value:void 0}),s=()=>{if(e)return t();let n=this.read();return n===null?t():{done:false,value:n}};return this.once("end",t),this.once(za,t),this.once(Ee,t),{next:s,throw:t,return:t,[Symbol.iterator](){return this}}}destroy(e){if(this[Ee])return e?this.emit("error",e):this.emit(Ee),this;this[Ee]=true,this[ut]=true,this[$e].length=0,this[Fe]=0;let t=this;return typeof t.close=="function"&&!this[fi]&&t.close(),e?this.emit("error",e):this.emit(Ee),this}static get isStream(){return wy}};var $y=realpathSync.native,Qn={lstatSync:lstatSync,readdir:readdir$1,readdirSync:readdirSync,readlinkSync:readlinkSync,realpathSync:$y,promises:{lstat:lstat,readdir:readdir,readlink:readlink,realpath:realpath}},Rd=a=>!a||a===Qn||a===Me?Qn:{...Qn,...a,promises:{...Qn.promises,...a.promises||{}}},Ad=/^\\\\\?\\([a-z]:)\\?$/i,Uy=a=>a.replace(/\//g,"\\").replace(Ad,"$1\\"),Wy=/[\\\/]/,gt=0,Ed=1,Id=2,Ot=4,Md=6,Pd=8,Ss=10,Dd=12,mt=15,Xn=~mt,Xa=16,kd=32,Zn=64,Tt=128,Ci=256,ki=512,xd=Zn|Tt|ki,qy=1023,Qa=a=>a.isFile()?Pd:a.isDirectory()?Ot:a.isSymbolicLink()?Ss:a.isCharacterDevice()?Id:a.isBlockDevice()?Md:a.isSocket()?Dd:a.isFIFO()?Ed:gt,Td=new Map,er=a=>{let e=Td.get(a);if(e)return e;let t=a.normalize("NFKD");return Td.set(a,t),t},_d=new Map,Si=a=>{let e=_d.get(a);if(e)return e;let t=er(a.toLowerCase());return _d.set(a,t),t},xi=class extends Hn{constructor(){super({max:256});}},el=class extends Hn{constructor(e=16*1024){super({maxSize:e,sizeCalculation:t=>t.length+1});}},Od=Symbol("PathScurry setAsCwd"),Ke=class{name;root;roots;parent;nocase;isCWD=false;#e;#t;get dev(){return this.#t}#i;get mode(){return this.#i}#n;get nlink(){return this.#n}#o;get uid(){return this.#o}#w;get gid(){return this.#w}#c;get rdev(){return this.#c}#d;get blksize(){return this.#d}#a;get ino(){return this.#a}#l;get size(){return this.#l}#r;get blocks(){return this.#r}#f;get atimeMs(){return this.#f}#y;get mtimeMs(){return this.#y}#m;get ctimeMs(){return this.#m}#p;get birthtimeMs(){return this.#p}#k;get atime(){return this.#k}#h;get mtime(){return this.#h}#x;get ctime(){return this.#x}#T;get birthtime(){return this.#T}#v;#C;#S;#g;#E;#_;#s;#P;#b;#I;get parentPath(){return (this.parent||this).fullpath()}get path(){return this.parentPath}constructor(e,t=gt,s,n,r,i,o){this.name=e,this.#v=r?Si(e):er(e),this.#s=t&qy,this.nocase=r,this.roots=n,this.root=s||this,this.#P=i,this.#S=o.fullpath,this.#E=o.relative,this.#_=o.relativePosix,this.parent=o.parent,this.parent?this.#e=this.parent.#e:this.#e=Rd(o.fs);}depth(){return this.#C!==void 0?this.#C:this.parent?this.#C=this.parent.depth()+1:this.#C=0}childrenCache(){return this.#P}resolve(e){if(!e)return this;let t=this.getRootString(e),n=e.substring(t.length).split(this.splitSep);return t?this.getRoot(t).#D(n):this.#D(n)}#D(e){let t=this;for(let s of e)t=t.child(s);return t}children(){let e=this.#P.get(this);if(e)return e;let t=Object.assign([],{provisional:0});return this.#P.set(this,t),this.#s&=~Xa,t}child(e,t){if(e===""||e===".")return this;if(e==="..")return this.parent||this;let s=this.children(),n=this.nocase?Si(e):er(e);for(let l of s)if(l.#v===n)return l;let r=this.parent?this.sep:"",i=this.#S?this.#S+r+e:void 0,o=this.newChild(e,gt,{...t,parent:this,fullpath:i});return this.canReaddir()||(o.#s|=Tt),s.push(o),o}relative(){if(this.isCWD)return "";if(this.#E!==void 0)return this.#E;let e=this.name,t=this.parent;if(!t)return this.#E=this.name;let s=t.relative();return s+(!s||!t.parent?"":this.sep)+e}relativePosix(){if(this.sep==="/")return this.relative();if(this.isCWD)return "";if(this.#_!==void 0)return this.#_;let e=this.name,t=this.parent;if(!t)return this.#_=this.fullpathPosix();let s=t.relativePosix();return s+(!s||!t.parent?"":"/")+e}fullpath(){if(this.#S!==void 0)return this.#S;let e=this.name,t=this.parent;if(!t)return this.#S=this.name;let n=t.fullpath()+(t.parent?this.sep:"")+e;return this.#S=n}fullpathPosix(){if(this.#g!==void 0)return this.#g;if(this.sep==="/")return this.#g=this.fullpath();if(!this.parent){let n=this.fullpath().replace(/\\/g,"/");return /^[a-z]:\//i.test(n)?this.#g=`//?/${n}`:this.#g=n}let e=this.parent,t=e.fullpathPosix(),s=t+(!t||!e.parent?"":"/")+this.name;return this.#g=s}isUnknown(){return (this.#s&mt)===gt}isType(e){return this[`is${e}`]()}getType(){return this.isUnknown()?"Unknown":this.isDirectory()?"Directory":this.isFile()?"File":this.isSymbolicLink()?"SymbolicLink":this.isFIFO()?"FIFO":this.isCharacterDevice()?"CharacterDevice":this.isBlockDevice()?"BlockDevice":this.isSocket()?"Socket":"Unknown"}isFile(){return (this.#s&mt)===Pd}isDirectory(){return (this.#s&mt)===Ot}isCharacterDevice(){return (this.#s&mt)===Id}isBlockDevice(){return (this.#s&mt)===Md}isFIFO(){return (this.#s&mt)===Ed}isSocket(){return (this.#s&mt)===Dd}isSymbolicLink(){return (this.#s&Ss)===Ss}lstatCached(){return this.#s&kd?this:void 0}readlinkCached(){return this.#b}realpathCached(){return this.#I}readdirCached(){let e=this.children();return e.slice(0,e.provisional)}canReadlink(){if(this.#b)return true;if(!this.parent)return false;let e=this.#s&mt;return !(e!==gt&&e!==Ss||this.#s&Ci||this.#s&Tt)}calledReaddir(){return !!(this.#s&Xa)}isENOENT(){return !!(this.#s&Tt)}isNamed(e){return this.nocase?this.#v===Si(e):this.#v===er(e)}async readlink(){let e=this.#b;if(e)return e;if(this.canReadlink()&&this.parent)try{let t=await this.#e.promises.readlink(this.fullpath()),s=(await this.parent.realpath())?.resolve(t);if(s)return this.#b=s}catch(t){this.#u(t.code);return}}readlinkSync(){let e=this.#b;if(e)return e;if(this.canReadlink()&&this.parent)try{let t=this.#e.readlinkSync(this.fullpath()),s=this.parent.realpathSync()?.resolve(t);if(s)return this.#b=s}catch(t){this.#u(t.code);return}}#O(e){this.#s|=Xa;for(let t=e.provisional;t<e.length;t++){let s=e[t];s&&s.#L();}}#L(){this.#s&Tt||(this.#s=(this.#s|Tt)&Xn,this.#R());}#R(){let e=this.children();e.provisional=0;for(let t of e)t.#L();}#A(){this.#s|=ki,this.#N();}#N(){if(this.#s&Zn)return;let e=this.#s;(e&mt)===Ot&&(e&=Xn),this.#s=e|Zn,this.#R();}#$(e=""){e==="ENOTDIR"||e==="EPERM"?this.#N():e==="ENOENT"?this.#L():this.children().provisional=0;}#F(e=""){e==="ENOTDIR"?this.parent.#N():e==="ENOENT"&&this.#L();}#u(e=""){let t=this.#s;t|=Ci,e==="ENOENT"&&(t|=Tt),(e==="EINVAL"||e==="UNKNOWN")&&(t&=Xn),this.#s=t,e==="ENOTDIR"&&this.parent&&this.parent.#N();}#j(e,t){return this.#M(e,t)||this.#B(e,t)}#B(e,t){let s=Qa(e),n=this.newChild(e.name,s,{parent:this}),r=n.#s&mt;return r!==Ot&&r!==Ss&&r!==gt&&(n.#s|=Zn),t.unshift(n),t.provisional++,n}#M(e,t){for(let s=t.provisional;s<t.length;s++){let n=t[s];if((this.nocase?Si(e.name):er(e.name))===n.#v)return this.#G(e,n,s,t)}}#G(e,t,s,n){let r=t.name;return t.#s=t.#s&Xn|Qa(e),r!==e.name&&(t.name=e.name),s!==n.provisional&&(s===n.length-1?n.pop():n.splice(s,1),n.unshift(t)),n.provisional++,t}async lstat(){if((this.#s&Tt)===0)try{return this.#z(await this.#e.promises.lstat(this.fullpath())),this}catch(e){this.#F(e.code);}}lstatSync(){if((this.#s&Tt)===0)try{return this.#z(this.#e.lstatSync(this.fullpath())),this}catch(e){this.#F(e.code);}}#z(e){let{atime:t,atimeMs:s,birthtime:n,birthtimeMs:r,blksize:i,blocks:o,ctime:l,ctimeMs:c,dev:u,gid:d,ino:p,mode:h,mtime:g,mtimeMs:f,nlink:b,rdev:y,size:w,uid:C}=e;this.#k=t,this.#f=s,this.#T=n,this.#p=r,this.#d=i,this.#r=o,this.#x=l,this.#m=c,this.#t=u,this.#w=d,this.#a=p,this.#i=h,this.#h=g,this.#y=f,this.#n=b,this.#c=y,this.#l=w,this.#o=C;let S=Qa(e);this.#s=this.#s&Xn|S|kd,S!==gt&&S!==Ot&&S!==Ss&&(this.#s|=Zn);}#W=[];#q=false;#H(e){this.#q=false;let t=this.#W.slice();this.#W.length=0,t.forEach(s=>s(null,e));}readdirCB(e,t=false){if(!this.canReaddir()){t?e(null,[]):queueMicrotask(()=>e(null,[]));return}let s=this.children();if(this.calledReaddir()){let r=s.slice(0,s.provisional);t?e(null,r):queueMicrotask(()=>e(null,r));return}if(this.#W.push(e),this.#q)return;this.#q=true;let n=this.fullpath();this.#e.readdir(n,{withFileTypes:true},(r,i)=>{if(r)this.#$(r.code),s.provisional=0;else {for(let o of i)this.#j(o,s);this.#O(s);}this.#H(s.slice(0,s.provisional));});}#U;async readdir(){if(!this.canReaddir())return [];let e=this.children();if(this.calledReaddir())return e.slice(0,e.provisional);let t=this.fullpath();if(this.#U)await this.#U;else {let s=()=>{};this.#U=new Promise(n=>s=n);try{for(let n of await this.#e.promises.readdir(t,{withFileTypes:!0}))this.#j(n,e);this.#O(e);}catch(n){this.#$(n.code),e.provisional=0;}this.#U=void 0,s();}return e.slice(0,e.provisional)}readdirSync(){if(!this.canReaddir())return [];let e=this.children();if(this.calledReaddir())return e.slice(0,e.provisional);let t=this.fullpath();try{for(let s of this.#e.readdirSync(t,{withFileTypes:!0}))this.#j(s,e);this.#O(e);}catch(s){this.#$(s.code),e.provisional=0;}return e.slice(0,e.provisional)}canReaddir(){if(this.#s&xd)return false;let e=mt&this.#s;return e===gt||e===Ot||e===Ss}shouldWalk(e,t){return (this.#s&Ot)===Ot&&!(this.#s&xd)&&!e.has(this)&&(!t||t(this))}async realpath(){if(this.#I)return this.#I;if(!((ki|Ci|Tt)&this.#s))try{let e=await this.#e.promises.realpath(this.fullpath());return this.#I=this.resolve(e)}catch{this.#A();}}realpathSync(){if(this.#I)return this.#I;if(!((ki|Ci|Tt)&this.#s))try{let e=this.#e.realpathSync(this.fullpath());return this.#I=this.resolve(e)}catch{this.#A();}}[Od](e){if(e===this)return;e.isCWD=false,this.isCWD=true;let t=new Set([]),s=[],n=this;for(;n&&n.parent;)t.add(n),n.#E=s.join(this.sep),n.#_=s.join("/"),n=n.parent,s.push("..");for(n=e;n&&n.parent&&!t.has(n);)n.#E=void 0,n.#_=void 0,n=n.parent;}},Ti=class a extends Ke{sep="\\";splitSep=Wy;constructor(e,t=gt,s,n,r,i,o){super(e,t,s,n,r,i,o);}newChild(e,t=gt,s={}){return new a(e,t,this.root,this.roots,this.nocase,this.childrenCache(),s)}getRootString(e){return win32.parse(e).root}getRoot(e){if(e=Uy(e.toUpperCase()),e===this.root.name)return this.root;for(let[t,s]of Object.entries(this.roots))if(this.sameRoot(e,t))return this.roots[e]=s;return this.roots[e]=new nn(e,this).root}sameRoot(e,t=this.root.name){return e=e.toUpperCase().replace(/\//g,"\\").replace(Ad,"$1\\"),e===t}},_i=class a extends Ke{splitSep="/";sep="/";constructor(e,t=gt,s,n,r,i,o){super(e,t,s,n,r,i,o);}getRootString(e){return e.startsWith("/")?"/":""}getRoot(e){return this.root}newChild(e,t=gt,s={}){return new a(e,t,this.root,this.roots,this.nocase,this.childrenCache(),s)}},Ri=class{root;rootPath;roots;cwd;#e;#t;#i;nocase;#n;constructor(e=process.cwd(),t,s,{nocase:n,childrenCacheSize:r=16*1024,fs:i=Qn}={}){this.#n=Rd(i),(e instanceof URL||e.startsWith("file://"))&&(e=fileURLToPath(e));let o=t.resolve(e);this.roots=Object.create(null),this.rootPath=this.parseRootPath(o),this.#e=new xi,this.#t=new xi,this.#i=new el(r);let l=o.substring(this.rootPath.length).split(s);if(l.length===1&&!l[0]&&l.pop(),n===void 0)throw new TypeError("must provide nocase setting to PathScurryBase ctor");this.nocase=n,this.root=this.newRoot(this.#n),this.roots[this.rootPath]=this.root;let c=this.root,u=l.length-1,d=t.sep,p=this.rootPath,h=false;for(let g of l){let f=u--;c=c.child(g,{relative:new Array(f).fill("..").join(d),relativePosix:new Array(f).fill("..").join("/"),fullpath:p+=(h?"":d)+g}),h=true;}this.cwd=c;}depth(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.depth()}childrenCache(){return this.#i}resolve(...e){let t="";for(let r=e.length-1;r>=0;r--){let i=e[r];if(!(!i||i===".")&&(t=t?`${i}/${t}`:i,this.isAbsolute(i)))break}let s=this.#e.get(t);if(s!==void 0)return s;let n=this.cwd.resolve(t).fullpath();return this.#e.set(t,n),n}resolvePosix(...e){let t="";for(let r=e.length-1;r>=0;r--){let i=e[r];if(!(!i||i===".")&&(t=t?`${i}/${t}`:i,this.isAbsolute(i)))break}let s=this.#t.get(t);if(s!==void 0)return s;let n=this.cwd.resolve(t).fullpathPosix();return this.#t.set(t,n),n}relative(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.relative()}relativePosix(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.relativePosix()}basename(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.name}dirname(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),(e.parent||e).fullpath()}async readdir(e=this.cwd,t={withFileTypes:true}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s}=t;if(e.canReaddir()){let n=await e.readdir();return s?n:n.map(r=>r.name)}else return []}readdirSync(e=this.cwd,t={withFileTypes:true}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true}=t;return e.canReaddir()?s?e.readdirSync():e.readdirSync().map(n=>n.name):[]}async lstat(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.lstat()}lstatSync(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.lstatSync()}async readlink(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e.withFileTypes,e=this.cwd);let s=await e.readlink();return t?s:s?.fullpath()}readlinkSync(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e.withFileTypes,e=this.cwd);let s=e.readlinkSync();return t?s:s?.fullpath()}async realpath(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e.withFileTypes,e=this.cwd);let s=await e.realpath();return t?s:s?.fullpath()}realpathSync(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e.withFileTypes,e=this.cwd);let s=e.realpathSync();return t?s:s?.fullpath()}async walk(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t,o=[];(!r||r(e))&&o.push(s?e:e.fullpath());let l=new Set,c=(d,p)=>{l.add(d),d.readdirCB((h,g)=>{if(h)return p(h);let f=g.length;if(!f)return p();let b=()=>{--f===0&&p();};for(let y of g)(!r||r(y))&&o.push(s?y:y.fullpath()),n&&y.isSymbolicLink()?y.realpath().then(w=>w?.isUnknown()?w.lstat():w).then(w=>w?.shouldWalk(l,i)?c(w,b):b()):y.shouldWalk(l,i)?c(y,b):b();},true);},u=e;return new Promise((d,p)=>{c(u,h=>{if(h)return p(h);d(o);});})}walkSync(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t,o=[];(!r||r(e))&&o.push(s?e:e.fullpath());let l=new Set([e]);for(let c of l){let u=c.readdirSync();for(let d of u){(!r||r(d))&&o.push(s?d:d.fullpath());let p=d;if(d.isSymbolicLink()){if(!(n&&(p=d.realpathSync())))continue;p.isUnknown()&&p.lstatSync();}p.shouldWalk(l,i)&&l.add(p);}}return o}[Symbol.asyncIterator](){return this.iterate()}iterate(e=this.cwd,t={}){return typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd),this.stream(e,t)[Symbol.asyncIterator]()}[Symbol.iterator](){return this.iterateSync()}*iterateSync(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t;(!r||r(e))&&(yield s?e:e.fullpath());let o=new Set([e]);for(let l of o){let c=l.readdirSync();for(let u of c){(!r||r(u))&&(yield s?u:u.fullpath());let d=u;if(u.isSymbolicLink()){if(!(n&&(d=u.realpathSync())))continue;d.isUnknown()&&d.lstatSync();}d.shouldWalk(o,i)&&o.add(d);}}}stream(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t,o=new ts({objectMode:true});(!r||r(e))&&o.write(s?e:e.fullpath());let l=new Set,c=[e],u=0,d=()=>{let p=false;for(;!p;){let h=c.shift();if(!h){u===0&&o.end();return}u++,l.add(h);let g=(b,y,w=false)=>{if(b)return o.emit("error",b);if(n&&!w){let C=[];for(let S of y)S.isSymbolicLink()&&C.push(S.realpath().then(T=>T?.isUnknown()?T.lstat():T));if(C.length){Promise.all(C).then(()=>g(null,y,true));return}}for(let C of y)C&&(!r||r(C))&&(o.write(s?C:C.fullpath())||(p=true));u--;for(let C of y){let S=C.realpathCached()||C;S.shouldWalk(l,i)&&c.push(S);}p&&!o.flowing?o.once("drain",d):f||d();},f=true;h.readdirCB(g,true),f=false;}};return d(),o}streamSync(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Ke||(t=e,e=this.cwd);let{withFileTypes:s=true,follow:n=false,filter:r,walkFilter:i}=t,o=new ts({objectMode:true}),l=new Set;(!r||r(e))&&o.write(s?e:e.fullpath());let c=[e],u=0,d=()=>{let p=false;for(;!p;){let h=c.shift();if(!h){u===0&&o.end();return}u++,l.add(h);let g=h.readdirSync();for(let f of g)(!r||r(f))&&(o.write(s?f:f.fullpath())||(p=true));u--;for(let f of g){let b=f;if(f.isSymbolicLink()){if(!(n&&(b=f.realpathSync())))continue;b.isUnknown()&&b.lstatSync();}b.shouldWalk(l,i)&&c.push(b);}}p&&!o.flowing&&o.once("drain",d);};return d(),o}chdir(e=this.cwd){let t=this.cwd;this.cwd=typeof e=="string"?this.cwd.resolve(e):e,this.cwd[Od](t);}},nn=class extends Ri{sep="\\";constructor(e=process.cwd(),t={}){let{nocase:s=true}=t;super(e,win32,"\\",{...t,nocase:s}),this.nocase=s;for(let n=this.cwd;n;n=n.parent)n.nocase=this.nocase;}parseRootPath(e){return win32.parse(e).root.toUpperCase()}newRoot(e){return new Ti(this.rootPath,Ot,void 0,this.roots,this.nocase,this.childrenCache(),{fs:e})}isAbsolute(e){return e.startsWith("/")||e.startsWith("\\")||/^[a-z]:(\/|\\)/i.test(e)}},rn=class extends Ri{sep="/";constructor(e=process.cwd(),t={}){let{nocase:s=false}=t;super(e,posix,"/",{...t,nocase:s}),this.nocase=s;}parseRootPath(e){return "/"}newRoot(e){return new _i(this.rootPath,Ot,void 0,this.roots,this.nocase,this.childrenCache(),{fs:e})}isAbsolute(e){return e.startsWith("/")}},tr=class extends rn{constructor(e=process.cwd(),t={}){let{nocase:s=true}=t;super(e,{...t,nocase:s});}};process.platform==="win32"?Ti:_i;var Ld=process.platform==="win32"?nn:process.platform==="darwin"?tr:rn;var zy=a=>a.length>=1,Hy=a=>a.length>=1,on=class a{#e;#t;#i;length;#n;#o;#w;#c;#d;#a;#l=true;constructor(e,t,s,n){if(!zy(e))throw new TypeError("empty pattern list");if(!Hy(t))throw new TypeError("empty glob list");if(t.length!==e.length)throw new TypeError("mismatched pattern list and glob list lengths");if(this.length=e.length,s<0||s>=this.length)throw new TypeError("index out of range");if(this.#e=e,this.#t=t,this.#i=s,this.#n=n,this.#i===0){if(this.isUNC()){let[r,i,o,l,...c]=this.#e,[u,d,p,h,...g]=this.#t;c[0]===""&&(c.shift(),g.shift());let f=[r,i,o,l,""].join("/"),b=[u,d,p,h,""].join("/");this.#e=[f,...c],this.#t=[b,...g],this.length=this.#e.length;}else if(this.isDrive()||this.isAbsolute()){let[r,...i]=this.#e,[o,...l]=this.#t;i[0]===""&&(i.shift(),l.shift());let c=r+"/",u=o+"/";this.#e=[c,...i],this.#t=[u,...l],this.length=this.#e.length;}}}pattern(){return this.#e[this.#i]}isString(){return typeof this.#e[this.#i]=="string"}isGlobstar(){return this.#e[this.#i]===Ge}isRegExp(){return this.#e[this.#i]instanceof RegExp}globString(){return this.#w=this.#w||(this.#i===0?this.isAbsolute()?this.#t[0]+this.#t.slice(1).join("/"):this.#t.join("/"):this.#t.slice(this.#i).join("/"))}hasMore(){return this.length>this.#i+1}rest(){return this.#o!==void 0?this.#o:this.hasMore()?(this.#o=new a(this.#e,this.#t,this.#i+1,this.#n),this.#o.#a=this.#a,this.#o.#d=this.#d,this.#o.#c=this.#c,this.#o):this.#o=null}isUNC(){let e=this.#e;return this.#d!==void 0?this.#d:this.#d=this.#n==="win32"&&this.#i===0&&e[0]===""&&e[1]===""&&typeof e[2]=="string"&&!!e[2]&&typeof e[3]=="string"&&!!e[3]}isDrive(){let e=this.#e;return this.#c!==void 0?this.#c:this.#c=this.#n==="win32"&&this.#i===0&&this.length>1&&typeof e[0]=="string"&&/^[a-z]:$/i.test(e[0])}isAbsolute(){let e=this.#e;return this.#a!==void 0?this.#a:this.#a=e[0]===""&&e.length>1||this.isDrive()||this.isUNC()}root(){let e=this.#e[0];return typeof e=="string"&&this.isAbsolute()&&this.#i===0?e:""}checkFollowGlobstar(){return !(this.#i===0||!this.isGlobstar()||!this.#l)}markFollowGlobstar(){return this.#i===0||!this.isGlobstar()||!this.#l?false:(this.#l=false,true)}};var Jy=typeof process=="object"&&process&&typeof process.platform=="string"?process.platform:"linux",an=class{relative;relativeChildren;absolute;absoluteChildren;platform;mmopts;constructor(e,{nobrace:t,nocase:s,noext:n,noglobstar:r,platform:i=Jy}){this.relative=[],this.absolute=[],this.relativeChildren=[],this.absoluteChildren=[],this.platform=i,this.mmopts={dot:true,nobrace:t,nocase:s,noext:n,noglobstar:r,optimizationLevel:2,platform:i,nocomment:true,nonegate:true};for(let o of e)this.add(o);}add(e){let t=new ct(e,this.mmopts);for(let s=0;s<t.set.length;s++){let n=t.set[s],r=t.globParts[s];if(!n||!r)throw new Error("invalid pattern object");for(;n[0]==="."&&r[0]===".";)n.shift(),r.shift();let i=new on(n,r,0,this.platform),o=new ct(i.globString(),this.mmopts),l=r[r.length-1]==="**",c=i.isAbsolute();c?this.absolute.push(o):this.relative.push(o),l&&(c?this.absoluteChildren.push(o):this.relativeChildren.push(o));}}ignored(e){let t=e.fullpath(),s=`${t}/`,n=e.relative()||".",r=`${n}/`;for(let i of this.relative)if(i.match(n)||i.match(r))return true;for(let i of this.absolute)if(i.match(t)||i.match(s))return true;return false}childrenIgnored(e){let t=e.fullpath()+"/",s=(e.relative()||".")+"/";for(let n of this.relativeChildren)if(n.match(s))return true;for(let n of this.absoluteChildren)if(n.match(t))return true;return false}};var tl=class a{store;constructor(e=new Map){this.store=e;}copy(){return new a(new Map(this.store))}hasWalked(e,t){return this.store.get(e.fullpath())?.has(t.globString())}storeWalked(e,t){let s=e.fullpath(),n=this.store.get(s);n?n.add(t.globString()):this.store.set(s,new Set([t.globString()]));}},sl=class{store=new Map;add(e,t,s){let n=(t?2:0)|(s?1:0),r=this.store.get(e);this.store.set(e,r===void 0?n:n&r);}entries(){return [...this.store.entries()].map(([e,t])=>[e,!!(t&2),!!(t&1)])}},nl=class{store=new Map;add(e,t){if(!e.canReaddir())return;let s=this.store.get(e);s?s.find(n=>n.globString()===t.globString())||s.push(t):this.store.set(e,[t]);}get(e){let t=this.store.get(e);if(!t)throw new Error("attempting to walk unknown path");return t}entries(){return this.keys().map(e=>[e,this.store.get(e)])}keys(){return [...this.store.keys()].filter(e=>e.canReaddir())}},sr=class a{hasWalkedCache;matches=new sl;subwalks=new nl;patterns;follow;dot;opts;constructor(e,t){this.opts=e,this.follow=!!e.follow,this.dot=!!e.dot,this.hasWalkedCache=t?t.copy():new tl;}processPatterns(e,t){this.patterns=t;let s=t.map(n=>[e,n]);for(let[n,r]of s){this.hasWalkedCache.storeWalked(n,r);let i=r.root(),o=r.isAbsolute()&&this.opts.absolute!==false;if(i){n=n.resolve(i==="/"&&this.opts.root!==void 0?this.opts.root:i);let d=r.rest();if(d)r=d;else {this.matches.add(n,true,false);continue}}if(n.isENOENT())continue;let l,c,u=false;for(;typeof(l=r.pattern())=="string"&&(c=r.rest());)n=n.resolve(l),r=c,u=true;if(l=r.pattern(),c=r.rest(),u){if(this.hasWalkedCache.hasWalked(n,r))continue;this.hasWalkedCache.storeWalked(n,r);}if(typeof l=="string"){let d=l===".."||l===""||l===".";this.matches.add(n.resolve(l),o,d);continue}else if(l===Ge){(!n.isSymbolicLink()||this.follow||r.checkFollowGlobstar())&&this.subwalks.add(n,r);let d=c?.pattern(),p=c?.rest();if(!c||(d===""||d===".")&&!p)this.matches.add(n,o,d===""||d===".");else if(d===".."){let h=n.parent||n;p?this.hasWalkedCache.hasWalked(h,p)||this.subwalks.add(h,p):this.matches.add(h,o,true);}}else l instanceof RegExp&&this.subwalks.add(n,r);}return this}subwalkTargets(){return this.subwalks.keys()}child(){return new a(this.opts,this.hasWalkedCache)}filterEntries(e,t){let s=this.subwalks.get(e),n=this.child();for(let r of t)for(let i of s){let o=i.isAbsolute(),l=i.pattern(),c=i.rest();l===Ge?n.testGlobstar(r,i,c,o):l instanceof RegExp?n.testRegExp(r,l,c,o):n.testString(r,l,c,o);}return n}testGlobstar(e,t,s,n){if((this.dot||!e.name.startsWith("."))&&(t.hasMore()||this.matches.add(e,n,false),e.canReaddir()&&(this.follow||!e.isSymbolicLink()?this.subwalks.add(e,t):e.isSymbolicLink()&&(s&&t.checkFollowGlobstar()?this.subwalks.add(e,s):t.markFollowGlobstar()&&this.subwalks.add(e,t)))),s){let r=s.pattern();if(typeof r=="string"&&r!==".."&&r!==""&&r!==".")this.testString(e,r,s.rest(),n);else if(r===".."){let i=e.parent||e;this.subwalks.add(i,s);}else r instanceof RegExp&&this.testRegExp(e,r,s.rest(),n);}}testRegExp(e,t,s,n){t.test(e.name)&&(s?this.subwalks.add(e,s):this.matches.add(e,n,false));}testString(e,t,s,n){e.isNamed(t)&&(s?this.subwalks.add(e,s):this.matches.add(e,n,false));}};var Ky=(a,e)=>typeof a=="string"?new an([a],e):Array.isArray(a)?new an(a,e):a,Ai=class{path;patterns;opts;seen=new Set;paused=false;aborted=false;#e=[];#t;#i;signal;maxDepth;includeChildMatches;constructor(e,t,s){if(this.patterns=e,this.path=t,this.opts=s,this.#i=!s.posix&&s.platform==="win32"?"\\":"/",this.includeChildMatches=s.includeChildMatches!==false,(s.ignore||!this.includeChildMatches)&&(this.#t=Ky(s.ignore??[],s),!this.includeChildMatches&&typeof this.#t.add!="function")){let n="cannot ignore child matches, ignore lacks add() method.";throw new Error(n)}this.maxDepth=s.maxDepth||1/0,s.signal&&(this.signal=s.signal,this.signal.addEventListener("abort",()=>{this.#e.length=0;}));}#n(e){return this.seen.has(e)||!!this.#t?.ignored?.(e)}#o(e){return !!this.#t?.childrenIgnored?.(e)}pause(){this.paused=true;}resume(){if(this.signal?.aborted)return;this.paused=false;let e;for(;!this.paused&&(e=this.#e.shift());)e();}onResume(e){this.signal?.aborted||(this.paused?this.#e.push(e):e());}async matchCheck(e,t){if(t&&this.opts.nodir)return;let s;if(this.opts.realpath){if(s=e.realpathCached()||await e.realpath(),!s)return;e=s;}let r=e.isUnknown()||this.opts.stat?await e.lstat():e;if(this.opts.follow&&this.opts.nodir&&r?.isSymbolicLink()){let i=await r.realpath();i&&(i.isUnknown()||this.opts.stat)&&await i.lstat();}return this.matchCheckTest(r,t)}matchCheckTest(e,t){return e&&(this.maxDepth===1/0||e.depth()<=this.maxDepth)&&(!t||e.canReaddir())&&(!this.opts.nodir||!e.isDirectory())&&(!this.opts.nodir||!this.opts.follow||!e.isSymbolicLink()||!e.realpathCached()?.isDirectory())&&!this.#n(e)?e:void 0}matchCheckSync(e,t){if(t&&this.opts.nodir)return;let s;if(this.opts.realpath){if(s=e.realpathCached()||e.realpathSync(),!s)return;e=s;}let r=e.isUnknown()||this.opts.stat?e.lstatSync():e;if(this.opts.follow&&this.opts.nodir&&r?.isSymbolicLink()){let i=r.realpathSync();i&&(i?.isUnknown()||this.opts.stat)&&i.lstatSync();}return this.matchCheckTest(r,t)}matchFinish(e,t){if(this.#n(e))return;if(!this.includeChildMatches&&this.#t?.add){let r=`${e.relativePosix()}/**`;this.#t.add(r);}let s=this.opts.absolute===void 0?t:this.opts.absolute;this.seen.add(e);let n=this.opts.mark&&e.isDirectory()?this.#i:"";if(this.opts.withFileTypes)this.matchEmit(e);else if(s){let r=this.opts.posix?e.fullpathPosix():e.fullpath();this.matchEmit(r+n);}else {let r=this.opts.posix?e.relativePosix():e.relative(),i=this.opts.dotRelative&&!r.startsWith(".."+this.#i)?"."+this.#i:"";this.matchEmit(r?i+r+n:"."+n);}}async match(e,t,s){let n=await this.matchCheck(e,s);n&&this.matchFinish(n,t);}matchSync(e,t,s){let n=this.matchCheckSync(e,s);n&&this.matchFinish(n,t);}walkCB(e,t,s){this.signal?.aborted&&s(),this.walkCB2(e,t,new sr(this.opts),s);}walkCB2(e,t,s,n){if(this.#o(e))return n();if(this.signal?.aborted&&n(),this.paused){this.onResume(()=>this.walkCB2(e,t,s,n));return}s.processPatterns(e,t);let r=1,i=()=>{--r===0&&n();};for(let[o,l,c]of s.matches.entries())this.#n(o)||(r++,this.match(o,l,c).then(()=>i()));for(let o of s.subwalkTargets()){if(this.maxDepth!==1/0&&o.depth()>=this.maxDepth)continue;r++;let l=o.readdirCached();o.calledReaddir()?this.walkCB3(o,l,s,i):o.readdirCB((c,u)=>this.walkCB3(o,u,s,i),true);}i();}walkCB3(e,t,s,n){s=s.filterEntries(e,t);let r=1,i=()=>{--r===0&&n();};for(let[o,l,c]of s.matches.entries())this.#n(o)||(r++,this.match(o,l,c).then(()=>i()));for(let[o,l]of s.subwalks.entries())r++,this.walkCB2(o,l,s.child(),i);i();}walkCBSync(e,t,s){this.signal?.aborted&&s(),this.walkCB2Sync(e,t,new sr(this.opts),s);}walkCB2Sync(e,t,s,n){if(this.#o(e))return n();if(this.signal?.aborted&&n(),this.paused){this.onResume(()=>this.walkCB2Sync(e,t,s,n));return}s.processPatterns(e,t);let r=1,i=()=>{--r===0&&n();};for(let[o,l,c]of s.matches.entries())this.#n(o)||this.matchSync(o,l,c);for(let o of s.subwalkTargets()){if(this.maxDepth!==1/0&&o.depth()>=this.maxDepth)continue;r++;let l=o.readdirSync();this.walkCB3Sync(o,l,s,i);}i();}walkCB3Sync(e,t,s,n){s=s.filterEntries(e,t);let r=1,i=()=>{--r===0&&n();};for(let[o,l,c]of s.matches.entries())this.#n(o)||this.matchSync(o,l,c);for(let[o,l]of s.subwalks.entries())r++,this.walkCB2Sync(o,l,s.child(),i);i();}},nr=class extends Ai{matches=new Set;constructor(e,t,s){super(e,t,s);}matchEmit(e){this.matches.add(e);}async walk(){if(this.signal?.aborted)throw this.signal.reason;return this.path.isUnknown()&&await this.path.lstat(),await new Promise((e,t)=>{this.walkCB(this.path,this.patterns,()=>{this.signal?.aborted?t(this.signal.reason):e(this.matches);});}),this.matches}walkSync(){if(this.signal?.aborted)throw this.signal.reason;return this.path.isUnknown()&&this.path.lstatSync(),this.walkCBSync(this.path,this.patterns,()=>{if(this.signal?.aborted)throw this.signal.reason}),this.matches}},rr=class extends Ai{results;constructor(e,t,s){super(e,t,s),this.results=new ts({signal:this.signal,objectMode:true}),this.results.on("drain",()=>this.resume()),this.results.on("resume",()=>this.resume());}matchEmit(e){this.results.write(e),this.results.flowing||this.pause();}stream(){let e=this.path;return e.isUnknown()?e.lstat().then(()=>{this.walkCB(e,this.patterns,()=>this.results.end());}):this.walkCB(e,this.patterns,()=>this.results.end()),this.results}streamSync(){return this.path.isUnknown()&&this.path.lstatSync(),this.walkCBSync(this.path,this.patterns,()=>this.results.end()),this.results}};var Yy=typeof process=="object"&&process&&typeof process.platform=="string"?process.platform:"linux",_t=class{absolute;cwd;root;dot;dotRelative;follow;ignore;magicalBraces;mark;matchBase;maxDepth;nobrace;nocase;nodir;noext;noglobstar;pattern;platform;realpath;scurry;stat;signal;windowsPathsNoEscape;withFileTypes;includeChildMatches;opts;patterns;constructor(e,t){if(!t)throw new TypeError("glob options required");if(this.withFileTypes=!!t.withFileTypes,this.signal=t.signal,this.follow=!!t.follow,this.dot=!!t.dot,this.dotRelative=!!t.dotRelative,this.nodir=!!t.nodir,this.mark=!!t.mark,t.cwd?(t.cwd instanceof URL||t.cwd.startsWith("file://"))&&(t.cwd=fileURLToPath(t.cwd)):this.cwd="",this.cwd=t.cwd||"",this.root=t.root,this.magicalBraces=!!t.magicalBraces,this.nobrace=!!t.nobrace,this.noext=!!t.noext,this.realpath=!!t.realpath,this.absolute=t.absolute,this.includeChildMatches=t.includeChildMatches!==false,this.noglobstar=!!t.noglobstar,this.matchBase=!!t.matchBase,this.maxDepth=typeof t.maxDepth=="number"?t.maxDepth:1/0,this.stat=!!t.stat,this.ignore=t.ignore,this.withFileTypes&&this.absolute!==void 0)throw new Error("cannot set absolute and withFileTypes:true");if(typeof e=="string"&&(e=[e]),this.windowsPathsNoEscape=!!t.windowsPathsNoEscape||t.allowWindowsEscape===false,this.windowsPathsNoEscape&&(e=e.map(l=>l.replace(/\\/g,"/"))),this.matchBase){if(t.noglobstar)throw new TypeError("base matching requires globstar");e=e.map(l=>l.includes("/")?l:`./**/${l}`);}if(this.pattern=e,this.platform=t.platform||Yy,this.opts={...t,platform:this.platform},t.scurry){if(this.scurry=t.scurry,t.nocase!==void 0&&t.nocase!==t.scurry.nocase)throw new Error("nocase option contradicts provided scurry option")}else {let l=t.platform==="win32"?nn:t.platform==="darwin"?tr:t.platform?rn:Ld;this.scurry=new l(this.cwd,{nocase:t.nocase,fs:t.fs});}this.nocase=this.scurry.nocase;let s=this.platform==="darwin"||this.platform==="win32",n={...t,dot:this.dot,matchBase:this.matchBase,nobrace:this.nobrace,nocase:this.nocase,nocaseMagicOnly:s,nocomment:true,noext:this.noext,nonegate:true,optimizationLevel:2,platform:this.platform,windowsPathsNoEscape:this.windowsPathsNoEscape,debug:!!this.opts.debug},r=this.pattern.map(l=>new ct(l,n)),[i,o]=r.reduce((l,c)=>(l[0].push(...c.set),l[1].push(...c.globParts),l),[[],[]]);this.patterns=i.map((l,c)=>{let u=o[c];if(!u)throw new Error("invalid pattern object");return new on(l,u,0,this.platform)});}async walk(){return [...await new nr(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).walk()]}walkSync(){return [...new nr(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).walkSync()]}stream(){return new rr(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).stream()}streamSync(){return new rr(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase,includeChildMatches:this.includeChildMatches}).streamSync()}iterateSync(){return this.streamSync()[Symbol.iterator]()}[Symbol.iterator](){return this.iterateSync()}iterate(){return this.stream()[Symbol.asyncIterator]()}[Symbol.asyncIterator](){return this.iterate()}};var rl=(a,e={})=>{Array.isArray(a)||(a=[a]);for(let t of a)if(new ct(t,e).hasMagic())return true;return false};function Ei(a,e={}){return new _t(a,e).streamSync()}function $d(a,e={}){return new _t(a,e).stream()}function Fd(a,e={}){return new _t(a,e).walkSync()}async function Nd(a,e={}){return new _t(a,e).walk()}function Ii(a,e={}){return new _t(a,e).iterateSync()}function jd(a,e={}){return new _t(a,e).iterate()}var Xy=Ei,Qy=Object.assign($d,{sync:Ei}),Zy=Ii,eb=Object.assign(jd,{sync:Ii}),tb=Object.assign(Fd,{stream:Ei,iterate:Ii}),ln=Object.assign(Nd,{glob:Nd,globSync:Fd,sync:tb,globStream:$d,stream:Qy,globStreamSync:Ei,streamSync:Xy,globIterate:jd,iterate:eb,globIterateSync:Ii,iterateSync:Zy,Glob:_t,hasMagic:rl,escape:Qs,unescape:kt});ln.glob=ln;var ir=class{languageId="typescript";extensions=[".ts",".tsx",".js",".jsx",".mjs",".cjs"];async parse(e,t){let s=e.split(`
623
623
  `),n=[],r={class:/^(\s*)(export\s+)?(abstract\s+)?class\s+(\w+)(\s+extends\s+\w+)?(\s+implements\s+[\w,\s]+)?/,interface:/^(\s*)(export\s+)?interface\s+(\w+)(\s+extends\s+[\w,\s]+)?/,type:/^(\s*)(export\s+)?type\s+(\w+)\s*[=<]/,enum:/^(\s*)(export\s+)?enum\s+(\w+)/,function:/^(\s*)(export\s+)?(async\s+)?function\s+(\w+)\s*[<(]/,constFunction:/^(\s*)(export\s+)?(const|let|var)\s+(\w+)\s*[=:]\s*(async\s+)?(\([^)]*\)|[a-zA-Z_]\w*)\s*(=>|:.*=>)/,variable:/^(\s*)(export\s+)?(const|let|var)\s+(\w+)\s*[=:]/,method:/^(\s+)(public\s+|private\s+|protected\s+)?(static\s+)?(async\s+)?(\w+)\s*[<(]/,property:/^(\s+)(public\s+|private\s+|protected\s+)?(static\s+)?(readonly\s+)?(\w+)\s*[=:?]/},i=null,o=0;for(let l=0;l<s.length;l++){let c=s[l],u=l+1;if(i){let f=c.match(/^(\s*)/)?.[1].length||0;c.trim()&&f<=o&&!c.match(/^\s*[})\]]/)&&(i.endLine=l,n.push(i),i=null);}if(c.trim().startsWith("//")||c.trim().startsWith("/*")||!c.trim())continue;let d=c.match(r.class);if(d){if(i&&(i.endLine=l,n.push(i)),o=d[1].length,i={name:d[4],kind:"class",startLine:u,endLine:this.findSymbolEnd(s,l),children:[]},l>0){let f=s[l-1].trim();f.startsWith("/**")||f.startsWith("/*")?i.docstring=this.extractDocstring(s,l-1):f.startsWith("//")&&(i.docstring=f.replace(/^\/\/\s*/,""));}continue}let p=c.match(r.interface);if(p){n.push({name:p[3],kind:"interface",startLine:u,endLine:this.findSymbolEnd(s,l)});continue}let h=c.match(r.type);if(h){n.push({name:h[3],kind:"type",startLine:u,endLine:this.findTypeEnd(s,l)});continue}let g=c.match(r.enum);if(g){n.push({name:g[3],kind:"enum",startLine:u,endLine:this.findSymbolEnd(s,l)});continue}if(!i){let f=c.match(r.function);if(f){n.push({name:f[4],kind:"function",startLine:u,endLine:this.findSymbolEnd(s,l)});continue}let b=c.match(r.constFunction);if(b){n.push({name:b[4],kind:"function",startLine:u,endLine:this.findSymbolEnd(s,l)});continue}let y=c.match(r.variable);if(y&&!r.constFunction.test(c)){n.push({name:y[4],kind:"variable",startLine:u,endLine:u});continue}}if(i){let f=c.match(r.method);if(f&&!["if","for","while","switch","catch","constructor"].includes(f[5])){let y={name:f[5],kind:(f[5]==="constructor","method"),startLine:u,endLine:this.findSymbolEnd(s,l),parent:i.name};i.children.push(y);continue}let b=c.match(r.property);if(b&&!["if","for","while","switch","catch","return","const","let","var"].includes(b[5])){let y={name:b[5],kind:"variable",startLine:u,endLine:u,parent:i.name};i.children.push(y);}}}return i&&(i.endLine=s.length,n.push(i)),n}findSymbolEnd(e,t){return Qt(e,t)}findTypeEnd(e,t){for(let s=t;s<e.length;s++){let n=e[s];if(n.includes(";")||s>t&&/^(export|type|interface|class|function|const|let|var)/.test(n.trim()))return s+1}return t+1}extractDocstring(e,t){let s=[],n=t;for(;n>=0;){let r=e[n].trim();if(r.startsWith("/**")||r.startsWith("/*"))break;n--;}for(let r=n;r<=t;r++){let i=e[r].trim();i=i.replace(/^\/\*\*?\s*/,"").replace(/\*\/\s*$/,"").replace(/^\*\s?/,""),i&&s.push(i);}return s.join(`
624
624
  `)}buildSymbolPattern(e,t){let s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");switch(t){case "function":return `(function|async\\s+function|const|let|var)\\s+${s}\\s*[=(<]`;case "class":return `class\\s+${s}(\\s+extends|\\s+implements|\\s*\\{)`;case "interface":return `interface\\s+${s}(\\s+extends|\\s*\\{)`;case "type":return `type\\s+${s}\\s*[=<]`;case "enum":return `enum\\s+${s}\\s*\\{`;case "method":return `(async\\s+)?${s}\\s*\\(`;case "variable":return `(const|let|var)\\s+${s}\\s*[=:]`;default:return `(function|class|interface|type|enum|const|let|var)\\s+${s}|${s}\\s*(=|\\()`}}};var or=class{languageId="python";extensions=[".py",".pyw"];async parse(e,t){let s=e.split(`
625
625
  `),n=[],r={class:/^(\s*)class\s+(\w+)(\s*\([^)]*\))?\s*:/,function:/^(\s*)(async\s+)?def\s+(\w+)\s*\(/,variable:/^([A-Z][A-Z0-9_]*)\s*[=:]/},i=null,o=-1;for(let l=0;l<s.length;l++){let c=s[l],u=l+1,d=c.match(/^(\s*)/)?.[1].length||0;if(i&&c.trim()&&d<=o&&(i.endLine=l,n.push(i),i=null,o=-1),c.trim().startsWith("#")||!c.trim())continue;let p=c.match(r.class);if(p){i&&(i.endLine=l,n.push(i)),o=p[1].length,i={name:p[2],kind:"class",startLine:u,endLine:this.findClassEnd(s,l,o),children:[],docstring:this.extractDocstring(s,l+1)};continue}let h=c.match(r.function);if(h){let g=h[1].length,f=h[3],b=i&&g>o,y={name:f,kind:b?"method":"function",startLine:u,endLine:this.findFunctionEnd(s,l,g),docstring:this.extractDocstring(s,l+1)};b&&i?(y.parent=i.name,i.children.push(y)):n.push(y);continue}if(!i&&c.match(r.variable)){let g=c.match(r.variable);g&&n.push({name:g[1],kind:"constant",startLine:u,endLine:u});}}return i&&(i.endLine=s.length,n.push(i)),n}findClassEnd(e,t,s){for(let n=t+1;n<e.length;n++){let r=e[n];if(!r.trim())continue;if((r.match(/^(\s*)/)?.[1].length||0)<=s)return n}return e.length}findFunctionEnd(e,t,s){let n=false;for(let r=t+1;r<e.length;r++){let i=e[r];if(!i.trim())continue;let o=i.match(/^(\s*)/)?.[1].length||0;if(o>s){n=true;continue}if(n&&o<=s)return r}return e.length}extractDocstring(e,t){if(t>=e.length)return;let s=e[t].trim();if(s.startsWith('"""')||s.startsWith("'''")){let n=s.startsWith('"""')?'"""':"'''";if(s.endsWith(n)&&s.length>6)return s.slice(3,-3);let r=[s.slice(3)];for(let i=t+1;i<e.length;i++){let o=e[i].trim();if(o.endsWith(n)){r.push(o.slice(0,-3));break}r.push(o);}return r.join(`
@@ -627,18 +627,18 @@ globstar while`,e,p,t,h,g),this.matchOne(e.slice(p),t.slice(h),s))return this.de
627
627
  `),n=[],r={function:[/^(\s*)(export\s+)?(public\s+|private\s+|protected\s+)?(static\s+)?(async\s+)?(function\s+)?(\w+)\s*\([^)]*\)\s*[:{]/,/^(\s*)func\s+(\w+)\s*\(/,/^(\s*)(pub\s+)?fn\s+(\w+)\s*[<(]/,/^(\s*)(async\s+)?def\s+(\w+)\s*\(/,/^(\s*)def\s+(\w+)/],class:[/^(\s*)(export\s+)?(public\s+|abstract\s+)?(class|struct)\s+(\w+)/,/^(\s*)type\s+(\w+)\s+struct/,/^(\s*)(pub\s+)?struct\s+(\w+)/,/^(\s*)impl\s+(\w+)/],interface:[/^(\s*)(export\s+)?interface\s+(\w+)/,/^(\s*)type\s+(\w+)\s+interface/,/^(\s*)(pub\s+)?trait\s+(\w+)/],constant:[/^(\s*)(export\s+)?(const|final|static\s+final)\s+([A-Z_][A-Z0-9_]*)\s*[=:]/]};for(let i=0;i<s.length;i++){let o=s[i],l=i+1;if(!this.isComment(o)){for(let c of r.function){let u=o.match(c);if(u){let d=this.extractName(u);d&&!this.isKeyword(d)&&n.push({name:d,kind:"function",startLine:l,endLine:Qt(s,i)});break}}for(let c of r.class){let u=o.match(c);if(u){let d=this.extractName(u);d&&n.push({name:d,kind:"class",startLine:l,endLine:Qt(s,i)});break}}for(let c of r.interface){let u=o.match(c);if(u){let d=this.extractName(u);d&&n.push({name:d,kind:"interface",startLine:l,endLine:Qt(s,i)});break}}for(let c of r.constant){let u=o.match(c);if(u){let d=this.extractName(u);d&&n.push({name:d,kind:"constant",startLine:l,endLine:l});break}}}}return n}extractName(e){for(let t=e.length-1;t>0;t--){let s=e[t];if(s&&/^\w+$/.test(s)&&!this.isModifier(s))return s}return null}isModifier(e){return ["public","private","protected","static","final","abstract","async","export","const","let","var","function","class","interface","type","enum","struct","impl","fn","func","def","pub","trait"].includes(e.toLowerCase())}isKeyword(e){return ["if","else","for","while","do","switch","case","break","continue","return","try","catch","finally","throw","new","this","super","null","undefined","true","false","import","from","as","default","with","in","of","get","set","constructor"].includes(e)}isComment(e){let t=e.trim();return t.startsWith("//")||t.startsWith("#")||t.startsWith("/*")||t.startsWith("*")||t.startsWith("--")}buildSymbolPattern(e,t){let s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");switch(t){case "function":return `(function|func|fn|def)\\s+${s}|${s}\\s*\\(`;case "class":return `(class|struct|type)\\s+${s}`;case "interface":return `(interface|trait)\\s+${s}`;default:return `(function|class|interface|struct|type|func|fn|def)\\s+${s}|${s}\\s*[=(]`}}};var lr=class{parsers=new Map;constructor(){this.register(new ir),this.register(new or),this.register(new ar);}register(e){this.parsers.set(e.languageId,e);for(let t of e.extensions){let s=this.getLanguageFromExtension(t);s&&this.parsers.has(s);}}getParser(e){return this.parsers.has(e)?this.parsers.get(e):e==="javascript"?this.parsers.get("typescript")||null:this.parsers.get("generic")||null}getLanguageFromExtension(e){return {".ts":"typescript",".tsx":"typescript",".js":"javascript",".jsx":"javascript",".py":"python",".java":"java",".go":"go",".rs":"rust"}[e]||null}getSupportedLanguages(){return Array.from(this.parsers.keys()).filter(e=>e!=="generic")}};var sb="1.0.0",Mi=class{workspacePath;config;metadata=null;fileIndexCache=new Map;parserRegistry;constructor(e,t={}){this.workspacePath=e,this.config={...ju,...t},this.parserRegistry=new lr;}get indexDir(){return se.join(this.workspacePath,this.config.cacheDir)}async hasIndex(){let e=se.join(this.indexDir,"meta.json");return Gu(e)}async loadMetadata(){if(this.metadata)return this.metadata;let e=se.join(this.indexDir,"meta.json");try{let t=await ce.readFile(e,"utf-8");return this.metadata=JSON.parse(t),this.metadata}catch{return null}}async saveMetadata(){if(!this.metadata)return;await Un(this.indexDir);let e=se.join(this.indexDir,"meta.json");await ce.writeFile(e,JSON.stringify(this.metadata,null,2));}async buildIndex(e={}){let t=Date.now(),s=[],{paths:n=this.config.include,languages:r=this.config.languages,force:i=false,onProgress:o}=e;await Un(this.indexDir),await Un(se.join(this.indexDir,"files"));let l=[];for(let d of n){let p=await ln(d,{cwd:this.workspacePath,absolute:true,ignore:this.config.exclude});for(let h of p){let g=Na(h);g&&r.includes(g)&&l.push(h);}}let c=0,u=0;for(let d=0;d<l.length;d++){let p=l[d];o?.(d+1,l.length,p);try{if(!i){let g=await this.getFileIndex(p);if(g){let f=await ce.stat(p);if(g.mtime>=f.mtimeMs){u+=g.symbols.length,c++;continue}}}let h=await this.indexFile(p);h&&(await this.saveFileIndex(h),this.fileIndexCache.set(p,h),u+=h.symbols.length,c++);}catch(h){s.push({file:p,error:h.message});}}return this.metadata={version:sb,createdAt:this.metadata?.createdAt||Date.now(),updatedAt:Date.now(),fileCount:c,symbolCount:u,languages:r,indexDir:this.config.cacheDir},await this.saveMetadata(),{success:s.length===0,filesIndexed:c,symbolsFound:u,timeMs:Date.now()-t,errors:s}}async indexFile(e){let t=Na(e);if(!t)return null;let s=this.parserRegistry.getParser(t);if(!s)return null;try{let n=await ce.readFile(e,"utf-8"),r=await ce.stat(e),i=await s.parse(n,e),o=this.extractImports(n,t),l=this.extractExports(n,t);return {path:e,hash:Bu(n),mtime:r.mtimeMs,totalLines:n.split(`
628
628
  `).length,symbols:i,imports:o,exports:l}}catch{return null}}extractImports(e,t){let s=[],n=e.split(`
629
629
  `);if(["typescript","javascript"].includes(t)){let r=/^import\s+(?:(?:\{([^}]+)\}|(\w+))\s+from\s+)?['"]([^'"]+)['"]/;n.forEach((i,o)=>{let l=i.match(r);if(l){let c=l[1]?.split(",").map(u=>u.trim())||(l[2]?[l[2]]:[]);s.push({module:l[3],line:o+1,names:c.filter(Boolean)});}});}if(t==="python"){let r=/^(?:from\s+(\S+)\s+import\s+(.+)|import\s+(\S+))/;n.forEach((i,o)=>{let l=i.match(r);if(l){let c=l[1]||l[3],u=l[2]?.split(",").map(d=>d.trim())||[];s.push({module:c,line:o+1,names:u});}});}return s}extractExports(e,t){let s=[],n=e.split(`
630
- `);if(["typescript","javascript"].includes(t)){let r=/^export\s+(?:(default)\s+)?(?:(class|function|const|let|var|interface|type|enum)\s+)?(\w+)?/;n.forEach((i,o)=>{let l=i.match(r);if(l){let c=l[2],u=l[3]||(l[1]?"default":"");u&&s.push({name:u,line:o+1,kind:c});}});}return s}async getFileIndex(e){if(this.fileIndexCache.has(e))return this.fileIndexCache.get(e);let t=this.getFileIndexPath(e);try{let s=await ce.readFile(t,"utf-8"),n=JSON.parse(s);return this.fileIndexCache.set(e,n),n}catch{return null}}async saveFileIndex(e){let t=this.getFileIndexPath(e.path);await Un(se.dirname(t)),await ce.writeFile(t,JSON.stringify(e,null,2));}getFileIndexPath(e){let s=se.relative(this.workspacePath,e).replace(/[/\\]/g,"_").replace(/\./g,"_");return se.join(this.indexDir,"files",`${s}.json`)}async searchSymbol(e){let{query:t,kind:s,fuzzy:n=false,limit:r=20}=e,i=[],o=se.join(this.indexDir,"files");try{let l=await ce.readdir(o);for(let c of l)if(c.endsWith(".json"))try{let u=await ce.readFile(se.join(o,c),"utf-8"),d=JSON.parse(u);for(let p of d.symbols){if(s&&p.kind!==s)continue;let h=0;if(n){if(h=$a(t.toLowerCase(),p.name.toLowerCase()),h<.5)continue}else {if(!p.name.toLowerCase().includes(t.toLowerCase()))continue;h=p.name.toLowerCase()===t.toLowerCase()?1:.8;}if(i.push({symbol:p,file:d.path,score:h}),p.children)for(let g of p.children){if(s&&g.kind!==s)continue;let f=0;if(n){if(f=$a(t.toLowerCase(),g.name.toLowerCase()),f<.5)continue}else {if(!g.name.toLowerCase().includes(t.toLowerCase()))continue;f=g.name.toLowerCase()===t.toLowerCase()?1:.8;}i.push({symbol:{...g,parent:p.name},file:d.path,score:f});}}}catch{continue}}catch{}return i.sort((l,c)=>c.score-l.score).slice(0,r)}async invalidate(e){this.fileIndexCache.delete(e);let t=this.getFileIndexPath(e);try{await ce.unlink(t);}catch{}}async clear(){this.fileIndexCache.clear(),this.metadata=null;try{await ce.rm(this.indexDir,{recursive:!0,force:!0});}catch{}}async getStats(){let e=await this.loadMetadata();if(!e)return {hasIndex:false,fileCount:0,symbolCount:0,lastUpdated:null,size:0};let t=0;try{let s=se.join(this.indexDir,"files"),n=await ce.readdir(s);for(let r of n){let i=await ce.stat(se.join(s,r));t+=i.size;}}catch{}return {hasIndex:true,fileCount:e.fileCount,symbolCount:e.symbolCount,lastUpdated:new Date(e.updatedAt),size:t}}};function il(a,e){return new Mi(a,e)}var cn=null,un=null,Di=null,Ss={small:Hs,large:1e3},Bd=12e3,nb=120,Pi=20,rb=3,ib=200,ol=200;function ob(a){return (!cn||Di!==a)&&(cn=Fa(a),Di=a,un&&cn.setIndexManager(un)),cn}function cr(a){return (!un||Di!==a)&&(un=il(a),Di=a,cn&&cn.setIndexManager(un)),un}function ab(a){return process.cwd()}function Lt(a){let e=ab();return se.relative(e,a)||a}function Gd(a,e){let t=se.relative(a,e);return t===""?true:!t.startsWith("..")&&!se.isAbsolute(t)}function lb(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function al(a){let e=a||process.cwd(),s=await cr(e).getStats();return {hasIndex:s.hasIndex,fileCount:s.fileCount,symbolCount:s.symbolCount,lastUpdated:s.lastUpdated}}async function Ud(a){let e=await al(a);return e.hasIndex?`
630
+ `);if(["typescript","javascript"].includes(t)){let r=/^export\s+(?:(default)\s+)?(?:(class|function|const|let|var|interface|type|enum)\s+)?(\w+)?/;n.forEach((i,o)=>{let l=i.match(r);if(l){let c=l[2],u=l[3]||(l[1]?"default":"");u&&s.push({name:u,line:o+1,kind:c});}});}return s}async getFileIndex(e){if(this.fileIndexCache.has(e))return this.fileIndexCache.get(e);let t=this.getFileIndexPath(e);try{let s=await ce.readFile(t,"utf-8"),n=JSON.parse(s);return this.fileIndexCache.set(e,n),n}catch{return null}}async saveFileIndex(e){let t=this.getFileIndexPath(e.path);await Un(se.dirname(t)),await ce.writeFile(t,JSON.stringify(e,null,2));}getFileIndexPath(e){let s=se.relative(this.workspacePath,e).replace(/[/\\]/g,"_").replace(/\./g,"_");return se.join(this.indexDir,"files",`${s}.json`)}async searchSymbol(e){let{query:t,kind:s,fuzzy:n=false,limit:r=20}=e,i=[],o=se.join(this.indexDir,"files");try{let l=await ce.readdir(o);for(let c of l)if(c.endsWith(".json"))try{let u=await ce.readFile(se.join(o,c),"utf-8"),d=JSON.parse(u);for(let p of d.symbols){if(s&&p.kind!==s)continue;let h=0;if(n){if(h=$a(t.toLowerCase(),p.name.toLowerCase()),h<.5)continue}else {if(!p.name.toLowerCase().includes(t.toLowerCase()))continue;h=p.name.toLowerCase()===t.toLowerCase()?1:.8;}if(i.push({symbol:p,file:d.path,score:h}),p.children)for(let g of p.children){if(s&&g.kind!==s)continue;let f=0;if(n){if(f=$a(t.toLowerCase(),g.name.toLowerCase()),f<.5)continue}else {if(!g.name.toLowerCase().includes(t.toLowerCase()))continue;f=g.name.toLowerCase()===t.toLowerCase()?1:.8;}i.push({symbol:{...g,parent:p.name},file:d.path,score:f});}}}catch{continue}}catch{}return i.sort((l,c)=>c.score-l.score).slice(0,r)}async invalidate(e){this.fileIndexCache.delete(e);let t=this.getFileIndexPath(e);try{await ce.unlink(t);}catch{}}async clear(){this.fileIndexCache.clear(),this.metadata=null;try{await ce.rm(this.indexDir,{recursive:!0,force:!0});}catch{}}async getStats(){let e=await this.loadMetadata();if(!e)return {hasIndex:false,fileCount:0,symbolCount:0,lastUpdated:null,size:0};let t=0;try{let s=se.join(this.indexDir,"files"),n=await ce.readdir(s);for(let r of n){let i=await ce.stat(se.join(s,r));t+=i.size;}}catch{}return {hasIndex:true,fileCount:e.fileCount,symbolCount:e.symbolCount,lastUpdated:new Date(e.updatedAt),size:t}}};function il(a,e){return new Mi(a,e)}var cn=null,un=null,Di=null,ks={small:Hs,large:1e3},Bd=12e3,nb=120,Pi=20,rb=3,ib=200,ol=200;function ob(a){return (!cn||Di!==a)&&(cn=Fa(a),Di=a,un&&cn.setIndexManager(un)),cn}function cr(a){return (!un||Di!==a)&&(un=il(a),Di=a,cn&&cn.setIndexManager(un)),un}function ab(a){return process.cwd()}function Lt(a){let e=ab();return se.relative(e,a)||a}function Gd(a,e){let t=se.relative(a,e);return t===""?true:!t.startsWith("..")&&!se.isAbsolute(t)}function lb(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function al(a){let e=a||process.cwd(),s=await cr(e).getStats();return {hasIndex:s.hasIndex,fileCount:s.fileCount,symbolCount:s.symbolCount,lastUpdated:s.lastUpdated}}async function Ud(a){let e=await al(a);return e.hasIndex?`
631
631
  \u{1F4D6} readfile \u7B56\u7565\u63D0\u793A (\u7D22\u5F15\u5DF2\u542F\u7528, ${e.symbolCount} \u7B26\u53F7):
632
- - \u5C0F\u6587\u4EF6 (\u2264${Ss.small}\u884C): \u9ED8\u8BA4 full \u8BFB\u53D6
633
- - \u5927\u6587\u4EF6 (>${Ss.large}\u884C): \u4F18\u5148\u7528 symbol/function/class \u5B9A\u4F4D
632
+ - \u5C0F\u6587\u4EF6 (\u2264${ks.small}\u884C): \u9ED8\u8BA4 full \u8BFB\u53D6
633
+ - \u5927\u6587\u4EF6 (>${ks.large}\u884C): \u4F18\u5148\u7528 symbol/function/class \u5B9A\u4F4D
634
634
  \u2713 readfile(path="big.ts", function="handleClick") - \u7CBE\u51C6\u5B9A\u4F4D\u51FD\u6570
635
635
  \u2713 readfile(path="big.ts", class="UserService") - \u7CBE\u51C6\u5B9A\u4F4D\u7C7B
636
636
  - \u4E2D\u7B49\u6587\u4EF6: pattern \u548C symbol \u5747\u53EF\uFF0C\u6309\u9700\u9009\u62E9`:`
637
637
  \u{1F4D6} readfile \u7B56\u7565\u63D0\u793A:
638
638
  - \u7D22\u5F15\u672A\u6784\u5EFA\uFF0C\u4F7F\u7528 pattern/grep \u5B9A\u4F4D
639
- - \u5C0F\u6587\u4EF6 (\u2264${Ss.small}\u884C): \u9ED8\u8BA4 full \u8BFB\u53D6
639
+ - \u5C0F\u6587\u4EF6 (\u2264${ks.small}\u884C): \u9ED8\u8BA4 full \u8BFB\u53D6
640
640
  - \u5927\u6587\u4EF6: \u5148\u7528 pattern/list_matches \u5B9A\u4F4D\uFF0C\u518D\u7528 anchor_lines/ranges \u6279\u91CF\u8BFB\u53D6
641
- - \u{1F4A1} \u8FD0\u884C build_index() \u53EF\u4EE5\u542F\u7528\u7B26\u53F7\u5B9A\u4F4D\u529F\u80FD`}async function ll(a){let e=await al(a);await Ud(a);let s=["## readfile \u6587\u4EF6\u8BFB\u53D6\u7B56\u7565",""];return e.hasIndex?(s.push(`\u2705 \u4EE3\u7801\u7D22\u5F15\u5DF2\u542F\u7528 (${e.fileCount} \u6587\u4EF6, ${e.symbolCount} \u7B26\u53F7)`),s.push(""),s.push("### \u6309\u6587\u4EF6\u5927\u5C0F\u9009\u62E9\u7B56\u7565:"),s.push(""),s.push("| \u6587\u4EF6\u5927\u5C0F | \u63A8\u8350\u7B56\u7565 | \u793A\u4F8B |"),s.push("|---------|---------|------|"),s.push(`| \u2264${Ss.small}\u884C | full \u81EA\u52A8\u8BFB\u53D6 | \`readfile(path)\` |`),s.push(`| ${Ss.small}-${Ss.large}\u884C | \u5747\u53EF | \u6309\u9700\u9009\u62E9 |`),s.push(`| >${Ss.large}\u884C | **symbol/function** | \`readfile(path, function="xxx")\` |`)):(s.push("\u26A0\uFE0F \u4EE3\u7801\u7D22\u5F15\u672A\u6784\u5EFA"),s.push(""),s.push("\u5F53\u524D\u53EF\u7528\u7B56\u7565:"),s.push("- `start_line`: \u6309\u884C\u53F7\u8BFB\u53D6"),s.push("- `pattern`: \u6B63\u5219\u5339\u914D\u5B9A\u4F4D\uFF08\u53EF\u914D\u5408 list_matches\uFF09"),s.push("- `range_start/end`: \u8303\u56F4\u8BFB\u53D6"),s.push(""),s.push("\u{1F4A1} \u8FD0\u884C `build_index()` \u542F\u7528\u7B26\u53F7\u5B9A\u4F4D\u529F\u80FD")),s.join(`
641
+ - \u{1F4A1} \u8FD0\u884C build_index() \u53EF\u4EE5\u542F\u7528\u7B26\u53F7\u5B9A\u4F4D\u529F\u80FD`}async function ll(a){let e=await al(a);await Ud(a);let s=["## readfile \u6587\u4EF6\u8BFB\u53D6\u7B56\u7565",""];return e.hasIndex?(s.push(`\u2705 \u4EE3\u7801\u7D22\u5F15\u5DF2\u542F\u7528 (${e.fileCount} \u6587\u4EF6, ${e.symbolCount} \u7B26\u53F7)`),s.push(""),s.push("### \u6309\u6587\u4EF6\u5927\u5C0F\u9009\u62E9\u7B56\u7565:"),s.push(""),s.push("| \u6587\u4EF6\u5927\u5C0F | \u63A8\u8350\u7B56\u7565 | \u793A\u4F8B |"),s.push("|---------|---------|------|"),s.push(`| \u2264${ks.small}\u884C | full \u81EA\u52A8\u8BFB\u53D6 | \`readfile(path)\` |`),s.push(`| ${ks.small}-${ks.large}\u884C | \u5747\u53EF | \u6309\u9700\u9009\u62E9 |`),s.push(`| >${ks.large}\u884C | **symbol/function** | \`readfile(path, function="xxx")\` |`)):(s.push("\u26A0\uFE0F \u4EE3\u7801\u7D22\u5F15\u672A\u6784\u5EFA"),s.push(""),s.push("\u5F53\u524D\u53EF\u7528\u7B56\u7565:"),s.push("- `start_line`: \u6309\u884C\u53F7\u8BFB\u53D6"),s.push("- `pattern`: \u6B63\u5219\u5339\u914D\u5B9A\u4F4D\uFF08\u53EF\u914D\u5408 list_matches\uFF09"),s.push("- `range_start/end`: \u8303\u56F4\u8BFB\u53D6"),s.push(""),s.push("\u{1F4A1} \u8FD0\u884C `build_index()` \u542F\u7528\u7B26\u53F7\u5B9A\u4F4D\u529F\u80FD")),s.join(`
642
642
  `)}function cl(a){let e=()=>a||process.cwd(),t={name:"readfile",description:`\u3010\u667A\u80FD\u6587\u4EF6\u8BFB\u53D6\u3011\u7CBE\u51C6\u5B9A\u4F4D\u4EE3\u7801\u4F4D\u7F6E\uFF0C\u652F\u6301\u591A\u79CD\u5B9A\u4F4D\u65B9\u5F0F\u3002
643
643
 
644
644
  \u{1F525} \u57FA\u7840\u7528\u6CD5:
@@ -776,8 +776,8 @@ get_references(query="FeatureFlag", file_pattern="*.ts")`,parameters:{type:"obje
776
776
  \u7D22\u5F15\u5927\u5C0F: ${h}
777
777
  \u6700\u540E\u66F4\u65B0: ${u.lastUpdated?.toLocaleString()||"N/A"}
778
778
 
779
- \u{1F4A1} \u4F7F\u7528 build_index(force=true) \u53EF\u4EE5\u91CD\u5EFA\u7D22\u5F15`}}]}W();W();var Ze=null,ks=null;function Wd(a,e){return {...a,...e,PATH:a.PATH||e.PATH||"",JAVA_HOME:a.JAVA_HOME||e.JAVA_HOME||"",MAVEN_HOME:a.MAVEN_HOME||e.MAVEN_HOME||"",M2_HOME:a.M2_HOME||e.M2_HOME||"",NODE_PATH:a.NODE_PATH||e.NODE_PATH||"",GOPATH:a.GOPATH||e.GOPATH||"",CARGO_HOME:a.CARGO_HOME||e.CARGO_HOME||"",RUSTUP_HOME:a.RUSTUP_HOME||e.RUSTUP_HOME||"",PYENV_ROOT:a.PYENV_ROOT||e.PYENV_ROOT||"",CONDA_PREFIX:a.CONDA_PREFIX||e.CONDA_PREFIX||""}}function qd(a){let e={};for(let t of a.split(`
780
- `)){let s=t.indexOf("=");if(s>0){let n=t.substring(0,s),r=t.substring(s+1);e[n]=r;}}return e}async function zd(a={}){if(Ze)return;if(ks){await ks;return}let e={...process.env};if(process.platform==="win32"){Ze=e;return}let t=Vr(),s=a.maxWaitMs??(t?800:5e3),n=a.background??t,r=async i=>{try{let o=process.env.SHELL||"/bin/zsh";m.debug("SHELL","Preloading shell environment asynchronously...");let l=await execa(o,["-lc","env"],{encoding:"utf8",timeout:i,reject:!1,stdin:"ignore",stdout:"pipe",stderr:"ignore"});if(l.stdout){let c=qd(l.stdout),u=Wd(c,e);return m.debug("SHELL","Preloaded shell environment successfully",{pathLength:u.PATH?.length}),u}}catch(o){m.warn("SHELL","Failed to preload shell environment",{error:o});}return null};if(n){Ze=e,ks=(async()=>{let i=await r(s);if(i){Ze=i;return}let o=await r(5e3);o&&(Ze=o);})().finally(()=>{ks=null;});return}ks=(async()=>{Ze=await r(s)??e;})().finally(()=>{ks=null;}),await ks;}function Hd(){if(Ze)return Ze;process.env.CLI_DEBUG==="1"&&m.warn("SHELL","\u26A0\uFE0F getShellEnv() cache miss - this should not happen! Call preloadShellEnv() during init.");let a={...process.env};if(process.platform==="win32")return Ze=a,Ze;try{let e=process.env.SHELL||"/bin/zsh",t=execaSync(e,["-ilc","env"],{encoding:"utf8",timeout:5e3,reject:!1});if(t.stdout){let s=qd(t.stdout);Ze=Wd(s,a),process.env.CLI_DEBUG==="1"&&m.debug("SHELL","Loaded shell environment (sync fallback), PATH length:",{pathLength:Ze.PATH?.length});}else Ze=a;}catch(e){m.warn("SHELL","Failed to load shell environment",{error:e}),Ze=a;}return Ze}W();var ul=class extends EventEmitter{processes=new Map;nextId=1;register(e){let t={pid:e.pid,command:e.command,cwd:e.cwd,startTime:new Date,status:"running",background:e.background,processRef:e.processRef};return this.processes.set(e.pid,t),m.debug("PROCESS_MGR",`Registered process PID=${e.pid}`,{command:e.command.substring(0,50),background:e.background}),this.emit("process:start",t),t}markCompleted(e,t){let s=this.processes.get(e);s&&(s.status=t===0?"completed":"failed",s.exitCode=t,s.endTime=new Date,m.debug("PROCESS_MGR",`Process completed PID=${e}`,{exitCode:t,duration:s.endTime.getTime()-s.startTime.getTime()}),this.emit("process:exit",s),setTimeout(()=>{this.processes.delete(e);},1e3));}unregister(e){this.processes.get(e)&&(this.processes.delete(e),m.debug("PROCESS_MGR",`Unregistered process PID=${e}`));}getRunning(){return Array.from(this.processes.values()).filter(e=>e.status==="running")}getBackgroundRunning(){return Array.from(this.processes.values()).filter(e=>e.status==="running"&&e.background)}getAll(){return Array.from(this.processes.values())}getRecent(e=10){return Array.from(this.processes.values()).sort((t,s)=>s.startTime.getTime()-t.startTime.getTime()).slice(0,e)}get(e){return this.processes.get(e)}isAlive(e){try{return process.kill(e,0),!0}catch{return false}}refreshStatus(){for(let[e,t]of this.processes.entries())t.status==="running"&&(this.isAlive(e)||(t.status="completed",t.endTime=new Date,m.debug("PROCESS_MGR",`Process ${e} is no longer alive, marked as completed`)));}kill(e,t="SIGTERM",s=false){let n=this.processes.get(e);try{return process.kill(e,t),m.info("PROCESS_MGR",`Sent ${t} to process PID=${e}`),s&&setTimeout(()=>{try{this.isAlive(e)&&(process.kill(e,"SIGKILL"),m.info("PROCESS_MGR",`Force killed process PID=${e}`));}catch{}},2e3),n&&(n.status="killed",n.endTime=new Date,this.emit("process:kill",n)),!0}catch(r){return r.code==="ESRCH"?(n&&(n.status="completed",n.endTime=new Date),m.debug("PROCESS_MGR",`Process ${e} not found (already exited)`),false):(m.error("PROCESS_MGR",`Failed to kill process ${e}`,{error:r.message}),false)}}killProcessGroup(e,t="SIGTERM"){try{process.kill(-e,t),m.info("PROCESS_MGR",`Sent ${t} to process group PID=${e}`);let s=this.processes.get(e);return s&&(s.status="killed",s.endTime=new Date,this.emit("process:kill",s)),!0}catch{return this.kill(e,t)}}killAll(e=false){let t=this.getRunning(),s=0,n=0;for(let r of t)(r.background?this.killProcessGroup(r.pid):this.kill(r.pid,"SIGTERM",e))?s++:n++;return m.info("PROCESS_MGR",`Killed ${s} processes, ${n} failed`),{killed:s,failed:n}}cleanup(e=20){let s=this.getAll().filter(r=>r.status!=="running");s.sort((r,i)=>{let o=r.endTime?.getTime()||0;return (i.endTime?.getTime()||0)-o});let n=0;for(let r=e;r<s.length;r++)this.processes.delete(s[r].pid),n++;return n}getStats(){let e=this.getAll();return {total:e.length,running:e.filter(t=>t.status==="running").length,backgroundRunning:e.filter(t=>t.status==="running"&&t.background).length,completed:e.filter(t=>t.status==="completed").length,failed:e.filter(t=>t.status==="failed").length,killed:e.filter(t=>t.status==="killed").length}}formatProcess(e){let t=e.endTime?e.endTime.getTime()-e.startTime.getTime():Date.now()-e.startTime.getTime(),s=this.formatDuration(t),n=this.getStatusIcon(e.status),r=e.background?" [BG]":"",i=e.command.length>40?e.command.substring(0,37)+"...":e.command;return `${n} PID ${e.pid}${r} | ${i} | ${s}`}getStatusIcon(e){switch(e){case "running":return "\u{1F7E2}";case "completed":return "\u2705";case "failed":return "\u274C";case "killed":return "\u{1F6D1}";default:return "\u26AA"}}formatDuration(e){return e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:e<36e5?`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`:`${Math.floor(e/36e5)}h ${Math.floor(e%36e5/6e4)}m`}reset(){this.processes.clear(),m.debug("PROCESS_MGR","Process manager reset");}},Jd=new ul;var Li={terminal:true,editor:false,debug:true,trace:true},dl={...Li,editor:true};W();function pb(){let a=process.platform;if(a==="darwin")return se__default.join(Dn__default.homedir(),"Library","Application Support","Neox");if(a==="win32")return se__default.join(process.env.APPDATA||se__default.join(Dn__default.homedir(),"AppData","Roaming"),"Neox");{let e=process.env.XDG_CONFIG_HOME||se__default.join(Dn__default.homedir(),".config");return se__default.join(e,"neox")}}var Vd=pb(),ml=se__default.join(Vd,"token-usage.json"),Kd=3e3,gl=class{stats=null;directoriesReady;saveDebounceTimer=null;constructor(){this.directoriesReady=this.ensureDirectories();}async ensureDirectories(){await ce__default.mkdir(Vd,{recursive:true});}async ensureReady(){try{await this.directoriesReady;}catch(e){throw m.error("TokenUsage","Failed to initialize directories",{error:e.message}),e}}generateId(){return `${Date.now()}-${Math.random().toString(36).slice(2,9)}`}async load(){if(await this.ensureReady(),this.stats)return this.stats;try{let e=await ce__default.readFile(ml,"utf-8");return this.stats=JSON.parse(e),m.info("TokenUsage","Loaded usage statistics"),this.stats}catch{return m.info("TokenUsage","No existing usage file, creating new"),this.stats={version:"1.0.0",lastUpdated:Date.now(),providers:{},records:[]},this.stats}}async save(){this.saveDebounceTimer&&clearTimeout(this.saveDebounceTimer),this.saveDebounceTimer=setTimeout(async()=>{await this.saveImmediate();},1e3);}async saveImmediate(){if(await this.ensureReady(),!!this.stats)try{this.stats.lastUpdated=Date.now();let e=`${ml}.${Date.now()}.tmp`;await ce__default.writeFile(e,JSON.stringify(this.stats,null,2),"utf-8"),await ce__default.rename(e,ml),m.info("TokenUsage","Saved usage statistics");}catch(e){m.error("TokenUsage","Failed to save",{error:e.message});}}async recordUsage(e){let t=await this.load(),s={id:this.generateId(),...e};t.records.push(s),t.records.length>Kd&&(t.records=t.records.slice(-Kd)),t.providers[e.provider]||(t.providers[e.provider]={provider:e.provider,totalRequests:0,successRequests:0,failedRequests:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCachedTokens:0,totalOpenaiCachedTokens:0,totalAnthropicCacheReadTokens:0,totalAnthropicCacheCreationTokens:0,totalAnthropicCacheCreation5mTokens:0,totalAnthropicCacheCreation1hTokens:0,avgDuration:0,lastRequestTime:0,models:{}});let n=t.providers[e.provider];n.totalRequests++,e.success?n.successRequests++:n.failedRequests++,n.totalInputTokens+=e.inputTokens,n.totalOutputTokens+=e.outputTokens,n.totalTokens+=e.totalTokens,n.totalCachedTokens+=e.cachedTokens||0,n.totalOpenaiCachedTokens+=e.openaiCachedTokens||0,n.totalAnthropicCacheReadTokens+=e.anthropicCacheReadTokens||0,n.totalAnthropicCacheCreationTokens+=e.anthropicCacheCreationTokens||0,n.totalAnthropicCacheCreation5mTokens+=e.anthropicCacheCreation5mTokens||0,n.totalAnthropicCacheCreation1hTokens+=e.anthropicCacheCreation1hTokens||0,n.lastRequestTime=e.timestamp;let r=n.avgDuration*(n.totalRequests-1)+e.duration;n.avgDuration=Math.round(r/n.totalRequests),n.models[e.model]||(n.models[e.model]={requests:0,inputTokens:0,outputTokens:0,totalTokens:0,cachedTokens:0});let i=n.models[e.model];i.requests++,i.inputTokens+=e.inputTokens,i.outputTokens+=e.outputTokens,i.totalTokens+=e.totalTokens,i.cachedTokens+=e.cachedTokens||0,await this.save();}async getProviderStats(){let e=await this.load();return Object.values(e.providers).sort((t,s)=>s.lastRequestTime-t.lastRequestTime)}async getProviderRecords(e,t=100){return (await this.load()).records.filter(n=>n.provider===e).slice(-t).reverse()}async getRecentRecords(e=50){return (await this.load()).records.slice(-e).reverse()}async getSummary(){let e=await this.load(),t=Object.values(e.providers),s=t.reduce((o,l)=>o+l.totalInputTokens,0),n=t.reduce((o,l)=>o+l.totalCachedTokens,0),r=t.reduce((o,l)=>o+l.totalOpenaiCachedTokens,0),i=t.reduce((o,l)=>o+l.totalAnthropicCacheReadTokens,0);return {totalRequests:t.reduce((o,l)=>o+l.totalRequests,0),totalTokens:t.reduce((o,l)=>o+l.totalTokens,0),totalInputTokens:s,totalOutputTokens:t.reduce((o,l)=>o+l.totalOutputTokens,0),totalCachedTokens:n,totalOpenaiCachedTokens:r,totalAnthropicCacheReadTokens:i,totalAnthropicCacheCreationTokens:t.reduce((o,l)=>o+l.totalAnthropicCacheCreationTokens,0),cacheHitRate:s>0?n/s:0,providerCount:t.length,lastRequestTime:Math.max(...t.map(o=>o.lastRequestTime),0)}}async clearAll(){this.stats={version:"1.0.0",lastUpdated:Date.now(),providers:{},records:[]},await this.saveImmediate(),m.info("TokenUsage","Cleared all usage statistics");}async clearProvider(e){let t=await this.load();delete t.providers[e],t.records=t.records.filter(s=>s.provider!==e),await this.saveImmediate(),m.info("TokenUsage","Cleared usage for provider",{provider:e});}},Yd=new gl;function xs(){return {logger:m,shellEnv:{preloadShellEnv:zd,getShellEnv:Hd},processManager:Jd,capabilities:Li,tokenUsage:Yd}}var $i={name:"update_plan",description:`Updates the task plan.
779
+ \u{1F4A1} \u4F7F\u7528 build_index(force=true) \u53EF\u4EE5\u91CD\u5EFA\u7D22\u5F15`}}]}W();W();var Ze=null,xs=null;function Wd(a,e){return {...a,...e,PATH:a.PATH||e.PATH||"",JAVA_HOME:a.JAVA_HOME||e.JAVA_HOME||"",MAVEN_HOME:a.MAVEN_HOME||e.MAVEN_HOME||"",M2_HOME:a.M2_HOME||e.M2_HOME||"",NODE_PATH:a.NODE_PATH||e.NODE_PATH||"",GOPATH:a.GOPATH||e.GOPATH||"",CARGO_HOME:a.CARGO_HOME||e.CARGO_HOME||"",RUSTUP_HOME:a.RUSTUP_HOME||e.RUSTUP_HOME||"",PYENV_ROOT:a.PYENV_ROOT||e.PYENV_ROOT||"",CONDA_PREFIX:a.CONDA_PREFIX||e.CONDA_PREFIX||""}}function qd(a){let e={};for(let t of a.split(`
780
+ `)){let s=t.indexOf("=");if(s>0){let n=t.substring(0,s),r=t.substring(s+1);e[n]=r;}}return e}async function zd(a={}){if(Ze)return;if(xs){await xs;return}let e={...process.env};if(process.platform==="win32"){Ze=e;return}let t=Vr(),s=a.maxWaitMs??(t?800:5e3),n=a.background??t,r=async i=>{try{let o=process.env.SHELL||"/bin/zsh";m.debug("SHELL","Preloading shell environment asynchronously...");let l=await execa(o,["-lc","env"],{encoding:"utf8",timeout:i,reject:!1,stdin:"ignore",stdout:"pipe",stderr:"ignore"});if(l.stdout){let c=qd(l.stdout),u=Wd(c,e);return m.debug("SHELL","Preloaded shell environment successfully",{pathLength:u.PATH?.length}),u}}catch(o){m.warn("SHELL","Failed to preload shell environment",{error:o});}return null};if(n){Ze=e,xs=(async()=>{let i=await r(s);if(i){Ze=i;return}let o=await r(5e3);o&&(Ze=o);})().finally(()=>{xs=null;});return}xs=(async()=>{Ze=await r(s)??e;})().finally(()=>{xs=null;}),await xs;}function Hd(){if(Ze)return Ze;process.env.CLI_DEBUG==="1"&&m.warn("SHELL","\u26A0\uFE0F getShellEnv() cache miss - this should not happen! Call preloadShellEnv() during init.");let a={...process.env};if(process.platform==="win32")return Ze=a,Ze;try{let e=process.env.SHELL||"/bin/zsh",t=execaSync(e,["-ilc","env"],{encoding:"utf8",timeout:5e3,reject:!1});if(t.stdout){let s=qd(t.stdout);Ze=Wd(s,a),process.env.CLI_DEBUG==="1"&&m.debug("SHELL","Loaded shell environment (sync fallback), PATH length:",{pathLength:Ze.PATH?.length});}else Ze=a;}catch(e){m.warn("SHELL","Failed to load shell environment",{error:e}),Ze=a;}return Ze}W();var ul=class extends EventEmitter{processes=new Map;nextId=1;register(e){let t={pid:e.pid,command:e.command,cwd:e.cwd,startTime:new Date,status:"running",background:e.background,processRef:e.processRef};return this.processes.set(e.pid,t),m.debug("PROCESS_MGR",`Registered process PID=${e.pid}`,{command:e.command.substring(0,50),background:e.background}),this.emit("process:start",t),t}markCompleted(e,t){let s=this.processes.get(e);s&&(s.status=t===0?"completed":"failed",s.exitCode=t,s.endTime=new Date,m.debug("PROCESS_MGR",`Process completed PID=${e}`,{exitCode:t,duration:s.endTime.getTime()-s.startTime.getTime()}),this.emit("process:exit",s),setTimeout(()=>{this.processes.delete(e);},1e3));}unregister(e){this.processes.get(e)&&(this.processes.delete(e),m.debug("PROCESS_MGR",`Unregistered process PID=${e}`));}getRunning(){return Array.from(this.processes.values()).filter(e=>e.status==="running")}getBackgroundRunning(){return Array.from(this.processes.values()).filter(e=>e.status==="running"&&e.background)}getAll(){return Array.from(this.processes.values())}getRecent(e=10){return Array.from(this.processes.values()).sort((t,s)=>s.startTime.getTime()-t.startTime.getTime()).slice(0,e)}get(e){return this.processes.get(e)}isAlive(e){try{return process.kill(e,0),!0}catch{return false}}refreshStatus(){for(let[e,t]of this.processes.entries())t.status==="running"&&(this.isAlive(e)||(t.status="completed",t.endTime=new Date,m.debug("PROCESS_MGR",`Process ${e} is no longer alive, marked as completed`)));}kill(e,t="SIGTERM",s=false){let n=this.processes.get(e);try{return process.kill(e,t),m.info("PROCESS_MGR",`Sent ${t} to process PID=${e}`),s&&setTimeout(()=>{try{this.isAlive(e)&&(process.kill(e,"SIGKILL"),m.info("PROCESS_MGR",`Force killed process PID=${e}`));}catch{}},2e3),n&&(n.status="killed",n.endTime=new Date,this.emit("process:kill",n)),!0}catch(r){return r.code==="ESRCH"?(n&&(n.status="completed",n.endTime=new Date),m.debug("PROCESS_MGR",`Process ${e} not found (already exited)`),false):(m.error("PROCESS_MGR",`Failed to kill process ${e}`,{error:r.message}),false)}}killProcessGroup(e,t="SIGTERM"){try{process.kill(-e,t),m.info("PROCESS_MGR",`Sent ${t} to process group PID=${e}`);let s=this.processes.get(e);return s&&(s.status="killed",s.endTime=new Date,this.emit("process:kill",s)),!0}catch{return this.kill(e,t)}}killAll(e=false){let t=this.getRunning(),s=0,n=0;for(let r of t)(r.background?this.killProcessGroup(r.pid):this.kill(r.pid,"SIGTERM",e))?s++:n++;return m.info("PROCESS_MGR",`Killed ${s} processes, ${n} failed`),{killed:s,failed:n}}cleanup(e=20){let s=this.getAll().filter(r=>r.status!=="running");s.sort((r,i)=>{let o=r.endTime?.getTime()||0;return (i.endTime?.getTime()||0)-o});let n=0;for(let r=e;r<s.length;r++)this.processes.delete(s[r].pid),n++;return n}getStats(){let e=this.getAll();return {total:e.length,running:e.filter(t=>t.status==="running").length,backgroundRunning:e.filter(t=>t.status==="running"&&t.background).length,completed:e.filter(t=>t.status==="completed").length,failed:e.filter(t=>t.status==="failed").length,killed:e.filter(t=>t.status==="killed").length}}formatProcess(e){let t=e.endTime?e.endTime.getTime()-e.startTime.getTime():Date.now()-e.startTime.getTime(),s=this.formatDuration(t),n=this.getStatusIcon(e.status),r=e.background?" [BG]":"",i=e.command.length>40?e.command.substring(0,37)+"...":e.command;return `${n} PID ${e.pid}${r} | ${i} | ${s}`}getStatusIcon(e){switch(e){case "running":return "\u{1F7E2}";case "completed":return "\u2705";case "failed":return "\u274C";case "killed":return "\u{1F6D1}";default:return "\u26AA"}}formatDuration(e){return e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:e<36e5?`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`:`${Math.floor(e/36e5)}h ${Math.floor(e%36e5/6e4)}m`}reset(){this.processes.clear(),m.debug("PROCESS_MGR","Process manager reset");}},Jd=new ul;var Li={terminal:true,editor:false,debug:true,trace:true},dl={...Li,editor:true};W();function pb(){let a=process.platform;if(a==="darwin")return se__default.join(Dn__default.homedir(),"Library","Application Support","Neox");if(a==="win32")return se__default.join(process.env.APPDATA||se__default.join(Dn__default.homedir(),"AppData","Roaming"),"Neox");{let e=process.env.XDG_CONFIG_HOME||se__default.join(Dn__default.homedir(),".config");return se__default.join(e,"neox")}}var Vd=pb(),ml=se__default.join(Vd,"token-usage.json"),Kd=3e3,gl=class{stats=null;directoriesReady;saveDebounceTimer=null;constructor(){this.directoriesReady=this.ensureDirectories();}async ensureDirectories(){await ce__default.mkdir(Vd,{recursive:true});}async ensureReady(){try{await this.directoriesReady;}catch(e){throw m.error("TokenUsage","Failed to initialize directories",{error:e.message}),e}}generateId(){return `${Date.now()}-${Math.random().toString(36).slice(2,9)}`}async load(){if(await this.ensureReady(),this.stats)return this.stats;try{let e=await ce__default.readFile(ml,"utf-8");return this.stats=JSON.parse(e),m.info("TokenUsage","Loaded usage statistics"),this.stats}catch{return m.info("TokenUsage","No existing usage file, creating new"),this.stats={version:"1.0.0",lastUpdated:Date.now(),providers:{},records:[]},this.stats}}async save(){this.saveDebounceTimer&&clearTimeout(this.saveDebounceTimer),this.saveDebounceTimer=setTimeout(async()=>{await this.saveImmediate();},1e3);}async saveImmediate(){if(await this.ensureReady(),!!this.stats)try{this.stats.lastUpdated=Date.now();let e=`${ml}.${Date.now()}.tmp`;await ce__default.writeFile(e,JSON.stringify(this.stats,null,2),"utf-8"),await ce__default.rename(e,ml),m.info("TokenUsage","Saved usage statistics");}catch(e){m.error("TokenUsage","Failed to save",{error:e.message});}}async recordUsage(e){let t=await this.load(),s={id:this.generateId(),...e};t.records.push(s),t.records.length>Kd&&(t.records=t.records.slice(-Kd)),t.providers[e.provider]||(t.providers[e.provider]={provider:e.provider,totalRequests:0,successRequests:0,failedRequests:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCachedTokens:0,totalOpenaiCachedTokens:0,totalAnthropicCacheReadTokens:0,totalAnthropicCacheCreationTokens:0,totalAnthropicCacheCreation5mTokens:0,totalAnthropicCacheCreation1hTokens:0,avgDuration:0,lastRequestTime:0,models:{}});let n=t.providers[e.provider];n.totalRequests++,e.success?n.successRequests++:n.failedRequests++,n.totalInputTokens+=e.inputTokens,n.totalOutputTokens+=e.outputTokens,n.totalTokens+=e.totalTokens,n.totalCachedTokens+=e.cachedTokens||0,n.totalOpenaiCachedTokens+=e.openaiCachedTokens||0,n.totalAnthropicCacheReadTokens+=e.anthropicCacheReadTokens||0,n.totalAnthropicCacheCreationTokens+=e.anthropicCacheCreationTokens||0,n.totalAnthropicCacheCreation5mTokens+=e.anthropicCacheCreation5mTokens||0,n.totalAnthropicCacheCreation1hTokens+=e.anthropicCacheCreation1hTokens||0,n.lastRequestTime=e.timestamp;let r=n.avgDuration*(n.totalRequests-1)+e.duration;n.avgDuration=Math.round(r/n.totalRequests),n.models[e.model]||(n.models[e.model]={requests:0,inputTokens:0,outputTokens:0,totalTokens:0,cachedTokens:0});let i=n.models[e.model];i.requests++,i.inputTokens+=e.inputTokens,i.outputTokens+=e.outputTokens,i.totalTokens+=e.totalTokens,i.cachedTokens+=e.cachedTokens||0,await this.save();}async getProviderStats(){let e=await this.load();return Object.values(e.providers).sort((t,s)=>s.lastRequestTime-t.lastRequestTime)}async getProviderRecords(e,t=100){return (await this.load()).records.filter(n=>n.provider===e).slice(-t).reverse()}async getRecentRecords(e=50){return (await this.load()).records.slice(-e).reverse()}async getSummary(){let e=await this.load(),t=Object.values(e.providers),s=t.reduce((o,l)=>o+l.totalInputTokens,0),n=t.reduce((o,l)=>o+l.totalCachedTokens,0),r=t.reduce((o,l)=>o+l.totalOpenaiCachedTokens,0),i=t.reduce((o,l)=>o+l.totalAnthropicCacheReadTokens,0);return {totalRequests:t.reduce((o,l)=>o+l.totalRequests,0),totalTokens:t.reduce((o,l)=>o+l.totalTokens,0),totalInputTokens:s,totalOutputTokens:t.reduce((o,l)=>o+l.totalOutputTokens,0),totalCachedTokens:n,totalOpenaiCachedTokens:r,totalAnthropicCacheReadTokens:i,totalAnthropicCacheCreationTokens:t.reduce((o,l)=>o+l.totalAnthropicCacheCreationTokens,0),cacheHitRate:s>0?n/s:0,providerCount:t.length,lastRequestTime:Math.max(...t.map(o=>o.lastRequestTime),0)}}async clearAll(){this.stats={version:"1.0.0",lastUpdated:Date.now(),providers:{},records:[]},await this.saveImmediate(),m.info("TokenUsage","Cleared all usage statistics");}async clearProvider(e){let t=await this.load();delete t.providers[e],t.records=t.records.filter(s=>s.provider!==e),await this.saveImmediate(),m.info("TokenUsage","Cleared usage for provider",{provider:e});}},Yd=new gl;function Ts(){return {logger:m,shellEnv:{preloadShellEnv:zd,getShellEnv:Hd},processManager:Jd,capabilities:Li,tokenUsage:Yd}}var $i={name:"update_plan",description:`Updates the task plan.
781
781
 
782
782
  Provide an optional explanation and a list of plan items, each with a step and status.
783
783
  At most one step can be in_progress at a time.
@@ -821,14 +821,14 @@ ${n}
821
821
  AI: [\u6280\u80FD\u6267\u884C\u7ED3\u679C]
822
822
  \`\`\`
823
823
  `;Me.mkdirSync(c,{recursive:!0}),Me.writeFileSync(se.join(c,"SKILL.md"),u,"utf-8");let d=await this.loader.loadSkill(c,t,i);return this.register(d),{success:!0,path:c}}catch(t){return {success:false,error:t instanceof Error?t.message:String(t)}}}async deleteSkill(e){try{let t=this.find(e);if(!t)return {success:!1,error:`Skill '${e}' not found`};if(t.source==="builtin")return {success:!1,error:"Cannot delete built-in skills"};let s=se.dirname(t.path);return Me.rmSync(s,{recursive:!0,force:!0}),this.unregister(e),{success:!0}}catch(t){return {success:false,error:t instanceof Error?t.message:String(t)}}}generateSkillId(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32)}},ht=new fl;function yb(a){let e={named:{},positional:[],raw:a};if(!a.trim())return e;let t=[],s="",n=false,r="";for(let i of a)(i==='"'||i==="'")&&!n?(n=true,r=i):i===r&&n?(n=false,r=""):i===" "&&!n?(s.trim()&&t.push(s.trim()),s=""):s+=i;s.trim()&&t.push(s.trim());for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith("--")){let l=o.indexOf("=");if(l>0){let c=o.slice(2,l),u=o.slice(l+1);e.named[c]=u;}else {let c=o.slice(2),u=t[i+1];u&&!u.startsWith("-")?(e.named[c]=u,i++):e.named[c]="true";}}else if(o.startsWith("-")&&o.length===2){let l=o.slice(1),c=t[i+1];c&&!c.startsWith("-")?(e.named[l]=c,i++):e.named[l]="true";}else e.positional.push(o);}return e}var Fi=class{constructor(e){this.registry=e;}async execute(e,t,s){let n=this.registry.find(e);if(!n)return {success:false,error:`Skill not found: ${e}`};try{let r=yb(t);return {success:!0,output:this.buildPrompt(n,r,s)}}catch(r){return {success:false,error:r instanceof Error?r.message:String(r)}}}buildPrompt(e,t,s){let n=[];if(n.push(`# Skill: ${e.metadata.name}`),n.push(""),t.raw&&(n.push("## User Arguments"),n.push(`Raw: ${t.raw}`),Object.keys(t.named).length>0&&n.push(`Named: ${JSON.stringify(t.named)}`),t.positional.length>0&&n.push(`Positional: ${t.positional.join(", ")}`),n.push("")),n.push("## Context"),n.push(`Working Directory: ${s.workDir}`),n.push(""),n.push(e.content),e.supportFiles&&e.supportFiles.size>0){n.push(""),n.push("## Support Files");for(let[r,i]of Array.from(e.supportFiles.entries()))n.push(`### ${r}`),n.push("```"),n.push(i),n.push("```");}return n.join(`
824
- `)}getAllowedTools(e){return e.metadata.neox?.allowedTools}getRequiredTools(e){return e.metadata.neox?.requiredTools}getDangerLevel(e){return e.metadata.neox?.dangerLevel??"safe"}};var bb=new Set(["readfile","search","search_files","list_directory","show_tree","analyze_code","search_symbol","get_definitions","get_references","git_status","git_diff","git_blame","git_branch_list"]);function ji(a){if(a.parallelSafety==="safe"||a.parallelSafety==="unsafe")return a.parallelSafety;let e=a.permission?.category;return e==="read"?"safe":e==="write"||e==="execute"||e==="system"?"unsafe":bb.has(a.name)?"safe":"unsafe"}function tp(a,e){let t={terminal:e?.terminal===true,editor:e?.editor===true,debug:e?.debug===true,trace:e?.trace===true},s=new Set,n=new Set;for(let r of a)s.add(r.name),ji(r)==="safe"&&n.add(r.name);return {capabilities:t,enabledTools:s,parallelSafeTools:n}}function sp(a){return a.map(e=>({...e,parallelSafety:ji(e)}))}var pp="NEOX_WORKDIR",Sb="NEOX_WORKER",kb=xs(),Ue=kb,we=Ue.logger;function mp(a){Ue=a,we=a.logger;}var pn=null;var yl=new Map,xb=300*1e3;function Tb(a,e){return e?a.filter(t=>!t.capabilities||t.capabilities.length===0?true:t.capabilities.every(s=>e[s]===true)):a}async function _b(a){await(a??Ue).shellEnv.preloadShellEnv();}function Rb(){let a=process.env.NEOX_WORKER_ENTRY;if(a&&Me__default.existsSync(a))return a;let e=process.argv[1];if(e&&e.endsWith(".js")&&Me__default.existsSync(e))return e;let t=se__default.resolve(process.cwd(),"dist","cli","main.js");return Me__default.existsSync(t)?t:null}async function Ab(a,e,t,s){if(process.env.NEOX_SHELL_WORKER_DISABLED==="1")return null;let n=Rb();return n?new Promise(r=>{let i=fork(n,[],{env:{...process.env,[Sb]:"execute_shell"},stdio:["ignore","ignore","ignore","ipc"]}),o=false,l=Number(process.env.NEOX_SHELL_WORKER_WATCHDOG_MS)||6e4,c=setTimeout(()=>{we.warn("SHELL_WORKER",`execute_shell running > ${l}ms`,{command:a});},l),u=()=>{clearTimeout(c),s&&s.removeEventListener("abort",p),i.removeAllListeners();},d=h=>{o||(o=true,u(),r(h));},p=()=>{i.connected&&i.send({type:"abort"}),setTimeout(()=>{if(!o){try{i.kill("SIGTERM");}catch{}d({success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
824
+ `)}getAllowedTools(e){return e.metadata.neox?.allowedTools}getRequiredTools(e){return e.metadata.neox?.requiredTools}getDangerLevel(e){return e.metadata.neox?.dangerLevel??"safe"}};var bb=new Set(["readfile","search","search_files","list_directory","show_tree","analyze_code","search_symbol","get_definitions","get_references","git_status","git_diff","git_blame","git_branch_list"]);function ji(a){if(a.parallelSafety==="safe"||a.parallelSafety==="unsafe")return a.parallelSafety;let e=a.permission?.category;return e==="read"?"safe":e==="write"||e==="execute"||e==="system"?"unsafe":bb.has(a.name)?"safe":"unsafe"}function tp(a,e){let t={terminal:e?.terminal===true,editor:e?.editor===true,debug:e?.debug===true,trace:e?.trace===true},s=new Set,n=new Set;for(let r of a)s.add(r.name),ji(r)==="safe"&&n.add(r.name);return {capabilities:t,enabledTools:s,parallelSafeTools:n}}function sp(a){return a.map(e=>({...e,parallelSafety:ji(e)}))}var pp="NEOX_WORKDIR",Sb="NEOX_WORKER",kb=Ts(),Ue=kb,we=Ue.logger;function mp(a){Ue=a,we=a.logger;}var pn=null;var yl=new Map,xb=300*1e3;function Tb(a,e){return e?a.filter(t=>!t.capabilities||t.capabilities.length===0?true:t.capabilities.every(s=>e[s]===true)):a}async function _b(a){await(a??Ue).shellEnv.preloadShellEnv();}function Rb(){let a=process.env.NEOX_WORKER_ENTRY;if(a&&Me__default.existsSync(a))return a;let e=process.argv[1];if(e&&e.endsWith(".js")&&Me__default.existsSync(e))return e;let t=se__default.resolve(process.cwd(),"dist","cli","main.js");return Me__default.existsSync(t)?t:null}async function Ab(a,e,t,s){if(process.env.NEOX_SHELL_WORKER_DISABLED==="1")return null;let n=Rb();return n?new Promise(r=>{let i=fork(n,[],{env:{...process.env,[Sb]:"execute_shell"},stdio:["ignore","ignore","ignore","ipc"]}),o=false,l=Number(process.env.NEOX_SHELL_WORKER_WATCHDOG_MS)||6e4,c=setTimeout(()=>{we.warn("SHELL_WORKER",`execute_shell running > ${l}ms`,{command:a});},l),u=()=>{clearTimeout(c),s&&s.removeEventListener("abort",p),i.removeAllListeners();},d=h=>{o||(o=true,u(),r(h));},p=()=>{i.connected&&i.send({type:"abort"}),setTimeout(()=>{if(!o){try{i.kill("SIGTERM");}catch{}d({success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
825
825
  \u25B8 \u5DE5\u4F5C\u76EE\u5F55: ${t}
826
826
  \u25B8 \u6267\u884C\u547D\u4EE4: ${a}
827
827
  \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
828
828
 
829
829
  \u26A0 \u547D\u4EE4\u88AB\u7528\u6237\u4E2D\u65AD
830
830
  \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501`,background:false});}},500),setTimeout(()=>{if(!o)try{i.kill("SIGKILL");}catch{}},2e3);};s&&(s.aborted?p():s.addEventListener("abort",p,{once:true})),i.on("message",h=>{if(!(!h||typeof h!="object")){if(h.type==="background_exit"){typeof h.pid=="number"&&(Ue.processManager.markCompleted(h.pid,h.exitCode??0),pn?.onUpdateByPid?.(h.pid,{status:(h.exitCode??0)===0?"done":"error",exitCode:h.exitCode??0}));return}h.type==="result"&&d({success:!!h.success,output:String(h.output??""),background:!!h.background,pid:typeof h.pid=="number"?h.pid:void 0,exitCode:typeof h.exitCode=="number"?h.exitCode:void 0});}}),i.on("exit",h=>{o||(we.warn("SHELL_WORKER","Worker exited before result",{code:h,command:a}),d(null));}),i.send({type:"execute_shell",payload:{command:a,background:e,workspaceRoot:t}});}):(we.warn("SHELL_WORKER","Worker entry not found, fallback to inline execution"),null)}function rp(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function st(){let a=process.env[pp];return a&&a.trim()?se__default.resolve(a):process.cwd()}function We(a){let e=st();if(!a||a.trim()===""||a.trim()===".")return e;let t=a.trim();if(t.startsWith("~/"))return se__default.resolve(se__default.join(Dn__default.homedir(),t.slice(2)));let s=se__default.isAbsolute(t),n=process.platform!=="win32"&&t.startsWith(`Users${se__default.sep}`);if(s||n){let l=!s&&n?se__default.join(se__default.sep,t):t;return se__default.resolve(l)}t=t.replace(/^[.\\/]+/,"");let r=t.split(/[\\/]+/).filter(Boolean),i=se__default.basename(e);r.length>0&&r[0]===i&&r.shift();let o=se__default.join(e,...r);return se__default.resolve(o)}function Oe(a){let e=st(),t=se__default.relative(e,a);return t&&!t.startsWith("..")&&!se__default.isAbsolute(t)?t:a}var ip=12e3,op=4e3,ap=1e6;function zt(a){let e=st(),t=se__default.relative(e,a);return t===""?true:!t.startsWith("..")&&!se__default.isAbsolute(t)}function Bi(a,e){return a.length<=e?{text:a,truncated:false}:{text:a.slice(0,e)+`
831
- ... (truncated)`,truncated:true}}async function qe(a,e,t,s){let n=Date.now();return new Promise((r,i)=>{let o=spawn(a,e,{cwd:t,env:{...Ue.shellEnv.getShellEnv(),TERM:"dumb"},stdio:["ignore","pipe","pipe"],detached:false}),l="",c="",u=false;o.stdout?.on("data",h=>{l+=h.toString();}),o.stderr?.on("data",h=>{c+=h.toString();});let d=null;s?.timeoutMs&&(d=setTimeout(()=>{u=true,o.kill("SIGTERM"),setTimeout(()=>{o.killed||o.kill("SIGKILL");},1e3);},s.timeoutMs));let p=()=>{u=true,o.kill("SIGTERM"),setTimeout(()=>{o.killed||o.kill("SIGKILL");},1e3);};s?.signal&&(s.signal.aborted?p():s.signal.addEventListener("abort",p,{once:true})),o.on("close",h=>{d&&clearTimeout(d),s?.signal&&s.signal.removeEventListener("abort",p),r({stdout:l,stderr:c,exitCode:u?-1:h??0,durationMs:Date.now()-n});}),o.on("error",h=>{d&&clearTimeout(d),s?.signal&&s.signal.removeEventListener("abort",p),r({stdout:l,stderr:c,exitCode:-1,durationMs:Date.now()-n});});})}async function _s(a,e){try{let t=await qe("git",["rev-parse","--show-toplevel"],a,{signal:e,timeoutMs:8e3});return t.exitCode!==0||!t.stdout.trim()?{error:"Not a git repository"}:{repoRoot:t.stdout.trim()}}catch(t){return {error:t?.message||"Not a git repository"}}}function Mb(a){let e=a.trim().split(/\s+/).filter(Boolean);return {command:e[0]||"",args:e.slice(1)}}var Pb={name:"write_file",description:"Write content to a file (create or overwrite)",parameters:{type:"object",properties:{file_path:{type:"string",description:"Path to the file to write"},content:{type:"string",description:"Content to write to the file"},mode:{type:"string",description:"Write mode: overwrite or append",enum:["overwrite","append"]}},required:["file_path","content"]},async function({file_path:a,content:e,mode:t="overwrite"}){if(!a)return JSON.stringify(X("write_file","error","Missing required parameter: file_path",{error:"file_path is required",verify_hint:"Please provide the file_path parameter."}));if(e==null)return JSON.stringify(X("write_file","error","Missing required parameter: content",{error:"content is required",verify_hint:"Please provide the content parameter with the text to write."}));let s=typeof e=="string"?e:String(e);if(s.trim()==="")return JSON.stringify(X("write_file","error","Content is empty - this is likely an error",{error:"Empty content provided",verify_hint:"Please provide non-empty content to write."}));let n=We(a),r=createHash("sha256").update(s).digest("hex").substring(0,16),i=yl.get(n),o=Date.now();if(i&&i.checksum===r&&i.success&&o-i.timestamp<xb){let l=s.split(`
831
+ ... (truncated)`,truncated:true}}async function qe(a,e,t,s){let n=Date.now();return new Promise((r,i)=>{let o=spawn(a,e,{cwd:t,env:{...Ue.shellEnv.getShellEnv(),TERM:"dumb"},stdio:["ignore","pipe","pipe"],detached:false}),l="",c="",u=false;o.stdout?.on("data",h=>{l+=h.toString();}),o.stderr?.on("data",h=>{c+=h.toString();});let d=null;s?.timeoutMs&&(d=setTimeout(()=>{u=true,o.kill("SIGTERM"),setTimeout(()=>{o.killed||o.kill("SIGKILL");},1e3);},s.timeoutMs));let p=()=>{u=true,o.kill("SIGTERM"),setTimeout(()=>{o.killed||o.kill("SIGKILL");},1e3);};s?.signal&&(s.signal.aborted?p():s.signal.addEventListener("abort",p,{once:true})),o.on("close",h=>{d&&clearTimeout(d),s?.signal&&s.signal.removeEventListener("abort",p),r({stdout:l,stderr:c,exitCode:u?-1:h??0,durationMs:Date.now()-n});}),o.on("error",h=>{d&&clearTimeout(d),s?.signal&&s.signal.removeEventListener("abort",p),r({stdout:l,stderr:c,exitCode:-1,durationMs:Date.now()-n});});})}async function Rs(a,e){try{let t=await qe("git",["rev-parse","--show-toplevel"],a,{signal:e,timeoutMs:8e3});return t.exitCode!==0||!t.stdout.trim()?{error:"Not a git repository"}:{repoRoot:t.stdout.trim()}}catch(t){return {error:t?.message||"Not a git repository"}}}function Mb(a){let e=a.trim().split(/\s+/).filter(Boolean);return {command:e[0]||"",args:e.slice(1)}}var Pb={name:"write_file",description:"Write content to a file (create or overwrite)",parameters:{type:"object",properties:{file_path:{type:"string",description:"Path to the file to write"},content:{type:"string",description:"Content to write to the file"},mode:{type:"string",description:"Write mode: overwrite or append",enum:["overwrite","append"]}},required:["file_path","content"]},async function({file_path:a,content:e,mode:t="overwrite"}){if(!a)return JSON.stringify(X("write_file","error","Missing required parameter: file_path",{error:"file_path is required",verify_hint:"Please provide the file_path parameter."}));if(e==null)return JSON.stringify(X("write_file","error","Missing required parameter: content",{error:"content is required",verify_hint:"Please provide the content parameter with the text to write."}));let s=typeof e=="string"?e:String(e);if(s.trim()==="")return JSON.stringify(X("write_file","error","Content is empty - this is likely an error",{error:"Empty content provided",verify_hint:"Please provide non-empty content to write."}));let n=We(a),r=createHash("sha256").update(s).digest("hex").substring(0,16),i=yl.get(n),o=Date.now();if(i&&i.checksum===r&&i.success&&o-i.timestamp<xb){let l=s.split(`
832
832
  `).length;return JSON.stringify(X("write_file","already_done",`File already written with identical content (${l} lines, ${s.length} bytes)`,{file_path:n,checksum:r,verify_hint:`Use "readfile ${a}" to verify the content if needed.`,metadata:{lines:l,bytes:s.length}}))}try{let l=!1;try{await ce__default.access(n),l=!0;}catch{}await ce__default.mkdir(se__default.dirname(n),{recursive:!0}),t==="append"?await ce__default.appendFile(n,s,"utf-8"):await ce__default.writeFile(n,s,"utf-8"),yl.set(n,{checksum:r,timestamp:o,success:!0});let c=s.split(`
833
833
  `).length,u=l?"updated":"created";return JSON.stringify(X("write_file","success",`File ${u}: ${se__default.basename(n)} (${c} lines, ${s.length} bytes)`,{file_path:n,checksum:r,verify_hint:`Use "readfile ${a}" to verify the content.`,metadata:{action:u,lines:c,bytes:s.length}}))}catch(l){return yl.set(n,{checksum:r,timestamp:o,success:false}),JSON.stringify(X("write_file","error",`Failed to write file: ${l.message}`,{file_path:n,error:l.message,verify_hint:"Check file permissions and path validity."}))}}};function Db(a){let e=a.includes(`\r
834
834
  `)?`\r
@@ -859,7 +859,7 @@ For searching file CONTENTS, use search instead.`,parameters:{type:"object",prop
859
859
  `];if(r.length>0&&(o.push("\u5B50\u76EE\u5F55:"),r.forEach(l=>o.push(` - ${l}/`))),i.length>0){o.push(`
860
860
  \u6587\u4EF6:`);for(let l of i){let c=await ce__default.stat(se__default.join(t,l)),u=c.size<1024?`${c.size}B`:c.size<1024*1024?`${(c.size/1024).toFixed(1)}KB`:`${(c.size/(1024*1024)).toFixed(1)}MB`;o.push(` - ${l} (${u})`);}}return r.length===0&&i.length===0&&o.push("(\u7A7A\u76EE\u5F55)"),o.join(`
861
861
  `)}catch(t){return `\u2717 \u5217\u51FA\u76EE\u5F55\u5931\u8D25: ${t.message}`}}},Bb={name:"create_directory",description:"Create a new directory",parameters:{type:"object",properties:{directory:{type:"string",description:"Directory path to create"}},required:["directory"]},async function({directory:a}){if(!a)return JSON.stringify(X("create_directory","error","Missing required parameter: directory",{error:"directory path is required",verify_hint:"Please provide the directory path to create."}));let e=We(a),t=Oe(e);try{try{if((await ce__default.stat(e)).isDirectory())return JSON.stringify(X("create_directory","already_done",`Directory already exists: ${t}`,{file_path:e,verify_hint:`Use "list_directory ${a}" to view contents.`}))}catch{}return await ce__default.mkdir(e,{recursive:!0}),JSON.stringify(X("create_directory","success",`Directory created: ${t}`,{file_path:e,verify_hint:`Use "list_directory ${a}" to verify.`}))}catch(s){return JSON.stringify(X("create_directory","error",`Failed to create directory: ${s.message}`,{file_path:e,error:s.message,verify_hint:"Check path validity and permissions."}))}}},Gb={name:"delete_file",description:"Delete a file or directory (directory requires recursive=true)",parameters:{type:"object",properties:{path:{type:"string",description:"Path to the file or directory to delete"},recursive:{type:"boolean",description:"Allow deleting directories recursively (default: false)"},force:{type:"boolean",description:"Ignore missing paths (default: false)"}},required:["path"]},permission:{category:"write",allowInAskMode:false},async function({path:a,recursive:e=false,force:t=false}){if(!a)return JSON.stringify(X("delete_file","error","Missing required parameter: path",{error:"path is required"}));let s=We(a),n=Oe(s),r=st();if(!zt(s))return JSON.stringify(X("delete_file","error","Path is \u062E\u0627\u0631\u062C workspace\uFF0C\u5DF2\u62D2\u7EDD",{file_path:s,error:"Path is outside workspace",verify_hint:"Use a path within the workspace."}));if(s===r)return JSON.stringify(X("delete_file","error","Refusing to delete workspace root",{file_path:s,error:"Refusing to delete workspace root"}));try{let i=await ce__default.lstat(s).catch(()=>null);if(!i)return JSON.stringify(t?X("delete_file","already_done",`Path already removed: ${n}`,{file_path:s}):X("delete_file","error",`Path not found: ${n}`,{file_path:s,error:"Path not found"}));if(i.isDirectory()){if(!e)return JSON.stringify(X("delete_file","error",`Refusing to delete directory without recursive=true: ${n}`,{file_path:s,error:"Directory deletion requires recursive=true"}));await ce__default.rm(s,{recursive:!0,force:t});}else await ce__default.rm(s,{force:t});return JSON.stringify(X("delete_file","success",`Deleted: ${n}`,{file_path:s,verify_hint:`Use "list_directory ${se__default.dirname(n)}" to verify.`}))}catch(i){return JSON.stringify(X("delete_file","error",`Failed to delete: ${n}`,{file_path:s,error:i.message}))}}},Ub={name:"rename_file",description:"Rename or move a file/directory within the workspace",parameters:{type:"object",properties:{source_path:{type:"string",description:"Existing path to rename or move"},destination_path:{type:"string",description:"New path"},overwrite:{type:"boolean",description:"Overwrite destination if it exists (default: false)"},create_dirs:{type:"boolean",description:"Create destination parent directories if missing (default: true)"}},required:["source_path","destination_path"]},permission:{category:"write",allowInAskMode:false},async function({source_path:a,destination_path:e,overwrite:t=false,create_dirs:s=true}){if(!a||!e)return JSON.stringify(X("rename_file","error","Missing required parameters: source_path, destination_path",{error:"source_path and destination_path are required"}));let n=We(a),r=We(e),i=Oe(n),o=Oe(r),l=st();if(!zt(n)||!zt(r))return JSON.stringify(X("rename_file","error","Path is outside workspace\uFF0C\u5DF2\u62D2\u7EDD",{file_path:`${n} -> ${r}`,error:"Path is outside workspace"}));if(n===l||r===l)return JSON.stringify(X("rename_file","error","Refusing to rename workspace root",{file_path:n}));try{await ce__default.lstat(n);}catch{return JSON.stringify(X("rename_file","error",`Source not found: ${i}`,{file_path:n,error:"Source not found"}))}let c=await ce__default.lstat(r).catch(()=>null);if(c&&!t)return JSON.stringify(X("rename_file","error",`Destination already exists: ${o}`,{file_path:r,error:"Destination already exists"}));try{return c&&t&&await ce__default.rm(r,{recursive:!0,force:!0}),s&&await ce__default.mkdir(se__default.dirname(r),{recursive:!0}),await ce__default.rename(n,r),JSON.stringify(X("rename_file","success",`Renamed: ${i} \u2192 ${o}`,{file_path:r,verify_hint:`Use "list_directory ${se__default.dirname(o)}" to verify.`,metadata:{from:n,to:r}}))}catch(u){return JSON.stringify(X("rename_file","error",`Failed to rename: ${i}`,{file_path:n,error:u.message}))}}},Wb={name:"apply_patch",description:"Apply a unified diff patch (git apply style)",parameters:{type:"object",properties:{patch:{type:"string",description:"Unified diff patch content"},strip:{type:"number",description:"Strip leading path components (git apply -p, default: 0)"},reverse:{type:"boolean",description:"Apply patch in reverse (default: false)"}},required:["patch"]},permission:{category:"write",allowInAskMode:false},async function({patch:a,strip:e=0,reverse:t=false}){if(!a||typeof a!="string")return JSON.stringify(X("apply_patch","error","Missing required parameter: patch",{error:"patch is required"}));if(!Number.isInteger(e)||e<0||e>10)return JSON.stringify(X("apply_patch","error","Invalid strip value (must be an integer between 0 and 10)",{error:"Invalid strip value"}));if(Buffer.byteLength(a,"utf8")>ap)return JSON.stringify(X("apply_patch","error",`Patch too large (max ${ap} bytes)`,{error:"Patch too large"}));let s=a.split(`
862
- `).filter(c=>c.startsWith("+++ ")||c.startsWith("--- "));for(let c of s){let u=c.slice(4).trim();if(u==="/dev/null")continue;let d=u.replace(/^a\//,"").replace(/^b\//,"");if(d.startsWith("/")||/^[A-Za-z]:[\\/]/.test(d))return JSON.stringify(X("apply_patch","error","Patch contains absolute paths",{error:"Absolute paths are not allowed in patch"}));if(d.split(/[\\/]+/).includes(".."))return JSON.stringify(X("apply_patch","error","Patch contains path traversal",{error:"Path traversal is not allowed in patch"}))}let n=st(),{repoRoot:r,error:i}=await _s(n);if(!r)return JSON.stringify(X("apply_patch","error",`Not a git repository: ${i||"unknown error"}`,{error:"Not a git repository"}));let o=await ce__default.mkdtemp(se__default.join(Dn__default.tmpdir(),"neox-patch-")),l=se__default.join(o,"apply.patch");try{await ce__default.writeFile(l,a,"utf8");let c=["apply"];e>0&&c.push(`-p${e}`),t&&c.push("--reverse");let u=await qe("git",[...c,"--check",l],r);if(u.exitCode!==0){let p=[u.stdout,u.stderr].filter(Boolean).join(`
862
+ `).filter(c=>c.startsWith("+++ ")||c.startsWith("--- "));for(let c of s){let u=c.slice(4).trim();if(u==="/dev/null")continue;let d=u.replace(/^a\//,"").replace(/^b\//,"");if(d.startsWith("/")||/^[A-Za-z]:[\\/]/.test(d))return JSON.stringify(X("apply_patch","error","Patch contains absolute paths",{error:"Absolute paths are not allowed in patch"}));if(d.split(/[\\/]+/).includes(".."))return JSON.stringify(X("apply_patch","error","Patch contains path traversal",{error:"Path traversal is not allowed in patch"}))}let n=st(),{repoRoot:r,error:i}=await Rs(n);if(!r)return JSON.stringify(X("apply_patch","error",`Not a git repository: ${i||"unknown error"}`,{error:"Not a git repository"}));let o=await ce__default.mkdtemp(se__default.join(Dn__default.tmpdir(),"neox-patch-")),l=se__default.join(o,"apply.patch");try{await ce__default.writeFile(l,a,"utf8");let c=["apply"];e>0&&c.push(`-p${e}`),t&&c.push("--reverse");let u=await qe("git",[...c,"--check",l],r);if(u.exitCode!==0){let p=[u.stdout,u.stderr].filter(Boolean).join(`
863
863
  `).trim();return JSON.stringify(X("apply_patch","error","Patch check failed",{error:p||"Patch check failed",verify_hint:"Ensure the patch applies cleanly to the current workspace state."}))}let d=await qe("git",[...c,"--whitespace=nowarn",l],r);if(d.exitCode!==0){let p=[d.stdout,d.stderr].filter(Boolean).join(`
864
864
  `).trim();return JSON.stringify(X("apply_patch","error","Patch apply failed",{error:p||"Patch apply failed"}))}return JSON.stringify(X("apply_patch","success","Patch applied successfully",{verify_hint:"Use git diff or readfile to verify changes."}))}catch(c){return JSON.stringify(X("apply_patch","error","Patch apply failed",{error:c.message}))}finally{await ce__default.rm(o,{recursive:true,force:true}).catch(()=>{});}}},gp=process.env.NEOX_SANDBOX==="on";function hp(a){gp=a;}var qb={name:"execute_shell",description:`Execute shell command with smart background process management.
865
865
 
@@ -991,14 +991,14 @@ ${u.stderr}
991
991
  `:""}
992
992
  \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501`}}},zb={name:"show_tree",description:"Display directory tree structure",parameters:{type:"object",properties:{directory:{type:"string",description:"Directory path (default: current directory)"},max_depth:{type:"number",description:"Maximum depth to traverse (default: 3)"}}},async function({directory:a=".",max_depth:e=3}){try{let t=We(a),s=[`${Oe(t)}/
993
993
  `];async function n(r,i="",o=0){if(o>=e)return;let u=(await ce__default.readdir(r,{withFileTypes:!0})).filter(d=>!d.name.startsWith(".")).sort((d,p)=>d.isDirectory()&&!p.isDirectory()?-1:!d.isDirectory()&&p.isDirectory()?1:d.name.localeCompare(p.name));for(let d=0;d<u.length;d++){let p=u[d],h=d===u.length-1,g=h?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",f=h?" ":"\u2502 ";if(p.isDirectory())s.push(`${i}${g}${p.name}/`),await n(se__default.join(r,p.name),i+f,o+1);else {let b=await ce__default.stat(se__default.join(r,p.name)),y=b.size<1024?`${b.size}B`:b.size<1024*1024?`${(b.size/1024).toFixed(1)}KB`:`${(b.size/(1024*1024)).toFixed(1)}MB`;s.push(`${i}${g}${p.name} (${y})`);}}}return await n(t),s.join(`
994
- `)}catch(t){return `\u2717 \u663E\u793A\u76EE\u5F55\u6811\u5931\u8D25: ${t.message}`}}},Hb={name:"git_status",description:"Show git status (short by default)",parameters:{type:"object",properties:{path:{type:"string",description:"Path inside the repo (default: workspace root)"},short:{type:"boolean",description:"Use short format (default: true)"}}},permission:{category:"read",allowInAskMode:true},async function({path:a=".",short:e=true}){let t=We(a);if(!zt(t))return JSON.stringify(ve("git_status","error","git status failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:s,error:n}=await _s(t);if(!s)return JSON.stringify(ve("git_status","error",`git status failed: ${n||"not a git repository"}`,void 0,{error:n||"not a git repository"}));let r=["status"];e&&r.push("-sb");let i=await qe("git",r,s),o=[i.stdout,i.stderr].filter(Boolean).join(`
995
- `).trim();return i.exitCode!==0?JSON.stringify(ve("git_status","error","git status failed",o||void 0,{error:o||"git status failed"})):JSON.stringify(ve("git_status","success",o?"git status ok":"git status clean",o||"\u2713 clean"))}},Jb={name:"git_diff",description:"Show git diff",parameters:{type:"object",properties:{path:{type:"string",description:"Path inside the repo (default: workspace root)"},staged:{type:"boolean",description:"Show staged diff (default: false)"},file_path:{type:"string",description:"Limit diff to a specific file"}}},permission:{category:"read",allowInAskMode:true},async function({path:a=".",staged:e=false,file_path:t}){let s=We(a);if(!zt(s))return JSON.stringify(ve("git_diff","error","git diff failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:n,error:r}=await _s(s);if(!n)return JSON.stringify(ve("git_diff","error",`git diff failed: ${r||"not a git repository"}`,void 0,{error:r||"not a git repository"}));let i=["diff"];if(e&&i.push("--staged"),t){let c=We(t);if(!zt(c))return JSON.stringify(ve("git_diff","error","git diff failed: path outside workspace",void 0,{error:"path outside workspace"}));let u=se__default.relative(n,c);if(u.startsWith("..")||se__default.isAbsolute(u))return JSON.stringify(ve("git_diff","error","git diff failed: file outside repo",void 0,{error:"file outside repo"}));i.push("--",u);}let o=await qe("git",i,n),l=[o.stdout,o.stderr].filter(Boolean).join(`
996
- `).trim();return o.exitCode!==0?JSON.stringify(ve("git_diff","error","git diff failed",l||void 0,{error:l||"git diff failed"})):JSON.stringify(ve("git_diff","success",l?"git diff ok":"no diff",l||""))}},Kb={name:"git_blame",description:"Show git blame for a file",parameters:{type:"object",properties:{file_path:{type:"string",description:"File path to blame (required)"},start_line:{type:"number",description:"Start line (1-based)"},end_line:{type:"number",description:"End line (1-based)"}},required:["file_path"]},permission:{category:"read",allowInAskMode:true},async function({file_path:a,start_line:e,end_line:t}){if(!a)return JSON.stringify(ve("git_blame","error","git blame failed: file_path is required",void 0,{error:"file_path is required"}));let s=We(a);if(!zt(s))return JSON.stringify(ve("git_blame","error","git blame failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:n,error:r}=await _s(se__default.dirname(s));if(!n)return JSON.stringify(ve("git_blame","error",`git blame failed: ${r||"not a git repository"}`,void 0,{error:r||"not a git repository"}));let i=e&&t?`${e},${t}`:void 0,o=se__default.relative(n,s);if(o.startsWith("..")||se__default.isAbsolute(o))return JSON.stringify(ve("git_blame","error","git blame failed: file outside repo",void 0,{error:"file outside repo"}));let l=["blame","--",o];i&&l.splice(1,0,"-L",i);let c=await qe("git",l,n),u=[c.stdout,c.stderr].filter(Boolean).join(`
997
- `).trim();return c.exitCode!==0?JSON.stringify(ve("git_blame","error","git blame failed",u||void 0,{error:u||"git blame failed"})):JSON.stringify(ve("git_blame","success","git blame ok",u||""))}},Vb={name:"git_branch_list",description:"List git branches",parameters:{type:"object",properties:{path:{type:"string",description:"Path inside the repo (default: workspace root)"},all:{type:"boolean",description:"Include remote branches (default: false)"}}},permission:{category:"read",allowInAskMode:true},async function({path:a=".",all:e=false}){let t=We(a);if(!zt(t))return JSON.stringify(ve("git_branch_list","error","git branch failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:s,error:n}=await _s(t);if(!s)return JSON.stringify(ve("git_branch_list","error",`git branch failed: ${n||"not a git repository"}`,void 0,{error:n||"not a git repository"}));let r=["branch","--list"];e&&r.push("--all");let i=await qe("git",r,s),o=[i.stdout,i.stderr].filter(Boolean).join(`
994
+ `)}catch(t){return `\u2717 \u663E\u793A\u76EE\u5F55\u6811\u5931\u8D25: ${t.message}`}}},Hb={name:"git_status",description:"Show git status (short by default)",parameters:{type:"object",properties:{path:{type:"string",description:"Path inside the repo (default: workspace root)"},short:{type:"boolean",description:"Use short format (default: true)"}}},permission:{category:"read",allowInAskMode:true},async function({path:a=".",short:e=true}){let t=We(a);if(!zt(t))return JSON.stringify(ve("git_status","error","git status failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:s,error:n}=await Rs(t);if(!s)return JSON.stringify(ve("git_status","error",`git status failed: ${n||"not a git repository"}`,void 0,{error:n||"not a git repository"}));let r=["status"];e&&r.push("-sb");let i=await qe("git",r,s),o=[i.stdout,i.stderr].filter(Boolean).join(`
995
+ `).trim();return i.exitCode!==0?JSON.stringify(ve("git_status","error","git status failed",o||void 0,{error:o||"git status failed"})):JSON.stringify(ve("git_status","success",o?"git status ok":"git status clean",o||"\u2713 clean"))}},Jb={name:"git_diff",description:"Show git diff",parameters:{type:"object",properties:{path:{type:"string",description:"Path inside the repo (default: workspace root)"},staged:{type:"boolean",description:"Show staged diff (default: false)"},file_path:{type:"string",description:"Limit diff to a specific file"}}},permission:{category:"read",allowInAskMode:true},async function({path:a=".",staged:e=false,file_path:t}){let s=We(a);if(!zt(s))return JSON.stringify(ve("git_diff","error","git diff failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:n,error:r}=await Rs(s);if(!n)return JSON.stringify(ve("git_diff","error",`git diff failed: ${r||"not a git repository"}`,void 0,{error:r||"not a git repository"}));let i=["diff"];if(e&&i.push("--staged"),t){let c=We(t);if(!zt(c))return JSON.stringify(ve("git_diff","error","git diff failed: path outside workspace",void 0,{error:"path outside workspace"}));let u=se__default.relative(n,c);if(u.startsWith("..")||se__default.isAbsolute(u))return JSON.stringify(ve("git_diff","error","git diff failed: file outside repo",void 0,{error:"file outside repo"}));i.push("--",u);}let o=await qe("git",i,n),l=[o.stdout,o.stderr].filter(Boolean).join(`
996
+ `).trim();return o.exitCode!==0?JSON.stringify(ve("git_diff","error","git diff failed",l||void 0,{error:l||"git diff failed"})):JSON.stringify(ve("git_diff","success",l?"git diff ok":"no diff",l||""))}},Kb={name:"git_blame",description:"Show git blame for a file",parameters:{type:"object",properties:{file_path:{type:"string",description:"File path to blame (required)"},start_line:{type:"number",description:"Start line (1-based)"},end_line:{type:"number",description:"End line (1-based)"}},required:["file_path"]},permission:{category:"read",allowInAskMode:true},async function({file_path:a,start_line:e,end_line:t}){if(!a)return JSON.stringify(ve("git_blame","error","git blame failed: file_path is required",void 0,{error:"file_path is required"}));let s=We(a);if(!zt(s))return JSON.stringify(ve("git_blame","error","git blame failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:n,error:r}=await Rs(se__default.dirname(s));if(!n)return JSON.stringify(ve("git_blame","error",`git blame failed: ${r||"not a git repository"}`,void 0,{error:r||"not a git repository"}));let i=e&&t?`${e},${t}`:void 0,o=se__default.relative(n,s);if(o.startsWith("..")||se__default.isAbsolute(o))return JSON.stringify(ve("git_blame","error","git blame failed: file outside repo",void 0,{error:"file outside repo"}));let l=["blame","--",o];i&&l.splice(1,0,"-L",i);let c=await qe("git",l,n),u=[c.stdout,c.stderr].filter(Boolean).join(`
997
+ `).trim();return c.exitCode!==0?JSON.stringify(ve("git_blame","error","git blame failed",u||void 0,{error:u||"git blame failed"})):JSON.stringify(ve("git_blame","success","git blame ok",u||""))}},Vb={name:"git_branch_list",description:"List git branches",parameters:{type:"object",properties:{path:{type:"string",description:"Path inside the repo (default: workspace root)"},all:{type:"boolean",description:"Include remote branches (default: false)"}}},permission:{category:"read",allowInAskMode:true},async function({path:a=".",all:e=false}){let t=We(a);if(!zt(t))return JSON.stringify(ve("git_branch_list","error","git branch failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:s,error:n}=await Rs(t);if(!s)return JSON.stringify(ve("git_branch_list","error",`git branch failed: ${n||"not a git repository"}`,void 0,{error:n||"not a git repository"}));let r=["branch","--list"];e&&r.push("--all");let i=await qe("git",r,s),o=[i.stdout,i.stderr].filter(Boolean).join(`
998
998
  `).trim();if(i.exitCode!==0)return JSON.stringify(ve("git_branch_list","error","git branch failed",o||void 0,{error:o||"git branch failed"}));let l=o,c="git branches";if(!l){let u=await qe("git",["symbolic-ref","--short","HEAD"],s),d=[u.stdout,u.stderr].filter(Boolean).join(`
999
- `).trim();u.exitCode===0&&d?(l=`* ${d} (current, no commits yet)`,c="git branches (no commits yet)"):(l="(no branches found)",c="git branches empty");}return JSON.stringify(ve("git_branch_list","success",c,l))}},Yb={name:"git_branch",description:"Create a git branch",parameters:{type:"object",properties:{name:{type:"string",description:"Branch name to create"},checkout:{type:"boolean",description:"Checkout after creation (default: false)"}},required:["name"]},permission:{category:"write",allowInAskMode:false},async function({name:a,checkout:e=false}){let t=st(),{repoRoot:s,error:n}=await _s(t);if(!s)return JSON.stringify(X("git_branch","error",`Not a git repository: ${n||"unknown error"}`,{error:"Not a git repository"}));if(!a)return JSON.stringify(X("git_branch","error","Branch name is required (use git_branch_list to list branches)",{error:"name is required"}));let r=typeof a=="string"?a.trim():"",i=/^[A-Za-z0-9._\\/-]+$/.test(r);if(!r||!i||r.includes("..")||r.startsWith("/")||r.endsWith("/"))return JSON.stringify(X("git_branch","error","Invalid branch name",{error:"Invalid branch name"}));let l=await qe("git",["branch",r],s);if(l.exitCode!==0){let c=[l.stdout,l.stderr].filter(Boolean).join(`
999
+ `).trim();u.exitCode===0&&d?(l=`* ${d} (current, no commits yet)`,c="git branches (no commits yet)"):(l="(no branches found)",c="git branches empty");}return JSON.stringify(ve("git_branch_list","success",c,l))}},Yb={name:"git_branch",description:"Create a git branch",parameters:{type:"object",properties:{name:{type:"string",description:"Branch name to create"},checkout:{type:"boolean",description:"Checkout after creation (default: false)"}},required:["name"]},permission:{category:"write",allowInAskMode:false},async function({name:a,checkout:e=false}){let t=st(),{repoRoot:s,error:n}=await Rs(t);if(!s)return JSON.stringify(X("git_branch","error",`Not a git repository: ${n||"unknown error"}`,{error:"Not a git repository"}));if(!a)return JSON.stringify(X("git_branch","error","Branch name is required (use git_branch_list to list branches)",{error:"name is required"}));let r=typeof a=="string"?a.trim():"",i=/^[A-Za-z0-9._\\/-]+$/.test(r);if(!r||!i||r.includes("..")||r.startsWith("/")||r.endsWith("/"))return JSON.stringify(X("git_branch","error","Invalid branch name",{error:"Invalid branch name"}));let l=await qe("git",["branch",r],s);if(l.exitCode!==0){let c=[l.stdout,l.stderr].filter(Boolean).join(`
1000
1000
  `).trim();return JSON.stringify(X("git_branch","error","Failed to create branch",{error:c||"Failed to create branch"}))}if(e){let c=await qe("git",["checkout",r],s);if(c.exitCode!==0){let u=[c.stdout,c.stderr].filter(Boolean).join(`
1001
- `).trim();return JSON.stringify(X("git_branch","error","Branch created but checkout failed",{error:u||"Checkout failed"}))}}return JSON.stringify(X("git_branch","success",e?`Branch created and checked out: ${r}`:`Branch created: ${r}`,{metadata:{branch:r,checkout:e}}))}},Xb={name:"git_commit",description:"Create a git commit",parameters:{type:"object",properties:{message:{type:"string",description:"Commit message"},add_all:{type:"boolean",description:"Run git add -A before commit (default: false)"}},required:["message"]},permission:{category:"write",allowInAskMode:false},async function({message:a,add_all:e=false}){let t=st(),{repoRoot:s,error:n}=await _s(t);if(!s)return JSON.stringify(X("git_commit","error",`Not a git repository: ${n||"unknown error"}`,{error:"Not a git repository"}));let r=typeof a=="string"?a.trim():"";if(!r||r.length<3)return JSON.stringify(X("git_commit","error","Commit message is too short",{error:"Commit message is too short"}));if(e){let o=await qe("git",["add","-A"],s);if(o.exitCode!==0){let l=[o.stdout,o.stderr].filter(Boolean).join(`
1001
+ `).trim();return JSON.stringify(X("git_branch","error","Branch created but checkout failed",{error:u||"Checkout failed"}))}}return JSON.stringify(X("git_branch","success",e?`Branch created and checked out: ${r}`:`Branch created: ${r}`,{metadata:{branch:r,checkout:e}}))}},Xb={name:"git_commit",description:"Create a git commit",parameters:{type:"object",properties:{message:{type:"string",description:"Commit message"},add_all:{type:"boolean",description:"Run git add -A before commit (default: false)"}},required:["message"]},permission:{category:"write",allowInAskMode:false},async function({message:a,add_all:e=false}){let t=st(),{repoRoot:s,error:n}=await Rs(t);if(!s)return JSON.stringify(X("git_commit","error",`Not a git repository: ${n||"unknown error"}`,{error:"Not a git repository"}));let r=typeof a=="string"?a.trim():"";if(!r||r.length<3)return JSON.stringify(X("git_commit","error","Commit message is too short",{error:"Commit message is too short"}));if(e){let o=await qe("git",["add","-A"],s);if(o.exitCode!==0){let l=[o.stdout,o.stderr].filter(Boolean).join(`
1002
1002
  `).trim();return JSON.stringify(X("git_commit","error","git add -A failed",{error:l||"git add failed"}))}}let i=await qe("git",["commit","-m",r],s);if(i.exitCode!==0){let o=[i.stdout,i.stderr].filter(Boolean).join(`
1003
1003
  `).trim();return JSON.stringify(X("git_commit","error","git commit failed",{error:o||"git commit failed"}))}return JSON.stringify(X("git_commit","success",`Commit created: ${r}`,{metadata:{message:r}}))}};async function Qb(a){let e=ce__default.stat(se__default.join(a,"package.json")).then(()=>true).catch(()=>false),t=ce__default.stat(se__default.join(a,"pnpm-lock.yaml")).then(()=>true).catch(()=>false),s=ce__default.stat(se__default.join(a,"yarn.lock")).then(()=>true).catch(()=>false),n=ce__default.stat(se__default.join(a,"bun.lockb")).then(()=>true).catch(()=>false),r=ce__default.stat(se__default.join(a,"pyproject.toml")).then(()=>true).catch(()=>false),i=ce__default.stat(se__default.join(a,"pytest.ini")).then(()=>true).catch(()=>false),o=ce__default.stat(se__default.join(a,"go.mod")).then(()=>true).catch(()=>false),l=ce__default.stat(se__default.join(a,"Cargo.toml")).then(()=>true).catch(()=>false),c=ce__default.stat(se__default.join(a,"Makefile")).then(()=>true).catch(()=>false);return Promise.all([e,t,s,n,r,i,o,l,c]).then(([u,d,p,h,g,f,b,y,w])=>u?d?"pnpm":p?"yarn":h?"bun":"npm":g||f?"pytest":b?"go":y?"cargo":w?"make":null)}function Zb(a,e,t){switch(a){case "npm":case "pnpm":case "yarn":case "bun":return {command:a,args:["run",e==="test"?"test":e==="lint"?"lint":"format",...t]};case "pytest":return {command:"pytest",args:t};case "go":return e==="test"?{command:"go",args:["test","./...",...t]}:e==="lint"?{command:"golangci-lint",args:["run",...t]}:{command:"gofmt",args:["-w",...t]};case "cargo":return e==="test"?{command:"cargo",args:["test",...t]}:e==="lint"?{command:"cargo",args:["clippy","--",...t]}:{command:"cargo",args:["fmt",...t]};case "make":return {command:"make",args:[e,...t]};default:return {command:"npm",args:["run",e,...t]}}}async function Cl(a,e,t){let s=We(t.cwd||".");if(!zt(s))return JSON.stringify(Yt(a,"error","Command rejected: path outside workspace",{error:"cwd is outside workspace"}));if(t.extra_args!==void 0&&!Array.isArray(t.extra_args))return JSON.stringify(Yt(a,"error","Invalid extra_args: expected an array of strings",{error:"extra_args must be an array"}));let n=Array.isArray(t.extra_args)?t.extra_args.map(l=>String(l)):[],r=t.preset||await Qb(s),i=t.command,o=[];if(i){let l=Mb(i);if(!l.command)return JSON.stringify(Yt(a,"error","Invalid command",{error:"Command is empty"}));let c=new Set(["npm","pnpm","yarn","bun","pytest","go","cargo","make"]);if(!c.has(l.command))return JSON.stringify(Yt(a,"error","Command not allowed",{error:`Allowed commands: ${Array.from(c).join(", ")}`}));let u=l.args.concat(n),d=await qe(l.command,u,s,{timeoutMs:t.timeout_ms||3e5}),p=[d.stdout,d.stderr].filter(Boolean).join(`
1004
1004
  `),h=Bi(p,ip),g=d.exitCode===0?`${a} succeeded (${d.durationMs}ms)`:`${a} failed with exit code ${d.exitCode}`;return JSON.stringify(Yt(a,d.exitCode===0?"success":"error",g,{error:d.exitCode===0?void 0:Bi(p,op).text,metadata:{command:[l.command,...u].join(" "),exit_code:d.exitCode,duration_ms:d.durationMs,output_truncated:h.truncated}}))}if(r){let l=Zb(r,e,n);o=l.args;let c=await qe(l.command,o,s,{timeoutMs:t.timeout_ms||3e5}),u=[c.stdout,c.stderr].filter(Boolean).join(`
@@ -1031,7 +1031,7 @@ Please report this issue.`,{error:"ripgrep not available"}));if(y(),r==="files")
1031
1031
  Fallback rg failed: ${te}`.trim(),ae=H?.exitCode||2;}}if(ae!==0&&ae!==1){let H=k?`
1032
1032
  Error: ${k}`:"",te=`
1033
1033
  Command: ${pe} ${V.join(" ")}`;throw new Error(`ripgrep failed (exit code ${ae})${H}${te}`)}let Z=0;for(let H of Re.split(`
1034
- `)){if(y(),Z++,Z%w===0&&await C(),!H.trim())continue;let te;try{te=JSON.parse(H);}catch{continue}if(te.type==="summary"){let js=te.data?.stats;js&&typeof js.searches=="number"&&(oe=Math.max(oe,js.searches));continue}let be=te.type==="match",Y=te.type==="context";if(!be&&!Y)continue;let de=te.data,Ae=de?.path?.text,et=de?.line_number,Mn=de?.lines?.text,gs=Array.isArray(de?.submatches)?de.submatches[0]:void 0;if(!Ae||!et||typeof Mn!="string")continue;let Yc=Mn.replace(/\n$/,""),ea=G.get(Ae)||new Map,Pn=ea.get(et)||{line:Yc,queryIds:new Set};if(Pn.line=Yc,be){Pn.queryIds.add(re.id),Pn.column===void 0&&gs?.start!==void 0&&(Pn.column=gs.start+1);let js=q.get(Ae)||new Set;js.add(re.id),q.set(Ae,js);}ea.set(et,Pn),G.set(Ae,ea);}}}let z=new Set(O.map(B=>B.id)),J=[],ie=0,K=0,xe=0,ee=[],fe=[],ne=0;for(let[B,re]of G.entries()){if(y(),ie>=p&&!h)break;ne++,ne%w===0&&await C();let V=q.get(B)||new Set,pe=!0;if(z.forEach(H=>{V.has(H)||(pe=!1);}),!pe)continue;let ae=Array.from(re.keys()).sort((H,te)=>H-te).filter(H=>{let te=re.get(H);return te?!ue.some(be=>be.test(te.line)):!1});if(ae.length===0)continue;K++,ie+=ae.length;let k=Oe(B);if(ee.push({file:k,anchor_lines:ae.slice(0,20),num_lines:D}),h){J.push({file:B,matches:[],matchCount:ae.length});continue}y();let U=[];Array.from(re.keys()).sort((H,te)=>H-te).forEach(H=>{let te=re.get(H);if(!te)return;let be=ae.includes(H);if(U.push({lineNum:H,line:te.line,isMatch:be}),be&&fe.length<p){for(let Y of te.queryIds)if(fe.push({file:k,line:H,column:te.column,preview:te.line,queryId:Y}),fe.length>=p)break}}),J.push({file:B,matches:U,matchCount:ae.length});}J.sort((B,re)=>Oe(B.file).localeCompare(Oe(re.file)));let le=B=>{let V=Oe(B).split(se__default.sep),pe=V.findIndex(Re=>["src","lib","app","core","packages"].includes(Re));return pe>=0&&pe+1<V.length?V[pe+1]:V[0]||"root"},Q=[`\u2713 \u641C\u7D22: ${P}`,`\u25B8 \u8DEF\u5F84: ${F}${j?" (\u9012\u5F52)":""}${_==="ancestor"?" (auto-resolved)":""}`,l?`\u25B8 \u6587\u4EF6\u8FC7\u6EE4: ${l}`:"",u?"\u25B8 \u6A21\u5F0F: \u5FFD\u7565\u5927\u5C0F\u5199":"",N?"\u25B8 \u7B56\u7565: ripgrep":"\u25B8 \u7B56\u7565: fallback","","\u2501\u2501\u2501\u2501 \u7ED3\u679C\u6458\u8981 \u2501\u2501\u2501\u2501",oe>0?`\u6587\u4EF6: ${oe} \u5DF2\u641C\u7D22, ${K} \u6709\u5339\u914D`:`\u6587\u4EF6: ${K} \u6709\u5339\u914D`,`\u5339\u914D: ${ie}${ie>=p?" (\u5DF2\u8FBE\u4E0A\u9650)":""}`].filter(B=>B!==""),Be=new Map,ze=0;for(let B of J){ze++,ze%w===0&&await C();let re=le(B.file);Be.set(re,(Be.get(re)||0)+B.matchCount);}if(Be.size>1){Q.push(""),Q.push("\u{1F4E6} \u6A21\u5757\u5206\u5E03:");let B=Array.from(Be.entries()).sort((re,V)=>V[1]-re[1]);for(let[re,V]of B.slice(0,5))Q.push(` ${re}: ${V}`);B.length>5&&Q.push(` ... \u8FD8\u6709 ${B.length-5} \u4E2A\u6A21\u5757`);}if(Q.push(""),h){Q.push("\u{1F4CB} \u6587\u4EF6\u5217\u8868:");let B=0;for(let re of J){B++,B%w===0&&await C();let V=Oe(re.file),pe=le(re.file);Q.push(` [${pe}] ${V}: ${re.matchCount}`);}}else {let B=0,re=100;for(let V of J){if(y(),xe>=p){Q.push(`
1034
+ `)){if(y(),Z++,Z%w===0&&await C(),!H.trim())continue;let te;try{te=JSON.parse(H);}catch{continue}if(te.type==="summary"){let js=te.data?.stats;js&&typeof js.searches=="number"&&(oe=Math.max(oe,js.searches));continue}let be=te.type==="match",Y=te.type==="context";if(!be&&!Y)continue;let de=te.data,Ae=de?.path?.text,et=de?.line_number,Mn=de?.lines?.text,hs=Array.isArray(de?.submatches)?de.submatches[0]:void 0;if(!Ae||!et||typeof Mn!="string")continue;let Yc=Mn.replace(/\n$/,""),ea=G.get(Ae)||new Map,Pn=ea.get(et)||{line:Yc,queryIds:new Set};if(Pn.line=Yc,be){Pn.queryIds.add(re.id),Pn.column===void 0&&hs?.start!==void 0&&(Pn.column=hs.start+1);let js=q.get(Ae)||new Set;js.add(re.id),q.set(Ae,js);}ea.set(et,Pn),G.set(Ae,ea);}}}let z=new Set(O.map(B=>B.id)),J=[],ie=0,K=0,xe=0,ee=[],fe=[],ne=0;for(let[B,re]of G.entries()){if(y(),ie>=p&&!h)break;ne++,ne%w===0&&await C();let V=q.get(B)||new Set,pe=!0;if(z.forEach(H=>{V.has(H)||(pe=!1);}),!pe)continue;let ae=Array.from(re.keys()).sort((H,te)=>H-te).filter(H=>{let te=re.get(H);return te?!ue.some(be=>be.test(te.line)):!1});if(ae.length===0)continue;K++,ie+=ae.length;let k=Oe(B);if(ee.push({file:k,anchor_lines:ae.slice(0,20),num_lines:D}),h){J.push({file:B,matches:[],matchCount:ae.length});continue}y();let U=[];Array.from(re.keys()).sort((H,te)=>H-te).forEach(H=>{let te=re.get(H);if(!te)return;let be=ae.includes(H);if(U.push({lineNum:H,line:te.line,isMatch:be}),be&&fe.length<p){for(let Y of te.queryIds)if(fe.push({file:k,line:H,column:te.column,preview:te.line,queryId:Y}),fe.length>=p)break}}),J.push({file:B,matches:U,matchCount:ae.length});}J.sort((B,re)=>Oe(B.file).localeCompare(Oe(re.file)));let le=B=>{let V=Oe(B).split(se__default.sep),pe=V.findIndex(Re=>["src","lib","app","core","packages"].includes(Re));return pe>=0&&pe+1<V.length?V[pe+1]:V[0]||"root"},Q=[`\u2713 \u641C\u7D22: ${P}`,`\u25B8 \u8DEF\u5F84: ${F}${j?" (\u9012\u5F52)":""}${_==="ancestor"?" (auto-resolved)":""}`,l?`\u25B8 \u6587\u4EF6\u8FC7\u6EE4: ${l}`:"",u?"\u25B8 \u6A21\u5F0F: \u5FFD\u7565\u5927\u5C0F\u5199":"",N?"\u25B8 \u7B56\u7565: ripgrep":"\u25B8 \u7B56\u7565: fallback","","\u2501\u2501\u2501\u2501 \u7ED3\u679C\u6458\u8981 \u2501\u2501\u2501\u2501",oe>0?`\u6587\u4EF6: ${oe} \u5DF2\u641C\u7D22, ${K} \u6709\u5339\u914D`:`\u6587\u4EF6: ${K} \u6709\u5339\u914D`,`\u5339\u914D: ${ie}${ie>=p?" (\u5DF2\u8FBE\u4E0A\u9650)":""}`].filter(B=>B!==""),Be=new Map,ze=0;for(let B of J){ze++,ze%w===0&&await C();let re=le(B.file);Be.set(re,(Be.get(re)||0)+B.matchCount);}if(Be.size>1){Q.push(""),Q.push("\u{1F4E6} \u6A21\u5757\u5206\u5E03:");let B=Array.from(Be.entries()).sort((re,V)=>V[1]-re[1]);for(let[re,V]of B.slice(0,5))Q.push(` ${re}: ${V}`);B.length>5&&Q.push(` ... \u8FD8\u6709 ${B.length-5} \u4E2A\u6A21\u5757`);}if(Q.push(""),h){Q.push("\u{1F4CB} \u6587\u4EF6\u5217\u8868:");let B=0;for(let re of J){B++,B%w===0&&await C();let V=Oe(re.file),pe=le(re.file);Q.push(` [${pe}] ${V}: ${re.matchCount}`);}}else {let B=0,re=100;for(let V of J){if(y(),xe>=p){Q.push(`
1035
1035
  ... \u8FD8\u6709\u66F4\u591A\u5339\u914D (\u5DF2\u8FBE ${p} \u4E0A\u9650)`);break}let pe=Oe(V.file),Re=le(V.file);Q.push(`
1036
1036
  \u25B8 [${Re}] ${pe} (${V.matchCount} \u5904)`),Q.push("\u2500".repeat(50));let ae=-10;for(let k of V.matches){if(xe>=p)break;B++,B%re===0&&await C(),k.lineNum>ae+1&&ae>0&&Q.push(" \u2504\u2504\u2504");let U=k.isMatch?"\u25B6":" ";Q.push(`${U}${String(k.lineNum).padStart(5)} \u2502 ${k.line}`),ae=k.lineNum,k.isMatch&&xe++;}}}return J.length===0?(Q.push("\u672A\u627E\u5230\u5339\u914D\u5185\u5BB9"),Q.push(""),Q.push("\u{1F4A1} \u5EFA\u8BAE:"),Q.push(" - \u5C1D\u8BD5 case_insensitive: true"),Q.push(" - \u5C1D\u8BD5 recursive: true \u641C\u7D22\u5B50\u76EE\u5F55"),Q.push(" - \u4F7F\u7528 keywords \u6216 queries \u7EC4\u5408\u641C\u7D22"),Q.push(' - \u67E5\u6587\u4EF6\u540D\u8BF7\u7528 mode="files"')):ee.length>0&&(Q.push(""),Q.push("\u{1F4A1} \u6279\u91CF\u8BFB\u53D6:"),ee.slice(0,3).forEach(B=>{Q.push(` readfile(path="${B.file}", anchor_lines=[${B.anchor_lines.join(",")}], num_lines=${B.num_lines})`);})),JSON.stringify(ve("search","success",J.length>0?`search "${P}" (${ie} matches)`:`search "${P}" (no matches)`,Q.join(`
1037
1037
  `),{metadata:{mode:"content",strategy:N?"rg":"fallback",regex:v.some(B=>B.regex),case_insensitive:u,path:F,resolved_from:_,queries:v,matches:fe,read_hints:ee,files_with_matches:K,command:ke.length>0?ke[0]:void 0}}))}catch(f){return JSON.stringify(ve("search","error",`search failed: ${f.message}`,void 0,{error:f.message}))}}},lv={name:$i.name,description:$i.description,parameters:$i.parameters,permission:{category:"read",allowInAskMode:true},async function(a){return Xd(a)}},cv={name:"use_skill",description:`Execute a registered skill to get specialized instructions for a task.
@@ -1053,9 +1053,9 @@ To list all skills, use the /skills command.`}let i=await new Fi(ht).execute(e,t
1053
1053
  ${i.output}
1054
1054
 
1055
1055
  ---
1056
- \u26A0\uFE0F IMPORTANT: Now execute the above instructions step by step. Do not ask for confirmation unless the instructions explicitly require it.`:`\u274C Skill execution failed: ${i.error}`}},fp=[Pb,$b,Gb,Ub,Wb,Fb,jb,Bb,Hb,Jb,Kb,Vb,Yb,Xb,ev,tv,sv,qb,zb,xu,nv,av,da,pa,ma,Ou,lv,Zd,cv];async function Rs(a,e){e&&mp(e);let t=e?.capabilities??Ue.capabilities,s=Le(),n=[...fp];if(a&&n.push(Lu(a)),s.webSearch?.enabled&&n.push(Ia),s.javaDebug?.enabled)try{let c=await Oa(s.javaDebug?.jarPath);n.push(...c),we.info("TOOLS",`Java Debug \u5DE5\u5177\u5DF2\u542F\u7528 (${c.length} \u4E2A\u5DE5\u5177)`);}catch(c){we.error("TOOLS",`Java Debug \u5DE5\u5177\u52A0\u8F7D\u5931\u8D25: ${c.message}`),we.error("TOOLS","\u63D0\u793A: \u8FD0\u884C npm run setup-java-debug \u81EA\u52A8\u4E0B\u8F7D JAR \u6587\u4EF6");}if(s.smartRead?.enabled!==false)try{let c=cl(a);n.push(...c),we.info("TOOLS",`readfile \u5DE5\u5177\u5DF2\u542F\u7528 (${c.length} \u4E2A\u5DE5\u5177)`);}catch(c){we.error("TOOLS",`readfile \u5DE5\u5177\u52A0\u8F7D\u5931\u8D25: ${c.message}`);}let r=typeof process<"u"&&process.type==="renderer";t?.terminal&&r&&n.push(...ni()),t?.editor&&r&&n.push(...ri());let i=Tb(n,t),o=s.enabledTools||{},l=i.filter(c=>o[c.name]!==false);return sp(l)}function Gi(a){return {output_info:a,behavior:{type:"allow"}}}function yp(a,e){return {output_info:e,behavior:{type:"reject_content",message:a}}}function uv(a){let e=a.match(/Error\s+(?:code\s+)?(\d{3})/i);if(e)return e[1];let t=a.match(/(\d{3}):\s*([^<\n]+)/);return t?t[1]:null}function dv(a){let e=a.match(/<title>[^|]*\|\s*\d{3}:\s*([^<]+)<\/title>/i);if(e)return e[1].trim();let t=a.match(/<h1[^>]*>(?:<[^>]+>)*([^<]+?(?:\s+\d{3})?)<\/(?:[^>]+>)*<\/h1>/i);if(t)return t[1].replace(/Error code\s+\d{3}/i,"").trim();let s=a.match(/Error\s+code\s+(\d{3})/i);if(s){let r=s[1];return {502:"Bad gateway",503:"Service unavailable",504:"Gateway timeout",520:"Unknown error",521:"Web server is down",522:"Connection timed out",523:"Origin is unreachable",524:"A timeout occurred"}[r]||"Server error"}let n=a.match(/<span[^>]*class="inline-block"[^>]*>([^<]+)<\/span>/i);return n?n[1].trim():null}function pv(a){let e=a.match(/truncate[^>]*>([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})<\/span>/);if(e)return e[1];let t=a.match(/<title>([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/);return t?t[1]:null}function hr(a){return a.trim().startsWith("<!DOCTYPE html")||a.trim().startsWith("<html")||/<html[^>]*>/i.test(a)}function mv(a){let e=a.match(/^data:\s*(\{.*\})/m);return e?e[1]:null}function As(a,e){let t=mv(a);if(t)try{let i=JSON.parse(t);if(i.error){let o=i.error,l=o.type||o.code||(e?`HTTP_${e}`:"API_ERROR"),c=o.message||"API error",u;if(o.type==="usage_limit_reached"){let d=o.resets_at?new Date(o.resets_at*1e3).toLocaleString():void 0,p=o.resets_in_seconds;if(p){let h=Math.floor(p/3600),g=Math.floor(p%3600/60);u=`Usage limit reached (${o.plan_type||"unknown"} plan). Resets in ${h}h ${g}m.`;}else d&&(u=`Usage limit reached (${o.plan_type||"unknown"} plan). Resets at ${d}.`);}return {code:l,message:c,detail:u}}}catch{}if(a.trim().startsWith("{"))try{let i=JSON.parse(a);if(i.error){let o=i.error;return {code:o.type||o.code||(e?`HTTP_${e}`:"API_ERROR"),message:o.message||"API error"}}}catch{}if(hr(a)){let i=uv(a)||String(e||"UNKNOWN"),o=dv(a)||"Server error",l=pv(a),c;return l&&(l.includes("cloudflare")?c=`The server (${l}) is protected by Cloudflare but is not responding.`:c=`The API server (${l}) is not responding. This may be a temporary issue with your API provider.`),{code:`HTTP_${i}`,message:o,detail:c}}let s=a.match(/OpenAI.*error:\s*(\d+)\s*-\s*(.*)/i);if(s){let i=s[1],o=s[2];if(hr(o)){let l=As(o,parseInt(i,10));return {code:l.code,message:l.message,detail:l.detail}}return o=o.trim(),o.length>200&&(o=o.slice(0,200)+"..."),{code:`HTTP_${i}`,message:o}}let n=a.match(/Anthropic.*error:\s*(\d+)\s*-\s*(.*)/i);if(n){let i=n[1],o=n[2].trim();return o.length>200&&(o=o.slice(0,200)+"..."),{code:`HTTP_${i}`,message:o}}if(a.includes("ECONNREFUSED"))return {code:"NETWORK_ERROR",message:"Connection refused",detail:"Unable to connect to the API server. Please check your network connection."};if(a.includes("ETIMEDOUT")||a.includes("timeout"))return {code:"TIMEOUT",message:"Connection timeout",detail:"The request took too long to complete. Please try again."};if(a.includes("ENOTFOUND"))return {code:"DNS_ERROR",message:"Server not found",detail:"Could not resolve the API server address. Please check your API base URL."};if(/context.*window.*exceeded/i.test(a)||/maximum.*context.*length/i.test(a))return {code:"CONTEXT_EXCEEDED",message:"Context window exceeded",detail:"The conversation is too long. Please start a new session or use /compact."};if(/rate.*limit/i.test(a)||a.includes("429"))return {code:"RATE_LIMIT",message:"Rate limit exceeded",detail:"Too many requests. Please wait a moment before trying again."};if(a.includes("401")||/unauthorized/i.test(a))return {code:"AUTH_ERROR",message:"Authentication failed",detail:"Please check your API key in settings."};if(a.includes("403")||/forbidden/i.test(a))return {code:"FORBIDDEN",message:"Access denied",detail:"Your API key does not have permission for this operation."};let r=a;return r=r.replace(/^Error:\s*/i,""),r=r.replace(/^Request failed with status code\s+\d+:\s*/i,""),r.length>300&&(r=r.slice(0,300)+"..."),{code:e?`HTTP_${e}`:"UNKNOWN",message:r}}var Ce=class a extends Error{category;code;retryable;retryAfter;context;originalError;constructor(e){super(e.message),this.name="NeoxError",this.category=e.category,this.code=e.code,this.retryable=e.retryable,this.retryAfter=e.retryAfter,this.context=e.context,this.originalError=e.originalError,Error.captureStackTrace&&Error.captureStackTrace(this,a);}withContext(e){return new a({...this,context:{...this.context,...e}})}toJSON(){return {name:this.name,category:this.category,code:this.code,message:this.message,retryable:this.retryable,retryAfter:this.retryAfter,context:this.context,stack:this.stack}}};function Ht(a){if(!a)return;if(typeof a!="string")return typeof a=="number"&&a>0?Math.ceil(a*1e3):void 0;let e=a.trim(),t=e.match(/^(\d+(?:\.\d+)?)\s*ms$/i);if(t){let r=parseFloat(t[1]);return r>0?Math.ceil(r):void 0}let s=parseFloat(e);if(!isNaN(s)&&s>0)return Math.ceil(s*1e3);let n=new Date(e);if(!isNaN(n.getTime())){let r=n.getTime()-Date.now();return r>0?Math.ceil(r):void 0}}function gv(a){switch(a){case 502:return 3e3;case 503:return 5e3;case 504:return 2e3;default:return 2e3}}function Ui(a){if(!a)return;let e=a["retry-after"]||a["Retry-After"];if(e){let r=Ht(e);if(r)return r}let t=a["retry-after-ms"]||a["Retry-After-Ms"];if(t){let r=parseFloat(t);if(!isNaN(r)&&r>0)return Math.ceil(r)}let s=a["x-ratelimit-reset-requests"];if(s){let r=Ht(s);if(r)return r}let n=a["anthropic-ratelimit-requests-reset"];if(n){let r=new Date(n);if(!isNaN(r.getTime())){let i=r.getTime()-Date.now();return i>0?Math.ceil(i):void 0}}}function Sl(a){return typeof a=="object"&&a!==null&&"message"in a&&typeof a.message=="string"}function bp(a){return [/context.*window.*exceeded/i,/context.*length.*exceeded/i,/maximum.*context.*length/i,/token.*limit.*exceeded/i,/input.*too.*long/i].some(t=>t.test(a))}function hv(a){return [/quota.*exceeded/i,/usage.*limit/i,/rate.*limit/i,/insufficient.*quota/i,/billing/i].some(t=>t.test(a))}function fv(a){if(a){if(typeof a=="string")return a;if(typeof a=="object"){if(typeof a.error=="string")return a.error;if(a.error?.message)return a.error.message;if(a.message)return a.message}}}function ft(a){if(a instanceof Ce)return a;let e=a instanceof Error?a.message:String(a),t=a instanceof Error?a:void 0,s=Sl(a)?a:void 0,r=(s?fv(s.response?.data):void 0)||e;if(s?.response?.status){let i=s.response.status,o=Ui(s.response.headers),l=s.response.headers?.["x-request-id"]||s.response.headers?.["cf-ray"];if(i===429){let c=s.response.data,u=c?.error?.type;return u==="usage_limit_reached"||u==="usage_not_included"?new Ce({category:"fatal_limit",code:"USAGE_LIMIT_REACHED",message:c?.error?.message||"Usage limit reached",retryable:false,context:{httpStatus:i,requestId:l},originalError:t}):new Ce({category:"retryable_http",code:`HTTP_${i}`,message:r,retryable:true,retryAfter:o,context:{httpStatus:i,requestId:l},originalError:t})}if(i===502||i===503||i===504){let c=r;if(hr(r)){let d=As(r,i);c=d.message,d.detail&&(c+=`
1057
- `+d.detail);}let u=o||gv(i);return new Ce({category:"retryable_rate_limit",code:`PROXY_${i}`,message:c||`API \u4EE3\u7406\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528 (${i})`,retryable:true,retryAfter:u,context:{httpStatus:i,requestId:l,rawMessage:r},originalError:t})}if(i>=500){let c=r;if(hr(r)){let u=As(r,i);c=u.message,u.detail&&(c+=`
1058
- `+u.detail);}return new Ce({category:"retryable_http",code:`HTTP_${i}`,message:c,retryable:true,retryAfter:o,context:{httpStatus:i,requestId:l,rawMessage:r},originalError:t})}if(i===401)return new Ce({category:"fatal_auth",code:"UNAUTHORIZED",message:r||"Authentication failed. Please check your API key.",retryable:false,context:{httpStatus:i,requestId:l},originalError:t});if(i===403)return new Ce({category:"fatal_auth",code:"FORBIDDEN",message:r||"Access denied. Please check your API permissions.",retryable:false,context:{httpStatus:i,requestId:l},originalError:t});if(i===400)return bp(e)?new Ce({category:"fatal_context",code:"CONTEXT_WINDOW_EXCEEDED",message:"Context window exceeded. Please start a new conversation or clear history.",retryable:false,context:{httpStatus:i,requestId:l},originalError:t}):r.includes("Upstream request failed")||r.includes("upstream")||r.includes("gateway")?new Ce({category:"retryable_http",code:"PROXY_UPSTREAM_FAILED",message:r||"Proxy upstream request failed",retryable:true,context:{httpStatus:i,requestId:l},originalError:t}):new Ce({category:"fatal_invalid",code:"INVALID_REQUEST",message:r,retryable:false,context:{httpStatus:i,requestId:l},originalError:t});if(i>=400&&i<500)return new Ce({category:"fatal_invalid",code:`HTTP_${i}`,message:r,retryable:false,context:{httpStatus:i,requestId:l},originalError:t})}if(Sl(a)){let i=a.code,o=a.name;if(i==="ERR_CANCELED"||o==="CanceledError"||o==="AbortError")return new Ce({category:"canceled",code:"CANCELED",message:"Request was canceled",retryable:false,originalError:t});if(i==="ECONNREFUSED"||i==="ENOTFOUND"||i==="ECONNRESET")return new Ce({category:"retryable_network",code:i,message:`Network error: ${e}`,retryable:true,originalError:t});if(i==="ETIMEDOUT"||i==="ESOCKETTIMEDOUT")return new Ce({category:"retryable_network",code:"TIMEOUT",message:`Connection timeout: ${e}`,retryable:true,originalError:t})}return a instanceof Error&&a.name==="AbortError"?new Ce({category:"canceled",code:"CANCELED",message:"Request was canceled",retryable:false,originalError:a}):Sl(a)&&a.code==="STREAM_INCOMPLETE"?new Ce({category:"retryable_stream",code:"STREAM_INCOMPLETE",message:`\u7F51\u7EDC\u4E2D\u65AD: ${e}`,retryable:true,context:{toolName:a.toolName,rawMessage:e},originalError:t}):a?.code==="STREAM_TIMEOUT"?new Ce({category:"retryable_stream",code:"STREAM_TIMEOUT",message:`API \u4EE3\u7406\u54CD\u5E94\u8D85\u65F6: ${e}`,retryable:true,context:{rawMessage:e},originalError:t}):e.includes("stream")||e.includes("Stream")||e.includes("SSE")||e.includes("disconnected")||e.includes("incomplete")||e.includes("message_stop")?new Ce({category:"retryable_stream",code:"STREAM_ERROR",message:`\u7F51\u7EDC\u4E2D\u65AD: ${e}`,retryable:true,originalError:t}):bp(e)?new Ce({category:"fatal_context",code:"CONTEXT_WINDOW_EXCEEDED",message:"Context window exceeded. Please start a new conversation or clear history.",retryable:false,originalError:t}):hv(e)?new Ce({category:"fatal_limit",code:"QUOTA_EXCEEDED",message:e,retryable:false,originalError:t}):new Ce({category:"internal",code:"UNKNOWN",message:e,retryable:false,originalError:t})}function vp(a,e,t){let s=e||"";return s.trim().endsWith("}")?(a==="write_file"||a==="edit_file")&&!s.includes('"content"')?new Ce({category:"tool_truncated",code:"TOOL_MISSING_CONTENT",message:"The content field is missing (likely truncated)",retryable:false,context:{toolName:a,receivedLength:s.length,rawMessage:t.message},originalError:t}):t.message.includes("JSON")||t.message.includes("Unexpected")||t.message.includes("parse")?new Ce({category:"tool_json_invalid",code:"JSON_PARSE_ERROR",message:`Invalid JSON in tool arguments: ${t.message}`,retryable:true,context:{toolName:a,receivedLength:s.length,rawMessage:t.message},originalError:t}):new Ce({category:"tool_json_invalid",code:"TOOL_ERROR",message:t.message,retryable:true,context:{toolName:a},originalError:t}):new Ce({category:"tool_truncated",code:"TOOL_ARGS_TRUNCATED",message:"Tool arguments were truncated during streaming",retryable:false,context:{toolName:a,receivedLength:s.length,rawMessage:t.message},originalError:t})}function Wi(a){switch(a.category){case "retryable_rate_limit":return `API \u4EE3\u7406\u901F\u7387\u9650\u5236\uFF0C${a.retryAfter?Math.ceil(a.retryAfter/1e3):3} \u79D2\u540E\u81EA\u52A8\u91CD\u8BD5...`;case "retryable_http":return "The request will be automatically retried.";case "retryable_stream":return "\u7F51\u7EDC\u8FDE\u63A5\u4E2D\u65AD\uFF0C\u6B63\u5728\u81EA\u52A8\u91CD\u8FDE...";case "retryable_network":return "\u7F51\u7EDC\u8FDE\u63A5\u5F02\u5E38\uFF0C\u6B63\u5728\u81EA\u52A8\u91CD\u8BD5...";case "fatal_auth":return "Please check your API key and ensure it has the necessary permissions.";case "fatal_limit":return "You have reached your usage limit. Please check your billing settings or wait for the limit to reset.";case "fatal_context":return "The conversation is too long. Please start a new conversation or use /compact to summarize history.";case "fatal_invalid":return "Please check your request parameters and try again.";case "tool_truncated":return "The tool call was truncated. Please use edit_file with smaller, targeted changes instead of rewriting entire files.";case "tool_json_invalid":return "The tool arguments were invalid. The LLM will retry with corrected parameters.";case "tool_timeout":return "The tool execution timed out. Please try again with a smaller operation.";case "tool_denied":return "The tool call was denied. You can manually approve or adjust permissions.";default:return "An unexpected error occurred. Please try again."}}var Jt={requestMaxRetries:10,streamMaxRetries:5,toolMaxRetries:2,initialDelayMs:1e3,backoffFactor:2,maxDelayMs:3e4,jitterRange:.2,streamIdleTimeoutMs:3e5};function is(a,e){return {...Jt,...a,...e?.requestMaxRetries!==void 0&&{requestMaxRetries:e.requestMaxRetries},...e?.streamMaxRetries!==void 0&&{streamMaxRetries:e.streamMaxRetries},...e?.streamIdleTimeoutMs!==void 0&&{streamIdleTimeoutMs:e.streamIdleTimeoutMs}}}var rs={openai:{requestMaxRetries:4,streamMaxRetries:5,streamIdleTimeoutMs:3e5},anthropic:{requestMaxRetries:4,streamMaxRetries:5,streamIdleTimeoutMs:3e5},yunwu:{requestMaxRetries:3,streamMaxRetries:10,streamIdleTimeoutMs:9e4},azure:{requestMaxRetries:4,streamMaxRetries:5,streamIdleTimeoutMs:6e5},proxy:{requestMaxRetries:10,streamMaxRetries:10,streamIdleTimeoutMs:18e4},gemini:{requestMaxRetries:4,streamMaxRetries:5,streamIdleTimeoutMs:3e5}};function mn(a,e){let t=a.toLowerCase();if(t.includes("yunwu"))return rs.yunwu;if(t.includes("azure"))return rs.azure;if(e){let s=e.toLowerCase();if(s.includes("yunwu"))return rs.yunwu;if(s.includes("azure"))return rs.azure;if(!(s.includes("api.anthropic.com")||s.includes("api.openai.com")))return rs.proxy}return t.includes("anthropic")?rs.anthropic:t.includes("gemini")?rs.gemini:rs.openai}var wp=100,Cp=200,Sp=0;var fr=class extends Error{constructor(e){super(e),this.name="GuardrailTripwireTriggered";}},gn=class extends fr{guardrail_result;constructor(e){let t=`Input guardrail "${e.guardrail.name}" triggered: ${e.output.output_info?.reason||"Safety check failed"}`;super(t),this.name="InputGuardrailTripwireTriggered",this.guardrail_result=e;}getDetails(){return {guardrail_name:this.guardrail_result.guardrail.name,execution_time_ms:this.guardrail_result.execution_time_ms,output_info:this.guardrail_result.output.output_info}}},hn=class extends fr{guardrail_result;blocked_output;constructor(e){let t=`Output guardrail "${e.guardrail.name}" triggered: ${e.output.output_info?.reason||"Output safety check failed"}`;super(t),this.name="OutputGuardrailTripwireTriggered",this.guardrail_result=e,this.blocked_output=e.agent_output;}getDetails(){return {guardrail_name:this.guardrail_result.guardrail.name,execution_time_ms:this.guardrail_result.execution_time_ms,output_info:this.guardrail_result.output.output_info,blocked_output:this.blocked_output}}},yt=class extends fr{guardrail_result;constructor(e){let t=`Tool guardrail "${e.guardrail.name}" triggered: ${e.output.output_info?.reason||"Tool safety check failed"}`;super(t),this.name="ToolGuardrailTripwireTriggered",this.guardrail_result=e;}getDetails(){return {guardrail_name:this.guardrail_result.guardrail.name,execution_time_ms:this.guardrail_result.execution_time_ms,output_info:this.guardrail_result.output.output_info,behavior:this.guardrail_result.output.behavior}}};var Es=class{static async runInputGuardrails(e,t,s,n){if(e.length===0)return [];let r=e.map(async i=>{let o=Date.now();try{let l=await i.guardrail_function(t,s,n),c={guardrail:i,output:l,execution_time_ms:Date.now()-o};if(l.tripwire_triggered)throw new gn(c);return c}catch(l){if(l instanceof gn)throw l;let c={guardrail:i,output:{tripwire_triggered:true,output_info:{error:l instanceof Error?l.message:String(l),reason:"Guardrail execution failed"}},execution_time_ms:Date.now()-o};throw new gn(c)}});return await Promise.all(r)}static async runOutputGuardrails(e,t,s,n){if(e.length===0)return [];let r=e.map(async i=>{let o=Date.now();try{let l=await i.guardrail_function(t,s,n),c={guardrail:i,agent_output:n,output:l,execution_time_ms:Date.now()-o};if(l.tripwire_triggered)throw new hn(c);return c}catch(l){if(l instanceof hn)throw l;let c={guardrail:i,agent_output:n,output:{tripwire_triggered:true,output_info:{error:l instanceof Error?l.message:String(l),reason:"Guardrail execution failed"}},execution_time_ms:Date.now()-o};throw new hn(c)}});return await Promise.all(r)}static async runToolInputGuardrails(e,t){let s=[];for(let n of e){let r=Date.now();try{let i=await n.guardrail_function(t),o={guardrail:n,output:i,execution_time_ms:Date.now()-r};if(s.push(o),i.behavior.type==="raise_exception")throw new yt(o);if(i.behavior.type==="reject_content")return {results:s,should_execute:!1,rejection_message:i.behavior.message}}catch(i){if(i instanceof yt)throw i;let o={guardrail:n,output:{output_info:{error:i instanceof Error?i.message:String(i)},behavior:{type:"raise_exception"}},execution_time_ms:Date.now()-r};throw new yt(o)}}return {results:s,should_execute:true}}static async runToolOutputGuardrails(e,t){let s=[];for(let n of e){let r=Date.now();try{let i=await n.guardrail_function(t),o={guardrail:n,output:i,execution_time_ms:Date.now()-r};if(s.push(o),i.behavior.type==="raise_exception")throw new yt(o);if(i.behavior.type==="reject_content")return {results:s,should_use_output:!1,replacement_message:i.behavior.message}}catch(i){if(i instanceof yt)throw i;let o={guardrail:n,output:{output_info:{error:i instanceof Error?i.message:String(i)},behavior:{type:"raise_exception"}},execution_time_ms:Date.now()-r};throw new yt(o)}}return {results:s,should_use_output:true}}};var kp=null,xp=false;function yr(){if(!xp&&(xp=true,typeof process<"u"&&process.env&&!process.env.NEOX_UI_MODE))try{Promise.resolve().then(()=>(W(),Zc)).then(a=>{kp=a.cliLogger;}).catch(()=>{});}catch{}return kp}var Tp=new WeakMap,kl=null;function _p(){return {writtenFiles:new Map,editedFiles:new Map,editDetails:new Map,fileReadCache:new Map,toolCallHistory:[],createdAt:Date.now()}}function Rp(a){if(a){let e=Tp.get(a);return e?process.env.CLI_DEBUG==="1"&&yr()?.debug("SESSION",`Retrieved EXISTING SessionState for context: ${Object.keys(a).join(",")}, history: ${e.toolCallHistory.length}`):(e=_p(),Tp.set(a,e),process.env.CLI_DEBUG==="1"&&yr()?.debug("SESSION",`Created NEW SessionState for context: ${Object.keys(a).join(",")}`)),e}return kl||(kl=_p()),kl}function xl(a,e,t,s){let n=Rp(a);if(process.env.CLI_DEBUG==="1"){let r=yr();r?.debug("SESSION","recordToolCall called:"),r?.debug("SESSION",` - tool: ${e}`),r?.debug("SESSION",` - success: ${s}`),r?.debug("SESSION",` - context exists: ${!!a}`),r?.debug("SESSION",` - context identity: ${a?Object.keys(a).join(","):"none"}`),r?.debug("SESSION",` - history length before: ${n.toolCallHistory.length}`);}n.toolCallHistory.push({name:e,args:t,timestamp:Date.now(),success:s}),process.env.CLI_DEBUG==="1"&&yr()?.debug("SESSION",` - history length after: ${n.toolCallHistory.length}`),n.toolCallHistory.length>100&&n.toolCallHistory.shift();}function Ap(a,e=10){let t=Rp(a);if(process.env.CLI_DEBUG==="1"){let s=yr();s?.debug("SESSION","getRecentToolCalls called:"),s?.debug("SESSION",` - context exists: ${!!a}`),s?.debug("SESSION",` - context identity: ${a?Object.keys(a).join(","):"none"}`),s?.debug("SESSION",` - total history length: ${t.toolCallHistory.length}`),s?.debug("SESSION",` - limit: ${e}`),s?.debug("SESSION",` - returning ${Math.min(t.toolCallHistory.length,e)} calls`);}return t.toolCallHistory.slice(-e)}var wv=fileURLToPath(import.meta.url),_l=dirname(wv),Rl=class{logDir;enabled;consoleEnabled;constructor(){this.logDir=this.getLogDirectory(),this.enabled=process.env.MARKOR_TRACING==="1",this.consoleEnabled=process.env.CLI_DEBUG_CONSOLE==="1";try{this.initLogDir(),this.consoleEnabled&&console.log("[Logger] Initialized at:",this.logDir);}catch(e){console.error("[Logger] Failed to initialize:",e.message),this.enabled=false;}}setEnabled(e){this.enabled=e;}getLogDirectory(){if(_l.includes(".asar")||_l.includes("app.asar")){try{if(typeof process<"u"&&process.type==="browser"){let e=process.env.ELECTRON_USER_DATA;if(e)return se__default.join(e,"logs")}}catch{}return se__default.join(Dn__default.tmpdir(),"neox-logs")}return se__default.join(_l,"../../logs")}initLogDir(){try{Me__default.existsSync(this.logDir)||Me__default.mkdirSync(this.logDir,{recursive:!0});}catch(e){let t=e;t.code==="EACCES"||t.code==="EPERM"?this.enabled=false:(console.warn(`[Logger] Warning: Cannot create log directory: ${t.message}`),this.enabled=false);}}getLogFile(e){let t=new Date().toISOString().split("T")[0];return se__default.join(this.logDir,`${e}-${t}.log`)}write(e,t){if(!this.enabled)return;let s=new Date().toISOString(),n=typeof t=="string"?{message:t}:t||{},r=this.safeStringify({timestamp:s,...n})+`
1056
+ \u26A0\uFE0F IMPORTANT: Now execute the above instructions step by step. Do not ask for confirmation unless the instructions explicitly require it.`:`\u274C Skill execution failed: ${i.error}`}},fp=[Pb,$b,Gb,Ub,Wb,Fb,jb,Bb,Hb,Jb,Kb,Vb,Yb,Xb,ev,tv,sv,qb,zb,xu,nv,av,da,pa,ma,Ou,lv,Zd,cv];async function As(a,e){e&&mp(e);let t=e?.capabilities??Ue.capabilities,s=Le(),n=[...fp];if(a&&n.push(Lu(a)),s.webSearch?.enabled&&n.push(Ia),s.javaDebug?.enabled)try{let c=await Oa(s.javaDebug?.jarPath);n.push(...c),we.info("TOOLS",`Java Debug \u5DE5\u5177\u5DF2\u542F\u7528 (${c.length} \u4E2A\u5DE5\u5177)`);}catch(c){we.error("TOOLS",`Java Debug \u5DE5\u5177\u52A0\u8F7D\u5931\u8D25: ${c.message}`),we.error("TOOLS","\u63D0\u793A: \u8FD0\u884C npm run setup-java-debug \u81EA\u52A8\u4E0B\u8F7D JAR \u6587\u4EF6");}if(s.smartRead?.enabled!==false)try{let c=cl(a);n.push(...c),we.info("TOOLS",`readfile \u5DE5\u5177\u5DF2\u542F\u7528 (${c.length} \u4E2A\u5DE5\u5177)`);}catch(c){we.error("TOOLS",`readfile \u5DE5\u5177\u52A0\u8F7D\u5931\u8D25: ${c.message}`);}let r=typeof process<"u"&&process.type==="renderer";t?.terminal&&r&&n.push(...ni()),t?.editor&&r&&n.push(...ri());let i=Tb(n,t),o=s.enabledTools||{},l=i.filter(c=>o[c.name]!==false);return sp(l)}function Gi(a){return {output_info:a,behavior:{type:"allow"}}}function yp(a,e){return {output_info:e,behavior:{type:"reject_content",message:a}}}function uv(a){let e=a.match(/Error\s+(?:code\s+)?(\d{3})/i);if(e)return e[1];let t=a.match(/(\d{3}):\s*([^<\n]+)/);return t?t[1]:null}function dv(a){let e=a.match(/<title>[^|]*\|\s*\d{3}:\s*([^<]+)<\/title>/i);if(e)return e[1].trim();let t=a.match(/<h1[^>]*>(?:<[^>]+>)*([^<]+?(?:\s+\d{3})?)<\/(?:[^>]+>)*<\/h1>/i);if(t)return t[1].replace(/Error code\s+\d{3}/i,"").trim();let s=a.match(/Error\s+code\s+(\d{3})/i);if(s){let r=s[1];return {502:"Bad gateway",503:"Service unavailable",504:"Gateway timeout",520:"Unknown error",521:"Web server is down",522:"Connection timed out",523:"Origin is unreachable",524:"A timeout occurred"}[r]||"Server error"}let n=a.match(/<span[^>]*class="inline-block"[^>]*>([^<]+)<\/span>/i);return n?n[1].trim():null}function pv(a){let e=a.match(/truncate[^>]*>([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})<\/span>/);if(e)return e[1];let t=a.match(/<title>([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/);return t?t[1]:null}function hr(a){return a.trim().startsWith("<!DOCTYPE html")||a.trim().startsWith("<html")||/<html[^>]*>/i.test(a)}function mv(a){let e=a.match(/^data:\s*(\{.*\})/m);return e?e[1]:null}function Es(a,e){let t=mv(a);if(t)try{let i=JSON.parse(t);if(i.error){let o=i.error,l=o.type||o.code||(e?`HTTP_${e}`:"API_ERROR"),c=o.message||"API error",u;if(o.type==="usage_limit_reached"){let d=o.resets_at?new Date(o.resets_at*1e3).toLocaleString():void 0,p=o.resets_in_seconds;if(p){let h=Math.floor(p/3600),g=Math.floor(p%3600/60);u=`Usage limit reached (${o.plan_type||"unknown"} plan). Resets in ${h}h ${g}m.`;}else d&&(u=`Usage limit reached (${o.plan_type||"unknown"} plan). Resets at ${d}.`);}return {code:l,message:c,detail:u}}}catch{}if(a.trim().startsWith("{"))try{let i=JSON.parse(a);if(i.error){let o=i.error;return {code:o.type||o.code||(e?`HTTP_${e}`:"API_ERROR"),message:o.message||"API error"}}}catch{}if(hr(a)){let i=uv(a)||String(e||"UNKNOWN"),o=dv(a)||"Server error",l=pv(a),c;return l&&(l.includes("cloudflare")?c=`The server (${l}) is protected by Cloudflare but is not responding.`:c=`The API server (${l}) is not responding. This may be a temporary issue with your API provider.`),{code:`HTTP_${i}`,message:o,detail:c}}let s=a.match(/OpenAI.*error:\s*(\d+)\s*-\s*(.*)/i);if(s){let i=s[1],o=s[2];if(hr(o)){let l=Es(o,parseInt(i,10));return {code:l.code,message:l.message,detail:l.detail}}return o=o.trim(),o.length>200&&(o=o.slice(0,200)+"..."),{code:`HTTP_${i}`,message:o}}let n=a.match(/Anthropic.*error:\s*(\d+)\s*-\s*(.*)/i);if(n){let i=n[1],o=n[2].trim();return o.length>200&&(o=o.slice(0,200)+"..."),{code:`HTTP_${i}`,message:o}}if(a.includes("ECONNREFUSED"))return {code:"NETWORK_ERROR",message:"Connection refused",detail:"Unable to connect to the API server. Please check your network connection."};if(a.includes("ETIMEDOUT")||a.includes("timeout"))return {code:"TIMEOUT",message:"Connection timeout",detail:"The request took too long to complete. Please try again."};if(a.includes("ENOTFOUND"))return {code:"DNS_ERROR",message:"Server not found",detail:"Could not resolve the API server address. Please check your API base URL."};if(/context.*window.*exceeded/i.test(a)||/maximum.*context.*length/i.test(a))return {code:"CONTEXT_EXCEEDED",message:"Context window exceeded",detail:"The conversation is too long. Please start a new session or use /compact."};if(/rate.*limit/i.test(a)||a.includes("429"))return {code:"RATE_LIMIT",message:"Rate limit exceeded",detail:"Too many requests. Please wait a moment before trying again."};if(a.includes("401")||/unauthorized/i.test(a))return {code:"AUTH_ERROR",message:"Authentication failed",detail:"Please check your API key in settings."};if(a.includes("403")||/forbidden/i.test(a))return {code:"FORBIDDEN",message:"Access denied",detail:"Your API key does not have permission for this operation."};let r=a;return r=r.replace(/^Error:\s*/i,""),r=r.replace(/^Request failed with status code\s+\d+:\s*/i,""),r.length>300&&(r=r.slice(0,300)+"..."),{code:e?`HTTP_${e}`:"UNKNOWN",message:r}}var Ce=class a extends Error{category;code;retryable;retryAfter;context;originalError;constructor(e){super(e.message),this.name="NeoxError",this.category=e.category,this.code=e.code,this.retryable=e.retryable,this.retryAfter=e.retryAfter,this.context=e.context,this.originalError=e.originalError,Error.captureStackTrace&&Error.captureStackTrace(this,a);}withContext(e){return new a({...this,context:{...this.context,...e}})}toJSON(){return {name:this.name,category:this.category,code:this.code,message:this.message,retryable:this.retryable,retryAfter:this.retryAfter,context:this.context,stack:this.stack}}};function Ht(a){if(!a)return;if(typeof a!="string")return typeof a=="number"&&a>0?Math.ceil(a*1e3):void 0;let e=a.trim(),t=e.match(/^(\d+(?:\.\d+)?)\s*ms$/i);if(t){let r=parseFloat(t[1]);return r>0?Math.ceil(r):void 0}let s=parseFloat(e);if(!isNaN(s)&&s>0)return Math.ceil(s*1e3);let n=new Date(e);if(!isNaN(n.getTime())){let r=n.getTime()-Date.now();return r>0?Math.ceil(r):void 0}}function gv(a){switch(a){case 502:return 3e3;case 503:return 5e3;case 504:return 2e3;default:return 2e3}}function Ui(a){if(!a)return;let e=a["retry-after"]||a["Retry-After"];if(e){let r=Ht(e);if(r)return r}let t=a["retry-after-ms"]||a["Retry-After-Ms"];if(t){let r=parseFloat(t);if(!isNaN(r)&&r>0)return Math.ceil(r)}let s=a["x-ratelimit-reset-requests"];if(s){let r=Ht(s);if(r)return r}let n=a["anthropic-ratelimit-requests-reset"];if(n){let r=new Date(n);if(!isNaN(r.getTime())){let i=r.getTime()-Date.now();return i>0?Math.ceil(i):void 0}}}function Sl(a){return typeof a=="object"&&a!==null&&"message"in a&&typeof a.message=="string"}function bp(a){return [/context.*window.*exceeded/i,/context.*length.*exceeded/i,/maximum.*context.*length/i,/token.*limit.*exceeded/i,/input.*too.*long/i].some(t=>t.test(a))}function hv(a){return [/quota.*exceeded/i,/usage.*limit/i,/rate.*limit/i,/insufficient.*quota/i,/billing/i].some(t=>t.test(a))}function fv(a){if(a){if(typeof a=="string")return a;if(typeof a=="object"){if(typeof a.error=="string")return a.error;if(a.error?.message)return a.error.message;if(a.message)return a.message}}}function ft(a){if(a instanceof Ce)return a;let e=a instanceof Error?a.message:String(a),t=a instanceof Error?a:void 0,s=Sl(a)?a:void 0,r=(s?fv(s.response?.data):void 0)||e;if(s?.response?.status){let i=s.response.status,o=Ui(s.response.headers),l=s.response.headers?.["x-request-id"]||s.response.headers?.["cf-ray"];if(i===429){let c=s.response.data,u=c?.error?.type;return u==="usage_limit_reached"||u==="usage_not_included"?new Ce({category:"fatal_limit",code:"USAGE_LIMIT_REACHED",message:c?.error?.message||"Usage limit reached",retryable:false,context:{httpStatus:i,requestId:l},originalError:t}):new Ce({category:"retryable_http",code:`HTTP_${i}`,message:r,retryable:true,retryAfter:o,context:{httpStatus:i,requestId:l},originalError:t})}if(i===502||i===503||i===504){let c=r;if(hr(r)){let d=Es(r,i);c=d.message,d.detail&&(c+=`
1057
+ `+d.detail);}let u=o||gv(i);return new Ce({category:"retryable_rate_limit",code:`PROXY_${i}`,message:c||`API \u4EE3\u7406\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528 (${i})`,retryable:true,retryAfter:u,context:{httpStatus:i,requestId:l,rawMessage:r},originalError:t})}if(i>=500){let c=r;if(hr(r)){let u=Es(r,i);c=u.message,u.detail&&(c+=`
1058
+ `+u.detail);}return new Ce({category:"retryable_http",code:`HTTP_${i}`,message:c,retryable:true,retryAfter:o,context:{httpStatus:i,requestId:l,rawMessage:r},originalError:t})}if(i===401)return new Ce({category:"fatal_auth",code:"UNAUTHORIZED",message:r||"Authentication failed. Please check your API key.",retryable:false,context:{httpStatus:i,requestId:l},originalError:t});if(i===403)return new Ce({category:"fatal_auth",code:"FORBIDDEN",message:r||"Access denied. Please check your API permissions.",retryable:false,context:{httpStatus:i,requestId:l},originalError:t});if(i===400)return bp(e)?new Ce({category:"fatal_context",code:"CONTEXT_WINDOW_EXCEEDED",message:"Context window exceeded. Please start a new conversation or clear history.",retryable:false,context:{httpStatus:i,requestId:l},originalError:t}):r.includes("Upstream request failed")||r.includes("upstream")||r.includes("gateway")?new Ce({category:"retryable_http",code:"PROXY_UPSTREAM_FAILED",message:r||"Proxy upstream request failed",retryable:true,context:{httpStatus:i,requestId:l},originalError:t}):new Ce({category:"fatal_invalid",code:"INVALID_REQUEST",message:r,retryable:false,context:{httpStatus:i,requestId:l},originalError:t});if(i>=400&&i<500)return new Ce({category:"fatal_invalid",code:`HTTP_${i}`,message:r,retryable:false,context:{httpStatus:i,requestId:l},originalError:t})}if(Sl(a)){let i=a.code,o=a.name;if(i==="ERR_CANCELED"||o==="CanceledError"||o==="AbortError")return new Ce({category:"canceled",code:"CANCELED",message:"Request was canceled",retryable:false,originalError:t});if(i==="ECONNREFUSED"||i==="ENOTFOUND"||i==="ECONNRESET")return new Ce({category:"retryable_network",code:i,message:`Network error: ${e}`,retryable:true,originalError:t});if(i==="ETIMEDOUT"||i==="ESOCKETTIMEDOUT")return new Ce({category:"retryable_network",code:"TIMEOUT",message:`Connection timeout: ${e}`,retryable:true,originalError:t})}return a instanceof Error&&a.name==="AbortError"?new Ce({category:"canceled",code:"CANCELED",message:"Request was canceled",retryable:false,originalError:a}):Sl(a)&&a.code==="STREAM_INCOMPLETE"?new Ce({category:"retryable_stream",code:"STREAM_INCOMPLETE",message:`\u7F51\u7EDC\u4E2D\u65AD: ${e}`,retryable:true,context:{toolName:a.toolName,rawMessage:e},originalError:t}):a?.code==="STREAM_TIMEOUT"?new Ce({category:"retryable_stream",code:"STREAM_TIMEOUT",message:`API \u4EE3\u7406\u54CD\u5E94\u8D85\u65F6: ${e}`,retryable:true,context:{rawMessage:e},originalError:t}):e.includes("stream")||e.includes("Stream")||e.includes("SSE")||e.includes("disconnected")||e.includes("incomplete")||e.includes("message_stop")?new Ce({category:"retryable_stream",code:"STREAM_ERROR",message:`\u7F51\u7EDC\u4E2D\u65AD: ${e}`,retryable:true,originalError:t}):bp(e)?new Ce({category:"fatal_context",code:"CONTEXT_WINDOW_EXCEEDED",message:"Context window exceeded. Please start a new conversation or clear history.",retryable:false,originalError:t}):hv(e)?new Ce({category:"fatal_limit",code:"QUOTA_EXCEEDED",message:e,retryable:false,originalError:t}):new Ce({category:"internal",code:"UNKNOWN",message:e,retryable:false,originalError:t})}function vp(a,e,t){let s=e||"";return s.trim().endsWith("}")?(a==="write_file"||a==="edit_file")&&!s.includes('"content"')?new Ce({category:"tool_truncated",code:"TOOL_MISSING_CONTENT",message:"The content field is missing (likely truncated)",retryable:false,context:{toolName:a,receivedLength:s.length,rawMessage:t.message},originalError:t}):t.message.includes("JSON")||t.message.includes("Unexpected")||t.message.includes("parse")?new Ce({category:"tool_json_invalid",code:"JSON_PARSE_ERROR",message:`Invalid JSON in tool arguments: ${t.message}`,retryable:true,context:{toolName:a,receivedLength:s.length,rawMessage:t.message},originalError:t}):new Ce({category:"tool_json_invalid",code:"TOOL_ERROR",message:t.message,retryable:true,context:{toolName:a},originalError:t}):new Ce({category:"tool_truncated",code:"TOOL_ARGS_TRUNCATED",message:"Tool arguments were truncated during streaming",retryable:false,context:{toolName:a,receivedLength:s.length,rawMessage:t.message},originalError:t})}function Wi(a){switch(a.category){case "retryable_rate_limit":return `API \u4EE3\u7406\u901F\u7387\u9650\u5236\uFF0C${a.retryAfter?Math.ceil(a.retryAfter/1e3):3} \u79D2\u540E\u81EA\u52A8\u91CD\u8BD5...`;case "retryable_http":return "The request will be automatically retried.";case "retryable_stream":return "\u7F51\u7EDC\u8FDE\u63A5\u4E2D\u65AD\uFF0C\u6B63\u5728\u81EA\u52A8\u91CD\u8FDE...";case "retryable_network":return "\u7F51\u7EDC\u8FDE\u63A5\u5F02\u5E38\uFF0C\u6B63\u5728\u81EA\u52A8\u91CD\u8BD5...";case "fatal_auth":return "Please check your API key and ensure it has the necessary permissions.";case "fatal_limit":return "You have reached your usage limit. Please check your billing settings or wait for the limit to reset.";case "fatal_context":return "The conversation is too long. Please start a new conversation or use /compact to summarize history.";case "fatal_invalid":return "Please check your request parameters and try again.";case "tool_truncated":return "The tool call was truncated. Please use edit_file with smaller, targeted changes instead of rewriting entire files.";case "tool_json_invalid":return "The tool arguments were invalid. The LLM will retry with corrected parameters.";case "tool_timeout":return "The tool execution timed out. Please try again with a smaller operation.";case "tool_denied":return "The tool call was denied. You can manually approve or adjust permissions.";default:return "An unexpected error occurred. Please try again."}}var Jt={requestMaxRetries:10,streamMaxRetries:5,toolMaxRetries:2,initialDelayMs:1e3,backoffFactor:2,maxDelayMs:3e4,jitterRange:.2,streamIdleTimeoutMs:3e5};function is(a,e){return {...Jt,...a,...e?.requestMaxRetries!==void 0&&{requestMaxRetries:e.requestMaxRetries},...e?.streamMaxRetries!==void 0&&{streamMaxRetries:e.streamMaxRetries},...e?.streamIdleTimeoutMs!==void 0&&{streamIdleTimeoutMs:e.streamIdleTimeoutMs}}}var rs={openai:{requestMaxRetries:4,streamMaxRetries:5,streamIdleTimeoutMs:3e5},anthropic:{requestMaxRetries:4,streamMaxRetries:5,streamIdleTimeoutMs:3e5},yunwu:{requestMaxRetries:3,streamMaxRetries:10,streamIdleTimeoutMs:9e4},azure:{requestMaxRetries:4,streamMaxRetries:5,streamIdleTimeoutMs:6e5},proxy:{requestMaxRetries:10,streamMaxRetries:10,streamIdleTimeoutMs:18e4},gemini:{requestMaxRetries:4,streamMaxRetries:5,streamIdleTimeoutMs:3e5}};function mn(a,e){let t=a.toLowerCase();if(t.includes("yunwu"))return rs.yunwu;if(t.includes("azure"))return rs.azure;if(e){let s=e.toLowerCase();if(s.includes("yunwu"))return rs.yunwu;if(s.includes("azure"))return rs.azure;if(!(s.includes("api.anthropic.com")||s.includes("api.openai.com")))return rs.proxy}return t.includes("anthropic")?rs.anthropic:t.includes("gemini")?rs.gemini:rs.openai}var wp=100,Cp=200,Sp=0;var fr=class extends Error{constructor(e){super(e),this.name="GuardrailTripwireTriggered";}},gn=class extends fr{guardrail_result;constructor(e){let t=`Input guardrail "${e.guardrail.name}" triggered: ${e.output.output_info?.reason||"Safety check failed"}`;super(t),this.name="InputGuardrailTripwireTriggered",this.guardrail_result=e;}getDetails(){return {guardrail_name:this.guardrail_result.guardrail.name,execution_time_ms:this.guardrail_result.execution_time_ms,output_info:this.guardrail_result.output.output_info}}},hn=class extends fr{guardrail_result;blocked_output;constructor(e){let t=`Output guardrail "${e.guardrail.name}" triggered: ${e.output.output_info?.reason||"Output safety check failed"}`;super(t),this.name="OutputGuardrailTripwireTriggered",this.guardrail_result=e,this.blocked_output=e.agent_output;}getDetails(){return {guardrail_name:this.guardrail_result.guardrail.name,execution_time_ms:this.guardrail_result.execution_time_ms,output_info:this.guardrail_result.output.output_info,blocked_output:this.blocked_output}}},yt=class extends fr{guardrail_result;constructor(e){let t=`Tool guardrail "${e.guardrail.name}" triggered: ${e.output.output_info?.reason||"Tool safety check failed"}`;super(t),this.name="ToolGuardrailTripwireTriggered",this.guardrail_result=e;}getDetails(){return {guardrail_name:this.guardrail_result.guardrail.name,execution_time_ms:this.guardrail_result.execution_time_ms,output_info:this.guardrail_result.output.output_info,behavior:this.guardrail_result.output.behavior}}};var Is=class{static async runInputGuardrails(e,t,s,n){if(e.length===0)return [];let r=e.map(async i=>{let o=Date.now();try{let l=await i.guardrail_function(t,s,n),c={guardrail:i,output:l,execution_time_ms:Date.now()-o};if(l.tripwire_triggered)throw new gn(c);return c}catch(l){if(l instanceof gn)throw l;let c={guardrail:i,output:{tripwire_triggered:true,output_info:{error:l instanceof Error?l.message:String(l),reason:"Guardrail execution failed"}},execution_time_ms:Date.now()-o};throw new gn(c)}});return await Promise.all(r)}static async runOutputGuardrails(e,t,s,n){if(e.length===0)return [];let r=e.map(async i=>{let o=Date.now();try{let l=await i.guardrail_function(t,s,n),c={guardrail:i,agent_output:n,output:l,execution_time_ms:Date.now()-o};if(l.tripwire_triggered)throw new hn(c);return c}catch(l){if(l instanceof hn)throw l;let c={guardrail:i,agent_output:n,output:{tripwire_triggered:true,output_info:{error:l instanceof Error?l.message:String(l),reason:"Guardrail execution failed"}},execution_time_ms:Date.now()-o};throw new hn(c)}});return await Promise.all(r)}static async runToolInputGuardrails(e,t){let s=[];for(let n of e){let r=Date.now();try{let i=await n.guardrail_function(t),o={guardrail:n,output:i,execution_time_ms:Date.now()-r};if(s.push(o),i.behavior.type==="raise_exception")throw new yt(o);if(i.behavior.type==="reject_content")return {results:s,should_execute:!1,rejection_message:i.behavior.message}}catch(i){if(i instanceof yt)throw i;let o={guardrail:n,output:{output_info:{error:i instanceof Error?i.message:String(i)},behavior:{type:"raise_exception"}},execution_time_ms:Date.now()-r};throw new yt(o)}}return {results:s,should_execute:true}}static async runToolOutputGuardrails(e,t){let s=[];for(let n of e){let r=Date.now();try{let i=await n.guardrail_function(t),o={guardrail:n,output:i,execution_time_ms:Date.now()-r};if(s.push(o),i.behavior.type==="raise_exception")throw new yt(o);if(i.behavior.type==="reject_content")return {results:s,should_use_output:!1,replacement_message:i.behavior.message}}catch(i){if(i instanceof yt)throw i;let o={guardrail:n,output:{output_info:{error:i instanceof Error?i.message:String(i)},behavior:{type:"raise_exception"}},execution_time_ms:Date.now()-r};throw new yt(o)}}return {results:s,should_use_output:true}}};var kp=null,xp=false;function yr(){if(!xp&&(xp=true,typeof process<"u"&&process.env&&!process.env.NEOX_UI_MODE))try{Promise.resolve().then(()=>(W(),Zc)).then(a=>{kp=a.cliLogger;}).catch(()=>{});}catch{}return kp}var Tp=new WeakMap,kl=null;function _p(){return {writtenFiles:new Map,editedFiles:new Map,editDetails:new Map,fileReadCache:new Map,toolCallHistory:[],createdAt:Date.now()}}function Rp(a){if(a){let e=Tp.get(a);return e?process.env.CLI_DEBUG==="1"&&yr()?.debug("SESSION",`Retrieved EXISTING SessionState for context: ${Object.keys(a).join(",")}, history: ${e.toolCallHistory.length}`):(e=_p(),Tp.set(a,e),process.env.CLI_DEBUG==="1"&&yr()?.debug("SESSION",`Created NEW SessionState for context: ${Object.keys(a).join(",")}`)),e}return kl||(kl=_p()),kl}function xl(a,e,t,s){let n=Rp(a);if(process.env.CLI_DEBUG==="1"){let r=yr();r?.debug("SESSION","recordToolCall called:"),r?.debug("SESSION",` - tool: ${e}`),r?.debug("SESSION",` - success: ${s}`),r?.debug("SESSION",` - context exists: ${!!a}`),r?.debug("SESSION",` - context identity: ${a?Object.keys(a).join(","):"none"}`),r?.debug("SESSION",` - history length before: ${n.toolCallHistory.length}`);}n.toolCallHistory.push({name:e,args:t,timestamp:Date.now(),success:s}),process.env.CLI_DEBUG==="1"&&yr()?.debug("SESSION",` - history length after: ${n.toolCallHistory.length}`),n.toolCallHistory.length>100&&n.toolCallHistory.shift();}function Ap(a,e=10){let t=Rp(a);if(process.env.CLI_DEBUG==="1"){let s=yr();s?.debug("SESSION","getRecentToolCalls called:"),s?.debug("SESSION",` - context exists: ${!!a}`),s?.debug("SESSION",` - context identity: ${a?Object.keys(a).join(","):"none"}`),s?.debug("SESSION",` - total history length: ${t.toolCallHistory.length}`),s?.debug("SESSION",` - limit: ${e}`),s?.debug("SESSION",` - returning ${Math.min(t.toolCallHistory.length,e)} calls`);}return t.toolCallHistory.slice(-e)}var wv=fileURLToPath(import.meta.url),_l=dirname(wv),Rl=class{logDir;enabled;consoleEnabled;constructor(){this.logDir=this.getLogDirectory(),this.enabled=process.env.MARKOR_TRACING==="1",this.consoleEnabled=process.env.CLI_DEBUG_CONSOLE==="1";try{this.initLogDir(),this.consoleEnabled&&console.log("[Logger] Initialized at:",this.logDir);}catch(e){console.error("[Logger] Failed to initialize:",e.message),this.enabled=false;}}setEnabled(e){this.enabled=e;}getLogDirectory(){if(_l.includes(".asar")||_l.includes("app.asar")){try{if(typeof process<"u"&&process.type==="browser"){let e=process.env.ELECTRON_USER_DATA;if(e)return se__default.join(e,"logs")}}catch{}return se__default.join(Dn__default.tmpdir(),"neox-logs")}return se__default.join(_l,"../../logs")}initLogDir(){try{Me__default.existsSync(this.logDir)||Me__default.mkdirSync(this.logDir,{recursive:!0});}catch(e){let t=e;t.code==="EACCES"||t.code==="EPERM"?this.enabled=false:(console.warn(`[Logger] Warning: Cannot create log directory: ${t.message}`),this.enabled=false);}}getLogFile(e){let t=new Date().toISOString().split("T")[0];return se__default.join(this.logDir,`${e}-${t}.log`)}write(e,t){if(!this.enabled)return;let s=new Date().toISOString(),n=typeof t=="string"?{message:t}:t||{},r=this.safeStringify({timestamp:s,...n})+`
1059
1059
  `;if(this.enabled)try{let i=this.getLogFile(e);Me__default.appendFileSync(i,r,"utf-8");}catch(i){(i.code==="EACCES"||i.code==="EPERM")&&(this.enabled=false);}}safeStringify(e){let t=new WeakSet;return JSON.stringify(e,(s,n)=>{if(typeof n=="object"&&n!==null){if(t.has(n))return "[Circular]";t.add(n);}return s==="parser"||s==="socket"||s==="_httpMessage"||s==="req"||s==="res"?"[Omitted]":n&&n.type==="Buffer"&&Array.isArray(n.data)?"[Buffer]":typeof n=="function"?"[Function]":n})}llmRequest(e,t,s,n,r){let i=s.tools?.map(o=>({name:o.name,description:o.description,parameters:o.parameters}));this.write("llm",{type:"REQUEST",provider:e,model:t,url:n,headers:r,messagesCount:s.messages?.length||0,messages:s.messages,toolsCount:s.tools?.length||0,tools:i,temperature:s.temperature});}llmResponse(e,t,s,n){this.write("llm",{type:"RESPONSE",provider:e,duration:`${t}ms`,usage:s,finishReason:n.finish_reason,content:n.content,contentLength:n.content?.length||0,toolCallsCount:n.tool_calls?.length||0,toolCalls:n.tool_calls});}llmError(e,t){let s={type:"ERROR",provider:e,error:t.message,status:t.response?.status};if(t.response?.data)try{let n=t.response.data;typeof n=="string"?s.data=n:typeof n=="object"&&(s.data={error:n.error,message:n.message,type:n.type,code:n.code});}catch{s.data="[Could not serialize response data]";}this.write("llm",s);}agentStart(e){this.write("agent",{type:"START",task:e});}agentIteration(e,t){this.write("agent",{type:"ITERATION",iteration:e,action:t});}agentComplete(e,t,s){this.write("agent",{type:"COMPLETE",iterations:e,toolCalls:t,usage:s});}agentError(e){this.write("agent",{type:"ERROR",error:e});}toolCall(e,t){this.write("tool",{type:"CALL",tool:e,args:t});}toolResult(e,t,s,n){this.write("tool",{type:"RESULT",tool:e,success:t,resultLength:s,duration:`${n}ms`});}toolError(e,t){this.write("tool",{type:"ERROR",tool:e,error:t});}},ge=new Rl;function Ep(a,e){let t=a||"Unknown error",s=t.toLowerCase(),n=e?.providerName?.trim()||"LLM";if(s.includes("timeout")){let r=Math.round((e?.timeoutMs??12e4)/1e3);return [`\u23F1\uFE0F ${n} \u8BF7\u6C42\u8D85\u65F6 (${r}s)\u3002${n} \u63A5\u53E3\u5F53\u524D\u53EF\u80FD\u4E0D\u7A33\u5B9A\uFF0C\u53EF\u4EE5\u7A0D\u540E\u91CD\u8BD5\u6216\u5207\u6362\u5176\u4ED6\u6A21\u578B\u3002`,"\u5982\u679C\u591A\u6B21\u8D85\u65F6\u8BF7\u544A\u8BC9\u6211\u4EEC\uFF0C\u65B9\u4FBF\u6392\u67E5\u3002",`\u539F\u59CB\u9519\u8BEF\uFF1A${t}`].join(`
1060
1060
  `)}return t}var Sv=new Cv({allErrors:true,strict:false});function kv(a){let e=(a||"").trim();if(e.startsWith("```")){let t=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(t&&t[1])return t[1].trim()}return e}function xv(a){return !a||a.length===0?[]:a.map(e=>{let t=e.instancePath||e.schemaPath||"";return e.keyword==="additionalProperties"&&typeof e.params?.additionalProperty=="string"?`${t} should not contain property "${e.params.additionalProperty}"`:`${t} ${e.message||""}`.trim()})}var zi=class{constructor(e){this.definition=e;this.validateFn=Sv.compile(e.schema);}validateFn;get responseFormatPayload(){return {type:"json_schema",json_schema:{name:this.definition.name,schema:this.definition.schema,strict:this.definition.strict??true}}}buildSystemPrompt(){let e=JSON.stringify(this.definition.schema,null,2);return [`You must respond with valid JSON that exactly matches the schema "${this.definition.name}".`,"Do not include explanations, markdown code fences, or additional commentary.","Schema:",e].join(`
1061
1061
 
@@ -1063,7 +1063,7 @@ ${i.output}
1063
1063
  - `+e.errors.join(`
1064
1064
  - `)):e.message&&t.push(`Validation issue: ${e.message}`),t.push("Return ONLY valid minified JSON (no code fences, no commentary) that matches the schema below:",JSON.stringify(this.definition.schema,null,2)),t.join(`
1065
1065
 
1066
- `)}};function El(a,e={}){let{initialDelayMs:t=Jt.initialDelayMs,backoffFactor:s=Jt.backoffFactor,maxDelayMs:n=Jt.maxDelayMs,jitterRange:r=Jt.jitterRange}=e,i=Math.max(0,a-1),o=t*Math.pow(s,i),l=1+(Math.random()*2-1)*r,c=o*l,u=Math.min(c,n);return Math.floor(u)}function os(a,e,t){return a!==void 0&&a>0?a:El(e,t)}function fn(a){return new Promise(e=>setTimeout(e,a))}function Is(a,e){return new Promise((t,s)=>{if(e?.aborted){s(new DOMException("Aborted","AbortError"));return}let n=setTimeout(t,a),r=()=>{clearTimeout(n),s(new DOMException("Aborted","AbortError"));};e?.addEventListener("abort",r,{once:true});let i=()=>{e?.removeEventListener("abort",r);};setTimeout(()=>{i(),t();},a);})}function nt(a){if(a<1e3)return `${a}ms`;let e=a/1e3;return e<60?`${e.toFixed(1)}s`:`${(e/60).toFixed(1)}m`}var Tv={initialDelayMs:3e3,backoffFactor:2.5,maxDelayMs:6e4,jitterRange:.3},_v={initialDelayMs:1e3,backoffFactor:1.5,maxDelayMs:1e4,jitterRange:.2};function Rv(a,e){if(e!==void 0&&e>0){let t=1+Math.random()*.2;return Math.floor(e*t)}return El(a,Tv)}function br(a,e,t){return a==="retryable_rate_limit"?Rv(e,t):a==="retryable_stream"||a==="retryable_network"?El(e,_v):os(t,e)}W();W();var Av=2e3,Ip={Read:"file_read",Write:"file_write",Edit:"file_edit",Glob:"file_search",Grep:"file_search",NotebookEdit:"file_edit",Bash:"bash",BashOutput:"bash",WebFetch:"web_fetch",WebSearch:"web_search",Task:"task"},Ev={file_read:{system:`\u4F60\u662F\u4E00\u4E2A\u4EE3\u7801\u5206\u6790\u52A9\u624B\u3002\u8BF7\u5C06\u6587\u4EF6\u5185\u5BB9\u538B\u7F29\u4E3A\u7B80\u6D01\u6458\u8981\uFF0C\u4FDD\u7559\uFF1A
1066
+ `)}};function El(a,e={}){let{initialDelayMs:t=Jt.initialDelayMs,backoffFactor:s=Jt.backoffFactor,maxDelayMs:n=Jt.maxDelayMs,jitterRange:r=Jt.jitterRange}=e,i=Math.max(0,a-1),o=t*Math.pow(s,i),l=1+(Math.random()*2-1)*r,c=o*l,u=Math.min(c,n);return Math.floor(u)}function os(a,e,t){return a!==void 0&&a>0?a:El(e,t)}function fn(a){return new Promise(e=>setTimeout(e,a))}function Ms(a,e){return new Promise((t,s)=>{if(e?.aborted){s(new DOMException("Aborted","AbortError"));return}let n=setTimeout(t,a),r=()=>{clearTimeout(n),s(new DOMException("Aborted","AbortError"));};e?.addEventListener("abort",r,{once:true});let i=()=>{e?.removeEventListener("abort",r);};setTimeout(()=>{i(),t();},a);})}function nt(a){if(a<1e3)return `${a}ms`;let e=a/1e3;return e<60?`${e.toFixed(1)}s`:`${(e/60).toFixed(1)}m`}var Tv={initialDelayMs:3e3,backoffFactor:2.5,maxDelayMs:6e4,jitterRange:.3},_v={initialDelayMs:1e3,backoffFactor:1.5,maxDelayMs:1e4,jitterRange:.2};function Rv(a,e){if(e!==void 0&&e>0){let t=1+Math.random()*.2;return Math.floor(e*t)}return El(a,Tv)}function br(a,e,t){return a==="retryable_rate_limit"?Rv(e,t):a==="retryable_stream"||a==="retryable_network"?El(e,_v):os(t,e)}W();W();var Av=2e3,Ip={Read:"file_read",Write:"file_write",Edit:"file_edit",Glob:"file_search",Grep:"file_search",NotebookEdit:"file_edit",Bash:"bash",BashOutput:"bash",WebFetch:"web_fetch",WebSearch:"web_search",Task:"task"},Ev={file_read:{system:`\u4F60\u662F\u4E00\u4E2A\u4EE3\u7801\u5206\u6790\u52A9\u624B\u3002\u8BF7\u5C06\u6587\u4EF6\u5185\u5BB9\u538B\u7F29\u4E3A\u7B80\u6D01\u6458\u8981\uFF0C\u4FDD\u7559\uFF1A
1067
1067
  1. \u6587\u4EF6\u7C7B\u578B\u548C\u4E3B\u8981\u529F\u80FD
1068
1068
  2. \u5173\u952E\u7684\u51FD\u6570/\u7C7B/\u63A5\u53E3\u5B9A\u4E49\uFF08\u53EA\u4FDD\u7559\u7B7E\u540D\uFF09
1069
1069
  3. \u91CD\u8981\u7684\u914D\u7F6E\u9879\u6216\u5E38\u91CF
@@ -1192,7 +1192,7 @@ ${w}`,name:"CompressedHistory"},S=Mt(C);l+S<=t&&(o.push({message:C,priority:2,to
1192
1192
 
1193
1193
  ${i}`}],{model:t.model,temperature:.2});return me(o.choices[0]?.message?.content)||null}catch(s){return m.warn("MessageCompressor",`LLM compression failed: ${s.message}`),null}}async compressBatchWithLLM(e,t){if(!t.llmProvider)return null;try{let s=e.map(o=>{let l=o.role==="assistant"?"Assistant":o.role==="user"?"User":o.role==="tool"?"Tool":o.role,c=me(o.content),u=c.length>800?c.slice(0,800)+"...":c;return `[${l}] ${u}`}).join(`
1194
1194
 
1195
- `),r=/[\u4e00-\u9fa5]/.test(s)?vr.systemZh:vr.system,i=await t.llmProvider.chat([{role:"system",content:r},{role:"user",content:vr.user(s)}],{model:t.model,temperature:.3});return me(i.choices[0]?.message?.content)||null}catch(s){return m.warn("MessageCompressor",`Batch LLM compression failed: ${s.message}`),null}}};new yn;var Pv={debug:false,minRecentMessages:15,defaultTokenBudget:1e5,enableLLMCompression:true,llmTimeout:3e4},Hi=class{config;toolCompressor;messageCompressor;llmProvider;model;contextWindow;constructor(e){this.config={...Pv,...e},this.config.debug=this.config.debug||process.env.CLI_DEBUG==="1",this.toolCompressor=new as({debug:this.config.debug}),this.messageCompressor=new yn({debug:this.config.debug,toolCompressor:this.toolCompressor,minRecentMessages:this.config.minRecentMessages});}setLLMProvider(e,t){this.llmProvider=e,this.model=t;}setContextWindow(e){this.contextWindow=e,this.config.debug&&m.info("UnifiedCompressor",`Context window set to: ${e}`);}registerToolCompressor(e){m.info("UnifiedCompressor","Custom tool compressor registered");}setMessageCompressor(e){this.messageCompressor=e,m.info("UnifiedCompressor","Custom message compressor set");}async compressHistory(e,t,s){let n=Date.now(),r=tt(e),i={llmProvider:s?.llmProvider||this.llmProvider,model:s?.model||this.model,tokenBudget:t,contextWindow:s?.contextWindow||this.contextWindow,iteration:s?.iteration,enableLLMCompression:s?.enableLLMCompression??this.config.enableLLMCompression,timeout:s?.timeout??this.config.llmTimeout,signal:s?.signal,debug:this.config.debug};if(this.config.debug&&m.debug("UnifiedCompressor",`\u5F00\u59CB\u538B\u7F29: ${e.length} \u6761\u6D88\u606F, ${r} tokens \u2192 \u9884\u7B97 ${t} tokens`),r<=t){let c=await this.compressLargeMessagesOnly(e,i);return this.config.debug&&m.debug("UnifiedCompressor",`\u5728\u9884\u7B97\u5185\uFF0C\u4EC5\u538B\u7F29\u5927\u6D88\u606F: ${c.savedTokens} tokens \u8282\u7701`),c}let o=await this.messageCompressor.compressMessages(e,i),l=Date.now()-n;return this.config.debug&&m.debug("UnifiedCompressor",`\u538B\u7F29\u5B8C\u6210 (${l}ms): ${o.originalCount} \u2192 ${o.compressedCount} \u6761, ${o.originalTokens} \u2192 ${o.compressedTokens} tokens (\u8282\u7701 ${o.savedTokens} tokens, ${(o.savedTokens/o.originalTokens*100).toFixed(1)}%)`),o}async compressLargeMessagesOnly(e,t){let s=tt(e),n=[],r=0,i=0;for(let l of e)if(Mt(l)>2e3&&l.role!=="system"){let u=await this.messageCompressor.compressMessage(l,t);n.push(u.message),u.usedLLM?r++:u.compressionRatio<1&&i++;}else n.push(l);let o=tt(n);return {messages:n,originalCount:e.length,compressedCount:n.length,originalTokens:s,compressedTokens:o,savedTokens:s-o,stats:{droppedMessages:0,llmCompressedMessages:r,truncatedMessages:i,preservedMessages:e.length-r-i}}}async compressToolResult(e,t,s){let n={llmProvider:s?.llmProvider||this.llmProvider,model:s?.model||this.model,enableLLMCompression:s?.enableLLMCompression??this.config.enableLLMCompression,timeout:s?.timeout??this.config.llmTimeout,debug:this.config.debug};return (await this.toolCompressor.compress(e,t,n)).content}getStats(){return {config:this.config,hasLLMProvider:!!this.llmProvider}}};function Dv(a){return a.replace(/\uFEFF/g,"").replace(/[“”]/g,'"').replace(/[‘’]/g,"'").replace(/,\s*([}\]])/g,"$1").trim()}function Ov(a){let e=a.trim();if(!e)return null;let t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(t?.[1])return t[1].trim();let s=e.indexOf("{"),n=e.lastIndexOf("}");return s>=0&&n>s?e.slice(s,n+1).trim():null}function Mp(a){try{let e=JSON.parse(a);return e&&typeof e=="object"&&!Array.isArray(e)?{ok:!0,value:e}:{ok:!1,error:"arguments should be a JSON object"}}catch(e){return {ok:false,error:e?.message||"invalid JSON"}}}function bn(a){let e=(a||"").trim();if(!e)return {ok:true,args:{},raw:e,normalized:"{}",repaired:false};let t=Mp(e);if(t.ok)return {ok:true,args:t.value,raw:e,normalized:e,repaired:false};let s=Ov(e),n=Dv(s||e),r=Mp(n);return r.ok?{ok:true,args:r.value,raw:e,normalized:n,repaired:n!==e,reason:t.error}:{ok:false,args:{},raw:e,normalized:n,repaired:n!==e,reason:r.error||t.error}}function Lv(a,e){if(typeof a!="string")return null;let t=a.trim();if(!t.startsWith("{"))return null;try{let s=JSON.parse(t);return !s||typeof s!="object"||s.tool!==e||typeof s.status!="string"?null:s.status}catch{return null}}var Ji=class a{static READ_ONLY_TOOLS=new Set(["readfile","search","search_files","list_directory","show_tree","analyze_code","search_symbol","get_definitions","get_references","git_status","git_diff","git_blame","git_branch_list"]);static STATE_MODIFYING_TOOLS=new Set(["write_file","edit_file","create_directory","delete_file","rename_file","apply_patch","execute_shell","execute_bash","execute_python","execute_javascript","git_commit","git_branch","run_tests","run_lint","run_format"]);static TOOL_METADATA=new Map([["readfile",{name:"readfile",isReadOnly:true,category:"read",description:"Read file contents"}],["search",{name:"search",isReadOnly:true,category:"read",description:"Search file contents"}],["search_files",{name:"search_files",isReadOnly:true,category:"read",description:"Search files by name"}],["list_directory",{name:"list_directory",isReadOnly:true,category:"read",description:"List directory contents"}],["show_tree",{name:"show_tree",isReadOnly:true,category:"read",description:"Show directory tree"}],["analyze_code",{name:"analyze_code",isReadOnly:true,category:"read",description:"Analyze code structure"}],["search_symbol",{name:"search_symbol",isReadOnly:true,category:"read",description:"Search symbols in index"}],["get_definitions",{name:"get_definitions",isReadOnly:true,category:"read",description:"Find symbol definitions"}],["get_references",{name:"get_references",isReadOnly:true,category:"read",description:"Find symbol references"}],["git_status",{name:"git_status",isReadOnly:true,category:"read",description:"Show git status"}],["git_diff",{name:"git_diff",isReadOnly:true,category:"read",description:"Show git diff"}],["git_blame",{name:"git_blame",isReadOnly:true,category:"read",description:"Show git blame"}],["git_branch_list",{name:"git_branch_list",isReadOnly:true,category:"read",description:"List git branches"}],["write_file",{name:"write_file",isReadOnly:false,category:"write",description:"Write file"}],["edit_file",{name:"edit_file",isReadOnly:false,category:"write",description:"Edit file"}],["create_directory",{name:"create_directory",isReadOnly:false,category:"write",description:"Create directory"}],["delete_file",{name:"delete_file",isReadOnly:false,category:"write",description:"Delete file"}],["rename_file",{name:"rename_file",isReadOnly:false,category:"write",description:"Rename file"}],["apply_patch",{name:"apply_patch",isReadOnly:false,category:"write",description:"Apply patch"}],["git_commit",{name:"git_commit",isReadOnly:false,category:"write",description:"Git commit"}],["git_branch",{name:"git_branch",isReadOnly:false,category:"write",description:"Git branch"}],["run_tests",{name:"run_tests",isReadOnly:false,category:"execute",description:"Run tests"}],["run_lint",{name:"run_lint",isReadOnly:false,category:"execute",description:"Run lint"}],["run_format",{name:"run_format",isReadOnly:false,category:"execute",description:"Run format"}],["execute_shell",{name:"execute_shell",isReadOnly:false,category:"execute",description:"Execute shell command"}],["execute_bash",{name:"execute_bash",isReadOnly:false,category:"execute",description:"Execute bash script"}],["execute_python",{name:"execute_python",isReadOnly:false,category:"execute",description:"Execute Python code"}],["execute_javascript",{name:"execute_javascript",isReadOnly:false,category:"execute",description:"Execute JavaScript code"}]]);static isReadOnly(e){return a.READ_ONLY_TOOLS.has(e)}static isStateModifying(e){return a.STATE_MODIFYING_TOOLS.has(e)}static getMetadata(e){return a.TOOL_METADATA.get(e)}analyzePlan(e,t,s){let n=[],r=[];for(let i of e){let o=i.function.name,l=t.find(d=>d.name===o),c=s?.parallelSafeTools.has(o)===true;(s?c:l?ji(l)==="safe":a.isReadOnly(o))?n.push(i):r.push(i);}return {parallel:n,sequential:r,totalTools:e.length,parallelCount:n.length,sequentialCount:r.length}}async executeSingleTool(e,t,s){let n=Date.now();if(s?.aborted)return {id:e.id,name:e.function.name,output:"Error: Operation cancelled",success:false,executionTime:Date.now()-n};let r=t.find(i=>i.name===e.function.name);if(!r)return {id:e.id,name:e.function.name,output:`Error: Tool ${e.function.name} not found`,success:false,executionTime:Date.now()-n};try{let i=bn(e.function.arguments);if(!i.ok)return {id:e.id,name:e.function.name,output:`Error: Invalid JSON arguments for ${e.function.name}: ${i.reason||"parse failed"}`,success:!1,executionTime:Date.now()-n};let o=await r.function(i.args,{signal:s}),l=!0;return Lv(o,e.function.name)==="error"&&(l=!1),s?.aborted?{id:e.id,name:e.function.name,output:"Error: Operation cancelled",success:!1,executionTime:Date.now()-n}:{id:e.id,name:e.function.name,output:o,success:l,executionTime:Date.now()-n}}catch(i){return i.name==="AbortError"||s?.aborted?{id:e.id,name:e.function.name,output:"Error: Operation cancelled",success:false,executionTime:Date.now()-n}:{id:e.id,name:e.function.name,output:`Error: ${i.message}`,success:false,executionTime:Date.now()-n}}}async execute(e,t,s,n){let r=Date.now(),i=tp(t),o=this.analyzePlan(e,t,i);process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log("[ParallelExecutor] Execution Plan:"),console.log(` Total: ${o.totalTools} tools`),console.log(` Parallel (read-only): ${o.parallelCount} tools`),console.log(` Sequential (state-modifying): ${o.sequentialCount} tools`));let l=new Map,c=0,u=0;if(o.parallel.length>0){let y=Date.now();process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Executing ${o.parallel.length} read-only tools in parallel...`);let w=o.parallel.map(S=>this.executeSingleTool(S,t,n).then(T=>(s&&s(T),T))),C=await Promise.all(w);c=Date.now()-y;for(let S of C)l.set(S.id,S);process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Parallel execution completed in ${c}ms`);}if(o.sequential.length>0){let y=Date.now();process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Executing ${o.sequential.length} state-modifying tools sequentially...`);for(let w of o.sequential){if(n?.aborted){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Execution interrupted before ${w.function.name}`);break}let C=await this.executeSingleTool(w,t,n);if(s&&s(C),l.set(C.id,C),n?.aborted){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Execution interrupted after ${w.function.name}`);break}}u=Date.now()-y,process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Sequential execution completed in ${u}ms`);}let d=e.map(y=>{let w=l.get(y.id);return w||{id:y.id,name:y.function.name,output:"Error: Result not found",success:false}}),p=Date.now()-r,h=d.reduce((y,w)=>y+(w.executionTime||0),0),g=h-p,f=h>0?h/p:1,b={totalTime:p,parallelTime:c,sequentialTime:u,timeSaved:g,speedup:f};return process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log("[ParallelExecutor] Performance Stats:"),console.log(` Total time: ${p}ms`),console.log(` Parallel time: ${c}ms`),console.log(` Sequential time: ${u}ms`),console.log(` Estimated sequential time: ${h}ms`),console.log(` Time saved: ${g}ms`),console.log(` Speedup: ${f.toFixed(2)}x`)),{results:d,stats:b}}getToolClassification(e){let t=a.isReadOnly(e),s=a.getMetadata(e);return {isReadOnly:t,category:s?.category||"unknown",canParallel:t}}static canExecuteInParallel(e){return e.every(t=>a.READ_ONLY_TOOLS.has(t))}static getReadOnlyTools(){return Array.from(a.READ_ONLY_TOOLS)}static getStateModifyingTools(){return Array.from(a.STATE_MODIFYING_TOOLS)}};var Ms={environment:{zh:a=>`## \u73AF\u5883
1195
+ `),r=/[\u4e00-\u9fa5]/.test(s)?vr.systemZh:vr.system,i=await t.llmProvider.chat([{role:"system",content:r},{role:"user",content:vr.user(s)}],{model:t.model,temperature:.3});return me(i.choices[0]?.message?.content)||null}catch(s){return m.warn("MessageCompressor",`Batch LLM compression failed: ${s.message}`),null}}};new yn;var Pv={debug:false,minRecentMessages:15,defaultTokenBudget:1e5,enableLLMCompression:true,llmTimeout:3e4},Hi=class{config;toolCompressor;messageCompressor;llmProvider;model;contextWindow;constructor(e){this.config={...Pv,...e},this.config.debug=this.config.debug||process.env.CLI_DEBUG==="1",this.toolCompressor=new as({debug:this.config.debug}),this.messageCompressor=new yn({debug:this.config.debug,toolCompressor:this.toolCompressor,minRecentMessages:this.config.minRecentMessages});}setLLMProvider(e,t){this.llmProvider=e,this.model=t;}setContextWindow(e){this.contextWindow=e,this.config.debug&&m.info("UnifiedCompressor",`Context window set to: ${e}`);}registerToolCompressor(e){m.info("UnifiedCompressor","Custom tool compressor registered");}setMessageCompressor(e){this.messageCompressor=e,m.info("UnifiedCompressor","Custom message compressor set");}async compressHistory(e,t,s){let n=Date.now(),r=tt(e),i={llmProvider:s?.llmProvider||this.llmProvider,model:s?.model||this.model,tokenBudget:t,contextWindow:s?.contextWindow||this.contextWindow,iteration:s?.iteration,enableLLMCompression:s?.enableLLMCompression??this.config.enableLLMCompression,timeout:s?.timeout??this.config.llmTimeout,signal:s?.signal,debug:this.config.debug};if(this.config.debug&&m.debug("UnifiedCompressor",`\u5F00\u59CB\u538B\u7F29: ${e.length} \u6761\u6D88\u606F, ${r} tokens \u2192 \u9884\u7B97 ${t} tokens`),r<=t){let c=await this.compressLargeMessagesOnly(e,i);return this.config.debug&&m.debug("UnifiedCompressor",`\u5728\u9884\u7B97\u5185\uFF0C\u4EC5\u538B\u7F29\u5927\u6D88\u606F: ${c.savedTokens} tokens \u8282\u7701`),c}let o=await this.messageCompressor.compressMessages(e,i),l=Date.now()-n;return this.config.debug&&m.debug("UnifiedCompressor",`\u538B\u7F29\u5B8C\u6210 (${l}ms): ${o.originalCount} \u2192 ${o.compressedCount} \u6761, ${o.originalTokens} \u2192 ${o.compressedTokens} tokens (\u8282\u7701 ${o.savedTokens} tokens, ${(o.savedTokens/o.originalTokens*100).toFixed(1)}%)`),o}async compressLargeMessagesOnly(e,t){let s=tt(e),n=[],r=0,i=0;for(let l of e)if(Mt(l)>2e3&&l.role!=="system"){let u=await this.messageCompressor.compressMessage(l,t);n.push(u.message),u.usedLLM?r++:u.compressionRatio<1&&i++;}else n.push(l);let o=tt(n);return {messages:n,originalCount:e.length,compressedCount:n.length,originalTokens:s,compressedTokens:o,savedTokens:s-o,stats:{droppedMessages:0,llmCompressedMessages:r,truncatedMessages:i,preservedMessages:e.length-r-i}}}async compressToolResult(e,t,s){let n={llmProvider:s?.llmProvider||this.llmProvider,model:s?.model||this.model,enableLLMCompression:s?.enableLLMCompression??this.config.enableLLMCompression,timeout:s?.timeout??this.config.llmTimeout,debug:this.config.debug};return (await this.toolCompressor.compress(e,t,n)).content}getStats(){return {config:this.config,hasLLMProvider:!!this.llmProvider}}};function Dv(a){return a.replace(/\uFEFF/g,"").replace(/[“”]/g,'"').replace(/[‘’]/g,"'").replace(/,\s*([}\]])/g,"$1").trim()}function Ov(a){let e=a.trim();if(!e)return null;let t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/i);if(t?.[1])return t[1].trim();let s=e.indexOf("{"),n=e.lastIndexOf("}");return s>=0&&n>s?e.slice(s,n+1).trim():null}function Mp(a){try{let e=JSON.parse(a);return e&&typeof e=="object"&&!Array.isArray(e)?{ok:!0,value:e}:{ok:!1,error:"arguments should be a JSON object"}}catch(e){return {ok:false,error:e?.message||"invalid JSON"}}}function bn(a){let e=(a||"").trim();if(!e)return {ok:true,args:{},raw:e,normalized:"{}",repaired:false};let t=Mp(e);if(t.ok)return {ok:true,args:t.value,raw:e,normalized:e,repaired:false};let s=Ov(e),n=Dv(s||e),r=Mp(n);return r.ok?{ok:true,args:r.value,raw:e,normalized:n,repaired:n!==e,reason:t.error}:{ok:false,args:{},raw:e,normalized:n,repaired:n!==e,reason:r.error||t.error}}function Lv(a,e){if(typeof a!="string")return null;let t=a.trim();if(!t.startsWith("{"))return null;try{let s=JSON.parse(t);return !s||typeof s!="object"||s.tool!==e||typeof s.status!="string"?null:s.status}catch{return null}}var Ji=class a{static READ_ONLY_TOOLS=new Set(["readfile","search","search_files","list_directory","show_tree","analyze_code","search_symbol","get_definitions","get_references","git_status","git_diff","git_blame","git_branch_list"]);static STATE_MODIFYING_TOOLS=new Set(["write_file","edit_file","create_directory","delete_file","rename_file","apply_patch","execute_shell","execute_bash","execute_python","execute_javascript","git_commit","git_branch","run_tests","run_lint","run_format"]);static TOOL_METADATA=new Map([["readfile",{name:"readfile",isReadOnly:true,category:"read",description:"Read file contents"}],["search",{name:"search",isReadOnly:true,category:"read",description:"Search file contents"}],["search_files",{name:"search_files",isReadOnly:true,category:"read",description:"Search files by name"}],["list_directory",{name:"list_directory",isReadOnly:true,category:"read",description:"List directory contents"}],["show_tree",{name:"show_tree",isReadOnly:true,category:"read",description:"Show directory tree"}],["analyze_code",{name:"analyze_code",isReadOnly:true,category:"read",description:"Analyze code structure"}],["search_symbol",{name:"search_symbol",isReadOnly:true,category:"read",description:"Search symbols in index"}],["get_definitions",{name:"get_definitions",isReadOnly:true,category:"read",description:"Find symbol definitions"}],["get_references",{name:"get_references",isReadOnly:true,category:"read",description:"Find symbol references"}],["git_status",{name:"git_status",isReadOnly:true,category:"read",description:"Show git status"}],["git_diff",{name:"git_diff",isReadOnly:true,category:"read",description:"Show git diff"}],["git_blame",{name:"git_blame",isReadOnly:true,category:"read",description:"Show git blame"}],["git_branch_list",{name:"git_branch_list",isReadOnly:true,category:"read",description:"List git branches"}],["write_file",{name:"write_file",isReadOnly:false,category:"write",description:"Write file"}],["edit_file",{name:"edit_file",isReadOnly:false,category:"write",description:"Edit file"}],["create_directory",{name:"create_directory",isReadOnly:false,category:"write",description:"Create directory"}],["delete_file",{name:"delete_file",isReadOnly:false,category:"write",description:"Delete file"}],["rename_file",{name:"rename_file",isReadOnly:false,category:"write",description:"Rename file"}],["apply_patch",{name:"apply_patch",isReadOnly:false,category:"write",description:"Apply patch"}],["git_commit",{name:"git_commit",isReadOnly:false,category:"write",description:"Git commit"}],["git_branch",{name:"git_branch",isReadOnly:false,category:"write",description:"Git branch"}],["run_tests",{name:"run_tests",isReadOnly:false,category:"execute",description:"Run tests"}],["run_lint",{name:"run_lint",isReadOnly:false,category:"execute",description:"Run lint"}],["run_format",{name:"run_format",isReadOnly:false,category:"execute",description:"Run format"}],["execute_shell",{name:"execute_shell",isReadOnly:false,category:"execute",description:"Execute shell command"}],["execute_bash",{name:"execute_bash",isReadOnly:false,category:"execute",description:"Execute bash script"}],["execute_python",{name:"execute_python",isReadOnly:false,category:"execute",description:"Execute Python code"}],["execute_javascript",{name:"execute_javascript",isReadOnly:false,category:"execute",description:"Execute JavaScript code"}]]);static isReadOnly(e){return a.READ_ONLY_TOOLS.has(e)}static isStateModifying(e){return a.STATE_MODIFYING_TOOLS.has(e)}static getMetadata(e){return a.TOOL_METADATA.get(e)}analyzePlan(e,t,s){let n=[],r=[];for(let i of e){let o=i.function.name,l=t.find(d=>d.name===o),c=s?.parallelSafeTools.has(o)===true;(s?c:l?ji(l)==="safe":a.isReadOnly(o))?n.push(i):r.push(i);}return {parallel:n,sequential:r,totalTools:e.length,parallelCount:n.length,sequentialCount:r.length}}async executeSingleTool(e,t,s){let n=Date.now();if(s?.aborted)return {id:e.id,name:e.function.name,output:"Error: Operation cancelled",success:false,executionTime:Date.now()-n};let r=t.find(i=>i.name===e.function.name);if(!r)return {id:e.id,name:e.function.name,output:`Error: Tool ${e.function.name} not found`,success:false,executionTime:Date.now()-n};try{let i=bn(e.function.arguments);if(!i.ok)return {id:e.id,name:e.function.name,output:`Error: Invalid JSON arguments for ${e.function.name}: ${i.reason||"parse failed"}`,success:!1,executionTime:Date.now()-n};let o=await r.function(i.args,{signal:s}),l=!0;return Lv(o,e.function.name)==="error"&&(l=!1),s?.aborted?{id:e.id,name:e.function.name,output:"Error: Operation cancelled",success:!1,executionTime:Date.now()-n}:{id:e.id,name:e.function.name,output:o,success:l,executionTime:Date.now()-n}}catch(i){return i.name==="AbortError"||s?.aborted?{id:e.id,name:e.function.name,output:"Error: Operation cancelled",success:false,executionTime:Date.now()-n}:{id:e.id,name:e.function.name,output:`Error: ${i.message}`,success:false,executionTime:Date.now()-n}}}async execute(e,t,s,n){let r=Date.now(),i=tp(t),o=this.analyzePlan(e,t,i);process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log("[ParallelExecutor] Execution Plan:"),console.log(` Total: ${o.totalTools} tools`),console.log(` Parallel (read-only): ${o.parallelCount} tools`),console.log(` Sequential (state-modifying): ${o.sequentialCount} tools`));let l=new Map,c=0,u=0;if(o.parallel.length>0){let y=Date.now();process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Executing ${o.parallel.length} read-only tools in parallel...`);let w=o.parallel.map(S=>this.executeSingleTool(S,t,n).then(T=>(s&&s(T),T))),C=await Promise.all(w);c=Date.now()-y;for(let S of C)l.set(S.id,S);process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Parallel execution completed in ${c}ms`);}if(o.sequential.length>0){let y=Date.now();process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Executing ${o.sequential.length} state-modifying tools sequentially...`);for(let w of o.sequential){if(n?.aborted){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Execution interrupted before ${w.function.name}`);break}let C=await this.executeSingleTool(w,t,n);if(s&&s(C),l.set(C.id,C),n?.aborted){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Execution interrupted after ${w.function.name}`);break}}u=Date.now()-y,process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[ParallelExecutor] Sequential execution completed in ${u}ms`);}let d=e.map(y=>{let w=l.get(y.id);return w||{id:y.id,name:y.function.name,output:"Error: Result not found",success:false}}),p=Date.now()-r,h=d.reduce((y,w)=>y+(w.executionTime||0),0),g=h-p,f=h>0?h/p:1,b={totalTime:p,parallelTime:c,sequentialTime:u,timeSaved:g,speedup:f};return process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log("[ParallelExecutor] Performance Stats:"),console.log(` Total time: ${p}ms`),console.log(` Parallel time: ${c}ms`),console.log(` Sequential time: ${u}ms`),console.log(` Estimated sequential time: ${h}ms`),console.log(` Time saved: ${g}ms`),console.log(` Speedup: ${f.toFixed(2)}x`)),{results:d,stats:b}}getToolClassification(e){let t=a.isReadOnly(e),s=a.getMetadata(e);return {isReadOnly:t,category:s?.category||"unknown",canParallel:t}}static canExecuteInParallel(e){return e.every(t=>a.READ_ONLY_TOOLS.has(t))}static getReadOnlyTools(){return Array.from(a.READ_ONLY_TOOLS)}static getStateModifyingTools(){return Array.from(a.STATE_MODIFYING_TOOLS)}};var Ps={environment:{zh:a=>`## \u73AF\u5883
1196
1196
  - \u5DE5\u4F5C\u76EE\u5F55: ${a}
1197
1197
  - Shell \u6BCF\u6B21\u8C03\u7528\u72EC\u7ACB\uFF0Ccd \u4E0D\u8DE8\u8C03\u7528\u6301\u7EED`,en:a=>`## Environment
1198
1198
  - Working directory: ${a}
@@ -1218,7 +1218,7 @@ ${i}`}],{model:t.model,temperature:.2});return me(o.choices[0]?.message?.content
1218
1218
  **Large file chunking** (when necessary):
1219
1219
  1. Files >300 lines or 10KB \u2192 Write in chunks, each chunk <200 lines
1220
1220
  2. First step write_file: Create skeleton structure
1221
- 3. Subsequent edit_file: Replace section by section (readfile before each edit!)`},toolResults:{zh:'## \u7406\u89E3\u5DE5\u5177\u7ED3\u679C\n\n- `write_file` / `edit_file` \u8FD4\u56DE\u7ED3\u6784\u5316\u7ED3\u679C\uFF1A\n - `"status": "success" + "final": true` \u2192 \u4FEE\u6539\u6210\u529F\uFF0C\u4E0D\u91CD\u590D\u64CD\u4F5C\n - `"status": "already_done"` \u2192 \u5DF2\u5B8C\u6210\uFF0C\u7EE7\u7EED\u4E0B\u4E00\u4E2A\u4EFB\u52A1\n - `"status": "error"` \u2192 \u8BFB\u53D6\u9519\u8BEF\u4FE1\u606F\u5E76\u4FEE\u590D\n- \u4FEE\u6539\u5B8C\u6210\u540E\u4F7F\u7528 `readfile` \u9A8C\u8BC1\u5173\u952E\u51FD\u6570/\u7C7B\u5185\u5BB9\n- readfile \u5931\u8D25 \u2192 \u6269\u5927\u8303\u56F4\u6216\u8C03\u6574\u5173\u952E\u8BCD\uFF0C\u518D\u5C1D\u8BD5',en:'## Understanding Tool Results\n\n- `write_file` / `edit_file` return structured results:\n - `"status": "success" + "final": true` \u2192 Modification successful, don\'t repeat\n - `"status": "already_done"` \u2192 Already complete, proceed to next task\n - `"status": "error"` \u2192 Read error message and fix\n- After modification, use `readfile` to verify key functions/classes\n- readfile fails \u2192 Expand scope or adjust keywords, then retry'},specializedTools:{zh:"## \u4E13\u7528\u5DE5\u5177\n\n- **Git**\uFF1A`git_status` / `git_diff` / `git_blame` / `git_branch_list` / `git_branch` / `git_commit`\n- **\u6587\u4EF6\u64CD\u4F5C**\uFF1A`delete_file` / `rename_file` / `apply_patch`\n- **\u5BFC\u822A**\uFF1A`search_symbol` / `get_definitions` / `get_references`\uFF08\u7D22\u5F15\u53EF\u7528\u65F6\u4F18\u5148\uFF09\n- **\u6D4B\u8BD5**\uFF1A`run_tests` / `run_lint` / `run_format`\uFF08\u907F\u514D\u7528 shell \u4EE3\u66FF\uFF09\n- \u82E5\u89E6\u8FBE\u8FED\u4EE3/\u5DE5\u5177/\u8FD0\u884C\u65F6\u95F4\u9650\u5236\uFF0C\u5148\u603B\u7ED3\u8FDB\u5EA6\u5E76\u8BE2\u95EE\u662F\u5426\u7EE7\u7EED",en:"## Specialized Tools\n\n- **Git**: `git_status` / `git_diff` / `git_blame` / `git_branch_list` / `git_branch` / `git_commit`\n- **File operations**: `delete_file` / `rename_file` / `apply_patch`\n- **Navigation**: `search_symbol` / `get_definitions` / `get_references` (prefer when index available)\n- **Tests**: `run_tests` / `run_lint` / `run_format` (avoid using shell instead)\n- If hitting iteration/tool/runtime limits, summarize progress and ask to continue"},errorRecovery:{zh:"## \u9519\u8BEF\u6062\u590D\n\n- `edit_file` \u5931\u8D25\uFF1A\u91CD\u65B0 `readfile(path, for_edit=true)`\uFF0C\u7F29\u5C0F `old_string`\uFF0C\u5FC5\u8981\u65F6\u52A0 `change_context`\n- \u8FDE\u7EED\u5931\u8D25 2 \u6B21\uFF1A\u6539\u7528 `write_file` \u91CD\u5199\u6574\u4E2A\u6587\u4EF6\n- \u8FDE\u7EED\u5931\u8D25 3 \u6B21\uFF1A\u505C\u6B62\u5F53\u524D\u65B9\u6CD5\uFF0C\u62A5\u544A\u7ED9\u7528\u6237\n- \u7981\u6B62\u4F7F\u7528 sed/awk \u7B49 shell \u547D\u4EE4\u7F16\u8F91\u6587\u4EF6",en:"## Error Recovery\n\n- `edit_file` fails: Re-`readfile(path, for_edit=true)`, reduce `old_string`, add `change_context` if needed\n- 2 consecutive fails: Use `write_file` to rewrite entire file\n- 3 consecutive fails: Stop current approach, report to user\n- Never use sed/awk or other shell commands to edit files"},outputFormat:{zh:"## \u8F93\u51FA\u8981\u6C42\n\n- \u7528\u4E2D\u6587\u56DE\u590D\n- \u64CD\u4F5C\u540E\u7B80\u77ED\u786E\u8BA4\n- \u4E0D\u521B\u5EFA\u7528\u6237\u672A\u8981\u6C42\u7684\u6587\u4EF6\n- \u9047\u5230\u9519\u8BEF\u4F18\u5148\u7528 readfile \u9A8C\u8BC1\uFF0C\u4E0D\u76F2\u76EE\u91CD\u590D\u64CD\u4F5C\n\n### Markdown \u683C\u5F0F\u89C4\u8303\n- \u6807\u9898\u5FC5\u987B\u5728 # \u540E\u52A0\u7A7A\u683C\uFF1A`### \u6807\u9898` \u2713\uFF0C`###\u6807\u9898` \u2717\n- \u7C97\u4F53/\u659C\u4F53\u6807\u8BB0\u4E0E\u6587\u5B57\u4E4B\u95F4\u4E0D\u52A0\u7A7A\u683C\uFF1A`**\u7C97\u4F53**` \u2713\n- \u5217\u8868\u9879 `-` \u540E\u5FC5\u987B\u52A0\u7A7A\u683C\uFF1A`- \u9879\u76EE` \u2713",en:"## Output Requirements\n\n- Reply in English\n- Brief confirmation after operations\n- Don't create unrequested files\n- When encountering errors, verify with readfile first, don't blindly repeat operations\n\n### Markdown Format Rules\n- Headings must have space after #: `### Title` \u2713, `###Title` \u2717\n- Bold/italic markers without space to text: `**bold**` \u2713\n- List items must have space after `-`: `- item` \u2713"}};function Pp(a,e="zh"){let t=[];return t.push(Ms.environment[e](a)),t.push(""),t.push(Ms.toolUsage[e]),t.push(""),t.push(Ms.editRules[e]),t.push(""),t.push(Ms.toolResults[e]),t.push(""),t.push(Ms.specializedTools[e]),t.push(""),t.push(Ms.errorRecovery[e]),t.push(""),t.push(Ms.outputFormat[e]),t.join(`
1221
+ 3. Subsequent edit_file: Replace section by section (readfile before each edit!)`},toolResults:{zh:'## \u7406\u89E3\u5DE5\u5177\u7ED3\u679C\n\n- `write_file` / `edit_file` \u8FD4\u56DE\u7ED3\u6784\u5316\u7ED3\u679C\uFF1A\n - `"status": "success" + "final": true` \u2192 \u4FEE\u6539\u6210\u529F\uFF0C\u4E0D\u91CD\u590D\u64CD\u4F5C\n - `"status": "already_done"` \u2192 \u5DF2\u5B8C\u6210\uFF0C\u7EE7\u7EED\u4E0B\u4E00\u4E2A\u4EFB\u52A1\n - `"status": "error"` \u2192 \u8BFB\u53D6\u9519\u8BEF\u4FE1\u606F\u5E76\u4FEE\u590D\n- \u4FEE\u6539\u5B8C\u6210\u540E\u4F7F\u7528 `readfile` \u9A8C\u8BC1\u5173\u952E\u51FD\u6570/\u7C7B\u5185\u5BB9\n- readfile \u5931\u8D25 \u2192 \u6269\u5927\u8303\u56F4\u6216\u8C03\u6574\u5173\u952E\u8BCD\uFF0C\u518D\u5C1D\u8BD5',en:'## Understanding Tool Results\n\n- `write_file` / `edit_file` return structured results:\n - `"status": "success" + "final": true` \u2192 Modification successful, don\'t repeat\n - `"status": "already_done"` \u2192 Already complete, proceed to next task\n - `"status": "error"` \u2192 Read error message and fix\n- After modification, use `readfile` to verify key functions/classes\n- readfile fails \u2192 Expand scope or adjust keywords, then retry'},specializedTools:{zh:"## \u4E13\u7528\u5DE5\u5177\n\n- **Git**\uFF1A`git_status` / `git_diff` / `git_blame` / `git_branch_list` / `git_branch` / `git_commit`\n- **\u6587\u4EF6\u64CD\u4F5C**\uFF1A`delete_file` / `rename_file` / `apply_patch`\n- **\u5BFC\u822A**\uFF1A`search_symbol` / `get_definitions` / `get_references`\uFF08\u7D22\u5F15\u53EF\u7528\u65F6\u4F18\u5148\uFF09\n- **\u6D4B\u8BD5**\uFF1A`run_tests` / `run_lint` / `run_format`\uFF08\u907F\u514D\u7528 shell \u4EE3\u66FF\uFF09\n- \u82E5\u89E6\u8FBE\u8FED\u4EE3/\u5DE5\u5177/\u8FD0\u884C\u65F6\u95F4\u9650\u5236\uFF0C\u5148\u603B\u7ED3\u8FDB\u5EA6\u5E76\u8BE2\u95EE\u662F\u5426\u7EE7\u7EED",en:"## Specialized Tools\n\n- **Git**: `git_status` / `git_diff` / `git_blame` / `git_branch_list` / `git_branch` / `git_commit`\n- **File operations**: `delete_file` / `rename_file` / `apply_patch`\n- **Navigation**: `search_symbol` / `get_definitions` / `get_references` (prefer when index available)\n- **Tests**: `run_tests` / `run_lint` / `run_format` (avoid using shell instead)\n- If hitting iteration/tool/runtime limits, summarize progress and ask to continue"},errorRecovery:{zh:"## \u9519\u8BEF\u6062\u590D\n\n- `edit_file` \u5931\u8D25\uFF1A\u91CD\u65B0 `readfile(path, for_edit=true)`\uFF0C\u7F29\u5C0F `old_string`\uFF0C\u5FC5\u8981\u65F6\u52A0 `change_context`\n- \u8FDE\u7EED\u5931\u8D25 2 \u6B21\uFF1A\u6539\u7528 `write_file` \u91CD\u5199\u6574\u4E2A\u6587\u4EF6\n- \u8FDE\u7EED\u5931\u8D25 3 \u6B21\uFF1A\u505C\u6B62\u5F53\u524D\u65B9\u6CD5\uFF0C\u62A5\u544A\u7ED9\u7528\u6237\n- \u7981\u6B62\u4F7F\u7528 sed/awk \u7B49 shell \u547D\u4EE4\u7F16\u8F91\u6587\u4EF6",en:"## Error Recovery\n\n- `edit_file` fails: Re-`readfile(path, for_edit=true)`, reduce `old_string`, add `change_context` if needed\n- 2 consecutive fails: Use `write_file` to rewrite entire file\n- 3 consecutive fails: Stop current approach, report to user\n- Never use sed/awk or other shell commands to edit files"},outputFormat:{zh:"## \u8F93\u51FA\u8981\u6C42\n\n- \u7528\u4E2D\u6587\u56DE\u590D\n- \u64CD\u4F5C\u540E\u7B80\u77ED\u786E\u8BA4\n- \u4E0D\u521B\u5EFA\u7528\u6237\u672A\u8981\u6C42\u7684\u6587\u4EF6\n- \u9047\u5230\u9519\u8BEF\u4F18\u5148\u7528 readfile \u9A8C\u8BC1\uFF0C\u4E0D\u76F2\u76EE\u91CD\u590D\u64CD\u4F5C\n\n### Markdown \u683C\u5F0F\u89C4\u8303\n- \u6807\u9898\u5FC5\u987B\u5728 # \u540E\u52A0\u7A7A\u683C\uFF1A`### \u6807\u9898` \u2713\uFF0C`###\u6807\u9898` \u2717\n- \u7C97\u4F53/\u659C\u4F53\u6807\u8BB0\u4E0E\u6587\u5B57\u4E4B\u95F4\u4E0D\u52A0\u7A7A\u683C\uFF1A`**\u7C97\u4F53**` \u2713\n- \u5217\u8868\u9879 `-` \u540E\u5FC5\u987B\u52A0\u7A7A\u683C\uFF1A`- \u9879\u76EE` \u2713",en:"## Output Requirements\n\n- Reply in English\n- Brief confirmation after operations\n- Don't create unrequested files\n- When encountering errors, verify with readfile first, don't blindly repeat operations\n\n### Markdown Format Rules\n- Headings must have space after #: `### Title` \u2713, `###Title` \u2717\n- Bold/italic markers without space to text: `**bold**` \u2713\n- List items must have space after `-`: `- item` \u2713"}};function Pp(a,e="zh"){let t=[];return t.push(Ps.environment[e](a)),t.push(""),t.push(Ps.toolUsage[e]),t.push(""),t.push(Ps.editRules[e]),t.push(""),t.push(Ps.toolResults[e]),t.push(""),t.push(Ps.specializedTools[e]),t.push(""),t.push(Ps.errorRecovery[e]),t.push(""),t.push(Ps.outputFormat[e]),t.join(`
1222
1222
  `)}var Nv={identity:{zh:`\u4F60\u662F Neox AI \u52A9\u624B\uFF0C\u53EF\u4EE5\u5E2E\u52A9\u7528\u6237\u5B8C\u6210\u5404\u79CD\u4EFB\u52A1\u3002
1223
1223
 
1224
1224
  **\u6838\u5FC3\u539F\u5219**\uFF1A
@@ -1484,7 +1484,7 @@ Available operations: All tools (auto-approved).`}shouldAutoApprove(){return tr
1484
1484
 
1485
1485
  \u2026[${s-l.length-c.length} chars truncated, total ${t} lines]\u2026
1486
1486
 
1487
- `;return l+d+c}var Yi=class{llmProvider;providerName;model;tools;memory;config;agentName;agentDescription;instructions;contextInjection;userData;plannerMode;inputGuardrails=[];outputGuardrails=[];toolInputGuardrails=[];toolOutputGuardrails=[];structuredOutput;structuredValidator;maxInputTokensOverride;maxInputTokens;minHistoryMessages;parallelExecutor;unifiedCompressor;compressionMode;toolMetricsHistory=[];workspacePath;disableSystemPrompt;enableFGTS;runContext;permissionManager;modeStrategy;currentMode;loopDetector;enablePlanMode;constructor(e){if(this.llmProvider=e.llmProvider,this.providerName=e.providerName,this.model=e.model,this.tools=e.tools,this.memory=e.memory,this.config=e.config,this.agentName=e.agentName||"DefaultAgent",this.agentDescription=e.agentDescription||"",this.instructions=e.instructions,this.contextInjection=e.contextInjection,this.userData=e.userData,this.plannerMode=e.plannerMode??false,this.structuredOutput=e.structuredOutput,this.maxInputTokensOverride=e.maxInputTokensOverride,this.maxInputTokens=this.computeMaxInputTokens(e.contextWindow,e.tailTokenBudget,this.maxInputTokensOverride),this.minHistoryMessages=Math.max(1,e.minHistoryMessages??6),e.structuredOutput&&(this.structuredValidator=new zi(e.structuredOutput)),this.inputGuardrails=e.inputGuardrails||[],this.outputGuardrails=e.outputGuardrails||[],this.toolInputGuardrails=e.toolInputGuardrails||[],this.toolOutputGuardrails=e.toolOutputGuardrails||[],this.parallelExecutor=new Ji,this.compressionMode=e.compressionMode??"sync",this.workspacePath=e.workspacePath,this.unifiedCompressor=new Hi({debug:process.env.CLI_DEBUG==="1",minRecentMessages:this.minHistoryMessages,enableLLMCompression:true}),this.disableSystemPrompt=e.disableSystemPrompt??false,this.enableFGTS=e.enableFGTS??false,this.unifiedCompressor.setLLMProvider(this.llmProvider,this.model),e.contextWindow&&this.unifiedCompressor.setContextWindow(e.contextWindow),this.currentMode=e.config.mode??"agent",this.modeStrategy=Dl(this.currentMode),this.permissionManager=e.permissionManager??new ls({defaultPermission:"ask"}),this.loopDetector=Lp(),this.enablePlanMode=e.enablePlanMode??true,e.approvalHandler){let t=e.approvalHandler;this.permissionManager.setApprovalHandler(async s=>({approved:await t({id:"",name:s.toolName,args:s.args}),remember:false}));}}setApprovalHandler(e){if(!e){this.permissionManager.setApprovalHandler(void 0);return}this.permissionManager.setApprovalHandler(async t=>({approved:await e({id:"",name:t.toolName,args:t.args}),remember:false}));}setMode(e){this.currentMode=e,this.modeStrategy=Dl(e),m.info("Runner",`Mode switched to: ${e}`);}getMode(){return this.currentMode}getPermissionManager(){return this.permissionManager}computeMaxInputTokens(e,t,s){if(s&&s>0)return s;let r=e&&e>0?e:19e4,i=.7,o=Math.floor(r*i),l=Math.min(t??Np,Math.floor(r*.1)),c=Math.max(2e3,o-l);if(process.env.CLI_DEBUG==="1"||process.env.CLI_DEBUG_CONSOLE==="1"){let u=`[Context] maxInputTokens=${c} (contextWindow=${r}, override=${s}, tailBudget=${t??Np}, safety=${i})`;console.log(u);}return c}async*withStreamWatchdog(e,t){if(qv){for await(let i of e)yield i;return}let s=e[Symbol.asyncIterator](),n=t?new Promise((i,o)=>{t.aborted?o(Vi()):t.addEventListener("abort",()=>o(Vi()),{once:true});}):null,r=false;for(;;){if(t?.aborted){if(s.return)try{await s.return();}catch{}throw Vi()}let i=r?Wv:Uv,o=null,l=new Promise((c,u)=>{o=setTimeout(()=>{u(Gv(r?"idle":"first_chunk",i));},i);});try{let c=await Promise.race(n?[s.next(),l,n]:[s.next(),l]);if(o&&clearTimeout(o),c.done)return;r=!0,yield c.value;}catch(c){if(o&&clearTimeout(o),s.return)try{await s.return();}catch{}throw c?.code==="STREAM_TIMEOUT"&&m.warn("RUNNER",`[watchdog] ${c.message}`),c}}}async applyContextWindow(e=0){if(!this.maxInputTokens)return null;let t=this.memory.getMessagesForLLM(),s=await this.unifiedCompressor.compressHistory(t,this.maxInputTokens,{iteration:e,enableLLMCompression:true});if(s.stats.droppedMessages>0||s.stats.llmCompressedMessages>0){this.memory.setMessages(s.messages);let n=this.compressionMode==="async"?"Async":"Sync",r=(s.originalTokens/1e3).toFixed(1),i=(s.compressedTokens/1e3).toFixed(1),o=(s.savedTokens/1e3).toFixed(1),l=s.originalCount,c=s.compressedCount;m.info("Context",`[${n}] \u538B\u7F29\u5B8C\u6210: ${l}\u6761/${r}K \u2192 ${c}\u6761/${i}K (\u8282\u7701 ${o}K, \u4E22\u5F03${s.stats.droppedMessages}\u6761, LLM\u538B\u7F29${s.stats.llmCompressedMessages}\u6761)`),s.debugInfo&&s.debugInfo.forEach(u=>m.debug("Context",u));}return s}setCompressionMode(e){this.compressionMode=e,m.info("Context",`Compression mode set to: ${e}`);}getCompressionMode(){return this.compressionMode}async getInstructions(e){if(typeof this.instructions=="string")return this.instructions;let t={name:this.agentName,description:this.agentDescription};return await this.instructions(e,t)}async getContextInjection(e){if(!this.contextInjection)return null;let s=(typeof this.contextInjection=="string"?this.contextInjection:await this.contextInjection(e,{name:this.agentName,description:this.agentDescription}))?.trim();return s||null}shouldIncludeLastRun(e){let t=e.trim().toLowerCase();return t?/上次|之前|前面|上一步|上轮|继续|回顾|resume|continue|previous|last time/.test(t):false}createRunContext(e,t=0){return {task:e,timestamp:Date.now(),currentTime:new Date,iteration:t,userData:this.userData,systemStatus:void 0}}setUserData(e){this.userData={...this.userData,...e};}async*run(e,t,s){this.runContext={task:e,timestamp:Date.now(),currentTime:new Date,iteration:0,userData:this.userData},this.loopDetector.reset(),process.env.CLI_DEBUG==="1"&&(m.debug("MK",` hasSignal: ${!!s}`),m.debug("RUNNER","========================================"),m.debug("RUNNER","=== runner.run ENTRY ==="),m.debug("RUNNER",` task: "${e?.substring(0,50)}..."`),m.debug("RUNNER",` hasImages: ${!!t&&t.length>0}`),m.debug("RUNNER",` hasSignal: ${!!s}`)),ge.agentStart(e),yield {type:"agent_updated_stream_event",new_agent:{name:this.agentName}};let n=this.createRunContext(e,0),r=this.memory.hasConversationMessages?.()??this.memory.getMessagesForLLM().some(I=>I.role==="user"||I.role==="assistant"),i=!r||this.shouldIncludeLastRun(e);n.userData={...n.userData??{},hasConversation:r,includeLastRun:i},this.inputGuardrails.length>0&&(yield {type:"raw_response_event",data:{type:"input_guardrails.check_start",count:this.inputGuardrails.length},event_type:"input_guardrails.check_start"},await Es.runInputGuardrails(this.inputGuardrails,n,this.agentName,e),yield {type:"raw_response_event",data:{type:"input_guardrails.check_passed"},event_type:"input_guardrails.check_passed"});let o=await this.getInstructions(n),l=await this.getContextInjection(n);process.env.CLI_DEBUG==="1"&&(console.log("[RUNNER] dynamicInstructions length:",o?.length||0),console.log("[RUNNER] dynamicInstructions START:",o?.substring(0,200)),console.log("[RUNNER] dynamicInstructions END:",o?.substring(o.length-500)),console.log("[RUNNER] contains \u534F\u4F5C\u6A21\u5F0F:",o?.includes("\u534F\u4F5C\u6A21\u5F0F")),console.log("[RUNNER] contains delegate_task:",o?.includes("delegate_task")));let c=this.memory.getMessagesForLLM(),u=c.some(I=>I.role==="system");if(process.env.CLI_DEBUG==="1"&&(console.log("[RUNNER] hasSystemPrompt:",u,"existingMessages count:",c.length),console.log("[RUNNER] disableSystemPrompt:",this.disableSystemPrompt)),this.disableSystemPrompt)u&&this.memory.clear(),o&&this.memory.add({role:"system",content:o});else if(!u){let I=this.modeStrategy.getSystemPrompt();this.memory.add({role:"system",content:I}),this.memory.add({role:"system",content:o}),this.structuredValidator&&this.memory.add({role:"system",content:this.structuredValidator.buildSystemPrompt()});try{let A=await ll(this.workspacePath);A&&this.memory.add({role:"system",content:A});}catch{}}if(l?this.memory.upsertSystemTagged?this.memory.upsertSystemTagged("context_injection",l):u||this.memory.add({role:"system",content:l}):this.memory.removeSystemTagged?.("context_injection"),t&&t.length>0){let I=[{type:"text",text:e},...t.map(A=>({type:"image_url",image_url:{url:A,detail:"auto"}}))];this.memory.add({role:"user",content:I});}else this.memory.add({role:"user",content:e});let d=Date.now(),p=0,h="",g=0,f={totalTokens:0,promptTokens:0,completionTokens:0},b=false,y=0,w=null,C=new Map,S=0,T=0,_=[],M=this.isExecutionOrientedTask(e),F=0,x=Jt.streamMaxRetries,R=false,j=Number.isFinite(this.config.maxIterations)?this.config.maxIterations:wp,v=j===0||j===1/0,E=$p(this.config.maxToolCalls,Cp),O=$p(this.config.maxRuntimeMs,Sp);for(;v||p<j;){if(s?.aborted){w="interrupted",b=true,yield {type:"error",error:"Task interrupted by user."};break}if(O!==null&&Date.now()-d>=O){w="runtime_limit",b=true,yield {type:"error",error:`Reached max runtime (${nt(O)}). Please summarize progress and ask whether to continue.`};break}if(E!==null&&g>=E){w="tool_call_limit",b=true,yield {type:"error",error:`Reached max tool calls (${E}). Please summarize progress and ask whether to continue.`};break}p++;let I=null;if(this.maxInputTokens){let L=tt(this.memory.getMessagesForLLM()),$=this.maxInputTokens*.97;L>$&&(I=await this.applyContextWindow(p));}I&&(I.stats.droppedMessages>0||I.stats.llmCompressedMessages>0)&&(yield {type:"context_compaction",status:"completed",originalMessages:I.originalCount,keptMessages:I.messages.length,droppedMessages:I.stats.droppedMessages,compressedMessages:I.stats.llmCompressedMessages,originalTokens:I.originalTokens,finalTokens:I.compressedTokens,budgetTokens:this.maxInputTokens||0,useLLM:I.stats.llmCompressedMessages>0,timestamp:Date.now()});let A=this.memory.checkContextHealth();if((A.warnings.length>0||A.shouldCleanup)&&(yield {type:"raw_response_event",data:{type:"context_health",totalTokens:A.totalTokens,toolResultTokens:A.toolResultTokens,toolResultRatio:A.toolResultRatio,messageCount:A.messageCount,toolMessageCount:A.toolMessageCount,warnings:A.warnings,shouldCompress:A.shouldCompress,shouldCleanup:A.shouldCleanup,byType:A.byType},event_type:"context_health"},A.shouldCleanup&&A.byType.ephemeral.count>5)){let L=this.memory.cleanupEphemeral();L>0&&m.info("Runner",`Cleaned ${L} ephemeral messages`);}m.debug("Runner",this.memory.getTokenSummary()),ge.agentIteration(p,"thinking"),yield {type:"iteration_start",iteration:p};try{yield {type:"raw_response_event",data:{type:"response.created",response:{id:`resp_${Date.now()}`,model:this.model}},event_type:"response.created"};let L=this.memory.getMessagesForLLM();if(m.info("LLM",`Request: model=${this.model}, messages=${L.length}, tools=${this.tools.length}`),m.debug("LLM","Request messages",{messageCount:L.length,lastMessage:L[L.length-1]?.content?.toString().substring(0,200)}),process.env.CLI_DEBUG==="1"){let z=L.filter(J=>J.role==="system");console.log("[RUNNER] System messages count:",z.length);for(let J=0;J<z.length;J++){let ie=z[J].content,K=typeof ie=="string"?ie:JSON.stringify(ie);console.log(`[RUNNER] System[${J}] length:`,K?.length||0),console.log(`[RUNNER] System[${J}] contains \u534F\u4F5C\u6A21\u5F0F:`,K?.includes("\u534F\u4F5C\u6A21\u5F0F")||!1),console.log(`[RUNNER] System[${J}] contains delegate_task:`,K?.includes("delegate_task")||!1),console.log(`[RUNNER] System[${J}] preview:`,K?.substring(0,300)||"");}}let $=this.modeStrategy.filterTools(this.tools);process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`Mode: ${this.currentMode}, Available tools: ${$.length}/${this.tools.length}`);let P=this.llmProvider.chatStreamed(this.memory.getMessagesForLLM(),{model:this.model,tools:$,temperature:this.config.temperature,structuredOutput:this.structuredOutput,maxInputTokens:this.maxInputTokens,disableSystemPrompt:this.disableSystemPrompt,enableFGTS:this.enableFGTS,signal:s}),N="",D="",G=[],q=[],oe="",ue={prompt_tokens:0,completion_tokens:0,total_tokens:0};for await(let z of this.withStreamWatchdog(P,s)){if(z.type==="stream_retry"){R=!0,yield z;continue}if(z.type==="stream_recovered"){yield {type:"stream_recovered",attempt:z.attempt,maxRetries:z.maxRetries};continue}yield {type:"raw_response_event",data:z,event_type:z.choices?.[0]?.delta?"response.delta":"response.chunk"};let J=z.choices?.[0]?.delta;if(z.usage){ue={prompt_tokens:z.usage.prompt_tokens||ue.prompt_tokens,completion_tokens:z.usage.completion_tokens||ue.completion_tokens,total_tokens:z.usage.total_tokens||ue.total_tokens,cached_tokens:z.usage.cached_tokens,cache_read_input_tokens:z.usage.cache_read_input_tokens,cache_creation_input_tokens:z.usage.cache_creation_input_tokens,prompt_tokens_details:z.usage.prompt_tokens_details},f={promptTokens:ue.prompt_tokens,completionTokens:ue.completion_tokens,totalTokens:ue.total_tokens};let ie=!!z.choices?.[0]?.finish_reason;yield {type:"token_usage",usage:ue,is_final:ie};}if(J){if(J.reasoning_content&&(D+=J.reasoning_content,yield {type:"reasoning_delta",delta:J.reasoning_content}),J.reasoning_complete&&(yield {type:"reasoning_complete"}),J.content&&(N+=J.content,h=N,yield {type:"text_delta",delta:J.content}),J.tool_calls)for(let ie of J.tool_calls){let K=ie.index;q[K]||(q[K]={id:ie.id||`call_${Math.floor(Date.now())}_${K}`,type:"function",function:{name:"",arguments:""}}),ie.id&&(q[K].id=ie.id),ie.function?.name&&(q[K].function.name=ie.function.name),ie.function?.arguments&&(q[K].function.arguments+=ie.function.arguments,yield {type:"tool_call_delta",id:q[K].id,name:q[K].function.name,arguments_delta:ie.function.arguments}),ie.thoughtSignature&&(q[K].thoughtSignature=ie.thoughtSignature);}z.choices?.[0]?.finish_reason&&(oe=z.choices[0].finish_reason),z.thinking_blocks&&Array.isArray(z.thinking_blocks)&&(G=z.thinking_blocks.map(ie=>({type:ie.type,thinking:ie.thinking,signature:ie.signature,data:ie.data})));}}N&&(yield {type:"text_done"}),process.env.CLI_DEBUG_CONSOLE==="1"&&process.env.NEOX_UI_MODE==="1"&&console.log("[Runner] \u{1F3AF} Emitting response.completed event (after LLM response)"),yield {type:"raw_response_event",data:{type:"response.completed"},event_type:"response.completed"};let ke={role:"assistant",content:(N||"").trimEnd()};if(D&&(ke.reasoning_content=D),G.length>0&&(ke.thinking_blocks=G),q.length>0&&(ke.tool_calls=q.map(z=>({...z,function:{...z.function,arguments:z.function.arguments}}))),this.memory.add(ke),process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`\u{1F525} Stream ended. toolCalls.length=${q.length}, fullContent.length=${N.length}`),q.length>0){let z=/\[omitted\s+\w+:\s*\d+\s*lines?,\s*\d+\s*chars?\]/i;for(let k of q){let U=k.function.arguments||"";if(z.test(U)){console.error("[Runner] \u{1F6A8} Placeholder string detected in tool arguments!"),console.error(`[Runner] Tool: ${k.function.name}`),console.error(`[Runner] Arguments preview: ${U.substring(0,500)}`),yield {type:"raw_response_event",data:{type:"error.placeholder_detected",message:"Model generated placeholder string instead of actual content. This usually happens when the model sees truncated data in conversation history.",tool:k.function.name},event_type:"error.placeholder_detected"},yield {type:"error",error:'Error: Model attempted to write placeholder text ("[omitted ...]") instead of actual content. This happens when conversation history contains truncated data. Please start a new conversation.'},b=!0;break}}if(b)break;if(E!==null&&g+q.length>E){w="tool_call_limit",b=!0,yield {type:"error",error:`Tool call budget exceeded (max ${E}, requested ${q.length}). Please summarize progress and ask whether to continue.`};break}if(q.length>1){let k=q.map(Z=>Z.function.name),U=[...new Set(k)];U.length===1&&k.length>1?m.info("RUNNER",`\u{1F504} Parallel calls: ${k.length}x ${U[0]} (different parameters)`):m.info("RUNNER",`\u{1F504} Parallel calls: ${k.join(", ")}`);}let J=new Map;for(let k of q)J.set(k.id,bn(k.function.arguments));for(let k of q){g++,yield {type:"run_item_stream_event",name:"tool_called",item:{type:"tool_call_item",id:k.id,name:k.function.name,arguments:k.function.arguments,timestamp:Date.now()}},yield {type:"tool_call_start",id:k.id,name:k.function.name};let Z=J.get(k.id),H=Z?.ok??!1;H?Z?.repaired&&m.warn("RUNNER","Tool arguments repaired from non-standard JSON",{tool:k.function.name,callId:k.id}):ge.toolError(k.function.name,`Invalid JSON arguments (${Z?.reason||"parse failed"}): ${k.function.arguments.substring(0,200)}...`),yield {type:"tool_call_done",id:k.id,name:k.function.name,arguments:k.function.arguments,success:H},yield {type:"raw_response_event",data:{type:"response.function_call_arguments.done",call_id:k.id,name:k.function.name,arguments:k.function.arguments},event_type:"response.function_call_arguments.done"};}let ie=new Set,K=null,xe=q.length>1;process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`Processing ${q.length} tool call(s)`,{isParallel:xe,tools:q.map(k=>k.function.name)});for(let k of q){let U=J.get(k.id);if(!U?.ok){let de=`Invalid JSON arguments for tool "${k.function.name}": ${U?.reason||"parse failed"}. Return strict JSON object arguments.`;yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:k.id,name:k.function.name,output:de,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:k.id,name:k.function.name,output:de,success:!1},this.memory.addToolResult(k.id,k.function.name,de),this.loopDetector.updateLastStatus("error"),ie.add(k.id);continue}let Z=U.args,H=this.loopDetector.detect(k.function.name,Z);if(this.loopDetector.record(k.function.name,Z),H===0)continue;let te=this.loopDetector.generateIntervention(H,k.function.name,Z);if(this.memory.add({role:"system",content:te.message}),H===2&&tu(k.function.name))continue;if(yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:k.id,name:k.function.name,output:te.message,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:k.id,name:k.function.name,output:te.message,success:!1},this.memory.addToolResult(k.id,k.function.name,te.message),this.loopDetector.updateLastStatus("error"),ie.add(k.id),te.shouldTerminate){K=te;break}}if(K&&(yield {type:"error",error:K.message},b=!0),b)break;let ee=ie.size>0?q.filter(k=>!ie.has(k.id)):q,fe=new Set(this.modeStrategy.filterTools(this.tools).map(k=>k.name)),ne=k=>k.replace(/["\s/>]+$/g,"").trim(),le=[];for(let k of ee){let U=ne(k.function.name);if(fe.has(U)||fe.has(k.function.name)){le.push(k);continue}let Z=`Tool "${k.function.name}" is not allowed in ${this.currentMode} mode`;ge.toolError(k.function.name,Z),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:k.id,name:k.function.name,output:Z,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:k.id,name:k.function.name,output:Z,success:!1},this.memory.addToolResult(k.id,k.function.name,Z),m.info("PERMISSION",`Tool blocked by mode: ${k.function.name} - ${Z}`);}if(le.length===0)continue;let Q=le.map(k=>({id:k.id,type:"function",function:{name:k.function.name,arguments:(()=>{let U=J.get(k.id);return U?.ok?JSON.stringify(U.args):k.function.arguments})()}})),Be=!1;if(process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`\u{1F525} Before permission check. shouldAutoApprove=${this.modeStrategy.shouldAutoApprove()}, parallelToolCalls=${Q.length}`),!this.modeStrategy.shouldAutoApprove()){let k=new Set;try{for(let U of le)try{let Z=J.get(U.id);if(!Z?.ok)continue;let H=Z.args,te=this.tools.find(Y=>Y.name===U.function.name);if(!te){m.warn("RUNNER",`Tool not found: ${U.function.name}`);continue}let be=await Fp(s,async()=>this.permissionManager.checkPermission(te,H));if(!be.allowed){k.add(U.id);let Y=be.reason||`Tool "${U.function.name}" was denied`;ge.toolError(U.function.name,Y),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:U.id,name:U.function.name,output:Y,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:U.id,name:U.function.name,output:Y,success:!1};let Ae=JSON.stringify({type:"ephemeral",status:"error",tool:U.function.name,summary:"Tool execution denied by user",error:Y,final:!0});this.memory.addToolResult(U.id,U.function.name,Ae),m.info("PERMISSION",`Tool denied: ${U.function.name} - ${Y}`),Be=!0;}}catch(Z){if(Z?.name==="AbortError"||Z?.code==="ERR_CANCELED")throw Z;ge.toolError(U.function.name,Z?.message||"permission check failed");}}catch(U){if(U?.name==="AbortError"||U?.code==="ERR_CANCELED"){m.info("RUNNER","Interrupt detected during permission check"),b=!0;break}throw U}if(le=le.filter(U=>!k.has(U.id)),Q=Q.filter(U=>!k.has(U.id)),Be){m.info("RUNNER","User denied tool - terminating current turn");break}if(Q.length===0)continue}if(process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`\u{1F525} After permission check. parallelToolCalls=${Q.length}, userDeniedTool=${Be}`),this.toolInputGuardrails.length>0){let k=new Set;try{for(let U of le)try{let Z=J.get(U.id);if(!Z?.ok)continue;let H=Z.args,te={tool_name:U.function.name,tool_input:H,tool_call_id:U.id},be=this.tools.find(de=>de.name===U.function.name);if(!be)continue;this.runContext.iteration=p;let Y=await Fp(s,async()=>Es.runToolInputGuardrails(this.toolInputGuardrails,{context:this.runContext,tool_context:te,agent_name:this.agentName,tool:be}));if(!Y.should_execute){k.add(U.id);let de=Y.rejection_message||`Tool ${U.function.name} was blocked by guardrail`;ge.toolError(U.function.name,`Blocked by guardrail: ${de}`),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:U.id,name:U.function.name,output:de,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:U.id,name:U.function.name,output:de,success:!1},this.memory.addToolResult(U.id,U.function.name,de),xl(this.runContext,U.function.name,H,!1);}}catch(Z){if(Z?.name==="AbortError"||Z?.code==="ERR_CANCELED")throw Z;if(Z instanceof yt){ge.toolError(U.function.name,`Guardrail tripwire triggered: ${Z.message}`),yield {type:"error",error:`Guardrail tripwire triggered for ${U.function.name}: ${Z.message}`},b=!0;break}ge.toolError(U.function.name,`Guardrail check failed: ${Z?.message}`);}}catch(U){if(U?.name==="AbortError"||U?.code==="ERR_CANCELED"){m.info("RUNNER","Interrupt detected during guardrails check"),b=!0;break}throw U}if(b)break;if(le=le.filter(U=>!k.has(U.id)),Q=Q.filter(U=>!k.has(U.id)),Q.length===0)continue}process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`\u{1F525} Before tool execution. parallelToolCalls=${Q.length}`);let ze=await this.parallelExecutor.execute(Q,this.tools,k=>{if(ge.toolCall(k.name,{}),k.success){let Z=typeof k.output=="string"?k.output.length:JSON.stringify(k.output).length;ge.toolResult(k.name,!0,Z,k.executionTime||0);}else ge.toolError(k.name,k.output);let U={type:"tool_call_output_item",id:k.id,name:k.name,output:k.output,success:k.success,timestamp:Date.now()};},s),B=0,re=0,V=0,pe=!1;for(let k of ze.results){if(this.toolMetricsHistory.push({name:k.name,duration:k.executionTime||0,success:k.success}),this.toolMetricsHistory.length>50&&this.toolMetricsHistory.shift(),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:k.id,name:k.name,output:k.output,success:k.success,timestamp:Date.now()}},yield {type:"tool_output",id:k.id,name:k.name,output:k.output,success:k.success},(k.name==="update_plan"||k.name==="call_tool")&&k.success)try{m.info("PLAN_UPDATE","\u{1F525} Detected plan-related tool call",{resultId:k.id,toolName:k.name,toolCallsCount:q.length});let Y=q.find(de=>de.id===k.id);if(Y){m.info("PLAN_UPDATE","\u{1F525} Found original call",{callId:Y.id,argsLength:Y.function.arguments?.length});let de=bn(Y.function.arguments||"{}");if(!de.ok)throw new Error(de.reason||"Invalid update_plan arguments");let Ae=de.args,et=null;if(k.name==="update_plan"?et=Ae:k.name==="call_tool"&&Ae?.name==="update_plan"&&(et=Ae.args),!et||!Array.isArray(et.plan))m.debug("PLAN_UPDATE","Skip non-update_plan call_tool",{resultId:k.id,toolName:k.name,callToolName:Ae?.name});else {let Mn=!0;if(typeof k.output=="string")try{let gs=JSON.parse(k.output);gs&&typeof gs=="object"&&"success"in gs&&(Mn=gs.success!==!1);}catch{}Mn?(m.info("PLAN_UPDATE","\u{1F525} Parsed plan args",{hasExplanation:!!et.explanation,planSteps:et.plan?.length}),yield {type:"plan_update",explanation:et.explanation,plan:et.plan,timestamp:Date.now()},m.info("PLAN_UPDATE","\u2705 Emitted plan_update event")):m.warn("PLAN_UPDATE","Skip failed update_plan output",{resultId:k.id});}}else m.warn("PLAN_UPDATE","\u274C Could not find original tool call",{resultId:k.id,availableIds:q.map(de=>de.id)});}catch(Y){m.error("PLAN_UPDATE","\u274C Failed to parse plan",{error:Y});}let Z=typeof k.output=="string"?jp(k.output):jp(JSON.stringify(k.output));Z=this.enrichToolResult(Z,k.name,k.executionTime||0);let H=q.find(Y=>Y.id===k.id),te={};if(H){let Y=bn(H.function.arguments||"{}");Y.ok&&(te=Y.args);}if(this.toolOutputGuardrails.length>0)try{let Y=this.tools.find(de=>de.name===k.name);if(Y){let de={tool_name:k.name,tool_input:te,tool_call_id:k.id},Ae=await Es.runToolOutputGuardrails(this.toolOutputGuardrails,{context:this.runContext,tool_context:de,agent_name:this.agentName,tool:Y,output:k.output});Ae.should_use_output||(Z=Ae.replacement_message||"[Output blocked by guardrail]",ge.toolError(k.name,"Output blocked by guardrail"));}}catch(Y){Y instanceof yt&&ge.toolError(k.name,`Output guardrail tripwire triggered: ${Y.message}`);}if(!k.success&&typeof k.output=="string"){let Y=k.output.toLowerCase();if(Y.includes("operation cancelled")||Y.includes("command interrupted")||Y.includes("request aborted")){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Detected cancellation in tool output, breaking loop"),m.info("RUNNER","\u68C0\u6D4B\u5230\u5DE5\u5177\u4E2D\u65AD\u4FE1\u53F7\uFF0C\u7EC8\u6B62\u6267\u884C\u5FAA\u73AF"),b=!0;break}}xl(this.runContext,k.name,te,k.success),m.info("TOOL_RESULT",`\u{1F4E6} Tool raw output: ${k.name}`,{toolName:k.name,success:k.success,rawLength:typeof k.output=="string"?k.output.length:JSON.stringify(k.output).length,truncatedLength:Z.length,outputPreview:Z.substring(0,500)}),this.memory.addToolResult(k.id,k.name,Z);let be=k.success?"success":"error";try{let Y=typeof k.output=="string"?k.output:JSON.stringify(k.output),de=JSON.parse(Y);de.status==="already_done"?be="already_done":de.status==="success"?be="success":de.status==="error"&&(be="error");}catch{}if(this.loopDetector.updateLastStatus(be),_.push({iteration:p,name:k.name,status:be,executionTime:k.executionTime||0}),_.length>24&&_.shift(),be==="error"?re++:be==="already_done"?(V++,this.isVerificationTool(k.name)&&(pe=!0)):(B++,this.isVerificationTool(k.name)&&(pe=!0)),be==="error"){let Y=(C.get(k.name)||0)+1;if(C.set(k.name,Y),k.name==="edit_file"&&(Y===2||Y===3)){let de=typeof k.output=="string"?k.output:JSON.stringify(k.output),Ae=k.name,et=Op(Ae,de);this.memory.add({role:"system",content:et});}}else C.set(k.name,0);}if(p>0&&p%5===0){let k=this.buildPerformanceHint();k&&(this.memory.add({role:"system",content:k}),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Performance hint injected:",k));}let Re=B+V>0;if(S=re>0&&!Re?S+1:0,process.env.CLI_DEBUG==="1"&&m.debug("LOOP_GATE","Iteration quality",{iteration:p,executionTask:M,success:B,alreadyDone:V,error:re,lowProgressStreak:S,verificationSuccess:pe}),M&&S>=2&&(this.memory.add({role:"system",content:this.buildLowProgressReplanPrompt(S)}),T++,S=0,yield {type:"raw_response_event",data:{type:"loop.progress_gate",iteration:p,reason:"low_progress",nudgeCount:T},event_type:"loop.progress_gate"}),process.env.CLI_DEBUG_CONSOLE==="1"&&ze.stats&&(yield {type:"raw_response_event",data:{type:"parallel_execution.stats",stats:ze.stats},event_type:"parallel_execution.stats"}),s?.aborted){b=!0;break}continue}else {if(this.plannerMode&&y<2&&this.shouldAutoContinuePlan(N)){y++;let J=this.buildPlanFollowupPrompt();yield {type:"raw_response_event",data:{type:"plan.auto_continue",plan_text:N,followup_prompt:J,count:y},event_type:"plan.auto_continue"},this.memory.add({role:"user",content:J});continue}if(N&&(yield {type:"run_item_stream_event",name:"message_output_created",item:{type:"message_output_item",content:N,role:"assistant",timestamp:Date.now()}}),process.env.CLI_DEBUG==="1"&&(m.info("RUNNER","=== Loop Exit: No Tool Calls ==="),m.info("RUNNER",`Finish Reason: ${oe}`),m.info("RUNNER",`Content Length: ${N.length}`),m.info("RUNNER",`Content Preview: ${N.slice(0,300)}`),m.info("RUNNER",`Tool Calls Count: ${q.length}`),m.info("RUNNER",`Iteration: ${p}`)),this.structuredValidator){let J=this.structuredValidator.validate(N);if(J.ok)h=J.normalized||N,yield {type:"raw_response_event",data:{type:"structured_output.accepted",schema:this.structuredOutput?.name,normalized_text:h,parsed:J.parsed},event_type:"structured_output.accepted"};else {yield {type:"raw_response_event",data:{type:"structured_output.retry",schema:this.structuredOutput?.name,reason:J.reason,message:J.message,errors:J.errors},event_type:"structured_output.retry"},this.memory.add({role:"system",content:this.structuredValidator.buildRetryPrompt(J)}),h="";continue}}else h=N;this.outputGuardrails.length>0&&h&&(yield {type:"raw_response_event",data:{type:"output_guardrails.check_start",count:this.outputGuardrails.length},event_type:"output_guardrails.check_start"},await Es.runOutputGuardrails(this.outputGuardrails,n,this.agentName,h),yield {type:"raw_response_event",data:{type:"output_guardrails.check_passed"},event_type:"output_guardrails.check_passed"});let z=this.evaluateCompletionEvidence(M,g,_);if(!z.ok){T++,this.memory.add({role:"system",content:this.buildEvidenceRequiredPrompt(z.reason)}),process.env.CLI_DEBUG==="1"&&m.debug("LOOP_GATE","Completion blocked: missing evidence",{iteration:p,reason:z.reason,nudgeCount:T}),yield {type:"raw_response_event",data:{type:"loop.completion_gate",iteration:p,reason:z.reason,nudgeCount:T},event_type:"loop.completion_gate"};continue}break}}catch(L){if(L?.type==="stream_retry"){R=true,yield L;continue}let $=L instanceof Ce?L:ft(L);if(process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Error classified:",{category:$.category,code:$.code,retryable:$.retryable,message:$.message}),$.category==="canceled"){w="interrupted",b=true,yield {type:"error",error:"Task interrupted by user."};break}if($.retryable&&F<x&&!R){F++;let G=br($.category,F,$.retryAfter),q=$.category==="retryable_rate_limit",oe=$.code==="STREAM_TIMEOUT",ue=$.category==="retryable_network"||$.category==="retryable_stream";m.warn("RUNNER",`Retrying after ${nt(G)} (attempt ${F}/${x}): ${$.message}`),yield {type:"raw_response_event",data:{type:"runner.stream_retry",error:$.message,errorCode:$.code,attempt:F,maxRetries:x,delayMs:G,isRateLimit:q,isStreamTimeout:oe,isNetworkError:ue},event_type:"runner.stream_retry"},await fn(G),p--;continue}let P=Wi($),N=$.message;P&&!N.includes(P)&&(N=`${N}
1487
+ `;return l+d+c}var Yi=class{llmProvider;providerName;model;tools;memory;config;agentName;agentDescription;instructions;contextInjection;userData;plannerMode;inputGuardrails=[];outputGuardrails=[];toolInputGuardrails=[];toolOutputGuardrails=[];structuredOutput;structuredValidator;maxInputTokensOverride;maxInputTokens;minHistoryMessages;parallelExecutor;unifiedCompressor;compressionMode;toolMetricsHistory=[];workspacePath;disableSystemPrompt;enableFGTS;runContext;permissionManager;modeStrategy;currentMode;loopDetector;enablePlanMode;constructor(e){if(this.llmProvider=e.llmProvider,this.providerName=e.providerName,this.model=e.model,this.tools=e.tools,this.memory=e.memory,this.config=e.config,this.agentName=e.agentName||"DefaultAgent",this.agentDescription=e.agentDescription||"",this.instructions=e.instructions,this.contextInjection=e.contextInjection,this.userData=e.userData,this.plannerMode=e.plannerMode??false,this.structuredOutput=e.structuredOutput,this.maxInputTokensOverride=e.maxInputTokensOverride,this.maxInputTokens=this.computeMaxInputTokens(e.contextWindow,e.tailTokenBudget,this.maxInputTokensOverride),this.minHistoryMessages=Math.max(1,e.minHistoryMessages??6),e.structuredOutput&&(this.structuredValidator=new zi(e.structuredOutput)),this.inputGuardrails=e.inputGuardrails||[],this.outputGuardrails=e.outputGuardrails||[],this.toolInputGuardrails=e.toolInputGuardrails||[],this.toolOutputGuardrails=e.toolOutputGuardrails||[],this.parallelExecutor=new Ji,this.compressionMode=e.compressionMode??"sync",this.workspacePath=e.workspacePath,this.unifiedCompressor=new Hi({debug:process.env.CLI_DEBUG==="1",minRecentMessages:this.minHistoryMessages,enableLLMCompression:true}),this.disableSystemPrompt=e.disableSystemPrompt??false,this.enableFGTS=e.enableFGTS??false,this.unifiedCompressor.setLLMProvider(this.llmProvider,this.model),e.contextWindow&&this.unifiedCompressor.setContextWindow(e.contextWindow),this.currentMode=e.config.mode??"agent",this.modeStrategy=Dl(this.currentMode),this.permissionManager=e.permissionManager??new ls({defaultPermission:"ask"}),this.loopDetector=Lp(),this.enablePlanMode=e.enablePlanMode??true,e.approvalHandler){let t=e.approvalHandler;this.permissionManager.setApprovalHandler(async s=>({approved:await t({id:"",name:s.toolName,args:s.args}),remember:false}));}}setApprovalHandler(e){if(!e){this.permissionManager.setApprovalHandler(void 0);return}this.permissionManager.setApprovalHandler(async t=>({approved:await e({id:"",name:t.toolName,args:t.args}),remember:false}));}setMode(e){this.currentMode=e,this.modeStrategy=Dl(e),m.info("Runner",`Mode switched to: ${e}`);}getMode(){return this.currentMode}getPermissionManager(){return this.permissionManager}computeMaxInputTokens(e,t,s){if(s&&s>0)return s;let r=e&&e>0?e:19e4,i=.7,o=Math.floor(r*i),l=Math.min(t??Np,Math.floor(r*.1)),c=Math.max(2e3,o-l);if(process.env.CLI_DEBUG==="1"||process.env.CLI_DEBUG_CONSOLE==="1"){let u=`[Context] maxInputTokens=${c} (contextWindow=${r}, override=${s}, tailBudget=${t??Np}, safety=${i})`;console.log(u);}return c}async*withStreamWatchdog(e,t){if(qv){for await(let i of e)yield i;return}let s=e[Symbol.asyncIterator](),n=t?new Promise((i,o)=>{t.aborted?o(Vi()):t.addEventListener("abort",()=>o(Vi()),{once:true});}):null,r=false;for(;;){if(t?.aborted){if(s.return)try{await s.return();}catch{}throw Vi()}let i=r?Wv:Uv,o=null,l=new Promise((c,u)=>{o=setTimeout(()=>{u(Gv(r?"idle":"first_chunk",i));},i);});try{let c=await Promise.race(n?[s.next(),l,n]:[s.next(),l]);if(o&&clearTimeout(o),c.done)return;r=!0,yield c.value;}catch(c){if(o&&clearTimeout(o),s.return)try{await s.return();}catch{}throw c?.code==="STREAM_TIMEOUT"&&m.warn("RUNNER",`[watchdog] ${c.message}`),c}}}async applyContextWindow(e=0){if(!this.maxInputTokens)return null;let t=this.memory.getMessagesForLLM(),s=await this.unifiedCompressor.compressHistory(t,this.maxInputTokens,{iteration:e,enableLLMCompression:true});if(s.stats.droppedMessages>0||s.stats.llmCompressedMessages>0){this.memory.setMessages(s.messages);let n=this.compressionMode==="async"?"Async":"Sync",r=(s.originalTokens/1e3).toFixed(1),i=(s.compressedTokens/1e3).toFixed(1),o=(s.savedTokens/1e3).toFixed(1),l=s.originalCount,c=s.compressedCount;m.info("Context",`[${n}] \u538B\u7F29\u5B8C\u6210: ${l}\u6761/${r}K \u2192 ${c}\u6761/${i}K (\u8282\u7701 ${o}K, \u4E22\u5F03${s.stats.droppedMessages}\u6761, LLM\u538B\u7F29${s.stats.llmCompressedMessages}\u6761)`),s.debugInfo&&s.debugInfo.forEach(u=>m.debug("Context",u));}return s}setCompressionMode(e){this.compressionMode=e,m.info("Context",`Compression mode set to: ${e}`);}getCompressionMode(){return this.compressionMode}async getInstructions(e){if(typeof this.instructions=="string")return this.instructions;let t={name:this.agentName,description:this.agentDescription};return await this.instructions(e,t)}async getContextInjection(e){if(!this.contextInjection)return null;let s=(typeof this.contextInjection=="string"?this.contextInjection:await this.contextInjection(e,{name:this.agentName,description:this.agentDescription}))?.trim();return s||null}shouldIncludeLastRun(e){let t=e.trim().toLowerCase();return t?/上次|之前|前面|上一步|上轮|继续|回顾|resume|continue|previous|last time/.test(t):false}createRunContext(e,t=0){return {task:e,timestamp:Date.now(),currentTime:new Date,iteration:t,userData:this.userData,systemStatus:void 0}}setUserData(e){this.userData={...this.userData,...e};}async*run(e,t,s){this.runContext={task:e,timestamp:Date.now(),currentTime:new Date,iteration:0,userData:this.userData},this.loopDetector.reset(),process.env.CLI_DEBUG==="1"&&(m.debug("MK",` hasSignal: ${!!s}`),m.debug("RUNNER","========================================"),m.debug("RUNNER","=== runner.run ENTRY ==="),m.debug("RUNNER",` task: "${e?.substring(0,50)}..."`),m.debug("RUNNER",` hasImages: ${!!t&&t.length>0}`),m.debug("RUNNER",` hasSignal: ${!!s}`)),ge.agentStart(e),yield {type:"agent_updated_stream_event",new_agent:{name:this.agentName}};let n=this.createRunContext(e,0),r=this.memory.hasConversationMessages?.()??this.memory.getMessagesForLLM().some(I=>I.role==="user"||I.role==="assistant"),i=!r||this.shouldIncludeLastRun(e);n.userData={...n.userData??{},hasConversation:r,includeLastRun:i},this.inputGuardrails.length>0&&(yield {type:"raw_response_event",data:{type:"input_guardrails.check_start",count:this.inputGuardrails.length},event_type:"input_guardrails.check_start"},await Is.runInputGuardrails(this.inputGuardrails,n,this.agentName,e),yield {type:"raw_response_event",data:{type:"input_guardrails.check_passed"},event_type:"input_guardrails.check_passed"});let o=await this.getInstructions(n),l=await this.getContextInjection(n);process.env.CLI_DEBUG==="1"&&(console.log("[RUNNER] dynamicInstructions length:",o?.length||0),console.log("[RUNNER] dynamicInstructions START:",o?.substring(0,200)),console.log("[RUNNER] dynamicInstructions END:",o?.substring(o.length-500)),console.log("[RUNNER] contains \u534F\u4F5C\u6A21\u5F0F:",o?.includes("\u534F\u4F5C\u6A21\u5F0F")),console.log("[RUNNER] contains delegate_task:",o?.includes("delegate_task")));let c=this.memory.getMessagesForLLM(),u=c.some(I=>I.role==="system");if(process.env.CLI_DEBUG==="1"&&(console.log("[RUNNER] hasSystemPrompt:",u,"existingMessages count:",c.length),console.log("[RUNNER] disableSystemPrompt:",this.disableSystemPrompt)),this.disableSystemPrompt)u&&this.memory.clear(),o&&this.memory.add({role:"system",content:o});else if(!u){let I=this.modeStrategy.getSystemPrompt();this.memory.add({role:"system",content:I}),this.memory.add({role:"system",content:o}),this.structuredValidator&&this.memory.add({role:"system",content:this.structuredValidator.buildSystemPrompt()});try{let A=await ll(this.workspacePath);A&&this.memory.add({role:"system",content:A});}catch{}}if(l?this.memory.upsertSystemTagged?this.memory.upsertSystemTagged("context_injection",l):u||this.memory.add({role:"system",content:l}):this.memory.removeSystemTagged?.("context_injection"),t&&t.length>0){let I=[{type:"text",text:e},...t.map(A=>({type:"image_url",image_url:{url:A,detail:"auto"}}))];this.memory.add({role:"user",content:I});}else this.memory.add({role:"user",content:e});let d=Date.now(),p=0,h="",g=0,f={totalTokens:0,promptTokens:0,completionTokens:0},b=false,y=0,w=null,C=new Map,S=0,T=0,_=[],M=this.isExecutionOrientedTask(e),F=0,x=Jt.streamMaxRetries,R=false,j=Number.isFinite(this.config.maxIterations)?this.config.maxIterations:wp,v=j===0||j===1/0,E=$p(this.config.maxToolCalls,Cp),O=$p(this.config.maxRuntimeMs,Sp);for(;v||p<j;){if(s?.aborted){w="interrupted",b=true,yield {type:"error",error:"Task interrupted by user."};break}if(O!==null&&Date.now()-d>=O){w="runtime_limit",b=true,yield {type:"error",error:`Reached max runtime (${nt(O)}). Please summarize progress and ask whether to continue.`};break}if(E!==null&&g>=E){w="tool_call_limit",b=true,yield {type:"error",error:`Reached max tool calls (${E}). Please summarize progress and ask whether to continue.`};break}p++;let I=null;if(this.maxInputTokens){let L=tt(this.memory.getMessagesForLLM()),$=this.maxInputTokens*.97;L>$&&(I=await this.applyContextWindow(p));}I&&(I.stats.droppedMessages>0||I.stats.llmCompressedMessages>0)&&(yield {type:"context_compaction",status:"completed",originalMessages:I.originalCount,keptMessages:I.messages.length,droppedMessages:I.stats.droppedMessages,compressedMessages:I.stats.llmCompressedMessages,originalTokens:I.originalTokens,finalTokens:I.compressedTokens,budgetTokens:this.maxInputTokens||0,useLLM:I.stats.llmCompressedMessages>0,timestamp:Date.now()});let A=this.memory.checkContextHealth();if((A.warnings.length>0||A.shouldCleanup)&&(yield {type:"raw_response_event",data:{type:"context_health",totalTokens:A.totalTokens,toolResultTokens:A.toolResultTokens,toolResultRatio:A.toolResultRatio,messageCount:A.messageCount,toolMessageCount:A.toolMessageCount,warnings:A.warnings,shouldCompress:A.shouldCompress,shouldCleanup:A.shouldCleanup,byType:A.byType},event_type:"context_health"},A.shouldCleanup&&A.byType.ephemeral.count>5)){let L=this.memory.cleanupEphemeral();L>0&&m.info("Runner",`Cleaned ${L} ephemeral messages`);}m.debug("Runner",this.memory.getTokenSummary()),ge.agentIteration(p,"thinking"),yield {type:"iteration_start",iteration:p};try{yield {type:"raw_response_event",data:{type:"response.created",response:{id:`resp_${Date.now()}`,model:this.model}},event_type:"response.created"};let L=this.memory.getMessagesForLLM();if(m.info("LLM",`Request: model=${this.model}, messages=${L.length}, tools=${this.tools.length}`),m.debug("LLM","Request messages",{messageCount:L.length,lastMessage:L[L.length-1]?.content?.toString().substring(0,200)}),process.env.CLI_DEBUG==="1"){let z=L.filter(J=>J.role==="system");console.log("[RUNNER] System messages count:",z.length);for(let J=0;J<z.length;J++){let ie=z[J].content,K=typeof ie=="string"?ie:JSON.stringify(ie);console.log(`[RUNNER] System[${J}] length:`,K?.length||0),console.log(`[RUNNER] System[${J}] contains \u534F\u4F5C\u6A21\u5F0F:`,K?.includes("\u534F\u4F5C\u6A21\u5F0F")||!1),console.log(`[RUNNER] System[${J}] contains delegate_task:`,K?.includes("delegate_task")||!1),console.log(`[RUNNER] System[${J}] preview:`,K?.substring(0,300)||"");}}let $=this.modeStrategy.filterTools(this.tools);process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`Mode: ${this.currentMode}, Available tools: ${$.length}/${this.tools.length}`);let P=this.llmProvider.chatStreamed(this.memory.getMessagesForLLM(),{model:this.model,tools:$,temperature:this.config.temperature,structuredOutput:this.structuredOutput,maxInputTokens:this.maxInputTokens,disableSystemPrompt:this.disableSystemPrompt,enableFGTS:this.enableFGTS,signal:s}),N="",D="",G=[],q=[],oe="",ue={prompt_tokens:0,completion_tokens:0,total_tokens:0};for await(let z of this.withStreamWatchdog(P,s)){if(z.type==="stream_retry"){R=!0,yield z;continue}if(z.type==="stream_recovered"){yield {type:"stream_recovered",attempt:z.attempt,maxRetries:z.maxRetries};continue}yield {type:"raw_response_event",data:z,event_type:z.choices?.[0]?.delta?"response.delta":"response.chunk"};let J=z.choices?.[0]?.delta;if(z.usage){ue={prompt_tokens:z.usage.prompt_tokens||ue.prompt_tokens,completion_tokens:z.usage.completion_tokens||ue.completion_tokens,total_tokens:z.usage.total_tokens||ue.total_tokens,cached_tokens:z.usage.cached_tokens,cache_read_input_tokens:z.usage.cache_read_input_tokens,cache_creation_input_tokens:z.usage.cache_creation_input_tokens,prompt_tokens_details:z.usage.prompt_tokens_details},f={promptTokens:ue.prompt_tokens,completionTokens:ue.completion_tokens,totalTokens:ue.total_tokens};let ie=!!z.choices?.[0]?.finish_reason;yield {type:"token_usage",usage:ue,is_final:ie};}if(J){if(J.reasoning_content&&(D+=J.reasoning_content,yield {type:"reasoning_delta",delta:J.reasoning_content}),J.reasoning_complete&&(yield {type:"reasoning_complete"}),J.content&&(N+=J.content,h=N,yield {type:"text_delta",delta:J.content}),J.tool_calls)for(let ie of J.tool_calls){let K=ie.index;q[K]||(q[K]={id:ie.id||`call_${Math.floor(Date.now())}_${K}`,type:"function",function:{name:"",arguments:""}}),ie.id&&(q[K].id=ie.id),ie.function?.name&&(q[K].function.name=ie.function.name),ie.function?.arguments&&(q[K].function.arguments+=ie.function.arguments,yield {type:"tool_call_delta",id:q[K].id,name:q[K].function.name,arguments_delta:ie.function.arguments}),ie.thoughtSignature&&(q[K].thoughtSignature=ie.thoughtSignature);}z.choices?.[0]?.finish_reason&&(oe=z.choices[0].finish_reason),z.thinking_blocks&&Array.isArray(z.thinking_blocks)&&(G=z.thinking_blocks.map(ie=>({type:ie.type,thinking:ie.thinking,signature:ie.signature,data:ie.data})));}}N&&(yield {type:"text_done"}),process.env.CLI_DEBUG_CONSOLE==="1"&&process.env.NEOX_UI_MODE==="1"&&console.log("[Runner] \u{1F3AF} Emitting response.completed event (after LLM response)"),yield {type:"raw_response_event",data:{type:"response.completed"},event_type:"response.completed"};let ke={role:"assistant",content:(N||"").trimEnd()};if(D&&(ke.reasoning_content=D),G.length>0&&(ke.thinking_blocks=G),q.length>0&&(ke.tool_calls=q.map(z=>({...z,function:{...z.function,arguments:z.function.arguments}}))),this.memory.add(ke),process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`\u{1F525} Stream ended. toolCalls.length=${q.length}, fullContent.length=${N.length}`),q.length>0){let z=/\[omitted\s+\w+:\s*\d+\s*lines?,\s*\d+\s*chars?\]/i;for(let k of q){let U=k.function.arguments||"";if(z.test(U)){console.error("[Runner] \u{1F6A8} Placeholder string detected in tool arguments!"),console.error(`[Runner] Tool: ${k.function.name}`),console.error(`[Runner] Arguments preview: ${U.substring(0,500)}`),yield {type:"raw_response_event",data:{type:"error.placeholder_detected",message:"Model generated placeholder string instead of actual content. This usually happens when the model sees truncated data in conversation history.",tool:k.function.name},event_type:"error.placeholder_detected"},yield {type:"error",error:'Error: Model attempted to write placeholder text ("[omitted ...]") instead of actual content. This happens when conversation history contains truncated data. Please start a new conversation.'},b=!0;break}}if(b)break;if(E!==null&&g+q.length>E){w="tool_call_limit",b=!0,yield {type:"error",error:`Tool call budget exceeded (max ${E}, requested ${q.length}). Please summarize progress and ask whether to continue.`};break}if(q.length>1){let k=q.map(Z=>Z.function.name),U=[...new Set(k)];U.length===1&&k.length>1?m.info("RUNNER",`\u{1F504} Parallel calls: ${k.length}x ${U[0]} (different parameters)`):m.info("RUNNER",`\u{1F504} Parallel calls: ${k.join(", ")}`);}let J=new Map;for(let k of q)J.set(k.id,bn(k.function.arguments));for(let k of q){g++,yield {type:"run_item_stream_event",name:"tool_called",item:{type:"tool_call_item",id:k.id,name:k.function.name,arguments:k.function.arguments,timestamp:Date.now()}},yield {type:"tool_call_start",id:k.id,name:k.function.name};let Z=J.get(k.id),H=Z?.ok??!1;H?Z?.repaired&&m.warn("RUNNER","Tool arguments repaired from non-standard JSON",{tool:k.function.name,callId:k.id}):ge.toolError(k.function.name,`Invalid JSON arguments (${Z?.reason||"parse failed"}): ${k.function.arguments.substring(0,200)}...`),yield {type:"tool_call_done",id:k.id,name:k.function.name,arguments:k.function.arguments,success:H},yield {type:"raw_response_event",data:{type:"response.function_call_arguments.done",call_id:k.id,name:k.function.name,arguments:k.function.arguments},event_type:"response.function_call_arguments.done"};}let ie=new Set,K=null,xe=q.length>1;process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`Processing ${q.length} tool call(s)`,{isParallel:xe,tools:q.map(k=>k.function.name)});for(let k of q){let U=J.get(k.id);if(!U?.ok){let de=`Invalid JSON arguments for tool "${k.function.name}": ${U?.reason||"parse failed"}. Return strict JSON object arguments.`;yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:k.id,name:k.function.name,output:de,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:k.id,name:k.function.name,output:de,success:!1},this.memory.addToolResult(k.id,k.function.name,de),this.loopDetector.updateLastStatus("error"),ie.add(k.id);continue}let Z=U.args,H=this.loopDetector.detect(k.function.name,Z);if(this.loopDetector.record(k.function.name,Z),H===0)continue;let te=this.loopDetector.generateIntervention(H,k.function.name,Z);if(this.memory.add({role:"system",content:te.message}),H===2&&tu(k.function.name))continue;if(yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:k.id,name:k.function.name,output:te.message,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:k.id,name:k.function.name,output:te.message,success:!1},this.memory.addToolResult(k.id,k.function.name,te.message),this.loopDetector.updateLastStatus("error"),ie.add(k.id),te.shouldTerminate){K=te;break}}if(K&&(yield {type:"error",error:K.message},b=!0),b)break;let ee=ie.size>0?q.filter(k=>!ie.has(k.id)):q,fe=new Set(this.modeStrategy.filterTools(this.tools).map(k=>k.name)),ne=k=>k.replace(/["\s/>]+$/g,"").trim(),le=[];for(let k of ee){let U=ne(k.function.name);if(fe.has(U)||fe.has(k.function.name)){le.push(k);continue}let Z=`Tool "${k.function.name}" is not allowed in ${this.currentMode} mode`;ge.toolError(k.function.name,Z),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:k.id,name:k.function.name,output:Z,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:k.id,name:k.function.name,output:Z,success:!1},this.memory.addToolResult(k.id,k.function.name,Z),m.info("PERMISSION",`Tool blocked by mode: ${k.function.name} - ${Z}`);}if(le.length===0)continue;let Q=le.map(k=>({id:k.id,type:"function",function:{name:k.function.name,arguments:(()=>{let U=J.get(k.id);return U?.ok?JSON.stringify(U.args):k.function.arguments})()}})),Be=!1;if(process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`\u{1F525} Before permission check. shouldAutoApprove=${this.modeStrategy.shouldAutoApprove()}, parallelToolCalls=${Q.length}`),!this.modeStrategy.shouldAutoApprove()){let k=new Set;try{for(let U of le)try{let Z=J.get(U.id);if(!Z?.ok)continue;let H=Z.args,te=this.tools.find(Y=>Y.name===U.function.name);if(!te){m.warn("RUNNER",`Tool not found: ${U.function.name}`);continue}let be=await Fp(s,async()=>this.permissionManager.checkPermission(te,H));if(!be.allowed){k.add(U.id);let Y=be.reason||`Tool "${U.function.name}" was denied`;ge.toolError(U.function.name,Y),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:U.id,name:U.function.name,output:Y,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:U.id,name:U.function.name,output:Y,success:!1};let Ae=JSON.stringify({type:"ephemeral",status:"error",tool:U.function.name,summary:"Tool execution denied by user",error:Y,final:!0});this.memory.addToolResult(U.id,U.function.name,Ae),m.info("PERMISSION",`Tool denied: ${U.function.name} - ${Y}`),Be=!0;}}catch(Z){if(Z?.name==="AbortError"||Z?.code==="ERR_CANCELED")throw Z;ge.toolError(U.function.name,Z?.message||"permission check failed");}}catch(U){if(U?.name==="AbortError"||U?.code==="ERR_CANCELED"){m.info("RUNNER","Interrupt detected during permission check"),b=!0;break}throw U}if(le=le.filter(U=>!k.has(U.id)),Q=Q.filter(U=>!k.has(U.id)),Be){m.info("RUNNER","User denied tool - terminating current turn");break}if(Q.length===0)continue}if(process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`\u{1F525} After permission check. parallelToolCalls=${Q.length}, userDeniedTool=${Be}`),this.toolInputGuardrails.length>0){let k=new Set;try{for(let U of le)try{let Z=J.get(U.id);if(!Z?.ok)continue;let H=Z.args,te={tool_name:U.function.name,tool_input:H,tool_call_id:U.id},be=this.tools.find(de=>de.name===U.function.name);if(!be)continue;this.runContext.iteration=p;let Y=await Fp(s,async()=>Is.runToolInputGuardrails(this.toolInputGuardrails,{context:this.runContext,tool_context:te,agent_name:this.agentName,tool:be}));if(!Y.should_execute){k.add(U.id);let de=Y.rejection_message||`Tool ${U.function.name} was blocked by guardrail`;ge.toolError(U.function.name,`Blocked by guardrail: ${de}`),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:U.id,name:U.function.name,output:de,success:!1,timestamp:Date.now()}},yield {type:"tool_output",id:U.id,name:U.function.name,output:de,success:!1},this.memory.addToolResult(U.id,U.function.name,de),xl(this.runContext,U.function.name,H,!1);}}catch(Z){if(Z?.name==="AbortError"||Z?.code==="ERR_CANCELED")throw Z;if(Z instanceof yt){ge.toolError(U.function.name,`Guardrail tripwire triggered: ${Z.message}`),yield {type:"error",error:`Guardrail tripwire triggered for ${U.function.name}: ${Z.message}`},b=!0;break}ge.toolError(U.function.name,`Guardrail check failed: ${Z?.message}`);}}catch(U){if(U?.name==="AbortError"||U?.code==="ERR_CANCELED"){m.info("RUNNER","Interrupt detected during guardrails check"),b=!0;break}throw U}if(b)break;if(le=le.filter(U=>!k.has(U.id)),Q=Q.filter(U=>!k.has(U.id)),Q.length===0)continue}process.env.CLI_DEBUG==="1"&&m.debug("RUNNER",`\u{1F525} Before tool execution. parallelToolCalls=${Q.length}`);let ze=await this.parallelExecutor.execute(Q,this.tools,k=>{if(ge.toolCall(k.name,{}),k.success){let Z=typeof k.output=="string"?k.output.length:JSON.stringify(k.output).length;ge.toolResult(k.name,!0,Z,k.executionTime||0);}else ge.toolError(k.name,k.output);let U={type:"tool_call_output_item",id:k.id,name:k.name,output:k.output,success:k.success,timestamp:Date.now()};},s),B=0,re=0,V=0,pe=!1;for(let k of ze.results){if(this.toolMetricsHistory.push({name:k.name,duration:k.executionTime||0,success:k.success}),this.toolMetricsHistory.length>50&&this.toolMetricsHistory.shift(),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:k.id,name:k.name,output:k.output,success:k.success,timestamp:Date.now()}},yield {type:"tool_output",id:k.id,name:k.name,output:k.output,success:k.success},(k.name==="update_plan"||k.name==="call_tool")&&k.success)try{m.info("PLAN_UPDATE","\u{1F525} Detected plan-related tool call",{resultId:k.id,toolName:k.name,toolCallsCount:q.length});let Y=q.find(de=>de.id===k.id);if(Y){m.info("PLAN_UPDATE","\u{1F525} Found original call",{callId:Y.id,argsLength:Y.function.arguments?.length});let de=bn(Y.function.arguments||"{}");if(!de.ok)throw new Error(de.reason||"Invalid update_plan arguments");let Ae=de.args,et=null;if(k.name==="update_plan"?et=Ae:k.name==="call_tool"&&Ae?.name==="update_plan"&&(et=Ae.args),!et||!Array.isArray(et.plan))m.debug("PLAN_UPDATE","Skip non-update_plan call_tool",{resultId:k.id,toolName:k.name,callToolName:Ae?.name});else {let Mn=!0;if(typeof k.output=="string")try{let hs=JSON.parse(k.output);hs&&typeof hs=="object"&&"success"in hs&&(Mn=hs.success!==!1);}catch{}Mn?(m.info("PLAN_UPDATE","\u{1F525} Parsed plan args",{hasExplanation:!!et.explanation,planSteps:et.plan?.length}),yield {type:"plan_update",explanation:et.explanation,plan:et.plan,timestamp:Date.now()},m.info("PLAN_UPDATE","\u2705 Emitted plan_update event")):m.warn("PLAN_UPDATE","Skip failed update_plan output",{resultId:k.id});}}else m.warn("PLAN_UPDATE","\u274C Could not find original tool call",{resultId:k.id,availableIds:q.map(de=>de.id)});}catch(Y){m.error("PLAN_UPDATE","\u274C Failed to parse plan",{error:Y});}let Z=typeof k.output=="string"?jp(k.output):jp(JSON.stringify(k.output));Z=this.enrichToolResult(Z,k.name,k.executionTime||0);let H=q.find(Y=>Y.id===k.id),te={};if(H){let Y=bn(H.function.arguments||"{}");Y.ok&&(te=Y.args);}if(this.toolOutputGuardrails.length>0)try{let Y=this.tools.find(de=>de.name===k.name);if(Y){let de={tool_name:k.name,tool_input:te,tool_call_id:k.id},Ae=await Is.runToolOutputGuardrails(this.toolOutputGuardrails,{context:this.runContext,tool_context:de,agent_name:this.agentName,tool:Y,output:k.output});Ae.should_use_output||(Z=Ae.replacement_message||"[Output blocked by guardrail]",ge.toolError(k.name,"Output blocked by guardrail"));}}catch(Y){Y instanceof yt&&ge.toolError(k.name,`Output guardrail tripwire triggered: ${Y.message}`);}if(!k.success&&typeof k.output=="string"){let Y=k.output.toLowerCase();if(Y.includes("operation cancelled")||Y.includes("command interrupted")||Y.includes("request aborted")){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Detected cancellation in tool output, breaking loop"),m.info("RUNNER","\u68C0\u6D4B\u5230\u5DE5\u5177\u4E2D\u65AD\u4FE1\u53F7\uFF0C\u7EC8\u6B62\u6267\u884C\u5FAA\u73AF"),b=!0;break}}xl(this.runContext,k.name,te,k.success),m.info("TOOL_RESULT",`\u{1F4E6} Tool raw output: ${k.name}`,{toolName:k.name,success:k.success,rawLength:typeof k.output=="string"?k.output.length:JSON.stringify(k.output).length,truncatedLength:Z.length,outputPreview:Z.substring(0,500)}),this.memory.addToolResult(k.id,k.name,Z);let be=k.success?"success":"error";try{let Y=typeof k.output=="string"?k.output:JSON.stringify(k.output),de=JSON.parse(Y);de.status==="already_done"?be="already_done":de.status==="success"?be="success":de.status==="error"&&(be="error");}catch{}if(this.loopDetector.updateLastStatus(be),_.push({iteration:p,name:k.name,status:be,executionTime:k.executionTime||0}),_.length>24&&_.shift(),be==="error"?re++:be==="already_done"?(V++,this.isVerificationTool(k.name)&&(pe=!0)):(B++,this.isVerificationTool(k.name)&&(pe=!0)),be==="error"){let Y=(C.get(k.name)||0)+1;if(C.set(k.name,Y),k.name==="edit_file"&&(Y===2||Y===3)){let de=typeof k.output=="string"?k.output:JSON.stringify(k.output),Ae=k.name,et=Op(Ae,de);this.memory.add({role:"system",content:et});}}else C.set(k.name,0);}if(p>0&&p%5===0){let k=this.buildPerformanceHint();k&&(this.memory.add({role:"system",content:k}),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Performance hint injected:",k));}let Re=B+V>0;if(S=re>0&&!Re?S+1:0,process.env.CLI_DEBUG==="1"&&m.debug("LOOP_GATE","Iteration quality",{iteration:p,executionTask:M,success:B,alreadyDone:V,error:re,lowProgressStreak:S,verificationSuccess:pe}),M&&S>=2&&(this.memory.add({role:"system",content:this.buildLowProgressReplanPrompt(S)}),T++,S=0,yield {type:"raw_response_event",data:{type:"loop.progress_gate",iteration:p,reason:"low_progress",nudgeCount:T},event_type:"loop.progress_gate"}),process.env.CLI_DEBUG_CONSOLE==="1"&&ze.stats&&(yield {type:"raw_response_event",data:{type:"parallel_execution.stats",stats:ze.stats},event_type:"parallel_execution.stats"}),s?.aborted){b=!0;break}continue}else {if(this.plannerMode&&y<2&&this.shouldAutoContinuePlan(N)){y++;let J=this.buildPlanFollowupPrompt();yield {type:"raw_response_event",data:{type:"plan.auto_continue",plan_text:N,followup_prompt:J,count:y},event_type:"plan.auto_continue"},this.memory.add({role:"user",content:J});continue}if(N&&(yield {type:"run_item_stream_event",name:"message_output_created",item:{type:"message_output_item",content:N,role:"assistant",timestamp:Date.now()}}),process.env.CLI_DEBUG==="1"&&(m.info("RUNNER","=== Loop Exit: No Tool Calls ==="),m.info("RUNNER",`Finish Reason: ${oe}`),m.info("RUNNER",`Content Length: ${N.length}`),m.info("RUNNER",`Content Preview: ${N.slice(0,300)}`),m.info("RUNNER",`Tool Calls Count: ${q.length}`),m.info("RUNNER",`Iteration: ${p}`)),this.structuredValidator){let J=this.structuredValidator.validate(N);if(J.ok)h=J.normalized||N,yield {type:"raw_response_event",data:{type:"structured_output.accepted",schema:this.structuredOutput?.name,normalized_text:h,parsed:J.parsed},event_type:"structured_output.accepted"};else {yield {type:"raw_response_event",data:{type:"structured_output.retry",schema:this.structuredOutput?.name,reason:J.reason,message:J.message,errors:J.errors},event_type:"structured_output.retry"},this.memory.add({role:"system",content:this.structuredValidator.buildRetryPrompt(J)}),h="";continue}}else h=N;this.outputGuardrails.length>0&&h&&(yield {type:"raw_response_event",data:{type:"output_guardrails.check_start",count:this.outputGuardrails.length},event_type:"output_guardrails.check_start"},await Is.runOutputGuardrails(this.outputGuardrails,n,this.agentName,h),yield {type:"raw_response_event",data:{type:"output_guardrails.check_passed"},event_type:"output_guardrails.check_passed"});let z=this.evaluateCompletionEvidence(M,g,_);if(!z.ok){T++,this.memory.add({role:"system",content:this.buildEvidenceRequiredPrompt(z.reason)}),process.env.CLI_DEBUG==="1"&&m.debug("LOOP_GATE","Completion blocked: missing evidence",{iteration:p,reason:z.reason,nudgeCount:T}),yield {type:"raw_response_event",data:{type:"loop.completion_gate",iteration:p,reason:z.reason,nudgeCount:T},event_type:"loop.completion_gate"};continue}break}}catch(L){if(L?.type==="stream_retry"){R=true,yield L;continue}let $=L instanceof Ce?L:ft(L);if(process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Error classified:",{category:$.category,code:$.code,retryable:$.retryable,message:$.message}),$.category==="canceled"){w="interrupted",b=true,yield {type:"error",error:"Task interrupted by user."};break}if($.retryable&&F<x&&!R){F++;let G=br($.category,F,$.retryAfter),q=$.category==="retryable_rate_limit",oe=$.code==="STREAM_TIMEOUT",ue=$.category==="retryable_network"||$.category==="retryable_stream";m.warn("RUNNER",`Retrying after ${nt(G)} (attempt ${F}/${x}): ${$.message}`),yield {type:"raw_response_event",data:{type:"runner.stream_retry",error:$.message,errorCode:$.code,attempt:F,maxRetries:x,delayMs:G,isRateLimit:q,isStreamTimeout:oe,isNetworkError:ue},event_type:"runner.stream_retry"},await fn(G),p--;continue}let P=Wi($),N=$.message;P&&!N.includes(P)&&(N=`${N}
1488
1488
 
1489
1489
  \u{1F4A1} Suggestion: ${P}`),b=true;let D=Ep(N,{providerName:this.providerName});ge.agentError(D),yield {type:"raw_response_event",data:{type:"error.classified",category:$.category,code:$.code,message:$.message,retryable:$.retryable,suggestion:P,context:$.context},event_type:"error.classified"},yield {type:"error",error:D};break}}!b&&!v&&p>=j&&!h&&(w=w||"iteration_limit",b=true,yield {type:"error",error:`Reached max iterations (${j}). Please summarize progress and ask whether to continue.`}),b||(ge.agentComplete(p,g,f),m.info("LLM",`Complete: iterations=${p}, toolCalls=${g}, tokens=${f.totalTokens} (prompt=${f.promptTokens}, completion=${f.completionTokens})`)),process.env.CLI_DEBUG==="1"&&(m.debug("RUNNER","=== runner.run COMPLETING ==="),m.debug("RUNNER",` iterations: ${p}`),m.debug("RUNNER",` toolCalls: ${g}`),m.debug("RUNNER",` encounteredError: ${b}`),w&&m.debug("RUNNER",` stoppedBy: ${w}`)),yield {type:"run_done"},process.env.CLI_DEBUG==="1"&&m.debug("RUNNER","=== runner.run END (run_done yielded) ===");}shouldAutoContinuePlan(e){if(!this.plannerMode)return false;let t=(e||"").trim();if(t.length<40)return false;let s=t.toLowerCase();return ["planned steps","plan:","execution plan","\u884C\u52A8\u8BA1\u5212","\u8BA1\u5212\uFF1A","\u8BA1\u5212\u5982\u4E0B","\u65B9\u6848\uFF1A","\u6B65\u9AA4\u8BA1\u5212"].some(o=>s.includes(o))?(t.match(/(^|\n)\s*[-*•]\s+/g)||[]).length+(t.match(/(^|\n)\s*\d+\.\s+/g)||[]).length>=2:false}buildPlanFollowupPrompt(){return "Plan approved. Continue executing the plan step by step and start working immediately."}isExecutionOrientedTask(e){let t=(e||"").toLowerCase();return t.trim()?/(修复|修改|实现|编写|重构|新增|删除|运行|测试|构建|验证|fix|implement|write|edit|refactor|run|test|build|validate|debug)/i.test(t):false}isVerificationTool(e){let t=(e||"").toLowerCase();return t.includes("read")||t.includes("search")||t.includes("grep")||t.includes("test")||t.includes("lint")||t.includes("build")||t.includes("check")||t.includes("execute_shell")||t==="bash"}isMutationTool(e){let t=(e||"").toLowerCase();return t.includes("write")||t.includes("edit")||t.includes("create")||t.includes("delete")||t.includes("rename")}evaluateCompletionEvidence(e,t,s){if(this.currentMode==="auto")return {ok:true,reason:"assistant_mode"};if(!e)return {ok:true,reason:"non_execution_task"};if(t===0)return {ok:false,reason:"no_tool_execution"};let r=s.slice(-10).filter(l=>l.status==="success"||l.status==="already_done");return r.length===0?{ok:false,reason:"no_successful_tool_result"}:r.some(l=>this.isVerificationTool(l.name))?{ok:true,reason:"verified"}:r.some(l=>this.isMutationTool(l.name))?{ok:false,reason:"missing_validation_after_mutation"}:{ok:true,reason:"sufficient_success"}}buildLowProgressReplanPrompt(e){return ["[LOOP OPTIMIZER NOTICE]",`You had ${e} low-progress iterations (mostly failed tool calls).`,"Pause and re-plan before next tool call.","Required:","1) Briefly state root cause of previous failures.","2) Choose a different tool/argument strategy.","3) Run one verification step to confirm progress."].join(`
1490
1490
  `)}buildEvidenceRequiredPrompt(e){return ["[COMPLETION GATE]",`Cannot conclude task yet: ${e}.`,"Before final answer, provide concrete execution evidence:","- If code/files changed, verify via read/test/build/lint/check command.","- If command already ran, quote key output signals.","Then continue and finish only after evidence is present."].join(`
@@ -1501,11 +1501,11 @@ ${n.join(`
1501
1501
  \u{1F4A1} \u8BF7\u5148\u4F7F\u7528 readfile \u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9\uFF0C\u786E\u8BA4\u5F53\u524D\u72B6\u6001\u540E\u518D\u8FDB\u884C\u7F16\u8F91\u3002
1502
1502
  \u8FD9\u53EF\u4EE5\u907F\u514D\u57FA\u4E8E\u8FC7\u65F6\u4FE1\u606F\u8FDB\u884C\u7F16\u8F91\u3002`,{file_path:s,suggestion:"use readfile first"}))}};var Gp=[Hv],Up=[];var Nt=class{prepareRequest(e,t){let{model:s,temperature:n,maxInputTokens:r,disableSystemPrompt:i,systemPromptOverride:o,...l}=t,c=this.constraints.validateParams({model:s,temperature:n,max_tokens:r,...l}),u=this.constraints.normalizeParams({model:s,temperature:n,max_tokens:r,...l}),d=i?null:o&&o.trim().length>0?o:this.promptBuilder.buildSystemPrompt({workDir:process.cwd(),language:this.detectLanguage(),modelName:s}),p=i||!d?e:this.injectSystemPrompt(e,d),h={...u,model:s,maxInputTokens:this.applyTokenLimits(s,r)};return {messages:p,options:h,validation:{valid:c.valid,errors:c.errors,warnings:c.warnings}}}injectSystemPrompt(e,t){if(e.some(n=>n.role==="system")){let n=e.filter(o=>o.role==="system").map(o=>this.normalizeSystemContent(o.content)).filter(o=>o.length>0),r=n.length>0?[t,...n].join(`
1503
1503
 
1504
- `):t,i=e.filter(o=>o.role!=="system");return [{role:"system",content:r},...i]}return [{role:"system",content:t},...e]}normalizeSystemContent(e){return e?typeof e=="string"?e.trim():Array.isArray(e)?e.map(s=>!s||typeof s!="object"?"":s.type==="text"&&typeof s.text=="string"?s.text:"").join("").trim():String(e).trim():""}applyTokenLimits(e,t){if(!e)return t;let s=this.constraints.getTokenLimits(e);return Math.min(t||4096,s.maxOutput)}detectLanguage(){return process.env.NEOX_LANGUAGE==="en"?"en":"zh"}};var Jv={"gpt-5.2":{id:"gpt-5.2",displayName:"GPT-5.2",provider:"openai",maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:96,reasoning:98,vision:92,creativity:94,speed:75,cost:25},releaseDate:"2025-12-11",notes:'400K \u4E0A\u4E0B\u6587\u7A97\u53E3,128K \u8F93\u51FA\u9650\u5236,\u4EE3\u53F7"Garlic"'},"gpt-5.2-codex":{id:"gpt-5.2-codex",displayName:"GPT-5.2 Codex",provider:"openai",aliases:["gpt-5.2-codex"],maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:98,reasoning:97,vision:90,creativity:92,speed:70,cost:20},releaseDate:"2025-12-10",notes:"GPT-5.2 \u7684 Codex \u9ED8\u8BA4\u7248\u672C,\u4E13\u4E3A\u7F16\u7A0B\u4EFB\u52A1\u4F18\u5316"},"gpt-5.2-codex-high":{id:"gpt-5.2-codex-high",displayName:"GPT-5.2 Codex High",provider:"openai",aliases:["gpt-5.2-codex-h"],maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:99,reasoning:98,vision:90,creativity:93,speed:60,cost:15},releaseDate:"2025-12-10",notes:"GPT-5.2 Codex \u9AD8\u6027\u80FD\u6A21\u5F0F,\u6700\u5F3A\u7F16\u7A0B\u80FD\u529B,\u66F4\u6162\u66F4\u8D35"},"gpt-5.2-codex-medium":{id:"gpt-5.2-codex-medium",displayName:"GPT-5.2 Codex Medium",provider:"openai",aliases:["gpt-5.2-codex-m"],maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:95,reasoning:94,vision:88,creativity:90,speed:80,cost:40},releaseDate:"2025-12-10",notes:"GPT-5.2 Codex \u5E73\u8861\u6A21\u5F0F,\u6027\u4EF7\u6BD4\u4F18\u9009"},"gpt-5.1":{id:"gpt-5.1",displayName:"GPT-5.1",provider:"openai",maxInputTokens:272e3,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:94,reasoning:96,vision:90,creativity:92,speed:80,cost:30},notes:"272K \u4E0A\u4E0B\u6587,128K \u8F93\u51FA,\u9002\u5408\u957F\u4E0A\u4E0B\u6587\u4EFB\u52A1"},"gpt-5.1-codex":{id:"gpt-5.1-codex",displayName:"GPT-5.1 Codex",provider:"openai",aliases:["gpt-5-codex","gpt-5.1-codex-max"],maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:97,reasoning:95,vision:88,creativity:90,speed:75,cost:25},notes:"Codex \u4F18\u5316\u7248,400K \u4E0A\u4E0B\u6587,\u4E13\u4E3A agentic \u7F16\u7A0B\u5DE5\u4F5C\u6D41\u8BBE\u8BA1"},"gpt-5.1-codex-mini":{id:"gpt-5.1-codex-mini",displayName:"GPT-5.1 Codex Mini",provider:"openai",aliases:["gpt-5-codex-mini"],maxInputTokens:272e3,maxOutputTokens:128e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:0,creativity:85,speed:92,cost:85},notes:"\u66F4\u5FEB\u66F4\u4FBF\u5B9C\u7684 Codex \u7248\u672C"},"gpt-5":{id:"gpt-5",displayName:"GPT-5",provider:"openai",maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:92,reasoning:94,vision:90,creativity:94,speed:80,cost:35},deprecated:true,replacedBy:"gpt-5.1",notes:"\u5DF2\u88AB GPT-5.1 \u66FF\u4EE3"},"gpt-4.1":{id:"gpt-4.1",displayName:"GPT-4.1",provider:"openai",aliases:["gpt-4.1-2025-04-14"],maxInputTokens:1e6,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:92,vision:88,creativity:90,speed:65,cost:15},releaseDate:"2025-04-14",notes:"\u8D85\u5927 1M+ \u4E0A\u4E0B\u6587\u7A97\u53E3,\u9002\u5408\u5904\u7406\u5927\u578B\u4EE3\u7801\u5E93"},"gpt-4o":{id:"gpt-4o",displayName:"GPT-4o",provider:"openai",aliases:["gpt-4o-2024-11-20","gpt-4o-2024-08-06"],maxInputTokens:128e3,maxOutputTokens:16384,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:85,vision:88,creativity:88,speed:75,cost:50}},"gpt-4o-mini":{id:"gpt-4o-mini",displayName:"GPT-4o Mini",provider:"openai",aliases:["gpt-4o-mini-2024-07-18"],maxInputTokens:128e3,maxOutputTokens:16384,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:75,reasoning:72,vision:80,creativity:75,speed:92,cost:90}},o3:{id:"o3",displayName:"o3",provider:"openai",maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:92,reasoning:99,vision:0,creativity:78,speed:40,cost:15},notes:"\u65B0\u4E00\u4EE3\u63A8\u7406\u6A21\u578B,\u63A8\u7406\u80FD\u529B\u6700\u5F3A"},"o3-mini":{id:"o3-mini",displayName:"o3 Mini",provider:"openai",aliases:["o3-mini-2025-01-31"],maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:88,reasoning:95,vision:0,creativity:75,speed:65,cost:60}},"o4-mini":{id:"o4-mini",displayName:"o4 Mini",provider:"openai",maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:90,reasoning:96,vision:0,creativity:76,speed:70,cost:55}},o1:{id:"o1",displayName:"o1",provider:"openai",aliases:["o1-2024-12-17"],maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:88,reasoning:95,vision:0,creativity:75,speed:45,cost:25}},"o1-mini":{id:"o1-mini",displayName:"o1 Mini",provider:"openai",aliases:["o1-mini-2024-09-12"],maxInputTokens:128e3,maxOutputTokens:65536,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:82,reasoning:88,vision:0,creativity:70,speed:70,cost:70}},"codex-mini-latest":{id:"codex-mini-latest",displayName:"Codex Mini (Latest)",provider:"openai",maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:82,vision:0,creativity:75,speed:88,cost:80}},"gpt-4-turbo":{id:"gpt-4-turbo",displayName:"GPT-4 Turbo",provider:"openai",aliases:["gpt-4-turbo-2024-04-09"],maxInputTokens:128e3,maxOutputTokens:4096,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:87,vision:85,creativity:90,speed:70,cost:40}},"gpt-3.5-turbo":{id:"gpt-3.5-turbo",displayName:"GPT-3.5 Turbo",provider:"openai",maxInputTokens:16385,maxOutputTokens:4096,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:65,reasoning:60,vision:0,creativity:70,speed:95,cost:98}}},Kv={"claude-opus-4-6":{id:"claude-opus-4-6",displayName:"Claude Opus 4.6",provider:"anthropic",aliases:["claude-opus-4.6"],maxInputTokens:2e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:99,reasoning:98,vision:91,creativity:96,speed:66,cost:18},notes:"Claude Opus 4.6 (latest alias)"},"claude-opus-4-5-20251101":{id:"claude-opus-4-5-20251101",displayName:"Claude Opus 4.5",provider:"anthropic",aliases:["claude-opus-4.5"],maxInputTokens:2e5,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:98,reasoning:97,vision:90,creativity:95,speed:65,cost:20},releaseDate:"2025-11-24",notes:"\u6700\u5F3A Claude \u6A21\u578B,\u652F\u6301 Extended Thinking,\u4F01\u4E1A\u7248\u53EF\u6269\u5C55\u81F3 1M \u4E0A\u4E0B\u6587"},"claude-sonnet-4-5-20250929":{id:"claude-sonnet-4-5-20250929",displayName:"Claude Sonnet 4.5",provider:"anthropic",aliases:["claude-sonnet-4.5","claude-sonnet-4-5-20250929-thinking"],maxInputTokens:2e5,maxOutputTokens:16e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:92,reasoning:90,vision:88,creativity:90,speed:80,cost:50},releaseDate:"2025-09-29",notes:"\u5E73\u8861\u6027\u80FD\u4E0E\u6210\u672C,beta \u7248\u672C\u652F\u6301 1M \u4E0A\u4E0B\u6587"},"claude-sonnet-4-20250514":{id:"claude-sonnet-4-20250514",displayName:"Claude Sonnet 4",provider:"anthropic",aliases:["claude-sonnet-4"],maxInputTokens:2e5,maxOutputTokens:16e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:85,creativity:88,speed:82,cost:55},notes:"2025-08-12 \u5347\u7EA7\u652F\u6301 1M beta \u4E0A\u4E0B\u6587"},"claude-opus-4-20250514":{id:"claude-opus-4-20250514",displayName:"Claude Opus 4",provider:"anthropic",aliases:["claude-opus-4"],maxInputTokens:2e5,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:96,reasoning:95,vision:88,creativity:94,speed:70,cost:25}},"claude-haiku-4-5-20251001":{id:"claude-haiku-4-5-20251001",displayName:"Claude Haiku 4.5",provider:"anthropic",aliases:["claude-haiku-4.5"],maxInputTokens:2e5,maxOutputTokens:8e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:78,reasoning:75,vision:80,creativity:75,speed:95,cost:95},notes:"\u6700\u5FEB\u6700\u4FBF\u5B9C\u7684 Claude 4.5 \u6A21\u578B"},"claude-3-5-sonnet-20241022":{id:"claude-3-5-sonnet-20241022",displayName:"Claude 3.5 Sonnet (New)",provider:"anthropic",aliases:["claude-3.5-sonnet-new","claude-3-5-sonnet-latest"],maxInputTokens:2e5,maxOutputTokens:16e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:85,creativity:87,speed:85,cost:55},releaseDate:"2024-10-22",notes:"Claude 3.5 Sonnet \u5347\u7EA7\u7248"},"claude-3-5-haiku-20241022":{id:"claude-3-5-haiku-20241022",displayName:"Claude 3.5 Haiku",provider:"anthropic",aliases:["claude-3.5-haiku"],maxInputTokens:2e5,maxOutputTokens:8e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:75,reasoning:72,vision:78,creativity:73,speed:98,cost:98},releaseDate:"2024-10-22",notes:"\u6700\u5FEB\u6700\u4FBF\u5B9C\u7684 Claude 3.5 \u6A21\u578B"}},Vv={"gemini-3-pro-preview":{id:"gemini-3-pro-preview",displayName:"Gemini 3 Pro Preview",provider:"gemini",aliases:["gemini-3-pro","gemini-3.0-pro-preview"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:94,reasoning:95,vision:96,creativity:94,speed:72,cost:35},releaseDate:"2026-01",notes:"Gemini 3 \u9884\u89C8\u7248,UI/\u89C6\u89C9\u8BBE\u8BA1\u4E13\u957F,1M \u4E0A\u4E0B\u6587"},"gemini-3.0-pro":{id:"gemini-3.0-pro",displayName:"Gemini 3.0 Pro",provider:"gemini",aliases:["gemini-3.0-pro-latest"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:95,reasoning:96,vision:94,creativity:92,speed:70,cost:30},releaseDate:"2025-12",notes:"Flagship multimodal model with 1M context, high-precision reasoning"},"gemini-2.5-flash":{id:"gemini-2.5-flash",displayName:"Gemini 2.5 Flash",provider:"gemini",aliases:["gemini-2.5-flash-latest"],maxInputTokens:1048576,maxOutputTokens:65535,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:90,creativity:87,speed:92,cost:85},releaseDate:"2025-03",notes:"Fast and cost-efficient, ~1500 pages or 30K lines of code"},"gemini-2.5-pro":{id:"gemini-2.5-pro",displayName:"Gemini 2.5 Pro",provider:"gemini",aliases:["gemini-2.5-pro-latest"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:93,reasoning:92,vision:92,creativity:90,speed:75,cost:40},releaseDate:"2025-03",notes:"Balanced performance with 1M context window"},"gemini-2.0-flash-thinking":{id:"gemini-2.0-flash-thinking",displayName:"Gemini 2.0 Flash Thinking",provider:"gemini",aliases:["gemini-2.0-flash-thinking-exp","gemini-2.0-flash-thinking-experimental"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:92,reasoning:94,vision:90,creativity:88,speed:85,cost:50},releaseDate:"2024-12-19",notes:"Shows model thought process, 1M context window"},"gemini-2.0-flash":{id:"gemini-2.0-flash",displayName:"Gemini 2.0 Flash",provider:"gemini",aliases:["gemini-2.0-flash-exp","gemini-2.0-flash-experimental"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:89,vision:90,creativity:87,speed:95,cost:75},releaseDate:"2024-12-11",notes:"Twice as fast as Gemini 1.5 Pro, multimodal with native image generation"},"gemini-1.5-pro":{id:"gemini-1.5-pro",displayName:"Gemini 1.5 Pro",provider:"gemini",aliases:["gemini-1.5-pro-latest","gemini-pro"],maxInputTokens:2e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:87,vision:88,creativity:85,speed:70,cost:50},releaseDate:"2024-05",notes:"2M context window - largest available, supports context caching"},"gemini-1.5-flash":{id:"gemini-1.5-flash",displayName:"Gemini 1.5 Flash",provider:"gemini",aliases:["gemini-1.5-flash-latest","gemini-flash"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:83,vision:85,creativity:82,speed:90,cost:85},releaseDate:"2024-05",notes:"Fast and efficient with 1M context, supports code execution"},"gemini-1.5-flash-8b":{id:"gemini-1.5-flash-8b",displayName:"Gemini 1.5 Flash-8B",provider:"gemini",aliases:["gemini-flash-8b"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:80,reasoning:78,vision:82,creativity:77,speed:98,cost:95},releaseDate:"2024-10",notes:"Smaller 8B model, extremely fast and cost-effective"},"gemini-1.0-pro":{id:"gemini-1.0-pro",displayName:"Gemini 1.0 Pro",provider:"gemini",aliases:["gemini-pro-1.0"],maxInputTokens:32768,maxOutputTokens:8192,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:75,reasoning:73,vision:0,creativity:75,speed:85,cost:90},releaseDate:"2023-12",notes:"Original Gemini Pro, text-only"},"gemini-1.0-pro-vision":{id:"gemini-1.0-pro-vision",displayName:"Gemini 1.0 Pro Vision",provider:"gemini",aliases:["gemini-pro-vision"],maxInputTokens:16384,maxOutputTokens:2048,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:70,reasoning:68,vision:80,creativity:72,speed:80,cost:88},releaseDate:"2023-12",notes:"Original multimodal Gemini with vision support"}},Yv={"kimi-k2-0905-preview":{id:"kimi-k2-0905-preview",displayName:"Kimi K2 (0905 Preview)",provider:"kimi",aliases:["kimi-k2","kimi-k2-preview"],maxInputTokens:256e3,maxOutputTokens:8192,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:92,reasoning:90,vision:0,creativity:80,speed:85,cost:70},releaseDate:"2025-09",notes:"MoE \u67B6\u6784 K2 \u9884\u89C8\u7248\uFF0C256K \u4E0A\u4E0B\u6587"}},Xv={"deepseek-v3.2":{id:"deepseek-v3.2",displayName:"DeepSeek V3.2",provider:"deepseek",aliases:["deepseek-v3.2-exp"],maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:92,reasoning:90,vision:0,creativity:80,speed:85,cost:95},releaseDate:"2025-09-29",notes:"\u5B9E\u9A8C\u7248\u672C,\u6027\u80FD\u663E\u8457\u63D0\u5347"},"deepseek-v3.1":{id:"deepseek-v3.1",displayName:"DeepSeek V3.1",provider:"deepseek",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:0,creativity:78,speed:88,cost:96},releaseDate:"2025-08",notes:"\u6DF7\u5408\u67B6\u6784\u6A21\u578B"},"deepseek-chat":{id:"deepseek-chat",displayName:"DeepSeek Chat",provider:"deepseek",maxInputTokens:64e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:82,vision:0,creativity:75,speed:85,cost:95},notes:"\u901A\u7528\u5BF9\u8BDD\u6A21\u578B,\u6210\u672C\u6781\u4F4E"},"deepseek-coder":{id:"deepseek-coder",displayName:"DeepSeek Coder",provider:"deepseek",maxInputTokens:64e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:95,reasoning:85,vision:0,creativity:70,speed:88,cost:96},notes:"\u4E13\u4E3A\u7F16\u7A0B\u4F18\u5316,\u4EE3\u7801\u80FD\u529B\u7A81\u51FA"},"deepseek-reasoner":{id:"deepseek-reasoner",displayName:"DeepSeek Reasoner",provider:"deepseek",maxInputTokens:64e3,maxOutputTokens:64e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:88,reasoning:96,vision:0,creativity:75,speed:60,cost:90},notes:"\u63A8\u7406\u4E13\u7528\u6A21\u578B,\u652F\u6301\u957F\u8F93\u51FA"}},Qv={"minimax-text-01":{id:"minimax-text-01",displayName:"MiniMax Text-01",provider:"minimax",maxInputTokens:4e6,maxOutputTokens:1e6,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:90,vision:0,creativity:85,speed:55,cost:70},notes:"4M \u4E0A\u4E0B\u6587\u7A97\u53E3,Lightning Attention + MoE \u67B6\u6784,\u5F00\u6E90\u53EF\u7528"},"minimax-m1-80k":{id:"minimax-m1-80k",displayName:"MiniMax M1-80K",provider:"minimax",maxInputTokens:1e6,maxOutputTokens:8e4,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:90,reasoning:92,vision:0,creativity:82,speed:65,cost:75},notes:"1M \u4E0A\u4E0B\u6587 + 80K \u601D\u8003\u9884\u7B97"},"minimax-m2.1":{id:"minimax-m2.1",displayName:"MiniMax M2.1",provider:"minimax",maxInputTokens:2e5,maxOutputTokens:64e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:93,reasoning:88,vision:0,creativity:80,speed:82,cost:85},releaseDate:"2025-12",notes:"\u7F16\u7A0B\u548C Agentic \u5DE5\u4F5C\u6D41\u4F18\u5316,\u652F\u6301\u591A\u8BED\u8A00"},"minimax-vl-01":{id:"minimax-vl-01",displayName:"MiniMax VL-01",provider:"minimax",maxInputTokens:4e6,maxOutputTokens:1e6,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:88,vision:92,creativity:88,speed:60,cost:65},notes:"\u591A\u6A21\u6001\u6A21\u578B,\u652F\u6301\u6587\u672C\u548C\u56FE\u50CF"}},Zv={"glm-4.7":{id:"glm-4.7",displayName:"GLM-4.7",provider:"glm",maxInputTokens:2e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:85,creativity:87,speed:80,cost:70},releaseDate:"2025-12-22",notes:"\u6700\u65B0\u7248\u672C,200K \u4E0A\u4E0B\u6587,128K \u8F93\u51FA"},"glm-4.6":{id:"glm-4.6",displayName:"GLM-4.6",provider:"glm",maxInputTokens:2e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:86,vision:83,creativity:85,speed:82,cost:75},releaseDate:"2025-09-10",notes:"\u4ECE 128K \u6269\u5C55\u81F3 200K \u4E0A\u4E0B\u6587"},"glm-4.5":{id:"glm-4.5",displayName:"GLM-4.5",provider:"glm",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:86,reasoning:84,vision:80,creativity:83,speed:85,cost:80},releaseDate:"2025-07"},"glm-4-flash":{id:"glm-4-flash",displayName:"GLM-4 Flash",provider:"glm",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:82,reasoning:80,vision:78,creativity:80,speed:95,cost:92},notes:"\u5FEB\u901F\u6A21\u578B,\u76F8\u5F53\u4E8E 300 \u9875\u4E66\u7684\u4E0A\u4E0B\u6587"},"glm-4-plus":{id:"glm-4-plus",displayName:"GLM-4 Plus",provider:"glm",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:86,vision:82,creativity:85,speed:78,cost:65}},"glm-4-air":{id:"glm-4-air",displayName:"GLM-4 Air",provider:"glm",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:80,reasoning:78,vision:0,creativity:78,speed:90,cost:88}},"glm-4-long":{id:"glm-4-long",displayName:"GLM-4 Long",provider:"glm",maxInputTokens:1e6,maxOutputTokens:128e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:88,vision:0,creativity:80,speed:50,cost:60},notes:"\u8D85\u957F\u4E0A\u4E0B\u6587\u4E13\u7528,1M tokens"},"glm-4-airx":{id:"glm-4-airx",displayName:"GLM-4 AirX",provider:"glm",maxInputTokens:8e3,maxOutputTokens:4096,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:70,reasoning:68,vision:0,creativity:70,speed:98,cost:98},notes:"\u8D85\u8F7B\u91CF\u7EA7\u6A21\u578B,\u6781\u5FEB\u901F\u5EA6"}},Ol=class{models=new Map;constructor(){this.registerModels(Jv),this.registerModels(Kv),this.registerModels(Vv),this.registerModels(Yv),this.registerModels(Xv),this.registerModels(Qv),this.registerModels(Zv);}registerModels(e){for(let[t,s]of Object.entries(e))if(this.models.set(t,s),s.aliases)for(let n of s.aliases)this.models.set(n,s);}getModel(e){return this.models.get(e)}getAllModels(){let e=new Map;for(let t of this.models.values())e.set(t.id,t);return Array.from(e.values())}getModelsByProvider(e){return this.getAllModels().filter(t=>t.provider===e)}hasModel(e){return this.models.has(e)}toModelCapability(e){let t=this.getModel(e);if(t)return {modelAlias:t.id,strengths:this.inferStrengths(t),scores:{coding:t.scores?.coding??50,reasoning:t.scores?.reasoning??50,vision:t.scores?.vision??0,creativity:t.scores?.creativity??50,speed:t.scores?.speed??50,cost:t.scores?.cost??50},features:{supportsVision:t.supportsVision??false,supportsTools:t.supportsTools??false,supportsFunctionCalling:t.supportsFunctionCalling??false,supportsStreaming:t.supportsStreaming??false,maxContextTokens:t.maxInputTokens,maxOutputTokens:t.maxOutputTokens}}}inferStrengths(e){let t=[],s=e.scores??{};return (s.coding??0)>=85&&t.push("coding"),(s.reasoning??0)>=85&&t.push("reasoning"),(s.vision??0)>=85&&t.push("image_analysis"),(s.creativity??0)>=85&&t.push("creative_writing"),t}},Xi=new Ol;var us=class{validateParams(e){let t=this.getConstraints(),s=[],n=[];for(let r of Object.keys(e))t.supportedParams.has(r)||n.push(`Parameter '${r}' is not supported by this provider and will be ignored`);if(t.validators){for(let[r,i]of Object.entries(t.validators))if(e[r]!==void 0){let o=i(e[r],e);o===false?s.push(`Invalid value for parameter '${r}': ${e[r]}`):typeof o=="string"&&s.push(`Parameter '${r}': ${o}`);}}if(e.model&&e.max_tokens!==void 0){let r=this.getTokenLimits(e.model);r.found&&e.max_tokens>r.maxInput?s.push(`max_tokens (${e.max_tokens}) exceeds model context window (${r.maxInput}) for ${e.model}`):r.found&&e.max_tokens>r.maxOutput&&n.push(`max_tokens (${e.max_tokens}) exceeds recommended output limit (${r.maxOutput}) for ${e.model}, but is within context window`);}return {valid:s.length===0,errors:s,warnings:n.length>0?n:void 0}}getTokenLimits(e){let t=Xi.getModel(e);if(t)return {maxOutput:t.maxOutputTokens,maxInput:t.maxInputTokens,found:true,source:"model"};let s=this.getConstraints(),n=s.maxOutputTokens[e],r=s.maxInputTokens[e];if(n!==void 0&&r!==void 0)return {maxOutput:n,maxInput:r,found:true,source:"model"};for(let[i,o]of Object.entries(s.maxOutputTokens))if(this.matchPattern(e,i))return {maxOutput:o,maxInput:s.maxInputTokens[i]||128e3,found:true,source:"model"};return {maxOutput:4096,maxInput:128e3,found:false,source:"fallback"}}normalizeParams(e){let t=this.getConstraints(),s={};for(let[n,r]of Object.entries(e)){let i=t.paramAliases?.[n]||n;t.supportedParams.has(n)&&(s[i]=r);}if(t.defaults)for(let[n,r]of Object.entries(t.defaults))s[n]===void 0&&(s[n]=r);return s}matchPattern(e,t){return t.includes("*")?new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e):e===t}isParamSupported(e){return this.getConstraints().supportedParams.has(e)}getParamAlias(e){return this.getConstraints().paramAliases?.[e]||e}};function Ve(a,e){return t=>{let s=Number(t);return isNaN(s)?"Must be a number":s<a||s>e?`Must be between ${a} and ${e}`:true}}function vn(a){return e=>a.includes(e)?true:`Must be one of: ${a.join(", ")}`}function Wp(a){return e=>{let t=typeof e;return t!==a?`Expected ${a}, got ${t}`:true}}function Qi(...a){return (e,t)=>{for(let s of a){let n=s(e,t);if(n!==true)return n}return true}}var Ps=class extends us{getConstraints(){return {maxOutputTokens:{"gpt-4o":16384,"gpt-4o-2024-11-20":16384,"gpt-4o-2024-08-06":16384,"gpt-4o-2024-05-13":4096,"gpt-4o-mini":16384,"gpt-4o-mini-2024-07-18":16384,"gpt-4-turbo":4096,"gpt-4-turbo-2024-04-09":4096,"gpt-4-turbo-preview":4096,"gpt-4-0125-preview":4096,"gpt-4-1106-preview":4096,"gpt-4":8192,"gpt-4-0613":8192,"gpt-4-0314":8192,"gpt-3.5-turbo":4096,"gpt-3.5-turbo-0125":4096,"gpt-3.5-turbo-1106":4096,o1:1e5,"o1-2024-12-17":1e5,"o1-preview":32768,"o1-preview-2024-09-12":32768,"o1-mini":65536,"o1-mini-2024-09-12":65536,o3:1e5,"o3-mini":1e5,"o3-mini-2025-01-31":1e5,"o4-mini":1e5,"gpt-5":1e5,"gpt-5.1":1e5,"gpt-5.1-codex":1e5,"gpt-5.1-codex-max":1e5,"gpt-5.1-codex-mini":1e5,"gpt-5.2":1e5,"gpt-5.2-codex":1e5,"gpt-5-codex":1e5,"gpt-5-codex-mini":1e5,"codex-mini-latest":1e5,"gpt-4.1":1e5,"gpt-4.1-2025-04-14":1e5,"gpt-4o*":16384,"gpt-4-turbo*":4096,"gpt-4.1*":1e5,"gpt-4*":8192,"gpt-3.5*":4096,"gpt-5*":1e5,"codex*":1e5,"o1*":1e5,"o3*":1e5,"o4*":1e5},maxInputTokens:{"gpt-4o":128e3,"gpt-4o-mini":128e3,"gpt-4-turbo":128e3,"gpt-4-turbo-2024-04-09":128e3,"gpt-4.1":1047576,"gpt-4.1-2025-04-14":1047576,"gpt-4":8192,"gpt-4-32k":32768,"gpt-3.5-turbo":16385,"gpt-3.5-turbo-16k":16385,"gpt-5":272e3,"gpt-5.1":272e3,"gpt-5.1-codex":272e3,"gpt-5.1-codex-max":272e3,"gpt-5.1-codex-mini":272e3,"gpt-5-codex":272e3,"gpt-5-codex-mini":272e3,"gpt-5.2":4e5,"gpt-5.2-codex":4e5,"codex-mini-latest":2e5,o1:2e5,"o1-preview":128e3,"o1-mini":128e3,o3:2e5,"o3-mini":2e5,"o4-mini":2e5,"gpt-4o*":128e3,"gpt-4-turbo*":128e3,"gpt-4.1*":1047576,"gpt-5*":272e3,"gpt-5.2*":4e5,"codex*":272e3,"o1*":2e5,"o3*":2e5,"o4*":2e5},supportedParams:new Set(["model","messages","stream","stream_options","max_tokens","max_completion_tokens","temperature","top_p","top_k","frequency_penalty","presence_penalty","stop","n","seed","reasoning_effort","verbosity","tools","tool_choice","parallel_tool_calls","response_format","logprobs","top_logprobs","logit_bias","modalities","audio","user","safety_identifier","store","service_tier","prompt_cache_key","prompt_cache_retention","metadata","prediction","extra_body","search_parameters","web_search_options"]),validators:{temperature:Ve(0,2),top_p:Ve(0,1),frequency_penalty:Ve(-2,2),presence_penalty:Ve(-2,2),reasoning_effort:vn(["low","medium","high"]),verbosity:vn(["low","medium","high"]),tool_choice:e=>typeof e=="string"?["none","auto","required"].includes(e)||"Must be 'none', 'auto', or 'required'":typeof e=="object"&&e.type==="function"?true:"Invalid tool_choice format","response_format.type":vn(["text","json_object","json_schema"]),stream:e=>typeof e=="boolean"||"Must be a boolean",n:Qi(e=>typeof e=="number"||"Must be a number",Ve(1,10)),max_tokens:(e,t)=>{let s=Number(e);if(isNaN(s))return "Must be a number";if(s<1)return "Must be at least 1";t?.model||"";return true}},defaults:{temperature:1,top_p:1,n:1,stream:false,max_tokens:4096}}}isResponsesAPIModel(e){return e.startsWith("o1")||e.startsWith("o3")}supportsReasoning(e){return this.isResponsesAPIModel(e)}supportsVision(e){return e.includes("gpt-4o")||e.includes("gpt-4-turbo")||e.includes("gpt-4-vision")}supportsTools(e){return e.startsWith("o1-preview")||e.startsWith("o1-mini")?false:e.includes("gpt-4")||e.includes("gpt-3.5-turbo")||e.startsWith("o3")}getRecommendedMaxTokens(e,t){let s=this.getTokenLimits(e);switch(t){case "short":return Math.min(1024,s.maxOutput);case "medium":return Math.min(4096,s.maxOutput);case "long":return s.maxOutput;default:return Math.min(4096,s.maxOutput)}}};var ds=class{combinePromptSections(e){return e.filter(s=>s.content.trim().length>0).sort((s,n)=>(s.order||0)-(n.order||0)).map(s=>s.title?`# ${s.title}
1504
+ `):t,i=e.filter(o=>o.role!=="system");return [{role:"system",content:r},...i]}return [{role:"system",content:t},...e]}normalizeSystemContent(e){return e?typeof e=="string"?e.trim():Array.isArray(e)?e.map(s=>!s||typeof s!="object"?"":s.type==="text"&&typeof s.text=="string"?s.text:"").join("").trim():String(e).trim():""}applyTokenLimits(e,t){if(!e)return t;let s=this.constraints.getTokenLimits(e);return Math.min(t||4096,s.maxOutput)}detectLanguage(){return process.env.NEOX_LANGUAGE==="en"?"en":"zh"}};var Jv={"gpt-5.2":{id:"gpt-5.2",displayName:"GPT-5.2",provider:"openai",maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:96,reasoning:98,vision:92,creativity:94,speed:75,cost:25},releaseDate:"2025-12-11",notes:'400K \u4E0A\u4E0B\u6587\u7A97\u53E3,128K \u8F93\u51FA\u9650\u5236,\u4EE3\u53F7"Garlic"'},"gpt-5.2-codex":{id:"gpt-5.2-codex",displayName:"GPT-5.2 Codex",provider:"openai",aliases:["gpt-5.2-codex"],maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:98,reasoning:97,vision:90,creativity:92,speed:70,cost:20},releaseDate:"2025-12-10",notes:"GPT-5.2 \u7684 Codex \u9ED8\u8BA4\u7248\u672C,\u4E13\u4E3A\u7F16\u7A0B\u4EFB\u52A1\u4F18\u5316"},"gpt-5.2-codex-high":{id:"gpt-5.2-codex-high",displayName:"GPT-5.2 Codex High",provider:"openai",aliases:["gpt-5.2-codex-h"],maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:99,reasoning:98,vision:90,creativity:93,speed:60,cost:15},releaseDate:"2025-12-10",notes:"GPT-5.2 Codex \u9AD8\u6027\u80FD\u6A21\u5F0F,\u6700\u5F3A\u7F16\u7A0B\u80FD\u529B,\u66F4\u6162\u66F4\u8D35"},"gpt-5.2-codex-medium":{id:"gpt-5.2-codex-medium",displayName:"GPT-5.2 Codex Medium",provider:"openai",aliases:["gpt-5.2-codex-m"],maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:95,reasoning:94,vision:88,creativity:90,speed:80,cost:40},releaseDate:"2025-12-10",notes:"GPT-5.2 Codex \u5E73\u8861\u6A21\u5F0F,\u6027\u4EF7\u6BD4\u4F18\u9009"},"gpt-5.1":{id:"gpt-5.1",displayName:"GPT-5.1",provider:"openai",maxInputTokens:272e3,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:94,reasoning:96,vision:90,creativity:92,speed:80,cost:30},notes:"272K \u4E0A\u4E0B\u6587,128K \u8F93\u51FA,\u9002\u5408\u957F\u4E0A\u4E0B\u6587\u4EFB\u52A1"},"gpt-5.1-codex":{id:"gpt-5.1-codex",displayName:"GPT-5.1 Codex",provider:"openai",aliases:["gpt-5-codex","gpt-5.1-codex-max"],maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:97,reasoning:95,vision:88,creativity:90,speed:75,cost:25},notes:"Codex \u4F18\u5316\u7248,400K \u4E0A\u4E0B\u6587,\u4E13\u4E3A agentic \u7F16\u7A0B\u5DE5\u4F5C\u6D41\u8BBE\u8BA1"},"gpt-5.1-codex-mini":{id:"gpt-5.1-codex-mini",displayName:"GPT-5.1 Codex Mini",provider:"openai",aliases:["gpt-5-codex-mini"],maxInputTokens:272e3,maxOutputTokens:128e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:0,creativity:85,speed:92,cost:85},notes:"\u66F4\u5FEB\u66F4\u4FBF\u5B9C\u7684 Codex \u7248\u672C"},"gpt-5":{id:"gpt-5",displayName:"GPT-5",provider:"openai",maxInputTokens:4e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:92,reasoning:94,vision:90,creativity:94,speed:80,cost:35},deprecated:true,replacedBy:"gpt-5.1",notes:"\u5DF2\u88AB GPT-5.1 \u66FF\u4EE3"},"gpt-4.1":{id:"gpt-4.1",displayName:"GPT-4.1",provider:"openai",aliases:["gpt-4.1-2025-04-14"],maxInputTokens:1e6,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:92,vision:88,creativity:90,speed:65,cost:15},releaseDate:"2025-04-14",notes:"\u8D85\u5927 1M+ \u4E0A\u4E0B\u6587\u7A97\u53E3,\u9002\u5408\u5904\u7406\u5927\u578B\u4EE3\u7801\u5E93"},"gpt-4o":{id:"gpt-4o",displayName:"GPT-4o",provider:"openai",aliases:["gpt-4o-2024-11-20","gpt-4o-2024-08-06"],maxInputTokens:128e3,maxOutputTokens:16384,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:85,vision:88,creativity:88,speed:75,cost:50}},"gpt-4o-mini":{id:"gpt-4o-mini",displayName:"GPT-4o Mini",provider:"openai",aliases:["gpt-4o-mini-2024-07-18"],maxInputTokens:128e3,maxOutputTokens:16384,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:75,reasoning:72,vision:80,creativity:75,speed:92,cost:90}},o3:{id:"o3",displayName:"o3",provider:"openai",maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:92,reasoning:99,vision:0,creativity:78,speed:40,cost:15},notes:"\u65B0\u4E00\u4EE3\u63A8\u7406\u6A21\u578B,\u63A8\u7406\u80FD\u529B\u6700\u5F3A"},"o3-mini":{id:"o3-mini",displayName:"o3 Mini",provider:"openai",aliases:["o3-mini-2025-01-31"],maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:88,reasoning:95,vision:0,creativity:75,speed:65,cost:60}},"o4-mini":{id:"o4-mini",displayName:"o4 Mini",provider:"openai",maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:90,reasoning:96,vision:0,creativity:76,speed:70,cost:55}},o1:{id:"o1",displayName:"o1",provider:"openai",aliases:["o1-2024-12-17"],maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:88,reasoning:95,vision:0,creativity:75,speed:45,cost:25}},"o1-mini":{id:"o1-mini",displayName:"o1 Mini",provider:"openai",aliases:["o1-mini-2024-09-12"],maxInputTokens:128e3,maxOutputTokens:65536,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:82,reasoning:88,vision:0,creativity:70,speed:70,cost:70}},"codex-mini-latest":{id:"codex-mini-latest",displayName:"Codex Mini (Latest)",provider:"openai",maxInputTokens:2e5,maxOutputTokens:1e5,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:82,vision:0,creativity:75,speed:88,cost:80}},"gpt-4-turbo":{id:"gpt-4-turbo",displayName:"GPT-4 Turbo",provider:"openai",aliases:["gpt-4-turbo-2024-04-09"],maxInputTokens:128e3,maxOutputTokens:4096,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:87,vision:85,creativity:90,speed:70,cost:40}},"gpt-3.5-turbo":{id:"gpt-3.5-turbo",displayName:"GPT-3.5 Turbo",provider:"openai",maxInputTokens:16385,maxOutputTokens:4096,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:65,reasoning:60,vision:0,creativity:70,speed:95,cost:98}}},Kv={"claude-opus-4-6":{id:"claude-opus-4-6",displayName:"Claude Opus 4.6",provider:"anthropic",aliases:["claude-opus-4.6"],maxInputTokens:2e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:99,reasoning:98,vision:91,creativity:96,speed:66,cost:18},notes:"Claude Opus 4.6 (latest alias)"},"claude-opus-4-5-20251101":{id:"claude-opus-4-5-20251101",displayName:"Claude Opus 4.5",provider:"anthropic",aliases:["claude-opus-4.5"],maxInputTokens:2e5,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:98,reasoning:97,vision:90,creativity:95,speed:65,cost:20},releaseDate:"2025-11-24",notes:"\u6700\u5F3A Claude \u6A21\u578B,\u652F\u6301 Extended Thinking,\u4F01\u4E1A\u7248\u53EF\u6269\u5C55\u81F3 1M \u4E0A\u4E0B\u6587"},"claude-sonnet-4-5-20250929":{id:"claude-sonnet-4-5-20250929",displayName:"Claude Sonnet 4.5",provider:"anthropic",aliases:["claude-sonnet-4.5","claude-sonnet-4-5-20250929-thinking"],maxInputTokens:2e5,maxOutputTokens:16e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:92,reasoning:90,vision:88,creativity:90,speed:80,cost:50},releaseDate:"2025-09-29",notes:"\u5E73\u8861\u6027\u80FD\u4E0E\u6210\u672C,beta \u7248\u672C\u652F\u6301 1M \u4E0A\u4E0B\u6587"},"claude-sonnet-4-20250514":{id:"claude-sonnet-4-20250514",displayName:"Claude Sonnet 4",provider:"anthropic",aliases:["claude-sonnet-4"],maxInputTokens:2e5,maxOutputTokens:16e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:85,creativity:88,speed:82,cost:55},notes:"2025-08-12 \u5347\u7EA7\u652F\u6301 1M beta \u4E0A\u4E0B\u6587"},"claude-opus-4-20250514":{id:"claude-opus-4-20250514",displayName:"Claude Opus 4",provider:"anthropic",aliases:["claude-opus-4"],maxInputTokens:2e5,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:96,reasoning:95,vision:88,creativity:94,speed:70,cost:25}},"claude-haiku-4-5-20251001":{id:"claude-haiku-4-5-20251001",displayName:"Claude Haiku 4.5",provider:"anthropic",aliases:["claude-haiku-4.5"],maxInputTokens:2e5,maxOutputTokens:8e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:78,reasoning:75,vision:80,creativity:75,speed:95,cost:95},notes:"\u6700\u5FEB\u6700\u4FBF\u5B9C\u7684 Claude 4.5 \u6A21\u578B"},"claude-3-5-sonnet-20241022":{id:"claude-3-5-sonnet-20241022",displayName:"Claude 3.5 Sonnet (New)",provider:"anthropic",aliases:["claude-3.5-sonnet-new","claude-3-5-sonnet-latest"],maxInputTokens:2e5,maxOutputTokens:16e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:85,creativity:87,speed:85,cost:55},releaseDate:"2024-10-22",notes:"Claude 3.5 Sonnet \u5347\u7EA7\u7248"},"claude-3-5-haiku-20241022":{id:"claude-3-5-haiku-20241022",displayName:"Claude 3.5 Haiku",provider:"anthropic",aliases:["claude-3.5-haiku"],maxInputTokens:2e5,maxOutputTokens:8e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:75,reasoning:72,vision:78,creativity:73,speed:98,cost:98},releaseDate:"2024-10-22",notes:"\u6700\u5FEB\u6700\u4FBF\u5B9C\u7684 Claude 3.5 \u6A21\u578B"}},Vv={"gemini-3-pro-preview":{id:"gemini-3-pro-preview",displayName:"Gemini 3 Pro Preview",provider:"gemini",aliases:["gemini-3-pro","gemini-3.0-pro-preview"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:94,reasoning:95,vision:96,creativity:94,speed:72,cost:35},releaseDate:"2026-01",notes:"Gemini 3 \u9884\u89C8\u7248,UI/\u89C6\u89C9\u8BBE\u8BA1\u4E13\u957F,1M \u4E0A\u4E0B\u6587"},"gemini-3.0-pro":{id:"gemini-3.0-pro",displayName:"Gemini 3.0 Pro",provider:"gemini",aliases:["gemini-3.0-pro-latest"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:95,reasoning:96,vision:94,creativity:92,speed:70,cost:30},releaseDate:"2025-12",notes:"Flagship multimodal model with 1M context, high-precision reasoning"},"gemini-2.5-flash":{id:"gemini-2.5-flash",displayName:"Gemini 2.5 Flash",provider:"gemini",aliases:["gemini-2.5-flash-latest"],maxInputTokens:1048576,maxOutputTokens:65535,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:90,creativity:87,speed:92,cost:85},releaseDate:"2025-03",notes:"Fast and cost-efficient, ~1500 pages or 30K lines of code"},"gemini-2.5-pro":{id:"gemini-2.5-pro",displayName:"Gemini 2.5 Pro",provider:"gemini",aliases:["gemini-2.5-pro-latest"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:93,reasoning:92,vision:92,creativity:90,speed:75,cost:40},releaseDate:"2025-03",notes:"Balanced performance with 1M context window"},"gemini-2.0-flash-thinking":{id:"gemini-2.0-flash-thinking",displayName:"Gemini 2.0 Flash Thinking",provider:"gemini",aliases:["gemini-2.0-flash-thinking-exp","gemini-2.0-flash-thinking-experimental"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:92,reasoning:94,vision:90,creativity:88,speed:85,cost:50},releaseDate:"2024-12-19",notes:"Shows model thought process, 1M context window"},"gemini-2.0-flash":{id:"gemini-2.0-flash",displayName:"Gemini 2.0 Flash",provider:"gemini",aliases:["gemini-2.0-flash-exp","gemini-2.0-flash-experimental"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:89,vision:90,creativity:87,speed:95,cost:75},releaseDate:"2024-12-11",notes:"Twice as fast as Gemini 1.5 Pro, multimodal with native image generation"},"gemini-1.5-pro":{id:"gemini-1.5-pro",displayName:"Gemini 1.5 Pro",provider:"gemini",aliases:["gemini-1.5-pro-latest","gemini-pro"],maxInputTokens:2e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:87,vision:88,creativity:85,speed:70,cost:50},releaseDate:"2024-05",notes:"2M context window - largest available, supports context caching"},"gemini-1.5-flash":{id:"gemini-1.5-flash",displayName:"Gemini 1.5 Flash",provider:"gemini",aliases:["gemini-1.5-flash-latest","gemini-flash"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:83,vision:85,creativity:82,speed:90,cost:85},releaseDate:"2024-05",notes:"Fast and efficient with 1M context, supports code execution"},"gemini-1.5-flash-8b":{id:"gemini-1.5-flash-8b",displayName:"Gemini 1.5 Flash-8B",provider:"gemini",aliases:["gemini-flash-8b"],maxInputTokens:1e6,maxOutputTokens:65536,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:80,reasoning:78,vision:82,creativity:77,speed:98,cost:95},releaseDate:"2024-10",notes:"Smaller 8B model, extremely fast and cost-effective"},"gemini-1.0-pro":{id:"gemini-1.0-pro",displayName:"Gemini 1.0 Pro",provider:"gemini",aliases:["gemini-pro-1.0"],maxInputTokens:32768,maxOutputTokens:8192,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:75,reasoning:73,vision:0,creativity:75,speed:85,cost:90},releaseDate:"2023-12",notes:"Original Gemini Pro, text-only"},"gemini-1.0-pro-vision":{id:"gemini-1.0-pro-vision",displayName:"Gemini 1.0 Pro Vision",provider:"gemini",aliases:["gemini-pro-vision"],maxInputTokens:16384,maxOutputTokens:2048,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:70,reasoning:68,vision:80,creativity:72,speed:80,cost:88},releaseDate:"2023-12",notes:"Original multimodal Gemini with vision support"}},Yv={"kimi-k2-0905-preview":{id:"kimi-k2-0905-preview",displayName:"Kimi K2 (0905 Preview)",provider:"kimi",aliases:["kimi-k2","kimi-k2-preview"],maxInputTokens:256e3,maxOutputTokens:8192,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:92,reasoning:90,vision:0,creativity:80,speed:85,cost:70},releaseDate:"2025-09",notes:"MoE \u67B6\u6784 K2 \u9884\u89C8\u7248\uFF0C256K \u4E0A\u4E0B\u6587"}},Xv={"deepseek-v3.2":{id:"deepseek-v3.2",displayName:"DeepSeek V3.2",provider:"deepseek",aliases:["deepseek-v3.2-exp"],maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:92,reasoning:90,vision:0,creativity:80,speed:85,cost:95},releaseDate:"2025-09-29",notes:"\u5B9E\u9A8C\u7248\u672C,\u6027\u80FD\u663E\u8457\u63D0\u5347"},"deepseek-v3.1":{id:"deepseek-v3.1",displayName:"DeepSeek V3.1",provider:"deepseek",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:0,creativity:78,speed:88,cost:96},releaseDate:"2025-08",notes:"\u6DF7\u5408\u67B6\u6784\u6A21\u578B"},"deepseek-chat":{id:"deepseek-chat",displayName:"DeepSeek Chat",provider:"deepseek",maxInputTokens:64e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:82,vision:0,creativity:75,speed:85,cost:95},notes:"\u901A\u7528\u5BF9\u8BDD\u6A21\u578B,\u6210\u672C\u6781\u4F4E"},"deepseek-coder":{id:"deepseek-coder",displayName:"DeepSeek Coder",provider:"deepseek",maxInputTokens:64e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:95,reasoning:85,vision:0,creativity:70,speed:88,cost:96},notes:"\u4E13\u4E3A\u7F16\u7A0B\u4F18\u5316,\u4EE3\u7801\u80FD\u529B\u7A81\u51FA"},"deepseek-reasoner":{id:"deepseek-reasoner",displayName:"DeepSeek Reasoner",provider:"deepseek",maxInputTokens:64e3,maxOutputTokens:64e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:88,reasoning:96,vision:0,creativity:75,speed:60,cost:90},notes:"\u63A8\u7406\u4E13\u7528\u6A21\u578B,\u652F\u6301\u957F\u8F93\u51FA"}},Qv={"minimax-text-01":{id:"minimax-text-01",displayName:"MiniMax Text-01",provider:"minimax",maxInputTokens:4e6,maxOutputTokens:1e6,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:90,vision:0,creativity:85,speed:55,cost:70},notes:"4M \u4E0A\u4E0B\u6587\u7A97\u53E3,Lightning Attention + MoE \u67B6\u6784,\u5F00\u6E90\u53EF\u7528"},"minimax-m1-80k":{id:"minimax-m1-80k",displayName:"MiniMax M1-80K",provider:"minimax",maxInputTokens:1e6,maxOutputTokens:8e4,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,supportsThinking:true,scores:{coding:90,reasoning:92,vision:0,creativity:82,speed:65,cost:75},notes:"1M \u4E0A\u4E0B\u6587 + 80K \u601D\u8003\u9884\u7B97"},"minimax-m2.1":{id:"minimax-m2.1",displayName:"MiniMax M2.1",provider:"minimax",maxInputTokens:2e5,maxOutputTokens:64e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:93,reasoning:88,vision:0,creativity:80,speed:82,cost:85},releaseDate:"2025-12",notes:"\u7F16\u7A0B\u548C Agentic \u5DE5\u4F5C\u6D41\u4F18\u5316,\u652F\u6301\u591A\u8BED\u8A00"},"minimax-vl-01":{id:"minimax-vl-01",displayName:"MiniMax VL-01",provider:"minimax",maxInputTokens:4e6,maxOutputTokens:1e6,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:88,vision:92,creativity:88,speed:60,cost:65},notes:"\u591A\u6A21\u6001\u6A21\u578B,\u652F\u6301\u6587\u672C\u548C\u56FE\u50CF"}},Zv={"glm-4.7":{id:"glm-4.7",displayName:"GLM-4.7",provider:"glm",maxInputTokens:2e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:90,reasoning:88,vision:85,creativity:87,speed:80,cost:70},releaseDate:"2025-12-22",notes:"\u6700\u65B0\u7248\u672C,200K \u4E0A\u4E0B\u6587,128K \u8F93\u51FA"},"glm-4.6":{id:"glm-4.6",displayName:"GLM-4.6",provider:"glm",maxInputTokens:2e5,maxOutputTokens:128e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:86,vision:83,creativity:85,speed:82,cost:75},releaseDate:"2025-09-10",notes:"\u4ECE 128K \u6269\u5C55\u81F3 200K \u4E0A\u4E0B\u6587"},"glm-4.5":{id:"glm-4.5",displayName:"GLM-4.5",provider:"glm",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:86,reasoning:84,vision:80,creativity:83,speed:85,cost:80},releaseDate:"2025-07"},"glm-4-flash":{id:"glm-4-flash",displayName:"GLM-4 Flash",provider:"glm",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:82,reasoning:80,vision:78,creativity:80,speed:95,cost:92},notes:"\u5FEB\u901F\u6A21\u578B,\u76F8\u5F53\u4E8E 300 \u9875\u4E66\u7684\u4E0A\u4E0B\u6587"},"glm-4-plus":{id:"glm-4-plus",displayName:"GLM-4 Plus",provider:"glm",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:true,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:88,reasoning:86,vision:82,creativity:85,speed:78,cost:65}},"glm-4-air":{id:"glm-4-air",displayName:"GLM-4 Air",provider:"glm",maxInputTokens:128e3,maxOutputTokens:32e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:80,reasoning:78,vision:0,creativity:78,speed:90,cost:88}},"glm-4-long":{id:"glm-4-long",displayName:"GLM-4 Long",provider:"glm",maxInputTokens:1e6,maxOutputTokens:128e3,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:85,reasoning:88,vision:0,creativity:80,speed:50,cost:60},notes:"\u8D85\u957F\u4E0A\u4E0B\u6587\u4E13\u7528,1M tokens"},"glm-4-airx":{id:"glm-4-airx",displayName:"GLM-4 AirX",provider:"glm",maxInputTokens:8e3,maxOutputTokens:4096,supportsVision:false,supportsTools:true,supportsFunctionCalling:true,supportsStreaming:true,scores:{coding:70,reasoning:68,vision:0,creativity:70,speed:98,cost:98},notes:"\u8D85\u8F7B\u91CF\u7EA7\u6A21\u578B,\u6781\u5FEB\u901F\u5EA6"}},Ol=class{models=new Map;constructor(){this.registerModels(Jv),this.registerModels(Kv),this.registerModels(Vv),this.registerModels(Yv),this.registerModels(Xv),this.registerModels(Qv),this.registerModels(Zv);}registerModels(e){for(let[t,s]of Object.entries(e))if(this.models.set(t,s),s.aliases)for(let n of s.aliases)this.models.set(n,s);}getModel(e){return this.models.get(e)}getAllModels(){let e=new Map;for(let t of this.models.values())e.set(t.id,t);return Array.from(e.values())}getModelsByProvider(e){return this.getAllModels().filter(t=>t.provider===e)}hasModel(e){return this.models.has(e)}toModelCapability(e){let t=this.getModel(e);if(t)return {modelAlias:t.id,strengths:this.inferStrengths(t),scores:{coding:t.scores?.coding??50,reasoning:t.scores?.reasoning??50,vision:t.scores?.vision??0,creativity:t.scores?.creativity??50,speed:t.scores?.speed??50,cost:t.scores?.cost??50},features:{supportsVision:t.supportsVision??false,supportsTools:t.supportsTools??false,supportsFunctionCalling:t.supportsFunctionCalling??false,supportsStreaming:t.supportsStreaming??false,maxContextTokens:t.maxInputTokens,maxOutputTokens:t.maxOutputTokens}}}inferStrengths(e){let t=[],s=e.scores??{};return (s.coding??0)>=85&&t.push("coding"),(s.reasoning??0)>=85&&t.push("reasoning"),(s.vision??0)>=85&&t.push("image_analysis"),(s.creativity??0)>=85&&t.push("creative_writing"),t}},Xi=new Ol;var us=class{validateParams(e){let t=this.getConstraints(),s=[],n=[];for(let r of Object.keys(e))t.supportedParams.has(r)||n.push(`Parameter '${r}' is not supported by this provider and will be ignored`);if(t.validators){for(let[r,i]of Object.entries(t.validators))if(e[r]!==void 0){let o=i(e[r],e);o===false?s.push(`Invalid value for parameter '${r}': ${e[r]}`):typeof o=="string"&&s.push(`Parameter '${r}': ${o}`);}}if(e.model&&e.max_tokens!==void 0){let r=this.getTokenLimits(e.model);r.found&&e.max_tokens>r.maxInput?s.push(`max_tokens (${e.max_tokens}) exceeds model context window (${r.maxInput}) for ${e.model}`):r.found&&e.max_tokens>r.maxOutput&&n.push(`max_tokens (${e.max_tokens}) exceeds recommended output limit (${r.maxOutput}) for ${e.model}, but is within context window`);}return {valid:s.length===0,errors:s,warnings:n.length>0?n:void 0}}getTokenLimits(e){let t=Xi.getModel(e);if(t)return {maxOutput:t.maxOutputTokens,maxInput:t.maxInputTokens,found:true,source:"model"};let s=this.getConstraints(),n=s.maxOutputTokens[e],r=s.maxInputTokens[e];if(n!==void 0&&r!==void 0)return {maxOutput:n,maxInput:r,found:true,source:"model"};for(let[i,o]of Object.entries(s.maxOutputTokens))if(this.matchPattern(e,i))return {maxOutput:o,maxInput:s.maxInputTokens[i]||128e3,found:true,source:"model"};return {maxOutput:4096,maxInput:128e3,found:false,source:"fallback"}}normalizeParams(e){let t=this.getConstraints(),s={};for(let[n,r]of Object.entries(e)){let i=t.paramAliases?.[n]||n;t.supportedParams.has(n)&&(s[i]=r);}if(t.defaults)for(let[n,r]of Object.entries(t.defaults))s[n]===void 0&&(s[n]=r);return s}matchPattern(e,t){return t.includes("*")?new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e):e===t}isParamSupported(e){return this.getConstraints().supportedParams.has(e)}getParamAlias(e){return this.getConstraints().paramAliases?.[e]||e}};function Ve(a,e){return t=>{let s=Number(t);return isNaN(s)?"Must be a number":s<a||s>e?`Must be between ${a} and ${e}`:true}}function vn(a){return e=>a.includes(e)?true:`Must be one of: ${a.join(", ")}`}function Wp(a){return e=>{let t=typeof e;return t!==a?`Expected ${a}, got ${t}`:true}}function Qi(...a){return (e,t)=>{for(let s of a){let n=s(e,t);if(n!==true)return n}return true}}var Ds=class extends us{getConstraints(){return {maxOutputTokens:{"gpt-4o":16384,"gpt-4o-2024-11-20":16384,"gpt-4o-2024-08-06":16384,"gpt-4o-2024-05-13":4096,"gpt-4o-mini":16384,"gpt-4o-mini-2024-07-18":16384,"gpt-4-turbo":4096,"gpt-4-turbo-2024-04-09":4096,"gpt-4-turbo-preview":4096,"gpt-4-0125-preview":4096,"gpt-4-1106-preview":4096,"gpt-4":8192,"gpt-4-0613":8192,"gpt-4-0314":8192,"gpt-3.5-turbo":4096,"gpt-3.5-turbo-0125":4096,"gpt-3.5-turbo-1106":4096,o1:1e5,"o1-2024-12-17":1e5,"o1-preview":32768,"o1-preview-2024-09-12":32768,"o1-mini":65536,"o1-mini-2024-09-12":65536,o3:1e5,"o3-mini":1e5,"o3-mini-2025-01-31":1e5,"o4-mini":1e5,"gpt-5":1e5,"gpt-5.1":1e5,"gpt-5.1-codex":1e5,"gpt-5.1-codex-max":1e5,"gpt-5.1-codex-mini":1e5,"gpt-5.2":1e5,"gpt-5.2-codex":1e5,"gpt-5-codex":1e5,"gpt-5-codex-mini":1e5,"codex-mini-latest":1e5,"gpt-4.1":1e5,"gpt-4.1-2025-04-14":1e5,"gpt-4o*":16384,"gpt-4-turbo*":4096,"gpt-4.1*":1e5,"gpt-4*":8192,"gpt-3.5*":4096,"gpt-5*":1e5,"codex*":1e5,"o1*":1e5,"o3*":1e5,"o4*":1e5},maxInputTokens:{"gpt-4o":128e3,"gpt-4o-mini":128e3,"gpt-4-turbo":128e3,"gpt-4-turbo-2024-04-09":128e3,"gpt-4.1":1047576,"gpt-4.1-2025-04-14":1047576,"gpt-4":8192,"gpt-4-32k":32768,"gpt-3.5-turbo":16385,"gpt-3.5-turbo-16k":16385,"gpt-5":272e3,"gpt-5.1":272e3,"gpt-5.1-codex":272e3,"gpt-5.1-codex-max":272e3,"gpt-5.1-codex-mini":272e3,"gpt-5-codex":272e3,"gpt-5-codex-mini":272e3,"gpt-5.2":4e5,"gpt-5.2-codex":4e5,"codex-mini-latest":2e5,o1:2e5,"o1-preview":128e3,"o1-mini":128e3,o3:2e5,"o3-mini":2e5,"o4-mini":2e5,"gpt-4o*":128e3,"gpt-4-turbo*":128e3,"gpt-4.1*":1047576,"gpt-5*":272e3,"gpt-5.2*":4e5,"codex*":272e3,"o1*":2e5,"o3*":2e5,"o4*":2e5},supportedParams:new Set(["model","messages","stream","stream_options","max_tokens","max_completion_tokens","temperature","top_p","top_k","frequency_penalty","presence_penalty","stop","n","seed","reasoning_effort","verbosity","tools","tool_choice","parallel_tool_calls","response_format","logprobs","top_logprobs","logit_bias","modalities","audio","user","safety_identifier","store","service_tier","prompt_cache_key","prompt_cache_retention","metadata","prediction","extra_body","search_parameters","web_search_options"]),validators:{temperature:Ve(0,2),top_p:Ve(0,1),frequency_penalty:Ve(-2,2),presence_penalty:Ve(-2,2),reasoning_effort:vn(["low","medium","high"]),verbosity:vn(["low","medium","high"]),tool_choice:e=>typeof e=="string"?["none","auto","required"].includes(e)||"Must be 'none', 'auto', or 'required'":typeof e=="object"&&e.type==="function"?true:"Invalid tool_choice format","response_format.type":vn(["text","json_object","json_schema"]),stream:e=>typeof e=="boolean"||"Must be a boolean",n:Qi(e=>typeof e=="number"||"Must be a number",Ve(1,10)),max_tokens:(e,t)=>{let s=Number(e);if(isNaN(s))return "Must be a number";if(s<1)return "Must be at least 1";t?.model||"";return true}},defaults:{temperature:1,top_p:1,n:1,stream:false,max_tokens:4096}}}isResponsesAPIModel(e){return e.startsWith("o1")||e.startsWith("o3")}supportsReasoning(e){return this.isResponsesAPIModel(e)}supportsVision(e){return e.includes("gpt-4o")||e.includes("gpt-4-turbo")||e.includes("gpt-4-vision")}supportsTools(e){return e.startsWith("o1-preview")||e.startsWith("o1-mini")?false:e.includes("gpt-4")||e.includes("gpt-3.5-turbo")||e.startsWith("o3")}getRecommendedMaxTokens(e,t){let s=this.getTokenLimits(e);switch(t){case "short":return Math.min(1024,s.maxOutput);case "medium":return Math.min(4096,s.maxOutput);case "long":return s.maxOutput;default:return Math.min(4096,s.maxOutput)}}};var ds=class{combinePromptSections(e){return e.filter(s=>s.content.trim().length>0).sort((s,n)=>(s.order||0)-(n.order||0)).map(s=>s.title?`# ${s.title}
1505
1505
 
1506
1506
  ${s.content}`:s.content).join(`
1507
1507
 
1508
- `)}getWorkingDirectorySection(e,t){return t==="zh"?{title:"\u5DE5\u4F5C\u76EE\u5F55",content:`\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55: ${e}`,order:10}:{title:"Working Directory",content:`Current working directory: ${e}`,order:10}}modelMatches(e,t){return e?t.includes("*")?new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e):e===t:false}isModelType(e,...t){return e?t.some(s=>this.modelMatches(e,s)):false}};function Ds(a){return a.replace(/\n{3,}/g,`
1508
+ `)}getWorkingDirectorySection(e,t){return t==="zh"?{title:"\u5DE5\u4F5C\u76EE\u5F55",content:`\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55: ${e}`,order:10}:{title:"Working Directory",content:`Current working directory: ${e}`,order:10}}modelMatches(e,t){return e?t.includes("*")?new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e):e===t:false}isModelType(e,...t){return e?t.some(s=>this.modelMatches(e,s)):false}};function Os(a){return a.replace(/\n{3,}/g,`
1509
1509
 
1510
1510
  `).trim()}var ew=`You are Claude Code, Anthropic's official CLI for Claude.
1511
1511
 
@@ -1545,11 +1545,11 @@ When planning tasks, provide concrete implementation steps without time estimate
1545
1545
  You have access to the TodoWrite tools to help you manage and plan tasks. Use these tools VERY frequently to ensure that you are tracking your tasks and giving the user visibility into your progress.
1546
1546
  These tools are also EXTREMELY helpful for planning tasks, and for breaking down larger complex tasks into smaller steps. If you do not use this tool when planning, you may forget to do important tasks - and that is unacceptable.
1547
1547
 
1548
- It is critical that you mark todos as completed as soon as you are done with a task. Do not batch up multiple tasks before marking them as completed.`.trim(),Os=class extends ds{buildSystemPrompt(e){let{workDir:t,language:s="zh",modelName:n,customInstructions:r}=e;return this.isResponsesAPIModel(n)?this.buildResponsesAPIPrompt(r):this.buildChatCompletionsPrompt(t,s,n,r)}buildResponsesAPIPrompt(e){let t=ew;return e&&e.trim()&&(t+=`
1548
+ It is critical that you mark todos as completed as soon as you are done with a task. Do not batch up multiple tasks before marking them as completed.`.trim(),Ls=class extends ds{buildSystemPrompt(e){let{workDir:t,language:s="zh",modelName:n,customInstructions:r}=e;return this.isResponsesAPIModel(n)?this.buildResponsesAPIPrompt(r):this.buildChatCompletionsPrompt(t,s,n,r)}buildResponsesAPIPrompt(e){let t=ew;return e&&e.trim()&&(t+=`
1549
1549
 
1550
1550
  # Custom Instructions
1551
1551
 
1552
- `+e.trim()),Ds(t)}buildChatCompletionsPrompt(e,t,s,n){let r=[];return r.push({content:this.getCoreInstructions(t,s),order:0}),r.push(this.getWorkingDirectorySection(e,t)),r.push({content:this.getCapabilitiesSection(t,s),order:20}),r.push({title:t==="zh"?"\u53C2\u6570\u7EA6\u675F":"Parameter Constraints",content:this.getConstraintInstructions(t,s),order:30}),r.push({title:t==="zh"?"\u5DE5\u5177\u8C03\u7528":"Tool Usage",content:this.getToolUseInstructions(t),order:40}),r.push({content:this.getGeneralRules(t),order:50}),n&&n.trim()&&r.push({title:t==="zh"?"\u81EA\u5B9A\u4E49\u6307\u4EE4":"Custom Instructions",content:n.trim(),order:60}),Ds(this.combinePromptSections(r))}getCoreInstructions(e,t){let s=this.getModelDisplayName(t);return e==="zh"?`\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684 AI \u7F16\u7A0B\u52A9\u624B\uFF0C\u57FA\u4E8E ${s} \u63D0\u4F9B\u652F\u6301\u3002
1552
+ `+e.trim()),Os(t)}buildChatCompletionsPrompt(e,t,s,n){let r=[];return r.push({content:this.getCoreInstructions(t,s),order:0}),r.push(this.getWorkingDirectorySection(e,t)),r.push({content:this.getCapabilitiesSection(t,s),order:20}),r.push({title:t==="zh"?"\u53C2\u6570\u7EA6\u675F":"Parameter Constraints",content:this.getConstraintInstructions(t,s),order:30}),r.push({title:t==="zh"?"\u5DE5\u5177\u8C03\u7528":"Tool Usage",content:this.getToolUseInstructions(t),order:40}),r.push({content:this.getGeneralRules(t),order:50}),n&&n.trim()&&r.push({title:t==="zh"?"\u81EA\u5B9A\u4E49\u6307\u4EE4":"Custom Instructions",content:n.trim(),order:60}),Os(this.combinePromptSections(r))}getCoreInstructions(e,t){let s=this.getModelDisplayName(t);return e==="zh"?`\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684 AI \u7F16\u7A0B\u52A9\u624B\uFF0C\u57FA\u4E8E ${s} \u63D0\u4F9B\u652F\u6301\u3002
1553
1553
 
1554
1554
  \u4F60\u7684\u4E3B\u8981\u804C\u8D23\u662F\u5E2E\u52A9\u7528\u6237\u5B8C\u6210\u8F6F\u4EF6\u5DE5\u7A0B\u4EFB\u52A1\uFF0C\u5305\u62EC\uFF1A
1555
1555
  - \u4EE3\u7801\u751F\u6210\u548C\u4FEE\u6539
@@ -1624,8 +1624,8 @@ Tool results are returned via messages with role "tool".`}getGeneralRules(e){ret
1624
1624
 
1625
1625
  \u2026[${s-l.length-c.length} chars truncated, total ${t} lines]\u2026
1626
1626
 
1627
- `;return l+d+c}function zp(a,e={}){let t={...a};return !e.allowServiceTier&&"service_tier"in t&&delete t.service_tier,e.disableStore&&"store"in t&&delete t.store,!e.allowSafetyIdentifier&&"safety_identifier"in t&&delete t.safety_identifier,t}function Hp(a,e){if(!a)return null;if(e?.reasoning)return {effort:e.reasoning.effort||"low",verbosity:e.reasoning.verbosity||"low",summary:e.reasoning.summary||"auto"};let t=process.env.CD_REASONING_EFFORT||process.env.NEOX_REASONING_EFFORT,s=process.env.CD_REASONING_VERBOSITY||process.env.NEOX_REASONING_VERBOSITY,n=process.env.CD_REASONING_SUMMARY||process.env.NEOX_REASONING_SUMMARY;return t||s||n?{effort:t||"low",verbosity:s||"low",summary:n||"auto"}:null}var Kt=class{client;defaultModel;isProxy;useResponsesAPI;apiEndpoint;streamFormat;retryConfig;baseUrl;privacySettings;sessionId;doubaoThinking;apiKey;modelConfig;structuredOutputMode;constructor(e){this.baseUrl=e.baseUrl||"https://api.openai.com/v1",this.isProxy=e.baseUrl?!e.baseUrl.includes("api.openai.com"):false,this.useResponsesAPI=e.useResponsesAPI||false,this.apiEndpoint=e.apiEndpoint||"/chat/completions",this.streamFormat=e.streamFormat||"openai",this.apiKey=e.apiKey,this.sessionId=e.sessionId||`session-${Date.now()}-${Math.random().toString(36).slice(2,11)}`,this.privacySettings=e.privacySettings||{},this.doubaoThinking=e.doubaoThinking,this.modelConfig=e.modelConfig,this.structuredOutputMode=e.structuredOutputMode||"json_schema",this.client=tw.create({baseURL:this.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},timeout:12e4}),this.defaultModel=e.defaultModel||"gpt-4";let t=mn("openai",this.baseUrl);this.retryConfig=is(void 0,{...t,...e.retry}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Initialized with:",{baseUrl:this.baseUrl,isProxy:this.isProxy,useResponsesAPI:this.useResponsesAPI,apiEndpoint:this.apiEndpoint,streamFormat:this.streamFormat});}async chat(e,t={}){let{model:s=this.defaultModel}=t;return this.shouldUseResponsesAPI(s)?this.chatWithResponsesAPI(e,t):this.chatWithChatCompletions(e,t)}async*chatStreamed(e,t={}){let{model:s=this.defaultModel}=t;this.shouldUseResponsesAPI(s)?yield*this.chatStreamedWithResponsesAPI(e,t):yield*this.chatStreamedWithChatCompletions(e,t);}async chatWithChatCompletions(e,t){let{model:s=this.defaultModel,tools:n,temperature:r=.7,maxInputTokens:i}=t,o=this.buildChatCompletionsPayload(e,{model:s,tools:n,temperature:r,structuredOutput:t.structuredOutput,maxInputTokens:i,stream:false}),l=`${this.client.defaults.baseURL}/chat/completions`;ge.llmRequest("openai",s,o,l,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Chat Completions Request",{url:l,payload:o});let c=this.retryConfig.requestMaxRetries,u=null;for(let d=0;d<=c;d++)try{let p=Date.now(),h=await this.client.post("/chat/completions",o),g=Date.now()-p;return ge.llmResponse("openai",g,h.data.usage,h.data.choices[0]),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Chat Completions Response",{duration:`${g}ms`,data:h.data}),h.data}catch(p){u=p;let h=ft(p);if(m.error("OpenAI",`Request Error - URL: ${l}`),m.error("OpenAI",`Error: ${p.message}`),p.response?.data)try{let y=p.response.data;if(typeof y=="string")m.error("OpenAI",`Response: ${y.substring(0,500)}`);else if(y&&typeof y=="object"){let w={error:y.error,message:y.message,type:y.type,code:y.code};m.error("OpenAI",`Response: ${JSON.stringify(w).substring(0,500)}`);}}catch{m.error("OpenAI","Response: [Could not serialize error data]");}if(process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Chat Completions Error",{url:l,message:p.message,category:h.category,retryable:h.retryable,attempt:`${d+1}/${c+1}`}),ge.llmError("openai",p),!h.retryable||d===c)throw h;let g=p.response?.headers?.["retry-after"],f=Ht(g),b=os(f,d+1,this.retryConfig);m.info("OpenAI",`Request failed (${h.code}), retrying in ${nt(b)} (${d+1}/${c})...`),await fn(b);}throw u||new Error("Unknown error during retry")}async*chatStreamedWithChatCompletions(e,t){let{model:s=this.defaultModel,tools:n,temperature:r=.7,maxInputTokens:i,signal:o}=t,l=this.buildChatCompletionsPayload(e,{model:s,tools:n,temperature:r,structuredOutput:t.structuredOutput,maxInputTokens:i,stream:true}),c=`${this.client.defaults.baseURL}${this.apiEndpoint}`;ge.llmRequest("openai-stream",s,l,c,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Chat Completions Stream Request",{url:c,endpoint:this.apiEndpoint,payload:l});let u=this.retryConfig.streamMaxRetries,d=0;for(;;)try{if(o?.aborted){let f=new Error("Request aborted");throw f.name="AbortError",f}let p=Date.now(),h=await this.client.post(this.apiEndpoint,l,{responseType:"stream",signal:o});if(process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream Started",{status:h.status}),h.status!==200){let f="";for await(let b of h.data)f+=b.toString();throw new Error(`OpenAI API error: ${h.status} - ${f}`)}this.streamFormat==="anthropic"?yield*this.parseAnthropicStreamResponse(h.data):yield*this.parseOpenAIStreamResponse(h.data,o);let g=Date.now()-p;ge.llmResponse("openai-stream",g,{},{}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream Complete",{duration:`${g}ms`});return}catch(p){let h=ft(p);if(m.error("OpenAI",`Stream Error - Request URL: ${c}`),m.error("OpenAI",`Error: ${p.message}`),p.response?.data)try{let g=p.response.data;if(typeof g=="string")m.error("OpenAI",`Response: ${g.substring(0,500)}`);else if(g&&typeof g=="object"){let f={error:g.error,message:g.message,type:g.type,code:g.code};m.error("OpenAI",`Response: ${JSON.stringify(f).substring(0,500)}`);}}catch{m.error("OpenAI","Response: [Could not serialize error data]");}if(process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream Error Details",{url:c,message:p.message,retryable:h.retryable,status:p.response?.status}),ge.llmError("openai-stream",p),h.retryable&&d<u){d++;let g=p.response?.headers?.["retry-after"],f=Ht(g),b=os(f,d,this.retryConfig);m.info("OpenAI",`Stream failed (${h.code}), reconnecting in ${nt(b)} (${d}/${u})...`),yield {choices:[],type:"stream_retry",error:h.message,errorCode:h.code,attempt:d,maxRetries:u,delayMs:b};try{await Is(b,o);}catch(y){throw y?.name==="AbortError",y}continue}throw h}}buildChatCompletionsPayload(e,t){let{model:s,tools:n,temperature:r,structuredOutput:i,maxInputTokens:o,stream:l}=t,c=this.formatMessagesForChatCompletions(e);if(this.baseUrl.includes("ark.cn-beijing.volces.com")){let h={model:s,messages:c,stream:l};return this.doubaoThinking&&s.includes("doubao-seed")&&(h.thinking={type:this.doubaoThinking.type},process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Doubao thinking mode: ${this.doubaoThinking.type}`)),n&&n.length>0&&(h.tools=n.map(g=>({type:"function",function:{name:g.name,description:g.description,parameters:g.parameters}})),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Added ${h.tools.length} tools to Doubao payload`)),h}let d={model:s,messages:c,temperature:r,stream:l};l&&(d.stream_options={include_usage:true}),o!==void 0&&(d.max_tokens=o);let p=Hp(false);return p&&(d.reasoning_effort=p.effort,p.verbosity&&(d.verbosity=p.verbosity)),n&&n.length>0&&(d.tools=n.map(h=>({type:"function",function:{name:h.name,description:h.description,parameters:h.parameters}})),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Added ${d.tools.length} tools to Chat Completions payload`)),i&&(this.structuredOutputMode==="json_object"?d.response_format={type:"json_object"}:d.response_format={type:"json_schema",json_schema:{name:i.name,schema:i.schema,strict:i.strict??true}}),zp(d,this.privacySettings)}formatMessagesForChatCompletions(e){return e.filter(t=>{let s=t.content&&(typeof t.content=="string"?t.content.trim().length>0:Array.isArray(t.content)&&t.content.length>0),n=t.tool_calls&&t.tool_calls.length>0;return s||n}).map(t=>{let s={role:t.role,content:null};if(t.role==="tool"){let n=typeof t.content=="string"?t.content:me(t.content);s.content=qp(n);}else Array.isArray(t.content)?s.content=t.content:t.tool_calls&&t.tool_calls.length>0?s.content=t.content||"":s.content=t.content||null;return t.name&&(s.name=t.name),t.tool_call_id&&(s.tool_call_id=t.tool_call_id),t.tool_calls&&(s.tool_calls=t.tool_calls.map(n=>({id:n.id,type:"function",function:{name:n.function.name,arguments:n.function.arguments}}))),s})}async chatWithResponsesAPI(e,t){let s="",n=[],r;for await(let i of this.chatStreamedWithResponsesAPI(e,t)){let o=i.choices?.[0]?.delta;if(o&&(o.content&&(s+=o.content),o.tool_calls))for(let l of o.tool_calls){let c=n.find(u=>u.index===l.index);c?l.function?.arguments&&(c.function.arguments+=l.function.arguments):n.push({id:l.id||`call_${n.length}`,type:"function",function:{name:l.function?.name||"",arguments:l.function?.arguments||""},index:l.index});}i.usage&&(r=i.usage);}return {id:`chatcmpl-${Date.now()}`,choices:[{message:{role:"assistant",content:s||null,...n.length>0?{tool_calls:n}:{}},finish_reason:"stop"}],usage:r||{total_tokens:0,prompt_tokens:0,completion_tokens:0}}}async*chatStreamedWithResponsesAPI(e,t){let{model:s=this.defaultModel,tools:n,temperature:r=.7,structuredOutput:i,maxInputTokens:o,signal:l}=t,c=this.buildResponsesAPIPayload(e,{model:s,tools:n,temperature:r,structuredOutput:i,maxInputTokens:o}),u=`${this.client.defaults.baseURL}/responses`;if(ge.llmRequest("openai-responses-stream",s,c,u,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"){m.info("OpenAI","Responses API Stream Request",{url:u,toolsCount:c.tools?.length||0}),process.env.CLI_DEBUG_PAYLOAD==="1"&&m.debug("OpenAI","Full Payload",c);let d=['-H "Content-Type: application/json"','-H "Accept: text/event-stream"',`-H "Authorization: Bearer ${this.apiKey}"`,`-H "conversation_id: ${this.sessionId}"`,`-H "session_id: ${this.sessionId}"`,'-H "user-agent: neox-cli/1.0.0"'],p=[`curl -X POST "${u}"`,...d,`-d '${JSON.stringify(c)}'`,"--no-buffer"].join(` \\
1628
- `),h=[`curl -X POST "${u}"`,...d,`-d '${JSON.stringify(c)}'`,"--no-buffer"].join(" ");m.info("CURL","\u2550".repeat(80)),m.info("CURL","Multi-line CURL command:"),m.info("CURL",p),m.info("CURL","\u2550".repeat(80)),m.info("CURL","One-line CURL (copy-paste ready):"),m.info("CURL",h),m.info("CURL","\u2550".repeat(80));}try{if(l?.aborted){let f=new Error("Request aborted");throw f.name="AbortError",f}let d=Date.now(),p={Accept:"text/event-stream",conversation_id:this.sessionId,session_id:this.sessionId,originator:"codex_cli_rs","x-codex-beta-features":"shell_snapshot"},h=await this.client.post("/responses",c,{responseType:"stream",signal:l,headers:p});if(process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Responses API Stream Started",{status:h.status}),h.status!==200){let f="";for await(let y of h.data)f+=y.toString();let b=As(f,h.status);throw new Error(`OpenAI Responses API error: ${h.status} - ${b.message}`)}yield*this.parseResponsesAPIStream(h.data,l);let g=Date.now()-d;ge.llmResponse("openai-responses-stream",g,{},{}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Responses API Stream Complete",{duration:`${g}ms`});}catch(d){let p,h=d.response?.status;if(d.response?.data){let f=d.response.data;try{if(f&&typeof f.on=="function"){let b="";try{for await(let y of f)b+=y.toString();p=b;}catch{p="[Could not read error stream]";}}else if(typeof f=="string")p=f;else if(f&&typeof f=="object"){let b={error:f.error,message:f.message,type:f.type,code:f.code};p=JSON.stringify(b);}}catch{p="[Could not parse error data]";}}process.env.CLI_DEBUG==="1"&&m.error("OpenAI","Responses API Stream Error",{status:h,errorData:p,message:d.message}),ge.llmError("openai-responses-stream",d);let g;if(h&&p){let f=As(p,h);g=`${f.message}${f.detail?`
1627
+ `;return l+d+c}function zp(a,e={}){let t={...a};return !e.allowServiceTier&&"service_tier"in t&&delete t.service_tier,e.disableStore&&"store"in t&&delete t.store,!e.allowSafetyIdentifier&&"safety_identifier"in t&&delete t.safety_identifier,t}function Hp(a,e){if(!a)return null;if(e?.reasoning)return {effort:e.reasoning.effort||"low",verbosity:e.reasoning.verbosity||"low",summary:e.reasoning.summary||"auto"};let t=process.env.CD_REASONING_EFFORT||process.env.NEOX_REASONING_EFFORT,s=process.env.CD_REASONING_VERBOSITY||process.env.NEOX_REASONING_VERBOSITY,n=process.env.CD_REASONING_SUMMARY||process.env.NEOX_REASONING_SUMMARY;return t||s||n?{effort:t||"low",verbosity:s||"low",summary:n||"auto"}:null}var Kt=class{client;defaultModel;isProxy;useResponsesAPI;apiEndpoint;streamFormat;retryConfig;baseUrl;privacySettings;sessionId;doubaoThinking;apiKey;modelConfig;structuredOutputMode;constructor(e){this.baseUrl=e.baseUrl||"https://api.openai.com/v1",this.isProxy=e.baseUrl?!e.baseUrl.includes("api.openai.com"):false,this.useResponsesAPI=e.useResponsesAPI||false,this.apiEndpoint=e.apiEndpoint||"/chat/completions",this.streamFormat=e.streamFormat||"openai",this.apiKey=e.apiKey,this.sessionId=e.sessionId||`session-${Date.now()}-${Math.random().toString(36).slice(2,11)}`,this.privacySettings=e.privacySettings||{},this.doubaoThinking=e.doubaoThinking,this.modelConfig=e.modelConfig,this.structuredOutputMode=e.structuredOutputMode||"json_schema",this.client=tw.create({baseURL:this.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},timeout:12e4}),this.defaultModel=e.defaultModel||"gpt-4";let t=mn("openai",this.baseUrl);this.retryConfig=is(void 0,{...t,...e.retry}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Initialized with:",{baseUrl:this.baseUrl,isProxy:this.isProxy,useResponsesAPI:this.useResponsesAPI,apiEndpoint:this.apiEndpoint,streamFormat:this.streamFormat});}async chat(e,t={}){let{model:s=this.defaultModel}=t;return this.shouldUseResponsesAPI(s)?this.chatWithResponsesAPI(e,t):this.chatWithChatCompletions(e,t)}async*chatStreamed(e,t={}){let{model:s=this.defaultModel}=t;this.shouldUseResponsesAPI(s)?yield*this.chatStreamedWithResponsesAPI(e,t):yield*this.chatStreamedWithChatCompletions(e,t);}async chatWithChatCompletions(e,t){let{model:s=this.defaultModel,tools:n,temperature:r=.7,maxInputTokens:i}=t,o=this.buildChatCompletionsPayload(e,{model:s,tools:n,temperature:r,structuredOutput:t.structuredOutput,maxInputTokens:i,stream:false}),l=`${this.client.defaults.baseURL}/chat/completions`;ge.llmRequest("openai",s,o,l,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Chat Completions Request",{url:l,payload:o});let c=this.retryConfig.requestMaxRetries,u=null;for(let d=0;d<=c;d++)try{let p=Date.now(),h=await this.client.post("/chat/completions",o),g=Date.now()-p;return ge.llmResponse("openai",g,h.data.usage,h.data.choices[0]),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Chat Completions Response",{duration:`${g}ms`,data:h.data}),h.data}catch(p){u=p;let h=ft(p);if(m.error("OpenAI",`Request Error - URL: ${l}`),m.error("OpenAI",`Error: ${p.message}`),p.response?.data)try{let y=p.response.data;if(typeof y=="string")m.error("OpenAI",`Response: ${y.substring(0,500)}`);else if(y&&typeof y=="object"){let w={error:y.error,message:y.message,type:y.type,code:y.code};m.error("OpenAI",`Response: ${JSON.stringify(w).substring(0,500)}`);}}catch{m.error("OpenAI","Response: [Could not serialize error data]");}if(process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Chat Completions Error",{url:l,message:p.message,category:h.category,retryable:h.retryable,attempt:`${d+1}/${c+1}`}),ge.llmError("openai",p),!h.retryable||d===c)throw h;let g=p.response?.headers?.["retry-after"],f=Ht(g),b=os(f,d+1,this.retryConfig);m.info("OpenAI",`Request failed (${h.code}), retrying in ${nt(b)} (${d+1}/${c})...`),await fn(b);}throw u||new Error("Unknown error during retry")}async*chatStreamedWithChatCompletions(e,t){let{model:s=this.defaultModel,tools:n,temperature:r=.7,maxInputTokens:i,signal:o}=t,l=this.buildChatCompletionsPayload(e,{model:s,tools:n,temperature:r,structuredOutput:t.structuredOutput,maxInputTokens:i,stream:true}),c=`${this.client.defaults.baseURL}${this.apiEndpoint}`;ge.llmRequest("openai-stream",s,l,c,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Chat Completions Stream Request",{url:c,endpoint:this.apiEndpoint,payload:l});let u=this.retryConfig.streamMaxRetries,d=0;for(;;)try{if(o?.aborted){let f=new Error("Request aborted");throw f.name="AbortError",f}let p=Date.now(),h=await this.client.post(this.apiEndpoint,l,{responseType:"stream",signal:o});if(process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream Started",{status:h.status}),h.status!==200){let f="";for await(let b of h.data)f+=b.toString();throw new Error(`OpenAI API error: ${h.status} - ${f}`)}this.streamFormat==="anthropic"?yield*this.parseAnthropicStreamResponse(h.data):yield*this.parseOpenAIStreamResponse(h.data,o);let g=Date.now()-p;ge.llmResponse("openai-stream",g,{},{}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream Complete",{duration:`${g}ms`});return}catch(p){let h=ft(p);if(m.error("OpenAI",`Stream Error - Request URL: ${c}`),m.error("OpenAI",`Error: ${p.message}`),p.response?.data)try{let g=p.response.data;if(typeof g=="string")m.error("OpenAI",`Response: ${g.substring(0,500)}`);else if(g&&typeof g=="object"){let f={error:g.error,message:g.message,type:g.type,code:g.code};m.error("OpenAI",`Response: ${JSON.stringify(f).substring(0,500)}`);}}catch{m.error("OpenAI","Response: [Could not serialize error data]");}if(process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream Error Details",{url:c,message:p.message,retryable:h.retryable,status:p.response?.status}),ge.llmError("openai-stream",p),h.retryable&&d<u){d++;let g=p.response?.headers?.["retry-after"],f=Ht(g),b=os(f,d,this.retryConfig);m.info("OpenAI",`Stream failed (${h.code}), reconnecting in ${nt(b)} (${d}/${u})...`),yield {choices:[],type:"stream_retry",error:h.message,errorCode:h.code,attempt:d,maxRetries:u,delayMs:b};try{await Ms(b,o);}catch(y){throw y?.name==="AbortError",y}continue}throw h}}buildChatCompletionsPayload(e,t){let{model:s,tools:n,temperature:r,structuredOutput:i,maxInputTokens:o,stream:l}=t,c=this.formatMessagesForChatCompletions(e);if(this.baseUrl.includes("ark.cn-beijing.volces.com")){let h={model:s,messages:c,stream:l};return this.doubaoThinking&&s.includes("doubao-seed")&&(h.thinking={type:this.doubaoThinking.type},process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Doubao thinking mode: ${this.doubaoThinking.type}`)),n&&n.length>0&&(h.tools=n.map(g=>({type:"function",function:{name:g.name,description:g.description,parameters:g.parameters}})),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Added ${h.tools.length} tools to Doubao payload`)),h}let d={model:s,messages:c,temperature:r,stream:l};l&&(d.stream_options={include_usage:true}),o!==void 0&&(d.max_tokens=o);let p=Hp(false);return p&&(d.reasoning_effort=p.effort,p.verbosity&&(d.verbosity=p.verbosity)),n&&n.length>0&&(d.tools=n.map(h=>({type:"function",function:{name:h.name,description:h.description,parameters:h.parameters}})),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Added ${d.tools.length} tools to Chat Completions payload`)),i&&(this.structuredOutputMode==="json_object"?d.response_format={type:"json_object"}:d.response_format={type:"json_schema",json_schema:{name:i.name,schema:i.schema,strict:i.strict??true}}),zp(d,this.privacySettings)}formatMessagesForChatCompletions(e){return e.filter(t=>{let s=t.content&&(typeof t.content=="string"?t.content.trim().length>0:Array.isArray(t.content)&&t.content.length>0),n=t.tool_calls&&t.tool_calls.length>0;return s||n}).map(t=>{let s={role:t.role,content:null};if(t.role==="tool"){let n=typeof t.content=="string"?t.content:me(t.content);s.content=qp(n);}else Array.isArray(t.content)?s.content=t.content:t.tool_calls&&t.tool_calls.length>0?s.content=t.content||"":s.content=t.content||null;return t.name&&(s.name=t.name),t.tool_call_id&&(s.tool_call_id=t.tool_call_id),t.tool_calls&&(s.tool_calls=t.tool_calls.map(n=>({id:n.id,type:"function",function:{name:n.function.name,arguments:n.function.arguments}}))),s})}async chatWithResponsesAPI(e,t){let s="",n=[],r;for await(let i of this.chatStreamedWithResponsesAPI(e,t)){let o=i.choices?.[0]?.delta;if(o&&(o.content&&(s+=o.content),o.tool_calls))for(let l of o.tool_calls){let c=n.find(u=>u.index===l.index);c?l.function?.arguments&&(c.function.arguments+=l.function.arguments):n.push({id:l.id||`call_${n.length}`,type:"function",function:{name:l.function?.name||"",arguments:l.function?.arguments||""},index:l.index});}i.usage&&(r=i.usage);}return {id:`chatcmpl-${Date.now()}`,choices:[{message:{role:"assistant",content:s||null,...n.length>0?{tool_calls:n}:{}},finish_reason:"stop"}],usage:r||{total_tokens:0,prompt_tokens:0,completion_tokens:0}}}async*chatStreamedWithResponsesAPI(e,t){let{model:s=this.defaultModel,tools:n,temperature:r=.7,structuredOutput:i,maxInputTokens:o,signal:l}=t,c=this.buildResponsesAPIPayload(e,{model:s,tools:n,temperature:r,structuredOutput:i,maxInputTokens:o}),u=`${this.client.defaults.baseURL}/responses`;if(ge.llmRequest("openai-responses-stream",s,c,u,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"){m.info("OpenAI","Responses API Stream Request",{url:u,toolsCount:c.tools?.length||0}),process.env.CLI_DEBUG_PAYLOAD==="1"&&m.debug("OpenAI","Full Payload",c);let d=['-H "Content-Type: application/json"','-H "Accept: text/event-stream"',`-H "Authorization: Bearer ${this.apiKey}"`,`-H "conversation_id: ${this.sessionId}"`,`-H "session_id: ${this.sessionId}"`,'-H "user-agent: neox-cli/1.0.0"'],p=[`curl -X POST "${u}"`,...d,`-d '${JSON.stringify(c)}'`,"--no-buffer"].join(` \\
1628
+ `),h=[`curl -X POST "${u}"`,...d,`-d '${JSON.stringify(c)}'`,"--no-buffer"].join(" ");m.info("CURL","\u2550".repeat(80)),m.info("CURL","Multi-line CURL command:"),m.info("CURL",p),m.info("CURL","\u2550".repeat(80)),m.info("CURL","One-line CURL (copy-paste ready):"),m.info("CURL",h),m.info("CURL","\u2550".repeat(80));}try{if(l?.aborted){let f=new Error("Request aborted");throw f.name="AbortError",f}let d=Date.now(),p={Accept:"text/event-stream",conversation_id:this.sessionId,session_id:this.sessionId,originator:"codex_cli_rs","x-codex-beta-features":"shell_snapshot"},h=await this.client.post("/responses",c,{responseType:"stream",signal:l,headers:p});if(process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Responses API Stream Started",{status:h.status}),h.status!==200){let f="";for await(let y of h.data)f+=y.toString();let b=Es(f,h.status);throw new Error(`OpenAI Responses API error: ${h.status} - ${b.message}`)}yield*this.parseResponsesAPIStream(h.data,l);let g=Date.now()-d;ge.llmResponse("openai-responses-stream",g,{},{}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Responses API Stream Complete",{duration:`${g}ms`});}catch(d){let p,h=d.response?.status;if(d.response?.data){let f=d.response.data;try{if(f&&typeof f.on=="function"){let b="";try{for await(let y of f)b+=y.toString();p=b;}catch{p="[Could not read error stream]";}}else if(typeof f=="string")p=f;else if(f&&typeof f=="object"){let b={error:f.error,message:f.message,type:f.type,code:f.code};p=JSON.stringify(b);}}catch{p="[Could not parse error data]";}}process.env.CLI_DEBUG==="1"&&m.error("OpenAI","Responses API Stream Error",{status:h,errorData:p,message:d.message}),ge.llmError("openai-responses-stream",d);let g;if(h&&p){let f=Es(p,h);g=`${f.message}${f.detail?`
1629
1629
  `+f.detail:""}`;}else g=d.message||"Unknown error";throw new Error(g)}}buildResponsesAPIPayload(e,t){let{model:s,tools:n,temperature:r,structuredOutput:i,maxInputTokens:o}=t,l=this.convertToResponsesInput(e),c=this.buildResponsesInstructions(e);if(!c)throw new Error("[OpenAI Responses API] instructions field is required but no system message found");if(!l||l.length===0)throw new Error("[OpenAI Responses API] input array is empty - at least one user message is required");if(process.env.CLI_DEBUG==="1"){m.debug("OpenAI","Building Responses API payload",{instructionsLength:c.length,instructionsPreview:c.substring(0,300),inputItems:l.length,inputPreview:JSON.stringify(l.slice(0,2),null,2)}),m.debug("OpenAI","Full input array for Response API:",{totalMessages:e.length,messageRoles:e.map(b=>b.role),inputCount:l.length,fullInput:JSON.stringify(l,null,2)});let p=l.filter(b=>b.type==="function_call"),h=l.filter(b=>b.type==="function_call_output");m.debug("OpenAI","Function call ID matching check:",{callCount:p.length,outputCount:h.length,callIds:p.map(b=>({id:b.id||b.call_id,name:b.name})),outputIds:h.map(b=>({call_id:b.call_id}))});let g=new Set(p.map(b=>b.call_id||b.id)),f=h.filter(b=>!g.has(b.call_id));f.length>0&&m.warn("OpenAI",`\u26A0\uFE0F Found ${f.length} unmatched function_call_output!`,{unmatchedCallIds:f.map(b=>b.call_id)});}let u={model:s,instructions:c,input:l};n&&n.length>0&&(u.tools=n.map(p=>this.formatResponsesFunctionTool(p)),u.tool_choice="auto",u.parallel_tool_calls=true,process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Added ${u.tools.length} tools`));let d=Hp(true,this.modelConfig);return d&&(u.reasoning={effort:d.effort,summary:d.summary||"auto"}),u.store=false,u.stream=true,d&&(u.include=["reasoning.encrypted_content"]),u.prompt_cache_key=this.sessionId,zp(u,this.privacySettings)}buildResponsesInstructions(e){let t=wr({workDir:process.cwd(),language:"zh",useCodexStyle:true});return process.env.CLI_DEBUG==="1"&&(m.debug("OpenAI","Using official Codex instructions for Responses API"),m.debug("OpenAI",`Instructions length: ${t.length} chars`),m.debug("OpenAI",`Instructions preview: ${t.substring(0,200)}...`)),t}convertToResponsesInput(e){let s=this.filterIncompleteToolCalls(e).filter(i=>i.role!=="system").flatMap(i=>this.convertMessageToResponsesItems(i)),n=this.extractMemoryContext(e);n&&s.unshift({type:"message",role:"user",status:"completed",content:[{type:"input_text",text:`<memory_context>
1630
1630
  ${n}
1631
1631
  </memory_context>`}]});let r=this.getGPTAgentInstructions();if(r&&s.unshift({type:"message",role:"user",status:"completed",content:[{type:"input_text",text:r}]}),process.env.CLI_DEBUG==="1"){let i=s.filter(l=>l.type==="function_call"),o=s.filter(l=>l.type==="function_call_output");if(m.debug("OpenAI","Responses API input structure:",{totalItems:s.length,functionCalls:i.length,functionCallOutputs:o.length}),i.length>0||o.length>0){m.debug("OpenAI","Function calls in input:",i.map(d=>({call_id:d.call_id,name:d.name}))),m.debug("OpenAI","Function call outputs in input:",o.map(d=>({call_id:d.call_id})));let l=new Set(i.map(d=>d.call_id)),c=new Set(o.map(d=>d.call_id)),u=[...l].filter(d=>!c.has(d));u.length>0&&m.warn("OpenAI","\u26A0\uFE0F Found function_calls without outputs:",u);}}return s}extractMemoryContext(e){let t=e.filter(n=>n.role==="system"),s=["## \u9879\u76EE\u8BB0\u5FC6","## \u4E0A\u6B21\u4EFB\u52A1\u6458\u8981","## Project Memory","## Last Run Summary"];for(let n of t){let r=typeof n.content=="string"?n.content:me(n.content);if(r&&s.some(i=>r.includes(i)))return r.trim()}return null}filterIncompleteToolCalls(e){let t=[];for(let s=0;s<e.length;s++){let n=e[s];if(n.role==="assistant"&&n.tool_calls&&n.tool_calls.length>0&&!this.hasToolOutputsInHistory(n,e,s)){process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Filtering incomplete assistant message:",{toolCalls:n.tool_calls.map(i=>({id:i.id,name:i.function.name})),reason:"Missing tool outputs in message history"});continue}t.push(n);}return t}hasToolOutputsInHistory(e,t,s){if(!e.tool_calls)return true;let n=new Set(e.tool_calls.map(i=>i.id)),r=new Set;for(let i=s+1;i<t.length;i++){let o=t[i];if(o.role==="tool"&&o.tool_call_id&&r.add(o.tool_call_id),o.role==="assistant")break}for(let i of n)if(!r.has(i))return false;return true}convertMessageToResponsesItems(e){if(e.role==="assistant"){let s=[],n=me(e.content);if(n.trim().length>0&&s.push({type:"message",role:"assistant",status:"completed",content:[{type:"output_text",text:n,annotations:[]}]}),Array.isArray(e.tool_calls)&&e.tool_calls.length>0)for(let r of e.tool_calls){let i=r.id;process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Function call ID (no normalization):",{originalId:i,toolName:r.function.name,argsLength:r.function.arguments?.length||0}),s.push({type:"function_call",call_id:i,name:r.function.name,arguments:r.function.arguments||"",status:"completed"}),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Sending function_call to API:",{call_id:i,name:r.function.name});}return s}if(e.role==="tool"){let s=e.tool_call_id||e.name,n=me(e.content),r=qp(n);return process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Sending function_call_output (no normalization):",{callId:s,toolName:e.name,outputLength:r.length,wasTruncated:n.length!==r.length}),[{type:"function_call_output",call_id:s,output:r}]}if(Array.isArray(e.content)){let s=[];for(let n of e.content)n.type==="text"&&n.text.trim()?s.push({type:"input_text",text:n.text}):n.type==="image_url"&&s.push({type:"input_image",image_url:n.image_url.url});return s.length===0?[]:[{type:"message",role:"user",content:s}]}let t=me(e.content);return !t||t.trim().length===0?[]:[{type:"message",role:"user",content:[{type:"input_text",text:t}]}]}getGPTAgentInstructions(){try{let e=fileURLToPath(import.meta.url),t=dirname(e),s=join(t,"../prompts/gpt-agents-instructions.md"),n=readFileSync(s,"utf-8"),r=`# AGENTS.md instructions for GPT models
@@ -1634,11 +1634,11 @@ ${n}
1634
1634
  ${n}
1635
1635
  </INSTRUCTIONS>`;return process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Loaded GPT Agent instructions:",{path:s,length:n.length,preview:n.substring(0,200)}),r}catch(e){return process.env.CLI_DEBUG==="1"&&m.warn("OpenAI","Failed to load GPT Agent instructions:",e),null}}formatResponsesFunctionTool(e){return {type:"function",name:e.name,description:e.description,parameters:e.parameters,strict:false}}makeSchemaNullable(e){if(!e||typeof e!="object")return e;let t={...e};return t.type&&(Array.isArray(t.type)?t.type.includes("null")||(t.type=[...t.type,"null"]):t.type!=="null"&&(t.type=[t.type,"null"])),Array.isArray(t.enum)&&!t.enum.includes(null)&&(t.enum=[...t.enum,null]),Array.isArray(t.anyOf)&&(t.anyOf=t.anyOf.map(s=>this.makeSchemaNullable(s))),Array.isArray(t.oneOf)&&(t.oneOf=t.oneOf.map(s=>this.makeSchemaNullable(s))),Array.isArray(t.allOf)&&(t.allOf=t.allOf.map(s=>this.makeSchemaNullable(s))),t}async*parseOpenAIStreamResponse(e,t){let s="",n=0,r=()=>new Promise(i=>setImmediate(i));for await(let i of e){if(t?.aborted)throw process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream aborted by signal"),new Error("Request aborted");n++%20===0&&await r(),s+=i.toString();let o=s.split(`
1636
1636
  `);s=o.pop()||"";for(let l of o){let c=l.trim();if(!c||!c.startsWith("data: "))continue;let u=c.slice(6);if(u==="[DONE]"){process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream Received [DONE]");return}try{let d=JSON.parse(u);process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Stream Chunk",d),yield d;}catch{process.env.CLI_DEBUG==="1"&&m.warn("OpenAI","Stream Invalid JSON",{data:u});}}}}async*parseResponsesAPIStream(e,t){let s=new Map,n=0,r=null,i=null,o=false,l=false,c=2e5,u=1e5,d=g=>{let f={...g};return l||(f.role="assistant",l=true),{choices:[{index:0,delta:f}]}};for await(let g of this.parseOpenAIStreamResponse(e,t))if(!(!g||typeof g!="object"))switch(g.type){case "response.output_text.delta":{let f=typeof g.delta=="string"?g.delta:"";if(!f)break;o=true,yield d({content:f});break}case "response.output_item.added":{if(g.item?.type==="function_call"){let f=g.item.id||`item_${g.output_index}`,b={id:g.item.call_id||g.item.id||`call_${Date.now()}_${n}`,name:g.item.name,index:n++,arguments:"",completed:false};s.set(f,b),process.env.CLI_DEBUG==="1"&&m.debug("OpenAI","Function call added from stream:",{key:f,id:b.id,call_id:g.item.call_id,item_id:g.item.id,name:b.name,index:b.index}),o=true,yield d({tool_calls:[{index:b.index,id:b.id,type:"function",function:{name:b.name}}]});}break}case "response.function_call_arguments.delta":{let f=g.item_id?s.get(g.item_id):void 0;if(!f)break;let b=Buffer.byteLength(f.arguments,"utf8");if(b>=c){process.env.CLI_DEBUG==="1"&&m.warn("OpenAI",`Tool ${f.name} arguments exceeded maximum size (${b} bytes), truncating`);break}let y=typeof g.delta=="string"?g.delta:"";if(!y)break;b>5e4&&await new Promise(C=>setImmediate(C)),f.arguments+=y,o=true;let w=Buffer.byteLength(f.arguments,"utf8");w>u&&b<=u&&m.warn("OpenAI",`Tool ${f.name} arguments size exceeds ${u} bytes (${w} bytes)`),yield d({tool_calls:[{index:f.index,id:f.id,type:"function",function:{name:f.name,arguments:y}}]});break}case "response.output_item.done":{if(g.item?.type==="function_call"){let f=g.item.id||`item_${g.output_index}`,b=s.get(f);if(b&&(b.completed=true,process.env.CLI_DEBUG==="1")){let y=Buffer.byteLength(b.arguments,"utf8");m.debug("OpenAI",`Tool ${b.name} arguments complete (${y} bytes)`);}}break}case "response.completed":{r=g.response,i=g.response?.usage;break}case "response.error":case "response.failed":{let f=g.error?.message||g.error?.code||g.message||"Responses stream failed";throw new Error(f)}}let p=[];for(let[g,f]of s.entries())f.completed||p.push(`${f.name} (${Buffer.byteLength(f.arguments,"utf8")} bytes)`);if(p.length>0&&(m.error("OpenAI",`\u26A0\uFE0F Responses API stream ended with ${p.length} incomplete tool calls: ${p.join(", ")}`),m.error("OpenAI","This indicates a streaming issue with the API/proxy server. The tool calls received incomplete arguments and may fail execution.")),!o&&r){let g=Array.isArray(r.output)?r.output:[],f="";for(let b of g)if(b?.type==="message"&&Array.isArray(b.content))for(let y of b.content)y?.type==="output_text"&&typeof y.text=="string"&&(f+=y.text);f&&(yield {choices:[{index:0,delta:{role:"assistant",content:f}}]});}let h={choices:[{index:0,delta:{},finish_reason:"stop"}]};i&&(h.usage=this.normalizeUsage(i)),yield h;}async*parseAnthropicStreamResponse(e){let t="",s=[],n=0,r=false,i=null;for await(let l of e){t+=l.toString();let c=t.split(`
1637
- `);t=c.pop()||"";for(let u of c){let d=u.trim();if(!d||!d.startsWith("data: "))continue;let p=d.slice(6);if(p!=="[DONE]")try{let h=JSON.parse(p);switch(h.type){case "message_start":h.message?.usage&&(i=h.message.usage);break;case "content_block_start":if(h.content_block?.type==="text")r||(r=!0,yield {choices:[{delta:{role:"assistant"},index:0}]});else if(h.content_block?.type==="tool_use"){let g=h.content_block;s.push({index:n,id:g.id,type:"function",function:{name:g.name,arguments:""}}),yield {choices:[{delta:{tool_calls:[{index:n,id:g.id,type:"function",function:{name:g.name}}]},index:0}]},n++;}break;case "content_block_delta":if(h.delta?.type==="text_delta")yield {choices:[{delta:{content:h.delta.text||""},index:0}]};else if(h.delta?.type==="input_json_delta"){let g=h.delta.partial_json||"";if(s.length>0){let f=s[s.length-1];f.function.arguments+=g,yield {choices:[{delta:{tool_calls:[{index:f.index,function:{arguments:g}}]},index:0}]};}}break;case "message_delta":h.usage&&(i=h.usage);break;case "error":throw new Error(h.error?.message||"Stream error")}}catch{}}}let o={choices:[{delta:{},finish_reason:s.length>0?"tool_calls":"stop",index:0}]};i&&(o.usage=this.normalizeUsage(i)),yield o;}normalizeUsage(e){let t={prompt_tokens:e.input_tokens??e.prompt_tokens??0,completion_tokens:e.output_tokens??e.completion_tokens??0,total_tokens:0};return t.total_tokens=t.prompt_tokens+t.completion_tokens,e.prompt_tokens_details?.cached_tokens!==void 0&&(t.prompt_tokens_details={cached_tokens:e.prompt_tokens_details.cached_tokens,text_tokens:e.prompt_tokens_details.text_tokens,audio_tokens:e.prompt_tokens_details.audio_tokens,image_tokens:e.prompt_tokens_details.image_tokens}),e.completion_tokens_details&&(t.completion_tokens_details={text_tokens:e.completion_tokens_details.text_tokens,audio_tokens:e.completion_tokens_details.audio_tokens,reasoning_tokens:e.completion_tokens_details.reasoning_tokens}),e.prompt_cache_hit_tokens!==void 0&&(t.prompt_cache_hit_tokens=e.prompt_cache_hit_tokens),e.cache_read_input_tokens!==void 0&&(t.cache_read_input_tokens=e.cache_read_input_tokens),e.cache_creation_input_tokens!==void 0&&(t.cache_creation_input_tokens=e.cache_creation_input_tokens),t}shouldUseResponsesAPI(e){return this.useResponsesAPI}setSessionId(e){this.sessionId=e,process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Session ID updated to: ${e}`);}getSessionId(){return this.sessionId}setDoubaoThinking(e){this.doubaoThinking=e,process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Doubao thinking updated to: ${e?.type||"undefined"}`);}getDoubaoThinking(){return this.doubaoThinking}};W();var Zi=class extends Nt{constraints;promptBuilder;provider;defaultModel;constructor(e){super(),this.constraints=new Ps,this.promptBuilder=new Os,this.defaultModel=e.defaultModel||"gpt-4o";let{apiKey:t,baseUrl:s,defaultModel:n,useResponsesAPI:r,maxTokens:i,maxInputTokens:o,...l}=e;this.provider=new Kt({apiKey:t,baseUrl:s,defaultModel:this.defaultModel,useResponsesAPI:r,maxTokens:i,maxInputTokens:o,...l});}prepareRequest(e,t){let s=t.model||this.defaultModel,n=this.constraints.isResponsesAPIModel(s),r=super.prepareRequest(e,{...t,model:s});return n&&r.options.temperature===void 0&&delete r.options.temperature,r}async chat(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}return s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("OpenAIAdapter","Warnings",s.validation.warnings),this.provider.chat(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,structuredOutput:s.options.structuredOutput,maxInputTokens:s.options.maxInputTokens})}async*chatStreamed(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("OpenAIAdapter","Warnings",s.validation.warnings),yield*this.provider.chatStreamed(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,structuredOutput:s.options.structuredOutput,maxInputTokens:s.options.maxInputTokens,signal:t.signal});}getProvider(){return this.provider}getModelCapabilities(e){let t=e||this.defaultModel;return {supportsVision:this.constraints.supportsVision(t),supportsTools:this.constraints.supportsTools(t),supportsReasoning:this.constraints.supportsReasoning(t),isResponsesAPI:this.constraints.isResponsesAPIModel(t),tokenLimits:this.constraints.getTokenLimits(t)}}};var xr=class extends us{getConstraints(){return {maxOutputTokens:{"claude-3-5-sonnet-20241022":8192,"claude-3-5-sonnet-20240620":8192,"claude-3-5-haiku-20241022":8192,"claude-3-opus-20240229":4096,"claude-3-sonnet-20240229":4096,"claude-3-haiku-20240307":4096,"claude-2.1":4096,"claude-2.0":4096,"claude-instant-1.2":4096,"claude-3-5*":8192,"claude-3*":4096,"claude-2*":4096},maxInputTokens:{"claude-3-5-sonnet-20241022":2e5,"claude-3-5-sonnet-20240620":2e5,"claude-3-5-haiku-20241022":2e5,"claude-3-opus-20240229":2e5,"claude-3-sonnet-20240229":2e5,"claude-3-haiku-20240307":2e5,"claude-2.1":2e5,"claude-2.0":1e5,"claude-instant-1.2":1e5,"claude-3*":2e5,"claude-2*":2e5},supportedParams:new Set(["model","messages","system","stream","max_tokens","temperature","top_p","top_k","stop_sequences","tools","tool_choice","thinking","metadata"]),paramAliases:{max_completion_tokens:"max_tokens",stop:"stop_sequences"},validators:{temperature:Ve(0,1),top_p:Ve(0,1),top_k:Qi(e=>Number.isInteger(e)||"Must be an integer",Ve(1,500)),max_tokens:e=>{let t=Number(e);return isNaN(t)?"Must be a number":t<1?"Must be at least 1":true},"thinking.type":vn(["enabled","disabled"]),"thinking.budget_tokens":e=>{let t=Number(e);return isNaN(t)?"Must be a number":t<1024?"Budget tokens must be at least 1024":t>1e4?"Budget tokens cannot exceed 10000":true},tool_choice:e=>typeof e=="string"?["auto","any","tool"].includes(e)||"Must be 'auto', 'any', or 'tool'":typeof e=="object"&&e.type==="tool"?e.name?true:'tool_choice.name is required when type is "tool"':"Invalid tool_choice format",stop_sequences:e=>Array.isArray(e)?e.length>4?"Maximum 4 stop sequences allowed":e.every(t=>typeof t=="string")?true:"All stop sequences must be strings":"Must be an array",stream:e=>typeof e=="boolean"||"Must be a boolean","metadata.user_id":e=>typeof e!="string"?"Must be a string":e.length>64?"Maximum 64 characters":e.includes("@")||/\d{10,}/.test(e)?"user_id should not contain PII (email, phone number, etc.)":true},defaults:{temperature:1,top_p:1,stream:false}}}supportsThinking(e){return e.includes("claude-3-5-sonnet")||e.includes("claude-3-opus")}supportsVision(e){return e.includes("claude-3")}supportsTools(e){return e.includes("claude-3")}supportsPromptCaching(e){return e.includes("claude-3-5")||e.includes("claude-3-opus")||e.includes("claude-3-sonnet")}getRecommendedMaxTokens(e,t){let s=this.getTokenLimits(e);switch(t){case "short":return Math.min(1024,s.maxOutput);case "medium":return Math.min(4096,s.maxOutput);case "long":return s.maxOutput;default:return Math.min(4096,s.maxOutput)}}validateSystemPrompt(e){if(typeof e=="string")return e.length===0?{valid:false,error:"System prompt cannot be empty"}:e.length>1e5?{valid:false,error:"System prompt too long (max 100K chars)"}:{valid:true};if(Array.isArray(e)){for(let t of e){if(t.type!=="text")return {valid:false,error:'System prompt blocks must be of type "text"'};if(!t.text||t.text.trim().length===0)return {valid:false,error:"System prompt text blocks cannot be empty"}}return {valid:true}}return {valid:false,error:"System prompt must be a string or array of text blocks"}}getCachingRecommendation(e,t){return this.supportsPromptCaching(e)?t<2e3?{shouldUseCache:false,cacheTTL:"5m",reason:"Prompt too short, caching overhead not worth it"}:t<1e4?{shouldUseCache:true,cacheTTL:"5m",reason:"Medium prompt, 5-minute cache recommended"}:{shouldUseCache:true,cacheTTL:"1h",reason:"Long prompt, 1-hour cache recommended for cost savings"}:{shouldUseCache:false,cacheTTL:"5m",reason:"Model does not support prompt caching"}}};var Tr=class extends ds{buildSystemPrompt(e){let{workDir:t,language:s="zh",customInstructions:n}=e,r=Ki({workDir:t,language:s});return n&&n.trim()&&(r+=`
1637
+ `);t=c.pop()||"";for(let u of c){let d=u.trim();if(!d||!d.startsWith("data: "))continue;let p=d.slice(6);if(p!=="[DONE]")try{let h=JSON.parse(p);switch(h.type){case "message_start":h.message?.usage&&(i=h.message.usage);break;case "content_block_start":if(h.content_block?.type==="text")r||(r=!0,yield {choices:[{delta:{role:"assistant"},index:0}]});else if(h.content_block?.type==="tool_use"){let g=h.content_block;s.push({index:n,id:g.id,type:"function",function:{name:g.name,arguments:""}}),yield {choices:[{delta:{tool_calls:[{index:n,id:g.id,type:"function",function:{name:g.name}}]},index:0}]},n++;}break;case "content_block_delta":if(h.delta?.type==="text_delta")yield {choices:[{delta:{content:h.delta.text||""},index:0}]};else if(h.delta?.type==="input_json_delta"){let g=h.delta.partial_json||"";if(s.length>0){let f=s[s.length-1];f.function.arguments+=g,yield {choices:[{delta:{tool_calls:[{index:f.index,function:{arguments:g}}]},index:0}]};}}break;case "message_delta":h.usage&&(i=h.usage);break;case "error":throw new Error(h.error?.message||"Stream error")}}catch{}}}let o={choices:[{delta:{},finish_reason:s.length>0?"tool_calls":"stop",index:0}]};i&&(o.usage=this.normalizeUsage(i)),yield o;}normalizeUsage(e){let t={prompt_tokens:e.input_tokens??e.prompt_tokens??0,completion_tokens:e.output_tokens??e.completion_tokens??0,total_tokens:0};return t.total_tokens=t.prompt_tokens+t.completion_tokens,e.prompt_tokens_details?.cached_tokens!==void 0&&(t.prompt_tokens_details={cached_tokens:e.prompt_tokens_details.cached_tokens,text_tokens:e.prompt_tokens_details.text_tokens,audio_tokens:e.prompt_tokens_details.audio_tokens,image_tokens:e.prompt_tokens_details.image_tokens}),e.completion_tokens_details&&(t.completion_tokens_details={text_tokens:e.completion_tokens_details.text_tokens,audio_tokens:e.completion_tokens_details.audio_tokens,reasoning_tokens:e.completion_tokens_details.reasoning_tokens}),e.prompt_cache_hit_tokens!==void 0&&(t.prompt_cache_hit_tokens=e.prompt_cache_hit_tokens),e.cache_read_input_tokens!==void 0&&(t.cache_read_input_tokens=e.cache_read_input_tokens),e.cache_creation_input_tokens!==void 0&&(t.cache_creation_input_tokens=e.cache_creation_input_tokens),t}shouldUseResponsesAPI(e){return this.useResponsesAPI}setSessionId(e){this.sessionId=e,process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Session ID updated to: ${e}`);}getSessionId(){return this.sessionId}setDoubaoThinking(e){this.doubaoThinking=e,process.env.CLI_DEBUG==="1"&&m.debug("OpenAI",`Doubao thinking updated to: ${e?.type||"undefined"}`);}getDoubaoThinking(){return this.doubaoThinking}};W();var Zi=class extends Nt{constraints;promptBuilder;provider;defaultModel;constructor(e){super(),this.constraints=new Ds,this.promptBuilder=new Ls,this.defaultModel=e.defaultModel||"gpt-4o";let{apiKey:t,baseUrl:s,defaultModel:n,useResponsesAPI:r,maxTokens:i,maxInputTokens:o,...l}=e;this.provider=new Kt({apiKey:t,baseUrl:s,defaultModel:this.defaultModel,useResponsesAPI:r,maxTokens:i,maxInputTokens:o,...l});}prepareRequest(e,t){let s=t.model||this.defaultModel,n=this.constraints.isResponsesAPIModel(s),r=super.prepareRequest(e,{...t,model:s});return n&&r.options.temperature===void 0&&delete r.options.temperature,r}async chat(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}return s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("OpenAIAdapter","Warnings",s.validation.warnings),this.provider.chat(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,structuredOutput:s.options.structuredOutput,maxInputTokens:s.options.maxInputTokens})}async*chatStreamed(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("OpenAIAdapter","Warnings",s.validation.warnings),yield*this.provider.chatStreamed(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,structuredOutput:s.options.structuredOutput,maxInputTokens:s.options.maxInputTokens,signal:t.signal});}getProvider(){return this.provider}getModelCapabilities(e){let t=e||this.defaultModel;return {supportsVision:this.constraints.supportsVision(t),supportsTools:this.constraints.supportsTools(t),supportsReasoning:this.constraints.supportsReasoning(t),isResponsesAPI:this.constraints.isResponsesAPIModel(t),tokenLimits:this.constraints.getTokenLimits(t)}}};var xr=class extends us{getConstraints(){return {maxOutputTokens:{"claude-3-5-sonnet-20241022":8192,"claude-3-5-sonnet-20240620":8192,"claude-3-5-haiku-20241022":8192,"claude-3-opus-20240229":4096,"claude-3-sonnet-20240229":4096,"claude-3-haiku-20240307":4096,"claude-2.1":4096,"claude-2.0":4096,"claude-instant-1.2":4096,"claude-3-5*":8192,"claude-3*":4096,"claude-2*":4096},maxInputTokens:{"claude-3-5-sonnet-20241022":2e5,"claude-3-5-sonnet-20240620":2e5,"claude-3-5-haiku-20241022":2e5,"claude-3-opus-20240229":2e5,"claude-3-sonnet-20240229":2e5,"claude-3-haiku-20240307":2e5,"claude-2.1":2e5,"claude-2.0":1e5,"claude-instant-1.2":1e5,"claude-3*":2e5,"claude-2*":2e5},supportedParams:new Set(["model","messages","system","stream","max_tokens","temperature","top_p","top_k","stop_sequences","tools","tool_choice","thinking","metadata"]),paramAliases:{max_completion_tokens:"max_tokens",stop:"stop_sequences"},validators:{temperature:Ve(0,1),top_p:Ve(0,1),top_k:Qi(e=>Number.isInteger(e)||"Must be an integer",Ve(1,500)),max_tokens:e=>{let t=Number(e);return isNaN(t)?"Must be a number":t<1?"Must be at least 1":true},"thinking.type":vn(["enabled","disabled"]),"thinking.budget_tokens":e=>{let t=Number(e);return isNaN(t)?"Must be a number":t<1024?"Budget tokens must be at least 1024":t>1e4?"Budget tokens cannot exceed 10000":true},tool_choice:e=>typeof e=="string"?["auto","any","tool"].includes(e)||"Must be 'auto', 'any', or 'tool'":typeof e=="object"&&e.type==="tool"?e.name?true:'tool_choice.name is required when type is "tool"':"Invalid tool_choice format",stop_sequences:e=>Array.isArray(e)?e.length>4?"Maximum 4 stop sequences allowed":e.every(t=>typeof t=="string")?true:"All stop sequences must be strings":"Must be an array",stream:e=>typeof e=="boolean"||"Must be a boolean","metadata.user_id":e=>typeof e!="string"?"Must be a string":e.length>64?"Maximum 64 characters":e.includes("@")||/\d{10,}/.test(e)?"user_id should not contain PII (email, phone number, etc.)":true},defaults:{temperature:1,top_p:1,stream:false}}}supportsThinking(e){return e.includes("claude-3-5-sonnet")||e.includes("claude-3-opus")}supportsVision(e){return e.includes("claude-3")}supportsTools(e){return e.includes("claude-3")}supportsPromptCaching(e){return e.includes("claude-3-5")||e.includes("claude-3-opus")||e.includes("claude-3-sonnet")}getRecommendedMaxTokens(e,t){let s=this.getTokenLimits(e);switch(t){case "short":return Math.min(1024,s.maxOutput);case "medium":return Math.min(4096,s.maxOutput);case "long":return s.maxOutput;default:return Math.min(4096,s.maxOutput)}}validateSystemPrompt(e){if(typeof e=="string")return e.length===0?{valid:false,error:"System prompt cannot be empty"}:e.length>1e5?{valid:false,error:"System prompt too long (max 100K chars)"}:{valid:true};if(Array.isArray(e)){for(let t of e){if(t.type!=="text")return {valid:false,error:'System prompt blocks must be of type "text"'};if(!t.text||t.text.trim().length===0)return {valid:false,error:"System prompt text blocks cannot be empty"}}return {valid:true}}return {valid:false,error:"System prompt must be a string or array of text blocks"}}getCachingRecommendation(e,t){return this.supportsPromptCaching(e)?t<2e3?{shouldUseCache:false,cacheTTL:"5m",reason:"Prompt too short, caching overhead not worth it"}:t<1e4?{shouldUseCache:true,cacheTTL:"5m",reason:"Medium prompt, 5-minute cache recommended"}:{shouldUseCache:true,cacheTTL:"1h",reason:"Long prompt, 1-hour cache recommended for cost savings"}:{shouldUseCache:false,cacheTTL:"5m",reason:"Model does not support prompt caching"}}};var Tr=class extends ds{buildSystemPrompt(e){let{workDir:t,language:s="zh",customInstructions:n}=e,r=Ki({workDir:t,language:s});return n&&n.trim()&&(r+=`
1638
1638
 
1639
1639
  # Custom Instructions
1640
1640
 
1641
- `+n.trim()),Ds(r)}getCoreInstructions(e,t){return e==="zh"?"\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684 AI \u7F16\u7A0B\u52A9\u624B\uFF0C\u5E2E\u52A9\u7528\u6237\u5B8C\u6210\u8F6F\u4EF6\u5DE5\u7A0B\u4EFB\u52A1\u3002":"You are a professional AI coding assistant helping users with software engineering tasks."}getConstraintInstructions(e,t){let s=this.supportsExtendedThinking(t);return e==="zh"?`# Claude \u7279\u6027
1641
+ `+n.trim()),Os(r)}getCoreInstructions(e,t){return e==="zh"?"\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684 AI \u7F16\u7A0B\u52A9\u624B\uFF0C\u5E2E\u52A9\u7528\u6237\u5B8C\u6210\u8F6F\u4EF6\u5DE5\u7A0B\u4EFB\u52A1\u3002":"You are a professional AI coding assistant helping users with software engineering tasks."}getConstraintInstructions(e,t){let s=this.supportsExtendedThinking(t);return e==="zh"?`# Claude \u7279\u6027
1642
1642
 
1643
1643
  - **Extended Thinking**: ${s?"\u652F\u6301\u6DF1\u5EA6\u601D\u8003\u6A21\u5F0F\uFF08thinking.type: enabled\uFF09":"\u4E0D\u652F\u6301"}
1644
1644
  - **Prompt Caching**: \u81EA\u52A8\u7F13\u5B58\u91CD\u590D\u7684\u4E0A\u4E0B\u6587\uFF0C\u8282\u7701\u6210\u672C
@@ -1694,15 +1694,15 @@ Tool results are returned via tool_result messages.`}supportsExtendedThinking(e)
1694
1694
  \u2026[${s-l.length-c.length} chars truncated, total ${t} lines]\u2026
1695
1695
 
1696
1696
  `;return l+d+c}function Jp(a,e=2e3){let t=a&&typeof a.toJSON=="function"?a.toJSON():a,s="";try{s=JSON.stringify(t??{},null,2);}catch{s=String(t??"");}return s?s.length>e?`${s.slice(0,e)}
1697
- ...[truncated ${s.length-e} chars]`:s:"No headers"}var Ll="You are Claude Code, Anthropic's official CLI for Claude.",dw=["claude-code-20250219","interleaved-thinking-2025-05-14"],to="2023-06-01",so=64,pw=1024;var Kp=18e4,Vp=6e4,Yp={readfile:"Read",write_file:"Write",edit_file:"Edit",glob_search:"Glob",glob:"Glob",search:"Grep",execute_shell:"Bash",bash:"Bash",shell:"Bash",todo_write:"TodoWrite",task:"Task",web_fetch:"WebFetch",web_search:"WebSearch",notebook_edit:"NotebookEdit",ask_user:"AskUserQuestion"},Nl={Read:"readfile",Write:"write_file",Edit:"edit_file",Glob:"glob_search",Grep:"search",Bash:"execute_shell",TodoWrite:"todo_write",Task:"task",WebFetch:"web_fetch",WebSearch:"web_search",NotebookEdit:"notebook_edit",AskUserQuestion:"ask_user"},wn=class{client;defaultModel;maxTokens;retryConfig;baseUrl;authToken;isProxyMode;claudeCodeUserId;betaFeatures;systemPromptPrefix;sanitizeToolsForProxy;disableCaching;thinkingConfig=null;constructor(e){this.authToken=e.authToken,this.baseUrl=(e.baseUrl||"https://api.anthropic.com").replace(/\/+$/,"");let t=this.baseUrl.includes("api.anthropic.com");this.isProxyMode=e.forceClaudeCodeMode||!t;let s=typeof e.userId=="string"?e.userId.trim():"";this.claudeCodeUserId=s?this.sanitizeUserId(s):this.generateSafeUserId(),this.betaFeatures=e.betaFeatures||dw,this.systemPromptPrefix=e.systemPromptPrefix||(this.isProxyMode?Ll:null),this.sanitizeToolsForProxy=false,this.disableCaching=e.disableCaching||false,this.client=tw.create({baseURL:this.baseUrl,headers:this.buildHeaders(),timeout:3e5,validateStatus:()=>true}),this.defaultModel=e.defaultModel||"claude-sonnet-4-5-20250929",this.maxTokens=e.maxTokens||32e3;let n=mn("anthropic",this.baseUrl);this.retryConfig=is(void 0,{...n,...e.retry}),this.debugLog("Initialized",{baseUrl:this.baseUrl,isProxyMode:this.isProxyMode,defaultModel:this.defaultModel,betaFeatures:this.betaFeatures});}setThinking(e){this.thinkingConfig=e,this.debugLog("Thinking config updated",{config:e});}setUserId(e){let t=e?.trim?.()||"";t&&(this.claudeCodeUserId=this.sanitizeUserId(t));}isCacheControlError(e){let t="";try{let s=e.response?.data;if(typeof s=="string")t=s.toLowerCase();else if(s&&typeof s=="object"){let n={error:s.error,message:s.message,type:s.type,code:s.code};t=JSON.stringify(n).toLowerCase();}else t=String(e.message||"").toLowerCase();}catch{t=String(e.message||"").toLowerCase();}return t.includes("cache_control")||t.includes("ttl=")||t.includes("ephemeral")||t.includes("cache")&&t.includes("block")}async chat(e,t={}){let s={...t,disableCaching:t.disableCaching??this.disableCaching,thinking:t.thinking??this.thinkingConfig??void 0},n=this.retryConfig.requestMaxRetries,r=null,i=s.disableCaching||false;for(let o=0;o<=n;o++){let l={...s,...i?{disableCaching:true}:{}},c=this.buildPayload(e,l);o===0&&this.logRequest(t.model||this.defaultModel,c);try{let u=Date.now(),d=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",p=await this.client.post(d,c,{responseType:"stream",signal:t.signal});if(p.status!==200){let f="";for await(let C of p.data)f+=C.toString();let b=`${this.baseUrl}${d}`,y=Ft(b,this.buildHeaders(),c,!1);m.error("CURL","=== [chat] API Error - Full Request CURL ==="),m.error("CURL",y),m.error("CURL",`=== Error Headers: ${Jp(p.headers)} ===`),m.error("CURL",`=== Error Response: ${f.substring(0,1e3)} ===`);let w=new Error(`Anthropic API error: ${p.status}`);w.response={status:p.status,headers:p.headers,data:f};try{let C=JSON.parse(f);w.response.data=C,C.error?.message?w.message=`Anthropic API error: ${p.status} - ${C.error.message}`:C.message&&(w.message=`Anthropic API error: ${p.status} - ${C.message}`),this.debugLog("API Error Details",C);}catch{this.debugLog("API Error (non-JSON)",{status:p.status,dataLength:f.length});}throw w}let h=await this.collectStreamResponse(p.data),g=Date.now()-u;return ge.llmResponse("anthropic",g,h.usage,h.choices[0]),this.debugLog("Response",{duration:`${g}ms`,usage:h.usage}),h}catch(u){await this.normalizeAxiosStreamError(u),r=u;let d=ft(u);if(d.code==="PROXY_UPSTREAM_FAILED"){let b=JSON.stringify(c||{}).length,y=Array.isArray(e)?e.length:0,w=Array.isArray(e)?e.reduce((C,S)=>S?.content?typeof S.content=="string"?C+S.content.length:Array.isArray(S.content)?C+S.content.map(T=>typeof T.text=="string"?T.text.length:0).reduce((T,_)=>T+_,0):C:C,0):0;m.warn("Anthropic","Upstream request failed (PROXY_UPSTREAM_FAILED)",{attempt:`${o+1}/${n+1}`,payloadSize:b,msgCount:y,promptChars:w,status:u.response?.status});}if(this.debugLog("Error",{message:u.message,category:d.category,code:d.code,attempt:`${o+1}/${n+1}`}),ge.llmError("anthropic",u),this.isCacheControlError(u)&&!i){i=true,this.disableCaching=true,this.debugLog("Cache control not supported, disabling caching for retry",{errorMessage:u.message,attempt:o+1}),m.warn("Anthropic","\u26A0\uFE0F Provider \u4E0D\u652F\u6301 cache_control\uFF0C\u5DF2\u81EA\u52A8\u7981\u7528\u7F13\u5B58\u91CD\u8BD5...");continue}if(!d.retryable||o===n)throw d;let p=Ui(u.response?.headers),h=br(d.category,o+1,p||d.retryAfter),g=d.category==="retryable_rate_limit",f=g?`\u23F3 API \u4EE3\u7406\u901F\u7387\u9650\u5236\uFF0C${nt(h)} \u540E\u91CD\u8BD5...`:`Retrying in ${nt(h)}...`;this.debugLog("Retrying",{delay:nt(h),attempt:o+1,isRateLimit:g,serverDelay:p?nt(p):"none",retryMsg:f});try{await Is(h,s.signal);}catch(b){throw b?.name==="AbortError"&&this.debugLog("Chat retry interrupted by user"),b}}}throw r||new Error("Unknown error during retry")}async collectStreamResponse(e){let t="",s="",n=[],r="",i=null,o="";for await(let c of e){let u=c.toString();t+=u;let d=t.split(`
1697
+ ...[truncated ${s.length-e} chars]`:s:"No headers"}var Ll="You are Claude Code, Anthropic's official CLI for Claude.",dw=["claude-code-20250219","interleaved-thinking-2025-05-14"],to="2023-06-01",so=64,pw=1024;var Kp=18e4,Vp=6e4,Yp={readfile:"Read",write_file:"Write",edit_file:"Edit",glob_search:"Glob",glob:"Glob",search:"Grep",execute_shell:"Bash",bash:"Bash",shell:"Bash",todo_write:"TodoWrite",task:"Task",web_fetch:"WebFetch",web_search:"WebSearch",notebook_edit:"NotebookEdit",ask_user:"AskUserQuestion"},Nl={Read:"readfile",Write:"write_file",Edit:"edit_file",Glob:"glob_search",Grep:"search",Bash:"execute_shell",TodoWrite:"todo_write",Task:"task",WebFetch:"web_fetch",WebSearch:"web_search",NotebookEdit:"notebook_edit",AskUserQuestion:"ask_user"},wn=class{client;defaultModel;maxTokens;retryConfig;baseUrl;authToken;isProxyMode;claudeCodeUserId;betaFeatures;systemPromptPrefix;sanitizeToolsForProxy;disableCaching;thinkingConfig=null;constructor(e){this.authToken=e.authToken,this.baseUrl=(e.baseUrl||"https://api.anthropic.com").replace(/\/+$/,"");let t=this.baseUrl.includes("api.anthropic.com");this.isProxyMode=e.forceClaudeCodeMode||!t;let s=typeof e.userId=="string"?e.userId.trim():"";this.claudeCodeUserId=s?this.sanitizeUserId(s):this.generateSafeUserId(),this.betaFeatures=e.betaFeatures||dw,this.systemPromptPrefix=e.systemPromptPrefix||(this.isProxyMode?Ll:null),this.sanitizeToolsForProxy=false,this.disableCaching=e.disableCaching||false,this.client=tw.create({baseURL:this.baseUrl,headers:this.buildHeaders(),timeout:3e5,validateStatus:()=>true}),this.defaultModel=e.defaultModel||"claude-sonnet-4-5-20250929",this.maxTokens=e.maxTokens||32e3;let n=mn("anthropic",this.baseUrl);this.retryConfig=is(void 0,{...n,...e.retry}),this.debugLog("Initialized",{baseUrl:this.baseUrl,isProxyMode:this.isProxyMode,defaultModel:this.defaultModel,betaFeatures:this.betaFeatures});}setThinking(e){this.thinkingConfig=e,this.debugLog("Thinking config updated",{config:e});}setUserId(e){let t=e?.trim?.()||"";t&&(this.claudeCodeUserId=this.sanitizeUserId(t));}isCacheControlError(e){let t="";try{let s=e.response?.data;if(typeof s=="string")t=s.toLowerCase();else if(s&&typeof s=="object"){let n={error:s.error,message:s.message,type:s.type,code:s.code};t=JSON.stringify(n).toLowerCase();}else t=String(e.message||"").toLowerCase();}catch{t=String(e.message||"").toLowerCase();}return t.includes("cache_control")||t.includes("ttl=")||t.includes("ephemeral")||t.includes("cache")&&t.includes("block")}async chat(e,t={}){let s={...t,disableCaching:t.disableCaching??this.disableCaching,thinking:t.thinking??this.thinkingConfig??void 0},n=this.retryConfig.requestMaxRetries,r=null,i=s.disableCaching||false;for(let o=0;o<=n;o++){let l={...s,...i?{disableCaching:true}:{}},c=this.buildPayload(e,l);o===0&&this.logRequest(t.model||this.defaultModel,c);try{let u=Date.now(),d=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",p=await this.client.post(d,c,{responseType:"stream",signal:t.signal});if(p.status!==200){let f="";for await(let C of p.data)f+=C.toString();let b=`${this.baseUrl}${d}`,y=Ft(b,this.buildHeaders(),c,!1);m.error("CURL","=== [chat] API Error - Full Request CURL ==="),m.error("CURL",y),m.error("CURL",`=== Error Headers: ${Jp(p.headers)} ===`),m.error("CURL",`=== Error Response: ${f.substring(0,1e3)} ===`);let w=new Error(`Anthropic API error: ${p.status}`);w.response={status:p.status,headers:p.headers,data:f};try{let C=JSON.parse(f);w.response.data=C,C.error?.message?w.message=`Anthropic API error: ${p.status} - ${C.error.message}`:C.message&&(w.message=`Anthropic API error: ${p.status} - ${C.message}`),this.debugLog("API Error Details",C);}catch{this.debugLog("API Error (non-JSON)",{status:p.status,dataLength:f.length});}throw w}let h=await this.collectStreamResponse(p.data),g=Date.now()-u;return ge.llmResponse("anthropic",g,h.usage,h.choices[0]),this.debugLog("Response",{duration:`${g}ms`,usage:h.usage}),h}catch(u){await this.normalizeAxiosStreamError(u),r=u;let d=ft(u);if(d.code==="PROXY_UPSTREAM_FAILED"){let b=JSON.stringify(c||{}).length,y=Array.isArray(e)?e.length:0,w=Array.isArray(e)?e.reduce((C,S)=>S?.content?typeof S.content=="string"?C+S.content.length:Array.isArray(S.content)?C+S.content.map(T=>typeof T.text=="string"?T.text.length:0).reduce((T,_)=>T+_,0):C:C,0):0;m.warn("Anthropic","Upstream request failed (PROXY_UPSTREAM_FAILED)",{attempt:`${o+1}/${n+1}`,payloadSize:b,msgCount:y,promptChars:w,status:u.response?.status});}if(this.debugLog("Error",{message:u.message,category:d.category,code:d.code,attempt:`${o+1}/${n+1}`}),ge.llmError("anthropic",u),this.isCacheControlError(u)&&!i){i=true,this.disableCaching=true,this.debugLog("Cache control not supported, disabling caching for retry",{errorMessage:u.message,attempt:o+1}),m.warn("Anthropic","\u26A0\uFE0F Provider \u4E0D\u652F\u6301 cache_control\uFF0C\u5DF2\u81EA\u52A8\u7981\u7528\u7F13\u5B58\u91CD\u8BD5...");continue}if(!d.retryable||o===n)throw d;let p=Ui(u.response?.headers),h=br(d.category,o+1,p||d.retryAfter),g=d.category==="retryable_rate_limit",f=g?`\u23F3 API \u4EE3\u7406\u901F\u7387\u9650\u5236\uFF0C${nt(h)} \u540E\u91CD\u8BD5...`:`Retrying in ${nt(h)}...`;this.debugLog("Retrying",{delay:nt(h),attempt:o+1,isRateLimit:g,serverDelay:p?nt(p):"none",retryMsg:f});try{await Ms(h,s.signal);}catch(b){throw b?.name==="AbortError"&&this.debugLog("Chat retry interrupted by user"),b}}}throw r||new Error("Unknown error during retry")}async collectStreamResponse(e){let t="",s="",n=[],r="",i=null,o="";for await(let c of e){let u=c.toString();t+=u;let d=t.split(`
1698
1698
  `);t=d.pop()||"";for(let p of d){let h=p.trim();if(!h||!h.startsWith("data: "))continue;let g=h.slice(6);if(g!=="[DONE]")try{let f=JSON.parse(g);if(process.env.CLI_DEBUG==="1"){let b=JSON.stringify(f).substring(0,80);m.debug("SSE",`${f.type.padEnd(20)} ${b}${JSON.stringify(f).length>80?"...":""}`);}switch(f.type){case "message_start":o=f.message?.id||"",i=f.message?.usage;break;case "content_block_start":if(f.content_block?.type==="tool_use"){let b=f.content_block,y=this.isProxyMode?Nl[b.name]||this.fromClaudeCodeToolName(b.name):b.name;n.push({id:b.id,type:"function",function:{name:y,arguments:""}});}break;case "content_block_delta":f.delta?.type==="text_delta"?s+=f.delta.text||"":f.delta?.type==="input_json_delta"?n.length>0&&(n[n.length-1].function.arguments+=f.delta.partial_json||""):f.delta?.type==="thinking_delta"&&(r+=f.delta.thinking||"");break;case "message_delta":f.usage&&(i={...i,...f.usage});break}}catch(f){process.env.CLI_DEBUG==="1"&&m.warn("Anthropic",`Stream parse error: ${f}, data: ${g.substring(0,200)}`);}}}let l=this.buildUsageFromRaw(i);return {id:o,choices:[{message:{role:"assistant",content:s||"",tool_calls:n.length>0?n:void 0,...r?{reasoning_content:r}:{}},finish_reason:n.length>0?"tool_calls":"stop"}],usage:l}}async*chatStreamed(e,t={}){let s={...t,disableCaching:t.disableCaching??this.disableCaching,thinking:t.thinking??this.thinkingConfig??void 0},n=this.retryConfig.streamMaxRetries,r=0,i=s.disableCaching||false,o=true;for(;;){let l={...s,...i?{disableCaching:true}:{}},c=this.buildPayload(e,l);c.stream=true,o&&(this.logRequest(t.model||this.defaultModel,c,true),o=false);try{let u=Date.now(),d=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",p=await this.client.post(d,c,{responseType:"stream",signal:t.signal});if(this.debugLog("Stream started",{status:p.status}),p.status!==200){let v="";for await(let A of p.data)v+=A.toString();let E=`${this.baseUrl}${d}`,O=Ft(E,this.buildHeaders(),c,!1);m.error("CURL","=== [chatStreamed] API Error - Full Request CURL ==="),m.error("CURL",O),m.error("CURL",`=== Error Headers: ${Jp(p.headers)} ===`),m.error("CURL",`=== Error Response: ${v.substring(0,1e3)} ===`);let I=new Error(`Anthropic API error: ${p.status}`);I.response={status:p.status,headers:p.headers,data:v};try{let A=JSON.parse(v);I.response.data=A,A.error?.message?I.message=`Anthropic API error: ${p.status} - ${A.error.message}`:A.message&&(I.message=`Anthropic API error: ${p.status} - ${A.message}`),this.debugLog("API Error Details (stream)",A);}catch{this.debugLog("API Error (non-JSON, stream)",{status:p.status,dataLength:v.length});}throw I}let h="",g=[],f=0,b=!1,y=null,w=!1,C=Date.now(),S=0,T=0,_=null,M=null,F=[],x=null;for await(let v of this.createTimeoutStream(p.data,t.signal)){C=Date.now();let E=v.toString();h+=E;let O=h.split(/\n\n+/);h=O.pop()||"";for(let I of O){let A=I.split(`
1699
- `),L="";for(let $ of A){let P=$.trim();if(P&&!P.startsWith("event:"))if(P.startsWith("data:")){let N=P.slice(5);N.startsWith(" ")&&(N=N.slice(1)),L+=N;}else L+=P;}if(!(!L||L==="[DONE]"))try{let $=L.trim(),P=JSON.parse($);if(process.env.CLI_DEBUG==="1"){let G=JSON.stringify(P).substring(0,80);m.debug("SSE",`${P.type.padEnd(20)} ${G}${JSON.stringify(P).length>80?"...":""}`);}let N=Date.now(),D=this.handleStreamEvent(P,g,f,b,y);if(process.env.CLI_DEBUG==="1"){let G=Date.now()-N;G>50&&m.warn("SSE",`\u26A0\uFE0F Slow event handling: ${P.type} took ${G}ms`);}if(D.yield){let G=Date.now();if(yield D.yield,process.env.CLI_DEBUG==="1"){let q=Date.now()-G;q>100&&m.warn("SSE",`\u26A0\uFE0F Slow yield consumer: ${P.type} yield took ${q}ms`);}}if(D.roleSent!==void 0&&(b=D.roleSent),D.incrementToolIndex&&f++,D.usage&&(y=D.usage),D.error)throw new Error(D.error);D.contentBlockStart&&(T++,D.blockType&&(M=D.blockType)),D.contentBlockStop&&(S++,M==="thinking"&&(yield {choices:[{delta:{reasoning_complete:!0},index:0}]}),M=null),D.messageStop&&(w=!0),D.stopReason&&(_=D.stopReason),P.type==="content_block_start"?P.content_block?.type==="thinking"?x={type:"thinking",thinking:"",signature:""}:P.content_block?.type==="redacted_thinking"&&F.push({type:"redacted_thinking",data:P.content_block.data}):P.type==="content_block_delta"?x&&(P.delta?.type==="thinking_delta"?x.thinking+=P.delta.thinking||"":P.delta?.type==="signature_delta"&&(x.signature+=P.delta.signature||"")):P.type==="content_block_stop"&&x&&(F.push({type:x.type,thinking:x.thinking,signature:x.signature}),x=null);}catch{}}}let R=Date.now()-u;if(this.debugLog("Stream completion check",{messageStopReceived:w,stopReason:_,contentBlocksStarted:T,contentBlocksCompleted:S,toolCallsCount:g.length,duration:`${R}ms`}),!w&&!_){let v=new Error(`Stream incomplete: message_stop not received (blocks: ${T} started, ${S} completed)`);throw v.code="STREAM_INCOMPLETE",v.isNetworkInterrupt=!0,this.debugLog("Stream incomplete detected",{messageStopReceived:w,stopReason:_,contentBlocksStarted:T,contentBlocksCompleted:S,toolCallsCount:g.length,duration:`${R}ms`}),v}if(T!==S)if(_==="max_tokens")this.debugLog("Content blocks mismatch due to max_tokens (expected, not an error)",{contentBlocksStarted:T,contentBlocksCompleted:S,stopReason:_}),m.warn("Anthropic","\u26A0\uFE0F Response truncated due to max_tokens limit. Consider increasing max_tokens or breaking down the task.");else {let v=new Error(`Stream incomplete: content blocks mismatch (${T} started, ${S} completed)`);throw v.code="STREAM_INCOMPLETE",v.isNetworkInterrupt=!0,this.debugLog("Content blocks mismatch",{contentBlocksStarted:T,contentBlocksCompleted:S,stopReason:_}),v}if(g.length>0&&_!=="max_tokens")for(let v of g){let E=v.function?.arguments||"";if(E&&E.trim())try{JSON.parse(E);}catch{let O=new Error(`Stream incomplete: tool arguments truncated for ${v.function?.name}`);throw O.code="STREAM_INCOMPLETE",O.isNetworkInterrupt=!0,O.toolName=v.function?.name,this.debugLog("Tool arguments truncated",{toolName:v.function?.name,argsLength:E.length,argsPreview:E.substring(0,100)}),O}}else if(_==="max_tokens"&&g.length>0){let v=g[g.length-1],E=v?.function?.arguments||"";try{JSON.parse(E);}catch{this.debugLog("Tool arguments truncated due to max_tokens (expected)",{toolName:v?.function?.name,argsLength:E.length}),m.warn("Anthropic",`\u26A0\uFE0F Tool call ${v?.function?.name} arguments truncated due to max_tokens. The tool call will be incomplete.`);}}this.debugLog("finalUsage before build",y);let j=this.buildUsageFromRaw(y);this.debugLog("usage after build",j),!b&&g.length===0&&m.warn("Anthropic",`\u26A0\uFE0F Stream completed with no content! duration: ${R}ms, usage: ${JSON.stringify(y)}`),ge.llmResponse("anthropic-stream",R,j||{},{}),this.debugLog("Stream complete",{duration:`${R}ms`}),yield {choices:[{delta:{},finish_reason:"stop",index:0}],...j?{usage:j}:{},...F.length>0?{thinking_blocks:F}:{}};return}catch(u){await this.normalizeAxiosStreamError(u);let d=ft(u);this.debugLog("Stream error",{message:u.message,category:d.category,retryable:d.retryable});let p=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",h=`${this.baseUrl}${p}`,g=Ft(h,this.buildHeaders(),c,false);if(m.error("CURL","=== [chatStreamed catch] Stream Error - Full Request CURL ==="),m.error("CURL",g),m.error("CURL",`=== Error: ${d.message} ===`),ge.llmError("anthropic-stream",u),this.isCacheControlError(u)&&!i){i=true,this.disableCaching=true,this.debugLog("Cache control not supported, disabling caching for retry",{errorMessage:u.message,attempt:r+1}),m.warn("Anthropic","\u26A0\uFE0F Provider \u4E0D\u652F\u6301 cache_control\uFF0C\u5DF2\u81EA\u52A8\u7981\u7528\u7F13\u5B58\u91CD\u8BD5...");continue}if(d.retryable&&r<n){r++;let f=Ui(u.response?.headers),b=br(d.category,r,f||d.retryAfter),y=d.category==="retryable_rate_limit",w=d.category==="retryable_stream";this.debugLog("Stream retrying",{delay:nt(b),attempt:`${r}/${n}`,isRateLimit:y,isStreamIncomplete:w}),yield {type:"stream_retry",error:d.message,errorCode:d.code,attempt:r,maxRetries:n,delayMs:b,isRateLimit:y,isNetworkError:w};try{await Is(b,t.signal);}catch(C){throw C?.name==="AbortError"&&this.debugLog("Stream retry interrupted by user"),C}this.debugLog("Stream retry starting",{attempt:r}),yield {type:"stream_recovered",attempt:r,maxRetries:n};continue}throw d}}}buildPayload(e,t){let s=t.model||this.defaultModel,{system:n,anthropicMessages:r}=this.convertMessages(e,t),i=r,o=[];if(t.disableCaching?(o.push({type:"text",text:Ll}),n&&o.push({type:"text",text:`
1699
+ `),L="";for(let $ of A){let P=$.trim();if(P&&!P.startsWith("event:"))if(P.startsWith("data:")){let N=P.slice(5);N.startsWith(" ")&&(N=N.slice(1)),L+=N;}else L+=P;}if(!(!L||L==="[DONE]"))try{let $=L.trim(),P=JSON.parse($);if(process.env.CLI_DEBUG==="1"){let G=JSON.stringify(P).substring(0,80);m.debug("SSE",`${P.type.padEnd(20)} ${G}${JSON.stringify(P).length>80?"...":""}`);}let N=Date.now(),D=this.handleStreamEvent(P,g,f,b,y);if(process.env.CLI_DEBUG==="1"){let G=Date.now()-N;G>50&&m.warn("SSE",`\u26A0\uFE0F Slow event handling: ${P.type} took ${G}ms`);}if(D.yield){let G=Date.now();if(yield D.yield,process.env.CLI_DEBUG==="1"){let q=Date.now()-G;q>100&&m.warn("SSE",`\u26A0\uFE0F Slow yield consumer: ${P.type} yield took ${q}ms`);}}if(D.roleSent!==void 0&&(b=D.roleSent),D.incrementToolIndex&&f++,D.usage&&(y=D.usage),D.error)throw new Error(D.error);D.contentBlockStart&&(T++,D.blockType&&(M=D.blockType)),D.contentBlockStop&&(S++,M==="thinking"&&(yield {choices:[{delta:{reasoning_complete:!0},index:0}]}),M=null),D.messageStop&&(w=!0),D.stopReason&&(_=D.stopReason),P.type==="content_block_start"?P.content_block?.type==="thinking"?x={type:"thinking",thinking:"",signature:""}:P.content_block?.type==="redacted_thinking"&&F.push({type:"redacted_thinking",data:P.content_block.data}):P.type==="content_block_delta"?x&&(P.delta?.type==="thinking_delta"?x.thinking+=P.delta.thinking||"":P.delta?.type==="signature_delta"&&(x.signature+=P.delta.signature||"")):P.type==="content_block_stop"&&x&&(F.push({type:x.type,thinking:x.thinking,signature:x.signature}),x=null);}catch{}}}let R=Date.now()-u;if(this.debugLog("Stream completion check",{messageStopReceived:w,stopReason:_,contentBlocksStarted:T,contentBlocksCompleted:S,toolCallsCount:g.length,duration:`${R}ms`}),!w&&!_){let v=new Error(`Stream incomplete: message_stop not received (blocks: ${T} started, ${S} completed)`);throw v.code="STREAM_INCOMPLETE",v.isNetworkInterrupt=!0,this.debugLog("Stream incomplete detected",{messageStopReceived:w,stopReason:_,contentBlocksStarted:T,contentBlocksCompleted:S,toolCallsCount:g.length,duration:`${R}ms`}),v}if(T!==S)if(_==="max_tokens")this.debugLog("Content blocks mismatch due to max_tokens (expected, not an error)",{contentBlocksStarted:T,contentBlocksCompleted:S,stopReason:_}),m.warn("Anthropic","\u26A0\uFE0F Response truncated due to max_tokens limit. Consider increasing max_tokens or breaking down the task.");else {let v=new Error(`Stream incomplete: content blocks mismatch (${T} started, ${S} completed)`);throw v.code="STREAM_INCOMPLETE",v.isNetworkInterrupt=!0,this.debugLog("Content blocks mismatch",{contentBlocksStarted:T,contentBlocksCompleted:S,stopReason:_}),v}if(g.length>0&&_!=="max_tokens")for(let v of g){let E=v.function?.arguments||"";if(E&&E.trim())try{JSON.parse(E);}catch{let O=new Error(`Stream incomplete: tool arguments truncated for ${v.function?.name}`);throw O.code="STREAM_INCOMPLETE",O.isNetworkInterrupt=!0,O.toolName=v.function?.name,this.debugLog("Tool arguments truncated",{toolName:v.function?.name,argsLength:E.length,argsPreview:E.substring(0,100)}),O}}else if(_==="max_tokens"&&g.length>0){let v=g[g.length-1],E=v?.function?.arguments||"";try{JSON.parse(E);}catch{this.debugLog("Tool arguments truncated due to max_tokens (expected)",{toolName:v?.function?.name,argsLength:E.length}),m.warn("Anthropic",`\u26A0\uFE0F Tool call ${v?.function?.name} arguments truncated due to max_tokens. The tool call will be incomplete.`);}}this.debugLog("finalUsage before build",y);let j=this.buildUsageFromRaw(y);this.debugLog("usage after build",j),!b&&g.length===0&&m.warn("Anthropic",`\u26A0\uFE0F Stream completed with no content! duration: ${R}ms, usage: ${JSON.stringify(y)}`),ge.llmResponse("anthropic-stream",R,j||{},{}),this.debugLog("Stream complete",{duration:`${R}ms`}),yield {choices:[{delta:{},finish_reason:"stop",index:0}],...j?{usage:j}:{},...F.length>0?{thinking_blocks:F}:{}};return}catch(u){await this.normalizeAxiosStreamError(u);let d=ft(u);this.debugLog("Stream error",{message:u.message,category:d.category,retryable:d.retryable});let p=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",h=`${this.baseUrl}${p}`,g=Ft(h,this.buildHeaders(),c,false);if(m.error("CURL","=== [chatStreamed catch] Stream Error - Full Request CURL ==="),m.error("CURL",g),m.error("CURL",`=== Error: ${d.message} ===`),ge.llmError("anthropic-stream",u),this.isCacheControlError(u)&&!i){i=true,this.disableCaching=true,this.debugLog("Cache control not supported, disabling caching for retry",{errorMessage:u.message,attempt:r+1}),m.warn("Anthropic","\u26A0\uFE0F Provider \u4E0D\u652F\u6301 cache_control\uFF0C\u5DF2\u81EA\u52A8\u7981\u7528\u7F13\u5B58\u91CD\u8BD5...");continue}if(d.retryable&&r<n){r++;let f=Ui(u.response?.headers),b=br(d.category,r,f||d.retryAfter),y=d.category==="retryable_rate_limit",w=d.category==="retryable_stream";this.debugLog("Stream retrying",{delay:nt(b),attempt:`${r}/${n}`,isRateLimit:y,isStreamIncomplete:w}),yield {type:"stream_retry",error:d.message,errorCode:d.code,attempt:r,maxRetries:n,delayMs:b,isRateLimit:y,isNetworkError:w};try{await Ms(b,t.signal);}catch(C){throw C?.name==="AbortError"&&this.debugLog("Stream retry interrupted by user"),C}this.debugLog("Stream retry starting",{attempt:r}),yield {type:"stream_recovered",attempt:r,maxRetries:n};continue}throw d}}}buildPayload(e,t){let s=t.model||this.defaultModel,{system:n,anthropicMessages:r}=this.convertMessages(e,t),i=r,o=[];if(t.disableCaching?(o.push({type:"text",text:Ll}),n&&o.push({type:"text",text:`
1700
1700
  `+n})):(o.push({type:"text",text:Ll,cache_control:{type:"ephemeral"}}),n&&o.push({type:"text",text:`
1701
1701
  `+n,cache_control:{type:"ephemeral"}})),process.env.CLI_DEBUG==="1"&&n){let c=["## \u9879\u76EE\u8BB0\u5FC6","## \u4E0A\u6B21\u4EFB\u52A1\u6458\u8981","## Project Memory","## Last Run Summary"],u=c.some(h=>n.includes(h)),d=c.reduce((h,g)=>h>=0?h:n.indexOf(g),-1),p=d>=0?n.slice(d,d+300):void 0;m.info("MEMORY_INJECT","Anthropic system memory check",{hasMemory:u,systemLength:n.length,snippet:p});}let l={model:this.normalizeModelName(s),system:o,metadata:this.buildMetadata(t.metadata),max_tokens:this.maxTokens};return (!t.thinking?.type||t.thinking.type==="disabled")&&(l.temperature=t.temperature??.7),l.stream=true,l.messages=i,t.tools?.length&&(l.tools=this.buildToolsPayload(t.tools,t)),t.webSearch?.enabled&&(l.tools=l.tools||[],l.tools.push(this.buildWebSearchTool(t.webSearch))),l.tools?.length>0&&this.ensureLastToolCacheControl(l.tools,t),this.shouldEnableThinking(s,t)&&(l.thinking=this.buildThinkingPayload(t),delete l.temperature,l.temperature=1),this.checkRequestBudget(l),l}checkRequestBudget(e){let s=JSON.stringify(e).length;if(s>Rr){if(this.debugLog("Request body exceeds limit",{bodySize:s,limit:Rr,messageCount:e.messages?.length||0}),e.messages){let r=[...e.messages.map((i,o)=>({index:o,role:i.role,contentSize:JSON.stringify(i.content||"").length}))].sort((i,o)=>o.contentSize-i.contentSize);this.debugLog("Largest messages in request",{top5:r.slice(0,5)});}console.warn(`[Anthropic] \u26A0\uFE0F Request body size (${(s/1024/1024).toFixed(2)}MB) exceeds ${(Rr/1024/1024).toFixed(1)}MB limit. Request may fail.`);}else s>cw&&this.debugLog("Request body approaching limit",{bodySize:s,limit:Rr,percentage:(s/Rr*100).toFixed(1)+"%"});}mergeSystemIntoMessages(e,t){let s=[...t],n=s.findIndex(r=>r.role==="user");if(n>=0){let r=s[n],i={type:"text",text:`<system_context>
1702
1702
  ${e}
1703
1703
  </system_context>`};Array.isArray(r.content)?s[n]={...r,content:[i,...r.content]}:typeof r.content=="string"&&(s[n]={...r,content:[i,{type:"text",text:r.content}]});}return s}buildToolsPayload(e,t){return e.map(n=>{let r=this.transformToolDefinition(n);return t.enableFGTS&&(r.eager_input_streaming=true),r})}ensureLastToolCacheControl(e,t){if(e.length===0||t.disableCaching)return;let s=e[e.length-1];s.cache_control={type:"ephemeral"},this.debugLog("Added cache_control to last tool",{toolName:s.name});}buildWebSearchTool(e){let t={type:"web_search_20250305",name:"web_search"};return e.max_uses&&(t.max_uses=e.max_uses),e.user_location&&(t.user_location=e.user_location),t}buildThinkingPayload(e){let t=e.thinking?.budget_tokens||this.maxTokens-1;return {type:"enabled",budget_tokens:Math.max(t,pw)}}buildMetadata(e){let t={...e};return t.user_id?t.user_id=this.sanitizeUserId(t.user_id):t.user_id=this.claudeCodeUserId,t}shouldEnableThinking(e,t){return t.thinking?.type==="enabled"?true:t.thinking?.type==="disabled"?false:!!(e.endsWith("-thinking")||e.includes("opus-4-6")||e.includes("opus-4.6")||e.includes("opus-4-5")||e.includes("opus-4.5"))}normalizeModelName(e){return e.endsWith("-thinking")?e.replace(/-thinking$/,""):e}convertMessages(e,t){let s=this.normalizeMessages(e),n=[],r=[];for(let u of s){if(u.role==="system"){let p=me(u.content).trim();p&&n.push(p);continue}let d=this.convertSingleMessage(u);d&&r.push(d);}let i=this.mergeConsecutiveUserMessages(r),l=this.validateToolResultPairs(i);return l.length>0&&l[0].role!=="user"&&l.unshift({role:"user",content:[{type:"text",text:"..."}]}),l.length>0&&!t.disableCaching&&this.addMessageCacheControl(l),{system:n.length>0?n.join(`
1704
1704
 
1705
- `):null,anthropicMessages:l}}addMessageCacheControl(e){let t=false;for(let s=e.length-1;s>=0;s--){let n=e[s];if(!(n.role!=="user"||!Array.isArray(n.content))){for(let r=n.content.length-1;r>=0;r--){let i=n.content[r];if(!t&&i.type==="tool_result"){i.cache_control={type:"ephemeral"},t=true,this.debugLog("Added cache_control to tool_result",{tool_use_id:i.tool_use_id});break}}if(t)break}}t||this.addTextBlockCacheControl(e);}addTextBlockCacheControl(e){for(let t=e.length-1;t>=0;t--){let s=e[t];if(s.role==="user"&&Array.isArray(s.content)){for(let n=s.content.length-1;n>=0;n--)if(s.content[n].type==="text"){s.content[n].cache_control={type:"ephemeral"},this.debugLog("Added cache_control to user text block");return}}}}validateToolResultPairs(e){let t=new Set,s=new Set;for(let i of e)if(Array.isArray(i.content))for(let o of i.content)o.type==="tool_use"&&o.id&&t.add(o.id),o.type==="tool_result"&&o.tool_use_id&&s.add(o.tool_use_id);let n=new Set;for(let i of t)s.has(i)&&n.add(i);this.debugLog("Tool pairing analysis",{toolUseCount:t.size,toolResultCount:s.size,pairedCount:n.size,orphanToolUseIds:Array.from(t).filter(i=>!n.has(i)),orphanToolResultIds:Array.from(s).filter(i=>!n.has(i))});let r=[];for(let i of e){if(!Array.isArray(i.content)){r.push(i);continue}let o=i.content.filter(l=>{if(l.type==="tool_use"){let c=n.has(l.id);return c||this.debugLog("Removing orphan tool_use",{id:l.id}),c}if(l.type==="tool_result"){let c=n.has(l.tool_use_id);return c||this.debugLog("Removing orphan tool_result",{tool_use_id:l.tool_use_id}),c}return true});o.length>0?r.push({...i,content:o}):this.debugLog("Skipping empty message after tool pairing filter",{role:i.role});}return r}mergeConsecutiveUserMessages(e){if(e.length===0)return [];let t=[];for(let s of e){let n=t[t.length-1];if(n&&n.role==="user"&&s.role==="user"){let r=Array.isArray(n.content)?n.content:[{type:"text",text:n.content}],i=Array.isArray(s.content)?s.content:[{type:"text",text:s.content}];n.content=[...r,...i];}else t.push(s);}return t}convertSingleMessage(e){if(e.role==="tool"){let s=me(e.content),n=uw(s);return s.length!==n.length&&this.debugLog("Tool output truncated",{tool_call_id:e.tool_call_id,original:s.length,truncated:n.length}),{role:"user",content:[{type:"tool_result",tool_use_id:e.tool_call_id,content:n}]}}if(e.role==="assistant"){let s=[],n=false;if(e.thinking_blocks&&e.thinking_blocks.length>0){n=true;for(let i of e.thinking_blocks)if(i.type==="thinking"){let o={type:"thinking",thinking:i.thinking};i.signature!==void 0&&(o.signature=i.signature),s.push(o);}else if(i.type==="redacted_thinking"){let o={type:"redacted_thinking"};i.data!==void 0&&(o.data=i.data),s.push(o);}}let r=me(e.content);if(r){let i=r.trimEnd();s.push({type:"text",text:i||"."});}else n&&(s.push({type:"text",text:"."}),this.debugLog("Added placeholder text after thinking (no text content)"));if(e.tool_calls)for(let i of e.tool_calls){let o=(i.function.arguments||"").trim(),l={};if(o.length>0)try{l=JSON.parse(o);}catch{this.debugLog("Failed to parse tool arguments",{tool:i.function.name});}let c=this.isProxyMode?Yp[i.function.name]||this.toClaudeCodeToolName(i.function.name):i.function.name;s.push({type:"tool_use",id:i.id,name:c,input:l});}if(s.length>0){let i=s[s.length-1];this.debugLog("Assistant message final check",{contentLength:s.length,lastBlockType:i.type,hasThinkingBlocks:n,blockTypes:s.map(o=>o.type),lastBlockTextPreview:i.type==="text"?(i.text||"").substring(0,50):void 0}),i.type==="thinking"||i.type==="redacted_thinking"?(s.push({type:"text",text:"."}),this.debugLog("Fixed: Added text block after thinking")):i.type==="text"&&(!i.text||!i.text.trim())&&s.some(l=>l.type==="thinking"||l.type==="redacted_thinking")&&(i.text=".",this.debugLog("Fixed: Ensured text block has content after thinking"));}return s.length>0?{role:"assistant",content:s}:null}if(Array.isArray(e.content)){let s=e.content.filter(i=>i.type==="text");if(!e.content.some(i=>i.type!=="text")&&s.length===1){let i=s[0].text;return i.trim()?{role:"user",content:i}:null}let r=this.convertMultimodalContent(e.content);return r.length>0?{role:"user",content:r}:null}let t=me(e.content);return t.trim()?{role:"user",content:t}:null}convertMultimodalContent(e){let t=[];for(let s of e)if(s.type==="text")t.push({type:"text",text:s.text});else if(s.type==="image_url"){let n=this.convertImageUrl(s.image_url.url);n&&t.push(n);}return t}convertImageUrl(e){if(e.startsWith("data:")){let t=e.match(/^data:([^;]+);base64,(.+)$/);if(t)return {type:"image",source:{type:"base64",media_type:t[1],data:t[2]}}}else return {type:"image",source:{type:"url",url:e}};return null}normalizeMessages(e){let t=e.filter(s=>{let n=s.role==="assistant"&&!!(s.tool_calls&&s.tool_calls.length>0),r=s.role==="assistant"&&!!(s.thinking_blocks&&s.thinking_blocks.length>0);return n||r?true:s.content?typeof s.content=="string"?s.content.trim().length>0:Array.isArray(s.content)?s.content.length>0:true:false});return t.length===0?[]:(this.validateMessageAlternation(t),t)}validateMessageAlternation(e){let t=e.filter(n=>n.role!=="system"),s=false;for(let n=1;n<t.length;n++)t[n].role===t[n-1].role&&(s=true,this.debugLog("Message alternation warning",{index:n,prevRole:t[n-1].role,currentRole:t[n].role}));!s&&t.length>1&&this.debugLog("Message alternation OK",{messageCount:t.length,roles:t.map(n=>n.role)});}convertResponse(e){this.debugLog("Raw response",e);let t=e.content||[],s="",n=[],r="";for(let o of t)if(o.type==="text")s+=o.text;else if(o.type==="tool_use"){let l=this.isProxyMode?Nl[o.name]||this.fromClaudeCodeToolName(o.name):o.name;n.push({id:o.id,type:"function",function:{name:l,arguments:JSON.stringify(o.input)}});}else o.type==="thinking"&&(r=o.thinking||"");let i=this.buildUsageFromRaw(e.usage);return {id:e.id,choices:[{message:{role:"assistant",content:s||"",tool_calls:n.length>0?n:void 0,...r?{reasoning_content:r}:{}},finish_reason:this.convertStopReason(e.stop_reason)}],usage:i}}buildUsageFromRaw(e){if(!e)return {prompt_tokens:0,completion_tokens:0,total_tokens:0};let t={prompt_tokens:e.input_tokens||0,completion_tokens:e.output_tokens||0,total_tokens:(e.input_tokens||0)+(e.output_tokens||0)};return e.cache_read_input_tokens&&(t.cache_read_input_tokens=e.cache_read_input_tokens),e.cache_creation_input_tokens&&(t.cache_creation_input_tokens=e.cache_creation_input_tokens),e.cache_creation&&(e.cache_creation.ephemeral_5m_input_tokens&&(t.cache_creation_5m_tokens=e.cache_creation.ephemeral_5m_input_tokens),e.cache_creation.ephemeral_1h_input_tokens&&(t.cache_creation_1h_tokens=e.cache_creation.ephemeral_1h_input_tokens)),t}convertStopReason(e){switch(e){case "end_turn":return "stop";case "max_tokens":return "length";case "tool_use":return "tool_calls";default:return "stop"}}handleStreamEvent(e,t,s,n,r){switch(e.type){case "message_start":return this.debugLog("message_start usage",e.message?.usage),process.env.CLI_DEBUG==="1"&&e.message&&m.debug("Anthropic",`message_start full: ${JSON.stringify(e.message,null,2)}`),{usage:e.message?.usage,yield:{type:"message_start",message:{id:e.message?.id,model:e.message?.model}}};case "content_block_start":return {...this.handleContentBlockStart(e,t,s,n),contentBlockStart:true};case "content_block_delta":return this.handleContentBlockDelta(e,t);case "content_block_stop":return this.validateToolArguments(t),{contentBlockStop:true};case "message_delta":this.debugLog("message_delta usage",{eventUsage:e.usage,currentUsage:r});let o=e.delta?.stop_reason||e.stop_reason;if(o&&this.debugLog("message_delta stop_reason",o),e.usage&&r){let u={...r,...e.usage};return this.debugLog("merged usage",u),{usage:u,stopReason:o}}return {usage:e.usage||r,stopReason:o};case "message_stop":return this.debugLog("Message stop received"),{messageStop:true};case "ping":return {};case "error":return {error:e.error?.message||"Stream error"};default:let l=e.type?.toLowerCase()||"";if(l==="done"||l==="stream_end"||l==="end")return this.debugLog("Alternative message stop received",{type:e.type}),{messageStop:true};let c=e.stop_reason||e.delta?.stop_reason;return c?(this.debugLog("stop_reason found in unknown event",{type:e.type,stopReason:c}),{stopReason:c}):(this.debugLog("Unknown event type",{type:e.type}),{})}}handleContentBlockStart(e,t,s,n){let r=e.content_block?.type;if(r==="text")return n?{blockType:r}:{yield:{choices:[{delta:{role:"assistant"},index:0}]},roleSent:true,blockType:r};if(r==="tool_use"){let i=e.content_block,o=this.isProxyMode?Nl[i.name]||this.fromClaudeCodeToolName(i.name):i.name,l="";return i.input&&typeof i.input=="object"&&Object.keys(i.input).length>0&&(l=JSON.stringify(i.input)),t.push({index:s,id:i.id,type:"function",function:{name:o,arguments:l}}),{yield:{choices:[{delta:{tool_calls:[{index:s,id:i.id,type:"function",function:{name:o}}]},index:0}]},incrementToolIndex:true,blockType:r}}else if(r==="thinking")return {blockType:r};return {blockType:r}}handleContentBlockDelta(e,t){if(e.delta?.type==="text_delta")return {yield:{choices:[{delta:{content:e.delta.text||""},index:0}]}};if(e.delta?.type==="input_json_delta"){let s=e.delta.partial_json||"";if(t.length>0){let n=t[t.length-1];return n.function.arguments+=s,{yield:{choices:[{delta:{tool_calls:[{index:n.index,function:{arguments:s}}]},index:0}]}}}}else {if(e.delta?.type==="thinking_delta")return {yield:{choices:[{delta:{reasoning_content:e.delta.thinking},index:0}]}};if(e.delta?.type==="signature_delta")return {}}return {}}validateToolArguments(e){if(e.length===0)return;let t=e[e.length-1];if(t.function.arguments)try{JSON.parse(t.function.arguments);}catch{let s=this.tryFixJson(t.function.arguments);s?(t.function.arguments=s,this.debugLog("Auto-fixed tool arguments",{tool:t.function.name})):this.debugLog("Invalid tool arguments JSON",{tool:t.function.name});}}tryFixJson(e){let t=e.trim();if(!t.endsWith("}")){t+="}";try{return JSON.parse(t),t}catch{}}t=e.replace(/,\s*$/,""),t.endsWith("}")||(t+="}");try{return JSON.parse(t),t}catch{}let s=0,n=0,r=false,i=false;for(let o of e){if(i){i=false;continue}if(o==="\\"){i=true;continue}if(o==='"'){r=!r;continue}r||(o==="{"?s++:o==="}"?s--:o==="["?n++:o==="]"&&n--);}for(t=e,r&&(t+='"');n>0;)t+="]",n--;for(;s>0;)t+="}",s--;try{return JSON.parse(t),t}catch{return null}}transformToolDefinition(e){let t=this.isProxyMode?Yp[e.name]||this.toClaudeCodeToolName(e.name):e.name;if(this.isProxyMode){let r=this.stripSchemaPropertyDescriptions(e.parameters);return {name:t,description:e.description,input_schema:r}}if(!this.sanitizeToolsForProxy)return {name:t,description:e.description,input_schema:e.parameters};let s=this.truncateDescription(e.description||e.name),n=this.stripSchemaDescriptions(e.parameters);return {name:t,description:s,input_schema:n}}stripSchemaPropertyDescriptions(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(s=>this.stripSchemaPropertyDescriptions(s));let t={...e};if(t.properties&&typeof t.properties=="object"){let s={};for(let[n,r]of Object.entries(t.properties))if(r&&typeof r=="object"){let i={...r};delete i.description,i.properties&&(i.properties=this.stripSchemaPropertyDescriptions({properties:i.properties}).properties),i.items&&(i.items=this.stripSchemaPropertyDescriptions(i.items)),s[n]=i;}else s[n]=r;t.properties=s;}t.items&&(t.items=this.stripSchemaPropertyDescriptions(t.items));for(let s of ["oneOf","anyOf","allOf"])t[s]&&Array.isArray(t[s])&&(t[s]=t[s].map(n=>this.stripSchemaPropertyDescriptions(n)));return t}toClaudeCodeToolName(e){return e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}fromClaudeCodeToolName(e){return e.replace(/["\s/>]+$/g,"").trim().replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}truncateDescription(e){if(!e)return "Utility tool";let t=e.replace(/\s+/g," ").trim();return t?t.length>120?`${t.slice(0,117)}...`:t:"Utility tool"}stripSchemaDescriptions(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(s=>this.stripSchemaDescriptions(s));let t={...e};if(delete t.description,t.properties&&typeof t.properties=="object"){let s={};for(let[n,r]of Object.entries(t.properties))s[n]=this.stripSchemaDescriptions(r);t.properties=s;}for(let s of ["items","oneOf","anyOf","allOf"])t[s]&&(t[s]=Array.isArray(t[s])?t[s].map(n=>this.stripSchemaDescriptions(n)):this.stripSchemaDescriptions(t[s]));return t}buildHeaders(){return this.isProxyMode?this.buildClaudeCodeHeaders():this.buildOfficialHeaders()}buildOfficialHeaders(){return {"anthropic-api-key":this.authToken,"anthropic-version":to,"Content-Type":"application/json"}}buildClaudeCodeHeaders(){return {Accept:"application/json","X-Stainless-Retry-Count":"0","X-Stainless-Timeout":"600","X-Stainless-Lang":"js","X-Stainless-Package-Version":"0.70.0","X-Stainless-OS":"MacOS","X-Stainless-Arch":"arm64","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":process.version,"anthropic-dangerous-direct-browser-access":"true","anthropic-version":to,"x-app":"cli","User-Agent":"claude-cli/2.0.55 (external, cli)",Authorization:`Bearer ${this.authToken}`,"Content-Type":"application/json","anthropic-beta":this.betaFeatures.join(","),"x-stainless-helper-method":"stream","accept-language":"*","sec-fetch-mode":"cors","accept-encoding":"br, gzip, deflate"}}generateSafeUserId(){if(this.isProxyMode){let s=randomBytes(32).toString("hex"),n=this.generateUUID();return `user_${s}_account__session_${n}`}let e=randomBytes(16).toString("hex"),t=randomBytes(4).toString("hex");return `user_${e}_session_${t}`}generateUUID(){let e=randomBytes(16);e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=e.toString("hex");return `${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}sanitizeUserId(e){if(this.isProxyMode){if(/^[\w.+-]+@[\w.-]+\.\w+$/.test(e)){let t=createHash("sha256").update(e).digest("hex"),s=this.generateUUID();return `user_${t}_account__session_${s}`}if(/^\+?[\d\s-]{10,}$/.test(e)){let t=createHash("sha256").update(e).digest("hex"),s=this.generateUUID();return `user_${t}_account__session_${s}`}return e}return e.length>so?createHash("sha256").update(e).digest("hex").slice(0,so):/^[\w.+-]+@[\w.-]+\.\w+$/.test(e)?createHash("sha256").update(e).digest("hex").slice(0,so):/^\+?[\d\s-]{10,}$/.test(e)?createHash("sha256").update(e).digest("hex").slice(0,so):e}async normalizeAxiosStreamError(e){let t=e?.response?.data;if(!(!t||typeof t!="object"||!(typeof t.pipe=="function")))try{let n=await this.readStreamToString(t);try{e.response.data=JSON.parse(n);}catch{e.response.data=n;}}catch{}}readStreamToString(e){return new Promise((t,s)=>{let n=[];e.on("data",r=>{n.push(typeof r=="string"?Buffer.from(r):r);}),e.on("end",()=>t(Buffer.concat(n).toString("utf-8"))),e.on("error",s);})}async*createTimeoutStream(e,t){let s=false,n=Date.now(),r=0,i=e[Symbol.asyncIterator](),o=()=>new Promise(l=>setImmediate(l));for(process.env.CLI_DEBUG==="1"&&m.debug("STREAM","\u{1F30A} Stream processing started");;){if(t?.aborted)throw this.debugLog("Stream aborted by signal"),process.env.CLI_DEBUG==="1"&&m.debug("STREAM",`\u26D4 Stream aborted after ${r} chunks`),e.destroy?.(),new Error("Request aborted");await o();let l=s?Kp:Vp,c;try{let u=t?new Promise((h,g)=>{let f=()=>{g(new Error("Request aborted"));};t.aborted?f():t.addEventListener("abort",f,{once:!0});}):null,d=[i.next(),new Promise((h,g)=>{c=setTimeout(()=>{g(new Error(s?`Stream idle timeout: no data for ${Kp/1e3}s`:`Stream first chunk timeout: no response for ${Vp/1e3}s`));},l);})];u&&d.push(u);let p=await Promise.race(d);if(c&&clearTimeout(c),p.done){process.env.CLI_DEBUG==="1"&&m.debug("STREAM",`\u2705 Stream completed successfully (${r} chunks, ${Date.now()-n}ms)`);return}s=!0,n=Date.now(),r++,process.env.CLI_DEBUG==="1"&&r%100===0&&m.debug("STREAM",`\u{1F4E6} Processed ${r} chunks`),yield p.value;}catch(u){c&&clearTimeout(c);let d=u.message?.includes("aborted")||u.message==="Request aborted";throw this.debugLog("Stream timeout or abort",{error:u.message,isAbort:d,receivedFirstChunk:s,idleTime:`${(Date.now()-n)/1e3}s`}),e.destroy?.(),d?(u.name="AbortError",u.code="ERR_CANCELED",u.category="canceled",u):(u.code="STREAM_TIMEOUT",u.isNetworkInterrupt=true,u)}}}debugLog(e,t){process.env.CLI_DEBUG==="1"&&m.debug("Anthropic",t?`${e} ${JSON.stringify(t,null,2)}`:e);}logRequest(e,t,s=false){process.env.CLI_DEBUG_PAYLOAD==="1"&&this.debugLog("Full payload",JSON.stringify(t,null,2));let n=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",r=`${this.baseUrl}${n}`,i=this.buildHeaders();ia(r,i,t);let o=this.isProxyMode?{Authorization:"Bearer ***","anthropic-version":to,"anthropic-beta":this.betaFeatures.join(","),"Content-Type":"application/json"}:{"anthropic-api-key":"***","anthropic-version":to,"Content-Type":"application/json"};ge.llmRequest(s?"anthropic-stream":"anthropic",e,t,r,o),this.debugLog(`${s?"Stream ":""}Request`,{url:r,model:e,isProxyMode:this.isProxyMode});}};W();var no=class extends Nt{constraints;promptBuilder;provider;defaultModel;disableCaching;constructor(e){super(),this.constraints=new xr,this.promptBuilder=new Tr,this.defaultModel=e.defaultModel||"claude-3-5-sonnet-20241022",this.disableCaching=e.disableCaching||false;let{authToken:t,baseUrl:s,defaultModel:n,maxTokens:r,disableCaching:i,userId:o,...l}=e;this.provider=new wn({authToken:t,baseUrl:s,defaultModel:this.defaultModel,maxTokens:r,disableCaching:this.disableCaching,userId:o,...l});}prepareRequest(e,t){let s=t.model||this.defaultModel,n=super.prepareRequest(e,{...t,model:s}),r={...n.options};if(r.maxInputTokens!==void 0&&(r.max_tokens=r.maxInputTokens,delete r.maxInputTokens),!r.max_tokens){let i=this.constraints.getTokenLimits(s);r.max_tokens=Math.min(4096,i.maxOutput);}if(!this.disableCaching&&this.constraints.supportsPromptCaching(s)){let i=n.messages[0]?.content?.length||0,o=this.promptBuilder.getCachingRecommendation(i);o.shouldUseCache&&(r.enableCaching=true,r.cacheTtl=o.cacheTTL);}return {...n,options:r}}async chat(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}return s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("AnthropicAdapter","Warnings",s.validation.warnings),this.provider.chat(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,maxInputTokens:s.options.max_tokens,enableCaching:s.options.enableCaching,cacheTtl:s.options.cacheTtl,signal:t.signal})}async*chatStreamed(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("AnthropicAdapter","Warnings",s.validation.warnings),yield*this.provider.chatStreamed(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,maxInputTokens:s.options.max_tokens,enableCaching:s.options.enableCaching,cacheTtl:s.options.cacheTtl,signal:t.signal,enableFGTS:s.options.enableFGTS});}getProvider(){return this.provider}getModelCapabilities(e){let t=e||this.defaultModel;return {supportsVision:this.constraints.supportsVision(t),supportsTools:this.constraints.supportsTools(t),supportsThinking:this.constraints.supportsThinking?.(t)||false,supportsPromptCaching:this.constraints.supportsPromptCaching(t),tokenLimits:this.constraints.getTokenLimits(t)}}getCachingRecommendation(e){return this.promptBuilder.getCachingRecommendation(e)}};var ro=class extends Ps{getConstraints(){let e=super.getConstraints(),t={...e.validators??{}};t.temperature=Ve(0,1);let s=t.tool_choice;t.tool_choice=r=>r==="required"?"tool_choice=required is not supported by Kimi API":typeof s=="function"?s(r):true;let n=t.n;return t.n=(r,i)=>{let o=typeof n=="function"?n(r,i):true;if(o!==true)return o;let l=i?.temperature??1,c=typeof l=="number"?l:Number(l),u=typeof r=="number"?r:Number(r);return !Number.isNaN(c)&&c<=.001&&u>1?"temperature <= 0.001 requires n=1 for Kimi API":true},{...e,validators:t}}};W();var io=class extends Nt{constraints;promptBuilder;provider;defaultModel;constructor(e){super(),this.constraints=new ro,this.promptBuilder=new Os,this.defaultModel=e.defaultModel||"kimi-k2-0905-preview";let{apiKey:t,baseUrl:s,defaultModel:n,maxTokens:r,maxInputTokens:i,...o}=e;this.provider=new Kt({apiKey:t,baseUrl:s,defaultModel:this.defaultModel,maxTokens:r,maxInputTokens:i,...o,structuredOutputMode:"json_object"});}prepareRequest(e,t){let s=t.model||this.defaultModel;return super.prepareRequest(e,{...t,model:s})}async chat(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}return s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("KimiAdapter","Warnings",s.validation.warnings),this.provider.chat(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,structuredOutput:s.options.structuredOutput,maxInputTokens:s.options.maxInputTokens})}async*chatStreamed(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("KimiAdapter","Warnings",s.validation.warnings),yield*this.provider.chatStreamed(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,structuredOutput:s.options.structuredOutput,maxInputTokens:s.options.maxInputTokens,signal:t.signal});}getProvider(){return this.provider}};var oo=class extends us{getConstraints(){return {maxOutputTokens:{},maxInputTokens:{},supportedParams:new Set(["model","messages","stream","max_tokens","temperature","topP","topK","stopSequences","tools","structuredOutput","signal"]),validators:{temperature:Ve(0,2),topP:Ve(0,1),topK:Ve(1,128),max_tokens:e=>{let t=Number(e);return Number.isNaN(t)?"Must be a number":t<1?"Must be at least 1":true},stopSequences:e=>Array.isArray(e)?e.some(s=>typeof s!="string"||s.length===0)?"All stop sequences must be non-empty strings":true:"Must be an array of strings",stream:Wp("boolean")},defaults:{temperature:1}}}};var Ar=class extends ds{buildSystemPrompt(e){let{workDir:t,language:s="zh",modelName:n,customInstructions:r}=e,i=[];return i.push({content:this.getCoreInstructions(s,n),order:0}),i.push(this.getWorkingDirectorySection(t,s)),i.push({content:this.getCapabilitiesSection(s,n),order:20}),i.push({title:s==="zh"?"\u53C2\u6570\u7EA6\u675F":"Parameter Constraints",content:this.getConstraintInstructions(s),order:30}),i.push({title:s==="zh"?"\u5DE5\u5177\u8C03\u7528":"Tool Usage",content:this.getToolUseInstructions(s),order:40}),i.push({content:this.getGeneralRules(s),order:50}),r&&r.trim()&&i.push({title:s==="zh"?"\u81EA\u5B9A\u4E49\u6307\u4EE4":"Custom Instructions",content:r.trim(),order:60}),Ds(this.combinePromptSections(i))}getConstraintInstructions(e){return e==="zh"?`- temperature: 0.0 - 2.0
1705
+ `):null,anthropicMessages:l}}addMessageCacheControl(e){let t=false;for(let s=e.length-1;s>=0;s--){let n=e[s];if(!(n.role!=="user"||!Array.isArray(n.content))){for(let r=n.content.length-1;r>=0;r--){let i=n.content[r];if(!t&&i.type==="tool_result"){i.cache_control={type:"ephemeral"},t=true,this.debugLog("Added cache_control to tool_result",{tool_use_id:i.tool_use_id});break}}if(t)break}}t||this.addTextBlockCacheControl(e);}addTextBlockCacheControl(e){for(let t=e.length-1;t>=0;t--){let s=e[t];if(s.role==="user"&&Array.isArray(s.content)){for(let n=s.content.length-1;n>=0;n--)if(s.content[n].type==="text"){s.content[n].cache_control={type:"ephemeral"},this.debugLog("Added cache_control to user text block");return}}}}validateToolResultPairs(e){let t=new Set,s=new Set;for(let i of e)if(Array.isArray(i.content))for(let o of i.content)o.type==="tool_use"&&o.id&&t.add(o.id),o.type==="tool_result"&&o.tool_use_id&&s.add(o.tool_use_id);let n=new Set;for(let i of t)s.has(i)&&n.add(i);this.debugLog("Tool pairing analysis",{toolUseCount:t.size,toolResultCount:s.size,pairedCount:n.size,orphanToolUseIds:Array.from(t).filter(i=>!n.has(i)),orphanToolResultIds:Array.from(s).filter(i=>!n.has(i))});let r=[];for(let i of e){if(!Array.isArray(i.content)){r.push(i);continue}let o=i.content.filter(l=>{if(l.type==="tool_use"){let c=n.has(l.id);return c||this.debugLog("Removing orphan tool_use",{id:l.id}),c}if(l.type==="tool_result"){let c=n.has(l.tool_use_id);return c||this.debugLog("Removing orphan tool_result",{tool_use_id:l.tool_use_id}),c}return true});o.length>0?r.push({...i,content:o}):this.debugLog("Skipping empty message after tool pairing filter",{role:i.role});}return r}mergeConsecutiveUserMessages(e){if(e.length===0)return [];let t=[];for(let s of e){let n=t[t.length-1];if(n&&n.role==="user"&&s.role==="user"){let r=Array.isArray(n.content)?n.content:[{type:"text",text:n.content}],i=Array.isArray(s.content)?s.content:[{type:"text",text:s.content}];n.content=[...r,...i];}else t.push(s);}return t}convertSingleMessage(e){if(e.role==="tool"){let s=me(e.content),n=uw(s);return s.length!==n.length&&this.debugLog("Tool output truncated",{tool_call_id:e.tool_call_id,original:s.length,truncated:n.length}),{role:"user",content:[{type:"tool_result",tool_use_id:e.tool_call_id,content:n}]}}if(e.role==="assistant"){let s=[],n=false;if(e.thinking_blocks&&e.thinking_blocks.length>0){n=true;for(let i of e.thinking_blocks)if(i.type==="thinking"){let o={type:"thinking",thinking:i.thinking};i.signature!==void 0&&(o.signature=i.signature),s.push(o);}else if(i.type==="redacted_thinking"){let o={type:"redacted_thinking"};i.data!==void 0&&(o.data=i.data),s.push(o);}}let r=me(e.content);if(r){let i=r.trimEnd();s.push({type:"text",text:i||"."});}else n&&(s.push({type:"text",text:"."}),this.debugLog("Added placeholder text after thinking (no text content)"));if(e.tool_calls)for(let i of e.tool_calls){let o=(i.function.arguments||"").trim(),l={};if(o.length>0)try{l=JSON.parse(o);}catch{this.debugLog("Failed to parse tool arguments",{tool:i.function.name});}let c=this.isProxyMode?Yp[i.function.name]||this.toClaudeCodeToolName(i.function.name):i.function.name;s.push({type:"tool_use",id:i.id,name:c,input:l});}if(s.length>0){let i=s[s.length-1];this.debugLog("Assistant message final check",{contentLength:s.length,lastBlockType:i.type,hasThinkingBlocks:n,blockTypes:s.map(o=>o.type),lastBlockTextPreview:i.type==="text"?(i.text||"").substring(0,50):void 0}),i.type==="thinking"||i.type==="redacted_thinking"?(s.push({type:"text",text:"."}),this.debugLog("Fixed: Added text block after thinking")):i.type==="text"&&(!i.text||!i.text.trim())&&s.some(l=>l.type==="thinking"||l.type==="redacted_thinking")&&(i.text=".",this.debugLog("Fixed: Ensured text block has content after thinking"));}return s.length>0?{role:"assistant",content:s}:null}if(Array.isArray(e.content)){let s=e.content.filter(i=>i.type==="text");if(!e.content.some(i=>i.type!=="text")&&s.length===1){let i=s[0].text;return i.trim()?{role:"user",content:i}:null}let r=this.convertMultimodalContent(e.content);return r.length>0?{role:"user",content:r}:null}let t=me(e.content);return t.trim()?{role:"user",content:t}:null}convertMultimodalContent(e){let t=[];for(let s of e)if(s.type==="text")t.push({type:"text",text:s.text});else if(s.type==="image_url"){let n=this.convertImageUrl(s.image_url.url);n&&t.push(n);}return t}convertImageUrl(e){if(e.startsWith("data:")){let t=e.match(/^data:([^;]+);base64,(.+)$/);if(t)return {type:"image",source:{type:"base64",media_type:t[1],data:t[2]}}}else return {type:"image",source:{type:"url",url:e}};return null}normalizeMessages(e){let t=e.filter(s=>{let n=s.role==="assistant"&&!!(s.tool_calls&&s.tool_calls.length>0),r=s.role==="assistant"&&!!(s.thinking_blocks&&s.thinking_blocks.length>0);return n||r?true:s.content?typeof s.content=="string"?s.content.trim().length>0:Array.isArray(s.content)?s.content.length>0:true:false});return t.length===0?[]:(this.validateMessageAlternation(t),t)}validateMessageAlternation(e){let t=e.filter(n=>n.role!=="system"),s=false;for(let n=1;n<t.length;n++)t[n].role===t[n-1].role&&(s=true,this.debugLog("Message alternation warning",{index:n,prevRole:t[n-1].role,currentRole:t[n].role}));!s&&t.length>1&&this.debugLog("Message alternation OK",{messageCount:t.length,roles:t.map(n=>n.role)});}convertResponse(e){this.debugLog("Raw response",e);let t=e.content||[],s="",n=[],r="";for(let o of t)if(o.type==="text")s+=o.text;else if(o.type==="tool_use"){let l=this.isProxyMode?Nl[o.name]||this.fromClaudeCodeToolName(o.name):o.name;n.push({id:o.id,type:"function",function:{name:l,arguments:JSON.stringify(o.input)}});}else o.type==="thinking"&&(r=o.thinking||"");let i=this.buildUsageFromRaw(e.usage);return {id:e.id,choices:[{message:{role:"assistant",content:s||"",tool_calls:n.length>0?n:void 0,...r?{reasoning_content:r}:{}},finish_reason:this.convertStopReason(e.stop_reason)}],usage:i}}buildUsageFromRaw(e){if(!e)return {prompt_tokens:0,completion_tokens:0,total_tokens:0};let t={prompt_tokens:e.input_tokens||0,completion_tokens:e.output_tokens||0,total_tokens:(e.input_tokens||0)+(e.output_tokens||0)};return e.cache_read_input_tokens&&(t.cache_read_input_tokens=e.cache_read_input_tokens),e.cache_creation_input_tokens&&(t.cache_creation_input_tokens=e.cache_creation_input_tokens),e.cache_creation&&(e.cache_creation.ephemeral_5m_input_tokens&&(t.cache_creation_5m_tokens=e.cache_creation.ephemeral_5m_input_tokens),e.cache_creation.ephemeral_1h_input_tokens&&(t.cache_creation_1h_tokens=e.cache_creation.ephemeral_1h_input_tokens)),t}convertStopReason(e){switch(e){case "end_turn":return "stop";case "max_tokens":return "length";case "tool_use":return "tool_calls";default:return "stop"}}handleStreamEvent(e,t,s,n,r){switch(e.type){case "message_start":return this.debugLog("message_start usage",e.message?.usage),process.env.CLI_DEBUG==="1"&&e.message&&m.debug("Anthropic",`message_start full: ${JSON.stringify(e.message,null,2)}`),{usage:e.message?.usage,yield:{type:"message_start",message:{id:e.message?.id,model:e.message?.model}}};case "content_block_start":return {...this.handleContentBlockStart(e,t,s,n),contentBlockStart:true};case "content_block_delta":return this.handleContentBlockDelta(e,t);case "content_block_stop":return this.validateToolArguments(t),{contentBlockStop:true};case "message_delta":this.debugLog("message_delta usage",{eventUsage:e.usage,currentUsage:r});let o=e.delta?.stop_reason||e.stop_reason;if(o&&this.debugLog("message_delta stop_reason",o),e.usage&&r){let u={...r,...e.usage};return this.debugLog("merged usage",u),{usage:u,stopReason:o}}return {usage:e.usage||r,stopReason:o};case "message_stop":return this.debugLog("Message stop received"),{messageStop:true};case "ping":return {};case "error":return {error:e.error?.message||"Stream error"};default:let l=e.type?.toLowerCase()||"";if(l==="done"||l==="stream_end"||l==="end")return this.debugLog("Alternative message stop received",{type:e.type}),{messageStop:true};let c=e.stop_reason||e.delta?.stop_reason;return c?(this.debugLog("stop_reason found in unknown event",{type:e.type,stopReason:c}),{stopReason:c}):(this.debugLog("Unknown event type",{type:e.type}),{})}}handleContentBlockStart(e,t,s,n){let r=e.content_block?.type;if(r==="text")return n?{blockType:r}:{yield:{choices:[{delta:{role:"assistant"},index:0}]},roleSent:true,blockType:r};if(r==="tool_use"){let i=e.content_block,o=this.isProxyMode?Nl[i.name]||this.fromClaudeCodeToolName(i.name):i.name,l="";return i.input&&typeof i.input=="object"&&Object.keys(i.input).length>0&&(l=JSON.stringify(i.input)),t.push({index:s,id:i.id,type:"function",function:{name:o,arguments:l}}),{yield:{choices:[{delta:{tool_calls:[{index:s,id:i.id,type:"function",function:{name:o}}]},index:0}]},incrementToolIndex:true,blockType:r}}else if(r==="thinking")return {blockType:r};return {blockType:r}}handleContentBlockDelta(e,t){if(e.delta?.type==="text_delta")return {yield:{choices:[{delta:{content:e.delta.text||""},index:0}]}};if(e.delta?.type==="input_json_delta"){let s=e.delta.partial_json||"";if(t.length>0){let n=t[t.length-1];return n.function.arguments+=s,{yield:{choices:[{delta:{tool_calls:[{index:n.index,function:{arguments:s}}]},index:0}]}}}}else {if(e.delta?.type==="thinking_delta")return {yield:{choices:[{delta:{reasoning_content:e.delta.thinking},index:0}]}};if(e.delta?.type==="signature_delta")return {}}return {}}validateToolArguments(e){if(e.length===0)return;let t=e[e.length-1];if(t.function.arguments)try{JSON.parse(t.function.arguments);}catch{let s=this.tryFixJson(t.function.arguments);s?(t.function.arguments=s,this.debugLog("Auto-fixed tool arguments",{tool:t.function.name})):this.debugLog("Invalid tool arguments JSON",{tool:t.function.name});}}tryFixJson(e){let t=e.trim();if(!t.endsWith("}")){t+="}";try{return JSON.parse(t),t}catch{}}t=e.replace(/,\s*$/,""),t.endsWith("}")||(t+="}");try{return JSON.parse(t),t}catch{}let s=0,n=0,r=false,i=false;for(let o of e){if(i){i=false;continue}if(o==="\\"){i=true;continue}if(o==='"'){r=!r;continue}r||(o==="{"?s++:o==="}"?s--:o==="["?n++:o==="]"&&n--);}for(t=e,r&&(t+='"');n>0;)t+="]",n--;for(;s>0;)t+="}",s--;try{return JSON.parse(t),t}catch{return null}}transformToolDefinition(e){let t=this.isProxyMode?Yp[e.name]||this.toClaudeCodeToolName(e.name):e.name;if(this.isProxyMode){let r=this.stripSchemaPropertyDescriptions(e.parameters);return {name:t,description:e.description,input_schema:r}}if(!this.sanitizeToolsForProxy)return {name:t,description:e.description,input_schema:e.parameters};let s=this.truncateDescription(e.description||e.name),n=this.stripSchemaDescriptions(e.parameters);return {name:t,description:s,input_schema:n}}stripSchemaPropertyDescriptions(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(s=>this.stripSchemaPropertyDescriptions(s));let t={...e};if(t.properties&&typeof t.properties=="object"){let s={};for(let[n,r]of Object.entries(t.properties))if(r&&typeof r=="object"){let i={...r};delete i.description,i.properties&&(i.properties=this.stripSchemaPropertyDescriptions({properties:i.properties}).properties),i.items&&(i.items=this.stripSchemaPropertyDescriptions(i.items)),s[n]=i;}else s[n]=r;t.properties=s;}t.items&&(t.items=this.stripSchemaPropertyDescriptions(t.items));for(let s of ["oneOf","anyOf","allOf"])t[s]&&Array.isArray(t[s])&&(t[s]=t[s].map(n=>this.stripSchemaPropertyDescriptions(n)));return t}toClaudeCodeToolName(e){return e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}fromClaudeCodeToolName(e){return e.replace(/["\s/>]+$/g,"").trim().replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}truncateDescription(e){if(!e)return "Utility tool";let t=e.replace(/\s+/g," ").trim();return t?t.length>120?`${t.slice(0,117)}...`:t:"Utility tool"}stripSchemaDescriptions(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(s=>this.stripSchemaDescriptions(s));let t={...e};if(delete t.description,t.properties&&typeof t.properties=="object"){let s={};for(let[n,r]of Object.entries(t.properties))s[n]=this.stripSchemaDescriptions(r);t.properties=s;}for(let s of ["items","oneOf","anyOf","allOf"])t[s]&&(t[s]=Array.isArray(t[s])?t[s].map(n=>this.stripSchemaDescriptions(n)):this.stripSchemaDescriptions(t[s]));return t}buildHeaders(){return this.isProxyMode?this.buildClaudeCodeHeaders():this.buildOfficialHeaders()}buildOfficialHeaders(){return {"anthropic-api-key":this.authToken,"anthropic-version":to,"Content-Type":"application/json"}}buildClaudeCodeHeaders(){return {Accept:"application/json","X-Stainless-Retry-Count":"0","X-Stainless-Timeout":"600","X-Stainless-Lang":"js","X-Stainless-Package-Version":"0.70.0","X-Stainless-OS":"MacOS","X-Stainless-Arch":"arm64","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":process.version,"anthropic-dangerous-direct-browser-access":"true","anthropic-version":to,"x-app":"cli","User-Agent":"claude-cli/2.0.55 (external, cli)",Authorization:`Bearer ${this.authToken}`,"Content-Type":"application/json","anthropic-beta":this.betaFeatures.join(","),"x-stainless-helper-method":"stream","accept-language":"*","sec-fetch-mode":"cors","accept-encoding":"br, gzip, deflate"}}generateSafeUserId(){if(this.isProxyMode){let s=randomBytes(32).toString("hex"),n=this.generateUUID();return `user_${s}_account__session_${n}`}let e=randomBytes(16).toString("hex"),t=randomBytes(4).toString("hex");return `user_${e}_session_${t}`}generateUUID(){let e=randomBytes(16);e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=e.toString("hex");return `${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}sanitizeUserId(e){if(this.isProxyMode){if(/^[\w.+-]+@[\w.-]+\.\w+$/.test(e)){let t=createHash("sha256").update(e).digest("hex"),s=this.generateUUID();return `user_${t}_account__session_${s}`}if(/^\+?[\d\s-]{10,}$/.test(e)){let t=createHash("sha256").update(e).digest("hex"),s=this.generateUUID();return `user_${t}_account__session_${s}`}return e}return e.length>so?createHash("sha256").update(e).digest("hex").slice(0,so):/^[\w.+-]+@[\w.-]+\.\w+$/.test(e)?createHash("sha256").update(e).digest("hex").slice(0,so):/^\+?[\d\s-]{10,}$/.test(e)?createHash("sha256").update(e).digest("hex").slice(0,so):e}async normalizeAxiosStreamError(e){let t=e?.response?.data;if(!(!t||typeof t!="object"||!(typeof t.pipe=="function")))try{let n=await this.readStreamToString(t);try{e.response.data=JSON.parse(n);}catch{e.response.data=n;}}catch{}}readStreamToString(e){return new Promise((t,s)=>{let n=[];e.on("data",r=>{n.push(typeof r=="string"?Buffer.from(r):r);}),e.on("end",()=>t(Buffer.concat(n).toString("utf-8"))),e.on("error",s);})}async*createTimeoutStream(e,t){let s=false,n=Date.now(),r=0,i=e[Symbol.asyncIterator](),o=()=>new Promise(l=>setImmediate(l));for(process.env.CLI_DEBUG==="1"&&m.debug("STREAM","\u{1F30A} Stream processing started");;){if(t?.aborted)throw this.debugLog("Stream aborted by signal"),process.env.CLI_DEBUG==="1"&&m.debug("STREAM",`\u26D4 Stream aborted after ${r} chunks`),e.destroy?.(),new Error("Request aborted");await o();let l=s?Kp:Vp,c;try{let u=t?new Promise((h,g)=>{let f=()=>{g(new Error("Request aborted"));};t.aborted?f():t.addEventListener("abort",f,{once:!0});}):null,d=[i.next(),new Promise((h,g)=>{c=setTimeout(()=>{g(new Error(s?`Stream idle timeout: no data for ${Kp/1e3}s`:`Stream first chunk timeout: no response for ${Vp/1e3}s`));},l);})];u&&d.push(u);let p=await Promise.race(d);if(c&&clearTimeout(c),p.done){process.env.CLI_DEBUG==="1"&&m.debug("STREAM",`\u2705 Stream completed successfully (${r} chunks, ${Date.now()-n}ms)`);return}s=!0,n=Date.now(),r++,process.env.CLI_DEBUG==="1"&&r%100===0&&m.debug("STREAM",`\u{1F4E6} Processed ${r} chunks`),yield p.value;}catch(u){c&&clearTimeout(c);let d=u.message?.includes("aborted")||u.message==="Request aborted";throw this.debugLog("Stream timeout or abort",{error:u.message,isAbort:d,receivedFirstChunk:s,idleTime:`${(Date.now()-n)/1e3}s`}),e.destroy?.(),d?(u.name="AbortError",u.code="ERR_CANCELED",u.category="canceled",u):(u.code="STREAM_TIMEOUT",u.isNetworkInterrupt=true,u)}}}debugLog(e,t){process.env.CLI_DEBUG==="1"&&m.debug("Anthropic",t?`${e} ${JSON.stringify(t,null,2)}`:e);}logRequest(e,t,s=false){process.env.CLI_DEBUG_PAYLOAD==="1"&&this.debugLog("Full payload",JSON.stringify(t,null,2));let n=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",r=`${this.baseUrl}${n}`,i=this.buildHeaders();ia(r,i,t);let o=this.isProxyMode?{Authorization:"Bearer ***","anthropic-version":to,"anthropic-beta":this.betaFeatures.join(","),"Content-Type":"application/json"}:{"anthropic-api-key":"***","anthropic-version":to,"Content-Type":"application/json"};ge.llmRequest(s?"anthropic-stream":"anthropic",e,t,r,o),this.debugLog(`${s?"Stream ":""}Request`,{url:r,model:e,isProxyMode:this.isProxyMode});}};W();var no=class extends Nt{constraints;promptBuilder;provider;defaultModel;disableCaching;constructor(e){super(),this.constraints=new xr,this.promptBuilder=new Tr,this.defaultModel=e.defaultModel||"claude-3-5-sonnet-20241022",this.disableCaching=e.disableCaching||false;let{authToken:t,baseUrl:s,defaultModel:n,maxTokens:r,disableCaching:i,userId:o,...l}=e;this.provider=new wn({authToken:t,baseUrl:s,defaultModel:this.defaultModel,maxTokens:r,disableCaching:this.disableCaching,userId:o,...l});}prepareRequest(e,t){let s=t.model||this.defaultModel,n=super.prepareRequest(e,{...t,model:s}),r={...n.options};if(r.maxInputTokens!==void 0&&(r.max_tokens=r.maxInputTokens,delete r.maxInputTokens),!r.max_tokens){let i=this.constraints.getTokenLimits(s);r.max_tokens=Math.min(4096,i.maxOutput);}if(!this.disableCaching&&this.constraints.supportsPromptCaching(s)){let i=n.messages[0]?.content?.length||0,o=this.promptBuilder.getCachingRecommendation(i);o.shouldUseCache&&(r.enableCaching=true,r.cacheTtl=o.cacheTTL);}return {...n,options:r}}async chat(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}return s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("AnthropicAdapter","Warnings",s.validation.warnings),this.provider.chat(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,maxInputTokens:s.options.max_tokens,enableCaching:s.options.enableCaching,cacheTtl:s.options.cacheTtl,signal:t.signal})}async*chatStreamed(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("AnthropicAdapter","Warnings",s.validation.warnings),yield*this.provider.chatStreamed(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,maxInputTokens:s.options.max_tokens,enableCaching:s.options.enableCaching,cacheTtl:s.options.cacheTtl,signal:t.signal,enableFGTS:s.options.enableFGTS});}getProvider(){return this.provider}getModelCapabilities(e){let t=e||this.defaultModel;return {supportsVision:this.constraints.supportsVision(t),supportsTools:this.constraints.supportsTools(t),supportsThinking:this.constraints.supportsThinking?.(t)||false,supportsPromptCaching:this.constraints.supportsPromptCaching(t),tokenLimits:this.constraints.getTokenLimits(t)}}getCachingRecommendation(e){return this.promptBuilder.getCachingRecommendation(e)}};var ro=class extends Ds{getConstraints(){let e=super.getConstraints(),t={...e.validators??{}};t.temperature=Ve(0,1);let s=t.tool_choice;t.tool_choice=r=>r==="required"?"tool_choice=required is not supported by Kimi API":typeof s=="function"?s(r):true;let n=t.n;return t.n=(r,i)=>{let o=typeof n=="function"?n(r,i):true;if(o!==true)return o;let l=i?.temperature??1,c=typeof l=="number"?l:Number(l),u=typeof r=="number"?r:Number(r);return !Number.isNaN(c)&&c<=.001&&u>1?"temperature <= 0.001 requires n=1 for Kimi API":true},{...e,validators:t}}};W();var io=class extends Nt{constraints;promptBuilder;provider;defaultModel;constructor(e){super(),this.constraints=new ro,this.promptBuilder=new Ls,this.defaultModel=e.defaultModel||"kimi-k2-0905-preview";let{apiKey:t,baseUrl:s,defaultModel:n,maxTokens:r,maxInputTokens:i,...o}=e;this.provider=new Kt({apiKey:t,baseUrl:s,defaultModel:this.defaultModel,maxTokens:r,maxInputTokens:i,...o,structuredOutputMode:"json_object"});}prepareRequest(e,t){let s=t.model||this.defaultModel;return super.prepareRequest(e,{...t,model:s})}async chat(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}return s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("KimiAdapter","Warnings",s.validation.warnings),this.provider.chat(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,structuredOutput:s.options.structuredOutput,maxInputTokens:s.options.maxInputTokens})}async*chatStreamed(e,t){let s=this.prepareRequest(e,t);if(!s.validation?.valid){let n=s.validation?.errors||[];throw new Error(`Invalid parameters: ${n.join(", ")}`)}s.validation?.warnings&&s.validation.warnings.length>0&&m.warn("KimiAdapter","Warnings",s.validation.warnings),yield*this.provider.chatStreamed(s.messages,{model:s.options.model,tools:s.options.tools,temperature:s.options.temperature,structuredOutput:s.options.structuredOutput,maxInputTokens:s.options.maxInputTokens,signal:t.signal});}getProvider(){return this.provider}};var oo=class extends us{getConstraints(){return {maxOutputTokens:{},maxInputTokens:{},supportedParams:new Set(["model","messages","stream","max_tokens","temperature","topP","topK","stopSequences","tools","structuredOutput","signal"]),validators:{temperature:Ve(0,2),topP:Ve(0,1),topK:Ve(1,128),max_tokens:e=>{let t=Number(e);return Number.isNaN(t)?"Must be a number":t<1?"Must be at least 1":true},stopSequences:e=>Array.isArray(e)?e.some(s=>typeof s!="string"||s.length===0)?"All stop sequences must be non-empty strings":true:"Must be an array of strings",stream:Wp("boolean")},defaults:{temperature:1}}}};var Ar=class extends ds{buildSystemPrompt(e){let{workDir:t,language:s="zh",modelName:n,customInstructions:r}=e,i=[];return i.push({content:this.getCoreInstructions(s,n),order:0}),i.push(this.getWorkingDirectorySection(t,s)),i.push({content:this.getCapabilitiesSection(s,n),order:20}),i.push({title:s==="zh"?"\u53C2\u6570\u7EA6\u675F":"Parameter Constraints",content:this.getConstraintInstructions(s),order:30}),i.push({title:s==="zh"?"\u5DE5\u5177\u8C03\u7528":"Tool Usage",content:this.getToolUseInstructions(s),order:40}),i.push({content:this.getGeneralRules(s),order:50}),r&&r.trim()&&i.push({title:s==="zh"?"\u81EA\u5B9A\u4E49\u6307\u4EE4":"Custom Instructions",content:r.trim(),order:60}),Os(this.combinePromptSections(i))}getConstraintInstructions(e){return e==="zh"?`- temperature: 0.0 - 2.0
1706
1706
  - topP: 0.0 - 1.0
1707
1707
  - topK: >= 1
1708
1708
  - maxOutputTokens: \u63A7\u5236\u8F93\u51FA\u957F\u5EA6
@@ -1758,7 +1758,7 @@ Your primary responsibilities:
1758
1758
  [Doubao Stream Started]`),console.log("Status:",g.status)),g.status!==200){let b="";for await(let y of g.data)b+=y.toString();throw new Error(`Doubao API error: ${g.status} - ${b}`)}yield*this.parseStreamResponse(g.data);let f=Date.now()-h;ge.llmResponse("doubao-responses",f,{},{}),process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
1759
1759
  [Doubao Stream Complete]`),console.log("Duration:",`${f}ms`));return}catch(h){let g="";if(h.response?.data)try{if(typeof h.response.data.on=="function"){let b=[];for await(let w of h.response.data)b.push(Buffer.from(w));let y=Buffer.concat(b).toString("utf-8");try{let w=JSON.parse(y),C=w.error||{message:w.message,code:w.code,type:w.type};g=JSON.stringify(C,null,2);}catch{g=y;}}else if(typeof h.response.data=="string")g=h.response.data;else if(h.response.data.error){let b=h.response.data.error,y={message:b.message,code:b.code,type:b.type};g=JSON.stringify(y,null,2);}else {let b=h.response.data,y={message:b.message,code:b.code,type:b.type,error:b.error};g=JSON.stringify(y,null,2);}}catch(b){g=`HTTP ${h.response?.status||"unknown"} (\u65E0\u6CD5\u8BFB\u53D6\u54CD\u5E94\u4F53: ${b})`;}let f=ft(h);if(process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
1760
1760
  [Doubao Stream Error]`),console.log("Message:",h.message),console.log("Status:",h.response?.status),console.log("Error Details:",g||"none"),console.log("Retryable:",f.retryable)),g&&(f.message=`${h.message}
1761
- ${g}`),ge.llmError("doubao-responses",h),f.retryable&&p<d){p++;let b=h.response?.headers?.["retry-after"],y=Ht(b),w=os(y,p,this.retryConfig);console.log(`[Doubao] Stream failed (${f.code}), reconnecting in ${nt(w)} (${p}/${d})...`),yield {choices:[],type:"stream_retry",error:f.message,errorCode:f.code,attempt:p,maxRetries:d,delayMs:w};try{await Is(w,t.signal);}catch(C){throw C?.name==="AbortError",C}continue}throw f}}getResponseId(e){return e?this.sessionResponseIds.get(e)||null:this.lastResponseId}setResponseId(e,t){this.lastResponseId=e,t&&this.sessionResponseIds.set(t,e);}clearSession(e){e?this.sessionResponseIds.delete(e):this.lastResponseId=null;}setThinking(e){this.thinking=e;}setCaching(e){this.caching=e;}buildPayload(e,t){let {model:s,tools:n,temperature:r,structuredOutput:i,maxInputTokens:o,previousResponseId:l}=t,c=this.convertToDoubaoInput(e,l);this.extractSystemInstructions(e);let d={model:s,input:c,stream:true,temperature:r};return l&&(d.previous_response_id=l),this.thinking&&(d.thinking=this.thinking),this.reasoning&&(d.reasoning=this.reasoning),n&&n.length>0&&(d.tools=n.map(p=>({type:"function",name:p.name,description:p.description,parameters:p.parameters})),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[Doubao] Added ${d.tools.length} tools`)),i&&(d.text={format:{type:"json_schema",name:i.name,schema:i.schema}}),d}extractSystemInstructions(e){let t=e.filter(s=>s.role==="system").map(s=>me(s.content).trim()).filter(s=>s.length>0);return t.length>0?t.join(`
1761
+ ${g}`),ge.llmError("doubao-responses",h),f.retryable&&p<d){p++;let b=h.response?.headers?.["retry-after"],y=Ht(b),w=os(y,p,this.retryConfig);console.log(`[Doubao] Stream failed (${f.code}), reconnecting in ${nt(w)} (${p}/${d})...`),yield {choices:[],type:"stream_retry",error:f.message,errorCode:f.code,attempt:p,maxRetries:d,delayMs:w};try{await Ms(w,t.signal);}catch(C){throw C?.name==="AbortError",C}continue}throw f}}getResponseId(e){return e?this.sessionResponseIds.get(e)||null:this.lastResponseId}setResponseId(e,t){this.lastResponseId=e,t&&this.sessionResponseIds.set(t,e);}clearSession(e){e?this.sessionResponseIds.delete(e):this.lastResponseId=null;}setThinking(e){this.thinking=e;}setCaching(e){this.caching=e;}buildPayload(e,t){let {model:s,tools:n,temperature:r,structuredOutput:i,maxInputTokens:o,previousResponseId:l}=t,c=this.convertToDoubaoInput(e,l);this.extractSystemInstructions(e);let d={model:s,input:c,stream:true,temperature:r};return l&&(d.previous_response_id=l),this.thinking&&(d.thinking=this.thinking),this.reasoning&&(d.reasoning=this.reasoning),n&&n.length>0&&(d.tools=n.map(p=>({type:"function",name:p.name,description:p.description,parameters:p.parameters})),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[Doubao] Added ${d.tools.length} tools`)),i&&(d.text={format:{type:"json_schema",name:i.name,schema:i.schema}}),d}extractSystemInstructions(e){let t=e.filter(s=>s.role==="system").map(s=>me(s.content).trim()).filter(s=>s.length>0);return t.length>0?t.join(`
1762
1762
 
1763
1763
  `):void 0}convertToDoubaoInput(e,t){let s=new Map;if(!e.some(i=>i.role==="tool"||i.role==="assistant"&&Array.isArray(i.tool_calls)&&i.tool_calls.length>0))return e.map(i=>({role:i.role,content:me(i.content)}));let r=e.filter(i=>i.role!=="system");if(t){let i=[],o=false;for(let l=r.length-1;l>=0;l--){let c=r[l];if(c.role==="user"&&!o)i.unshift(...this.convertMessageToInputItems(c,s)),o=true;else if(c.role==="tool"&&o)i.unshift(...this.convertMessageToInputItems(c,s));else if(o)break}return i}return r.flatMap(i=>this.convertMessageToInputItems(i,s)).filter(i=>i!==null)}convertMessageToInputItems(e,t){if(e.role==="assistant"){let n=[],r=me(e.content);if(r.trim().length>0&&n.push({type:"message",role:"assistant",status:"completed",content:[{type:"input_text",text:r}]}),Array.isArray(e.tool_calls)&&e.tool_calls.length>0)for(let i of e.tool_calls){let o=this.normalizeCallId(i.id,t);n.push({type:"function_call",id:o,call_id:o,name:i.function.name,arguments:i.function.arguments||"",status:"completed"});}return n}if(e.role==="tool"){let n=this.normalizeCallId(e.tool_call_id||e.name,t),r=me(e.content),i=Cw(r);return [{type:"function_call_output",call_id:n,output:i}]}if(Array.isArray(e.content)){let n=[];for(let r of e.content)r.type==="text"&&r.text.trim()?n.push({type:"input_text",text:r.text}):r.type==="image_url"&&n.push({type:"input_image",image_url:r.image_url.url});return n.length===0?[]:[{type:"message",role:"user",content:n}]}let s=me(e.content);return !s||s.trim().length===0?[]:[{type:"message",role:"user",content:[{type:"input_text",text:s}]}]}normalizeCallId(e,t){if(e&&t.has(e))return t.get(e);let s;return e?s=e.startsWith("fc_")?e:`fc_${e}`:s=`fc_${Math.random().toString(36).slice(2,10)}`,e?t.set(e,s):t.set(s,s),s}async*parseStreamResponse(e){let t="",s=new Map,n=0,r=null,i=null,o=false,l=false,c,u=p=>{let h={...p};return l||(h.role="assistant",l=true),{id:c,choices:[{index:0,delta:h}]}};for await(let p of e){t+=p.toString();let h=t.split(`
1764
1764
  `);t=h.pop()||"";for(let g of h){let f=g.trim();if(!f||!f.startsWith("data: "))continue;let b=f.slice(6);if(b==="[DONE]"){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Doubao Stream] Received [DONE]");continue}let y;try{y=JSON.parse(b);}catch{process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Doubao Stream] Invalid JSON:",b);continue}switch(process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Doubao Stream Event]",y.type,JSON.stringify(y,null,2).slice(0,200)),y.type){case "response.created":case "response.in_progress":y.response?.id&&(c=y.response.id);break;case "response.output_text.delta":{let w=typeof y.delta=="string"?y.delta:"";if(!w)break;o=true,yield u({content:w});break}case "response.reasoning_summary_text.delta":{let w=typeof y.delta=="string"?y.delta:"";if(!w)break;o=true,yield u({reasoning_content:w});break}case "response.reasoning_summary_part.added":case "response.reasoning_summary_part.done":break;case "response.output_item.added":{if(y.item?.type==="function_call"){let w=y.item,C=w.id||`item_${y.output_index}`,S={id:w.call_id||w.id||`call_${Date.now()}_${n}`,name:w.name,index:n++,arguments:""};s.set(C,S),o=true,yield u({tool_calls:[{index:S.index,id:S.id,type:"function",function:{name:S.name}}]});}else if(y.item?.type==="reasoning"){let w=y.item;if(w.summary?.length>0){let C=w.summary.map(S=>S.text).join(`
@@ -1812,7 +1812,7 @@ ${t.join(`
1812
1812
  `)}`,lines:t.length}}async function Bl(a){let{session:e,profile:t,llmProvider:s,model:n,onProgress:r,timeout:i=6e4,signal:o}=a,l=a.tailTokenBudget??t.tailTokenBudget??2e4;if(!l||l<=0)return null;r?.("analyzing","Analyzing conversation history...");let c=await e.getTimeline(),u=c.map((D,G)=>({entry:D,index:G})).filter(({entry:D})=>D.item.type==="message");if(u.length===0)return null;u.filter(({entry:D})=>D.item.data.role==="system");let p=u.filter(({entry:D})=>D.item.data.role!=="system");if(p.length===0)return null;let h=0,g=p.length;for(let D=p.length-1;D>=0;D--){let G=p[D].entry.item.data;if(h+=Er(G),h>=l){g=D;break}}if(g>=p.length){if(p.length<=2)return null;g=Math.floor(p.length/2);}let f=p.slice(0,g).map(({entry:D})=>D.item.data);if(f.length===0)return null;let b={userTokens:0,assistantTokens:0,toolTokens:0,totalTokens:0};for(let D of f){let G=Er(D);D.role==="user"?b.userTokens+=G:D.role==="assistant"?b.assistantTokens+=G:D.role==="tool"&&(b.toolTokens+=G),b.totalTokens+=G;}let y=p.slice(g).map(({entry:D})=>D.item.data),w={userTokens:0,assistantTokens:0,toolTokens:0,totalTokens:0};for(let D of y){let G=Er(D);D.role==="user"?w.userTokens+=G:D.role==="assistant"?w.assistantTokens+=G:D.role==="tool"&&(w.toolTokens+=G),w.totalTokens+=G;}let C=b.totalTokens;r?.("summarizing",`Summarizing ${f.length} messages with AI...`);let S=_w(f),T=S==="zh"?Tw:xw,_=Rw(f),M,F;try{let D=new AbortController,G=setTimeout(()=>D.abort(),i),q=o?AbortSignal.any([o,D.signal]):D.signal;try{let oe=await s.chat([{role:"system",content:T},{role:"user",content:_}],{model:n,temperature:.3,signal:q});clearTimeout(G),M=me(oe.choices[0]?.message?.content)||"",F=oe.usage?.total_tokens;}catch(oe){throw clearTimeout(G),oe?.name==="AbortError"||oe?.code==="ABORT_ERR"?console.warn("[SmartCompact] LLM call timed out or was cancelled, falling back to lightweight"):console.error("[SmartCompact] LLM call failed:",oe.message),oe}if(!M.trim()){console.warn("[SmartCompact] LLM returned empty summary, falling back to lightweight");let{summary:oe}=Fl(f,$l);M=oe;}}catch(D){console.error("[SmartCompact] LLM call failed, falling back to lightweight:",D.message);let{summary:G}=Fl(f,$l);M=G;}r?.("saving","Saving compacted history...");let R=`${S==="zh"?"# \u5BF9\u8BDD\u5386\u53F2\u6458\u8981\uFF08AI \u751F\u6210\uFF09":"# Conversation Summary (AI Generated)"}
1813
1813
 
1814
1814
  ${M}`,j=u.length-f.length,v=u[0]?.entry.timestamp??Date.now(),E={item:{type:"message",data:{role:"user",content:R,name:"SmartCompactSummary"}},timestamp:v,seq:0},O={item:{type:"compacted",data:{summary:jl(M,2e3),originalCount:f.length,compactedAt:new Date().toISOString(),method:"smart",llmTokensUsed:F}},timestamp:v,seq:0},I=[],A=false,L=new Set(p.slice(0,g).map(({entry:D})=>D));for(let D of c){if(D.item.type!=="message"){I.push({...D});continue}if(D.item.data.role==="system"){I.push({...D});continue}L.has(D)?A||(I.push({...E}),I.push({...O}),A=true):I.push({...D});}if(!A)return null;let $=I.map((D,G)=>({item:D.item,timestamp:D.timestamp??Date.now(),seq:G}));await e.replaceTimeline($);let P=Er({content:R}),N={before:b,after:{userTokens:w.userTokens,assistantTokens:w.assistantTokens,toolTokens:w.toolTokens,summaryTokens:P,totalTokens:w.totalTokens+P},saved:{userTokens:b.userTokens,assistantTokens:b.assistantTokens,toolTokens:b.toolTokens,totalTokens:b.totalTokens-P}};return {removedMessages:f.length,keptMessages:j,summaryText:R,estimatedTokensSaved:C,llmTokensUsed:F,detailedStats:N}}async function tm(a){let{session:e,profile:t}=a,s=a.tailTokenBudget??t.tailTokenBudget??2e4;if(!s||s<=0)return null;let n=await e.getTimeline(),r=n.map((T,_)=>({entry:T,index:_})).filter(({entry:T})=>T.item.type==="message");if(r.length===0)return null;r.filter(({entry:T})=>T.item.data.role==="system");let o=r.filter(({entry:T})=>T.item.data.role!=="system");if(o.length===0)return null;let l=0,c=o.length;for(let T=o.length-1;T>=0;T--){let _=o[T].entry.item.data;if(l+=Er(_),l>=s){c=T;break}}if(c>=o.length){if(o.length<=2)return null;c=Math.floor(o.length/2);}let u=o.slice(0,c).map(({entry:T})=>T.item.data);if(u.length===0)return null;let{summary:d,lines:p}=Fl(u,a.summaryHeader??$l);if(!d.trim())return null;let h=o.length-u.length,g=o[0]?.entry.timestamp??Date.now(),f={item:{type:"message",data:{role:"user",content:d,name:"CompatSummary"}},timestamp:g,seq:0},b={item:{type:"compacted",data:{summary:jl(d,2e3),originalCount:u.length,compactedAt:new Date().toISOString()}},timestamp:g,seq:0},y=[],w=false,C=new Set(o.slice(0,c).map(({entry:T})=>T));for(let T of n){if(T.item.type!=="message"){y.push({...T});continue}if(T.item.data.role==="system"){y.push({...T});continue}C.has(T)?w||(y.push({...f}),y.push({...b}),w=true):y.push({...T});}if(!w)return null;let S=y.map((T,_)=>({item:T.item,timestamp:T.timestamp??Date.now(),seq:_}));return await e.replaceTimeline(S),{removedMessages:u.length,keptMessages:h,summaryText:d,summaryLines:p}}function sm(a){if(!a.startsWith("mcp__"))return null;let e=a.split("__");if(e.length<3)return null;let t=e[1],s=e.slice(2).join("__");return !t||!s?null:{serverId:t,toolName:s}}var co=class{extractFromAssistantMessage(e,t){if(!e||e.length===0)return;let s=[/I(?:'ll| will) (\w+.*?) to (.*?)(?:\.|$)/i,/Let me (\w+.*?) to (.*?)(?:\.|$)/i,/(?:I'm|I am) going to (\w+.*?) to (.*?)(?:\.|$)/i,/(?:I'm|I am) (\w+ing.*?) to (.*?)(?:\.|$)/i,/To (.*?)[,,] I(?:'ll| will) (\w+.*?)(?:\.|$)/i,/(?:First|Now|Next|Then)[,,] (?:I'll |I will |let me )?(\w+.*?)(?:\.|$)/i,/(?:我将|我会|让我)([^。,,]+)(?:来|以便|用于)([^。,,]+)/,/(?:首先|现在|接下来|然后)[,,](?:我将|我会|让我)?([^。,,]+)/];for(let i of s){let o=e.match(i);if(o){let l=o[2]||o[1];if(l&&l.length>0&&l.length<200)return l.trim()}}let n=t.toLowerCase(),r=e.split(/[.。!!??]/);for(let i of r)if(i.toLowerCase().includes(n)||i.toLowerCase().includes("read")||i.toLowerCase().includes("search")||i.toLowerCase().includes("file")){let o=i.trim();if(o.length>10&&o.length<200)return o}}extractActionFromToolName(e){return {readfile:"read",write_file:"write",create_file:"create",edit_file:"edit",Edit:"edit",search:"search",list_directory:"list",LS:"list",Glob:"find",find_files:"find",Execute:"execute",execute:"execute"}[e]||e.toLowerCase()}},uo=class{generateEquivalentCommand(e,t){switch(e){case "search":return this.generateSearchCommand(t);case "Glob":case "find_files":return this.generateFindCommand(t);case "Execute":case "execute":return this.generateExecuteCommand(t);case "readfile":return this.generateReadCommand(t);case "list_directory":case "LS":return this.generateLsCommand(t);case "write_file":case "create_file":return this.generateWriteCommand(t);default:return}}generateSearchCommand(e){let t="rg";e.case_insensitive&&(t+=" -i"),e.line_numbers&&(t+=" -n"),e.context_lines?t+=` -C ${e.context_lines}`:e.context?t+=` -C ${e.context}`:(e.context_before&&(t+=` -B ${e.context_before}`),e.context_after&&(t+=` -A ${e.context_after}`));let s=e.pattern||"";t+=` "${this.escapeShellArg(s)}"`;let n=e.path||e.directory||".";return t+=` ${this.escapeShellPath(n)}`,e.type&&(t+=` --type=${e.type}`),e.file_pattern?t+=` -g "${this.escapeShellArg(e.file_pattern)}"`:e.glob_pattern&&(t+=` -g "${this.escapeShellArg(e.glob_pattern)}"`),t}generateFindCommand(e){let t="find",s=e.folder||e.path||".";if(t+=` ${this.escapeShellPath(s)}`,e.patterns&&Array.isArray(e.patterns)&&e.patterns.length>0)if(e.patterns.length===1)t+=` -name "${this.escapeShellArg(e.patterns[0])}"`;else {let n=e.patterns.map(r=>`-name "${this.escapeShellArg(r)}"`).join(" -o ");t+=` \\( ${n} \\)`;}return e.excludePatterns&&Array.isArray(e.excludePatterns)&&e.excludePatterns.forEach(n=>{t+=` ! -path "${this.escapeShellArg(n)}"`;}),e.maxDepth&&(t+=` -maxdepth ${e.maxDepth}`),e.type==="f"?t+=" -type f":e.type==="d"&&(t+=" -type d"),t}generateExecuteCommand(e){return e.command||""}generateReadCommand(e){let t=e.path||e.file_path||e.filename||"";if(e.start_line&&e.num_lines){let s=e.start_line+e.num_lines-1;return `sed -n '${e.start_line},${s}p' ${this.escapeShellPath(t)}`}return e.num_lines&&!e.start_line?`head -n ${e.num_lines} ${this.escapeShellPath(t)}`:`cat ${this.escapeShellPath(t)}`}generateLsCommand(e){let t="ls";(e.all||e.show_hidden)&&(t+=" -a"),(e.long||e.detailed)&&(t+=" -l"),t.includes("-")||(t+=" -la");let s=e.path||e.directory||e.directory_path||".";return t+=` ${this.escapeShellPath(s)}`,t}generateWriteCommand(e){let t=e.path||e.file_path||e.filename||"",s=e.content||"";return s.length<100&&!s.includes(`
1815
- `)?`echo "${this.escapeShellArg(s)}" > ${this.escapeShellPath(t)}`:`# Use editor to create ${t}`}escapeShellArg(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}escapeShellPath(e){return /[\s()[\]{}$`!*?<>|&;]/.test(e)?`"${this.escapeShellArg(e)}"`:e}};function Ls(a,e){let t=["path","file_path","filePath","filename","directory","folder","dir","file","output_path","input_path"];for(let s of t)if(e[s]&&typeof e[s]=="string")return e[s];switch(a){case "Execute":case "execute":if(e.command&&typeof e.command=="string"){let n=e.command,r=n.match(/(?:^|\s)([./~][\w/.-]+\.\w+)(?:\s|$)/);return r?r[1]:n.substring(0,50)+(n.length>50?"...":"")}break;case "search":return e.path||e.directory||".";case "Glob":case "find_files":let s=e.folder||e.path||".";return e.patterns&&Array.isArray(e.patterns)?`${s} (${e.patterns.join(", ")})`:s;case "read_multiple_files":if(e.files&&Array.isArray(e.files))return e.files.length>1?`${e.files.length} files`:e.files[0];break}}function nm(a,e){let t=sm(a);if(t)return `MCP ${t.serverId}/${t.toolName}`;switch(a){case "readfile":let s=Ls(a,e);return s?`Reading ${s}`:"Reading file";case "write_file":case "create_file":let n=Ls(a,e);return n?`Writing ${n}`:"Writing file";case "edit_file":case "Edit":let r=Ls(a,e);return r?`Editing ${r}`:"Editing file";case "search":let i=e.pattern||e.query;return i?`Searching for "${i}"`:"Searching code";case "list_directory":case "LS":return `Listing ${Ls(a,e)||"."}`;case "Glob":case "find_files":return e.patterns&&Array.isArray(e.patterns)?`Finding files: ${e.patterns.join(", ")}`:"Finding files";case "Execute":case "execute":let l=e.command||"";return l.length>60?`Running: ${l.substring(0,60)}...`:`Running: ${l}`;case "read_multiple_files":return e.files&&Array.isArray(e.files)?`Reading ${e.files.length} files`:"Reading multiple files";default:return `Executing ${a}`}}var po=class{batchTimeWindow;activeBatches=new Map;pendingCalls=new Map;batchableTools=new Set(["readfile","write_file","create_file","list_directory","LS","Glob","find_files","read_multiple_files"]);constructor(e=200){this.batchTimeWindow=e;}detectBatch(e,t,s,n,r){if(!this.isBatchable(t))return {type:"single",merge:false};let i=this.pendingCalls.get(t)||[];if(i.length===0)return this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:s,startTime:r,args:n}]),{type:"single",merge:false};let o=i[i.length-1];if(r-o.startTime>this.batchTimeWindow)return this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:s,startTime:r,args:n}]),{type:"single",merge:false};if(i.some(u=>u.targetPath===s))return {type:"single",merge:false};if(i.length===1){let u=this.createBatch(o,e,s,r);return i.push({toolId:e,toolName:t,targetPath:s,startTime:r,args:n}),{type:"batch",merge:false,batchId:u,shouldCreateBatch:true}}else {let u=this.findActiveBatch(t);return u?(i.push({toolId:e,toolName:t,targetPath:s,startTime:r,args:n}),this.updateBatch(u,s,r),{type:"batch",merge:true,batchId:u}):(this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:s,startTime:r,args:n}]),{type:"single",merge:false})}}recordCompletion(e,t){let s=this.findActiveBatch(e);if(s){let n=this.activeBatches.get(s);n&&(n.completed++,n.completed>=n.total&&this.completeBatch(s));}}getBatchInfo(e){return this.activeBatches.get(e)}isBatchable(e){return this.batchableTools.has(e)}createBatch(e,t,s,n){let r=`batch-${e.toolName}-${n}`;return this.activeBatches.set(r,{batchId:r,toolName:e.toolName,targets:[e.targetPath,s],startTime:e.startTime,lastCallTime:n,completed:0,total:2}),r}updateBatch(e,t,s){let n=this.activeBatches.get(e);n&&(n.targets.push(t),n.total++,n.lastCallTime=s);}findActiveBatch(e){for(let[t,s]of this.activeBatches.entries())if(s.toolName===e)return t}completeBatch(e){this.activeBatches.delete(e);let t=this.activeBatches.get(e);t&&this.pendingCalls.delete(t.toolName);}cleanupExpiredBatches(e){let t=this.batchTimeWindow*5,s=[];this.activeBatches.forEach((r,i)=>{e-r.lastCallTime>t&&s.push(i);}),s.forEach(r=>this.completeBatch(r));let n=[];this.pendingCalls.forEach((r,i)=>{if(r.length>0){let o=r[r.length-1];e-o.startTime>t&&n.push(i);}}),n.forEach(r=>this.pendingCalls.delete(r));}reset(){this.activeBatches.clear(),this.pendingCalls.clear();}getStats(){let e=[];return this.activeBatches.forEach((t,s)=>{e.push({batchId:s,toolName:t.toolName,total:t.total,completed:t.completed});}),{activeBatches:this.activeBatches.size,pendingCalls:this.pendingCalls.size,batches:e}}};W();var Ew={default:["Thinking...","Processing...","Analyzing...","Pondering...","Contemplating..."]};var mo={};function Iw(a,e,t=true){mo[e]||(mo[e]=0);let s=mo[e]%a.length,n=a[s];return t&&(mo[e]=(s+1)%a.length),n}function rm(){let a=Ew.default;return Iw(a,"default")}function im(a){if(!a||a.trim().length===0)return null;let e=a.trim();if(!e.endsWith("}")){let l=e+"}";try{return JSON.parse(l),console.log("[JsonRepair] Fixed by adding closing }"),l}catch{}}let t=e.replace(/,\s*$/,"");if(!t.endsWith("}")){let l=t+"}";try{return JSON.parse(l),console.log("[JsonRepair] Fixed by removing trailing comma and adding }"),l}catch{}}if(e.lastIndexOf('"')>0){let l=0,c=false;for(let u=0;u<e.length;u++){if(c){c=false;continue}if(e[u]==="\\"){c=true;continue}e[u]==='"'&&l++;}if(l%2===1){let u=e+'"}';try{return JSON.parse(u),console.log("[JsonRepair] Fixed by closing unclosed string"),u}catch{}}}let n=0,r=0,i=false,o=false;for(let l of e){if(o){o=false;continue}if(l==="\\"){o=true;continue}if(l==='"'){i=!i;continue}i||(l==="{"?n++:l==="}"?n--:l==="["?r++:l==="]"&&r--);}for(i&&(e+='"');r>0;)e+="]",r--;for(;n>0;)e+="}",n--;try{return JSON.parse(e),console.log("[JsonRepair] Fixed by force-closing structures"),e}catch{return null}}function om(a,e){if(!e||e.trim().length===0)return {isTruncated:false};if(!e.trim().endsWith("}"))return {isTruncated:true,reason:"JSON structure incomplete - missing closing brace"};if(a==="write_file"||a==="edit_file"){if(!e.includes('"content"')&&!e.includes('"new_string"'))return {isTruncated:true,reason:"File content field is missing - likely truncated during streaming"};let s=e.match(/"content"\s*:\s*"([^]*)/);if(s){let n=s[1],r=0,i=false;for(let o of n){if(i){i=false;continue}if(o==="\\"){i=true;continue}if(o==='"'){r++;break}}if(r===0)return {isTruncated:true,reason:"Content string is unclosed - truncated during streaming"}}}return {isTruncated:false}}function am(a,e,t){let s=vp(a,e,t),n=Wi(s);return {success:false,error:s.code,code:s.code,category:s.category,message:s.message,suggestion:n,retryable:s.retryable,receivedArgs:e?.substring(0,500)}}var go=class{state="idle";lastStatusKey="";lastStatusAt=0;shouldEmit(e){if(e.type==="status"){let t=e.timestamp??Date.now(),s=`${e.status}:${e.message}`;if(s===this.lastStatusKey&&t-this.lastStatusAt<200)return false;this.lastStatusKey=s,this.lastStatusAt=t;}return this.transition(e),true}getState(){return this.state}transition(e){switch(e.type){case "thinking":case "reasoning":case "reasoning_complete":case "text":this.state="thinking";return;case "tool_call_start":this.state="tool_running";return;case "tool_call_end":case "tool_output":this.state="thinking";return;case "status":e.status==="tool_call"?this.state="tool_running":e.status==="thinking"?this.state="thinking":e.status==="complete"?this.state="completed":e.status==="error"&&(this.state="error");return;case "run_result":this.state="completed";return;case "error":case "error_classified":this.state="error";return;default:return}}};var cm=12e3,ho=class{runner;memory;sessionManager;sessionSync;session;sessionEnabled;memoryPressure;compatProfile;workDir;model;systemPrompt;sandboxSetter;llmProvider;sessionSeed;sessionTotalInputTokens=0;sessionTotalOutputTokens=0;lastMemoryPressureState="unknown";autoCompactionInProgress=false;isRunning=false;shouldInterrupt=false;abortController=null;interruptResolver=null;interruptPromise=null;compressionMode="sync";eventEmitter=new EventEmitter;eventSequence=0;hostStateMachine=new go;descriptionExtractor=new co;commandGenerator=new uo;lastAssistantMessage="";batchDetector=new po;toolCallIdCounter=0;recentToolCalls=new Map;currentTaskMetadata;pendingInjectedMessages=[];constructor(e){this.runner=e.runner,this.memory=e.memory,this.sessionManager=e.sessionManager,this.sessionSync=e.sessionSync,this.session=e.session,this.sessionEnabled=e.sessionEnabled??true,this.workDir=se__default.resolve(e.workDir),this.model=e.model,this.systemPrompt=e.systemPrompt,this.memoryPressure=e.memoryPressure,this.compatProfile=e.compatProfile,this.sandboxSetter=e.setSandboxMode,this.llmProvider=e.llmProvider,this.sessionSeed=randomBytes(16).toString("hex"),this.syncWorkspaceEnv(),this.applyAnthropicSessionUserId();}on(e){return this.eventEmitter.on("event",e),()=>this.eventEmitter.off("event",e)}setWorkDir(e){this.workDir=se__default.resolve(e),this.syncWorkspaceEnv();}setSession(e,t){this.session=e||void 0,this.sessionSync=t,this.applyAnthropicSessionUserId();}applyAnthropicSessionUserId(){let t=this.llmProvider?.getProvider?.();if(!t||typeof t.setUserId!="function")return;let s=this.session?.sessionId,n=Iu(s,this.sessionSeed);t.setUserId(n);}interrupt(){this.shouldInterrupt=true,this.abortController&&this.abortController.abort(),this.interruptResolver&&this.interruptResolver();}createInterruptPromise(){return this.interruptPromise?this.interruptPromise:(this.interruptPromise=new Promise(e=>{this.interruptResolver=()=>e({interrupted:true});}),this.interruptPromise)}clearInterruptPromise(){this.interruptResolver=null,this.interruptPromise=null;}buildToolOutputSummary(e,t,s,n,r,i){if(!i)return;let o=s,l="",c="",u=s.trim();if(u.startsWith("{")&&u.endsWith("}"))try{let g=JSON.parse(u);g&&typeof g=="object"&&(typeof g.message=="string"&&(c=g.message),typeof g.summary=="string"&&(l=g.summary),typeof g.type=="string"&&typeof g.content=="string"&&(o=g.content));}catch{}let d=r||t?.path||t?.file_path||t?.filePath||"",p=(g,f=60)=>g.length>f?g.slice(0,f-1)+"\u2026":g,h=o?o.split(`
1815
+ `)?`echo "${this.escapeShellArg(s)}" > ${this.escapeShellPath(t)}`:`# Use editor to create ${t}`}escapeShellArg(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}escapeShellPath(e){return /[\s()[\]{}$`!*?<>|&;]/.test(e)?`"${this.escapeShellArg(e)}"`:e}};function Ns(a,e){let t=["path","file_path","filePath","filename","directory","folder","dir","file","output_path","input_path"];for(let s of t)if(e[s]&&typeof e[s]=="string")return e[s];switch(a){case "Execute":case "execute":if(e.command&&typeof e.command=="string"){let n=e.command,r=n.match(/(?:^|\s)([./~][\w/.-]+\.\w+)(?:\s|$)/);return r?r[1]:n.substring(0,50)+(n.length>50?"...":"")}break;case "search":return e.path||e.directory||".";case "Glob":case "find_files":let s=e.folder||e.path||".";return e.patterns&&Array.isArray(e.patterns)?`${s} (${e.patterns.join(", ")})`:s;case "read_multiple_files":if(e.files&&Array.isArray(e.files))return e.files.length>1?`${e.files.length} files`:e.files[0];break}}function nm(a,e){let t=sm(a);if(t)return `MCP ${t.serverId}/${t.toolName}`;switch(a){case "readfile":let s=Ns(a,e);return s?`Reading ${s}`:"Reading file";case "write_file":case "create_file":let n=Ns(a,e);return n?`Writing ${n}`:"Writing file";case "edit_file":case "Edit":let r=Ns(a,e);return r?`Editing ${r}`:"Editing file";case "search":let i=e.pattern||e.query;return i?`Searching for "${i}"`:"Searching code";case "list_directory":case "LS":return `Listing ${Ns(a,e)||"."}`;case "Glob":case "find_files":return e.patterns&&Array.isArray(e.patterns)?`Finding files: ${e.patterns.join(", ")}`:"Finding files";case "Execute":case "execute":let l=e.command||"";return l.length>60?`Running: ${l.substring(0,60)}...`:`Running: ${l}`;case "read_multiple_files":return e.files&&Array.isArray(e.files)?`Reading ${e.files.length} files`:"Reading multiple files";default:return `Executing ${a}`}}var po=class{batchTimeWindow;activeBatches=new Map;pendingCalls=new Map;batchableTools=new Set(["readfile","write_file","create_file","list_directory","LS","Glob","find_files","read_multiple_files"]);constructor(e=200){this.batchTimeWindow=e;}detectBatch(e,t,s,n,r){if(!this.isBatchable(t))return {type:"single",merge:false};let i=this.pendingCalls.get(t)||[];if(i.length===0)return this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:s,startTime:r,args:n}]),{type:"single",merge:false};let o=i[i.length-1];if(r-o.startTime>this.batchTimeWindow)return this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:s,startTime:r,args:n}]),{type:"single",merge:false};if(i.some(u=>u.targetPath===s))return {type:"single",merge:false};if(i.length===1){let u=this.createBatch(o,e,s,r);return i.push({toolId:e,toolName:t,targetPath:s,startTime:r,args:n}),{type:"batch",merge:false,batchId:u,shouldCreateBatch:true}}else {let u=this.findActiveBatch(t);return u?(i.push({toolId:e,toolName:t,targetPath:s,startTime:r,args:n}),this.updateBatch(u,s,r),{type:"batch",merge:true,batchId:u}):(this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:s,startTime:r,args:n}]),{type:"single",merge:false})}}recordCompletion(e,t){let s=this.findActiveBatch(e);if(s){let n=this.activeBatches.get(s);n&&(n.completed++,n.completed>=n.total&&this.completeBatch(s));}}getBatchInfo(e){return this.activeBatches.get(e)}isBatchable(e){return this.batchableTools.has(e)}createBatch(e,t,s,n){let r=`batch-${e.toolName}-${n}`;return this.activeBatches.set(r,{batchId:r,toolName:e.toolName,targets:[e.targetPath,s],startTime:e.startTime,lastCallTime:n,completed:0,total:2}),r}updateBatch(e,t,s){let n=this.activeBatches.get(e);n&&(n.targets.push(t),n.total++,n.lastCallTime=s);}findActiveBatch(e){for(let[t,s]of this.activeBatches.entries())if(s.toolName===e)return t}completeBatch(e){this.activeBatches.delete(e);let t=this.activeBatches.get(e);t&&this.pendingCalls.delete(t.toolName);}cleanupExpiredBatches(e){let t=this.batchTimeWindow*5,s=[];this.activeBatches.forEach((r,i)=>{e-r.lastCallTime>t&&s.push(i);}),s.forEach(r=>this.completeBatch(r));let n=[];this.pendingCalls.forEach((r,i)=>{if(r.length>0){let o=r[r.length-1];e-o.startTime>t&&n.push(i);}}),n.forEach(r=>this.pendingCalls.delete(r));}reset(){this.activeBatches.clear(),this.pendingCalls.clear();}getStats(){let e=[];return this.activeBatches.forEach((t,s)=>{e.push({batchId:s,toolName:t.toolName,total:t.total,completed:t.completed});}),{activeBatches:this.activeBatches.size,pendingCalls:this.pendingCalls.size,batches:e}}};W();var Ew={default:["Thinking...","Processing...","Analyzing...","Pondering...","Contemplating..."]};var mo={};function Iw(a,e,t=true){mo[e]||(mo[e]=0);let s=mo[e]%a.length,n=a[s];return t&&(mo[e]=(s+1)%a.length),n}function rm(){let a=Ew.default;return Iw(a,"default")}function im(a){if(!a||a.trim().length===0)return null;let e=a.trim();if(!e.endsWith("}")){let l=e+"}";try{return JSON.parse(l),console.log("[JsonRepair] Fixed by adding closing }"),l}catch{}}let t=e.replace(/,\s*$/,"");if(!t.endsWith("}")){let l=t+"}";try{return JSON.parse(l),console.log("[JsonRepair] Fixed by removing trailing comma and adding }"),l}catch{}}if(e.lastIndexOf('"')>0){let l=0,c=false;for(let u=0;u<e.length;u++){if(c){c=false;continue}if(e[u]==="\\"){c=true;continue}e[u]==='"'&&l++;}if(l%2===1){let u=e+'"}';try{return JSON.parse(u),console.log("[JsonRepair] Fixed by closing unclosed string"),u}catch{}}}let n=0,r=0,i=false,o=false;for(let l of e){if(o){o=false;continue}if(l==="\\"){o=true;continue}if(l==='"'){i=!i;continue}i||(l==="{"?n++:l==="}"?n--:l==="["?r++:l==="]"&&r--);}for(i&&(e+='"');r>0;)e+="]",r--;for(;n>0;)e+="}",n--;try{return JSON.parse(e),console.log("[JsonRepair] Fixed by force-closing structures"),e}catch{return null}}function om(a,e){if(!e||e.trim().length===0)return {isTruncated:false};if(!e.trim().endsWith("}"))return {isTruncated:true,reason:"JSON structure incomplete - missing closing brace"};if(a==="write_file"||a==="edit_file"){if(!e.includes('"content"')&&!e.includes('"new_string"'))return {isTruncated:true,reason:"File content field is missing - likely truncated during streaming"};let s=e.match(/"content"\s*:\s*"([^]*)/);if(s){let n=s[1],r=0,i=false;for(let o of n){if(i){i=false;continue}if(o==="\\"){i=true;continue}if(o==='"'){r++;break}}if(r===0)return {isTruncated:true,reason:"Content string is unclosed - truncated during streaming"}}}return {isTruncated:false}}function am(a,e,t){let s=vp(a,e,t),n=Wi(s);return {success:false,error:s.code,code:s.code,category:s.category,message:s.message,suggestion:n,retryable:s.retryable,receivedArgs:e?.substring(0,500)}}var go=class{state="idle";lastStatusKey="";lastStatusAt=0;shouldEmit(e){if(e.type==="status"){let t=e.timestamp??Date.now(),s=`${e.status}:${e.message}`;if(s===this.lastStatusKey&&t-this.lastStatusAt<200)return false;this.lastStatusKey=s,this.lastStatusAt=t;}return this.transition(e),true}getState(){return this.state}transition(e){switch(e.type){case "thinking":case "reasoning":case "reasoning_complete":case "text":this.state="thinking";return;case "tool_call_start":this.state="tool_running";return;case "tool_call_end":case "tool_output":this.state="thinking";return;case "status":e.status==="tool_call"?this.state="tool_running":e.status==="thinking"?this.state="thinking":e.status==="complete"?this.state="completed":e.status==="error"&&(this.state="error");return;case "run_result":this.state="completed";return;case "error":case "error_classified":this.state="error";return;default:return}}};var cm=12e3,ho=class{runner;memory;sessionManager;sessionSync;session;sessionEnabled;memoryPressure;compatProfile;workDir;model;systemPrompt;sandboxSetter;llmProvider;sessionSeed;sessionTotalInputTokens=0;sessionTotalOutputTokens=0;lastMemoryPressureState="unknown";autoCompactionInProgress=false;isRunning=false;shouldInterrupt=false;abortController=null;interruptResolver=null;interruptPromise=null;compressionMode="sync";eventEmitter=new EventEmitter;eventSequence=0;hostStateMachine=new go;descriptionExtractor=new co;commandGenerator=new uo;lastAssistantMessage="";batchDetector=new po;toolCallIdCounter=0;recentToolCalls=new Map;currentTaskMetadata;pendingInjectedMessages=[];constructor(e){this.runner=e.runner,this.memory=e.memory,this.sessionManager=e.sessionManager,this.sessionSync=e.sessionSync,this.session=e.session,this.sessionEnabled=e.sessionEnabled??true,this.workDir=se__default.resolve(e.workDir),this.model=e.model,this.systemPrompt=e.systemPrompt,this.memoryPressure=e.memoryPressure,this.compatProfile=e.compatProfile,this.sandboxSetter=e.setSandboxMode,this.llmProvider=e.llmProvider,this.sessionSeed=randomBytes(16).toString("hex"),this.syncWorkspaceEnv(),this.applyAnthropicSessionUserId();}on(e){return this.eventEmitter.on("event",e),()=>this.eventEmitter.off("event",e)}setWorkDir(e){this.workDir=se__default.resolve(e),this.syncWorkspaceEnv();}setSession(e,t){this.session=e||void 0,this.sessionSync=t,this.applyAnthropicSessionUserId();}applyAnthropicSessionUserId(){let t=this.llmProvider?.getProvider?.();if(!t||typeof t.setUserId!="function")return;let s=this.session?.sessionId,n=Iu(s,this.sessionSeed);t.setUserId(n);}interrupt(){this.shouldInterrupt=true,this.abortController&&this.abortController.abort(),this.interruptResolver&&this.interruptResolver();}createInterruptPromise(){return this.interruptPromise?this.interruptPromise:(this.interruptPromise=new Promise(e=>{this.interruptResolver=()=>e({interrupted:true});}),this.interruptPromise)}clearInterruptPromise(){this.interruptResolver=null,this.interruptPromise=null;}buildToolOutputSummary(e,t,s,n,r,i){if(!i)return;let o=s,l="",c="",u=s.trim();if(u.startsWith("{")&&u.endsWith("}"))try{let g=JSON.parse(u);g&&typeof g=="object"&&(typeof g.message=="string"&&(c=g.message),typeof g.summary=="string"&&(l=g.summary),typeof g.type=="string"&&typeof g.content=="string"&&(o=g.content));}catch{}let d=r||t?.path||t?.file_path||t?.filePath||"",p=(g,f=60)=>g.length>f?g.slice(0,f-1)+"\u2026":g,h=o?o.split(`
1816
1816
  `).length:0;switch(e){case "show_tree":case "smart_tree":case "list_directory":case "ls":{let g=t?.directory||d||".",f=(s.match(/\//g)||[]).length,b=h>1?h-1:0;return `${p(g)} \u2014 ${b} entries${f?`, ${f} dirs`:""}`}case "git_status":{let g=(o.match(/^\s*M /gm)||[]).length,f=(o.match(/^\s*A /gm)||[]).length,b=(o.match(/^\s*D /gm)||[]).length,y=(o.match(/^\?\? /gm)||[]).length,w=[];return g&&w.push(`${g} modified`),f&&w.push(`${f} added`),b&&w.push(`${b} deleted`),y&&w.push(`${y} untracked`),w.length?w.join(", "):l||"clean"}case "git_log":{let g=(o.match(/^commit /gm)||[]).length||Math.min(h,10);return l||`${g} commits`}case "git_diff":{let g=(o.match(/^\+[^+]/gm)||[]).length,f=(o.match(/^-[^-]/gm)||[]).length;return l||`+${g} -${f} lines`}case "git_commit":return p(l||o.trim().split(`
1817
1817
  `)[0]||"committed");case "git_blame":return l||`${h} lines`;case "git_branch":case "git_branch_list":{let g=o.split(`
1818
1818
  `).map(f=>f.trim()).find(f=>f.length>0);return p(g?g.replace(/^\*\s*/,""):l||"branch info")}case "readfile":case "Read":case "read_file":case "smart_read":case "read":return `${p(d)} \u2014 ${h} lines read`;case "search":case "Grep":case "grep":{let g=t?.pattern||t?.query||"",f=(s.match(/\n/g)||[]).length;return `"${p(g,30)}" \u2014 ${f} matches`}case "search_files":case "Glob":case "glob":case "find_files":{let g=t?.pattern||t?.glob||"",f=h;return `"${p(g,30)}" \u2014 ${f} files`}case "write_file":case "Write":case "edit_file":case "Edit":case "file_update":case "apply_patch":return `${p(d)} \u2713`;case "delete_file":return `deleted ${p(d)}`;case "rename_file":return `renamed \u2192 ${p(t?.new_path||t?.destination||"")}`;case "create_directory":return `created ${p(d||t?.directory||"")}`;case "command_exec":case "Bash":case "bash":case "shell":case "execute_command":case "execute_shell":{let g=t?.command||"",f=s.trim().split(`
@@ -1843,7 +1843,7 @@ ${s}`),s.trim()}extractImageUrls(e){return e?.attachments?.length?e.attachments.
1843
1843
  \u5F53\u524D\u4E0A\u4E0B\u6587: ${h.tokensUsed.toLocaleString()} / ${h.profile.contextWindow.toLocaleString()} tokens (${g}%)`;}}let d=(await i.getTimeline()).filter(h=>h.item.type==="message"),p=Bs(this.memory.getAll());this.emitEvent({type:"context_compaction",status:"completed",originalMessages:n,keptMessages:d.length,droppedMessages:l.removedMessages,compressedMessages:0,originalTokens:r.totalTokens,finalTokens:p.totalTokens,budgetTokens:t.profile.contextWindow||0,useLLM:!1,timestamp:Date.now()}),this.emitCompacting("\u2713 \u81EA\u52A8\u538B\u7F29\u5B8C\u6210",`\u6458\u8981 ${l.summaryLines} \u884C\uFF0C\u79FB\u9664 ${l.removedMessages} \u6761\u5386\u53F2\uFF0C\u4FDD\u7559 ${l.keptMessages} \u6761\u8FD1\u671F\u6D88\u606F\u3002${c}`),this.emitEvent({type:"status",status:"complete",message:"Compaction complete"});}}catch(i){let o=i?.message||String(i);this.emitLog("error","\u81EA\u52A8\u538B\u7F29\u5931\u8D25",`\u9519\u8BEF\u8BE6\u60C5: ${o}`),process.env.CLI_DEBUG==="1"&&m.error("[COMPACTION] Failed:",i);}finally{this.autoCompactionInProgress=false;}}async runTask(e,t){if(process.env.CLI_DEBUG==="1"&&(m.debug("TASK","========================================"),m.debug("TASK","=== runTask ENTRY ==="),m.debug("TASK",` userInput: "${e?.substring(0,50)}..."`),m.debug("TASK",` isRunning: ${this.isRunning}`),m.debug("TASK",` shouldInterrupt: ${this.shouldInterrupt}`),m.debug("TASK",` stdin.isPaused: ${process.stdin.isPaused?.()}`),m.debug("TASK",` stdin.destroyed: ${process.stdin.destroyed}`)),this.syncWorkspaceEnv(),!e.trim())throw new Error("Input is required");if(this.shouldInterrupt=false,this.isRunning=true,this.abortController=new AbortController,t?.abortSignal){let C=t.abortSignal;if(C.aborted)this.shouldInterrupt=true,this.abortController.abort();else {let S=()=>{this.shouldInterrupt=true,this.abortController?.abort();};C.addEventListener("abort",S,{once:true});}}let s=t?.metadata?.mode,n=this.runner.getMode(),r=s==="ask"&&n!=="ask";r&&this.runner.setMode("ask");let i=this.prepareTaskInput(e,t?.metadata),o=this.extractImageUrls(t?.metadata);if(this.currentTaskMetadata=t?.metadata,this.sessionSync&&this.sessionEnabled)try{let C=this.sessionSync.getTurnCount()+1,S=await this.sessionSync.createCheckpoint(`turn_${C}`);this.emitEvent({type:"checkpoint",id:S,auto:!0});}catch(C){m.error("TASK","\u68C0\u67E5\u70B9\u521B\u5EFA\u5931\u8D25\uFF01 \u4E8B\u4EF6\u53D1\u9001\u5931\u8D25\uFF01",C),console.error("Failed to create auto checkpoint",C);}this.emitEvent({type:"status",status:"thinking",message:"Starting..."});let l=Date.now(),c="",u=0,d=0,p=0,h="",g="",f="",b="",y=0,w=0;try{let C=this.abortController?.signal;process.env.CLI_DEBUG==="1"&&m.debug("TASK","=== \u5F00\u59CBagent loop \u5FAA\u73AF ===");let S=0,T=this.createInterruptPromise(),_=this.runner.run(i,o.length>0?o:void 0,C)[Symbol.asyncIterator]();for(;;){let R=_.next();R.catch(()=>{});let j=await Promise.race([R,T]);if("interrupted"in j){if(this.shouldInterrupt=!0,_.return)try{_.return(void 0)?.catch?.(()=>{});}catch{}break}if(j.done)break;let v=j.value;if(S++,process.env.CLI_DEBUG==="1"&&m.debug("TASK",` \u4E8B\u4EF6 #${S}: ${v.type}`),this.shouldInterrupt){process.env.CLI_DEBUG==="1"&&m.debug("TASK"," shouldInterrupt=true, \u9000\u51FAloop");break}switch(v.type){case "iteration_start":if(this.emitEvent({type:"text_complete"}),u=v.iteration||0,u>1){let A=this.processPendingInjectedMessages();A>0&&(m.info("INJECT",`\u2705 Processed ${A} injected messages at iteration ${u}`),this.emitEvent({type:"queued_messages_processed",count:A}));}if(this.emitEvent({type:"thinking",iteration:u,timestamp:Date.now()}),this.emitEvent({type:"status",status:"thinking",message:rm()}),w=0,this.memoryPressure){let A=this.memory.getMessagesForLLM();process.env.CLI_DEBUG&&(m.debug("CONTEXT",`\u8FED\u4EE3\u5F00\u59CB: \u77ED\u671F\u8BB0\u5FC6 \u6709 ${A.length} \u6D88\u606F`),A.forEach((L,$)=>{let P=typeof L.content=="string"?L.content.length:JSON.stringify(L.content).length;m.debug("CONTEXT",` [${$}] role=${L.role}, content_len=${P}`);}));}break;case "text_delta":if(v.delta){c+=v.delta,h+=v.delta,g+=v.delta;let A=Math.ceil(v.delta.length/4);w+=A,(v.delta.trim().length>0||v.delta.includes(`
1844
1844
  `))&&(this.emitEvent({type:"status",status:"thinking",message:"Generating response..."}),this.emitEvent({type:"text",delta:v.delta}));}break;case "reasoning_delta":v.delta&&this.emitEvent({type:"reasoning",delta:v.delta,timestamp:Date.now()});break;case "reasoning_complete":this.emitEvent({type:"reasoning_complete",timestamp:Date.now()});break;case "tool_call_start":d++,f="",y=0,b=v.name||"",this.emitEvent({type:"status",status:"tool_call",message:`Calling: ${v.name}`});break;case "tool_call_delta":if(v.arguments_delta){f+=v.arguments_delta,y+=v.arguments_delta.length;let A=Math.ceil(v.arguments_delta.length/4);if(w+=A,v.arguments_delta.trim().length>0&&this.emitEvent({type:"tool_call_delta",name:b||v.name||"unknown",argumentsDelta:v.arguments_delta}),y>1e3){let N=1-f.trim().length/y;N>.9&&(console.error(`[AgentHost] \u26A0\uFE0F Abnormal tool call: ${b} - ${(N*100).toFixed(1)}% whitespace (${y} bytes)`),this.emitLog("warn",`Model output abnormal: ${b} generating mostly whitespace content`));}if(b==="write_file"||b==="Write"||v.name==="write_file"||v.name==="Write"){let P=Math.floor(y/80),N=(y/1024).toFixed(1);this.emitEvent({type:"status",status:"tool_call",message:`\u26A1 Generating... ${N}KB (~${P} lines)`});try{let D=f.match(/"file_path"\s*:\s*"([^"]+)"/),G=f.match(/"content"\s*:\s*"/);if(D&&G){let q=D[1],oe=f.indexOf('"',G.index+9+1)+1;if(oe>0){let ue=f.substring(oe),ke=-1,z=0;for(let ne=0;ne<ue.length;ne++)if(ue[ne]==="\\")z++;else {if(ue[ne]==='"'&&z%2===0){ke=ne;break}z=0;}ke>0&&(ue=ue.substring(0,ke));let J=ue.replace(/\\n/g,`
1845
1845
  `).replace(/\\t/g," ").replace(/\\"/g,'"').replace(/\\\\/g,"\\"),ie=q.split(".").pop()||"",K={js:"javascript",ts:"typescript",tsx:"typescript",py:"python",html:"html",css:"css",json:"json",md:"markdown"},xe=J.split(`
1846
- `),fe=xe.length<=5;J.length>2e3&&(J=J.slice(-2e3)),fe?this.emitEvent({type:"file_stream",filePath:q,content:J,language:K[ie]||ie,description:h.trim()||"Generating code...",timestamp:Date.now()}):this.emitEvent({type:"status",status:"tool_call",message:`Writing ${q} (${xe.length} lines)...`});}}}catch{m.error("MK","\u4E0D\u5B8C\u6574\u7684json \u5904\u7406");}}}break;case "tool_call_done":{if(v.name&&v.arguments)try{let A=v.arguments.trim(),L=om(v.name,A);if(L.isTruncated){process.env.CLI_DEBUG_CONSOLE==="1"&&m.log("MK",`[AgentHost] \u26A0\uFE0F Truncation detected: ${L.reason}`);let K=im(A);if(K)process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[AgentHost] \u2705 JSON repaired successfully"),A=K;else throw new Error(`Tool arguments truncated: ${L.reason}`)}let $=A?JSON.parse(A):{};process.env.CLI_DEBUG_CONSOLE==="1"&&m.debug("TOOL",`\u2705 Tool call parsed: ${v.name}`,{argsLength:A.length});let P=v.name,N=$;v.name==="call_tool"&&$?.name&&(P=$.name,N=$.args||{},m.info("TOOL",`\u{1F500} call_tool unwrap: ${v.name} \u2192 ${P}`));let D=Ls(P,N),G=this.descriptionExtractor.extractFromAssistantMessage(h,P);G||(G=nm(P,N));let q=this.commandGenerator.generateEquivalentCommand(P,N),oe=v.id||`tool-${++this.toolCallIdCounter}-${Math.floor(Date.now())}`,ue=Date.now(),ke=this.batchDetector.detectBatch(oe,P,D||"",N,ue);this.recentToolCalls.set(oe,{toolId:oe,batchId:ke.batchId,targetPath:D,args:N,toolName:P});let z={targetPath:D,argsPreview:JSON.stringify(N).substring(0,200)};P==="search"&&N.pattern?z.pattern=N.pattern.substring(0,80):(P==="readfile"||P==="edit_file")&&N.path&&(z.file=N.path),m.info("TOOL",`\u{1F916} [AGENT] Call: ${P}`,z),this.emitEvent({type:"tool_call_start",name:P,args:N,targetPath:D,description:G,equivalentCommand:q,timestamp:ue+Math.random()*.1,toolId:oe,isBatch:ke.type==="batch",batchId:ke.batchId,viaCallTool:v.name==="call_tool"});let J=P==="write_file"||P==="Write",ie=N.file_path||N.filePath||N.path;J&&ie&&N.content&&(await this.emitFileStreamEvent(ie,N.content,h.trim()||void 0),h="");}catch(A){console.error("[AgentHost] \u274C Failed to parse tool arguments for:",v.name),console.error("[AgentHost] Error:",A.message),console.error("[AgentHost] Arguments length:",v.arguments?.length||0),process.env.CLI_DEBUG_CONSOLE==="1"&&(console.error("[AgentHost] First 200 chars:",v.arguments?.substring(0,200)||""),console.error("[AgentHost] Last 200 chars:",v.arguments?.substring(Math.max(0,(v.arguments?.length||0)-200))||""));let L=am(v.name,v.arguments||"",A),$=L.category==="tool_truncated"?`\u274C Tool ${v.name}: content truncated during streaming`:`\u274C Tool ${v.name}: ${L.code}`;this.emitEvent({type:"status",status:"error",message:$}),this.emitEvent({type:"tool_call_start",name:v.name,args:{_raw:v.arguments?.substring(0,500)||"",_error:L.code,_errorCategory:L.category,_errorMessage:L.message,_suggestion:L.suggestion,_retryable:L.retryable},timestamp:Date.now()});let P=v.id;P&&this.recentToolCalls.delete(P),this.emitEvent({type:"tool_output",name:v.name,output:JSON.stringify(L),success:!1,toolId:P});}break}case "tool_output":if(v.name&&v.output!==void 0){let A=typeof v.output=="string"?v.output:JSON.stringify(v.output),L=A.length,$=v.success??!0,P=A.slice(0,cm),N=A.length>cm;m.info("TOOL",`\u{1F916} [AGENT] Result: ${v.name} ${$?"\u2713":"\u2717"}`,{success:$,resultLength:L,outputString:A});let D=v.id,G=D?this.recentToolCalls.get(D):void 0,{batchId:q,targetPath:oe,args:ue}=G||{},ke=G?.toolName||v.name,z=ue||{},J=oe||Ls(ke,z)||(z&&typeof z.directory=="string"?z.directory:void 0),ie=this.buildToolOutputSummary(ke,z,A,L,J,$);if(m.info("TOOL",`\u{1F525} tool_output \u2192 emitting tool_call_end: realName=${ke} toolId=${D} summary=${ie?.substring(0,60)}`),$&&J&&this.batchDetector.recordCompletion(ke,J),this.emitEvent({type:"tool_call_end",name:ke,success:$,resultLength:L,timestamp:Date.now(),toolId:D,batchId:q,targetPath:J,summary:ie,output:P,outputTruncated:N,args:z}),ke==="write_file"&&v.success&&z?.file_path&&z?.content){try{let K=z.file_path,xe=z.content,ee=K.split(".").pop()?.toLowerCase()||"",fe={ts:"typescript",tsx:"tsx",js:"javascript",jsx:"jsx",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",kt:"kotlin",swift:"swift",c:"c",cpp:"cpp",h:"c",hpp:"cpp",css:"css",scss:"scss",less:"less",html:"html",vue:"vue",svelte:"svelte",json:"json",yaml:"yaml",yml:"yaml",md:"markdown",sql:"sql",sh:"bash"};this.emitEvent({type:"write_file_stream",filePath:K,content:xe,isComplete:!0,language:fe[ee]||ee,timestamp:Date.now()});}catch(K){m.error("TOOL","write_file_stream \u53D1\u9001\u5931\u8D25",K);}await this.handleWriteFile(z.file_path,z.content,void 0);}if(ke==="edit_file"&&v.success&&this.sessionSync&&this.sessionEnabled)try{let K=JSON.parse(A),xe=K.metadata?.edit_info||K.edit_info,ee=K.metadata?.hunks;if(m.info("TOOL","edit file\u7684\u7ED3\u679C "+K),m.info("TOOL","edit file\u7684editInfo "+xe),K.status==="success"&&xe){let fe=[];if(Array.isArray(ee)&&ee.length>0)for(let ne of ee)fe.push({type:"file_edit_snapshot",data:{filePath:K.file_path,oldString:ne.old_string,newString:ne.new_string,startLine:ne.start_line,oldLineCount:ne.old_line_count,newLineCount:ne.new_line_count,replaceAll:!1,replacementCount:1}});else fe.push({type:"file_edit_snapshot",data:{filePath:K.file_path,oldString:xe.old_string,newString:xe.new_string,startLine:xe.start_line,oldLineCount:xe.old_line_count,newLineCount:xe.new_line_count,replaceAll:(K.metadata?.replacements||K.replacements)>1,replacementCount:K.metadata?.replacements||K.replacements}});await this.sessionSync.getSession().addItems(fe);}}catch{m.error("TOOL","session\u7684edit file \u4FDD\u5B58\u5931\u8D25 ");}if(ke==="edit_file"&&v.success)try{let K=JSON.parse(A),xe=K.metadata?.edit_info||K.edit_info;if(K.status==="success"&&xe){let ee=Array.isArray(K.metadata?.hunks)?K.metadata.hunks.map(le=>({oldString:le.old_string,newString:le.new_string,startLine:le.start_line})):void 0,fe=K.file_path.split(".").pop()?.toLowerCase()||"",ne={ts:"typescript",tsx:"tsx",js:"javascript",jsx:"jsx",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",kt:"kotlin",swift:"swift",c:"c",cpp:"cpp",h:"c",hpp:"cpp",css:"css",scss:"scss",less:"less",html:"html",vue:"vue",svelte:"svelte",json:"json",yaml:"yaml",yml:"yaml",md:"markdown",sql:"sql",sh:"bash"};this.emitEvent({type:"edit_file_stream",filePath:K.file_path,oldString:xe.old_string,newString:xe.new_string,startLine:xe.start_line,hunks:ee,isComplete:!0,language:ne[fe]||fe,timestamp:Date.now()});}}catch{m.error("TOOL","edit file \u4FDD\u5B58\u5931\u8D25 ");}this.emitEvent({type:"tool_output",name:v.name,output:v.output,success:$,toolId:D});}break;case "token_usage":if(v.usage){p=v.usage.total_tokens;let A=v.usage.prompt_tokens||0,L=v.usage.completion_tokens||0,$=v.usage.prompt_tokens_details?.cached_tokens||0,P=v.usage.cache_read_input_tokens||0,N=v.usage.cache_creation_input_tokens||0,D=$||P||v.usage.cached_tokens||0,G=A+P+N+$;if(m.debug("CACHE","\u{1F525} Cache token calculation:"),m.debug("CACHE",` actualInputTokens=${A}`),m.debug("CACHE",` anthropicCacheReadTokens=${P}`),m.debug("CACHE",` anthropicCacheCreationTokens=${N}`),m.debug("CACHE",` openaiCachedTokens=${$}`),m.debug("CACHE",` fullContextInputTokens=${G}`),m.debug("CACHE",` formula: ${A} + ${P} + ${N} + ${$} = ${G}`),this.sessionTotalInputTokens+=G,this.sessionTotalOutputTokens+=L,process.env.CLI_DEBUG&&(m.debug("CONTEXT","token_usage event received:"),m.debug("CONTEXT",` actualInputTokens=${A}, actualOutputTokens=${L}`),m.debug("CONTEXT",` anthropicCacheReadTokens=${P}, openaiCachedTokens=${$}`),m.debug("CONTEXT",` anthropicCacheCreationTokens=${N}`),m.debug("CONTEXT",` fullContextInputTokens=${G}`),m.debug("CONTEXT",` sessionTotalInput=${this.sessionTotalInputTokens}, sessionTotalOutput=${this.sessionTotalOutputTokens}`),m.debug("CONTEXT",` memoryPressure initialized: ${!!this.memoryPressure}`)),this.memoryPressure){let q=this.memory.getMessagesForLLM(),oe=this.memoryPressure.estimateMessagesForDisplay(q);this.memoryPressure.recordCalibration(oe,A,P);let ue=this.memoryPressure.recordActualUsage(G,L,q.length);m.debug("SNAPSHOT","\u{1F525} Snapshot values:"),m.debug("SNAPSHOT",` fullContextInputTokens (passed to recordActualUsage)=${G}`),m.debug("SNAPSHOT",` snapshot.promptTokens (returned)=${ue.promptTokens}`),m.debug("SNAPSHOT",` snapshot.tokensUsed=${ue.tokensUsed}`),m.debug("SNAPSHOT",` snapshot.pressure=${ue.pressure}`),process.env.CLI_DEBUG&&(m.debug("CONTEXT","recordActualUsage snapshot:"),m.debug("CONTEXT",` tokensUsed=${ue.tokensUsed}, promptTokens=${ue.promptTokens}`),m.debug("CONTEXT",` completionTokens=${ue.completionTokens}, contextWindow=${ue.profile.contextWindow}`),m.debug("CONTEXT",` pressure=${ue.pressure}, state=${ue.state}`)),await this.handleMemorySnapshot(ue);}w=0,this.emitEvent({type:"token_usage",promptTokens:G,completionTokens:L,totalTokens:G+L,cachedTokens:D>0?D:void 0,openaiCachedTokens:$>0?$:void 0,anthropicCacheReadTokens:P>0?P:void 0,anthropicCacheCreationTokens:N>0?N:void 0,sessionPromptTokens:this.sessionTotalInputTokens,sessionCompletionTokens:this.sessionTotalOutputTokens});}break;case "context_compaction":this.emitEvent({type:"context_compaction",status:v.status,originalMessages:v.originalMessages,keptMessages:v.keptMessages,droppedMessages:v.droppedMessages,compressedMessages:v.compressedMessages,originalTokens:v.originalTokens,finalTokens:v.finalTokens,budgetTokens:v.budgetTokens,useLLM:v.useLLM,timestamp:v.timestamp??Date.now()});break;case "raw_response_event":if(v.event_type==="input_guardrails.check_start")this.emitEvent({type:"status",status:"thinking",message:"Checking input guardrails..."});else if(v.event_type==="output_guardrails.check_start")this.emitEvent({type:"status",status:"thinking",message:"Checking output guardrails..."});else if(v.event_type==="structured_output.retry"){this.emitEvent({type:"text_complete"}),c="";let A=Array.isArray(v.data?.errors)&&v.data.errors.length>0?v.data.errors.join("; "):v.data?.message;this.emitLog("warn","Structured output validation failed",A),this.emitEvent({type:"status",status:"error",message:"Structured output invalid, retrying..."});}else if(v.event_type==="structured_output.accepted")typeof v.data?.normalized_text=="string"&&(c=v.data.normalized_text),this.emitLog("info","Structured output ready",v.data?.schema?`Schema: ${v.data.schema}`:void 0);else if(v.event_type==="error.classified"){let A=v.data;this.emitEvent({type:"error_classified",category:A.category||"INTERNAL",code:A.code||"UNKNOWN_ERROR",message:A.message||"An unknown error occurred",suggestion:A.suggestion,retryable:A.retryable??!1});}else if(v.event_type==="context_compaction"){let A=v.data;if(this.memoryPressure&&A.finalTokens!==void 0){let P=this.memoryPressure.setPromptEstimateFromMessages(this.memory.getMessagesForLLM());this.handleMemorySnapshot(P,!0);}let L=A.droppedMessages||0,$=A.compressedMessages||0;if(L>0||$>0){let P=(A.originalTokens||0)-(A.finalTokens||0),N=A.useLLM?"\u667A\u80FD\u538B\u7F29":"\u88C1\u526A";this.emitLog("info",`\u25B8 \u4E0A\u4E0B\u6587${N}`,`\u79FB\u9664 ${L} \u6761\u6D88\u606F${$>0?`\uFF0C\u538B\u7F29 ${$} \u6761`:""}\uFF0C\u8282\u7701\u7EA6 ${P.toLocaleString()} tokens`),this.emitEvent({type:"status",status:"compacting",message:`Context compacted: -${L} messages`});}}else v.event_type==="response.completed"&&(process.env.CLI_DEBUG_CONSOLE==="1"&&m.debug("EVENTS","\u{1F4E4} Forwarding response.completed"),this.emitEvent({type:"raw_response_event",data:v.data,event_type:v.event_type}));break;case "run_done":break;case "error":m.error("AGENT",`Error: ${v.error||"Unknown error"}`),this.emitEvent({type:"error",message:v.error||"Unknown error"}),this.emitEvent({type:"status",status:"error",message:`Error: ${v.error||"Unknown error"}`});break;case "stream_retry":let E=v;this.emitEvent({type:"stream_retry",error:E.error,errorCode:E.errorCode||"STREAM_ERROR",attempt:E.attempt,maxRetries:E.maxRetries,delayMs:E.delayMs});break;case "stream_recovered":let O=v;this.emitEvent({type:"stream_recovered",attempt:O.attempt,maxRetries:O.maxRetries});break;case "plan_update":let I=v;m.info("RUNTIME_HOST","\u{1F525} Forwarding plan_update event",{hasExplanation:!!I.explanation,planSteps:I.plan?.length}),this.emitEvent({type:"plan_update",explanation:I.explanation,plan:I.plan,timestamp:I.timestamp||Date.now()});break}}process.env.CLI_DEBUG==="1"&&(m.debug("TASK","=== runner.run loop COMPLETED ==="),m.debug("TASK",` Total events: ${S}`),m.debug("TASK",` stdin.isPaused: ${process.stdin.isPaused?.()}`)),this.emitEvent({type:"text_complete"});let M=Date.now()-l,F=c;if(this.shouldInterrupt)this.emitEvent({type:"status",status:"error",message:"Task interrupted"});else if(this.emitEvent({type:"status",status:"complete",message:"Complete!"}),this.emitLog("info","Task complete",`${u} iterations, ${d} tool calls, ${p} tokens, ${(M/1e3).toFixed(2)}s`),this.sessionSync&&this.sessionEnabled&&F)try{await this.sessionSync.saveTurn({role:"user",content:i},{role:"assistant",content:F});}catch{}let x={output:F,totalTokens:p,durationMs:M,iterations:u,toolCalls:d,interrupted:this.shouldInterrupt};return this.emitEvent({type:"run_result",output:F,currentTurnText:g,totalTokens:p,iterations:u,toolCalls:d,durationMs:M}),x}catch(C){if(C?.code==="ERR_CANCELED"||C?.name==="CanceledError"||C?.name==="AbortError"||C?.category==="canceled"||this.shouldInterrupt){this.emitEvent({type:"text_complete"}),this.emitEvent({type:"status",status:"error",message:"Task interrupted"}),this.emitLog("info","Task interrupted by user");let _=Date.now()-l;return {output:c,totalTokens:p,durationMs:_,iterations:u,toolCalls:d,interrupted:true}}let T=C?.message||String(C)||"Unknown error";throw this.emitEvent({type:"text_complete"}),this.emitEvent({type:"status",status:"error",message:`Error: ${T}`}),this.emitLog("error",`Error: ${T}`),C}finally{process.env.CLI_DEBUG&&(m.debug("TASK","=== runTask finally block START ==="),m.debug("TASK",` isRunning was: ${this.isRunning}`)),r&&this.runner.setMode(n),this.isRunning=false,this.abortController=null,this.clearInterruptPromise(),process.env.CLI_DEBUG&&m.debug("TASK","=== runTask finally block END ===");}}syncWorkspaceEnv(){this.workDir&&(process.env.NEOX_WORKDIR=this.workDir);}async listSessions(){return this.sessionManager.listSessions()}getCurrentSessionId(){return this.session?.sessionId}async getSessionInfo(){if(!this.sessionSync)throw new Error("Session is not ready");return this.sessionSync.getSessionInfo()}async emitFileStreamEvent(e,t,s){let n=e.split(".").pop()||"",i={js:"javascript",ts:"typescript",tsx:"typescript",py:"python",html:"html",css:"css",json:"json",md:"markdown"}[n]||n,o=Date.now();this.emitEvent({type:"file_stream",filePath:e,content:t,isComplete:false,language:i,description:s,timestamp:o});}async handleWriteFile(e,t,s){let n=e.split(".").pop()||"",i={js:"javascript",ts:"typescript",tsx:"typescript",py:"python",html:"html",css:"css",json:"json",md:"markdown"}[n]||n,o=Date.now();try{let l=await import('fs'),c=await import('path'),u=c.isAbsolute(e)?c.resolve(e):c.resolve(this.workDir,e);if(this.sessionSync&&this.sessionEnabled)try{let d=null,p="create";l.existsSync(u)&&(p="modify",d=null);let h={type:"file_snapshot",data:{filePath:e,originalContent:d,operation:p,newContent:t}};await this.sessionSync.getSession().addItems([h]);}catch(d){console.debug("Failed to capture file snapshot",d);}this.emitEvent({type:"file_stream",filePath:e,content:t,isComplete:!0,language:i,description:s,timestamp:o}),this.emitLog("info",`\u2713 Saved ${e}`,`${t.split(`
1846
+ `),fe=xe.length<=5;J.length>2e3&&(J=J.slice(-2e3)),fe?this.emitEvent({type:"file_stream",filePath:q,content:J,language:K[ie]||ie,description:h.trim()||"Generating code...",timestamp:Date.now()}):this.emitEvent({type:"status",status:"tool_call",message:`Writing ${q} (${xe.length} lines)...`});}}}catch{m.error("MK","\u4E0D\u5B8C\u6574\u7684json \u5904\u7406");}}}break;case "tool_call_done":{if(v.name&&v.arguments)try{let A=v.arguments.trim(),L=om(v.name,A);if(L.isTruncated){process.env.CLI_DEBUG_CONSOLE==="1"&&m.log("MK",`[AgentHost] \u26A0\uFE0F Truncation detected: ${L.reason}`);let K=im(A);if(K)process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[AgentHost] \u2705 JSON repaired successfully"),A=K;else throw new Error(`Tool arguments truncated: ${L.reason}`)}let $=A?JSON.parse(A):{};process.env.CLI_DEBUG_CONSOLE==="1"&&m.debug("TOOL",`\u2705 Tool call parsed: ${v.name}`,{argsLength:A.length});let P=v.name,N=$;v.name==="call_tool"&&$?.name&&(P=$.name,N=$.args||{},m.info("TOOL",`\u{1F500} call_tool unwrap: ${v.name} \u2192 ${P}`));let D=Ns(P,N),G=this.descriptionExtractor.extractFromAssistantMessage(h,P);G||(G=nm(P,N));let q=this.commandGenerator.generateEquivalentCommand(P,N),oe=v.id||`tool-${++this.toolCallIdCounter}-${Math.floor(Date.now())}`,ue=Date.now(),ke=this.batchDetector.detectBatch(oe,P,D||"",N,ue);this.recentToolCalls.set(oe,{toolId:oe,batchId:ke.batchId,targetPath:D,args:N,toolName:P});let z={targetPath:D,argsPreview:JSON.stringify(N).substring(0,200)};P==="search"&&N.pattern?z.pattern=N.pattern.substring(0,80):(P==="readfile"||P==="edit_file")&&N.path&&(z.file=N.path),m.info("TOOL",`\u{1F916} [AGENT] Call: ${P}`,z),this.emitEvent({type:"tool_call_start",name:P,args:N,targetPath:D,description:G,equivalentCommand:q,timestamp:ue+Math.random()*.1,toolId:oe,isBatch:ke.type==="batch",batchId:ke.batchId,viaCallTool:v.name==="call_tool"});let J=P==="write_file"||P==="Write",ie=N.file_path||N.filePath||N.path;J&&ie&&N.content&&(await this.emitFileStreamEvent(ie,N.content,h.trim()||void 0),h="");}catch(A){console.error("[AgentHost] \u274C Failed to parse tool arguments for:",v.name),console.error("[AgentHost] Error:",A.message),console.error("[AgentHost] Arguments length:",v.arguments?.length||0),process.env.CLI_DEBUG_CONSOLE==="1"&&(console.error("[AgentHost] First 200 chars:",v.arguments?.substring(0,200)||""),console.error("[AgentHost] Last 200 chars:",v.arguments?.substring(Math.max(0,(v.arguments?.length||0)-200))||""));let L=am(v.name,v.arguments||"",A),$=L.category==="tool_truncated"?`\u274C Tool ${v.name}: content truncated during streaming`:`\u274C Tool ${v.name}: ${L.code}`;this.emitEvent({type:"status",status:"error",message:$}),this.emitEvent({type:"tool_call_start",name:v.name,args:{_raw:v.arguments?.substring(0,500)||"",_error:L.code,_errorCategory:L.category,_errorMessage:L.message,_suggestion:L.suggestion,_retryable:L.retryable},timestamp:Date.now()});let P=v.id;P&&this.recentToolCalls.delete(P),this.emitEvent({type:"tool_output",name:v.name,output:JSON.stringify(L),success:!1,toolId:P});}break}case "tool_output":if(v.name&&v.output!==void 0){let A=typeof v.output=="string"?v.output:JSON.stringify(v.output),L=A.length,$=v.success??!0,P=A.slice(0,cm),N=A.length>cm;m.info("TOOL",`\u{1F916} [AGENT] Result: ${v.name} ${$?"\u2713":"\u2717"}`,{success:$,resultLength:L,outputString:A});let D=v.id,G=D?this.recentToolCalls.get(D):void 0,{batchId:q,targetPath:oe,args:ue}=G||{},ke=G?.toolName||v.name,z=ue||{},J=oe||Ns(ke,z)||(z&&typeof z.directory=="string"?z.directory:void 0),ie=this.buildToolOutputSummary(ke,z,A,L,J,$);if(m.info("TOOL",`\u{1F525} tool_output \u2192 emitting tool_call_end: realName=${ke} toolId=${D} summary=${ie?.substring(0,60)}`),$&&J&&this.batchDetector.recordCompletion(ke,J),this.emitEvent({type:"tool_call_end",name:ke,success:$,resultLength:L,timestamp:Date.now(),toolId:D,batchId:q,targetPath:J,summary:ie,output:P,outputTruncated:N,args:z}),ke==="write_file"&&v.success&&z?.file_path&&z?.content){try{let K=z.file_path,xe=z.content,ee=K.split(".").pop()?.toLowerCase()||"",fe={ts:"typescript",tsx:"tsx",js:"javascript",jsx:"jsx",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",kt:"kotlin",swift:"swift",c:"c",cpp:"cpp",h:"c",hpp:"cpp",css:"css",scss:"scss",less:"less",html:"html",vue:"vue",svelte:"svelte",json:"json",yaml:"yaml",yml:"yaml",md:"markdown",sql:"sql",sh:"bash"};this.emitEvent({type:"write_file_stream",filePath:K,content:xe,isComplete:!0,language:fe[ee]||ee,timestamp:Date.now()});}catch(K){m.error("TOOL","write_file_stream \u53D1\u9001\u5931\u8D25",K);}await this.handleWriteFile(z.file_path,z.content,void 0);}if(ke==="edit_file"&&v.success&&this.sessionSync&&this.sessionEnabled)try{let K=JSON.parse(A),xe=K.metadata?.edit_info||K.edit_info,ee=K.metadata?.hunks;if(m.info("TOOL","edit file\u7684\u7ED3\u679C "+K),m.info("TOOL","edit file\u7684editInfo "+xe),K.status==="success"&&xe){let fe=[];if(Array.isArray(ee)&&ee.length>0)for(let ne of ee)fe.push({type:"file_edit_snapshot",data:{filePath:K.file_path,oldString:ne.old_string,newString:ne.new_string,startLine:ne.start_line,oldLineCount:ne.old_line_count,newLineCount:ne.new_line_count,replaceAll:!1,replacementCount:1}});else fe.push({type:"file_edit_snapshot",data:{filePath:K.file_path,oldString:xe.old_string,newString:xe.new_string,startLine:xe.start_line,oldLineCount:xe.old_line_count,newLineCount:xe.new_line_count,replaceAll:(K.metadata?.replacements||K.replacements)>1,replacementCount:K.metadata?.replacements||K.replacements}});await this.sessionSync.getSession().addItems(fe);}}catch{m.error("TOOL","session\u7684edit file \u4FDD\u5B58\u5931\u8D25 ");}if(ke==="edit_file"&&v.success)try{let K=JSON.parse(A),xe=K.metadata?.edit_info||K.edit_info;if(K.status==="success"&&xe){let ee=Array.isArray(K.metadata?.hunks)?K.metadata.hunks.map(le=>({oldString:le.old_string,newString:le.new_string,startLine:le.start_line})):void 0,fe=K.file_path.split(".").pop()?.toLowerCase()||"",ne={ts:"typescript",tsx:"tsx",js:"javascript",jsx:"jsx",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",kt:"kotlin",swift:"swift",c:"c",cpp:"cpp",h:"c",hpp:"cpp",css:"css",scss:"scss",less:"less",html:"html",vue:"vue",svelte:"svelte",json:"json",yaml:"yaml",yml:"yaml",md:"markdown",sql:"sql",sh:"bash"};this.emitEvent({type:"edit_file_stream",filePath:K.file_path,oldString:xe.old_string,newString:xe.new_string,startLine:xe.start_line,hunks:ee,isComplete:!0,language:ne[fe]||fe,timestamp:Date.now()});}}catch{m.error("TOOL","edit file \u4FDD\u5B58\u5931\u8D25 ");}this.emitEvent({type:"tool_output",name:v.name,output:v.output,success:$,toolId:D});}break;case "token_usage":if(v.usage){p=v.usage.total_tokens;let A=v.usage.prompt_tokens||0,L=v.usage.completion_tokens||0,$=v.usage.prompt_tokens_details?.cached_tokens||0,P=v.usage.cache_read_input_tokens||0,N=v.usage.cache_creation_input_tokens||0,D=$||P||v.usage.cached_tokens||0,G=A+P+N+$;if(m.debug("CACHE","\u{1F525} Cache token calculation:"),m.debug("CACHE",` actualInputTokens=${A}`),m.debug("CACHE",` anthropicCacheReadTokens=${P}`),m.debug("CACHE",` anthropicCacheCreationTokens=${N}`),m.debug("CACHE",` openaiCachedTokens=${$}`),m.debug("CACHE",` fullContextInputTokens=${G}`),m.debug("CACHE",` formula: ${A} + ${P} + ${N} + ${$} = ${G}`),this.sessionTotalInputTokens+=G,this.sessionTotalOutputTokens+=L,process.env.CLI_DEBUG&&(m.debug("CONTEXT","token_usage event received:"),m.debug("CONTEXT",` actualInputTokens=${A}, actualOutputTokens=${L}`),m.debug("CONTEXT",` anthropicCacheReadTokens=${P}, openaiCachedTokens=${$}`),m.debug("CONTEXT",` anthropicCacheCreationTokens=${N}`),m.debug("CONTEXT",` fullContextInputTokens=${G}`),m.debug("CONTEXT",` sessionTotalInput=${this.sessionTotalInputTokens}, sessionTotalOutput=${this.sessionTotalOutputTokens}`),m.debug("CONTEXT",` memoryPressure initialized: ${!!this.memoryPressure}`)),this.memoryPressure){let q=this.memory.getMessagesForLLM(),oe=this.memoryPressure.estimateMessagesForDisplay(q);this.memoryPressure.recordCalibration(oe,A,P);let ue=this.memoryPressure.recordActualUsage(G,L,q.length);m.debug("SNAPSHOT","\u{1F525} Snapshot values:"),m.debug("SNAPSHOT",` fullContextInputTokens (passed to recordActualUsage)=${G}`),m.debug("SNAPSHOT",` snapshot.promptTokens (returned)=${ue.promptTokens}`),m.debug("SNAPSHOT",` snapshot.tokensUsed=${ue.tokensUsed}`),m.debug("SNAPSHOT",` snapshot.pressure=${ue.pressure}`),process.env.CLI_DEBUG&&(m.debug("CONTEXT","recordActualUsage snapshot:"),m.debug("CONTEXT",` tokensUsed=${ue.tokensUsed}, promptTokens=${ue.promptTokens}`),m.debug("CONTEXT",` completionTokens=${ue.completionTokens}, contextWindow=${ue.profile.contextWindow}`),m.debug("CONTEXT",` pressure=${ue.pressure}, state=${ue.state}`)),await this.handleMemorySnapshot(ue);}w=0,this.emitEvent({type:"token_usage",promptTokens:G,completionTokens:L,totalTokens:G+L,cachedTokens:D>0?D:void 0,openaiCachedTokens:$>0?$:void 0,anthropicCacheReadTokens:P>0?P:void 0,anthropicCacheCreationTokens:N>0?N:void 0,sessionPromptTokens:this.sessionTotalInputTokens,sessionCompletionTokens:this.sessionTotalOutputTokens});}break;case "context_compaction":this.emitEvent({type:"context_compaction",status:v.status,originalMessages:v.originalMessages,keptMessages:v.keptMessages,droppedMessages:v.droppedMessages,compressedMessages:v.compressedMessages,originalTokens:v.originalTokens,finalTokens:v.finalTokens,budgetTokens:v.budgetTokens,useLLM:v.useLLM,timestamp:v.timestamp??Date.now()});break;case "raw_response_event":if(v.event_type==="input_guardrails.check_start")this.emitEvent({type:"status",status:"thinking",message:"Checking input guardrails..."});else if(v.event_type==="output_guardrails.check_start")this.emitEvent({type:"status",status:"thinking",message:"Checking output guardrails..."});else if(v.event_type==="structured_output.retry"){this.emitEvent({type:"text_complete"}),c="";let A=Array.isArray(v.data?.errors)&&v.data.errors.length>0?v.data.errors.join("; "):v.data?.message;this.emitLog("warn","Structured output validation failed",A),this.emitEvent({type:"status",status:"error",message:"Structured output invalid, retrying..."});}else if(v.event_type==="structured_output.accepted")typeof v.data?.normalized_text=="string"&&(c=v.data.normalized_text),this.emitLog("info","Structured output ready",v.data?.schema?`Schema: ${v.data.schema}`:void 0);else if(v.event_type==="error.classified"){let A=v.data;this.emitEvent({type:"error_classified",category:A.category||"INTERNAL",code:A.code||"UNKNOWN_ERROR",message:A.message||"An unknown error occurred",suggestion:A.suggestion,retryable:A.retryable??!1});}else if(v.event_type==="context_compaction"){let A=v.data;if(this.memoryPressure&&A.finalTokens!==void 0){let P=this.memoryPressure.setPromptEstimateFromMessages(this.memory.getMessagesForLLM());this.handleMemorySnapshot(P,!0);}let L=A.droppedMessages||0,$=A.compressedMessages||0;if(L>0||$>0){let P=(A.originalTokens||0)-(A.finalTokens||0),N=A.useLLM?"\u667A\u80FD\u538B\u7F29":"\u88C1\u526A";this.emitLog("info",`\u25B8 \u4E0A\u4E0B\u6587${N}`,`\u79FB\u9664 ${L} \u6761\u6D88\u606F${$>0?`\uFF0C\u538B\u7F29 ${$} \u6761`:""}\uFF0C\u8282\u7701\u7EA6 ${P.toLocaleString()} tokens`),this.emitEvent({type:"status",status:"compacting",message:`Context compacted: -${L} messages`});}}else v.event_type==="response.completed"&&(process.env.CLI_DEBUG_CONSOLE==="1"&&m.debug("EVENTS","\u{1F4E4} Forwarding response.completed"),this.emitEvent({type:"raw_response_event",data:v.data,event_type:v.event_type}));break;case "run_done":break;case "error":m.error("AGENT",`Error: ${v.error||"Unknown error"}`),this.emitEvent({type:"error",message:v.error||"Unknown error"}),this.emitEvent({type:"status",status:"error",message:`Error: ${v.error||"Unknown error"}`});break;case "stream_retry":let E=v;this.emitEvent({type:"stream_retry",error:E.error,errorCode:E.errorCode||"STREAM_ERROR",attempt:E.attempt,maxRetries:E.maxRetries,delayMs:E.delayMs});break;case "stream_recovered":let O=v;this.emitEvent({type:"stream_recovered",attempt:O.attempt,maxRetries:O.maxRetries});break;case "plan_update":let I=v;m.info("RUNTIME_HOST","\u{1F525} Forwarding plan_update event",{hasExplanation:!!I.explanation,planSteps:I.plan?.length}),this.emitEvent({type:"plan_update",explanation:I.explanation,plan:I.plan,timestamp:I.timestamp||Date.now()});break}}process.env.CLI_DEBUG==="1"&&(m.debug("TASK","=== runner.run loop COMPLETED ==="),m.debug("TASK",` Total events: ${S}`),m.debug("TASK",` stdin.isPaused: ${process.stdin.isPaused?.()}`)),this.emitEvent({type:"text_complete"});let M=Date.now()-l,F=c;if(this.shouldInterrupt)this.emitEvent({type:"status",status:"error",message:"Task interrupted"});else if(this.emitEvent({type:"status",status:"complete",message:"Complete!"}),this.emitLog("info","Task complete",`${u} iterations, ${d} tool calls, ${p} tokens, ${(M/1e3).toFixed(2)}s`),this.sessionSync&&this.sessionEnabled&&F)try{await this.sessionSync.saveTurn({role:"user",content:i},{role:"assistant",content:F});}catch{}let x={output:F,totalTokens:p,durationMs:M,iterations:u,toolCalls:d,interrupted:this.shouldInterrupt};return this.emitEvent({type:"run_result",output:F,currentTurnText:g,totalTokens:p,iterations:u,toolCalls:d,durationMs:M}),x}catch(C){if(C?.code==="ERR_CANCELED"||C?.name==="CanceledError"||C?.name==="AbortError"||C?.category==="canceled"||this.shouldInterrupt){this.emitEvent({type:"text_complete"}),this.emitEvent({type:"status",status:"error",message:"Task interrupted"}),this.emitLog("info","Task interrupted by user");let _=Date.now()-l;return {output:c,totalTokens:p,durationMs:_,iterations:u,toolCalls:d,interrupted:true}}let T=C?.message||String(C)||"Unknown error";throw this.emitEvent({type:"text_complete"}),this.emitEvent({type:"status",status:"error",message:`Error: ${T}`}),this.emitLog("error",`Error: ${T}`),C}finally{process.env.CLI_DEBUG&&(m.debug("TASK","=== runTask finally block START ==="),m.debug("TASK",` isRunning was: ${this.isRunning}`)),r&&this.runner.setMode(n),this.isRunning=false,this.abortController=null,this.clearInterruptPromise(),process.env.CLI_DEBUG&&m.debug("TASK","=== runTask finally block END ===");}}syncWorkspaceEnv(){this.workDir&&(process.env.NEOX_WORKDIR=this.workDir);}async listSessions(){return this.sessionManager.listSessions()}getCurrentSessionId(){return this.session?.sessionId}async getSessionInfo(){if(!this.sessionSync)throw new Error("Session is not ready");return this.sessionSync.getSessionInfo()}async emitFileStreamEvent(e,t,s){let n=e.split(".").pop()||"",i={js:"javascript",ts:"typescript",tsx:"typescript",py:"python",html:"html",css:"css",json:"json",md:"markdown"}[n]||n,o=Date.now();this.emitEvent({type:"file_stream",filePath:e,content:t,isComplete:false,language:i,description:s,timestamp:o});}async handleWriteFile(e,t,s){let n=e.split(".").pop()||"",i={js:"javascript",ts:"typescript",tsx:"typescript",py:"python",html:"html",css:"css",json:"json",md:"markdown"}[n]||n,o=Date.now();try{let l=await import('fs'),c=await import('path'),u=c.isAbsolute(e)?c.resolve(e):c.resolve(this.workDir,e);if(this.sessionSync&&this.sessionEnabled)try{let d=null,p="create";l.existsSync(u)&&(p="modify",d=null);let h={type:"file_snapshot",data:{filePath:e,originalContent:d,operation:p,newContent:t}};await this.sessionSync.getSession().addItems([h]);}catch(d){console.debug("Failed to capture file snapshot",d);}this.emitEvent({type:"file_stream",filePath:e,content:t,isComplete:!0,language:i,description:s,timestamp:o}),this.emitLog("info",`\u2713 Saved ${e}`,`${t.split(`
1847
1847
  `).length} lines written to disk`);}catch(l){this.emitEvent({type:"file_stream",filePath:e,content:t,isComplete:true,language:i,description:s,timestamp:o}),this.emitLog("error",`Error handling file write: ${l.message}`);}}async switchSession(e){let t=await this.sessionManager.getSession(e);if(!t)throw new Error(`Session ${e} not found`);return this.session=t,this.session}async createSession(e){let t=await this.sessionManager.createSession({model:e||this.model});return this.session=t,t}async saveTurn(e,t){!this.sessionSync||!this.sessionEnabled||await this.sessionSync.saveTurn({role:"user",content:e},{role:"assistant",content:t});}async undoTurns(e=1){if(!this.sessionSync)throw new Error("Session is not ready");return this.sessionSync.undo(e)}async createCheckpoint(e){if(!this.sessionSync)throw new Error("Session is not ready");let t=await this.sessionSync.createCheckpoint(e);return this.emitEvent({type:"checkpoint",id:t}),t}async listCheckpoints(){if(!this.sessionSync)throw new Error("Session is not ready");return await this.sessionSync.getSession().getCheckpoints()}async rollbackTo(e){if(!this.sessionSync)throw new Error("Session is not ready");return this.sessionSync.rollback(e)}async clearSession(){this.sessionSync&&await this.sessionSync.clearSession(),this.memory.clear();}async compactSession(){if(!this.sessionSync||!this.compatProfile)throw new Error("Compaction is not available");let e=this.sessionSync.getSession(),t=this.memory.getAll(),s=Bs(t),n=s.totalTokens,r=s.systemTokens,i=s.userTokens+s.assistantTokens+s.toolCallTokens+s.toolResultTokens,l=this.memoryPressure?.getSnapshot()?.profile?.contextWindow||2e5,c=n/l,u=Math.round(c*100),p=(await e.getTimeline()).filter(f=>f.item.type==="message");process.env.CLI_DEBUG==="1"&&m.debug("COMPACT","Compaction status",{llmProvider:!!this.llmProvider,totalContextTokens:n,systemPromptTokens:r,dialogTokens:i,breakdown:s,messageCount:p.length,memoryMessageCount:t.length,contextWindow:l,pressure:c});let h=`\u603B Context: ${n.toLocaleString()} tokens (${u}% \u4F7F\u7528)
1848
1848
  \u7CFB\u7EDF\u63D0\u793A\u8BCD: ${r.toLocaleString()} tokens
1849
1849
  \u5BF9\u8BDD\u5386\u53F2: ${i.toLocaleString()} tokens (Memory: ${t.length-1} \u6761, Session: ${p.length} \u6761)`;this.emitCompacting("\u25A0 \u538B\u7F29\u524D\u72B6\u6001",h),this.emitCompacting("\u25C7 \u538B\u7F29\u65B9\u5F0F",`\u4F7F\u7528 LLM \u667A\u80FD\u538B\u7F29
@@ -1860,7 +1860,7 @@ ${s}`),s.trim()}extractImageUrls(e){return e?.attachments?.length?e.attachments.
1860
1860
  \u2502 \u603B\u8BA1: ${x(M.totalTokens)}`,T+=`
1861
1861
  \u2514\u2500 \u8282\u7701\uFF1A`,T+=`
1862
1862
  User: ${x(F.userTokens)} \u2022 Assistant: ${x(F.assistantTokens)} \u2022 Tool: ${x(F.toolTokens)}`,T+=`
1863
- \u51C0\u8282\u7701: ${x(F.totalTokens)}`;}this.emitCompacting("\u2713 LLM \u538B\u7F29\u5B8C\u6210",T);}else this.emitCompacting("\u2139 \u65E0\u9700\u538B\u7F29","Context \u4F7F\u7528\u91CF\u5728\u9884\u7B97\u8303\u56F4\u5185");}catch(f){throw this.emitLog("error","\u274C LLM \u538B\u7F29\u5931\u8D25",f?.message||String(f)),f}}setSandboxMode(e){this.sandboxSetter?.(e);}setApprovalHandler(e){this.runner.setApprovalHandler(e);}setMode(e){this.runner.setMode(e);}setConversationHistory(e){this.memory.clear(),this.systemPrompt&&this.memory.add({role:"system",content:this.systemPrompt});for(let t of e)!t||!t.content||this.memory.add({role:t.role,content:t.content,name:t.name,tool_calls:t.tool_calls});}dispose(){this.isRunning&&this.interrupt(),this.abortController&&(this.abortController.abort(),this.abortController=null),this.eventEmitter.removeAllListeners(),this.memory.clear(),this.recentToolCalls.clear(),this.batchDetector.reset(),console.log("[AgentRuntimeHost] Disposed");}};var Dw="ark.cn-beijing.volces.com";function Ow(a){return a.includes("opus-4-6")||a.includes("opus-4.6")||a.includes("opus-4-5")||a.includes("opus-4.5")||a.endsWith("-thinking")}function Gl(a){return a.includes("doubao-seed")}function Ul(a){return !!a&&a.includes(Dw)}function Lw(a){let e=a?.getProvider?.();return e instanceof Kt?e:void 0}function Nw(a){let e=a?.getProvider?.();return e instanceof wn?e:void 0}function $w(a){let e=a?.getProvider?.();return e instanceof Cn?e:void 0}function Fw(a){let{model:e,baseUrl:t,openaiProvider:s,anthropicProvider:n,doubaoProvider:r,geminiProvider:i}=a,o={openai:s,anthropic:n,doubao:r,gemini:i},l=!!s&&Ul(t)&&Gl(e);return (n||r||l)&&(o.setThinkingMode=u=>{if(r&&r.setThinking({type:u}),l&&s&&s.setDoubaoThinking({type:u}),n){let d=u==="auto"?"enabled":u;n.setThinking({type:d});}}),o}function fo(a){let{provider:e,model:t,sessionId:s}=a,n=e.protocol,r=e.models?.find(h=>h.name===t),i=e.baseUrl||void 0,o,l,c,u,d;if(n==="openai"||n==="openai-responses"||n==="kimi"){let h={...e,defaultModel:t,lastSelectedModel:t,apiEndpoint:e.urlSuffix,sessionId:s,modelConfig:r,doubaoThinking:Ul(i)&&Gl(t)?{type:"enabled"}:void 0},g=$t.createAdapter(n,h);o=g,l=Lw(g),l&&Ul(i)&&Gl(t)&&l.setDoubaoThinking({type:"enabled"});}else if(n==="anthropic"){let h={...e,defaultModel:t,lastSelectedModel:t},g=$t.createAdapter(n,h);o=g,c=Nw(g),c&&Ow(t)&&c.setThinking({type:"enabled"});}else if(n==="anthropic-openai"){let h=e.urlSuffix||"/v1/messages",g={apiKey:e.apiKey,baseUrl:i,defaultModel:t,apiEndpoint:h,streamFormat:"anthropic",sessionId:s,retry:e.retry,modelConfig:r};l=new Kt(g),o=l;}else if(n==="doubao")u=new lo({apiKey:e.apiKey,baseUrl:i,defaultModel:t,thinking:{type:"enabled"},retry:e.retry}),o=u;else if(n==="gemini"){let h={...e,defaultModel:t,lastSelectedModel:t},g=$t.createAdapter(n,h);o=g,d=$w(g);}else throw new Error(`Unsupported provider protocol: ${n}`);let p=Fw({model:t,baseUrl:i,openaiProvider:l,anthropicProvider:c,doubaoProvider:u,geminiProvider:d});return {llmProvider:o,controls:p}}function um(a){return new Yi({llmProvider:a.llmProvider,model:a.model,tools:a.tools,memory:a.memory,config:a.config,agentName:a.agentName,agentDescription:a.agentDescription,instructions:a.instructions,contextInjection:a.contextInjection,plannerMode:a.plannerMode,structuredOutput:a.structuredOutput,providerName:a.providerName,contextWindow:a.contextWindow,tailTokenBudget:a.tailTokenBudget,maxInputTokensOverride:a.maxInputTokensOverride,toolInputGuardrails:a.toolInputGuardrails??Gp,toolOutputGuardrails:a.toolOutputGuardrails??Up,compressionMode:a.compressionMode,workspacePath:a.workspacePath,permissionManager:a.permissionManager,disableSystemPrompt:a.disableSystemPrompt,enableFGTS:a.enableFGTS})}function dm(a){return new ho({runner:a.runner,memory:a.memory,sessionManager:a.sessionManager||new Xt,sessionEnabled:a.sessionEnabled??false,workDir:a.workDir,model:a.model,memoryPressure:a.memoryPressure,compatProfile:a.compatProfile,systemPrompt:a.systemPrompt,setSandboxMode:a.setSandboxMode,llmProvider:a.llmProvider})}function yo(a){return new at(a)}W();async function Wl(a){let{sessionId:e,provider:t,llmConfig:s,workspacePath:n,workDir:r,instructions:i,systemPrompt:o,agentName:l,agentDescription:c,permissionManager:u,tools:d,memory:p,memorySize:h,agentConfig:g,contextInjection:f,plannerMode:b,structuredOutput:y,toolInputGuardrails:w,toolOutputGuardrails:C,compressionMode:S,platformServices:T,sessionManager:_,sessionEnabled:M,disableSystemPrompt:F,enableFGTS:x}=a,R=p??yo(h??50),j=typeof i=="string"?i:"[Function]";m.info("HOST_FACTORY",`Creating host with instructions length: ${j.length}`),m.info("HOST_FACTORY",`instructions contains \u534F\u4F5C\u6A21\u5F0F: ${j.includes("\u534F\u4F5C\u6A21\u5F0F")}`),m.info("HOST_FACTORY",`instructions contains delegate_task: ${j.includes("delegate_task")}`),m.debug("HOST_FACTORY",`instructions preview: ${j.substring(0,300)}`);let{llmProvider:v,controls:E}=fo({provider:t,model:s.model,sessionId:e}),O=s.compatProfile??null,I=O?new zr(O):void 0,A=d??await Rs(n,T),L=g??{maxIterations:0,temperature:.7},$=um({llmProvider:v,model:s.model,tools:A,memory:R,config:L,agentName:l,agentDescription:c,instructions:i,contextInjection:f,plannerMode:b,structuredOutput:y,providerName:s.providerName,contextWindow:O?.contextWindow,tailTokenBudget:O?.tailTokenBudget,maxInputTokensOverride:s.maxInputTokens,toolInputGuardrails:w,toolOutputGuardrails:C,compressionMode:S,workspacePath:n,permissionManager:u,disableSystemPrompt:F,enableFGTS:x});return {host:dm({runner:$,memory:R,sessionManager:_??new Xt,sessionEnabled:M??false,workDir:r,model:s.model,memoryPressure:I,compatProfile:O,systemPrompt:o??(typeof i=="string"?i:""),llmProvider:v}),controls:E,llmProvider:v,runner:$,memory:R}}var Rt=class{hostController;platformServices;constructor(e){this.platformServices=e.platformServices,this.hostController=e.hostController??new Wr;}setWorkspace(e){this.hostController.setWorkspace(e);}getHost(e){return this.hostController.getHost(e)}hasHost(e){return this.hostController.hasHost(e)}clearHost(e){this.hostController.clearHost(e);}clearAll(){this.hostController.clearAll();}forEachHost(e){this.hostController.forEachHost(e);}async getOrCreateHost(e){let{sessionId:t,configKey:s,provider:n,llmConfig:r,workspacePath:i,workDir:o,instructions:l,systemPrompt:c,agentName:u,agentDescription:d,permissionManager:p,tools:h,memory:g,memorySize:f,agentConfig:b,contextInjection:y,plannerMode:w,structuredOutput:C,toolInputGuardrails:S,toolOutputGuardrails:T,compressionMode:_,sessionManager:M,sessionEnabled:F,disableSystemPrompt:x,enableFGTS:R,onHostCreated:j}=e;return this.hostController.getOrCreateHost({sessionId:t,configKey:s,createHost:async()=>{let{host:v,controls:E,llmProvider:O,runner:I,memory:A}=await Wl({sessionId:t,provider:n,llmConfig:r,workspacePath:i,workDir:o,instructions:l,systemPrompt:c,agentName:u,agentDescription:d,permissionManager:p,tools:h,memory:g,memorySize:f,agentConfig:b,contextInjection:y,plannerMode:w,structuredOutput:C,toolInputGuardrails:S,toolOutputGuardrails:T,compressionMode:_,platformServices:this.platformServices,sessionManager:M,sessionEnabled:F,disableSystemPrompt:x,enableFGTS:R});return j?.({host:v,controls:E,llmProvider:O,runner:I,memory:A}),v}})}async runTask(e){let{prompt:t,metadata:s,abortSignal:n,onHostReady:r,onEvent:i,...o}=e,l=await this.getOrCreateHost(o);r?.(l);let c=i?l.on(i):void 0;try{return await l.runTask(t,{metadata:s,abortSignal:n})}finally{c&&c();}}};async function pm(a){let e=a.initialProviderId,t=a.initialModelName,s=a.routeConfig,n=0,r=null,i=s?s.routes.filter(o=>o.enabled).length:a.resolvedRoute?.fallbackChain.length??1;for(;;)try{return await a.runAttempt({providerId:e,modelName:t,routeConfig:s,attempt:n,isRetry:n>0,previousError:r})}catch(o){let l=o instanceof Error?o:new Error(String(o));if(r=l,a.modelRouter&&e&&a.modelRouter.recordFailure(e,l),!!!(a.autoFailover&&a.resolvedRoute&&a.fallbackDecider&&a.modelAlias&&e))throw l;let u=a.fallbackDecider.shouldFallback(a.modelAlias,e,l,a.resolvedRoute.fallbackChain);if(u.shouldFallback&&u.targetProvider&&u.event){if(a.fallbackDecider.executeFallback(u),n+=1,e=u.targetProvider.providerId,t=u.targetProvider.modelName,s&&(s={...s,routes:s.routes.filter(d=>d.providerId!==u.event.fromProviderId)}),a.onRetry?.({providerId:e,modelName:t,attempt:n,decision:u}),n>=i)throw a.onExhausted?.("All providers have failed. Please try again later."),l;continue}throw u.exhausted&&a.onExhausted?.(u.reason),l}}W();var Ir=240,bo=2e3;function At(a,e){return a?a.length<=e?a:a.slice(0,e).trimEnd()+"...":""}var vo=class extends Error{code;constructor(e){super(e),this.code="missing_provider";}},Et=class{hostService;checkpointService;resolveProvider;actionLog;constructor(e){this.hostService=e.hostService,this.checkpointService=e.checkpointService,this.resolveProvider=e.resolveProvider,this.actionLog=e.actionLog;}async runSession(e){let{sessionId:t,prompt:s,metadata:n,startedAt:r=Date.now(),isAutoRouted:i,routeConfig:o,modelRouter:l,fallbackDecider:c,eventHub:u,abortSignal:d,buildHostConfig:p,onHostReady:h,onRuntimeEvent:g,onStatus:f,onRouteResolved:b,onRetry:y}=e,w=e.providerId,C=e.modelName,S=null,T=this.actionLog?.createRunId();if(this.actionLog){let F=At(s,Ir);this.actionLog.record({type:"run_start",sessionId:t,runId:T,actor:"user",summary:F?`User: ${F}`:"User: (empty prompt)",data:{prompt:At(s,bo),promptLength:s.length,attachments:n?.attachments?.map(x=>({type:x.type,name:x.name,path:x.path}))}});}i&&o&&l&&(S=l.resolveProvider(o.modelAlias),S&&(w=S.providerId,C=S.modelName,b?.(S),S.degraded&&f?.("warning",`Using degraded provider: ${w}`)));let _=n;if(this.checkpointService)try{await this.checkpointService.startMessage(t);}catch{f?.("warning","Checkpoint start failed");}let M=false;try{let F=await pm({modelAlias:o?.modelAlias,initialProviderId:w,initialModelName:C,routeConfig:o,resolvedRoute:S,fallbackDecider:c,modelRouter:l??void 0,autoFailover:o?.autoFailover===!0,onRetry:({decision:x})=>{this.actionLog&&this.actionLog.record({type:"status",sessionId:t,runId:T,actor:"system",summary:x?.event?`Fallback: ${x.event.fromProviderId} -> ${x.event.toProviderId}`:"Fallback: switching provider",data:{from:x?.event?.fromProviderId,to:x?.event?.toProviderId,reason:x?.reason}}),y?.(x);},onExhausted:x=>{f?.("error",`All providers exhausted: ${x}`),this.actionLog&&this.actionLog.record({type:"run_error",sessionId:t,runId:T,actor:"system",summary:`All providers exhausted: ${At(x,Ir)}`,data:{reason:x}});},runAttempt:async x=>{let R=this.resolveProvider(x.providerId,x.modelName);if(!R.provider||!R.llmConfig)throw new vo("No provider configured. Please add an API provider first.");f?.("info",`Connecting to ${R.llmConfig.model}...`),this.actionLog&&this.actionLog.record({type:"run_attempt",sessionId:t,runId:T,actor:"system",summary:x.isRetry?`Retry ${x.attempt}: ${R.llmConfig.model}`:`Run: ${R.llmConfig.model}`,data:{providerId:R.provider.id,providerName:R.llmConfig.providerName,model:R.llmConfig.model,attempt:x.attempt,isRetry:x.isRetry,previousError:x.previousError?.message}});let j=p(R.provider,R.llmConfig),v={contextUsed:0,startTime:Date.now(),provider:R.llmConfig.providerName||R.provider.id||"unknown",model:R.llmConfig.model};return {summary:await this.hostService.runTask({...j,prompt:s,metadata:_,abortSignal:d,onHostReady:h,onEvent:O=>{if(O.type==="tool_call_end"&&m.info("ORCHESTRATOR",`\u{1F525} onEvent received tool_call_end: name=${O.name} toolId=${O.toolId}`),this.actionLog){let I=this.buildActionLogEntry(O,t,T);I&&this.actionLog.record(I);}u?.emit(t,O,v),g?.(O,v);}}),contextUsed:v.contextUsed,providerId:R.provider.id}}});if(S&&F.providerId&&l){let x=Date.now()-r;l.recordSuccess(F.providerId,x),c&&c.recordSuccess(F.providerId);}if(this.checkpointService)try{await this.checkpointService.finishMessage(t,"Message completed"),M=!0;}catch{f?.("warning","Checkpoint save failed");}return {summary:F.summary,contextUsed:F.contextUsed,providerId:F.providerId}}catch(F){if(this.actionLog){let x=F instanceof Error?F.message:String(F);this.actionLog.record({type:"run_error",sessionId:t,runId:T,actor:"system",summary:`Run error: ${At(x,Ir)}`,data:{message:x}});}throw F}finally{if(this.checkpointService&&!M)try{await this.checkpointService.stopWatching();}catch{f?.("warning","Checkpoint cleanup failed");}}}buildActionLogEntry(e,t,s){if(!this.actionLog)return null;let n=r=>this.actionLog?.formatFilePath(r)??r;switch(e.type){case "tool_call_start":{let r=e.targetPath?n(e.targetPath):void 0,i=r?`Tool start: ${e.name} (${r})`:`Tool start: ${e.name}`,o=e.args?At(JSON.stringify(e.args),bo):void 0;return {type:"tool_call_start",sessionId:t,runId:s,actor:"tool",summary:i,files:r?[r]:void 0,data:{name:e.name,toolId:e.toolId,batchId:e.batchId,targetPath:r,description:e.description,equivalentCommand:e.equivalentCommand,argsPreview:o}}}case "tool_call_end":{let r=e.targetPath?n(e.targetPath):void 0,i=r?`Tool ${e.success?"done":"failed"}: ${e.name} (${r})`:`Tool ${e.success?"done":"failed"}: ${e.name}`,o=e.output?At(e.output,bo):void 0;return {type:"tool_call_end",sessionId:t,runId:s,actor:"tool",summary:i,files:r?[r]:void 0,data:{name:e.name,success:e.success,duration:e.duration,resultLength:e.resultLength,summary:e.summary,outputPreview:o,outputTruncated:e.outputTruncated,toolId:e.toolId,batchId:e.batchId,targetPath:r}}}case "file_stream":{if(!e.isComplete)return null;let r=n(e.filePath),i=e.additions||e.removals?`File updated: ${r} (+${e.additions??0}/-${e.removals??0})`:`File updated: ${r}`;return {type:"file_change",sessionId:t,runId:s,actor:"tool",summary:i,files:[r],data:{filePath:r,additions:e.additions,removals:e.removals,description:e.description,contentLength:e.content?.length??0}}}case "edit_file_stream":{if(!e.isComplete)return null;let r=n(e.filePath),i=`File edited: ${r}`;return {type:"file_change",sessionId:t,runId:s,actor:"tool",summary:i,files:[r],data:{filePath:r,startLine:e.startLine,hunks:e.hunks?.length??0,oldPreview:At(e.oldString,200),newPreview:At(e.newString,200),description:e.description}}}case "write_file_stream":{if(!e.isComplete)return null;let r=n(e.filePath),i=`File written: ${r}`;return {type:"file_change",sessionId:t,runId:s,actor:"tool",summary:i,files:[r],data:{filePath:r,contentLength:e.content?.length??0,description:e.description}}}case "checkpoint":return {type:"checkpoint",sessionId:t,runId:s,actor:"system",summary:`Checkpoint saved: ${e.id}`,data:{id:e.id,auto:e.auto}};case "plan_update":{let r=e.plan.length,i=e.plan.filter(c=>c.status==="completed").length,o=e.plan.filter(c=>c.status==="in_progress").length,l=r-i-o;return {type:"plan_update",sessionId:t,runId:s,actor:"assistant",summary:`Plan update: ${i} done, ${o} active, ${l} pending`,data:{explanation:e.explanation,plan:e.plan}}}case "context_compaction":return {type:"context_compaction",sessionId:t,runId:s,actor:"system",summary:`Context compacted: ${e.originalTokens} -> ${e.finalTokens} tokens`,data:{originalMessages:e.originalMessages,keptMessages:e.keptMessages,droppedMessages:e.droppedMessages,compressedMessages:e.compressedMessages,originalTokens:e.originalTokens,finalTokens:e.finalTokens,budgetTokens:e.budgetTokens,useLLM:e.useLLM}};case "stream_retry":return {type:"stream_retry",sessionId:t,runId:s,actor:"system",summary:`Stream retry ${e.attempt}/${e.maxRetries}: ${e.errorCode}`,data:{error:e.error,errorCode:e.errorCode,attempt:e.attempt,maxRetries:e.maxRetries,delayMs:e.delayMs}};case "stream_recovered":return {type:"stream_recovered",sessionId:t,runId:s,actor:"system",summary:`Stream recovered (attempt ${e.attempt})`,data:{attempt:e.attempt,maxRetries:e.maxRetries}};case "run_result":return {type:"run_result",sessionId:t,runId:s,actor:"assistant",summary:`Run completed in ${e.durationMs}ms, tokens ${e.totalTokens}`,data:{outputPreview:At(e.output,bo),totalTokens:e.totalTokens,iterations:e.iterations,toolCalls:e.toolCalls,durationMs:e.durationMs}};case "error":return {type:"run_error",sessionId:t,runId:s,actor:"system",summary:`Runtime error: ${At(e.message,Ir)}`,data:{message:e.message}};case "error_classified":return {type:"run_error",sessionId:t,runId:s,actor:"system",summary:`Error ${e.code}: ${At(e.message,Ir)}`,data:{category:e.category,code:e.code,message:e.message,suggestion:e.suggestion,retryable:e.retryable}};default:return null}}};W();var jw=[".png",".jpg",".jpeg",".gif",".bmp",".ico",".webp",".svg",".tiff",".tif",".mp3",".mp4",".avi",".mov",".wmv",".flv",".wav",".ogg",".webm",".zip",".tar",".gz",".bz2",".7z",".rar",".xz",".exe",".dll",".so",".dylib",".bin",".app",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".db",".sqlite",".sqlite3",".ttf",".otf",".woff",".woff2",".eot",".jar",".war",".class",".pyc",".pyo",".o",".a",".lib",".node",".wasm",".asar"],mm={ignoredPatterns:["**/.git/**","**/.cdundo/**","**/.svn/**","**/.hg/**","**/.DS_Store","**/Thumbs.db","**/desktop.ini","**/*.log","**/*.tmp","**/*.temp","**/*.swp","**/*.swo","**/*~","**/node_modules/**","**/bower_components/**","**/.npm/**","**/.yarn/**","**/.pnpm-store/**","**/package-lock.json","**/yarn.lock","**/pnpm-lock.yaml","**/dist/**","**/build/**","**/out/**","**/output/**","**/.output/**","**/target/**","**/bin/**","**/obj/**","**/*.bundle.js","**/*.bundle.css","**/*.min.js","**/*.min.css","**/.next/**","**/.nuxt/**","**/.svelte-kit/**","**/.astro/**","**/.vercel/**","**/.netlify/**","**/.turbo/**","**/.cache/**","**/.parcel-cache/**","**/.webpack/**","**/.vite/**","**/coverage/**","**/.nyc_output/**","**/jest_cache/**","**/.jest/**","**/__pycache__/**","**/*.pyc","**/*.pyo","**/*.pyd","**/.venv/**","**/venv/**","**/env/**","**/.env/**","**/virtualenv/**","**/.Python","**/pip-wheel-metadata/**","**/*.egg-info/**","**/.eggs/**","**/site-packages/**","**/target/**","**/.gradle/**","**/gradle/**","**/.m2/**","**/*.class","**/*.jar","**/*.war","**/*.ear","**/target/**","**/*.rlib","**/Cargo.lock","**/vendor/**","**/go.sum","**/bin/**","**/obj/**","**/packages/**","**/.nuget/**","**/*.dll","**/*.exe","**/*.pdb","**/vendor/bundle/**","**/.bundle/**","**/Gemfile.lock","**/vendor/**","**/composer.lock","**/.idea/**","**/.vscode/**","**/*.sublime-*","**/.project","**/.classpath","**/.settings/**","**/*.iml","**/.env.local","**/.env.*.local","**/.env.development","**/.env.production","**/*.sqlite","**/*.sqlite3","**/*.db","**/npm-debug.log*","**/yarn-debug.log*","**/yarn-error.log*","**/.pnpm-debug.log*"],maxCheckpoints:50,checkpointTTL:864e5,enabled:true,largeFileThreshold:1048576,veryLargeFileThreshold:10485760,binaryExtensions:jw};var wo=class{workspacePath;shadowDir;shadowGitDir;git;watcher=null;changeBuffer=[];isWatching=false;currentSessionId=null;currentMessageIndex=0;config;changeCallbacks=new Set;initialized=false;debounceMap=new Map;DEBOUNCE_MS=100;gitOperationLock=Promise.resolve();GIT_RETRY_ATTEMPTS=3;GIT_RETRY_DELAY_MS=500;constructor(e={}){this.config={...mm,...e},this.workspacePath="",this.shadowDir="",this.shadowGitDir="",this.git=gm();}async init(e){if(this.initialized&&this.workspacePath===e){m.debug("CHECKPOINT","Already initialized for: "+e);return}this.workspacePath=e,this.shadowDir=se.join(e,".cdundo"),this.shadowGitDir=se.join(this.shadowDir,".git"),m.debug("CHECKPOINT","Initializing for workspace: "+e),await ce.mkdir(this.shadowDir,{recursive:true}),await this.addToGitignore();let t=Me.existsSync(this.shadowGitDir);this.git=gm(this.shadowDir),t?m.debug("CHECKPOINT","Using existing shadow git repository"):(await this.git.init(),await this.git.addConfig("user.email","checkpoint@neox.local"),await this.git.addConfig("user.name","Neox Checkpoint"),m.debug("CHECKPOINT","Created new shadow git repository")),await this.syncWorkspaceToShadow(),await this.withGitLock(async()=>{if((await this.git.status()).files.length>0||!t){await this.git.add(".");try{await this.git.commit("Initial checkpoint - workspace sync"),m.debug("CHECKPOINT","Created initial checkpoint");}catch{m.debug("CHECKPOINT","No changes to commit for initial checkpoint");}}}),this.initialized=true,m.debug("CHECKPOINT","Initialization complete");}beforeCheckpointId=null;async startWatching(e,t=0){if(!this.initialized)throw new Error("ShadowGitCheckpoint not initialized. Call init() first.");if(this.isWatching)return m.debug("CHECKPOINT","Already watching, updating session info"),m.debug("CHECKPOINT","Clearing changeBuffer (was: "+this.changeBuffer.length+" items)"),this.currentSessionId=e,this.currentMessageIndex=t,this.changeBuffer=[],this.beforeCheckpointId;m.debug("CHECKPOINT","Starting new watch, clearing changeBuffer (was: "+this.changeBuffer.length+" items)"),this.currentSessionId=e,this.currentMessageIndex=t,this.changeBuffer=[];try{await this.withGitLock(async()=>{await this.syncWorkspaceToShadow(),await this.git.add("."),(await this.git.status()).files.length>0&&await this.git.commit(`Before session ${e} - auto checkpoint`);let r=await this.git.log({maxCount:1});this.beforeCheckpointId=r.latest?.hash||null,m.debug("CHECKPOINT","Created before-checkpoint: "+this.beforeCheckpointId);});}catch(n){m.error("CHECKPOINT","Failed to create before-checkpoint",{error:n});try{let r=await this.git.log({maxCount:1});this.beforeCheckpointId=r.latest?.hash||null;}catch{this.beforeCheckpointId=null;}}m.debug("CHECKPOINT","Starting file watcher for session: "+e);let s=n=>!!(n.includes(".cdundo")||n.includes("/.cdundo/")||n.includes("node_modules")||n.includes("/node_modules/")||n.includes("/.git/")||n.endsWith("/.git")||n.includes("/dist/")||n.includes("/build/")||n.includes("/.next/")||n.includes(".DS_Store")||n.includes(".swp")||n.includes(".swo")||n.endsWith("package-lock.json")||n.endsWith("yarn.lock")||n.endsWith("pnpm-lock.yaml"));return this.watcher=hm.watch(this.workspacePath,{ignored:s,persistent:true,ignoreInitial:true,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},followSymlinks:false}),this.watcher.on("add",n=>this.handleChange("create",n)).on("change",n=>this.handleChange("modify",n)).on("unlink",n=>this.handleChange("delete",n)).on("addDir",n=>this.handleChange("mkdir",n)).on("unlinkDir",n=>this.handleChange("rmdir",n)).on("error",n=>m.error("CHECKPOINT","Watcher error",{error:n})),this.isWatching=true,m.debug("CHECKPOINT","File watcher started"),this.beforeCheckpointId}getBeforeCheckpointId(){return this.beforeCheckpointId}async stopWatching(){this.watcher&&(await this.watcher.close(),this.watcher=null),this.isWatching=false,this.currentSessionId=null;for(let e of this.debounceMap.values())clearTimeout(e);this.debounceMap.clear(),this.changeBuffer=[],m.debug("CHECKPOINT","File watcher stopped");}handleChange(e,t){if(!this.isWatching)return;let s=se.relative(this.workspacePath,t);if(this.shouldIgnorePath(s))return;let n=`${e}:${s}`,r=this.debounceMap.get(n);r&&clearTimeout(r),this.debounceMap.set(n,setTimeout(()=>{this.recordChange(e,s,t),this.debounceMap.delete(n);},this.DEBOUNCE_MS));}isBinaryFile(e){let t=se.extname(e).toLowerCase();return this.config.binaryExtensions.includes(t)}async detectBinaryContent(e){try{let t=await ce.open(e,"r"),s=Buffer.alloc(8192),{bytesRead:n}=await t.read(s,0,8192,0);await t.close();for(let r=0;r<n;r++)if(s[r]===0)return !0;return !1}catch{return false}}async recordChange(e,t,s){let n={type:e,path:t,timestamp:Date.now()},r=this.isBinaryFile(t);n.isBinary=r;let i=0,o=false,l=false;if(e==="create"||e==="modify")try{let d=await ce.stat(s);if(d.isFile()&&(i=d.size,n.size=i,o=i>this.config.veryLargeFileThreshold,l=i>this.config.largeFileThreshold,n.isLargeFile=l,!r&&!l)){let p=await this.detectBinaryContent(s);n.isBinary=p;}}catch{}if((e==="delete"||e==="modify")&&!n.isBinary&&!l){let d=se.join(this.shadowDir,t);try{let p=await ce.stat(d);p.isFile()&&p.size<this.config.largeFileThreshold&&(n.previousContent=await ce.readFile(d,"utf-8"));}catch{}}if((e==="create"||e==="modify")&&!n.isBinary&&!l)try{n.newContent=await ce.readFile(s,"utf-8");}catch{}this.changeBuffer.push(n),o?m.debug("CHECKPOINT",`Skipping very large file (${(i/1024/1024).toFixed(1)}MB): ${t}`):await this.syncFileToShadow(t,e,s);for(let d of this.changeCallbacks)try{d(n);}catch(p){m.error("CHECKPOINT","Callback error",{error:p});}let c=i?` (${this.formatFileSize(i)})`:"",u=n.isBinary?" [binary]":"";m.debug("CHECKPOINT",`Recorded ${e}: ${t}${c}${u}`);}formatFileSize(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/1024/1024).toFixed(1)}MB`}async syncFileToShadow(e,t,s){let n=se.join(this.shadowDir,e),r=se.dirname(n);try{switch(t){case "create":case "modify":await ce.mkdir(r,{recursive:!0}),await ce.copyFile(s,n);break;case "delete":await ce.unlink(n).catch(()=>{});break;case "mkdir":await ce.mkdir(n,{recursive:!0});break;case "rmdir":await ce.rm(n,{recursive:!0,force:!0}).catch(()=>{});break}}catch(i){m.error("CHECKPOINT",`Failed to sync ${e}`,{error:i});}}async syncWorkspaceToShadow(){m.debug("CHECKPOINT","Syncing workspace to shadow...");let e=0,t=0,s=0,n=async(r,i)=>{let o;try{o=await ce.readdir(r,{withFileTypes:!0});}catch{return}for(let l of o){let c=se.join(r,l.name),u=se.join(i,l.name),d=se.relative(this.workspacePath,c);if(!this.shouldIgnore(d)){if(l.isDirectory())await ce.mkdir(u,{recursive:true}),await n(c,u);else if(l.isFile())try{let p=await ce.stat(c);if(p.size>this.config.veryLargeFileThreshold){t++,m.debug("CHECKPOINT",`Skipping very large file: ${d} (${this.formatFileSize(p.size)})`);continue}await ce.mkdir(se.dirname(u),{recursive:!0}),await ce.copyFile(c,u),e++,s+=p.size;}catch{m.warn("CHECKPOINT",`Failed to sync file: ${d}`);}}}};await n(this.workspacePath,this.shadowDir),m.debug("CHECKPOINT",`Workspace sync complete: ${e} files (${this.formatFileSize(s)}), ${t} large files skipped`);}shouldIgnorePath(e){return !!(e.startsWith(".cdundo")||e.includes("/.cdundo/")||e.includes("node_modules/")||e.startsWith("node_modules")||e.startsWith(".git")||e.includes("/.git/")||e.startsWith("dist/")||e.includes("/dist/")||e.startsWith("build/")||e.includes("/build/")||e.startsWith(".next/")||e.includes("/.next/")||e.includes(".DS_Store")||e.endsWith(".swp")||e.endsWith(".swo")||e.endsWith("package-lock.json")||e.endsWith("yarn.lock")||e.endsWith("pnpm-lock.yaml"))}shouldIgnore(e){if(this.shouldIgnorePath(e))return true;for(let t of this.config.ignoredPatterns)if(this.matchPattern(e,t))return true;return false}matchPattern(e,t){let s=t.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/<<<GLOBSTAR>>>/g,".*").replace(/\?/g,".");return new RegExp(`^${s}$`).test(e)}async createCheckpoint(e){if(!this.initialized)throw new Error("ShadowGitCheckpoint not initialized");return m.debug("CHECKPOINT","Creating checkpoint: "+e),await this.withGitLock(async()=>{if(await this.git.add("."),(await this.git.status()).files.length===0&&this.changeBuffer.length===0)return m.debug("CHECKPOINT","No changes to checkpoint"),{id:(await this.git.log({maxCount:1})).latest?.hash||"no-changes",label:e,timestamp:Date.now(),sessionId:this.currentSessionId||"",messageIndex:this.currentMessageIndex,changes:[],stats:{created:0,modified:0,deleted:0,directories:0,total:0}};let s=this.calculateStats(),n=this.formatCommitMessage(e,s),r=await this.git.commit(n),i={id:r.commit,label:e,timestamp:Date.now(),sessionId:this.currentSessionId||"",messageIndex:this.currentMessageIndex,changes:[...this.changeBuffer],stats:s};return this.changeBuffer=[],this.currentMessageIndex++,m.debug("CHECKPOINT",`Checkpoint created: ${r.commit} (${s.total} changes)`),await this.cleanupOldCheckpoints(),i})}lastRollbackFromId=null;getLastRollbackFromId(){return this.lastRollbackFromId}async rollbackTo(e){if(!this.initialized)throw new Error("ShadowGitCheckpoint not initialized");m.debug("CHECKPOINT","Rolling back to checkpoint: "+e);let t=[],s=[],n;try{return await this.withGitLock(async()=>{await this.git.add(".");let r=await this.git.status();if(m.debug("CHECKPOINT","Current git status before rollback: "+r.files.length+" files"),r.files.length>0)try{await this.git.commit("Changes before rollback (for reapply)"),m.debug("CHECKPOINT","Created commit for rollback comparison");}catch{m.debug("CHECKPOINT","No changes to commit (might be already committed)");}n=(await this.git.log({maxCount:1})).latest?.hash,this.lastRollbackFromId=n||null,m.debug("CHECKPOINT","Saved reapply checkpoint: "+n);let o=await this.git.diff([e,"HEAD","--name-status"]),l=o.trim().split(`
1863
+ \u51C0\u8282\u7701: ${x(F.totalTokens)}`;}this.emitCompacting("\u2713 LLM \u538B\u7F29\u5B8C\u6210",T);}else this.emitCompacting("\u2139 \u65E0\u9700\u538B\u7F29","Context \u4F7F\u7528\u91CF\u5728\u9884\u7B97\u8303\u56F4\u5185");}catch(f){throw this.emitLog("error","\u274C LLM \u538B\u7F29\u5931\u8D25",f?.message||String(f)),f}}setSandboxMode(e){this.sandboxSetter?.(e);}setApprovalHandler(e){this.runner.setApprovalHandler(e);}setMode(e){this.runner.setMode(e);}setConversationHistory(e){this.memory.clear(),this.systemPrompt&&this.memory.add({role:"system",content:this.systemPrompt});for(let t of e)!t||!t.content||this.memory.add({role:t.role,content:t.content,name:t.name,tool_calls:t.tool_calls});}dispose(){this.isRunning&&this.interrupt(),this.abortController&&(this.abortController.abort(),this.abortController=null),this.eventEmitter.removeAllListeners(),this.memory.clear(),this.recentToolCalls.clear(),this.batchDetector.reset(),console.log("[AgentRuntimeHost] Disposed");}};var Dw="ark.cn-beijing.volces.com";function Ow(a){return a.includes("opus-4-6")||a.includes("opus-4.6")||a.includes("opus-4-5")||a.includes("opus-4.5")||a.endsWith("-thinking")}function Gl(a){return a.includes("doubao-seed")}function Ul(a){return !!a&&a.includes(Dw)}function Lw(a){let e=a?.getProvider?.();return e instanceof Kt?e:void 0}function Nw(a){let e=a?.getProvider?.();return e instanceof wn?e:void 0}function $w(a){let e=a?.getProvider?.();return e instanceof Cn?e:void 0}function Fw(a){let{model:e,baseUrl:t,openaiProvider:s,anthropicProvider:n,doubaoProvider:r,geminiProvider:i}=a,o={openai:s,anthropic:n,doubao:r,gemini:i},l=!!s&&Ul(t)&&Gl(e);return (n||r||l)&&(o.setThinkingMode=u=>{if(r&&r.setThinking({type:u}),l&&s&&s.setDoubaoThinking({type:u}),n){let d=u==="auto"?"enabled":u;n.setThinking({type:d});}}),o}function fo(a){let{provider:e,model:t,sessionId:s}=a,n=e.protocol,r=e.models?.find(h=>h.name===t),i=e.baseUrl||void 0,o,l,c,u,d;if(n==="openai"||n==="openai-responses"||n==="kimi"){let h={...e,defaultModel:t,lastSelectedModel:t,apiEndpoint:e.urlSuffix,sessionId:s,modelConfig:r,doubaoThinking:Ul(i)&&Gl(t)?{type:"enabled"}:void 0},g=$t.createAdapter(n,h);o=g,l=Lw(g),l&&Ul(i)&&Gl(t)&&l.setDoubaoThinking({type:"enabled"});}else if(n==="anthropic"){let h={...e,defaultModel:t,lastSelectedModel:t},g=$t.createAdapter(n,h);o=g,c=Nw(g),c&&Ow(t)&&c.setThinking({type:"enabled"});}else if(n==="anthropic-openai"){let h=e.urlSuffix||"/v1/messages",g={apiKey:e.apiKey,baseUrl:i,defaultModel:t,apiEndpoint:h,streamFormat:"anthropic",sessionId:s,retry:e.retry,modelConfig:r};l=new Kt(g),o=l;}else if(n==="doubao")u=new lo({apiKey:e.apiKey,baseUrl:i,defaultModel:t,thinking:{type:"enabled"},retry:e.retry}),o=u;else if(n==="gemini"){let h={...e,defaultModel:t,lastSelectedModel:t},g=$t.createAdapter(n,h);o=g,d=$w(g);}else throw new Error(`Unsupported provider protocol: ${n}`);let p=Fw({model:t,baseUrl:i,openaiProvider:l,anthropicProvider:c,doubaoProvider:u,geminiProvider:d});return {llmProvider:o,controls:p}}function um(a){return new Yi({llmProvider:a.llmProvider,model:a.model,tools:a.tools,memory:a.memory,config:a.config,agentName:a.agentName,agentDescription:a.agentDescription,instructions:a.instructions,contextInjection:a.contextInjection,plannerMode:a.plannerMode,structuredOutput:a.structuredOutput,providerName:a.providerName,contextWindow:a.contextWindow,tailTokenBudget:a.tailTokenBudget,maxInputTokensOverride:a.maxInputTokensOverride,toolInputGuardrails:a.toolInputGuardrails??Gp,toolOutputGuardrails:a.toolOutputGuardrails??Up,compressionMode:a.compressionMode,workspacePath:a.workspacePath,permissionManager:a.permissionManager,disableSystemPrompt:a.disableSystemPrompt,enableFGTS:a.enableFGTS})}function dm(a){return new ho({runner:a.runner,memory:a.memory,sessionManager:a.sessionManager||new Xt,sessionEnabled:a.sessionEnabled??false,workDir:a.workDir,model:a.model,memoryPressure:a.memoryPressure,compatProfile:a.compatProfile,systemPrompt:a.systemPrompt,setSandboxMode:a.setSandboxMode,llmProvider:a.llmProvider})}function yo(a){return new at(a)}W();async function Wl(a){let{sessionId:e,provider:t,llmConfig:s,workspacePath:n,workDir:r,instructions:i,systemPrompt:o,agentName:l,agentDescription:c,permissionManager:u,tools:d,memory:p,memorySize:h,agentConfig:g,contextInjection:f,plannerMode:b,structuredOutput:y,toolInputGuardrails:w,toolOutputGuardrails:C,compressionMode:S,platformServices:T,sessionManager:_,sessionEnabled:M,disableSystemPrompt:F,enableFGTS:x}=a,R=p??yo(h??50),j=typeof i=="string"?i:"[Function]";m.info("HOST_FACTORY",`Creating host with instructions length: ${j.length}`),m.info("HOST_FACTORY",`instructions contains \u534F\u4F5C\u6A21\u5F0F: ${j.includes("\u534F\u4F5C\u6A21\u5F0F")}`),m.info("HOST_FACTORY",`instructions contains delegate_task: ${j.includes("delegate_task")}`),m.debug("HOST_FACTORY",`instructions preview: ${j.substring(0,300)}`);let{llmProvider:v,controls:E}=fo({provider:t,model:s.model,sessionId:e}),O=s.compatProfile??null,I=O?new zr(O):void 0,A=d??await As(n,T),L=g??{maxIterations:0,temperature:.7},$=um({llmProvider:v,model:s.model,tools:A,memory:R,config:L,agentName:l,agentDescription:c,instructions:i,contextInjection:f,plannerMode:b,structuredOutput:y,providerName:s.providerName,contextWindow:O?.contextWindow,tailTokenBudget:O?.tailTokenBudget,maxInputTokensOverride:s.maxInputTokens,toolInputGuardrails:w,toolOutputGuardrails:C,compressionMode:S,workspacePath:n,permissionManager:u,disableSystemPrompt:F,enableFGTS:x});return {host:dm({runner:$,memory:R,sessionManager:_??new Xt,sessionEnabled:M??false,workDir:r,model:s.model,memoryPressure:I,compatProfile:O,systemPrompt:o??(typeof i=="string"?i:""),llmProvider:v}),controls:E,llmProvider:v,runner:$,memory:R}}var Rt=class{hostController;platformServices;constructor(e){this.platformServices=e.platformServices,this.hostController=e.hostController??new Wr;}setWorkspace(e){this.hostController.setWorkspace(e);}getHost(e){return this.hostController.getHost(e)}hasHost(e){return this.hostController.hasHost(e)}clearHost(e){this.hostController.clearHost(e);}clearAll(){this.hostController.clearAll();}forEachHost(e){this.hostController.forEachHost(e);}async getOrCreateHost(e){let{sessionId:t,configKey:s,provider:n,llmConfig:r,workspacePath:i,workDir:o,instructions:l,systemPrompt:c,agentName:u,agentDescription:d,permissionManager:p,tools:h,memory:g,memorySize:f,agentConfig:b,contextInjection:y,plannerMode:w,structuredOutput:C,toolInputGuardrails:S,toolOutputGuardrails:T,compressionMode:_,sessionManager:M,sessionEnabled:F,disableSystemPrompt:x,enableFGTS:R,onHostCreated:j}=e;return this.hostController.getOrCreateHost({sessionId:t,configKey:s,createHost:async()=>{let{host:v,controls:E,llmProvider:O,runner:I,memory:A}=await Wl({sessionId:t,provider:n,llmConfig:r,workspacePath:i,workDir:o,instructions:l,systemPrompt:c,agentName:u,agentDescription:d,permissionManager:p,tools:h,memory:g,memorySize:f,agentConfig:b,contextInjection:y,plannerMode:w,structuredOutput:C,toolInputGuardrails:S,toolOutputGuardrails:T,compressionMode:_,platformServices:this.platformServices,sessionManager:M,sessionEnabled:F,disableSystemPrompt:x,enableFGTS:R});return j?.({host:v,controls:E,llmProvider:O,runner:I,memory:A}),v}})}async runTask(e){let{prompt:t,metadata:s,abortSignal:n,onHostReady:r,onEvent:i,...o}=e,l=await this.getOrCreateHost(o);r?.(l);let c=i?l.on(i):void 0;try{return await l.runTask(t,{metadata:s,abortSignal:n})}finally{c&&c();}}};async function pm(a){let e=a.initialProviderId,t=a.initialModelName,s=a.routeConfig,n=0,r=null,i=s?s.routes.filter(o=>o.enabled).length:a.resolvedRoute?.fallbackChain.length??1;for(;;)try{return await a.runAttempt({providerId:e,modelName:t,routeConfig:s,attempt:n,isRetry:n>0,previousError:r})}catch(o){let l=o instanceof Error?o:new Error(String(o));if(r=l,a.modelRouter&&e&&a.modelRouter.recordFailure(e,l),!!!(a.autoFailover&&a.resolvedRoute&&a.fallbackDecider&&a.modelAlias&&e))throw l;let u=a.fallbackDecider.shouldFallback(a.modelAlias,e,l,a.resolvedRoute.fallbackChain);if(u.shouldFallback&&u.targetProvider&&u.event){if(a.fallbackDecider.executeFallback(u),n+=1,e=u.targetProvider.providerId,t=u.targetProvider.modelName,s&&(s={...s,routes:s.routes.filter(d=>d.providerId!==u.event.fromProviderId)}),a.onRetry?.({providerId:e,modelName:t,attempt:n,decision:u}),n>=i)throw a.onExhausted?.("All providers have failed. Please try again later."),l;continue}throw u.exhausted&&a.onExhausted?.(u.reason),l}}W();var Ir=240,bo=2e3;function At(a,e){return a?a.length<=e?a:a.slice(0,e).trimEnd()+"...":""}var vo=class extends Error{code;constructor(e){super(e),this.code="missing_provider";}},Et=class{hostService;checkpointService;resolveProvider;actionLog;constructor(e){this.hostService=e.hostService,this.checkpointService=e.checkpointService,this.resolveProvider=e.resolveProvider,this.actionLog=e.actionLog;}async runSession(e){let{sessionId:t,prompt:s,metadata:n,startedAt:r=Date.now(),isAutoRouted:i,routeConfig:o,modelRouter:l,fallbackDecider:c,eventHub:u,abortSignal:d,buildHostConfig:p,onHostReady:h,onRuntimeEvent:g,onStatus:f,onRouteResolved:b,onRetry:y}=e,w=e.providerId,C=e.modelName,S=null,T=this.actionLog?.createRunId();if(this.actionLog){let F=At(s,Ir);this.actionLog.record({type:"run_start",sessionId:t,runId:T,actor:"user",summary:F?`User: ${F}`:"User: (empty prompt)",data:{prompt:At(s,bo),promptLength:s.length,attachments:n?.attachments?.map(x=>({type:x.type,name:x.name,path:x.path}))}});}i&&o&&l&&(S=l.resolveProvider(o.modelAlias),S&&(w=S.providerId,C=S.modelName,b?.(S),S.degraded&&f?.("warning",`Using degraded provider: ${w}`)));let _=n;if(this.checkpointService)try{await this.checkpointService.startMessage(t);}catch{f?.("warning","Checkpoint start failed");}let M=false;try{let F=await pm({modelAlias:o?.modelAlias,initialProviderId:w,initialModelName:C,routeConfig:o,resolvedRoute:S,fallbackDecider:c,modelRouter:l??void 0,autoFailover:o?.autoFailover===!0,onRetry:({decision:x})=>{this.actionLog&&this.actionLog.record({type:"status",sessionId:t,runId:T,actor:"system",summary:x?.event?`Fallback: ${x.event.fromProviderId} -> ${x.event.toProviderId}`:"Fallback: switching provider",data:{from:x?.event?.fromProviderId,to:x?.event?.toProviderId,reason:x?.reason}}),y?.(x);},onExhausted:x=>{f?.("error",`All providers exhausted: ${x}`),this.actionLog&&this.actionLog.record({type:"run_error",sessionId:t,runId:T,actor:"system",summary:`All providers exhausted: ${At(x,Ir)}`,data:{reason:x}});},runAttempt:async x=>{let R=this.resolveProvider(x.providerId,x.modelName);if(!R.provider||!R.llmConfig)throw new vo("No provider configured. Please add an API provider first.");f?.("info",`Connecting to ${R.llmConfig.model}...`),this.actionLog&&this.actionLog.record({type:"run_attempt",sessionId:t,runId:T,actor:"system",summary:x.isRetry?`Retry ${x.attempt}: ${R.llmConfig.model}`:`Run: ${R.llmConfig.model}`,data:{providerId:R.provider.id,providerName:R.llmConfig.providerName,model:R.llmConfig.model,attempt:x.attempt,isRetry:x.isRetry,previousError:x.previousError?.message}});let j=p(R.provider,R.llmConfig),v={contextUsed:0,startTime:Date.now(),provider:R.llmConfig.providerName||R.provider.id||"unknown",model:R.llmConfig.model};return {summary:await this.hostService.runTask({...j,prompt:s,metadata:_,abortSignal:d,onHostReady:h,onEvent:O=>{if(O.type==="tool_call_end"&&m.info("ORCHESTRATOR",`\u{1F525} onEvent received tool_call_end: name=${O.name} toolId=${O.toolId}`),this.actionLog){let I=this.buildActionLogEntry(O,t,T);I&&this.actionLog.record(I);}u?.emit(t,O,v),g?.(O,v);}}),contextUsed:v.contextUsed,providerId:R.provider.id}}});if(S&&F.providerId&&l){let x=Date.now()-r;l.recordSuccess(F.providerId,x),c&&c.recordSuccess(F.providerId);}if(this.checkpointService)try{await this.checkpointService.finishMessage(t,"Message completed"),M=!0;}catch{f?.("warning","Checkpoint save failed");}return {summary:F.summary,contextUsed:F.contextUsed,providerId:F.providerId}}catch(F){if(this.actionLog){let x=F instanceof Error?F.message:String(F);this.actionLog.record({type:"run_error",sessionId:t,runId:T,actor:"system",summary:`Run error: ${At(x,Ir)}`,data:{message:x}});}throw F}finally{if(this.checkpointService&&!M)try{await this.checkpointService.stopWatching();}catch{f?.("warning","Checkpoint cleanup failed");}}}buildActionLogEntry(e,t,s){if(!this.actionLog)return null;let n=r=>this.actionLog?.formatFilePath(r)??r;switch(e.type){case "tool_call_start":{let r=e.targetPath?n(e.targetPath):void 0,i=r?`Tool start: ${e.name} (${r})`:`Tool start: ${e.name}`,o=e.args?At(JSON.stringify(e.args),bo):void 0;return {type:"tool_call_start",sessionId:t,runId:s,actor:"tool",summary:i,files:r?[r]:void 0,data:{name:e.name,toolId:e.toolId,batchId:e.batchId,targetPath:r,description:e.description,equivalentCommand:e.equivalentCommand,argsPreview:o}}}case "tool_call_end":{let r=e.targetPath?n(e.targetPath):void 0,i=r?`Tool ${e.success?"done":"failed"}: ${e.name} (${r})`:`Tool ${e.success?"done":"failed"}: ${e.name}`,o=e.output?At(e.output,bo):void 0;return {type:"tool_call_end",sessionId:t,runId:s,actor:"tool",summary:i,files:r?[r]:void 0,data:{name:e.name,success:e.success,duration:e.duration,resultLength:e.resultLength,summary:e.summary,outputPreview:o,outputTruncated:e.outputTruncated,toolId:e.toolId,batchId:e.batchId,targetPath:r}}}case "file_stream":{if(!e.isComplete)return null;let r=n(e.filePath),i=e.additions||e.removals?`File updated: ${r} (+${e.additions??0}/-${e.removals??0})`:`File updated: ${r}`;return {type:"file_change",sessionId:t,runId:s,actor:"tool",summary:i,files:[r],data:{filePath:r,additions:e.additions,removals:e.removals,description:e.description,contentLength:e.content?.length??0}}}case "edit_file_stream":{if(!e.isComplete)return null;let r=n(e.filePath),i=`File edited: ${r}`;return {type:"file_change",sessionId:t,runId:s,actor:"tool",summary:i,files:[r],data:{filePath:r,startLine:e.startLine,hunks:e.hunks?.length??0,oldPreview:At(e.oldString,200),newPreview:At(e.newString,200),description:e.description}}}case "write_file_stream":{if(!e.isComplete)return null;let r=n(e.filePath),i=`File written: ${r}`;return {type:"file_change",sessionId:t,runId:s,actor:"tool",summary:i,files:[r],data:{filePath:r,contentLength:e.content?.length??0,description:e.description}}}case "checkpoint":return {type:"checkpoint",sessionId:t,runId:s,actor:"system",summary:`Checkpoint saved: ${e.id}`,data:{id:e.id,auto:e.auto}};case "plan_update":{let r=e.plan.length,i=e.plan.filter(c=>c.status==="completed").length,o=e.plan.filter(c=>c.status==="in_progress").length,l=r-i-o;return {type:"plan_update",sessionId:t,runId:s,actor:"assistant",summary:`Plan update: ${i} done, ${o} active, ${l} pending`,data:{explanation:e.explanation,plan:e.plan}}}case "context_compaction":return {type:"context_compaction",sessionId:t,runId:s,actor:"system",summary:`Context compacted: ${e.originalTokens} -> ${e.finalTokens} tokens`,data:{originalMessages:e.originalMessages,keptMessages:e.keptMessages,droppedMessages:e.droppedMessages,compressedMessages:e.compressedMessages,originalTokens:e.originalTokens,finalTokens:e.finalTokens,budgetTokens:e.budgetTokens,useLLM:e.useLLM}};case "stream_retry":return {type:"stream_retry",sessionId:t,runId:s,actor:"system",summary:`Stream retry ${e.attempt}/${e.maxRetries}: ${e.errorCode}`,data:{error:e.error,errorCode:e.errorCode,attempt:e.attempt,maxRetries:e.maxRetries,delayMs:e.delayMs}};case "stream_recovered":return {type:"stream_recovered",sessionId:t,runId:s,actor:"system",summary:`Stream recovered (attempt ${e.attempt})`,data:{attempt:e.attempt,maxRetries:e.maxRetries}};case "run_result":return {type:"run_result",sessionId:t,runId:s,actor:"assistant",summary:`Run completed in ${e.durationMs}ms, tokens ${e.totalTokens}`,data:{outputPreview:At(e.output,bo),totalTokens:e.totalTokens,iterations:e.iterations,toolCalls:e.toolCalls,durationMs:e.durationMs}};case "error":return {type:"run_error",sessionId:t,runId:s,actor:"system",summary:`Runtime error: ${At(e.message,Ir)}`,data:{message:e.message}};case "error_classified":return {type:"run_error",sessionId:t,runId:s,actor:"system",summary:`Error ${e.code}: ${At(e.message,Ir)}`,data:{category:e.category,code:e.code,message:e.message,suggestion:e.suggestion,retryable:e.retryable}};default:return null}}};W();var jw=[".png",".jpg",".jpeg",".gif",".bmp",".ico",".webp",".svg",".tiff",".tif",".mp3",".mp4",".avi",".mov",".wmv",".flv",".wav",".ogg",".webm",".zip",".tar",".gz",".bz2",".7z",".rar",".xz",".exe",".dll",".so",".dylib",".bin",".app",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".db",".sqlite",".sqlite3",".ttf",".otf",".woff",".woff2",".eot",".jar",".war",".class",".pyc",".pyo",".o",".a",".lib",".node",".wasm",".asar"],mm={ignoredPatterns:["**/.git/**","**/.cdundo/**","**/.svn/**","**/.hg/**","**/.DS_Store","**/Thumbs.db","**/desktop.ini","**/*.log","**/*.tmp","**/*.temp","**/*.swp","**/*.swo","**/*~","**/node_modules/**","**/bower_components/**","**/.npm/**","**/.yarn/**","**/.pnpm-store/**","**/package-lock.json","**/yarn.lock","**/pnpm-lock.yaml","**/dist/**","**/build/**","**/out/**","**/output/**","**/.output/**","**/target/**","**/bin/**","**/obj/**","**/*.bundle.js","**/*.bundle.css","**/*.min.js","**/*.min.css","**/.next/**","**/.nuxt/**","**/.svelte-kit/**","**/.astro/**","**/.vercel/**","**/.netlify/**","**/.turbo/**","**/.cache/**","**/.parcel-cache/**","**/.webpack/**","**/.vite/**","**/coverage/**","**/.nyc_output/**","**/jest_cache/**","**/.jest/**","**/__pycache__/**","**/*.pyc","**/*.pyo","**/*.pyd","**/.venv/**","**/venv/**","**/env/**","**/.env/**","**/virtualenv/**","**/.Python","**/pip-wheel-metadata/**","**/*.egg-info/**","**/.eggs/**","**/site-packages/**","**/target/**","**/.gradle/**","**/gradle/**","**/.m2/**","**/*.class","**/*.jar","**/*.war","**/*.ear","**/target/**","**/*.rlib","**/Cargo.lock","**/vendor/**","**/go.sum","**/bin/**","**/obj/**","**/packages/**","**/.nuget/**","**/*.dll","**/*.exe","**/*.pdb","**/vendor/bundle/**","**/.bundle/**","**/Gemfile.lock","**/vendor/**","**/composer.lock","**/.idea/**","**/.vscode/**","**/*.sublime-*","**/.project","**/.classpath","**/.settings/**","**/*.iml","**/.env.local","**/.env.*.local","**/.env.development","**/.env.production","**/*.sqlite","**/*.sqlite3","**/*.db","**/npm-debug.log*","**/yarn-debug.log*","**/yarn-error.log*","**/.pnpm-debug.log*"],maxCheckpoints:50,checkpointTTL:864e5,enabled:true,largeFileThreshold:1048576,veryLargeFileThreshold:10485760,binaryExtensions:jw};var wo=class{workspacePath;shadowDir;shadowGitDir;git;watcher=null;changeBuffer=[];isWatching=false;currentSessionId=null;currentMessageIndex=0;config;changeCallbacks=new Set;initialized=false;debounceMap=new Map;DEBOUNCE_MS=100;gitOperationLock=Promise.resolve();GIT_RETRY_ATTEMPTS=3;GIT_RETRY_DELAY_MS=500;constructor(e={}){this.config={...mm,...e},this.workspacePath="",this.shadowDir="",this.shadowGitDir="",this.git=gm();}async init(e){if(this.initialized&&this.workspacePath===e){m.debug("CHECKPOINT","Already initialized for: "+e);return}this.workspacePath=e,this.shadowDir=se.join(e,".cdundo"),this.shadowGitDir=se.join(this.shadowDir,".git"),m.debug("CHECKPOINT","Initializing for workspace: "+e),await ce.mkdir(this.shadowDir,{recursive:true}),await this.addToGitignore();let t=Me.existsSync(this.shadowGitDir);this.git=gm(this.shadowDir),t?m.debug("CHECKPOINT","Using existing shadow git repository"):(await this.git.init(),await this.git.addConfig("user.email","checkpoint@neox.local"),await this.git.addConfig("user.name","Neox Checkpoint"),m.debug("CHECKPOINT","Created new shadow git repository")),await this.syncWorkspaceToShadow(),await this.withGitLock(async()=>{if((await this.git.status()).files.length>0||!t){await this.git.add(".");try{await this.git.commit("Initial checkpoint - workspace sync"),m.debug("CHECKPOINT","Created initial checkpoint");}catch{m.debug("CHECKPOINT","No changes to commit for initial checkpoint");}}}),this.initialized=true,m.debug("CHECKPOINT","Initialization complete");}beforeCheckpointId=null;async startWatching(e,t=0){if(!this.initialized)throw new Error("ShadowGitCheckpoint not initialized. Call init() first.");if(this.isWatching)return m.debug("CHECKPOINT","Already watching, updating session info"),m.debug("CHECKPOINT","Clearing changeBuffer (was: "+this.changeBuffer.length+" items)"),this.currentSessionId=e,this.currentMessageIndex=t,this.changeBuffer=[],this.beforeCheckpointId;m.debug("CHECKPOINT","Starting new watch, clearing changeBuffer (was: "+this.changeBuffer.length+" items)"),this.currentSessionId=e,this.currentMessageIndex=t,this.changeBuffer=[];try{await this.withGitLock(async()=>{await this.syncWorkspaceToShadow(),await this.git.add("."),(await this.git.status()).files.length>0&&await this.git.commit(`Before session ${e} - auto checkpoint`);let r=await this.git.log({maxCount:1});this.beforeCheckpointId=r.latest?.hash||null,m.debug("CHECKPOINT","Created before-checkpoint: "+this.beforeCheckpointId);});}catch(n){m.error("CHECKPOINT","Failed to create before-checkpoint",{error:n});try{let r=await this.git.log({maxCount:1});this.beforeCheckpointId=r.latest?.hash||null;}catch{this.beforeCheckpointId=null;}}m.debug("CHECKPOINT","Starting file watcher for session: "+e);let s=n=>!!(n.includes(".cdundo")||n.includes("/.cdundo/")||n.includes("node_modules")||n.includes("/node_modules/")||n.includes("/.git/")||n.endsWith("/.git")||n.includes("/dist/")||n.includes("/build/")||n.includes("/.next/")||n.includes(".DS_Store")||n.includes(".swp")||n.includes(".swo")||n.endsWith("package-lock.json")||n.endsWith("yarn.lock")||n.endsWith("pnpm-lock.yaml"));return this.watcher=hm.watch(this.workspacePath,{ignored:s,persistent:true,ignoreInitial:true,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},followSymlinks:false}),this.watcher.on("add",n=>this.handleChange("create",n)).on("change",n=>this.handleChange("modify",n)).on("unlink",n=>this.handleChange("delete",n)).on("addDir",n=>this.handleChange("mkdir",n)).on("unlinkDir",n=>this.handleChange("rmdir",n)).on("error",n=>m.error("CHECKPOINT","Watcher error",{error:n})),this.isWatching=true,m.debug("CHECKPOINT","File watcher started"),this.beforeCheckpointId}getBeforeCheckpointId(){return this.beforeCheckpointId}async stopWatching(){this.watcher&&(await this.watcher.close(),this.watcher=null),this.isWatching=false,this.currentSessionId=null;for(let e of this.debounceMap.values())clearTimeout(e);this.debounceMap.clear(),this.changeBuffer=[],m.debug("CHECKPOINT","File watcher stopped");}handleChange(e,t){if(!this.isWatching)return;let s=se.relative(this.workspacePath,t);if(this.shouldIgnorePath(s))return;let n=`${e}:${s}`,r=this.debounceMap.get(n);r&&clearTimeout(r),this.debounceMap.set(n,setTimeout(()=>{this.recordChange(e,s,t),this.debounceMap.delete(n);},this.DEBOUNCE_MS));}isBinaryFile(e){let t=se.extname(e).toLowerCase();return this.config.binaryExtensions.includes(t)}async detectBinaryContent(e){try{let t=await ce.open(e,"r"),s=Buffer.alloc(8192),{bytesRead:n}=await t.read(s,0,8192,0);await t.close();for(let r=0;r<n;r++)if(s[r]===0)return !0;return !1}catch{return false}}async recordChange(e,t,s){let n={type:e,path:t,timestamp:Date.now()},r=this.isBinaryFile(t);n.isBinary=r;let i=0,o=false,l=false;if(e==="create"||e==="modify")try{let d=await ce.stat(s);if(d.isFile()&&(i=d.size,n.size=i,o=i>this.config.veryLargeFileThreshold,l=i>this.config.largeFileThreshold,n.isLargeFile=l,!r&&!l)){let p=await this.detectBinaryContent(s);n.isBinary=p;}}catch{}if((e==="delete"||e==="modify")&&!n.isBinary&&!l){let d=se.join(this.shadowDir,t);try{let p=await ce.stat(d);p.isFile()&&p.size<this.config.largeFileThreshold&&(n.previousContent=await ce.readFile(d,"utf-8"));}catch{}}if((e==="create"||e==="modify")&&!n.isBinary&&!l)try{n.newContent=await ce.readFile(s,"utf-8");}catch{}this.changeBuffer.push(n),o?m.debug("CHECKPOINT",`Skipping very large file (${(i/1024/1024).toFixed(1)}MB): ${t}`):await this.syncFileToShadow(t,e,s);for(let d of this.changeCallbacks)try{d(n);}catch(p){m.error("CHECKPOINT","Callback error",{error:p});}let c=i?` (${this.formatFileSize(i)})`:"",u=n.isBinary?" [binary]":"";m.debug("CHECKPOINT",`Recorded ${e}: ${t}${c}${u}`);}formatFileSize(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/1024/1024).toFixed(1)}MB`}async syncFileToShadow(e,t,s){let n=se.join(this.shadowDir,e),r=se.dirname(n);try{switch(t){case "create":case "modify":await ce.mkdir(r,{recursive:!0}),await ce.copyFile(s,n);break;case "delete":await ce.unlink(n).catch(()=>{});break;case "mkdir":await ce.mkdir(n,{recursive:!0});break;case "rmdir":await ce.rm(n,{recursive:!0,force:!0}).catch(()=>{});break}}catch(i){m.error("CHECKPOINT",`Failed to sync ${e}`,{error:i});}}async syncWorkspaceToShadow(){m.debug("CHECKPOINT","Syncing workspace to shadow...");let e=0,t=0,s=0,n=async(r,i)=>{let o;try{o=await ce.readdir(r,{withFileTypes:!0});}catch{return}for(let l of o){let c=se.join(r,l.name),u=se.join(i,l.name),d=se.relative(this.workspacePath,c);if(!this.shouldIgnore(d)){if(l.isDirectory())await ce.mkdir(u,{recursive:true}),await n(c,u);else if(l.isFile())try{let p=await ce.stat(c);if(p.size>this.config.veryLargeFileThreshold){t++,m.debug("CHECKPOINT",`Skipping very large file: ${d} (${this.formatFileSize(p.size)})`);continue}await ce.mkdir(se.dirname(u),{recursive:!0}),await ce.copyFile(c,u),e++,s+=p.size;}catch{m.warn("CHECKPOINT",`Failed to sync file: ${d}`);}}}};await n(this.workspacePath,this.shadowDir),m.debug("CHECKPOINT",`Workspace sync complete: ${e} files (${this.formatFileSize(s)}), ${t} large files skipped`);}shouldIgnorePath(e){return !!(e.startsWith(".cdundo")||e.includes("/.cdundo/")||e.includes("node_modules/")||e.startsWith("node_modules")||e.startsWith(".git")||e.includes("/.git/")||e.startsWith("dist/")||e.includes("/dist/")||e.startsWith("build/")||e.includes("/build/")||e.startsWith(".next/")||e.includes("/.next/")||e.includes(".DS_Store")||e.endsWith(".swp")||e.endsWith(".swo")||e.endsWith("package-lock.json")||e.endsWith("yarn.lock")||e.endsWith("pnpm-lock.yaml"))}shouldIgnore(e){if(this.shouldIgnorePath(e))return true;for(let t of this.config.ignoredPatterns)if(this.matchPattern(e,t))return true;return false}matchPattern(e,t){let s=t.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/<<<GLOBSTAR>>>/g,".*").replace(/\?/g,".");return new RegExp(`^${s}$`).test(e)}async createCheckpoint(e){if(!this.initialized)throw new Error("ShadowGitCheckpoint not initialized");return m.debug("CHECKPOINT","Creating checkpoint: "+e),await this.withGitLock(async()=>{if(await this.git.add("."),(await this.git.status()).files.length===0&&this.changeBuffer.length===0)return m.debug("CHECKPOINT","No changes to checkpoint"),{id:(await this.git.log({maxCount:1})).latest?.hash||"no-changes",label:e,timestamp:Date.now(),sessionId:this.currentSessionId||"",messageIndex:this.currentMessageIndex,changes:[],stats:{created:0,modified:0,deleted:0,directories:0,total:0}};let s=this.calculateStats(),n=this.formatCommitMessage(e,s),r=await this.git.commit(n),i={id:r.commit,label:e,timestamp:Date.now(),sessionId:this.currentSessionId||"",messageIndex:this.currentMessageIndex,changes:[...this.changeBuffer],stats:s};return this.changeBuffer=[],this.currentMessageIndex++,m.debug("CHECKPOINT",`Checkpoint created: ${r.commit} (${s.total} changes)`),await this.cleanupOldCheckpoints(),i})}lastRollbackFromId=null;getLastRollbackFromId(){return this.lastRollbackFromId}async rollbackTo(e){if(!this.initialized)throw new Error("ShadowGitCheckpoint not initialized");m.debug("CHECKPOINT","Rolling back to checkpoint: "+e);let t=[],s=[],n;try{return await this.withGitLock(async()=>{await this.git.add(".");let r=await this.git.status();if(m.debug("CHECKPOINT","Current git status before rollback: "+r.files.length+" files"),r.files.length>0)try{await this.git.commit("Changes before rollback (for reapply)"),m.debug("CHECKPOINT","Created commit for rollback comparison");}catch{m.debug("CHECKPOINT","No changes to commit (might be already committed)");}n=(await this.git.log({maxCount:1})).latest?.hash,this.lastRollbackFromId=n||null,m.debug("CHECKPOINT","Saved reapply checkpoint: "+n);let o=await this.git.diff([e,"HEAD","--name-status"]),l=o.trim().split(`
1864
1864
  `).filter(c=>c.trim());m.debug("CHECKPOINT","Diff output: "+o),m.debug("CHECKPOINT","Files to rollback: "+l.length);for(let c of l){let[u,...d]=c.split(" "),p=d.join(" ");if(!p)continue;let h=se.join(this.workspacePath,p),g=se.join(this.shadowDir,p);m.debug("CHECKPOINT",`Processing: status=${u}, file=${p}`);try{switch(u){case "A":m.debug("CHECKPOINT",`Deleting added file: ${h}`),await ce.unlink(h).catch(f=>{m.debug("CHECKPOINT",`Failed to delete workspace file: ${f}`);}),await ce.unlink(g).catch(()=>{}),t.push(`deleted: ${p}`);break;case "M":m.debug("CHECKPOINT","Restoring modified file: "+p),await this.git.checkout([e,"--",p]),await ce.mkdir(se.dirname(h),{recursive:!0}),await ce.copyFile(g,h),t.push(`restored: ${p}`);break;case "D":m.debug("CHECKPOINT","Recovering deleted file: "+p),await this.git.checkout([e,"--",p]),await ce.mkdir(se.dirname(h),{recursive:!0}),await ce.copyFile(g,h),t.push(`recovered: ${p}`);break;default:m.debug("CHECKPOINT",`Unhandled status ${u} for ${p}`);}}catch(f){m.error("CHECKPOINT",`Error processing ${p}`,{error:f}),s.push(`${p}: ${f}`);}}await this.git.reset(["--hard",e]),this.changeBuffer=[],m.debug("CHECKPOINT",`Rollback complete: ${t.length} restored, ${s.length} errors`);}),{success:s.length===0,restored:t,errors:s,reapplyCheckpointId:n}}catch(r){return m.error("CHECKPOINT","Rollback failed",{error:r}),{success:false,restored:t,errors:[String(r)],reapplyCheckpointId:n}}}async rollbackSingleFile(e){if(!this.initialized)return {success:false,error:"ShadowGitCheckpoint not initialized"};m.debug("CHECKPOINT","Rolling back single file: "+e);let t=this.beforeCheckpointId;if(!t)return {success:false,error:"No before checkpoint available. Make sure startWatching() was called before this message."};let s=se.join(this.workspacePath,e),n=se.join(this.shadowDir,e);try{return await this.withGitLock(async()=>{let r=await this.git.diff([t,"HEAD","--name-status","--",e]);if(m.debug("CHECKPOINT","File diff status: "+r.trim()),!r.trim())return m.debug("CHECKPOINT","File has no changes since before checkpoint"),{success:!0};let[i]=r.trim().split(" ");switch(i){case "A":m.debug("CHECKPOINT","File was added after checkpoint, deleting: "+e);try{return await ce.unlink(s),await ce.unlink(n).catch(()=>{}),{success:!0}}catch(o){return {success:!1,error:`Failed to delete file: ${o}`}}case "M":case "D":m.debug("CHECKPOINT","Restoring file from before checkpoint: "+e);try{return await this.git.checkout([t,"--",e]),await ce.mkdir(se.dirname(s),{recursive:!0}),await ce.copyFile(n,s),m.debug("CHECKPOINT","Successfully rolled back file: "+e),{success:!0}}catch(o){return {success:!1,error:`Failed to restore file: ${o}`}}default:return m.debug("CHECKPOINT","Unhandled status: "+i),{success:!1,error:`Unhandled file status: ${i}`}}})}catch(r){return m.error("CHECKPOINT","Failed to rollback single file",{error:r}),{success:false,error:String(r)}}}async reapplySingleFile(e){if(!this.initialized)return {success:false,error:"ShadowGitCheckpoint not initialized"};m.debug("CHECKPOINT","Reapplying single file: "+e);try{return await this.withGitLock(async()=>{let t=se.join(this.workspacePath,e),s=se.join(this.shadowDir,e);try{return await this.git.checkout(["HEAD","--",e]),await ce.mkdir(se.dirname(t),{recursive:!0}),await ce.copyFile(s,t),m.debug("CHECKPOINT","Successfully reapplied file: "+e),{success:!0}}catch(n){return {success:!1,error:`File not found in HEAD: ${n}`}}})}catch(t){return m.error("CHECKPOINT","Failed to reapply single file",{error:t}),{success:false,error:String(t)}}}async getCheckpoints(e=50,t){if(!this.initialized)return [];try{let s=t?e*3:e,r=(await this.git.log({maxCount:s})).all.map(i=>{let o=this.parseCommitMessage(i.message);return {id:i.hash,label:o.label,timestamp:new Date(i.date).getTime(),sessionId:o.sessionId,messageIndex:o.messageIndex,stats:o.stats}});return t&&(r=r.filter(i=>i.sessionId===t)),r.slice(0,e)}catch(s){return m.error("CHECKPOINT","Failed to get checkpoints",{error:s}),[]}}async getDiff(e,t="HEAD"){if(!this.initialized)throw new Error("ShadowGitCheckpoint not initialized");await this.git.diff([e,t,"--stat","--numstat"]);let n=await this.git.diffSummary([e,t]),r=n.files.map(i=>{let o="insertions"in i&&"deletions"in i;return {path:i.file,status:this.getFileStatus(i),additions:o?i.insertions:0,deletions:o?i.deletions:0,lines:[]}});return {checkpointId:e,files:r,stats:{filesChanged:n.changed,additions:n.insertions,deletions:n.deletions}}}getChangeBuffer(){return this.isWatching?[...this.changeBuffer]:(m.debug("CHECKPOINT","getChangeBuffer called but not watching, returning empty array"),[])}getCurrentStats(){if(!this.isWatching)return m.debug("CHECKPOINT","getCurrentStats called but not watching, returning empty stats"),{created:0,modified:0,deleted:0,directories:0,total:0};let e=this.calculateStats();return m.debug("CHECKPOINT","getCurrentStats called, changeBuffer length: "+this.changeBuffer.length),this.changeBuffer.length>0&&m.debug("CHECKPOINT","changeBuffer contents: "+this.changeBuffer.map(t=>`${t.type}: ${t.path}`).join(", ")),e}onFileChange(e){return this.changeCallbacks.add(e),()=>this.changeCallbacks.delete(e)}isInitialized(){return this.initialized}isActive(){return this.isWatching}getShadowDir(){return this.shadowDir}calculateStats(){let e={created:0,modified:0,deleted:0,directories:0,total:0};for(let t of this.changeBuffer)switch(t.type){case "create":e.created++;break;case "modify":e.modified++;break;case "delete":e.deleted++;break;case "mkdir":case "rmdir":e.directories++;break}return e.total=e.created+e.modified+e.deleted+e.directories,e}formatCommitMessage(e,t){let s=this.currentSessionId?`
1865
1865
 
1866
1866
  Session: ${this.currentSessionId}
@@ -1873,8 +1873,8 @@ Stats: +${t.created} ~${t.modified} -${t.deleted} d${t.directories}${s}`}parseCo
1873
1873
  .cdundo/
1874
1874
  `:`# Neox checkpoint directory
1875
1875
  .cdundo/
1876
- `;await ce.writeFile(e,s),m.debug("CHECKPOINT","Added .cdundo to .gitignore");}}catch(t){m.error("CHECKPOINT","Failed to update .gitignore",{error:t});}}async cleanupOldCheckpoints(){try{let e=await this.getCheckpoints(this.config.maxCheckpoints+10);e.length>this.config.maxCheckpoints&&(m.debug("CHECKPOINT",`Cleaning up old checkpoints (${e.length} > ${this.config.maxCheckpoints})`),await this.compressRepository());}catch(e){m.error("CHECKPOINT","Failed to cleanup checkpoints",{error:e});}}async compressRepository(){if(!this.initialized)return {success:false};try{let e=await this.getRepositorySize();m.debug("CHECKPOINT","Compressing repository..."),await this.git.raw(["reflog","expire","--expire=now","--all"]),await this.git.raw(["gc","--aggressive","--prune=now"]),await this.git.raw(["repack","-a","-d","--depth=250","--window=250"]);let t=await this.getRepositorySize(),s=e-t;return m.debug("CHECKPOINT",`Repository compressed: ${this.formatFileSize(e)} \u2192 ${this.formatFileSize(t)} (saved ${this.formatFileSize(s)})`),{success:!0,savedBytes:s}}catch(e){return m.error("CHECKPOINT","Failed to compress repository",{error:e}),{success:false}}}async getRepositorySize(){let e=0,t=async s=>{try{let n=await ce.readdir(s,{withFileTypes:!0});for(let r of n){let i=se.join(s,r.name);if(r.isDirectory())await t(i);else if(r.isFile()){let o=await ce.stat(i);e+=o.size;}}}catch{}};return await t(this.shadowGitDir),e}async getStorageStats(){let e=await this.getRepositorySize(),t=0,s=async r=>{try{let i=await ce.readdir(r,{withFileTypes:!0});for(let o of i){let l=se.join(r,o.name);if(o.isDirectory()&&o.name!==".git")await s(l);else if(o.isFile()){let c=await ce.stat(l);t+=c.size;}}}catch{}};await s(this.shadowDir);let n=await this.getCheckpoints(1e3);return {repositorySize:e,shadowDirSize:t,checkpointCount:n.length,oldestCheckpoint:n.length>0?{id:n[n.length-1].id,timestamp:n[n.length-1].timestamp}:void 0,newestCheckpoint:n.length>0?{id:n[0].id,timestamp:n[0].timestamp}:void 0}}async cleanStaleLocks(){let e=se.join(this.shadowGitDir,"index.lock");try{if(Me.existsSync(e)){let s=await ce.stat(e);Date.now()-s.mtimeMs>1e4&&(await ce.unlink(e),m.debug("CHECKPOINT","Cleaned stale lock file"));}}catch{}}async withGitLock(e){let t=this.gitOperationLock,s=()=>{};this.gitOperationLock=new Promise(n=>{s=n;});try{await t;let n;for(let r=1;r<=this.GIT_RETRY_ATTEMPTS;r++)try{return r>1&&(await this.cleanStaleLocks(),await new Promise(o=>setTimeout(o,this.GIT_RETRY_DELAY_MS))),await e()}catch(i){if(n=i,!(i.message&&(i.message.includes("index.lock")||i.message.includes("File exists")))||r===this.GIT_RETRY_ATTEMPTS)throw i;m.warn("CHECKPOINT",`Git operation failed (attempt ${r}/${this.GIT_RETRY_ATTEMPTS}), retrying...`);}throw n}finally{s();}}async destroy(){await this.stopWatching(),this.initialized=false,this.changeCallbacks.clear(),m.debug("CHECKPOINT","Instance destroyed");}};var Mr=class a{static instance=null;instances=new Map;config;constructor(e={}){this.config=e;}static getInstance(e){return a.instance||(a.instance=new a(e)),a.instance}async getCheckpoint(e){let t=se.normalize(e);if(!this.instances.has(t)){let s=new wo(this.config);await s.init(t),this.instances.set(t,s);}return this.instances.get(t)}async startWatching(e,t,s=0){return (await this.getCheckpoint(e)).startWatching(t,s)}getBeforeCheckpointId(e){let t=se.normalize(e);return this.instances.get(t)?.getBeforeCheckpointId()??null}async stopWatching(e){let t=se.normalize(e),s=this.instances.get(t);s&&await s.stopWatching();}async createCheckpoint(e,t){return (await this.getCheckpoint(e)).createCheckpoint(t)}async rollbackTo(e,t){return (await this.getCheckpoint(e)).rollbackTo(t)}async rollbackSingleFile(e,t){return (await this.getCheckpoint(e)).rollbackSingleFile(t)}async reapplySingleFile(e,t){return (await this.getCheckpoint(e)).reapplySingleFile(t)}async getCheckpoints(e,t,s){return (await this.getCheckpoint(e)).getCheckpoints(t,s)}async getDiff(e,t,s){return (await this.getCheckpoint(e)).getDiff(t,s)}async getChangeBuffer(e){return (await this.getCheckpoint(e)).getChangeBuffer()}async getCurrentStats(e){return (await this.getCheckpoint(e)).getCurrentStats()}async onFileChange(e,t){return (await this.getCheckpoint(e)).onFileChange(t)}isWatching(e){let t=se.normalize(e);return this.instances.get(t)?.isActive()??false}async cleanup(e){let t=se.normalize(e),s=this.instances.get(t);s&&(await s.destroy(),this.instances.delete(t));let n=se.join(t,".cdundo");try{await ce.rm(n,{recursive:!0,force:!0}),console.log("[CheckpointManager] Cleaned up:",n);}catch(r){console.error("[CheckpointManager] Failed to cleanup:",r);}}async destroyAll(){for(let[e,t]of this.instances)await t.destroy();this.instances.clear(),console.log("[CheckpointManager] All instances destroyed");}getActiveWorkspaces(){return Array.from(this.instances.keys()).filter(e=>this.instances.get(e)?.isActive())}getStats(){return {totalInstances:this.instances.size,activeInstances:this.getActiveWorkspaces().length,workspaces:Array.from(this.instances.keys())}}};Mr.getInstance();var Pr=class{checkpointManager;workspacePath=null;enabled=true;sessionMessageCounts=new Map;constructor(e){this.checkpointManager=e??Mr.getInstance();}setWorkspace(e){this.workspacePath=e;}setEnabled(e){this.enabled=e;}isEnabled(){return this.enabled}async startMessage(e){if(!this.enabled||!this.workspacePath)return null;let t=this.sessionMessageCounts.get(e)||0;return this.checkpointManager.startWatching(this.workspacePath,e,t)}async finishMessage(e,t){if(!this.enabled||!this.workspacePath)return null;let s=await this.createCheckpoint(e,t);return await this.checkpointManager.stopWatching(this.workspacePath),s}async stopWatching(){this.workspacePath&&await this.checkpointManager.stopWatching(this.workspacePath);}async createCheckpoint(e,t){if(!this.enabled||!this.workspacePath)return null;let s=this.sessionMessageCounts.get(e)||0,n=t||`Message #${s+1}`,r=await this.checkpointManager.createCheckpoint(this.workspacePath,n);return this.sessionMessageCounts.set(e,s+1),r}async rollbackToCheckpoint(e){return this.workspacePath?this.checkpointManager.rollbackTo(this.workspacePath,e):{success:false,restored:[],errors:["No workspace set"]}}async rollbackSingleFile(e){return this.workspacePath?this.checkpointManager.rollbackSingleFile(this.workspacePath,e):{success:false,error:"No workspace set"}}async reapplySingleFile(e){return this.workspacePath?this.checkpointManager.reapplySingleFile(this.workspacePath,e):{success:false,error:"No workspace set"}}async getCheckpoints(e,t){return this.workspacePath?this.checkpointManager.getCheckpoints(this.workspacePath,e,t):[]}async getCurrentStats(){return this.workspacePath?this.checkpointManager.getCurrentStats(this.workspacePath):null}async getChangeBuffer(){return this.workspacePath?this.checkpointManager.getChangeBuffer(this.workspacePath):[]}async cleanup(){this.workspacePath&&await this.checkpointManager.cleanup(this.workspacePath);}};function Bw(a,e,t){if(e?.setThinkingMode)return e.setThinkingMode(a),true;let s=t;return s?.setThinking?(s.setThinking({type:a==="auto"?"enabled":a}),true):s?.setDoubaoThinking?(s.setDoubaoThinking({type:a}),true):false}function Gw(){return {...xs(),capabilities:dl}}var Sn=class extends Error{status;body;constructor(e,t){super(`HTTP ${e}: ${t}`),this.name="ApiError",this.status=e,this.body=t;}};async function Uw(a,e,t,s){let n=new AbortController;return t&&t.addEventListener("abort",()=>n.abort()),(async()=>{for(;!n.signal.aborted;)try{let i=await fetch(a,{headers:{Accept:"text/event-stream",...s},signal:n.signal});if(!i.ok||!i.body)throw new Error(`SSE connect failed: ${i.status}`);let o=i.body.getReader(),l=new TextDecoder,c="";for(;;){let{done:u,value:d}=await o.read();if(u)break;c+=l.decode(d,{stream:!0});let p=c.split(`
1877
- `);c=p.pop()??"";let h="",g="";for(let f of p)if(f.startsWith("event:"))h=f.slice(6).trim();else if(f.startsWith("data:"))g+=f.slice(5).trim();else if(f===""){if(h&&g&&h!=="heartbeat"&&h!=="connected")try{let b=JSON.parse(g);e(b);}catch{}h="",g="";}}}catch{if(n.signal.aborted)return;await new Promise(o=>setTimeout(o,2e3));}})(),{close:()=>n.abort()}}var Dr=class{baseUrl;token;constructor(e){typeof e=="string"?this.baseUrl=e:(this.baseUrl=e?.baseUrl??"http://127.0.0.1:4399",this.token=e?.token);}get authHeaders(){return this.token?{Authorization:`Bearer ${this.token}`}:{}}async subscribe(e,t,s){let n=t?`${this.baseUrl}/events?sessionId=${encodeURIComponent(t)}`:`${this.baseUrl}/events`;return Uw(n,e,s,this.authHeaders)}async chat(e,t,s){await this.post(`/session/${e}/chat`,{prompt:t,...s});}async abort(e){await this.post(`/session/${e}/abort`);}async replyPermission(e,t,s){await this.post(`/permission/${e}/reply`,{approved:t,message:s});}async getRunMode(){return (await this.get("/mode")).mode}async setRunMode(e){await this.post("/mode",{mode:e});}async injectMessage(e,t){await this.post(`/session/${e}/inject`,{message:t});}async getStatus(){return this.get("/status")}async isHealthy(){try{return (await fetch(`${this.baseUrl}/health`,{signal:AbortSignal.timeout(3e3)})).ok}catch{return false}}async setSandboxMode(e,t){await this.post(`/session/${e}/sandbox`,{enabled:t});}async setApprovalMode(e,t){await this.post(`/session/${e}/approval`,{mode:t});}async compactSession(e){await this.post(`/session/${e}/compact`);}async clearSession(e){await this.post(`/session/${e}/clear`);}async getContextHealth(e){return this.get(`/session/${e}/context-health`)}async getSessionInfo(e){return this.get(`/session/${e}/info`)}async setCompressionMode(e,t){await this.post(`/session/${e}/compression`,{mode:t});}async getMemoryStats(e){return this.get(`/session/${e}/memory`)}async clearMemory(e){await this.post(`/session/${e}/memory/clear`);}async addMemoryMessage(e,t,s){await this.post(`/session/${e}/memory/add`,{role:t,content:s});}async getToolList(){return this.get("/tools")}async reloadTools(e){await this.post("/tools/reload",{workDir:e});}async setWorkspace(e){await this.post("/workspace",{workDir:e});}async startCheckpointWatching(e){return (await this.post("/checkpoint/start-watching",{sessionId:e}))?.checkpointId??null}async stopCheckpointWatching(){await this.post("/checkpoint/stop-watching");}async createCheckpoint(e,t){return this.post("/checkpoint/create",{sessionId:e,label:t})}async rollbackToCheckpoint(e){return this.post("/checkpoint/rollback",{checkpointId:e})}async rollbackSingleFile(e){return this.post("/checkpoint/rollback-file",{filePath:e})}async reapplySingleFile(e){return this.post("/checkpoint/reapply-file",{filePath:e})}async getCheckpoints(e,t){let s=new URLSearchParams;e!=null&&s.set("limit",String(e)),t&&s.set("sessionId",t);let n=s.toString();return this.get(`/checkpoints${n?`?${n}`:""}`)}async getCheckpointStats(){return this.get("/checkpoint/stats")}async getCheckpointChanges(){return this.get("/checkpoint/changes")}async setCheckpointEnabled(e){await this.post("/checkpoint/enabled",{enabled:e});}async isCheckpointEnabled(){return (await this.get("/checkpoint/enabled")).enabled}async cleanupCheckpoints(){await this.post("/checkpoint/cleanup");}async setTTSEnabled(e){return this.post("/tts",{enabled:e})}async getTTSStatus(){return this.get("/tts")}async get(e){let t=await fetch(`${this.baseUrl}${e}`,{headers:{...this.authHeaders}});if(!t.ok)throw new Sn(t.status,await t.text());return t.json()}async post(e,t){let s=await fetch(`${this.baseUrl}${e}`,{method:"POST",headers:{...this.authHeaders,...t?{"Content-Type":"application/json"}:{}},body:t?JSON.stringify(t):void 0});if(!s.ok)throw new Sn(s.status,await s.text());let n=await s.text();return n?JSON.parse(n):void 0}async del(e){let t=await fetch(`${this.baseUrl}${e}`,{method:"DELETE",headers:{...this.authHeaders}});if(!t.ok)throw new Sn(t.status,await t.text());let s=await t.text();return s?JSON.parse(s):void 0}async registerDevice(e,t){return this.post("/device/register",{device:e,capabilities:t})}async getDevice(e){return this.get(`/device/${e}`)}async getDevices(){return this.get("/devices")}async removeDevice(e){await this.del(`/device/${e}`);}async getHostStatus(){return this.get("/host/status")}async getHostAgents(){return this.get("/host/agents")}async getHostActivity(e){let t=e!=null?`?limit=${e}`:"";return this.get(`/host/activity${t}`)}async getHostSession(){return this.get("/host/session")}async getHostSystem(){return this.get("/host/system")}async hostInterrupt(e){return this.post("/host/interrupt",{reason:e})}async hostSendCommand(e,t){return this.post("/host/command",{text:e,priority:t})}async setAuth(e){return this.post("/admin/auth",e)}async getAuth(){return this.get("/admin/auth")}};W();var zl=class{client;listeners=new Set;subscription=null;currentMode="single";running=new Set;constructor(e,t){this.client=new Dr({baseUrl:e,token:t});}async connect(e){this.subscription=await this.client.subscribe(t=>{for(let s of this.listeners)try{s(t.data,t.tracker??{contextUsed:0,startTime:Date.now(),provider:"",model:""});}catch(n){m.error("REMOTE_ADAPTER","Event callback error",{error:n});}(t.type==="run_result"||t.type==="error")&&this.running.delete(t.sessionId);},e),m.info("REMOTE_ADAPTER","SSE connected");}async chat(e){this.running.add(e.sessionId);let t=new Promise((s,n)=>{let r=(i,o)=>{i.type==="run_result"?(this.listeners.delete(r),s()):i.type==="error"&&(this.listeners.delete(r),n(new Error(i.message||"Runtime error")));};this.listeners.add(r);});await this.client.chat(e.sessionId,e.prompt,{mode:e.mode,attachments:e.attachments,providerId:e.providerId,modelName:e.modelName}),await t;}abort(e){this.client.abort(e).catch(t=>{m.error("REMOTE_ADAPTER","Abort failed",{error:t});}),this.running.delete(e);}injectMessage(e,t){this.client.injectMessage(e,t).catch(s=>{m.error("REMOTE_ADAPTER","Inject failed",{error:s});});}onEvent(e){this.listeners.add(e);}offEvent(e){this.listeners.delete(e);}setRunMode(e){this.currentMode=e,this.client.setRunMode(e).catch(t=>{m.error("REMOTE_ADAPTER","setRunMode failed",{error:t});});}getRunMode(){return this.currentMode}getStatus(){return {isRunning:this.running.size>0,mode:this.currentMode,activeSessions:[...this.running]}}dispose(){this.subscription?.close(),this.subscription=null,this.listeners.clear(),this.running.clear();}};W();var Ww=new Set(["127.0.0.1","::1","::ffff:127.0.0.1","localhost"]);function qw(a){return a?Ww.has(a):false}var Or=class{_enabled;_token;_allowLocalWithoutAuth;_publicPaths;constructor(e){this._enabled=!!e,this._token=e?.token??"",this._allowLocalWithoutAuth=e?.allowLocalWithoutAuth??true,this._publicPaths=e?.publicPaths??["/health"];}get enabled(){return this._enabled}get token(){return this._token}enable(e){this._token=e,this._enabled=true;}disable(){this._enabled=false;}updateToken(e){this._token=e;}middleware(){return async(e,t)=>{if(!this._enabled)return t();let s=e.req.path;if(this._publicPaths.some(i=>s===i||s.startsWith(i+"/")))return t();if(this._allowLocalWithoutAuth){let i=e.req.header("x-forwarded-for")?.split(",")[0]?.trim()||e.req.header("x-real-ip")||e.env?.incoming?.socket?.remoteAddress;if(qw(i))return t()}let n=e.req.header("authorization");if(!n)return e.json({error:"Authorization required"},401);let r=n.split(" ");return r.length!==2||r[0]!=="Bearer"||r[1]!==this._token?e.json({error:"Invalid token"},401):t()}}};function zw(a){return new Or(a).middleware()}function Hl(a){let e=a?.maxRequests??120,t=a?.windowMs??6e4,s=new Set(a?.skipPaths??["/health"]),n=new Map,r=setInterval(()=>{let i=Date.now();for(let[o,l]of n)i>l.resetAt&&n.delete(o);},t*2);return r.unref&&r.unref(),async(i,o)=>{if(s.has(i.req.path))return o();let l=i.req.header("x-forwarded-for")?.split(",")[0]?.trim()||i.req.header("x-real-ip")||i.env?.incoming?.socket?.remoteAddress||"unknown",c=Date.now(),u=n.get(l);return (!u||c>u.resetAt)&&(u={count:0,resetAt:c+t},n.set(l,u)),u.count++,i.header("X-RateLimit-Limit",String(e)),i.header("X-RateLimit-Remaining",String(Math.max(0,e-u.count))),i.header("X-RateLimit-Reset",String(Math.ceil(u.resetAt/1e3))),u.count>e?i.json({error:"Too many requests",retryAfter:Math.ceil((u.resetAt-c)/1e3)},429):o()}}var Ns=class{devices=new Map;maxDevices;idleTimeout;cleanupTimer;constructor(e){this.maxDevices=e?.maxDevices??20,this.idleTimeout=e?.idleTimeout??1440*60*1e3,this.cleanupTimer=setInterval(()=>this.cleanup(),6e4),this.cleanupTimer.unref&&this.cleanupTimer.unref();}register(e,t,s){for(let[r,i]of this.devices)if(i.device.name===e.name&&i.ip===s)return i.device=e,i.capabilities=t,i.lastSeen=Date.now(),r;if(this.devices.size>=this.maxDevices){let r=null,i=1/0;for(let[o,l]of this.devices)l.lastSeen<i&&(i=l.lastSeen,r=o);r&&this.devices.delete(r);}let n=Vt.randomUUID();return this.devices.set(n,{id:n,device:e,capabilities:t,registeredAt:Date.now(),lastSeen:Date.now(),ip:s}),n}touch(e){let t=this.devices.get(e);t&&(t.lastSeen=Date.now());}getDevice(e){return this.devices.get(e)??null}removeDevice(e){return this.devices.delete(e)}getAll(){return [...this.devices.values()]}modePrefs=new Map;setPreferredMode(e,t){this.modePrefs.set(e,t);let s=this.devices.get(e);s&&(s.preferredMode=t);}getPreferredMode(e){return this.modePrefs.get(e)??this.devices.get(e)?.preferredMode}cleanup(){let e=Date.now();for(let[t,s]of this.devices)e-s.lastSeen>this.idleTimeout&&this.devices.delete(t);}dispose(){clearInterval(this.cleanupTimer),this.devices.clear();}};function ym(a){return async(e,t)=>{let s=e.req.header("x-device-id");return s&&(a.touch(s),e.set("deviceId",s)),t()}}W();var Co=class{id="telegram";type="telegram";enabled;token;allowedChatIds;pollingInterval;offset=0;polling=false;timer=null;onMessage;constructor(e,t){this.enabled=e.enabled,this.token=e.botToken,this.allowedChatIds=new Set(e.allowedChatIds??[]),this.pollingInterval=e.pollingInterval??3e3,this.onMessage=t;}async start(){this.polling=true,this.poll(),m.info("TELEGRAM","Polling started");}async stop(){this.polling=false,this.timer&&(clearTimeout(this.timer),this.timer=null),m.info("TELEGRAM","Polling stopped");}async sendMessage(e){let t=`https://api.telegram.org/bot${this.token}/sendMessage`;try{await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:e.chatId,text:e.text,parse_mode:e.format==="markdown"?"MarkdownV2":e.format==="html"?"HTML":void 0})});}catch(s){m.error("TELEGRAM",`sendMessage failed: ${s.message}`);}}async poll(){if(this.polling){try{let e=`https://api.telegram.org/bot${this.token}/getUpdates?offset=${this.offset}&timeout=30`,t=new AbortController,s=setTimeout(()=>t.abort(),35e3),n=await fetch(e,{signal:t.signal});if(clearTimeout(s),n.ok){let r=await n.json();if(r.ok&&Array.isArray(r.result))for(let i of r.result)this.offset=i.update_id+1,await this.handleUpdate(i);}}catch(e){e.name!=="AbortError"&&m.error("TELEGRAM",`Poll error: ${e.message}`);}this.polling&&(this.timer=setTimeout(()=>this.poll(),this.pollingInterval));}}async handleUpdate(e){let t=e.message;if(!t?.text)return;let s=String(t.chat.id);if(this.allowedChatIds.size>0&&!this.allowedChatIds.has(s)){m.warn("TELEGRAM",`Rejected message from unauthorized chat: ${s}`);return}let n={channelId:this.id,chatId:s,text:t.text,from:{id:String(t.from?.id??"unknown"),name:t.from?.first_name??"Unknown"},timestamp:t.date*1e3,raw:e};await this.onMessage(n);}};W();var So=class{id="webhook";type="webhook";enabled;secret;onMessage;pendingReplies=new Map;constructor(e,t){this.enabled=e.enabled,this.secret=e.secret,this.onMessage=t;}async start(){m.info("WEBHOOK","Webhook channel ready (passive \u2014 waits for HTTP requests)");}async stop(){this.pendingReplies.clear();}async sendMessage(e){let t=this.pendingReplies.get(e.chatId);t&&(t(e.text),this.pendingReplies.delete(e.chatId));}async handleIncoming(e,t){if(this.secret&&t){let i=createHmac("sha256",this.secret).update(JSON.stringify(e)).digest("hex");if(t!==`sha256=${i}`)throw new Error("Invalid webhook signature")}let s=e.chatId||`wh-${Date.now()}`,n={channelId:this.id,chatId:s,text:e.text||"",from:e.from||{id:"webhook",name:"Webhook"},timestamp:Date.now(),raw:e},r=new Promise(i=>{this.pendingReplies.set(s,i),setTimeout(()=>{this.pendingReplies.has(s)&&(this.pendingReplies.delete(s),i("[timeout] No response within 60s"));},6e4);});return await this.onMessage(n),r}};W();var ko=class{channels=new Map;handler=null;setHandler(e){this.handler=e;}async initialize(e){if(e.telegram?.enabled&&e.telegram.botToken){let t=new Co(e.telegram,s=>this.onMessage(s));this.channels.set(t.id,t);}if(e.webhook?.enabled){let t=new So(e.webhook,s=>this.onMessage(s));this.channels.set(t.id,t);}}async startAll(){for(let[e,t]of this.channels)if(t.enabled)try{await t.start(),m.info("CHANNEL",`Started channel: ${e}`);}catch(s){m.error("CHANNEL",`Failed to start ${e}: ${s.message}`);}}async stopAll(){for(let[e,t]of this.channels)try{await t.stop(),m.info("CHANNEL",`Stopped channel: ${e}`);}catch(s){m.error("CHANNEL",`Failed to stop ${e}: ${s.message}`);}}get(e){return this.channels.get(e)}list(){return Array.from(this.channels.values()).map(e=>({id:e.id,type:e.type,enabled:e.enabled}))}async toggle(e,t){let s=this.channels.get(e);return s?(t&&!s.enabled?(s.enabled=true,await s.start()):!t&&s.enabled&&(await s.stop(),s.enabled=false),true):false}async handleWebhook(e,t){let s=this.channels.get(e);return !s||!s.enabled?null:s.type==="webhook"&&"handleIncoming"in s?s.handleIncoming(t):null}async onMessage(e){if(!this.handler){m.warn("CHANNEL","No message handler set, dropping message");return}try{let t=await this.handler(e),s=this.channels.get(e.channelId);s&&await s.sendMessage({chatId:e.chatId,text:t});}catch(t){m.error("CHANNEL",`Handler error: ${t.message}`);}}};function bm(a,e,t,s){let n=new Hono,r=["http://localhost:*","http://127.0.0.1:*","tauri://localhost",...a.corsOrigins??[]];n.use("*",cors({origin:r,allowMethods:["GET","POST","PATCH","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","X-Device-Id"]}));let i=new Or(a.auth);n.use("*",i.middleware()),a.rateLimit&&n.use("*",Hl(a.rateLimit));let o=s??new Ns;n.use("*",ym(o)),n.use("*",async(u,d)=>{u.req.path!=="/events"&&u.req.path!=="/status"&&u.req.path!=="/health"&&m.info("SERVER",`${u.req.method} ${u.req.path}`),await d();}),n.get("/events",u=>{let d=u.req.query("sessionId")||void 0;return streamSSE(u,async p=>{let h=t.subscribe(d),g=setInterval(async()=>{try{await p.writeSSE({event:"heartbeat",data:""});}catch{}},3e4);await p.writeSSE({event:"connected",data:JSON.stringify({sessionId:d??"all",timestamp:Date.now()})});try{for await(let f of h)await p.writeSSE({event:f.type,data:JSON.stringify(f)});}catch{}finally{clearInterval(g),h.close();}})}),n.post("/session/:sessionId/chat",async u=>{let{sessionId:d}=u.req.param(),p=await u.req.json();if(!p.mode){let h=u.req.header("x-device-id");if(h){let g=o.getPreferredMode(h);g&&(p.mode=g);}}return e.chat(d,p).catch(h=>{t.publish({sessionId:d,type:"error",data:{type:"error",message:h?.message??String(h),timestamp:Date.now()},timestamp:Date.now()});}),u.json({status:"started",sessionId:d})}),n.post("/session/:sessionId/abort",async u=>{let{sessionId:d}=u.req.param();return e.abort(d),u.json({status:"aborted",sessionId:d})}),n.post("/permission/:requestId/reply",async u=>{let{requestId:d}=u.req.param(),p=await u.req.json();return e.replyPermission(d,p.approved,p.message),u.json({status:"ok"})}),n.get("/mode",u=>u.json({mode:e.getRunMode?.()??"single"})),n.post("/mode",async u=>{let{mode:d}=await u.req.json();return e.setRunMode?.(d),u.json({status:"ok",mode:d})}),n.post("/session/:sessionId/inject",async u=>{let{sessionId:d}=u.req.param(),{message:p}=await u.req.json();return e.injectMessage?.(d,p),u.json({status:"ok"})}),n.post("/session/:sessionId/sandbox",async u=>{let{sessionId:d}=u.req.param(),{enabled:p}=await u.req.json();return e.setSandboxMode?.(d,p),u.json({status:"ok",enabled:p})}),n.post("/session/:sessionId/approval",async u=>{let{sessionId:d}=u.req.param(),{mode:p}=await u.req.json();return e.setApprovalMode?.(d,p),u.json({status:"ok",mode:p})}),n.post("/session/:sessionId/compact",async u=>{let{sessionId:d}=u.req.param();return await e.compactSession?.(d),u.json({status:"ok"})}),n.post("/session/:sessionId/clear",async u=>{let{sessionId:d}=u.req.param();return e.clearSession?.(d),u.json({status:"ok"})}),n.get("/session/:sessionId/context-health",u=>{let{sessionId:d}=u.req.param(),p=e.getContextHealth?.(d);return u.json(p??null)}),n.get("/session/:sessionId/info",async u=>{let{sessionId:d}=u.req.param(),p=await e.getSessionInfo?.(d);return u.json(p??null)}),n.post("/session/:sessionId/compression",async u=>{let{sessionId:d}=u.req.param(),{mode:p}=await u.req.json();return e.setCompressionMode?.(d,p),u.json({status:"ok",mode:p})}),n.get("/session/:sessionId/memory",u=>{let{sessionId:d}=u.req.param(),p=e.getMemoryStats?.(d);return u.json(p??null)}),n.post("/session/:sessionId/memory/clear",u=>{let{sessionId:d}=u.req.param();return e.clearMemory?.(d),u.json({status:"ok"})}),n.post("/session/:sessionId/memory/add",async u=>{let{sessionId:d}=u.req.param(),{role:p,content:h}=await u.req.json();return e.addMemoryMessage?.(d,p,h),u.json({status:"ok"})}),n.get("/tools",u=>{let d=e.getToolList?.();return u.json(d??{count:0,names:[]})}),n.post("/tools/reload",async u=>{let{workDir:d}=await u.req.json();return await e.reloadTools?.(d),u.json({status:"ok"})}),n.post("/workspace",async u=>{let{workDir:d}=await u.req.json();return await e.setWorkspace?.(d),u.json({status:"ok",workDir:d})}),n.post("/checkpoint/start-watching",async u=>{let{sessionId:d}=await u.req.json(),p=await e.startCheckpointWatching?.(d);return u.json({checkpointId:p})}),n.post("/checkpoint/stop-watching",async u=>(await e.stopCheckpointWatching?.(),u.json({status:"ok"}))),n.post("/checkpoint/create",async u=>{let{sessionId:d,label:p}=await u.req.json(),h=await e.createCheckpoint?.(d,p);return u.json(h??null)}),n.post("/checkpoint/rollback",async u=>{let{checkpointId:d}=await u.req.json(),p=await e.rollbackToCheckpoint?.(d);return u.json(p??{success:false})}),n.post("/checkpoint/rollback-file",async u=>{let{filePath:d}=await u.req.json(),p=await e.rollbackSingleFile?.(d);return u.json(p??{success:false})}),n.post("/checkpoint/reapply-file",async u=>{let{filePath:d}=await u.req.json(),p=await e.reapplySingleFile?.(d);return u.json(p??{success:false})}),n.get("/checkpoints",async u=>{let d=u.req.query("limit")?parseInt(u.req.query("limit")):void 0,p=u.req.query("sessionId")||void 0,h=await e.getCheckpoints?.(d,p);return u.json(h??[])}),n.get("/checkpoint/stats",async u=>{let d=await e.getCheckpointStats?.();return u.json(d??{created:0,modified:0,deleted:0,directories:0,total:0})}),n.get("/checkpoint/changes",async u=>{let d=await e.getCheckpointChanges?.();return u.json(d??[])}),n.post("/checkpoint/enabled",async u=>{let{enabled:d}=await u.req.json();return e.setCheckpointEnabled?.(d),u.json({status:"ok",enabled:d})}),n.get("/checkpoint/enabled",u=>{let d=e.isCheckpointEnabled?.()??true;return u.json({enabled:d})}),n.post("/checkpoint/cleanup",async u=>(await e.cleanupCheckpoints?.(),u.json({status:"ok"}))),n.get("/status",u=>u.json({status:"ok",uptime:process.uptime(),pid:process.pid,workDir:a.workDir,activeSessions:e.getActiveSessions(),mode:e.getRunMode?.()??"single"})),n.get("/health",u=>u.text("ok")),n.post("/tts",async u=>{let{enabled:d}=await u.req.json();return e.setTTSEnabled?.(d),u.json({enabled:e.isTTSEnabled?.()??false})}),n.get("/tts",u=>u.json({enabled:e.isTTSEnabled?.()??false,config:e.getTTSConfig?.()??{enabled:false}})),n.post("/device/register",async u=>{let{device:d,capabilities:p}=await u.req.json(),h=u.req.header("x-forwarded-for")?.split(",")[0]?.trim()||u.req.header("x-real-ip")||u.env?.incoming?.socket?.remoteAddress||"unknown",g=o.register(d,p,h);return m.info("SERVER",`Device registered: ${d.type} - ${d.name} (${g})`),u.json({deviceId:g,status:"registered"})}),n.get("/device/:deviceId",u=>{let{deviceId:d}=u.req.param(),p=o.getDevice(d);return p?u.json(p):u.json({error:"Device not found"},404)}),n.get("/devices",u=>{let d=o.getAll();return u.json({count:d.length,devices:d})}),n.delete("/device/:deviceId",u=>{let{deviceId:d}=u.req.param(),p=o.removeDevice(d);return u.json({status:p?"removed":"not_found"})}),n.post("/device/:deviceId/mode",async u=>{let{deviceId:d}=u.req.param(),{mode:p}=await u.req.json();return o.setPreferredMode(d,p),u.json({status:"ok",deviceId:d,mode:p})}),n.get("/device/:deviceId/mode",u=>{let{deviceId:d}=u.req.param(),p=o.getDevice(d);return p?u.json({mode:p.preferredMode??e.getRunMode?.()??"single"}):u.json({error:"Device not found"},404)}),n.get("/host/status",async u=>{let d=await e.getHostStatus?.();return u.json(d??{error:"not available"})}),n.get("/host/agents",async u=>{let d=await e.getHostAgents?.();return u.json(d??[])}),n.get("/host/activity",async u=>{let d=u.req.query("limit")?parseInt(u.req.query("limit")):10,p=await e.getHostActivity?.(d);return u.json(p??[])}),n.get("/host/session",async u=>{let d=await e.getHostSession?.();return u.json(d??null)}),n.get("/host/system",async u=>{let d=await e.getHostSystem?.();return u.json(d??null)}),n.post("/host/interrupt",async u=>{let{reason:d}=await u.req.json().catch(()=>({reason:void 0})),p=await e.hostInterrupt?.(d);return u.json(p??{interrupted:false})}),n.post("/host/command",async u=>{let{text:d,priority:p}=await u.req.json(),h=await e.hostSendCommand?.(d,p);return u.json(h??{queued:false})});let l=async(u,d)=>{let p=u.req.header("x-forwarded-for")?.split(",")[0]?.trim()||u.req.header("x-real-ip")||u.env?.incoming?.socket?.remoteAddress;return !p||!new Set(["127.0.0.1","::1","::ffff:127.0.0.1","localhost"]).has(p)?u.json({error:"Admin endpoints are local-only"},403):d()};n.get("/admin/auth",l,u=>u.json({enabled:i.enabled,hasToken:!!i.token})),n.post("/admin/auth",l,async u=>{let{enabled:d,token:p}=await u.req.json();return p&&i.updateToken(p),d===true&&p?i.enable(p):d===true&&i.token?i.enable(i.token):d===false&&i.disable(),m.info("SERVER",`Auth ${i.enabled?"enabled":"disabled"}`),u.json({enabled:i.enabled})});let c=new ko;return n.get("/channels",u=>u.json(c.list())),n.post("/channels/:id/toggle",async u=>{let{id:d}=u.req.param(),{enabled:p}=await u.req.json(),h=await c.toggle(d,p);return u.json({status:h?"ok":"not_found",id:d,enabled:p})}),n.post("/webhook/:channelId",async u=>{let {channelId:d}=u.req.param();u.req.header("x-hub-signature-256")||u.req.header("x-signature");let h=await u.req.json();try{let g=await c.handleWebhook(d,h);return g===null?u.json({error:"Channel not found or disabled"},404):u.json({reply:g})}catch(g){return u.json({error:g.message},400)}}),{app:n,authGate:i,deviceManager:o,channelRegistry:c}}var xo=class{emitter=new EventEmitter;constructor(){this.emitter.setMaxListeners(100);}publish(e){this.emitter.emit("*",e),this.emitter.emit(`session:${e.sessionId}`,e);}createSink(e="server-bus"){return {name:e,handle:(t,s,n)=>{this.publish({sessionId:t,type:s.type,data:s,tracker:n,timestamp:s.timestamp??Date.now()});}}}subscribe(e){let t=e?`session:${e}`:"*",s=this.emitter,n=false,r=null,i=[],o=u=>{if(r){let d=r;r=null,d({value:u,done:false});}else i.push(u);};s.on(t,o);let l=()=>{if(!n&&(n=true,s.off(t,o),r)){let u=r;r=null,u({value:void 0,done:true});}};return {close:l,[Symbol.asyncIterator](){return {next(){return n?Promise.resolve({value:void 0,done:true}):i.length>0?Promise.resolve({value:i.shift(),done:false}):new Promise(u=>{r=u;})},return(){return l(),Promise.resolve({value:void 0,done:true})}}}}}dispose(){this.emitter.removeAllListeners();}};W();W();function Jl(a){let e=a.getAll();if(e.length===0)return "";let t=[],s=0,n=12e3;for(let r=e.length-1;r>=0&&!(s>=n);r--){let i=e[r];if(i.role==="tool")continue;let l=(typeof i.content=="string"?i.content:JSON.stringify(i.content)).substring(0,1e3);t.unshift(`[${i.role}]: ${l}`),s+=l.length;}return t.join(`
1876
+ `;await ce.writeFile(e,s),m.debug("CHECKPOINT","Added .cdundo to .gitignore");}}catch(t){m.error("CHECKPOINT","Failed to update .gitignore",{error:t});}}async cleanupOldCheckpoints(){try{let e=await this.getCheckpoints(this.config.maxCheckpoints+10);e.length>this.config.maxCheckpoints&&(m.debug("CHECKPOINT",`Cleaning up old checkpoints (${e.length} > ${this.config.maxCheckpoints})`),await this.compressRepository());}catch(e){m.error("CHECKPOINT","Failed to cleanup checkpoints",{error:e});}}async compressRepository(){if(!this.initialized)return {success:false};try{let e=await this.getRepositorySize();m.debug("CHECKPOINT","Compressing repository..."),await this.git.raw(["reflog","expire","--expire=now","--all"]),await this.git.raw(["gc","--aggressive","--prune=now"]),await this.git.raw(["repack","-a","-d","--depth=250","--window=250"]);let t=await this.getRepositorySize(),s=e-t;return m.debug("CHECKPOINT",`Repository compressed: ${this.formatFileSize(e)} \u2192 ${this.formatFileSize(t)} (saved ${this.formatFileSize(s)})`),{success:!0,savedBytes:s}}catch(e){return m.error("CHECKPOINT","Failed to compress repository",{error:e}),{success:false}}}async getRepositorySize(){let e=0,t=async s=>{try{let n=await ce.readdir(s,{withFileTypes:!0});for(let r of n){let i=se.join(s,r.name);if(r.isDirectory())await t(i);else if(r.isFile()){let o=await ce.stat(i);e+=o.size;}}}catch{}};return await t(this.shadowGitDir),e}async getStorageStats(){let e=await this.getRepositorySize(),t=0,s=async r=>{try{let i=await ce.readdir(r,{withFileTypes:!0});for(let o of i){let l=se.join(r,o.name);if(o.isDirectory()&&o.name!==".git")await s(l);else if(o.isFile()){let c=await ce.stat(l);t+=c.size;}}}catch{}};await s(this.shadowDir);let n=await this.getCheckpoints(1e3);return {repositorySize:e,shadowDirSize:t,checkpointCount:n.length,oldestCheckpoint:n.length>0?{id:n[n.length-1].id,timestamp:n[n.length-1].timestamp}:void 0,newestCheckpoint:n.length>0?{id:n[0].id,timestamp:n[0].timestamp}:void 0}}async cleanStaleLocks(){let e=se.join(this.shadowGitDir,"index.lock");try{if(Me.existsSync(e)){let s=await ce.stat(e);Date.now()-s.mtimeMs>1e4&&(await ce.unlink(e),m.debug("CHECKPOINT","Cleaned stale lock file"));}}catch{}}async withGitLock(e){let t=this.gitOperationLock,s=()=>{};this.gitOperationLock=new Promise(n=>{s=n;});try{await t;let n;for(let r=1;r<=this.GIT_RETRY_ATTEMPTS;r++)try{return r>1&&(await this.cleanStaleLocks(),await new Promise(o=>setTimeout(o,this.GIT_RETRY_DELAY_MS))),await e()}catch(i){if(n=i,!(i.message&&(i.message.includes("index.lock")||i.message.includes("File exists")))||r===this.GIT_RETRY_ATTEMPTS)throw i;m.warn("CHECKPOINT",`Git operation failed (attempt ${r}/${this.GIT_RETRY_ATTEMPTS}), retrying...`);}throw n}finally{s();}}async destroy(){await this.stopWatching(),this.initialized=false,this.changeCallbacks.clear(),m.debug("CHECKPOINT","Instance destroyed");}};var Mr=class a{static instance=null;instances=new Map;config;constructor(e={}){this.config=e;}static getInstance(e){return a.instance||(a.instance=new a(e)),a.instance}async getCheckpoint(e){let t=se.normalize(e);if(!this.instances.has(t)){let s=new wo(this.config);await s.init(t),this.instances.set(t,s);}return this.instances.get(t)}async startWatching(e,t,s=0){return (await this.getCheckpoint(e)).startWatching(t,s)}getBeforeCheckpointId(e){let t=se.normalize(e);return this.instances.get(t)?.getBeforeCheckpointId()??null}async stopWatching(e){let t=se.normalize(e),s=this.instances.get(t);s&&await s.stopWatching();}async createCheckpoint(e,t){return (await this.getCheckpoint(e)).createCheckpoint(t)}async rollbackTo(e,t){return (await this.getCheckpoint(e)).rollbackTo(t)}async rollbackSingleFile(e,t){return (await this.getCheckpoint(e)).rollbackSingleFile(t)}async reapplySingleFile(e,t){return (await this.getCheckpoint(e)).reapplySingleFile(t)}async getCheckpoints(e,t,s){return (await this.getCheckpoint(e)).getCheckpoints(t,s)}async getDiff(e,t,s){return (await this.getCheckpoint(e)).getDiff(t,s)}async getChangeBuffer(e){return (await this.getCheckpoint(e)).getChangeBuffer()}async getCurrentStats(e){return (await this.getCheckpoint(e)).getCurrentStats()}async onFileChange(e,t){return (await this.getCheckpoint(e)).onFileChange(t)}isWatching(e){let t=se.normalize(e);return this.instances.get(t)?.isActive()??false}async cleanup(e){let t=se.normalize(e),s=this.instances.get(t);s&&(await s.destroy(),this.instances.delete(t));let n=se.join(t,".cdundo");try{await ce.rm(n,{recursive:!0,force:!0}),console.log("[CheckpointManager] Cleaned up:",n);}catch(r){console.error("[CheckpointManager] Failed to cleanup:",r);}}async destroyAll(){for(let[e,t]of this.instances)await t.destroy();this.instances.clear(),console.log("[CheckpointManager] All instances destroyed");}getActiveWorkspaces(){return Array.from(this.instances.keys()).filter(e=>this.instances.get(e)?.isActive())}getStats(){return {totalInstances:this.instances.size,activeInstances:this.getActiveWorkspaces().length,workspaces:Array.from(this.instances.keys())}}};Mr.getInstance();var Pr=class{checkpointManager;workspacePath=null;enabled=true;sessionMessageCounts=new Map;constructor(e){this.checkpointManager=e??Mr.getInstance();}setWorkspace(e){this.workspacePath=e;}setEnabled(e){this.enabled=e;}isEnabled(){return this.enabled}async startMessage(e){if(!this.enabled||!this.workspacePath)return null;let t=this.sessionMessageCounts.get(e)||0;return this.checkpointManager.startWatching(this.workspacePath,e,t)}async finishMessage(e,t){if(!this.enabled||!this.workspacePath)return null;let s=await this.createCheckpoint(e,t);return await this.checkpointManager.stopWatching(this.workspacePath),s}async stopWatching(){this.workspacePath&&await this.checkpointManager.stopWatching(this.workspacePath);}async createCheckpoint(e,t){if(!this.enabled||!this.workspacePath)return null;let s=this.sessionMessageCounts.get(e)||0,n=t||`Message #${s+1}`,r=await this.checkpointManager.createCheckpoint(this.workspacePath,n);return this.sessionMessageCounts.set(e,s+1),r}async rollbackToCheckpoint(e){return this.workspacePath?this.checkpointManager.rollbackTo(this.workspacePath,e):{success:false,restored:[],errors:["No workspace set"]}}async rollbackSingleFile(e){return this.workspacePath?this.checkpointManager.rollbackSingleFile(this.workspacePath,e):{success:false,error:"No workspace set"}}async reapplySingleFile(e){return this.workspacePath?this.checkpointManager.reapplySingleFile(this.workspacePath,e):{success:false,error:"No workspace set"}}async getCheckpoints(e,t){return this.workspacePath?this.checkpointManager.getCheckpoints(this.workspacePath,e,t):[]}async getCurrentStats(){return this.workspacePath?this.checkpointManager.getCurrentStats(this.workspacePath):null}async getChangeBuffer(){return this.workspacePath?this.checkpointManager.getChangeBuffer(this.workspacePath):[]}async cleanup(){this.workspacePath&&await this.checkpointManager.cleanup(this.workspacePath);}};function Bw(a,e,t){if(e?.setThinkingMode)return e.setThinkingMode(a),true;let s=t;return s?.setThinking?(s.setThinking({type:a==="auto"?"enabled":a}),true):s?.setDoubaoThinking?(s.setDoubaoThinking({type:a}),true):false}function Gw(){return {...Ts(),capabilities:dl}}var Sn=class extends Error{status;body;constructor(e,t){super(`HTTP ${e}: ${t}`),this.name="ApiError",this.status=e,this.body=t;}};async function Uw(a,e,t,s){let n=new AbortController;return t&&t.addEventListener("abort",()=>n.abort()),(async()=>{for(;!n.signal.aborted;)try{let i=await fetch(a,{headers:{Accept:"text/event-stream",...s},signal:n.signal});if(!i.ok||!i.body)throw new Error(`SSE connect failed: ${i.status}`);let o=i.body.getReader(),l=new TextDecoder,c="";for(;;){let{done:u,value:d}=await o.read();if(u)break;c+=l.decode(d,{stream:!0});let p=c.split(`
1877
+ `);c=p.pop()??"";let h="",g="";for(let f of p)if(f.startsWith("event:"))h=f.slice(6).trim();else if(f.startsWith("data:"))g+=f.slice(5).trim();else if(f===""){if(h&&g&&h!=="heartbeat"&&h!=="connected")try{let b=JSON.parse(g);e(b);}catch{}h="",g="";}}}catch{if(n.signal.aborted)return;await new Promise(o=>setTimeout(o,2e3));}})(),{close:()=>n.abort()}}var Dr=class{baseUrl;token;constructor(e){typeof e=="string"?this.baseUrl=e:(this.baseUrl=e?.baseUrl??"http://127.0.0.1:4399",this.token=e?.token);}get authHeaders(){return this.token?{Authorization:`Bearer ${this.token}`}:{}}async subscribe(e,t,s){let n=t?`${this.baseUrl}/events?sessionId=${encodeURIComponent(t)}`:`${this.baseUrl}/events`;return Uw(n,e,s,this.authHeaders)}async chat(e,t,s){await this.post(`/session/${e}/chat`,{prompt:t,...s});}async abort(e){await this.post(`/session/${e}/abort`);}async replyPermission(e,t,s){await this.post(`/permission/${e}/reply`,{approved:t,message:s});}async getRunMode(){return (await this.get("/mode")).mode}async setRunMode(e){await this.post("/mode",{mode:e});}async injectMessage(e,t){await this.post(`/session/${e}/inject`,{message:t});}async getStatus(){return this.get("/status")}async isHealthy(){try{return (await fetch(`${this.baseUrl}/health`,{signal:AbortSignal.timeout(3e3)})).ok}catch{return false}}async setSandboxMode(e,t){await this.post(`/session/${e}/sandbox`,{enabled:t});}async setApprovalMode(e,t){await this.post(`/session/${e}/approval`,{mode:t});}async compactSession(e){await this.post(`/session/${e}/compact`);}async clearSession(e){await this.post(`/session/${e}/clear`);}async getContextHealth(e){return this.get(`/session/${e}/context-health`)}async getSessionInfo(e){return this.get(`/session/${e}/info`)}async setCompressionMode(e,t){await this.post(`/session/${e}/compression`,{mode:t});}async getMemoryStats(e){return this.get(`/session/${e}/memory`)}async clearMemory(e){await this.post(`/session/${e}/memory/clear`);}async addMemoryMessage(e,t,s){await this.post(`/session/${e}/memory/add`,{role:t,content:s});}async getToolList(){return this.get("/tools")}async reloadTools(e){await this.post("/tools/reload",{workDir:e});}async setWorkspace(e){await this.post("/workspace",{workDir:e});}async startCheckpointWatching(e){return (await this.post("/checkpoint/start-watching",{sessionId:e}))?.checkpointId??null}async stopCheckpointWatching(){await this.post("/checkpoint/stop-watching");}async createCheckpoint(e,t){return this.post("/checkpoint/create",{sessionId:e,label:t})}async rollbackToCheckpoint(e){return this.post("/checkpoint/rollback",{checkpointId:e})}async rollbackSingleFile(e){return this.post("/checkpoint/rollback-file",{filePath:e})}async reapplySingleFile(e){return this.post("/checkpoint/reapply-file",{filePath:e})}async getCheckpoints(e,t){let s=new URLSearchParams;e!=null&&s.set("limit",String(e)),t&&s.set("sessionId",t);let n=s.toString();return this.get(`/checkpoints${n?`?${n}`:""}`)}async getCheckpointStats(){return this.get("/checkpoint/stats")}async getCheckpointChanges(){return this.get("/checkpoint/changes")}async setCheckpointEnabled(e){await this.post("/checkpoint/enabled",{enabled:e});}async isCheckpointEnabled(){return (await this.get("/checkpoint/enabled")).enabled}async cleanupCheckpoints(){await this.post("/checkpoint/cleanup");}async setTTSEnabled(e){return this.post("/tts",{enabled:e})}async getTTSStatus(){return this.get("/tts")}async get(e){let t=await fetch(`${this.baseUrl}${e}`,{headers:{...this.authHeaders}});if(!t.ok)throw new Sn(t.status,await t.text());return t.json()}async post(e,t){let s=await fetch(`${this.baseUrl}${e}`,{method:"POST",headers:{...this.authHeaders,...t?{"Content-Type":"application/json"}:{}},body:t?JSON.stringify(t):void 0});if(!s.ok)throw new Sn(s.status,await s.text());let n=await s.text();return n?JSON.parse(n):void 0}async del(e){let t=await fetch(`${this.baseUrl}${e}`,{method:"DELETE",headers:{...this.authHeaders}});if(!t.ok)throw new Sn(t.status,await t.text());let s=await t.text();return s?JSON.parse(s):void 0}async registerDevice(e,t){return this.post("/device/register",{device:e,capabilities:t})}async getDevice(e){return this.get(`/device/${e}`)}async getDevices(){return this.get("/devices")}async removeDevice(e){await this.del(`/device/${e}`);}async getHostStatus(){return this.get("/host/status")}async getHostAgents(){return this.get("/host/agents")}async getHostActivity(e){let t=e!=null?`?limit=${e}`:"";return this.get(`/host/activity${t}`)}async getHostSession(){return this.get("/host/session")}async getHostSystem(){return this.get("/host/system")}async hostInterrupt(e){return this.post("/host/interrupt",{reason:e})}async hostSendCommand(e,t){return this.post("/host/command",{text:e,priority:t})}async setAuth(e){return this.post("/admin/auth",e)}async getAuth(){return this.get("/admin/auth")}};W();var zl=class{client;listeners=new Set;subscription=null;currentMode="single";running=new Set;constructor(e,t){this.client=new Dr({baseUrl:e,token:t});}async connect(e){this.subscription=await this.client.subscribe(t=>{for(let s of this.listeners)try{s(t.data,t.tracker??{contextUsed:0,startTime:Date.now(),provider:"",model:""});}catch(n){m.error("REMOTE_ADAPTER","Event callback error",{error:n});}(t.type==="run_result"||t.type==="error")&&this.running.delete(t.sessionId);},e),m.info("REMOTE_ADAPTER","SSE connected");}async chat(e){this.running.add(e.sessionId);let t=new Promise((s,n)=>{let r=(i,o)=>{i.type==="run_result"?(this.listeners.delete(r),s()):i.type==="error"&&(this.listeners.delete(r),n(new Error(i.message||"Runtime error")));};this.listeners.add(r);});await this.client.chat(e.sessionId,e.prompt,{mode:e.mode,attachments:e.attachments,providerId:e.providerId,modelName:e.modelName}),await t;}abort(e){this.client.abort(e).catch(t=>{m.error("REMOTE_ADAPTER","Abort failed",{error:t});}),this.running.delete(e);}injectMessage(e,t){this.client.injectMessage(e,t).catch(s=>{m.error("REMOTE_ADAPTER","Inject failed",{error:s});});}onEvent(e){this.listeners.add(e);}offEvent(e){this.listeners.delete(e);}setRunMode(e){this.currentMode=e,this.client.setRunMode(e).catch(t=>{m.error("REMOTE_ADAPTER","setRunMode failed",{error:t});});}getRunMode(){return this.currentMode}getStatus(){return {isRunning:this.running.size>0,mode:this.currentMode,activeSessions:[...this.running]}}dispose(){this.subscription?.close(),this.subscription=null,this.listeners.clear(),this.running.clear();}};W();var Ww=new Set(["127.0.0.1","::1","::ffff:127.0.0.1","localhost"]);function qw(a){return a?Ww.has(a):false}var Or=class{_enabled;_token;_allowLocalWithoutAuth;_publicPaths;constructor(e){this._enabled=!!e,this._token=e?.token??"",this._allowLocalWithoutAuth=e?.allowLocalWithoutAuth??true,this._publicPaths=e?.publicPaths??["/health"];}get enabled(){return this._enabled}get token(){return this._token}enable(e){this._token=e,this._enabled=true;}disable(){this._enabled=false;}updateToken(e){this._token=e;}middleware(){return async(e,t)=>{if(!this._enabled)return t();let s=e.req.path;if(this._publicPaths.some(i=>s===i||s.startsWith(i+"/")))return t();if(this._allowLocalWithoutAuth){let i=e.req.header("x-forwarded-for")?.split(",")[0]?.trim()||e.req.header("x-real-ip")||e.env?.incoming?.socket?.remoteAddress;if(qw(i))return t()}let n=e.req.header("authorization");if(!n)return e.json({error:"Authorization required"},401);let r=n.split(" ");return r.length!==2||r[0]!=="Bearer"||r[1]!==this._token?e.json({error:"Invalid token"},401):t()}}};function zw(a){return new Or(a).middleware()}function Hl(a){let e=a?.maxRequests??120,t=a?.windowMs??6e4,s=new Set(a?.skipPaths??["/health"]),n=new Map,r=setInterval(()=>{let i=Date.now();for(let[o,l]of n)i>l.resetAt&&n.delete(o);},t*2);return r.unref&&r.unref(),async(i,o)=>{if(s.has(i.req.path))return o();let l=i.req.header("x-forwarded-for")?.split(",")[0]?.trim()||i.req.header("x-real-ip")||i.env?.incoming?.socket?.remoteAddress||"unknown",c=Date.now(),u=n.get(l);return (!u||c>u.resetAt)&&(u={count:0,resetAt:c+t},n.set(l,u)),u.count++,i.header("X-RateLimit-Limit",String(e)),i.header("X-RateLimit-Remaining",String(Math.max(0,e-u.count))),i.header("X-RateLimit-Reset",String(Math.ceil(u.resetAt/1e3))),u.count>e?i.json({error:"Too many requests",retryAfter:Math.ceil((u.resetAt-c)/1e3)},429):o()}}var $s=class{devices=new Map;maxDevices;idleTimeout;cleanupTimer;constructor(e){this.maxDevices=e?.maxDevices??20,this.idleTimeout=e?.idleTimeout??1440*60*1e3,this.cleanupTimer=setInterval(()=>this.cleanup(),6e4),this.cleanupTimer.unref&&this.cleanupTimer.unref();}register(e,t,s){for(let[r,i]of this.devices)if(i.device.name===e.name&&i.ip===s)return i.device=e,i.capabilities=t,i.lastSeen=Date.now(),r;if(this.devices.size>=this.maxDevices){let r=null,i=1/0;for(let[o,l]of this.devices)l.lastSeen<i&&(i=l.lastSeen,r=o);r&&this.devices.delete(r);}let n=Vt.randomUUID();return this.devices.set(n,{id:n,device:e,capabilities:t,registeredAt:Date.now(),lastSeen:Date.now(),ip:s}),n}touch(e){let t=this.devices.get(e);t&&(t.lastSeen=Date.now());}getDevice(e){return this.devices.get(e)??null}removeDevice(e){return this.devices.delete(e)}getAll(){return [...this.devices.values()]}modePrefs=new Map;setPreferredMode(e,t){this.modePrefs.set(e,t);let s=this.devices.get(e);s&&(s.preferredMode=t);}getPreferredMode(e){return this.modePrefs.get(e)??this.devices.get(e)?.preferredMode}cleanup(){let e=Date.now();for(let[t,s]of this.devices)e-s.lastSeen>this.idleTimeout&&this.devices.delete(t);}dispose(){clearInterval(this.cleanupTimer),this.devices.clear();}};function ym(a){return async(e,t)=>{let s=e.req.header("x-device-id");return s&&(a.touch(s),e.set("deviceId",s)),t()}}W();var Co=class{id="telegram";type="telegram";enabled;token;allowedChatIds;pollingInterval;offset=0;polling=false;timer=null;onMessage;constructor(e,t){this.enabled=e.enabled,this.token=e.botToken,this.allowedChatIds=new Set(e.allowedChatIds??[]),this.pollingInterval=e.pollingInterval??3e3,this.onMessage=t;}async start(){this.polling=true,this.poll(),m.info("TELEGRAM","Polling started");}async stop(){this.polling=false,this.timer&&(clearTimeout(this.timer),this.timer=null),m.info("TELEGRAM","Polling stopped");}async sendMessage(e){let t=`https://api.telegram.org/bot${this.token}/sendMessage`;try{await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat_id:e.chatId,text:e.text,parse_mode:e.format==="markdown"?"MarkdownV2":e.format==="html"?"HTML":void 0})});}catch(s){m.error("TELEGRAM",`sendMessage failed: ${s.message}`);}}async poll(){if(this.polling){try{let e=`https://api.telegram.org/bot${this.token}/getUpdates?offset=${this.offset}&timeout=30`,t=new AbortController,s=setTimeout(()=>t.abort(),35e3),n=await fetch(e,{signal:t.signal});if(clearTimeout(s),n.ok){let r=await n.json();if(r.ok&&Array.isArray(r.result))for(let i of r.result)this.offset=i.update_id+1,await this.handleUpdate(i);}}catch(e){e.name!=="AbortError"&&m.error("TELEGRAM",`Poll error: ${e.message}`);}this.polling&&(this.timer=setTimeout(()=>this.poll(),this.pollingInterval));}}async handleUpdate(e){let t=e.message;if(!t?.text)return;let s=String(t.chat.id);if(this.allowedChatIds.size>0&&!this.allowedChatIds.has(s)){m.warn("TELEGRAM",`Rejected message from unauthorized chat: ${s}`);return}let n={channelId:this.id,chatId:s,text:t.text,from:{id:String(t.from?.id??"unknown"),name:t.from?.first_name??"Unknown"},timestamp:t.date*1e3,raw:e};await this.onMessage(n);}};W();var So=class{id="webhook";type="webhook";enabled;secret;onMessage;pendingReplies=new Map;constructor(e,t){this.enabled=e.enabled,this.secret=e.secret,this.onMessage=t;}async start(){m.info("WEBHOOK","Webhook channel ready (passive \u2014 waits for HTTP requests)");}async stop(){this.pendingReplies.clear();}async sendMessage(e){let t=this.pendingReplies.get(e.chatId);t&&(t(e.text),this.pendingReplies.delete(e.chatId));}async handleIncoming(e,t){if(this.secret&&t){let i=createHmac("sha256",this.secret).update(JSON.stringify(e)).digest("hex");if(t!==`sha256=${i}`)throw new Error("Invalid webhook signature")}let s=e.chatId||`wh-${Date.now()}`,n={channelId:this.id,chatId:s,text:e.text||"",from:e.from||{id:"webhook",name:"Webhook"},timestamp:Date.now(),raw:e},r=new Promise(i=>{this.pendingReplies.set(s,i),setTimeout(()=>{this.pendingReplies.has(s)&&(this.pendingReplies.delete(s),i("[timeout] No response within 60s"));},6e4);});return await this.onMessage(n),r}};W();var ko=class{channels=new Map;handler=null;setHandler(e){this.handler=e;}async initialize(e){if(e.telegram?.enabled&&e.telegram.botToken){let t=new Co(e.telegram,s=>this.onMessage(s));this.channels.set(t.id,t);}if(e.webhook?.enabled){let t=new So(e.webhook,s=>this.onMessage(s));this.channels.set(t.id,t);}}async startAll(){for(let[e,t]of this.channels)if(t.enabled)try{await t.start(),m.info("CHANNEL",`Started channel: ${e}`);}catch(s){m.error("CHANNEL",`Failed to start ${e}: ${s.message}`);}}async stopAll(){for(let[e,t]of this.channels)try{await t.stop(),m.info("CHANNEL",`Stopped channel: ${e}`);}catch(s){m.error("CHANNEL",`Failed to stop ${e}: ${s.message}`);}}get(e){return this.channels.get(e)}list(){return Array.from(this.channels.values()).map(e=>({id:e.id,type:e.type,enabled:e.enabled}))}async toggle(e,t){let s=this.channels.get(e);return s?(t&&!s.enabled?(s.enabled=true,await s.start()):!t&&s.enabled&&(await s.stop(),s.enabled=false),true):false}async handleWebhook(e,t){let s=this.channels.get(e);return !s||!s.enabled?null:s.type==="webhook"&&"handleIncoming"in s?s.handleIncoming(t):null}async onMessage(e){if(!this.handler){m.warn("CHANNEL","No message handler set, dropping message");return}try{let t=await this.handler(e),s=this.channels.get(e.channelId);s&&await s.sendMessage({chatId:e.chatId,text:t});}catch(t){m.error("CHANNEL",`Handler error: ${t.message}`);}}};function bm(a,e,t,s){let n=new Hono,r=["http://localhost:*","http://127.0.0.1:*","tauri://localhost",...a.corsOrigins??[]];n.use("*",cors({origin:r,allowMethods:["GET","POST","PATCH","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","X-Device-Id"]}));let i=new Or(a.auth);n.use("*",i.middleware()),a.rateLimit&&n.use("*",Hl(a.rateLimit));let o=s??new $s;n.use("*",ym(o)),n.use("*",async(u,d)=>{u.req.path!=="/events"&&u.req.path!=="/status"&&u.req.path!=="/health"&&m.info("SERVER",`${u.req.method} ${u.req.path}`),await d();}),n.get("/events",u=>{let d=u.req.query("sessionId")||void 0;return streamSSE(u,async p=>{let h=t.subscribe(d),g=setInterval(async()=>{try{await p.writeSSE({event:"heartbeat",data:""});}catch{}},3e4);await p.writeSSE({event:"connected",data:JSON.stringify({sessionId:d??"all",timestamp:Date.now()})});try{for await(let f of h)await p.writeSSE({event:f.type,data:JSON.stringify(f)});}catch{}finally{clearInterval(g),h.close();}})}),n.post("/session/:sessionId/chat",async u=>{let{sessionId:d}=u.req.param(),p=await u.req.json();if(!p.mode){let h=u.req.header("x-device-id");if(h){let g=o.getPreferredMode(h);g&&(p.mode=g);}}return e.chat(d,p).catch(h=>{t.publish({sessionId:d,type:"error",data:{type:"error",message:h?.message??String(h),timestamp:Date.now()},timestamp:Date.now()});}),u.json({status:"started",sessionId:d})}),n.post("/session/:sessionId/abort",async u=>{let{sessionId:d}=u.req.param();return e.abort(d),u.json({status:"aborted",sessionId:d})}),n.post("/permission/:requestId/reply",async u=>{let{requestId:d}=u.req.param(),p=await u.req.json();return e.replyPermission(d,p.approved,p.message),u.json({status:"ok"})}),n.get("/mode",u=>u.json({mode:e.getRunMode?.()??"single"})),n.post("/mode",async u=>{let{mode:d}=await u.req.json();return e.setRunMode?.(d),u.json({status:"ok",mode:d})}),n.post("/session/:sessionId/inject",async u=>{let{sessionId:d}=u.req.param(),{message:p}=await u.req.json();return e.injectMessage?.(d,p),u.json({status:"ok"})}),n.post("/session/:sessionId/sandbox",async u=>{let{sessionId:d}=u.req.param(),{enabled:p}=await u.req.json();return e.setSandboxMode?.(d,p),u.json({status:"ok",enabled:p})}),n.post("/session/:sessionId/approval",async u=>{let{sessionId:d}=u.req.param(),{mode:p}=await u.req.json();return e.setApprovalMode?.(d,p),u.json({status:"ok",mode:p})}),n.post("/session/:sessionId/compact",async u=>{let{sessionId:d}=u.req.param();return await e.compactSession?.(d),u.json({status:"ok"})}),n.post("/session/:sessionId/clear",async u=>{let{sessionId:d}=u.req.param();return e.clearSession?.(d),u.json({status:"ok"})}),n.get("/session/:sessionId/context-health",u=>{let{sessionId:d}=u.req.param(),p=e.getContextHealth?.(d);return u.json(p??null)}),n.get("/session/:sessionId/info",async u=>{let{sessionId:d}=u.req.param(),p=await e.getSessionInfo?.(d);return u.json(p??null)}),n.post("/session/:sessionId/compression",async u=>{let{sessionId:d}=u.req.param(),{mode:p}=await u.req.json();return e.setCompressionMode?.(d,p),u.json({status:"ok",mode:p})}),n.get("/session/:sessionId/memory",u=>{let{sessionId:d}=u.req.param(),p=e.getMemoryStats?.(d);return u.json(p??null)}),n.post("/session/:sessionId/memory/clear",u=>{let{sessionId:d}=u.req.param();return e.clearMemory?.(d),u.json({status:"ok"})}),n.post("/session/:sessionId/memory/add",async u=>{let{sessionId:d}=u.req.param(),{role:p,content:h}=await u.req.json();return e.addMemoryMessage?.(d,p,h),u.json({status:"ok"})}),n.get("/tools",u=>{let d=e.getToolList?.();return u.json(d??{count:0,names:[]})}),n.post("/tools/reload",async u=>{let{workDir:d}=await u.req.json();return await e.reloadTools?.(d),u.json({status:"ok"})}),n.post("/workspace",async u=>{let{workDir:d}=await u.req.json();return await e.setWorkspace?.(d),u.json({status:"ok",workDir:d})}),n.post("/checkpoint/start-watching",async u=>{let{sessionId:d}=await u.req.json(),p=await e.startCheckpointWatching?.(d);return u.json({checkpointId:p})}),n.post("/checkpoint/stop-watching",async u=>(await e.stopCheckpointWatching?.(),u.json({status:"ok"}))),n.post("/checkpoint/create",async u=>{let{sessionId:d,label:p}=await u.req.json(),h=await e.createCheckpoint?.(d,p);return u.json(h??null)}),n.post("/checkpoint/rollback",async u=>{let{checkpointId:d}=await u.req.json(),p=await e.rollbackToCheckpoint?.(d);return u.json(p??{success:false})}),n.post("/checkpoint/rollback-file",async u=>{let{filePath:d}=await u.req.json(),p=await e.rollbackSingleFile?.(d);return u.json(p??{success:false})}),n.post("/checkpoint/reapply-file",async u=>{let{filePath:d}=await u.req.json(),p=await e.reapplySingleFile?.(d);return u.json(p??{success:false})}),n.get("/checkpoints",async u=>{let d=u.req.query("limit")?parseInt(u.req.query("limit")):void 0,p=u.req.query("sessionId")||void 0,h=await e.getCheckpoints?.(d,p);return u.json(h??[])}),n.get("/checkpoint/stats",async u=>{let d=await e.getCheckpointStats?.();return u.json(d??{created:0,modified:0,deleted:0,directories:0,total:0})}),n.get("/checkpoint/changes",async u=>{let d=await e.getCheckpointChanges?.();return u.json(d??[])}),n.post("/checkpoint/enabled",async u=>{let{enabled:d}=await u.req.json();return e.setCheckpointEnabled?.(d),u.json({status:"ok",enabled:d})}),n.get("/checkpoint/enabled",u=>{let d=e.isCheckpointEnabled?.()??true;return u.json({enabled:d})}),n.post("/checkpoint/cleanup",async u=>(await e.cleanupCheckpoints?.(),u.json({status:"ok"}))),n.get("/status",u=>u.json({status:"ok",uptime:process.uptime(),pid:process.pid,workDir:a.workDir,activeSessions:e.getActiveSessions(),mode:e.getRunMode?.()??"single"})),n.get("/health",u=>u.text("ok")),n.post("/tts",async u=>{let{enabled:d}=await u.req.json();return e.setTTSEnabled?.(d),u.json({enabled:e.isTTSEnabled?.()??false})}),n.get("/tts",u=>u.json({enabled:e.isTTSEnabled?.()??false,config:e.getTTSConfig?.()??{enabled:false}})),n.post("/device/register",async u=>{let{device:d,capabilities:p}=await u.req.json(),h=u.req.header("x-forwarded-for")?.split(",")[0]?.trim()||u.req.header("x-real-ip")||u.env?.incoming?.socket?.remoteAddress||"unknown",g=o.register(d,p,h);return m.info("SERVER",`Device registered: ${d.type} - ${d.name} (${g})`),u.json({deviceId:g,status:"registered"})}),n.get("/device/:deviceId",u=>{let{deviceId:d}=u.req.param(),p=o.getDevice(d);return p?u.json(p):u.json({error:"Device not found"},404)}),n.get("/devices",u=>{let d=o.getAll();return u.json({count:d.length,devices:d})}),n.delete("/device/:deviceId",u=>{let{deviceId:d}=u.req.param(),p=o.removeDevice(d);return u.json({status:p?"removed":"not_found"})}),n.post("/device/:deviceId/mode",async u=>{let{deviceId:d}=u.req.param(),{mode:p}=await u.req.json();return o.setPreferredMode(d,p),u.json({status:"ok",deviceId:d,mode:p})}),n.get("/device/:deviceId/mode",u=>{let{deviceId:d}=u.req.param(),p=o.getDevice(d);return p?u.json({mode:p.preferredMode??e.getRunMode?.()??"single"}):u.json({error:"Device not found"},404)}),n.get("/host/status",async u=>{let d=await e.getHostStatus?.();return u.json(d??{error:"not available"})}),n.get("/host/agents",async u=>{let d=await e.getHostAgents?.();return u.json(d??[])}),n.get("/host/activity",async u=>{let d=u.req.query("limit")?parseInt(u.req.query("limit")):10,p=await e.getHostActivity?.(d);return u.json(p??[])}),n.get("/host/session",async u=>{let d=await e.getHostSession?.();return u.json(d??null)}),n.get("/host/system",async u=>{let d=await e.getHostSystem?.();return u.json(d??null)}),n.post("/host/interrupt",async u=>{let{reason:d}=await u.req.json().catch(()=>({reason:void 0})),p=await e.hostInterrupt?.(d);return u.json(p??{interrupted:false})}),n.post("/host/command",async u=>{let{text:d,priority:p}=await u.req.json(),h=await e.hostSendCommand?.(d,p);return u.json(h??{queued:false})});let l=async(u,d)=>{let p=u.req.header("x-forwarded-for")?.split(",")[0]?.trim()||u.req.header("x-real-ip")||u.env?.incoming?.socket?.remoteAddress;return !p||!new Set(["127.0.0.1","::1","::ffff:127.0.0.1","localhost"]).has(p)?u.json({error:"Admin endpoints are local-only"},403):d()};n.get("/admin/auth",l,u=>u.json({enabled:i.enabled,hasToken:!!i.token})),n.post("/admin/auth",l,async u=>{let{enabled:d,token:p}=await u.req.json();return p&&i.updateToken(p),d===true&&p?i.enable(p):d===true&&i.token?i.enable(i.token):d===false&&i.disable(),m.info("SERVER",`Auth ${i.enabled?"enabled":"disabled"}`),u.json({enabled:i.enabled})});let c=new ko;return n.get("/channels",u=>u.json(c.list())),n.post("/channels/:id/toggle",async u=>{let{id:d}=u.req.param(),{enabled:p}=await u.req.json(),h=await c.toggle(d,p);return u.json({status:h?"ok":"not_found",id:d,enabled:p})}),n.post("/webhook/:channelId",async u=>{let {channelId:d}=u.req.param();u.req.header("x-hub-signature-256")||u.req.header("x-signature");let h=await u.req.json();try{let g=await c.handleWebhook(d,h);return g===null?u.json({error:"Channel not found or disabled"},404):u.json({reply:g})}catch(g){return u.json({error:g.message},400)}}),{app:n,authGate:i,deviceManager:o,channelRegistry:c}}var xo=class{emitter=new EventEmitter;constructor(){this.emitter.setMaxListeners(100);}publish(e){this.emitter.emit("*",e),this.emitter.emit(`session:${e.sessionId}`,e);}createSink(e="server-bus"){return {name:e,handle:(t,s,n)=>{this.publish({sessionId:t,type:s.type,data:s,tracker:n,timestamp:s.timestamp??Date.now()});}}}subscribe(e){let t=e?`session:${e}`:"*",s=this.emitter,n=false,r=null,i=[],o=u=>{if(r){let d=r;r=null,d({value:u,done:false});}else i.push(u);};s.on(t,o);let l=()=>{if(!n&&(n=true,s.off(t,o),r)){let u=r;r=null,u({value:void 0,done:true});}};return {close:l,[Symbol.asyncIterator](){return {next(){return n?Promise.resolve({value:void 0,done:true}):i.length>0?Promise.resolve({value:i.shift(),done:false}):new Promise(u=>{r=u;})},return(){return l(),Promise.resolve({value:void 0,done:true})}}}}}dispose(){this.emitter.removeAllListeners();}};W();W();function Jl(a){let e=a.getAll();if(e.length===0)return "";let t=[],s=0,n=12e3;for(let r=e.length-1;r>=0&&!(s>=n);r--){let i=e[r];if(i.role==="tool")continue;let l=(typeof i.content=="string"?i.content:JSON.stringify(i.content)).substring(0,1e3);t.unshift(`[${i.role}]: ${l}`),s+=l.length;}return t.join(`
1878
1878
 
1879
1879
  `)}W();var Qw=new Set(["search_files","search","grep","list_directory","show_tree","smart_tree","git_status","git_diff","git_log","smart_read","readfile","read","execute_shell"]);function Vl(a){return [Zw(a)]}var Yl=`
1880
1880
  ## \u5B50 Agent \u5DE5\u5177
@@ -2064,11 +2064,11 @@ ${this.task.description}
2064
2064
  - \u6587\u4EF6\u8BFB\u5199
2065
2065
  - \u4EE3\u7801\u641C\u7D22
2066
2066
  - \u547D\u4EE4\u6267\u884C
2067
- - \u5176\u4ED6\u5DF2\u914D\u7F6E\u7684\u5DE5\u5177`}summarizeOutput(e){if(!e)return "\u4EFB\u52A1\u5DF2\u5B8C\u6210";let t=200;return e.length<=t?e:e.slice(0,t)+"..."}};W();W();var Tn=class extends EventEmitter{context=new Map;taskResults=new Map;messageHistory=[];options;cleanupTimer=null;constructor(e={}){super(),this.options={maxEntries:e.maxEntries??1e3,defaultTtl:e.defaultTtl??0,enableMessageHistory:e.enableMessageHistory??true,maxMessageHistory:e.maxMessageHistory??100},this.startCleanup();}set(e,t,s,n){this.context.size>=this.options.maxEntries&&this.evictOldest();let r={key:e,value:t,source:s,timestamp:Date.now(),ttl:n??(this.options.defaultTtl>0?this.options.defaultTtl:void 0)};this.context.set(e,r),m.debug("SHARED_CONTEXT",`Set: ${e}`,{source:s,hasValue:t!==void 0}),this.emit("context_updated",{key:e,source:s,type:"set"});}get(e){let t=this.context.get(e);if(t){if(t.ttl&&Date.now()-t.timestamp>t.ttl){this.context.delete(e);return}return t.value}}getEntry(e){return this.context.get(e)}has(e){return this.get(e)!==void 0}delete(e){let t=this.context.delete(e);return t&&this.emit("context_updated",{key:e,type:"delete"}),t}keys(){return Array.from(this.context.keys())}getBySource(e){let t=new Map;for(let[s,n]of this.context)n.source===e&&t.set(s,n.value);return t}sendMessage(e){let t={...e,timestamp:Date.now()};m.debug("SHARED_CONTEXT","Message sent",{from:e.from,to:e.to,type:e.type}),this.options.enableMessageHistory&&(this.messageHistory.push(t),this.messageHistory.length>this.options.maxMessageHistory&&this.messageHistory.shift()),this.emit("message",t),e.to==="*"?this.emit("broadcast",t):this.emit(`message:${e.to}`,t);}subscribeMessages(e,t){let s=n=>{t(n);};return this.on(`message:${e}`,s),this.on("broadcast",s),()=>{this.off(`message:${e}`,s),this.off("broadcast",s);}}getMessageHistory(e){return e?this.messageHistory.filter(t=>!(e.from&&t.from!==e.from||e.to&&t.to!==e.to||e.type&&t.type!==e.type||e.since&&t.timestamp<e.since)):[...this.messageHistory]}storeTaskResult(e){this.taskResults.set(e.taskId,e),m.debug("SHARED_CONTEXT","Task result stored",{taskId:e.taskId,agentId:e.agentId,success:e.success}),this.emit("task_result",e);}getTaskResult(e){return this.taskResults.get(e)}async waitForTaskResult(e,t=3e4){let s=this.taskResults.get(e);return s||new Promise((n,r)=>{let i=setTimeout(()=>{this.off("task_result",o),r(new Error(`Timeout waiting for task ${e}`));},t),o=l=>{l.taskId===e&&(clearTimeout(i),this.off("task_result",o),n(l));};this.on("task_result",o);})}getAgentResults(e){return Array.from(this.taskResults.values()).filter(t=>t.agentId===e)}checkDependencies(e){let t=[],s=[];for(let n of e){let r=this.taskResults.get(n);r?r.success||s.push(n):t.push(n);}return {satisfied:t.length===0&&s.length===0,missing:t,failed:s}}async waitForDependencies(e,t=6e4){let s=new Map,n=new Set(e);for(let r of e){let i=this.taskResults.get(r);i&&(s.set(r,i),n.delete(r));}return n.size===0?s:new Promise((r,i)=>{let o=setTimeout(()=>{this.off("task_result",l),i(new Error(`Timeout waiting for dependencies: ${Array.from(n).join(", ")}`));},t),l=c=>{n.has(c.taskId)&&(s.set(c.taskId,c),n.delete(c.taskId),n.size===0&&(clearTimeout(o),this.off("task_result",l),r(s)));};this.on("task_result",l);})}clear(){this.context.clear(),this.taskResults.clear(),this.messageHistory=[],this.emit("cleared");}destroy(){this.cleanupTimer&&(clearInterval(this.cleanupTimer),this.cleanupTimer=null),this.clear(),this.removeAllListeners();}getStats(){return {contextEntries:this.context.size,taskResults:this.taskResults.size,messageHistory:this.messageHistory.length}}startCleanup(){this.cleanupTimer=setInterval(()=>{this.cleanupExpired();},6e4);}cleanupExpired(){let e=Date.now(),t=0;for(let[s,n]of this.context)n.ttl&&e-n.timestamp>n.ttl&&(this.context.delete(s),t++);t>0&&m.debug("SHARED_CONTEXT",`Cleaned ${t} expired entries`);}evictOldest(){let e=null,t=1/0;for(let[s,n]of this.context)n.timestamp<t&&(t=n.timestamp,e=s);e&&(this.context.delete(e),m.debug("SHARED_CONTEXT",`Evicted oldest entry: ${e}`));}};var $s=class{agents=new Map;agentCounter=0;eventBus;options;sharedContext;pendingDependencies=new Map;constructor(e){this.eventBus=e.eventBus,this.options=e,this.sharedContext=e.sharedContext??new Tn;}getSharedContext(){return this.sharedContext}async executePlan(e,t){let s=new Map;if(!e.needsAgents||e.tasks.length===0)return m.info("AGENT_POOL","No agents needed for this plan"),s;this.eventBus.emit({type:"supervisor_message",message:`\u5F00\u59CB\u6267\u884C\uFF0C\u5206\u914D ${e.tasks.length} \u4E2A\u4EFB\u52A1`,timestamp:Date.now()});let n=[];for(let o of e.tasks){let l=this.spawnAndExecute(o,t).then(c=>{s.set(o.id,c);});n.push(l);}await Promise.all(n);let r=Array.from(s.values()).filter(o=>o.success).length,i=s.size-r;return this.eventBus.emit({type:"supervisor_message",message:`\u6267\u884C\u5B8C\u6210: ${r} \u6210\u529F, ${i} \u5931\u8D25`,timestamp:Date.now()}),this.eventBus.emit({type:"timeline",entry:{id:`plan_complete_${Date.now()}`,timestamp:Date.now(),source:"supervisor",icon:r===s.size?"\u2713":"\u26A0",title:"\u4EFB\u52A1\u6267\u884C\u5B8C\u6210",description:`${r}/${s.size} \u4EFB\u52A1\u6210\u529F`,level:i>0?"error":"result"},timestamp:Date.now()}),s}async spawnAndExecute(e,t){let s=`agent-${++this.agentCounter}`,n=`${t}_${s}`,r=oi(this.options.tools,s),i=this.createAgentMemory(),o=new xn({id:s,index:this.agentCounter,task:e,sessionId:t,workDir:this.options.workDir,eventBus:this.eventBus,orchestrator:this.options.orchestrator,resolveProvider:this.options.resolveProvider,providerId:this.options.providerId,modelName:this.options.modelName,permissionManager:this.options.permissionManager,tools:r,memory:i});this.agents.set(s,o),m.info("AGENT_POOL",`Spawned agent ${s}`,{task:e.description});try{let l=await o.execute();return this.sharedContext.storeTaskResult({taskId:e.id,agentId:s,success:l.success,output:l.output,error:l.error,timestamp:Date.now()}),l}finally{this.agents.delete(s),this.clearAgentHost(n);}}async spawnWithDependencies(e,t,s,n=6e4){if(s.length===0)return this.spawnAndExecute(e,t);m.info("AGENT_POOL",`Task ${e.id} waiting for dependencies`,{dependsOn:s});try{let r=await this.sharedContext.waitForDependencies(s,n),i=[];for(let[c,u]of r)u.success||i.push(c);if(i.length>0)return m.warn("AGENT_POOL",`Task ${e.id} has failed dependencies`,{failedDeps:i}),{success:!1,summary:"\u4F9D\u8D56\u4EFB\u52A1\u5931\u8D25",error:`\u4F9D\u8D56\u4EFB\u52A1\u5931\u8D25: ${i.join(", ")}`,duration:0};let o=this.buildDependencyContext(r),l={...e,description:`${e.description}
2067
+ - \u5176\u4ED6\u5DF2\u914D\u7F6E\u7684\u5DE5\u5177`}summarizeOutput(e){if(!e)return "\u4EFB\u52A1\u5DF2\u5B8C\u6210";let t=200;return e.length<=t?e:e.slice(0,t)+"..."}};W();W();var Tn=class extends EventEmitter{context=new Map;taskResults=new Map;messageHistory=[];options;cleanupTimer=null;constructor(e={}){super(),this.options={maxEntries:e.maxEntries??1e3,defaultTtl:e.defaultTtl??0,enableMessageHistory:e.enableMessageHistory??true,maxMessageHistory:e.maxMessageHistory??100},this.startCleanup();}set(e,t,s,n){this.context.size>=this.options.maxEntries&&this.evictOldest();let r={key:e,value:t,source:s,timestamp:Date.now(),ttl:n??(this.options.defaultTtl>0?this.options.defaultTtl:void 0)};this.context.set(e,r),m.debug("SHARED_CONTEXT",`Set: ${e}`,{source:s,hasValue:t!==void 0}),this.emit("context_updated",{key:e,source:s,type:"set"});}get(e){let t=this.context.get(e);if(t){if(t.ttl&&Date.now()-t.timestamp>t.ttl){this.context.delete(e);return}return t.value}}getEntry(e){return this.context.get(e)}has(e){return this.get(e)!==void 0}delete(e){let t=this.context.delete(e);return t&&this.emit("context_updated",{key:e,type:"delete"}),t}keys(){return Array.from(this.context.keys())}getBySource(e){let t=new Map;for(let[s,n]of this.context)n.source===e&&t.set(s,n.value);return t}sendMessage(e){let t={...e,timestamp:Date.now()};m.debug("SHARED_CONTEXT","Message sent",{from:e.from,to:e.to,type:e.type}),this.options.enableMessageHistory&&(this.messageHistory.push(t),this.messageHistory.length>this.options.maxMessageHistory&&this.messageHistory.shift()),this.emit("message",t),e.to==="*"?this.emit("broadcast",t):this.emit(`message:${e.to}`,t);}subscribeMessages(e,t){let s=n=>{t(n);};return this.on(`message:${e}`,s),this.on("broadcast",s),()=>{this.off(`message:${e}`,s),this.off("broadcast",s);}}getMessageHistory(e){return e?this.messageHistory.filter(t=>!(e.from&&t.from!==e.from||e.to&&t.to!==e.to||e.type&&t.type!==e.type||e.since&&t.timestamp<e.since)):[...this.messageHistory]}storeTaskResult(e){this.taskResults.set(e.taskId,e),m.debug("SHARED_CONTEXT","Task result stored",{taskId:e.taskId,agentId:e.agentId,success:e.success}),this.emit("task_result",e);}getTaskResult(e){return this.taskResults.get(e)}async waitForTaskResult(e,t=3e4){let s=this.taskResults.get(e);return s||new Promise((n,r)=>{let i=setTimeout(()=>{this.off("task_result",o),r(new Error(`Timeout waiting for task ${e}`));},t),o=l=>{l.taskId===e&&(clearTimeout(i),this.off("task_result",o),n(l));};this.on("task_result",o);})}getAgentResults(e){return Array.from(this.taskResults.values()).filter(t=>t.agentId===e)}checkDependencies(e){let t=[],s=[];for(let n of e){let r=this.taskResults.get(n);r?r.success||s.push(n):t.push(n);}return {satisfied:t.length===0&&s.length===0,missing:t,failed:s}}async waitForDependencies(e,t=6e4){let s=new Map,n=new Set(e);for(let r of e){let i=this.taskResults.get(r);i&&(s.set(r,i),n.delete(r));}return n.size===0?s:new Promise((r,i)=>{let o=setTimeout(()=>{this.off("task_result",l),i(new Error(`Timeout waiting for dependencies: ${Array.from(n).join(", ")}`));},t),l=c=>{n.has(c.taskId)&&(s.set(c.taskId,c),n.delete(c.taskId),n.size===0&&(clearTimeout(o),this.off("task_result",l),r(s)));};this.on("task_result",l);})}clear(){this.context.clear(),this.taskResults.clear(),this.messageHistory=[],this.emit("cleared");}destroy(){this.cleanupTimer&&(clearInterval(this.cleanupTimer),this.cleanupTimer=null),this.clear(),this.removeAllListeners();}getStats(){return {contextEntries:this.context.size,taskResults:this.taskResults.size,messageHistory:this.messageHistory.length}}startCleanup(){this.cleanupTimer=setInterval(()=>{this.cleanupExpired();},6e4);}cleanupExpired(){let e=Date.now(),t=0;for(let[s,n]of this.context)n.ttl&&e-n.timestamp>n.ttl&&(this.context.delete(s),t++);t>0&&m.debug("SHARED_CONTEXT",`Cleaned ${t} expired entries`);}evictOldest(){let e=null,t=1/0;for(let[s,n]of this.context)n.timestamp<t&&(t=n.timestamp,e=s);e&&(this.context.delete(e),m.debug("SHARED_CONTEXT",`Evicted oldest entry: ${e}`));}};var Fs=class{agents=new Map;agentCounter=0;eventBus;options;sharedContext;pendingDependencies=new Map;constructor(e){this.eventBus=e.eventBus,this.options=e,this.sharedContext=e.sharedContext??new Tn;}getSharedContext(){return this.sharedContext}async executePlan(e,t){let s=new Map;if(!e.needsAgents||e.tasks.length===0)return m.info("AGENT_POOL","No agents needed for this plan"),s;this.eventBus.emit({type:"supervisor_message",message:`\u5F00\u59CB\u6267\u884C\uFF0C\u5206\u914D ${e.tasks.length} \u4E2A\u4EFB\u52A1`,timestamp:Date.now()});let n=[];for(let o of e.tasks){let l=this.spawnAndExecute(o,t).then(c=>{s.set(o.id,c);});n.push(l);}await Promise.all(n);let r=Array.from(s.values()).filter(o=>o.success).length,i=s.size-r;return this.eventBus.emit({type:"supervisor_message",message:`\u6267\u884C\u5B8C\u6210: ${r} \u6210\u529F, ${i} \u5931\u8D25`,timestamp:Date.now()}),this.eventBus.emit({type:"timeline",entry:{id:`plan_complete_${Date.now()}`,timestamp:Date.now(),source:"supervisor",icon:r===s.size?"\u2713":"\u26A0",title:"\u4EFB\u52A1\u6267\u884C\u5B8C\u6210",description:`${r}/${s.size} \u4EFB\u52A1\u6210\u529F`,level:i>0?"error":"result"},timestamp:Date.now()}),s}async spawnAndExecute(e,t){let s=`agent-${++this.agentCounter}`,n=`${t}_${s}`,r=oi(this.options.tools,s),i=this.createAgentMemory(),o=new xn({id:s,index:this.agentCounter,task:e,sessionId:t,workDir:this.options.workDir,eventBus:this.eventBus,orchestrator:this.options.orchestrator,resolveProvider:this.options.resolveProvider,providerId:this.options.providerId,modelName:this.options.modelName,permissionManager:this.options.permissionManager,tools:r,memory:i});this.agents.set(s,o),m.info("AGENT_POOL",`Spawned agent ${s}`,{task:e.description});try{let l=await o.execute();return this.sharedContext.storeTaskResult({taskId:e.id,agentId:s,success:l.success,output:l.output,error:l.error,timestamp:Date.now()}),l}finally{this.agents.delete(s),this.clearAgentHost(n);}}async spawnWithDependencies(e,t,s,n=6e4){if(s.length===0)return this.spawnAndExecute(e,t);m.info("AGENT_POOL",`Task ${e.id} waiting for dependencies`,{dependsOn:s});try{let r=await this.sharedContext.waitForDependencies(s,n),i=[];for(let[c,u]of r)u.success||i.push(c);if(i.length>0)return m.warn("AGENT_POOL",`Task ${e.id} has failed dependencies`,{failedDeps:i}),{success:!1,summary:"\u4F9D\u8D56\u4EFB\u52A1\u5931\u8D25",error:`\u4F9D\u8D56\u4EFB\u52A1\u5931\u8D25: ${i.join(", ")}`,duration:0};let o=this.buildDependencyContext(r),l={...e,description:`${e.description}
2068
2068
 
2069
2069
  [\u4F9D\u8D56\u4EFB\u52A1\u7ED3\u679C]
2070
2070
  ${o}`};return this.spawnAndExecute(l,t)}catch(r){let i=r instanceof Error?r.message:String(r);return m.error("AGENT_POOL",`Task ${e.id} dependency wait failed`,{error:i}),{success:false,summary:"\u4F9D\u8D56\u7B49\u5F85\u5931\u8D25",error:i,duration:0}}}buildDependencyContext(e){let t=[];for(let[s,n]of e)n.success&&n.output&&t.push(`- ${s}: ${JSON.stringify(n.output).substring(0,200)}`);return t.join(`
2071
- `)}createAgentMemory(){return new at}clearAgentHost(e){let t=this.options.hostService;if(!t)return;t.getHost(e)?.dispose?.(),t.clearHost(e);}async spawn(e){let t=`agent-${++this.agentCounter}`,s=`${e.sessionId}_${t}`,n=e.taskId??`task-${Date.now()}-${this.agentCounter}`,r={id:n,description:e.prompt,priority:e.priority??1},i=oi(this.options.tools,t),o=this.createAgentMemory(),l=e.providerId??this.options.providerId,c=e.model??this.options.modelName,u=new xn({id:t,index:this.agentCounter,task:r,sessionId:e.sessionId,workDir:this.options.workDir,eventBus:this.eventBus,orchestrator:this.options.orchestrator,resolveProvider:this.options.resolveProvider,providerId:l,modelName:c,permissionManager:this.options.permissionManager,tools:i,memory:o,onRuntimeEvent:this.options.onAgentRuntimeEvent?(f,b)=>this.options.onAgentRuntimeEvent(t,f,b):void 0});this.agents.set(t,u),m.info("AGENT_POOL",`Spawned agent ${t} (background)`,{prompt:e.prompt});let d=e.timeoutMs??5*6e4,p=null,h=false,g=()=>{p&&(clearTimeout(p),p=null),h||(h=true,this.agents.delete(t),this.clearAgentHost(s));};return p=setTimeout(()=>{h||(m.warn("AGENT_POOL",`Agent ${t} timed out after ${d/1e3}s, force aborting`),u.abort(),g(),this.sharedContext.storeTaskResult({taskId:r.id,agentId:t,success:false,error:`Worker timeout (${d/1e3}s)`,timestamp:Date.now()}),this.options.onAgentCompleted?.({agentId:t,success:false,error:`Worker timeout (${d/1e3}s)`}));},d),u.execute().then(f=>{h||(g(),this.sharedContext.storeTaskResult({taskId:r.id,agentId:t,success:f.success,output:f.output,error:f.error,timestamp:Date.now()}),m.info("AGENT_POOL",`Agent ${t} completed`,{success:f.success}),this.options.onAgentCompleted?.({agentId:t,success:f.success,output:f.output,error:f.error}));}).catch(f=>{h||(g(),this.sharedContext.storeTaskResult({taskId:r.id,agentId:t,success:false,error:f.message,timestamp:Date.now()}),m.error("AGENT_POOL",`Agent ${t} failed`,{error:f.message}),this.options.onAgentCompleted?.({agentId:t,success:false,error:f.message}));}),{agentId:t,taskId:n}}getActiveAgents(){return Array.from(this.agents.values()).map(e=>e.getInfo())}getActiveCount(){return this.agents.size}abortAll(){for(let e of this.agents.values())e.abort();this.agents.clear();}abort(e){let t=this.agents.get(e);return t?(t.abort(),this.agents.delete(e),true):false}reset(){this.abortAll(),this.agentCounter=0;}};W();W();var Zl={openai:"https://api.openai.com/v1","openai-responses":"https://api.openai.com/v1",anthropic:"https://api.anthropic.com","anthropic-openai":"https://api.anthropic.com/v1",doubao:"https://ark.cn-beijing.volces.com/api/v3",gemini:"https://generativelanguage.googleapis.com",kimi:"https://api.moonshot.cn/v1"},rt=class{config;constructor(e){this.config=e??Le(),this.config.providers||(this.config.providers={});}sanitizeId(e){return e.toLowerCase().trim().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").substring(0,48)}ensureValidId(e){let t=this.sanitizeId(e);if(!t)throw new Error("Provider ID must contain letters or numbers (allowed: lowercase letters, numbers, hyphen).");if(!/^[a-z0-9][a-z0-9-]*$/.test(t))throw new Error("Provider ID can only include lowercase letters, numbers, and hyphen.");return t}slugifyName(e){return this.sanitizeId(e)||"provider"}ensureProviderId(e,t){let s=e||this.slugifyName(t||"provider");if(this.config.providers||(this.config.providers={}),!this.config.providers[s])return s;let n=2,r=`${s}-${n}`;for(;this.config.providers[r];)n+=1,r=`${s}-${n}`;return r}persist(){vs(this.config);}getProviderCount(){return Object.keys(this.config.providers||{}).length}getProviders(){return Object.values(this.config.providers||{}).sort((e,t)=>e.name.localeCompare(t.name))}getProvider(e){if(e)return this.config.providers?.[e]}getDefaultProvider(){if(this.config.defaultProviderId){let t=this.getProvider(this.config.defaultProviderId);if(t)return t}let[e]=this.getProviders();return e&&(this.config.defaultProviderId=e.id,this.persist()),e}setDefaultProvider(e){let t=this.getProvider(e);if(!t)throw new Error(`Provider "${e}" does not exist.`);return this.config.defaultProviderId=e,this.persist(),t}addProvider(e){if(!e.name.trim())throw new Error("Provider name is required.");if(!e.apiKey.trim())throw new Error("Provider API key/token is required.");let t=this.ensureProviderId(e.id,e.name),s=new Date().toISOString(),n=e.baseUrl?.trim()||Zl[e.protocol],r=(e.models||[]).map(o=>typeof o=="string"?{name:o,createdAt:s}:{...o,createdAt:o.createdAt||s}),i={id:t,name:e.name.trim(),protocol:e.protocol,apiKey:e.apiKey.trim(),baseUrl:n,urlSuffix:e.urlSuffix,maxTokens:e.maxTokens,maxInputTokens:e.maxInputTokens,models:r,defaultModel:e.defaultModel||r[0]?.name,lastSelectedModel:e.defaultModel||r[0]?.name,createdAt:s,updatedAt:s};if(!i.defaultModel)throw new Error("At least one model is required when creating a provider.");return this.config.providers||(this.config.providers={}),this.config.providers[t]=i,(!this.config.defaultProviderId||e.setAsDefault)&&(this.config.defaultProviderId=t),this.persist(),i}updateProvider(e,t){let s=this.getProvider(e);if(!s)throw new Error(`Provider "${e}" does not exist.`);let n=new Date().toISOString(),r={...s,...t,baseUrl:t.baseUrl?.trim()||s.baseUrl||Zl[s.protocol],urlSuffix:t.urlSuffix!==void 0?t.urlSuffix:s.urlSuffix,apiKey:t.apiKey?.trim()||s.apiKey,maxTokens:t.maxTokens!==void 0?t.maxTokens:s.maxTokens,maxInputTokens:t.maxInputTokens!==void 0?t.maxInputTokens:s.maxInputTokens,updatedAt:n};if(t.protocol&&t.protocol!==s.protocol&&(r.protocol=t.protocol,t.baseUrl||(r.baseUrl=Zl[t.protocol])),t.defaultModel){if(!r.models.some(o=>o.name===t.defaultModel))throw new Error(`Model "${t.defaultModel}" does not exist for provider "${e}".`);r.defaultModel=t.defaultModel,r.lastSelectedModel=t.defaultModel;}return this.config.providers[e]=r,this.persist(),r}renameProvider(e,t){let s=this.getProvider(e);if(!s)throw new Error(`Provider "${e}" does not exist.`);let n=this.ensureValidId(t);if(n===e)return s;if(this.config.providers?.[n])throw new Error(`Provider ID "${n}" already exists.`);delete this.config.providers[e];let r=new Date().toISOString(),i={...s,id:n,updatedAt:r};return this.config.providers[n]=i,this.config.defaultProviderId===e&&(this.config.defaultProviderId=n),this.persist(),i}deleteProvider(e){if(!this.config.providers?.[e])throw new Error(`Provider "${e}" does not exist.`);delete this.config.providers[e],this.config.defaultProviderId===e&&(this.config.defaultProviderId=void 0),this.persist();}addModel(e,t,s=false,n){let r=this.getProvider(e);if(!r)throw new Error(`Provider "${e}" does not exist.`);let i=t.trim();if(!i)throw new Error("Model name cannot be empty.");if(r.models.some(l=>l.name===i))throw new Error(`Model "${i}" already exists for provider "${e}".`);let o={...r,models:[...r.models,{name:i,createdAt:new Date().toISOString(),...n}],updatedAt:new Date().toISOString()};return (!r.defaultModel||s)&&(o.defaultModel=i,o.lastSelectedModel=i),this.config.providers[e]=o,this.persist(),o}removeModel(e,t){let s=this.getProvider(e);if(!s)throw new Error(`Provider "${e}" does not exist.`);if(s.models.length<=1)throw new Error("A provider must have at least one model.");let n=s.models.filter(i=>i.name!==t);if(n.length===s.models.length)throw new Error(`Model "${t}" does not exist for provider "${e}".`);let r={...s,models:n,updatedAt:new Date().toISOString()};return s.defaultModel===t&&(r.defaultModel=n[0].name),s.lastSelectedModel===t&&(r.lastSelectedModel=r.defaultModel),this.config.providers[e]=r,this.persist(),r}updateModelConfig(e,t,s){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);let r=n.models.findIndex(l=>l.name===t);if(r===-1)throw new Error(`Model "${t}" does not exist for provider "${e}".`);let i=[...n.models];i[r]={...i[r],...s};let o={...n,models:i,updatedAt:new Date().toISOString()};return this.config.providers[e]=o,this.persist(),o}setLastSelectedModel(e,t){let s=this.getProvider(e);if(!s)throw new Error(`Provider "${e}" does not exist.`);if(!s.models.some(r=>r.name===t))throw new Error(`Model "${t}" does not exist for provider "${e}".`);return s.lastSelectedModel=t,s.updatedAt=new Date().toISOString(),this.config.providers[e]=s,this.persist(),s}resolveModel(e,t){let s=this.getProvider(e);if(s)return t&&s.models.some(r=>r.name===t)?t:s.lastSelectedModel||s.defaultModel||s.models[0]?.name}};var ec={"claude-opus-4-5-20250514":["reasoning","creative","thorough","\u6DF1\u5EA6\u601D\u8003","\u590D\u6742\u63A8\u7406"],"claude-sonnet-4-5-20250514":["coding","fast","accurate","\u4EE3\u7801","\u5FEB\u901F"],"claude-haiku-4-5-20250514":["fast","cheap","simple","\u8F7B\u91CF","\u4F4E\u6210\u672C"],"claude-opus-4-20250514":["reasoning","creative","thorough","\u6DF1\u5EA6\u601D\u8003"],"claude-sonnet-4-20250514":["coding","fast","accurate","\u4EE3\u7801"],"gpt-5.2":["reasoning","coding","thorough","\u6DF1\u5EA6\u63A8\u7406","\u5168\u80FD"],"gpt-5.2-mini":["reasoning","fast","balanced","\u63A8\u7406","\u5FEB\u901F"],"gpt-5.2-codex":["coding","agent","autonomous","\u4EE3\u7801\u4E13\u5BB6","\u81EA\u4E3B\u7F16\u7A0B"],"gpt-5.2-codex-high":["coding","agent","thorough","\u4EE3\u7801","\u6DF1\u5EA6\u7F16\u7A0B","\u6700\u5F3A"],"gpt-5.2-codex-medium":["coding","agent","balanced","\u4EE3\u7801","\u6027\u4EF7\u6BD4"],"gpt-5.1":["reasoning","coding","balanced","\u903B\u8F91\u7F1C\u5BC6","\u901A\u7528"],"gpt-5.1-mini":["fast","cheap","coding","\u5FEB\u901F","\u4F4E\u6210\u672C"],"gpt-5.1-codex":["coding","agent","autonomous","\u4EE3\u7801","\u7F16\u7A0B"],"gpt-5.1-codex-max":["coding","agent","thorough","\u4EE3\u7801","\u6DF1\u5EA6\u7F16\u7A0B"],o3:["reasoning","math","science","\u6DF1\u5EA6\u63A8\u7406","\u6570\u5B66"],"o4-mini":["reasoning","fast","coding","\u63A8\u7406","\u5FEB\u901F"],"gemini-3-pro-preview":["ui","design","vision","creative","UI\u8BBE\u8BA1","\u754C\u9762","\u89C6\u89C9"],"gemini-3.0-pro":["ui","design","vision","creative","UI\u8BBE\u8BA1","\u754C\u9762"],"gemini-3.0-flash":["ui","fast","vision","UI","\u5FEB\u901F"],"gemini-2.5-pro":["reasoning","long-context","vision","\u63A8\u7406","\u957F\u4E0A\u4E0B\u6587"],"gemini-2.5-flash":["fast","vision","multimodal","\u5FEB\u901F","\u591A\u6A21\u6001"],"deepseek-v3":["coding","reasoning","cheap","\u4EE3\u7801","\u6027\u4EF7\u6BD4"],"deepseek-r1":["reasoning","math","thinking","\u6DF1\u5EA6\u63A8\u7406","\u6570\u5B66"],"qwen-max":["chinese","reasoning","coding","\u4E2D\u6587","\u63A8\u7406"],"qwen-turbo":["chinese","fast","cheap","\u4E2D\u6587","\u5FEB\u901F"]},Tm=6,It=class{providerStore;scope;constructor(e,t="assistant"){this.providerStore=e??new rt,this.scope=t;}readLegacyScopedConfig(e){if(this.scope==="assistant"){let t=e.assistant;return {...t??{},workerPool:t?.workerPool??[]}}return {workerPool:[]}}readScopedRunModeConfig(e){return e.runConfig?.modes?.[this.scope]}getConfig(){let e=Le(),t=this.readScopedRunModeConfig(e);return t?{mainAgent:t.mainAgent,workerPool:t.workerPool??[],maxConcurrent:t.maxConcurrent,ccbReviewMode:t.ccbReviewMode,createdAt:t.createdAt,updatedAt:t.updatedAt}:this.readLegacyScopedConfig(e)}saveConfig(e){let t=Le(),s=new Date().toISOString(),n=t.runConfig?.modes?.[this.scope]??{},r={...n,mainAgent:e.mainAgent,workerPool:e.workerPool??[],maxConcurrent:e.maxConcurrent,ccbReviewMode:e.ccbReviewMode,updatedAt:s,createdAt:n.createdAt||s};t.runConfig={...t.runConfig??{},modes:{...t.runConfig?.modes??{},[this.scope]:r}},this.scope==="assistant"&&(t.assistant={...e,updatedAt:s,createdAt:t.assistant?.createdAt||s}),vs(t);}getNetworkRoles(){let e=Le(),t=e.runConfig?.modes?.network?.networkRoles;if(Array.isArray(t))return t;let s=e.assistant?.networkRoles;return Array.isArray(s)?s:[]}setNetworkRoles(e){let t=Le(),s=new Date().toISOString(),n=t.runConfig?.modes?.network??{};t.runConfig={...t.runConfig??{},modes:{...t.runConfig?.modes??{},network:{...n,networkRoles:e,updatedAt:s,createdAt:n.createdAt||s}}},vs(t);}getMainAgent(){let e=this.getConfig();if(e.mainAgent)return e.mainAgent;let t=this.providerStore.getDefaultProvider();if(t)return {providerId:t.id,model:t.lastSelectedModel||t.defaultModel||t.models[0]?.name}}setMainAgent(e){let t=this.getConfig();t.mainAgent=e,this.saveConfig(t);}getSupervisorAgent(){return this.getConfig().supervisorAgent}setSupervisorAgent(e){let t=this.getConfig();t.supervisorAgent=e,this.saveConfig(t);}getWorkerPool(){return this.getConfig().workerPool||[]}getMaxConcurrent(){let e=this.getConfig();return typeof e.maxConcurrent=="number"&&Number.isFinite(e.maxConcurrent)?e.maxConcurrent:void 0}setMaxConcurrent(e){let t=this.getConfig();typeof e=="number"&&Number.isFinite(e)&&e>0?t.maxConcurrent=Math.floor(e):delete t.maxConcurrent,this.saveConfig(t);}getCCBReviewMode(){let t=this.getConfig().ccbReviewMode;return t==="single"?"single-role":t==="multi"?"multi-model":t??"multi-role"}setCCBReviewMode(e){let t=this.getConfig();t.ccbReviewMode=e,this.saveConfig(t);}setWorkerPool(e){let t=this.getConfig();t.workerPool=e,this.saveConfig(t);}addWorkerModel(e,t,s=true){let n=this.getWorkerPool();if(n.some(o=>o.providerId===e&&o.model===t))return;let i=this.getModelTraits(t);n.push({providerId:e,model:t,enabled:s,traits:i}),this.setWorkerPool(n);}removeWorkerModel(e,t){let n=this.getWorkerPool().filter(r=>!(r.providerId===e&&r.model===t));this.setWorkerPool(n);}toggleWorkerModel(e,t){let s=this.getWorkerPool(),n=s.find(r=>r.providerId===e&&r.model===t);n&&(n.enabled=!n.enabled,this.setWorkerPool(s));}getEnabledWorkerModels(){return this.getWorkerPool().filter(e=>e.enabled)}getAvailableModels(){let e=this.providerStore.getProviders(),t=[];for(let s of e)for(let n of s.models){let r=this.getModelTraits(n.name);t.push({providerId:s.id,providerName:s.name,model:n.name,traits:r});}return t}selectWorkerByTraits(e){let t=this.getEnabledWorkerModels();if(t.length===0)return;let s=t.map(n=>{let r=n.traits||[],i=e.filter(o=>r.includes(o)).length;return {entry:n,score:i}});return s.sort((n,r)=>r.score-n.score),s[0]?.entry}getModelTraits(e){if(ec[e])return [...ec[e]];let t=e.toLowerCase();for(let[i,o]of Object.entries(ec))if(t.includes(i.toLowerCase())||i.toLowerCase().includes(t))return [...o];let s=Xi.getModel(e);if(!s)return [];let n=[],r=s.scores||{};return (r.coding??0)>=85&&n.push("coding"),(r.reasoning??0)>=85&&n.push("reasoning"),(r.vision??0)>=80&&n.push("vision"),(r.creativity??0)>=85&&n.push("creative"),(r.speed??0)>=85&&n.push("fast"),(r.cost??0)>=85&&n.push("low-cost"),s.supportsThinking&&n.push("thinking"),s.supportsVision&&n.push("multimodal"),s.maxInputTokens>=5e5&&n.push("long-context"),n}updateWorkerTraits(e,t,s){let n=this.getWorkerPool(),r=n.find(i=>i.providerId===e&&i.model===t);r&&(r.traits=s,this.setWorkerPool(n));}addWorkerTraits(e,t,s){let n=this.getWorkerPool(),r=n.find(i=>i.providerId===e&&i.model===t);if(r){let i=r.traits||[],o=[...new Set([...i,...s])];r.traits=o,this.setWorkerPool(n);}}initializeDefaults(){if(this.getConfig().workerPool.length>0)return;let t=this.providerStore.getDefaultProvider();if(!t)return;let s=t.models.map((n,r)=>({providerId:t.id,model:n.name,enabled:r===0,traits:this.getModelTraits(n.name)}));this.setWorkerPool(s);}};var tc={coordinator:["reasoning","thorough","long-context"],scout:["fast","cheap","low-cost","vision"],worker:["coding","agent","balanced","fast"],compressor:["fast","cheap","reasoning"],verifier:["reasoning","coding","thorough"]};function it(a){return (a||"").trim().toLowerCase()}function dC(a){let e=it(a);return e?/(探索|调研|收集|搜集|scan|explore|research|investigate|find)/i.test(e)?"scout":/(总结|摘要|归纳|压缩|提炼|summarize|compress|distill)/i.test(e)?"compressor":/(校验|验证|检查|核对|verify|validate|check|assert)/i.test(e)?"verifier":/(规划|统筹|拆分|协调|plan|coordinate|orchestrate)/i.test(e)?"coordinator":"worker":"worker"}function pC(a){let e=it(a),t=new Set;return /(ui|前端|界面|视觉|image|vision|design)/i.test(e)&&(t.add("vision"),t.add("creative")),/(代码|实现|修复|重构|coding|implement|fix|refactor)/i.test(e)&&t.add("coding"),/(复杂|架构|推理|analysis|reason|complex)/i.test(e)&&(t.add("reasoning"),t.add("thorough")),/(快速|尽快|cheap|低成本|fast|quick)/i.test(e)&&(t.add("fast"),t.add("cheap")),Array.from(t)}function mC(a){let e=it(a);return e.includes("claude")?"claude":e.includes("gpt")||e==="o3"||e.includes("o4")||e.includes("o1")?"gpt":e.includes("gemini")?"gemini":e.includes("deepseek")?"deepseek":e.includes("qwen")?"qwen":"other"}function gC(a,e){let t=it(e),s=mC(e);if(a==="scout"){if(t.includes("haiku")||t.includes("flash")||t.includes("mini"))return 2;if(s==="gemini")return 1.5;if(s==="claude"||s==="gpt")return 1}if(a==="worker"){if(t.includes("codex"))return 2;if(t.includes("sonnet")||t.includes("opus"))return 1.5;if(s==="deepseek")return 1}if(a==="compressor"){if(t.includes("mini")||t.includes("haiku")||t.includes("flash"))return 2;if(s==="gpt"||s==="claude")return 1}if(a==="verifier"){if(t.includes("opus")||t.includes("sonnet")||t.includes("gpt-5")||t.includes("gpt-4"))return 2;if(s==="claude"||s==="gpt")return 1}if(a==="coordinator"){if(t.includes("opus")||t.includes("gpt-5")||t.includes("sonnet"))return 2;if(s==="claude"||s==="gpt")return 1}return 0}var Ro=class{options;constructor(e){this.options=e;}selectModel(e){let t=e.role??dC(e.task),s=this.options.getEnabledWorkers();if(s.length===0)return {providerId:this.options.defaultProviderId,model:this.options.defaultModel,role:t,confidence:0,reason:"worker_pool_empty_fallback_default",requiredTraits:tc[t]};if(e.explicitWorkerId){let u=this.findByWorkerIdOrModel(e.explicitWorkerId,s);if(u)return {providerId:u.providerId,model:u.model,role:t,confidence:1,reason:`explicit_worker_selected:${e.explicitWorkerId}`,requiredTraits:tc[t]}}let n=new Set(Array.from(e.avoidModels||[]).map(it)),r=s.filter(u=>!n.has(it(u.model))),i=r.length>0?r:s,o=Array.from(new Set([...tc[t],...pC(e.task)])),l=i[0],c=Number.NEGATIVE_INFINITY;for(let u of i){let d=new Set((u.traits||[]).map(it)),p=o.reduce((f,b)=>d.has(it(b))?f+2:f,0),h=gC(t,u.model),g=p+h;g>c&&(c=g,l=u);}return {providerId:l.providerId,model:l.model,role:t,confidence:Math.max(.1,Math.min(1,c/12)),reason:`policy_selected(role=${t},score=${c.toFixed(1)})`,requiredTraits:o}}findByWorkerIdOrModel(e,t){let s=it(e),n=t.find(i=>it(i.providerId)===s);if(n)return n;let r=t.find(i=>it(i.model)===s);return r||t.find(i=>it(i.providerId).includes(s)||it(i.model).includes(s))}};function Ao(a){let e=it(a);if(e&&(e==="coordinator"||e==="scout"||e==="worker"||e==="compressor"||e==="verifier"))return e}var Eo=null;function nc(a){Eo=a,m.debug("ASSISTANT_TOOLS","Context set",{sessionId:a.sessionId});}function Io(){Eo=null;}function rc(){if(!Eo)throw new Error("Assistant tools context not initialized");return Eo}var sc=null;function ic(){return sc||(sc=new It(new rt)),sc}function hC(){let e=ic().getEnabledWorkerModels();return e.length===0?"\uFF08\u6682\u65E0\u53EF\u7528 Worker \u6A21\u578B\uFF09":`\u53EF\u7528 Worker \u6A21\u578B\uFF1A
2071
+ `)}createAgentMemory(){return new at}clearAgentHost(e){let t=this.options.hostService;if(!t)return;t.getHost(e)?.dispose?.(),t.clearHost(e);}async spawn(e){let t=`agent-${++this.agentCounter}`,s=`${e.sessionId}_${t}`,n=e.taskId??`task-${Date.now()}-${this.agentCounter}`,r={id:n,description:e.prompt,priority:e.priority??1},i=oi(this.options.tools,t),o=this.createAgentMemory(),l=e.providerId??this.options.providerId,c=e.model??this.options.modelName,u=new xn({id:t,index:this.agentCounter,task:r,sessionId:e.sessionId,workDir:this.options.workDir,eventBus:this.eventBus,orchestrator:this.options.orchestrator,resolveProvider:this.options.resolveProvider,providerId:l,modelName:c,permissionManager:this.options.permissionManager,tools:i,memory:o,onRuntimeEvent:this.options.onAgentRuntimeEvent?(f,b)=>this.options.onAgentRuntimeEvent(t,f,b):void 0});this.agents.set(t,u),m.info("AGENT_POOL",`Spawned agent ${t} (background)`,{prompt:e.prompt});let d=e.timeoutMs??5*6e4,p=null,h=false,g=()=>{p&&(clearTimeout(p),p=null),h||(h=true,this.agents.delete(t),this.clearAgentHost(s));};return p=setTimeout(()=>{h||(m.warn("AGENT_POOL",`Agent ${t} timed out after ${d/1e3}s, force aborting`),u.abort(),g(),this.sharedContext.storeTaskResult({taskId:r.id,agentId:t,success:false,error:`Worker timeout (${d/1e3}s)`,timestamp:Date.now()}),this.options.onAgentCompleted?.({agentId:t,success:false,error:`Worker timeout (${d/1e3}s)`}));},d),u.execute().then(f=>{h||(g(),this.sharedContext.storeTaskResult({taskId:r.id,agentId:t,success:f.success,output:f.output,error:f.error,timestamp:Date.now()}),m.info("AGENT_POOL",`Agent ${t} completed`,{success:f.success}),this.options.onAgentCompleted?.({agentId:t,success:f.success,output:f.output,error:f.error}));}).catch(f=>{h||(g(),this.sharedContext.storeTaskResult({taskId:r.id,agentId:t,success:false,error:f.message,timestamp:Date.now()}),m.error("AGENT_POOL",`Agent ${t} failed`,{error:f.message}),this.options.onAgentCompleted?.({agentId:t,success:false,error:f.message}));}),{agentId:t,taskId:n}}getActiveAgents(){return Array.from(this.agents.values()).map(e=>e.getInfo())}getActiveCount(){return this.agents.size}abortAll(){for(let e of this.agents.values())e.abort();this.agents.clear();}abort(e){let t=this.agents.get(e);return t?(t.abort(),this.agents.delete(e),true):false}reset(){this.abortAll(),this.agentCounter=0;}};W();W();var Zl={openai:"https://api.openai.com/v1","openai-responses":"https://api.openai.com/v1",anthropic:"https://api.anthropic.com","anthropic-openai":"https://api.anthropic.com/v1",doubao:"https://ark.cn-beijing.volces.com/api/v3",gemini:"https://generativelanguage.googleapis.com",kimi:"https://api.moonshot.cn/v1"},rt=class{config;constructor(e){this.config=e??Le(),this.config.providers||(this.config.providers={});}sanitizeId(e){return e.toLowerCase().trim().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").substring(0,48)}ensureValidId(e){let t=this.sanitizeId(e);if(!t)throw new Error("Provider ID must contain letters or numbers (allowed: lowercase letters, numbers, hyphen).");if(!/^[a-z0-9][a-z0-9-]*$/.test(t))throw new Error("Provider ID can only include lowercase letters, numbers, and hyphen.");return t}slugifyName(e){return this.sanitizeId(e)||"provider"}ensureProviderId(e,t){let s=e||this.slugifyName(t||"provider");if(this.config.providers||(this.config.providers={}),!this.config.providers[s])return s;let n=2,r=`${s}-${n}`;for(;this.config.providers[r];)n+=1,r=`${s}-${n}`;return r}persist(){ws(this.config);}getProviderCount(){return Object.keys(this.config.providers||{}).length}getProviders(){return Object.values(this.config.providers||{}).sort((e,t)=>e.name.localeCompare(t.name))}getProvider(e){if(e)return this.config.providers?.[e]}getDefaultProvider(){if(this.config.defaultProviderId){let t=this.getProvider(this.config.defaultProviderId);if(t)return t}let[e]=this.getProviders();return e&&(this.config.defaultProviderId=e.id,this.persist()),e}setDefaultProvider(e){let t=this.getProvider(e);if(!t)throw new Error(`Provider "${e}" does not exist.`);return this.config.defaultProviderId=e,this.persist(),t}addProvider(e){if(!e.name.trim())throw new Error("Provider name is required.");if(!e.apiKey.trim())throw new Error("Provider API key/token is required.");let t=this.ensureProviderId(e.id,e.name),s=new Date().toISOString(),n=e.baseUrl?.trim()||Zl[e.protocol],r=(e.models||[]).map(o=>typeof o=="string"?{name:o,createdAt:s}:{...o,createdAt:o.createdAt||s}),i={id:t,name:e.name.trim(),protocol:e.protocol,apiKey:e.apiKey.trim(),baseUrl:n,urlSuffix:e.urlSuffix,maxTokens:e.maxTokens,maxInputTokens:e.maxInputTokens,models:r,defaultModel:e.defaultModel||r[0]?.name,lastSelectedModel:e.defaultModel||r[0]?.name,createdAt:s,updatedAt:s};if(!i.defaultModel)throw new Error("At least one model is required when creating a provider.");return this.config.providers||(this.config.providers={}),this.config.providers[t]=i,(!this.config.defaultProviderId||e.setAsDefault)&&(this.config.defaultProviderId=t),this.persist(),i}updateProvider(e,t){let s=this.getProvider(e);if(!s)throw new Error(`Provider "${e}" does not exist.`);let n=new Date().toISOString(),r={...s,...t,baseUrl:t.baseUrl?.trim()||s.baseUrl||Zl[s.protocol],urlSuffix:t.urlSuffix!==void 0?t.urlSuffix:s.urlSuffix,apiKey:t.apiKey?.trim()||s.apiKey,maxTokens:t.maxTokens!==void 0?t.maxTokens:s.maxTokens,maxInputTokens:t.maxInputTokens!==void 0?t.maxInputTokens:s.maxInputTokens,updatedAt:n};if(t.protocol&&t.protocol!==s.protocol&&(r.protocol=t.protocol,t.baseUrl||(r.baseUrl=Zl[t.protocol])),t.defaultModel){if(!r.models.some(o=>o.name===t.defaultModel))throw new Error(`Model "${t.defaultModel}" does not exist for provider "${e}".`);r.defaultModel=t.defaultModel,r.lastSelectedModel=t.defaultModel;}return this.config.providers[e]=r,this.persist(),r}renameProvider(e,t){let s=this.getProvider(e);if(!s)throw new Error(`Provider "${e}" does not exist.`);let n=this.ensureValidId(t);if(n===e)return s;if(this.config.providers?.[n])throw new Error(`Provider ID "${n}" already exists.`);delete this.config.providers[e];let r=new Date().toISOString(),i={...s,id:n,updatedAt:r};return this.config.providers[n]=i,this.config.defaultProviderId===e&&(this.config.defaultProviderId=n),this.persist(),i}deleteProvider(e){if(!this.config.providers?.[e])throw new Error(`Provider "${e}" does not exist.`);delete this.config.providers[e],this.config.defaultProviderId===e&&(this.config.defaultProviderId=void 0),this.persist();}addModel(e,t,s=false,n){let r=this.getProvider(e);if(!r)throw new Error(`Provider "${e}" does not exist.`);let i=t.trim();if(!i)throw new Error("Model name cannot be empty.");if(r.models.some(l=>l.name===i))throw new Error(`Model "${i}" already exists for provider "${e}".`);let o={...r,models:[...r.models,{name:i,createdAt:new Date().toISOString(),...n}],updatedAt:new Date().toISOString()};return (!r.defaultModel||s)&&(o.defaultModel=i,o.lastSelectedModel=i),this.config.providers[e]=o,this.persist(),o}removeModel(e,t){let s=this.getProvider(e);if(!s)throw new Error(`Provider "${e}" does not exist.`);if(s.models.length<=1)throw new Error("A provider must have at least one model.");let n=s.models.filter(i=>i.name!==t);if(n.length===s.models.length)throw new Error(`Model "${t}" does not exist for provider "${e}".`);let r={...s,models:n,updatedAt:new Date().toISOString()};return s.defaultModel===t&&(r.defaultModel=n[0].name),s.lastSelectedModel===t&&(r.lastSelectedModel=r.defaultModel),this.config.providers[e]=r,this.persist(),r}updateModelConfig(e,t,s){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);let r=n.models.findIndex(l=>l.name===t);if(r===-1)throw new Error(`Model "${t}" does not exist for provider "${e}".`);let i=[...n.models];i[r]={...i[r],...s};let o={...n,models:i,updatedAt:new Date().toISOString()};return this.config.providers[e]=o,this.persist(),o}setLastSelectedModel(e,t){let s=this.getProvider(e);if(!s)throw new Error(`Provider "${e}" does not exist.`);if(!s.models.some(r=>r.name===t))throw new Error(`Model "${t}" does not exist for provider "${e}".`);return s.lastSelectedModel=t,s.updatedAt=new Date().toISOString(),this.config.providers[e]=s,this.persist(),s}resolveModel(e,t){let s=this.getProvider(e);if(s)return t&&s.models.some(r=>r.name===t)?t:s.lastSelectedModel||s.defaultModel||s.models[0]?.name}};var ec={"claude-opus-4-5-20250514":["reasoning","creative","thorough","\u6DF1\u5EA6\u601D\u8003","\u590D\u6742\u63A8\u7406"],"claude-sonnet-4-5-20250514":["coding","fast","accurate","\u4EE3\u7801","\u5FEB\u901F"],"claude-haiku-4-5-20250514":["fast","cheap","simple","\u8F7B\u91CF","\u4F4E\u6210\u672C"],"claude-opus-4-20250514":["reasoning","creative","thorough","\u6DF1\u5EA6\u601D\u8003"],"claude-sonnet-4-20250514":["coding","fast","accurate","\u4EE3\u7801"],"gpt-5.2":["reasoning","coding","thorough","\u6DF1\u5EA6\u63A8\u7406","\u5168\u80FD"],"gpt-5.2-mini":["reasoning","fast","balanced","\u63A8\u7406","\u5FEB\u901F"],"gpt-5.2-codex":["coding","agent","autonomous","\u4EE3\u7801\u4E13\u5BB6","\u81EA\u4E3B\u7F16\u7A0B"],"gpt-5.2-codex-high":["coding","agent","thorough","\u4EE3\u7801","\u6DF1\u5EA6\u7F16\u7A0B","\u6700\u5F3A"],"gpt-5.2-codex-medium":["coding","agent","balanced","\u4EE3\u7801","\u6027\u4EF7\u6BD4"],"gpt-5.1":["reasoning","coding","balanced","\u903B\u8F91\u7F1C\u5BC6","\u901A\u7528"],"gpt-5.1-mini":["fast","cheap","coding","\u5FEB\u901F","\u4F4E\u6210\u672C"],"gpt-5.1-codex":["coding","agent","autonomous","\u4EE3\u7801","\u7F16\u7A0B"],"gpt-5.1-codex-max":["coding","agent","thorough","\u4EE3\u7801","\u6DF1\u5EA6\u7F16\u7A0B"],o3:["reasoning","math","science","\u6DF1\u5EA6\u63A8\u7406","\u6570\u5B66"],"o4-mini":["reasoning","fast","coding","\u63A8\u7406","\u5FEB\u901F"],"gemini-3-pro-preview":["ui","design","vision","creative","UI\u8BBE\u8BA1","\u754C\u9762","\u89C6\u89C9"],"gemini-3.0-pro":["ui","design","vision","creative","UI\u8BBE\u8BA1","\u754C\u9762"],"gemini-3.0-flash":["ui","fast","vision","UI","\u5FEB\u901F"],"gemini-2.5-pro":["reasoning","long-context","vision","\u63A8\u7406","\u957F\u4E0A\u4E0B\u6587"],"gemini-2.5-flash":["fast","vision","multimodal","\u5FEB\u901F","\u591A\u6A21\u6001"],"deepseek-v3":["coding","reasoning","cheap","\u4EE3\u7801","\u6027\u4EF7\u6BD4"],"deepseek-r1":["reasoning","math","thinking","\u6DF1\u5EA6\u63A8\u7406","\u6570\u5B66"],"qwen-max":["chinese","reasoning","coding","\u4E2D\u6587","\u63A8\u7406"],"qwen-turbo":["chinese","fast","cheap","\u4E2D\u6587","\u5FEB\u901F"]},Tm=6,It=class{providerStore;scope;constructor(e,t="assistant"){this.providerStore=e??new rt,this.scope=t;}readLegacyScopedConfig(e){if(this.scope==="assistant"){let t=e.assistant;return {...t??{},workerPool:t?.workerPool??[]}}return {workerPool:[]}}readScopedRunModeConfig(e){return e.runConfig?.modes?.[this.scope]}getConfig(){let e=Le(),t=this.readScopedRunModeConfig(e);return t?{mainAgent:t.mainAgent,workerPool:t.workerPool??[],maxConcurrent:t.maxConcurrent,ccbReviewMode:t.ccbReviewMode,createdAt:t.createdAt,updatedAt:t.updatedAt}:this.readLegacyScopedConfig(e)}saveConfig(e){let t=Le(),s=new Date().toISOString(),n=t.runConfig?.modes?.[this.scope]??{},r={...n,mainAgent:e.mainAgent,workerPool:e.workerPool??[],maxConcurrent:e.maxConcurrent,ccbReviewMode:e.ccbReviewMode,updatedAt:s,createdAt:n.createdAt||s};t.runConfig={...t.runConfig??{},modes:{...t.runConfig?.modes??{},[this.scope]:r}},this.scope==="assistant"&&(t.assistant={...e,updatedAt:s,createdAt:t.assistant?.createdAt||s}),ws(t);}getNetworkRoles(){let e=Le(),t=e.runConfig?.modes?.network?.networkRoles;if(Array.isArray(t))return t;let s=e.assistant?.networkRoles;return Array.isArray(s)?s:[]}setNetworkRoles(e){let t=Le(),s=new Date().toISOString(),n=t.runConfig?.modes?.network??{};t.runConfig={...t.runConfig??{},modes:{...t.runConfig?.modes??{},network:{...n,networkRoles:e,updatedAt:s,createdAt:n.createdAt||s}}},ws(t);}getMainAgent(){let e=this.getConfig();if(e.mainAgent)return e.mainAgent;let t=this.providerStore.getDefaultProvider();if(t)return {providerId:t.id,model:t.lastSelectedModel||t.defaultModel||t.models[0]?.name}}setMainAgent(e){let t=this.getConfig();t.mainAgent=e,this.saveConfig(t);}getSupervisorAgent(){return this.getConfig().supervisorAgent}setSupervisorAgent(e){let t=this.getConfig();t.supervisorAgent=e,this.saveConfig(t);}getWorkerPool(){return this.getConfig().workerPool||[]}getMaxConcurrent(){let e=this.getConfig();return typeof e.maxConcurrent=="number"&&Number.isFinite(e.maxConcurrent)?e.maxConcurrent:void 0}setMaxConcurrent(e){let t=this.getConfig();typeof e=="number"&&Number.isFinite(e)&&e>0?t.maxConcurrent=Math.floor(e):delete t.maxConcurrent,this.saveConfig(t);}getCCBReviewMode(){let t=this.getConfig().ccbReviewMode;return t==="single"?"single-role":t==="multi"?"multi-model":t??"multi-role"}setCCBReviewMode(e){let t=this.getConfig();t.ccbReviewMode=e,this.saveConfig(t);}setWorkerPool(e){let t=this.getConfig();t.workerPool=e,this.saveConfig(t);}addWorkerModel(e,t,s=true){let n=this.getWorkerPool();if(n.some(o=>o.providerId===e&&o.model===t))return;let i=this.getModelTraits(t);n.push({providerId:e,model:t,enabled:s,traits:i}),this.setWorkerPool(n);}removeWorkerModel(e,t){let n=this.getWorkerPool().filter(r=>!(r.providerId===e&&r.model===t));this.setWorkerPool(n);}toggleWorkerModel(e,t){let s=this.getWorkerPool(),n=s.find(r=>r.providerId===e&&r.model===t);n&&(n.enabled=!n.enabled,this.setWorkerPool(s));}getEnabledWorkerModels(){return this.getWorkerPool().filter(e=>e.enabled)}getAvailableModels(){let e=this.providerStore.getProviders(),t=[];for(let s of e)for(let n of s.models){let r=this.getModelTraits(n.name);t.push({providerId:s.id,providerName:s.name,model:n.name,traits:r});}return t}selectWorkerByTraits(e){let t=this.getEnabledWorkerModels();if(t.length===0)return;let s=t.map(n=>{let r=n.traits||[],i=e.filter(o=>r.includes(o)).length;return {entry:n,score:i}});return s.sort((n,r)=>r.score-n.score),s[0]?.entry}getModelTraits(e){if(ec[e])return [...ec[e]];let t=e.toLowerCase();for(let[i,o]of Object.entries(ec))if(t.includes(i.toLowerCase())||i.toLowerCase().includes(t))return [...o];let s=Xi.getModel(e);if(!s)return [];let n=[],r=s.scores||{};return (r.coding??0)>=85&&n.push("coding"),(r.reasoning??0)>=85&&n.push("reasoning"),(r.vision??0)>=80&&n.push("vision"),(r.creativity??0)>=85&&n.push("creative"),(r.speed??0)>=85&&n.push("fast"),(r.cost??0)>=85&&n.push("low-cost"),s.supportsThinking&&n.push("thinking"),s.supportsVision&&n.push("multimodal"),s.maxInputTokens>=5e5&&n.push("long-context"),n}updateWorkerTraits(e,t,s){let n=this.getWorkerPool(),r=n.find(i=>i.providerId===e&&i.model===t);r&&(r.traits=s,this.setWorkerPool(n));}addWorkerTraits(e,t,s){let n=this.getWorkerPool(),r=n.find(i=>i.providerId===e&&i.model===t);if(r){let i=r.traits||[],o=[...new Set([...i,...s])];r.traits=o,this.setWorkerPool(n);}}initializeDefaults(){if(this.getConfig().workerPool.length>0)return;let t=this.providerStore.getDefaultProvider();if(!t)return;let s=t.models.map((n,r)=>({providerId:t.id,model:n.name,enabled:r===0,traits:this.getModelTraits(n.name)}));this.setWorkerPool(s);}};var tc={coordinator:["reasoning","thorough","long-context"],scout:["fast","cheap","low-cost","vision"],worker:["coding","agent","balanced","fast"],compressor:["fast","cheap","reasoning"],verifier:["reasoning","coding","thorough"]};function it(a){return (a||"").trim().toLowerCase()}function dC(a){let e=it(a);return e?/(探索|调研|收集|搜集|scan|explore|research|investigate|find)/i.test(e)?"scout":/(总结|摘要|归纳|压缩|提炼|summarize|compress|distill)/i.test(e)?"compressor":/(校验|验证|检查|核对|verify|validate|check|assert)/i.test(e)?"verifier":/(规划|统筹|拆分|协调|plan|coordinate|orchestrate)/i.test(e)?"coordinator":"worker":"worker"}function pC(a){let e=it(a),t=new Set;return /(ui|前端|界面|视觉|image|vision|design)/i.test(e)&&(t.add("vision"),t.add("creative")),/(代码|实现|修复|重构|coding|implement|fix|refactor)/i.test(e)&&t.add("coding"),/(复杂|架构|推理|analysis|reason|complex)/i.test(e)&&(t.add("reasoning"),t.add("thorough")),/(快速|尽快|cheap|低成本|fast|quick)/i.test(e)&&(t.add("fast"),t.add("cheap")),Array.from(t)}function mC(a){let e=it(a);return e.includes("claude")?"claude":e.includes("gpt")||e==="o3"||e.includes("o4")||e.includes("o1")?"gpt":e.includes("gemini")?"gemini":e.includes("deepseek")?"deepseek":e.includes("qwen")?"qwen":"other"}function gC(a,e){let t=it(e),s=mC(e);if(a==="scout"){if(t.includes("haiku")||t.includes("flash")||t.includes("mini"))return 2;if(s==="gemini")return 1.5;if(s==="claude"||s==="gpt")return 1}if(a==="worker"){if(t.includes("codex"))return 2;if(t.includes("sonnet")||t.includes("opus"))return 1.5;if(s==="deepseek")return 1}if(a==="compressor"){if(t.includes("mini")||t.includes("haiku")||t.includes("flash"))return 2;if(s==="gpt"||s==="claude")return 1}if(a==="verifier"){if(t.includes("opus")||t.includes("sonnet")||t.includes("gpt-5")||t.includes("gpt-4"))return 2;if(s==="claude"||s==="gpt")return 1}if(a==="coordinator"){if(t.includes("opus")||t.includes("gpt-5")||t.includes("sonnet"))return 2;if(s==="claude"||s==="gpt")return 1}return 0}var Ro=class{options;constructor(e){this.options=e;}selectModel(e){let t=e.role??dC(e.task),s=this.options.getEnabledWorkers();if(s.length===0)return {providerId:this.options.defaultProviderId,model:this.options.defaultModel,role:t,confidence:0,reason:"worker_pool_empty_fallback_default",requiredTraits:tc[t]};if(e.explicitWorkerId){let u=this.findByWorkerIdOrModel(e.explicitWorkerId,s);if(u)return {providerId:u.providerId,model:u.model,role:t,confidence:1,reason:`explicit_worker_selected:${e.explicitWorkerId}`,requiredTraits:tc[t]}}let n=new Set(Array.from(e.avoidModels||[]).map(it)),r=s.filter(u=>!n.has(it(u.model))),i=r.length>0?r:s,o=Array.from(new Set([...tc[t],...pC(e.task)])),l=i[0],c=Number.NEGATIVE_INFINITY;for(let u of i){let d=new Set((u.traits||[]).map(it)),p=o.reduce((f,b)=>d.has(it(b))?f+2:f,0),h=gC(t,u.model),g=p+h;g>c&&(c=g,l=u);}return {providerId:l.providerId,model:l.model,role:t,confidence:Math.max(.1,Math.min(1,c/12)),reason:`policy_selected(role=${t},score=${c.toFixed(1)})`,requiredTraits:o}}findByWorkerIdOrModel(e,t){let s=it(e),n=t.find(i=>it(i.providerId)===s);if(n)return n;let r=t.find(i=>it(i.model)===s);return r||t.find(i=>it(i.providerId).includes(s)||it(i.model).includes(s))}};function Ao(a){let e=it(a);if(e&&(e==="coordinator"||e==="scout"||e==="worker"||e==="compressor"||e==="verifier"))return e}var Eo=null;function nc(a){Eo=a,m.debug("ASSISTANT_TOOLS","Context set",{sessionId:a.sessionId});}function Io(){Eo=null;}function rc(){if(!Eo)throw new Error("Assistant tools context not initialized");return Eo}var sc=null;function ic(){return sc||(sc=new It(new rt)),sc}function hC(){let e=ic().getEnabledWorkerModels();return e.length===0?"\uFF08\u6682\u65E0\u53EF\u7528 Worker \u6A21\u578B\uFF09":`\u53EF\u7528 Worker \u6A21\u578B\uFF1A
2072
2072
  ${e.map((s,n)=>{let r=s.traits?.join(", ")||"\u901A\u7528";return ` ${n+1}. [${s.providerId}] ${s.model} - \u7279\u6027: ${r}`}).join(`
2073
2073
  `)}`}function fC(a){let t=ic().getEnabledWorkerModels(),s=t.find(r=>r.providerId===a);if(s||(s=t.find(r=>r.model===a),s))return s;let n=a.toLowerCase();return s=t.find(r=>r.model.toLowerCase().includes(n)||r.providerId.toLowerCase().includes(n)),s}function yC(a){let{task:e,workerId:t,role:s,context:n}=a,r=Ao(s);if(n.selectWorkerModel){let o=n.selectWorkerModel({task:e,role:r,workerId:t});if(o.model)return {model:o.model,providerId:o.providerId,role:o.role??r,reason:o.reason}}if(t){let o=fC(t);if(o)return {model:o.model,providerId:o.providerId,role:r,reason:"manual_worker_id"}}let i=ic().getEnabledWorkerModels();if(i.length>0){let o=i[0];return {model:o.model,providerId:o.providerId,role:r,reason:"fallback_first_enabled_worker"}}return {role:r,reason:"no_worker_available"}}async function bC(a,e,t){let s=Date.now(),n=500;for(;Date.now()-s<t;)if(await new Promise(i=>setTimeout(i,n)),(a.getActiveWorkerCount?.()??0)<e)return true;return false}function vC(){return {name:"spawn_agent",description:`\u521B\u5EFA\u5F02\u6B65\u540E\u53F0\u5B50 agent \u6267\u884C\u4EFB\u52A1\u3002\u5B50 agent \u72EC\u7ACB\u8FD0\u884C\uFF0C\u5B8C\u6210\u540E\u81EA\u52A8\u6C47\u62A5\u7ED3\u679C\u3002
2074
2074
  \u9002\u7528\u4E8E\u8017\u65F6\u8F83\u957F\u3001\u4E0D\u9700\u8981\u7ACB\u5373\u83B7\u53D6\u7ED3\u679C\u7684\u4EFB\u52A1\u3002
@@ -2123,7 +2123,7 @@ ${t}
2123
2123
  2. \u9700\u8981\u52A8\u624B\u5C31 spawn\uFF0C\u4E0D\u8981\u81EA\u5DF1\u7528\u5DE5\u5177
2124
2124
  3. \u72EC\u7ACB\u4EFB\u52A1\u540C\u65F6 spawn \u591A\u4E2A
2125
2125
  4. \u7B80\u6D01\uFF0C\u7B80\u6D01\uFF0C\u7B80\u6D01
2126
- `}function RC(){return {emit:()=>{},subscribe:()=>()=>{},on:()=>()=>{},getHistory:()=>[]}}var Rn=class extends EventEmitter{config;hostService;orchestrator;agentPool;runConfigStore;mainAgentId="main";workerCounter=0;activeDelegateWorkers=new Set;modelPolicyRouter;modelFailureStreak=new Map;lastScoutSuccessAt=0;abortController=null;assistantMainMemory=null;session=null;sessionStarted=false;constructor(e){super(),this.config=e,this.runConfigStore=new It(new rt),this.modelPolicyRouter=new Ro({getEnabledWorkers:()=>this.runConfigStore.getEnabledWorkerModels(),defaultProviderId:this.config.providerId,defaultModel:this.config.modelName}),this.hostService=new Rt({platformServices:e.services}),this.orchestrator=new Et({hostService:this.hostService,resolveProvider:e.resolveProvider});let t=RC();this.agentPool=new $s({eventBus:t,orchestrator:this.orchestrator,resolveProvider:this.config.resolveProvider,providerId:this.config.providerId,modelName:this.config.modelName,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,sharedContext:void 0,hostService:this.hostService,onAgentRuntimeEvent:(s,n,r)=>{this.emit("worker_event",{agentId:s,event:n,tracker:r});},onAgentCompleted:s=>{this.handleSpawnAnnounce(s);}}),m.info("ASSISTANT_RUNTIME","AssistantRuntime initialized (Jarvis mode)");}ensureSession(e){return this.session?this.session:(this.session=new Po({sessionId:e,orchestrator:this.orchestrator,hostService:this.hostService,agentPool:this.agentPool,services:this.config.services,permissionManager:this.config.permissionManager,tools:this.config.tools,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,systemPrompt:this.config.systemPrompt||"",buildAssistantInstructions:()=>_C(),buildWorkerInstructions:(t,s,n)=>this.buildWorkerInstructions(t,s,n),selectWorkerModel:t=>this.selectWorkerModelByPolicy(t),maxConcurrent:this.getMaxConcurrentWorkers(),actionLog:this.config.actionLog}),this.session.on("runtime_event",t=>{this.emit("worker_event",t);}),this.session.on("worker_start",t=>this.emit("worker_start",t)),this.session.on("turn_start",t=>{this.emit("worker_start",{agentId:"Main",task:t.prompt,model:this.config.modelName});}),this.session.on("turn_complete",t=>{this.emit("worker_complete",{agentId:"Main",success:true,summary:t.output});}),this.session.on("status_change",t=>{this.emit("session_status",t);}),this.sessionStarted||(this.sessionStarted=true,this.session.start().catch(t=>{m.error("ASSISTANT_RUNTIME",`Session loop crashed: ${t.message}`);})),this.session)}async chat(e){let{sessionId:t,prompt:s}=e,n=this.ensureSession(t);this.emit("worker_start",{agentId:"Main",task:s.substring(0,100),model:this.config.modelName});try{return await n.injectMessage(s,{channel:"cli"})}catch(r){throw this.emit("worker_complete",{agentId:"Main",success:false,error:r.message}),r}}injectMessage(e,t,s){this.ensureSession(e).injectMessage(t,s).catch(r=>{m.error("ASSISTANT_RUNTIME",`Inject message failed: ${r.message}`);});}getSessionStatus(){return this.session?.getStatus()??"idle"}isBusy(){let e=this.getSessionStatus();return e==="thinking"||e==="tool_executing"}abort(){this.session&&(this.session.abort(),this.session=null,this.sessionStarted=false),this.agentPool.abortAll(),this.hostService.clearAll(),Ct(),m.info("ASSISTANT_RUNTIME","Aborted");}getModeName(){return "assistant"}handleSpawnAnnounce(e){if(!this.session)return;let t=e.output||e.error||"(no output)";if(t.length<=500){this.emit("worker_result",{agentId:e.agentId,success:e.success,output:t,direct:true}),m.info("ANNOUNCE",`Direct SSE push for ${e.agentId} (${t.length} chars)`);return}let n={agentId:e.agentId,status:e.success?"ok":"error",output:t,summaryLine:e.success?"Task completed":`Error: ${e.error}`};this.session.injectAnnounce(n),m.info("ANNOUNCE",`Routed announce from ${e.agentId} \u2192 session`,{status:n.status});}selectWorkerModelByPolicy(e){let t=Ao(e.role)??"worker";if(e.explicitModel)return {providerId:e.explicitProviderId??this.resolveProviderForModel(e.explicitModel)??this.config.providerId,model:e.explicitModel,role:t,reason:"explicit_model_requested"};let s=new Set(Array.from(this.modelFailureStreak.entries()).filter(([,r])=>r>=2).map(([r])=>r.toLowerCase())),n=this.modelPolicyRouter.selectModel({task:e.task,role:t,explicitWorkerId:e.workerId,avoidModels:s});return {providerId:n.providerId??this.config.providerId,model:n.model??this.config.modelName,role:n.role,reason:n.reason}}buildWorkerInstructions(e,t,s){let n="";s&&(n=`
2126
+ `}function RC(){return {emit:()=>{},subscribe:()=>()=>{},on:()=>()=>{},getHistory:()=>[]}}var Rn=class extends EventEmitter{config;hostService;orchestrator;agentPool;runConfigStore;mainAgentId="main";workerCounter=0;activeDelegateWorkers=new Set;modelPolicyRouter;modelFailureStreak=new Map;lastScoutSuccessAt=0;abortController=null;assistantMainMemory=null;session=null;sessionStarted=false;constructor(e){super(),this.config=e,this.runConfigStore=new It(new rt),this.modelPolicyRouter=new Ro({getEnabledWorkers:()=>this.runConfigStore.getEnabledWorkerModels(),defaultProviderId:this.config.providerId,defaultModel:this.config.modelName}),this.hostService=new Rt({platformServices:e.services}),this.orchestrator=new Et({hostService:this.hostService,resolveProvider:e.resolveProvider});let t=RC();this.agentPool=new Fs({eventBus:t,orchestrator:this.orchestrator,resolveProvider:this.config.resolveProvider,providerId:this.config.providerId,modelName:this.config.modelName,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,sharedContext:void 0,hostService:this.hostService,onAgentRuntimeEvent:(s,n,r)=>{this.emit("worker_event",{agentId:s,event:n,tracker:r});},onAgentCompleted:s=>{this.handleSpawnAnnounce(s);}}),m.info("ASSISTANT_RUNTIME","AssistantRuntime initialized (Jarvis mode)");}ensureSession(e){return this.session?this.session:(this.session=new Po({sessionId:e,orchestrator:this.orchestrator,hostService:this.hostService,agentPool:this.agentPool,services:this.config.services,permissionManager:this.config.permissionManager,tools:this.config.tools,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,systemPrompt:this.config.systemPrompt||"",buildAssistantInstructions:()=>_C(),buildWorkerInstructions:(t,s,n)=>this.buildWorkerInstructions(t,s,n),selectWorkerModel:t=>this.selectWorkerModelByPolicy(t),maxConcurrent:this.getMaxConcurrentWorkers(),actionLog:this.config.actionLog}),this.session.on("runtime_event",t=>{this.emit("worker_event",t);}),this.session.on("worker_start",t=>this.emit("worker_start",t)),this.session.on("turn_start",t=>{this.emit("worker_start",{agentId:"Main",task:t.prompt,model:this.config.modelName});}),this.session.on("turn_complete",t=>{this.emit("worker_complete",{agentId:"Main",success:true,summary:t.output});}),this.session.on("status_change",t=>{this.emit("session_status",t);}),this.sessionStarted||(this.sessionStarted=true,this.session.start().catch(t=>{m.error("ASSISTANT_RUNTIME",`Session loop crashed: ${t.message}`);})),this.session)}async chat(e){let{sessionId:t,prompt:s}=e,n=this.ensureSession(t);this.emit("worker_start",{agentId:"Main",task:s.substring(0,100),model:this.config.modelName});try{return await n.injectMessage(s,{channel:"cli"})}catch(r){throw this.emit("worker_complete",{agentId:"Main",success:false,error:r.message}),r}}injectMessage(e,t,s){this.ensureSession(e).injectMessage(t,s).catch(r=>{m.error("ASSISTANT_RUNTIME",`Inject message failed: ${r.message}`);});}getSessionStatus(){return this.session?.getStatus()??"idle"}isBusy(){let e=this.getSessionStatus();return e==="thinking"||e==="tool_executing"}abort(){this.session&&(this.session.abort(),this.session=null,this.sessionStarted=false),this.agentPool.abortAll(),this.hostService.clearAll(),Ct(),m.info("ASSISTANT_RUNTIME","Aborted");}getModeName(){return "assistant"}handleSpawnAnnounce(e){if(!this.session)return;let t=e.output||e.error||"(no output)";if(t.length<=500){this.emit("worker_result",{agentId:e.agentId,success:e.success,output:t,direct:true}),m.info("ANNOUNCE",`Direct SSE push for ${e.agentId} (${t.length} chars)`);return}let n={agentId:e.agentId,status:e.success?"ok":"error",output:t,summaryLine:e.success?"Task completed":`Error: ${e.error}`};this.session.injectAnnounce(n),m.info("ANNOUNCE",`Routed announce from ${e.agentId} \u2192 session`,{status:n.status});}selectWorkerModelByPolicy(e){let t=Ao(e.role)??"worker";if(e.explicitModel)return {providerId:e.explicitProviderId??this.resolveProviderForModel(e.explicitModel)??this.config.providerId,model:e.explicitModel,role:t,reason:"explicit_model_requested"};let s=new Set(Array.from(this.modelFailureStreak.entries()).filter(([,r])=>r>=2).map(([r])=>r.toLowerCase())),n=this.modelPolicyRouter.selectModel({task:e.task,role:t,explicitWorkerId:e.workerId,avoidModels:s});return {providerId:n.providerId??this.config.providerId,model:n.model??this.config.modelName,role:n.role,reason:n.reason}}buildWorkerInstructions(e,t,s){let n="";s&&(n=`
2127
2127
 
2128
2128
  ## \u5BF9\u8BDD\u80CC\u666F
2129
2129
  ${s}`);let r=`\u4F60\u662F\u4E00\u4E2A\u81EA\u4E3B\u6267\u884C\u4EFB\u52A1\u7684 Agent\u3002\u4F60\u7684\u5DE5\u4F5C\u76EE\u5F55\u662F: ${this.config.workDir}
@@ -2725,7 +2725,7 @@ ${r}`).join(`
2725
2725
  3. \u7F16\u5199\u4F7F\u7528\u8BF4\u660E\u548C\u793A\u4F8B
2726
2726
  4. \u7EF4\u62A4 README \u548C\u53D8\u66F4\u65E5\u5FD7
2727
2727
 
2728
- \u8BF7\u8F93\u51FA\u89C4\u8303\u7684\u6587\u6863\u5185\u5BB9\u3002`,capabilities:["documentation","writing"],inputSchema:{type:"object",properties:{code:{type:"string",description:"\u9700\u8981\u6587\u6863\u5316\u7684\u4EE3\u7801"},type:{type:"string",enum:["api","readme","changelog","guide"]}},required:["code"]},outputSchema:{type:"object",properties:{content:{type:"string",description:"\u6587\u6863\u5185\u5BB9"},format:{type:"string",enum:["markdown","html","text"]}},required:["content"]},preferredModel:"haiku"},En=[Dm,Om,Lm,Nm,$m,Fm,jm];var ms=class{config;hostService;orchestrator;sharedContext;eventBus;agentPool;taskAnalyzer;routeHandler;ccbOrchestrator;dagPlanner;dagExecutor;abortController=null;isAborted=false;currentCCBHandlers=null;interruptedState=null;constructor(e){this.config=e,this.hostService=new Rt({platformServices:e.services}),this.orchestrator=new Et({hostService:this.hostService,resolveProvider:e.resolveProvider}),this.sharedContext=new Tn;let t=new Nr;this.eventBus=t,this.agentPool=new $s({eventBus:t,orchestrator:this.orchestrator,resolveProvider:e.resolveProvider,providerId:e.providerId,modelName:e.modelName,permissionManager:e.permissionManager,tools:e.tools,memory:e.memory,workDir:e.workDir,sharedContext:this.sharedContext});let s=this.createLLMCallPure(),n=this.createLLMCallAgent(),r=this.createLLMCallCCB();this.taskAnalyzer=uc({llmCall:s}),this.routeHandler=pc(),this.ccbOrchestrator=gc({llmCall:r,workerModels:e.workerModels,defaultModel:e.modelName,workDir:e.workDir}),this.dagPlanner=vc({llmCall:s}),this.dagExecutor=xc({llmCall:n,config:{maxConcurrency:e.maxConcurrency??5,nodeTimeout:e.nodeTimeout??3e5,allowPartialFailure:e.allowPartialFailure??true,retryCount:2,retryDelay:1e3}}),m.info("PIPELINE","CooperateRuntime initialized (Five-Layer Architecture)");}createLLMCallCCB(){let e=new Set(["search_files","search","list_directory","show_tree","git_status","git_diff","smart_read"]),t=this.config.tools.filter(s=>e.has(s.name));return async(s,n,r)=>{let i=`ccb-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,o;typeof r=="string"?o=r:r&&typeof r=="object"&&(o=r.model);let{providerId:l,modelName:c}=this.resolveModel(o);m.info("PIPELINE","LLM call (CCB mode with read-only tools)",{sessionId:i,model:o,providerId:l,modelName:c,toolCount:t.length,tools:t.map(p=>p.name)});let u=this.currentCCBHandlers,d=await this.orchestrator.runSession({sessionId:i,prompt:n,providerId:l,modelName:c,buildHostConfig:(p,h)=>({sessionId:i,configKey:"ccb_agent",provider:p,llmConfig:h,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:s,systemPrompt:s,agentName:"CCBAgent",agentDescription:"CCB review agent with read-only tools",permissionManager:this.config.permissionManager,tools:t,memory:this.config.memory,disableSystemPrompt:false,agentConfig:{maxIterations:15,temperature:.3,mode:"auto"}}),onRuntimeEvent:p=>{let h=s.match(/的(\S+评审[专官家]*)/),g=h?h[1]:"CCB Agent",f="ccb-unknown";if(g.includes("\u67B6\u6784")?f="ccb-architect":g.includes("\u5B9E\u73B0")?f="ccb-implementer":g.includes("\u521B\u65B0")&&(f="ccb-innovator"),m.debug("CCB_EVENT",`CCB onRuntimeEvent: type=${p.type}, agentId=${f}, hasHandlers=${!!u}, hasOnCCBAgentText=${!!u?.onCCBAgentText}`),p.type==="text"&&u?.onCCBAgentText){let b=p.delta||"";m.debug("CCB_EVENT",`CCB text event: delta="${b.substring(0,20)}...", agentId=${f}`),b&&u.onCCBAgentText(f,g,b);}if(p.type==="text_complete"&&u?.onCCBAgentTextComplete&&u.onCCBAgentTextComplete(f,g),p.type==="tool_call_start"&&u?.onCCBToolCall){let b=p.name||"unknown",y=p.args||{};u.onCCBToolCall(f,g,b,y);}if(p.type==="tool_call_end"&&u?.onCCBToolResult){let b=p.name||"unknown",y=p.output||p.summary||"",w=!p.success,C=p.args||{};u.onCCBToolResult(f,g,b,y,w,C);}if(p.type==="token_usage"&&u?.onTokenUsage){let b=p;u.onTokenUsage({agentId:`ccb-${i}`,agentLabel:`CCB ${g}`,role:"ccb_reviewer",model:c,input:b.sessionPromptTokens,output:b.sessionCompletionTokens,contextWindow:2e5,tokensUsedForContext:b.sessionPromptTokens+b.sessionCompletionTokens,cacheCreationTokens:b.anthropicCacheCreationTokens,cacheReadTokens:b.anthropicCacheReadTokens});}}});return m.debug("PIPELINE","CCB call completed",{sessionId:i,outputLength:d.summary.output?.length||0,iterations:d.summary.iterations,toolCalls:d.summary.toolCalls}),d.summary.output??""}}createLLMCallPure(){return async(e,t,s)=>{let n=`llm-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,r;typeof s=="string"?r=s:s&&typeof s=="object"&&(r=s.model);let{providerId:i,modelName:o}=this.resolveModel(r);m.info("PIPELINE","LLM call (pure text mode)",{sessionId:n,model:r,providerId:i,modelName:o});let l=await this.orchestrator.runSession({sessionId:n,prompt:t,providerId:i,modelName:o,buildHostConfig:(c,u)=>({sessionId:n,configKey:"llm_call",provider:c,llmConfig:u,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:e,systemPrompt:e,agentName:"LLMCall",agentDescription:"LLM call adapter for task analysis",permissionManager:this.config.permissionManager,tools:[],memory:this.config.memory,disableSystemPrompt:true,agentConfig:{maxIterations:1,temperature:.3,mode:"ask"}})});return m.debug("PIPELINE","LLM call completed",{sessionId:n,outputLength:l.summary.output?.length||0,outputPreview:l.summary.output?.substring(0,100)||"(empty)"}),l.summary.output??""}}createLLMCallAgent(){return async(e,t,s)=>{let n=`agent-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,r,i,o,l,c;typeof s=="string"?r=s:s&&typeof s=="object"&&(r=s.model,i=s.onText,o=s.nodeId,l=s.onRuntimeEvent,c=s.previousToolCalls);let{providerId:u,modelName:d}=this.resolveModel(r),p=c&&c.length>0;m.info("PIPELINE","LLM call (agent mode)",{sessionId:n,model:r,providerId:u,modelName:d,nodeId:o,previousToolCallCount:c?.length??0});let h;if(p){h=new at(500);for(let f of c)h.add({role:"assistant",content:"",tool_calls:[{id:f.toolId,type:"function",function:{name:f.toolName,arguments:JSON.stringify(f.args)}}]}),h.add({role:"user",content:[{type:"tool_result",tool_use_id:f.toolId,content:f.result}]});h.add({role:"user",content:`\u3010\u7CFB\u7EDF\u63D0\u793A\u3011\u8FD9\u662F\u4E00\u4E2A\u91CD\u8BD5\u8BF7\u6C42\u3002\u4E0A\u9762\u7684 ${c.length} \u4E2A\u5DE5\u5177\u8C03\u7528\u662F\u4F60\u5728\u4E4B\u524D\u7684\u5C1D\u8BD5\u4E2D\u5DF2\u7ECF\u6210\u529F\u5B8C\u6210\u7684\u64CD\u4F5C\u3002\u8BF7\u4ECE\u4E2D\u65AD\u7684\u5730\u65B9\u7EE7\u7EED\uFF0C\u4E0D\u8981\u91CD\u590D\u6267\u884C\u5DF2\u5B8C\u6210\u7684\u5DE5\u5177\u8C03\u7528\u3002
2728
+ \u8BF7\u8F93\u51FA\u89C4\u8303\u7684\u6587\u6863\u5185\u5BB9\u3002`,capabilities:["documentation","writing"],inputSchema:{type:"object",properties:{code:{type:"string",description:"\u9700\u8981\u6587\u6863\u5316\u7684\u4EE3\u7801"},type:{type:"string",enum:["api","readme","changelog","guide"]}},required:["code"]},outputSchema:{type:"object",properties:{content:{type:"string",description:"\u6587\u6863\u5185\u5BB9"},format:{type:"string",enum:["markdown","html","text"]}},required:["content"]},preferredModel:"haiku"},En=[Dm,Om,Lm,Nm,$m,Fm,jm];var ms=class{config;hostService;orchestrator;sharedContext;eventBus;agentPool;taskAnalyzer;routeHandler;ccbOrchestrator;dagPlanner;dagExecutor;abortController=null;isAborted=false;currentCCBHandlers=null;interruptedState=null;constructor(e){this.config=e,this.hostService=new Rt({platformServices:e.services}),this.orchestrator=new Et({hostService:this.hostService,resolveProvider:e.resolveProvider}),this.sharedContext=new Tn;let t=new Nr;this.eventBus=t,this.agentPool=new Fs({eventBus:t,orchestrator:this.orchestrator,resolveProvider:e.resolveProvider,providerId:e.providerId,modelName:e.modelName,permissionManager:e.permissionManager,tools:e.tools,memory:e.memory,workDir:e.workDir,sharedContext:this.sharedContext});let s=this.createLLMCallPure(),n=this.createLLMCallAgent(),r=this.createLLMCallCCB();this.taskAnalyzer=uc({llmCall:s}),this.routeHandler=pc(),this.ccbOrchestrator=gc({llmCall:r,workerModels:e.workerModels,defaultModel:e.modelName,workDir:e.workDir}),this.dagPlanner=vc({llmCall:s}),this.dagExecutor=xc({llmCall:n,config:{maxConcurrency:e.maxConcurrency??5,nodeTimeout:e.nodeTimeout??3e5,allowPartialFailure:e.allowPartialFailure??true,retryCount:2,retryDelay:1e3}}),m.info("PIPELINE","CooperateRuntime initialized (Five-Layer Architecture)");}createLLMCallCCB(){let e=new Set(["search_files","search","list_directory","show_tree","git_status","git_diff","smart_read"]),t=this.config.tools.filter(s=>e.has(s.name));return async(s,n,r)=>{let i=`ccb-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,o;typeof r=="string"?o=r:r&&typeof r=="object"&&(o=r.model);let{providerId:l,modelName:c}=this.resolveModel(o);m.info("PIPELINE","LLM call (CCB mode with read-only tools)",{sessionId:i,model:o,providerId:l,modelName:c,toolCount:t.length,tools:t.map(p=>p.name)});let u=this.currentCCBHandlers,d=await this.orchestrator.runSession({sessionId:i,prompt:n,providerId:l,modelName:c,buildHostConfig:(p,h)=>({sessionId:i,configKey:"ccb_agent",provider:p,llmConfig:h,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:s,systemPrompt:s,agentName:"CCBAgent",agentDescription:"CCB review agent with read-only tools",permissionManager:this.config.permissionManager,tools:t,memory:this.config.memory,disableSystemPrompt:false,agentConfig:{maxIterations:15,temperature:.3,mode:"auto"}}),onRuntimeEvent:p=>{let h=s.match(/的(\S+评审[专官家]*)/),g=h?h[1]:"CCB Agent",f="ccb-unknown";if(g.includes("\u67B6\u6784")?f="ccb-architect":g.includes("\u5B9E\u73B0")?f="ccb-implementer":g.includes("\u521B\u65B0")&&(f="ccb-innovator"),m.debug("CCB_EVENT",`CCB onRuntimeEvent: type=${p.type}, agentId=${f}, hasHandlers=${!!u}, hasOnCCBAgentText=${!!u?.onCCBAgentText}`),p.type==="text"&&u?.onCCBAgentText){let b=p.delta||"";m.debug("CCB_EVENT",`CCB text event: delta="${b.substring(0,20)}...", agentId=${f}`),b&&u.onCCBAgentText(f,g,b);}if(p.type==="text_complete"&&u?.onCCBAgentTextComplete&&u.onCCBAgentTextComplete(f,g),p.type==="tool_call_start"&&u?.onCCBToolCall){let b=p.name||"unknown",y=p.args||{};u.onCCBToolCall(f,g,b,y);}if(p.type==="tool_call_end"&&u?.onCCBToolResult){let b=p.name||"unknown",y=p.output||p.summary||"",w=!p.success,C=p.args||{};u.onCCBToolResult(f,g,b,y,w,C);}if(p.type==="token_usage"&&u?.onTokenUsage){let b=p;u.onTokenUsage({agentId:`ccb-${i}`,agentLabel:`CCB ${g}`,role:"ccb_reviewer",model:c,input:b.sessionPromptTokens,output:b.sessionCompletionTokens,contextWindow:2e5,tokensUsedForContext:b.sessionPromptTokens+b.sessionCompletionTokens,cacheCreationTokens:b.anthropicCacheCreationTokens,cacheReadTokens:b.anthropicCacheReadTokens});}}});return m.debug("PIPELINE","CCB call completed",{sessionId:i,outputLength:d.summary.output?.length||0,iterations:d.summary.iterations,toolCalls:d.summary.toolCalls}),d.summary.output??""}}createLLMCallPure(){return async(e,t,s)=>{let n=`llm-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,r;typeof s=="string"?r=s:s&&typeof s=="object"&&(r=s.model);let{providerId:i,modelName:o}=this.resolveModel(r);m.info("PIPELINE","LLM call (pure text mode)",{sessionId:n,model:r,providerId:i,modelName:o});let l=await this.orchestrator.runSession({sessionId:n,prompt:t,providerId:i,modelName:o,buildHostConfig:(c,u)=>({sessionId:n,configKey:"llm_call",provider:c,llmConfig:u,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:e,systemPrompt:e,agentName:"LLMCall",agentDescription:"LLM call adapter for task analysis",permissionManager:this.config.permissionManager,tools:[],memory:this.config.memory,disableSystemPrompt:true,agentConfig:{maxIterations:1,temperature:.3,mode:"ask"}})});return m.debug("PIPELINE","LLM call completed",{sessionId:n,outputLength:l.summary.output?.length||0,outputPreview:l.summary.output?.substring(0,100)||"(empty)"}),l.summary.output??""}}createLLMCallAgent(){return async(e,t,s)=>{let n=`agent-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,r,i,o,l,c;typeof s=="string"?r=s:s&&typeof s=="object"&&(r=s.model,i=s.onText,o=s.nodeId,l=s.onRuntimeEvent,c=s.previousToolCalls);let{providerId:u,modelName:d}=this.resolveModel(r),p=c&&c.length>0;m.info("PIPELINE","LLM call (agent mode)",{sessionId:n,model:r,providerId:u,modelName:d,nodeId:o,previousToolCallCount:c?.length??0});let h;if(p){h=new at(500);for(let f of c)h.add({role:"assistant",content:"",tool_calls:[{id:f.toolId,type:"function",function:{name:f.toolName,arguments:JSON.stringify(f.args)}}]}),h.add({role:"user",content:[{type:"tool_result",tool_use_id:f.toolId,content:f.result}]});h.add({role:"user",content:`\u3010\u7CFB\u7EDF\u63D0\u793A\u3011\u8FD9\u662F\u4E00\u4E2A\u91CD\u8BD5\u8BF7\u6C42\u3002\u4E0A\u9762\u7684 ${c.length} \u4E2A\u5DE5\u5177\u8C03\u7528\u662F\u4F60\u5728\u4E4B\u524D\u7684\u5C1D\u8BD5\u4E2D\u5DF2\u7ECF\u6210\u529F\u5B8C\u6210\u7684\u64CD\u4F5C\u3002\u8BF7\u4ECE\u4E2D\u65AD\u7684\u5730\u65B9\u7EE7\u7EED\uFF0C\u4E0D\u8981\u91CD\u590D\u6267\u884C\u5DF2\u5B8C\u6210\u7684\u5DE5\u5177\u8C03\u7528\u3002
2729
2729
 
2730
2730
  \u73B0\u5728\u7EE7\u7EED\u6267\u884C\u4EFB\u52A1\uFF1A
2731
2731
  ${t}`}),m.debug("PIPELINE","Prefilled memory with previous tool calls",{sessionId:n,toolCallCount:c.length,memorySize:h.getMessagesForLLM().length});}let g=await this.orchestrator.runSession({sessionId:n,prompt:t,providerId:u,modelName:d,buildHostConfig:(f,b)=>({sessionId:n,configKey:"dag_agent",provider:f,llmConfig:b,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:e,systemPrompt:e,agentName:"DAGAgent",agentDescription:"DAG node execution agent",permissionManager:this.config.permissionManager,tools:this.config.tools,memory:h??this.config.memory,disableSystemPrompt:false,agentConfig:{maxIterations:50,temperature:.3,mode:"auto"}}),onRuntimeEvent:f=>{let b=f;if(f.type==="text"&&i&&b.delta&&i(b.delta),l){let y={...f,nodeId:o};y.toolName===void 0&&b.name&&(y.toolName=b.name),y.toolArgs===void 0&&b.args&&(y.toolArgs=b.args),y.output===void 0&&(b.output!==void 0||b.summary!==void 0)&&(y.output=b.output??b.summary),y.success===void 0&&b.success!==void 0&&(y.success=b.success),y.isError===void 0&&b.success!==void 0&&(y.isError=b.success===false),l(y);}}});return m.debug("PIPELINE","Agent call completed",{sessionId:n,outputLength:g.summary.output?.length||0,iterations:g.summary.iterations,toolCalls:g.summary.toolCalls,hadPreviousToolCalls:p}),g.summary.output??""}}resolveModel(e){if(!e)return {providerId:this.config.providerId,modelName:this.config.modelName};let t={opus:{providerId:"anthropic",modelName:"claude-3-opus-20240229"},"claude-opus":{providerId:"anthropic",modelName:"claude-3-opus-20240229"},sonnet:{providerId:"anthropic",modelName:"claude-3-5-sonnet-20241022"},"claude-sonnet":{providerId:"anthropic",modelName:"claude-3-5-sonnet-20241022"},haiku:{providerId:"anthropic",modelName:"claude-3-haiku-20240307"},"claude-haiku":{providerId:"anthropic",modelName:"claude-3-haiku-20240307"},gemini:{providerId:"google",modelName:"gemini-1.5-pro"},"gemini-pro":{providerId:"google",modelName:"gemini-1.5-pro"},"gemini-flash":{providerId:"google",modelName:"gemini-1.5-flash"},gpt4:{providerId:"openai",modelName:"gpt-4-turbo"},"gpt-4":{providerId:"openai",modelName:"gpt-4-turbo"},gpt4o:{providerId:"openai",modelName:"gpt-4o"},"gpt-4o":{providerId:"openai",modelName:"gpt-4o"}},s=e.toLowerCase();if(t[s])return t[s];if(e.includes(":")){let[n,r]=e.split(":",2);return {providerId:n,modelName:r}}return m.warn("PIPELINE",`Unknown model alias: ${e}, using default provider with custom model`),{providerId:this.config.providerId,modelName:e}}getModelForNode(e){if(e)return this.config.modelName}async chat(e,t){let{sessionId:s,prompt:n}=e;this.isAborted=false,this.abortController=new AbortController,Ws();try{m.info("PIPELINE","Chat started",{sessionId:s,promptLength:n.length}),this.checkAborted(),t?.onThinking?.("\u6B63\u5728\u5206\u6790\u4EFB\u52A1\u590D\u6742\u5EA6...");let r=await this.taskAnalyzer.analyze(n);this.checkAborted(),t?.onAnalysis?.(r),m.info("PIPELINE","Task analyzed",{intent:r.intent.summary,complexityScore:r.complexity.score,complexity:r.complexity});let i=this.routeHandler.handle(r),o=dc(i.path);switch(t?.onRouting?.(i.path,i.metadata.reason),m.info("PIPELINE","Routing decided",{path:i.path,reason:i.metadata.reason}),this.checkAborted(),i.path){case "simple":return await this.executeSimplePath(s,n,t);case "standard":return await this.executeStandardPath(s,n,r,t);case "complex":return await this.executeComplexPath(s,n,r,t);default:return await this.executeSimplePath(s,n,t)}}catch(r){if(this.isAborted||r instanceof Error&&r.message==="Pipeline aborted")return m.info("PIPELINE","Chat aborted by user"),t?.onError?.(new Error("\u4EFB\u52A1\u5DF2\u88AB\u7528\u6237\u4E2D\u65AD")),"\u4EFB\u52A1\u5DF2\u88AB\u7528\u6237\u4E2D\u65AD";let i=r instanceof Error?r:new Error(String(r));throw t?.onError?.(i),m.error("PIPELINE","Chat failed",{error:i.message}),i}finally{Ct(),this.abortController=null;}}checkAborted(){if(this.isAborted)throw new Error("Pipeline aborted")}setupCCBEventHandler(e){this.currentCCBHandlers=e||null,this.ccbOrchestrator.setEventHandler(t=>{if(t.type==="ccb_agent_review"&&e?.onCCBAgentReview){let{agentId:s,agentName:n,perspective:r,model:i,verdict:o,analysis:l,risks:c,suggestions:u}=t.data;s&&n&&r&&o&&l&&e.onCCBAgentReview({agentId:s,agentName:n,perspective:r,model:i,verdict:o,analysis:l,risks:c||[],suggestions:u||[]});}if(t.type==="ccb_agent_retry"&&e?.onCCBAgentRetry){let{agentId:s,agentName:n,perspective:r,model:i,retryCount:o,maxRetries:l,error:c}=t.data;s&&n&&e.onCCBAgentRetry({agentId:s,agentName:n||"",perspective:r||"",model:i,retryCount:o||0,maxRetries:l||2,error:c||"\u672A\u77E5\u9519\u8BEF"});}if(t.type==="ccb_agent_failed"&&e?.onCCBAgentFailed){let{agentId:s,agentName:n,perspective:r,model:i,retryCount:o,maxRetries:l,error:c}=t.data;s&&n&&e.onCCBAgentFailed({agentId:s,agentName:n||"",perspective:r||"",model:i,retryCount:o||0,maxRetries:l||2,error:c||"\u672A\u77E5\u9519\u8BEF"});}m.debug("PIPELINE",`CCB event: ${t.type}`,t.data);});}async executeSimplePath(e,t,s){this.checkAborted(),s?.onThinking?.("\u76F4\u63A5\u6267\u884C\u4EFB\u52A1...");let n=await this.orchestrator.runSession({sessionId:e,prompt:t,providerId:this.config.providerId,modelName:this.config.modelName,abortSignal:this.abortController?.signal,buildHostConfig:(i,o)=>({sessionId:e,configKey:"simple_path",provider:i,llmConfig:o,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:this.config.systemPrompt??"Execute the task directly",systemPrompt:this.config.systemPrompt,agentName:"SimpleAgent",agentDescription:"Simple path execution agent",permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,agentConfig:{maxIterations:100,temperature:.3,mode:"auto"}}),onRuntimeEvent:i=>{s?.onRuntimeEvent?.(i),i.type==="text"&&s?.onText?.(i.delta);}});this.checkAborted();let r=n.summary.output??"Task completed";return s?.onComplete?.(r),m.info("PIPELINE","Simple path completed",{sessionId:e}),r}async executeStandardPath(e,t,s,n){this.checkAborted(),n?.onThinking?.("\u6536\u96C6\u9879\u76EE\u4E0A\u4E0B\u6587...");let{codebaseContext:r,sessionSummary:i}=await this.collectCCBContext(t),o=this.config.ccbReviewMode??"multi-role";this.setupCCBEventHandler(n);let l={userRequest:t,taskAnalysis:{intent:s.intent.summary,complexity:s.complexity.score,domains:s.intent.domain},codebaseContext:r,sessionSummary:i},c;switch(o){case "single-role":n?.onThinking?.("\u6267\u884C\u5FEB\u901F\u8BC4\u5BA1..."),c=await this.ccbOrchestrator.quickReview(l);break;case "multi-model":n?.onThinking?.("\u6267\u884C\u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1..."),c=await this.ccbOrchestrator.review(l);break;default:n?.onThinking?.("\u6267\u884C\u591A\u89D2\u8272\u8BC4\u5BA1..."),c=await this.ccbOrchestrator.multiRoleReview(l);break}this.checkAborted(),n?.onCCBReview?.(c),m.info("PIPELINE",`CCB review completed (${o} mode)`,{approved:c.approved,confidence:c.confidence,reviewCount:c.reviews.length}),this.checkAborted(),n?.onThinking?.("\u89C4\u5212\u6267\u884C\u56FE...");let u=await this.dagPlanner.plan({userRequest:t,ccbSummary:{approved:c.approved,recommendedApproach:c.summary.recommendedApproach||"\u76F4\u63A5\u6267\u884C",risks:c.summary.risks.map(d=>d.description),estimatedEffort:{timeRange:"1-2\u5C0F\u65F6",complexity:this.getComplexityLabel(s.complexity.score),parallelism:Math.min(s.complexity.dimensions.interdependency+2,5)}},availableRoles:En.map(d=>({name:d.name,capabilities:d.capabilities,description:d.description}))});return this.checkAborted(),n?.onDAGPlanned?.(u),m.info("PIPELINE","DAG planned",{nodeCount:u.nodes.size,levels:u.analysis.levels.length,maxParallelism:u.analysis.maxParallelism}),await this.executeDAG(e,u,t,n)}async executeComplexPath(e,t,s,n){this.checkAborted(),n?.onThinking?.("\u6536\u96C6\u9879\u76EE\u4E0A\u4E0B\u6587...");let{codebaseContext:r,sessionSummary:i}=await this.collectCCBContext(t),o=this.config.ccbReviewMode??"multi-role";this.setupCCBEventHandler(n);let l={userRequest:t,taskAnalysis:{intent:s.intent.summary,complexity:s.complexity.score,domains:s.intent.domain},codebaseContext:r,sessionSummary:i},c;switch(o){case "single-role":n?.onThinking?.("\u6267\u884C\u5FEB\u901F\u8BC4\u5BA1..."),c=await this.ccbOrchestrator.quickReview(l);break;case "multi-model":n?.onThinking?.("\u6267\u884C\u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1..."),c=await this.ccbOrchestrator.review(l);break;default:n?.onThinking?.("\u6267\u884C\u591A\u89D2\u8272\u8BC4\u5BA1..."),c=await this.ccbOrchestrator.multiRoleReview(l);break}if(this.checkAborted(),n?.onCCBReview?.(c),m.info("PIPELINE",`CCB review completed (${o} mode)`,{approved:c.approved,confidence:c.confidence,reviewCount:c.reviews.length}),!c.approved){let d=c.summary.risks.map(p=>p.description).join("; ");return n?.onComplete?.(`\u8BC4\u5BA1\u672A\u901A\u8FC7: ${d}`),`\u4EFB\u52A1\u672A\u901A\u8FC7 CCB \u8BC4\u5BA1\u3002\u539F\u56E0: ${d}`}this.checkAborted(),n?.onThinking?.("\u89C4\u5212\u590D\u6742\u6267\u884C\u56FE...");let u=await this.dagPlanner.plan({userRequest:t,ccbSummary:{approved:c.approved,recommendedApproach:c.summary.recommendedApproach||"\u5206\u9636\u6BB5\u6267\u884C",risks:c.summary.risks.map(d=>d.description),estimatedEffort:{timeRange:"4-8\u5C0F\u65F6",complexity:"high",parallelism:Math.min(s.complexity.dimensions.interdependency+3,8)}},availableRoles:En.map(d=>({name:d.name,capabilities:d.capabilities,description:d.description}))});return this.checkAborted(),n?.onDAGPlanned?.(u),m.info("PIPELINE","Complex DAG planned",{nodeCount:u.nodes.size,levels:u.analysis.levels.length,criticalPath:u.analysis.criticalPath}),await this.executeDAG(e,u,t,n)}async executeDAG(e,t,s,n){this.checkAborted(),this.interruptedState={sessionId:e,prompt:s,dag:t,handlers:n},n?.onThinking?.(`\u5F00\u59CB\u6267\u884C ${t.nodes.size} \u4E2A\u4EFB\u52A1\u8282\u70B9...`);let r=this.dagExecutor.onEvent,i=this.dagExecutor.onText,o=this.dagExecutor.onRuntimeEvent;this.dagExecutor.onEvent=l=>{this.isAborted||(r?.(l),this.handleExecutionEvent(l,t,n));},this.dagExecutor.onText=(l,c)=>{if(this.isAborted)return;let d=t.nodes.get(l)?.task.role;n?.onAgentText?.(l,c,d);},this.dagExecutor.onRuntimeEvent=(l,c)=>{if(this.isAborted)return;let u=t.nodes.get(l),d=u?.task.role,p=this.getModelForNode(u);if(c.type==="tool_call_start"&&n?.onNodeToolCall&&n.onNodeToolCall(l,c.toolName||c.name||"",c.toolArgs||c.args||{},d,p),c.type==="tool_call_end"&&n?.onNodeToolResult){let h=c.isError===true||c.success===false,g=c.toolArgs||c.args||{};n.onNodeToolResult(l,c.toolName||c.name||"",c.output||c.summary||"",h,g,d,p);}c.type==="token_usage"&&n?.onTokenUsage&&n.onTokenUsage({agentId:`dag-${l}`,agentLabel:d||l,role:d||"dag_executor",model:p,input:c.sessionPromptTokens||0,output:c.sessionCompletionTokens||0,contextWindow:2e5,tokensUsedForContext:(c.sessionPromptTokens||0)+(c.sessionCompletionTokens||0),cacheCreationTokens:c.anthropicCacheCreationTokens,cacheReadTokens:c.anthropicCacheReadTokens}),n?.onRuntimeEvent&&n.onRuntimeEvent({...c,nodeId:l});};try{let l=await this.dagExecutor.execute(t,s);this.checkAborted(),this.interruptedState=null;let c=this.formatExecutionSummary(l);return n?.onComplete?.(c),m.info("PIPELINE","DAG execution completed",{sessionId:e,success:l.success,completedNodes:l.completedNodes,failedNodes:l.failedNodes,duration:l.totalDuration}),l.finalOutput}finally{this.dagExecutor.onEvent=r,this.dagExecutor.onText=i,this.dagExecutor.onRuntimeEvent=o;}}handleExecutionEvent(e,t,s){switch(e.type){case "level_start":s?.onProgress?.({level:e.data.level??0,totalLevels:t.analysis.levels.length,completed:t.state.completedNodes.length,total:t.nodes.size});break;case "level_complete":s?.onProgress?.({level:(e.data.level??0)+1,totalLevels:t.analysis.levels.length,completed:t.state.completedNodes.length,total:t.nodes.size});break;case "node_start":if(e.data.nodeId){let n=t.nodes.get(e.data.nodeId);if(n){let r=this.config.modelName,i={level:e.data.level??0,totalLevels:t.analysis.levels.length,completed:t.state.completedNodes.length,total:t.nodes.size};s?.onNodeStart?.(e.data.nodeId,n.task.role,n.task.description,r,i);}}break;case "node_complete":if(e.data.nodeId){let n=t.nodes.get(e.data.nodeId);if(n){let r=this.config.modelName,i={level:e.data.level??0,totalLevels:t.analysis.levels.length,completed:t.state.completedNodes.length,total:t.nodes.size};s?.onNodeComplete?.(e.data.nodeId,n.task.role,e.data.result?.output??"",r,i);}}break;case "node_failed":if(e.data.nodeId){let n=t.nodes.get(e.data.nodeId);if(n){let r=this.config.modelName,i={level:e.data.level??0,totalLevels:t.analysis.levels.length,completed:t.state.completedNodes.length,total:t.nodes.size};s?.onNodeFail?.(e.data.nodeId,n.task.role,e.data.error??"\u672A\u77E5\u9519\u8BEF",r,i);}}break;case "node_retry":if(e.data.nodeId){let n=t.nodes.get(e.data.nodeId);if(n){let r=this.config.modelName;s?.onNodeRetry?.({nodeId:e.data.nodeId,role:e.data.role||n.task.role,retryCount:e.data.retryCount||1,maxRetries:(e.data.maxRetries||this.config.nodeTimeout,2),error:e.data.error||"\u672A\u77E5\u9519\u8BEF",model:r}),s?.onThinking?.(`\u{1F504} [${n.task.role}] \u91CD\u8BD5\u4E2D (\u7B2C ${e.data.retryCount} \u6B21)...`);}}break}}getComplexityLabel(e){return e<=3?"low":e<=6?"medium":"high"}formatExecutionSummary(e){let t=[];return t.push(e.success?"\u2705 \u6267\u884C\u6210\u529F":"\u274C \u6267\u884C\u5931\u8D25"),t.push(`\u5B8C\u6210: ${e.completedNodes}/${e.completedNodes+e.failedNodes}`),e.failedNodes>0&&t.push(`\u5931\u8D25: ${e.failedNodes}`),t.push(`\u8017\u65F6: ${(e.totalDuration/1e3).toFixed(1)}s`),t.join(" | ")}async collectCCBContext(e){try{let s=await new jo({workDir:this.config.workDir,maxFiles:5,maxContentLength:3e3}).collect(e),n=Pm(s),r,i=this.config.memory.getMessagesForLLM();if(i.length>0){let o=i.slice(-10),l=[];for(let c of o)if(c.role==="user"){let u=typeof c.content=="string"?c.content:Array.isArray(c.content)?c.content.map(d=>d.text||"").join(" "):"";if(u&&u.length>0){let d=u.length>100?u.substring(0,100)+"...":u;l.push(`- \u7528\u6237: ${d}`);}}else if(c.role==="assistant"){let u=typeof c.content=="string"?c.content:"";if(u&&u.length>0){let d=u.length>100?u.substring(0,100)+"...":u;l.push(`- \u52A9\u624B: ${d}`);}}l.length>0&&(r=`\u6700\u8FD1 ${l.length} \u6761\u5BF9\u8BDD:
@@ -3359,7 +3359,7 @@ ${t}
3359
3359
  ## \u8F93\u51FA\u8981\u6C42
3360
3360
  - \u63D0\u4F9B\u6E05\u6670\u3001\u53EF\u6267\u884C\u7684\u89E3\u51B3\u65B9\u6848
3361
3361
  - \u89E3\u91CA\u5173\u952E\u51B3\u7B56\u7684\u7406\u7531
3362
- - \u6807\u6CE8\u6F5C\u5728\u98CE\u9669\u548C\u6539\u8FDB\u70B9`}subscribeExistingAgents(){for(let e of this.registry.getAll())this.subscribeAgent(e.id);}subscribeAgent(e){if(this.agentSubscriptions.has(e))return;let t=this.registry.getInstance(e);if(!t)return;let s=this.messageBus.subscribeForAgent(e,async n=>{if(n.type!=="task_broadcast")return;let r=n.payload;if(!(Date.now()>r.bidDeadline))try{let i=await t.evaluateTask(r);i.participate&&i.bid&&await this.messageBus.publishBid(i.bid);}catch(i){m.warn("NETWORK","Agent bid failed",{agentId:e,error:i instanceof Error?i.message:String(i)});}});this.agentSubscriptions.set(e,s);}unsubscribeAgent(e){let t=this.agentSubscriptions.get(e);t&&(t(),this.agentSubscriptions.delete(e));}clearAgentSubscriptions(){for(let e of this.agentSubscriptions.values())e();this.agentSubscriptions.clear();}async handleReplanRequired(e){let t=(e.trigger.reason+" "+(e.trigger.error||"")).toLowerCase();if(e.trigger.type==="timeout"||t.includes("timeout")||t.includes("timed out")||t.includes("format")||t.includes("schema")||t.includes("invalid")){let n=e.trigger.error||e.trigger.reason;this.markInterruptedState(e.dagId,n),this.dagExecutor.pause(e.dagId),m.warn("NETWORK","Paused DAG for manual resume due to unstable failure",{dagId:e.dagId,reason:n});return}try{let n=await this.replanningEngine.handleTrigger(e.dagId,e.trigger,{failedNodes:e.failedNodes,completedNodes:e.completedNodes});if(n.success){this.refreshDataFlow(e.dagId);return}let r=n.reason||e.trigger.reason;this.markInterruptedState(e.dagId,r),this.dagExecutor.pause(e.dagId),m.warn("NETWORK","Paused DAG because replan failed",{dagId:e.dagId,reason:r});}catch(n){let r=n instanceof Error?n.message:String(n);this.markInterruptedState(e.dagId,r),this.dagExecutor.pause(e.dagId),m.warn("NETWORK","Replan handling failed, DAG paused",{dagId:e.dagId,error:r});}}refreshDataFlow(e){let t=this.dagBuilder.getDAG(e);t&&this.rgpsDataFlowManager.inferFromDAG(t);}setupEventListeners(){this.registry.on("agent_registered",e=>{this.subscribeAgent(e.agentId);}),this.registry.on("agent_unregistered",e=>{this.unsubscribeAgent(e.agentId);}),this.dagExecutor.on("node_started",e=>{this.emitEvent({type:"node_started",dagId:e.dagId,nodeId:e.nodeId,agentId:e.agentId});}),this.dagExecutor.on("node_completed",e=>{this.emitEvent({type:"node_completed",dagId:e.dagId,nodeId:e.nodeId,output:e.output});}),this.dagExecutor.on("node_failed",e=>{this.emitEvent({type:"node_failed",dagId:e.dagId,nodeId:e.nodeId,error:e.error});}),this.dagExecutor.on("replan_required",e=>{this.handleReplanRequired(e);}),this.replanningEngine.on("replan_started",e=>{this.emitEvent({type:"replan_triggered",dagId:e.dagId,reason:e.trigger.reason});}),this.replanningEngine.on("replan_completed",e=>{this.emitEvent({type:"replan_completed",dagId:e.dagId,newVersion:e.newVersion}),this.refreshDataFlow(e.dagId);}),this.biddingEngine.on("bid_received",e=>{this.emitEvent({type:"bid_received",bid:e});}),this.progressiveManager.on("dag_expanded",e=>{this.refreshDataFlow(e.dagId);}),this.progressiveManager.on("user_requirement_inserted",e=>{this.refreshDataFlow(e.dagId);});}emitEvent(e){this.emit(e.type,e),this.emit("network_event",e);}registerAgent(e){return this.registry.register(e)}unregisterAgent(e){return this.registry.unregister(e)}getAgents(){return this.registry.getAll()}getActiveAgents(){return this.registry.getActive()}getAgentFactory(){return this.agentFactory}getRegistry(){return this.registry}getMessageBus(){return this.messageBus}getModelCapabilityRegistry(){return this.modelCapabilityRegistry}getDAGScheduler(){return this.dagScheduler}isStarted(){return this.started}async resume(e){if(!this.interruptedState)throw new Error("\u6CA1\u6709\u53EF\u6062\u590D\u7684\u4E2D\u65AD\u4EFB\u52A1");let t=this.interruptedState,s=this.dagBuilder.getDAG(t.dagId);if(!s)throw this.interruptedState=null,new Error("\u4E2D\u65AD\u4EFB\u52A1\u5BF9\u5E94\u7684 DAG \u5DF2\u4E0D\u5B58\u5728");this.started||this.start(),this.aborted=false,this.abortController=new AbortController,this.executing=true,this.currentExecutingAgentId=null,this.currentDagId=s.id,this.currentPrompt=t.prompt,this.pendingUserMessages=[];let n=e||t.handlers;this.interruptedState={...t,handlers:n,interruptedAt:Date.now()};let r=this.computeDAGLevels(s),i=[];for(let[o,l]of s.nodes)i.push({id:o,description:l.task?.description||o,agentId:l.assignedAgent||"unassigned",level:l.level,dependencies:l.dependencies||[]});n?.onThinking?.("\u6062\u590D\u6267\u884C\u4E2D..."),n?.onDAGCreated?.({id:s.id,nodeCount:s.nodes.size,levelCount:r.length,maxParallelism:Math.max(...r.map(o=>o.length),1),criticalPath:s.analysis.criticalPath,estimatedTime:s.analysis.estimatedTotalTime,nodes:i}),this.updateProgress(s,n);try{return await this.executeDagAndFinalize(s,{startTime:Date.now(),selectedAgentIds:t.selectedAgentIds,negotiation:t.negotiation,negotiationRounds:t.negotiationRounds,negotiationSummary:t.negotiationSummary},n)}finally{this.executing=false,this.currentExecutingAgentId=null,this.currentDagId=null,this.currentPrompt=null;}}getModeName(){return "network"}abort(){m.info("NETWORK","Aborting network runtime"),this.aborted=true,this.currentDagId&&(this.markInterruptedState(this.currentDagId,"Task aborted by user"),this.dagExecutor.pause(this.currentDagId)),this.abortController&&(this.abortController.abort(),this.abortController=null),m.info("NETWORK","Aborted (state preserved for resume)",{dagId:this.currentDagId});}isAborted(){return this.aborted}};W();W();W();W();var Yo=class{config;constructor(e){this.config=e;}create(e){switch(m.info("MODE_FACTORY",`Creating runtime for mode: ${e}`),e){case "single":return this.createSingleAgent();case "assistant":return this.createAssistantAgent();case "cooperate":return this.createCooperateAgent();case "network":return this.createNetworkAgent();default:return m.warn("MODE_FACTORY",`Unknown mode: ${e}, falling back to single`),this.createSingleAgent()}}createSingleAgent(){return new kn({services:this.config.services,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,systemPrompt:this.config.systemPrompt})}createAssistantAgent(){return new Rn({services:this.config.services,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,systemPrompt:this.config.systemPrompt})}createCooperateAgent(){return new ms({services:this.config.services,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,systemPrompt:this.config.systemPrompt,ccbReviewMode:this.config.ccbReviewMode,workerModels:this.config.workerModels})}createNetworkAgent(){let e=this.config.orchestrator?{orchestrator:this.config.orchestrator,tools:this.config.tools,permissionManager:this.config.permissionManager,memory:this.config.memory,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,maxIterations:30}:void 0;return new In({llmCall:this.createLLMCall(),executionCapability:e,autoCreateDefaultAgents:true})}createLLMCall(){let{orchestrator:e}=this.config;return async(t,s)=>{if(!e)throw new Error("Orchestrator not available for LLM call");let n="",r=`network-llm-${Date.now()}`;return await e.runSession({sessionId:r,prompt:s,buildHostConfig:(i,o)=>({sessionId:r,configKey:"network_llm_call",provider:i,llmConfig:o,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:t,systemPrompt:t,agentName:"NetworkLLM",agentDescription:"Network mode LLM caller",permissionManager:this.config.permissionManager,tools:[],memory:this.config.memory,agentConfig:{maxIterations:1,temperature:.3},sessionEnabled:false,disableSystemPrompt:true}),onRuntimeEvent:i=>{i.type==="text"&&(n+=i.delta);}}),n}}static getDefaultMode(){return "single"}static isValidMode(e){return ["single","assistant","cooperate","network"].includes(e)}static getAvailableModes(){return ["single","assistant","cooperate","network"]}static getModeDescription(e){switch(e){case "single":return "\u5355\u673A\u6A21\u5F0F - \u65E5\u5E38\u5F00\u53D1\uFF0C\u5FEB\u901F\u8FED\u4EE3";case "assistant":return "\u52A9\u7406\u6A21\u5F0F - AI \u52A9\u7406\uFF0C\u8F7B\u91CF supervisor + spawn";case "cooperate":return "\u534F\u540C\u6A21\u5F0F - \u9759\u6001 DAG + CCB \u8BC4\u5BA1\u6D41\u7A0B";case "network":return "\u81EA\u7EC4\u7F51\u6A21\u5F0F - Agent \u81EA\u4E3B\u7EC4\u7F51\uFF0C\u52A8\u6001\u534F\u5546 (\u5F00\u53D1\u4E2D)";default:return ""}}};function bS(){throw new Error("Approval prompt is not configured");}async function og(a){let{toolName:e,args:t,reason:s,allowRemember:n}=a,r=bS(),i=Object.keys(t).length>0?` (${Object.keys(t).slice(0,2).join(", ")}${Object.keys(t).length>2?"...":""})`:"",o=`Allow tool ${e}${i}?`,l=s?`Warning: ${s}`:void 0,c=[{label:"Allow Once",value:"allow_once",description:"Allow this tool call only this time"}];switch(n&&c.push({label:"Always Allow",value:"always_allow",description:`Don't ask again for "${e}"`}),c.push({label:"Deny",value:"deny",description:"Reject this tool call"}),await r(o,c,"allow_once",l)){case "allow_once":return {approved:true,remember:false};case "always_allow":return {approved:true,remember:true};case "deny":return {approved:false,remember:false};default:return {approved:false,remember:false}}}function ag(a="auto"){let e=a==="dangerous",t=a==="manual",s=new ls({approvalHandler:e?void 0:og,defaultPermission:e?"allow":t?"ask":"allow",memoryExpirationMs:1440*60*1e3});return e||Pl(s),s}W();var wS=se__default.join(bs,"workspaces"),CS=200,SS=20,kS=50,xS=40,TS=4e3,zc=8,_S=240,RS=8,AS=256*1024,Hc=6,jr=240,lg=512*1024,ES=1500,IS=15e3,MS=6,PS=30,DS="claude-haiku";function OS(a){return a.toLowerCase().replace(/[^a-z0-9-_]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,24)||"workspace"}function LS(a){let e=se__default.resolve(a),t=OS(se__default.basename(e)),s=Vt.createHash("sha1").update(e).digest("hex").slice(0,12);return `${t}-${s}`}function NS(a){return new Date(a).toISOString().slice(0,10)}function Br(a){let e=new Date(a),t=s=>String(s).padStart(2,"0");return [e.getFullYear(),t(e.getMonth()+1),t(e.getDate())].join("-")+` ${t(e.getHours())}:${t(e.getMinutes())}`}function ot(a,e){return a?a.length<=e?a:a.slice(0,e).trimEnd()+"...":""}var Gr=class{options;workspacePath=null;workspaceId=null;workspaceName=null;eventsDir=null;memoriesDir=null;memoryPaths=null;graphPaths=null;indexPath=null;summaryPath=null;sessionSummaryPath=null;metaPath=null;seq=0;currentDate=null;currentFile=null;currentFileBytes=0;queue=[];sessionSummaryQueue=[];memoryQueue=[];graphNodeQueue=[];graphEdgeQueue=[];summarizerOverrides;summarizerQueue=[];summarizerTimer=null;summarizerRunning=false;summarizerLastRun=0;summarizerProvider=null;summarizerProviderModel=null;summaryItems=[];summaryDirty=false;runAggregates=new Map;flushTimer=null;isFlushing=false;flushPending=false;ready=false;initPromise=null;createdAt=Date.now();constructor(e={}){this.options={flushIntervalMs:e.flushIntervalMs??CS,batchSize:e.batchSize??SS,indexStride:e.indexStride??kS,summaryWindow:e.summaryWindow??xS,maxSummaryChars:e.maxSummaryChars??TS,source:e.source,agentName:e.agentName},this.summarizerOverrides=e.summarizer,e.workspacePath&&this.setWorkspace(e.workspacePath);}async setWorkspace(e){let t=se__default.resolve(e);if(this.workspacePath===t)return;await this.flush(),this.workspacePath=t,this.workspaceName=se__default.basename(t),this.workspaceId=LS(t);let s=se__default.join(wS,this.workspaceId);this.eventsDir=se__default.join(s,"events"),this.memoriesDir=se__default.join(s,"memories"),this.memoryPaths={progress:se__default.join(this.memoriesDir,"progress.jsonl"),standard:se__default.join(this.memoriesDir,"standards.jsonl"),lesson:se__default.join(this.memoriesDir,"lessons.jsonl"),pinned:se__default.join(this.memoriesDir,"pinned.jsonl")},this.graphPaths={nodes:se__default.join(this.memoriesDir,"graph_nodes.jsonl"),edges:se__default.join(this.memoriesDir,"graph_edges.jsonl")},this.indexPath=se__default.join(this.eventsDir,"index.jsonl"),this.summaryPath=se__default.join(this.eventsDir,"recent_summary.json"),this.sessionSummaryPath=this.memoriesDir?se__default.join(this.memoriesDir,"session_summary.jsonl"):null,this.metaPath=se__default.join(this.eventsDir,"meta.json"),this.currentDate=null,this.currentFile=null,this.currentFileBytes=0,this.sessionSummaryQueue=[],this.memoryQueue=[],this.graphNodeQueue=[],this.graphEdgeQueue=[],this.summarizerQueue=[],this.summarizerProvider=null,this.summarizerProviderModel=null,this.runAggregates.clear(),this.ready=false,this.initPromise=this.initializeWorkspace(),await this.initPromise;}formatFilePath(e){if(!this.workspacePath)return e;let t=se__default.relative(this.workspacePath,e);return !t||t.startsWith("..")?e:t}record(e){if(!this.workspacePath||!this.workspaceId)return;let t={schemaVersion:1,id:Vt.randomUUID(),seq:++this.seq,ts:e.ts??Date.now(),workspaceId:this.workspaceId,workspacePath:this.workspacePath,type:e.type,sessionId:e.sessionId,runId:e.runId,actor:e.actor,summary:e.summary,reason:e.reason,files:e.files,data:e.data};this.queue.push(t),this.updateSummary(t),this.updateRunAggregate(t),this.maybeQueueSessionSummary(t),this.queueMemoryEntries(this.extractMemoryEntries(t),"event"),this.queueGraphEntries(this.extractGraphEntries(t));let s=t.type==="run_result"||t.type==="run_error";(this.queue.length>=this.options.batchSize||s)&&this.flush();}createRunId(){return Vt.randomUUID()}async getContextSummary(e){await this.ensureReady(),this.summaryItems.length===0&&await this.loadSummarySnapshot();let t=e?.language??"zh",s=e?.maxItems??this.options.summaryWindow,n=e?.maxSessionItems??zc,r=e?.maxMemoryItems??Hc,i=e?.maxChars??this.options.maxSummaryChars,o=e?.query?.trim(),l=t==="zh"?{memoryHeader:"## \u9879\u76EE\u8BB0\u5FC6\uFF08\u81EA\u52A8\uFF09",pinned:"### \u56FA\u5B9A",progress:"### \u8FDB\u5EA6",standard:"### \u89C4\u8303",lesson:"### \u6559\u8BAD",sessionHeader:"## \u4F1A\u8BDD\u6458\u8981",activityHeader:"## \u6700\u8FD1\u5DE5\u4F5C\u6458\u8981"}:{memoryHeader:"## Project Memory (Auto)",pinned:"### Pinned",progress:"### Progress",standard:"### Standards",lesson:"### Lessons",sessionHeader:"## Session Summary",activityHeader:"## Recent Workspace Activity"},c=null;if(o){let I=this.tokenizeQuery(o);c={tokens:I,graphMatches:await this.getGraphRunMatches(I)};}let u=o&&c?await this.getRelevantSessionSummaries(o,n,c):await this.getRecentSessionSummaries(n),d=o&&c?await this.getRelevantMemoryItems(o,r,c):{pinned:await this.getRecentMemoryItems("pinned",r),progress:await this.getRecentMemoryItems("progress",r),standard:await this.getRecentMemoryItems("standard",r),lesson:await this.getRecentMemoryItems("lesson",r)},p=d.pinned,h=d.progress,g=d.standard,f=d.lesson,b=this.summaryItems.slice(-s),y=I=>I.map(A=>`- [${Br(A.ts)}] ${A.summary}`),w=y(u),C=y(p),S=y(h),T=y(g),_=y(f),M=y(b),F=[{key:"pinned",title:l.pinned,lines:C},{key:"progress",title:l.progress,lines:S},{key:"standard",title:l.standard,lines:T},{key:"lesson",title:l.lesson,lines:_}],x={key:"activity",title:l.activityHeader,lines:M},R={key:"session",title:l.sessionHeader,lines:w};if(F.every(I=>I.lines.length===0)&&w.length===0&&M.length===0)return null;let j=()=>{let I=[],A=F.filter(L=>L.lines.length>0).map(L=>`${L.title}
3362
+ - \u6807\u6CE8\u6F5C\u5728\u98CE\u9669\u548C\u6539\u8FDB\u70B9`}subscribeExistingAgents(){for(let e of this.registry.getAll())this.subscribeAgent(e.id);}subscribeAgent(e){if(this.agentSubscriptions.has(e))return;let t=this.registry.getInstance(e);if(!t)return;let s=this.messageBus.subscribeForAgent(e,async n=>{if(n.type!=="task_broadcast")return;let r=n.payload;if(!(Date.now()>r.bidDeadline))try{let i=await t.evaluateTask(r);i.participate&&i.bid&&await this.messageBus.publishBid(i.bid);}catch(i){m.warn("NETWORK","Agent bid failed",{agentId:e,error:i instanceof Error?i.message:String(i)});}});this.agentSubscriptions.set(e,s);}unsubscribeAgent(e){let t=this.agentSubscriptions.get(e);t&&(t(),this.agentSubscriptions.delete(e));}clearAgentSubscriptions(){for(let e of this.agentSubscriptions.values())e();this.agentSubscriptions.clear();}async handleReplanRequired(e){let t=(e.trigger.reason+" "+(e.trigger.error||"")).toLowerCase();if(e.trigger.type==="timeout"||t.includes("timeout")||t.includes("timed out")||t.includes("format")||t.includes("schema")||t.includes("invalid")){let n=e.trigger.error||e.trigger.reason;this.markInterruptedState(e.dagId,n),this.dagExecutor.pause(e.dagId),m.warn("NETWORK","Paused DAG for manual resume due to unstable failure",{dagId:e.dagId,reason:n});return}try{let n=await this.replanningEngine.handleTrigger(e.dagId,e.trigger,{failedNodes:e.failedNodes,completedNodes:e.completedNodes});if(n.success){this.refreshDataFlow(e.dagId);return}let r=n.reason||e.trigger.reason;this.markInterruptedState(e.dagId,r),this.dagExecutor.pause(e.dagId),m.warn("NETWORK","Paused DAG because replan failed",{dagId:e.dagId,reason:r});}catch(n){let r=n instanceof Error?n.message:String(n);this.markInterruptedState(e.dagId,r),this.dagExecutor.pause(e.dagId),m.warn("NETWORK","Replan handling failed, DAG paused",{dagId:e.dagId,error:r});}}refreshDataFlow(e){let t=this.dagBuilder.getDAG(e);t&&this.rgpsDataFlowManager.inferFromDAG(t);}setupEventListeners(){this.registry.on("agent_registered",e=>{this.subscribeAgent(e.agentId);}),this.registry.on("agent_unregistered",e=>{this.unsubscribeAgent(e.agentId);}),this.dagExecutor.on("node_started",e=>{this.emitEvent({type:"node_started",dagId:e.dagId,nodeId:e.nodeId,agentId:e.agentId});}),this.dagExecutor.on("node_completed",e=>{this.emitEvent({type:"node_completed",dagId:e.dagId,nodeId:e.nodeId,output:e.output});}),this.dagExecutor.on("node_failed",e=>{this.emitEvent({type:"node_failed",dagId:e.dagId,nodeId:e.nodeId,error:e.error});}),this.dagExecutor.on("replan_required",e=>{this.handleReplanRequired(e);}),this.replanningEngine.on("replan_started",e=>{this.emitEvent({type:"replan_triggered",dagId:e.dagId,reason:e.trigger.reason});}),this.replanningEngine.on("replan_completed",e=>{this.emitEvent({type:"replan_completed",dagId:e.dagId,newVersion:e.newVersion}),this.refreshDataFlow(e.dagId);}),this.biddingEngine.on("bid_received",e=>{this.emitEvent({type:"bid_received",bid:e});}),this.progressiveManager.on("dag_expanded",e=>{this.refreshDataFlow(e.dagId);}),this.progressiveManager.on("user_requirement_inserted",e=>{this.refreshDataFlow(e.dagId);});}emitEvent(e){this.emit(e.type,e),this.emit("network_event",e);}registerAgent(e){return this.registry.register(e)}unregisterAgent(e){return this.registry.unregister(e)}getAgents(){return this.registry.getAll()}getActiveAgents(){return this.registry.getActive()}getAgentFactory(){return this.agentFactory}getRegistry(){return this.registry}getMessageBus(){return this.messageBus}getModelCapabilityRegistry(){return this.modelCapabilityRegistry}getDAGScheduler(){return this.dagScheduler}isStarted(){return this.started}async resume(e){if(!this.interruptedState)throw new Error("\u6CA1\u6709\u53EF\u6062\u590D\u7684\u4E2D\u65AD\u4EFB\u52A1");let t=this.interruptedState,s=this.dagBuilder.getDAG(t.dagId);if(!s)throw this.interruptedState=null,new Error("\u4E2D\u65AD\u4EFB\u52A1\u5BF9\u5E94\u7684 DAG \u5DF2\u4E0D\u5B58\u5728");this.started||this.start(),this.aborted=false,this.abortController=new AbortController,this.executing=true,this.currentExecutingAgentId=null,this.currentDagId=s.id,this.currentPrompt=t.prompt,this.pendingUserMessages=[];let n=e||t.handlers;this.interruptedState={...t,handlers:n,interruptedAt:Date.now()};let r=this.computeDAGLevels(s),i=[];for(let[o,l]of s.nodes)i.push({id:o,description:l.task?.description||o,agentId:l.assignedAgent||"unassigned",level:l.level,dependencies:l.dependencies||[]});n?.onThinking?.("\u6062\u590D\u6267\u884C\u4E2D..."),n?.onDAGCreated?.({id:s.id,nodeCount:s.nodes.size,levelCount:r.length,maxParallelism:Math.max(...r.map(o=>o.length),1),criticalPath:s.analysis.criticalPath,estimatedTime:s.analysis.estimatedTotalTime,nodes:i}),this.updateProgress(s,n);try{return await this.executeDagAndFinalize(s,{startTime:Date.now(),selectedAgentIds:t.selectedAgentIds,negotiation:t.negotiation,negotiationRounds:t.negotiationRounds,negotiationSummary:t.negotiationSummary},n)}finally{this.executing=false,this.currentExecutingAgentId=null,this.currentDagId=null,this.currentPrompt=null;}}getModeName(){return "network"}abort(){m.info("NETWORK","Aborting network runtime"),this.aborted=true,this.currentDagId&&(this.markInterruptedState(this.currentDagId,"Task aborted by user"),this.dagExecutor.pause(this.currentDagId)),this.abortController&&(this.abortController.abort(),this.abortController=null),m.info("NETWORK","Aborted (state preserved for resume)",{dagId:this.currentDagId});}isAborted(){return this.aborted}};W();W();W();W();var Yo=class{config;constructor(e){this.config=e;}create(e){switch(m.info("MODE_FACTORY",`Creating runtime for mode: ${e}`),e){case "single":return this.createSingleAgent();case "assistant":return this.createAssistantAgent();case "cooperate":return this.createCooperateAgent();case "network":return this.createNetworkAgent();default:return m.warn("MODE_FACTORY",`Unknown mode: ${e}, falling back to single`),this.createSingleAgent()}}createSingleAgent(){return new kn({services:this.config.services,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,systemPrompt:this.config.systemPrompt})}createAssistantAgent(){return new Rn({services:this.config.services,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,systemPrompt:this.config.systemPrompt})}createCooperateAgent(){return new ms({services:this.config.services,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,systemPrompt:this.config.systemPrompt,ccbReviewMode:this.config.ccbReviewMode,workerModels:this.config.workerModels})}createNetworkAgent(){let e=this.config.orchestrator?{orchestrator:this.config.orchestrator,tools:this.config.tools,permissionManager:this.config.permissionManager,memory:this.config.memory,workDir:this.config.workDir,providerId:this.config.providerId,modelName:this.config.modelName,resolveProvider:this.config.resolveProvider,maxIterations:30}:void 0;return new In({llmCall:this.createLLMCall(),executionCapability:e,autoCreateDefaultAgents:true})}createLLMCall(){let{orchestrator:e}=this.config;return async(t,s)=>{if(!e)throw new Error("Orchestrator not available for LLM call");let n="",r=`network-llm-${Date.now()}`;return await e.runSession({sessionId:r,prompt:s,buildHostConfig:(i,o)=>({sessionId:r,configKey:"network_llm_call",provider:i,llmConfig:o,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:t,systemPrompt:t,agentName:"NetworkLLM",agentDescription:"Network mode LLM caller",permissionManager:this.config.permissionManager,tools:[],memory:this.config.memory,agentConfig:{maxIterations:1,temperature:.3},sessionEnabled:false,disableSystemPrompt:true}),onRuntimeEvent:i=>{i.type==="text"&&(n+=i.delta);}}),n}}static getDefaultMode(){return "single"}static isValidMode(e){return ["single","assistant","cooperate","network"].includes(e)}static getAvailableModes(){return ["single","assistant","cooperate","network"]}static getModeDescription(e){switch(e){case "single":return "\u5355\u673A\u6A21\u5F0F - \u65E5\u5E38\u5F00\u53D1\uFF0C\u5FEB\u901F\u8FED\u4EE3";case "assistant":return "\u52A9\u7406\u6A21\u5F0F - AI \u52A9\u7406\uFF0C\u8F7B\u91CF supervisor + spawn";case "cooperate":return "\u534F\u540C\u6A21\u5F0F - \u9759\u6001 DAG + CCB \u8BC4\u5BA1\u6D41\u7A0B";case "network":return "\u81EA\u7EC4\u7F51\u6A21\u5F0F - Agent \u81EA\u4E3B\u7EC4\u7F51\uFF0C\u52A8\u6001\u534F\u5546 (\u5F00\u53D1\u4E2D)";default:return ""}}};function bS(){throw new Error("Approval prompt is not configured");}async function og(a){let{toolName:e,args:t,reason:s,allowRemember:n}=a,r=bS(),i=Object.keys(t).length>0?` (${Object.keys(t).slice(0,2).join(", ")}${Object.keys(t).length>2?"...":""})`:"",o=`Allow tool ${e}${i}?`,l=s?`Warning: ${s}`:void 0,c=[{label:"Allow Once",value:"allow_once",description:"Allow this tool call only this time"}];switch(n&&c.push({label:"Always Allow",value:"always_allow",description:`Don't ask again for "${e}"`}),c.push({label:"Deny",value:"deny",description:"Reject this tool call"}),await r(o,c,"allow_once",l)){case "allow_once":return {approved:true,remember:false};case "always_allow":return {approved:true,remember:true};case "deny":return {approved:false,remember:false};default:return {approved:false,remember:false}}}function ag(a="auto"){let e=a==="dangerous",t=a==="manual",s=new ls({approvalHandler:e?void 0:og,defaultPermission:e?"allow":t?"ask":"allow",memoryExpirationMs:1440*60*1e3});return e||Pl(s),s}W();var wS=se__default.join(vs,"workspaces"),CS=200,SS=20,kS=50,xS=40,TS=4e3,zc=8,_S=240,RS=8,AS=256*1024,Hc=6,jr=240,lg=512*1024,ES=1500,IS=15e3,MS=6,PS=30,DS="claude-haiku";function OS(a){return a.toLowerCase().replace(/[^a-z0-9-_]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,24)||"workspace"}function LS(a){let e=se__default.resolve(a),t=OS(se__default.basename(e)),s=Vt.createHash("sha1").update(e).digest("hex").slice(0,12);return `${t}-${s}`}function NS(a){return new Date(a).toISOString().slice(0,10)}function Br(a){let e=new Date(a),t=s=>String(s).padStart(2,"0");return [e.getFullYear(),t(e.getMonth()+1),t(e.getDate())].join("-")+` ${t(e.getHours())}:${t(e.getMinutes())}`}function ot(a,e){return a?a.length<=e?a:a.slice(0,e).trimEnd()+"...":""}var Gr=class{options;workspacePath=null;workspaceId=null;workspaceName=null;eventsDir=null;memoriesDir=null;memoryPaths=null;graphPaths=null;indexPath=null;summaryPath=null;sessionSummaryPath=null;metaPath=null;seq=0;currentDate=null;currentFile=null;currentFileBytes=0;queue=[];sessionSummaryQueue=[];memoryQueue=[];graphNodeQueue=[];graphEdgeQueue=[];summarizerOverrides;summarizerQueue=[];summarizerTimer=null;summarizerRunning=false;summarizerLastRun=0;summarizerProvider=null;summarizerProviderModel=null;summaryItems=[];summaryDirty=false;runAggregates=new Map;flushTimer=null;isFlushing=false;flushPending=false;ready=false;initPromise=null;createdAt=Date.now();constructor(e={}){this.options={flushIntervalMs:e.flushIntervalMs??CS,batchSize:e.batchSize??SS,indexStride:e.indexStride??kS,summaryWindow:e.summaryWindow??xS,maxSummaryChars:e.maxSummaryChars??TS,source:e.source,agentName:e.agentName},this.summarizerOverrides=e.summarizer,e.workspacePath&&this.setWorkspace(e.workspacePath);}async setWorkspace(e){let t=se__default.resolve(e);if(this.workspacePath===t)return;await this.flush(),this.workspacePath=t,this.workspaceName=se__default.basename(t),this.workspaceId=LS(t);let s=se__default.join(wS,this.workspaceId);this.eventsDir=se__default.join(s,"events"),this.memoriesDir=se__default.join(s,"memories"),this.memoryPaths={progress:se__default.join(this.memoriesDir,"progress.jsonl"),standard:se__default.join(this.memoriesDir,"standards.jsonl"),lesson:se__default.join(this.memoriesDir,"lessons.jsonl"),pinned:se__default.join(this.memoriesDir,"pinned.jsonl")},this.graphPaths={nodes:se__default.join(this.memoriesDir,"graph_nodes.jsonl"),edges:se__default.join(this.memoriesDir,"graph_edges.jsonl")},this.indexPath=se__default.join(this.eventsDir,"index.jsonl"),this.summaryPath=se__default.join(this.eventsDir,"recent_summary.json"),this.sessionSummaryPath=this.memoriesDir?se__default.join(this.memoriesDir,"session_summary.jsonl"):null,this.metaPath=se__default.join(this.eventsDir,"meta.json"),this.currentDate=null,this.currentFile=null,this.currentFileBytes=0,this.sessionSummaryQueue=[],this.memoryQueue=[],this.graphNodeQueue=[],this.graphEdgeQueue=[],this.summarizerQueue=[],this.summarizerProvider=null,this.summarizerProviderModel=null,this.runAggregates.clear(),this.ready=false,this.initPromise=this.initializeWorkspace(),await this.initPromise;}formatFilePath(e){if(!this.workspacePath)return e;let t=se__default.relative(this.workspacePath,e);return !t||t.startsWith("..")?e:t}record(e){if(!this.workspacePath||!this.workspaceId)return;let t={schemaVersion:1,id:Vt.randomUUID(),seq:++this.seq,ts:e.ts??Date.now(),workspaceId:this.workspaceId,workspacePath:this.workspacePath,type:e.type,sessionId:e.sessionId,runId:e.runId,actor:e.actor,summary:e.summary,reason:e.reason,files:e.files,data:e.data};this.queue.push(t),this.updateSummary(t),this.updateRunAggregate(t),this.maybeQueueSessionSummary(t),this.queueMemoryEntries(this.extractMemoryEntries(t),"event"),this.queueGraphEntries(this.extractGraphEntries(t));let s=t.type==="run_result"||t.type==="run_error";(this.queue.length>=this.options.batchSize||s)&&this.flush();}createRunId(){return Vt.randomUUID()}async getContextSummary(e){await this.ensureReady(),this.summaryItems.length===0&&await this.loadSummarySnapshot();let t=e?.language??"zh",s=e?.maxItems??this.options.summaryWindow,n=e?.maxSessionItems??zc,r=e?.maxMemoryItems??Hc,i=e?.maxChars??this.options.maxSummaryChars,o=e?.query?.trim(),l=t==="zh"?{memoryHeader:"## \u9879\u76EE\u8BB0\u5FC6\uFF08\u81EA\u52A8\uFF09",pinned:"### \u56FA\u5B9A",progress:"### \u8FDB\u5EA6",standard:"### \u89C4\u8303",lesson:"### \u6559\u8BAD",sessionHeader:"## \u4F1A\u8BDD\u6458\u8981",activityHeader:"## \u6700\u8FD1\u5DE5\u4F5C\u6458\u8981"}:{memoryHeader:"## Project Memory (Auto)",pinned:"### Pinned",progress:"### Progress",standard:"### Standards",lesson:"### Lessons",sessionHeader:"## Session Summary",activityHeader:"## Recent Workspace Activity"},c=null;if(o){let I=this.tokenizeQuery(o);c={tokens:I,graphMatches:await this.getGraphRunMatches(I)};}let u=o&&c?await this.getRelevantSessionSummaries(o,n,c):await this.getRecentSessionSummaries(n),d=o&&c?await this.getRelevantMemoryItems(o,r,c):{pinned:await this.getRecentMemoryItems("pinned",r),progress:await this.getRecentMemoryItems("progress",r),standard:await this.getRecentMemoryItems("standard",r),lesson:await this.getRecentMemoryItems("lesson",r)},p=d.pinned,h=d.progress,g=d.standard,f=d.lesson,b=this.summaryItems.slice(-s),y=I=>I.map(A=>`- [${Br(A.ts)}] ${A.summary}`),w=y(u),C=y(p),S=y(h),T=y(g),_=y(f),M=y(b),F=[{key:"pinned",title:l.pinned,lines:C},{key:"progress",title:l.progress,lines:S},{key:"standard",title:l.standard,lines:T},{key:"lesson",title:l.lesson,lines:_}],x={key:"activity",title:l.activityHeader,lines:M},R={key:"session",title:l.sessionHeader,lines:w};if(F.every(I=>I.lines.length===0)&&w.length===0&&M.length===0)return null;let j=()=>{let I=[],A=F.filter(L=>L.lines.length>0).map(L=>`${L.title}
3363
3363
  ${L.lines.join(`
3364
3364
  `)}`);return A.length>0&&I.push(`${l.memoryHeader}
3365
3365
  ${A.join(`
@@ -3409,16 +3409,16 @@ ${e.map(s=>{let n=Br(s.ts),r=s.files&&s.files.length>0?` files=${s.files.join(",
3409
3409
  [
3410
3410
  {"category":"progress","summary":"\u5B8C\u6210\u4E86 X\uFF0C\u4E0B\u4E00\u6B65 Y","files":["src/app.ts"],"confidence":0.7},
3411
3411
  {"category":"lesson","summary":"\u907F\u514D\u91CD\u590D\u6267\u884C Z\uFF0C\u5BB9\u6613\u8D85\u65F6","confidence":0.5}
3412
- ]`}parseSummaryItems(e){if(!e)return [];let t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/),s=t?t[1]:e,n=s.indexOf("["),r=s.lastIndexOf("]");if(n===-1||r===-1||r<=n)return [];try{let i=JSON.parse(s.slice(n,r+1));if(!Array.isArray(i))return [];let o=["progress","standard","lesson","pinned"];return i.map(l=>({category:l.category,summary:l.summary,files:Array.isArray(l.files)?l.files.filter(Boolean):void 0,confidence:typeof l.confidence=="number"?Math.min(1,Math.max(0,l.confidence)):void 0})).filter(l=>o.includes(l.category)&&typeof l.summary=="string"&&l.summary.trim())}catch{return []}}updateRunAggregate(e){if(!e.runId)return;let t=this.runAggregates.get(e.runId);switch(t||(t={sessionId:e.sessionId,startTs:e.ts,toolCalls:0,fileChanges:0,planUpdates:0,retries:0,errors:0,files:new Set},this.runAggregates.set(e.runId,t)),e.type){case "run_start":t.startTs=e.ts,t.sessionId=e.sessionId,t.promptSummary=e.summary??e.data?.prompt;break;case "run_attempt":t.provider=e.data?.providerName??e.data?.providerId,t.model=e.data?.model;break;case "tool_call_start":t.toolCalls+=1;break;case "file_change":if(t.fileChanges+=1,e.files?.length)for(let s of e.files){if(t.files.size>=RS)break;t.files.add(s);}break;case "plan_update":t.planUpdates+=1;break;case "stream_retry":t.retries+=1;break;case "run_error":t.errors+=1,t.errorMessage=e.data?.message??e.summary;break;case "run_result":t.tokens=e.data?.totalTokens,t.durationMs=e.data?.durationMs,t.outputPreview=e.data?.outputPreview;break;}}maybeQueueSessionSummary(e){if(!e.runId||e.type!=="run_result"&&e.type!=="run_error")return;let t=this.runAggregates.get(e.runId);if(!t)return;this.runAggregates.delete(e.runId);let s=t.durationMs??Math.max(0,e.ts-t.startTs),n=t.tokens,r=e.type==="run_result"?`Completed in ${s}ms, tokens ${n??"n/a"}`:`Failed: ${ot(t.errorMessage??e.summary??"Error",120)}`,i=[];t.toolCalls>0&&i.push(`tools ${t.toolCalls}`),t.fileChanges>0&&i.push(`files ${t.fileChanges}`),t.retries>0&&i.push(`retries ${t.retries}`);let o=i.length?` (${i.join(", ")})`:"",l=t.promptSummary??"User request";if(this.isLowValuePrompt(l))return;let c=t.outputPreview?ot(t.outputPreview.replace(/\s+/g," ").trim(),120):"",u=c?` | Result: ${c}`:"",d=ot(`${l} -> ${r}${o}${u}`,_S),p=Array.from(t.files),h={schemaVersion:1,id:e.id,ts:e.ts,sessionId:t.sessionId,runId:e.runId,summary:d,files:p.length?p:void 0,evidence:{eventId:e.id},model:t.model,provider:t.provider,toolCalls:t.toolCalls||void 0,errors:t.errors||(e.type==="run_error"?1:void 0),durationMs:s,tokens:n};this.sessionSummaryQueue.push(h),m.info("SESSION_SUMMARY_QUEUED","Session summary queued",{runId:h.runId,sessionId:h.sessionId,summary:ot(h.summary,160),files:h.files,toolCalls:h.toolCalls,retries:t.retries,errors:h.errors,durationMs:h.durationMs,tokens:h.tokens}),this.enqueueSummarizer(h);}async loadSummarySnapshot(){if(this.summaryPath)try{let e=await ce__default.readFile(this.summaryPath,"utf-8"),t=JSON.parse(e);t?.items?.length&&(this.summaryItems=t.items.slice(-this.options.summaryWindow));}catch{}}async persistSummarySnapshot(){if(!this.summaryPath||!this.workspaceId||!this.summaryDirty)return;let e={schemaVersion:1,workspaceId:this.workspaceId,updatedAt:Date.now(),windowSize:this.options.summaryWindow,items:this.summaryItems},t=`${this.summaryPath}.${Date.now()}.tmp`;await ce__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await ce__default.rename(t,this.summaryPath),this.summaryDirty=false;}async loadMeta(){if(this.metaPath)try{let e=await ce__default.readFile(this.metaPath,"utf-8"),t=JSON.parse(e);if(t?.lastSeq&&(this.seq=t.lastSeq),t?.createdAt&&(this.createdAt=t.createdAt),t?.currentFile&&this.eventsDir){let s=se__default.join(this.eventsDir,t.currentFile);this.currentFile=s,this.currentDate=t.currentFile.slice(7,17),this.currentFileBytes=await this.getFileSize(s);}}catch{}}async persistMeta(){if(!this.metaPath||!this.workspaceId||!this.workspacePath||!this.workspaceName)return;let e={schemaVersion:1,workspaceId:this.workspaceId,workspacePath:this.workspacePath,workspaceName:this.workspaceName,createdAt:this.createdAt,updatedAt:Date.now(),lastSeq:this.seq,currentFile:this.currentFile?se__default.basename(this.currentFile):void 0,currentFileBytes:this.currentFileBytes,source:this.options.source,agentName:this.options.agentName},t=`${this.metaPath}.${Date.now()}.tmp`;await ce__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await ce__default.rename(t,this.metaPath);}};W();var Xo=class{id="edge";tts;constructor(){this.tts=new EdgeTTS;}async init(){}async synthesize(e,t){let s=t?.voice||"zh-CN-XiaoxiaoNeural",n=t?.speed?`${Math.round((t.speed-1)*100)}%`:"+0%",r=t?.format||"mp3",i=r==="opus"?"webm-24khz-16bit-mono-opus":"audio-24khz-48kbitrate-mono-mp3";await this.tts.synthesize(e,s,{rate:n,outputFormat:i});let o=this.tts.toBuffer(),l=this.tts.getAudioInfo();return {audio:o,format:r,durationMs:Math.round(l.estimatedDuration*1e3)}}async synthesizeStream(e,t,s){let n=s?.voice||"zh-CN-XiaoxiaoNeural",r=s?.format||"mp3",i=0;for await(let o of this.tts.synthesizeStream(e,n))o&&o.length>0&&(t(Buffer.from(o),i),i++);return {format:r,totalChunks:i}}async getVoices(){return (await this.tts.getVoicesByLanguage("zh-CN")).map(t=>({id:t.ShortName,name:t.LocalName||t.FriendlyName,locale:t.Locale,gender:t.Gender}))}destroy(){}},Qo=class{provider=null;config;summarizeFn=null;constructor(e){this.config=e;}setSummarizeFn(e){this.summarizeFn=e;}updateConfig(e){this.config={...this.config,...e};}isEnabled(){return this.config.enabled===true}async init(){if(!this.config.enabled)return;(this.config.provider||"edge")==="edge"?this.provider=new Xo:this.provider=new Xo,await this.provider.init(),m.info("TTS",`TTS service initialized with provider: ${this.provider.id}`);}async speak(e){if(!this.config.enabled||!this.provider||!e||e.trim().length===0)return null;try{let t=await this.provider.synthesize(e,{voice:this.config.voice,speed:this.config.speed,format:this.config.format||"mp3"});return {audio:t.audio.toString("base64"),format:t.format,voiceSummary:e,durationMs:t.durationMs}}catch(t){return m.error("TTS",`TTS synthesis failed: ${t.message}`),null}}async speakStream(e,t){if(!this.config.enabled||!this.provider||!e||e.trim().length===0)return null;try{let s=await this.provider.synthesizeStream(e,(n,r)=>{t(n.toString("base64"),r);},{voice:this.config.voice,speed:this.config.speed,format:this.config.format||"mp3"});return {format:s.format,totalChunks:s.totalChunks,voiceText:e}}catch(s){return m.error("TTS",`TTS stream synthesis failed: ${s.message}`),null}}async getVoices(){return this.provider?this.provider.getVoices():[]}destroy(){this.provider?.destroy(),this.provider=null;}};var Jc=se.join(Dn.homedir(),".neox"),Ur=se.join(Jc,"server.pid");function jS(a){Me.existsSync(Jc)||Me.mkdirSync(Jc,{recursive:true}),Me.writeFileSync(Ur,JSON.stringify(a,null,2));}function ug(){try{Me.existsSync(Ur)&&Me.unlinkSync(Ur);}catch{}}function dg(){try{return Me.existsSync(Ur)?JSON.parse(Me.readFileSync(Ur,"utf-8")):null}catch{return null}}function BS(){let a=process.argv.slice(2),e=4399,t=process.cwd(),s=false;for(let n=0;n<a.length;n++)a[n]==="--port"&&a[n+1]?(e=parseInt(a[n+1],10),n++):a[n]==="--workdir"&&a[n+1]?(t=a[n+1],n++):a[n]==="--daemon"&&(s=true);return {port:e,workDir:t,daemon:s}}async function GS(a,e){let t=Le(),s=xs(),n=new rt(t),r=t.agentApprovalMode||t.approvalMode||"auto",i=ag(r),o=(v,E)=>{let O=n.getProvider(v);if(!O)return {provider:null,llmConfig:null};let I=E||O.defaultModel||O.models?.[0]?.name;return {provider:O,llmConfig:{model:I,providerName:O.name||O.id,maxInputTokens:O.contextWindow||128e3}}},l=yo(500),c=new Gr({workspacePath:a,source:"server",agentName:"Neox Server"}),u=new Qo(t.tts??{enabled:false});t.tts?.enabled&&(u.setSummarizeFn(async(v,E,O)=>{let I=g;if(!I)return v.substring(0,E);let A=$t.createAdapter(I.protocol,I),L=O||"claude-haiku-4-5-20251001";return (await A.chat([{role:"system",content:`\u4F60\u662F\u4E00\u4E2A\u8BED\u97F3\u6458\u8981\u52A9\u624B\u3002\u628A\u4EE5\u4E0B\u5185\u5BB9\u538B\u7F29\u6210${E}\u5B57\u4EE5\u5185\u7684\u53E3\u8BED\u5316\u6458\u8981\uFF0C\u9002\u5408\u8BED\u97F3\u6717\u8BFB\u3002\u4E0D\u8981\u7528\u4EE3\u7801\u3001markdown\u683C\u5F0F\u3001\u5217\u8868\u3002\u76F4\u63A5\u8BF4\u91CD\u70B9\u3002`},{role:"user",content:v}],{model:L,maxTokens:300,temperature:.3})).choices?.[0]?.message?.content||v.substring(0,E)}),await u.init());let d=await Rs(a,s),p=wr({workDir:a}),h=typeof p=="string"?p:"",g=n.getDefaultProvider(),f=g?.id??"",b=g?.defaultModel??g?.models?.[0]?.name??"",y={services:s,permissionManager:i,tools:d,memory:l,workDir:a,providerId:f,modelName:b,resolveProvider:o,systemPrompt:h},w=new Pr;w.setWorkspace(a);let C=null,S=null,T=null,_=null,M=t.runMode||"single";try{C=new kn({...y,actionLog:c,agentMode:r==="dangerous"?"auto":"agent",enableFGTS:t.experimental?.enableFGTS,enablePTC:t.experimental?.enablePTC});}catch(v){m.error("SERVER","Failed to init SingleAgentRuntime",{error:v});}try{S=new Rn({...y,actionLog:c});}catch(v){m.error("SERVER","Failed to init AssistantRuntime",{error:v});}try{let v=new It(void 0,"cooperate");T=new ms({...y,ccbReviewMode:v.getCCBReviewMode(),workerModels:v.getEnabledWorkerModels().map(E=>({providerId:E.providerId,model:E.model,traits:E.traits}))});}catch(v){m.error("SERVER","Failed to init CooperateRuntime",{error:v});}try{let v=async(O,I,A)=>{let L=g;if(!L)throw new Error("No provider configured for NetworkRuntime");let $=$t.createAdapter(L.protocol,L),P=[{role:"system",content:O},{role:"user",content:I}],N=A?.model||b;if(A?.onText&&$.chatStreamed){let G="",q=$.chatStreamed(P,{model:N,maxTokens:A.maxTokens,temperature:A.temperature,signal:A.signal});for await(let oe of q)oe.type==="text"&&oe.text?(G+=oe.text,A.onText(oe.text)):oe.type==="content_block_delta"&&oe.delta?.text&&(G+=oe.delta.text,A.onText(oe.delta.text));return G}return (await $.chat(P,{model:N,maxTokens:A?.maxTokens,temperature:A?.temperature,signal:A?.signal})).choices?.[0]?.message?.content||""},E=new It(void 0,"network");_=new In({llmCall:v,executionCapability:{orchestrator:new Et({hostService:new Rt({platformServices:s}),resolveProvider:o}),tools:d,permissionManager:i,memory:l,workDir:a,providerId:f,modelName:b,resolveProvider:o,maxIterations:30},autoCreateDefaultAgents:!0,customRoles:E.getNetworkRoles?.()});}catch(v){m.error("SERVER","Failed to init NetworkRuntime",{error:v});}let F=new Set,x=new Map,R=new Map,j={async chat(v,E){F.add(v);let O=new AbortController;x.set(v,O);let I=(N,D)=>{if(m.info("SERVER",`\u{1F4E1} publishRawEvent: type=${N.type} sessionId=${v}`),e.publish({sessionId:v,type:N.type,data:N,tracker:D,timestamp:Date.now()}),N.type==="run_result"&&u.isEnabled()){let G=N.currentTurnText||N.output;G&&u.speak(G).then(q=>{q&&e.publish({sessionId:v,type:"tts_audio",data:{type:"tts_audio",audio:q.audio,audioFormat:q.format,voiceSummary:q.voiceSummary,durationMs:q.durationMs??0},timestamp:Date.now()});}).catch(q=>{m.warn("SERVER",`TTS generation failed: ${q.message}`);});}},L=N=>{e.publish({sessionId:v,type:"error",data:{type:"error",message:N.message},timestamp:Date.now()});},$={onRuntimeEvent:(N,D)=>I(N,D),onError:L},P={onRuntimeEvent:N=>I(N),onError:L};try{let N=E.mode??M,D=E.attachments?{attachments:E.attachments}:void 0;if(N==="single"&&C)await C.chat({sessionId:v,prompt:E.prompt,metadata:D,providerId:E.providerId,modelName:E.modelName},$);else if(N==="assistant"&&S)S.removeAllListeners("worker_event"),S.removeAllListeners("worker_result"),S.on("worker_event",G=>{if(G?.event){let q={...G.event,sourceLabel:G.agentId,workerRole:G.role,workerTask:G.taskSummary};I(q,G.tracker);}}),S.on("worker_result",G=>{e.publish({sessionId:v,type:"worker_result",data:{type:"worker_result",agentId:G.agentId,success:G.success,output:G.output},timestamp:Date.now()});}),await S.chat({sessionId:v,prompt:E.prompt,metadata:D});else if(N==="cooperate"&&T)await T.chat({sessionId:v,prompt:E.prompt,metadata:D},P);else if(N==="network"&&_)await _.chat({prompt:E.prompt,history:[]});else if(C)await C.chat({sessionId:v,prompt:E.prompt,metadata:D,providerId:E.providerId,modelName:E.modelName},$);else throw new Error("No runtime available")}finally{F.delete(v),x.delete(v);}},abort(v){let E=x.get(v);E&&(E.abort(),x.delete(v)),C&&C.abort(),S&&S.abort(),T&&T.abort?.();},replyPermission(v,E,O){let I=R.get(v);I&&(I.resolve(E),R.delete(v));},getActiveSessions(){return [...F]},setRunMode(v){Yo.isValidMode(v)&&(M=v,m.info("SERVER",`Run mode changed to: ${M}`));},getRunMode(){return M},setSandboxMode(v,E){hp(E);},setApprovalMode(v,E){m.info("SERVER",`Approval mode set to: ${E}`);},async compactSession(v){m.info("SERVER",`Compact session: ${v}`);},clearSession(v){l.clear(),m.info("SERVER",`Cleared session: ${v}`);},getContextHealth(v){return l.checkContextHealth?.()??null},async getSessionInfo(v){return {messageCount:l.length,messages:l.getAll()}},setCompressionMode(v,E){m.info("SERVER",`Compression mode set to: ${E}`);},getMemoryStats(v){return {length:l.length,contextHealth:l.checkContextHealth?.()??null}},clearMemory(v){l.clear();},addMemoryMessage(v,E,O){l.add({role:E,content:O});},getToolList(){return {count:d.length,names:d.map(v=>v.name)}},async reloadTools(v){let E=await Rs(v,s);d.length=0,d.push(...E),m.info("SERVER",`Reloaded ${d.length} tools for ${v}`);},async setWorkspace(v){let E=await Rs(v,s);d.length=0,d.push(...E),w.setWorkspace(v),m.info("SERVER",`Workspace switched to: ${v}`);},async startCheckpointWatching(v){return w.startMessage(v)},async stopCheckpointWatching(){await w.stopWatching();},async createCheckpoint(v,E){return w.createCheckpoint(v,E)},async rollbackToCheckpoint(v){return w.rollbackToCheckpoint(v)},async rollbackSingleFile(v){return w.rollbackSingleFile(v)},async reapplySingleFile(v){return w.reapplySingleFile(v)},async getCheckpoints(v,E){return w.getCheckpoints(v,E)},async getCheckpointStats(){return w.getCurrentStats?.()??{created:0,modified:0,deleted:0,directories:0,total:0}},async getCheckpointChanges(){return w.getChangeBuffer?.()??[]},setCheckpointEnabled(v){w.setEnabled(v);},isCheckpointEnabled(){return w.isEnabled()},async cleanupCheckpoints(){await w.cleanup?.();},async getHostStatus(){return {isRunning:F.size>0,currentTask:null,mode:M,workingDirectory:a,uptime:Math.floor(process.uptime()),memoryUsage:{tokensUsed:l.length,contextWindow:128e3,pressure:l.length/128e3}}},async getHostAgents(){return [{id:"main",role:"main",status:F.size>0?"running":"idle"}]},async getHostActivity(v=10){return []},async getHostSession(){return {messageCount:l.length,tokensUsed:0}},async getHostSystem(){let v=null,E="unknown";try{let{execSync:O}=await import('child_process');try{v=O("git rev-parse --abbrev-ref HEAD",{cwd:a,encoding:"utf-8",timeout:5e3}).trim();}catch{}try{E=O("git status --porcelain",{cwd:a,encoding:"utf-8",timeout:5e3}).trim().length===0?"clean":"dirty";}catch{}}catch{}return {platform:process.platform,arch:process.arch,cwd:a,gitBranch:v,gitStatus:E,nodeVersion:process.version}},async hostInterrupt(v){for(let[O,I]of x)I.abort();C&&C.abort(),S&&S.abort(),T&&T.abort?.();let E=F.size>0;return F.clear(),x.clear(),{interrupted:E}},async hostSendCommand(v,E){let O=`cmd-${Date.now()}`,I={prompt:v};return j.chat(O,I).catch(A=>{m.error("SERVER",`hostSendCommand failed: ${A.message}`);}),{queued:true,sessionId:O}},setTTSEnabled(v){let E=u.isEnabled();u.updateConfig({enabled:v,provider:"edge"}),v&&!E&&(u.summarizeFn||u.setSummarizeFn(async(O,I,A)=>{let L=g;if(!L)return O.substring(0,I);let $=$t.createAdapter(L.protocol,L),P=A||"claude-haiku-4-5-20251001";return (await $.chat([{role:"system",content:`\u4F60\u662F\u4E00\u4E2A\u8BED\u97F3\u6458\u8981\u52A9\u624B\u3002\u628A\u4EE5\u4E0B\u5185\u5BB9\u538B\u7F29\u6210${I}\u5B57\u4EE5\u5185\u7684\u53E3\u8BED\u5316\u6458\u8981\uFF0C\u9002\u5408\u8BED\u97F3\u6717\u8BFB\u3002\u4E0D\u8981\u7528\u4EE3\u7801\u3001markdown\u683C\u5F0F\u3001\u5217\u8868\u3002\u76F4\u63A5\u8BF4\u91CD\u70B9\u3002`},{role:"user",content:O}],{model:P,maxTokens:300,temperature:.3})).choices?.[0]?.message?.content||O.substring(0,I)}),u.init().catch(O=>{m.error("SERVER",`TTS init failed: ${O.message}`);})),m.info("SERVER",`TTS ${v?"enabled":"disabled"}`);},isTTSEnabled(){return u.isEnabled()},getTTSConfig(){return t.tts??{enabled:false}},updateTTSConfig(v){let E=u.isEnabled();u.updateConfig(v),v.enabled&&!E&&u.init().catch(O=>{m.error("SERVER",`TTS init failed: ${O.message}`);});}};return j}async function US(){let{port:a,workDir:e,daemon:t}=BS(),s=Le(),n=s.remote??{};m.info("SERVER",`Starting Neox Server on port ${a}, workDir: ${e}`);let r=new xo,i=new Ns,o=await GS(e,r),l={workDir:e};n.enabled&&n.token&&(l.auth={token:n.token,allowLocalWithoutAuth:true},l.rateLimit={maxRequests:120,windowMs:6e4},l.corsOrigins=["*"],m.info("SERVER","Remote mode enabled \u2014 auth + rateLimit active"));let{app:c,channelRegistry:u}=bm(l,o,r,i),d=s.channels;d&&(await u.initialize(d),u.setHandler(async g=>{let f=`ch-${g.channelId}-${g.chatId}`;return new Promise(b=>{let y="",w=r.subscribe(f);(async()=>{for await(let C of w){if(C.type==="run_result"){y=C.data?.output||"",w.close();break}if(C.type==="error"){y=`Error: ${C.data?.message||"unknown"}`,w.close();break}}b(y||"[no response]");})(),o.chat(f,{prompt:g.text}).catch(()=>{b("[error processing message]"),w.close();});})}),await u.startAll(),m.info("SERVER","Channel adapters initialized")),await ht.initialize(e),ht.watch(e),m.info("SERVER",`Skills hot-reload active (${ht.size} skills loaded)`);let p=process.env.NEOX_HOST||(n.enabled?n.host||"0.0.0.0":"127.0.0.1");jS({pid:process.pid,port:a,workDir:e,startedAt:Date.now(),daemon:t});let h=()=>{m.info("SERVER","Shutting down..."),ht.stopWatch(),u.stopAll().catch(()=>{}),ug(),i.dispose(),r.dispose(),process.exit(0);};process.on("SIGINT",h),process.on("SIGTERM",h),serve({fetch:c.fetch,port:a,hostname:p},g=>{m.info("SERVER",`Neox Server listening on http://${p}:${g.port}`),process.send&&process.send({type:"ready",port:g.port});});}US().catch(a=>{m.error("SERVER","Failed to start server",{error:a}),ug(),process.exit(1);});W();var zS=4399,HS=3e3,Vc=15e3,JS=se.join(Dn.homedir(),".neox");se.join(JS,"server.log");async function KS(a){return new Promise(e=>{let t=Nu.createServer();t.once("error",()=>e(false)),t.once("listening",()=>{t.close(()=>e(true));}),t.listen(a,"127.0.0.1");})}async function VS(a=zS){for(let e=a;e<a+100;e++)if(await KS(e))return e;throw new Error("No free port found")}async function YS(a){try{let e=new AbortController,t=setTimeout(()=>e.abort(),HS),s=await fetch(`http://127.0.0.1:${a}/health`,{signal:e.signal});return clearTimeout(t),s.ok}catch{return false}}async function XS(a){let e=dg();if(e){if(process.stderr.write(`[BOOT] ensureServer: found pid file, checking health on port ${e.port}...
3412
+ ]`}parseSummaryItems(e){if(!e)return [];let t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/),s=t?t[1]:e,n=s.indexOf("["),r=s.lastIndexOf("]");if(n===-1||r===-1||r<=n)return [];try{let i=JSON.parse(s.slice(n,r+1));if(!Array.isArray(i))return [];let o=["progress","standard","lesson","pinned"];return i.map(l=>({category:l.category,summary:l.summary,files:Array.isArray(l.files)?l.files.filter(Boolean):void 0,confidence:typeof l.confidence=="number"?Math.min(1,Math.max(0,l.confidence)):void 0})).filter(l=>o.includes(l.category)&&typeof l.summary=="string"&&l.summary.trim())}catch{return []}}updateRunAggregate(e){if(!e.runId)return;let t=this.runAggregates.get(e.runId);switch(t||(t={sessionId:e.sessionId,startTs:e.ts,toolCalls:0,fileChanges:0,planUpdates:0,retries:0,errors:0,files:new Set},this.runAggregates.set(e.runId,t)),e.type){case "run_start":t.startTs=e.ts,t.sessionId=e.sessionId,t.promptSummary=e.summary??e.data?.prompt;break;case "run_attempt":t.provider=e.data?.providerName??e.data?.providerId,t.model=e.data?.model;break;case "tool_call_start":t.toolCalls+=1;break;case "file_change":if(t.fileChanges+=1,e.files?.length)for(let s of e.files){if(t.files.size>=RS)break;t.files.add(s);}break;case "plan_update":t.planUpdates+=1;break;case "stream_retry":t.retries+=1;break;case "run_error":t.errors+=1,t.errorMessage=e.data?.message??e.summary;break;case "run_result":t.tokens=e.data?.totalTokens,t.durationMs=e.data?.durationMs,t.outputPreview=e.data?.outputPreview;break;}}maybeQueueSessionSummary(e){if(!e.runId||e.type!=="run_result"&&e.type!=="run_error")return;let t=this.runAggregates.get(e.runId);if(!t)return;this.runAggregates.delete(e.runId);let s=t.durationMs??Math.max(0,e.ts-t.startTs),n=t.tokens,r=e.type==="run_result"?`Completed in ${s}ms, tokens ${n??"n/a"}`:`Failed: ${ot(t.errorMessage??e.summary??"Error",120)}`,i=[];t.toolCalls>0&&i.push(`tools ${t.toolCalls}`),t.fileChanges>0&&i.push(`files ${t.fileChanges}`),t.retries>0&&i.push(`retries ${t.retries}`);let o=i.length?` (${i.join(", ")})`:"",l=t.promptSummary??"User request";if(this.isLowValuePrompt(l))return;let c=t.outputPreview?ot(t.outputPreview.replace(/\s+/g," ").trim(),120):"",u=c?` | Result: ${c}`:"",d=ot(`${l} -> ${r}${o}${u}`,_S),p=Array.from(t.files),h={schemaVersion:1,id:e.id,ts:e.ts,sessionId:t.sessionId,runId:e.runId,summary:d,files:p.length?p:void 0,evidence:{eventId:e.id},model:t.model,provider:t.provider,toolCalls:t.toolCalls||void 0,errors:t.errors||(e.type==="run_error"?1:void 0),durationMs:s,tokens:n};this.sessionSummaryQueue.push(h),m.info("SESSION_SUMMARY_QUEUED","Session summary queued",{runId:h.runId,sessionId:h.sessionId,summary:ot(h.summary,160),files:h.files,toolCalls:h.toolCalls,retries:t.retries,errors:h.errors,durationMs:h.durationMs,tokens:h.tokens}),this.enqueueSummarizer(h);}async loadSummarySnapshot(){if(this.summaryPath)try{let e=await ce__default.readFile(this.summaryPath,"utf-8"),t=JSON.parse(e);t?.items?.length&&(this.summaryItems=t.items.slice(-this.options.summaryWindow));}catch{}}async persistSummarySnapshot(){if(!this.summaryPath||!this.workspaceId||!this.summaryDirty)return;let e={schemaVersion:1,workspaceId:this.workspaceId,updatedAt:Date.now(),windowSize:this.options.summaryWindow,items:this.summaryItems},t=`${this.summaryPath}.${Date.now()}.tmp`;await ce__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await ce__default.rename(t,this.summaryPath),this.summaryDirty=false;}async loadMeta(){if(this.metaPath)try{let e=await ce__default.readFile(this.metaPath,"utf-8"),t=JSON.parse(e);if(t?.lastSeq&&(this.seq=t.lastSeq),t?.createdAt&&(this.createdAt=t.createdAt),t?.currentFile&&this.eventsDir){let s=se__default.join(this.eventsDir,t.currentFile);this.currentFile=s,this.currentDate=t.currentFile.slice(7,17),this.currentFileBytes=await this.getFileSize(s);}}catch{}}async persistMeta(){if(!this.metaPath||!this.workspaceId||!this.workspacePath||!this.workspaceName)return;let e={schemaVersion:1,workspaceId:this.workspaceId,workspacePath:this.workspacePath,workspaceName:this.workspaceName,createdAt:this.createdAt,updatedAt:Date.now(),lastSeq:this.seq,currentFile:this.currentFile?se__default.basename(this.currentFile):void 0,currentFileBytes:this.currentFileBytes,source:this.options.source,agentName:this.options.agentName},t=`${this.metaPath}.${Date.now()}.tmp`;await ce__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await ce__default.rename(t,this.metaPath);}};W();var Xo=class{id="edge";tts;constructor(){this.tts=new EdgeTTS;}async init(){}async synthesize(e,t){let s=t?.voice||"zh-CN-XiaoxiaoNeural",n=t?.speed?`${Math.round((t.speed-1)*100)}%`:"+0%",r=t?.format||"mp3",i=r==="opus"?"webm-24khz-16bit-mono-opus":"audio-24khz-48kbitrate-mono-mp3";await this.tts.synthesize(e,s,{rate:n,outputFormat:i});let o=this.tts.toBuffer(),l=this.tts.getAudioInfo();return {audio:o,format:r,durationMs:Math.round(l.estimatedDuration*1e3)}}async synthesizeStream(e,t,s){let n=s?.voice||"zh-CN-XiaoxiaoNeural",r=s?.format||"mp3",i=0;for await(let o of this.tts.synthesizeStream(e,n))o&&o.length>0&&(t(Buffer.from(o),i),i++);return {format:r,totalChunks:i}}async getVoices(){return (await this.tts.getVoicesByLanguage("zh-CN")).map(t=>({id:t.ShortName,name:t.LocalName||t.FriendlyName,locale:t.Locale,gender:t.Gender}))}destroy(){}},Qo=class{provider=null;config;summarizeFn=null;constructor(e){this.config=e;}setSummarizeFn(e){this.summarizeFn=e;}updateConfig(e){this.config={...this.config,...e};}isEnabled(){return this.config.enabled===true}async init(){if(!this.config.enabled)return;(this.config.provider||"edge")==="edge"?this.provider=new Xo:this.provider=new Xo,await this.provider.init(),m.info("TTS",`TTS service initialized with provider: ${this.provider.id}`);}async speak(e){if(!this.config.enabled||!this.provider||!e||e.trim().length===0)return null;try{let t=await this.provider.synthesize(e,{voice:this.config.voice,speed:this.config.speed,format:this.config.format||"mp3"});return {audio:t.audio.toString("base64"),format:t.format,voiceSummary:e,durationMs:t.durationMs}}catch(t){return m.error("TTS",`TTS synthesis failed: ${t.message}`),null}}async speakStream(e,t){if(!this.config.enabled||!this.provider||!e||e.trim().length===0)return null;try{let s=await this.provider.synthesizeStream(e,(n,r)=>{t(n.toString("base64"),r);},{voice:this.config.voice,speed:this.config.speed,format:this.config.format||"mp3"});return {format:s.format,totalChunks:s.totalChunks,voiceText:e}}catch(s){return m.error("TTS",`TTS stream synthesis failed: ${s.message}`),null}}async getVoices(){return this.provider?this.provider.getVoices():[]}destroy(){this.provider?.destroy(),this.provider=null;}};var Jc=se.join(Dn.homedir(),".neox"),Ur=se.join(Jc,"server.pid");function jS(a){Me.existsSync(Jc)||Me.mkdirSync(Jc,{recursive:true}),Me.writeFileSync(Ur,JSON.stringify(a,null,2));}function ug(){try{Me.existsSync(Ur)&&Me.unlinkSync(Ur);}catch{}}function dg(){try{return Me.existsSync(Ur)?JSON.parse(Me.readFileSync(Ur,"utf-8")):null}catch{return null}}function BS(){let a=process.argv.slice(2),e=4399,t=process.cwd(),s=false;for(let n=0;n<a.length;n++)a[n]==="--port"&&a[n+1]?(e=parseInt(a[n+1],10),n++):a[n]==="--workdir"&&a[n+1]?(t=a[n+1],n++):a[n]==="--daemon"&&(s=true);return {port:e,workDir:t,daemon:s}}async function GS(a,e){let t=Le(),s=Ts(),n=new rt(t),r=t.agentApprovalMode||t.approvalMode||"auto",i=ag(r),o=(v,E)=>{let O=n.getProvider(v);if(!O)return {provider:null,llmConfig:null};let I=E||O.defaultModel||O.models?.[0]?.name;return {provider:O,llmConfig:{model:I,providerName:O.name||O.id,maxInputTokens:O.contextWindow||128e3}}},l=yo(500),c=new Gr({workspacePath:a,source:"server",agentName:"Neox Server"}),u=new Qo(t.tts??{enabled:false});t.tts?.enabled&&(u.setSummarizeFn(async(v,E,O)=>{let I=g;if(!I)return v.substring(0,E);let A=$t.createAdapter(I.protocol,I),L=O||"claude-haiku-4-5-20251001";return (await A.chat([{role:"system",content:`\u4F60\u662F\u4E00\u4E2A\u8BED\u97F3\u6458\u8981\u52A9\u624B\u3002\u628A\u4EE5\u4E0B\u5185\u5BB9\u538B\u7F29\u6210${E}\u5B57\u4EE5\u5185\u7684\u53E3\u8BED\u5316\u6458\u8981\uFF0C\u9002\u5408\u8BED\u97F3\u6717\u8BFB\u3002\u4E0D\u8981\u7528\u4EE3\u7801\u3001markdown\u683C\u5F0F\u3001\u5217\u8868\u3002\u76F4\u63A5\u8BF4\u91CD\u70B9\u3002`},{role:"user",content:v}],{model:L,maxTokens:300,temperature:.3})).choices?.[0]?.message?.content||v.substring(0,E)}),await u.init());let d=await As(a,s),p=wr({workDir:a}),h=typeof p=="string"?p:"",g=n.getDefaultProvider(),f=g?.id??"",b=g?.defaultModel??g?.models?.[0]?.name??"",y={services:s,permissionManager:i,tools:d,memory:l,workDir:a,providerId:f,modelName:b,resolveProvider:o,systemPrompt:h},w=new Pr;w.setWorkspace(a);let C=null,S=null,T=null,_=null,M=t.runMode||"single";try{C=new kn({...y,actionLog:c,agentMode:r==="dangerous"?"auto":"agent",enableFGTS:t.experimental?.enableFGTS,enablePTC:t.experimental?.enablePTC});}catch(v){m.error("SERVER","Failed to init SingleAgentRuntime",{error:v});}try{S=new Rn({...y,actionLog:c});}catch(v){m.error("SERVER","Failed to init AssistantRuntime",{error:v});}try{let v=new It(void 0,"cooperate");T=new ms({...y,ccbReviewMode:v.getCCBReviewMode(),workerModels:v.getEnabledWorkerModels().map(E=>({providerId:E.providerId,model:E.model,traits:E.traits}))});}catch(v){m.error("SERVER","Failed to init CooperateRuntime",{error:v});}try{let v=async(O,I,A)=>{let L=g;if(!L)throw new Error("No provider configured for NetworkRuntime");let $=$t.createAdapter(L.protocol,L),P=[{role:"system",content:O},{role:"user",content:I}],N=A?.model||b;if(A?.onText&&$.chatStreamed){let G="",q=$.chatStreamed(P,{model:N,maxTokens:A.maxTokens,temperature:A.temperature,signal:A.signal});for await(let oe of q)oe.type==="text"&&oe.text?(G+=oe.text,A.onText(oe.text)):oe.type==="content_block_delta"&&oe.delta?.text&&(G+=oe.delta.text,A.onText(oe.delta.text));return G}return (await $.chat(P,{model:N,maxTokens:A?.maxTokens,temperature:A?.temperature,signal:A?.signal})).choices?.[0]?.message?.content||""},E=new It(void 0,"network");_=new In({llmCall:v,executionCapability:{orchestrator:new Et({hostService:new Rt({platformServices:s}),resolveProvider:o}),tools:d,permissionManager:i,memory:l,workDir:a,providerId:f,modelName:b,resolveProvider:o,maxIterations:30},autoCreateDefaultAgents:!0,customRoles:E.getNetworkRoles?.()});}catch(v){m.error("SERVER","Failed to init NetworkRuntime",{error:v});}let F=new Set,x=new Map,R=new Map,j={async chat(v,E){F.add(v);let O=new AbortController;x.set(v,O);let I=(N,D)=>{if(m.info("SERVER",`\u{1F4E1} publishRawEvent: type=${N.type} sessionId=${v}`),e.publish({sessionId:v,type:N.type,data:N,tracker:D,timestamp:Date.now()}),N.type==="run_result"&&u.isEnabled()){let G=N.currentTurnText||N.output;G&&u.speak(G).then(q=>{q&&e.publish({sessionId:v,type:"tts_audio",data:{type:"tts_audio",audio:q.audio,audioFormat:q.format,voiceSummary:q.voiceSummary,durationMs:q.durationMs??0},timestamp:Date.now()});}).catch(q=>{m.warn("SERVER",`TTS generation failed: ${q.message}`);});}},L=N=>{e.publish({sessionId:v,type:"error",data:{type:"error",message:N.message},timestamp:Date.now()});},$={onRuntimeEvent:(N,D)=>I(N,D),onError:L},P={onRuntimeEvent:N=>I(N),onError:L};try{let N=E.mode??M,D=E.attachments?{attachments:E.attachments}:void 0;if(N==="single"&&C)await C.chat({sessionId:v,prompt:E.prompt,metadata:D,providerId:E.providerId,modelName:E.modelName},$);else if(N==="assistant"&&S)S.removeAllListeners("worker_event"),S.removeAllListeners("worker_result"),S.on("worker_event",G=>{if(G?.event){let q={...G.event,sourceLabel:G.agentId,workerRole:G.role,workerTask:G.taskSummary};I(q,G.tracker);}}),S.on("worker_result",G=>{e.publish({sessionId:v,type:"worker_result",data:{type:"worker_result",agentId:G.agentId,success:G.success,output:G.output},timestamp:Date.now()});}),await S.chat({sessionId:v,prompt:E.prompt,metadata:D});else if(N==="cooperate"&&T)await T.chat({sessionId:v,prompt:E.prompt,metadata:D},P);else if(N==="network"&&_)await _.chat({prompt:E.prompt,history:[]});else if(C)await C.chat({sessionId:v,prompt:E.prompt,metadata:D,providerId:E.providerId,modelName:E.modelName},$);else throw new Error("No runtime available")}finally{F.delete(v),x.delete(v);}},abort(v){let E=x.get(v);E&&(E.abort(),x.delete(v)),C&&C.abort(),S&&S.abort(),T&&T.abort?.();},replyPermission(v,E,O){let I=R.get(v);I&&(I.resolve(E),R.delete(v));},getActiveSessions(){return [...F]},setRunMode(v){Yo.isValidMode(v)&&(M=v,m.info("SERVER",`Run mode changed to: ${M}`));},getRunMode(){return M},setSandboxMode(v,E){hp(E);},setApprovalMode(v,E){m.info("SERVER",`Approval mode set to: ${E}`);},async compactSession(v){m.info("SERVER",`Compact session: ${v}`);},clearSession(v){l.clear(),m.info("SERVER",`Cleared session: ${v}`);},getContextHealth(v){return l.checkContextHealth?.()??null},async getSessionInfo(v){return {messageCount:l.length,messages:l.getAll()}},setCompressionMode(v,E){m.info("SERVER",`Compression mode set to: ${E}`);},getMemoryStats(v){return {length:l.length,contextHealth:l.checkContextHealth?.()??null}},clearMemory(v){l.clear();},addMemoryMessage(v,E,O){l.add({role:E,content:O});},getToolList(){return {count:d.length,names:d.map(v=>v.name)}},async reloadTools(v){let E=await As(v,s);d.length=0,d.push(...E),m.info("SERVER",`Reloaded ${d.length} tools for ${v}`);},async setWorkspace(v){let E=await As(v,s);d.length=0,d.push(...E),w.setWorkspace(v),m.info("SERVER",`Workspace switched to: ${v}`);},async startCheckpointWatching(v){return w.startMessage(v)},async stopCheckpointWatching(){await w.stopWatching();},async createCheckpoint(v,E){return w.createCheckpoint(v,E)},async rollbackToCheckpoint(v){return w.rollbackToCheckpoint(v)},async rollbackSingleFile(v){return w.rollbackSingleFile(v)},async reapplySingleFile(v){return w.reapplySingleFile(v)},async getCheckpoints(v,E){return w.getCheckpoints(v,E)},async getCheckpointStats(){return w.getCurrentStats?.()??{created:0,modified:0,deleted:0,directories:0,total:0}},async getCheckpointChanges(){return w.getChangeBuffer?.()??[]},setCheckpointEnabled(v){w.setEnabled(v);},isCheckpointEnabled(){return w.isEnabled()},async cleanupCheckpoints(){await w.cleanup?.();},async getHostStatus(){return {isRunning:F.size>0,currentTask:null,mode:M,workingDirectory:a,uptime:Math.floor(process.uptime()),memoryUsage:{tokensUsed:l.length,contextWindow:128e3,pressure:l.length/128e3}}},async getHostAgents(){return [{id:"main",role:"main",status:F.size>0?"running":"idle"}]},async getHostActivity(v=10){return []},async getHostSession(){return {messageCount:l.length,tokensUsed:0}},async getHostSystem(){let v=null,E="unknown";try{let{execSync:O}=await import('child_process');try{v=O("git rev-parse --abbrev-ref HEAD",{cwd:a,encoding:"utf-8",timeout:5e3}).trim();}catch{}try{E=O("git status --porcelain",{cwd:a,encoding:"utf-8",timeout:5e3}).trim().length===0?"clean":"dirty";}catch{}}catch{}return {platform:process.platform,arch:process.arch,cwd:a,gitBranch:v,gitStatus:E,nodeVersion:process.version}},async hostInterrupt(v){for(let[O,I]of x)I.abort();C&&C.abort(),S&&S.abort(),T&&T.abort?.();let E=F.size>0;return F.clear(),x.clear(),{interrupted:E}},async hostSendCommand(v,E){let O=`cmd-${Date.now()}`,I={prompt:v};return j.chat(O,I).catch(A=>{m.error("SERVER",`hostSendCommand failed: ${A.message}`);}),{queued:true,sessionId:O}},setTTSEnabled(v){let E=u.isEnabled();u.updateConfig({enabled:v,provider:"edge"}),v&&!E&&(u.summarizeFn||u.setSummarizeFn(async(O,I,A)=>{let L=g;if(!L)return O.substring(0,I);let $=$t.createAdapter(L.protocol,L),P=A||"claude-haiku-4-5-20251001";return (await $.chat([{role:"system",content:`\u4F60\u662F\u4E00\u4E2A\u8BED\u97F3\u6458\u8981\u52A9\u624B\u3002\u628A\u4EE5\u4E0B\u5185\u5BB9\u538B\u7F29\u6210${I}\u5B57\u4EE5\u5185\u7684\u53E3\u8BED\u5316\u6458\u8981\uFF0C\u9002\u5408\u8BED\u97F3\u6717\u8BFB\u3002\u4E0D\u8981\u7528\u4EE3\u7801\u3001markdown\u683C\u5F0F\u3001\u5217\u8868\u3002\u76F4\u63A5\u8BF4\u91CD\u70B9\u3002`},{role:"user",content:O}],{model:P,maxTokens:300,temperature:.3})).choices?.[0]?.message?.content||O.substring(0,I)}),u.init().catch(O=>{m.error("SERVER",`TTS init failed: ${O.message}`);})),m.info("SERVER",`TTS ${v?"enabled":"disabled"}`);},isTTSEnabled(){return u.isEnabled()},getTTSConfig(){return t.tts??{enabled:false}},updateTTSConfig(v){let E=u.isEnabled();u.updateConfig(v),v.enabled&&!E&&u.init().catch(O=>{m.error("SERVER",`TTS init failed: ${O.message}`);});}};return j}async function US(){let{port:a,workDir:e,daemon:t}=BS(),s=Le(),n=s.remote??{};m.info("SERVER",`Starting Neox Server on port ${a}, workDir: ${e}`);let r=new xo,i=new $s,o=await GS(e,r),l={workDir:e};n.enabled&&n.token&&(l.auth={token:n.token,allowLocalWithoutAuth:true},l.rateLimit={maxRequests:120,windowMs:6e4},l.corsOrigins=["*"],m.info("SERVER","Remote mode enabled \u2014 auth + rateLimit active"));let{app:c,channelRegistry:u}=bm(l,o,r,i),d=s.channels;d&&(await u.initialize(d),u.setHandler(async g=>{let f=`ch-${g.channelId}-${g.chatId}`;return new Promise(b=>{let y="",w=r.subscribe(f);(async()=>{for await(let C of w){if(C.type==="run_result"){y=C.data?.output||"",w.close();break}if(C.type==="error"){y=`Error: ${C.data?.message||"unknown"}`,w.close();break}}b(y||"[no response]");})(),o.chat(f,{prompt:g.text}).catch(()=>{b("[error processing message]"),w.close();});})}),await u.startAll(),m.info("SERVER","Channel adapters initialized")),await ht.initialize(e),ht.watch(e),m.info("SERVER",`Skills hot-reload active (${ht.size} skills loaded)`);let p=process.env.NEOX_HOST||(n.enabled?n.host||"0.0.0.0":"127.0.0.1");jS({pid:process.pid,port:a,workDir:e,startedAt:Date.now(),daemon:t});let h=()=>{m.info("SERVER","Shutting down..."),ht.stopWatch(),u.stopAll().catch(()=>{}),ug(),i.dispose(),r.dispose(),process.exit(0);};process.on("SIGINT",h),process.on("SIGTERM",h),serve({fetch:c.fetch,port:a,hostname:p},g=>{m.info("SERVER",`Neox Server listening on http://${p}:${g.port}`),process.send&&process.send({type:"ready",port:g.port});});}US().catch(a=>{m.error("SERVER","Failed to start server",{error:a}),ug(),process.exit(1);});W();var zS=4399,HS=3e3,Vc=15e3,JS=se.join(Dn.homedir(),".neox");se.join(JS,"server.log");async function KS(a){return new Promise(e=>{let t=Nu.createServer();t.once("error",()=>e(false)),t.once("listening",()=>{t.close(()=>e(true));}),t.listen(a,"127.0.0.1");})}async function VS(a=zS){for(let e=a;e<a+100;e++)if(await KS(e))return e;throw new Error("No free port found")}async function YS(a){try{let e=new AbortController,t=setTimeout(()=>e.abort(),HS),s=await fetch(`http://127.0.0.1:${a}/health`,{signal:e.signal});return clearTimeout(t),s.ok}catch{return false}}async function XS(a){let e=dg();if(e){if(process.stderr.write(`[BOOT] ensureServer: found pid file, checking health on port ${e.port}...
3413
3413
  `),await YS(e.port))return m.info("PROCESS_MGR",`Reusing existing server on port ${e.port}${e.daemon?" (daemon)":""}`),{port:e.port,baseUrl:`http://127.0.0.1:${e.port}`,reused:true};process.stderr.write(`[BOOT] ensureServer: stale pid file, starting new server
3414
3414
  `),m.info("PROCESS_MGR","Stale pid file found, starting new server");}let t=await VS();process.stderr.write(`[BOOT] ensureServer: starting server on port ${t}...
3415
- `);let s=await QS(a,t);return {port:t,baseUrl:`http://127.0.0.1:${t}`,process:s,reused:false}}async function QS(a,e){let t=se.resolve(se.dirname(fileURLToPath(import.meta.url)),"./main.js");process.stderr.write(`[BOOT] startServer: entry=${t}
3416
- `),m.info("PROCESS_MGR",`Starting server: ${t} --port ${e} --workdir ${a}`);let s=fork(t,["--port",String(e),"--workdir",a],{stdio:["pipe","pipe","pipe","ipc"],detached:false,env:{...process.env}}),n="";return s.stderr?.on("data",r=>{let i=r.toString();n+=i,m.debug("SERVER_CHILD",i.trim());}),await new Promise((r,i)=>{let o=setTimeout(()=>{process.stderr.write(`[BOOT] startServer: TIMEOUT (${Vc}ms)
3417
- `),n&&process.stderr.write(`[BOOT] server stderr:
3418
- ${n.slice(-500)}
3419
- `),i(new Error(`Server startup timeout (${Vc}ms)`));},Vc);s.on("message",l=>{l?.type==="ready"&&(clearTimeout(o),process.stderr.write(`[BOOT] startServer: ready on port ${l.port}
3420
- `),m.info("PROCESS_MGR",`Server ready on port ${l.port}`),r());}),s.on("error",l=>{clearTimeout(o),process.stderr.write(`[BOOT] startServer: error: ${l.message}
3421
- `),i(l);}),s.on("exit",l=>{clearTimeout(o),l!==0&&(process.stderr.write(`[BOOT] startServer: exited with code ${l}
3422
- `),n&&process.stderr.write(`[BOOT] server stderr:
3423
- ${n.slice(-500)}
3424
- `),i(new Error(`Server exited with code ${l}`)));});}),s}function ZS(a){a.process&&!a.process.killed&&(m.info("PROCESS_MGR","Stopping server process"),a.process.kill("SIGTERM"));}export{Sn as ApiError,Ns as DeviceManager,Dr as NeoxClient,zl as RemoteRuntimeAdapter,Pr as RuntimeCheckpointService,Rt as RuntimeHostService,Et as RuntimeOrchestrator,vo as RuntimeOrchestratorError,Bw as applyThinkingMode,zw as authMiddleware,wr as buildInstructions,Wl as createAgentRuntimeHost,Gw as createElectronServices,xs as createNodeServices,dl as electronToolCapabilities,XS as ensureServer,Rs as getTools,Li as nodeToolCapabilities,_b as preloadShellEnv,Hl as rateLimitMiddleware,mp as setToolServices,ZS as stopServer};
3415
+ `);let s=await QS(a,t);return {port:t,baseUrl:`http://127.0.0.1:${t}`,process:s,reused:false}}async function QS(a,e){let t=se.resolve(se.dirname(fileURLToPath(import.meta.url)),".."),s=se.join(t,"server","main.js");process.stderr.write(`[BOOT] startServer: entry=${s}
3416
+ `),m.info("PROCESS_MGR",`Starting server: ${s} --port ${e} --workdir ${a}`);let n=fork(s,["--port",String(e),"--workdir",a],{stdio:["pipe","pipe","pipe","ipc"],detached:false,env:{...process.env}}),r="";return n.stderr?.on("data",i=>{let o=i.toString();r+=o,m.debug("SERVER_CHILD",o.trim());}),await new Promise((i,o)=>{let l=setTimeout(()=>{process.stderr.write(`[BOOT] startServer: TIMEOUT (${Vc}ms)
3417
+ `),r&&process.stderr.write(`[BOOT] server stderr:
3418
+ ${r.slice(-500)}
3419
+ `),o(new Error(`Server startup timeout (${Vc}ms)`));},Vc);n.on("message",c=>{c?.type==="ready"&&(clearTimeout(l),process.stderr.write(`[BOOT] startServer: ready on port ${c.port}
3420
+ `),m.info("PROCESS_MGR",`Server ready on port ${c.port}`),i());}),n.on("error",c=>{clearTimeout(l),process.stderr.write(`[BOOT] startServer: error: ${c.message}
3421
+ `),o(c);}),n.on("exit",c=>{clearTimeout(l),c!==0&&(process.stderr.write(`[BOOT] startServer: exited with code ${c}
3422
+ `),r&&process.stderr.write(`[BOOT] server stderr:
3423
+ ${r.slice(-500)}
3424
+ `),o(new Error(`Server exited with code ${c}`)));});}),n}function ZS(a){a.process&&!a.process.killed&&(m.info("PROCESS_MGR","Stopping server process"),a.process.kill("SIGTERM"));}export{Sn as ApiError,$s as DeviceManager,Dr as NeoxClient,zl as RemoteRuntimeAdapter,Pr as RuntimeCheckpointService,Rt as RuntimeHostService,Et as RuntimeOrchestrator,vo as RuntimeOrchestratorError,Bw as applyThinkingMode,zw as authMiddleware,wr as buildInstructions,Wl as createAgentRuntimeHost,Gw as createElectronServices,Ts as createNodeServices,dl as electronToolCapabilities,XS as ensureServer,As as getTools,Li as nodeToolCapabilities,_b as preloadShellEnv,Hl as rateLimitMiddleware,mp as setToolServices,ZS as stopServer};