@mk-co/neox-cli 2.0.29 → 2.0.30
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/cli/main.js +65 -65
- package/package.json +1 -1
package/dist/cli/main.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import*as Ze from'fs';import Ze__default,{realpathSync,readlinkSync,readdirSync,readdir as readdir$1,lstatSync,readFileSync,createReadStream,existsSync,mkdirSync,writeFileSync}from'fs';import*as ge from'path';import ge__default,{dirname,join,win32,posix}from'path';import*as Cr from'os';import Cr__default,{homedir,tmpdir,platform}from'os';import {execSync,spawn,fork,spawnSync}from'child_process';import {EventEmitter}from'events';import {execa,execaSync}from'execa';import*as
|
|
2
|
+
import*as Ze from'fs';import Ze__default,{realpathSync,readlinkSync,readdirSync,readdir as readdir$1,lstatSync,readFileSync,createReadStream,existsSync,mkdirSync,writeFileSync}from'fs';import*as ge from'path';import ge__default,{dirname,join,win32,posix}from'path';import*as Cr from'os';import Cr__default,{homedir,tmpdir,platform}from'os';import {execSync,spawn,fork,spawnSync}from'child_process';import {EventEmitter}from'events';import {execa,execaSync}from'execa';import*as Ee from'fs/promises';import Ee__default,{realpath,readlink,readdir,lstat,readFile}from'fs/promises';import {fileURLToPath}from'url';import ke from'chalk';import {performance as performance$1}from'perf_hooks';import*as Xp from'readline';import Xp__default from'readline';import wu from'prompts';import E,{createContext,forwardRef,useContext,useState,useEffect,useMemo,useRef,useLayoutEffect,PureComponent}from'react';import Ef,{Stream}from'stream';import rn,{cwd}from'process';import {throttle}from'es-toolkit/compat';import Mn from'ansi-escapes';import wr from'is-in-ci';import mT from'auto-bind';import {onExit}from'signal-exit';import hT from'patch-console';import {NoEventPriority,DefaultEventPriority,LegacyRoot}from'react-reconciler/constants.js';import fe from'yoga-layout';import Ux from'wrap-ansi';import tw from'react-reconciler';import Bx from'widest-line';import cs from'slice-ansi';import ya from'string-width';import {styledCharsFromTokens,tokenize,styledCharsToString}from'@alcalzone/ansi-tokenize';import Ia from'cli-cursor';import rh from'stack-utils';import {Buffer as Buffer$1}from'buffer';import XT from'ajv';import is,{createHash,randomBytes,randomUUID}from'crypto';import {StringDecoder}from'string_decoder';import tb from'fast-glob';import g0 from'puppeteer-core';import*as Fy from'net';import {Marked}from'marked';import {markedTerminal}from'marked-terminal';import {Box,Text}from'ink';import Xl from'ink-spinner';import {Client}from'@modelcontextprotocol/sdk/client/index.js';import {StdioClientTransport}from'@modelcontextprotocol/sdk/client/stdio.js';import {SSEClientTransport}from'@modelcontextprotocol/sdk/client/sse.js';import uA from'axios';import {WebSocketServer,WebSocket}from'ws';var Ix=Object.create;var ha=Object.defineProperty;var Ex=Object.getOwnPropertyDescriptor;var Ax=Object.getOwnPropertyNames;var Mx=Object.getPrototypeOf,Px=Object.prototype.hasOwnProperty;var Cg=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var Je=(r,e)=>()=>(r&&(e=r(r=0)),e);var Ao=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Fs=(r,e)=>{for(var t in e)ha(r,t,{get:e[t],enumerable:true});},xg=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ax(e))!Px.call(r,s)&&s!==t&&ha(r,s,{get:()=>e[s],enumerable:!(n=Ex(e,s))||n.enumerable});return r};var wg=(r,e,t)=>(t=r!=null?Ix(Mx(r)):{},xg(ha(t,"default",{value:r,enumerable:true}),r)),Su=r=>xg(ha({},"__esModule",{value:true}),r);var fa={};Fs(fa,{cliHealthMonitor:()=>Jt,cliLogger:()=>p,debugLog:()=>ae,generateCurlCommand:()=>qn,installCrashHandler:()=>Au,logCurlCommand:()=>Eu});function Nx(r,e){let t=new WeakSet;try{return JSON.stringify(r,(n,s)=>{if(e&&n){let o=n.toLowerCase();if(Dx.has(o))return "[REDACTED]"}if(typeof s=="bigint")return s.toString();if(s instanceof Error)return {name:s.name,message:s.message,stack:s.stack};if(typeof s=="function")return "[Function]";if(typeof s=="object"&&s!==null){if(t.has(s))return "[Circular]";t.add(s);}return s})}catch{return JSON.stringify({error:"[Unserializable payload]"})}}function qn(r,e,t,n=true){let s=["curl -X POST \\"];s.push(` '${r}' \\`);for(let[i,a]of Object.entries(e)){let l=a;if(n){let c=i.toLowerCase();if(c==="authorization"||c==="x-api-key"||c==="anthropic-api-key")if(l.startsWith("Bearer ")){let u=l.slice(7);l=`Bearer ${u.slice(0,8)}...${u.slice(-4)}`;}else l.length>12&&(l=`${l.slice(0,8)}...${l.slice(-4)}`);}s.push(` -H '${i}: ${l}' \\`);}let o=Nx(t,n);return s.push(` -d '${Lx(o)}'`),s.join(`
|
|
3
3
|
`)}function Lx(r){return r.replace(/'/g,"'\\''")}function Eu(r,e,t){if(process.env.CLI_DEBUG!=="1")return;let n=qn(r,e,t);p.info("CURL","=== LLM Request CURL Command ==="),p.info("CURL",n),p.info("CURL","=== End CURL Command ==="),process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
|
|
4
4
|
[CURL] === LLM Request CURL Command ===`),console.log(n),console.log(`[CURL] === End CURL Command ===
|
|
5
5
|
`));}function ae(r,e,t){if(process.env.CLI_DEBUG==="1"&&(p.debug(r,e,t),process.env.CLI_DEBUG_CONSOLE==="1")){let n=r?`[${r}]`:"";t!==void 0?console.log(n,e,t):console.log(n,e);}}function Au(){process.on("uncaughtException",r=>{p.error("CRASH","Uncaught Exception",{name:r.name,message:r.message,stack:r.stack}),setTimeout(()=>process.exit(1),100);}),process.on("unhandledRejection",r=>{p.error("CRASH","Unhandled Rejection",{reason:r instanceof Error?{name:r.name,message:r.message,stack:r.stack}:r});});try{process.on("SIGTTIN","ignore"),process.on("SIGTTOU","ignore"),p.info("SIGNAL","TTY control signals (SIGTTIN/SIGTTOU) initialized in crashHandler");}catch{}process.on("exit",()=>{p.close();});}var _u,p,Dx,Iu,Jt,re=Je(()=>{_u=class{logDir;enabled=true;initialized=false;writeStream=null;currentLogFile=null;backpressured=false;constructor(){this.logDir=ge__default.join(Cr__default.homedir(),".neox","logs");}init(){if(!this.initialized)try{Ze__default.existsSync(this.logDir)||Ze__default.mkdirSync(this.logDir,{recursive:!0}),this.initialized=!0;}catch{this.enabled=false;}}getLogFilePath(){let e=new Date().toISOString().split("T")[0];return ge__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=Ze__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(),n=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),o=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),l=String(e.getMilliseconds()).padStart(3,"0");return `${t}-${n}-${s} ${o}:${i}:${a}.${l}`}formatMessage(e,t,n,s){let o=this.formatLocalTime(),i=e.toUpperCase().padEnd(5),a=t?`[${t}]`:"",l=`${o} ${i} ${a} ${n}`;if(s!==void 0)try{let c=this.safeStringify(s);l+=` ${c}`;}catch{l+=" [Serialization Error]";}return l+`
|
|
@@ -37,8 +37,8 @@ if ($img) {
|
|
|
37
37
|
Write-Host 'OK'
|
|
38
38
|
}
|
|
39
39
|
`;if(execSync(`powershell.exe -NoProfile -Command "${n.replace(/"/g,'\\"')}"`,{encoding:"utf-8",timeout:5e3}).includes("OK")&&Ze.existsSync(e)){let o=Ze.statSync(e);if(o.size>0)return p.info("CLIPBOARD",`\u2713 WSL: Saved clipboard image (${Math.round(o.size/1024)}KB)`),e}}catch(n){p.debug("CLIPBOARD","WSL: Failed to save clipboard image",{error:n});}return null}async function fh(){return gh()?hh():null}function oT(r){try{let e=Ze.readFileSync(r),t=ge.extname(r).toLowerCase(),n="image/png";t===".jpg"||t===".jpeg"?n="image/jpeg":t===".gif"?n="image/gif":t===".webp"?n="image/webp":t===".bmp"&&(n="image/bmp");let s=e.toString("base64");return `data:${n};base64,${s}`}catch(e){return p.error("CLIPBOARD","Failed to convert image to base64",{error:e,imagePath:r}),null}}function Zu(r){try{let e=Ze.readFileSync(r),t=ge.extname(r).toLowerCase(),n="image/png";t===".jpg"||t===".jpeg"?n="image/jpeg":t===".gif"?n="image/gif":t===".webp"?n="image/webp":t===".bmp"&&(n="image/bmp");let s=e.toString("base64");return {mediaType:n,data:s}}catch(e){return p.error("CLIPBOARD","Failed to convert image to base64",{error:e,imagePath:r}),null}}async function ed(){let r=Yw();if(r){p.info("CLIPBOARD",`\u{1F4CE} Using image file from clipboard: ${r}`);let s=Zu(r);if(s)return {...s,name:ge.basename(r)}}let e=await fh();if(!e)return null;let t=Zu(e);if(!t)return null;let n=ge.basename(e);try{Ze.unlinkSync(e);}catch{}return {...t,name:n}}var Xu,mh,td=Je(()=>{re();ps();Xu=null,mh=false;});var Uh=Ao((i1,Fh)=>{var Oh=Cg("fs"),ad=Cg("path"),Bh=ad.join(__dirname,"path.txt");function qT(){let r;if(Oh.existsSync(Bh)&&(r=Oh.readFileSync(Bh,"utf-8")),process.env.ELECTRON_OVERRIDE_DIST_PATH)return ad.join(process.env.ELECTRON_OVERRIDE_DIST_PATH,r||"electron");if(r)return ad.join(__dirname,"dist",r);throw new Error("Electron failed to install correctly, please delete node_modules/electron and try installing again")}Fh.exports=qT();});var Qh=Ao((aB,Xh)=>{Xh.exports=Vh;function Vh(r,e,t){r instanceof RegExp&&(r=Jh(r,t)),e instanceof RegExp&&(e=Jh(e,t));var n=Yh(r,e,t);return n&&{start:n[0],end:n[1],pre:t.slice(0,n[0]),body:t.slice(n[0]+r.length,n[1]),post:t.slice(n[1]+e.length)}}function Jh(r,e){var t=e.match(r);return t?t[0]:null}Vh.range=Yh;function Yh(r,e,t){var n,s,o,i,a,l=t.indexOf(r),c=t.indexOf(e,l+1),u=l;if(l>=0&&c>0){if(r===e)return [l,c];for(n=[],o=t.length;u>=0&&!a;)u==l?(n.push(u),l=t.indexOf(r,u+1)):n.length==1?a=[n.pop(),c]:(s=n.pop(),s<o&&(o=s,i=c),c=t.indexOf(e,u+1)),u=l<c&&l>=0?l:c;n.length&&(a=[o,i]);}return a}});var af=Ao((lB,of)=>{var Zh=Qh();of.exports=hS;var ef="\0SLASH"+Math.random()+"\0",tf="\0OPEN"+Math.random()+"\0",bd="\0CLOSE"+Math.random()+"\0",nf="\0COMMA"+Math.random()+"\0",sf="\0PERIOD"+Math.random()+"\0";function yd(r){return parseInt(r,10)==r?parseInt(r,10):r.charCodeAt(0)}function mS(r){return r.split("\\\\").join(ef).split("\\{").join(tf).split("\\}").join(bd).split("\\,").join(nf).split("\\.").join(sf)}function gS(r){return r.split(ef).join("\\").split(tf).join("{").split(bd).join("}").split(nf).join(",").split(sf).join(".")}function rf(r){if(!r)return [""];var e=[],t=Zh("{","}",r);if(!t)return r.split(",");var n=t.pre,s=t.body,o=t.post,i=n.split(",");i[i.length-1]+="{"+s+"}";var a=rf(o);return o.length&&(i[i.length-1]+=a.shift(),i.push.apply(i,a)),e.push.apply(e,i),e}function hS(r){return r?(r.substr(0,2)==="{}"&&(r="\\{\\}"+r.substr(2)),Ko(mS(r),true).map(gS)):[]}function fS(r){return "{"+r+"}"}function yS(r){return /^-?0\d/.test(r)}function bS(r,e){return r<=e}function vS(r,e){return r>=e}function Ko(r,e){var t=[],n=Zh("{","}",r);if(!n)return [r];var s=n.pre,o=n.post.length?Ko(n.post,false):[""];if(/\$$/.test(n.pre))for(var i=0;i<o.length;i++){var a=s+"{"+n.body+"}"+o[i];t.push(a);}else {var l=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(n.body),c=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(n.body),u=l||c,d=n.body.indexOf(",")>=0;if(!u&&!d)return n.post.match(/,(?!,).*\}/)?(r=n.pre+"{"+n.body+bd+n.post,Ko(r)):[r];var m;if(u)m=n.body.split(/\.\./);else if(m=rf(n.body),m.length===1&&(m=Ko(m[0],false).map(fS),m.length===1))return o.map(function(k){return n.pre+m[0]+k});var g;if(u){var h=yd(m[0]),f=yd(m[1]),b=Math.max(m[0].length,m[1].length),v=m.length==3?Math.abs(yd(m[2])):1,C=bS,T=f<h;T&&(v*=-1,C=vS);var I=m.some(yS);g=[];for(var M=h;C(M,f);M+=v){var D;if(c)D=String.fromCharCode(M),D==="\\"&&(D="");else if(D=String(M),I){var R=b-D.length;if(R>0){var L=new Array(R+1).join("0");M<0?D="-"+L+D.slice(1):D=L+D;}}g.push(D);}}else {g=[];for(var S=0;S<m.length;S++)g.push.apply(g,Ko(m[S],false));}for(var S=0;S<g.length;S++)for(var i=0;i<o.length;i++){var a=s+g[S]+o[i];(!e||u||a)&&t.push(a);}}return t}});var Ty={};Fs(Ty,{WriteLockManager:()=>Ti,getGlobalWriteLockManager:()=>Ll,resetGlobalWriteLockManager:()=>wy});function Ll(){return Yr||(Yr=new Ti),Yr}function wy(){Yr&&(Yr.destroy(),Yr=null);}var Ti,Yr,$l=Je(()=>{re();Ti=class extends EventEmitter{locks=new Map;waitQueues=new Map;defaultTimeout;lockTTL;retryInterval;cleanupInterval=null;constructor(e={}){super(),this.defaultTimeout=e.defaultTimeout??3e4,this.lockTTL=e.lockTTL??6e4,this.retryInterval=e.retryInterval??100,this.startCleanup();}async acquire(e,t,n){let s=n??this.defaultTimeout,o=this.normalizePath(e),i=Date.now(),a=this.tryAcquire(o,t);return a.success?a:this.waitForLock(o,t,s,i)}tryAcquire(e,t){let n=this.normalizePath(e),s=this.locks.get(n);if(s)if(Date.now()>s.expiresAt)p.warn("WRITE_LOCK",`Lock expired for ${n}`,{previousHolder:s.agentId}),this.locks.delete(n);else return s.agentId===t?(s.expiresAt=Date.now()+this.lockTTL,{success:true,waitTime:0}):{success:false,heldBy:s.agentId};let o=Date.now();return this.locks.set(n,{agentId:t,path:n,acquiredAt:o,expiresAt:o+this.lockTTL}),p.debug("WRITE_LOCK",`Lock acquired: ${n}`,{agentId:t}),this.emit("lock_acquired",{path:n,agentId:t}),{success:true,waitTime:0}}waitForLock(e,t,n,s){return new Promise(o=>{let i=setTimeout(()=>{this.removeFromQueue(e,t),o({success:false,heldBy:this.locks.get(e)?.agentId,waitTime:Date.now()-s});},n);this.waitQueues.has(e)||this.waitQueues.set(e,[]),this.waitQueues.get(e).push({agentId:t,resolve:a=>{clearTimeout(i),o({...a,waitTime:Date.now()-s});},timeoutId:i}),p.debug("WRITE_LOCK",`Waiting for lock: ${e}`,{agentId:t});})}release(e,t){let n=this.normalizePath(e),s=this.locks.get(n);return s?s.agentId!==t?(p.warn("WRITE_LOCK","Cannot release lock held by another agent",{path:n,holder:s.agentId,requester:t}),false):(this.locks.delete(n),p.debug("WRITE_LOCK",`Lock released: ${n}`,{agentId:t}),this.emit("lock_released",{path:n,agentId:t}),this.processWaitQueue(n),true):(p.warn("WRITE_LOCK",`No lock to release: ${n}`),false)}releaseAll(e){let t=0,n=Array.from(this.locks.entries());for(let[s,o]of n)o.agentId===e&&(this.locks.delete(s),this.emit("lock_released",{path:s,agentId:e}),this.processWaitQueue(s),t++);return t>0&&p.info("WRITE_LOCK",`Released ${t} locks for agent`,{agentId:e}),t}isLocked(e){let t=this.normalizePath(e),n=this.locks.get(t);return n?Date.now()>n.expiresAt?(this.locks.delete(t),false):true:false}getLockInfo(e){let t=this.normalizePath(e);return this.locks.get(t)}getAllLocks(){return Array.from(this.locks.values())}getLocksForAgent(e){return Array.from(this.locks.values()).filter(t=>t.agentId===e)}processWaitQueue(e){let t=this.waitQueues.get(e);if(!t||t.length===0)return;let n=t.shift();if(!n)return;let s=this.tryAcquire(e,n.agentId);n.resolve(s),t.length===0&&this.waitQueues.delete(e);}removeFromQueue(e,t){let n=this.waitQueues.get(e);if(!n)return;let s=n.findIndex(o=>o.agentId===t);s!==-1&&(clearTimeout(n[s].timeoutId),n.splice(s,1)),n.length===0&&this.waitQueues.delete(e);}normalizePath(e){return e.replace(/\/+$/,"")}startCleanup(){this.cleanupInterval=setInterval(()=>{this.cleanupExpiredLocks();},this.lockTTL/2);}cleanupExpiredLocks(){let e=Date.now(),t=Array.from(this.locks.entries());for(let[n,s]of t)e>s.expiresAt&&(p.warn("WRITE_LOCK",`Cleaning up expired lock: ${n}`,{agentId:s.agentId,expiredAt:new Date(s.expiresAt).toISOString()}),this.locks.delete(n),this.emit("lock_expired",{path:n,agentId:s.agentId}),this.processWaitQueue(n));}destroy(){this.cleanupInterval&&(clearInterval(this.cleanupInterval),this.cleanupInterval=null);let e=Array.from(this.waitQueues.values());for(let t of e)for(let n of t)clearTimeout(n.timeoutId),n.resolve({success:false});this.waitQueues.clear(),this.locks.clear(),this.removeAllListeners();}getStats(){let e=new Map,t=Array.from(this.locks.values());for(let o of t){let i=e.get(o.agentId)??0;e.set(o.agentId,i+1);}let n=0,s=Array.from(this.waitQueues.values());for(let o of s)n+=o.length;return {activeLocks:this.locks.size,waitingRequests:n,locksByAgent:e}}},Yr=null;});function jy(r,e){return {...r,...e,PATH:r.PATH||e.PATH||"",JAVA_HOME:r.JAVA_HOME||e.JAVA_HOME||"",MAVEN_HOME:r.MAVEN_HOME||e.MAVEN_HOME||"",M2_HOME:r.M2_HOME||e.M2_HOME||"",NODE_PATH:r.NODE_PATH||e.NODE_PATH||"",GOPATH:r.GOPATH||e.GOPATH||"",CARGO_HOME:r.CARGO_HOME||e.CARGO_HOME||"",RUSTUP_HOME:r.RUSTUP_HOME||e.RUSTUP_HOME||"",PYENV_ROOT:r.PYENV_ROOT||e.PYENV_ROOT||"",CONDA_PREFIX:r.CONDA_PREFIX||e.CONDA_PREFIX||""}}function Wy(r){let e={};for(let t of r.split(`
|
|
40
|
-
`)){let n=t.indexOf("=");if(n>0){let s=t.substring(0,n),o=t.substring(n+1);e[s]=o;}}return e}async function Hy(r={}){if($t)return;if(er){await er;return}let e={...process.env};if(process.platform==="win32"){$t=e;return}let t=Ve(),n=r.maxWaitMs??(t?800:5e3),s=r.background??t,o=async i=>{try{let a=process.env.SHELL||"/bin/zsh";p.debug("SHELL","Preloading shell environment asynchronously...");let l=await execa(a,["-lc","env"],{encoding:"utf8",timeout:i,reject:!1,stdin:"ignore",stdout:"pipe",stderr:"ignore"});if(l.stdout){let c=Wy(l.stdout),u=jy(c,e);return p.debug("SHELL","Preloaded shell environment successfully",{pathLength:u.PATH?.length}),u}}catch(a){p.warn("SHELL","Failed to preload shell environment",{error:a});}return null};if(s){$t=e,er=(async()=>{let i=await o(n);if(i){$t=i;return}let a=await o(5e3);a&&($t=a);})().finally(()=>{er=null;});return}er=(async()=>{$t=await o(n)??e;})().finally(()=>{er=null;}),await er;}function ki(){if($t)return $t;process.env.CLI_DEBUG==="1"&&p.warn("SHELL","\u26A0\uFE0F getShellEnv() cache miss - this should not happen! Call preloadShellEnv() during init.");let r={...process.env};if(process.platform==="win32")return $t=r,$t;try{let e=process.env.SHELL||"/bin/zsh",t=execaSync(e,["-ilc","env"],{encoding:"utf8",timeout:5e3,reject:!1});if(t.stdout){let n=Wy(t.stdout);$t=jy(n,r),process.env.CLI_DEBUG==="1"&&p.debug("SHELL","Loaded shell environment (sync fallback), PATH length:",{pathLength:$t.PATH?.length});}else $t=r;}catch(e){p.warn("SHELL","Failed to load shell environment",{error:e}),$t=r;}return $t}var $t,er,fp=Je(()=>{re();ps();$t=null,er=null;});function j_(){let r=process.platform;if(r==="darwin")return ge__default.join(Cr__default.homedir(),"Library","Application Support","Neox");if(r==="win32")return ge__default.join(process.env.APPDATA||ge__default.join(Cr__default.homedir(),"AppData","Roaming"),"Neox");{let e=process.env.XDG_CONFIG_HOME||ge__default.join(Cr__default.homedir(),".config");return ge__default.join(e,"neox")}}var qy,Cp,zy,xp,pn,Gl=Je(()=>{re();qy=j_(),Cp=ge__default.join(qy,"token-usage.json"),zy=3e3,xp=class{stats=null;directoriesReady;saveDebounceTimer=null;constructor(){this.directoriesReady=this.ensureDirectories();}async ensureDirectories(){await
|
|
41
|
-
`);}var mn=Je(()=>{});function fE(){if(so)return so;try{let r=[join(Up,"../package.json"),join(Up,"../../package.json"),join(Up,"../../../package.json")];for(let e of r)try{let t=JSON.parse(readFileSync(e,"utf-8"));if(t.version)return so=t.version,so}catch{continue}throw new Error("package.json not found")}catch{so="2.0.9";}return so}var hE,Up,so,ro,Ql=Je(()=>{hE=fileURLToPath(import.meta.url),Up=dirname(hE),so=null;ro=fE();});function oo(r,e,t=true){nc[e]||(nc[e]=0);let n=nc[e]%r.length,s=r[n];return t&&(nc[e]=(n+1)%r.length),s}function sc(r,e){if(e){let n=JSON.stringify(e);for(let s of SE)if(s.pattern.test(n))return s.status}let t=jp[r]||jp.default;return oo(t,r)}function jb(r){let e=r.toLowerCase();for(let t of kE)if(t.pattern.test(e))return t.status;return null}function rc(){let r=jp.default;return oo(r,"default")}function Wb(r,e){return r&&e!==void 0?`Streaming: ${r} (${e} chars)`:oo(_E,"streaming")}function Wp(r="default"){let e=Ub[r]||Ub.default;return oo(e,`retry_${r}`)}function Hb(){return oo(IE,"complete")}function zb(r,e,t){let n=Gb[r]||Gb.default,s=e?n.success:n.error,o=oo(s,`result_${r}_${e}`);if(e&&t!==void 0&&t>0){let i=t>=1024?`${(t/1024).toFixed(1)}KB`:`${t}B`;return `${o} (${i})`}return o}var jp,SE,kE,nc,_E,Ub,IE,Gb,Li=Je(()=>{jp={Grep:["Searching...","Scanning code...","Finding matches...","Hunting patterns..."],Glob:["Finding files...","Scanning directories...","Locating files..."],WebSearch:["Searching web...","Looking online...","Browsing..."],Read:["Reading files...","Loading content...","Reviewing code...","Examining..."],WebFetch:["Fetching page...","Loading URL...","Downloading..."],Edit:["Editing code...","Making changes...","Updating file...","Modifying..."],Write:["Writing file...","Creating file...","Generating..."],NotebookEdit:["Editing notebook...","Updating cells..."],Bash:["Running command...","Executing...","Processing...","Working..."],BashOutput:["Reading output...","Checking results..."],KillShell:["Stopping process...","Terminating..."],Task:["Spawning agent...","Delegating task...","Working in parallel..."],TodoWrite:["Updating tasks...","Planning...","Organizing..."],TodoRead:["Checking tasks...","Reviewing plan..."],AskUserQuestion:["Waiting for input...","Asking question..."],default:["Thinking...","Processing...","Analyzing...","Pondering...","Contemplating..."]},SE=[{pattern:/test|spec|__test__|\.test\.|\.spec\./i,status:"Reviewing tests..."},{pattern:/\.md$|readme|doc/i,status:"Reading docs..."},{pattern:/package\.json|tsconfig|config/i,status:"Checking config..."},{pattern:/\.css$|\.scss$|\.less$|style/i,status:"Reviewing styles..."},{pattern:/error|exception|bug|issue/i,status:"Hunting bugs..."},{pattern:/TODO|FIXME|HACK/i,status:"Finding TODOs..."},{pattern:/import|require|from\s+['"]/i,status:"Tracing imports..."},{pattern:/function|class|interface|type\s+\w+/i,status:"Analyzing code..."},{pattern:/npm install|yarn add|pnpm add/i,status:"Installing deps..."},{pattern:/npm run|yarn run|pnpm run/i,status:"Running script..."},{pattern:/npm test|jest|vitest|mocha/i,status:"Running tests..."},{pattern:/npm run build|yarn build|tsc/i,status:"Building..."},{pattern:/git\s+(status|log|diff)/i,status:"Checking git..."},{pattern:/git\s+(add|commit|push)/i,status:"Git operation..."},{pattern:/git\s+clone/i,status:"Cloning repo..."},{pattern:/docker/i,status:"Docker operation..."},{pattern:/curl|wget|fetch/i,status:"Fetching data..."}],kE=[{pattern:/fix|bug|error|issue|problem/i,status:"Debugging..."},{pattern:/refactor|clean|improve|optimize/i,status:"Refactoring..."},{pattern:/search|find|look for|where/i,status:"Searching..."},{pattern:/read|check|review|examine/i,status:"Reviewing..."},{pattern:/write|create|add|implement|build/i,status:"Implementing..."},{pattern:/test|verify|validate/i,status:"Testing..."},{pattern:/plan|design|architect/i,status:"Planning..."},{pattern:/understand|analyze|figure out/i,status:"Analyzing..."},{pattern:/delete|remove|clean up/i,status:"Cleaning up..."},{pattern:/rename|move|reorganize/i,status:"Reorganizing..."}],nc={};_E=["Streaming...","Receiving data...","Downloading...","Fetching..."],Ub={rateLimit:["Rate limited, waiting...","Cooling down...","Pausing..."],timeout:["Timed out, retrying...","Reconnecting...","Trying again..."],network:["Network issue, reconnecting...","Connection lost, retrying..."],default:["Retrying...","Trying again...","Recovering..."]},IE=["Complete!","Done!","Finished!","All done!"],Gb={Grep:{success:["Found matches!","Search complete","Results ready"],error:["No matches found","Search failed"]},Read:{success:["File loaded","Content ready","Read complete"],error:["Failed to read","File not found"]},Edit:{success:["Changes saved","File updated","Edit complete"],error:["Edit failed","Could not save"]},Write:{success:["File created","Write complete","Saved!"],error:["Write failed","Could not create"]},Bash:{success:["Command done","Executed!","Process complete"],error:["Command failed","Exit with error"]},Task:{success:["Agent complete","Task done","Subtask finished"],error:["Agent failed","Task error"]},default:{success:["Done","Complete","Finished"],error:["Failed","Error"]}};});var PE,RE,DE,NE,LE,$E,OE,Hp,Ft,Es=Je(()=>{PE={"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}}},RE={"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"}},DE={"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"}},NE={"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"}},LE={"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"}},$E={"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"}},OE={"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"}},Hp=class{models=new Map;constructor(){this.registerModels(PE),this.registerModels(RE),this.registerModels(DE),this.registerModels(NE),this.registerModels(LE),this.registerModels($E),this.registerModels(OE);}registerModels(e){for(let[t,n]of Object.entries(e))if(this.models.set(t,n),n.aliases)for(let s of n.aliases)this.models.set(s,n);}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=[],n=e.scores??{};return (n.coding??0)>=85&&t.push("coding"),(n.reasoning??0)>=85&&t.push("reasoning"),(n.vision??0)>=85&&t.push("image_analysis"),(n.creativity??0)>=85&&t.push("creative_writing"),t}},Ft=new Hp;});var wo,su,Ds,sn,ru,gP,as,x,Gt=Je(()=>{Ql();wo=ro,su=["/help","/exit","/quit","/mode","/mode ask","/mode agent","/collab","/collab single","/collab collab","/collab cooperate","/collab network","/approval","/approval on","/approval off","/notify","/sandbox","/sandbox on","/sandbox off","/sandbox status","/provider","/provider list","/provider add","/provider edit","/provider remove","/provider default","/provider use","/model","/model list","/model add","/model use","/model remove","/model default","/model config","/attach","/attachments","/thinking","/thinking on","/thinking off","/thinking status","/sessions","/session","/session-new","/session-info","/undo","/checkpoint","/checkpoints","/rollback","/session-clear","/session-export","/compact","/workspace","/workspace list","/workspace add","/workspace switch","/processes","/ps","/kill","/clear","/config-clear","/config-reset","/stats","/statistic","/context","/memory","/memory show","/memory paths","/remote","/index","/index-build","/index-status","/schema-example","/mcp","/mcp list","/mcp add","/mcp remove","/mcp connect","/mcp test"],Ds={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"},sn={openai:"OpenAI (Chat)","openai-responses":"OpenAI (Responses)",anthropic:"Anthropic","anthropic-openai":"Anthropic (OpenAI Format)",doubao:"\u8C46\u5305 (Doubao)",gemini:"Google Gemini",kimi:"Kimi (Moonshot)"},ru={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp"},gP=()=>{let r=process.env.COLORFGBG;if(r){let t=r.split(";");if(t.length>1){let n=parseInt(t[1]);return n<8||isNaN(n)}}process.env.TERM_PROGRAM;return true},as=gP(),x={primary:r=>as?Ae.cyan(r):Ae.blue(r),success:r=>as?Ae.green(r):Ae.green(r),error:r=>as?Ae.red(r):Ae.red(r),warning:r=>as?Ae.yellow(r):Ae.yellow(r),info:r=>as?Ae.blueBright(r):Ae.blue(r),dim:r=>as?Ae.gray(r):Ae.gray(r),highlight:r=>as?Ae.white.bold(r):Ae.black.bold(r),code:r=>as?Ae.magenta(r):Ae.magenta(r),text:r=>as?Ae.white(r):Ae.black(r)};});function ou(r){let t=Date.now()-r.getTime(),n=Math.floor(t/6e4),s=Math.floor(t/36e5),o=Math.floor(t/864e5);return n<1?"just now":n<60?`${n}m ago`:s<24?`${s}h ago`:o===1?"yesterday":`${o} days ago`}function uC(r){return r<1e3?`${r}ms`:r<6e4?`${(r/1e3).toFixed(1)}s`:r<36e5?`${Math.floor(r/6e4)}m ${Math.floor(r%6e4/1e3)}s`:`${Math.floor(r/36e5)}h ${Math.floor(r%36e5/6e4)}m`}function na(r){return !r||r.length===0?"":` [${r.join(", ")}]`}function dC(r){if(!r||Object.keys(r).length===0)return "";let e=Object.entries(r);if(e.length===0)return "";let t=e.slice(0,2).map(([s,o])=>{let i=String(o);return i.length>30&&(i=i.substring(0,27)+"..."),`${s}=${i}`}),n=e.length>2?`, +${e.length-2}`:"";return Ae.dim(` (${t.join(", ")}${n})`)}var pC=Je(()=>{});function mC(r,e){let t=e.trim();if(!t.startsWith("/"))return [];let n=/\s$/.test(e),s=t.split(/\s+/);if(s.length===0)return [];let o=s[0],i=s.slice(1),a=r.providerStore.getProviders().map(g=>g.id),l=r.providerSettings?.models.map(g=>g.name)||[],c=["list","add","edit","remove","default","use"],u=["list","add","use","remove","default"],d=(g,h)=>h.map(f=>`${g} ${f}`),m=()=>{if(n)return e;let g=e.lastIndexOf(" ");return g===-1?`${e} `:e.slice(0,g+1)};if(i.length===0&&!n){let g=su.filter(h=>h.startsWith(t));if(g.length>0)return g}switch(o){case "/provider":{if(i.length===0||i.length===1&&!n)return d("/provider",c);let g=i[0];if(!c.includes(g))return d("/provider",c);if(["use","edit","remove","default"].includes(g)){if(i.length===1&&!n)return a.map(f=>`/provider ${g} ${f}`);let h=m();return a.map(f=>`${h}${f}`)}return []}case "/model":{if(i.length===0||i.length===1&&!n)return d("/model",u);let g=i[0],h=i.slice(1);if(!u.includes(g))return d("/model",u);switch(g){case "list":{if(a.length===0)return [];let f=h.length===0?`${t} `:m();return a.map(b=>`${f}${b}`)}case "use":{if(h.length===0)return Array.from(new Set([...a.map(C=>`/model use ${C}`),...l.map(C=>`/model use ${C}`)]));let f=h[0],b=r.providerStore.getProvider(f);if(b){let C=m();return (b.models||[]).map(T=>`${C}${T.name}`)}if(l.length===0)return [];let v=h.length===1?`${t} `:m();return l.map(C=>`${v}${C}`)}case "remove":case "delete":case "default":{if(l.length===0)return [];let f=h.length===0?`${t} `:m();return l.map(b=>`${f}${b}`)}default:return []}}default:return []}}var gC=Je(()=>{Gt();});function fP(r){let e=r.trim();if(!e.startsWith("{")||!e.endsWith("}"))return null;try{let t=JSON.parse(e);return !t||typeof t!="object"||typeof t.type!="string"?null:t}catch{return null}}function hC(r){if(!r)return "";let e=[],t=[],n=[];if((r.pattern||r.query)&&e.push(r.pattern||r.query),Array.isArray(r.keywords)&&e.push(...r.keywords),Array.isArray(r.queries))for(let o of r.queries){if(!o?.pattern)continue;let i=(o.op||"or").toLowerCase();i==="and"?t.push(o.pattern):i==="not"?n.push(o.pattern):e.push(o.pattern);}let s=[];return e.length>0&&s.push(e.join(" OR ")),t.length>0&&s.push(`AND ${t.join(" + ")}`),n.length>0&&s.push(`NOT ${n.join(" + ")}`),s.join(" ")}function Ns(r,e,t,n){if(!r)return;let s=sc(e,t);if(r.updateStatus(s,"tool_call"),process.env.CLI_DEBUG==="1"){let i=Object.keys(t).join(",");console.error(`[DEBUG] handleToolCallStart: toolName="${e}", sourceLabel="${n}", argsKeys=${i}`);}let o=e.toLowerCase();if(o==="web_search"||o.includes("websearch")){r.addWebSearchResult({query:t.query||t.q||"",status:"searching",sourceLabel:n});return}if(o==="web_fetch"||o.includes("webfetch")){r.addWebFetchResult({url:t.url||"",status:"fetching",sourceLabel:n});return}if(o==="readfile"||o==="read"){r.addReadFileResult({filePath:t.path||t.file_path||"",startLine:t.start_line||t.offset,numLines:t.num_lines||t.limit,status:"reading",sourceLabel:n});return}if(o==="search"||o==="grep"){let i=hC(t)||t.pattern||t.query||"",a=t.mode||"content",l=Array.isArray(t.keywords)?false:Array.isArray(t.queries)?t.queries.some(u=>u?.regex!==false):true,c=t.path||t.file_path||".";a==="files"?r.addSearchFilesResult({pattern:i,path:c,status:"searching",sourceLabel:n}):r.addSearchResult({pattern:i,filePath:c,contextLines:t.context_lines,mode:a,regex:l,caseInsensitive:t.case_insensitive,status:"searching",sourceLabel:n});return}if(o==="search_files"||o==="glob"){r.addSearchFilesResult({pattern:t.pattern||"",path:t.path,status:"searching",sourceLabel:n});return}if(o==="show_tree"||o==="list_directory"||o==="smart_tree"){r.addShowTreeResult({path:t.directory||t.path||".",maxDepth:t.max_depth,mode:t.mode,status:"loading",sourceLabel:n});return}if(o==="execute_bash"||o==="execute_shell"||o==="bash"){r.addCommandExecResult({command:t.command||t.code||"",cwd:t.cwd,timeout:t.timeout,background:t.run_in_background,status:"running",sourceLabel:n});return}if(o==="execute_python"||o==="execute_js"||o==="execute_javascript"){r.addCodeExecResult({toolName:e,code:t.code,cwd:t.cwd,status:"running",sourceLabel:n});return}if(o==="debug_in_browser"){r.addBrowserDebugResult({url:t.url||"auto",status:"detecting",sourceLabel:n});return}if(o==="write_file"||o==="write"){let i=t.file_path||t.path||"",a=t.content||"";r.addWriteFileCall(i,a,n);return}if(o==="edit_file"||o==="edit"){let i=t.file_path||t.path||"",a=t.old_string||t.old||"",l=t.new_string||t.new||"",c=t.start_line;r.addEditFileCall(i,a,l,c,n);return}r.addToolCall(e,t);}function Wn(r,e,t,n,s,o){if(!r)return;let i=e.toLowerCase();if(i==="edit_file"||i==="edit"){try{let a=JSON.parse(t);a.status==="success"?r.addEditFileResult({filePath:a.file_path||s?.file_path||"",status:"completed",summary:a.summary||"Edit completed successfully",replacements:a.metadata?.replacements||1,sourceLabel:o}):a.status==="already_done"?r.addEditFileResult({filePath:a.file_path||s?.file_path||"",status:"completed",summary:a.summary||"Edit already applied",alreadyDone:!0,sourceLabel:o}):r.addEditFileResult({filePath:a.file_path||s?.file_path||"",status:"error",error:a.summary||a.error||"Edit failed",sourceLabel:o});}catch{n?r.addEditFileResult({filePath:s?.file_path||"",status:"completed",summary:"Edit completed",sourceLabel:o}):r.addEditFileResult({filePath:s?.file_path||"",status:"error",error:t,sourceLabel:o});}return}if(i==="web_search"||i.includes("websearch")){if(n)try{let a=yP(t);r.addWebSearchResult({query:s?.query||s?.q||"",results:a,status:"completed",sourceLabel:o});}catch{r.addWebSearchResult({query:s?.query||s?.q||"",status:"completed",sourceLabel:o});}else r.addWebSearchResult({query:s?.query||"",status:"error",error:t,sourceLabel:o});return}if(i==="web_fetch"||i.includes("webfetch")){n?r.addWebFetchResult({url:s?.url||"",contentLength:t.length,contentPreview:t.slice(0,500),status:"completed",sourceLabel:o}):r.addWebFetchResult({url:s?.url||"",status:"error",error:t,sourceLabel:o});return}if(i==="readfile"||i==="read"){if(n){let a=t.split(`
|
|
40
|
+
`)){let n=t.indexOf("=");if(n>0){let s=t.substring(0,n),o=t.substring(n+1);e[s]=o;}}return e}async function Hy(r={}){if($t)return;if(er){await er;return}let e={...process.env};if(process.platform==="win32"){$t=e;return}let t=Ve(),n=r.maxWaitMs??(t?800:5e3),s=r.background??t,o=async i=>{try{let a=process.env.SHELL||"/bin/zsh";p.debug("SHELL","Preloading shell environment asynchronously...");let l=await execa(a,["-lc","env"],{encoding:"utf8",timeout:i,reject:!1,stdin:"ignore",stdout:"pipe",stderr:"ignore"});if(l.stdout){let c=Wy(l.stdout),u=jy(c,e);return p.debug("SHELL","Preloaded shell environment successfully",{pathLength:u.PATH?.length}),u}}catch(a){p.warn("SHELL","Failed to preload shell environment",{error:a});}return null};if(s){$t=e,er=(async()=>{let i=await o(n);if(i){$t=i;return}let a=await o(5e3);a&&($t=a);})().finally(()=>{er=null;});return}er=(async()=>{$t=await o(n)??e;})().finally(()=>{er=null;}),await er;}function ki(){if($t)return $t;process.env.CLI_DEBUG==="1"&&p.warn("SHELL","\u26A0\uFE0F getShellEnv() cache miss - this should not happen! Call preloadShellEnv() during init.");let r={...process.env};if(process.platform==="win32")return $t=r,$t;try{let e=process.env.SHELL||"/bin/zsh",t=execaSync(e,["-ilc","env"],{encoding:"utf8",timeout:5e3,reject:!1});if(t.stdout){let n=Wy(t.stdout);$t=jy(n,r),process.env.CLI_DEBUG==="1"&&p.debug("SHELL","Loaded shell environment (sync fallback), PATH length:",{pathLength:$t.PATH?.length});}else $t=r;}catch(e){p.warn("SHELL","Failed to load shell environment",{error:e}),$t=r;}return $t}var $t,er,fp=Je(()=>{re();ps();$t=null,er=null;});function j_(){let r=process.platform;if(r==="darwin")return ge__default.join(Cr__default.homedir(),"Library","Application Support","Neox");if(r==="win32")return ge__default.join(process.env.APPDATA||ge__default.join(Cr__default.homedir(),"AppData","Roaming"),"Neox");{let e=process.env.XDG_CONFIG_HOME||ge__default.join(Cr__default.homedir(),".config");return ge__default.join(e,"neox")}}var qy,Cp,zy,xp,pn,Gl=Je(()=>{re();qy=j_(),Cp=ge__default.join(qy,"token-usage.json"),zy=3e3,xp=class{stats=null;directoriesReady;saveDebounceTimer=null;constructor(){this.directoriesReady=this.ensureDirectories();}async ensureDirectories(){await Ee__default.mkdir(qy,{recursive:true});}async ensureReady(){try{await this.directoriesReady;}catch(e){throw p.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 Ee__default.readFile(Cp,"utf-8");return this.stats=JSON.parse(e),p.info("TokenUsage","Loaded usage statistics"),this.stats}catch{return p.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=`${Cp}.${Date.now()}.tmp`;await Ee__default.writeFile(e,JSON.stringify(this.stats,null,2),"utf-8"),await Ee__default.rename(e,Cp),p.info("TokenUsage","Saved usage statistics");}catch(e){p.error("TokenUsage","Failed to save",{error:e.message});}}async recordUsage(e){let t=await this.load(),n={id:this.generateId(),...e};t.records.push(n),t.records.length>zy&&(t.records=t.records.slice(-zy)),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 s=t.providers[e.provider];s.totalRequests++,e.success?s.successRequests++:s.failedRequests++,s.totalInputTokens+=e.inputTokens,s.totalOutputTokens+=e.outputTokens,s.totalTokens+=e.totalTokens,s.totalCachedTokens+=e.cachedTokens||0,s.totalOpenaiCachedTokens+=e.openaiCachedTokens||0,s.totalAnthropicCacheReadTokens+=e.anthropicCacheReadTokens||0,s.totalAnthropicCacheCreationTokens+=e.anthropicCacheCreationTokens||0,s.totalAnthropicCacheCreation5mTokens+=e.anthropicCacheCreation5mTokens||0,s.totalAnthropicCacheCreation1hTokens+=e.anthropicCacheCreation1hTokens||0,s.lastRequestTime=e.timestamp;let o=s.avgDuration*(s.totalRequests-1)+e.duration;s.avgDuration=Math.round(o/s.totalRequests),s.models[e.model]||(s.models[e.model]={requests:0,inputTokens:0,outputTokens:0,totalTokens:0,cachedTokens:0});let i=s.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,n)=>n.lastRequestTime-t.lastRequestTime)}async getProviderRecords(e,t=100){return (await this.load()).records.filter(s=>s.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),n=t.reduce((a,l)=>a+l.totalInputTokens,0),s=t.reduce((a,l)=>a+l.totalCachedTokens,0),o=t.reduce((a,l)=>a+l.totalOpenaiCachedTokens,0),i=t.reduce((a,l)=>a+l.totalAnthropicCacheReadTokens,0);return {totalRequests:t.reduce((a,l)=>a+l.totalRequests,0),totalTokens:t.reduce((a,l)=>a+l.totalTokens,0),totalInputTokens:n,totalOutputTokens:t.reduce((a,l)=>a+l.totalOutputTokens,0),totalCachedTokens:s,totalOpenaiCachedTokens:o,totalAnthropicCacheReadTokens:i,totalAnthropicCacheCreationTokens:t.reduce((a,l)=>a+l.totalAnthropicCacheCreationTokens,0),cacheHitRate:n>0?s/n:0,providerCount:t.length,lastRequestTime:Math.max(...t.map(a=>a.lastRequestTime),0)}}async clearAll(){this.stats={version:"1.0.0",lastUpdated:Date.now(),providers:{},records:[]},await this.saveImmediate(),p.info("TokenUsage","Cleared all usage statistics");}async clearProvider(e){let t=await this.load();delete t.providers[e],t.records=t.records.filter(n=>n.provider!==e),await this.saveImmediate(),p.info("TokenUsage","Cleared usage for provider",{provider:e});}},pn=new xp;});function oe(r){process.stdout.write(r+`
|
|
41
|
+
`);}var mn=Je(()=>{});function fE(){if(so)return so;try{let r=[join(Up,"../package.json"),join(Up,"../../package.json"),join(Up,"../../../package.json")];for(let e of r)try{let t=JSON.parse(readFileSync(e,"utf-8"));if(t.version)return so=t.version,so}catch{continue}throw new Error("package.json not found")}catch{so="2.0.9";}return so}var hE,Up,so,ro,Ql=Je(()=>{hE=fileURLToPath(import.meta.url),Up=dirname(hE),so=null;ro=fE();});function oo(r,e,t=true){nc[e]||(nc[e]=0);let n=nc[e]%r.length,s=r[n];return t&&(nc[e]=(n+1)%r.length),s}function sc(r,e){if(e){let n=JSON.stringify(e);for(let s of SE)if(s.pattern.test(n))return s.status}let t=jp[r]||jp.default;return oo(t,r)}function jb(r){let e=r.toLowerCase();for(let t of kE)if(t.pattern.test(e))return t.status;return null}function rc(){let r=jp.default;return oo(r,"default")}function Wb(r,e){return r&&e!==void 0?`Streaming: ${r} (${e} chars)`:oo(_E,"streaming")}function Wp(r="default"){let e=Ub[r]||Ub.default;return oo(e,`retry_${r}`)}function Hb(){return oo(IE,"complete")}function zb(r,e,t){let n=Gb[r]||Gb.default,s=e?n.success:n.error,o=oo(s,`result_${r}_${e}`);if(e&&t!==void 0&&t>0){let i=t>=1024?`${(t/1024).toFixed(1)}KB`:`${t}B`;return `${o} (${i})`}return o}var jp,SE,kE,nc,_E,Ub,IE,Gb,Li=Je(()=>{jp={Grep:["Searching...","Scanning code...","Finding matches...","Hunting patterns..."],Glob:["Finding files...","Scanning directories...","Locating files..."],WebSearch:["Searching web...","Looking online...","Browsing..."],Read:["Reading files...","Loading content...","Reviewing code...","Examining..."],WebFetch:["Fetching page...","Loading URL...","Downloading..."],Edit:["Editing code...","Making changes...","Updating file...","Modifying..."],Write:["Writing file...","Creating file...","Generating..."],NotebookEdit:["Editing notebook...","Updating cells..."],Bash:["Running command...","Executing...","Processing...","Working..."],BashOutput:["Reading output...","Checking results..."],KillShell:["Stopping process...","Terminating..."],Task:["Spawning agent...","Delegating task...","Working in parallel..."],TodoWrite:["Updating tasks...","Planning...","Organizing..."],TodoRead:["Checking tasks...","Reviewing plan..."],AskUserQuestion:["Waiting for input...","Asking question..."],default:["Thinking...","Processing...","Analyzing...","Pondering...","Contemplating..."]},SE=[{pattern:/test|spec|__test__|\.test\.|\.spec\./i,status:"Reviewing tests..."},{pattern:/\.md$|readme|doc/i,status:"Reading docs..."},{pattern:/package\.json|tsconfig|config/i,status:"Checking config..."},{pattern:/\.css$|\.scss$|\.less$|style/i,status:"Reviewing styles..."},{pattern:/error|exception|bug|issue/i,status:"Hunting bugs..."},{pattern:/TODO|FIXME|HACK/i,status:"Finding TODOs..."},{pattern:/import|require|from\s+['"]/i,status:"Tracing imports..."},{pattern:/function|class|interface|type\s+\w+/i,status:"Analyzing code..."},{pattern:/npm install|yarn add|pnpm add/i,status:"Installing deps..."},{pattern:/npm run|yarn run|pnpm run/i,status:"Running script..."},{pattern:/npm test|jest|vitest|mocha/i,status:"Running tests..."},{pattern:/npm run build|yarn build|tsc/i,status:"Building..."},{pattern:/git\s+(status|log|diff)/i,status:"Checking git..."},{pattern:/git\s+(add|commit|push)/i,status:"Git operation..."},{pattern:/git\s+clone/i,status:"Cloning repo..."},{pattern:/docker/i,status:"Docker operation..."},{pattern:/curl|wget|fetch/i,status:"Fetching data..."}],kE=[{pattern:/fix|bug|error|issue|problem/i,status:"Debugging..."},{pattern:/refactor|clean|improve|optimize/i,status:"Refactoring..."},{pattern:/search|find|look for|where/i,status:"Searching..."},{pattern:/read|check|review|examine/i,status:"Reviewing..."},{pattern:/write|create|add|implement|build/i,status:"Implementing..."},{pattern:/test|verify|validate/i,status:"Testing..."},{pattern:/plan|design|architect/i,status:"Planning..."},{pattern:/understand|analyze|figure out/i,status:"Analyzing..."},{pattern:/delete|remove|clean up/i,status:"Cleaning up..."},{pattern:/rename|move|reorganize/i,status:"Reorganizing..."}],nc={};_E=["Streaming...","Receiving data...","Downloading...","Fetching..."],Ub={rateLimit:["Rate limited, waiting...","Cooling down...","Pausing..."],timeout:["Timed out, retrying...","Reconnecting...","Trying again..."],network:["Network issue, reconnecting...","Connection lost, retrying..."],default:["Retrying...","Trying again...","Recovering..."]},IE=["Complete!","Done!","Finished!","All done!"],Gb={Grep:{success:["Found matches!","Search complete","Results ready"],error:["No matches found","Search failed"]},Read:{success:["File loaded","Content ready","Read complete"],error:["Failed to read","File not found"]},Edit:{success:["Changes saved","File updated","Edit complete"],error:["Edit failed","Could not save"]},Write:{success:["File created","Write complete","Saved!"],error:["Write failed","Could not create"]},Bash:{success:["Command done","Executed!","Process complete"],error:["Command failed","Exit with error"]},Task:{success:["Agent complete","Task done","Subtask finished"],error:["Agent failed","Task error"]},default:{success:["Done","Complete","Finished"],error:["Failed","Error"]}};});var PE,RE,DE,NE,LE,$E,OE,Hp,Ft,Es=Je(()=>{PE={"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}}},RE={"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"}},DE={"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"}},NE={"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"}},LE={"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"}},$E={"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"}},OE={"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"}},Hp=class{models=new Map;constructor(){this.registerModels(PE),this.registerModels(RE),this.registerModels(DE),this.registerModels(NE),this.registerModels(LE),this.registerModels($E),this.registerModels(OE);}registerModels(e){for(let[t,n]of Object.entries(e))if(this.models.set(t,n),n.aliases)for(let s of n.aliases)this.models.set(s,n);}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=[],n=e.scores??{};return (n.coding??0)>=85&&t.push("coding"),(n.reasoning??0)>=85&&t.push("reasoning"),(n.vision??0)>=85&&t.push("image_analysis"),(n.creativity??0)>=85&&t.push("creative_writing"),t}},Ft=new Hp;});var wo,su,Ds,sn,ru,gP,as,x,Gt=Je(()=>{Ql();wo=ro,su=["/help","/exit","/quit","/mode","/mode ask","/mode agent","/collab","/collab single","/collab collab","/collab cooperate","/collab network","/approval","/approval on","/approval off","/notify","/sandbox","/sandbox on","/sandbox off","/sandbox status","/provider","/provider list","/provider add","/provider edit","/provider remove","/provider default","/provider use","/model","/model list","/model add","/model use","/model remove","/model default","/model config","/attach","/attachments","/thinking","/thinking on","/thinking off","/thinking status","/sessions","/session","/session-new","/session-info","/undo","/checkpoint","/checkpoints","/rollback","/session-clear","/session-export","/compact","/workspace","/workspace list","/workspace add","/workspace switch","/processes","/ps","/kill","/clear","/config-clear","/config-reset","/stats","/statistic","/context","/memory","/memory show","/memory paths","/remote","/index","/index-build","/index-status","/schema-example","/mcp","/mcp list","/mcp add","/mcp remove","/mcp connect","/mcp test"],Ds={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"},sn={openai:"OpenAI (Chat)","openai-responses":"OpenAI (Responses)",anthropic:"Anthropic","anthropic-openai":"Anthropic (OpenAI Format)",doubao:"\u8C46\u5305 (Doubao)",gemini:"Google Gemini",kimi:"Kimi (Moonshot)"},ru={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp"},gP=()=>{let r=process.env.COLORFGBG;if(r){let t=r.split(";");if(t.length>1){let n=parseInt(t[1]);return n<8||isNaN(n)}}process.env.TERM_PROGRAM;return true},as=gP(),x={primary:r=>as?ke.cyan(r):ke.blue(r),success:r=>as?ke.green(r):ke.green(r),error:r=>as?ke.red(r):ke.red(r),warning:r=>as?ke.yellow(r):ke.yellow(r),info:r=>as?ke.blueBright(r):ke.blue(r),dim:r=>as?ke.gray(r):ke.gray(r),highlight:r=>as?ke.white.bold(r):ke.black.bold(r),code:r=>as?ke.magenta(r):ke.magenta(r),text:r=>as?ke.white(r):ke.black(r)};});function ou(r){let t=Date.now()-r.getTime(),n=Math.floor(t/6e4),s=Math.floor(t/36e5),o=Math.floor(t/864e5);return n<1?"just now":n<60?`${n}m ago`:s<24?`${s}h ago`:o===1?"yesterday":`${o} days ago`}function uC(r){return r<1e3?`${r}ms`:r<6e4?`${(r/1e3).toFixed(1)}s`:r<36e5?`${Math.floor(r/6e4)}m ${Math.floor(r%6e4/1e3)}s`:`${Math.floor(r/36e5)}h ${Math.floor(r%36e5/6e4)}m`}function na(r){return !r||r.length===0?"":` [${r.join(", ")}]`}function dC(r){if(!r||Object.keys(r).length===0)return "";let e=Object.entries(r);if(e.length===0)return "";let t=e.slice(0,2).map(([s,o])=>{let i=String(o);return i.length>30&&(i=i.substring(0,27)+"..."),`${s}=${i}`}),n=e.length>2?`, +${e.length-2}`:"";return ke.dim(` (${t.join(", ")}${n})`)}var pC=Je(()=>{});function mC(r,e){let t=e.trim();if(!t.startsWith("/"))return [];let n=/\s$/.test(e),s=t.split(/\s+/);if(s.length===0)return [];let o=s[0],i=s.slice(1),a=r.providerStore.getProviders().map(g=>g.id),l=r.providerSettings?.models.map(g=>g.name)||[],c=["list","add","edit","remove","default","use"],u=["list","add","use","remove","default"],d=(g,h)=>h.map(f=>`${g} ${f}`),m=()=>{if(n)return e;let g=e.lastIndexOf(" ");return g===-1?`${e} `:e.slice(0,g+1)};if(i.length===0&&!n){let g=su.filter(h=>h.startsWith(t));if(g.length>0)return g}switch(o){case "/provider":{if(i.length===0||i.length===1&&!n)return d("/provider",c);let g=i[0];if(!c.includes(g))return d("/provider",c);if(["use","edit","remove","default"].includes(g)){if(i.length===1&&!n)return a.map(f=>`/provider ${g} ${f}`);let h=m();return a.map(f=>`${h}${f}`)}return []}case "/model":{if(i.length===0||i.length===1&&!n)return d("/model",u);let g=i[0],h=i.slice(1);if(!u.includes(g))return d("/model",u);switch(g){case "list":{if(a.length===0)return [];let f=h.length===0?`${t} `:m();return a.map(b=>`${f}${b}`)}case "use":{if(h.length===0)return Array.from(new Set([...a.map(C=>`/model use ${C}`),...l.map(C=>`/model use ${C}`)]));let f=h[0],b=r.providerStore.getProvider(f);if(b){let C=m();return (b.models||[]).map(T=>`${C}${T.name}`)}if(l.length===0)return [];let v=h.length===1?`${t} `:m();return l.map(C=>`${v}${C}`)}case "remove":case "delete":case "default":{if(l.length===0)return [];let f=h.length===0?`${t} `:m();return l.map(b=>`${f}${b}`)}default:return []}}default:return []}}var gC=Je(()=>{Gt();});function fP(r){let e=r.trim();if(!e.startsWith("{")||!e.endsWith("}"))return null;try{let t=JSON.parse(e);return !t||typeof t!="object"||typeof t.type!="string"?null:t}catch{return null}}function hC(r){if(!r)return "";let e=[],t=[],n=[];if((r.pattern||r.query)&&e.push(r.pattern||r.query),Array.isArray(r.keywords)&&e.push(...r.keywords),Array.isArray(r.queries))for(let o of r.queries){if(!o?.pattern)continue;let i=(o.op||"or").toLowerCase();i==="and"?t.push(o.pattern):i==="not"?n.push(o.pattern):e.push(o.pattern);}let s=[];return e.length>0&&s.push(e.join(" OR ")),t.length>0&&s.push(`AND ${t.join(" + ")}`),n.length>0&&s.push(`NOT ${n.join(" + ")}`),s.join(" ")}function Ns(r,e,t,n){if(!r)return;let s=sc(e,t);if(r.updateStatus(s,"tool_call"),process.env.CLI_DEBUG==="1"){let i=Object.keys(t).join(",");console.error(`[DEBUG] handleToolCallStart: toolName="${e}", sourceLabel="${n}", argsKeys=${i}`);}let o=e.toLowerCase();if(o==="web_search"||o.includes("websearch")){r.addWebSearchResult({query:t.query||t.q||"",status:"searching",sourceLabel:n});return}if(o==="web_fetch"||o.includes("webfetch")){r.addWebFetchResult({url:t.url||"",status:"fetching",sourceLabel:n});return}if(o==="readfile"||o==="read"){r.addReadFileResult({filePath:t.path||t.file_path||"",startLine:t.start_line||t.offset,numLines:t.num_lines||t.limit,status:"reading",sourceLabel:n});return}if(o==="search"||o==="grep"){let i=hC(t)||t.pattern||t.query||"",a=t.mode||"content",l=Array.isArray(t.keywords)?false:Array.isArray(t.queries)?t.queries.some(u=>u?.regex!==false):true,c=t.path||t.file_path||".";a==="files"?r.addSearchFilesResult({pattern:i,path:c,status:"searching",sourceLabel:n}):r.addSearchResult({pattern:i,filePath:c,contextLines:t.context_lines,mode:a,regex:l,caseInsensitive:t.case_insensitive,status:"searching",sourceLabel:n});return}if(o==="search_files"||o==="glob"){r.addSearchFilesResult({pattern:t.pattern||"",path:t.path,status:"searching",sourceLabel:n});return}if(o==="show_tree"||o==="list_directory"||o==="smart_tree"){r.addShowTreeResult({path:t.directory||t.path||".",maxDepth:t.max_depth,mode:t.mode,status:"loading",sourceLabel:n});return}if(o==="execute_bash"||o==="execute_shell"||o==="bash"){r.addCommandExecResult({command:t.command||t.code||"",cwd:t.cwd,timeout:t.timeout,background:t.run_in_background,status:"running",sourceLabel:n});return}if(o==="execute_python"||o==="execute_js"||o==="execute_javascript"){r.addCodeExecResult({toolName:e,code:t.code,cwd:t.cwd,status:"running",sourceLabel:n});return}if(o==="debug_in_browser"){r.addBrowserDebugResult({url:t.url||"auto",status:"detecting",sourceLabel:n});return}if(o==="write_file"||o==="write"){let i=t.file_path||t.path||"",a=t.content||"";r.addWriteFileCall(i,a,n);return}if(o==="edit_file"||o==="edit"){let i=t.file_path||t.path||"",a=t.old_string||t.old||"",l=t.new_string||t.new||"",c=t.start_line;r.addEditFileCall(i,a,l,c,n);return}r.addToolCall(e,t);}function Wn(r,e,t,n,s,o){if(!r)return;let i=e.toLowerCase();if(i==="edit_file"||i==="edit"){try{let a=JSON.parse(t);a.status==="success"?r.addEditFileResult({filePath:a.file_path||s?.file_path||"",status:"completed",summary:a.summary||"Edit completed successfully",replacements:a.metadata?.replacements||1,sourceLabel:o}):a.status==="already_done"?r.addEditFileResult({filePath:a.file_path||s?.file_path||"",status:"completed",summary:a.summary||"Edit already applied",alreadyDone:!0,sourceLabel:o}):r.addEditFileResult({filePath:a.file_path||s?.file_path||"",status:"error",error:a.summary||a.error||"Edit failed",sourceLabel:o});}catch{n?r.addEditFileResult({filePath:s?.file_path||"",status:"completed",summary:"Edit completed",sourceLabel:o}):r.addEditFileResult({filePath:s?.file_path||"",status:"error",error:t,sourceLabel:o});}return}if(i==="web_search"||i.includes("websearch")){if(n)try{let a=yP(t);r.addWebSearchResult({query:s?.query||s?.q||"",results:a,status:"completed",sourceLabel:o});}catch{r.addWebSearchResult({query:s?.query||s?.q||"",status:"completed",sourceLabel:o});}else r.addWebSearchResult({query:s?.query||"",status:"error",error:t,sourceLabel:o});return}if(i==="web_fetch"||i.includes("webfetch")){n?r.addWebFetchResult({url:s?.url||"",contentLength:t.length,contentPreview:t.slice(0,500),status:"completed",sourceLabel:o}):r.addWebFetchResult({url:s?.url||"",status:"error",error:t,sourceLabel:o});return}if(i==="readfile"||i==="read"){if(n){let a=t.split(`
|
|
42
42
|
`);r.addReadFileResult({filePath:s?.path||s?.file_path||"",totalLines:a.length,fileSize:t.length>=1024?`${(t.length/1024).toFixed(1)}KB`:`${t.length} chars`,preview:t.slice(0,1e3),status:"completed",sourceLabel:o});}else r.addReadFileResult({filePath:s?.path||s?.file_path||"",status:"error",error:t,sourceLabel:o});return}if(i==="search"){let a=fP(t),l=a?.content&&typeof a.content=="string"?a.content:t,c=a?.metadata,u=s?.mode==="files"||c?.mode==="files",d=hC(s)||s?.pattern||s?.query||"",m=c?.mode||s?.mode||(u?"files":"content"),g=c?.regex??(Array.isArray(s?.keywords)?false:Array.isArray(s?.queries)?s.queries.some(v=>v?.regex!==false):true),h=s?.case_insensitive,f=s?.path||s?.file_path||c?.path||"",b=c?.command;if(n)if(u){let v=c?.files||l.split(`
|
|
43
43
|
`).filter(C=>C.trim().startsWith(" ")).map(C=>C.trim());r.addSearchFilesResult({pattern:d,path:f,fileCount:v.length,files:v.slice(0,30),status:"completed",mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:b,sourceLabel:o});}else {let v=bP(l),C=vP(l),T=C.entries.length>0?CP(C.entries):void 0;r.addSearchResult({pattern:d,filePath:f,matchCount:C.matchCount??v.length,details:T,status:"completed",mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:b,sourceLabel:o});}else u?r.addSearchFilesResult({pattern:d,path:f,status:"error",error:l,mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:b,sourceLabel:o}):r.addSearchResult({pattern:d,filePath:f,status:"error",error:l,mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:b,sourceLabel:o});return}if(i==="search_files"||i==="glob"){if(n){let a=t.split(`
|
|
44
44
|
`).filter(l=>l.trim());r.addSearchFilesResult({pattern:s?.pattern||"",path:s?.path,fileCount:a.length,files:a.slice(0,30),status:"completed",sourceLabel:o});}else r.addSearchFilesResult({pattern:s?.pattern||"",status:"error",error:t,sourceLabel:o});return}if(i==="show_tree"||i==="list_directory"||i==="smart_tree"){n?r.addShowTreeResult({path:s?.directory||s?.path||".",mode:s?.mode,maxDepth:s?.max_depth,content:t,totalChars:t.length,status:"completed",sourceLabel:o}):r.addShowTreeResult({path:s?.directory||s?.path||".",mode:s?.mode,maxDepth:s?.max_depth,status:"error",error:t,sourceLabel:o});return}if(i==="execute_bash"||i==="execute_shell"||i==="bash"){n?r.addCommandExecResult({command:s?.command||s?.code||"",cwd:s?.cwd,output:t,exitCode:0,status:"completed",sourceLabel:o}):r.addCommandExecResult({command:s?.command||s?.code||"",cwd:s?.cwd,output:t,status:"error",error:t,sourceLabel:o});return}if(i==="execute_python"||i==="execute_js"||i==="execute_javascript"){n?r.addCodeExecResult({toolName:e,code:s?.code,output:t,exitCode:0,status:"completed",sourceLabel:o}):r.addCodeExecResult({toolName:e,code:s?.code,status:"error",error:t,sourceLabel:o});return}if(i==="debug_in_browser"){if(n)try{let a=JSON.parse(t);r.addBrowserDebugResult({url:a.url||"unknown",status:a.success?"completed":"error",summary:a.summary,loadTime:a.load_time,consoleLogs:a.console_logs?.length||0,errors:a.errors?.map(l=>({type:l.type,message:l.message,file:l.file,line:l.line}))||[],networkRequests:a.network_requests?.length||0,performance:a.performance,error:a.error,sourceLabel:o});}catch{r.addToolResult(t,false);}else r.addBrowserDebugResult({url:"unknown",status:"error",error:t,sourceLabel:o});return}n?r.addToolResult(t,false):r.addToolError(e,t);}function yP(r){let e=[];try{let s=JSON.parse(r);if(Array.isArray(s))return s.map(o=>({title:o.title||o.name||"",url:o.url||o.link||"",description:o.description||o.snippet||"",hostname:o.hostname||(o.url?new URL(o.url).hostname:"")}))}catch{}let t=r.split(`
|
|
@@ -177,9 +177,9 @@ $ npm install --save-dev react-devtools-core
|
|
|
177
177
|
`);else throw r}var Ng=(r,e)=>{if(r===e)return;if(!r)return e;let t={},n=false;for(let s of Object.keys(r))(!e||!Object.hasOwn(e,s))&&(t[s]=void 0,n=true);if(e)for(let s of Object.keys(e))e[s]!==r[s]&&(t[s]=e[s],n=true);return n?t:void 0},Lg=r=>{r?.unsetMeasureFunc(),r?.freeRecursive();},Ta=NoEventPriority,Uu,En=tw({getRootHostContext:()=>({isInsideText:false}),prepareForCommit:()=>null,preparePortalMount:()=>null,clearContainer:()=>false,resetAfterCommit(r){if(rn.env.NEOX_INK_DEBUG==="1"&&rn.stderr.write(`[RECONCILER] \u{1F504} Commit completed, triggering render
|
|
178
178
|
`),typeof r.onComputeLayout=="function"&&r.onComputeLayout(),r.isStaticDirty){r.isStaticDirty=false,typeof r.onImmediateRender=="function"&&(rn.env.NEOX_INK_DEBUG==="1"&&rn.stderr.write(`[RECONCILER] \u{1F3C3} Static dirty, calling onImmediateRender
|
|
179
179
|
`),r.onImmediateRender());return}typeof r.onRender=="function"&&(rn.env.NEOX_INK_DEBUG==="1"&&rn.stderr.write(`[RECONCILER] \u{1F3A8} Calling onRender
|
|
180
|
-
`),r.onRender());},getChildHostContext(r,e){let t=r.isInsideText,n=e==="ink-text"||e==="ink-virtual-text";return t===n?r:{isInsideText:n}},shouldSetTextContent:()=>false,createInstance(r,e,t,n){if(n.isInsideText&&r==="ink-box")throw new Error("<Box> can\u2019t be nested inside <Text> component");let s=r==="ink-text"&&n.isInsideText?"ink-virtual-text":r,o=Ca(s);for(let[i,a]of Object.entries(e))if(i!=="children"){if(i==="style"){Bu(o,a),o.yogaNode&&Fu(o.yogaNode,a);continue}if(i==="internal_transform"){o.internal_transform=a;continue}if(i==="internal_static"){Uu=t,o.internal_static=true,t.isStaticDirty=true,t.staticNode=o;continue}Ou(o,i,a);}return o},createTextInstance(r,e,t){if(!t.isInsideText)throw new Error(`Text string "${r}" must be rendered inside <Text> component`);return Ag(r)},resetTextContent(){},hideTextInstance(r){Ro(r,"");},unhideTextInstance(r,e){Ro(r,e);},getPublicInstance:r=>r,hideInstance(r){r.yogaNode?.setDisplay(fe.DISPLAY_NONE);},unhideInstance(r){r.yogaNode?.setDisplay(fe.DISPLAY_FLEX);},appendInitialChild:xa,appendChild:xa,insertBefore:$u,finalizeInitialChildren(){return false},isPrimaryRenderer:true,supportsMutation:true,supportsPersistence:false,supportsHydration:false,scheduleTimeout:setTimeout,cancelTimeout:clearTimeout,noTimeout:-1,beforeActiveInstanceBlur(){},afterActiveInstanceBlur(){},detachDeletedInstance(){},getInstanceFromNode:()=>null,prepareScopeUpdate(){},getInstanceFromScope:()=>null,appendChildToContainer:xa,insertInContainerBefore:$u,removeChildFromContainer(r,e){Po(r,e),Lg(e.yogaNode);},commitUpdate(r,e,t,n){Uu&&r.internal_static&&(Uu.isStaticDirty=true);let s=Ng(t,n),o=Ng(t.style,n.style);if(!(!s&&!o)){if(s)for(let[i,a]of Object.entries(s)){if(i==="style"){Bu(r,a);continue}if(i==="internal_transform"){r.internal_transform=a;continue}if(i==="internal_static"){r.internal_static=true;continue}Ou(r,i,a);}o&&r.yogaNode&&Fu(r.yogaNode,o);}},commitTextUpdate(r,e,t){Ro(r,t);},removeChild(r,e){Po(r,e),Lg(e.yogaNode);},setCurrentUpdatePriority(r){Ta=r;},getCurrentUpdatePriority:()=>Ta,resolveUpdatePriority(){return Ta!==NoEventPriority?Ta:DefaultEventPriority},maySuspendCommit(){return false},NotPendingTransition:void 0,HostTransitionContext:createContext(null),resetFormInstance(){},requestPostPaintCallback(){},shouldAttemptEagerTransition(){return false},trackSchedulerEvent(){},resolveEventType(){return null},resolveEventTimeStamp(){return -1.1},preloadInstance(){return true},startSuspendingCommit(){},suspendInstance(){},waitForCommitToBeReady(){return null}});function Gu(r,e=1,t={}){let{indent:n=" ",includeEmptyLines:s=false}=t;if(typeof r!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof r}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(e<0)throw new RangeError(`Expected \`count\` to be at least 0, got \`${e}\``);if(typeof n!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof n}\``);if(e===0)return r;let o=s?/^/gm:/^(?!\s*$)/gm;return r.replace(o,n.repeat(e))}var rw=r=>r.getComputedWidth()-r.getComputedPadding(fe.EDGE_LEFT)-r.getComputedPadding(fe.EDGE_RIGHT)-r.getComputedBorder(fe.EDGE_LEFT)-r.getComputedBorder(fe.EDGE_RIGHT),Og=rw;var Gg=wg(Ug());var iw=/^rgb\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,aw=/^ansi256\(\s?(\d+)\s?\)$/,lw=r=>r in
|
|
181
|
-
`).repeat(M);g&&(D=
|
|
182
|
-
`).repeat(M);h&&(R=
|
|
180
|
+
`),r.onRender());},getChildHostContext(r,e){let t=r.isInsideText,n=e==="ink-text"||e==="ink-virtual-text";return t===n?r:{isInsideText:n}},shouldSetTextContent:()=>false,createInstance(r,e,t,n){if(n.isInsideText&&r==="ink-box")throw new Error("<Box> can\u2019t be nested inside <Text> component");let s=r==="ink-text"&&n.isInsideText?"ink-virtual-text":r,o=Ca(s);for(let[i,a]of Object.entries(e))if(i!=="children"){if(i==="style"){Bu(o,a),o.yogaNode&&Fu(o.yogaNode,a);continue}if(i==="internal_transform"){o.internal_transform=a;continue}if(i==="internal_static"){Uu=t,o.internal_static=true,t.isStaticDirty=true,t.staticNode=o;continue}Ou(o,i,a);}return o},createTextInstance(r,e,t){if(!t.isInsideText)throw new Error(`Text string "${r}" must be rendered inside <Text> component`);return Ag(r)},resetTextContent(){},hideTextInstance(r){Ro(r,"");},unhideTextInstance(r,e){Ro(r,e);},getPublicInstance:r=>r,hideInstance(r){r.yogaNode?.setDisplay(fe.DISPLAY_NONE);},unhideInstance(r){r.yogaNode?.setDisplay(fe.DISPLAY_FLEX);},appendInitialChild:xa,appendChild:xa,insertBefore:$u,finalizeInitialChildren(){return false},isPrimaryRenderer:true,supportsMutation:true,supportsPersistence:false,supportsHydration:false,scheduleTimeout:setTimeout,cancelTimeout:clearTimeout,noTimeout:-1,beforeActiveInstanceBlur(){},afterActiveInstanceBlur(){},detachDeletedInstance(){},getInstanceFromNode:()=>null,prepareScopeUpdate(){},getInstanceFromScope:()=>null,appendChildToContainer:xa,insertInContainerBefore:$u,removeChildFromContainer(r,e){Po(r,e),Lg(e.yogaNode);},commitUpdate(r,e,t,n){Uu&&r.internal_static&&(Uu.isStaticDirty=true);let s=Ng(t,n),o=Ng(t.style,n.style);if(!(!s&&!o)){if(s)for(let[i,a]of Object.entries(s)){if(i==="style"){Bu(r,a);continue}if(i==="internal_transform"){r.internal_transform=a;continue}if(i==="internal_static"){r.internal_static=true;continue}Ou(r,i,a);}o&&r.yogaNode&&Fu(r.yogaNode,o);}},commitTextUpdate(r,e,t){Ro(r,t);},removeChild(r,e){Po(r,e),Lg(e.yogaNode);},setCurrentUpdatePriority(r){Ta=r;},getCurrentUpdatePriority:()=>Ta,resolveUpdatePriority(){return Ta!==NoEventPriority?Ta:DefaultEventPriority},maySuspendCommit(){return false},NotPendingTransition:void 0,HostTransitionContext:createContext(null),resetFormInstance(){},requestPostPaintCallback(){},shouldAttemptEagerTransition(){return false},trackSchedulerEvent(){},resolveEventType(){return null},resolveEventTimeStamp(){return -1.1},preloadInstance(){return true},startSuspendingCommit(){},suspendInstance(){},waitForCommitToBeReady(){return null}});function Gu(r,e=1,t={}){let{indent:n=" ",includeEmptyLines:s=false}=t;if(typeof r!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof r}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(e<0)throw new RangeError(`Expected \`count\` to be at least 0, got \`${e}\``);if(typeof n!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof n}\``);if(e===0)return r;let o=s?/^/gm:/^(?!\s*$)/gm;return r.replace(o,n.repeat(e))}var rw=r=>r.getComputedWidth()-r.getComputedPadding(fe.EDGE_LEFT)-r.getComputedPadding(fe.EDGE_RIGHT)-r.getComputedBorder(fe.EDGE_LEFT)-r.getComputedBorder(fe.EDGE_RIGHT),Og=rw;var Gg=wg(Ug());var iw=/^rgb\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,aw=/^ansi256\(\s?(\d+)\s?\)$/,lw=r=>r in ke,cw=(r,e,t)=>{if(!e)return r;if(lw(e)){if(t==="foreground")return ke[e](r);let n=`bg${e[0].toUpperCase()+e.slice(1)}`;return ke[n](r)}if(e.startsWith("#"))return t==="foreground"?ke.hex(e)(r):ke.bgHex(e)(r);if(e.startsWith("ansi256")){let n=aw.exec(e);if(!n)return r;let s=Number(n[1]);return t==="foreground"?ke.ansi256(s)(r):ke.bgAnsi256(s)(r)}if(e.startsWith("rgb")){let n=iw.exec(e);if(!n)return r;let s=Number(n[1]),o=Number(n[2]),i=Number(n[3]);return t==="foreground"?ke.rgb(s,o,i)(r):ke.bgRgb(s,o,i)(r)}return r},An=cw;var uw=(r,e,t,n)=>{if(t.style.borderStyle){let s=t.yogaNode.getComputedWidth(),o=t.yogaNode.getComputedHeight(),i=typeof t.style.borderStyle=="string"?Gg.default[t.style.borderStyle]:t.style.borderStyle,a=t.style.borderTopColor??t.style.borderColor,l=t.style.borderBottomColor??t.style.borderColor,c=t.style.borderLeftColor??t.style.borderColor,u=t.style.borderRightColor??t.style.borderColor,d=t.style.borderTopDimColor??t.style.borderDimColor,m=t.style.borderBottomDimColor??t.style.borderDimColor,g=t.style.borderLeftDimColor??t.style.borderDimColor,h=t.style.borderRightDimColor??t.style.borderDimColor,f=t.style.borderTop!==false,b=t.style.borderBottom!==false,v=t.style.borderLeft!==false,C=t.style.borderRight!==false,T=s-(v?1:0)-(C?1:0),I=f?An((v?i.topLeft:"")+i.top.repeat(T)+(C?i.topRight:""),a,"foreground"):void 0;f&&d&&(I=ke.dim(I));let M=o;f&&(M-=1),b&&(M-=1);let D=(An(i.left,c,"foreground")+`
|
|
181
|
+
`).repeat(M);g&&(D=ke.dim(D));let R=(An(i.right,u,"foreground")+`
|
|
182
|
+
`).repeat(M);h&&(R=ke.dim(R));let L=b?An((v?i.bottomLeft:"")+i.bottom.repeat(T)+(C?i.bottomRight:""),l,"foreground"):void 0;b&&m&&(L=ke.dim(L));let S=f?1:0;I&&n.write(r,e,I,{transformers:[]}),v&&n.write(r,e+S,D,{transformers:[]}),C&&n.write(r+s-1,e+S,R,{transformers:[]}),L&&n.write(r,e+o-1,L,{transformers:[]});}},jg=uw;var dw=(r,e,t,n)=>{if(!t.style.backgroundColor)return;let s=t.yogaNode.getComputedWidth(),o=t.yogaNode.getComputedHeight(),i=t.style.borderStyle&&t.style.borderLeft!==false?1:0,a=t.style.borderStyle&&t.style.borderRight!==false?1:0,l=t.style.borderStyle&&t.style.borderTop!==false?1:0,c=t.style.borderStyle&&t.style.borderBottom!==false?1:0,u=s-i-a,d=o-l-c;if(!(u>0&&d>0))return;let m=An(" ".repeat(u),t.style.backgroundColor,"background");for(let g=0;g<d;g++)n.write(r+i,e+l+g,m,{transformers:[]});},Wg=dw;var mw=(r,e)=>{let t=r.childNodes[0]?.yogaNode;if(t){let n=t.getComputedLeft(),s=t.getComputedTop();e=`
|
|
183
183
|
`.repeat(s)+Gu(e,n);}return e},_a=(r,e={})=>{if(e.skipStaticElements&&r.internal_static||r.yogaNode?.getDisplay()===fe.DISPLAY_NONE)return "";let t="";if(r.nodeName==="ink-text")t=Mo(r);else if(r.nodeName==="ink-box"||r.nodeName==="ink-root"){let n=r.style.flexDirection==="row"||r.style.flexDirection==="row-reverse"?" ":`
|
|
184
184
|
`;t=(r.style.flexDirection==="row-reverse"||r.style.flexDirection==="column-reverse"?[...r.childNodes].reverse():[...r.childNodes]).map(o=>_a(o,{parentRole:r.internal_accessibility?.role,skipStaticElements:e.skipStaticElements})).filter(Boolean).join(n);}if(r.internal_accessibility){let{role:n,state:s}=r.internal_accessibility;if(s){let i=Object.keys(s).filter(a=>s[a]).join(", ");i&&(t=`(${i}) ${t}`);}n&&n!==e.parentRole&&(t=`${n}: ${t}`);}return t},Hg=(r,e,t)=>{let{offsetX:n=0,offsetY:s=0,transformers:o=[],skipStaticElements:i}=t;if(i&&r.internal_static)return;let{yogaNode:a}=r;if(a){if(a.getDisplay()===fe.DISPLAY_NONE)return;let l=n+a.getComputedLeft(),c=s+a.getComputedTop(),u=o;if(typeof r.internal_transform=="function"&&(u=[r.internal_transform,...o]),r.nodeName==="ink-text"){let m=Mo(r);if(m.length>0){let g=Bx(m),h=Og(a);if(g>h){let f=r.style.textWrap??"wrap";m=va(m,h,f);}m=mw(r,m),e.write(l,c,m,{transformers:u});}return}let d=false;if(r.nodeName==="ink-box"){Wg(l,c,r,e),jg(l,c,r,e);let m=r.style.overflowX==="hidden"||r.style.overflow==="hidden",g=r.style.overflowY==="hidden"||r.style.overflow==="hidden";if(m||g){let h=m?l+a.getComputedBorder(fe.EDGE_LEFT):void 0,f=m?l+a.getComputedWidth()-a.getComputedBorder(fe.EDGE_RIGHT):void 0,b=g?c+a.getComputedBorder(fe.EDGE_TOP):void 0,v=g?c+a.getComputedHeight()-a.getComputedBorder(fe.EDGE_BOTTOM):void 0;e.clip({x1:h,x2:f,y1:b,y2:v}),d=true;}}if(r.nodeName==="ink-root"||r.nodeName==="ink-box"){for(let m of r.childNodes)Hg(m,e,{offsetX:l,offsetY:c,transformers:u,skipStaticElements:i});d&&e.unclip();}}},Wu=Hg;var fr=class{width;height;operations=[];constructor(e){let{width:t,height:n}=e;this.width=t,this.height=n;}write(e,t,n,s){let{transformers:o}=s;n&&this.operations.push({type:"write",x:e,y:t,text:n,transformers:o});}clip(e){this.operations.push({type:"clip",clip:e});}unclip(){this.operations.push({type:"unclip"});}get(){let e=[];for(let s=0;s<this.height;s++){let o=[];for(let i=0;i<this.width;i++)o.push({type:"char",value:" ",fullWidth:false,styles:[]});e.push(o);}let t=[];for(let s of this.operations)if(s.type==="clip"&&t.push(s.clip),s.type==="unclip"&&t.pop(),s.type==="write"){let{text:o,transformers:i}=s,{x:a,y:l}=s,c=o.split(`
|
|
185
185
|
`),u=t.at(-1);if(u){let m=typeof u?.x1=="number"&&typeof u?.x2=="number",g=typeof u?.y1=="number"&&typeof u?.y2=="number";if(m){let h=Bx(o);if(a+h<u.x1||a>u.x2)continue}if(g){let h=c.length;if(l+h<u.y1||l>u.y2)continue}if(m&&(c=c.map(h=>{let f=a<u.x1?u.x1-a:0,b=ya(h),v=a+b>u.x2?u.x2-a:b;return cs(h,f,v)}),a<u.x1&&(a=u.x1)),g){let h=l<u.y1?u.y1-l:0,f=c.length,b=l+f>u.y2?u.y2-l:f;c=c.slice(h,b),l<u.y1&&(l=u.y1);}}let d=0;for(let[m,g]of c.entries()){let h=e[l+d];if(!h)continue;for(let v of i)g=v(g,m);let f=styledCharsFromTokens(tokenize(g)),b=a;for(let v of f){h[b]=v;let C=Math.max(1,ya(v.value));if(C>1)for(let T=1;T<C;T++)h[b+T]={type:"char",value:"",fullWidth:false,styles:v.styles};b+=C;}d++;}}return {output:e.map(s=>{let o=s.filter(i=>i!==void 0);return styledCharsToString(o).trimEnd()}).join(`
|
|
@@ -200,7 +200,7 @@ $ npm install --save-dev react-devtools-core
|
|
|
200
200
|
`),this.flushFrame([{id:e,priority:n,callback:t,timestamp:s}]);return}let o=this.pendingRequests.get(e);if(o){n<o.priority?this.pendingRequests.set(e,{id:e,priority:n,callback:t,timestamp:s}):this.stats.droppedRequests++;return}this.pendingRequests.set(e,{id:e,priority:n,callback:t,timestamp:s}),this.frameScheduled||this.scheduleNextFrame();}scheduleNextFrame(){this.frameScheduled=true;let t=Date.now()-this.lastFrameTime,n=Math.max(0,this.frameInterval-t);setTimeout(()=>{this.executeFrame();},n);}executeFrame(){let e=Date.now(),t=Array.from(this.pendingRequests.values());this.pendingRequests.clear(),this.frameScheduled=false,t.sort((s,o)=>s.priority-o.priority),this.flushFrame(t),this.lastFrameTime=e,this.stats.totalFrames++;let n=Date.now()-e;this.stats.averageFrameTime=(this.stats.averageFrameTime*(this.stats.totalFrames-1)+n)/this.stats.totalFrames,process.env.FRAME_SCHEDULER_DEBUG==="1"&&process.stderr.write(`[FRAME_SCHEDULER] Frame #${this.stats.totalFrames}: ${t.length} requests, ${n.toFixed(2)}ms
|
|
201
201
|
`);}flushFrame(e){e.length!==0&&(process.env.FRAME_SCHEDULER_DEBUG==="1"&&process.stderr.write(`[FRAME_SCHEDULER] \u{1F3A8} Flushing ${e.length} render callback(s)
|
|
202
202
|
`),e.forEach(t=>{try{t.callback();}catch(n){process.stderr.write(`[FRAME_SCHEDULER] Render callback error: ${n}
|
|
203
|
-
`);}}));}getStats(){return {...this.stats}}resetStats(){this.stats={totalFrames:0,droppedRequests:0,averageFrameTime:0};}},qu=null;function No(){return qu||(qu=new Da),qu}re();var Ku="\x1B[200~",Zg="\x1B[201~",Dw=50,Na=class{buffer="";inPaste=false;escapeTimeout=null;parse(e,t){for(ae("PASTE_PARSER",`Received ${e.length} bytes: ${JSON.stringify(e)}`),this.buffer+=e;this.buffer.length>0;){if(this.inPaste){let l=this.buffer.indexOf(Zg);if(l>=0){let c=this.buffer.slice(0,l);this.buffer=this.buffer.slice(l+Zg.length),ae("PASTE_PARSER",`\u{1F4CB} Paste detected: ${c.length} chars`),t(c,true),this.inPaste=false;continue}else break}if(this.buffer.indexOf(Ku)===0){this.escapeTimeout&&clearTimeout(this.escapeTimeout),ae("PASTE_PARSER","\u{1F4E5} Paste start detected"),this.inPaste=true,this.buffer=this.buffer.slice(Ku.length);continue}if(this.buffer.startsWith("\x1B")){if(this.escapeTimeout&&clearTimeout(this.escapeTimeout),this.buffer.length===1){this.escapeTimeout=setTimeout(()=>{this.buffer==="\x1B"&&(ae("PASTE_PARSER","\u2328\uFE0F ESC key detected"),t("\x1B",false),this.buffer="");},Dw);break}if(this.isCompleteEscapeSequence(this.buffer)){ae("PASTE_PARSER",`\u2328\uFE0F ESC sequence: ${JSON.stringify(this.buffer)}`),t(this.buffer,false),this.buffer="";continue}if(this.buffer.length>20){ae("PASTE_PARSER",`\u26A0\uFE0F Invalid ESC sequence (too long): ${JSON.stringify(this.buffer)}`),t(this.buffer,false),this.buffer="";continue}break}let s=this.buffer.length,o=this.buffer.indexOf("\x1B"),i=this.buffer.indexOf(Ku);o>0&&(s=Math.min(s,o)),i>0&&(s=Math.min(s,i));let a=this.buffer.slice(0,s);if(this.buffer=this.buffer.slice(s),a.length>0&&(ae("PASTE_PARSER",`\u2328\uFE0F Text: ${JSON.stringify(a)} (${a.length} chars)`),t(a,false)),a.length===0&&this.buffer.length>0)break}}isCompleteEscapeSequence(e){return e.startsWith("\x1B[")?/[A-Za-z~^$u]$/.test(e):e.startsWith("\x1BO")?/[A-Za-z]$/.test(e):e.startsWith("\x1B]")?e.endsWith("\x07")||e.endsWith("\x1B\\"):e.length===2}dispose(){this.escapeTimeout&&(clearTimeout(this.escapeTimeout),this.escapeTimeout=null),this.buffer="",this.inPaste=false,ae("PASTE_PARSER","\u{1F5D1}\uFE0F Disposed");}};re();var Nw=(r,e=2)=>r.replace(/^\t+/gm,t=>" ".repeat(t.length*e)),eh=Nw;var Lw=(r,e)=>{let t=[],n=r-e,s=r+e;for(let o=n;o<=s;o++)t.push(o);return t},$w=(r,e,t={})=>{var n;if(typeof r!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");let s=eh(r).split(/\r?\n/);if(!(e>s.length))return Lw(e,(n=t.around)!==null&&n!==void 0?n:3).filter(o=>s[o-1]!==void 0).map(o=>({line:o,value:s[o-1]}))},th=$w;var us=createContext({isScreenReaderEnabled:false});var La=createContext(void 0);var nh=forwardRef(({children:r,backgroundColor:e,"aria-label":t,"aria-hidden":n,"aria-role":s,"aria-state":o,...i},a)=>{let{isScreenReaderEnabled:l}=useContext(us),c=t?E.createElement("ink-text",null,t):void 0;if(l&&n)return null;let u=E.createElement("ink-box",{ref:a,style:{flexWrap:"nowrap",flexDirection:"row",flexGrow:0,flexShrink:1,...i,backgroundColor:e,overflowX:i.overflowX??i.overflow??"visible",overflowY:i.overflowY??i.overflow??"visible"},internal_accessibility:{role:s,state:o}},l&&c?c:r);return e?E.createElement(La.Provider,{value:e},u):u});nh.displayName="Box";var _=nh;function y({color:r,backgroundColor:e,dimColor:t=false,bold:n=false,italic:s=false,underline:o=false,strikethrough:i=false,inverse:a=false,wrap:l="wrap",children:c,"aria-label":u,"aria-hidden":d=false}){let{isScreenReaderEnabled:m}=useContext(us),g=useContext(La),h=m&&u?u:c;if(h==null)return null;let f=b=>{t&&(b=
|
|
203
|
+
`);}}));}getStats(){return {...this.stats}}resetStats(){this.stats={totalFrames:0,droppedRequests:0,averageFrameTime:0};}},qu=null;function No(){return qu||(qu=new Da),qu}re();var Ku="\x1B[200~",Zg="\x1B[201~",Dw=50,Na=class{buffer="";inPaste=false;escapeTimeout=null;parse(e,t){for(ae("PASTE_PARSER",`Received ${e.length} bytes: ${JSON.stringify(e)}`),this.buffer+=e;this.buffer.length>0;){if(this.inPaste){let l=this.buffer.indexOf(Zg);if(l>=0){let c=this.buffer.slice(0,l);this.buffer=this.buffer.slice(l+Zg.length),ae("PASTE_PARSER",`\u{1F4CB} Paste detected: ${c.length} chars`),t(c,true),this.inPaste=false;continue}else break}if(this.buffer.indexOf(Ku)===0){this.escapeTimeout&&clearTimeout(this.escapeTimeout),ae("PASTE_PARSER","\u{1F4E5} Paste start detected"),this.inPaste=true,this.buffer=this.buffer.slice(Ku.length);continue}if(this.buffer.startsWith("\x1B")){if(this.escapeTimeout&&clearTimeout(this.escapeTimeout),this.buffer.length===1){this.escapeTimeout=setTimeout(()=>{this.buffer==="\x1B"&&(ae("PASTE_PARSER","\u2328\uFE0F ESC key detected"),t("\x1B",false),this.buffer="");},Dw);break}if(this.isCompleteEscapeSequence(this.buffer)){ae("PASTE_PARSER",`\u2328\uFE0F ESC sequence: ${JSON.stringify(this.buffer)}`),t(this.buffer,false),this.buffer="";continue}if(this.buffer.length>20){ae("PASTE_PARSER",`\u26A0\uFE0F Invalid ESC sequence (too long): ${JSON.stringify(this.buffer)}`),t(this.buffer,false),this.buffer="";continue}break}let s=this.buffer.length,o=this.buffer.indexOf("\x1B"),i=this.buffer.indexOf(Ku);o>0&&(s=Math.min(s,o)),i>0&&(s=Math.min(s,i));let a=this.buffer.slice(0,s);if(this.buffer=this.buffer.slice(s),a.length>0&&(ae("PASTE_PARSER",`\u2328\uFE0F Text: ${JSON.stringify(a)} (${a.length} chars)`),t(a,false)),a.length===0&&this.buffer.length>0)break}}isCompleteEscapeSequence(e){return e.startsWith("\x1B[")?/[A-Za-z~^$u]$/.test(e):e.startsWith("\x1BO")?/[A-Za-z]$/.test(e):e.startsWith("\x1B]")?e.endsWith("\x07")||e.endsWith("\x1B\\"):e.length===2}dispose(){this.escapeTimeout&&(clearTimeout(this.escapeTimeout),this.escapeTimeout=null),this.buffer="",this.inPaste=false,ae("PASTE_PARSER","\u{1F5D1}\uFE0F Disposed");}};re();var Nw=(r,e=2)=>r.replace(/^\t+/gm,t=>" ".repeat(t.length*e)),eh=Nw;var Lw=(r,e)=>{let t=[],n=r-e,s=r+e;for(let o=n;o<=s;o++)t.push(o);return t},$w=(r,e,t={})=>{var n;if(typeof r!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");let s=eh(r).split(/\r?\n/);if(!(e>s.length))return Lw(e,(n=t.around)!==null&&n!==void 0?n:3).filter(o=>s[o-1]!==void 0).map(o=>({line:o,value:s[o-1]}))},th=$w;var us=createContext({isScreenReaderEnabled:false});var La=createContext(void 0);var nh=forwardRef(({children:r,backgroundColor:e,"aria-label":t,"aria-hidden":n,"aria-role":s,"aria-state":o,...i},a)=>{let{isScreenReaderEnabled:l}=useContext(us),c=t?E.createElement("ink-text",null,t):void 0;if(l&&n)return null;let u=E.createElement("ink-box",{ref:a,style:{flexWrap:"nowrap",flexDirection:"row",flexGrow:0,flexShrink:1,...i,backgroundColor:e,overflowX:i.overflowX??i.overflow??"visible",overflowY:i.overflowY??i.overflow??"visible"},internal_accessibility:{role:s,state:o}},l&&c?c:r);return e?E.createElement(La.Provider,{value:e},u):u});nh.displayName="Box";var _=nh;function y({color:r,backgroundColor:e,dimColor:t=false,bold:n=false,italic:s=false,underline:o=false,strikethrough:i=false,inverse:a=false,wrap:l="wrap",children:c,"aria-label":u,"aria-hidden":d=false}){let{isScreenReaderEnabled:m}=useContext(us),g=useContext(La),h=m&&u?u:c;if(h==null)return null;let f=b=>{t&&(b=ke.dim(b)),r&&(b=An(b,r,"foreground"));let v=e??g;return v&&(b=An(b,v,"background")),n&&(b=ke.bold(b)),s&&(b=ke.italic(b)),o&&(b=ke.underline(b)),i&&(b=ke.strikethrough(b)),a&&(b=ke.inverse(b)),b};return m&&d?null:E.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:l},internal_transform:f},m&&u?u:c)}var Vu=r=>r?.replace(`file://${cwd()}/`,""),oh=new rh({cwd:cwd(),internals:rh.nodeInternals()});function Yu({error:r}){let e=r.stack?r.stack.split(`
|
|
204
204
|
`).slice(1):void 0,t=e?oh.parseLine(e[0]):void 0,n=Vu(t?.file),s,o=0;if(n&&t?.line&&Ze.existsSync(n)){let i=Ze.readFileSync(n,"utf8");if(s=th(i,t.line),s)for(let{line:a}of s)o=Math.max(o,String(a).length);}return E.createElement(_,{flexDirection:"column",padding:1},E.createElement(_,null,E.createElement(y,{backgroundColor:"red",color:"white"}," ","ERROR"," "),E.createElement(y,null," ",r.message)),t&&n&&E.createElement(_,{marginTop:1},E.createElement(y,{dimColor:true},n,":",t.line,":",t.column)),t&&s&&E.createElement(_,{marginTop:1,flexDirection:"column"},s.map(({line:i,value:a})=>E.createElement(_,{key:i},E.createElement(_,{width:o+1},E.createElement(y,{dimColor:i!==t.line,backgroundColor:i===t.line?"red":void 0,color:i===t.line?"white":void 0,"aria-label":i===t.line?`Line ${i}, error`:`Line ${i}`},String(i).padStart(o," "),":")),E.createElement(y,{key:i,backgroundColor:i===t.line?"red":void 0,color:i===t.line?"white":void 0}," "+a)))),r.stack&&E.createElement(_,{marginTop:1,flexDirection:"column"},r.stack.split(`
|
|
205
205
|
`).slice(1).map(i=>{let a=oh.parseLine(i);return a?E.createElement(_,{key:i},E.createElement(y,{dimColor:true},"- "),E.createElement(y,{dimColor:true,bold:true},a.function),E.createElement(y,{dimColor:true,color:"gray","aria-label":`at ${Vu(a.file)??""} line ${a.line} column ${a.column}`}," ","(",Vu(a.file)??"",":",a.line,":",a.column,")")):E.createElement(_,{key:i},E.createElement(y,{dimColor:true},"- "),E.createElement(y,{dimColor:true,bold:true},i,"\\t"," "))})))}var lT=" ",cT="\x1B[Z",uT="\x1B",$o=class extends PureComponent{static displayName="InternalApp";static getDerivedStateFromError(e){return {error:e}}state={isFocusEnabled:true,activeFocusId:void 0,focusables:[],error:void 0,terminalColumns:rn.stdout.columns||80,terminalRows:rn.stdout.rows||24};internal_eventEmitter=new EventEmitter;pasteParser=null;isRawModeSupported(){return this.props.stdin.isTTY}render(){return E.createElement(Ea.Provider,{value:{exit:this.handleExit}},E.createElement(br.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC,internal_eventEmitter:this.internal_eventEmitter}},E.createElement(Do.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout,columns:this.state.terminalColumns,rows:this.state.terminalRows}},E.createElement(zu.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},E.createElement(Aa.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious,focus:this.focus}},this.state.error?E.createElement(Yu,{error:this.state.error}):this.props.children)))))}componentDidMount(){Ia.hide(this.props.stdout),this.props.stdin.isTTY&&(this.props.stdout.write("\x1B[?2004h"),ae("INK_APP","\u2705 Bracketed Paste Mode enabled"),this.pasteParser=new Na,Ra(this.props.stdin).enablePermanent(t=>{this.pasteParser.parse(t,(n,s)=>{s?this.handlePaste(n):this.handleInput(n),this.internal_eventEmitter.emit("input",n);});}),ae("INK_APP","\u2705 InputManager and PasteParser initialized"),rn.env.FRAME_SCHEDULER_DEBUG==="1"&&setInterval(()=>{let t=No().getStats();ae("FRAME_SCHEDULER","Stats",t);},5e3)),this.props.stdout.write("\x1B[?1000l"),this.props.stdout.write("\x1B[?1002l"),this.props.stdout.write("\x1B[?1006l"),this.props.stdout.on("resize",this.handleResize);}handleResize=()=>{this.props.onResize?.(),this.setState({terminalColumns:this.props.stdout.columns||80,terminalRows:this.props.stdout.rows||24});};componentWillUnmount(){if(Ia.show(this.props.stdout),this.props.stdout.off("resize",this.handleResize),this.isRawModeSupported()){this.props.stdout.write("\x1B[?2004l"),this.pasteParser?.dispose(),this.pasteParser=null;try{Ra().disable();}catch{}ae("INK_APP","\u{1F53B} Bracketed Paste Mode disabled and resources cleaned up");}}componentDidCatch(e){this.handleExit(e);}handleSetRawMode=e=>{if(!this.isRawModeSupported())throw new Error(`Raw mode is not supported on the current stdin.
|
|
206
206
|
Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`)};handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===uT&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===lT&&this.focusNext(),e===cT&&this.focusPrevious());};handlePaste=async e=>{if(ae("INPUT_PASTE",`\u{1F4CB} Pasted ${e.length} characters`),e.length===0){ae("INPUT_PASTE","\u{1F5BC}\uFE0F Empty paste detected - checking clipboard for image...");try{let{pasteImageAsBase64:t}=await Promise.resolve().then(()=>(td(),yh)),n=await t();if(n){ae("INPUT_PASTE",`\u{1F4CE} Image detected in clipboard: ${n.name} (${Math.round(n.data.length/1024)}KB)`),this.internal_eventEmitter.emit("image-paste",n);return}}catch(t){ae("INPUT_PASTE","\u274C Failed to check clipboard for image",{error:t});}}this.internal_eventEmitter.emit("paste",e),this.handleInput(e);};handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(false),this.props.onExit(e);};enableFocus=()=>{this.setState({isFocusEnabled:true});};disableFocus=()=>{this.setState({isFocusEnabled:false});};focus=e=>{this.setState(t=>t.focusables.some(s=>s?.id===e)?{activeFocusId:e}:t);};focusNext=()=>{this.setState(e=>{let t=e.focusables.find(s=>s.isActive)?.id;return {activeFocusId:this.findNextFocusable(e)??t}});};focusPrevious=()=>{this.setState(e=>{let t=e.focusables.findLast(s=>s.isActive)?.id;return {activeFocusId:this.findPreviousFocusable(e)??t}});};addFocusable=(e,{autoFocus:t})=>{this.setState(n=>{let s=n.activeFocusId;return !s&&t&&(s=e),{activeFocusId:s,focusables:[...n.focusables,{id:e,isActive:true}]}});};removeFocusable=e=>{this.setState(t=>({activeFocusId:t.activeFocusId===e?void 0:t.activeFocusId,focusables:t.focusables.filter(n=>n.id!==e)}));};activateFocusable=e=>{this.setState(t=>({focusables:t.focusables.map(n=>n.id!==e?n:{id:e,isActive:true})}));};deactivateFocusable=e=>{this.setState(t=>({activeFocusId:t.activeFocusId===e?void 0:t.activeFocusId,focusables:t.focusables.map(n=>n.id!==e?n:{id:e,isActive:false})}));};findNextFocusable=e=>{let t=e.focusables.findIndex(n=>n.id===e.activeFocusId);for(let n=t+1;n<e.focusables.length;n++){let s=e.focusables[n];if(s?.isActive)return s.id}};findPreviousFocusable=e=>{let t=e.focusables.findIndex(n=>n.id===e.activeFocusId);for(let n=t-1;n>=0;n--){let s=e.focusables[n];if(s?.isActive)return s.id}}};var Ch=()=>{},Oo=class{options;log;throttledLog;isScreenReaderEnabled;isUnmounted;lastOutput;lastOutputHeight;lastTerminalWidth;container;rootNode;exitPromise;restoreConsole;unsubscribeResize;constructor(e){mT(this),this.options=e,this.rootNode=Ca("ink-root"),this.rootNode.onComputeLayout=this.calculateLayout,this.isScreenReaderEnabled=e.isScreenReaderEnabled??rn.env.INK_SCREEN_READER==="true";let t=e.debug||this.isScreenReaderEnabled;e.maxFps??30;let o=No();this.rootNode.onRender=()=>{let i=t?0:2;if(o.scheduleFrame("ink-root-render",this.onRender,i),rn.env.NEOX_INK_DEBUG==="1"){let a=t?"IMMEDIATE":"NORMAL";rn.stderr.write(`[INK] \u{1F4C5} Render scheduled with ${a} priority
|
|
@@ -359,20 +359,20 @@ ${C}`,name:"CompressedHistory"},I=Pn(T);l+I<=t&&(a.push({message:T,priority:2,to
|
|
|
359
359
|
|
|
360
360
|
${i}`}],{model:t.model,temperature:.2});return Ce(a.choices[0]?.message?.content)||null}catch(n){return p.warn("MessageCompressor",`LLM compression failed: ${n.message}`),null}}async compressBatchWithLLM(e,t){if(!t.llmProvider)return null;try{let n=e.map(a=>{let l=a.role==="assistant"?"Assistant":a.role==="user"?"User":a.role==="tool"?"Tool":a.role,c=Ce(a.content),u=c.length>800?c.slice(0,800)+"...":c;return `[${l}] ${u}`}).join(`
|
|
361
361
|
|
|
362
|
-
`),o=/[\u4e00-\u9fa5]/.test(n)?Ho.systemZh:Ho.system,i=await t.llmProvider.chat([{role:"system",content:o},{role:"user",content:Ho.user(n)}],{model:t.model,temperature:.3});return Ce(i.choices[0]?.message?.content)||null}catch(n){return p.warn("MessageCompressor",`Batch LLM compression failed: ${n.message}`),null}}};new Mr;var uS={debug:false,minRecentMessages:15,defaultTokenBudget:1e5,enableLLMCompression:true,llmTimeout:3e4},Ka=class{config;toolCompressor;messageCompressor;llmProvider;model;contextWindow;constructor(e){this.config={...uS,...e},this.config.debug=this.config.debug||process.env.CLI_DEBUG==="1",this.toolCompressor=new ys({debug:this.config.debug}),this.messageCompressor=new Mr({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&&p.info("UnifiedCompressor",`Context window set to: ${e}`);}registerToolCompressor(e){p.info("UnifiedCompressor","Custom tool compressor registered");}setMessageCompressor(e){this.messageCompressor=e,p.info("UnifiedCompressor","Custom message compressor set");}async compressHistory(e,t,n){let s=Date.now(),o=Ht(e),i={llmProvider:n?.llmProvider||this.llmProvider,model:n?.model||this.model,tokenBudget:t,contextWindow:n?.contextWindow||this.contextWindow,iteration:n?.iteration,enableLLMCompression:n?.enableLLMCompression??this.config.enableLLMCompression,timeout:n?.timeout??this.config.llmTimeout,signal:n?.signal,debug:this.config.debug};if(this.config.debug&&p.debug("UnifiedCompressor",`\u5F00\u59CB\u538B\u7F29: ${e.length} \u6761\u6D88\u606F, ${o} tokens \u2192 \u9884\u7B97 ${t} tokens`),o<=t){let c=await this.compressLargeMessagesOnly(e,i);return this.config.debug&&p.debug("UnifiedCompressor",`\u5728\u9884\u7B97\u5185\uFF0C\u4EC5\u538B\u7F29\u5927\u6D88\u606F: ${c.savedTokens} tokens \u8282\u7701`),c}let a=await this.messageCompressor.compressMessages(e,i),l=Date.now()-s;return this.config.debug&&p.debug("UnifiedCompressor",`\u538B\u7F29\u5B8C\u6210 (${l}ms): ${a.originalCount} \u2192 ${a.compressedCount} \u6761, ${a.originalTokens} \u2192 ${a.compressedTokens} tokens (\u8282\u7701 ${a.savedTokens} tokens, ${(a.savedTokens/a.originalTokens*100).toFixed(1)}%)`),a}async compressLargeMessagesOnly(e,t){let n=Ht(e),s=[],o=0,i=0;for(let l of e)if(Pn(l)>2e3&&l.role!=="system"){let u=await this.messageCompressor.compressMessage(l,t);s.push(u.message),u.usedLLM?o++:u.compressionRatio<1&&i++;}else s.push(l);let a=Ht(s);return {messages:s,originalCount:e.length,compressedCount:s.length,originalTokens:n,compressedTokens:a,savedTokens:n-a,stats:{droppedMessages:0,llmCompressedMessages:o,truncatedMessages:i,preservedMessages:e.length-o-i}}}async compressToolResult(e,t,n){let s={llmProvider:n?.llmProvider||this.llmProvider,model:n?.model||this.model,enableLLMCompression:n?.enableLLMCompression??this.config.enableLLMCompression,timeout:n?.timeout??this.config.llmTimeout,debug:this.config.debug};return (await this.toolCompressor.compress(e,t,s)).content}getStats(){return {config:this.config,hasLLMProvider:!!this.llmProvider}}};var Hh={enabled:false,autoPrompt:true,languages:["typescript","javascript","python","java","go","rust"],include:["**/*.ts","**/*.tsx","**/*.js","**/*.jsx","**/*.py","**/*.java","**/*.go","**/*.rs"],exclude:["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/__pycache__/**","**/target/**","**/vendor/**"],cacheDir:".neox/index",maxFileSize:5},zo=200,Ja=10,Va=4e3,Pr=700;function zh(r){return createHash("md5").update(r).digest("hex")}async function qh(r){try{return await
|
|
362
|
+
`),o=/[\u4e00-\u9fa5]/.test(n)?Ho.systemZh:Ho.system,i=await t.llmProvider.chat([{role:"system",content:o},{role:"user",content:Ho.user(n)}],{model:t.model,temperature:.3});return Ce(i.choices[0]?.message?.content)||null}catch(n){return p.warn("MessageCompressor",`Batch LLM compression failed: ${n.message}`),null}}};new Mr;var uS={debug:false,minRecentMessages:15,defaultTokenBudget:1e5,enableLLMCompression:true,llmTimeout:3e4},Ka=class{config;toolCompressor;messageCompressor;llmProvider;model;contextWindow;constructor(e){this.config={...uS,...e},this.config.debug=this.config.debug||process.env.CLI_DEBUG==="1",this.toolCompressor=new ys({debug:this.config.debug}),this.messageCompressor=new Mr({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&&p.info("UnifiedCompressor",`Context window set to: ${e}`);}registerToolCompressor(e){p.info("UnifiedCompressor","Custom tool compressor registered");}setMessageCompressor(e){this.messageCompressor=e,p.info("UnifiedCompressor","Custom message compressor set");}async compressHistory(e,t,n){let s=Date.now(),o=Ht(e),i={llmProvider:n?.llmProvider||this.llmProvider,model:n?.model||this.model,tokenBudget:t,contextWindow:n?.contextWindow||this.contextWindow,iteration:n?.iteration,enableLLMCompression:n?.enableLLMCompression??this.config.enableLLMCompression,timeout:n?.timeout??this.config.llmTimeout,signal:n?.signal,debug:this.config.debug};if(this.config.debug&&p.debug("UnifiedCompressor",`\u5F00\u59CB\u538B\u7F29: ${e.length} \u6761\u6D88\u606F, ${o} tokens \u2192 \u9884\u7B97 ${t} tokens`),o<=t){let c=await this.compressLargeMessagesOnly(e,i);return this.config.debug&&p.debug("UnifiedCompressor",`\u5728\u9884\u7B97\u5185\uFF0C\u4EC5\u538B\u7F29\u5927\u6D88\u606F: ${c.savedTokens} tokens \u8282\u7701`),c}let a=await this.messageCompressor.compressMessages(e,i),l=Date.now()-s;return this.config.debug&&p.debug("UnifiedCompressor",`\u538B\u7F29\u5B8C\u6210 (${l}ms): ${a.originalCount} \u2192 ${a.compressedCount} \u6761, ${a.originalTokens} \u2192 ${a.compressedTokens} tokens (\u8282\u7701 ${a.savedTokens} tokens, ${(a.savedTokens/a.originalTokens*100).toFixed(1)}%)`),a}async compressLargeMessagesOnly(e,t){let n=Ht(e),s=[],o=0,i=0;for(let l of e)if(Pn(l)>2e3&&l.role!=="system"){let u=await this.messageCompressor.compressMessage(l,t);s.push(u.message),u.usedLLM?o++:u.compressionRatio<1&&i++;}else s.push(l);let a=Ht(s);return {messages:s,originalCount:e.length,compressedCount:s.length,originalTokens:n,compressedTokens:a,savedTokens:n-a,stats:{droppedMessages:0,llmCompressedMessages:o,truncatedMessages:i,preservedMessages:e.length-o-i}}}async compressToolResult(e,t,n){let s={llmProvider:n?.llmProvider||this.llmProvider,model:n?.model||this.model,enableLLMCompression:n?.enableLLMCompression??this.config.enableLLMCompression,timeout:n?.timeout??this.config.llmTimeout,debug:this.config.debug};return (await this.toolCompressor.compress(e,t,s)).content}getStats(){return {config:this.config,hasLLMProvider:!!this.llmProvider}}};var Hh={enabled:false,autoPrompt:true,languages:["typescript","javascript","python","java","go","rust"],include:["**/*.ts","**/*.tsx","**/*.js","**/*.jsx","**/*.py","**/*.java","**/*.go","**/*.rs"],exclude:["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/__pycache__/**","**/target/**","**/vendor/**"],cacheDir:".neox/index",maxFileSize:5},zo=200,Ja=10,Va=4e3,Pr=700;function zh(r){return createHash("md5").update(r).digest("hex")}async function qh(r){try{return await Ee.access(r),!0}catch{return false}}async function qo(r){try{await Ee.mkdir(r,{recursive:!0});}catch(e){if(e.code!=="EEXIST")throw e}}async function md(r,e,t){let s=(await Ee.readFile(r,"utf-8")).split(`
|
|
363
363
|
`),o=s.length,i=Math.max(0,e-1),a=Math.min(s.length,t);return {lines:s.slice(i,a),totalLines:o}}function _t(r,e){return r.map((t,n)=>`${String(e+n).padStart(6)} \u2502 ${t}`).join(`
|
|
364
|
-
`)}function Nr(r,e){let n=ge.relative(e,r).split(ge.sep),s=n.findIndex(o=>["src","lib","app","core","packages","modules"].includes(o));return s>=0&&s+1<n.length?n[s+1]:n[0]||"root"}function gd(r){let e=ge.extname(r).toLowerCase();return {".ts":"typescript",".tsx":"typescript",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".java":"java",".go":"go",".rs":"rust",".c":"c",".cpp":"cpp",".cc":"cpp",".h":"c",".hpp":"cpp",".cs":"csharp",".rb":"ruby",".php":"php",".swift":"swift",".kt":"kotlin",".scala":"scala",".vue":"vue",".svelte":"svelte"}[e]||null}function bs(r,e,t="{([",n="})]"){let s=[],o=false;for(let i=e;i<r.length;i++){let a=r[i];for(let l of a){let c=t.indexOf(l),u=n.indexOf(l);c!==-1?(s.push(n[c]),o=true):u!==-1&&s.length>0&&s[s.length-1]===l&&s.pop();}if(o&&s.length===0)return i+1}return Math.min(e+500,r.length)}function Kh(r,e,t=["^\\s*(export\\s+)?(async\\s+)?function\\s+","^\\s*(export\\s+)?class\\s+","^\\s*(export\\s+)?(const|let|var)\\s+\\w+\\s*=\\s*(async\\s+)?\\(","^\\s*(export\\s+)?(const|let|var)\\s+\\w+\\s*=\\s*(async\\s+)?function","^\\s*(public|private|protected|static|async)*\\s*\\w+\\s*\\(","^\\s*def\\s+","^\\s*class\\s+","^\\s*func\\s+","^\\s*fn\\s+"]){let n=t.map(s=>new RegExp(s));for(let s=e;s>=0;s--){let o=r[s];for(let i of n)if(i.test(o))return s;if(s<e&&o.trim()===""){let i=r.slice(0,s).reverse().findIndex(a=>a.trim()!=="");if(i>=0){let a=r[s-1-i];if(!a.trim().startsWith("@")&&!a.trim().startsWith("#")&&!a.trim().startsWith("//")&&!a.trim().startsWith("/*"))break}}}return Math.max(0,e-5)}function hd(r,e){let t=r.length>e.length?r:e,n=r.length>e.length?e:r;if(t.length===0)return 1;let s=pS(t,n);return (t.length-s)/t.length}function pS(r,e){let t=r.length,n=e.length,s=Array(t+1).fill(null).map(()=>Array(n+1).fill(0));for(let o=0;o<=t;o++)s[o][0]=o;for(let o=0;o<=n;o++)s[0][o]=o;for(let o=1;o<=t;o++)for(let i=1;i<=n;i++)r[o-1]===e[i-1]?s[o][i]=s[o-1][i-1]:s[o][i]=Math.min(s[o-1][i]+1,s[o][i-1]+1,s[o-1][i-1]+1);return s[t][n]}function Lr(r){return r.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,"")}var Ya=class{workspacePath;indexManager=null;constructor(e){this.workspacePath=e;}setIndexManager(e){this.indexManager=e;}async read(e){let{path:t,locator:n,mode:s="smart",autoFullThreshold:o,chunkSize:i=zo,expandContext:a=Ja,maxLines:l=Va,useIndex:c=true}=e;try{let u=this.resolvePath(t);if((await
|
|
365
|
-
`),m=d.length;if(m<=o){let f=Math.min(m,l),b=d.slice(0,f);return {success:true,path:t,totalLines:m,startLine:1,endLine:f,content:_t(b,1),truncated:f<m,strategy:"full"}}let g=Math.min(i,m),h=d.slice(0,g);return {success:true,path:t,totalLines:m,startLine:1,endLine:g,content:_t(h,1),truncated:g<m,strategy:"chunk"}}return this.readChunk(e,t,1,i)}switch(n.type){case "line":return this.readByLine(e,t,n.start,n.end,i);case "pattern":return this.readByPattern(e,t,n.regex,{matchIndex:n.matchIndex||1,context:n.context||a,chunkSize:i});case "symbol":return this.readBySymbol(e,t,n.name,{kind:n.kind,fuzzy:n.fuzzy,chunkSize:i,useIndex:c});case "function":return this.readBySymbol(e,t,n.name,{kind:"function",className:n.className,chunkSize:i,useIndex:c});case "class":return this.readBySymbol(e,t,n.name,{kind:"class",chunkSize:i,useIndex:c});case "range":return this.readByRange(e,t,n.startPattern,n.endPattern,i);default:return this.readChunk(e,t,1,i)}}async readByLine(e,t,n,s,o){let i=s||n+o-1,{lines:a,totalLines:l}=await md(e,n,i);return {success:true,path:t,totalLines:l,startLine:n,endLine:Math.min(i,l),content:_t(a,n),truncated:i<l,strategy:"chunk"}}async readByPattern(e,t,n,s){let{matchIndex:o,context:i,chunkSize:a}=s,c=(await
|
|
364
|
+
`)}function Nr(r,e){let n=ge.relative(e,r).split(ge.sep),s=n.findIndex(o=>["src","lib","app","core","packages","modules"].includes(o));return s>=0&&s+1<n.length?n[s+1]:n[0]||"root"}function gd(r){let e=ge.extname(r).toLowerCase();return {".ts":"typescript",".tsx":"typescript",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".java":"java",".go":"go",".rs":"rust",".c":"c",".cpp":"cpp",".cc":"cpp",".h":"c",".hpp":"cpp",".cs":"csharp",".rb":"ruby",".php":"php",".swift":"swift",".kt":"kotlin",".scala":"scala",".vue":"vue",".svelte":"svelte"}[e]||null}function bs(r,e,t="{([",n="})]"){let s=[],o=false;for(let i=e;i<r.length;i++){let a=r[i];for(let l of a){let c=t.indexOf(l),u=n.indexOf(l);c!==-1?(s.push(n[c]),o=true):u!==-1&&s.length>0&&s[s.length-1]===l&&s.pop();}if(o&&s.length===0)return i+1}return Math.min(e+500,r.length)}function Kh(r,e,t=["^\\s*(export\\s+)?(async\\s+)?function\\s+","^\\s*(export\\s+)?class\\s+","^\\s*(export\\s+)?(const|let|var)\\s+\\w+\\s*=\\s*(async\\s+)?\\(","^\\s*(export\\s+)?(const|let|var)\\s+\\w+\\s*=\\s*(async\\s+)?function","^\\s*(public|private|protected|static|async)*\\s*\\w+\\s*\\(","^\\s*def\\s+","^\\s*class\\s+","^\\s*func\\s+","^\\s*fn\\s+"]){let n=t.map(s=>new RegExp(s));for(let s=e;s>=0;s--){let o=r[s];for(let i of n)if(i.test(o))return s;if(s<e&&o.trim()===""){let i=r.slice(0,s).reverse().findIndex(a=>a.trim()!=="");if(i>=0){let a=r[s-1-i];if(!a.trim().startsWith("@")&&!a.trim().startsWith("#")&&!a.trim().startsWith("//")&&!a.trim().startsWith("/*"))break}}}return Math.max(0,e-5)}function hd(r,e){let t=r.length>e.length?r:e,n=r.length>e.length?e:r;if(t.length===0)return 1;let s=pS(t,n);return (t.length-s)/t.length}function pS(r,e){let t=r.length,n=e.length,s=Array(t+1).fill(null).map(()=>Array(n+1).fill(0));for(let o=0;o<=t;o++)s[o][0]=o;for(let o=0;o<=n;o++)s[0][o]=o;for(let o=1;o<=t;o++)for(let i=1;i<=n;i++)r[o-1]===e[i-1]?s[o][i]=s[o-1][i-1]:s[o][i]=Math.min(s[o-1][i]+1,s[o][i-1]+1,s[o-1][i-1]+1);return s[t][n]}function Lr(r){return r.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,"")}var Ya=class{workspacePath;indexManager=null;constructor(e){this.workspacePath=e;}setIndexManager(e){this.indexManager=e;}async read(e){let{path:t,locator:n,mode:s="smart",autoFullThreshold:o,chunkSize:i=zo,expandContext:a=Ja,maxLines:l=Va,useIndex:c=true}=e;try{let u=this.resolvePath(t);if((await Ee.stat(u)).isDirectory())return this.errorResult(t,"\u8FD9\u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u4E0D\u662F\u6587\u4EF6");switch(s){case "full":return this.readFull(u,t,l);case "chunk":return !n||n.type!=="line"?this.readChunk(u,t,1,i):this.readChunk(u,t,n.start,n.end?n.end-n.start+1:i);default:return this.smartRead(u,t,n,{autoFullThreshold:o,chunkSize:i,expandContext:a,maxLines:l,useIndex:c})}}catch(u){return u.code==="ENOENT"?this.errorResult(t,"\u6587\u4EF6\u4E0D\u5B58\u5728"):this.errorResult(t,u.message)}}async smartRead(e,t,n,s){let{autoFullThreshold:o,chunkSize:i,expandContext:a,maxLines:l,useIndex:c}=s;if(!n){if(typeof o=="number"&&o>0){let u=await Ee.readFile(e,"utf-8"),d=Lr(u).split(`
|
|
365
|
+
`),m=d.length;if(m<=o){let f=Math.min(m,l),b=d.slice(0,f);return {success:true,path:t,totalLines:m,startLine:1,endLine:f,content:_t(b,1),truncated:f<m,strategy:"full"}}let g=Math.min(i,m),h=d.slice(0,g);return {success:true,path:t,totalLines:m,startLine:1,endLine:g,content:_t(h,1),truncated:g<m,strategy:"chunk"}}return this.readChunk(e,t,1,i)}switch(n.type){case "line":return this.readByLine(e,t,n.start,n.end,i);case "pattern":return this.readByPattern(e,t,n.regex,{matchIndex:n.matchIndex||1,context:n.context||a,chunkSize:i});case "symbol":return this.readBySymbol(e,t,n.name,{kind:n.kind,fuzzy:n.fuzzy,chunkSize:i,useIndex:c});case "function":return this.readBySymbol(e,t,n.name,{kind:"function",className:n.className,chunkSize:i,useIndex:c});case "class":return this.readBySymbol(e,t,n.name,{kind:"class",chunkSize:i,useIndex:c});case "range":return this.readByRange(e,t,n.startPattern,n.endPattern,i);default:return this.readChunk(e,t,1,i)}}async readByLine(e,t,n,s,o){let i=s||n+o-1,{lines:a,totalLines:l}=await md(e,n,i);return {success:true,path:t,totalLines:l,startLine:n,endLine:Math.min(i,l),content:_t(a,n),truncated:i<l,strategy:"chunk"}}async readByPattern(e,t,n,s){let{matchIndex:o,context:i,chunkSize:a}=s,c=(await Ee.readFile(e,"utf-8")).split(`
|
|
366
366
|
`),u=c.length,d;try{d=new RegExp(n,"gi");}catch(v){return this.errorResult(t,`\u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F: ${v.message}`)}let m=[];if(c.forEach((v,C)=>{d.test(v)&&m.push(C+1),d.lastIndex=0;}),m.length===0)return {success:true,path:t,totalLines:u,startLine:1,endLine:Math.min(a,u),content:`\u672A\u627E\u5230\u5339\u914D: "${n}"
|
|
367
367
|
|
|
368
|
-
`+_t(c.slice(0,Math.min(50,u)),1),truncated:false,strategy:"grep",metadata:{module:Nr(e,this.workspacePath)}};let g=m[Math.min(o-1,m.length-1)],h=Math.max(1,g-i),f=Math.min(u,g+a-i),b=c.slice(h-1,f);return {success:true,path:t,totalLines:u,startLine:h,endLine:f,content:_t(b,h),truncated:f<u,strategy:"grep",metadata:{matchedLine:g,module:Nr(e,this.workspacePath)}}}async readBySymbol(e,t,n,s){let{kind:o,className:i,fuzzy:a,chunkSize:l,useIndex:c}=s;if(c&&this.indexManager){let d=await this.readBySymbolFromIndex(e,t,n,o,i);if(d)return d}let u=this.buildSymbolPattern(n,o,i);return this.readSymbolBlock(e,t,u,n,l)}async readBySymbolFromIndex(e,t,n,s,o){if(!this.indexManager)return null;try{let i=await this.indexManager.getFileIndex(e);if(!i)return null;let a;if(o){let u=i.symbols.find(d=>d.kind==="class"&&d.name===o);u?.children&&(a=u.children.find(d=>d.name===n));}else a=i.symbols.find(u=>s&&u.kind!==s?!1:u.name===n);if(!a)return null;let{lines:l,totalLines:c}=await md(e,a.startLine,a.endLine);return {success:!0,path:t,totalLines:c,startLine:a.startLine,endLine:a.endLine,content:_t(l,a.startLine),truncated:!1,strategy:"index",metadata:{symbol:a,module:Nr(e,this.workspacePath)}}}catch{return null}}async readSymbolBlock(e,t,n,s,o){let a=(await
|
|
368
|
+
`+_t(c.slice(0,Math.min(50,u)),1),truncated:false,strategy:"grep",metadata:{module:Nr(e,this.workspacePath)}};let g=m[Math.min(o-1,m.length-1)],h=Math.max(1,g-i),f=Math.min(u,g+a-i),b=c.slice(h-1,f);return {success:true,path:t,totalLines:u,startLine:h,endLine:f,content:_t(b,h),truncated:f<u,strategy:"grep",metadata:{matchedLine:g,module:Nr(e,this.workspacePath)}}}async readBySymbol(e,t,n,s){let{kind:o,className:i,fuzzy:a,chunkSize:l,useIndex:c}=s;if(c&&this.indexManager){let d=await this.readBySymbolFromIndex(e,t,n,o,i);if(d)return d}let u=this.buildSymbolPattern(n,o,i);return this.readSymbolBlock(e,t,u,n,l)}async readBySymbolFromIndex(e,t,n,s,o){if(!this.indexManager)return null;try{let i=await this.indexManager.getFileIndex(e);if(!i)return null;let a;if(o){let u=i.symbols.find(d=>d.kind==="class"&&d.name===o);u?.children&&(a=u.children.find(d=>d.name===n));}else a=i.symbols.find(u=>s&&u.kind!==s?!1:u.name===n);if(!a)return null;let{lines:l,totalLines:c}=await md(e,a.startLine,a.endLine);return {success:!0,path:t,totalLines:c,startLine:a.startLine,endLine:a.endLine,content:_t(l,a.startLine),truncated:!1,strategy:"index",metadata:{symbol:a,module:Nr(e,this.workspacePath)}}}catch{return null}}async readSymbolBlock(e,t,n,s,o){let a=(await Ee.readFile(e,"utf-8")).split(`
|
|
369
369
|
`),l=a.length,c;try{c=new RegExp(n,"i");}catch{c=new RegExp(s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"i");}let u=-1;for(let f=0;f<a.length;f++)if(c.test(a[f])){u=f;break}if(u===-1)return {success:true,path:t,totalLines:l,startLine:1,endLine:Math.min(o,l),content:`\u672A\u627E\u5230\u7B26\u53F7: "${s}"
|
|
370
370
|
|
|
371
|
-
`+_t(a.slice(0,Math.min(50,l)),1),truncated:false,strategy:"grep"};let d=Kh(a,u),m=bs(a,d),g=Math.min(m,d+o),h=a.slice(d,g);return {success:true,path:t,totalLines:l,startLine:d+1,endLine:g,content:_t(h,d+1),truncated:g<m,strategy:"grep",metadata:{matchedLine:u+1,module:Nr(e,this.workspacePath)}}}async readByRange(e,t,n,s,o){let a=(await
|
|
371
|
+
`+_t(a.slice(0,Math.min(50,l)),1),truncated:false,strategy:"grep"};let d=Kh(a,u),m=bs(a,d),g=Math.min(m,d+o),h=a.slice(d,g);return {success:true,path:t,totalLines:l,startLine:d+1,endLine:g,content:_t(h,d+1),truncated:g<m,strategy:"grep",metadata:{matchedLine:u+1,module:Nr(e,this.workspacePath)}}}async readByRange(e,t,n,s,o){let a=(await Ee.readFile(e,"utf-8")).split(`
|
|
372
372
|
`),l=a.length,c,u;try{c=new RegExp(n,"i"),u=new RegExp(s,"i");}catch(f){return this.errorResult(t,`\u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F: ${f.message}`)}let d=-1,m=-1;for(let f=0;f<a.length;f++)if(d===-1&&c.test(a[f])&&(d=f),d!==-1&&u.test(a[f])){m=f;break}if(d===-1)return {success:true,path:t,totalLines:l,startLine:1,endLine:Math.min(o,l),content:`\u672A\u627E\u5230\u8D77\u59CB\u6A21\u5F0F: "${n}"
|
|
373
373
|
|
|
374
|
-
`+_t(a.slice(0,Math.min(50,l)),1),truncated:false,strategy:"grep"};m===-1&&(m=Math.min(d+o-1,l-1));let g=Math.min(m+1,d+o),h=a.slice(d,g);return {success:true,path:t,totalLines:l,startLine:d+1,endLine:g,content:_t(h,d+1),truncated:g<m+1,strategy:"grep",metadata:{module:Nr(e,this.workspacePath)}}}async readChunk(e,t,n,s){let o=await
|
|
375
|
-
`),a=i.length,l=Math.max(1,n),c=Math.min(l+s-1,a),u=i.slice(l-1,c);return {success:true,path:t,totalLines:a,startLine:l,endLine:c,content:_t(u,l),truncated:c<a,strategy:"chunk"}}async readFull(e,t,n){let s=await
|
|
374
|
+
`+_t(a.slice(0,Math.min(50,l)),1),truncated:false,strategy:"grep"};m===-1&&(m=Math.min(d+o-1,l-1));let g=Math.min(m+1,d+o),h=a.slice(d,g);return {success:true,path:t,totalLines:l,startLine:d+1,endLine:g,content:_t(h,d+1),truncated:g<m+1,strategy:"grep",metadata:{module:Nr(e,this.workspacePath)}}}async readChunk(e,t,n,s){let o=await Ee.readFile(e,"utf-8"),i=Lr(o).split(`
|
|
375
|
+
`),a=i.length,l=Math.max(1,n),c=Math.min(l+s-1,a),u=i.slice(l-1,c);return {success:true,path:t,totalLines:a,startLine:l,endLine:c,content:_t(u,l),truncated:c<a,strategy:"chunk"}}async readFull(e,t,n){let s=await Ee.readFile(e,"utf-8"),o=Lr(s).split(`
|
|
376
376
|
`),i=o.length,a=Math.min(i,n),l=o.slice(0,a);return {success:true,path:t,totalLines:i,startLine:1,endLine:a,content:_t(l,1),truncated:a<i,strategy:"full"}}buildSymbolPattern(e,t,n){let s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o={function:`(function|async\\s+function|const|let|var)\\s+${s}\\s*[=(<]`,class:`class\\s+${s}(\\s+extends|\\s+implements|\\s*\\{|\\s*$)`,interface:`interface\\s+${s}(\\s+extends|\\s*\\{|\\s*$)`,method:n?`(${s}|${n}\\.${s})\\s*\\(`:`${s}\\s*\\(`,variable:`(const|let|var)\\s+${s}\\s*[=:]`,type:`type\\s+${s}\\s*[=<]`,enum:`enum\\s+${s}\\s*\\{`,constant:`(const|final|static\\s+final)\\s+[A-Z_]+\\s*${s}`};return t&&o[t]?o[t]:`(function|class|interface|type|enum|const|let|var|def|fn|func)\\s+${s}|${s}\\s*(=|\\()`}resolvePath(e){return ge.isAbsolute(e)?e:ge.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 fd(r){return new Ya(r)}var hf=wg(af());var Jo=r=>{if(typeof r!="string")throw new TypeError("invalid pattern");if(r.length>65536)throw new TypeError("pattern is too long")};var CS={"[: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]},Vo=r=>r.replace(/[[\]\\-]/g,"\\$&"),xS=r=>r.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),lf=r=>r.join(""),cf=(r,e)=>{let t=e;if(r.charAt(t)!=="[")throw new Error("not in a brace expression");let n=[],s=[],o=t+1,i=false,a=false,l=false,c=false,u=t,d="";e:for(;o<r.length;){let f=r.charAt(o);if((f==="!"||f==="^")&&o===t+1){c=true,o++;continue}if(f==="]"&&i&&!l){u=o+1;break}if(i=true,f==="\\"&&!l){l=true,o++;continue}if(f==="["&&!l){for(let[b,[v,C,T]]of Object.entries(CS))if(r.startsWith(b,o)){if(d)return ["$.",false,r.length-t,true];o+=b.length,T?s.push(v):n.push(v),a=a||C;continue e}}if(l=false,d){f>d?n.push(Vo(d)+"-"+Vo(f)):f===d&&n.push(Vo(f)),d="",o++;continue}if(r.startsWith("-]",o+1)){n.push(Vo(f+"-")),o+=2;continue}if(r.startsWith("-",o+1)){d=f,o+=2;continue}n.push(Vo(f)),o++;}if(u<o)return ["",false,0,false];if(!n.length&&!s.length)return ["$.",false,r.length-t,true];if(s.length===0&&n.length===1&&/^\\?.$/.test(n[0])&&!c){let f=n[0].length===2?n[0].slice(-1):n[0];return [xS(f),false,u-t,false]}let m="["+(c?"^":"")+lf(n)+"]",g="["+(c?"":"^")+lf(s)+"]";return [n.length&&s.length?"("+m+"|"+g+")":n.length?m:g,a,u-t,true]};var yn=(r,{windowsPathsNoEscape:e=false}={})=>e?r.replace(/\[([^\/\\])\]/g,"$1"):r.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");var wS=new Set(["!","?","+","*","@"]),uf=r=>wS.has(r),TS="(?!(?:^|/)\\.\\.?(?:$|/))",Qa="(?!\\.)",SS=new Set(["[","."]),kS=new Set(["..","."]),_S=new Set("().*{}+?[]^$\\!"),IS=r=>r.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),vd="[^/]",df=vd+"*?",pf=vd+"+?",$r=class r{type;#e;#t;#o=false;#s=[];#i;#C;#c;#d=false;#a;#l;#r=false;constructor(e,t,n={}){this.type=e,e&&(this.#t=true),this.#i=t,this.#e=this.#i?this.#i.#e:this,this.#a=this.#e===this?n:this.#e.#a,this.#c=this.#e===this?[]:this.#e.#c,e==="!"&&!this.#e.#d&&this.#c.push(this),this.#C=this.#i?this.#i.#s.length:0;}get hasMagic(){if(this.#t!==void 0)return this.#t;for(let e of this.#s)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.#s.map(e=>String(e)).join("|")+")":this.#l=this.#s.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,n=t.#i;for(;n;){for(let s=t.#C+1;!n.type&&s<n.#s.length;s++)for(let o of e.#s){if(typeof o=="string")throw new Error("string part in extglob AST??");o.copyIn(n.#s[s]);}t=n,n=t.#i;}}return this}push(...e){for(let t of e)if(t!==""){if(typeof t!="string"&&!(t instanceof r&&t.#i===this))throw new Error("invalid part: "+t);this.#s.push(t);}}toJSON(){let e=this.type===null?this.#s.slice().map(t=>typeof t=="string"?t:t.toJSON()):[this.type,...this.#s.map(t=>t.toJSON())];return this.isStart()&&!this.type&&e.unshift([]),this.isEnd()&&(this===this.#e||this.#e.#d&&this.#i?.type==="!")&&e.push({}),e}isStart(){if(this.#e===this)return true;if(!this.#i?.isStart())return false;if(this.#C===0)return true;let e=this.#i;for(let t=0;t<this.#C;t++){let n=e.#s[t];if(!(n instanceof r&&n.type==="!"))return false}return true}isEnd(){if(this.#e===this||this.#i?.type==="!")return true;if(!this.#i?.isEnd())return false;if(!this.type)return this.#i?.isEnd();let e=this.#i?this.#i.#s.length:0;return this.#C===e-1}copyIn(e){typeof e=="string"?this.push(e):this.push(e.clone(this));}clone(e){let t=new r(this.type,e);for(let n of this.#s)t.copyIn(n);return t}static#y(e,t,n,s){let o=false,i=false,a=-1,l=false;if(t.type===null){let g=n,h="";for(;g<e.length;){let f=e.charAt(g++);if(o||f==="\\"){o=!o,h+=f;continue}if(i){g===a+1?(f==="^"||f==="!")&&(l=true):f==="]"&&!(g===a+2&&l)&&(i=false),h+=f;continue}else if(f==="["){i=true,a=g,l=false,h+=f;continue}if(!s.noext&&uf(f)&&e.charAt(g)==="("){t.push(h),h="";let b=new r(f,t);g=r.#y(e,b,g,s),t.push(b);continue}h+=f;}return t.push(h),g}let c=n+1,u=new r(null,t),d=[],m="";for(;c<e.length;){let g=e.charAt(c++);if(o||g==="\\"){o=!o,m+=g;continue}if(i){c===a+1?(g==="^"||g==="!")&&(l=true):g==="]"&&!(c===a+2&&l)&&(i=false),m+=g;continue}else if(g==="["){i=true,a=c,l=false,m+=g;continue}if(uf(g)&&e.charAt(c)==="("){u.push(m),m="";let h=new r(g,u);u.push(h),c=r.#y(e,h,c,s);continue}if(g==="|"){u.push(m),m="",d.push(u),u=new r(null,t);continue}if(g===")")return m===""&&t.#s.length===0&&(t.#r=true),u.push(m),m="",t.push(...d,u),c;m+=g;}return t.type=null,t.#t=void 0,t.#s=[e.substring(n-1)],c}static fromGlob(e,t={}){let n=new r(null,void 0,t);return r.#y(e,n,0,t),n}toMMPattern(){if(this!==this.#e)return this.#e.toMMPattern();let e=this.toString(),[t,n,s,o]=this.toRegExpSource();if(!(s||this.#t||this.#a.nocase&&!this.#a.nocaseMagicOnly&&e.toUpperCase()!==e.toLowerCase()))return n;let a=(this.#a.nocase?"i":"")+(o?"u":"");return Object.assign(new RegExp(`^${t}$`,a),{_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.#s.map(g=>{let[h,f,b,v]=typeof g=="string"?r.#p(g,this.#t,l):g.toRegExpSource(e);return this.#t=this.#t||b,this.#o=this.#o||v,h}).join(""),u="";if(this.isStart()&&typeof this.#s[0]=="string"&&!(this.#s.length===1&&kS.has(this.#s[0]))){let h=SS,f=t&&h.has(c.charAt(0))||c.startsWith("\\.")&&h.has(c.charAt(2))||c.startsWith("\\.\\.")&&h.has(c.charAt(4)),b=!t&&!e&&h.has(c.charAt(0));u=f?TS:b?Qa:"";}let d="";return this.isEnd()&&this.#e.#d&&this.#i?.type==="!"&&(d="(?:$|\\/)"),[u+c+d,yn(c),this.#t=!!this.#t,this.#o]}let n=this.type==="*"||this.type==="+",s=this.type==="!"?"(?:(?!(?:":"(?:",o=this.#m(t);if(this.isStart()&&this.isEnd()&&!o&&this.type!=="!"){let l=this.toString();return this.#s=[l],this.type=null,this.#t=void 0,[l,yn(this.toString()),false,false]}let i=!n||e||t||!Qa?"":this.#m(true);i===o&&(i=""),i&&(o=`(?:${o})(?:${i})*?`);let a="";if(this.type==="!"&&this.#r)a=(this.isStart()&&!t?Qa:"")+pf;else {let l=this.type==="!"?"))"+(this.isStart()&&!t&&!e?Qa:"")+df+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&i?")":this.type==="*"&&i?")?":`)${this.type}`;a=s+o+l;}return [a,yn(o),this.#t=!!this.#t,this.#o]}#m(e){return this.#s.map(t=>{if(typeof t=="string")throw new Error("string type in extglob ast??");let[n,s,o,i]=t.toRegExpSource(e);return this.#o=this.#o||i,n}).filter(t=>!(this.isStart()&&this.isEnd())||!!t).join("|")}static#p(e,t,n=false){let s=false,o="",i=false;for(let a=0;a<e.length;a++){let l=e.charAt(a);if(s){s=false,o+=(_S.has(l)?"\\":"")+l;continue}if(l==="\\"){a===e.length-1?o+="\\\\":s=true;continue}if(l==="["){let[c,u,d,m]=cf(e,a);if(d){o+=c,i=i||u,a+=d-1,t=t||m;continue}}if(l==="*"){n&&e==="*"?o+=pf:o+=df,t=true;continue}if(l==="?"){o+=vd,t=true;continue}o+=IS(l);}return [o,yn(e),!!t,i]}};var Or=(r,{windowsPathsNoEscape:e=false}={})=>e?r.replace(/[?*()[\]]/g,"[$&]"):r.replace(/[?*()[\]\\]/g,"\\$&");var Dt=(r,e,t={})=>(Jo(e),!t.nocomment&&e.charAt(0)==="#"?false:new Yt(e,t).match(r)),ES=/^\*+([^+@!?\*\[\(]*)$/,AS=r=>e=>!e.startsWith(".")&&e.endsWith(r),MS=r=>e=>e.endsWith(r),PS=r=>(r=r.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(r)),RS=r=>(r=r.toLowerCase(),e=>e.toLowerCase().endsWith(r)),DS=/^\*+\.\*+$/,NS=r=>!r.startsWith(".")&&r.includes("."),LS=r=>r!=="."&&r!==".."&&r.includes("."),$S=/^\.\*+$/,OS=r=>r!=="."&&r!==".."&&r.startsWith("."),BS=/^\*+$/,FS=r=>r.length!==0&&!r.startsWith("."),US=r=>r.length!==0&&r!=="."&&r!=="..",GS=/^\?+([^+@!?\*\[\(]*)?$/,jS=([r,e=""])=>{let t=ff([r]);return e?(e=e.toLowerCase(),n=>t(n)&&n.toLowerCase().endsWith(e)):t},WS=([r,e=""])=>{let t=yf([r]);return e?(e=e.toLowerCase(),n=>t(n)&&n.toLowerCase().endsWith(e)):t},HS=([r,e=""])=>{let t=yf([r]);return e?n=>t(n)&&n.endsWith(e):t},zS=([r,e=""])=>{let t=ff([r]);return e?n=>t(n)&&n.endsWith(e):t},ff=([r])=>{let e=r.length;return t=>t.length===e&&!t.startsWith(".")},yf=([r])=>{let e=r.length;return t=>t.length===e&&t!=="."&&t!==".."},bf=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",mf={win32:{sep:"\\"},posix:{sep:"/"}},qS=bf==="win32"?mf.win32.sep:mf.posix.sep;Dt.sep=qS;var yt=Symbol("globstar **");Dt.GLOBSTAR=yt;var KS="[^/]",JS=KS+"*?",VS="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",YS="(?:(?!(?:\\/|^)\\.).)*?",XS=(r,e={})=>t=>Dt(t,r,e);Dt.filter=XS;var ln=(r,e={})=>Object.assign({},r,e),QS=r=>{if(!r||typeof r!="object"||!Object.keys(r).length)return Dt;let e=Dt;return Object.assign((n,s,o={})=>e(n,s,ln(r,o)),{Minimatch:class extends e.Minimatch{constructor(s,o={}){super(s,ln(r,o));}static defaults(s){return e.defaults(ln(r,s)).Minimatch}},AST:class extends e.AST{constructor(s,o,i={}){super(s,o,ln(r,i));}static fromGlob(s,o={}){return e.AST.fromGlob(s,ln(r,o))}},unescape:(n,s={})=>e.unescape(n,ln(r,s)),escape:(n,s={})=>e.escape(n,ln(r,s)),filter:(n,s={})=>e.filter(n,ln(r,s)),defaults:n=>e.defaults(ln(r,n)),makeRe:(n,s={})=>e.makeRe(n,ln(r,s)),braceExpand:(n,s={})=>e.braceExpand(n,ln(r,s)),match:(n,s,o={})=>e.match(n,s,ln(r,o)),sep:e.sep,GLOBSTAR:yt})};Dt.defaults=QS;var vf=(r,e={})=>(Jo(r),e.nobrace||!/\{(?:(?!\{).)*\}/.test(r)?[r]:(0, hf.default)(r));Dt.braceExpand=vf;var ZS=(r,e={})=>new Yt(r,e).makeRe();Dt.makeRe=ZS;var ek=(r,e,t={})=>{let n=new Yt(e,t);return r=r.filter(s=>n.match(s)),n.options.nonull&&!r.length&&r.push(e),r};Dt.match=ek;var gf=/[?*]|[+@!]\(.*?\)|\[|\]/,tk=r=>r.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Yt=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(e,t={}){Jo(e),t=t||{},this.options=t,this.pattern=e,this.platform=t.platform||bf,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=(...o)=>console.error(...o)),this.debug(this.pattern,this.globSet);let n=this.globSet.map(o=>this.slashSplit(o));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let s=this.globParts.map((o,i,a)=>{if(this.isWindows&&this.windowsNoMagicRoot){let l=o[0]===""&&o[1]===""&&(o[2]==="?"||!gf.test(o[2]))&&!gf.test(o[3]),c=/^[a-z]:/i.test(o[0]);if(l)return [...o.slice(0,4),...o.slice(4).map(u=>this.parse(u))];if(c)return [o[0],...o.slice(1).map(u=>this.parse(u))]}return o.map(l=>this.parse(l))});if(this.debug(this.pattern,s),this.set=s.filter(o=>o.indexOf(false)===-1),this.isWindows)for(let o=0;o<this.set.length;o++){let i=this.set[o];i[0]===""&&i[1]===""&&this.globParts[o][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 n=0;n<e.length;n++)for(let s=0;s<e[n].length;s++)e[n][s]==="**"&&(e[n][s]="*");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 n=-1;for(;(n=t.indexOf("**",n+1))!==-1;){let s=n;for(;t[s+1]==="**";)s++;s!==n&&t.splice(n,s-n);}return t})}levelOneOptimize(e){return e.map(t=>(t=t.reduce((n,s)=>{let o=n[n.length-1];return s==="**"&&o==="**"?n:s===".."&&o&&o!==".."&&o!=="."&&o!=="**"?(n.pop(),n):(n.push(s),n)},[]),t.length===0?[""]:t))}levelTwoFileOptimize(e){Array.isArray(e)||(e=this.slashSplit(e));let t=false;do{if(t=false,!this.preserveMultipleSlashes){for(let s=1;s<e.length-1;s++){let o=e[s];s===1&&o===""&&e[0]===""||(o==="."||o==="")&&(t=true,e.splice(s,1),s--);}e[0]==="."&&e.length===2&&(e[1]==="."||e[1]==="")&&(t=true,e.pop());}let n=0;for(;(n=e.indexOf("..",n+1))!==-1;){let s=e[n-1];s&&s!=="."&&s!==".."&&s!=="**"&&(t=true,e.splice(n-1,2),n-=2);}}while(t);return e.length===0?[""]:e}firstPhasePreProcess(e){let t=false;do{t=false;for(let n of e){let s=-1;for(;(s=n.indexOf("**",s+1))!==-1;){let i=s;for(;n[i+1]==="**";)i++;i>s&&n.splice(s+1,i-s);let a=n[s+1],l=n[s+2],c=n[s+3];if(a!==".."||!l||l==="."||l===".."||!c||c==="."||c==="..")continue;t=true,n.splice(s,1);let u=n.slice(0);u[s]="**",e.push(u),s--;}if(!this.preserveMultipleSlashes){for(let i=1;i<n.length-1;i++){let a=n[i];i===1&&a===""&&n[0]===""||(a==="."||a==="")&&(t=true,n.splice(i,1),i--);}n[0]==="."&&n.length===2&&(n[1]==="."||n[1]==="")&&(t=true,n.pop());}let o=0;for(;(o=n.indexOf("..",o+1))!==-1;){let i=n[o-1];if(i&&i!=="."&&i!==".."&&i!=="**"){t=true;let l=o===1&&n[o+1]==="**"?["."]:[];n.splice(o-1,2,...l),n.length===0&&n.push(""),o-=2;}}}}while(t);return e}secondPhasePreProcess(e){for(let t=0;t<e.length-1;t++)for(let n=t+1;n<e.length;n++){let s=this.partsMatch(e[t],e[n],!this.preserveMultipleSlashes);if(s){e[t]=[],e[n]=s;break}}return e.filter(t=>t.length)}partsMatch(e,t,n=false){let s=0,o=0,i=[],a="";for(;s<e.length&&o<t.length;)if(e[s]===t[o])i.push(a==="b"?t[o]:e[s]),s++,o++;else if(n&&e[s]==="**"&&t[o]===e[s+1])i.push(e[s]),s++;else if(n&&t[o]==="**"&&e[s]===t[o+1])i.push(t[o]),o++;else if(e[s]==="*"&&t[o]&&(this.options.dot||!t[o].startsWith("."))&&t[o]!=="**"){if(a==="b")return false;a="a",i.push(e[s]),s++,o++;}else if(t[o]==="*"&&e[s]&&(this.options.dot||!e[s].startsWith("."))&&e[s]!=="**"){if(a==="a")return false;a="b",i.push(t[o]),s++,o++;}else return false;return e.length===t.length&&i}parseNegate(){if(this.nonegate)return;let e=this.pattern,t=false,n=0;for(let s=0;s<e.length&&e.charAt(s)==="!";s++)t=!t,n++;n&&(this.pattern=e.slice(n)),this.negate=t;}matchOne(e,t,n=false){let s=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]),v=typeof t[0]=="string"&&/^[a-z]:$/i.test(t[0]),C=!v&&t[0]===""&&t[1]===""&&t[2]==="?"&&typeof t[3]=="string"&&/^[a-z]:$/i.test(t[3]),T=b?3:f?0:void 0,I=C?3:v?0:void 0;if(typeof T=="number"&&typeof I=="number"){let[M,D]=[e[T],t[I]];M.toLowerCase()===D.toLowerCase()&&(t[I]=M,I>T?t=t.slice(I):T>I&&(e=e.slice(T)));}}let{optimizationLevel:o=1}=this.options;o>=2&&(e=this.levelTwoFileOptimize(e)),this.debug("matchOne",this,{file:e,pattern:t}),this.debug("matchOne",e.length,t.length);for(var i=0,a=0,l=e.length,c=t.length;i<l&&a<c;i++,a++){this.debug("matchOne loop");var u=t[a],d=e[i];if(this.debug(t,u,d),u===false)return false;if(u===yt){this.debug("GLOBSTAR",[t,u,d]);var m=i,g=a+1;if(g===c){for(this.debug("** at the end");i<l;i++)if(e[i]==="."||e[i]===".."||!s.dot&&e[i].charAt(0)===".")return false;return true}for(;m<l;){var h=e[m];if(this.debug(`
|
|
377
377
|
globstar while`,e,m,t,g,h),this.matchOne(e.slice(m),t.slice(g),n))return this.debug("globstar found match!",m,l,h),true;if(h==="."||h===".."||!s.dot&&h.charAt(0)==="."){this.debug("dot detected!",e,m,t,g);break}this.debug("globstar swallow a segment, and continue"),m++;}return !!(n&&(this.debug(`
|
|
378
378
|
>>> no match, partial?`,e,m,t,g),m===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&&a===c)return true;if(i===l)return n;if(a===c)return i===l-1&&e[i]==="";throw new Error("wtf?")}braceExpand(){return vf(this.pattern,this.options)}parse(e){Jo(e);let t=this.options;if(e==="**")return yt;if(e==="")return "";let n,s=null;(n=e.match(BS))?s=t.dot?US:FS:(n=e.match(ES))?s=(t.nocase?t.dot?RS:PS:t.dot?MS:AS)(n[1]):(n=e.match(GS))?s=(t.nocase?t.dot?WS:jS:t.dot?HS:zS)(n):(n=e.match(DS))?s=t.dot?LS:NS:(n=e.match($S))&&(s=OS);let o=$r.fromGlob(e,this.options).toMMPattern();return s&&typeof o=="object"&&Reflect.defineProperty(o,"test",{value:s}),o}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,n=t.noglobstar?JS:t.dot?VS:YS,s=new Set(t.nocase?["i"]:[]),o=e.map(l=>{let c=l.map(u=>{if(u instanceof RegExp)for(let d of u.flags.split(""))s.add(d);return typeof u=="string"?tk(u):u===yt?yt:u._src});return c.forEach((u,d)=>{let m=c[d+1],g=c[d-1];u!==yt||g===yt||(g===void 0?m!==void 0&&m!==yt?c[d+1]="(?:\\/|"+n+"\\/)?"+m:c[d]=n:m===void 0?c[d-1]=g+"(?:\\/|"+n+")?":m!==yt&&(c[d-1]=g+"(?:\\/|\\/"+n+"\\/)"+m,c[d+1]=yt));}),c.filter(u=>u!==yt).join("/")}).join("|"),[i,a]=e.length>1?["(?:",")"]:["",""];o="^"+i+o+a+"$",this.negate&&(o="^(?!"+o+").+$");try{this.regexp=new RegExp(o,[...s].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 n=this.options;this.isWindows&&(e=e.split("\\").join("/"));let s=this.slashSplit(e);this.debug(this.pattern,"split",s);let o=this.set;this.debug(this.pattern,"set",o);let i=s[s.length-1];if(!i)for(let a=s.length-2;!i&&a>=0;a--)i=s[a];for(let a=0;a<o.length;a++){let l=o[a],c=s;if(n.matchBase&&l.length===1&&(c=[i]),this.matchOne(c,l,t))return n.flipNegate?true:!this.negate}return n.flipNegate?false:this.negate}static defaults(e){return Dt.defaults(e).Minimatch}};Dt.AST=$r;Dt.Minimatch=Yt;Dt.escape=Or;Dt.unescape=yn;var Br=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,xf=new Set,Cd=typeof process=="object"&&process?process:{},wf=(r,e,t,n)=>{typeof Cd.emitWarning=="function"?Cd.emitWarning(r,e,t,n):console.error(`[${t}] ${e}: ${r}`);},Za=globalThis.AbortController,Cf=globalThis.AbortSignal;if(typeof Za>"u"){Cf=class{onabort;_onabort=[];reason;aborted=false;addEventListener(n,s){this._onabort.push(s);}},Za=class{constructor(){e();}signal=new Cf;abort(n){if(!this.signal.aborted){this.signal.reason=n,this.signal.aborted=true;for(let s of this.signal._onabort)s(n);this.signal.onabort?.(n);}}};let r=Cd.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{r&&(r=false,wf("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 nk=r=>!xf.has(r);var vs=r=>r&&r===Math.floor(r)&&r>0&&isFinite(r),Tf=r=>vs(r)?r<=Math.pow(2,8)?Uint8Array:r<=Math.pow(2,16)?Uint16Array:r<=Math.pow(2,32)?Uint32Array:r<=Number.MAX_SAFE_INTEGER?Fr:null:null,Fr=class extends Array{constructor(e){super(e),this.fill(0);}},xd=class r{heap;length;static#e=false;static create(e){let t=Tf(e);if(!t)return [];r.#e=true;let n=new r(e,t);return r.#e=false,n}constructor(e,t){if(!r.#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]}},Yo=class r{#e;#t;#o;#s;#i;#C;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#c;#d;#a;#l;#r;#f;#y;#m;#p;#T;#h;#S;#k;#v;#x;#w;#g;static unsafeExposeInternals(e){return {starts:e.#k,ttls:e.#v,sizes:e.#S,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.#T,isBackgroundFetch:t=>e.#u(t),backgroundFetch:(t,n,s,o)=>e.#B(t,n,s,o),moveToTail:t=>e.#U(t),indexes:t=>e.#I(t),rindexes:t=>e.#E(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.#i}get memoMethod(){return this.#C}get dispose(){return this.#o}get disposeAfter(){return this.#s}constructor(e){let{max:t=0,ttl:n,ttlResolution:s=1,ttlAutopurge:o,updateAgeOnGet:i,updateAgeOnHas:a,allowStale:l,dispose:c,disposeAfter:u,noDisposeOnSet:d,noUpdateTTL:m,maxSize:g=0,maxEntrySize:h=0,sizeCalculation:f,fetchMethod:b,memoMethod:v,noDeleteOnFetchRejection:C,noDeleteOnStaleGet:T,allowStaleOnFetchRejection:I,allowStaleOnFetchAbort:M,ignoreFetchAbort:D}=e;if(t!==0&&!vs(t))throw new TypeError("max option must be a nonnegative integer");let R=t?Tf(t):Array;if(!R)throw new Error("invalid max value: "+t);if(this.#e=t,this.#t=g,this.maxEntrySize=h||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(v!==void 0&&typeof v!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#C=v,b!==void 0&&typeof b!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#i=b,this.#w=!!b,this.#a=new Map,this.#l=new Array(t).fill(void 0),this.#r=new Array(t).fill(void 0),this.#f=new R(t),this.#y=new R(t),this.#m=0,this.#p=0,this.#T=xd.create(t),this.#c=0,this.#d=0,typeof c=="function"&&(this.#o=c),typeof u=="function"?(this.#s=u,this.#h=[]):(this.#s=void 0,this.#h=void 0),this.#x=!!this.#o,this.#g=!!this.#s,this.noDisposeOnSet=!!d,this.noUpdateTTL=!!m,this.noDeleteOnFetchRejection=!!C,this.allowStaleOnFetchRejection=!!I,this.allowStaleOnFetchAbort=!!M,this.ignoreFetchAbort=!!D,this.maxEntrySize!==0){if(this.#t!==0&&!vs(this.#t))throw new TypeError("maxSize must be a positive integer if specified");if(!vs(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#M();}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!T,this.updateAgeOnGet=!!i,this.updateAgeOnHas=!!a,this.ttlResolution=vs(s)||s===0?s:1,this.ttlAutopurge=!!o,this.ttl=n||0,this.ttl){if(!vs(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#A();}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 L="LRU_CACHE_UNBOUNDED";nk(L)&&(xf.add(L),wf("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",L,r));}}getRemainingTTL(e){return this.#a.has(e)?1/0:0}#A(){let e=new Fr(this.#e),t=new Fr(this.#e);this.#v=e,this.#k=t,this.#R=(o,i,a=Br.now())=>{if(t[o]=i!==0?a:0,e[o]=i,i!==0&&this.ttlAutopurge){let l=setTimeout(()=>{this.#b(o)&&this.#P(this.#l[o],"expire");},i+1);l.unref&&l.unref();}},this.#_=o=>{t[o]=e[o]!==0?Br.now():0;},this.#n=(o,i)=>{if(e[i]){let a=e[i],l=t[i];if(!a||!l)return;o.ttl=a,o.start=l,o.now=n||s();let c=o.now-l;o.remainingTTL=a-c;}};let n=0,s=()=>{let o=Br.now();if(this.ttlResolution>0){n=o;let i=setTimeout(()=>n=0,this.ttlResolution);i.unref&&i.unref();}return o};this.getRemainingTTL=o=>{let i=this.#a.get(o);if(i===void 0)return 0;let a=e[i],l=t[i];if(!a||!l)return 1/0;let c=(n||s())-l;return a-c},this.#b=o=>{let i=t[o],a=e[o];return !!a&&!!i&&(n||s())-i>a};}#_=()=>{};#n=()=>{};#R=()=>{};#b=()=>false;#M(){let e=new Fr(this.#e);this.#d=0,this.#S=e,this.#D=t=>{this.#d-=e[t],e[t]=0;},this.#L=(t,n,s,o)=>{if(this.#u(n))return 0;if(!vs(s))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(s=o(n,t),!vs(s))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 s},this.#N=(t,n,s)=>{if(e[t]=n,this.#t){let o=this.#t-e[t];for(;this.#d>o;)this.#O(true);}this.#d+=e[t],s&&(s.entrySize=n,s.totalCalculatedSize=this.#d);};}#D=e=>{};#N=(e,t,n)=>{};#L=(e,t,n,s)=>{if(n||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#I({allowStale:e=this.allowStale}={}){if(this.#c)for(let t=this.#p;!(!this.#$(t)||((e||!this.#b(t))&&(yield t),t===this.#m));)t=this.#y[t];}*#E({allowStale:e=this.allowStale}={}){if(this.#c)for(let t=this.#m;!(!this.#$(t)||((e||!this.#b(t))&&(yield t),t===this.#p));)t=this.#f[t];}#$(e){return e!==void 0&&this.#a.get(this.#l[e])===e}*entries(){for(let e of this.#I())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.#E())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.#I()){let t=this.#l[e];t!==void 0&&!this.#u(this.#r[e])&&(yield t);}}*rkeys(){for(let e of this.#E()){let t=this.#l[e];t!==void 0&&!this.#u(this.#r[e])&&(yield t);}}*values(){for(let e of this.#I())this.#r[e]!==void 0&&!this.#u(this.#r[e])&&(yield this.#r[e]);}*rvalues(){for(let e of this.#E())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 n of this.#I()){let s=this.#r[n],o=this.#u(s)?s.__staleWhileFetching:s;if(o!==void 0&&e(o,this.#l[n],this))return this.get(this.#l[n],t)}}forEach(e,t=this){for(let n of this.#I()){let s=this.#r[n],o=this.#u(s)?s.__staleWhileFetching:s;o!==void 0&&e.call(t,o,this.#l[n],this);}}rforEach(e,t=this){for(let n of this.#E()){let s=this.#r[n],o=this.#u(s)?s.__staleWhileFetching:s;o!==void 0&&e.call(t,o,this.#l[n],this);}}purgeStale(){let e=false;for(let t of this.#E({allowStale:true}))this.#b(t)&&(this.#P(this.#l[t],"expire"),e=true);return e}info(e){let t=this.#a.get(e);if(t===void 0)return;let n=this.#r[t],s=this.#u(n)?n.__staleWhileFetching:n;if(s===void 0)return;let o={value:s};if(this.#v&&this.#k){let i=this.#v[t],a=this.#k[t];if(i&&a){let l=i-(Br.now()-a);o.ttl=l,o.start=Date.now();}}return this.#S&&(o.size=this.#S[t]),o}dump(){let e=[];for(let t of this.#I({allowStale:true})){let n=this.#l[t],s=this.#r[t],o=this.#u(s)?s.__staleWhileFetching:s;if(o===void 0||n===void 0)continue;let i={value:o};if(this.#v&&this.#k){i.ttl=this.#v[t];let a=Br.now()-this.#k[t];i.start=Math.floor(Date.now()-a);}this.#S&&(i.size=this.#S[t]),e.unshift([n,i]);}return e}load(e){this.clear();for(let[t,n]of e){if(n.start){let s=Date.now()-n.start;n.start=Br.now()-s;}this.set(t,n.value,n);}}set(e,t,n={}){if(t===void 0)return this.delete(e),this;let{ttl:s=this.ttl,start:o,noDisposeOnSet:i=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:l}=n,{noUpdateTTL:c=this.noUpdateTTL}=n,u=this.#L(e,t,n.size||0,a);if(this.maxEntrySize&&u>this.maxEntrySize)return l&&(l.set="miss",l.maxEntrySizeExceeded=true),this.#P(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.#T.length!==0?this.#T.pop():this.#c===this.#e?this.#O(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.#N(d,u,l),l&&(l.set="add"),c=false;else {this.#U(d);let m=this.#r[d];if(t!==m){if(this.#w&&this.#u(m)){m.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:g}=m;g!==void 0&&!i&&(this.#x&&this.#o?.(g,e,"set"),this.#g&&this.#h?.push([g,e,"set"]));}else i||(this.#x&&this.#o?.(m,e,"set"),this.#g&&this.#h?.push([m,e,"set"]));if(this.#D(d),this.#N(d,u,l),this.#r[d]=t,l){l.set="replace";let g=m&&this.#u(m)?m.__staleWhileFetching:m;g!==void 0&&(l.oldValue=g);}}else l&&(l.set="update");}if(s!==0&&!this.#v&&this.#A(),this.#v&&(c||this.#R(d,s,o),l&&this.#n(l,d)),!i&&this.#g&&this.#h){let m=this.#h,g;for(;g=m?.shift();)this.#s?.(...g);}return this}pop(){try{for(;this.#c;){let e=this.#r[this.#m];if(this.#O(!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.#s?.(...t);}}}#O(e){let t=this.#m,n=this.#l[t],s=this.#r[t];return this.#w&&this.#u(s)?s.__abortController.abort(new Error("evicted")):(this.#x||this.#g)&&(this.#x&&this.#o?.(s,n,"evict"),this.#g&&this.#h?.push([s,n,"evict"])),this.#D(t),e&&(this.#l[t]=void 0,this.#r[t]=void 0,this.#T.push(t)),this.#c===1?(this.#m=this.#p=0,this.#T.length=0):this.#m=this.#f[t],this.#a.delete(n),this.#c--,t}has(e,t={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:s}=t,o=this.#a.get(e);if(o!==void 0){let i=this.#r[o];if(this.#u(i)&&i.__staleWhileFetching===void 0)return false;if(this.#b(o))s&&(s.has="stale",this.#n(s,o));else return n&&this.#_(o),s&&(s.has="hit",this.#n(s,o)),true}else s&&(s.has="miss");return false}peek(e,t={}){let{allowStale:n=this.allowStale}=t,s=this.#a.get(e);if(s===void 0||!n&&this.#b(s))return;let o=this.#r[s];return this.#u(o)?o.__staleWhileFetching:o}#B(e,t,n,s){let o=t===void 0?void 0:this.#r[t];if(this.#u(o))return o;let i=new Za,{signal:a}=n;a?.addEventListener("abort",()=>i.abort(a.reason),{signal:i.signal});let l={signal:i.signal,options:n,context:s},c=(f,b=false)=>{let{aborted:v}=i.signal,C=n.ignoreFetchAbort&&f!==void 0;if(n.status&&(v&&!b?(n.status.fetchAborted=true,n.status.fetchError=i.signal.reason,C&&(n.status.fetchAbortIgnored=true)):n.status.fetchResolved=true),v&&!C&&!b)return d(i.signal.reason);let T=g;return this.#r[t]===g&&(f===void 0?T.__staleWhileFetching?this.#r[t]=T.__staleWhileFetching:this.#P(e,"fetch"):(n.status&&(n.status.fetchUpdated=true),this.set(e,f,l.options))),f},u=f=>(n.status&&(n.status.fetchRejected=true,n.status.fetchError=f),d(f)),d=f=>{let{aborted:b}=i.signal,v=b&&n.allowStaleOnFetchAbort,C=v||n.allowStaleOnFetchRejection,T=C||n.noDeleteOnFetchRejection,I=g;if(this.#r[t]===g&&(!T||I.__staleWhileFetching===void 0?this.#P(e,"fetch"):v||(this.#r[t]=I.__staleWhileFetching)),C)return n.status&&I.__staleWhileFetching!==void 0&&(n.status.returnedStale=true),I.__staleWhileFetching;if(I.__returned===I)throw f},m=(f,b)=>{let v=this.#i?.(e,o,l);v&&v instanceof Promise&&v.then(C=>f(C===void 0?void 0:C),b),i.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(f(void 0),n.allowStaleOnFetchAbort&&(f=C=>c(C,true)));});};n.status&&(n.status.fetchDispatched=true);let g=new Promise(m).then(c,u),h=Object.assign(g,{__abortController:i,__staleWhileFetching:o,__returned:void 0});return t===void 0?(this.set(e,h,{...l.options,status:void 0}),t=this.#a.get(e)):this.#r[t]=h,h}#u(e){if(!this.#w)return false;let t=e;return !!t&&t instanceof Promise&&t.hasOwnProperty("__staleWhileFetching")&&t.__abortController instanceof Za}async fetch(e,t={}){let{allowStale:n=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:i=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:l=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:m=this.allowStaleOnFetchRejection,ignoreFetchAbort:g=this.ignoreFetchAbort,allowStaleOnFetchAbort:h=this.allowStaleOnFetchAbort,context:f,forceRefresh:b=false,status:v,signal:C}=t;if(!this.#w)return v&&(v.fetch="get"),this.get(e,{allowStale:n,updateAgeOnGet:s,noDeleteOnStaleGet:o,status:v});let T={allowStale:n,updateAgeOnGet:s,noDeleteOnStaleGet:o,ttl:i,noDisposeOnSet:a,size:l,sizeCalculation:c,noUpdateTTL:u,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:m,allowStaleOnFetchAbort:h,ignoreFetchAbort:g,status:v,signal:C},I=this.#a.get(e);if(I===void 0){v&&(v.fetch="miss");let M=this.#B(e,I,T,f);return M.__returned=M}else {let M=this.#r[I];if(this.#u(M)){let k=n&&M.__staleWhileFetching!==void 0;return v&&(v.fetch="inflight",k&&(v.returnedStale=true)),k?M.__staleWhileFetching:M.__returned=M}let D=this.#b(I);if(!b&&!D)return v&&(v.fetch="hit"),this.#U(I),s&&this.#_(I),v&&this.#n(v,I),M;let R=this.#B(e,I,T,f),S=R.__staleWhileFetching!==void 0&&n;return v&&(v.fetch=D?"stale":"refresh",S&&D&&(v.returnedStale=true)),S?R.__staleWhileFetching:R.__returned=R}}async forceFetch(e,t={}){let n=await this.fetch(e,t);if(n===void 0)throw new Error("fetch() returned undefined");return n}memo(e,t={}){let n=this.#C;if(!n)throw new Error("no memoMethod provided to constructor");let{context:s,forceRefresh:o,...i}=t,a=this.get(e,i);if(!o&&a!==void 0)return a;let l=n(e,a,{options:i,context:s});return this.set(e,l,i),l}get(e,t={}){let{allowStale:n=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:i}=t,a=this.#a.get(e);if(a!==void 0){let l=this.#r[a],c=this.#u(l);return i&&this.#n(i,a),this.#b(a)?(i&&(i.get="stale"),c?(i&&n&&l.__staleWhileFetching!==void 0&&(i.returnedStale=true),n?l.__staleWhileFetching:void 0):(o||this.#P(e,"expire"),i&&n&&(i.returnedStale=true),n?l:void 0)):(i&&(i.get="hit"),c?l.__staleWhileFetching:(this.#U(a),s&&this.#_(a),l))}else i&&(i.get="miss");}#F(e,t){this.#y[t]=e,this.#f[e]=t;}#U(e){e!==this.#p&&(e===this.#m?this.#m=this.#f[e]:this.#F(this.#y[e],this.#f[e]),this.#F(this.#p,e),this.#p=e);}delete(e){return this.#P(e,"delete")}#P(e,t){let n=false;if(this.#c!==0){let s=this.#a.get(e);if(s!==void 0)if(n=true,this.#c===1)this.#G(t);else {this.#D(s);let o=this.#r[s];if(this.#u(o)?o.__abortController.abort(new Error("deleted")):(this.#x||this.#g)&&(this.#x&&this.#o?.(o,e,t),this.#g&&this.#h?.push([o,e,t])),this.#a.delete(e),this.#l[s]=void 0,this.#r[s]=void 0,s===this.#p)this.#p=this.#y[s];else if(s===this.#m)this.#m=this.#f[s];else {let i=this.#y[s];this.#f[i]=this.#f[s];let a=this.#f[s];this.#y[a]=this.#y[s];}this.#c--,this.#T.push(s);}}if(this.#g&&this.#h?.length){let s=this.#h,o;for(;o=s?.shift();)this.#s?.(...o);}return n}clear(){return this.#G("delete")}#G(e){for(let t of this.#E({allowStale:true})){let n=this.#r[t];if(this.#u(n))n.__abortController.abort(new Error("deleted"));else {let s=this.#l[t];this.#x&&this.#o?.(n,s,e),this.#g&&this.#h?.push([n,s,e]);}}if(this.#a.clear(),this.#r.fill(void 0),this.#l.fill(void 0),this.#v&&this.#k&&(this.#v.fill(0),this.#k.fill(0)),this.#S&&this.#S.fill(0),this.#m=0,this.#p=0,this.#T.length=0,this.#d=0,this.#c=0,this.#g&&this.#h){let t=this.#h,n;for(;n=t?.shift();)this.#s?.(...n);}}};var Sf=typeof process=="object"&&process?process:{stdout:null,stderr:null},rk=r=>!!r&&typeof r=="object"&&(r instanceof xs||r instanceof Ef||ok(r)||ik(r)),ok=r=>!!r&&typeof r=="object"&&r instanceof EventEmitter&&typeof r.pipe=="function"&&r.pipe!==Ef.Writable.prototype.pipe,ik=r=>!!r&&typeof r=="object"&&r instanceof EventEmitter&&typeof r.write=="function"&&typeof r.end=="function",Qn=Symbol("EOF"),Zn=Symbol("maybeEmitEnd"),Cs=Symbol("emittedEnd"),el=Symbol("emittingEnd"),Xo=Symbol("emittedError"),tl=Symbol("closed"),kf=Symbol("read"),nl=Symbol("flush"),_f=Symbol("flushChunk"),bn=Symbol("encoding"),Ur=Symbol("decoder"),ct=Symbol("flowing"),Qo=Symbol("paused"),Gr=Symbol("resume"),ut=Symbol("buffer"),Nt=Symbol("pipes"),dt=Symbol("bufferLength"),wd=Symbol("bufferPush"),sl=Symbol("bufferShift"),It=Symbol("objectMode"),Qe=Symbol("destroyed"),Td=Symbol("error"),Sd=Symbol("emitData"),If=Symbol("emitEnd"),kd=Symbol("emitEnd2"),Rn=Symbol("async"),_d=Symbol("abort"),rl=Symbol("aborted"),Zo=Symbol("signal"),Ks=Symbol("dataListeners"),Xt=Symbol("discarded"),ei=r=>Promise.resolve().then(r),ak=r=>r(),lk=r=>r==="end"||r==="finish"||r==="prefinish",ck=r=>r instanceof ArrayBuffer||!!r&&typeof r=="object"&&r.constructor&&r.constructor.name==="ArrayBuffer"&&r.byteLength>=0,uk=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),ol=class{src;dest;opts;ondrain;constructor(e,t,n){this.src=e,this.dest=t,this.opts=n,this.ondrain=()=>e[Gr](),this.dest.on("drain",this.ondrain);}unpipe(){this.dest.removeListener("drain",this.ondrain);}proxyErrors(e){}end(){this.unpipe(),this.opts.end&&this.dest.end();}},Id=class extends ol{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe();}constructor(e,t,n){super(e,t,n),this.proxyErrors=s=>t.emit("error",s),e.on("error",this.proxyErrors);}},dk=r=>!!r.objectMode,pk=r=>!r.objectMode&&!!r.encoding&&r.encoding!=="buffer",xs=class extends EventEmitter{[ct]=false;[Qo]=false;[Nt]=[];[ut]=[];[It];[bn];[Rn];[Ur];[Qn]=false;[Cs]=false;[el]=false;[tl]=false;[Xo]=null;[dt]=0;[Qe]=false;[Zo];[rl]=false;[Ks]=0;[Xt]=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");dk(t)?(this[It]=true,this[bn]=null):pk(t)?(this[bn]=t.encoding,this[It]=false):(this[It]=false,this[bn]=null),this[Rn]=!!t.async,this[Ur]=this[bn]?new StringDecoder(this[bn]):null,t&&t.debugExposeBuffer===true&&Object.defineProperty(this,"buffer",{get:()=>this[ut]}),t&&t.debugExposePipes===true&&Object.defineProperty(this,"pipes",{get:()=>this[Nt]});let{signal:n}=t;n&&(this[Zo]=n,n.aborted?this[_d]():n.addEventListener("abort",()=>this[_d]()));}get bufferLength(){return this[dt]}get encoding(){return this[bn]}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[It]}set objectMode(e){throw new Error("objectMode must be set at instantiation time")}get async(){return this[Rn]}set async(e){this[Rn]=this[Rn]||!!e;}[_d](){this[rl]=true,this.emit("abort",this[Zo]?.reason),this.destroy(this[Zo]?.reason);}get aborted(){return this[rl]}set aborted(e){}write(e,t,n){if(this[rl])return false;if(this[Qn])throw new Error("write after end");if(this[Qe])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),true;typeof t=="function"&&(n=t,t="utf8"),t||(t="utf8");let s=this[Rn]?ei:ak;if(!this[It]&&!Buffer.isBuffer(e)){if(uk(e))e=Buffer.from(e.buffer,e.byteOffset,e.byteLength);else if(ck(e))e=Buffer.from(e);else if(typeof e!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[It]?(this[ct]&&this[dt]!==0&&this[nl](true),this[ct]?this.emit("data",e):this[wd](e),this[dt]!==0&&this.emit("readable"),n&&s(n),this[ct]):e.length?(typeof e=="string"&&!(t===this[bn]&&!this[Ur]?.lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[bn]&&(e=this[Ur].write(e)),this[ct]&&this[dt]!==0&&this[nl](true),this[ct]?this.emit("data",e):this[wd](e),this[dt]!==0&&this.emit("readable"),n&&s(n),this[ct]):(this[dt]!==0&&this.emit("readable"),n&&s(n),this[ct])}read(e){if(this[Qe])return null;if(this[Xt]=false,this[dt]===0||e===0||e&&e>this[dt])return this[Zn](),null;this[It]&&(e=null),this[ut].length>1&&!this[It]&&(this[ut]=[this[bn]?this[ut].join(""):Buffer.concat(this[ut],this[dt])]);let t=this[kf](e||null,this[ut][0]);return this[Zn](),t}[kf](e,t){if(this[It])this[sl]();else {let n=t;e===n.length||e===null?this[sl]():typeof n=="string"?(this[ut][0]=n.slice(e),t=n.slice(0,e),this[dt]-=e):(this[ut][0]=n.subarray(e),t=n.subarray(0,e),this[dt]-=e);}return this.emit("data",t),!this[ut].length&&!this[Qn]&&this.emit("drain"),t}end(e,t,n){return typeof e=="function"&&(n=e,e=void 0),typeof t=="function"&&(n=t,t="utf8"),e!==void 0&&this.write(e,t),n&&this.once("end",n),this[Qn]=true,this.writable=false,(this[ct]||!this[Qo])&&this[Zn](),this}[Gr](){this[Qe]||(!this[Ks]&&!this[Nt].length&&(this[Xt]=true),this[Qo]=false,this[ct]=true,this.emit("resume"),this[ut].length?this[nl]():this[Qn]?this[Zn]():this.emit("drain"));}resume(){return this[Gr]()}pause(){this[ct]=false,this[Qo]=true,this[Xt]=false;}get destroyed(){return this[Qe]}get flowing(){return this[ct]}get paused(){return this[Qo]}[wd](e){this[It]?this[dt]+=1:this[dt]+=e.length,this[ut].push(e);}[sl](){return this[It]?this[dt]-=1:this[dt]-=this[ut][0].length,this[ut].shift()}[nl](e=false){do;while(this[_f](this[sl]())&&this[ut].length);!e&&!this[ut].length&&!this[Qn]&&this.emit("drain");}[_f](e){return this.emit("data",e),this[ct]}pipe(e,t){if(this[Qe])return e;this[Xt]=false;let n=this[Cs];return t=t||{},e===Sf.stdout||e===Sf.stderr?t.end=false:t.end=t.end!==false,t.proxyErrors=!!t.proxyErrors,n?t.end&&e.end():(this[Nt].push(t.proxyErrors?new Id(this,e,t):new ol(this,e,t)),this[Rn]?ei(()=>this[Gr]()):this[Gr]()),e}unpipe(e){let t=this[Nt].find(n=>n.dest===e);t&&(this[Nt].length===1?(this[ct]&&this[Ks]===0&&(this[ct]=false),this[Nt]=[]):this[Nt].splice(this[Nt].indexOf(t),1),t.unpipe());}addListener(e,t){return this.on(e,t)}on(e,t){let n=super.on(e,t);if(e==="data")this[Xt]=false,this[Ks]++,!this[Nt].length&&!this[ct]&&this[Gr]();else if(e==="readable"&&this[dt]!==0)super.emit("readable");else if(lk(e)&&this[Cs])super.emit(e),this.removeAllListeners(e);else if(e==="error"&&this[Xo]){let s=t;this[Rn]?ei(()=>s.call(this,this[Xo])):s.call(this,this[Xo]);}return n}removeListener(e,t){return this.off(e,t)}off(e,t){let n=super.off(e,t);return e==="data"&&(this[Ks]=this.listeners("data").length,this[Ks]===0&&!this[Xt]&&!this[Nt].length&&(this[ct]=false)),n}removeAllListeners(e){let t=super.removeAllListeners(e);return (e==="data"||e===void 0)&&(this[Ks]=0,!this[Xt]&&!this[Nt].length&&(this[ct]=false)),t}get emittedEnd(){return this[Cs]}[Zn](){!this[el]&&!this[Cs]&&!this[Qe]&&this[ut].length===0&&this[Qn]&&(this[el]=true,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[tl]&&this.emit("close"),this[el]=false);}emit(e,...t){let n=t[0];if(e!=="error"&&e!=="close"&&e!==Qe&&this[Qe])return false;if(e==="data")return !this[It]&&!n?false:this[Rn]?(ei(()=>this[Sd](n)),true):this[Sd](n);if(e==="end")return this[If]();if(e==="close"){if(this[tl]=true,!this[Cs]&&!this[Qe])return false;let o=super.emit("close");return this.removeAllListeners("close"),o}else if(e==="error"){this[Xo]=n,super.emit(Td,n);let o=!this[Zo]||this.listeners("error").length?super.emit("error",n):false;return this[Zn](),o}else if(e==="resume"){let o=super.emit("resume");return this[Zn](),o}else if(e==="finish"||e==="prefinish"){let o=super.emit(e);return this.removeAllListeners(e),o}let s=super.emit(e,...t);return this[Zn](),s}[Sd](e){for(let n of this[Nt])n.dest.write(e)===false&&this.pause();let t=this[Xt]?false:super.emit("data",e);return this[Zn](),t}[If](){return this[Cs]?false:(this[Cs]=true,this.readable=false,this[Rn]?(ei(()=>this[kd]()),true):this[kd]())}[kd](){if(this[Ur]){let t=this[Ur].end();if(t){for(let n of this[Nt])n.dest.write(t);this[Xt]||super.emit("data",t);}}for(let t of this[Nt])t.end();let e=super.emit("end");return this.removeAllListeners("end"),e}async collect(){let e=Object.assign([],{dataLength:0});this[It]||(e.dataLength=0);let t=this.promise();return this.on("data",n=>{e.push(n),this[It]||(e.dataLength+=n.length);}),await t,e}async concat(){if(this[It])throw new Error("cannot concat in objectMode");let e=await this.collect();return this[bn]?e.join(""):Buffer.concat(e,e.dataLength)}async promise(){return new Promise((e,t)=>{this.on(Qe,()=>t(new Error("stream destroyed"))),this.on("error",n=>t(n)),this.on("end",()=>e());})}[Symbol.asyncIterator](){this[Xt]=false;let e=false,t=async()=>(this.pause(),e=true,{value:void 0,done:true});return {next:()=>{if(e)return t();let s=this.read();if(s!==null)return Promise.resolve({done:false,value:s});if(this[Qn])return t();let o,i,a=d=>{this.off("data",l),this.off("end",c),this.off(Qe,u),t(),i(d);},l=d=>{this.off("error",a),this.off("end",c),this.off(Qe,u),this.pause(),o({value:d,done:!!this[Qn]});},c=()=>{this.off("error",a),this.off("data",l),this.off(Qe,u),t(),o({done:true,value:void 0});},u=()=>a(new Error("stream destroyed"));return new Promise((d,m)=>{i=m,o=d,this.once(Qe,u),this.once("error",a),this.once("end",c),this.once("data",l);})},throw:t,return:t,[Symbol.asyncIterator](){return this}}}[Symbol.iterator](){this[Xt]=false;let e=false,t=()=>(this.pause(),this.off(Td,t),this.off(Qe,t),this.off("end",t),e=true,{done:true,value:void 0}),n=()=>{if(e)return t();let s=this.read();return s===null?t():{done:false,value:s}};return this.once("end",t),this.once(Td,t),this.once(Qe,t),{next:n,throw:t,return:t,[Symbol.iterator](){return this}}}destroy(e){if(this[Qe])return e?this.emit("error",e):this.emit(Qe),this;this[Qe]=true,this[Xt]=true,this[ut].length=0,this[dt]=0;let t=this;return typeof t.close=="function"&&!this[tl]&&t.close(),e?this.emit("error",e):this.emit(Qe),this}static get isStream(){return rk}};var xk=realpathSync.native,ni={lstatSync:lstatSync,readdir:readdir$1,readdirSync:readdirSync,readlinkSync:readlinkSync,realpathSync:xk,promises:{lstat:lstat,readdir:readdir,readlink:readlink,realpath:realpath}},Df=r=>!r||r===ni||r===Ze?ni:{...ni,...r,promises:{...ni.promises,...r.promises||{}}},Nf=/^\\\\\?\\([a-z]:)\\?$/i,_k=r=>r.replace(/\//g,"\\").replace(Nf,"$1\\"),Ik=/[\\\/]/,un=0,Lf=1,$f=2,Dn=4,Of=6,Bf=8,Js=10,Ff=12,cn=15,ti=~cn,Ad=16,Af=32,si=64,vn=128,il=256,ll=512,Mf=si|vn|ll,Ek=1023,Md=r=>r.isFile()?Bf:r.isDirectory()?Dn:r.isSymbolicLink()?Js:r.isCharacterDevice()?$f:r.isBlockDevice()?Of:r.isSocket()?Ff:r.isFIFO()?Lf:un,Pf=new Map,ri=r=>{let e=Pf.get(r);if(e)return e;let t=r.normalize("NFKD");return Pf.set(r,t),t},Rf=new Map,al=r=>{let e=Rf.get(r);if(e)return e;let t=ri(r.toLowerCase());return Rf.set(r,t),t},cl=class extends Yo{constructor(){super({max:256});}},Rd=class extends Yo{constructor(e=16*1024){super({maxSize:e,sizeCalculation:t=>t.length+1});}},Uf=Symbol("PathScurry setAsCwd"),Et=class{name;root;roots;parent;nocase;isCWD=false;#e;#t;get dev(){return this.#t}#o;get mode(){return this.#o}#s;get nlink(){return this.#s}#i;get uid(){return this.#i}#C;get gid(){return this.#C}#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}#T;get atime(){return this.#T}#h;get mtime(){return this.#h}#S;get ctime(){return this.#S}#k;get birthtime(){return this.#k}#v;#x;#w;#g;#A;#_;#n;#R;#b;#M;get parentPath(){return (this.parent||this).fullpath()}get path(){return this.parentPath}constructor(e,t=un,n,s,o,i,a){this.name=e,this.#v=o?al(e):ri(e),this.#n=t&Ek,this.nocase=o,this.roots=s,this.root=n||this,this.#R=i,this.#w=a.fullpath,this.#A=a.relative,this.#_=a.relativePosix,this.parent=a.parent,this.parent?this.#e=this.parent.#e:this.#e=Df(a.fs);}depth(){return this.#x!==void 0?this.#x:this.parent?this.#x=this.parent.depth()+1:this.#x=0}childrenCache(){return this.#R}resolve(e){if(!e)return this;let t=this.getRootString(e),s=e.substring(t.length).split(this.splitSep);return t?this.getRoot(t).#D(s):this.#D(s)}#D(e){let t=this;for(let n of e)t=t.child(n);return t}children(){let e=this.#R.get(this);if(e)return e;let t=Object.assign([],{provisional:0});return this.#R.set(this,t),this.#n&=~Ad,t}child(e,t){if(e===""||e===".")return this;if(e==="..")return this.parent||this;let n=this.children(),s=this.nocase?al(e):ri(e);for(let l of n)if(l.#v===s)return l;let o=this.parent?this.sep:"",i=this.#w?this.#w+o+e:void 0,a=this.newChild(e,un,{...t,parent:this,fullpath:i});return this.canReaddir()||(a.#n|=vn),n.push(a),a}relative(){if(this.isCWD)return "";if(this.#A!==void 0)return this.#A;let e=this.name,t=this.parent;if(!t)return this.#A=this.name;let n=t.relative();return n+(!n||!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 n=t.relativePosix();return n+(!n||!t.parent?"":"/")+e}fullpath(){if(this.#w!==void 0)return this.#w;let e=this.name,t=this.parent;if(!t)return this.#w=this.name;let s=t.fullpath()+(t.parent?this.sep:"")+e;return this.#w=s}fullpathPosix(){if(this.#g!==void 0)return this.#g;if(this.sep==="/")return this.#g=this.fullpath();if(!this.parent){let s=this.fullpath().replace(/\\/g,"/");return /^[a-z]:\//i.test(s)?this.#g=`//?/${s}`:this.#g=s}let e=this.parent,t=e.fullpathPosix(),n=t+(!t||!e.parent?"":"/")+this.name;return this.#g=n}isUnknown(){return (this.#n&cn)===un}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.#n&cn)===Bf}isDirectory(){return (this.#n&cn)===Dn}isCharacterDevice(){return (this.#n&cn)===$f}isBlockDevice(){return (this.#n&cn)===Of}isFIFO(){return (this.#n&cn)===Lf}isSocket(){return (this.#n&cn)===Ff}isSymbolicLink(){return (this.#n&Js)===Js}lstatCached(){return this.#n&Af?this:void 0}readlinkCached(){return this.#b}realpathCached(){return this.#M}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.#n&cn;return !(e!==un&&e!==Js||this.#n&il||this.#n&vn)}calledReaddir(){return !!(this.#n&Ad)}isENOENT(){return !!(this.#n&vn)}isNamed(e){return this.nocase?this.#v===al(e):this.#v===ri(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()),n=(await this.parent.realpath())?.resolve(t);if(n)return this.#b=n}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()),n=this.parent.realpathSync()?.resolve(t);if(n)return this.#b=n}catch(t){this.#u(t.code);return}}#N(e){this.#n|=Ad;for(let t=e.provisional;t<e.length;t++){let n=e[t];n&&n.#L();}}#L(){this.#n&vn||(this.#n=(this.#n|vn)&ti,this.#I());}#I(){let e=this.children();e.provisional=0;for(let t of e)t.#L();}#E(){this.#n|=ll,this.#$();}#$(){if(this.#n&si)return;let e=this.#n;(e&cn)===Dn&&(e&=ti),this.#n=e|si,this.#I();}#O(e=""){e==="ENOTDIR"||e==="EPERM"?this.#$():e==="ENOENT"?this.#L():this.children().provisional=0;}#B(e=""){e==="ENOTDIR"?this.parent.#$():e==="ENOENT"&&this.#L();}#u(e=""){let t=this.#n;t|=il,e==="ENOENT"&&(t|=vn),(e==="EINVAL"||e==="UNKNOWN")&&(t&=ti),this.#n=t,e==="ENOTDIR"&&this.parent&&this.parent.#$();}#F(e,t){return this.#P(e,t)||this.#U(e,t)}#U(e,t){let n=Md(e),s=this.newChild(e.name,n,{parent:this}),o=s.#n&cn;return o!==Dn&&o!==Js&&o!==un&&(s.#n|=si),t.unshift(s),t.provisional++,s}#P(e,t){for(let n=t.provisional;n<t.length;n++){let s=t[n];if((this.nocase?al(e.name):ri(e.name))===s.#v)return this.#G(e,s,n,t)}}#G(e,t,n,s){let o=t.name;return t.#n=t.#n&ti|Md(e),o!==e.name&&(t.name=e.name),n!==s.provisional&&(n===s.length-1?s.pop():s.splice(n,1),s.unshift(t)),s.provisional++,t}async lstat(){if((this.#n&vn)===0)try{return this.#z(await this.#e.promises.lstat(this.fullpath())),this}catch(e){this.#B(e.code);}}lstatSync(){if((this.#n&vn)===0)try{return this.#z(this.#e.lstatSync(this.fullpath())),this}catch(e){this.#B(e.code);}}#z(e){let{atime:t,atimeMs:n,birthtime:s,birthtimeMs:o,blksize:i,blocks:a,ctime:l,ctimeMs:c,dev:u,gid:d,ino:m,mode:g,mtime:h,mtimeMs:f,nlink:b,rdev:v,size:C,uid:T}=e;this.#T=t,this.#f=n,this.#k=s,this.#p=o,this.#d=i,this.#r=a,this.#S=l,this.#m=c,this.#t=u,this.#C=d,this.#a=m,this.#o=g,this.#h=h,this.#y=f,this.#s=b,this.#c=v,this.#l=C,this.#i=T;let I=Md(e);this.#n=this.#n&ti|I|Af,I!==un&&I!==Dn&&I!==Js&&(this.#n|=si);}#W=[];#H=false;#q(e){this.#H=false;let t=this.#W.slice();this.#W.length=0,t.forEach(n=>n(null,e));}readdirCB(e,t=false){if(!this.canReaddir()){t?e(null,[]):queueMicrotask(()=>e(null,[]));return}let n=this.children();if(this.calledReaddir()){let o=n.slice(0,n.provisional);t?e(null,o):queueMicrotask(()=>e(null,o));return}if(this.#W.push(e),this.#H)return;this.#H=true;let s=this.fullpath();this.#e.readdir(s,{withFileTypes:true},(o,i)=>{if(o)this.#O(o.code),n.provisional=0;else {for(let a of i)this.#F(a,n);this.#N(n);}this.#q(n.slice(0,n.provisional));});}#j;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.#j)await this.#j;else {let n=()=>{};this.#j=new Promise(s=>n=s);try{for(let s of await this.#e.promises.readdir(t,{withFileTypes:!0}))this.#F(s,e);this.#N(e);}catch(s){this.#O(s.code),e.provisional=0;}this.#j=void 0,n();}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 n of this.#e.readdirSync(t,{withFileTypes:!0}))this.#F(n,e);this.#N(e);}catch(n){this.#O(n.code),e.provisional=0;}return e.slice(0,e.provisional)}canReaddir(){if(this.#n&Mf)return false;let e=cn&this.#n;return e===un||e===Dn||e===Js}shouldWalk(e,t){return (this.#n&Dn)===Dn&&!(this.#n&Mf)&&!e.has(this)&&(!t||t(this))}async realpath(){if(this.#M)return this.#M;if(!((ll|il|vn)&this.#n))try{let e=await this.#e.promises.realpath(this.fullpath());return this.#M=this.resolve(e)}catch{this.#E();}}realpathSync(){if(this.#M)return this.#M;if(!((ll|il|vn)&this.#n))try{let e=this.#e.realpathSync(this.fullpath());return this.#M=this.resolve(e)}catch{this.#E();}}[Uf](e){if(e===this)return;e.isCWD=false,this.isCWD=true;let t=new Set([]),n=[],s=this;for(;s&&s.parent;)t.add(s),s.#A=n.join(this.sep),s.#_=n.join("/"),s=s.parent,n.push("..");for(s=e;s&&s.parent&&!t.has(s);)s.#A=void 0,s.#_=void 0,s=s.parent;}},ul=class r extends Et{sep="\\";splitSep=Ik;constructor(e,t=un,n,s,o,i,a){super(e,t,n,s,o,i,a);}newChild(e,t=un,n={}){return new r(e,t,this.root,this.roots,this.nocase,this.childrenCache(),n)}getRootString(e){return win32.parse(e).root}getRoot(e){if(e=_k(e.toUpperCase()),e===this.root.name)return this.root;for(let[t,n]of Object.entries(this.roots))if(this.sameRoot(e,t))return this.roots[e]=n;return this.roots[e]=new jr(e,this).root}sameRoot(e,t=this.root.name){return e=e.toUpperCase().replace(/\//g,"\\").replace(Nf,"$1\\"),e===t}},dl=class r extends Et{splitSep="/";sep="/";constructor(e,t=un,n,s,o,i,a){super(e,t,n,s,o,i,a);}getRootString(e){return e.startsWith("/")?"/":""}getRoot(e){return this.root}newChild(e,t=un,n={}){return new r(e,t,this.root,this.roots,this.nocase,this.childrenCache(),n)}},pl=class{root;rootPath;roots;cwd;#e;#t;#o;nocase;#s;constructor(e=process.cwd(),t,n,{nocase:s,childrenCacheSize:o=16*1024,fs:i=ni}={}){this.#s=Df(i),(e instanceof URL||e.startsWith("file://"))&&(e=fileURLToPath(e));let a=t.resolve(e);this.roots=Object.create(null),this.rootPath=this.parseRootPath(a),this.#e=new cl,this.#t=new cl,this.#o=new Rd(o);let l=a.substring(this.rootPath.length).split(n);if(l.length===1&&!l[0]&&l.pop(),s===void 0)throw new TypeError("must provide nocase setting to PathScurryBase ctor");this.nocase=s,this.root=this.newRoot(this.#s),this.roots[this.rootPath]=this.root;let c=this.root,u=l.length-1,d=t.sep,m=this.rootPath,g=false;for(let h of l){let f=u--;c=c.child(h,{relative:new Array(f).fill("..").join(d),relativePosix:new Array(f).fill("..").join("/"),fullpath:m+=(g?"":d)+h}),g=true;}this.cwd=c;}depth(e=this.cwd){return typeof e=="string"&&(e=this.cwd.resolve(e)),e.depth()}childrenCache(){return this.#o}resolve(...e){let t="";for(let o=e.length-1;o>=0;o--){let i=e[o];if(!(!i||i===".")&&(t=t?`${i}/${t}`:i,this.isAbsolute(i)))break}let n=this.#e.get(t);if(n!==void 0)return n;let s=this.cwd.resolve(t).fullpath();return this.#e.set(t,s),s}resolvePosix(...e){let t="";for(let o=e.length-1;o>=0;o--){let i=e[o];if(!(!i||i===".")&&(t=t?`${i}/${t}`:i,this.isAbsolute(i)))break}let n=this.#t.get(t);if(n!==void 0)return n;let s=this.cwd.resolve(t).fullpathPosix();return this.#t.set(t,s),s}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 Et||(t=e,e=this.cwd);let{withFileTypes:n}=t;if(e.canReaddir()){let s=await e.readdir();return n?s:s.map(o=>o.name)}else return []}readdirSync(e=this.cwd,t={withFileTypes:true}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(t=e,e=this.cwd);let{withFileTypes:n=true}=t;return e.canReaddir()?n?e.readdirSync():e.readdirSync().map(s=>s.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 Et||(t=e.withFileTypes,e=this.cwd);let n=await e.readlink();return t?n:n?.fullpath()}readlinkSync(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(t=e.withFileTypes,e=this.cwd);let n=e.readlinkSync();return t?n:n?.fullpath()}async realpath(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(t=e.withFileTypes,e=this.cwd);let n=await e.realpath();return t?n:n?.fullpath()}realpathSync(e=this.cwd,{withFileTypes:t}={withFileTypes:false}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(t=e.withFileTypes,e=this.cwd);let n=e.realpathSync();return t?n:n?.fullpath()}async walk(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(t=e,e=this.cwd);let{withFileTypes:n=true,follow:s=false,filter:o,walkFilter:i}=t,a=[];(!o||o(e))&&a.push(n?e:e.fullpath());let l=new Set,c=(d,m)=>{l.add(d),d.readdirCB((g,h)=>{if(g)return m(g);let f=h.length;if(!f)return m();let b=()=>{--f===0&&m();};for(let v of h)(!o||o(v))&&a.push(n?v:v.fullpath()),s&&v.isSymbolicLink()?v.realpath().then(C=>C?.isUnknown()?C.lstat():C).then(C=>C?.shouldWalk(l,i)?c(C,b):b()):v.shouldWalk(l,i)?c(v,b):b();},true);},u=e;return new Promise((d,m)=>{c(u,g=>{if(g)return m(g);d(a);});})}walkSync(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(t=e,e=this.cwd);let{withFileTypes:n=true,follow:s=false,filter:o,walkFilter:i}=t,a=[];(!o||o(e))&&a.push(n?e:e.fullpath());let l=new Set([e]);for(let c of l){let u=c.readdirSync();for(let d of u){(!o||o(d))&&a.push(n?d:d.fullpath());let m=d;if(d.isSymbolicLink()){if(!(s&&(m=d.realpathSync())))continue;m.isUnknown()&&m.lstatSync();}m.shouldWalk(l,i)&&l.add(m);}}return a}[Symbol.asyncIterator](){return this.iterate()}iterate(e=this.cwd,t={}){return typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(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 Et||(t=e,e=this.cwd);let{withFileTypes:n=true,follow:s=false,filter:o,walkFilter:i}=t;(!o||o(e))&&(yield n?e:e.fullpath());let a=new Set([e]);for(let l of a){let c=l.readdirSync();for(let u of c){(!o||o(u))&&(yield n?u:u.fullpath());let d=u;if(u.isSymbolicLink()){if(!(s&&(d=u.realpathSync())))continue;d.isUnknown()&&d.lstatSync();}d.shouldWalk(a,i)&&a.add(d);}}}stream(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(t=e,e=this.cwd);let{withFileTypes:n=true,follow:s=false,filter:o,walkFilter:i}=t,a=new xs({objectMode:true});(!o||o(e))&&a.write(n?e:e.fullpath());let l=new Set,c=[e],u=0,d=()=>{let m=false;for(;!m;){let g=c.shift();if(!g){u===0&&a.end();return}u++,l.add(g);let h=(b,v,C=false)=>{if(b)return a.emit("error",b);if(s&&!C){let T=[];for(let I of v)I.isSymbolicLink()&&T.push(I.realpath().then(M=>M?.isUnknown()?M.lstat():M));if(T.length){Promise.all(T).then(()=>h(null,v,true));return}}for(let T of v)T&&(!o||o(T))&&(a.write(n?T:T.fullpath())||(m=true));u--;for(let T of v){let I=T.realpathCached()||T;I.shouldWalk(l,i)&&c.push(I);}m&&!a.flowing?a.once("drain",d):f||d();},f=true;g.readdirCB(h,true),f=false;}};return d(),a}streamSync(e=this.cwd,t={}){typeof e=="string"?e=this.cwd.resolve(e):e instanceof Et||(t=e,e=this.cwd);let{withFileTypes:n=true,follow:s=false,filter:o,walkFilter:i}=t,a=new xs({objectMode:true}),l=new Set;(!o||o(e))&&a.write(n?e:e.fullpath());let c=[e],u=0,d=()=>{let m=false;for(;!m;){let g=c.shift();if(!g){u===0&&a.end();return}u++,l.add(g);let h=g.readdirSync();for(let f of h)(!o||o(f))&&(a.write(n?f:f.fullpath())||(m=true));u--;for(let f of h){let b=f;if(f.isSymbolicLink()){if(!(s&&(b=f.realpathSync())))continue;b.isUnknown()&&b.lstatSync();}b.shouldWalk(l,i)&&c.push(b);}}m&&!a.flowing&&a.once("drain",d);};return d(),a}chdir(e=this.cwd){let t=this.cwd;this.cwd=typeof e=="string"?this.cwd.resolve(e):e,this.cwd[Uf](t);}},jr=class extends pl{sep="\\";constructor(e=process.cwd(),t={}){let{nocase:n=true}=t;super(e,win32,"\\",{...t,nocase:n}),this.nocase=n;for(let s=this.cwd;s;s=s.parent)s.nocase=this.nocase;}parseRootPath(e){return win32.parse(e).root.toUpperCase()}newRoot(e){return new ul(this.rootPath,Dn,void 0,this.roots,this.nocase,this.childrenCache(),{fs:e})}isAbsolute(e){return e.startsWith("/")||e.startsWith("\\")||/^[a-z]:(\/|\\)/i.test(e)}},Wr=class extends pl{sep="/";constructor(e=process.cwd(),t={}){let{nocase:n=false}=t;super(e,posix,"/",{...t,nocase:n}),this.nocase=n;}parseRootPath(e){return "/"}newRoot(e){return new dl(this.rootPath,Dn,void 0,this.roots,this.nocase,this.childrenCache(),{fs:e})}isAbsolute(e){return e.startsWith("/")}},oi=class extends Wr{constructor(e=process.cwd(),t={}){let{nocase:n=true}=t;super(e,{...t,nocase:n});}};process.platform==="win32"?ul:dl;var Gf=process.platform==="win32"?jr:process.platform==="darwin"?oi:Wr;var Ak=r=>r.length>=1,Mk=r=>r.length>=1,Hr=class r{#e;#t;#o;length;#s;#i;#C;#c;#d;#a;#l=true;constructor(e,t,n,s){if(!Ak(e))throw new TypeError("empty pattern list");if(!Mk(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,n<0||n>=this.length)throw new TypeError("index out of range");if(this.#e=e,this.#t=t,this.#o=n,this.#s=s,this.#o===0){if(this.isUNC()){let[o,i,a,l,...c]=this.#e,[u,d,m,g,...h]=this.#t;c[0]===""&&(c.shift(),h.shift());let f=[o,i,a,l,""].join("/"),b=[u,d,m,g,""].join("/");this.#e=[f,...c],this.#t=[b,...h],this.length=this.#e.length;}else if(this.isDrive()||this.isAbsolute()){let[o,...i]=this.#e,[a,...l]=this.#t;i[0]===""&&(i.shift(),l.shift());let c=o+"/",u=a+"/";this.#e=[c,...i],this.#t=[u,...l],this.length=this.#e.length;}}}pattern(){return this.#e[this.#o]}isString(){return typeof this.#e[this.#o]=="string"}isGlobstar(){return this.#e[this.#o]===yt}isRegExp(){return this.#e[this.#o]instanceof RegExp}globString(){return this.#C=this.#C||(this.#o===0?this.isAbsolute()?this.#t[0]+this.#t.slice(1).join("/"):this.#t.join("/"):this.#t.slice(this.#o).join("/"))}hasMore(){return this.length>this.#o+1}rest(){return this.#i!==void 0?this.#i:this.hasMore()?(this.#i=new r(this.#e,this.#t,this.#o+1,this.#s),this.#i.#a=this.#a,this.#i.#d=this.#d,this.#i.#c=this.#c,this.#i):this.#i=null}isUNC(){let e=this.#e;return this.#d!==void 0?this.#d:this.#d=this.#s==="win32"&&this.#o===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.#s==="win32"&&this.#o===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.#o===0?e:""}checkFollowGlobstar(){return !(this.#o===0||!this.isGlobstar()||!this.#l)}markFollowGlobstar(){return this.#o===0||!this.isGlobstar()||!this.#l?false:(this.#l=false,true)}};var Pk=typeof process=="object"&&process&&typeof process.platform=="string"?process.platform:"linux",zr=class{relative;relativeChildren;absolute;absoluteChildren;platform;mmopts;constructor(e,{nobrace:t,nocase:n,noext:s,noglobstar:o,platform:i=Pk}){this.relative=[],this.absolute=[],this.relativeChildren=[],this.absoluteChildren=[],this.platform=i,this.mmopts={dot:true,nobrace:t,nocase:n,noext:s,noglobstar:o,optimizationLevel:2,platform:i,nocomment:true,nonegate:true};for(let a of e)this.add(a);}add(e){let t=new Yt(e,this.mmopts);for(let n=0;n<t.set.length;n++){let s=t.set[n],o=t.globParts[n];if(!s||!o)throw new Error("invalid pattern object");for(;s[0]==="."&&o[0]===".";)s.shift(),o.shift();let i=new Hr(s,o,0,this.platform),a=new Yt(i.globString(),this.mmopts),l=o[o.length-1]==="**",c=i.isAbsolute();c?this.absolute.push(a):this.relative.push(a),l&&(c?this.absoluteChildren.push(a):this.relativeChildren.push(a));}}ignored(e){let t=e.fullpath(),n=`${t}/`,s=e.relative()||".",o=`${s}/`;for(let i of this.relative)if(i.match(s)||i.match(o))return true;for(let i of this.absolute)if(i.match(t)||i.match(n))return true;return false}childrenIgnored(e){let t=e.fullpath()+"/",n=(e.relative()||".")+"/";for(let s of this.relativeChildren)if(s.match(n))return true;for(let s of this.absoluteChildren)if(s.match(t))return true;return false}};var Dd=class r{store;constructor(e=new Map){this.store=e;}copy(){return new r(new Map(this.store))}hasWalked(e,t){return this.store.get(e.fullpath())?.has(t.globString())}storeWalked(e,t){let n=e.fullpath(),s=this.store.get(n);s?s.add(t.globString()):this.store.set(n,new Set([t.globString()]));}},Nd=class{store=new Map;add(e,t,n){let s=(t?2:0)|(n?1:0),o=this.store.get(e);this.store.set(e,o===void 0?s:s&o);}entries(){return [...this.store.entries()].map(([e,t])=>[e,!!(t&2),!!(t&1)])}},Ld=class{store=new Map;add(e,t){if(!e.canReaddir())return;let n=this.store.get(e);n?n.find(s=>s.globString()===t.globString())||n.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())}},ii=class r{hasWalkedCache;matches=new Nd;subwalks=new Ld;patterns;follow;dot;opts;constructor(e,t){this.opts=e,this.follow=!!e.follow,this.dot=!!e.dot,this.hasWalkedCache=t?t.copy():new Dd;}processPatterns(e,t){this.patterns=t;let n=t.map(s=>[e,s]);for(let[s,o]of n){this.hasWalkedCache.storeWalked(s,o);let i=o.root(),a=o.isAbsolute()&&this.opts.absolute!==false;if(i){s=s.resolve(i==="/"&&this.opts.root!==void 0?this.opts.root:i);let d=o.rest();if(d)o=d;else {this.matches.add(s,true,false);continue}}if(s.isENOENT())continue;let l,c,u=false;for(;typeof(l=o.pattern())=="string"&&(c=o.rest());)s=s.resolve(l),o=c,u=true;if(l=o.pattern(),c=o.rest(),u){if(this.hasWalkedCache.hasWalked(s,o))continue;this.hasWalkedCache.storeWalked(s,o);}if(typeof l=="string"){let d=l===".."||l===""||l===".";this.matches.add(s.resolve(l),a,d);continue}else if(l===yt){(!s.isSymbolicLink()||this.follow||o.checkFollowGlobstar())&&this.subwalks.add(s,o);let d=c?.pattern(),m=c?.rest();if(!c||(d===""||d===".")&&!m)this.matches.add(s,a,d===""||d===".");else if(d===".."){let g=s.parent||s;m?this.hasWalkedCache.hasWalked(g,m)||this.subwalks.add(g,m):this.matches.add(g,a,true);}}else l instanceof RegExp&&this.subwalks.add(s,o);}return this}subwalkTargets(){return this.subwalks.keys()}child(){return new r(this.opts,this.hasWalkedCache)}filterEntries(e,t){let n=this.subwalks.get(e),s=this.child();for(let o of t)for(let i of n){let a=i.isAbsolute(),l=i.pattern(),c=i.rest();l===yt?s.testGlobstar(o,i,c,a):l instanceof RegExp?s.testRegExp(o,l,c,a):s.testString(o,l,c,a);}return s}testGlobstar(e,t,n,s){if((this.dot||!e.name.startsWith("."))&&(t.hasMore()||this.matches.add(e,s,false),e.canReaddir()&&(this.follow||!e.isSymbolicLink()?this.subwalks.add(e,t):e.isSymbolicLink()&&(n&&t.checkFollowGlobstar()?this.subwalks.add(e,n):t.markFollowGlobstar()&&this.subwalks.add(e,t)))),n){let o=n.pattern();if(typeof o=="string"&&o!==".."&&o!==""&&o!==".")this.testString(e,o,n.rest(),s);else if(o===".."){let i=e.parent||e;this.subwalks.add(i,n);}else o instanceof RegExp&&this.testRegExp(e,o,n.rest(),s);}}testRegExp(e,t,n,s){t.test(e.name)&&(n?this.subwalks.add(e,n):this.matches.add(e,s,false));}testString(e,t,n,s){e.isNamed(t)&&(n?this.subwalks.add(e,n):this.matches.add(e,s,false));}};var Rk=(r,e)=>typeof r=="string"?new zr([r],e):Array.isArray(r)?new zr(r,e):r,ml=class{path;patterns;opts;seen=new Set;paused=false;aborted=false;#e=[];#t;#o;signal;maxDepth;includeChildMatches;constructor(e,t,n){if(this.patterns=e,this.path=t,this.opts=n,this.#o=!n.posix&&n.platform==="win32"?"\\":"/",this.includeChildMatches=n.includeChildMatches!==false,(n.ignore||!this.includeChildMatches)&&(this.#t=Rk(n.ignore??[],n),!this.includeChildMatches&&typeof this.#t.add!="function")){let s="cannot ignore child matches, ignore lacks add() method.";throw new Error(s)}this.maxDepth=n.maxDepth||1/0,n.signal&&(this.signal=n.signal,this.signal.addEventListener("abort",()=>{this.#e.length=0;}));}#s(e){return this.seen.has(e)||!!this.#t?.ignored?.(e)}#i(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 n;if(this.opts.realpath){if(n=e.realpathCached()||await e.realpath(),!n)return;e=n;}let o=e.isUnknown()||this.opts.stat?await e.lstat():e;if(this.opts.follow&&this.opts.nodir&&o?.isSymbolicLink()){let i=await o.realpath();i&&(i.isUnknown()||this.opts.stat)&&await i.lstat();}return this.matchCheckTest(o,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.#s(e)?e:void 0}matchCheckSync(e,t){if(t&&this.opts.nodir)return;let n;if(this.opts.realpath){if(n=e.realpathCached()||e.realpathSync(),!n)return;e=n;}let o=e.isUnknown()||this.opts.stat?e.lstatSync():e;if(this.opts.follow&&this.opts.nodir&&o?.isSymbolicLink()){let i=o.realpathSync();i&&(i?.isUnknown()||this.opts.stat)&&i.lstatSync();}return this.matchCheckTest(o,t)}matchFinish(e,t){if(this.#s(e))return;if(!this.includeChildMatches&&this.#t?.add){let o=`${e.relativePosix()}/**`;this.#t.add(o);}let n=this.opts.absolute===void 0?t:this.opts.absolute;this.seen.add(e);let s=this.opts.mark&&e.isDirectory()?this.#o:"";if(this.opts.withFileTypes)this.matchEmit(e);else if(n){let o=this.opts.posix?e.fullpathPosix():e.fullpath();this.matchEmit(o+s);}else {let o=this.opts.posix?e.relativePosix():e.relative(),i=this.opts.dotRelative&&!o.startsWith(".."+this.#o)?"."+this.#o:"";this.matchEmit(o?i+o+s:"."+s);}}async match(e,t,n){let s=await this.matchCheck(e,n);s&&this.matchFinish(s,t);}matchSync(e,t,n){let s=this.matchCheckSync(e,n);s&&this.matchFinish(s,t);}walkCB(e,t,n){this.signal?.aborted&&n(),this.walkCB2(e,t,new ii(this.opts),n);}walkCB2(e,t,n,s){if(this.#i(e))return s();if(this.signal?.aborted&&s(),this.paused){this.onResume(()=>this.walkCB2(e,t,n,s));return}n.processPatterns(e,t);let o=1,i=()=>{--o===0&&s();};for(let[a,l,c]of n.matches.entries())this.#s(a)||(o++,this.match(a,l,c).then(()=>i()));for(let a of n.subwalkTargets()){if(this.maxDepth!==1/0&&a.depth()>=this.maxDepth)continue;o++;let l=a.readdirCached();a.calledReaddir()?this.walkCB3(a,l,n,i):a.readdirCB((c,u)=>this.walkCB3(a,u,n,i),true);}i();}walkCB3(e,t,n,s){n=n.filterEntries(e,t);let o=1,i=()=>{--o===0&&s();};for(let[a,l,c]of n.matches.entries())this.#s(a)||(o++,this.match(a,l,c).then(()=>i()));for(let[a,l]of n.subwalks.entries())o++,this.walkCB2(a,l,n.child(),i);i();}walkCBSync(e,t,n){this.signal?.aborted&&n(),this.walkCB2Sync(e,t,new ii(this.opts),n);}walkCB2Sync(e,t,n,s){if(this.#i(e))return s();if(this.signal?.aborted&&s(),this.paused){this.onResume(()=>this.walkCB2Sync(e,t,n,s));return}n.processPatterns(e,t);let o=1,i=()=>{--o===0&&s();};for(let[a,l,c]of n.matches.entries())this.#s(a)||this.matchSync(a,l,c);for(let a of n.subwalkTargets()){if(this.maxDepth!==1/0&&a.depth()>=this.maxDepth)continue;o++;let l=a.readdirSync();this.walkCB3Sync(a,l,n,i);}i();}walkCB3Sync(e,t,n,s){n=n.filterEntries(e,t);let o=1,i=()=>{--o===0&&s();};for(let[a,l,c]of n.matches.entries())this.#s(a)||this.matchSync(a,l,c);for(let[a,l]of n.subwalks.entries())o++,this.walkCB2Sync(a,l,n.child(),i);i();}},ai=class extends ml{matches=new Set;constructor(e,t,n){super(e,t,n);}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}},li=class extends ml{results;constructor(e,t,n){super(e,t,n),this.results=new xs({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 Nk=typeof process=="object"&&process&&typeof process.platform=="string"?process.platform:"linux",Cn=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||Nk,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"?jr:t.platform==="darwin"?oi:t.platform?Wr:Gf;this.scurry=new l(this.cwd,{nocase:t.nocase,fs:t.fs});}this.nocase=this.scurry.nocase;let n=this.platform==="darwin"||this.platform==="win32",s={...t,dot:this.dot,matchBase:this.matchBase,nobrace:this.nobrace,nocase:this.nocase,nocaseMagicOnly:n,nocomment:true,noext:this.noext,nonegate:true,optimizationLevel:2,platform:this.platform,windowsPathsNoEscape:this.windowsPathsNoEscape,debug:!!this.opts.debug},o=this.pattern.map(l=>new Yt(l,s)),[i,a]=o.reduce((l,c)=>(l[0].push(...c.set),l[1].push(...c.globParts),l),[[],[]]);this.patterns=i.map((l,c)=>{let u=a[c];if(!u)throw new Error("invalid pattern object");return new Hr(l,u,0,this.platform)});}async walk(){return [...await new ai(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 ai(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 li(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 li(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 $d=(r,e={})=>{Array.isArray(r)||(r=[r]);for(let t of r)if(new Yt(t,e).hasMagic())return true;return false};function gl(r,e={}){return new Cn(r,e).streamSync()}function Wf(r,e={}){return new Cn(r,e).stream()}function Hf(r,e={}){return new Cn(r,e).walkSync()}async function jf(r,e={}){return new Cn(r,e).walk()}function hl(r,e={}){return new Cn(r,e).iterateSync()}function zf(r,e={}){return new Cn(r,e).iterate()}var Lk=gl,$k=Object.assign(Wf,{sync:gl}),Ok=hl,Bk=Object.assign(zf,{sync:hl}),Fk=Object.assign(Hf,{stream:gl,iterate:hl}),qr=Object.assign(jf,{glob:jf,globSync:Hf,sync:Fk,globStream:Wf,stream:$k,globStreamSync:gl,streamSync:Lk,globIterate:zf,iterate:Bk,globIterateSync:hl,iterateSync:Ok,Glob:Cn,hasMagic:$d,escape:Or,unescape:yn});qr.glob=qr;var ci=class{languageId="typescript";extensions=[".ts",".tsx",".js",".jsx",".mjs",".cjs"];async parse(e,t){let n=e.split(`
|
|
@@ -380,10 +380,10 @@ globstar while`,e,m,t,g,h),this.matchOne(e.slice(m),t.slice(g),n))return this.de
|
|
|
380
380
|
`)}buildSymbolPattern(e,t){let n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");switch(t){case "function":return `(function|async\\s+function|const|let|var)\\s+${n}\\s*[=(<]`;case "class":return `class\\s+${n}(\\s+extends|\\s+implements|\\s*\\{)`;case "interface":return `interface\\s+${n}(\\s+extends|\\s*\\{)`;case "type":return `type\\s+${n}\\s*[=<]`;case "enum":return `enum\\s+${n}\\s*\\{`;case "method":return `(async\\s+)?${n}\\s*\\(`;case "variable":return `(const|let|var)\\s+${n}\\s*[=:]`;default:return `(function|class|interface|type|enum|const|let|var)\\s+${n}|${n}\\s*(=|\\()`}}};var ui=class{languageId="python";extensions=[".py",".pyw"];async parse(e,t){let n=e.split(`
|
|
381
381
|
`),s=[],o={class:/^(\s*)class\s+(\w+)(\s*\([^)]*\))?\s*:/,function:/^(\s*)(async\s+)?def\s+(\w+)\s*\(/,variable:/^([A-Z][A-Z0-9_]*)\s*[=:]/},i=null,a=-1;for(let l=0;l<n.length;l++){let c=n[l],u=l+1,d=c.match(/^(\s*)/)?.[1].length||0;if(i&&c.trim()&&d<=a&&(i.endLine=l,s.push(i),i=null,a=-1),c.trim().startsWith("#")||!c.trim())continue;let m=c.match(o.class);if(m){i&&(i.endLine=l,s.push(i)),a=m[1].length,i={name:m[2],kind:"class",startLine:u,endLine:this.findClassEnd(n,l,a),children:[],docstring:this.extractDocstring(n,l+1)};continue}let g=c.match(o.function);if(g){let h=g[1].length,f=g[3],b=i&&h>a,v={name:f,kind:b?"method":"function",startLine:u,endLine:this.findFunctionEnd(n,l,h),docstring:this.extractDocstring(n,l+1)};b&&i?(v.parent=i.name,i.children.push(v)):s.push(v);continue}if(!i&&c.match(o.variable)){let h=c.match(o.variable);h&&s.push({name:h[1],kind:"constant",startLine:u,endLine:u});}}return i&&(i.endLine=n.length,s.push(i)),s}findClassEnd(e,t,n){for(let s=t+1;s<e.length;s++){let o=e[s];if(!o.trim())continue;if((o.match(/^(\s*)/)?.[1].length||0)<=n)return s}return e.length}findFunctionEnd(e,t,n){let s=false;for(let o=t+1;o<e.length;o++){let i=e[o];if(!i.trim())continue;let a=i.match(/^(\s*)/)?.[1].length||0;if(a>n){s=true;continue}if(s&&a<=n)return o}return e.length}extractDocstring(e,t){if(t>=e.length)return;let n=e[t].trim();if(n.startsWith('"""')||n.startsWith("'''")){let s=n.startsWith('"""')?'"""':"'''";if(n.endsWith(s)&&n.length>6)return n.slice(3,-3);let o=[n.slice(3)];for(let i=t+1;i<e.length;i++){let a=e[i].trim();if(a.endsWith(s)){o.push(a.slice(0,-3));break}o.push(a);}return o.join(`
|
|
382
382
|
`).trim()}}buildSymbolPattern(e,t){let n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");switch(t){case "function":case "method":return `(async\\s+)?def\\s+${n}\\s*\\(`;case "class":return `class\\s+${n}(\\s*\\(|\\s*:)`;case "variable":case "constant":return `^${n}\\s*[=:]`;default:return `(def|class)\\s+${n}|^${n}\\s*[=:]`}}};var di=class{languageId="generic";extensions=["*"];async parse(e,t){let n=e.split(`
|
|
383
|
-
`),s=[],o={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<n.length;i++){let a=n[i],l=i+1;if(!this.isComment(a)){for(let c of o.function){let u=a.match(c);if(u){let d=this.extractName(u);d&&!this.isKeyword(d)&&s.push({name:d,kind:"function",startLine:l,endLine:bs(n,i)});break}}for(let c of o.class){let u=a.match(c);if(u){let d=this.extractName(u);d&&s.push({name:d,kind:"class",startLine:l,endLine:bs(n,i)});break}}for(let c of o.interface){let u=a.match(c);if(u){let d=this.extractName(u);d&&s.push({name:d,kind:"interface",startLine:l,endLine:bs(n,i)});break}}for(let c of o.constant){let u=a.match(c);if(u){let d=this.extractName(u);d&&s.push({name:d,kind:"constant",startLine:l,endLine:l});break}}}}return s}extractName(e){for(let t=e.length-1;t>0;t--){let n=e[t];if(n&&/^\w+$/.test(n)&&!this.isModifier(n))return n}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 n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");switch(t){case "function":return `(function|func|fn|def)\\s+${n}|${n}\\s*\\(`;case "class":return `(class|struct|type)\\s+${n}`;case "interface":return `(interface|trait)\\s+${n}`;default:return `(function|class|interface|struct|type|func|fn|def)\\s+${n}|${n}\\s*[=(]`}}};var pi=class{parsers=new Map;constructor(){this.register(new ci),this.register(new ui),this.register(new di);}register(e){this.parsers.set(e.languageId,e);for(let t of e.extensions){let n=this.getLanguageFromExtension(t);n&&this.parsers.has(n);}}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 Uk="1.0.0",fl=class{workspacePath;config;metadata=null;fileIndexCache=new Map;parserRegistry;constructor(e,t={}){this.workspacePath=e,this.config={...Hh,...t},this.parserRegistry=new pi;}get indexDir(){return ge.join(this.workspacePath,this.config.cacheDir)}async hasIndex(){let e=ge.join(this.indexDir,"meta.json");return qh(e)}async loadMetadata(){if(this.metadata)return this.metadata;let e=ge.join(this.indexDir,"meta.json");try{let t=await
|
|
383
|
+
`),s=[],o={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<n.length;i++){let a=n[i],l=i+1;if(!this.isComment(a)){for(let c of o.function){let u=a.match(c);if(u){let d=this.extractName(u);d&&!this.isKeyword(d)&&s.push({name:d,kind:"function",startLine:l,endLine:bs(n,i)});break}}for(let c of o.class){let u=a.match(c);if(u){let d=this.extractName(u);d&&s.push({name:d,kind:"class",startLine:l,endLine:bs(n,i)});break}}for(let c of o.interface){let u=a.match(c);if(u){let d=this.extractName(u);d&&s.push({name:d,kind:"interface",startLine:l,endLine:bs(n,i)});break}}for(let c of o.constant){let u=a.match(c);if(u){let d=this.extractName(u);d&&s.push({name:d,kind:"constant",startLine:l,endLine:l});break}}}}return s}extractName(e){for(let t=e.length-1;t>0;t--){let n=e[t];if(n&&/^\w+$/.test(n)&&!this.isModifier(n))return n}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 n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");switch(t){case "function":return `(function|func|fn|def)\\s+${n}|${n}\\s*\\(`;case "class":return `(class|struct|type)\\s+${n}`;case "interface":return `(interface|trait)\\s+${n}`;default:return `(function|class|interface|struct|type|func|fn|def)\\s+${n}|${n}\\s*[=(]`}}};var pi=class{parsers=new Map;constructor(){this.register(new ci),this.register(new ui),this.register(new di);}register(e){this.parsers.set(e.languageId,e);for(let t of e.extensions){let n=this.getLanguageFromExtension(t);n&&this.parsers.has(n);}}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 Uk="1.0.0",fl=class{workspacePath;config;metadata=null;fileIndexCache=new Map;parserRegistry;constructor(e,t={}){this.workspacePath=e,this.config={...Hh,...t},this.parserRegistry=new pi;}get indexDir(){return ge.join(this.workspacePath,this.config.cacheDir)}async hasIndex(){let e=ge.join(this.indexDir,"meta.json");return qh(e)}async loadMetadata(){if(this.metadata)return this.metadata;let e=ge.join(this.indexDir,"meta.json");try{let t=await Ee.readFile(e,"utf-8");return this.metadata=JSON.parse(t),this.metadata}catch{return null}}async saveMetadata(){if(!this.metadata)return;await qo(this.indexDir);let e=ge.join(this.indexDir,"meta.json");await Ee.writeFile(e,JSON.stringify(this.metadata,null,2));}async buildIndex(e={}){let t=Date.now(),n=[],{paths:s=this.config.include,languages:o=this.config.languages,force:i=false,onProgress:a}=e;await qo(this.indexDir),await qo(ge.join(this.indexDir,"files"));let l=[];for(let d of s){let m=await qr(d,{cwd:this.workspacePath,absolute:true,ignore:this.config.exclude});for(let g of m){let h=gd(g);h&&o.includes(h)&&l.push(g);}}let c=0,u=0;for(let d=0;d<l.length;d++){let m=l[d];a?.(d+1,l.length,m);try{if(!i){let h=await this.getFileIndex(m);if(h){let f=await Ee.stat(m);if(h.mtime>=f.mtimeMs){u+=h.symbols.length,c++;continue}}}let g=await this.indexFile(m);g&&(await this.saveFileIndex(g),this.fileIndexCache.set(m,g),u+=g.symbols.length,c++);}catch(g){n.push({file:m,error:g.message});}}return this.metadata={version:Uk,createdAt:this.metadata?.createdAt||Date.now(),updatedAt:Date.now(),fileCount:c,symbolCount:u,languages:o,indexDir:this.config.cacheDir},await this.saveMetadata(),{success:n.length===0,filesIndexed:c,symbolsFound:u,timeMs:Date.now()-t,errors:n}}async indexFile(e){let t=gd(e);if(!t)return null;let n=this.parserRegistry.getParser(t);if(!n)return null;try{let s=await Ee.readFile(e,"utf-8"),o=await Ee.stat(e),i=await n.parse(s,e),a=this.extractImports(s,t),l=this.extractExports(s,t);return {path:e,hash:zh(s),mtime:o.mtimeMs,totalLines:s.split(`
|
|
384
384
|
`).length,symbols:i,imports:a,exports:l}}catch{return null}}extractImports(e,t){let n=[],s=e.split(`
|
|
385
385
|
`);if(["typescript","javascript"].includes(t)){let o=/^import\s+(?:(?:\{([^}]+)\}|(\w+))\s+from\s+)?['"]([^'"]+)['"]/;s.forEach((i,a)=>{let l=i.match(o);if(l){let c=l[1]?.split(",").map(u=>u.trim())||(l[2]?[l[2]]:[]);n.push({module:l[3],line:a+1,names:c.filter(Boolean)});}});}if(t==="python"){let o=/^(?:from\s+(\S+)\s+import\s+(.+)|import\s+(\S+))/;s.forEach((i,a)=>{let l=i.match(o);if(l){let c=l[1]||l[3],u=l[2]?.split(",").map(d=>d.trim())||[];n.push({module:c,line:a+1,names:u});}});}return n}extractExports(e,t){let n=[],s=e.split(`
|
|
386
|
-
`);if(["typescript","javascript"].includes(t)){let o=/^export\s+(?:(default)\s+)?(?:(class|function|const|let|var|interface|type|enum)\s+)?(\w+)?/;s.forEach((i,a)=>{let l=i.match(o);if(l){let c=l[2],u=l[3]||(l[1]?"default":"");u&&n.push({name:u,line:a+1,kind:c});}});}return n}async getFileIndex(e){if(this.fileIndexCache.has(e))return this.fileIndexCache.get(e);let t=this.getFileIndexPath(e);try{let n=await
|
|
386
|
+
`);if(["typescript","javascript"].includes(t)){let o=/^export\s+(?:(default)\s+)?(?:(class|function|const|let|var|interface|type|enum)\s+)?(\w+)?/;s.forEach((i,a)=>{let l=i.match(o);if(l){let c=l[2],u=l[3]||(l[1]?"default":"");u&&n.push({name:u,line:a+1,kind:c});}});}return n}async getFileIndex(e){if(this.fileIndexCache.has(e))return this.fileIndexCache.get(e);let t=this.getFileIndexPath(e);try{let n=await Ee.readFile(t,"utf-8"),s=JSON.parse(n);return this.fileIndexCache.set(e,s),s}catch{return null}}async saveFileIndex(e){let t=this.getFileIndexPath(e.path);await qo(ge.dirname(t)),await Ee.writeFile(t,JSON.stringify(e,null,2));}getFileIndexPath(e){let n=ge.relative(this.workspacePath,e).replace(/[/\\]/g,"_").replace(/\./g,"_");return ge.join(this.indexDir,"files",`${n}.json`)}async searchSymbol(e){let{query:t,kind:n,fuzzy:s=false,limit:o=20}=e,i=[],a=ge.join(this.indexDir,"files");try{let l=await Ee.readdir(a);for(let c of l)if(c.endsWith(".json"))try{let u=await Ee.readFile(ge.join(a,c),"utf-8"),d=JSON.parse(u);for(let m of d.symbols){if(n&&m.kind!==n)continue;let g=0;if(s){if(g=hd(t.toLowerCase(),m.name.toLowerCase()),g<.5)continue}else {if(!m.name.toLowerCase().includes(t.toLowerCase()))continue;g=m.name.toLowerCase()===t.toLowerCase()?1:.8;}if(i.push({symbol:m,file:d.path,score:g}),m.children)for(let h of m.children){if(n&&h.kind!==n)continue;let f=0;if(s){if(f=hd(t.toLowerCase(),h.name.toLowerCase()),f<.5)continue}else {if(!h.name.toLowerCase().includes(t.toLowerCase()))continue;f=h.name.toLowerCase()===t.toLowerCase()?1:.8;}i.push({symbol:{...h,parent:m.name},file:d.path,score:f});}}}catch{continue}}catch{}return i.sort((l,c)=>c.score-l.score).slice(0,o)}async invalidate(e){this.fileIndexCache.delete(e);let t=this.getFileIndexPath(e);try{await Ee.unlink(t);}catch{}}async clear(){this.fileIndexCache.clear(),this.metadata=null;try{await Ee.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 n=ge.join(this.indexDir,"files"),s=await Ee.readdir(n);for(let o of s){let i=await Ee.stat(ge.join(n,o));t+=i.size;}}catch{}return {hasIndex:true,fileCount:e.fileCount,symbolCount:e.symbolCount,lastUpdated:new Date(e.updatedAt),size:t}}};function mi(r,e){return new fl(r,e)}var Kr=null,Jr=null,bl=null,Vs={small:Pr,large:1e3},qf=12e3,Gk=120,yl=20,jk=3,Wk=200,Od=200;function Hk(r){return (!Kr||bl!==r)&&(Kr=fd(r),bl=r,Jr&&Kr.setIndexManager(Jr)),Kr}function gi(r){return (!Jr||bl!==r)&&(Jr=mi(r),bl=r,Kr&&Kr.setIndexManager(Jr)),Jr}function zk(r){return process.cwd()}function Nn(r){let e=zk();return ge.relative(e,r)||r}function Kf(r,e){let t=ge.relative(r,e);return t===""?true:!t.startsWith("..")&&!ge.isAbsolute(t)}function qk(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async function Bd(r){let e=r||process.cwd(),n=await gi(e).getStats();return {hasIndex:n.hasIndex,fileCount:n.fileCount,symbolCount:n.symbolCount,lastUpdated:n.lastUpdated}}async function Jf(r){let e=await Bd(r);return e.hasIndex?`
|
|
387
387
|
\u{1F4D6} readfile \u7B56\u7565\u63D0\u793A (\u7D22\u5F15\u5DF2\u542F\u7528, ${e.symbolCount} \u7B26\u53F7):
|
|
388
388
|
- \u5C0F\u6587\u4EF6 (\u2264${Vs.small}\u884C): \u9ED8\u8BA4 full \u8BFB\u53D6
|
|
389
389
|
- \u5927\u6587\u4EF6 (>${Vs.large}\u884C): \u4F18\u5148\u7528 symbol/function/class \u5B9A\u4F4D
|
|
@@ -437,14 +437,14 @@ readfile(path="src/main.ts", range_start="// BEGIN CONFIG", range_end="// END CO
|
|
|
437
437
|
- \u{1F525} edit_file \u524D\u5FC5\u987B\u5148 readfile(..., for_edit=true) - old_string \u987B\u4ECE\u8F93\u51FA\u7CBE\u786E\u590D\u5236
|
|
438
438
|
- for_edit=true \u4F1A\u5305\u542B COPY \u533A\u5757\uFF08\u8F93\u51FA\u66F4\u5927\uFF09
|
|
439
439
|
- max_output_chars \u53EF\u9650\u5236\u8F93\u51FA\u957F\u5EA6
|
|
440
|
-
- \u652F\u6301 TypeScript/JavaScript/Python/Java \u7B49\u591A\u79CD\u8BED\u8A00`,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84 (\u5FC5\u9700)"},start_line:{type:"number",description:"\u8D77\u59CB\u884C\u53F7 (1-indexed)"},end_line:{type:"number",description:"\u7ED3\u675F\u884C\u53F7"},num_lines:{type:"number",description:`\u8BFB\u53D6\u884C\u6570 (\u9ED8\u8BA4: ${zo})`},symbol:{type:"string",description:"\u7B26\u53F7\u540D\u79F0 (\u51FD\u6570\u540D\u3001\u7C7B\u540D\u3001\u53D8\u91CF\u540D\u7B49)"},symbol_kind:{type:"string",description:"\u7B26\u53F7\u7C7B\u578B: function, class, interface, method, variable, type, enum",enum:["function","class","interface","method","variable","type","enum"]},class_name:{type:"string",description:"\u6240\u5C5E\u7C7B\u540D (\u7528\u4E8E\u5B9A\u4F4D\u7C7B\u7684\u65B9\u6CD5)"},function:{type:"string",description:"\u51FD\u6570\u540D (\u5FEB\u6377\u65B9\u5F0F\uFF0C\u7B49\u540C\u4E8E symbol + symbol_kind=function)"},class:{type:"string",description:"\u7C7B\u540D (\u5FEB\u6377\u65B9\u5F0F\uFF0C\u7B49\u540C\u4E8E symbol + symbol_kind=class)"},pattern:{type:"string",description:"\u641C\u7D22\u6A21\u5F0F (\u6B63\u5219\u8868\u8FBE\u5F0F)"},match_index:{type:"number",description:"\u5339\u914D\u7B2C\u51E0\u4E2A\u7ED3\u679C (\u9ED8\u8BA4: 1)"},list_matches:{type:"boolean",description:"\u4EC5\u5217\u51FA\u5339\u914D\u884C\u6458\u8981 (\u9ED8\u8BA4: false, \u9700\u914D\u5408 pattern)"},range_start:{type:"string",description:"\u8303\u56F4\u5F00\u59CB\u6A21\u5F0F"},range_end:{type:"string",description:"\u8303\u56F4\u7ED3\u675F\u6A21\u5F0F"},ranges:{type:"array",items:{type:"object",properties:{start:{type:"number"},end:{type:"number"}},required:["start"]},description:'\u591A\u4E2A\u884C\u8303\u56F4\u6279\u91CF\u8BFB\u53D6 (e.g., [{"start":10,"end":120},{"start":300,"end":480}])'},anchor_lines:{type:"array",items:{type:"number"},description:"\u6309\u884C\u53F7\u6279\u91CF\u8BFB\u53D6 (\u4F1A\u4EE5\u884C\u53F7\u4E3A\u4E2D\u5FC3\u5C55\u5F00 num_lines \u6216 context)"},context:{type:"number",description:"\u4E0A\u4E0B\u6587\u884C\u6570 (\u9ED8\u8BA4: 10)"},use_index:{type:"boolean",description:"\u662F\u5426\u4F7F\u7528\u7D22\u5F15 (\u9ED8\u8BA4: true, \u5982\u679C\u7D22\u5F15\u53EF\u7528)"},for_edit:{type:"boolean",description:"\u662F\u5426\u5305\u542B edit_file \u53EF\u590D\u5236\u7684\u539F\u59CB\u5185\u5BB9\u5757 (\u9ED8\u8BA4: false)"},max_output_chars:{type:"number",description:`\u6700\u5927\u8F93\u51FA\u5B57\u7B26\u6570 (\u9ED8\u8BA4: ${qf})`}},required:["path"]},async function(l){let{path:c,start_line:u,end_line:d,num_lines:m,symbol:g,symbol_kind:h,class_name:f,function:b,class:v,pattern:C,match_index:T,list_matches:I,range_start:M,range_end:D,ranges:R,anchor_lines:L,context:S,use_index:k=true,for_edit:w,max_output_chars:A}=l,O=e(),z=Hk(O),P=w===true,B=typeof S=="number"?Math.max(0,S):Ja,F=typeof A=="number"&&A>0?Math.floor(A):qf,U=m||(P?Gk:zo);U=Math.min(U,Va),!m&&C&&(U=Math.max(yl,B*2+1));let H=Array.isArray(R)&&R.length>0,se=Array.isArray(L)&&L.length>0,G=I===true;if(P&&(H||se||G))return "\u2717 for_edit=true \u6682\u4E0D\u652F\u6301 list_matches / ranges / anchor_lines\uFF0C\u8BF7\u4F7F\u7528\u5355\u6B21 readfile \u83B7\u53D6\u53EF\u7F16\u8F91\u7247\u6BB5\u3002";let W=()=>ge.isAbsolute(c)?c:ge.resolve(O,c),ce=async()=>{let ee=W(),de=await
|
|
440
|
+
- \u652F\u6301 TypeScript/JavaScript/Python/Java \u7B49\u591A\u79CD\u8BED\u8A00`,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84 (\u5FC5\u9700)"},start_line:{type:"number",description:"\u8D77\u59CB\u884C\u53F7 (1-indexed)"},end_line:{type:"number",description:"\u7ED3\u675F\u884C\u53F7"},num_lines:{type:"number",description:`\u8BFB\u53D6\u884C\u6570 (\u9ED8\u8BA4: ${zo})`},symbol:{type:"string",description:"\u7B26\u53F7\u540D\u79F0 (\u51FD\u6570\u540D\u3001\u7C7B\u540D\u3001\u53D8\u91CF\u540D\u7B49)"},symbol_kind:{type:"string",description:"\u7B26\u53F7\u7C7B\u578B: function, class, interface, method, variable, type, enum",enum:["function","class","interface","method","variable","type","enum"]},class_name:{type:"string",description:"\u6240\u5C5E\u7C7B\u540D (\u7528\u4E8E\u5B9A\u4F4D\u7C7B\u7684\u65B9\u6CD5)"},function:{type:"string",description:"\u51FD\u6570\u540D (\u5FEB\u6377\u65B9\u5F0F\uFF0C\u7B49\u540C\u4E8E symbol + symbol_kind=function)"},class:{type:"string",description:"\u7C7B\u540D (\u5FEB\u6377\u65B9\u5F0F\uFF0C\u7B49\u540C\u4E8E symbol + symbol_kind=class)"},pattern:{type:"string",description:"\u641C\u7D22\u6A21\u5F0F (\u6B63\u5219\u8868\u8FBE\u5F0F)"},match_index:{type:"number",description:"\u5339\u914D\u7B2C\u51E0\u4E2A\u7ED3\u679C (\u9ED8\u8BA4: 1)"},list_matches:{type:"boolean",description:"\u4EC5\u5217\u51FA\u5339\u914D\u884C\u6458\u8981 (\u9ED8\u8BA4: false, \u9700\u914D\u5408 pattern)"},range_start:{type:"string",description:"\u8303\u56F4\u5F00\u59CB\u6A21\u5F0F"},range_end:{type:"string",description:"\u8303\u56F4\u7ED3\u675F\u6A21\u5F0F"},ranges:{type:"array",items:{type:"object",properties:{start:{type:"number"},end:{type:"number"}},required:["start"]},description:'\u591A\u4E2A\u884C\u8303\u56F4\u6279\u91CF\u8BFB\u53D6 (e.g., [{"start":10,"end":120},{"start":300,"end":480}])'},anchor_lines:{type:"array",items:{type:"number"},description:"\u6309\u884C\u53F7\u6279\u91CF\u8BFB\u53D6 (\u4F1A\u4EE5\u884C\u53F7\u4E3A\u4E2D\u5FC3\u5C55\u5F00 num_lines \u6216 context)"},context:{type:"number",description:"\u4E0A\u4E0B\u6587\u884C\u6570 (\u9ED8\u8BA4: 10)"},use_index:{type:"boolean",description:"\u662F\u5426\u4F7F\u7528\u7D22\u5F15 (\u9ED8\u8BA4: true, \u5982\u679C\u7D22\u5F15\u53EF\u7528)"},for_edit:{type:"boolean",description:"\u662F\u5426\u5305\u542B edit_file \u53EF\u590D\u5236\u7684\u539F\u59CB\u5185\u5BB9\u5757 (\u9ED8\u8BA4: false)"},max_output_chars:{type:"number",description:`\u6700\u5927\u8F93\u51FA\u5B57\u7B26\u6570 (\u9ED8\u8BA4: ${qf})`}},required:["path"]},async function(l){let{path:c,start_line:u,end_line:d,num_lines:m,symbol:g,symbol_kind:h,class_name:f,function:b,class:v,pattern:C,match_index:T,list_matches:I,range_start:M,range_end:D,ranges:R,anchor_lines:L,context:S,use_index:k=true,for_edit:w,max_output_chars:A}=l,O=e(),z=Hk(O),P=w===true,B=typeof S=="number"?Math.max(0,S):Ja,F=typeof A=="number"&&A>0?Math.floor(A):qf,U=m||(P?Gk:zo);U=Math.min(U,Va),!m&&C&&(U=Math.max(yl,B*2+1));let H=Array.isArray(R)&&R.length>0,se=Array.isArray(L)&&L.length>0,G=I===true;if(P&&(H||se||G))return "\u2717 for_edit=true \u6682\u4E0D\u652F\u6301 list_matches / ranges / anchor_lines\uFF0C\u8BF7\u4F7F\u7528\u5355\u6B21 readfile \u83B7\u53D6\u53EF\u7F16\u8F91\u7247\u6BB5\u3002";let W=()=>ge.isAbsolute(c)?c:ge.resolve(O,c),ce=async()=>{let ee=W(),de=await Ee.readFile(ee,"utf-8"),q=Lr(de).split(`
|
|
441
441
|
`);return {absPath:ee,lines:q,totalLines:q.length}},V=(ee,de,N)=>{let q=Math.max(1,Math.floor(ee)),ne=typeof de=="number"?Math.floor(de):q+U-1,le=Math.min(N,Math.max(ne,q));return {start:q,end:le}},ve=ee=>{let de=ee.filter(q=>Number.isFinite(q.start)&&Number.isFinite(q.end)).sort((q,ne)=>q.start-ne.start),N=[];for(let q of de){let ne=N[N.length-1];!ne||q.start>ne.end+1?N.push({...q}):ne.end=Math.max(ne.end,q.end);}return N};if(G){if(!C)return "\u2717 list_matches \u9700\u8981\u914D\u5408 pattern \u4F7F\u7528";try{let{absPath:ee,lines:de,totalLines:N}=await ce(),q;try{q=new RegExp(C,"gi");}catch(Ne){return `\u2717 \u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F: ${Ne.message}`}let ne=[];de.forEach((Ne,Le)=>{q.test(Ne)&&ne.push({line:Le+1,text:Ne}),q.lastIndex=0;});let le=Nn(ee);if(ne.length===0){let Ne=_t(de.slice(0,Math.min(50,N)),1);return [`\u2713 \u6587\u4EF6: ${le}`,`\u603B\u884C\u6570: ${N} | \u5339\u914D: 0`,"\u7B56\u7565: grep-list","",`\u672A\u627E\u5230\u5339\u914D: "${C}"`,"","--- \u5185\u5BB9\uFF08\u5E26\u884C\u53F7\uFF0C\u4FBF\u4E8E\u9605\u8BFB\uFF09---",Ne].join(`
|
|
442
|
-
`)}let
|
|
443
|
-
`)}catch(ee){return `\u2717 \u8BFB\u53D6\u5931\u8D25: ${ee.message}`}}if(H||se)try{let{absPath:ee,lines:de,totalLines:N}=await ce(),q=[];if(H)for(let te of R)!te||typeof te.start!="number"||q.push(V(te.start,te.end,N));else if(se){let te=Math.max(1,m||B*2+1);for(let ie of L){if(typeof ie!="number"||Number.isNaN(ie))continue;let
|
|
444
|
-
`).length,j=0;for(let[te,ie]of ne.entries()){let
|
|
445
|
-
${
|
|
442
|
+
`)}let _e=Od+12,$e=Math.max(5,Math.min(Wk,Math.floor(F/_e))),j=ne.slice(0,$e),te=j.map(Ne=>{let Le=Ne.text.length>Od?`${Ne.text.slice(0,Od)}...`:Ne.text;return `${String(Ne.line).padStart(6)} \u2502 ${Le}`}),ie=[`\u2713 \u6587\u4EF6: ${le}`,`\u603B\u884C\u6570: ${N} | \u5339\u914D: ${ne.length}`,"\u7B56\u7565: grep-list","",`--- \u5339\u914D\u6458\u8981\uFF08\u524D ${te.length}/${ne.length}\uFF09---`,...te];te.length<ne.length&&ie.push("","\u26A0\uFE0F \u6458\u8981\u5DF2\u622A\u65AD\uFF0C\u8C03\u6574 max_output_chars \u6216\u7F29\u5C0F pattern");let Ae=j.slice(0,5).map(Ne=>Ne.line).join(", ");return ie.push("",`\u{1F4A1} \u8BFB\u53D6\u5339\u914D\u9644\u8FD1: readfile(path="${le}", anchor_lines=[${Ae}], num_lines=${Math.min(200,U)})`),ie.join(`
|
|
443
|
+
`)}catch(ee){return `\u2717 \u8BFB\u53D6\u5931\u8D25: ${ee.message}`}}if(H||se)try{let{absPath:ee,lines:de,totalLines:N}=await ce(),q=[];if(H)for(let te of R)!te||typeof te.start!="number"||q.push(V(te.start,te.end,N));else if(se){let te=Math.max(1,m||B*2+1);for(let ie of L){if(typeof ie!="number"||Number.isNaN(ie))continue;let Ae=Math.max(1,Math.floor(ie-Math.floor(te/2))),Ne=Math.min(N,Ae+te-1);q.push({start:Ae,end:Ne});}}if(q.length===0)return "\u2717 ranges/anchor_lines \u4E3A\u7A7A\uFF0C\u65E0\u6CD5\u8BFB\u53D6";let ne=ve(q),_e=[`\u2713 \u6587\u4EF6: ${Nn(ee)}`,`\u603B\u884C\u6570: ${N} | \u533A\u5757: ${ne.length}`,"\u7B56\u7565: batch-range","","--- \u5185\u5BB9\uFF08\u5E26\u884C\u53F7\uFF0C\u4FBF\u4E8E\u9605\u8BFB\uFF09---"],$e=_e.join(`
|
|
444
|
+
`).length,j=0;for(let[te,ie]of ne.entries()){let Ae=_t(de.slice(ie.start-1,ie.end),ie.start),Le=`${`# \u533A\u5757 ${te+1}: ${ie.start}-${ie.end}`}
|
|
445
|
+
${Ae}`;if($e+Le.length+2>F&&j>0)break;_e.push(Le,""),$e+=Le.length+2,j+=1;}return j<ne.length&&_e.push(`\u26A0\uFE0F \u8F93\u51FA\u5DF2\u622A\u65AD\uFF0C\u4EC5\u663E\u793A\u524D ${j} \u4E2A\u533A\u5757`),_e.join(`
|
|
446
446
|
`).trimEnd()}catch(ee){return `\u2717 \u8BFB\u53D6\u5931\u8D25: ${ee.message}`}let Z;u?Z={type:"line",start:u,end:d}:b?Z={type:"function",name:b,className:f}:v?Z={type:"class",name:v}:g?Z={type:"symbol",name:g,kind:h}:C?Z={type:"pattern",regex:C,matchIndex:T,context:B}:M&&D&&(Z={type:"range",startPattern:M,endPattern:D});let X=ee=>{let N=[`\u2713 \u6587\u4EF6: ${Nn(ee.path)}`,`\u603B\u884C\u6570: ${ee.totalLines} | \u663E\u793A: \u7B2C ${ee.startLine}-${ee.endLine} \u884C`,`\u7B56\u7565: ${ee.strategy}${ee.metadata?.matchedLine?` | \u5339\u914D\u884C: ${ee.metadata.matchedLine}`:""}`];if(ee.metadata?.symbol&&N.push(`\u7B26\u53F7: ${ee.metadata.symbol.name} (${ee.metadata.symbol.kind})`),ee.truncated&&(N.push(""),N.push(`\u26A0\uFE0F \u5185\u5BB9\u5DF2\u622A\u65AD\uFF0C\u4F7F\u7528 start_line=${ee.endLine+1} \u7EE7\u7EED\u8BFB\u53D6`)),N.push(""),N.push("--- \u5185\u5BB9\uFF08\u5E26\u884C\u53F7\uFF0C\u4FBF\u4E8E\u9605\u8BFB\uFF09---"),N.push(ee.content),P){let le=ee.content.split(`
|
|
447
|
-
`).map(
|
|
447
|
+
`).map(_e=>{let $e=_e.match(/^\s*\d+\s*│\s?(.*)$/);return $e?$e[1]:_e}).join(`
|
|
448
448
|
`);N.push(""),N.push("--- \u{1F525} COPY THIS FOR edit_file old_string (\u4E0D\u5E26\u884C\u53F7) ---"),N.push(le),N.push("--- END ---");}return N.join(`
|
|
449
449
|
`)},Y=0,J="",Q=!m;for(;;){let ee=await z.read({path:c,locator:Z,mode:"smart",autoFullThreshold:Q?Pr:void 0,chunkSize:U,expandContext:B,useIndex:k});if(!ee.success)return `\u2717 \u8BFB\u53D6\u5931\u8D25: ${ee.error}
|
|
450
450
|
|
|
@@ -517,7 +517,7 @@ get_definitions(query="User", path="src/auth") \u2192 \u9650\u5B9A\u76EE\u5F55`
|
|
|
517
517
|
\u793A\u4F8B:
|
|
518
518
|
get_references(query="UserService")
|
|
519
519
|
get_references(symbol="handleLogin", path="src/auth")
|
|
520
|
-
get_references(query="FeatureFlag", file_pattern="*.ts")`,parameters:{type:"object",properties:{query:{type:"string",description:"\u7B26\u53F7\u540D\u79F0 (\u4F18\u5148)"},symbol:{type:"string",description:"\u7B26\u53F7\u540D\u79F0 (query \u7684\u522B\u540D)"},path:{type:"string",description:"\u641C\u7D22\u8DEF\u5F84 (\u76F8\u5BF9\u5DE5\u4F5C\u533A\uFF0C\u9ED8\u8BA4: \u5F53\u524D\u5DE5\u4F5C\u533A)"},file_pattern:{type:"string",description:'\u6587\u4EF6\u8FC7\u6EE4 (e.g., "*.ts", "*.{js,ts}")'},case_insensitive:{type:"boolean",description:"\u5FFD\u7565\u5927\u5C0F\u5199 (\u9ED8\u8BA4: false)"},regex:{type:"boolean",description:"\u5C06 query \u4F5C\u4E3A\u6B63\u5219 (\u9ED8\u8BA4: false)"},context_lines:{type:"number",description:"\u4E0A\u4E0B\u6587\u884C\u6570 (\u9ED8\u8BA4: 2)"},max_matches:{type:"number",description:"\u6700\u5927\u5339\u914D\u6570 (\u9ED8\u8BA4: 200)"}}},permission:{category:"read",allowInAskMode:true},async function(l){let c=typeof l.query=="string"?l.query:typeof l.symbol=="string"?l.symbol:"";if(!c.trim())return "\u2717 \u7F3A\u5C11\u53C2\u6570: query (\u6216 symbol)";let u=e(),d=ge.resolve(u,l.path||".");if(!Kf(u,d))return "\u2717 \u8DEF\u5F84\u4E0D\u5728 workspace \u5185";let m;try{m=await
|
|
520
|
+
get_references(query="FeatureFlag", file_pattern="*.ts")`,parameters:{type:"object",properties:{query:{type:"string",description:"\u7B26\u53F7\u540D\u79F0 (\u4F18\u5148)"},symbol:{type:"string",description:"\u7B26\u53F7\u540D\u79F0 (query \u7684\u522B\u540D)"},path:{type:"string",description:"\u641C\u7D22\u8DEF\u5F84 (\u76F8\u5BF9\u5DE5\u4F5C\u533A\uFF0C\u9ED8\u8BA4: \u5F53\u524D\u5DE5\u4F5C\u533A)"},file_pattern:{type:"string",description:'\u6587\u4EF6\u8FC7\u6EE4 (e.g., "*.ts", "*.{js,ts}")'},case_insensitive:{type:"boolean",description:"\u5FFD\u7565\u5927\u5C0F\u5199 (\u9ED8\u8BA4: false)"},regex:{type:"boolean",description:"\u5C06 query \u4F5C\u4E3A\u6B63\u5219 (\u9ED8\u8BA4: false)"},context_lines:{type:"number",description:"\u4E0A\u4E0B\u6587\u884C\u6570 (\u9ED8\u8BA4: 2)"},max_matches:{type:"number",description:"\u6700\u5927\u5339\u914D\u6570 (\u9ED8\u8BA4: 200)"}}},permission:{category:"read",allowInAskMode:true},async function(l){let c=typeof l.query=="string"?l.query:typeof l.symbol=="string"?l.symbol:"";if(!c.trim())return "\u2717 \u7F3A\u5C11\u53C2\u6570: query (\u6216 symbol)";let u=e(),d=ge.resolve(u,l.path||".");if(!Kf(u,d))return "\u2717 \u8DEF\u5F84\u4E0D\u5728 workspace \u5185";let m;try{m=await Ee.stat(d);}catch{return "\u2717 \u8DEF\u5F84\u4E0D\u5B58\u5728"}let g=typeof l.context_lines=="number"&&l.context_lines>=0?Math.min(l.context_lines,10):2,h=typeof l.max_matches=="number"&&l.max_matches>0?Math.min(l.max_matches,1e3):200,f=!!l.case_insensitive,b=!!l.regex,v;try{let S=b?c:qk(c);v=new RegExp(S,f?"gi":"g");}catch(S){return `\u2717 \u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F: ${S.message}`}let C=[];if(m.isDirectory()){let S=l.file_pattern||"**/*";C=await qr(S,{cwd:d,absolute:true,nodir:true,ignore:["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/out/**","**/.next/**","**/coverage/**","**/__pycache__/**","**/target/**","**/vendor/**"]});}else C=[d];if(C.length===0)return "\u2713 \u672A\u627E\u5230\u53EF\u641C\u7D22\u7684\u6587\u4EF6";let T=[],I=0,M=0,D=0;for(let S of C){if(I>=h)break;try{let k=await Ee.readFile(S,"utf-8");if(k.includes("\0"))continue;let w=k.split(`
|
|
521
521
|
`),A=new Set,O=new Map;for(let z=0;z<w.length&&!(I>=h);z++){let P=w[z],B=v.test(P);if(v.lastIndex=0,B){A.add(z),I++;let F=Math.max(0,z-g),U=Math.min(w.length-1,z+g);for(let H=F;H<=U;H++){let se=O.get(H);O.set(H,{line:w[H],isMatch:se?.isMatch||H===z});}}}if(M++,A.size>0){D++;let P=Array.from(O.keys()).sort((B,F)=>B-F).map(B=>({lineNum:B+1,line:O.get(B)?.line||"",isMatch:O.get(B)?.isMatch||!1}));T.push({file:S,matches:P,matchCount:A.size});}}catch{continue}}let R=Nn(d),L=[`\u2713 \u5F15\u7528: "${c}"`,`\u25B8 \u8DEF\u5F84: ${R}`,l.file_pattern?`\u25B8 \u6587\u4EF6\u8FC7\u6EE4: ${l.file_pattern}`:"",f?"\u25B8 \u6A21\u5F0F: \u5FFD\u7565\u5927\u5C0F\u5199":"",b?"\u25B8 \u6A21\u5F0F: \u6B63\u5219":"","",`\u6587\u4EF6: ${M} \u5DF2\u641C\u7D22, ${D} \u6709\u5339\u914D`,`\u5339\u914D: ${I}${I>=h?" (\u5DF2\u8FBE\u4E0A\u9650)":""}`].filter(S=>S!=="");for(let S of T){let k=Nn(S.file);L.push(`
|
|
522
522
|
\u25B8 ${k} (${S.matchCount} \u5904)`),L.push("\u2500".repeat(50));let w=-10;for(let A of S.matches){A.lineNum>w+1&&w>0&&L.push(" \u2504\u2504\u2504");let O=A.isMatch?"\u25B6":" ";L.push(`${O}${String(A.lineNum).padStart(5)} \u2502 ${A.line}`),w=A.lineNum;}}return T.length===0&&(L.push("\u672A\u627E\u5230\u5339\u914D\u5185\u5BB9"),L.push(""),L.push("\u{1F4A1} \u5EFA\u8BAE:"),L.push(" - \u68C0\u67E5\u5173\u952E\u8BCD\u62FC\u5199"),L.push(" - \u4F7F\u7528 regex=true \u8FDB\u884C\u66F4\u7CBE\u786E\u5339\u914D"),L.push(" - \u7F29\u5C0F\u6216\u6269\u5927 path/file_pattern \u8303\u56F4")),L.join(`
|
|
523
523
|
`)}};return [t,n,s,o,i,{name:"index_stats",description:"\u3010\u7D22\u5F15\u7EDF\u8BA1\u3011\u67E5\u770B\u5F53\u524D\u9879\u76EE\u7684\u7D22\u5F15\u72B6\u6001\u548C\u7EDF\u8BA1\u4FE1\u606F\u3002",parameters:{type:"object",properties:{}},async function(){let l=e(),u=await gi(l).getStats();if(!u.hasIndex)return `\u{1F4CA} \u7D22\u5F15\u72B6\u6001: \u672A\u6784\u5EFA
|
|
@@ -810,7 +810,7 @@ Available operations: All tools (auto-approved).`}shouldAutoApprove(){return tr
|
|
|
810
810
|
|
|
811
811
|
\u2026[${n-l.length-c.length} chars truncated, total ${t} lines]\u2026
|
|
812
812
|
|
|
813
|
-
`;return l+d+c}var Sl=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;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 za(e.structuredOutput)),this.inputGuardrails=e.inputGuardrails||[],this.outputGuardrails=e.outputGuardrails||[],this.toolInputGuardrails=e.toolInputGuardrails||[],this.toolOutputGuardrails=e.toolOutputGuardrails||[],this.parallelExecutor=new Cl,this.compressionMode=e.compressionMode??"sync",this.workspacePath=e.workspacePath,this.unifiedCompressor=new Ka({debug:process.env.CLI_DEBUG==="1",minRecentMessages:this.minHistoryMessages,enableLLMCompression:true}),this.disableSystemPrompt=e.disableSystemPrompt??false,this.unifiedCompressor.setLLMProvider(this.llmProvider,this.model),e.contextWindow&&this.unifiedCompressor.setContextWindow(e.contextWindow),this.currentMode=e.config.mode??"agent",this.modeStrategy=zd(this.currentMode),this.permissionManager=e.permissionManager??new Ts({defaultPermission:"ask"}),this.loopDetector=Qf(),this.enablePlanMode=e.enablePlanMode??true,e.approvalHandler){let t=e.approvalHandler;this.permissionManager.setApprovalHandler(async n=>({approved:await t({id:"",name:n.toolName,args:n.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=zd(e),p.info("Runner",`Mode switched to: ${e}`);}getMode(){return this.currentMode}getPermissionManager(){return this.permissionManager}computeMaxInputTokens(e,t,n){if(n&&n>0)return n;let o=e&&e>0?e:19e4,i=.7,a=Math.floor(o*i),l=Math.min(t??ty,Math.floor(o*.1)),c=Math.max(2e3,a-l);if(process.env.CLI_DEBUG==="1"||process.env.CLI_DEBUG_CONSOLE==="1"){let u=`[Context] maxInputTokens=${c} (contextWindow=${o}, override=${n}, tailBudget=${t??ty}, safety=${i})`;console.log(u);}return c}async*withStreamWatchdog(e,t){if(s0){for await(let i of e)yield i;return}let n=e[Symbol.asyncIterator](),s=t?new Promise((i,a)=>{t.aborted?a(Tl()):t.addEventListener("abort",()=>a(Tl()),{once:true});}):null,o=false;for(;;){if(t?.aborted){if(n.return)try{await n.return();}catch{}throw Tl()}let i=o?n0:t0,a=null,l=new Promise((c,u)=>{a=setTimeout(()=>{u(e0(o?"idle":"first_chunk",i));},i);});try{let c=await Promise.race(s?[n.next(),l,s]:[n.next(),l]);if(a&&clearTimeout(a),c.done)return;o=!0,yield c.value;}catch(c){if(a&&clearTimeout(a),n.return)try{await n.return();}catch{}throw c?.code==="STREAM_TIMEOUT"&&p.warn("RUNNER",`[watchdog] ${c.message}`),c}}}async applyContextWindow(e=0){if(!this.maxInputTokens)return null;let t=this.memory.getMessagesForLLM(),n=await this.unifiedCompressor.compressHistory(t,this.maxInputTokens,{iteration:e,enableLLMCompression:true});if(n.stats.droppedMessages>0||n.stats.llmCompressedMessages>0){this.memory.setMessages(n.messages);let s=this.compressionMode==="async"?"Async":"Sync",o=(n.originalTokens/1e3).toFixed(1),i=(n.compressedTokens/1e3).toFixed(1),a=(n.savedTokens/1e3).toFixed(1),l=n.originalCount,c=n.compressedCount;p.info("Context",`[${s}] \u538B\u7F29\u5B8C\u6210: ${l}\u6761/${o}K \u2192 ${c}\u6761/${i}K (\u8282\u7701 ${a}K, \u4E22\u5F03${n.stats.droppedMessages}\u6761, LLM\u538B\u7F29${n.stats.llmCompressedMessages}\u6761)`),n.debugInfo&&n.debugInfo.forEach(u=>p.debug("Context",u));}return n}setCompressionMode(e){this.compressionMode=e,p.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 n=(typeof this.contextInjection=="string"?this.contextInjection:await this.contextInjection(e,{name:this.agentName,description:this.agentDescription}))?.trim();return n||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,n){this.runContext={task:e,timestamp:Date.now(),currentTime:new Date,iteration:0,userData:this.userData},this.loopDetector.reset(),process.env.CLI_DEBUG==="1"&&(p.debug("MK",` hasSignal: ${!!n}`),p.debug("RUNNER","========================================"),p.debug("RUNNER","=== runner.run ENTRY ==="),p.debug("RUNNER",` task: "${e?.substring(0,50)}..."`),p.debug("RUNNER",` hasImages: ${!!t&&t.length>0}`),p.debug("RUNNER",` hasSignal: ${!!n}`)),we.agentStart(e),yield {type:"agent_updated_stream_event",new_agent:{name:this.agentName}};let s=this.createRunContext(e,0),o=this.memory.hasConversationMessages?.()??this.memory.getMessagesForLLM().some(k=>k.role==="user"||k.role==="assistant"),i=!o||this.shouldIncludeLastRun(e);s.userData={...s.userData??{},hasConversation:o,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 zs.runInputGuardrails(this.inputGuardrails,s,this.agentName,e),yield {type:"raw_response_event",data:{type:"input_guardrails.check_passed"},event_type:"input_guardrails.check_passed"});let a=await this.getInstructions(s),l=await this.getContextInjection(s);process.env.CLI_DEBUG==="1"&&(console.log("[RUNNER] dynamicInstructions length:",a?.length||0),console.log("[RUNNER] dynamicInstructions START:",a?.substring(0,200)),console.log("[RUNNER] dynamicInstructions END:",a?.substring(a.length-500)),console.log("[RUNNER] contains \u534F\u4F5C\u6A21\u5F0F:",a?.includes("\u534F\u4F5C\u6A21\u5F0F")),console.log("[RUNNER] contains delegate_task:",a?.includes("delegate_task")));let c=this.memory.getMessagesForLLM(),u=c.some(k=>k.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(),a&&this.memory.add({role:"system",content:a});else if(!u){let k=this.modeStrategy.getSystemPrompt();this.memory.add({role:"system",content:k}),this.memory.add({role:"system",content:a}),this.structuredValidator&&this.memory.add({role:"system",content:this.structuredValidator.buildSystemPrompt()});try{let w=await Fd(this.workspacePath);w&&this.memory.add({role:"system",content:w});}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 k=[{type:"text",text:e},...t.map(w=>({type:"image_url",image_url:{url:w,detail:"auto"}}))];this.memory.add({role:"user",content:k});}else this.memory.add({role:"user",content:e});let d=Date.now(),m=0,g="",h=0,f={totalTokens:0,promptTokens:0,completionTokens:0},b=false,v=0,C=null,T=new Map,I=0,M=Vn.streamMaxRetries,D=Number.isFinite(this.config.maxIterations)?this.config.maxIterations:Eh,R=D===0||D===1/0,L=ny(this.config.maxToolCalls,Ah),S=ny(this.config.maxRuntimeMs,Mh);for(;R||m<D;){if(n?.aborted){C="interrupted",b=true,yield {type:"error",error:"Task interrupted by user."};break}if(S!==null&&Date.now()-d>=S){C="runtime_limit",b=true,yield {type:"error",error:`Reached max runtime (${Wt(S)}). Please summarize progress and ask whether to continue.`};break}if(L!==null&&h>=L){C="tool_call_limit",b=true,yield {type:"error",error:`Reached max tool calls (${L}). Please summarize progress and ask whether to continue.`};break}m++;let k=null;if(this.maxInputTokens){let A=Ht(this.memory.getMessagesForLLM()),O=this.maxInputTokens*.97;A>O&&(k=await this.applyContextWindow(m));}k&&(k.stats.droppedMessages>0||k.stats.llmCompressedMessages>0)&&(yield {type:"context_compaction",status:"completed",originalMessages:k.originalCount,keptMessages:k.messages.length,droppedMessages:k.stats.droppedMessages,compressedMessages:k.stats.llmCompressedMessages,originalTokens:k.originalTokens,finalTokens:k.compressedTokens,budgetTokens:this.maxInputTokens||0,useLLM:k.stats.llmCompressedMessages>0,timestamp:Date.now()});let w=this.memory.checkContextHealth();if((w.warnings.length>0||w.shouldCleanup)&&(yield {type:"raw_response_event",data:{type:"context_health",totalTokens:w.totalTokens,toolResultTokens:w.toolResultTokens,toolResultRatio:w.toolResultRatio,messageCount:w.messageCount,toolMessageCount:w.toolMessageCount,warnings:w.warnings,shouldCompress:w.shouldCompress,shouldCleanup:w.shouldCleanup,byType:w.byType},event_type:"context_health"},w.shouldCleanup&&w.byType.ephemeral.count>5)){let A=this.memory.cleanupEphemeral();A>0&&p.info("Runner",`Cleaned ${A} ephemeral messages`);}p.debug("Runner",this.memory.getTokenSummary()),we.agentIteration(m,"thinking"),yield {type:"iteration_start",iteration:m};try{yield {type:"raw_response_event",data:{type:"response.created",response:{id:`resp_${Date.now()}`,model:this.model}},event_type:"response.created"};let A=this.memory.getMessagesForLLM();if(p.info("LLM",`Request: model=${this.model}, messages=${A.length}, tools=${this.tools.length}`),p.debug("LLM","Request messages",{messageCount:A.length,lastMessage:A[A.length-1]?.content?.toString().substring(0,200)}),process.env.CLI_DEBUG==="1"){let W=A.filter(ce=>ce.role==="system");console.log("[RUNNER] System messages count:",W.length);for(let ce=0;ce<W.length;ce++){let V=W[ce].content,ve=typeof V=="string"?V:JSON.stringify(V);console.log(`[RUNNER] System[${ce}] length:`,ve?.length||0),console.log(`[RUNNER] System[${ce}] contains \u534F\u4F5C\u6A21\u5F0F:`,ve?.includes("\u534F\u4F5C\u6A21\u5F0F")||!1),console.log(`[RUNNER] System[${ce}] contains delegate_task:`,ve?.includes("delegate_task")||!1),console.log(`[RUNNER] System[${ce}] preview:`,ve?.substring(0,300)||"");}}let O=this.modeStrategy.filterTools(this.tools);process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`Mode: ${this.currentMode}, Available tools: ${O.length}/${this.tools.length}`);let z=this.llmProvider.chatStreamed(this.memory.getMessagesForLLM(),{model:this.model,tools:O,temperature:this.config.temperature,structuredOutput:this.structuredOutput,maxInputTokens:this.maxInputTokens,disableSystemPrompt:this.disableSystemPrompt,signal:n}),P="",B="",F=[],U=[],H="",se={prompt_tokens:0,completion_tokens:0,total_tokens:0};for await(let W of this.withStreamWatchdog(z,n)){if(W.type==="stream_retry"){yield W;continue}if(W.type==="stream_recovered"){yield {type:"stream_recovered",attempt:W.attempt,maxRetries:W.maxRetries};continue}yield {type:"raw_response_event",data:W,event_type:W.choices?.[0]?.delta?"response.delta":"response.chunk"};let ce=W.choices?.[0]?.delta;if(W.usage){se={prompt_tokens:W.usage.prompt_tokens||se.prompt_tokens,completion_tokens:W.usage.completion_tokens||se.completion_tokens,total_tokens:W.usage.total_tokens||se.total_tokens,cached_tokens:W.usage.cached_tokens,cache_read_input_tokens:W.usage.cache_read_input_tokens,cache_creation_input_tokens:W.usage.cache_creation_input_tokens,prompt_tokens_details:W.usage.prompt_tokens_details},f={promptTokens:se.prompt_tokens,completionTokens:se.completion_tokens,totalTokens:se.total_tokens};let V=!!W.choices?.[0]?.finish_reason;yield {type:"token_usage",usage:se,is_final:V};}if(ce){if(ce.reasoning_content&&(B+=ce.reasoning_content,yield {type:"reasoning_delta",delta:ce.reasoning_content}),ce.reasoning_complete&&(yield {type:"reasoning_complete"}),ce.content&&(P+=ce.content,g=P,yield {type:"text_delta",delta:ce.content}),ce.tool_calls)for(let V of ce.tool_calls){let ve=V.index;U[ve]||(U[ve]={id:V.id||`call_${Math.floor(Date.now())}_${ve}`,type:"function",function:{name:"",arguments:""}}),V.id&&(U[ve].id=V.id),V.function?.name&&(U[ve].function.name=V.function.name),V.function?.arguments&&(U[ve].function.arguments+=V.function.arguments,yield {type:"tool_call_delta",id:U[ve].id,name:U[ve].function.name,arguments_delta:V.function.arguments}),V.thoughtSignature&&(U[ve].thoughtSignature=V.thoughtSignature);}W.choices?.[0]?.finish_reason&&(H=W.choices[0].finish_reason),W.thinking_blocks&&Array.isArray(W.thinking_blocks)&&(F=W.thinking_blocks.map(V=>({type:V.type,thinking:V.thinking,signature:V.signature,data:V.data})));}}P&&(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 G={role:"assistant",content:(P||"").trimEnd()};if(B&&(G.reasoning_content=B),F.length>0&&(G.thinking_blocks=F),U.length>0&&(G.tool_calls=U.map(W=>({...W,function:{...W.function,arguments:W.function.arguments}}))),this.memory.add(G),process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`\u{1F525} Stream ended. toolCalls.length=${U.length}, fullContent.length=${P.length}`),U.length>0){let W=/\[omitted\s+\w+:\s*\d+\s*lines?,\s*\d+\s*chars?\]/i;for(let N of U){let q=N.function.arguments||"";if(W.test(q)){console.error("[Runner] \u{1F6A8} Placeholder string detected in tool arguments!"),console.error(`[Runner] Tool: ${N.function.name}`),console.error(`[Runner] Arguments preview: ${q.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:N.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(L!==null&&h+U.length>L){C="tool_call_limit",b=!0,yield {type:"error",error:`Tool call budget exceeded (max ${L}, requested ${U.length}). Please summarize progress and ask whether to continue.`};break}if(U.length>1){let N=U.map(ne=>ne.function.name),q=[...new Set(N)];q.length===1&&N.length>1?p.info("RUNNER",`\u{1F504} Parallel calls: ${N.length}x ${q[0]} (different parameters)`):p.info("RUNNER",`\u{1F504} Parallel calls: ${N.join(", ")}`);}for(let N of U){h++,yield {type:"run_item_stream_event",name:"tool_called",item:{type:"tool_call_item",id:N.id,name:N.function.name,arguments:N.function.arguments,timestamp:Date.now()}},yield {type:"tool_call_start",id:N.id,name:N.function.name};let ne=!1;try{N.function.arguments&&(JSON.parse(N.function.arguments),ne=!0);}catch(le){we.toolError(N.function.name,`Invalid JSON arguments (${le.message}): ${N.function.arguments.substring(0,200)}...`),console.error(`[Runner] \u26A0\uFE0F Tool ${N.function.name} has invalid JSON arguments`),console.error(`[Runner] Arguments length: ${N.function.arguments.length}`),console.error(`[Runner] First 200 chars: ${N.function.arguments.substring(0,200)}`),console.error(`[Runner] Last 200 chars: ${N.function.arguments.substring(Math.max(0,N.function.arguments.length-200))}`);}yield {type:"tool_call_done",id:N.id,name:N.function.name,arguments:N.function.arguments,success:ne},yield {type:"raw_response_event",data:{type:"response.function_call_arguments.done",call_id:N.id,name:N.function.name,arguments:N.function.arguments},event_type:"response.function_call_arguments.done"};}let ce=new Set,V=null,ve=U.length>1;process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`Processing ${U.length} tool call(s)`,{isParallel:ve,tools:U.map(N=>N.function.name)});for(let N of U){let q={};try{let j=N.function.arguments?.trim()||"";q=j?JSON.parse(j):{};}catch(j){we.toolError(N.function.name,`Loop detection skipped: invalid JSON (${j.message})`);continue}let ne=this.loopDetector.detect(N.function.name,q);if(this.loopDetector.record(N.function.name,q),ne===0)continue;let le=this.loopDetector.generateIntervention(ne,N.function.name,q);if(this.memory.add({role:"system",content:le.message}),ne===2&&ey(N.function.name))continue;if(yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:N.id,name:N.function.name,output:le.message,success:!1,timestamp:Date.now()}},yield {type:"tool_output",name:N.function.name,output:le.message,success:!1},this.memory.addToolResult(N.id,N.function.name,le.message),this.loopDetector.updateLastStatus("error"),ce.add(N.id),le.shouldTerminate){V=le;break}}if(V&&(yield {type:"error",error:V.message},b=!0),b)break;let Z=ce.size>0?U.filter(N=>!ce.has(N.id)):U,X=new Set(this.modeStrategy.filterTools(this.tools).map(N=>N.name)),Y=N=>N.replace(/["\s/>]+$/g,"").trim(),J=[];for(let N of Z){let q=Y(N.function.name);if(X.has(q)||X.has(N.function.name)){J.push(N);continue}let ne=`Tool "${N.function.name}" is not allowed in ${this.currentMode} mode`;we.toolError(N.function.name,ne),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:N.id,name:N.function.name,output:ne,success:!1,timestamp:Date.now()}},yield {type:"tool_output",name:N.function.name,output:ne,success:!1},this.memory.addToolResult(N.id,N.function.name,ne),p.info("PERMISSION",`Tool blocked by mode: ${N.function.name} - ${ne}`);}if(J.length===0)continue;let Q=J.map(N=>({id:N.id,type:"function",function:{name:N.function.name,arguments:N.function.arguments}})),ee=!1;if(process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`\u{1F525} Before permission check. shouldAutoApprove=${this.modeStrategy.shouldAutoApprove()}, parallelToolCalls=${Q.length}`),!this.modeStrategy.shouldAutoApprove()){let N=new Set;try{for(let q of J)try{let ne=q.function.arguments.trim(),le=ne?JSON.parse(ne):{},ke=this.tools.find(j=>j.name===q.function.name);if(!ke){p.warn("RUNNER",`Tool not found: ${q.function.name}`);continue}let $e=await sy(n,async()=>this.permissionManager.checkPermission(ke,le));if(!$e.allowed){N.add(q.id);let j=$e.reason||`Tool "${q.function.name}" was denied`;we.toolError(q.function.name,j),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:q.id,name:q.function.name,output:j,success:!1,timestamp:Date.now()}},yield {type:"tool_output",name:q.function.name,output:j,success:!1};let ie=JSON.stringify({type:"ephemeral",status:"error",tool:q.function.name,summary:"Tool execution denied by user",error:j,final:!0});this.memory.addToolResult(q.id,q.function.name,ie),p.info("PERMISSION",`Tool denied: ${q.function.name} - ${j}`),ee=!0;}}catch(ne){if(ne?.name==="AbortError"||ne?.code==="ERR_CANCELED")throw ne;we.toolError(q.function.name,ne?.message||"permission check failed");}}catch(q){if(q?.name==="AbortError"||q?.code==="ERR_CANCELED"){p.info("RUNNER","Interrupt detected during permission check"),b=!0;break}throw q}if(J=J.filter(q=>!N.has(q.id)),Q=Q.filter(q=>!N.has(q.id)),ee){p.info("RUNNER","User denied tool - terminating current turn");break}if(Q.length===0)continue}if(process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`\u{1F525} After permission check. parallelToolCalls=${Q.length}, userDeniedTool=${ee}`),this.toolInputGuardrails.length>0){let N=new Set;try{for(let q of J)try{let ne=q.function.arguments.trim(),le=ne?JSON.parse(ne):{},ke={tool_name:q.function.name,tool_input:le,tool_call_id:q.id},$e=this.tools.find(te=>te.name===q.function.name);if(!$e)continue;this.runContext.iteration=m;let j=await sy(n,async()=>zs.runToolInputGuardrails(this.toolInputGuardrails,{context:this.runContext,tool_context:ke,agent_name:this.agentName,tool:$e}));if(!j.should_execute){N.add(q.id);let te=j.rejection_message||`Tool ${q.function.name} was blocked by guardrail`;we.toolError(q.function.name,`Blocked by guardrail: ${te}`),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:q.id,name:q.function.name,output:te,success:!1,timestamp:Date.now()}},yield {type:"tool_output",name:q.function.name,output:te,success:!1},this.memory.addToolResult(q.id,q.function.name,te),id(this.runContext,q.function.name,le,!1);}}catch(ne){if(ne?.name==="AbortError"||ne?.code==="ERR_CANCELED")throw ne;if(ne instanceof an){we.toolError(q.function.name,`Guardrail tripwire triggered: ${ne.message}`),yield {type:"error",error:`Guardrail tripwire triggered for ${q.function.name}: ${ne.message}`},b=!0;break}we.toolError(q.function.name,`Guardrail check failed: ${ne?.message}`);}}catch(q){if(q?.name==="AbortError"||q?.code==="ERR_CANCELED"){p.info("RUNNER","Interrupt detected during guardrails check"),b=!0;break}throw q}if(b)break;if(J=J.filter(q=>!N.has(q.id)),Q=Q.filter(q=>!N.has(q.id)),Q.length===0)continue}process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`\u{1F525} Before tool execution. parallelToolCalls=${Q.length}`);let de=await this.parallelExecutor.execute(Q,this.tools,N=>{if(we.toolCall(N.name,{}),N.success){let ne=typeof N.output=="string"?N.output.length:JSON.stringify(N.output).length;we.toolResult(N.name,!0,ne,N.executionTime||0);}else we.toolError(N.name,N.output);let q={type:"tool_call_output_item",id:N.id,name:N.name,output:N.output,success:N.success,timestamp:Date.now()};},n);for(let N of de.results){if(this.toolMetricsHistory.push({name:N.name,duration:N.executionTime||0,success:N.success}),this.toolMetricsHistory.length>50&&this.toolMetricsHistory.shift(),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:N.id,name:N.name,output:N.output,success:N.success,timestamp:Date.now()}},yield {type:"tool_output",name:N.name,output:N.output,success:N.success},N.name==="update_plan"&&N.success)try{p.info("PLAN_UPDATE","\u{1F525} Detected update_plan tool call",{resultId:N.id,toolCallsCount:U.length});let j=U.find(te=>te.id===N.id);if(j){p.info("PLAN_UPDATE","\u{1F525} Found original call",{callId:j.id,argsLength:j.function.arguments?.length});let te=JSON.parse(j.function.arguments||"{}");p.info("PLAN_UPDATE","\u{1F525} Parsed plan args",{hasExplanation:!!te.explanation,planSteps:te.plan?.length}),yield {type:"plan_update",explanation:te.explanation,plan:te.plan,timestamp:Date.now()},p.info("PLAN_UPDATE","\u2705 Emitted plan_update event");}else p.warn("PLAN_UPDATE","\u274C Could not find original tool call",{resultId:N.id,availableIds:U.map(te=>te.id)});}catch(j){p.error("PLAN_UPDATE","\u274C Failed to parse plan",{error:j});}let ne=typeof N.output=="string"?ry(N.output):ry(JSON.stringify(N.output));ne=this.enrichToolResult(ne,N.name,N.executionTime||0);let le=U.find(j=>j.id===N.id),ke={};if(le)try{ke=JSON.parse(le.function.arguments||"{}");}catch{}if(this.toolOutputGuardrails.length>0)try{let j=this.tools.find(te=>te.name===N.name);if(j){let te={tool_name:N.name,tool_input:ke,tool_call_id:N.id},ie=await zs.runToolOutputGuardrails(this.toolOutputGuardrails,{context:this.runContext,tool_context:te,agent_name:this.agentName,tool:j,output:N.output});ie.should_use_output||(ne=ie.replacement_message||"[Output blocked by guardrail]",we.toolError(N.name,"Output blocked by guardrail"));}}catch(j){j instanceof an&&we.toolError(N.name,`Output guardrail tripwire triggered: ${j.message}`);}if(!N.success&&typeof N.output=="string"){let j=N.output.toLowerCase();if(j.includes("operation cancelled")||j.includes("command interrupted")||j.includes("request aborted")){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Detected cancellation in tool output, breaking loop"),p.info("RUNNER","\u68C0\u6D4B\u5230\u5DE5\u5177\u4E2D\u65AD\u4FE1\u53F7\uFF0C\u7EC8\u6B62\u6267\u884C\u5FAA\u73AF"),b=!0;break}}id(this.runContext,N.name,ke,N.success),p.info("TOOL_RESULT",`\u{1F4E6} Tool raw output: ${N.name}`,{toolName:N.name,success:N.success,rawLength:typeof N.output=="string"?N.output.length:JSON.stringify(N.output).length,truncatedLength:ne.length,outputPreview:ne.substring(0,500)}),this.memory.addToolResult(N.id,N.name,ne);let $e=N.success?"success":"error";try{let j=typeof N.output=="string"?N.output:JSON.stringify(N.output),te=JSON.parse(j);te.status==="already_done"?$e="already_done":te.status==="success"?$e="success":te.status==="error"&&($e="error");}catch{}if(this.loopDetector.updateLastStatus($e),$e==="error"){let j=(T.get(N.name)||0)+1;if(T.set(N.name,j),N.name==="edit_file"&&(j===2||j===3)){let te=typeof N.output=="string"?N.output:JSON.stringify(N.output),ie=N.name,Ee=Xf(ie,te);this.memory.add({role:"system",content:Ee});}}else T.set(N.name,0);}if(m>0&&m%5===0){let N=this.buildPerformanceHint();N&&(this.memory.add({role:"system",content:N}),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Performance hint injected:",N));}if(process.env.CLI_DEBUG_CONSOLE==="1"&&de.stats&&(yield {type:"raw_response_event",data:{type:"parallel_execution.stats",stats:de.stats},event_type:"parallel_execution.stats"}),n?.aborted){b=!0;break}continue}else {if(this.plannerMode&&v<2&&this.shouldAutoContinuePlan(P)){v++;let W=this.buildPlanFollowupPrompt();yield {type:"raw_response_event",data:{type:"plan.auto_continue",plan_text:P,followup_prompt:W,count:v},event_type:"plan.auto_continue"},this.memory.add({role:"user",content:W});continue}if(P&&(yield {type:"run_item_stream_event",name:"message_output_created",item:{type:"message_output_item",content:P,role:"assistant",timestamp:Date.now()}}),process.env.CLI_DEBUG==="1"&&(p.info("RUNNER","=== Loop Exit: No Tool Calls ==="),p.info("RUNNER",`Finish Reason: ${H}`),p.info("RUNNER",`Content Length: ${P.length}`),p.info("RUNNER",`Content Preview: ${P.slice(0,300)}`),p.info("RUNNER",`Tool Calls Count: ${U.length}`),p.info("RUNNER",`Iteration: ${m}`)),this.structuredValidator){let W=this.structuredValidator.validate(P);if(W.ok)g=W.normalized||P,yield {type:"raw_response_event",data:{type:"structured_output.accepted",schema:this.structuredOutput?.name,normalized_text:g,parsed:W.parsed},event_type:"structured_output.accepted"};else {yield {type:"raw_response_event",data:{type:"structured_output.retry",schema:this.structuredOutput?.name,reason:W.reason,message:W.message,errors:W.errors},event_type:"structured_output.retry"},this.memory.add({role:"system",content:this.structuredValidator.buildRetryPrompt(W)}),g="";continue}}else g=P;this.outputGuardrails.length>0&&g&&(yield {type:"raw_response_event",data:{type:"output_guardrails.check_start",count:this.outputGuardrails.length},event_type:"output_guardrails.check_start"},await zs.runOutputGuardrails(this.outputGuardrails,s,this.agentName,g),yield {type:"raw_response_event",data:{type:"output_guardrails.check_passed"},event_type:"output_guardrails.check_passed"});break}}catch(A){if(A?.type==="stream_retry"){yield A;continue}let O=A instanceof Oe?A:on(A);if(process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Error classified:",{category:O.category,code:O.code,retryable:O.retryable,message:O.message}),O.category==="canceled"){C="interrupted",b=true,yield {type:"error",error:"Task interrupted by user."};break}if(O.retryable&&I<M){I++;let F=Wo(O.category,I,O.retryAfter),U=O.category==="retryable_rate_limit",H=O.code==="STREAM_TIMEOUT",se=O.category==="retryable_network"||O.category==="retryable_stream";p.warn("RUNNER",`Retrying after ${Wt(F)} (attempt ${I}/${M}): ${O.message}`),yield {type:"raw_response_event",data:{type:"runner.stream_retry",error:O.message,errorCode:O.code,attempt:I,maxRetries:M,delayMs:F,isRateLimit:U,isStreamTimeout:H,isNetworkError:se},event_type:"runner.stream_retry"},await Er(F),m--;continue}let z=Wa(O),P=O.message;z&&!P.includes(z)&&(P=`${P}
|
|
813
|
+
`;return l+d+c}var Sl=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;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 za(e.structuredOutput)),this.inputGuardrails=e.inputGuardrails||[],this.outputGuardrails=e.outputGuardrails||[],this.toolInputGuardrails=e.toolInputGuardrails||[],this.toolOutputGuardrails=e.toolOutputGuardrails||[],this.parallelExecutor=new Cl,this.compressionMode=e.compressionMode??"sync",this.workspacePath=e.workspacePath,this.unifiedCompressor=new Ka({debug:process.env.CLI_DEBUG==="1",minRecentMessages:this.minHistoryMessages,enableLLMCompression:true}),this.disableSystemPrompt=e.disableSystemPrompt??false,this.unifiedCompressor.setLLMProvider(this.llmProvider,this.model),e.contextWindow&&this.unifiedCompressor.setContextWindow(e.contextWindow),this.currentMode=e.config.mode??"agent",this.modeStrategy=zd(this.currentMode),this.permissionManager=e.permissionManager??new Ts({defaultPermission:"ask"}),this.loopDetector=Qf(),this.enablePlanMode=e.enablePlanMode??true,e.approvalHandler){let t=e.approvalHandler;this.permissionManager.setApprovalHandler(async n=>({approved:await t({id:"",name:n.toolName,args:n.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=zd(e),p.info("Runner",`Mode switched to: ${e}`);}getMode(){return this.currentMode}getPermissionManager(){return this.permissionManager}computeMaxInputTokens(e,t,n){if(n&&n>0)return n;let o=e&&e>0?e:19e4,i=.7,a=Math.floor(o*i),l=Math.min(t??ty,Math.floor(o*.1)),c=Math.max(2e3,a-l);if(process.env.CLI_DEBUG==="1"||process.env.CLI_DEBUG_CONSOLE==="1"){let u=`[Context] maxInputTokens=${c} (contextWindow=${o}, override=${n}, tailBudget=${t??ty}, safety=${i})`;console.log(u);}return c}async*withStreamWatchdog(e,t){if(s0){for await(let i of e)yield i;return}let n=e[Symbol.asyncIterator](),s=t?new Promise((i,a)=>{t.aborted?a(Tl()):t.addEventListener("abort",()=>a(Tl()),{once:true});}):null,o=false;for(;;){if(t?.aborted){if(n.return)try{await n.return();}catch{}throw Tl()}let i=o?n0:t0,a=null,l=new Promise((c,u)=>{a=setTimeout(()=>{u(e0(o?"idle":"first_chunk",i));},i);});try{let c=await Promise.race(s?[n.next(),l,s]:[n.next(),l]);if(a&&clearTimeout(a),c.done)return;o=!0,yield c.value;}catch(c){if(a&&clearTimeout(a),n.return)try{await n.return();}catch{}throw c?.code==="STREAM_TIMEOUT"&&p.warn("RUNNER",`[watchdog] ${c.message}`),c}}}async applyContextWindow(e=0){if(!this.maxInputTokens)return null;let t=this.memory.getMessagesForLLM(),n=await this.unifiedCompressor.compressHistory(t,this.maxInputTokens,{iteration:e,enableLLMCompression:true});if(n.stats.droppedMessages>0||n.stats.llmCompressedMessages>0){this.memory.setMessages(n.messages);let s=this.compressionMode==="async"?"Async":"Sync",o=(n.originalTokens/1e3).toFixed(1),i=(n.compressedTokens/1e3).toFixed(1),a=(n.savedTokens/1e3).toFixed(1),l=n.originalCount,c=n.compressedCount;p.info("Context",`[${s}] \u538B\u7F29\u5B8C\u6210: ${l}\u6761/${o}K \u2192 ${c}\u6761/${i}K (\u8282\u7701 ${a}K, \u4E22\u5F03${n.stats.droppedMessages}\u6761, LLM\u538B\u7F29${n.stats.llmCompressedMessages}\u6761)`),n.debugInfo&&n.debugInfo.forEach(u=>p.debug("Context",u));}return n}setCompressionMode(e){this.compressionMode=e,p.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 n=(typeof this.contextInjection=="string"?this.contextInjection:await this.contextInjection(e,{name:this.agentName,description:this.agentDescription}))?.trim();return n||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,n){this.runContext={task:e,timestamp:Date.now(),currentTime:new Date,iteration:0,userData:this.userData},this.loopDetector.reset(),process.env.CLI_DEBUG==="1"&&(p.debug("MK",` hasSignal: ${!!n}`),p.debug("RUNNER","========================================"),p.debug("RUNNER","=== runner.run ENTRY ==="),p.debug("RUNNER",` task: "${e?.substring(0,50)}..."`),p.debug("RUNNER",` hasImages: ${!!t&&t.length>0}`),p.debug("RUNNER",` hasSignal: ${!!n}`)),we.agentStart(e),yield {type:"agent_updated_stream_event",new_agent:{name:this.agentName}};let s=this.createRunContext(e,0),o=this.memory.hasConversationMessages?.()??this.memory.getMessagesForLLM().some(k=>k.role==="user"||k.role==="assistant"),i=!o||this.shouldIncludeLastRun(e);s.userData={...s.userData??{},hasConversation:o,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 zs.runInputGuardrails(this.inputGuardrails,s,this.agentName,e),yield {type:"raw_response_event",data:{type:"input_guardrails.check_passed"},event_type:"input_guardrails.check_passed"});let a=await this.getInstructions(s),l=await this.getContextInjection(s);process.env.CLI_DEBUG==="1"&&(console.log("[RUNNER] dynamicInstructions length:",a?.length||0),console.log("[RUNNER] dynamicInstructions START:",a?.substring(0,200)),console.log("[RUNNER] dynamicInstructions END:",a?.substring(a.length-500)),console.log("[RUNNER] contains \u534F\u4F5C\u6A21\u5F0F:",a?.includes("\u534F\u4F5C\u6A21\u5F0F")),console.log("[RUNNER] contains delegate_task:",a?.includes("delegate_task")));let c=this.memory.getMessagesForLLM(),u=c.some(k=>k.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(),a&&this.memory.add({role:"system",content:a});else if(!u){let k=this.modeStrategy.getSystemPrompt();this.memory.add({role:"system",content:k}),this.memory.add({role:"system",content:a}),this.structuredValidator&&this.memory.add({role:"system",content:this.structuredValidator.buildSystemPrompt()});try{let w=await Fd(this.workspacePath);w&&this.memory.add({role:"system",content:w});}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 k=[{type:"text",text:e},...t.map(w=>({type:"image_url",image_url:{url:w,detail:"auto"}}))];this.memory.add({role:"user",content:k});}else this.memory.add({role:"user",content:e});let d=Date.now(),m=0,g="",h=0,f={totalTokens:0,promptTokens:0,completionTokens:0},b=false,v=0,C=null,T=new Map,I=0,M=Vn.streamMaxRetries,D=Number.isFinite(this.config.maxIterations)?this.config.maxIterations:Eh,R=D===0||D===1/0,L=ny(this.config.maxToolCalls,Ah),S=ny(this.config.maxRuntimeMs,Mh);for(;R||m<D;){if(n?.aborted){C="interrupted",b=true,yield {type:"error",error:"Task interrupted by user."};break}if(S!==null&&Date.now()-d>=S){C="runtime_limit",b=true,yield {type:"error",error:`Reached max runtime (${Wt(S)}). Please summarize progress and ask whether to continue.`};break}if(L!==null&&h>=L){C="tool_call_limit",b=true,yield {type:"error",error:`Reached max tool calls (${L}). Please summarize progress and ask whether to continue.`};break}m++;let k=null;if(this.maxInputTokens){let A=Ht(this.memory.getMessagesForLLM()),O=this.maxInputTokens*.97;A>O&&(k=await this.applyContextWindow(m));}k&&(k.stats.droppedMessages>0||k.stats.llmCompressedMessages>0)&&(yield {type:"context_compaction",status:"completed",originalMessages:k.originalCount,keptMessages:k.messages.length,droppedMessages:k.stats.droppedMessages,compressedMessages:k.stats.llmCompressedMessages,originalTokens:k.originalTokens,finalTokens:k.compressedTokens,budgetTokens:this.maxInputTokens||0,useLLM:k.stats.llmCompressedMessages>0,timestamp:Date.now()});let w=this.memory.checkContextHealth();if((w.warnings.length>0||w.shouldCleanup)&&(yield {type:"raw_response_event",data:{type:"context_health",totalTokens:w.totalTokens,toolResultTokens:w.toolResultTokens,toolResultRatio:w.toolResultRatio,messageCount:w.messageCount,toolMessageCount:w.toolMessageCount,warnings:w.warnings,shouldCompress:w.shouldCompress,shouldCleanup:w.shouldCleanup,byType:w.byType},event_type:"context_health"},w.shouldCleanup&&w.byType.ephemeral.count>5)){let A=this.memory.cleanupEphemeral();A>0&&p.info("Runner",`Cleaned ${A} ephemeral messages`);}p.debug("Runner",this.memory.getTokenSummary()),we.agentIteration(m,"thinking"),yield {type:"iteration_start",iteration:m};try{yield {type:"raw_response_event",data:{type:"response.created",response:{id:`resp_${Date.now()}`,model:this.model}},event_type:"response.created"};let A=this.memory.getMessagesForLLM();if(p.info("LLM",`Request: model=${this.model}, messages=${A.length}, tools=${this.tools.length}`),p.debug("LLM","Request messages",{messageCount:A.length,lastMessage:A[A.length-1]?.content?.toString().substring(0,200)}),process.env.CLI_DEBUG==="1"){let W=A.filter(ce=>ce.role==="system");console.log("[RUNNER] System messages count:",W.length);for(let ce=0;ce<W.length;ce++){let V=W[ce].content,ve=typeof V=="string"?V:JSON.stringify(V);console.log(`[RUNNER] System[${ce}] length:`,ve?.length||0),console.log(`[RUNNER] System[${ce}] contains \u534F\u4F5C\u6A21\u5F0F:`,ve?.includes("\u534F\u4F5C\u6A21\u5F0F")||!1),console.log(`[RUNNER] System[${ce}] contains delegate_task:`,ve?.includes("delegate_task")||!1),console.log(`[RUNNER] System[${ce}] preview:`,ve?.substring(0,300)||"");}}let O=this.modeStrategy.filterTools(this.tools);process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`Mode: ${this.currentMode}, Available tools: ${O.length}/${this.tools.length}`);let z=this.llmProvider.chatStreamed(this.memory.getMessagesForLLM(),{model:this.model,tools:O,temperature:this.config.temperature,structuredOutput:this.structuredOutput,maxInputTokens:this.maxInputTokens,disableSystemPrompt:this.disableSystemPrompt,signal:n}),P="",B="",F=[],U=[],H="",se={prompt_tokens:0,completion_tokens:0,total_tokens:0};for await(let W of this.withStreamWatchdog(z,n)){if(W.type==="stream_retry"){yield W;continue}if(W.type==="stream_recovered"){yield {type:"stream_recovered",attempt:W.attempt,maxRetries:W.maxRetries};continue}yield {type:"raw_response_event",data:W,event_type:W.choices?.[0]?.delta?"response.delta":"response.chunk"};let ce=W.choices?.[0]?.delta;if(W.usage){se={prompt_tokens:W.usage.prompt_tokens||se.prompt_tokens,completion_tokens:W.usage.completion_tokens||se.completion_tokens,total_tokens:W.usage.total_tokens||se.total_tokens,cached_tokens:W.usage.cached_tokens,cache_read_input_tokens:W.usage.cache_read_input_tokens,cache_creation_input_tokens:W.usage.cache_creation_input_tokens,prompt_tokens_details:W.usage.prompt_tokens_details},f={promptTokens:se.prompt_tokens,completionTokens:se.completion_tokens,totalTokens:se.total_tokens};let V=!!W.choices?.[0]?.finish_reason;yield {type:"token_usage",usage:se,is_final:V};}if(ce){if(ce.reasoning_content&&(B+=ce.reasoning_content,yield {type:"reasoning_delta",delta:ce.reasoning_content}),ce.reasoning_complete&&(yield {type:"reasoning_complete"}),ce.content&&(P+=ce.content,g=P,yield {type:"text_delta",delta:ce.content}),ce.tool_calls)for(let V of ce.tool_calls){let ve=V.index;U[ve]||(U[ve]={id:V.id||`call_${Math.floor(Date.now())}_${ve}`,type:"function",function:{name:"",arguments:""}}),V.id&&(U[ve].id=V.id),V.function?.name&&(U[ve].function.name=V.function.name),V.function?.arguments&&(U[ve].function.arguments+=V.function.arguments,yield {type:"tool_call_delta",id:U[ve].id,name:U[ve].function.name,arguments_delta:V.function.arguments}),V.thoughtSignature&&(U[ve].thoughtSignature=V.thoughtSignature);}W.choices?.[0]?.finish_reason&&(H=W.choices[0].finish_reason),W.thinking_blocks&&Array.isArray(W.thinking_blocks)&&(F=W.thinking_blocks.map(V=>({type:V.type,thinking:V.thinking,signature:V.signature,data:V.data})));}}P&&(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 G={role:"assistant",content:(P||"").trimEnd()};if(B&&(G.reasoning_content=B),F.length>0&&(G.thinking_blocks=F),U.length>0&&(G.tool_calls=U.map(W=>({...W,function:{...W.function,arguments:W.function.arguments}}))),this.memory.add(G),process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`\u{1F525} Stream ended. toolCalls.length=${U.length}, fullContent.length=${P.length}`),U.length>0){let W=/\[omitted\s+\w+:\s*\d+\s*lines?,\s*\d+\s*chars?\]/i;for(let N of U){let q=N.function.arguments||"";if(W.test(q)){console.error("[Runner] \u{1F6A8} Placeholder string detected in tool arguments!"),console.error(`[Runner] Tool: ${N.function.name}`),console.error(`[Runner] Arguments preview: ${q.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:N.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(L!==null&&h+U.length>L){C="tool_call_limit",b=!0,yield {type:"error",error:`Tool call budget exceeded (max ${L}, requested ${U.length}). Please summarize progress and ask whether to continue.`};break}if(U.length>1){let N=U.map(ne=>ne.function.name),q=[...new Set(N)];q.length===1&&N.length>1?p.info("RUNNER",`\u{1F504} Parallel calls: ${N.length}x ${q[0]} (different parameters)`):p.info("RUNNER",`\u{1F504} Parallel calls: ${N.join(", ")}`);}for(let N of U){h++,yield {type:"run_item_stream_event",name:"tool_called",item:{type:"tool_call_item",id:N.id,name:N.function.name,arguments:N.function.arguments,timestamp:Date.now()}},yield {type:"tool_call_start",id:N.id,name:N.function.name};let ne=!1;try{N.function.arguments&&(JSON.parse(N.function.arguments),ne=!0);}catch(le){we.toolError(N.function.name,`Invalid JSON arguments (${le.message}): ${N.function.arguments.substring(0,200)}...`),console.error(`[Runner] \u26A0\uFE0F Tool ${N.function.name} has invalid JSON arguments`),console.error(`[Runner] Arguments length: ${N.function.arguments.length}`),console.error(`[Runner] First 200 chars: ${N.function.arguments.substring(0,200)}`),console.error(`[Runner] Last 200 chars: ${N.function.arguments.substring(Math.max(0,N.function.arguments.length-200))}`);}yield {type:"tool_call_done",id:N.id,name:N.function.name,arguments:N.function.arguments,success:ne},yield {type:"raw_response_event",data:{type:"response.function_call_arguments.done",call_id:N.id,name:N.function.name,arguments:N.function.arguments},event_type:"response.function_call_arguments.done"};}let ce=new Set,V=null,ve=U.length>1;process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`Processing ${U.length} tool call(s)`,{isParallel:ve,tools:U.map(N=>N.function.name)});for(let N of U){let q={};try{let j=N.function.arguments?.trim()||"";q=j?JSON.parse(j):{};}catch(j){we.toolError(N.function.name,`Loop detection skipped: invalid JSON (${j.message})`);continue}let ne=this.loopDetector.detect(N.function.name,q);if(this.loopDetector.record(N.function.name,q),ne===0)continue;let le=this.loopDetector.generateIntervention(ne,N.function.name,q);if(this.memory.add({role:"system",content:le.message}),ne===2&&ey(N.function.name))continue;if(yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:N.id,name:N.function.name,output:le.message,success:!1,timestamp:Date.now()}},yield {type:"tool_output",name:N.function.name,output:le.message,success:!1},this.memory.addToolResult(N.id,N.function.name,le.message),this.loopDetector.updateLastStatus("error"),ce.add(N.id),le.shouldTerminate){V=le;break}}if(V&&(yield {type:"error",error:V.message},b=!0),b)break;let Z=ce.size>0?U.filter(N=>!ce.has(N.id)):U,X=new Set(this.modeStrategy.filterTools(this.tools).map(N=>N.name)),Y=N=>N.replace(/["\s/>]+$/g,"").trim(),J=[];for(let N of Z){let q=Y(N.function.name);if(X.has(q)||X.has(N.function.name)){J.push(N);continue}let ne=`Tool "${N.function.name}" is not allowed in ${this.currentMode} mode`;we.toolError(N.function.name,ne),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:N.id,name:N.function.name,output:ne,success:!1,timestamp:Date.now()}},yield {type:"tool_output",name:N.function.name,output:ne,success:!1},this.memory.addToolResult(N.id,N.function.name,ne),p.info("PERMISSION",`Tool blocked by mode: ${N.function.name} - ${ne}`);}if(J.length===0)continue;let Q=J.map(N=>({id:N.id,type:"function",function:{name:N.function.name,arguments:N.function.arguments}})),ee=!1;if(process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`\u{1F525} Before permission check. shouldAutoApprove=${this.modeStrategy.shouldAutoApprove()}, parallelToolCalls=${Q.length}`),!this.modeStrategy.shouldAutoApprove()){let N=new Set;try{for(let q of J)try{let ne=q.function.arguments.trim(),le=ne?JSON.parse(ne):{},_e=this.tools.find(j=>j.name===q.function.name);if(!_e){p.warn("RUNNER",`Tool not found: ${q.function.name}`);continue}let $e=await sy(n,async()=>this.permissionManager.checkPermission(_e,le));if(!$e.allowed){N.add(q.id);let j=$e.reason||`Tool "${q.function.name}" was denied`;we.toolError(q.function.name,j),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:q.id,name:q.function.name,output:j,success:!1,timestamp:Date.now()}},yield {type:"tool_output",name:q.function.name,output:j,success:!1};let ie=JSON.stringify({type:"ephemeral",status:"error",tool:q.function.name,summary:"Tool execution denied by user",error:j,final:!0});this.memory.addToolResult(q.id,q.function.name,ie),p.info("PERMISSION",`Tool denied: ${q.function.name} - ${j}`),ee=!0;}}catch(ne){if(ne?.name==="AbortError"||ne?.code==="ERR_CANCELED")throw ne;we.toolError(q.function.name,ne?.message||"permission check failed");}}catch(q){if(q?.name==="AbortError"||q?.code==="ERR_CANCELED"){p.info("RUNNER","Interrupt detected during permission check"),b=!0;break}throw q}if(J=J.filter(q=>!N.has(q.id)),Q=Q.filter(q=>!N.has(q.id)),ee){p.info("RUNNER","User denied tool - terminating current turn");break}if(Q.length===0)continue}if(process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`\u{1F525} After permission check. parallelToolCalls=${Q.length}, userDeniedTool=${ee}`),this.toolInputGuardrails.length>0){let N=new Set;try{for(let q of J)try{let ne=q.function.arguments.trim(),le=ne?JSON.parse(ne):{},_e={tool_name:q.function.name,tool_input:le,tool_call_id:q.id},$e=this.tools.find(te=>te.name===q.function.name);if(!$e)continue;this.runContext.iteration=m;let j=await sy(n,async()=>zs.runToolInputGuardrails(this.toolInputGuardrails,{context:this.runContext,tool_context:_e,agent_name:this.agentName,tool:$e}));if(!j.should_execute){N.add(q.id);let te=j.rejection_message||`Tool ${q.function.name} was blocked by guardrail`;we.toolError(q.function.name,`Blocked by guardrail: ${te}`),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:q.id,name:q.function.name,output:te,success:!1,timestamp:Date.now()}},yield {type:"tool_output",name:q.function.name,output:te,success:!1},this.memory.addToolResult(q.id,q.function.name,te),id(this.runContext,q.function.name,le,!1);}}catch(ne){if(ne?.name==="AbortError"||ne?.code==="ERR_CANCELED")throw ne;if(ne instanceof an){we.toolError(q.function.name,`Guardrail tripwire triggered: ${ne.message}`),yield {type:"error",error:`Guardrail tripwire triggered for ${q.function.name}: ${ne.message}`},b=!0;break}we.toolError(q.function.name,`Guardrail check failed: ${ne?.message}`);}}catch(q){if(q?.name==="AbortError"||q?.code==="ERR_CANCELED"){p.info("RUNNER","Interrupt detected during guardrails check"),b=!0;break}throw q}if(b)break;if(J=J.filter(q=>!N.has(q.id)),Q=Q.filter(q=>!N.has(q.id)),Q.length===0)continue}process.env.CLI_DEBUG==="1"&&p.debug("RUNNER",`\u{1F525} Before tool execution. parallelToolCalls=${Q.length}`);let de=await this.parallelExecutor.execute(Q,this.tools,N=>{if(we.toolCall(N.name,{}),N.success){let ne=typeof N.output=="string"?N.output.length:JSON.stringify(N.output).length;we.toolResult(N.name,!0,ne,N.executionTime||0);}else we.toolError(N.name,N.output);let q={type:"tool_call_output_item",id:N.id,name:N.name,output:N.output,success:N.success,timestamp:Date.now()};},n);for(let N of de.results){if(this.toolMetricsHistory.push({name:N.name,duration:N.executionTime||0,success:N.success}),this.toolMetricsHistory.length>50&&this.toolMetricsHistory.shift(),yield {type:"run_item_stream_event",name:"tool_output",item:{type:"tool_call_output_item",id:N.id,name:N.name,output:N.output,success:N.success,timestamp:Date.now()}},yield {type:"tool_output",name:N.name,output:N.output,success:N.success},N.name==="update_plan"&&N.success)try{p.info("PLAN_UPDATE","\u{1F525} Detected update_plan tool call",{resultId:N.id,toolCallsCount:U.length});let j=U.find(te=>te.id===N.id);if(j){p.info("PLAN_UPDATE","\u{1F525} Found original call",{callId:j.id,argsLength:j.function.arguments?.length});let te=JSON.parse(j.function.arguments||"{}");p.info("PLAN_UPDATE","\u{1F525} Parsed plan args",{hasExplanation:!!te.explanation,planSteps:te.plan?.length}),yield {type:"plan_update",explanation:te.explanation,plan:te.plan,timestamp:Date.now()},p.info("PLAN_UPDATE","\u2705 Emitted plan_update event");}else p.warn("PLAN_UPDATE","\u274C Could not find original tool call",{resultId:N.id,availableIds:U.map(te=>te.id)});}catch(j){p.error("PLAN_UPDATE","\u274C Failed to parse plan",{error:j});}let ne=typeof N.output=="string"?ry(N.output):ry(JSON.stringify(N.output));ne=this.enrichToolResult(ne,N.name,N.executionTime||0);let le=U.find(j=>j.id===N.id),_e={};if(le)try{_e=JSON.parse(le.function.arguments||"{}");}catch{}if(this.toolOutputGuardrails.length>0)try{let j=this.tools.find(te=>te.name===N.name);if(j){let te={tool_name:N.name,tool_input:_e,tool_call_id:N.id},ie=await zs.runToolOutputGuardrails(this.toolOutputGuardrails,{context:this.runContext,tool_context:te,agent_name:this.agentName,tool:j,output:N.output});ie.should_use_output||(ne=ie.replacement_message||"[Output blocked by guardrail]",we.toolError(N.name,"Output blocked by guardrail"));}}catch(j){j instanceof an&&we.toolError(N.name,`Output guardrail tripwire triggered: ${j.message}`);}if(!N.success&&typeof N.output=="string"){let j=N.output.toLowerCase();if(j.includes("operation cancelled")||j.includes("command interrupted")||j.includes("request aborted")){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Detected cancellation in tool output, breaking loop"),p.info("RUNNER","\u68C0\u6D4B\u5230\u5DE5\u5177\u4E2D\u65AD\u4FE1\u53F7\uFF0C\u7EC8\u6B62\u6267\u884C\u5FAA\u73AF"),b=!0;break}}id(this.runContext,N.name,_e,N.success),p.info("TOOL_RESULT",`\u{1F4E6} Tool raw output: ${N.name}`,{toolName:N.name,success:N.success,rawLength:typeof N.output=="string"?N.output.length:JSON.stringify(N.output).length,truncatedLength:ne.length,outputPreview:ne.substring(0,500)}),this.memory.addToolResult(N.id,N.name,ne);let $e=N.success?"success":"error";try{let j=typeof N.output=="string"?N.output:JSON.stringify(N.output),te=JSON.parse(j);te.status==="already_done"?$e="already_done":te.status==="success"?$e="success":te.status==="error"&&($e="error");}catch{}if(this.loopDetector.updateLastStatus($e),$e==="error"){let j=(T.get(N.name)||0)+1;if(T.set(N.name,j),N.name==="edit_file"&&(j===2||j===3)){let te=typeof N.output=="string"?N.output:JSON.stringify(N.output),ie=N.name,Ae=Xf(ie,te);this.memory.add({role:"system",content:Ae});}}else T.set(N.name,0);}if(m>0&&m%5===0){let N=this.buildPerformanceHint();N&&(this.memory.add({role:"system",content:N}),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Performance hint injected:",N));}if(process.env.CLI_DEBUG_CONSOLE==="1"&&de.stats&&(yield {type:"raw_response_event",data:{type:"parallel_execution.stats",stats:de.stats},event_type:"parallel_execution.stats"}),n?.aborted){b=!0;break}continue}else {if(this.plannerMode&&v<2&&this.shouldAutoContinuePlan(P)){v++;let W=this.buildPlanFollowupPrompt();yield {type:"raw_response_event",data:{type:"plan.auto_continue",plan_text:P,followup_prompt:W,count:v},event_type:"plan.auto_continue"},this.memory.add({role:"user",content:W});continue}if(P&&(yield {type:"run_item_stream_event",name:"message_output_created",item:{type:"message_output_item",content:P,role:"assistant",timestamp:Date.now()}}),process.env.CLI_DEBUG==="1"&&(p.info("RUNNER","=== Loop Exit: No Tool Calls ==="),p.info("RUNNER",`Finish Reason: ${H}`),p.info("RUNNER",`Content Length: ${P.length}`),p.info("RUNNER",`Content Preview: ${P.slice(0,300)}`),p.info("RUNNER",`Tool Calls Count: ${U.length}`),p.info("RUNNER",`Iteration: ${m}`)),this.structuredValidator){let W=this.structuredValidator.validate(P);if(W.ok)g=W.normalized||P,yield {type:"raw_response_event",data:{type:"structured_output.accepted",schema:this.structuredOutput?.name,normalized_text:g,parsed:W.parsed},event_type:"structured_output.accepted"};else {yield {type:"raw_response_event",data:{type:"structured_output.retry",schema:this.structuredOutput?.name,reason:W.reason,message:W.message,errors:W.errors},event_type:"structured_output.retry"},this.memory.add({role:"system",content:this.structuredValidator.buildRetryPrompt(W)}),g="";continue}}else g=P;this.outputGuardrails.length>0&&g&&(yield {type:"raw_response_event",data:{type:"output_guardrails.check_start",count:this.outputGuardrails.length},event_type:"output_guardrails.check_start"},await zs.runOutputGuardrails(this.outputGuardrails,s,this.agentName,g),yield {type:"raw_response_event",data:{type:"output_guardrails.check_passed"},event_type:"output_guardrails.check_passed"});break}}catch(A){if(A?.type==="stream_retry"){yield A;continue}let O=A instanceof Oe?A:on(A);if(process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Runner] Error classified:",{category:O.category,code:O.code,retryable:O.retryable,message:O.message}),O.category==="canceled"){C="interrupted",b=true,yield {type:"error",error:"Task interrupted by user."};break}if(O.retryable&&I<M){I++;let F=Wo(O.category,I,O.retryAfter),U=O.category==="retryable_rate_limit",H=O.code==="STREAM_TIMEOUT",se=O.category==="retryable_network"||O.category==="retryable_stream";p.warn("RUNNER",`Retrying after ${Wt(F)} (attempt ${I}/${M}): ${O.message}`),yield {type:"raw_response_event",data:{type:"runner.stream_retry",error:O.message,errorCode:O.code,attempt:I,maxRetries:M,delayMs:F,isRateLimit:U,isStreamTimeout:H,isNetworkError:se},event_type:"runner.stream_retry"},await Er(F),m--;continue}let z=Wa(O),P=O.message;z&&!P.includes(z)&&(P=`${P}
|
|
814
814
|
|
|
815
815
|
\u{1F4A1} Suggestion: ${z}`),b=true;let B=Gh(P,{providerName:this.providerName});we.agentError(B),yield {type:"raw_response_event",data:{type:"error.classified",category:O.category,code:O.code,message:O.message,retryable:O.retryable,suggestion:z,context:O.context},event_type:"error.classified"},yield {type:"error",error:B};break}}!b&&!R&&m>=D&&!g&&(C=C||"iteration_limit",b=true,yield {type:"error",error:`Reached max iterations (${D}). Please summarize progress and ask whether to continue.`}),b||(we.agentComplete(m,h,f),p.info("LLM",`Complete: iterations=${m}, toolCalls=${h}, tokens=${f.totalTokens} (prompt=${f.promptTokens}, completion=${f.completionTokens})`)),process.env.CLI_DEBUG==="1"&&(p.debug("RUNNER","=== runner.run COMPLETING ==="),p.debug("RUNNER",` iterations: ${m}`),p.debug("RUNNER",` toolCalls: ${h}`),p.debug("RUNNER",` encounteredError: ${b}`),C&&p.debug("RUNNER",` stoppedBy: ${C}`)),yield {type:"run_done"},process.env.CLI_DEBUG==="1"&&p.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 n=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(a=>n.includes(a))?(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."}enrichToolResult(e,t,n){if(n<1e3)return e;let s=n>=1e3?`${(n/1e3).toFixed(1)}s`:`${n}ms`;return `\u23F1\uFE0F [${t} took ${s}]
|
|
816
816
|
|
|
@@ -818,11 +818,11 @@ Available operations: All tools (auto-approved).`}shouldAutoApprove(){return tr
|
|
|
818
818
|
[Performance Notice]
|
|
819
819
|
${s.join(`
|
|
820
820
|
`)}
|
|
821
|
-
`}};var qd=null;function iy(r){qd=r;}function r0(){if(!qd)throw new Error("Approval prompt is not configured");return qd}async function ay(r){let{toolName:e,args:t,reason:n,allowRemember:s}=r,o=r0(),i=Object.keys(t).length>0?` (${Object.keys(t).slice(0,2).join(", ")}${Object.keys(t).length>2?"...":""})`:"",a=`Allow tool ${e}${i}?`,l=n?`Warning: ${n}`:void 0,c=[{label:"Allow Once",value:"allow_once",description:"Allow this tool call only this time"}];switch(s&&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 o(a,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 ly(r=false){let e=new Ts({approvalHandler:r?void 0:ay,defaultPermission:r?"allow":"ask",memoryExpirationMs:864e5});return r||Hd(e),e}var i0={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}},a0={timeout:3e4,maxMemoryMB:512,maxCPUPercent:50,allowNetwork:true,allowFileSystem:true,workingDirectory:process.cwd(),env:{},captureImages:false,maxOutputSize:1e4},wn=class{config;constructor(e={}){this.config={...a0,...e};}async execute(e,t){let n=Date.now(),s=i0[t];if(!s)return {success:false,stdout:"",stderr:"",exitCode:1,executionTime:0,error:`Unsupported language: ${t}`};if(!await this.checkRuntimeAvailable(s.command))return {success:false,stdout:"",stderr:"",exitCode:1,executionTime:0,error:`Runtime not found: ${s.command}. Please install it first.`};let i=null;try{s.useTempFile&&(i=await this.createTempFile(e,s.extension));let a=s.args.map(h=>h.replace("{file}",i||"")),l=i?ge__default.dirname(i):this.config.workingDirectory,c=[s.command,...a].join(" "),u={...Object.fromEntries(Object.entries(process.env).filter(([h,f])=>f!==void 0)),...this.config.env};t==="python"&&this.config.captureImages&&(u.MPLBACKEND="Agg");let d=await this.executeCommand(s.command,a,u,l),m=[];this.config.captureImages&&i&&(m=await this.captureGeneratedImages(ge__default.dirname(i)));let g=Date.now()-n;return {...d,executionTime:g,command:c,workingDirectory:l,images:m&&m.length>0?m:void 0}}catch(a){let l=Date.now()-n;return {success:false,stdout:a.stdout||"",stderr:a.stderr||"",exitCode:a.exitCode||1,executionTime:l,error:a.message,timedOut:a.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 n=await
|
|
821
|
+
`}};var qd=null;function iy(r){qd=r;}function r0(){if(!qd)throw new Error("Approval prompt is not configured");return qd}async function ay(r){let{toolName:e,args:t,reason:n,allowRemember:s}=r,o=r0(),i=Object.keys(t).length>0?` (${Object.keys(t).slice(0,2).join(", ")}${Object.keys(t).length>2?"...":""})`:"",a=`Allow tool ${e}${i}?`,l=n?`Warning: ${n}`:void 0,c=[{label:"Allow Once",value:"allow_once",description:"Allow this tool call only this time"}];switch(s&&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 o(a,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 ly(r=false){let e=new Ts({approvalHandler:r?void 0:ay,defaultPermission:r?"allow":"ask",memoryExpirationMs:864e5});return r||Hd(e),e}var i0={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}},a0={timeout:3e4,maxMemoryMB:512,maxCPUPercent:50,allowNetwork:true,allowFileSystem:true,workingDirectory:process.cwd(),env:{},captureImages:false,maxOutputSize:1e4},wn=class{config;constructor(e={}){this.config={...a0,...e};}async execute(e,t){let n=Date.now(),s=i0[t];if(!s)return {success:false,stdout:"",stderr:"",exitCode:1,executionTime:0,error:`Unsupported language: ${t}`};if(!await this.checkRuntimeAvailable(s.command))return {success:false,stdout:"",stderr:"",exitCode:1,executionTime:0,error:`Runtime not found: ${s.command}. Please install it first.`};let i=null;try{s.useTempFile&&(i=await this.createTempFile(e,s.extension));let a=s.args.map(h=>h.replace("{file}",i||"")),l=i?ge__default.dirname(i):this.config.workingDirectory,c=[s.command,...a].join(" "),u={...Object.fromEntries(Object.entries(process.env).filter(([h,f])=>f!==void 0)),...this.config.env};t==="python"&&this.config.captureImages&&(u.MPLBACKEND="Agg");let d=await this.executeCommand(s.command,a,u,l),m=[];this.config.captureImages&&i&&(m=await this.captureGeneratedImages(ge__default.dirname(i)));let g=Date.now()-n;return {...d,executionTime:g,command:c,workingDirectory:l,images:m&&m.length>0?m:void 0}}catch(a){let l=Date.now()-n;return {success:false,stdout:a.stdout||"",stderr:a.stderr||"",exitCode:a.exitCode||1,executionTime:l,error:a.message,timedOut:a.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 n=await Ee__default.mkdtemp(ge__default.join(Cr__default.tmpdir(),"neox-code-")),s=ge__default.join(n,`script${t}`);return await Ee__default.writeFile(s,e,"utf-8"),s}async executeCommand(e,t,n,s){try{let{stdout:o,stderr:i,exitCode:a}=await execa(e,t,{timeout:this.config.timeout,cwd:s,env:n,all:!0,reject:!1}),l=this.truncateOutput(o),c=this.truncateOutput(i);return {success:a===0,stdout:l,stderr:c,exitCode:a||0}}catch(o){throw o.timedOut?{stdout:o.stdout||"",stderr:o.stderr||"",exitCode:-1,message:`Execution timed out after ${this.config.timeout}ms`,timedOut:true}:{stdout:o.stdout||"",stderr:o.stderr||"",exitCode:o.exitCode||1,message:o.message}}}truncateOutput(e){if(e.length<=this.config.maxOutputSize)return e;let t=Math.floor(this.config.maxOutputSize/2);return e.slice(0,t)+`
|
|
822
822
|
|
|
823
823
|
... [Truncated ${e.length-this.config.maxOutputSize} characters] ...
|
|
824
824
|
|
|
825
|
-
`+e.slice(-t)}async captureGeneratedImages(e){try{let n=(await
|
|
825
|
+
`+e.slice(-t)}async captureGeneratedImages(e){try{let n=(await Ee__default.readdir(e)).filter(o=>/\.(png|jpg|jpeg|svg)$/i.test(o)),s=[];for(let o of n){let i=ge__default.join(e,o),l=(await Ee__default.readFile(i)).toString("base64");s.push({type:"base64",data:l,filename:o});}return s}catch{return []}}async cleanupTempFile(e){try{let t=ge__default.dirname(e);await Ee__default.rm(t,{recursive:!0,force:!0});}catch{}}static formatResult(e){let t=[];return e.success?t.push(`\u2705 Code executed successfully
|
|
826
826
|
`):t.push(`\u274C Code execution failed
|
|
827
827
|
`),t.push(`\u23F1\uFE0F Execution time: ${e.executionTime}ms`),t.push(`\u{1F522} Exit code: ${e.exitCode}`),(e.command||e.workingDirectory)&&(t.push(`
|
|
828
828
|
\u{1F6E0}\uFE0F Command:`),e.command&&t.push(`$ ${e.command}`),e.workingDirectory&&t.push(`CWD: ${e.workingDirectory}`)),e.timedOut&&t.push("\u23F0 Execution timed out"),e.stdout&&(t.push(`
|
|
@@ -1160,7 +1160,7 @@ Examples:
|
|
|
1160
1160
|
- "user.name" - Get a property value
|
|
1161
1161
|
- "count > 10" - Evaluate a condition
|
|
1162
1162
|
- "formatDate(timestamp)" - Call a function
|
|
1163
|
-
- "arr[0] + arr[1]" - Perform calculations`,parameters:{type:"object",properties:{sessionId:{type:"string",description:"The debug session ID"},expression:{type:"string",description:'The expression to evaluate (e.g., "user.name", "count > 10")'},frameId:{type:"number",description:"Optional stack frame ID to evaluate in (default: current frame)"}},required:["sessionId","expression"]},function:async r=>{let{sessionId:e,expression:t,frameId:n}=r,s=Zt();try{let o=await s.debugEvaluate(e,t,n);return JSON.stringify({success:!0,result:o.value,type:o.type},null,2)}catch(o){return JSON.stringify({success:false,error:o.message||"Failed to evaluate expression"},null,2)}}},op=[O0,B0,F0,U0,G0,j0,W0,H0,z0,q0,K0,J0,V0],xy=["editor"];function Nl(){return op.map(r=>({...r,capabilities:r.capabilities?Array.from(new Set([...r.capabilities,...xy])):xy}))}$l();re();var Sy="main";function ip(r){Sy=r;}var ap=false;function Xr(){ap=true,p.info("GUARDED_WRITE","Write lock enabled");}function ks(){ap=false,p.info("GUARDED_WRITE","Write lock disabled");}function ky(r,e){let t=r.function;return {...r,function:async(n,s)=>{if(!ap)return t(n,s);let o=n.file_path||n.path||n.filePath;if(!o)return t(n,s);let i=Ll(),a=e??Sy;p.debug("GUARDED_WRITE",`Acquiring lock for ${o}`,{agentId:a});let l=await i.acquire(o,a);if(!l.success)return p.warn("GUARDED_WRITE",`Failed to acquire lock for ${o}`,{agentId:a,heldBy:l.heldBy,waitTime:l.waitTime}),JSON.stringify({tool:r.name,status:"error",message:`Write lock timeout: file ${o} is being written by another agent`,details:{file_path:o,held_by:l.heldBy,wait_time_ms:l.waitTime}});try{return await t(n,s)}finally{i.release(o,a),p.debug("GUARDED_WRITE",`Released lock for ${o}`,{agentId:a});}}}}function _y(r){return ky(r)}function Iy(r,e){return ky(r,e)}function Xs(r,e){let t=new Set(["write_file","edit_file","delete_file","rename_file","move_file"]);return r.map(n=>t.has(n.name)?e?Iy(n,e):_y(n):n)}var X0=new Set([".git",".svn",".hg",".idea",".vscode",".vs",".fleet",".DS_Store","__MACOSX","Thumbs.db"]),Q0={nodejs:{detectFiles:["package.json","package-lock.json","yarn.lock","pnpm-lock.yaml"],skipDirs:["node_modules","dist","build","out",".next",".nuxt",".output",".cache",".parcel-cache",".turbo","coverage",".nyc_output","storybook-static"],skipPatterns:[/\.min\.js$/,/\.bundle\.js$/,/\.chunk\.js$/],interestingDirs:["src","lib","app","pages","components","hooks","utils","services","api","types","styles","public","assets","test","tests","__tests__","spec"],description:"Node.js/JavaScript/TypeScript \u9879\u76EE"},python:{detectFiles:["setup.py","pyproject.toml","requirements.txt","Pipfile","poetry.lock"],skipDirs:["__pycache__",".pytest_cache",".mypy_cache",".tox",".nox","venv",".venv","env",".env","virtualenv",".eggs","*.egg-info","dist","build",".ipynb_checkpoints","htmlcov"],skipPatterns:[/\.pyc$/,/\.pyo$/],interestingDirs:["src","lib","app","apps","core","api","models","views","services","utils","tests","test","scripts","notebooks","docs"],description:"Python \u9879\u76EE"},java:{detectFiles:["pom.xml","build.gradle","build.gradle.kts","settings.gradle"],skipDirs:["target","build","out",".gradle","bin",".mvn","gradle"],skipPatterns:[/\.class$/],interestingDirs:["src","main","java","kotlin","resources","test","webapp","templates"],description:"Java/Kotlin/Gradle/Maven \u9879\u76EE"},golang:{detectFiles:["go.mod","go.sum"],skipDirs:["vendor","bin"],interestingDirs:["cmd","pkg","internal","api","web","configs","scripts","test","tests","docs"],description:"Go \u9879\u76EE"},rust:{detectFiles:["Cargo.toml","Cargo.lock"],skipDirs:["target"],interestingDirs:["src","benches","examples","tests"],description:"Rust \u9879\u76EE"},cpp:{detectFiles:["CMakeLists.txt","Makefile","meson.build","configure.ac"],skipDirs:["build","cmake-build-debug","cmake-build-release","bin","obj","out",".ccache"],skipPatterns:[/\.o$/,/\.obj$/,/\.a$/,/\.so$/,/\.dll$/,/\.exe$/],interestingDirs:["src","include","lib","tests","test","examples","docs"],description:"C/C++ \u9879\u76EE"},ruby:{detectFiles:["Gemfile","Gemfile.lock","Rakefile",".ruby-version"],skipDirs:["vendor/bundle",".bundle","tmp","log","coverage","node_modules"],interestingDirs:["app","lib","config","db","spec","test","public","views"],description:"Ruby/Rails \u9879\u76EE"},php:{detectFiles:["composer.json","composer.lock","artisan"],skipDirs:["vendor","node_modules","storage/framework","bootstrap/cache"],interestingDirs:["app","src","config","database","resources","routes","tests","public"],description:"PHP/Laravel/Composer \u9879\u76EE"},dotnet:{detectFiles:["*.csproj","*.fsproj","*.sln","packages.config"],skipDirs:["bin","obj","packages",".nuget","TestResults"],skipPatterns:[/\.dll$/,/\.exe$/,/\.pdb$/],interestingDirs:["src","lib","tests","Controllers","Models","Views","Services","Data"],description:".NET/C#/F# \u9879\u76EE"},swift:{detectFiles:["Package.swift","*.xcodeproj","*.xcworkspace","Podfile"],skipDirs:["Pods","DerivedData","build",".build","Carthage","xcuserdata"],interestingDirs:["Sources","Tests","Resources","Assets"],description:"Swift/iOS/macOS \u9879\u76EE"},flutter:{detectFiles:["pubspec.yaml","pubspec.lock"],skipDirs:[".dart_tool","build",".pub-cache","android/build","ios/Pods","web/build"],interestingDirs:["lib","test","assets","android","ios","web","macos","linux","windows"],description:"Flutter/Dart \u9879\u76EE"},elixir:{detectFiles:["mix.exs","mix.lock"],skipDirs:["_build","deps",".elixir_ls","cover"],interestingDirs:["lib","test","config","priv","assets"],description:"Elixir/Phoenix \u9879\u76EE"}},Z0=new Set(["src","lib","app","core","api","test","tests","docs","doc","examples","scripts","config","configs"]);async function e_(r){let e={types:[],skipDirs:new Set(X0),skipPatterns:[],interestingDirs:new Set(Z0),descriptions:[]};try{let t=await
|
|
1163
|
+
- "arr[0] + arr[1]" - Perform calculations`,parameters:{type:"object",properties:{sessionId:{type:"string",description:"The debug session ID"},expression:{type:"string",description:'The expression to evaluate (e.g., "user.name", "count > 10")'},frameId:{type:"number",description:"Optional stack frame ID to evaluate in (default: current frame)"}},required:["sessionId","expression"]},function:async r=>{let{sessionId:e,expression:t,frameId:n}=r,s=Zt();try{let o=await s.debugEvaluate(e,t,n);return JSON.stringify({success:!0,result:o.value,type:o.type},null,2)}catch(o){return JSON.stringify({success:false,error:o.message||"Failed to evaluate expression"},null,2)}}},op=[O0,B0,F0,U0,G0,j0,W0,H0,z0,q0,K0,J0,V0],xy=["editor"];function Nl(){return op.map(r=>({...r,capabilities:r.capabilities?Array.from(new Set([...r.capabilities,...xy])):xy}))}$l();re();var Sy="main";function ip(r){Sy=r;}var ap=false;function Xr(){ap=true,p.info("GUARDED_WRITE","Write lock enabled");}function ks(){ap=false,p.info("GUARDED_WRITE","Write lock disabled");}function ky(r,e){let t=r.function;return {...r,function:async(n,s)=>{if(!ap)return t(n,s);let o=n.file_path||n.path||n.filePath;if(!o)return t(n,s);let i=Ll(),a=e??Sy;p.debug("GUARDED_WRITE",`Acquiring lock for ${o}`,{agentId:a});let l=await i.acquire(o,a);if(!l.success)return p.warn("GUARDED_WRITE",`Failed to acquire lock for ${o}`,{agentId:a,heldBy:l.heldBy,waitTime:l.waitTime}),JSON.stringify({tool:r.name,status:"error",message:`Write lock timeout: file ${o} is being written by another agent`,details:{file_path:o,held_by:l.heldBy,wait_time_ms:l.waitTime}});try{return await t(n,s)}finally{i.release(o,a),p.debug("GUARDED_WRITE",`Released lock for ${o}`,{agentId:a});}}}}function _y(r){return ky(r)}function Iy(r,e){return ky(r,e)}function Xs(r,e){let t=new Set(["write_file","edit_file","delete_file","rename_file","move_file"]);return r.map(n=>t.has(n.name)?e?Iy(n,e):_y(n):n)}var X0=new Set([".git",".svn",".hg",".idea",".vscode",".vs",".fleet",".DS_Store","__MACOSX","Thumbs.db"]),Q0={nodejs:{detectFiles:["package.json","package-lock.json","yarn.lock","pnpm-lock.yaml"],skipDirs:["node_modules","dist","build","out",".next",".nuxt",".output",".cache",".parcel-cache",".turbo","coverage",".nyc_output","storybook-static"],skipPatterns:[/\.min\.js$/,/\.bundle\.js$/,/\.chunk\.js$/],interestingDirs:["src","lib","app","pages","components","hooks","utils","services","api","types","styles","public","assets","test","tests","__tests__","spec"],description:"Node.js/JavaScript/TypeScript \u9879\u76EE"},python:{detectFiles:["setup.py","pyproject.toml","requirements.txt","Pipfile","poetry.lock"],skipDirs:["__pycache__",".pytest_cache",".mypy_cache",".tox",".nox","venv",".venv","env",".env","virtualenv",".eggs","*.egg-info","dist","build",".ipynb_checkpoints","htmlcov"],skipPatterns:[/\.pyc$/,/\.pyo$/],interestingDirs:["src","lib","app","apps","core","api","models","views","services","utils","tests","test","scripts","notebooks","docs"],description:"Python \u9879\u76EE"},java:{detectFiles:["pom.xml","build.gradle","build.gradle.kts","settings.gradle"],skipDirs:["target","build","out",".gradle","bin",".mvn","gradle"],skipPatterns:[/\.class$/],interestingDirs:["src","main","java","kotlin","resources","test","webapp","templates"],description:"Java/Kotlin/Gradle/Maven \u9879\u76EE"},golang:{detectFiles:["go.mod","go.sum"],skipDirs:["vendor","bin"],interestingDirs:["cmd","pkg","internal","api","web","configs","scripts","test","tests","docs"],description:"Go \u9879\u76EE"},rust:{detectFiles:["Cargo.toml","Cargo.lock"],skipDirs:["target"],interestingDirs:["src","benches","examples","tests"],description:"Rust \u9879\u76EE"},cpp:{detectFiles:["CMakeLists.txt","Makefile","meson.build","configure.ac"],skipDirs:["build","cmake-build-debug","cmake-build-release","bin","obj","out",".ccache"],skipPatterns:[/\.o$/,/\.obj$/,/\.a$/,/\.so$/,/\.dll$/,/\.exe$/],interestingDirs:["src","include","lib","tests","test","examples","docs"],description:"C/C++ \u9879\u76EE"},ruby:{detectFiles:["Gemfile","Gemfile.lock","Rakefile",".ruby-version"],skipDirs:["vendor/bundle",".bundle","tmp","log","coverage","node_modules"],interestingDirs:["app","lib","config","db","spec","test","public","views"],description:"Ruby/Rails \u9879\u76EE"},php:{detectFiles:["composer.json","composer.lock","artisan"],skipDirs:["vendor","node_modules","storage/framework","bootstrap/cache"],interestingDirs:["app","src","config","database","resources","routes","tests","public"],description:"PHP/Laravel/Composer \u9879\u76EE"},dotnet:{detectFiles:["*.csproj","*.fsproj","*.sln","packages.config"],skipDirs:["bin","obj","packages",".nuget","TestResults"],skipPatterns:[/\.dll$/,/\.exe$/,/\.pdb$/],interestingDirs:["src","lib","tests","Controllers","Models","Views","Services","Data"],description:".NET/C#/F# \u9879\u76EE"},swift:{detectFiles:["Package.swift","*.xcodeproj","*.xcworkspace","Podfile"],skipDirs:["Pods","DerivedData","build",".build","Carthage","xcuserdata"],interestingDirs:["Sources","Tests","Resources","Assets"],description:"Swift/iOS/macOS \u9879\u76EE"},flutter:{detectFiles:["pubspec.yaml","pubspec.lock"],skipDirs:[".dart_tool","build",".pub-cache","android/build","ios/Pods","web/build"],interestingDirs:["lib","test","assets","android","ios","web","macos","linux","windows"],description:"Flutter/Dart \u9879\u76EE"},elixir:{detectFiles:["mix.exs","mix.lock"],skipDirs:["_build","deps",".elixir_ls","cover"],interestingDirs:["lib","test","config","priv","assets"],description:"Elixir/Phoenix \u9879\u76EE"}},Z0=new Set(["src","lib","app","core","api","test","tests","docs","doc","examples","scripts","config","configs"]);async function e_(r){let e={types:[],skipDirs:new Set(X0),skipPatterns:[],interestingDirs:new Set(Z0),descriptions:[]};try{let t=await Ee__default.readdir(r),n=new Set(t);for(let[s,o]of Object.entries(Q0))o.detectFiles.some(a=>{if(a.includes("*")){let l=a.replace("*","");return t.some(c=>c.endsWith(l)||c.startsWith(l.replace(".","")))}return n.has(a)})&&(e.types.push(s),e.descriptions.push(o.description),o.skipDirs.forEach(a=>e.skipDirs.add(a)),o.skipPatterns&&e.skipPatterns.push(...o.skipPatterns),o.interestingDirs.forEach(a=>e.interestingDirs.add(a)));}catch{}return e}function lp(r,e){if(e.skipDirs.has(r))return true;for(let t of e.skipDirs)if(t.includes("*")){let n=t.replace("*","");if(r.endsWith(n)||r.startsWith(n.replace(".","")))return true}return false}function t_(r,e){return e.interestingDirs.has(r)}async function Ey(r,e,t){let{maxDepth:n,currentDepth:s,shallow:o,expandInteresting:i}=t;if(s>n)return [];try{let a=await Ee__default.readdir(r,{withFileTypes:!0}),l=[],c=a.filter(d=>d.isDirectory()&&!d.name.startsWith(".")),u=a.filter(d=>d.isFile()&&!d.name.startsWith("."));for(let d of c){let m=ge__default.join(r,d.name);if(lp(d.name,e)){let g=0;try{g=(await Ee__default.readdir(m)).length;}catch{}l.push({name:d.name,path:m,isDirectory:!0,skipped:!0,skipReason:n_(d.name,e),itemCount:g});}else {let g=t_(d.name,e),f=(o?!1:i&&g||s<n)?await Ey(m,e,{maxDepth:n,currentDepth:s+1,shallow:o,expandInteresting:i}):void 0;l.push({name:d.name,path:m,isDirectory:!0,isInteresting:g,children:f});}}if(!o||s===0)for(let d of u){let m=ge__default.join(r,d.name),g=!1;for(let h of e.skipPatterns)if(h.test(d.name)){g=!0;break}if(!g)try{let h=await Ee__default.stat(m);l.push({name:d.name,path:m,isDirectory:!1,size:h.size});}catch{l.push({name:d.name,path:m,isDirectory:!1});}}return l}catch{return []}}function n_(r,e){return ["node_modules","vendor","Pods","deps",".dart_tool","packages"].includes(r)?"dependencies":["dist","build","out","target",".next",".nuxt","bin","obj"].includes(r)?"build output":r.includes("cache")||r.startsWith(".")&&r.includes("_")?"cache":["coverage","htmlcov",".nyc_output"].includes(r)?"coverage":["venv",".venv","env","virtualenv"].includes(r)?"virtual env":"auto-skipped"}function s_(r){return r<1024?`${r}B`:r<1024*1024?`${(r/1024).toFixed(1)}KB`:`${(r/(1024*1024)).toFixed(1)}MB`}function cp(r,e=""){let t=[];for(let n=0;n<r.length;n++){let s=r[n],o=n===r.length-1,i=o?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",a=o?" ":"\u2502 ";if(s.isDirectory)if(s.skipped){let l=s.itemCount!==void 0?` (${s.itemCount} items)`:"";t.push(`${e}${i}[~] ${s.name}/ [>>] ${s.skipReason}${l}`);}else s.isInteresting?(t.push(`${e}${i}[+] ${s.name}/ [*]`),s.children&&s.children.length>0&&t.push(...cp(s.children,e+a))):(t.push(`${e}${i}[~] ${s.name}/`),s.children&&s.children.length>0&&t.push(...cp(s.children,e+a)));else {let l=s.size!==void 0?` (${s_(s.size)})`:"";t.push(`${e}${i}[] ${s.name}${l}`);}}return t}async function r_(r,e,t){try{let n=await Ee__default.readdir(r,{withFileTypes:!0}),s=[],o=[];for(let c of n)c.name.startsWith(".")||(c.isDirectory()?lp(c.name,t)||s.push(c.name):o_(c.name)&&o.push(c.name));let i=[],a=s.find(c=>["src","lib","app","core","packages"].includes(c));if(a){let c=ge__default.join(r,a);try{let u=await Ee__default.readdir(c,{withFileTypes:!0});for(let d of u)d.isDirectory()&&!d.name.startsWith(".")&&!lp(d.name,t)&&i.push(d.name);}catch{}}let l=[];return l.push(`\u{1F4C1} Path: ${e}`),l.push(""),t.descriptions.length>0&&l.push(`\u{1F4E6} Project Type: ${t.descriptions.join(", ")}`),s.length>0&&l.push(`\u{1F4C2} Root Directories: ${s.sort().join(", ")}`),i.length>0&&l.push(`\u{1F527} Modules: ${i.sort().join(", ")}`),o.length>0&&l.push(`\u2699\uFE0F Config Files: ${o.slice(0,5).join(", ")}`),l.push(""),l.push('\u{1F4A1} Tip: Use search(pattern="keyword", path="src/", recursive=true) to locate code'),l.join(`
|
|
1164
1164
|
`)}catch(n){return JSON.stringify({error:n.message})}}function o_(r){return new Set(["package.json","tsconfig.json","pom.xml","build.gradle","Cargo.toml","go.mod","requirements.txt","pyproject.toml","Makefile","Dockerfile","docker-compose.yml",".env.example","README.md"]).has(r)}var Qr={maxLines:500,maxChars:15e3,truncationMessage:`
|
|
1165
1165
|
... [\u8F93\u51FA\u5DF2\u622A\u65AD\uFF0C\u4F7F\u7528\u66F4\u5177\u4F53\u7684 directory \u53C2\u6570\u67E5\u770B\u5B50\u76EE\u5F55]`};function i_(r){let e=0,t=[];for(let n=0;n<r.length&&n<Qr.maxLines;n++){let s=r[n];if(e+s.length>Qr.maxChars){t.push(Qr.truncationMessage);break}t.push(s),e+=s.length+1;}return r.length>Qr.maxLines&&!t.includes(Qr.truncationMessage)&&t.push(Qr.truncationMessage),t}var a_="NEOX_WORKDIR";function Ay(){let r=process.env[a_];return r&&r.trim()?ge__default.resolve(r):process.cwd()}function l_(r){let e=Ay();return !r||r.trim()===""||r.trim()==="."?e:ge__default.isAbsolute(r)?ge__default.resolve(r):ge__default.resolve(e,r)}function c_(r){let e=Ay(),t=ge__default.relative(e,r);return t&&!t.startsWith("..")&&!ge__default.isAbsolute(t)?t:r}var My={name:"smart_tree",description:`\u667A\u80FD\u76EE\u5F55\u626B\u63CF\u5DE5\u5177 - \u81EA\u52A8\u8BC6\u522B\u9879\u76EE\u7C7B\u578B\u5E76\u4F18\u5316\u663E\u793A\u3002
|
|
1166
1166
|
|
|
@@ -1179,7 +1179,7 @@ Examples:
|
|
|
1179
1179
|
- deep: \u5B8C\u5168\u5C55\u5F00\u6240\u6709\u76EE\u5F55
|
|
1180
1180
|
|
|
1181
1181
|
\u793A\u4F8B:
|
|
1182
|
-
{"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:r=".",mode:e="structure",max_depth:t}){try{let n=l_(r),s=c_(n);if(!(await
|
|
1182
|
+
{"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:r=".",mode:e="structure",max_depth:t}){try{let n=l_(r),s=c_(n);if(!(await Ee__default.stat(n)).isDirectory())return `[x] \u4E0D\u662F\u76EE\u5F55: ${s}`;let i=await e_(n);if(e==="structure")return await r_(n,s,i);let a=e==="shallow",l=t??(a?1:e==="deep"?5:3),u=await Ey(n,i,{maxDepth:l,currentDepth:0,shallow:a,expandInteresting:e!=="shallow"}),d=[];d.push(`[~] ${s}/`),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(...cp(u));let m=Py(u),g=Ry(u);return d.push(""),d.push("\u2500".repeat(50)),d.push(`\u7EDF\u8BA1: ${g} \u4E2A\u91CD\u70B9\u76EE\u5F55 | ${m} \u4E2A\u5DF2\u8DF3\u8FC7\u76EE\u5F55`),a&&(d.push(""),d.push('\u{1F4A1} \u63D0\u793A: \u4F7F\u7528 mode="normal" \u6DF1\u5165\u63A2\u7D22\u611F\u5174\u8DA3\u7684\u76EE\u5F55')),i_(d).join(`
|
|
1183
1183
|
`)}catch(n){return n.code==="ENOENT"?`[x] \u76EE\u5F55\u4E0D\u5B58\u5728: ${r}`:`[x] \u626B\u63CF\u5931\u8D25: ${n.message}`}}};function Py(r){let e=0;for(let t of r)t.skipped&&e++,t.children&&(e+=Py(t.children));return e}function Ry(r){let e=0;for(let t of r)t.isInteresting&&e++,t.children&&(e+=Ry(t.children));return e}function p_(){return ge__default.join(Cr__default.homedir(),".neox")}var Zs=p_(),dn=ge__default.join(Zs,"config.json"),ts=ge__default.join(Zs,"sounds");function Ny(r){let e=r,t=false;if(typeof e.supervisor<"u"&&(e={...e},delete e.supervisor,t=true),e.collab?.supervisorAgent){e===r&&(e={...e});let n={...e.collab};delete n.supervisorAgent,Object.keys(n).length===0?delete e.collab:e.collab={...n,workerPool:n.workerPool??[]},t=true;}return {config:e,changed:t}}function We(){try{let r=Ze__default.readFileSync(dn,"utf-8"),e=JSON.parse(r),{config:t,changed:n}=Ny(e);if(n)try{Pe(t);}catch{}return t}catch{return {}}}function Pe(r){try{let{config:e}=Ny(r);Ze__default.existsSync(Zs)||Ze__default.mkdirSync(Zs,{recursive:!0}),Ze__default.writeFileSync(dn,JSON.stringify(e,null,2),"utf-8");}catch(e){let t=e;throw t.code==="EACCES"||t.code==="EPERM"?(console.error(`
|
|
1184
1184
|
\u274C Permission denied: Cannot write to config file`),console.error(` Location: ${dn}`),console.error(`
|
|
1185
1185
|
Please check directory permissions or try:`),console.error(` sudo chown -R $USER "${Zs}"
|
|
@@ -1265,13 +1265,13 @@ URL: ${r}`:s.message?.includes("ECONNREFUSED")?`\u2717 \u83B7\u53D6\u5931\u8D25:
|
|
|
1265
1265
|
URL: ${r}`:`\u2717 \u83B7\u53D6\u5931\u8D25: ${s.message||"\u672A\u77E5\u9519\u8BEF"}
|
|
1266
1266
|
URL: ${r}`}}};re();function By(r){return {...kl,async function(e){try{p.debug("BROWSER","Starting browser debug",{url:e.url});let t=await Rl(e,r,(s,o)=>{p.debug("BROWSER",`Status: ${s}`,o);});p.debug("BROWSER","Browser debug completed",{success:t.success});let n={success:t.success,url:t.url,summary:t.summary,stats:{console_logs:t.console_logs?.length||0,errors:t.errors?.length||0,network_requests:t.network_requests?.length||0,load_time_ms:t.load_time},console_logs:t.console_logs?.slice(0,10).map(s=>({type:s.type,message:s.message})),errors:t.errors?.slice(0,5).map(s=>({type:s.type,message:s.message,file:s.file,line:s.line}))};return t.screenshot&&(n.screenshot={format:"base64",data:t.screenshot,note:"\u9875\u9762\u622A\u56FE\uFF08base64 \u7F16\u7801\uFF09"}),JSON.stringify(n,null,2)}catch(t){return p.error("BROWSER","Browser debug failed",{error:t.message}),JSON.stringify({success:false,error:t.message,url:e.url||"",load_time:0,timestamp:Date.now(),summary:`\u9519\u8BEF\uFF1A${t.message}`},null,2)}}}}var Si=class extends EventEmitter{socket=null;sequenceNumber=1;pendingRequests=new Map;buffer="";connected=false;DEFAULT_TIMEOUT=3e4;async connect(e,t,n=1e4){return new Promise((s,o)=>{this.socket=new Fy.Socket;let i=setTimeout(()=>{this.socket?.destroy(),o(new Error(`Connection timeout after ${n}ms`));},n);this.socket.connect(t,e,()=>{clearTimeout(i),this.connected=true,this.emit("connected"),s();}),this.socket.on("data",a=>{this.handleData(a);}),this.socket.on("error",a=>{clearTimeout(i),this.emit("error",a),this.connected||o(a);}),this.socket.on("close",()=>{this.connected=false,this.emit("disconnected"),this.pendingRequests.forEach(({reject:a,timeout:l})=>{clearTimeout(l),a(new Error("Connection closed"));}),this.pendingRequests.clear();});})}disconnect(){this.socket&&(this.socket.end(),this.socket=null),this.connected=false;}isConnected(){return this.connected}async sendRequest(e,t,n=this.DEFAULT_TIMEOUT){if(!this.connected||!this.socket)throw new Error("Not connected to debug server");let s=this.sequenceNumber++,o={seq:s,type:"request",command:e,arguments:t};return new Promise((i,a)=>{let l=setTimeout(()=>{this.pendingRequests.delete(s),a(new Error(`Request timeout: ${e} (${n}ms)`));},n);this.pendingRequests.set(s,{resolve:i,reject:a,timeout:l}),this.send(o);})}send(e){let t=JSON.stringify(e),s=`Content-Length: ${Buffer.byteLength(t,"utf8")}\r
|
|
1267
1267
|
\r
|
|
1268
|
-
`,o=Buffer.concat([Buffer.from(s,"utf8"),Buffer.from(t,"utf8")]);this.socket?.write(o);}handleData(e){for(this.buffer+=e.toString("utf8");;){let t=this.buffer.match(/Content-Length: (\d+)\r\n\r\n/);if(!t)break;let n=parseInt(t[1],10),s=t[0].length,o=t.index+s,i=o+n;if(this.buffer.length<i)break;let a=this.buffer.substring(o,i);this.buffer=this.buffer.substring(i);try{let l=JSON.parse(a);this.handleMessage(l);}catch(l){console.error("Failed to parse DAP message:",l);}}}handleMessage(e){if(e.type==="response"){let t=e,n=this.pendingRequests.get(t.request_seq);n&&(clearTimeout(n.timeout),this.pendingRequests.delete(t.request_seq),t.success?n.resolve(t):n.reject(new Error(t.message||"Request failed")));}else if(e.type==="event"){let t=e;this.emit("event",t),this.emit(`event:${t.event}`,t.body);}}async initialize(e){return await this.sendRequest("initialize",e)}async launch(e){return await this.sendRequest("launch",e)}async attach(e){return await this.sendRequest("attach",e)}async setBreakpoints(e){return await this.sendRequest("setBreakpoints",e)}async configurationDone(){return await this.sendRequest("configurationDone")}async continue(e){return await this.sendRequest("continue",e)}async next(e){return await this.sendRequest("next",e)}async stepIn(e){return await this.sendRequest("stepIn",e)}async stepOut(e){return await this.sendRequest("stepOut",e)}async pause(e){return await this.sendRequest("pause",{threadId:e})}async stackTrace(e){return await this.sendRequest("stackTrace",e)}async scopes(e){return await this.sendRequest("scopes",e)}async variables(e){return await this.sendRequest("variables",e)}async evaluate(e){return await this.sendRequest("evaluate",e)}async threads(){return await this.sendRequest("threads")}async exceptionInfo(e){return await this.sendRequest("exceptionInfo",e)}async disconnectRequest(e={}){return await this.sendRequest("disconnect",e)}async restart(){return await this.sendRequest("restart")}async terminate(){return await this.sendRequest("terminate")}};var Bl=class extends EventEmitter{process=null;port=0;isRunning=false;config;constructor(e){super(),this.config=e;}async start(){if(this.isRunning)throw new Error("Java Debug Server is already running");try{await
|
|
1268
|
+
`,o=Buffer.concat([Buffer.from(s,"utf8"),Buffer.from(t,"utf8")]);this.socket?.write(o);}handleData(e){for(this.buffer+=e.toString("utf8");;){let t=this.buffer.match(/Content-Length: (\d+)\r\n\r\n/);if(!t)break;let n=parseInt(t[1],10),s=t[0].length,o=t.index+s,i=o+n;if(this.buffer.length<i)break;let a=this.buffer.substring(o,i);this.buffer=this.buffer.substring(i);try{let l=JSON.parse(a);this.handleMessage(l);}catch(l){console.error("Failed to parse DAP message:",l);}}}handleMessage(e){if(e.type==="response"){let t=e,n=this.pendingRequests.get(t.request_seq);n&&(clearTimeout(n.timeout),this.pendingRequests.delete(t.request_seq),t.success?n.resolve(t):n.reject(new Error(t.message||"Request failed")));}else if(e.type==="event"){let t=e;this.emit("event",t),this.emit(`event:${t.event}`,t.body);}}async initialize(e){return await this.sendRequest("initialize",e)}async launch(e){return await this.sendRequest("launch",e)}async attach(e){return await this.sendRequest("attach",e)}async setBreakpoints(e){return await this.sendRequest("setBreakpoints",e)}async configurationDone(){return await this.sendRequest("configurationDone")}async continue(e){return await this.sendRequest("continue",e)}async next(e){return await this.sendRequest("next",e)}async stepIn(e){return await this.sendRequest("stepIn",e)}async stepOut(e){return await this.sendRequest("stepOut",e)}async pause(e){return await this.sendRequest("pause",{threadId:e})}async stackTrace(e){return await this.sendRequest("stackTrace",e)}async scopes(e){return await this.sendRequest("scopes",e)}async variables(e){return await this.sendRequest("variables",e)}async evaluate(e){return await this.sendRequest("evaluate",e)}async threads(){return await this.sendRequest("threads")}async exceptionInfo(e){return await this.sendRequest("exceptionInfo",e)}async disconnectRequest(e={}){return await this.sendRequest("disconnect",e)}async restart(){return await this.sendRequest("restart")}async terminate(){return await this.sendRequest("terminate")}};var Bl=class extends EventEmitter{process=null;port=0;isRunning=false;config;constructor(e){super(),this.config=e;}async start(){if(this.isRunning)throw new Error("Java Debug Server is already running");try{await Ee.access(this.config.jarPath);}catch{throw new Error(`Java Debug JAR not found at: ${this.config.jarPath}
|
|
1269
1269
|
Please download it from https://github.com/microsoft/java-debug/releases`)}let e=this.getJavaCommand();return new Promise((t,n)=>{let s=this.config.startupTimeout||1e4,o="",i=setTimeout(()=>{this.isRunning||(this.stop(),n(new Error(`Java Debug Server startup timeout (${s}ms)
|
|
1270
1270
|
Output so far:
|
|
1271
1271
|
${o}`)));},s);this.process=spawn(e,["-jar",this.config.jarPath],{stdio:["pipe","pipe","pipe"]}),this.process.stdout?.on("data",a=>{let l=a.toString();o+=l,this.emit("stdout",l);let c=l.match(/Listening.*?address:\s*(\d+)/i);c&&(this.port=parseInt(c[1],10),this.isRunning=true,clearTimeout(i),this.emit("started",this.port),t(this.port));let u=l.match(/listening.*?port\s*(\d+)/i);u&&(this.port=parseInt(u[1],10),this.isRunning=true,clearTimeout(i),this.emit("started",this.port),t(this.port));}),this.process.stderr?.on("data",a=>{let l=a.toString();o+=l,this.emit("stderr",l),l.toLowerCase().includes("error")&&this.emit("error",new Error(l));}),this.process.on("exit",(a,l)=>{this.isRunning=false,this.emit("exit",{code:a,signal:l}),a!==0&&a!==null&&n(new Error(`Java Debug Server exited with code ${a}
|
|
1272
1272
|
${o}`));}),this.process.on("error",a=>{clearTimeout(i),this.isRunning=false,this.emit("error",a),n(a);});})}stop(){this.process&&(this.process.kill(),this.process=null),this.isRunning=false,this.port=0,this.emit("stopped");}getPort(){return this.port}isServerRunning(){return this.isRunning}getJavaCommand(){return this.config.javaHome?ge.join(this.config.javaHome,"bin","java"):process.env.JAVA_HOME?ge.join(process.env.JAVA_HOME,"bin","java"):"java"}async initialize(){if(!this.process||!this.isRunning)throw new Error("Server is not running");let e={jsonrpc:"2.0",id:1,method:"initialize",params:{processId:process.pid,capabilities:{}}};this.sendLSPMessage(e);let t={jsonrpc:"2.0",method:"initialized",params:{}};this.sendLSPMessage(t);}sendLSPMessage(e){if(!this.process?.stdin)throw new Error("Server stdin is not available");let t=JSON.stringify(e),o=`Content-Length: ${Buffer.byteLength(t,"utf8")}\r
|
|
1273
1273
|
\r
|
|
1274
|
-
`+t;this.process.stdin.write(o);}async startDAPServer(){return new Promise((e,t)=>{let n=setTimeout(()=>{t(new Error("Timeout waiting for DAP server to start"));},5e3),s=i=>{let a=i.match(/DAP.*?port\s*(\d+)/i);if(a){let l=parseInt(a[1],10);clearTimeout(n),this.removeListener("stdout",s),e(l);}};this.on("stdout",s);let o={jsonrpc:"2.0",id:2,method:"vscode.java.startDebugSession",params:{}};this.sendLSPMessage(o);})}};var Fl=class extends EventEmitter{sessions=new Map;config;sessionIdCounter=0;constructor(e){super(),this.config=e,this.config.sessionTimeout&&setInterval(()=>{this.cleanupInactiveSessions();},6e4);}async launch(e){let t=this.generateSessionId();try{let n=new Bl({jarPath:this.config.javaDebugJarPath,javaHome:this.config.javaHome,startupTimeout:this.config.defaultTimeout}),s=await n.start(),o=new Si;await o.connect("localhost",s),await o.initialize({clientID:"neox",clientName:"Neox Java Debugger",adapterID:"java",pathFormat:"path",linesStartAt1:!0,columnsStartAt1:!0}),await o.launch({mainClass:e.mainClass,projectName:e.projectPath.split("/").pop(),classPaths:e.classpath?[e.classpath]:[],args:e.args?.join(" "),vmArgs:e.vmArgs?.join(" "),cwd:e.cwd||e.projectPath,stopOnEntry:e.stopOnEntry}),await o.configurationDone();let i={id:t,status:"running",breakpoints:new Map,createdAt:Date.now(),lastActivity:Date.now()};return this.sessions.set(t,{session:i,client:o,server:n}),this.setupClientListeners(t,o),{sessionId:t,status:"running",message:`Debug session started for ${e.mainClass}`}}catch(n){throw new Error(`Failed to launch debug session: ${n.message}`)}}async attach(e){let t=this.generateSessionId();try{let n=new Si;await n.connect(e.hostName||"localhost",e.port),await n.initialize({clientID:"neox",clientName:"Neox Java Debugger",adapterID:"java",pathFormat:"path",linesStartAt1:!0,columnsStartAt1:!0}),await n.attach({hostName:e.hostName||"localhost",port:e.port,timeout:e.timeout||5e3}),await n.configurationDone();let s={id:t,status:"running",breakpoints:new Map,createdAt:Date.now(),lastActivity:Date.now()};return this.sessions.set(t,{session:s,client:n,server:null}),this.setupClientListeners(t,n),{sessionId:t,status:"running",message:`Attached to Java process on ${e.hostName||"localhost"}:${e.port}`}}catch(n){throw new Error(`Failed to attach to process: ${n.message}`)}}async setBreakpoint(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let s=(await t.client.setBreakpoints({source:{path:e.filePath},breakpoints:[{line:e.line,condition:e.condition,hitCondition:e.hitCondition,logMessage:e.logMessage}]})).body.breakpoints[0];return t.session.breakpoints.has(e.filePath)||t.session.breakpoints.set(e.filePath,[]),t.session.breakpoints.get(e.filePath).push(s),{breakpointId:s.id||-1,verified:s.verified,line:s.line||e.line,message:s.verified?`Breakpoint set at line ${s.line}`:`Breakpoint not verified: ${s.message||"Unknown reason"}`}}catch(n){throw new Error(`Failed to set breakpoint: ${n.message}`)}}async continue(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let n=e.threadId||t.session.currentThreadId||1;return await t.client.continue({threadId:n}),t.session.status="running",await this.waitForStoppedOrTimeout(t,n)}catch(n){throw new Error(`Failed to continue execution: ${n.message}`)}}async stepOver(e){return await this.performStep(e,"stepOver")}async stepInto(e){return await this.performStep(e,"stepInto")}async stepOut(e){return await this.performStep(e,"stepOut")}async getVariables(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let n=t.session.currentThreadId||1,s=e.frameId||t.session.currentFrameId||0,o=await t.client.stackTrace({threadId:n,startFrame:0,levels:1});if(o.body.stackFrames.length===0)throw new Error("No stack frames available");let i=o.body.stackFrames[0],a=await t.client.scopes({frameId:i.id}),l=[];for(let c of a.body.scopes){if(e.filter==="local"&&c.name!=="Local"||e.filter==="arguments"&&c.name!=="Arguments")continue;let u=await t.client.variables({variablesReference:c.variablesReference});l.push(...u.body.variables);}return {variables:l.map(c=>({name:c.name,value:c.value,type:c.type||"unknown",variablesReference:c.variablesReference})),message:`Retrieved ${l.length} variables`}}catch(n){throw new Error(`Failed to get variables: ${n.message}`)}}async getStackTrace(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let n=e.threadId||t.session.currentThreadId||1,s=await t.client.stackTrace({threadId:n,startFrame:0,levels:50});return {stackFrames:s.body.stackFrames.map(o=>({id:o.id,name:o.name,source:{path:o.source?.path||"unknown",line:o.line},presentationHint:o.presentationHint})),totalFrames:s.body.totalFrames||s.body.stackFrames.length,message:`Retrieved ${s.body.stackFrames.length} stack frames`}}catch(n){throw new Error(`Failed to get stack trace: ${n.message}`)}}async evaluate(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let n=e.frameId||t.session.currentFrameId,s=await t.client.evaluate({expression:e.expression,frameId:n,context:e.context||"repl"});return {result:s.body.result,type:s.body.type||"unknown",variablesReference:s.body.variablesReference,message:`Expression evaluated: ${s.body.result}`}}catch(n){throw new Error(`Failed to evaluate expression: ${n.message}`)}}async stop(e){let t=this.getSessionContext(e.sessionId);try{return await t.client.disconnectRequest({terminateDebuggee:e.terminateDebuggee!==!1}),t.server&&t.server.stop(),this.sessions.delete(e.sessionId),{status:"terminated",message:"Debug session stopped"}}catch(n){return this.sessions.delete(e.sessionId),{status:"terminated",message:`Debug session stopped (with error: ${n.message})`}}}getSession(e){return this.sessions.get(e)?.session||null}listSessions(){return Array.from(this.sessions.values()).map(e=>e.session)}generateSessionId(){return `java-debug-${Date.now()}-${++this.sessionIdCounter}`}getSessionContext(e){let t=this.sessions.get(e);if(!t)throw new Error(`Debug session not found: ${e}`);return t}setupClientListeners(e,t){t.on("event",n=>{let s=this.sessions.get(e);if(s){switch(n.event){case "stopped":s.session.status="stopped",s.session.currentThreadId=n.body.threadId,s.session.stoppedReason=n.body.reason,s.session.lastActivity=Date.now();break;case "continued":s.session.status="running",s.session.lastActivity=Date.now();break;case "terminated":s.session.status="terminated",s.session.lastActivity=Date.now();break}this.emit("session:event",{sessionId:e,event:n.event,body:n.body});}});}async waitForStoppedOrTimeout(e,t,n=5e3){return new Promise(s=>{let o=setTimeout(()=>{e.client.off("event:stopped",i),e.client.off("event:terminated",i),s({status:"running",message:"Program is running"});},n),i=a=>{clearTimeout(o),e.client.off("event:stopped",i),e.client.off("event:terminated",i),a.reason?s({status:"stopped",stoppedReason:a.reason,location:a.source?{filePath:a.source.path,line:a.line,column:a.column||0}:void 0,message:`Program stopped: ${a.reason}`}):s({status:"terminated",message:"Program terminated"});};e.client.once("event:stopped",i),e.client.once("event:terminated",i);})}async performStep(e,t){let n=this.getSessionContext(e.sessionId);n.session.lastActivity=Date.now();try{let s=e.threadId||n.session.currentThreadId||1;switch(t){case "stepOver":await n.client.next({threadId:s});break;case "stepInto":await n.client.stepIn({threadId:s});break;case "stepOut":await n.client.stepOut({threadId:s});break}return new Promise((o,i)=>{let a=setTimeout(()=>{i(new Error("Step operation timeout"));},5e3);n.client.once("event:stopped",async l=>{clearTimeout(a);try{let u=(await n.client.stackTrace({threadId:s,startFrame:0,levels:1})).body.stackFrames[0];n.session.currentFrameId=u.id,o({status:"stopped",location:{filePath:u.source?.path||"unknown",line:u.line,method:u.name},message:`Stepped to ${u.name} at line ${u.line}`});}catch(c){i(c);}});})}catch(s){throw new Error(`Failed to perform step: ${s.message}`)}}cleanupInactiveSessions(){if(!this.config.sessionTimeout)return;let e=Date.now();for(let[t,n]of this.sessions.entries())e-n.session.lastActivity>this.config.sessionTimeout&&(console.log(`Cleaning up inactive session: ${t}`),this.stop({sessionId:t}).catch(o=>{console.error(`Failed to stop inactive session ${t}:`,o);}));}};var k_=fileURLToPath(import.meta.url),__=ge.dirname(k_);async function I_(){let r=process,e=[...r.resourcesPath?[ge.join(r.resourcesPath,"java-debug","com.microsoft.java.debug.plugin.jar")]:[],ge.join(process.cwd(),"resources","java-debug","com.microsoft.java.debug.plugin.jar"),ge.join(__,"..","..","..","resources","java-debug","com.microsoft.java.debug.plugin.jar")];for(let t of e)try{return await
|
|
1274
|
+
`+t;this.process.stdin.write(o);}async startDAPServer(){return new Promise((e,t)=>{let n=setTimeout(()=>{t(new Error("Timeout waiting for DAP server to start"));},5e3),s=i=>{let a=i.match(/DAP.*?port\s*(\d+)/i);if(a){let l=parseInt(a[1],10);clearTimeout(n),this.removeListener("stdout",s),e(l);}};this.on("stdout",s);let o={jsonrpc:"2.0",id:2,method:"vscode.java.startDebugSession",params:{}};this.sendLSPMessage(o);})}};var Fl=class extends EventEmitter{sessions=new Map;config;sessionIdCounter=0;constructor(e){super(),this.config=e,this.config.sessionTimeout&&setInterval(()=>{this.cleanupInactiveSessions();},6e4);}async launch(e){let t=this.generateSessionId();try{let n=new Bl({jarPath:this.config.javaDebugJarPath,javaHome:this.config.javaHome,startupTimeout:this.config.defaultTimeout}),s=await n.start(),o=new Si;await o.connect("localhost",s),await o.initialize({clientID:"neox",clientName:"Neox Java Debugger",adapterID:"java",pathFormat:"path",linesStartAt1:!0,columnsStartAt1:!0}),await o.launch({mainClass:e.mainClass,projectName:e.projectPath.split("/").pop(),classPaths:e.classpath?[e.classpath]:[],args:e.args?.join(" "),vmArgs:e.vmArgs?.join(" "),cwd:e.cwd||e.projectPath,stopOnEntry:e.stopOnEntry}),await o.configurationDone();let i={id:t,status:"running",breakpoints:new Map,createdAt:Date.now(),lastActivity:Date.now()};return this.sessions.set(t,{session:i,client:o,server:n}),this.setupClientListeners(t,o),{sessionId:t,status:"running",message:`Debug session started for ${e.mainClass}`}}catch(n){throw new Error(`Failed to launch debug session: ${n.message}`)}}async attach(e){let t=this.generateSessionId();try{let n=new Si;await n.connect(e.hostName||"localhost",e.port),await n.initialize({clientID:"neox",clientName:"Neox Java Debugger",adapterID:"java",pathFormat:"path",linesStartAt1:!0,columnsStartAt1:!0}),await n.attach({hostName:e.hostName||"localhost",port:e.port,timeout:e.timeout||5e3}),await n.configurationDone();let s={id:t,status:"running",breakpoints:new Map,createdAt:Date.now(),lastActivity:Date.now()};return this.sessions.set(t,{session:s,client:n,server:null}),this.setupClientListeners(t,n),{sessionId:t,status:"running",message:`Attached to Java process on ${e.hostName||"localhost"}:${e.port}`}}catch(n){throw new Error(`Failed to attach to process: ${n.message}`)}}async setBreakpoint(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let s=(await t.client.setBreakpoints({source:{path:e.filePath},breakpoints:[{line:e.line,condition:e.condition,hitCondition:e.hitCondition,logMessage:e.logMessage}]})).body.breakpoints[0];return t.session.breakpoints.has(e.filePath)||t.session.breakpoints.set(e.filePath,[]),t.session.breakpoints.get(e.filePath).push(s),{breakpointId:s.id||-1,verified:s.verified,line:s.line||e.line,message:s.verified?`Breakpoint set at line ${s.line}`:`Breakpoint not verified: ${s.message||"Unknown reason"}`}}catch(n){throw new Error(`Failed to set breakpoint: ${n.message}`)}}async continue(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let n=e.threadId||t.session.currentThreadId||1;return await t.client.continue({threadId:n}),t.session.status="running",await this.waitForStoppedOrTimeout(t,n)}catch(n){throw new Error(`Failed to continue execution: ${n.message}`)}}async stepOver(e){return await this.performStep(e,"stepOver")}async stepInto(e){return await this.performStep(e,"stepInto")}async stepOut(e){return await this.performStep(e,"stepOut")}async getVariables(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let n=t.session.currentThreadId||1,s=e.frameId||t.session.currentFrameId||0,o=await t.client.stackTrace({threadId:n,startFrame:0,levels:1});if(o.body.stackFrames.length===0)throw new Error("No stack frames available");let i=o.body.stackFrames[0],a=await t.client.scopes({frameId:i.id}),l=[];for(let c of a.body.scopes){if(e.filter==="local"&&c.name!=="Local"||e.filter==="arguments"&&c.name!=="Arguments")continue;let u=await t.client.variables({variablesReference:c.variablesReference});l.push(...u.body.variables);}return {variables:l.map(c=>({name:c.name,value:c.value,type:c.type||"unknown",variablesReference:c.variablesReference})),message:`Retrieved ${l.length} variables`}}catch(n){throw new Error(`Failed to get variables: ${n.message}`)}}async getStackTrace(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let n=e.threadId||t.session.currentThreadId||1,s=await t.client.stackTrace({threadId:n,startFrame:0,levels:50});return {stackFrames:s.body.stackFrames.map(o=>({id:o.id,name:o.name,source:{path:o.source?.path||"unknown",line:o.line},presentationHint:o.presentationHint})),totalFrames:s.body.totalFrames||s.body.stackFrames.length,message:`Retrieved ${s.body.stackFrames.length} stack frames`}}catch(n){throw new Error(`Failed to get stack trace: ${n.message}`)}}async evaluate(e){let t=this.getSessionContext(e.sessionId);t.session.lastActivity=Date.now();try{let n=e.frameId||t.session.currentFrameId,s=await t.client.evaluate({expression:e.expression,frameId:n,context:e.context||"repl"});return {result:s.body.result,type:s.body.type||"unknown",variablesReference:s.body.variablesReference,message:`Expression evaluated: ${s.body.result}`}}catch(n){throw new Error(`Failed to evaluate expression: ${n.message}`)}}async stop(e){let t=this.getSessionContext(e.sessionId);try{return await t.client.disconnectRequest({terminateDebuggee:e.terminateDebuggee!==!1}),t.server&&t.server.stop(),this.sessions.delete(e.sessionId),{status:"terminated",message:"Debug session stopped"}}catch(n){return this.sessions.delete(e.sessionId),{status:"terminated",message:`Debug session stopped (with error: ${n.message})`}}}getSession(e){return this.sessions.get(e)?.session||null}listSessions(){return Array.from(this.sessions.values()).map(e=>e.session)}generateSessionId(){return `java-debug-${Date.now()}-${++this.sessionIdCounter}`}getSessionContext(e){let t=this.sessions.get(e);if(!t)throw new Error(`Debug session not found: ${e}`);return t}setupClientListeners(e,t){t.on("event",n=>{let s=this.sessions.get(e);if(s){switch(n.event){case "stopped":s.session.status="stopped",s.session.currentThreadId=n.body.threadId,s.session.stoppedReason=n.body.reason,s.session.lastActivity=Date.now();break;case "continued":s.session.status="running",s.session.lastActivity=Date.now();break;case "terminated":s.session.status="terminated",s.session.lastActivity=Date.now();break}this.emit("session:event",{sessionId:e,event:n.event,body:n.body});}});}async waitForStoppedOrTimeout(e,t,n=5e3){return new Promise(s=>{let o=setTimeout(()=>{e.client.off("event:stopped",i),e.client.off("event:terminated",i),s({status:"running",message:"Program is running"});},n),i=a=>{clearTimeout(o),e.client.off("event:stopped",i),e.client.off("event:terminated",i),a.reason?s({status:"stopped",stoppedReason:a.reason,location:a.source?{filePath:a.source.path,line:a.line,column:a.column||0}:void 0,message:`Program stopped: ${a.reason}`}):s({status:"terminated",message:"Program terminated"});};e.client.once("event:stopped",i),e.client.once("event:terminated",i);})}async performStep(e,t){let n=this.getSessionContext(e.sessionId);n.session.lastActivity=Date.now();try{let s=e.threadId||n.session.currentThreadId||1;switch(t){case "stepOver":await n.client.next({threadId:s});break;case "stepInto":await n.client.stepIn({threadId:s});break;case "stepOut":await n.client.stepOut({threadId:s});break}return new Promise((o,i)=>{let a=setTimeout(()=>{i(new Error("Step operation timeout"));},5e3);n.client.once("event:stopped",async l=>{clearTimeout(a);try{let u=(await n.client.stackTrace({threadId:s,startFrame:0,levels:1})).body.stackFrames[0];n.session.currentFrameId=u.id,o({status:"stopped",location:{filePath:u.source?.path||"unknown",line:u.line,method:u.name},message:`Stepped to ${u.name} at line ${u.line}`});}catch(c){i(c);}});})}catch(s){throw new Error(`Failed to perform step: ${s.message}`)}}cleanupInactiveSessions(){if(!this.config.sessionTimeout)return;let e=Date.now();for(let[t,n]of this.sessions.entries())e-n.session.lastActivity>this.config.sessionTimeout&&(console.log(`Cleaning up inactive session: ${t}`),this.stop({sessionId:t}).catch(o=>{console.error(`Failed to stop inactive session ${t}:`,o);}));}};var k_=fileURLToPath(import.meta.url),__=ge.dirname(k_);async function I_(){let r=process,e=[...r.resourcesPath?[ge.join(r.resourcesPath,"java-debug","com.microsoft.java.debug.plugin.jar")]:[],ge.join(process.cwd(),"resources","java-debug","com.microsoft.java.debug.plugin.jar"),ge.join(__,"..","..","..","resources","java-debug","com.microsoft.java.debug.plugin.jar")];for(let t of e)try{return await Ee.access(t),console.log(`\u2713 \u627E\u5230\u5185\u7F6E Java Debug JAR: ${t}`),t}catch{}return null}async function Gy(r){if(r)try{return await Ee.access(r),console.log(`\u2713 \u4F7F\u7528\u914D\u7F6E\u7684 Java Debug JAR: ${r}`),r}catch{console.warn(`\u26A0\uFE0F \u914D\u7F6E\u7684 JAR \u8DEF\u5F84\u65E0\u6548: ${r}`);}let e=await I_();if(e)return e;throw new Error(`Java Debug JAR \u672A\u627E\u5230\uFF01
|
|
1275
1275
|
\u8BF7\u6267\u884C\u4EE5\u4E0B\u6B65\u9AA4\u4E4B\u4E00\uFF1A
|
|
1276
1276
|
1. \u8FD0\u884C npm run setup-java-debug \u81EA\u52A8\u4E0B\u8F7D
|
|
1277
1277
|
2. \u5728\u914D\u7F6E\u4E2D\u6307\u5B9A JAR \u8DEF\u5F84
|
|
@@ -1440,14 +1440,14 @@ Rules:
|
|
|
1440
1440
|
\u26A0 \u547D\u4EE4\u88AB\u7528\u6237\u4E2D\u65AD
|
|
1441
1441
|
\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(!a)try{i.kill("SIGKILL");}catch{}},2e3);};n&&(n.aborted?m():n.addEventListener("abort",m,{once:true})),i.on("message",g=>{if(!(!g||typeof g!="object")){if(g.type==="background_exit"){typeof g.pid=="number"&&vt.processManager.markCompleted(g.pid,g.exitCode??0);return}g.type==="result"&&d({success:!!g.success,output:String(g.output??""),background:!!g.background,pid:typeof g.pid=="number"?g.pid:void 0,exitCode:typeof g.exitCode=="number"?g.exitCode:void 0});}}),i.on("exit",g=>{a||(Ue.warn("SHELL_WORKER","Worker exited before result",{code:g,command:r}),d(null));}),i.send({type:"execute_shell",payload:{command:r,background:e,workspaceRoot:t}});}):(Ue.warn("SHELL_WORKER","Worker entry not found, fallback to inline execution"),null)}function Vy(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function zt(){let r=process.env[q_];return r&&r.trim()?ge__default.resolve(r):process.cwd()}function Ct(r){let e=zt();if(!r||r.trim()===""||r.trim()===".")return e;let t=r.trim();if(t.startsWith("~/"))return ge__default.resolve(ge__default.join(Cr__default.homedir(),t.slice(2)));let n=ge__default.isAbsolute(t),s=process.platform!=="win32"&&t.startsWith(`Users${ge__default.sep}`);if(n||s){let l=!n&&s?ge__default.join(ge__default.sep,t):t;return ge__default.resolve(l)}t=t.replace(/^[.\\/]+/,"");let o=t.split(/[\\/]+/).filter(Boolean),i=ge__default.basename(e);o.length>0&&o[0]===i&&o.shift();let a=ge__default.join(e,...o);return ge__default.resolve(a)}function at(r){let e=zt(),t=ge__default.relative(e,r);return t&&!t.startsWith("..")&&!ge__default.isAbsolute(t)?t:r}var Yy=12e3,Xy=4e3,Qy=1e6;function ns(r){let e=zt(),t=ge__default.relative(e,r);return t===""?true:!t.startsWith("..")&&!ge__default.isAbsolute(t)}function Hl(r,e){return r.length<=e?{text:r,truncated:false}:{text:r.slice(0,e)+`
|
|
1442
1442
|
... (truncated)`,truncated:true}}async function At(r,e,t,n){let s=Date.now();return new Promise((o,i)=>{let a=spawn(r,e,{cwd:t,env:{...vt.shellEnv.getShellEnv(),TERM:"dumb"},stdio:["ignore","pipe","pipe"],detached:false}),l="",c="",u=false;a.stdout?.on("data",g=>{l+=g.toString();}),a.stderr?.on("data",g=>{c+=g.toString();});let d=null;n?.timeoutMs&&(d=setTimeout(()=>{u=true,a.kill("SIGTERM"),setTimeout(()=>{a.killed||a.kill("SIGKILL");},1e3);},n.timeoutMs));let m=()=>{u=true,a.kill("SIGTERM"),setTimeout(()=>{a.killed||a.kill("SIGKILL");},1e3);};n?.signal&&(n.signal.aborted?m():n.signal.addEventListener("abort",m,{once:true})),a.on("close",g=>{d&&clearTimeout(d),n?.signal&&n.signal.removeEventListener("abort",m),o({stdout:l,stderr:c,exitCode:u?-1:g??0,durationMs:Date.now()-s});}),a.on("error",g=>{d&&clearTimeout(d),n?.signal&&n.signal.removeEventListener("abort",m),o({stdout:l,stderr:c,exitCode:-1,durationMs:Date.now()-s});});})}async function nr(r,e){try{let t=await At("git",["rev-parse","--show-toplevel"],r,{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 nI(r){let e=r.trim().split(/\s+/).filter(Boolean);return {command:e[0]||"",args:e.slice(1)}}var sI={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:r,content:e,mode:t="overwrite"}){if(!r)return JSON.stringify(pe("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(pe("write_file","error","Missing required parameter: content",{error:"content is required",verify_hint:"Please provide the content parameter with the text to write."}));let n=typeof e=="string"?e:String(e);if(n.trim()==="")return JSON.stringify(pe("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 s=Ct(r),o=createHash("sha256").update(n).digest("hex").substring(0,16),i=wp.get(s),a=Date.now();if(i&&i.checksum===o&&i.success&&a-i.timestamp<Y_){let l=n.split(`
|
|
1443
|
-
`).length;return JSON.stringify(pe("write_file","already_done",`File already written with identical content (${l} lines, ${n.length} bytes)`,{file_path:s,checksum:o,verify_hint:`Use "readfile ${r}" to verify the content if needed.`,metadata:{lines:l,bytes:n.length}}))}try{let l=!1;try{await
|
|
1443
|
+
`).length;return JSON.stringify(pe("write_file","already_done",`File already written with identical content (${l} lines, ${n.length} bytes)`,{file_path:s,checksum:o,verify_hint:`Use "readfile ${r}" to verify the content if needed.`,metadata:{lines:l,bytes:n.length}}))}try{let l=!1;try{await Ee__default.access(s),l=!0;}catch{}await Ee__default.mkdir(ge__default.dirname(s),{recursive:!0}),t==="append"?await Ee__default.appendFile(s,n,"utf-8"):await Ee__default.writeFile(s,n,"utf-8"),wp.set(s,{checksum:o,timestamp:a,success:!0});let c=n.split(`
|
|
1444
1444
|
`).length,u=l?"updated":"created";return JSON.stringify(pe("write_file","success",`File ${u}: ${ge__default.basename(s)} (${c} lines, ${n.length} bytes)`,{file_path:s,checksum:o,verify_hint:`Use "readfile ${r}" to verify the content.`,metadata:{action:u,lines:c,bytes:n.length}}))}catch(l){return wp.set(s,{checksum:o,timestamp:a,success:false}),JSON.stringify(pe("write_file","error",`Failed to write file: ${l.message}`,{file_path:s,error:l.message,verify_hint:"Check file permissions and path validity."}))}}};function rI(r){let e=r.includes(`\r
|
|
1445
1445
|
`)?`\r
|
|
1446
1446
|
`:`
|
|
1447
1447
|
`,t=r.endsWith(e),n=r.split(/\r?\n/);return t&&n[n.length-1]===""&&n.pop(),{lines:n,lineEnding:e,hasTrailingNewline:t}}function Zy(r){let e=r.trim(),t="";for(let n of e)switch(n){case "\u2010":case "\u2011":case "\u2012":case "\u2013":case "\u2014":case "\u2015":case "\u2212":t+="-";break;case "\u2018":case "\u2019":case "\u201A":case "\u201B":t+="'";break;case "\u201C":case "\u201D":case "\u201E":case "\u201F":t+='"';break;case "\xA0":case "\u2002":case "\u2003":case "\u2004":case "\u2005":case "\u2006":case "\u2007":case "\u2008":case "\u2009":case "\u200A":case "\u202F":case "\u205F":case "\u3000":t+=" ";break;default:t+=n;break}return t}function Tp(r,e,t){if(e.length===0)return t;if(e.length>r.length)return null;let n=r.length-e.length;for(let s=t;s<=n;s+=1){let o=true;for(let i=0;i<e.length;i+=1)if(r[s+i]!==e[i]){o=false;break}if(o)return s}for(let s=t;s<=n;s+=1){let o=true;for(let i=0;i<e.length;i+=1)if(r[s+i].trimEnd()!==e[i].trimEnd()){o=false;break}if(o)return s}for(let s=t;s<=n;s+=1){let o=true;for(let i=0;i<e.length;i+=1)if(r[s+i].trim()!==e[i].trim()){o=false;break}if(o)return s}for(let s=t;s<=n;s+=1){let o=true;for(let i=0;i<e.length;i+=1)if(Zy(r[s+i])!==Zy(e[i])){o=false;break}if(o)return s}return null}var oI=2e5;function iI(r,e){let t=r.length,n=e.length;if(t*n>oI)return [...r.map(c=>({type:"delete",line:c})),...e.map(c=>({type:"insert",line:c}))];let o=Array.from({length:t+1},()=>new Array(n+1).fill(0));for(let c=t-1;c>=0;c-=1)for(let u=n-1;u>=0;u-=1)o[c][u]=r[c]===e[u]?o[c+1][u+1]+1:Math.max(o[c+1][u],o[c][u+1]);let i=[],a=0,l=0;for(;a<t&&l<n;){if(r[a]===e[l]){i.push({type:"equal",line:r[a]}),a+=1,l+=1;continue}o[a+1][l]>=o[a][l+1]?(i.push({type:"delete",line:r[a]}),a+=1):(i.push({type:"insert",line:e[l]}),l+=1);}for(;a<t;)i.push({type:"delete",line:r[a]}),a+=1;for(;l<n;)i.push({type:"insert",line:e[l]}),l+=1;return i}function aI(r,e){if(r.length===0&&e.length===0)return [];let t=iI(r,e),n=[],s=0,o=0,i=0;for(;i<t.length;){if(t[i].type==="equal"){s+=1,o+=1,i+=1;continue}let a=s,l=[],c=[];for(;i<t.length&&t[i].type!=="equal";){let u=t[i];u.type==="delete"?(l.push(u.line),s+=1):(c.push(u.line),o+=1),i+=1;}n.push({oldStart:a,oldLines:l,newLines:c});}return n}var lI={name:"edit_file",description:`Edit file by replacing a target block with a new block.
|
|
1448
1448
|
Edits apply line-level hunks (only changed lines are replaced).
|
|
1449
1449
|
Matches are robust (exact -> trim_end -> trim -> normalize) to avoid brittle edits.
|
|
1450
|
-
Use change_context to anchor a location and keep old_string minimal.`,parameters:{type:"object",properties:{file_path:{type:"string",description:"Path to the file to edit"},path:{type:"string",description:"Alias of file_path (fallback)"},filePath:{type:"string",description:"Alias of file_path (camelCase fallback)"},file:{type:"string",description:"Alias of file_path (short fallback)"},old_string:{type:"string",description:"Exact string to find and replace (must match exactly, including whitespace)"},old:{type:"string",description:"Alias of old_string (fallback)"},new_string:{type:"string",description:"New string to replace with"},new:{type:"string",description:"Alias of new_string (fallback)"},change_context:{type:"string",description:"Optional anchor (line or block) to locate the edit area (apply_patch-style @@ context)"},changeContext:{type:"string",description:"Alias of change_context (camelCase fallback)"},context:{type:"string",description:"Alias of change_context (fallback)"},replace_all:{type:"boolean",description:"Replace all occurrences (default: false, only first match)"},replaceAll:{type:"boolean",description:"Alias of replace_all (camelCase fallback)"}},required:["file_path","old_string","new_string"]},async function(r){let e=r.file_path||r.path||r.filePath||r.file,t=r.old_string??r.old,n=r.new_string??r.new,s=r.replace_all??r.replaceAll??false,o=r.change_context??r.changeContext??r.context,i=Ct(e);at(i);if(!e)return JSON.stringify(pe("edit_file","error","Missing required parameter: file_path",{error:"file_path (or path) is required"}));if(t==null)return JSON.stringify(pe("edit_file","error","Missing required parameter: old_string",{error:"old_string is required"}));if(n==null)return JSON.stringify(pe("edit_file","error","Missing required parameter: new_string",{error:"new_string is required"}));let l;try{l=await
|
|
1450
|
+
Use change_context to anchor a location and keep old_string minimal.`,parameters:{type:"object",properties:{file_path:{type:"string",description:"Path to the file to edit"},path:{type:"string",description:"Alias of file_path (fallback)"},filePath:{type:"string",description:"Alias of file_path (camelCase fallback)"},file:{type:"string",description:"Alias of file_path (short fallback)"},old_string:{type:"string",description:"Exact string to find and replace (must match exactly, including whitespace)"},old:{type:"string",description:"Alias of old_string (fallback)"},new_string:{type:"string",description:"New string to replace with"},new:{type:"string",description:"Alias of new_string (fallback)"},change_context:{type:"string",description:"Optional anchor (line or block) to locate the edit area (apply_patch-style @@ context)"},changeContext:{type:"string",description:"Alias of change_context (camelCase fallback)"},context:{type:"string",description:"Alias of change_context (fallback)"},replace_all:{type:"boolean",description:"Replace all occurrences (default: false, only first match)"},replaceAll:{type:"boolean",description:"Alias of replace_all (camelCase fallback)"}},required:["file_path","old_string","new_string"]},async function(r){let e=r.file_path||r.path||r.filePath||r.file,t=r.old_string??r.old,n=r.new_string??r.new,s=r.replace_all??r.replaceAll??false,o=r.change_context??r.changeContext??r.context,i=Ct(e);at(i);if(!e)return JSON.stringify(pe("edit_file","error","Missing required parameter: file_path",{error:"file_path (or path) is required"}));if(t==null)return JSON.stringify(pe("edit_file","error","Missing required parameter: old_string",{error:"old_string is required"}));if(n==null)return JSON.stringify(pe("edit_file","error","Missing required parameter: new_string",{error:"new_string is required"}));let l;try{l=await Ee__default.readFile(i,"utf-8");}catch{return JSON.stringify(pe("edit_file","error",`File not found: ${e}`,{file_path:i,error:"File not found",verify_hint:"Use write_file to create a new file, or check the file path."}))}try{let{lines:c,lineEnding:u,hasTrailingNewline:d}=rI(l),m=t.split(/\r?\n/),g=n.split(/\r?\n/);if(m.length===1&&m[0]==="")return JSON.stringify(pe("edit_file","error","old_string cannot be empty",{file_path:i,error:"old_string cannot be empty"}));let h=0;if(o){let A=o.split(/\r?\n/),O=Tp(c,A,0);if(O===null)return JSON.stringify(pe("edit_file","error",`change_context not found in ${ge__default.basename(i)}`,{file_path:i,error:"change_context not found",verify_hint:`Use "readfile ${e}" to verify the context lines.`}));h=O+A.length;}let f=[],b=h;for(;b<=c.length;){let A=Tp(c,m,b),O=m,z=g;if(A===null&&m.length>0&&m[m.length-1]===""){let P=m.slice(0,-1);P.length>0&&(A=Tp(c,P,b),A!==null&&(O=P,z=g[g.length-1]===""?g.slice(0,-1):g));}if(A===null)break;f.push({start:A,oldLines:O,newLines:z}),b=A+O.length;}if(f.length===0)return JSON.stringify(pe("edit_file","error",`Target block not found in ${ge__default.basename(i)}`,{file_path:i,error:"old_string not found",verify_hint:`Use "readfile ${e}" and reduce old_string or provide change_context.`}));let v=s?f:[f[0]],C=c.slice(),T=[];for(let A of v.slice().reverse()){let O=c.slice(A.start,A.start+A.oldLines.length),z=aI(O,A.newLines);if(z.length!==0){for(let P of z)T.push({startLine:A.start+P.oldStart+1,oldLines:P.oldLines,newLines:P.newLines});for(let P of z.slice().reverse())C.splice(A.start+P.oldStart,P.oldLines.length,...P.newLines);}}d&&(C=[...C,""]);let I=C.join(u);if(I===l)return JSON.stringify(pe("edit_file","already_done","No changes needed (content already matches)",{file_path:i,verify_hint:`Use "readfile ${e}" to verify the content if needed.`}));await Ee__default.writeFile(i,I,"utf-8");let M=T.slice().sort((A,O)=>A.startLine-O.startLine),D=M[0],R=D?D.oldLines:[],L=D?D.newLines:[],S=D?D.startLine:1,k=C.length,w=!s&&f.length>1?`Found ${f.length} matches, only replaced the first one. Use replace_all=true to replace all.`:void 0;return JSON.stringify(pe("edit_file","success",`Edited ${ge__default.basename(i)}: ${v.length} replacement(s) at line ${S}`,{file_path:i,verify_hint:`Use "readfile ${e}" to verify the changes.`,metadata:{replacements:v.length,start_line:S,old_lines:R.length,new_lines:L.length,total_lines:k,warning:w,hunks:M.map(A=>({old_string:A.oldLines.join(`
|
|
1451
1451
|
`),new_string:A.newLines.join(`
|
|
1452
1452
|
`),start_line:A.startLine,old_line_count:A.oldLines.length,new_line_count:A.newLines.length})),edit_info:{old_string:R.join(`
|
|
1453
1453
|
`),new_string:L.join(`
|
|
@@ -1466,13 +1466,13 @@ For searching file CONTENTS, use search instead.`,parameters:{type:"object",prop
|
|
|
1466
1466
|
- \u5C1D\u8BD5\u66F4\u5BBD\u6CDB\u7684\u6A21\u5F0F: "**/*${r.replace(/\*\*/g,"").replace(/\*/g,"")}"`;s.sort();let o=[`\u2713 \u627E\u5230 ${s.length} \u4E2A\u6587\u4EF6`];o.push(`\u25B8 \u76EE\u5F55: ${at(n)}`),o.push(`\u25B8 \u6A21\u5F0F: ${r}
|
|
1467
1467
|
`);let i=50;return s.slice(0,i).forEach(l=>{o.push(` ${l}`);}),s.length>i&&o.push(`
|
|
1468
1468
|
... \u8FD8\u6709 ${s.length-i} \u4E2A\u6587\u4EF6`),o.join(`
|
|
1469
|
-
`)}catch(n){return `\u2717 \u641C\u7D22\u5931\u8D25: ${n.message}`}}},uI={name:"list_directory",description:"List contents of a directory",parameters:{type:"object",properties:{directory:{type:"string",description:"Directory path (default: current directory)"},show_hidden:{type:"boolean",description:"Show hidden files"}}},async function({directory:r=".",show_hidden:e=false}){try{let t=Ct(r),n=await
|
|
1469
|
+
`)}catch(n){return `\u2717 \u641C\u7D22\u5931\u8D25: ${n.message}`}}},uI={name:"list_directory",description:"List contents of a directory",parameters:{type:"object",properties:{directory:{type:"string",description:"Directory path (default: current directory)"},show_hidden:{type:"boolean",description:"Show hidden files"}}},async function({directory:r=".",show_hidden:e=false}){try{let t=Ct(r),n=await Ee__default.readdir(t,{withFileTypes:!0}),s=e?n:n.filter(l=>!l.name.startsWith(".")),o=s.filter(l=>l.isDirectory()).map(l=>l.name),i=s.filter(l=>l.isFile()).map(l=>l.name),a=[`\u2713 \u76EE\u5F55: ${at(t)}
|
|
1470
1470
|
`];if(o.length>0&&(a.push("\u5B50\u76EE\u5F55:"),o.forEach(l=>a.push(` - ${l}/`))),i.length>0){a.push(`
|
|
1471
|
-
\u6587\u4EF6:`);for(let l of i){let c=await
|
|
1472
|
-
`)}catch(t){return `\u2717 \u5217\u51FA\u76EE\u5F55\u5931\u8D25: ${t.message}`}}},dI={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:r}){if(!r)return JSON.stringify(pe("create_directory","error","Missing required parameter: directory",{error:"directory path is required",verify_hint:"Please provide the directory path to create."}));let e=Ct(r),t=at(e);try{try{if((await
|
|
1473
|
-
`).filter(c=>c.startsWith("+++ ")||c.startsWith("--- "));for(let c of n){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(pe("apply_patch","error","Patch contains absolute paths",{error:"Absolute paths are not allowed in patch"}));if(d.split(/[\\/]+/).includes(".."))return JSON.stringify(pe("apply_patch","error","Patch contains path traversal",{error:"Path traversal is not allowed in patch"}))}let s=zt(),{repoRoot:o,error:i}=await nr(s);if(!o)return JSON.stringify(pe("apply_patch","error",`Not a git repository: ${i||"unknown error"}`,{error:"Not a git repository"}));let a=await
|
|
1471
|
+
\u6587\u4EF6:`);for(let l of i){let c=await Ee__default.stat(ge__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`;a.push(` - ${l} (${u})`);}}return o.length===0&&i.length===0&&a.push("(\u7A7A\u76EE\u5F55)"),a.join(`
|
|
1472
|
+
`)}catch(t){return `\u2717 \u5217\u51FA\u76EE\u5F55\u5931\u8D25: ${t.message}`}}},dI={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:r}){if(!r)return JSON.stringify(pe("create_directory","error","Missing required parameter: directory",{error:"directory path is required",verify_hint:"Please provide the directory path to create."}));let e=Ct(r),t=at(e);try{try{if((await Ee__default.stat(e)).isDirectory())return JSON.stringify(pe("create_directory","already_done",`Directory already exists: ${t}`,{file_path:e,verify_hint:`Use "list_directory ${r}" to view contents.`}))}catch{}return await Ee__default.mkdir(e,{recursive:!0}),JSON.stringify(pe("create_directory","success",`Directory created: ${t}`,{file_path:e,verify_hint:`Use "list_directory ${r}" to verify.`}))}catch(n){return JSON.stringify(pe("create_directory","error",`Failed to create directory: ${n.message}`,{file_path:e,error:n.message,verify_hint:"Check path validity and permissions."}))}}},pI={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:r,recursive:e=false,force:t=false}){if(!r)return JSON.stringify(pe("delete_file","error","Missing required parameter: path",{error:"path is required"}));let n=Ct(r),s=at(n),o=zt();if(!ns(n))return JSON.stringify(pe("delete_file","error","Path is \u062E\u0627\u0631\u062C workspace\uFF0C\u5DF2\u62D2\u7EDD",{file_path:n,error:"Path is outside workspace",verify_hint:"Use a path within the workspace."}));if(n===o)return JSON.stringify(pe("delete_file","error","Refusing to delete workspace root",{file_path:n,error:"Refusing to delete workspace root"}));try{let i=await Ee__default.lstat(n).catch(()=>null);if(!i)return JSON.stringify(t?pe("delete_file","already_done",`Path already removed: ${s}`,{file_path:n}):pe("delete_file","error",`Path not found: ${s}`,{file_path:n,error:"Path not found"}));if(i.isDirectory()){if(!e)return JSON.stringify(pe("delete_file","error",`Refusing to delete directory without recursive=true: ${s}`,{file_path:n,error:"Directory deletion requires recursive=true"}));await Ee__default.rm(n,{recursive:!0,force:t});}else await Ee__default.rm(n,{force:t});return JSON.stringify(pe("delete_file","success",`Deleted: ${s}`,{file_path:n,verify_hint:`Use "list_directory ${ge__default.dirname(s)}" to verify.`}))}catch(i){return JSON.stringify(pe("delete_file","error",`Failed to delete: ${s}`,{file_path:n,error:i.message}))}}},mI={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:r,destination_path:e,overwrite:t=false,create_dirs:n=true}){if(!r||!e)return JSON.stringify(pe("rename_file","error","Missing required parameters: source_path, destination_path",{error:"source_path and destination_path are required"}));let s=Ct(r),o=Ct(e),i=at(s),a=at(o),l=zt();if(!ns(s)||!ns(o))return JSON.stringify(pe("rename_file","error","Path is outside workspace\uFF0C\u5DF2\u62D2\u7EDD",{file_path:`${s} -> ${o}`,error:"Path is outside workspace"}));if(s===l||o===l)return JSON.stringify(pe("rename_file","error","Refusing to rename workspace root",{file_path:s}));try{await Ee__default.lstat(s);}catch{return JSON.stringify(pe("rename_file","error",`Source not found: ${i}`,{file_path:s,error:"Source not found"}))}let c=await Ee__default.lstat(o).catch(()=>null);if(c&&!t)return JSON.stringify(pe("rename_file","error",`Destination already exists: ${a}`,{file_path:o,error:"Destination already exists"}));try{return c&&t&&await Ee__default.rm(o,{recursive:!0,force:!0}),n&&await Ee__default.mkdir(ge__default.dirname(o),{recursive:!0}),await Ee__default.rename(s,o),JSON.stringify(pe("rename_file","success",`Renamed: ${i} \u2192 ${a}`,{file_path:o,verify_hint:`Use "list_directory ${ge__default.dirname(a)}" to verify.`,metadata:{from:s,to:o}}))}catch(u){return JSON.stringify(pe("rename_file","error",`Failed to rename: ${i}`,{file_path:s,error:u.message}))}}},gI={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:r,strip:e=0,reverse:t=false}){if(!r||typeof r!="string")return JSON.stringify(pe("apply_patch","error","Missing required parameter: patch",{error:"patch is required"}));if(!Number.isInteger(e)||e<0||e>10)return JSON.stringify(pe("apply_patch","error","Invalid strip value (must be an integer between 0 and 10)",{error:"Invalid strip value"}));if(Buffer.byteLength(r,"utf8")>Qy)return JSON.stringify(pe("apply_patch","error",`Patch too large (max ${Qy} bytes)`,{error:"Patch too large"}));let n=r.split(`
|
|
1473
|
+
`).filter(c=>c.startsWith("+++ ")||c.startsWith("--- "));for(let c of n){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(pe("apply_patch","error","Patch contains absolute paths",{error:"Absolute paths are not allowed in patch"}));if(d.split(/[\\/]+/).includes(".."))return JSON.stringify(pe("apply_patch","error","Patch contains path traversal",{error:"Path traversal is not allowed in patch"}))}let s=zt(),{repoRoot:o,error:i}=await nr(s);if(!o)return JSON.stringify(pe("apply_patch","error",`Not a git repository: ${i||"unknown error"}`,{error:"Not a git repository"}));let a=await Ee__default.mkdtemp(ge__default.join(Cr__default.tmpdir(),"neox-patch-")),l=ge__default.join(a,"apply.patch");try{await Ee__default.writeFile(l,r,"utf8");let c=["apply"];e>0&&c.push(`-p${e}`),t&&c.push("--reverse");let u=await At("git",[...c,"--check",l],o);if(u.exitCode!==0){let m=[u.stdout,u.stderr].filter(Boolean).join(`
|
|
1474
1474
|
`).trim();return JSON.stringify(pe("apply_patch","error","Patch check failed",{error:m||"Patch check failed",verify_hint:"Ensure the patch applies cleanly to the current workspace state."}))}let d=await At("git",[...c,"--whitespace=nowarn",l],o);if(d.exitCode!==0){let m=[d.stdout,d.stderr].filter(Boolean).join(`
|
|
1475
|
-
`).trim();return JSON.stringify(pe("apply_patch","error","Patch apply failed",{error:m||"Patch apply failed"}))}return JSON.stringify(pe("apply_patch","success","Patch applied successfully",{verify_hint:"Use git diff or readfile to verify changes."}))}catch(c){return JSON.stringify(pe("apply_patch","error","Patch apply failed",{error:c.message}))}finally{await
|
|
1475
|
+
`).trim();return JSON.stringify(pe("apply_patch","error","Patch apply failed",{error:m||"Patch apply failed"}))}return JSON.stringify(pe("apply_patch","success","Patch applied successfully",{verify_hint:"Use git diff or readfile to verify changes."}))}catch(c){return JSON.stringify(pe("apply_patch","error","Patch apply failed",{error:c.message}))}finally{await Ee__default.rm(a,{recursive:true,force:true}).catch(()=>{});}}},sb=process.env.NEOX_SANDBOX==="on";function sr(){return sb}var hI={name:"execute_shell",description:`Execute shell command with smart background process management.
|
|
1476
1476
|
|
|
1477
1477
|
\u{1F525} CRITICAL - Background Process Behavior:
|
|
1478
1478
|
- background=true: For LONG-RUNNING processes (npm run dev, servers, watch modes)
|
|
@@ -1599,7 +1599,7 @@ ${u.stderr}
|
|
|
1599
1599
|
|
|
1600
1600
|
`:""}
|
|
1601
1601
|
\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`}}},fI={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:r=".",max_depth:e=3}){try{let t=Ct(r),n=[`${at(t)}/
|
|
1602
|
-
`];async function s(o,i="",a=0){if(a>=e)return;let u=(await
|
|
1602
|
+
`];async function s(o,i="",a=0){if(a>=e)return;let u=(await Ee__default.readdir(o,{withFileTypes:!0})).filter(d=>!d.name.startsWith(".")).sort((d,m)=>d.isDirectory()&&!m.isDirectory()?-1:!d.isDirectory()&&m.isDirectory()?1:d.name.localeCompare(m.name));for(let d=0;d<u.length;d++){let m=u[d],g=d===u.length-1,h=g?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",f=g?" ":"\u2502 ";if(m.isDirectory())n.push(`${i}${h}${m.name}/`),await s(ge__default.join(o,m.name),i+f,a+1);else {let b=await Ee__default.stat(ge__default.join(o,m.name)),v=b.size<1024?`${b.size}B`:b.size<1024*1024?`${(b.size/1024).toFixed(1)}KB`:`${(b.size/(1024*1024)).toFixed(1)}MB`;n.push(`${i}${h}${m.name} (${v})`);}}}return await s(t),n.join(`
|
|
1603
1603
|
`)}catch(t){return `\u2717 \u663E\u793A\u76EE\u5F55\u6811\u5931\u8D25: ${t.message}`}}},yI={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:r=".",short:e=true}){let t=Ct(r);if(!ns(t))return JSON.stringify(Be("git_status","error","git status failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:n,error:s}=await nr(t);if(!n)return JSON.stringify(Be("git_status","error",`git status failed: ${s||"not a git repository"}`,void 0,{error:s||"not a git repository"}));let o=["status"];e&&o.push("-sb");let i=await At("git",o,n),a=[i.stdout,i.stderr].filter(Boolean).join(`
|
|
1604
1604
|
`).trim();return i.exitCode!==0?JSON.stringify(Be("git_status","error","git status failed",a||void 0,{error:a||"git status failed"})):JSON.stringify(Be("git_status","success",a?"git status ok":"git status clean",a||"\u2713 clean"))}},bI={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:r=".",staged:e=false,file_path:t}){let n=Ct(r);if(!ns(n))return JSON.stringify(Be("git_diff","error","git diff failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:s,error:o}=await nr(n);if(!s)return JSON.stringify(Be("git_diff","error",`git diff failed: ${o||"not a git repository"}`,void 0,{error:o||"not a git repository"}));let i=["diff"];if(e&&i.push("--staged"),t){let c=Ct(t);if(!ns(c))return JSON.stringify(Be("git_diff","error","git diff failed: path outside workspace",void 0,{error:"path outside workspace"}));let u=ge__default.relative(s,c);if(u.startsWith("..")||ge__default.isAbsolute(u))return JSON.stringify(Be("git_diff","error","git diff failed: file outside repo",void 0,{error:"file outside repo"}));i.push("--",u);}let a=await At("git",i,s),l=[a.stdout,a.stderr].filter(Boolean).join(`
|
|
1605
1605
|
`).trim();return a.exitCode!==0?JSON.stringify(Be("git_diff","error","git diff failed",l||void 0,{error:l||"git diff failed"})):JSON.stringify(Be("git_diff","success",l?"git diff ok":"no diff",l||""))}},vI={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:r,start_line:e,end_line:t}){if(!r)return JSON.stringify(Be("git_blame","error","git blame failed: file_path is required",void 0,{error:"file_path is required"}));let n=Ct(r);if(!ns(n))return JSON.stringify(Be("git_blame","error","git blame failed: path outside workspace",void 0,{error:"path outside workspace"}));let{repoRoot:s,error:o}=await nr(ge__default.dirname(n));if(!s)return JSON.stringify(Be("git_blame","error",`git blame failed: ${o||"not a git repository"}`,void 0,{error:o||"not a git repository"}));let i=e&&t?`${e},${t}`:void 0,a=ge__default.relative(s,n);if(a.startsWith("..")||ge__default.isAbsolute(a))return JSON.stringify(Be("git_blame","error","git blame failed: file outside repo",void 0,{error:"file outside repo"}));let l=["blame","--",a];i&&l.splice(1,0,"-L",i);let c=await At("git",l,s),u=[c.stdout,c.stderr].filter(Boolean).join(`
|
|
@@ -1608,9 +1608,9 @@ ${u.stderr}
|
|
|
1608
1608
|
`).trim();return JSON.stringify(pe("git_branch","error","Failed to create branch",{error:c||"Failed to create branch"}))}if(e){let c=await At("git",["checkout",o],n);if(c.exitCode!==0){let u=[c.stdout,c.stderr].filter(Boolean).join(`
|
|
1609
1609
|
`).trim();return JSON.stringify(pe("git_branch","error","Branch created but checkout failed",{error:u||"Checkout failed"}))}}return JSON.stringify(pe("git_branch","success",e?`Branch created and checked out: ${o}`:`Branch created: ${o}`,{metadata:{branch:o,checkout:e}}))}},wI={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:r,add_all:e=false}){let t=zt(),{repoRoot:n,error:s}=await nr(t);if(!n)return JSON.stringify(pe("git_commit","error",`Not a git repository: ${s||"unknown error"}`,{error:"Not a git repository"}));let o=typeof r=="string"?r.trim():"";if(!o||o.length<3)return JSON.stringify(pe("git_commit","error","Commit message is too short",{error:"Commit message is too short"}));if(e){let a=await At("git",["add","-A"],n);if(a.exitCode!==0){let l=[a.stdout,a.stderr].filter(Boolean).join(`
|
|
1610
1610
|
`).trim();return JSON.stringify(pe("git_commit","error","git add -A failed",{error:l||"git add failed"}))}}let i=await At("git",["commit","-m",o],n);if(i.exitCode!==0){let a=[i.stdout,i.stderr].filter(Boolean).join(`
|
|
1611
|
-
`).trim();return JSON.stringify(pe("git_commit","error","git commit failed",{error:a||"git commit failed"}))}return JSON.stringify(pe("git_commit","success",`Commit created: ${o}`,{metadata:{message:o}}))}};async function TI(r){let e=
|
|
1611
|
+
`).trim();return JSON.stringify(pe("git_commit","error","git commit failed",{error:a||"git commit failed"}))}return JSON.stringify(pe("git_commit","success",`Commit created: ${o}`,{metadata:{message:o}}))}};async function TI(r){let e=Ee__default.stat(ge__default.join(r,"package.json")).then(()=>true).catch(()=>false),t=Ee__default.stat(ge__default.join(r,"pnpm-lock.yaml")).then(()=>true).catch(()=>false),n=Ee__default.stat(ge__default.join(r,"yarn.lock")).then(()=>true).catch(()=>false),s=Ee__default.stat(ge__default.join(r,"bun.lockb")).then(()=>true).catch(()=>false),o=Ee__default.stat(ge__default.join(r,"pyproject.toml")).then(()=>true).catch(()=>false),i=Ee__default.stat(ge__default.join(r,"pytest.ini")).then(()=>true).catch(()=>false),a=Ee__default.stat(ge__default.join(r,"go.mod")).then(()=>true).catch(()=>false),l=Ee__default.stat(ge__default.join(r,"Cargo.toml")).then(()=>true).catch(()=>false),c=Ee__default.stat(ge__default.join(r,"Makefile")).then(()=>true).catch(()=>false);return Promise.all([e,t,n,s,o,i,a,l,c]).then(([u,d,m,g,h,f,b,v,C])=>u?d?"pnpm":m?"yarn":g?"bun":"npm":h||f?"pytest":b?"go":v?"cargo":C?"make":null)}function SI(r,e,t){switch(r){case "npm":case "pnpm":case "yarn":case "bun":return {command:r,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 _p(r,e,t){let n=Ct(t.cwd||".");if(!ns(n))return JSON.stringify(ws(r,"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(ws(r,"error","Invalid extra_args: expected an array of strings",{error:"extra_args must be an array"}));let s=Array.isArray(t.extra_args)?t.extra_args.map(l=>String(l)):[],o=t.preset||await TI(n),i=t.command,a=[];if(i){let l=nI(i);if(!l.command)return JSON.stringify(ws(r,"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(ws(r,"error","Command not allowed",{error:`Allowed commands: ${Array.from(c).join(", ")}`}));let u=l.args.concat(s),d=await At(l.command,u,n,{timeoutMs:t.timeout_ms||3e5}),m=[d.stdout,d.stderr].filter(Boolean).join(`
|
|
1612
1612
|
`),g=Hl(m,Yy),h=d.exitCode===0?`${r} succeeded (${d.durationMs}ms)`:`${r} failed with exit code ${d.exitCode}`;return JSON.stringify(ws(r,d.exitCode===0?"success":"error",h,{error:d.exitCode===0?void 0:Hl(m,Xy).text,metadata:{command:[l.command,...u].join(" "),exit_code:d.exitCode,duration_ms:d.durationMs,output_truncated:g.truncated}}))}if(o){let l=SI(o,e,s);a=l.args;let c=await At(l.command,a,n,{timeoutMs:t.timeout_ms||3e5}),u=[c.stdout,c.stderr].filter(Boolean).join(`
|
|
1613
|
-
`),d=Hl(u,Yy),m=c.exitCode===0?`${r} succeeded (${c.durationMs}ms)`:`${r} failed with exit code ${c.exitCode}`;return JSON.stringify(ws(r,c.exitCode===0?"success":"error",m,{error:c.exitCode===0?void 0:Hl(u,Xy).text,metadata:{command:[l.command,...a].join(" "),exit_code:c.exitCode,duration_ms:c.durationMs,output_truncated:d.truncated}}))}return JSON.stringify(ws(r,"error","Unable to detect project type for command",{error:"No preset detected. Provide preset."}))}var kI={name:"run_tests",description:"Run project tests with a structured command",parameters:{type:"object",properties:{preset:{type:"string",description:"Command preset (npm|pnpm|yarn|bun|pytest|go|cargo|make)"},command:{type:"string",description:"Explicit command (overrides preset)"},extra_args:{type:"array",items:{type:"string"},description:"Additional args for the command"},cwd:{type:"string",description:"Working directory (default: workspace root)"},timeout_ms:{type:"number",description:"Timeout in milliseconds (default: 300000)"}}},permission:{category:"execute",allowInAskMode:false},async function(r){return _p("run_tests","test",r)}},_I={name:"run_lint",description:"Run project lint with a structured command",parameters:{type:"object",properties:{preset:{type:"string",description:"Command preset (npm|pnpm|yarn|bun|pytest|go|cargo|make)"},command:{type:"string",description:"Explicit command (overrides preset)"},extra_args:{type:"array",items:{type:"string"},description:"Additional args for the command"},cwd:{type:"string",description:"Working directory (default: workspace root)"},timeout_ms:{type:"number",description:"Timeout in milliseconds (default: 300000)"}}},permission:{category:"execute",allowInAskMode:false},async function(r){return _p("run_lint","lint",r)}},II={name:"run_format",description:"Run project formatting with a structured command",parameters:{type:"object",properties:{preset:{type:"string",description:"Command preset (npm|pnpm|yarn|bun|pytest|go|cargo|make)"},command:{type:"string",description:"Explicit command (overrides preset)"},extra_args:{type:"array",items:{type:"string"},description:"Additional args for the command"},cwd:{type:"string",description:"Working directory (default: workspace root)"},timeout_ms:{type:"number",description:"Timeout in milliseconds (default: 300000)"}}},permission:{category:"execute",allowInAskMode:false},async function(r){return _p("run_format","format",r)}},EI={name:"analyze_code",description:"Analyze code file structure and statistics",parameters:{type:"object",properties:{file_path:{type:"string",description:"Path to code file"}},required:["file_path"]},async function({file_path:r}){try{let e=Ct(r),n=(await
|
|
1613
|
+
`),d=Hl(u,Yy),m=c.exitCode===0?`${r} succeeded (${c.durationMs}ms)`:`${r} failed with exit code ${c.exitCode}`;return JSON.stringify(ws(r,c.exitCode===0?"success":"error",m,{error:c.exitCode===0?void 0:Hl(u,Xy).text,metadata:{command:[l.command,...a].join(" "),exit_code:c.exitCode,duration_ms:c.durationMs,output_truncated:d.truncated}}))}return JSON.stringify(ws(r,"error","Unable to detect project type for command",{error:"No preset detected. Provide preset."}))}var kI={name:"run_tests",description:"Run project tests with a structured command",parameters:{type:"object",properties:{preset:{type:"string",description:"Command preset (npm|pnpm|yarn|bun|pytest|go|cargo|make)"},command:{type:"string",description:"Explicit command (overrides preset)"},extra_args:{type:"array",items:{type:"string"},description:"Additional args for the command"},cwd:{type:"string",description:"Working directory (default: workspace root)"},timeout_ms:{type:"number",description:"Timeout in milliseconds (default: 300000)"}}},permission:{category:"execute",allowInAskMode:false},async function(r){return _p("run_tests","test",r)}},_I={name:"run_lint",description:"Run project lint with a structured command",parameters:{type:"object",properties:{preset:{type:"string",description:"Command preset (npm|pnpm|yarn|bun|pytest|go|cargo|make)"},command:{type:"string",description:"Explicit command (overrides preset)"},extra_args:{type:"array",items:{type:"string"},description:"Additional args for the command"},cwd:{type:"string",description:"Working directory (default: workspace root)"},timeout_ms:{type:"number",description:"Timeout in milliseconds (default: 300000)"}}},permission:{category:"execute",allowInAskMode:false},async function(r){return _p("run_lint","lint",r)}},II={name:"run_format",description:"Run project formatting with a structured command",parameters:{type:"object",properties:{preset:{type:"string",description:"Command preset (npm|pnpm|yarn|bun|pytest|go|cargo|make)"},command:{type:"string",description:"Explicit command (overrides preset)"},extra_args:{type:"array",items:{type:"string"},description:"Additional args for the command"},cwd:{type:"string",description:"Working directory (default: workspace root)"},timeout_ms:{type:"number",description:"Timeout in milliseconds (default: 300000)"}}},permission:{category:"execute",allowInAskMode:false},async function(r){return _p("run_format","format",r)}},EI={name:"analyze_code",description:"Analyze code file structure and statistics",parameters:{type:"object",properties:{file_path:{type:"string",description:"Path to code file"}},required:["file_path"]},async function({file_path:r}){try{let e=Ct(r),n=(await Ee__default.readFile(e,"utf-8")).split(`
|
|
1614
1614
|
`),s=n.length,o=n.filter(m=>m.trim()&&!m.trim().startsWith("//")).length,i=n.filter(m=>m.trim().startsWith("//")).length,a=s-o-i,l=n.filter(m=>m.trim().startsWith("import ")||m.trim().startsWith("from ")),c=n.filter(m=>m.trim().startsWith("function ")||m.trim().startsWith("async function")),u=n.filter(m=>m.trim().startsWith("class ")),d=[`\u2713 \u4EE3\u7801\u5206\u6790: ${r}
|
|
1615
1615
|
`,"\u7EDF\u8BA1:",` \u603B\u884C\u6570: ${s}`,` \u4EE3\u7801\u884C: ${o}`,` \u6CE8\u91CA\u884C: ${i}`,` \u7A7A\u767D\u884C: ${a}`];return l.length>0&&(d.push(`
|
|
1616
1616
|
\u5BFC\u5165 (${l.length} \u4E2A):`),l.slice(0,5).forEach(m=>d.push(` - ${m.trim()}`)),l.length>5&&d.push(` ... \u8FD8\u6709 ${l.length-5} \u4E2A\u5BFC\u5165`)),u.length>0&&(d.push(`
|
|
@@ -1632,15 +1632,15 @@ search(mode="files", pattern="*.ts") \u2192 \u6587\u4EF6\u540D\u641C\u7D22
|
|
|
1632
1632
|
\u8F93\u51FA\u7279\u70B9:
|
|
1633
1633
|
- \u6BCF\u6761\u7ED3\u679C\u5E26 [\u6A21\u5757] \u524D\u7F00
|
|
1634
1634
|
- \u663E\u793A\u6A21\u5757\u5206\u5E03\u7EDF\u8BA1
|
|
1635
|
-
- \u63D0\u4F9B readfile \u6279\u91CF\u8BFB\u53D6\u63D0\u793A`,parameters:{type:"object",properties:{pattern:{type:"string",description:'\u641C\u7D22\u6A21\u5F0F (\u9ED8\u8BA4\u6B63\u5219)\u3002\u793A\u4F8B: "error", "\u767B\u5F55", "function\\s+\\w+"'},query:{type:"string",description:"pattern \u7684\u522B\u540D"},keywords:{type:"array",items:{type:"string"},description:"\u591A\u5173\u952E\u8BCD OR \u641C\u7D22 (\u5B57\u9762\u91CF\u5339\u914D)"},queries:{type:"array",items:{type:"object",properties:{pattern:{type:"string"},op:{type:"string",enum:["and","or","not"]},regex:{type:"boolean"},case_insensitive:{type:"boolean"}},required:["pattern"]},description:"\u9AD8\u7EA7\u591A\u67E5\u8BE2 (\u652F\u6301 and/or/not)"},op:{type:"string",enum:["and","or","not"],description:"pattern \u7684\u903B\u8F91\u64CD\u4F5C (\u9ED8\u8BA4 or)"},mode:{type:"string",enum:["content","files"],description:"\u641C\u7D22\u6A21\u5F0F: \u5185\u5BB9\u641C\u7D22\u6216\u6587\u4EF6\u540D\u641C\u7D22 (\u9ED8\u8BA4: content)"},path:{type:"string",description:"\u641C\u7D22\u8DEF\u5F84 (\u53EF\u9009\uFF0C\u9ED8\u8BA4: \u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55)"},recursive:{type:"boolean",description:"\u9012\u5F52\u5B50\u76EE\u5F55 (\u53EF\u9009\uFF0C\u76EE\u5F55\u9ED8\u8BA4 true\uFF0C\u6587\u4EF6\u9ED8\u8BA4 false)"},file_pattern:{type:"string",description:'\u6587\u4EF6\u7C7B\u578B\u8FC7\u6EE4 (e.g., "*.ts", "*.{js,jsx,ts,tsx}")'},include_hidden:{type:"boolean",description:"\u5305\u542B\u9690\u85CF\u6587\u4EF6 (\u9ED8\u8BA4: false)"},case_insensitive:{type:"boolean",description:"\u5FFD\u7565\u5927\u5C0F\u5199 (\u9ED8\u8BA4: true)"},context_lines:{type:"number",description:"\u4E0A\u4E0B\u6587\u884C\u6570 (\u9ED8\u8BA4: 2)"},max_matches:{type:"number",description:"\u6700\u5927\u5339\u914D\u6570 (\u9ED8\u8BA4: 200)"},count_only:{type:"boolean",description:"\u4EC5\u8FD4\u56DE\u8BA1\u6570 (\u5FEB\u901F\u4E86\u89E3\u5339\u914D\u5206\u5E03)"}}},async function({pattern:r,query:e,keywords:t,queries:n,op:s,mode:o="content",path:i,recursive:a,file_pattern:l,include_hidden:c=false,case_insensitive:u=true,context_lines:d=2,max_matches:m=200,count_only:g=false},h){try{let f=Date.now();Ue.debug("SEARCH",`>>> searchTool.execute START, pattern=${r||e||t?.join(",")}`);let b=h?.signal,v=()=>{if(b?.aborted){let j=new Error("Operation cancelled");throw j.name="AbortError",j}},C=200,T=async()=>{await new Promise(j=>setImmediate(j));},M=Ct(i||"."),D="workspace",R=zt();if(i&&ge__default.isAbsolute(i))D="absolute";else if(i&&!Ze__default.existsSync(M)){let j=R,te=null;for(;;){let ie=ge__default.resolve(j,i);if(Ze__default.existsSync(ie)){te=ie;break}let
|
|
1635
|
+
- \u63D0\u4F9B readfile \u6279\u91CF\u8BFB\u53D6\u63D0\u793A`,parameters:{type:"object",properties:{pattern:{type:"string",description:'\u641C\u7D22\u6A21\u5F0F (\u9ED8\u8BA4\u6B63\u5219)\u3002\u793A\u4F8B: "error", "\u767B\u5F55", "function\\s+\\w+"'},query:{type:"string",description:"pattern \u7684\u522B\u540D"},keywords:{type:"array",items:{type:"string"},description:"\u591A\u5173\u952E\u8BCD OR \u641C\u7D22 (\u5B57\u9762\u91CF\u5339\u914D)"},queries:{type:"array",items:{type:"object",properties:{pattern:{type:"string"},op:{type:"string",enum:["and","or","not"]},regex:{type:"boolean"},case_insensitive:{type:"boolean"}},required:["pattern"]},description:"\u9AD8\u7EA7\u591A\u67E5\u8BE2 (\u652F\u6301 and/or/not)"},op:{type:"string",enum:["and","or","not"],description:"pattern \u7684\u903B\u8F91\u64CD\u4F5C (\u9ED8\u8BA4 or)"},mode:{type:"string",enum:["content","files"],description:"\u641C\u7D22\u6A21\u5F0F: \u5185\u5BB9\u641C\u7D22\u6216\u6587\u4EF6\u540D\u641C\u7D22 (\u9ED8\u8BA4: content)"},path:{type:"string",description:"\u641C\u7D22\u8DEF\u5F84 (\u53EF\u9009\uFF0C\u9ED8\u8BA4: \u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55)"},recursive:{type:"boolean",description:"\u9012\u5F52\u5B50\u76EE\u5F55 (\u53EF\u9009\uFF0C\u76EE\u5F55\u9ED8\u8BA4 true\uFF0C\u6587\u4EF6\u9ED8\u8BA4 false)"},file_pattern:{type:"string",description:'\u6587\u4EF6\u7C7B\u578B\u8FC7\u6EE4 (e.g., "*.ts", "*.{js,jsx,ts,tsx}")'},include_hidden:{type:"boolean",description:"\u5305\u542B\u9690\u85CF\u6587\u4EF6 (\u9ED8\u8BA4: false)"},case_insensitive:{type:"boolean",description:"\u5FFD\u7565\u5927\u5C0F\u5199 (\u9ED8\u8BA4: true)"},context_lines:{type:"number",description:"\u4E0A\u4E0B\u6587\u884C\u6570 (\u9ED8\u8BA4: 2)"},max_matches:{type:"number",description:"\u6700\u5927\u5339\u914D\u6570 (\u9ED8\u8BA4: 200)"},count_only:{type:"boolean",description:"\u4EC5\u8FD4\u56DE\u8BA1\u6570 (\u5FEB\u901F\u4E86\u89E3\u5339\u914D\u5206\u5E03)"}}},async function({pattern:r,query:e,keywords:t,queries:n,op:s,mode:o="content",path:i,recursive:a,file_pattern:l,include_hidden:c=false,case_insensitive:u=true,context_lines:d=2,max_matches:m=200,count_only:g=false},h){try{let f=Date.now();Ue.debug("SEARCH",`>>> searchTool.execute START, pattern=${r||e||t?.join(",")}`);let b=h?.signal,v=()=>{if(b?.aborted){let j=new Error("Operation cancelled");throw j.name="AbortError",j}},C=200,T=async()=>{await new Promise(j=>setImmediate(j));},M=Ct(i||"."),D="workspace",R=zt();if(i&&ge__default.isAbsolute(i))D="absolute";else if(i&&!Ze__default.existsSync(M)){let j=R,te=null;for(;;){let ie=ge__default.resolve(j,i);if(Ze__default.existsSync(ie)){te=ie;break}let Ae=ge__default.dirname(j);if(Ae===j)break;j=Ae;}te&&(M=te,D="ancestor");}let L=at(M);v();let S;try{S=await Ee__default.stat(M);}catch(j){return JSON.stringify(Be("search","error",`search failed: ${j.message}`,void 0,{error:j.message}))}let k=S.isDirectory(),w=a!==void 0?a:k,A=MI({pattern:r,query:e,keywords:t,queries:n,op:s,case_insensitive:u});if(v(),A.length===0)return JSON.stringify(Be("search","error","search failed: no query provided",void 0,{error:"Provide pattern/keywords/queries"}));let O=A.filter(j=>j.op!=="not"),z=A.filter(j=>j.op==="and"),P=A.filter(j=>j.op==="or"),B=A.filter(j=>j.op==="not");if(O.length===0)return JSON.stringify(Be("search","error","search failed: only NOT queries provided",void 0,{error:"At least one non-NOT query is required"}));let F=A.filter(j=>j.regex).map(j=>{try{return new RegExp(j.pattern),null}catch(te){return `${j.pattern}: ${te.message}`}}).filter(j=>!!j);if(F.length>0)return JSON.stringify(Be("search","error",`search failed: invalid regex (${F[0]})`,void 0,{error:`Invalid regex: ${F.join("; ")}`}));let U=[];P.length>0&&U.push(P.map(j=>j.pattern).join(" OR ")),z.length>0&&U.push(`AND ${z.map(j=>j.pattern).join(" + ")}`),B.length>0&&U.push(`NOT ${B.map(j=>j.pattern).join(" + ")}`);let H=U.join(" ");Ue.debug("SEARCH",`>>> Before isRipgrepAvailable, elapsed=${Date.now()-f}ms`);let se=await AI();Ue.debug("SEARCH",`<<< After isRipgrepAvailable, elapsed=${Date.now()-f}ms`);let G=Math.min(200,Math.max(80,d*4+40));if(Ue.info("SEARCH",`Strategy: ${se?"ripgrep":"fallback"}`),!se)return JSON.stringify(Be("search","error","search failed: ripgrep not available",`Ripgrep is required for search. This is unexpected since ripgrep should be bundled.
|
|
1636
1636
|
Please report this issue.`,{error:"ripgrep not available"}));if(v(),o==="files"){let j=await(async()=>{if(!k)return [at(M)];if(se){let Me=await kp();if(!Me)throw new Error("ripgrep not available (this should not happen)");let K=["--files"];c&&K.push("--hidden"),!w&&k&&K.push("--max-depth","1"),l&&K.push("-g",l),Sp.forEach(et=>K.push("-g",et)),K.push("--",M);let xe=await At(Me,K,zt(),{signal:b});if(xe.exitCode!==0&&xe.exitCode!==1)throw new Error(xe.stderr||"rg files search failed");return xe.stdout.split(`
|
|
1637
|
-
`).filter(Boolean).map(et=>{let Bs=ge__default.isAbsolute(et)?ge__default.resolve(et):ge__default.resolve(zt(),et);return at(Bs)})}let
|
|
1638
|
-
`),{metadata:{mode:"files",strategy:se?"rg":"glob",regex:A.some(
|
|
1639
|
-
Error: ${
|
|
1637
|
+
`).filter(Boolean).map(et=>{let Bs=ge__default.isAbsolute(et)?ge__default.resolve(et):ge__default.resolve(zt(),et);return at(Bs)})}let Ie=l||"**/*",Rt=w?Ie:Ie.replace("**/","");return (await tb(Rt,{cwd:M,absolute:!0,dot:c,onlyFiles:!0,ignore:Sp.map(Me=>Me.replace("!",""))})).map(Me=>at(Me))})();v();let te=A.map(Ie=>{let Rt=Ie.regex?Ie.pattern:Vy(Ie.pattern),Fe=Ie.caseInsensitive?"i":"";return {query:Ie,regex:new RegExp(Rt,Fe)}}),ie=[],Ae=0;for(let Ie of j){v();let Rt=Ie,Fe=te.map(he=>({op:he.query.op,hit:he.regex.test(Rt)})),Me=Fe.some(he=>he.op==="or"&&he.hit),K=Fe.filter(he=>he.op==="and").every(he=>he.hit);!Fe.some(he=>he.op==="not"&&he.hit)&&(z.length===0||K)&&(P.length===0||Me)&&ie.push(Ie),Ae++,Ae%C===0&&await T();}let Ne=[`\u2713 \u6587\u4EF6\u641C\u7D22: ${H}`,`\u25B8 \u8DEF\u5F84: ${L}${w?" (\u9012\u5F52)":""}${D==="ancestor"?" (auto-resolved)":""}`,l?`\u25B8 \u6587\u4EF6\u8FC7\u6EE4: ${l}`:"",c?"\u25B8 \u5305\u542B\u9690\u85CF\u6587\u4EF6":"","",`\u627E\u5230 ${ie.length} \u4E2A\u6587\u4EF6`,""].filter(Ie=>Ie!==""),Le=50;return ie.slice(0,Le).forEach(Ie=>Ne.push(` ${Ie}`)),ie.length>Le&&Ne.push(` ... \u8FD8\u6709 ${ie.length-Le} \u4E2A\u6587\u4EF6`),JSON.stringify(Be("search","success",ie.length>0?`search files "${H}" (${ie.length} files)`:`search files "${H}" (no matches)`,Ne.join(`
|
|
1638
|
+
`),{metadata:{mode:"files",strategy:se?"rg":"glob",regex:A.some(Ie=>Ie.regex),case_insensitive:u,path:L,resolved_from:D,files:ie,queries:A}}))}let W=new Map,ce=new Map,V=0,ve=B.map(j=>{let te=j.regex?j.pattern:Vy(j.pattern),ie=j.caseInsensitive?"i":"";return new RegExp(te,ie)}),Z=[];if(se){let j=await kp();if(!j)throw new Error("ripgrep not available (this should not happen)");for(let te of O){v();let ie=["--json","--with-filename","--line-number","--column","-a"];ie.push("-C",String(d)),te.caseInsensitive&&ie.push("-i"),te.regex||ie.push("-F"),c&&ie.push("--hidden"),!w&&k&&ie.push("--max-depth","1"),l&&ie.push("-g",l),Sp.forEach(Fe=>ie.push("-g",Fe)),ie.push("--",te.pattern,M);let Ae=`${j} ${ie.join(" ")}`;Z.push(Ae);let Ne="",Le=0,Ie="";try{let Fe=await At(j,ie,zt(),{signal:b});Ne=Fe.stdout,Ie=Fe.stderr||"",Le=Fe.exitCode;}catch(Fe){if(Fe?.name==="AbortError"||b?.aborted)throw Fe;Ie=Fe?.message||Fe?.stderr||String(Fe),Le=Fe?.exitCode||2;}if(Le!==0&&Le!==1){let Fe=Ie?`
|
|
1639
|
+
Error: ${Ie}`:"",Me=`
|
|
1640
1640
|
Command: ${j} ${ie.join(" ")}`;throw new Error(`ripgrep failed (exit code ${Le})${Fe}${Me}`)}let Rt=0;for(let Fe of Ne.split(`
|
|
1641
|
-
`)){if(v(),Rt++,Rt%C===0&&await T(),!Fe.trim())continue;let Me;try{Me=JSON.parse(Fe);}catch{continue}if(Me.type==="summary"){let gr=Me.data?.stats;gr&&typeof gr.searches=="number"&&(V=Math.max(V,gr.searches));continue}let K=Me.type==="match",xe=Me.type==="context";if(!K&&!xe)continue;let he=Me.data,et=he?.path?.text,Bs=he?.line_number,ma=he?.lines?.text,ga=Array.isArray(he?.submatches)?he.submatches[0]:void 0;if(!et||!Bs||typeof ma!="string")continue;let _o=ma.replace(/\n$/,""),Io=W.get(et)||new Map,Eo=Io.get(Bs)||{line:_o,queryIds:new Set};if(Eo.line=_o,K){Eo.queryIds.add(te.id),Eo.column===void 0&&ga?.start!==void 0&&(Eo.column=ga.start+1);let gr=ce.get(et)||new Set;gr.add(te.id),ce.set(et,gr);}Io.set(Bs,Eo),W.set(et,Io);}}}let X=new Set(z.map(j=>j.id)),Y=[],J=0,Q=0,ee=0,de=[],N=[],q=0;for(let[j,te]of W.entries()){if(v(),J>=m&&!g)break;q++,q%C===0&&await T();let ie=ce.get(j)||new Set,
|
|
1642
|
-
... \u8FD8\u6709\u66F4\u591A\u5339\u914D (\u5DF2\u8FBE ${m} \u4E0A\u9650)`);break}let
|
|
1643
|
-
\u25B8 [${Ne}] ${
|
|
1641
|
+
`)){if(v(),Rt++,Rt%C===0&&await T(),!Fe.trim())continue;let Me;try{Me=JSON.parse(Fe);}catch{continue}if(Me.type==="summary"){let gr=Me.data?.stats;gr&&typeof gr.searches=="number"&&(V=Math.max(V,gr.searches));continue}let K=Me.type==="match",xe=Me.type==="context";if(!K&&!xe)continue;let he=Me.data,et=he?.path?.text,Bs=he?.line_number,ma=he?.lines?.text,ga=Array.isArray(he?.submatches)?he.submatches[0]:void 0;if(!et||!Bs||typeof ma!="string")continue;let _o=ma.replace(/\n$/,""),Io=W.get(et)||new Map,Eo=Io.get(Bs)||{line:_o,queryIds:new Set};if(Eo.line=_o,K){Eo.queryIds.add(te.id),Eo.column===void 0&&ga?.start!==void 0&&(Eo.column=ga.start+1);let gr=ce.get(et)||new Set;gr.add(te.id),ce.set(et,gr);}Io.set(Bs,Eo),W.set(et,Io);}}}let X=new Set(z.map(j=>j.id)),Y=[],J=0,Q=0,ee=0,de=[],N=[],q=0;for(let[j,te]of W.entries()){if(v(),J>=m&&!g)break;q++,q%C===0&&await T();let ie=ce.get(j)||new Set,Ae=!0;if(X.forEach(Me=>{ie.has(Me)||(Ae=!1);}),!Ae)continue;let Le=Array.from(te.keys()).sort((Me,K)=>Me-K).filter(Me=>{let K=te.get(Me);return K?!ve.some(xe=>xe.test(K.line)):!1});if(Le.length===0)continue;Q++,J+=Le.length;let Ie=at(j);if(de.push({file:Ie,anchor_lines:Le.slice(0,20),num_lines:G}),g){Y.push({file:j,matches:[],matchCount:Le.length});continue}v();let Rt=[];Array.from(te.keys()).sort((Me,K)=>Me-K).forEach(Me=>{let K=te.get(Me);if(!K)return;let xe=Le.includes(Me);if(Rt.push({lineNum:Me,line:K.line,isMatch:xe}),xe&&N.length<m){for(let he of K.queryIds)if(N.push({file:Ie,line:Me,column:K.column,preview:K.line,queryId:he}),N.length>=m)break}}),Y.push({file:j,matches:Rt,matchCount:Le.length});}Y.sort((j,te)=>at(j.file).localeCompare(at(te.file)));let ne=j=>{let ie=at(j).split(ge__default.sep),Ae=ie.findIndex(Ne=>["src","lib","app","core","packages"].includes(Ne));return Ae>=0&&Ae+1<ie.length?ie[Ae+1]:ie[0]||"root"},le=[`\u2713 \u641C\u7D22: ${H}`,`\u25B8 \u8DEF\u5F84: ${L}${w?" (\u9012\u5F52)":""}${D==="ancestor"?" (auto-resolved)":""}`,l?`\u25B8 \u6587\u4EF6\u8FC7\u6EE4: ${l}`:"",u?"\u25B8 \u6A21\u5F0F: \u5FFD\u7565\u5927\u5C0F\u5199":"",se?"\u25B8 \u7B56\u7565: ripgrep":"\u25B8 \u7B56\u7565: fallback","","\u2501\u2501\u2501\u2501 \u7ED3\u679C\u6458\u8981 \u2501\u2501\u2501\u2501",V>0?`\u6587\u4EF6: ${V} \u5DF2\u641C\u7D22, ${Q} \u6709\u5339\u914D`:`\u6587\u4EF6: ${Q} \u6709\u5339\u914D`,`\u5339\u914D: ${J}${J>=m?" (\u5DF2\u8FBE\u4E0A\u9650)":""}`].filter(j=>j!==""),_e=new Map,$e=0;for(let j of Y){$e++,$e%C===0&&await T();let te=ne(j.file);_e.set(te,(_e.get(te)||0)+j.matchCount);}if(_e.size>1){le.push(""),le.push("\u{1F4E6} \u6A21\u5757\u5206\u5E03:");let j=Array.from(_e.entries()).sort((te,ie)=>ie[1]-te[1]);for(let[te,ie]of j.slice(0,5))le.push(` ${te}: ${ie}`);j.length>5&&le.push(` ... \u8FD8\u6709 ${j.length-5} \u4E2A\u6A21\u5757`);}if(le.push(""),g){le.push("\u{1F4CB} \u6587\u4EF6\u5217\u8868:");let j=0;for(let te of Y){j++,j%C===0&&await T();let ie=at(te.file),Ae=ne(te.file);le.push(` [${Ae}] ${ie}: ${te.matchCount}`);}}else {let j=0,te=100;for(let ie of Y){if(v(),ee>=m){le.push(`
|
|
1642
|
+
... \u8FD8\u6709\u66F4\u591A\u5339\u914D (\u5DF2\u8FBE ${m} \u4E0A\u9650)`);break}let Ae=at(ie.file),Ne=ne(ie.file);le.push(`
|
|
1643
|
+
\u25B8 [${Ne}] ${Ae} (${ie.matchCount} \u5904)`),le.push("\u2500".repeat(50));let Le=-10;for(let Ie of ie.matches){if(ee>=m)break;j++,j%te===0&&await T(),Ie.lineNum>Le+1&&Le>0&&le.push(" \u2504\u2504\u2504");let Rt=Ie.isMatch?"\u25B6":" ";le.push(`${Rt}${String(Ie.lineNum).padStart(5)} \u2502 ${Ie.line}`),Le=Ie.lineNum,Ie.isMatch&&ee++;}}}return Y.length===0?(le.push("\u672A\u627E\u5230\u5339\u914D\u5185\u5BB9"),le.push(""),le.push("\u{1F4A1} \u5EFA\u8BAE:"),le.push(" - \u5C1D\u8BD5 case_insensitive: true"),le.push(" - \u5C1D\u8BD5 recursive: true \u641C\u7D22\u5B50\u76EE\u5F55"),le.push(" - \u4F7F\u7528 keywords \u6216 queries \u7EC4\u5408\u641C\u7D22"),le.push(' - \u67E5\u6587\u4EF6\u540D\u8BF7\u7528 mode="files"')):de.length>0&&(le.push(""),le.push("\u{1F4A1} \u6279\u91CF\u8BFB\u53D6:"),de.slice(0,3).forEach(j=>{le.push(` readfile(path="${j.file}", anchor_lines=[${j.anchor_lines.join(",")}], num_lines=${j.num_lines})`);})),JSON.stringify(Be("search","success",Y.length>0?`search "${H}" (${J} matches)`:`search "${H}" (no matches)`,le.join(`
|
|
1644
1644
|
`),{metadata:{mode:"content",strategy:se?"rg":"fallback",regex:A.some(j=>j.regex),case_insensitive:u,path:L,resolved_from:D,queries:A,matches:N,read_hints:de,files_with_matches:Q,command:Z.length>0?Z[0]:void 0}}))}catch(f){return JSON.stringify(Be("search","error",`search failed: ${f.message}`,void 0,{error:f.message}))}}},RI={name:Wl.name,description:Wl.description,parameters:Wl.parameters,permission:{category:"read",allowInAskMode:true},async function(r){return Ky(r)}},rb=[sI,lI,pI,mI,gI,cI,uI,dI,yI,bI,vI,CI,xI,wI,kI,_I,II,hI,fI,My,EI,PI,Jd,Vd,Yd,Oy,RI];async function to(r,e){e&&V_(e);let t=e?.capabilities??vt.capabilities,n=We(),s=[...rb];if(r&&s.push(By(r)),n.webSearch?.enabled&&s.push(dp),n.javaDebug?.enabled)try{let c=await hp(n.javaDebug?.jarPath);s.push(...c),Ue.info("TOOLS",`Java Debug \u5DE5\u5177\u5DF2\u542F\u7528 (${c.length} \u4E2A\u5DE5\u5177)`);}catch(c){Ue.error("TOOLS",`Java Debug \u5DE5\u5177\u52A0\u8F7D\u5931\u8D25: ${c.message}`),Ue.error("TOOLS","\u63D0\u793A: \u8FD0\u884C npm run setup-java-debug \u81EA\u52A8\u4E0B\u8F7D JAR \u6587\u4EF6");}if(n.smartRead?.enabled!==false)try{let c=Ud(r);s.push(...c),Ue.info("TOOLS",`readfile \u5DE5\u5177\u5DF2\u542F\u7528 (${c.length} \u4E2A\u5DE5\u5177)`);}catch(c){Ue.error("TOOLS",`readfile \u5DE5\u5177\u52A0\u8F7D\u5931\u8D25: ${c.message}`);}let o=typeof process<"u"&&process.type==="renderer";t?.terminal&&o&&s.push(...Dl()),t?.editor&&o&&s.push(...Nl());let i=X_(s,t),a=n.enabledTools||{};return i.filter(c=>a[c.name]!==false)}mn();var ob=({version:r,provider:e,model:t,workDir:n})=>{let s=(f,b=40)=>{if(f.length<=b)return f;let v=f.split("/");return v.length<=2?f.slice(0,b-3)+"...":"~/"+v.slice(-2).join("/")},o=(f,b=38)=>f.length<=b?f:f.slice(0,b-3)+"...",i=s(n),a=o(t),l=50,c=50,u="#5ba3ff",d=[{c:"#00d9ff",t:" \u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588"},{c:"#00bfff",t:" \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"},{c:"#5ba3ff",t:" \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588"},{c:"#9370db",t:" \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"},{c:"#ff69b4",t:" \u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588"}],m=f=>" ".repeat(Math.max(0,f)),g=(f,b,v,C)=>E.createElement(y,null,E.createElement(y,{color:u},"\u2502"),E.createElement(y,null," "),f,E.createElement(y,null,m(l-1-b)),E.createElement(y,{color:u},"\u2502"),E.createElement(y,null," "),v,E.createElement(y,null,m(c-1-C)),E.createElement(y,{color:u},"\u2502")),h=(f,b)=>E.createElement(y,null,E.createElement(y,{color:u},"\u2502"),E.createElement(y,null," "),f,E.createElement(y,null,m(l-1-b)),E.createElement(y,{color:u},"\u251C","\u2500".repeat(c),"\u2524"));return E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(y,{color:u},"\u256D"+"\u2500".repeat(l)+"\u252C"+"\u2500".repeat(c)+"\u256E"),g(E.createElement(E.Fragment,null,E.createElement(y,{bold:true,color:"cyan"},"Neox"),E.createElement(y,{color:"gray"}," v",r)),6+r.length,E.createElement(y,{color:"yellow",bold:true},"Tips for getting started"),24),g(E.createElement(y,{color:"gray"},"Welcome! Enjoy!"),15,E.createElement(y,null,"Type your message to start"),26),g(E.createElement(y,null," "),1,E.createElement(y,null,"/help or ? for commands"),23),g(E.createElement(y,{color:d[0].c},d[0].t),d[0].t.length,E.createElement(y,null,"Press ? to see all shortcuts"),28),g(E.createElement(y,{color:d[1].c},d[1].t),d[1].t.length,E.createElement(y,null," "),1),h(E.createElement(y,{color:d[2].c},d[2].t),d[2].t.length),g(E.createElement(y,{color:d[3].c},d[3].t),d[3].t.length,E.createElement(y,{color:"blue",bold:true},"What is Neox?"),13),g(E.createElement(y,{color:d[4].c},d[4].t),d[4].t.length,E.createElement(y,null,"Your intelligent coding assistant"),33),g(E.createElement(y,null," "),1,E.createElement(y,null,"Multi-agent collaboration support"),33),g(E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan"},"Provider"),E.createElement(y,null," ",e)),9+e.length,E.createElement(y,null,"Smart context management"),24),g(E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan"},"Model "),E.createElement(y,null," ",a)),9+a.length,E.createElement(y,null," "),1),g(E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan"},"Path "),E.createElement(y,{color:"gray"}," ",i)),9+i.length,E.createElement(y,null," "),1),E.createElement(y,{color:u},"\u2570"+"\u2500".repeat(l)+"\u2534"+"\u2500".repeat(c)+"\u256F"))};function Ot(r){let e=0,t=r.length;for(;e<t&&r[e].trim()==="";)e+=1;for(;t>e&&r[t-1].trim()==="";)t-=1;return r.slice(e,t)}var zl=({message:r,timestamp:e,sourceLabel:t})=>{let n="",s=0;if(typeof r.content=="string")n=r.content;else if(Array.isArray(r.content))for(let i of r.content)i.type==="text"?n+=i.text:i.type==="image_url"&&s++;let o=Ot(n.split(`
|
|
1645
1645
|
`));return E.createElement(_,{flexDirection:"column",marginTop:1,marginBottom:0},E.createElement(_,null,E.createElement(y,{color:"green",bold:true},"\u25B6 You"),t&&E.createElement(y,{color:"cyan"}," (",t,")"),s>0&&E.createElement(y,{dimColor:true}," \u{1F4CE} ",s," image",s>1?"s":"")),o.map((i,a)=>E.createElement(_,{key:a},E.createElement(y,{dimColor:true},a===0?"\u2514\u2500 ":" "),E.createElement(y,{wrap:"wrap"},i))))};var ib=({message:r,timestamp:e,sourceLabel:t,sourceType:n})=>{let s="";if(typeof r.content=="string")s=r.content;else if(Array.isArray(r.content))for(let l of r.content)l.type==="text"&&(s+=l.text);let o=Ot(s.split(`
|
|
1646
1646
|
`)),i=r.role==="assistant",a=t||"Supervisor";return i?E.createElement(_,{flexDirection:"column",marginTop:1,marginBottom:0},E.createElement(_,null,E.createElement(y,{color:"magenta",bold:true},"\u25CF ",a)),o.map((l,c)=>E.createElement(_,{key:c},E.createElement(y,{dimColor:true},c===0?"\u2514\u2500 ":" "),E.createElement(y,{wrap:"wrap"},l)))):E.createElement(_,{flexDirection:"column",marginTop:1,marginBottom:0},E.createElement(_,null,E.createElement(y,{color:"magenta",bold:true},"\u25B6 ",a)),o.map((l,c)=>E.createElement(_,{key:c},E.createElement(y,{dimColor:true},c===0?"\u2514\u2500 ":" "),E.createElement(y,{wrap:"wrap"},l))))};function BI(r){let e=0;for(let t of r){let n=t.codePointAt(0)||0;n>=19968&&n<=40959||n>=13312&&n<=19903||n>=131072&&n<=173791||n>=173824&&n<=177983||n>=177984&&n<=178207||n>=63744&&n<=64255||n>=12288&&n<=12351||n>=65280&&n<=65519||n>=127744&&n<=129535?e+=2:e+=1;}return e}var Ip=new Marked,Sn=markedTerminal({tableOptions:{chars:{top:"\u2500","top-mid":"\u252C","top-left":"\u250C","top-right":"\u2510",bottom:"\u2500","bottom-mid":"\u2534","bottom-left":"\u2514","bottom-right":"\u2518",left:"\u2502","left-mid":"\u251C",mid:"\u2500","mid-mid":"\u253C",right:"\u2502","right-mid":"\u2524",middle:"\u2502"},style:{head:["cyan","bold"],border:["gray"]},getWidth:BI},emoji:false,reflowText:false,width:80});Sn.renderer.heading;Sn.renderer.heading=function(r){let e=r.depth||1,t=r.text||"",n={1:"\x1B[1m\x1B[35m",2:"\x1B[1m\x1B[36m",3:"\x1B[1m\x1B[33m",4:"\x1B[1m\x1B[32m",5:"\x1B[1m\x1B[34m",6:"\x1B[1m\x1B[37m"};return `${n[e]||n[1]}${t}\x1B[0m
|
|
@@ -1687,8 +1687,8 @@ Command: ${j} ${ie.join(" ")}`;throw new Error(`ripgrep failed (exit code ${Le})
|
|
|
1687
1687
|
`+r.slice(w);u(Q);return}if(J.return){if(C&&s.length>0){let Q=s[I];v(0),T(false),d(Q);return}process.env.CLI_DEBUG==="1"&&p.debug("INPUT_LINE","Enter pressed - submitting",{valueLength:r.length,value:r.substring(0,50),disabled:t}),d(),v(0),T(false);return}if(C&&s.length>0){if(J.upArrow){M(Q=>Q>0?Q-1:s.length-1);return}if(J.downArrow){M(Q=>Q<s.length-1?Q+1:0);return}}if(J.upArrow){if(se===0)m(),v(0);else {let Q=r.lastIndexOf(`
|
|
1688
1688
|
`,w-G-2)+1,ee=F[se-1].length,de=Math.min(G,ee),N=Q+de;v(r.length-N);}return}if(J.downArrow){if(se===F.length-1)g(),v(0);else {r.lastIndexOf(`
|
|
1689
1689
|
`,w-1)+1;let ee=r.indexOf(`
|
|
1690
|
-
`,w)+1,de=F[se+1].length,N=Math.min(G,de),q=ee+N;v(r.length-q);}return}if(J.leftArrow){v(Math.min(b+1,r.length));return}if(J.rightArrow){v(Math.max(b-1,0));return}if(J.home||J.ctrl&&Y==="a"){v(r.length);return}if(J.end||J.ctrl&&Y==="e"){v(0);return}if(J.backspace||J.delete){if(b===r.length){r.length===0&&a>0&&c&&c();return}let Q=w-1,ee=r.slice(0,Q)+r.slice(Q+1);u(ee);return}if(!J.ctrl&&!J.meta&&Y){let Q=r.slice(0,w)+Y+r.slice(w);u(Q);return}}}},{isActive:W});let Z=!r,X=()=>Z?E.createElement(_,null,E.createElement(y,{color:"green",bold:true},"> "),E.createElement(y,{inverse:true}," "),E.createElement(y,{dimColor:true},e)):F.map((Y,J)=>{let Q=J===se,ee=F.slice(0,J).reduce((le,ke)=>le+ke.length+1,0);ee+Y.length;let N=-1;Q&&(N=w-ee);let q=J===0?"> ":"\u2502 ",ne="green";if(t)return E.createElement(_,{key:J},E.createElement(y,{color:ne,bold:true},q),E.createElement(y,{dimColor:true},Y));if(Q&&N>=0){let le=Y.slice(0,N),ke=Y[N]||" ",$e=Y.slice(N+1);return E.createElement(_,{key:J},E.createElement(y,{color:ne,bold:true},q),E.createElement(y,null,le,E.createElement(y,{inverse:true},ke),$e))}return E.createElement(_,{key:J},E.createElement(y,{color:ne,bold:true},q),E.createElement(y,null,Y))});return E.createElement(_,{flexDirection:"column"},U&&!t&&E.createElement(_,{marginBottom:0},E.createElement(y,{dimColor:true}," \u21B5 Shift+Enter \u6362\u884C \u2502 Enter \u53D1\u9001 \u2502 ",F.length," \u884C")),E.createElement(_,{flexDirection:"column"},X()))};var oE=({isRunning:r,statusText:e="",tokenStats:t,streamingTokens:n=0,streamingStartTime:s=null,provider:o,model:i,onContextMenuToggle:a,agentContextStats:l=[],maxDisplayAgents:c=3,runMode:u="single",networkStats:d,cooperateStats:m})=>{let[g,h]=useState(null),[f,b]=useState(0),[v,C]=useState(0),[T,I]=useState(0),[M,D]=useState(0);useEffect(()=>{r?(h(s||Date.now()),b(0)):!r&&(t?.output||0)===0&&(h(null),b(0));},[r,s,t?.output]),useEffect(()=>{if(!r||g===null)return;let Z=setInterval(()=>{b(Math.floor((Date.now()-g)/1e3));},500);return ()=>clearInterval(Z)},[r,g]),useEffect(()=>{if(!r||n===0){C(0);return}let Z=Math.floor(n);if(v===Z)return;let X=Z-v,Y=Math.min(Math.abs(X),20),J=X/Y,ee=setInterval(()=>{C(de=>{let N=de+J;return Math.abs(N-Z)<1?Z:N});},50);return ()=>clearInterval(ee)},[n,r,v]),useEffect(()=>{let Z=t?.output||0;if(T===Z)return;let X=Z-T;if(Math.abs(X)>100){I(Z);return}let Y=Math.max(Math.ceil(Math.abs(X)/10),3),J=X/Y,ee=setInterval(()=>{I(de=>{let N=de+J;return Math.abs(N-Z)<1?Z:N});},10);return ()=>clearInterval(ee)},[t?.output,T]),useEffect(()=>{if(!r){D(0);return}let X=(e||"Thinking...").length,Y=setInterval(()=>{D(J=>(J+1)%(X+3));},80);return ()=>clearInterval(Y)},[r,e]);let R=()=>{if(f<60)return `${f}s`;let Z=Math.floor(f/60),X=f%60;return `${Z}m ${X}s`},L=Z=>Z>=1e6?(Z/1e6).toFixed(1)+"M":Z>=1e3?(Z/1e3).toFixed(1)+"K":Z.toString(),S=t?.contextWindow||0,k=t?.tokensUsedForContext||t?.total||0,w=t?.pressure||0,A=Math.round(w*100),O=()=>w>.8?"red":w>.5?"yellow":"green",z=Z=>Z.split("").map((Y,J)=>{let Q=J-M;return Q>=0&&Q<2?E.createElement(y,{key:J,color:"white",bold:true},Y):Q>=-1&&Q<0?E.createElement(y,{key:J,color:"cyanBright"},Y):E.createElement(y,{key:J,color:"cyan"},Y)}),B=(()=>{switch(u){case "single":return {icon:"\u{1F464}",label:"Single",color:"cyan"};case "collab":return {icon:"\u{1F91D}",label:"Collab",color:"magenta"};case "cooperate":return {icon:"\u{1F527}",label:"Cooperate",color:"yellow"};case "network":return {icon:"\u{1F310}",label:"Network",color:"blue"};default:return {icon:"\u{1F464}",label:"Single",color:"cyan"}}})(),F=e&&(e.includes("Streaming:")||e.toLowerCase().includes("stream")),U=e?.match(/Streaming:\s*(\w+)/),H=U?U[1]:null,se=l.length>0,G=l.find(Z=>Z.agentId==="Main"),W=l.filter(Z=>Z.agentId!=="Main"),ce=W.length>c,V=()=>W.length===0?null:E.createElement(_,null,E.createElement(y,{dimColor:true}," \u2502 "),E.createElement(y,{color:"magenta"},W.length),E.createElement(y,{dimColor:true}," workers"),ce&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," \u2022 Ctrl+G"))),ve=(Z,X)=>{let Y=Z.pressure||0,J=Math.round(Y*100),Q=()=>Y>.8?"red":Y>.5?"yellow":"green",ee=()=>{switch(Z.status||"idle"){case "running":return {icon:"\u25CF",color:"green"};case "waiting":return {icon:"\u25D0",color:"yellow"};case "completed":return {icon:"\u2713",color:"blue"};case "error":return {icon:"\u2717",color:"red"};default:return {icon:"\u25CB",color:"gray"}}},{icon:de,color:N}=ee(),q=Z.currentTask?Z.currentTask.length>20?Z.currentTask.slice(0,17)+"...":Z.currentTask:"";return E.createElement(_,{key:Z.agentId,justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{dimColor:true},X?"\u2514\u2500 ":"\u251C\u2500 "),E.createElement(y,{color:N},de),E.createElement(y,null," "),E.createElement(y,{color:"magenta"},Z.agentLabel),q&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," "),E.createElement(y,{dimColor:true},q))),E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(Z.input)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(Z.output)),E.createElement(y,{dimColor:true}," \u2502 context "),E.createElement(y,{color:"yellow"},L(Z.tokensUsedForContext)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},L(Z.contextWindow)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:Q()},J,"%"),E.createElement(y,{dimColor:true},")")))};if(u==="network"){let Z=d?.teamSize||0,X=d?.activeAgents||0,Y=d?.currentPhase||"executing",J=d?.currentAgent,Q=d?.totalInputTokens||t?.input||0,ee=d?.totalOutputTokens||t?.output||0,de=d?.completedTasks,N=d?.totalTasks,ne=(()=>{switch(Y){case "analyzing":return {text:"Analyzing",color:"cyan"};case "bidding":return {text:"Bidding",color:"yellow"};case "negotiating":return {text:"Negotiating",color:"magenta"};case "executing":return {text:"Executing",color:"green"};case "reviewing":return {text:"Reviewing",color:"blue"};case "complete":return {text:"Complete",color:"green"};default:return {text:"Running",color:"cyan"}}})();return E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:"blue"},"\u{1F310}"),E.createElement(y,{dimColor:true}," \u2502 "),E.createElement(y,{color:"blue"},Z),E.createElement(y,{dimColor:true}," agents"),X>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"green"},X),E.createElement(y,{dimColor:true}," active)")),E.createElement(y,{dimColor:true}," \u2502 "),r?E.createElement(_,null,E.createElement(Xl,{type:"dots"}),E.createElement(y,null," "),J?E.createElement(E.Fragment,null,z(J),E.createElement(y,{dimColor:true},": "),E.createElement(y,{color:ne.color},ne.text)):E.createElement(y,{color:ne.color},ne.text),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(_,null,ee>0?E.createElement(E.Fragment,null,E.createElement(y,{color:"green",bold:true},"\u25A0"),E.createElement(y,null," "),E.createElement(y,{color:"green"},"Complete!"),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan",bold:true},"\u25CF"),E.createElement(y,null," "),E.createElement(y,{color:"cyan"},"Ready")))),E.createElement(_,null,de!==void 0&&N!==void 0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true},"tasks "),E.createElement(y,{color:"yellow"},de),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},N),E.createElement(y,{dimColor:true}," \u2502 ")),r&&v>0&&E.createElement(E.Fragment,null,E.createElement(y,{color:"green"},"\u2193 ",Math.floor(v)),E.createElement(y,{dimColor:true}," \u2502 ")),E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(Q)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(ee))))}if(u==="cooperate"&&m){let{models:Z,phase:X,totalInputTokens:Y,totalOutputTokens:J,ccbResult:Q,dagProgress:ee}=m,N=(()=>{switch(X){case "analyzing":return {text:"Analyzing",color:"cyan"};case "ccb_review":return {text:"CCB Review",color:"yellow"};case "dag_planning":return {text:"Planning",color:"magenta"};case "executing":return {text:"Executing",color:"green"};case "complete":return {text:"Complete",color:"green"};default:return {text:"Running",color:"cyan"}}})(),q=()=>Z.length===0?null:Z.map((le,ke)=>{let $e=le.status==="running"?"green":le.status==="completed"?"blue":"gray";return E.createElement(E.Fragment,{key:ke},ke>0&&E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:$e},le.shortName))}),ne=Z.filter(le=>le.status==="completed").length;return E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:"yellow"},"\u{1F527}"),E.createElement(y,{dimColor:true}," \u2502 "),r?E.createElement(_,null,E.createElement(Xl,{type:"dots"}),E.createElement(y,null," "),e?z(e):E.createElement(y,{color:N.color},N.text),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")")),v>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ~"),E.createElement(y,{color:"magenta"},Math.floor(v)),E.createElement(y,{dimColor:true}," tok"))):E.createElement(_,null,J>0?E.createElement(E.Fragment,null,E.createElement(y,{color:"green",bold:true},"\u25A0"),E.createElement(y,null," "),E.createElement(y,{color:"green"},"Complete!"),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan",bold:true},"\u25CF"),E.createElement(y,null," "),E.createElement(y,{color:"cyan"},"Ready")))),E.createElement(_,null,Z.length>0&&E.createElement(E.Fragment,null,q(),E.createElement(y,{dimColor:true}," "),E.createElement(y,{color:"yellow"},ne),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},Z.length),E.createElement(y,{dimColor:true}," \u2502 ")),Q&&E.createElement(E.Fragment,null,E.createElement(y,{color:Q.approved?"green":"red"},Q.approved?"\u2713":"\u2717"),E.createElement(y,{dimColor:true}," CCB "),E.createElement(y,{color:"yellow"},Q.approveCount),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},Q.totalCount),E.createElement(y,{dimColor:true}," \u2502 ")),ee&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true},"DAG "),E.createElement(y,{color:"yellow"},ee.completedNodes),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},ee.totalNodes),E.createElement(y,{dimColor:true}," \u2502 ")),E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(Y||t?.input||0)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(J||t?.output||0))))}if((u==="collab"||u==="cooperate")&&se){let Z=G?.pressure||0,X=Math.round(Z*100),Y=()=>Z>.8?"red":Z>.5?"yellow":"green",J=W.length<=c&&W.length>0,Q=G?.agentLabel||"Main";return E.createElement(_,{flexDirection:"column"},E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:B.color},B.icon),E.createElement(y,{dimColor:true}," \u2502 "),r?E.createElement(_,null,E.createElement(Xl,{type:"dots"}),E.createElement(y,null," "),E.createElement(y,{bold:true,color:"cyan"},"\u25CF"),E.createElement(y,null," "),F&&H?E.createElement(E.Fragment,null,z(`Streaming: ${H}`)):z(e||"Thinking..."),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(_,null,(G?.output||t?.output||0)>0?E.createElement(E.Fragment,null,E.createElement(y,{color:"green",bold:true},"\u25A0"),E.createElement(y,null," "),E.createElement(y,{color:"green"},"Complete!"),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan",bold:true},"\u25CF"),E.createElement(y,null," "),E.createElement(y,{color:"cyan"},"Ready")))),E.createElement(_,null,G?E.createElement(_,null,E.createElement(y,{dimColor:true},Q,": "),E.createElement(y,{color:"cyan"},L(G.input)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"green"},L(G.output)),(G.cacheCreationTokens||G.cacheReadTokens)&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," cache-w "),E.createElement(y,{color:"magenta"},L(G.cacheCreationTokens||0)),E.createElement(y,{dimColor:true}," cache-r "),E.createElement(y,{color:"blue"},L(G.cacheReadTokens||0))),E.createElement(y,{dimColor:true}," \u2502 "),E.createElement(y,{color:"yellow"},L(G.tokensUsedForContext)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},L(G.contextWindow)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:Y()},X,"%"),E.createElement(y,{dimColor:true},")"),V()):E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(t?.input||0)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(t?.output||0)),V()))),J&&W.map((ee,de)=>ve(ee,de===W.length-1)))}return E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:B.color},B.icon),E.createElement(y,{dimColor:true}," \u2502 "),r?E.createElement(_,null,E.createElement(Xl,{type:"dots"}),E.createElement(y,null," "),E.createElement(y,{bold:true,color:"cyan"},"\u25CF"),E.createElement(y,null," "),F&&H?E.createElement(E.Fragment,null,z(`Streaming: ${H}`)):z(e||"Thinking..."),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true}," \u2022 esc to interrupt"),v>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," \u2022 "),E.createElement(y,{color:"green"},"\u2193 ",Math.floor(v)),E.createElement(y,{dimColor:true}," ",F?"chars":"tokens")),E.createElement(y,{dimColor:true},")"))):E.createElement(_,null,(t?.output||0)>0?E.createElement(E.Fragment,null,E.createElement(y,{color:"green",bold:true},"\u25A0"),E.createElement(y,null," "),E.createElement(y,{color:"green"},"Complete!"),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan",bold:true},"\u25CF"),E.createElement(y,null," "),E.createElement(y,{color:"cyan"},"Ready")))),E.createElement(_,null,S>0?E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(t?.input||0)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(t?.output||0)),(t?.cacheCreationTokens||t?.cacheReadTokens)&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," cache-w "),E.createElement(y,{color:"magenta"},L(t.cacheCreationTokens||0)),E.createElement(y,{dimColor:true}," cache-r "),E.createElement(y,{color:"blue"},L(t.cacheReadTokens||0))),E.createElement(y,{dimColor:true}," \u2502 context "),E.createElement(y,{color:"yellow"},L(k)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},L(S)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:O()},A,"%"),E.createElement(y,{dimColor:true},")")):E.createElement(y,{dimColor:true},"context: --")))},iE=(r,e)=>!r&&!e?true:!r||!e||r.length!==e.length?false:r.every((t,n)=>{let s=e[n];return t.agentId===s.agentId&&t.input===s.input&&t.output===s.output&&t.pressure===s.pressure&&t.tokensUsedForContext===s.tokensUsedForContext&&t.status===s.status&&t.currentTask===s.currentTask&&t.contextWindow===s.contextWindow&&t.cacheCreationTokens===s.cacheCreationTokens&&t.cacheReadTokens===s.cacheReadTokens}),Sb=E.memo(oE,(r,e)=>r.isRunning===e.isRunning&&r.statusText===e.statusText&&r.streamingTokens===e.streamingTokens&&r.streamingStartTime===e.streamingStartTime&&r.tokenStats?.input===e.tokenStats?.input&&r.tokenStats?.output===e.tokenStats?.output&&r.tokenStats?.total===e.tokenStats?.total&&r.tokenStats?.pressure===e.tokenStats?.pressure&&r.tokenStats?.cacheCreationTokens===e.tokenStats?.cacheCreationTokens&&r.tokenStats?.cacheReadTokens===e.tokenStats?.cacheReadTokens&&r.runMode===e.runMode&&r.networkStats?.teamSize===e.networkStats?.teamSize&&r.networkStats?.activeAgents===e.networkStats?.activeAgents&&r.networkStats?.currentPhase===e.networkStats?.currentPhase&&r.networkStats?.currentAgent===e.networkStats?.currentAgent&&r.networkStats?.totalInputTokens===e.networkStats?.totalInputTokens&&r.networkStats?.totalOutputTokens===e.networkStats?.totalOutputTokens&&r.networkStats?.completedTasks===e.networkStats?.completedTasks&&r.networkStats?.totalTasks===e.networkStats?.totalTasks&&r.cooperateStats?.phase===e.cooperateStats?.phase&&r.cooperateStats?.totalInputTokens===e.cooperateStats?.totalInputTokens&&r.cooperateStats?.totalOutputTokens===e.cooperateStats?.totalOutputTokens&&r.cooperateStats?.ccbResult?.approved===e.cooperateStats?.ccbResult?.approved&&r.cooperateStats?.ccbResult?.approveCount===e.cooperateStats?.ccbResult?.approveCount&&r.cooperateStats?.dagProgress?.completedNodes===e.cooperateStats?.dagProgress?.completedNodes&&r.cooperateStats?.models?.length===e.cooperateStats?.models?.length&&iE(r.agentContextStats,e.agentContextStats));var kb=({isRunning:r,hasInput:e,customHints:t,menuActive:n=false,thinkingEnabled:s=true,accumulatedRunTime:o=0,provider:i,model:a,runMode:l="single"})=>{let[c,u]=useState(o);useEffect(()=>{if(!r){u(o);return}u(o);let f=setInterval(()=>{u(b=>b+1);},1e3);return ()=>clearInterval(f)},[r,o]);let d=()=>{if(c<60)return `${c}s`;let f=Math.floor(c/60),b=c%60;if(f<60)return `${f}m ${b}s`;let v=Math.floor(f/60),C=f%60;return `${v}h ${C}m`},m=()=>{if(!i||!a)return "";let f=i,b=i.indexOf(" (");b>0&&(f=i.substring(0,b));let v=a.length>35?a.substring(0,32)+"...":a;return `${f}/${v}`},h=(()=>{switch(l){case "single":return {label:"SINGLE",color:"cyan"};case "collab":return {label:"COLLAB",color:"magenta"};case "cooperate":return {label:"COOPERATE",color:"yellow"};case "network":return {label:"NETWORK",color:"blue"};default:return {label:"SINGLE",color:"cyan"}}})();return t?E.createElement(_,{justifyContent:"space-between"},E.createElement(y,{color:"yellow"},t)):n?E.createElement(_,{justifyContent:"space-between"},E.createElement(y,{dimColor:true}," ","\u2191\u2193 to select, Enter to confirm, ESC to cancel")):E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{dimColor:true},"? for shortcuts"),c>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," \u2022 "),E.createElement(y,{color:"cyan"},d()),E.createElement(y,{dimColor:true}," session"))),E.createElement(_,null,E.createElement(y,{color:h.color,bold:true},"["),E.createElement(y,{color:h.color},h.label),E.createElement(y,{color:h.color,bold:true},"]"),E.createElement(y,{dimColor:true}," \u2022 "),m()&&E.createElement(E.Fragment,null,E.createElement(y,{color:"magenta",bold:true},"["),E.createElement(y,{color:"magenta"},m()),E.createElement(y,{color:"magenta",bold:true},"]"),E.createElement(y,{dimColor:true}," \u2022 ")),s?E.createElement(y,{color:"cyan"},"Thinking on"):E.createElement(y,{dimColor:true},"Thinking off"),E.createElement(y,{dimColor:true}," (tab to toggle)")))};var _b=({attachments:r,onRemove:e})=>r.length===0?null:E.createElement(_,{flexDirection:"column",paddingLeft:2,marginBottom:1},E.createElement(y,{color:"magenta",dimColor:true},"Attachments:"),r.map((t,n)=>{let s=t.name||t.path?.split("/").pop()||"unknown",o=t.type?.startsWith("image/")||t.mediaType?.startsWith("image/")||s.match(/\.(png|jpg|jpeg|gif|webp)$/i);return E.createElement(_,{key:n},E.createElement(y,{color:"magenta"},o?"\u{1F4CE} \u{1F5BC}\uFE0F ":"\u{1F4CE} ",s),e&&E.createElement(y,{color:"gray",dimColor:true}," (press \u232B Backspace to remove)"))}));var Ib=({planSteps:r,isRunning:e=false})=>{let t=r.find(s=>s.status==="pending");if(!t||!e)return null;let n=t.step.length>50?t.step.substring(0,47)+"...":t.step;return E.createElement(_,{paddingLeft:2},E.createElement(y,{dimColor:true},"\u2514\u2500 "),E.createElement(y,{color:"gray"},"\u25CB"),E.createElement(y,{dimColor:true}," Next: "),E.createElement(y,{color:"cyan"},n))};var Eb=({contextWindow:r,tokensUsed:e,systemTokens:t=0,userTokens:n=0,assistantTokens:s=0,toolCallTokens:o=0,toolResultTokens:i=0,compactionThreshold:a=.8,compressionMode:l="sync",agentContextStats:c=[],runMode:u="single",networkStats:d,onClose:m})=>{let g=R=>R>=1e6?`${(R/1e6).toFixed(1)}M`:R>=1e3?`${(R/1e3).toFixed(1)}k`:R.toString(),h=R=>R>.8?"red":R>.5?"yellow":"green",f=({color:R,label:L,tokens:S,total:k,indent:w=2})=>{let A=k>0?(S/k*100).toFixed(2):"0.00";return E.createElement(_,{marginLeft:w},E.createElement(y,{color:R},"\u25A0"),E.createElement(y,null," ",L,": "),E.createElement(y,{color:"yellow"},g(S)),E.createElement(y,{dimColor:true}," tokens (",A,"%)"))},b=({stat:R,indent:L=2})=>{let S=R.cacheCreationTokens||0,k=R.cacheReadTokens||0,w=R.contextWindow||2e5,A=R.tokensUsedForContext||0,O=w>0?A/w:0,z=Math.round(O*100);return E.createElement(_,{marginLeft:L,justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:"magenta"},R.agentLabel||R.agentId),R.status&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," "),E.createElement(y,{color:R.status==="running"?"green":R.status==="error"?"red":"gray"},R.status==="running"?"\u25CF":R.status==="completed"?"\u2713":R.status==="error"?"\u2717":"\u25CB"))),E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},g(R.input)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},g(R.output)),(S>0||k>0)&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," \u2502 cw "),E.createElement(y,{color:"blue"},g(S)),E.createElement(y,{dimColor:true}," cr "),E.createElement(y,{color:"blue"},g(k))),E.createElement(y,{dimColor:true}," \u2502 ctx "),E.createElement(y,{color:"yellow"},g(A)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},g(w)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:h(O)},z,"%"),E.createElement(y,{dimColor:true},")")))},v=({stat:R,indent:L=2})=>{let S=R.contextWindow>0?R.tokensUsedForContext/R.contextWindow:0,k=Math.round(S*100);return E.createElement(_,{marginLeft:L,justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:"magenta"},R.agentLabel||R.agentId),R.status&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," "),E.createElement(y,{color:R.status==="running"?"green":R.status==="error"?"red":"gray"},R.status==="running"?"\u25CF":R.status==="completed"?"\u2713":R.status==="error"?"\u2717":"\u25CB"))),E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},g(R.input)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},g(R.output)),E.createElement(y,{dimColor:true}," \u2502 "),E.createElement(y,{color:"yellow"},g(R.tokensUsedForContext)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},g(R.contextWindow)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:h(S)},k,"%"),E.createElement(y,{dimColor:true},")")))};if(u==="network"){let R=d?.teamSize||c.length||0,L=d?.activeAgents||0,S=d?.totalInputTokens||0,k=d?.totalOutputTokens||0,w=S+k,O=(z=>{switch(z){case "analyzing":return {text:"Analyzing",color:"cyan"};case "bidding":return {text:"Bidding",color:"yellow"};case "negotiating":return {text:"Negotiating",color:"magenta"};case "executing":return {text:"Executing",color:"green"};case "reviewing":return {text:"Reviewing",color:"blue"};case "complete":return {text:"Complete",color:"green"};default:return {text:"Idle",color:"gray"}}})(d?.currentPhase);return E.createElement(_,{flexDirection:"column",borderStyle:"round",borderColor:"blue",paddingX:2,paddingY:1},E.createElement(_,{justifyContent:"space-between",marginBottom:1},E.createElement(_,null,E.createElement(y,{color:"blue"},"\u{1F310}"),E.createElement(y,{bold:true,color:"blue"}," Network Context Overview")),E.createElement(y,{dimColor:true},"(press ESC to close)")),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{dimColor:true},"Team Size: "),E.createElement(y,{color:"blue",bold:true},R),E.createElement(y,{dimColor:true}," agents"),L>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"green"},L),E.createElement(y,{dimColor:true}," active)"))),E.createElement(_,null,E.createElement(y,{dimColor:true},"Current Phase: "),E.createElement(y,{color:O.color,bold:true},O.text),d?.currentAgent&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," - "),E.createElement(y,{color:"cyan"},d.currentAgent))),d?.completedTasks!==void 0&&d?.totalTasks!==void 0&&E.createElement(_,null,E.createElement(y,{dimColor:true},"Tasks: "),E.createElement(y,{color:"yellow"},d.completedTasks),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},d.totalTasks),E.createElement(y,{dimColor:true}," completed"))),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(y,{bold:true,dimColor:true},"Total Token Usage:"),E.createElement(_,{marginLeft:2},E.createElement(y,{dimColor:true},"Input: "),E.createElement(y,{color:"cyan"},g(S)),E.createElement(y,{dimColor:true}," \u2502 Output: "),E.createElement(y,{color:"green"},g(k)),E.createElement(y,{dimColor:true}," \u2502 Total: "),E.createElement(y,{color:"yellow"},g(w)))),c.length>0&&E.createElement(_,{flexDirection:"column"},E.createElement(y,{bold:true,dimColor:true},"Agent Context Details:"),c.map(z=>E.createElement(b,{key:z.agentId,stat:z})),E.createElement(_,{marginTop:1,marginLeft:2},E.createElement(y,{dimColor:true},"Total Tokens: "),E.createElement(y,{color:"yellow"},g(c.reduce((z,P)=>z+P.input+P.output,0))),E.createElement(y,{dimColor:true}," across "),E.createElement(y,{color:"cyan"},c.length),E.createElement(y,{dimColor:true}," agents"))),c.length===0&&E.createElement(_,{marginTop:1},E.createElement(y,{dimColor:true,italic:true},"Agent context details not available yet.")))}if((u==="collab"||u==="cooperate")&&c.length>0){let R=c.find(P=>P.agentId==="Main"),L=c.filter(P=>P.agentId!=="Main"&&P.agentId!=="supervisor"),S=c.reduce((P,B)=>P+B.tokensUsedForContext,0),k=c.reduce((P,B)=>P+B.input,0),w=c.reduce((P,B)=>P+B.output,0),A=u==="collab"?"\u{1F91D}":"\u{1F527}",O=u==="collab"?"Collab":"Cooperate",z=u==="collab"?"magenta":"yellow";return E.createElement(_,{flexDirection:"column",borderStyle:"round",borderColor:z,paddingX:2,paddingY:1},E.createElement(_,{justifyContent:"space-between",marginBottom:1},E.createElement(_,null,E.createElement(y,{color:z},A),E.createElement(y,{bold:true,color:z}," ",O," Context Overview")),E.createElement(y,{dimColor:true},"(press ESC to close)")),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{dimColor:true},"Total Agents: "),E.createElement(y,{color:z,bold:true},c.length),L.length>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," (1 Main + "),E.createElement(y,{color:"cyan"},L.length),E.createElement(y,{dimColor:true}," Workers)"))),E.createElement(_,null,E.createElement(y,{dimColor:true},"Total Tokens: "),E.createElement(y,{color:"cyan"},g(k)),E.createElement(y,{dimColor:true}," in / "),E.createElement(y,{color:"green"},g(w)),E.createElement(y,{dimColor:true}," out"))),R&&E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(y,{bold:true,dimColor:true},"Main Agent:"),E.createElement(v,{stat:R})),L.length>0&&E.createElement(_,{flexDirection:"column"},E.createElement(y,{bold:true,dimColor:true},"Worker Agents (",L.length,"):"),L.map(P=>E.createElement(v,{key:P.agentId,stat:P}))),E.createElement(_,{marginTop:1},E.createElement(y,{dimColor:true},"Combined Context: "),E.createElement(y,{color:"yellow"},g(S)),E.createElement(y,{dimColor:true}," tokens")))}let C=r-e,T=r>0?e/r:0,I=Math.floor(r*a),M=Math.max(0,I-e),D=Math.round(T*100);return E.createElement(_,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1},E.createElement(_,{justifyContent:"space-between",marginBottom:1},E.createElement(y,{bold:true,color:"cyan"},"Context Window Details"),E.createElement(y,{dimColor:true},"(press ESC to close)")),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{dimColor:true},"Total: "),E.createElement(y,{color:"yellow"},g(e)),E.createElement(y,{dimColor:true}," / "),E.createElement(y,{color:"yellow"},g(r)),E.createElement(y,{dimColor:true}," tokens ("),E.createElement(y,{color:h(T),bold:true},D,"%"),E.createElement(y,{dimColor:true},")")),E.createElement(_,null,E.createElement(y,{dimColor:true},"Remaining: "),E.createElement(y,{color:"green"},g(C)),E.createElement(y,{dimColor:true}," tokens"))),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{dimColor:true},"Compression: "),E.createElement(y,{color:l==="sync"?"green":"yellow"},l==="sync"?"Sync LLM":"Async LLM"),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"cyan"},Math.round(a*100),"%"),E.createElement(y,{dimColor:true}," threshold)"))),M>0?E.createElement(_,{marginBottom:1},E.createElement(y,{dimColor:true},"Compaction in: "),E.createElement(y,{color:"cyan"},g(M)),E.createElement(y,{dimColor:true}," tokens")):E.createElement(_,{marginBottom:1},E.createElement(y,{color:"red",bold:true},"\u26A0\uFE0F Compaction threshold reached!")),E.createElement(_,{flexDirection:"column"},E.createElement(y,{bold:true,dimColor:true},"Context Breakdown:"),E.createElement(f,{color:"magenta",label:"System",tokens:t,total:e}),E.createElement(f,{color:"cyan",label:"User",tokens:n,total:e}),E.createElement(f,{color:"green",label:"Assistant",tokens:s,total:e}),E.createElement(f,{color:"blue",label:"Tool Calls",tokens:o,total:e}),E.createElement(f,{color:"yellow",label:"Tool Results",tokens:i,total:e}),E.createElement(_,{marginTop:1,marginLeft:2},E.createElement(y,{dimColor:true},"Usage: "),E.createElement(y,{color:h(T)},"\u2588".repeat(Math.floor(T*20))),E.createElement(y,{dimColor:true},"\u2591".repeat(20-Math.floor(T*20))))))};var Pb=[{name:"/help",description:"\u663E\u793A\u5E2E\u52A9\u4FE1\u606F",category:"\u57FA\u7840"},{name:"/clear",description:"\u6E05\u7A7A\u5C4F\u5E55",category:"\u57FA\u7840"},{name:"/exit",description:"\u9000\u51FA\u7A0B\u5E8F",category:"\u57FA\u7840"},{name:"/mode",description:"\u5207\u6362 ask/agent \u6A21\u5F0F",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/collab",description:"\u534F\u4F5C\u6A21\u5F0F\u914D\u7F6E",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/thinking",description:"\u601D\u8003\u6A21\u5F0F\u5F00\u5173",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/approval",description:"\u5BA1\u6279\u6A21\u5F0F\u5F00\u5173",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/sandbox",description:"\u6C99\u76D2\u6A21\u5F0F\u8BBE\u7F6E",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/provider",description:"\u7BA1\u7406 AI \u670D\u52A1\u5546",category:"AI",hasSubMenu:true},{name:"/model",description:"\u7BA1\u7406\u6A21\u578B",category:"AI",hasSubMenu:true},{name:"/sessions",description:"\u67E5\u770B\u6240\u6709\u4F1A\u8BDD",category:"\u4F1A\u8BDD"},{name:"/session",description:"\u5207\u6362\u4F1A\u8BDD",category:"\u4F1A\u8BDD",hasSubMenu:true},{name:"/session-new",description:"\u521B\u5EFA\u65B0\u4F1A\u8BDD",category:"\u4F1A\u8BDD"},{name:"/session-info",description:"\u5F53\u524D\u4F1A\u8BDD\u4FE1\u606F",category:"\u4F1A\u8BDD"},{name:"/checkpoint",description:"\u521B\u5EFA\u68C0\u67E5\u70B9",category:"\u4F1A\u8BDD"},{name:"/checkpoints",description:"\u67E5\u770B\u68C0\u67E5\u70B9\u5217\u8868",category:"\u4F1A\u8BDD"},{name:"/rollback",description:"\u56DE\u6EDA\u5230\u68C0\u67E5\u70B9",category:"\u4F1A\u8BDD",hasSubMenu:true},{name:"/undo",description:"\u64A4\u9500\u64CD\u4F5C",category:"\u4F1A\u8BDD"},{name:"/compact",description:"\u538B\u7F29\u4E0A\u4E0B\u6587",category:"\u4F1A\u8BDD"},{name:"/processes",description:"\u67E5\u770B\u540E\u53F0\u8FDB\u7A0B",category:"\u8FDB\u7A0B"},{name:"/ps",description:"\u67E5\u770B\u540E\u53F0\u8FDB\u7A0B (\u7B80\u5199)",category:"\u8FDB\u7A0B"},{name:"/kill",description:"\u7EC8\u6B62\u8FDB\u7A0B",category:"\u8FDB\u7A0B",hasSubMenu:true},{name:"/attach",description:"\u6DFB\u52A0\u9644\u4EF6",category:"\u5DE5\u5177"},{name:"/attachments",description:"\u67E5\u770B\u9644\u4EF6",category:"\u5DE5\u5177"},{name:"/workspace",description:"\u5DE5\u4F5C\u533A\u7BA1\u7406",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/mcp",description:"MCP \u670D\u52A1\u5668\u7BA1\u7406",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/context",description:"\u4E0A\u4E0B\u6587\u7BA1\u7406",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/memory",description:"\u5185\u5B58\u8BCA\u65AD",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/remote",description:"\u8FDC\u7A0B\u670D\u52A1",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/index",description:"\u7D22\u5F15\u7BA1\u7406",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/stats",description:"\u4F1A\u8BDD\u7EDF\u8BA1",category:"\u7EDF\u8BA1"},{name:"/statistic",description:"Token \u4F7F\u7528\u7EDF\u8BA1",category:"\u7EDF\u8BA1",hasSubMenu:true},{name:"/config-clear",description:"\u6E05\u9664\u914D\u7F6E",category:"\u914D\u7F6E"},{name:"/config-reset",description:"\u91CD\u7F6E\u914D\u7F6E",category:"\u914D\u7F6E"},{name:"/notify",description:"\u901A\u77E5\u8BBE\u7F6E",category:"\u914D\u7F6E",hasSubMenu:true}],cE=({isVisible:r,filter:e="",onSelect:t,onCancel:n})=>{let[s,o]=useState(0),[i,a]=useState(0),l=10,c=e&&e!=="/"?Pb.filter(m=>m.name.toLowerCase().includes(e.toLowerCase())||m.description.toLowerCase().includes(e.toLowerCase())):Pb;if(useEffect(()=>{o(0),a(0);},[e]),useEffect(()=>{s<i?a(s):s>=i+l&&a(s-l+1);},[s]),Xe((m,g)=>{if(r){if(g.escape){n();return}if(g.upArrow){o(h=>h>0?h-1:c.length-1);return}if(g.downArrow){o(h=>h<c.length-1?h+1:0);return}if(g.pageUp||g.ctrl&&m==="u"){o(h=>Math.max(0,h-l));return}if(g.pageDown||g.ctrl&&m==="d"){o(h=>Math.min(c.length-1,h+l));return}if(g.return){c.length>0&&t(c[s].name);return}if(g.tab){c.length>0&&t(c[s].name+" ");return}}},{isActive:r}),!r||c.length===0)return null;let u=c.slice(i,i+l),d=E.useMemo(()=>u.map((m,g)=>{let f=i+g===s;return E.createElement(_,{key:m.name},E.createElement(y,{color:f?"cyan":"white"},f?"\u203A ":" "),E.createElement(y,{color:f?"cyan":"white",bold:f},"\u25CF ",m.name),E.createElement(y,{color:f?"cyan":"gray"}," ","- ",m.description))}),[u,i,s]);return E.createElement(_,{flexDirection:"column",paddingLeft:0},E.createElement(y,{color:"cyan",bold:true},"\u547D\u4EE4\u83DC\u5355"),E.createElement(y,{dimColor:true},"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88"),i>0&&E.createElement(y,{dimColor:true}," \u2191 \u66F4\u591A..."),d,i+l<c.length&&E.createElement(y,{dimColor:true}," \u2193 \u66F4\u591A..."),E.createElement(y,{dimColor:true},"\u2500".repeat(40)),E.createElement(y,{dimColor:true},c.length," \u4E2A\u547D\u4EE4 \xB7 \u7B2C ",Math.floor(i/l)+1,"/",Math.ceil(c.length/l)," \u9875"))},Rb=E.memo(cE,(r,e)=>r.isVisible===e.isVisible&&r.filter===e.filter&&r.onSelect===e.onSelect&&r.onCancel===e.onCancel);re();var uE=({inputValue:r,isRunning:e,statusText:t="",tokenStats:n,streamingTokens:s=0,streamingStartTime:o=null,accumulatedRunTime:i=0,provider:a,model:l,customHints:c,attachments:u=[],multiline:d=false,completions:m=[],menuActive:g=false,promptActive:h=false,promptMessage:f,promptHint:b,promptOnCancel:v,thinkingEnabled:C=true,contextMenuActive:T=false,compressionMode:I="sync",compactionThreshold:M=.85,agentContextStats:D=[],runMode:R="single",networkStats:L,cooperateStats:S,currentPlanSteps:k=[],onInputChange:w,onSubmit:A,onInterrupt:O,onExit:z,onHistoryUp:P,onHistoryDown:B,onTabComplete:F,onRemoveAttachment:U,onContextMenuToggle:H,onAgentContextScreenToggle:se,onPasteImage:G,onShowInterruptInput:W})=>{let{columns:ce}=Ws(),V=r==="/"||r.startsWith("/")&&!r.includes(" "),ve=E.useCallback(X=>{X.endsWith(" ")?w(X.trim()):(w(""),setTimeout(()=>{A(X);},0));},[w,A]),Z=E.useCallback(()=>{w("");},[w]);return Xe((X,Y)=>{if(process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","BottomBar useInput",{key:Y,input:X,menuActive:g,promptActive:h,isRunning:e,inputValue:r.substring(0,20)}),!g){if(e&&X==="i"&&!Y.ctrl&&!Y.meta&&W){p.debug("INK_INPUT",'Interrupt input triggered with "i" key'),W();return}if(Y.ctrl&&X==="g"&&se){se();return}if(Y.ctrl&&X==="z"){process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","Ctrl+Z blocked (prevents suspension)");return}if(Y.escape){let J=!X||X==="\x1B"||X==="";if(p.info("INK_INPUT",`ESC detected: isRealEscape=${J}, input=${JSON.stringify(X)}, isRunning=${e}`),!J){p.debug("INK_INPUT","Ignoring escape sequence (not real ESC key)");return}if(T&&H){H();return}if(h&&v){v(),w("");return}e?(p.info("INK_INPUT","\u{1F6D1} User pressed ESC to interrupt task"),O()):r&&w("");return}Y.ctrl&&X==="c"&&(process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","Ctrl+C pressed",{isRunning:e}),e?O():(p.info("INK_INPUT","\u26A0\uFE0F Ctrl+C pressed - exiting"),z()));}},{isActive:true}),E.createElement(_,{flexDirection:"column"},h&&f&&E.createElement(_,{paddingX:2,paddingY:1},E.createElement(y,{color:"cyan",bold:true},f)),h&&b&&E.createElement(_,{paddingX:2,paddingBottom:1},E.createElement(y,{dimColor:true},b)),!h&&E.createElement(Sb,{isRunning:e,statusText:t,tokenStats:n,streamingTokens:s,streamingStartTime:o,provider:a,model:l,onContextMenuToggle:H,agentContextStats:D,runMode:R,networkStats:L,cooperateStats:S}),!h&&E.createElement(Ib,{planSteps:k,isRunning:e}),u.length>0&&E.createElement(_b,{attachments:u,onRemove:U}),E.createElement(_,{flexDirection:"column"},E.createElement(y,{color:"gray"},"\u2500".repeat(ce)),E.createElement(Tb,{value:r,placeholder:h?b||"Type your answer...":e?"Enter to interrupt and send...":"Type a message...",disabled:g,multiline:d,completions:[],menuActive:g,slashMenuActive:V,imageCount:u.length,onChange:w,onSubmit:X=>A(X??r),onHistoryUp:P,onHistoryDown:B,onTabComplete:F,onPasteImage:G,onRemoveLastAttachment:U?()=>U(u.length-1):void 0}),E.createElement(y,{color:"gray"},"\u2500".repeat(ce))),V&&!g&&!e&&E.createElement(Rb,{isVisible:true,filter:r,onSelect:ve,onCancel:Z}),!h&&E.createElement(kb,{isRunning:e,hasInput:r.length>0,customHints:c,menuActive:g,thinkingEnabled:C,accumulatedRunTime:i,provider:a,model:l,runMode:R}),T&&n?.contextWindow&&H&&E.createElement(Eb,{contextWindow:n.contextWindow,tokensUsed:n.tokensUsedForContext||n.total,systemTokens:n.systemTokens,userTokens:n.userTokens,assistantTokens:n.assistantTokens,toolCallTokens:n.toolCallTokens,toolResultTokens:n.toolResultTokens,compressionMode:I,compactionThreshold:M,agentContextStats:D,runMode:R,networkStats:L,onClose:H}))},Db=E.memo(uE);var Bp=({message:r,choices:e,initialIndex:t=0,hint:n,maxVisible:s=20,onSelect:o,onCancel:i,onExit:a})=>{let[l,c]=useState(t),[u,d]=useState(0),[m,g]=useState(null);useEffect(()=>{c(t);},[t]),useEffect(()=>{let v=setTimeout(()=>{g(Date.now());},200);return ()=>clearTimeout(v)},[]),useEffect(()=>{if(e.length<=s){d(0);return}l<u?d(l):l>=u+s&&d(l-s+1);},[l,e.length,s,u]),Xe((v,C)=>{if(C.ctrl&&v==="c"&&a){process.nextTick(()=>a());return}if(C.escape&&i){process.nextTick(()=>i());return}if(C.upArrow){c(T=>T>0?T-1:e.length-1);return}if(C.downArrow){c(T=>T<e.length-1?T+1:0);return}if(C.return){if(!m)return;process.nextTick(()=>o(e[l].value));return}});let h=Math.min(e.length,s),f=u>0,b=u+h<e.length;return E.createElement(_,{flexDirection:"column"},r&&E.createElement(_,{marginBottom:1,paddingX:2},E.createElement(y,{bold:true,color:"cyan"},r)),n&&E.createElement(_,{marginBottom:1,paddingX:2},E.createElement(y,{dimColor:true},n)),f&&E.createElement(_,{paddingX:2},E.createElement(y,{dimColor:true}," \u2191 more")),e.slice(u,u+h).map((v,C)=>{let T=u+C,I=T===l,M=I?"\u276F ":" ";return E.createElement(_,{key:`${v.value}-${T}`,flexDirection:"row",paddingX:2},E.createElement(y,{color:I?"cyan":void 0,bold:I},M,v.label),v.description&&E.createElement(y,{dimColor:true}," - ",v.description))}),b&&E.createElement(_,{paddingX:2},E.createElement(y,{dimColor:true}," \u2193 more")))};var Lb=({onSubmit:r,onCancel:e})=>{let[t,n]=useState(""),[s,o]=useState(0),i=t.length-s;Xe((u,d)=>{if(d.escape){e();return}if(d.return){let m=t.trim();m&&r(m);return}if(d.backspace||d.delete){if(s===t.length)return;let m=i-1,g=t.slice(0,m)+t.slice(m+1);n(g);return}if(d.leftArrow){o(Math.min(s+1,t.length));return}if(d.rightArrow){o(Math.max(s-1,0));return}if(d.home||d.ctrl&&u==="a"){o(t.length);return}if(d.end||d.ctrl&&u==="e"){o(0);return}if(!d.ctrl&&!d.meta&&u){let m=t.slice(0,i)+u+t.slice(i);n(m);return}},{isActive:true});let a=t.slice(0,i),l=t[i]||" ",c=t.slice(i+1);return E.createElement(_,{flexDirection:"column",borderStyle:"double",borderColor:"yellow",paddingX:2,paddingY:1,width:"80%"},E.createElement(_,{marginBottom:1,justifyContent:"center"},E.createElement(y,{bold:true,color:"yellow"},"\u2728 \u63D2\u961F\u6D88\u606F - \u5C06\u5728\u4E0B\u6B21\u8BF7\u6C42\u65F6\u53D1\u9001")),E.createElement(_,{flexDirection:"column"},E.createElement(y,{dimColor:true},"\u8F93\u5165\u4F60\u7684\u6D88\u606F:"),E.createElement(_,{marginTop:1},E.createElement(y,{color:"green",bold:true},"\u276F "),t?E.createElement(y,null,a,E.createElement(y,{inverse:true},l),c):E.createElement(_,null,E.createElement(y,{inverse:true}," "),E.createElement(y,{dimColor:true},"\u8F93\u5165\u6D88\u606F...")))),E.createElement(_,{marginTop:1,justifyContent:"space-between"},E.createElement(y,{dimColor:true},"Enter: \u786E\u8BA4"),E.createElement(y,{dimColor:true},"ESC: \u53D6\u6D88")))};var no=r=>r>=1e6?`${(r/1e6).toFixed(1)}M`:r>=1e3?`${(r/1e3).toFixed(1)}K`:String(r),dE=r=>{switch(r){case "running":return {icon:"\u25CF",color:"green"};case "waiting":return {icon:"\u25D0",color:"yellow"};case "completed":return {icon:"\u2713",color:"blue"};case "error":return {icon:"\u2717",color:"red"};default:return {icon:"\u25CB",color:"gray"}}},$b=({agentContextStats:r,onClose:e})=>{let{columns:t}=Ws();Xe((s,o)=>{(o.escape||s==="q")&&e();},{isActive:true});let n=[...r].sort((s,o)=>s.agentId==="Main"?-1:o.agentId==="Main"?1:s.agentLabel.localeCompare(o.agentLabel));return E.createElement(_,{flexDirection:"column",width:"100%"},E.createElement(_,{justifyContent:"space-between"},E.createElement(y,{bold:true,color:"cyan"},"Agent Context Overview"),E.createElement(y,{dimColor:true},"ESC to close")),E.createElement(y,{color:"gray"},"\u2500".repeat(Math.max(t,10))),n.length===0?E.createElement(y,{dimColor:true},"No agent context stats available."):n.map(s=>{let o=s.contextWindow||0,i=s.tokensUsedForContext||0,a=o>0?i/o:0,l=Math.round(a*100),{icon:c,color:u}=dE(s.status),d=s.currentTask?s.currentTask.length>40?`${s.currentTask.slice(0,37)}...`:s.currentTask:"";return E.createElement(_,{key:s.agentId,justifyContent:"space-between",marginTop:1},E.createElement(_,null,E.createElement(y,{color:"magenta"},s.agentLabel),E.createElement(y,{dimColor:true}," "),E.createElement(y,{color:u},c),d&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," "),E.createElement(y,{dimColor:true},d))),E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},no(s.input)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},no(s.output)),(s.cacheCreationTokens||s.cacheReadTokens)&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," cache-w "),E.createElement(y,{color:"magenta"},no(s.cacheCreationTokens||0)),E.createElement(y,{dimColor:true}," cache-r "),E.createElement(y,{color:"blue"},no(s.cacheReadTokens||0))),E.createElement(y,{dimColor:true}," \u2502 context "),E.createElement(y,{color:"yellow"},no(i)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},no(o)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:a>.8?"red":a>.5?"yellow":"green"},l,"%"),E.createElement(y,{dimColor:true},")")))}),E.createElement(y,{color:"gray"},"\u2500".repeat(Math.max(t,10))),E.createElement(y,{dimColor:true},"Tip: Press Q or ESC to return"))};var Ob=({messages:r})=>r.length===0?null:E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{color:"magenta",bold:true},"\u250C\u2500 "),E.createElement(y,{color:"magenta",bold:true},"Queued (",r.length,")"),E.createElement(y,{color:"magenta",bold:true}," \u2500")),r.map((e,t)=>E.createElement(_,{key:e.id,paddingLeft:1},E.createElement(y,{color:"gray"},"\u2502 "),E.createElement(y,{color:"cyan",bold:true},"> "),E.createElement(y,{color:"white"},e.text.length>70?e.text.substring(0,67)+"...":e.text))),E.createElement(_,null,E.createElement(y,{color:"magenta",bold:true},"\u2514\u2500"),E.createElement(y,{dimColor:true}," Press "),E.createElement(y,{color:"yellow"},"\u2191"),E.createElement(y,{dimColor:true}," to edit queued messages")));Ql();re();var vE=[".png",".jpg",".jpeg",".gif",".webp",".bmp",".svg"],CE=r=>{let e=new WeakSet;try{return JSON.stringify(r,(t,n)=>{if(typeof n=="bigint")return n.toString();if(n instanceof Error)return {name:n.name,message:n.message,stack:n.stack};if(typeof n=="function")return "[Function]";if(typeof n=="object"&&n!==null){if(e.has(n))return "[Circular]";e.add(n);}return n})}catch{try{return String(r)}catch{return "[Unserializable]"}}};function xE(r){if(!r)return false;let e=r.trim(),t=e.toLowerCase(),n=vE.some(o=>t.endsWith(o)),s=e.startsWith("/")||e.startsWith("./")||e.startsWith("~/")||e.includes("/")&&n;return n&&s}var Bb=({staticEntries:r=[],pendingEntries:e=[],isRunning:t,statusText:n="",tokenStats:s,streamingTokens:o=0,streamingStartTime:i=null,accumulatedRunTime:a=0,version:l=ro,provider:c="OpenAI",model:u="gpt-4",workDir:d=process.cwd(),showHeader:m=true,thinkingEnabled:g=true,selectMenuOptions:h=null,textPromptOptions:f=null,contextMenuActive:b=false,agentContextScreenActive:v=false,compressionMode:C="sync",compactionThreshold:T=.85,agentContextStats:I=[],runMode:M="single",networkStats:D,cooperateStats:R,commandOutput:L=[],attachedImages:S=[],interruptInputActive:k=false,queuedMessages:w=[],currentPlanSteps:A=[],getCompletions:O,onStaticRendered:z,onSubmit:P,onInterrupt:B,onExit:F,onContextMenuToggle:U,onAgentContextScreenToggle:H,onClearCommandOutput:se,onAttachImage:G,onClearImages:W,onInterruptInputSubmit:ce,onInterruptInputCancel:V,onShowInterruptInput:ve})=>{let[Z,X]=useState(""),[Y,J]=useState([]),[Q,ee]=useState(-1),[de,N]=useState(null),q=useRef(false),ne=useMemo(()=>!O||!Z.startsWith("/")?[]:O(Z),[Z,O]),le=useContext(br);useEffect(()=>{if(!le?.internal_eventEmitter||!G)return;let K=xe=>{ae("CLI_APP",`\u{1F4CE} Received image-paste event from vendor Ink: ${xe.name}`),G(xe);};return le.internal_eventEmitter.on("image-paste",K),()=>{le.internal_eventEmitter.off("image-paste",K);}},[le,G]),useEffect(()=>{f?.defaultValue&&X(f.defaultValue);},[f?.defaultValue]),Xe((K,xe)=>{if(xe.escape){if(v)return;de?N(null):L.length>0&&se&&se();}},{isActive:!h&&!de});let ke=e.filter(K=>K.type!=="thinking"&&K.type!=="reasoning"),$e=K=>{if(!K)return false;let{content:xe}=K;return typeof xe=="string"?xe.trim().length>0:Array.isArray(xe)?xe.some(he=>{if(!he||typeof he!="object"||!("type"in he))return false;switch(he.type){case "text":return typeof he.text=="string"&&he.text.trim().length>0;case "image_url":return true;case "tool_use":return true;case "tool_result":return he.content!==null&&he.content!==void 0&&String(he.content).trim().length>0;case "thinking":return typeof he.thinking=="string"&&he.thinking.trim().length>0;case "redacted_thinking":return typeof he.data=="string"&&he.data.trim().length>0;default:return true}}):false},j=K=>{if(K.message){let _o=$e(K.message);if(K.type==="user"&&!_o&&process.env.CLI_DEBUG==="1"){let Io=CE(K.message.content).slice(0,100);ae("APP",`User message filtered out! entry.id=${K.id}, message.role=${K.message.role}, content=${Io}`);}return _o}let xe=typeof K.text=="string"&&K.text.trim().length>0,he=K.type==="plan"&&!!K.planSteps&&K.planSteps.length>0,et=(K.type==="pipeline_node_start"||K.type==="pipeline_node_complete"||K.type==="pipeline_node_fail"||K.type==="pipeline_node_retry")&&(K.pipelineNode||K.pipelineNodeRetry),Bs=(K.type==="network_node_start"||K.type==="network_node_complete"||K.type==="network_node_fail")&&K.networkNode,ma=(K.type==="ccb_review"||K.type==="ccb_agent_review"||K.type==="ccb_retry"||K.type==="ccb_failed")&&!!(K.ccbReview||K.ccbAgentReview||K.ccbRetry||K.ccbFailed),ga=K.type==="pipeline_dag"&&!!K.pipelineDAG;return !!(xe||he||et||Bs||ma||ga)},te=useMemo(()=>ke.filter(j),[ke]),ie=useMemo(()=>{let K=r.filter(j);return process.env.CLI_DEBUG==="1"&&ae("APP",`visibleStaticEntries: staticEntries=${r.length}, visible=${K.length}, types=${K.map(xe=>xe.type).join(",")}`),K},[r]),Ee=m&&!q.current,Ne=E.useCallback((K,xe)=>K,[]),Le=useMemo(()=>{let K=[],xe=ie.length+te.length;return Ee&&K.push(E.createElement(ob,{key:"header",version:l,provider:c,model:u,workDir:d})),ie.forEach((he,et)=>{K.push(E.createElement(Lp,{key:`static-entry-${he.id}`,entry:he})),(et<ie.length-1||xe>ie.length)&&K.push(E.createElement(y,{key:`static-spacer-${he.id}`},""));}),K},[Ee,ie,te.length,l,c,u,d]);if(useEffect(()=>{!Ee&&r.length===0||(Ee&&(q.current=true),z?.());},[Ee,r.length,z]),v)return E.createElement($b,{agentContextStats:I,onClose:()=>H?.()});let _e=K=>{if(f){if(!K.trim()&&!f.allowEmpty)return;f.onSubmit(K),X("");return}let xe=S.length>0,he=K.trim().length>0;(he||xe)&&(he&&J([...Y,K]),ee(-1),X(""),P(K,xe?S:void 0));},Rt=()=>{if(Y.length===0)return;let K=Q+1;K<Y.length&&(ee(K),X(Y[Y.length-1-K]));},Fe=()=>{if(Q<=0){ee(-1),X("");return}let K=Q-1;ee(K),X(Y[Y.length-1-K]);},Me=K=>{if(!O)return null;let xe=O(K);if(xe.length===0)return null;if(xe.length===1)return xe[0];let he=xe.map(et=>({label:et,value:et,description:void 0}));return N({message:"Select completion:",choices:he,initialIndex:0,onSelect:et=>{X(et),N(null);},onCancel:()=>{N(null);}}),null};return E.createElement(_,{flexDirection:"column",width:"100%"},E.createElement(Fa,{items:Le},Ne),te.map((K,xe)=>E.createElement(_,{key:`pending-wrapper-${K.id}`,flexDirection:"column"},E.createElement(Lp,{entry:K}),xe<te.length-1&&E.createElement(y,null,""))),E.createElement(y,null,`
|
|
1691
|
-
`),k&&ce&&V?E.createElement(_,{flexShrink:0,flexDirection:"column"},E.createElement(Lb,{onSubmit:ce,onCancel:V})):E.createElement(_,{flexShrink:0,flexDirection:"column"},w.length>0&&E.createElement(Ob,{messages:w}),E.createElement(Db,{inputValue:Z,isRunning:t,statusText:n,tokenStats:s,streamingTokens:o,streamingStartTime:i,accumulatedRunTime:a,provider:c,model:u,menuActive:!!h||!!de,promptActive:!!f,promptMessage:f?.message,promptHint:f?.hint,promptOnCancel:f?.onCancel,thinkingEnabled:g,contextMenuActive:b,compressionMode:C,compactionThreshold:T,agentContextStats:I,runMode:M,networkStats:D,cooperateStats:R,currentPlanSteps:A,attachments:S,completions:ne,onInputChange:K=>{if(G&&xE(K)){G(K.trim());return}X(K);},onSubmit:_e,onInterrupt:B,onExit:F,onHistoryUp:Rt,onHistoryDown:Fe,onTabComplete:Me,onContextMenuToggle:U,onAgentContextScreenToggle:H,onRemoveAttachment:W?K=>{W();}:void 0,onPasteImage:G,onShowInterruptInput:ve}),h&&E.createElement(Bp,{message:h.message,choices:h.choices,initialIndex:h.initialIndex,hint:h.hint,onSelect:h.onSelect,onCancel:h.onCancel,onExit:F}),de&&E.createElement(Bp,{message:de.message,choices:de.choices,initialIndex:de.initialIndex,hint:de.hint,onSelect:de.onSelect,onCancel:de.onCancel,onExit:F}),L.length>0&&E.createElement(_,{flexDirection:"column",paddingX:2,paddingY:1,borderStyle:"round",borderColor:"gray"},L.map((K,xe)=>E.createElement(y,{key:xe},K)))))};re();ps();var tc=class r{appInstance=null;messages=[];staticEntries=[];nextEntryId=1;isRunning=false;statusText="";tokenStats={input:0,output:0,total:0,contextWindow:void 0,tokensUsedForContext:0,pressure:0};version="";provider="";model="";workDir="";showHeader=true;thinkingEnabled=true;callbacks;forceUpdate=null;selectMenuOptions=null;textPromptOptions=null;contextMenuActive=false;agentContextScreenActive=false;commandOutput=[];getCompletions;memoryLogTimer=null;ttyWriteGuardActive=false;allowTTYWriteDepth=0;originalStdoutWrite=null;originalStderrWrite=null;inkStdout=null;attachedImages=[];pendingEntries=[];getPendingMessages=null;interruptInputActive=false;runMode="single";streamingTokens=0;streamingStartTime=null;accumulatedRunTime=0;runningStartTime=null;compressionMode="sync";compactionThreshold=.85;agentContextStats=new Map;networkStats=null;cooperateStats=null;currentPlanSteps=[];static MAX_QUEUED_STATIC=50;constructor(e){this.callbacks=e;}setCompletionFunction(e){this.getCompletions=e;}start(){p.info("INK","Starting Ink runtime"),this.startMemorySampler();let e=()=>{let[,s]=useState(0);return useLayoutEffect(()=>(this.forceUpdate=()=>{let o=Date.now();p.debug("RUNTIME",`>>> forceUpdate called, staticEntries=${this.staticEntries.length}, pendingEntries=${this.pendingEntries.length}`),s(a=>a+1);let i=Date.now()-o;i>50&&p.warn("RUNTIME",`\u26A0\uFE0F forceUpdate slow: setCounter took ${i}ms`);},()=>{this.forceUpdate=null;}),[]),E.createElement(Bb,{staticEntries:this.staticEntries,pendingEntries:this.pendingEntries,isRunning:this.isRunning,statusText:this.statusText,tokenStats:this.tokenStats,streamingTokens:this.streamingTokens,streamingStartTime:this.streamingStartTime,accumulatedRunTime:this.accumulatedRunTime,compressionMode:this.compressionMode,compactionThreshold:this.compactionThreshold,agentContextStats:this.getAgentContextStats(),runMode:this.runMode,networkStats:this.networkStats||void 0,cooperateStats:this.cooperateStats||void 0,currentPlanSteps:this.currentPlanSteps,version:this.version,provider:this.provider,model:this.model,workDir:this.workDir,showHeader:this.showHeader,thinkingEnabled:this.thinkingEnabled,selectMenuOptions:this.selectMenuOptions,textPromptOptions:this.textPromptOptions,contextMenuActive:this.contextMenuActive,agentContextScreenActive:this.agentContextScreenActive,commandOutput:this.commandOutput,attachedImages:this.attachedImages,interruptInputActive:this.interruptInputActive,queuedMessages:this.getQueuedMessagesForDisplay(),getCompletions:this.getCompletions,onStaticRendered:void 0,onSubmit:(o,i)=>{let a=i||this.attachedImages;this.attachedImages=[],this.callbacks.onSubmit(o,a);},onInterrupt:this.callbacks.onInterrupt,onExit:this.callbacks.onExit,onContextMenuToggle:()=>{this.contextMenuActive=!this.contextMenuActive,this.forceUpdate?.();},onAgentContextScreenToggle:()=>{this.agentContextScreenActive=!this.agentContextScreenActive,this.forceUpdate?.();},onClearCommandOutput:()=>{this.clearCommandOutput();},onAttachImage:o=>{this.attachImage(o);},onClearImages:()=>{this.clearAttachedImages();},onInterruptInputSubmit:o=>{this.handleInterruptInputSubmit(o);},onInterruptInputCancel:()=>{this.hideInterruptInput();},onShowInterruptInput:()=>{this.showInterruptInput();}})},t=Ve();t&&p.info("INK","WSL detected, disabling incremental rendering for compatibility");let n=this.installTTYWriteGuard();this.appInstance=Tr(E.createElement(e,null),{stdout:n,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false,incrementalRendering:!t}),t&&setTimeout(()=>{this.forceUpdate&&(p.debug("INK","WSL startup render nudge"),this.forceUpdate());},0);try{process.stdout.isTTY&&!process.stdout.destroyed&&(this.writeDirectStdout("\x1B[?2004h"),p.info("INK","Bracketed paste mode enabled for image paste detection"));}catch(s){p.warn("INK","Failed to enable bracketed paste mode",{error:s});}try{p.debug("TTY_STATE","\u{1F6E1}\uFE0F [INK] Re-registering SIGTSTP ignore handler after Ink starts"),process.removeAllListeners("SIGTSTP"),process.on("SIGTSTP","ignore"),p.debug("TTY_STATE","\u2705 [INK] SIGTSTP handler re-registered (Ctrl+Z ignored)"),process.env.CLI_DEBUG==="1"&&p.debug("INK","SIGTSTP handler registered (Ctrl+Z ignored)");}catch{p.debug("TTY_STATE","\u26A0\uFE0F [INK] SIGTSTP not supported on this platform"),process.env.CLI_DEBUG==="1"&&p.debug("INK","SIGTSTP not supported on this platform");}p.info("INK","Ink runtime started");}stop(){try{process.stdout.isTTY&&!process.stdout.destroyed&&(this.writeDirectStdout("\x1B[?2004l"),p.debug("INK","Bracketed paste mode disabled"));}catch(e){p.debug("INK","Failed to disable bracketed paste mode (ignored)",{error:e});}this.appInstance&&(this.appInstance.unmount(),this.appInstance=null,p.info("INK","Ink runtime stopped")),this.restoreTTYWriteGuard(),this.stopMemorySampler();}installTTYWriteGuard(){if(this.ttyWriteGuardActive)return this.inkStdout??process.stdout;this.originalStdoutWrite=process.stdout.write.bind(process.stdout),this.originalStderrWrite=process.stderr.write.bind(process.stderr);let e=t=>(n,s,o)=>{if(typeof s=="function"&&(o=s,s=void 0),this.allowTTYWriteDepth>0){let i=t==="stdout"?this.originalStdoutWrite:this.originalStderrWrite;if(i)return i(n,s,o)}return this.handleSuppressedWrite(t,n),typeof o=="function"&&o(),true};return process.stdout.write=e("stdout"),process.stderr.write=e("stderr"),this.inkStdout=this.createInkStdoutProxy(),this.ttyWriteGuardActive=true,p.info("INK","TTY output guard enabled"),this.inkStdout}restoreTTYWriteGuard(){this.ttyWriteGuardActive&&(this.originalStdoutWrite&&(process.stdout.write=this.originalStdoutWrite),this.originalStderrWrite&&(process.stderr.write=this.originalStderrWrite),this.ttyWriteGuardActive=false,this.inkStdout=null,p.info("INK","TTY output guard disabled"));}createInkStdoutProxy(){let e=process.stdout,t=this.originalStdoutWrite||e.write.bind(e);return new Proxy(e,{get:(n,s,o)=>{if(s==="write")return (a,l,c)=>this.withDirectTTYWrite(()=>t(a,l,c));let i=Reflect.get(n,s,o);return typeof i=="function"?i.bind(n):i}})}withDirectTTYWrite(e){this.allowTTYWriteDepth+=1;try{return e()}finally{this.allowTTYWriteDepth=Math.max(0,this.allowTTYWriteDepth-1);}}writeDirectStdout(e){let t=this.originalStdoutWrite||process.stdout.write.bind(process.stdout);this.withDirectTTYWrite(()=>{t(e);});}handleSuppressedWrite(e,t){if(t==null)return;let n="";if(typeof t=="string")n=t;else if(Buffer.isBuffer(t))n=t.toString("utf8");else try{n=String(t);}catch{return}if(!n||n.trim().length===0)return;let s=n.length>2e3?`${n.slice(0,2e3)}...`:n;p.warn("TTY_SUPPRESS",`[${e}] ${s}`);}addMessage(e){this.messages=[...this.messages.slice(-4),e],this.forceUpdate?.();}addEntry(e){let t={...e,id:this.nextEntryId++,timestamp:new Date};if(e.type==="user"){let n=!!e.message,s=e.message?.content;p.debug("INK_RUNTIME",`[addEntry] user entry id=${t.id}, hasMessage=${n}, contentType=${typeof s}, isArray=${Array.isArray(s)}`);}return this.staticEntries.length>=r.MAX_QUEUED_STATIC&&(p.warn("INK_RUNTIME",`Static queue reached limit (${this.staticEntries.length}). Forcing immediate render to prevent OOM.`),this.forceUpdate?.(),setImmediate(()=>{this.clearStaticEntries();})),this.staticEntries=[...this.staticEntries,t],p.debug("INK_RUNTIME",`Queued static entry ${t.id}. Pending static: ${this.staticEntries.length}, type: ${e.type}, forceUpdate: ${!!this.forceUpdate}`),this.forceUpdate?this.forceUpdate():setImmediate(()=>{this.forceUpdate?.();}),t.id}updateEntry(e,t){let n=this.staticEntries.findIndex(o=>o.id===e);if(n>=0){this.staticEntries=this.staticEntries.map((o,i)=>i===n?{...o,...t}:o),this.forceUpdate?.();return}let s=this.pendingEntries.findIndex(o=>o.id===e);s>=0&&(this.pendingEntries=this.pendingEntries.map((o,i)=>i===s?{...o,...t}:o),this.forceUpdate?.());}getEntry(e){return this.staticEntries.find(t=>t.id===e)||this.pendingEntries.find(t=>t.id===e)}addPendingEntry(e){let t={...e,id:this.nextEntryId++,timestamp:new Date};if(this.pendingEntries.length>=10){p.warn("INK_RUNTIME",`Too many pending entries (${this.pendingEntries.length}). Auto-committing oldest.`);let s=this.pendingEntries[0];this.staticEntries=[...this.staticEntries,s],this.pendingEntries=this.pendingEntries.slice(1);}return this.pendingEntries=[...this.pendingEntries,t],p.debug("INK_RUNTIME",`Added pending entry ${t.id}. Pending: ${this.pendingEntries.length}`),this.forceUpdate?.(),t.id}updatePendingEntry(e,t){let n=this.pendingEntries.findIndex(s=>s.id===e);n>=0&&(this.pendingEntries=this.pendingEntries.map((s,o)=>o===n?{...s,...t}:s),this.forceUpdate?.());}updatePendingEntryByKey(e,t){let n=this.pendingEntries.findIndex(s=>s.entryKey===e);if(n>=0)this.pendingEntries=this.pendingEntries.map((s,o)=>o===n?{...s,...t,entryKey:e,timestamp:new Date}:s);else {let s={...t,entryKey:e,id:this.nextEntryId++,timestamp:new Date};this.pendingEntries=[...this.pendingEntries,s];}this.forceUpdate?.();}commitPendingEntryByKey(e){let t=this.pendingEntries.findIndex(n=>n.entryKey===e);if(t>=0){let n=this.pendingEntries[t];return this.pendingEntries=this.pendingEntries.filter((s,o)=>o!==t),this.staticEntries=[...this.staticEntries,{...n,isStreaming:false,isComplete:true}],p.debug("INK_RUNTIME",`Committed entry by key ${e}. Static: ${this.staticEntries.length}, Pending: ${this.pendingEntries.length}`),this.forceUpdate?.(),true}return false}commitPendingEntry(e){let t=this.pendingEntries.findIndex(n=>n.id===e);if(t>=0){let n=this.pendingEntries[t];this.pendingEntries=this.pendingEntries.filter((s,o)=>o!==t),this.staticEntries=[...this.staticEntries,n],p.debug("INK_RUNTIME",`Committed entry ${e}. Static: ${this.staticEntries.length}, Pending: ${this.pendingEntries.length}`),this.forceUpdate?.();}else p.warn("INK_RUNTIME",`Cannot commit entry ${e} - not found in pending entries`);}clearPendingEntries(){this.pendingEntries.length>0&&(this.pendingEntries=[],this.forceUpdate?.());}commitAllPendingEntries(){if(this.pendingEntries.length>0){let e=this.pendingEntries.map(t=>({...t,isStreaming:false,isComplete:true}));this.staticEntries=[...this.staticEntries,...e],this.pendingEntries=[],p.debug("INK_RUNTIME",`Committed ${e.length} pending entries on run complete`),this.forceUpdate?.();}}updateStreamingStats(e){this.streamingTokens=e,this.streamingStartTime||(this.streamingStartTime=Date.now()),this.forceUpdate?.();}resetStreamingStats(){this.streamingTokens=0,this.streamingStartTime=null;}getAccumulatedRunTime(){if(this.isRunning&&this.runningStartTime!==null){let e=Math.floor((Date.now()-this.runningStartTime)/1e3);return this.accumulatedRunTime+e}return this.accumulatedRunTime}resetAccumulatedRunTime(){this.accumulatedRunTime=0,this.runningStartTime=null,this.forceUpdate?.();}setCompressionMode(e){this.compressionMode!==e&&(this.compressionMode=e,this.forceUpdate?.());}setCompactionThreshold(e){this.compactionThreshold!==e&&(this.compactionThreshold=e,this.forceUpdate?.());}updateAgentContext(e,t){this.agentContextStats.set(e,t),this.forceUpdate?.();}clearAgentContext(e){this.agentContextStats.has(e)&&(this.agentContextStats.delete(e),this.forceUpdate?.());}clearAllAgentContexts(){this.agentContextStats.size>0&&(this.agentContextStats.clear(),this.forceUpdate?.());}getAgentContextStats(){return Array.from(this.agentContextStats.values()).sort((t,n)=>t.agentId==="supervisor"?-1:n.agentId==="supervisor"?1:t.agentId.localeCompare(n.agentId))}updateLastMessage(e){if(this.messages.length===0)return;let t=this.messages[this.messages.length-1];if(typeof t.content=="string")t.content=e;else if(Array.isArray(t.content)){let n=t.content.find(s=>s.type==="text");n&&"text"in n&&(n.text=e);}this.forceUpdate?.();}getLastMessageText(){if(this.messages.length===0)return "";let e=this.messages[this.messages.length-1];if(typeof e.content=="string")return e.content;if(Array.isArray(e.content)){let t=e.content.find(n=>n.type==="text");if(t&&"text"in t)return t.text||""}return ""}setRunning(e){if(this.isRunning!==e){if(e)this.runningStartTime=Date.now();else if(this.runningStartTime!==null){let t=Math.floor((Date.now()-this.runningStartTime)/1e3);this.accumulatedRunTime+=t,this.runningStartTime=null;}this.isRunning=e,this.forceUpdate?.();}}triggerForceUpdate(){this.forceUpdate?.();}setStatusText(e){this.statusText!==e&&(this.statusText=e,this.forceUpdate?.());}setTokenStats(e){p.info("DEBUG_CTX",`InkRuntime.setTokenStats: received contextWindow=${e.contextWindow}, current=${this.tokenStats.contextWindow}`);let t=e.contextWindow!==void 0?e.contextWindow:this.tokenStats.contextWindow;(this.tokenStats.input!==e.input||this.tokenStats.output!==e.output||this.tokenStats.total!==e.total||this.tokenStats.contextWindow!==t||this.tokenStats.tokensUsedForContext!==e.tokensUsedForContext||this.tokenStats.pressure!==e.pressure||this.tokenStats.toolTokens!==e.toolTokens||this.tokenStats.messageTokens!==e.messageTokens||this.tokenStats.systemTokens!==e.systemTokens||this.tokenStats.userTokens!==e.userTokens||this.tokenStats.assistantTokens!==e.assistantTokens||this.tokenStats.toolCallTokens!==e.toolCallTokens||this.tokenStats.toolResultTokens!==e.toolResultTokens||this.tokenStats.cacheCreationTokens!==e.cacheCreationTokens||this.tokenStats.cacheReadTokens!==e.cacheReadTokens)&&(this.tokenStats={...e,contextWindow:t,tokensUsedForContext:e.tokensUsedForContext??this.tokenStats.tokensUsedForContext,pressure:e.pressure??this.tokenStats.pressure},p.info("DEBUG_CTX",`InkRuntime.setTokenStats: after update contextWindow=${this.tokenStats.contextWindow}`),this.forceUpdate?.());}clearMessages(){p.warn("INK_RUNTIME",`clearMessages called! This will clear pending/static queues. Messages: ${this.messages.length}`),this.messages=[],this.staticEntries=[],this.pendingEntries=[],this.forceUpdate?.();}setCommandOutput(e){p.debug("INK_RUNTIME","Set command output",{lineCount:e.length}),this.commandOutput=e,this.forceUpdate?.();}clearCommandOutput(){p.debug("INK_RUNTIME","Clear command output"),this.commandOutput=[],this.forceUpdate?.();}attachImage(e){let t;if(typeof e=="string")if(e.startsWith("data:")){let s=e.match(/^data:([^;]+);base64,(.+)$/);if(s){let o=`image_${Date.now()}.png`;t={mediaType:s[1],data:s[2],name:o};}else {p.error("INK_RUNTIME","Invalid data URL format",{imageData:e});return}}else {let s=e.split("/").pop()||e;t={path:e,name:s};}else t=e;if(this.attachedImages.some(s=>s.path&&t.path&&s.path===t.path||s.data&&t.data&&s.data===t.data)){p.debug("INK_RUNTIME","Image already attached");return}this.attachedImages.push(t),p.info("INK_RUNTIME",`\u{1F4CE} Attached image #${this.attachedImages.length}: ${t.name||"unnamed"}`),this.forceUpdate?.();}clearAttachedImages(){this.attachedImages.length>0&&(p.debug("INK_RUNTIME",`Cleared ${this.attachedImages.length} attached images`),this.attachedImages=[],this.forceUpdate?.());}getAttachedImages(){return [...this.attachedImages]}showInterruptInput(){p.debug("INK_RUNTIME","Show interrupt input"),this.interruptInputActive=true,this.forceUpdate?.();}hideInterruptInput(){p.debug("INK_RUNTIME","Hide interrupt input"),this.interruptInputActive=false,this.forceUpdate?.();}handleInterruptInputSubmit(e){p.debug("INK_RUNTIME","Handle interrupt input submit",{text:e.substring(0,50)}),this.hideInterruptInput(),this.callbacks.onSubmit(e);}setGetPendingMessages(e){this.getPendingMessages=e;}getQueuedMessagesForDisplay(){return this.getPendingMessages?this.getPendingMessages().map((e,t)=>({id:t+1,text:e.text,timestamp:e.timestamp})):[]}hasQueuedMessages(){return this.getPendingMessages?this.getPendingMessages().length>0:false}addAgentSpawnEntry(e,t,n,s){return this.addEntry({type:"agent_spawn",agentId:e,agentIndex:t,agentStatus:"running",agentTask:n,agentModel:s,text:n})}addAgentProgressEntry(e,t,n,s){return this.addEntry({type:"agent_progress",agentId:e,agentIndex:t,agentStatus:"running",agentProgress:n,text:s})}addAgentCompleteEntry(e,t,n){return this.addEntry({type:"agent_complete",agentId:e,agentIndex:t,agentStatus:"completed",text:n})}addAgentErrorEntry(e,t,n){return this.addEntry({type:"agent_error",agentId:e,agentIndex:t,agentStatus:"error",agentError:n,text:n})}setVersion(e){this.version=e,this.forceUpdate?.();}setProvider(e){this.provider=e,this.forceUpdate?.();}setModel(e){this.model=e,this.forceUpdate?.();}setRunMode(e){this.runMode=e,e!=="network"&&(this.networkStats=null),this.forceUpdate?.();}updateNetworkStats(e){this.networkStats||(this.networkStats={teamSize:0,activeAgents:0,totalInputTokens:0,totalOutputTokens:0}),Object.assign(this.networkStats,e),this.forceUpdate?.();}clearNetworkStats(){this.networkStats=null,this.forceUpdate?.();}getNetworkStats(){return this.networkStats}updateCooperateStats(e){this.cooperateStats||(this.cooperateStats={models:[],totalInputTokens:0,totalOutputTokens:0}),Object.assign(this.cooperateStats,e),this.forceUpdate?.();}clearCooperateStats(){this.cooperateStats=null,this.forceUpdate?.();}getCooperateStats(){return this.cooperateStats}setPlanSteps(e){this.currentPlanSteps=e,this.forceUpdate?.();}getPlanSteps(){return this.currentPlanSteps}clearPlanSteps(){this.currentPlanSteps=[],this.forceUpdate?.();}setWorkDir(e){this.workDir=e,this.forceUpdate?.();}setShowHeader(e){this.showHeader=e,this.forceUpdate?.();}setThinkingEnabled(e){this.thinkingEnabled!==e&&(this.thinkingEnabled=e,this.forceUpdate?.());}showSelectMenu(e){if(p.debug("INK_RUNTIME","Show select menu",{options:e}),process.stdin.isTTY&&!process.stdin.destroyed){let t=process.stdin.isPaused?.()||false;process.stdin.isRaw||false;if(t){process.env.CLI_DEBUG==="1"&&p.debug("INK_RUNTIME",`showSelectMenu: Resuming stdin (wasPaused=${t})`);try{process.stdin.resume(),p.info("INK_RUNTIME","\u2713 Stdin resumed for SelectMenu");}catch(s){p.error("INK_RUNTIME","Failed to resume stdin for SelectMenu",{error:s});}}}this.selectMenuOptions=e,this.forceUpdate?.();}hideSelectMenu(){p.debug("INK_RUNTIME","Hide select menu"),this.selectMenuOptions=null,this.forceUpdate?.(),process.nextTick(()=>{this.forceUpdate?.();});}isSelectMenuActive(){return this.selectMenuOptions!==null}updateSelectMenuIndex(e){if(!this.selectMenuOptions)return;let t=Math.max(0,this.selectMenuOptions.choices.length-1),n=Math.max(0,Math.min(e,t));this.selectMenuOptions={...this.selectMenuOptions,initialIndex:n},this.forceUpdate?.();}showTextPrompt(e){if(p.debug("INK_RUNTIME","Show text prompt",{options:e}),process.stdin.isTTY&&!process.stdin.destroyed){let t=process.stdin.isPaused?.()||false;if(t){process.env.CLI_DEBUG==="1"&&p.debug("INK_RUNTIME",`showTextPrompt: Resuming stdin (wasPaused=${t})`);try{process.stdin.resume(),p.info("INK_RUNTIME","\u2713 Stdin resumed for TextPrompt");}catch(n){p.error("INK_RUNTIME","Failed to resume stdin for TextPrompt",{error:n});}}}this.textPromptOptions=e,this.forceUpdate?.();}hideTextPrompt(){p.debug("INK_RUNTIME","Hide text prompt"),this.textPromptOptions=null,this.forceUpdate?.();}showContextMenu(){p.debug("INK_RUNTIME","Show context menu"),this.contextMenuActive=true,this.forceUpdate?.();}hideContextMenu(){p.debug("INK_RUNTIME","Hide context menu"),this.contextMenuActive=false,this.forceUpdate?.();}getContextMenuActive(){return this.contextMenuActive}clearStaticEntries(){if(this.staticEntries.length===0)return;let e=this.staticEntries.length;p.debug("INK_RUNTIME",`Clearing ${e} static entries from memory`),this.staticEntries=[],global.gc&&e>10&&(p.debug("INK_RUNTIME","Triggering manual GC after clearing entries"),setImmediate(()=>{global.gc&&global.gc();}));}startMemorySampler(){this.memoryLogTimer||process.env.INK_MEM!=="1"||(this.memoryLogTimer=setInterval(()=>{let e=process.memoryUsage(),t=n=>Math.round(n/1024/1024*10)/10;p.info("INK_MEM","usage",{rssMB:t(e.rss),heapUsedMB:t(e.heapUsed),heapTotalMB:t(e.heapTotal),externalMB:t(e.external),arrayBuffersMB:t(e.arrayBuffers??0),pendingEntries:this.pendingEntries.length,queuedStatic:this.staticEntries.length,isRunning:this.isRunning});},1e4));}stopMemorySampler(){this.memoryLogTimer&&(clearInterval(this.memoryLogTimer),this.memoryLogTimer=null);}};re();Li();var EE=r=>{let e=new WeakSet;try{return JSON.stringify(r,(t,n)=>{if(typeof n=="bigint")return n.toString();if(n instanceof Error)return {name:n.name,message:n.message,stack:n.stack};if(typeof n=="function")return "[Function]";if(typeof n=="object"&&n!==null){if(e.has(n))return "[Circular]";e.add(n);}return n})}catch{try{return String(r)}catch{return "[Unserializable]"}}},oc=class{runtime;config;callbacks;currentThinkingText="";lastMessageRole=null;lastEntryId=null;tokenStats={inputTokens:0,outputTokens:0,totalTokens:0};memory;streamingTextPendingId=null;streamingReasoningPendingId=null;streamingTextBuffer="";streamingReasoningBuffer="";streamingReasoningType="thinking";streamingToolChars=0;hasInferredThinkingStatus=false;toolLogIdByToolId=new Map;toolLogDetailsByToolId=new Map;toolLogNameByToolId=new Map;toolLogOutputByToolId=new Map;toolLogSourceLabelByToolId=new Map;streamingSourceLabel=null;streamingSourceType=null;agentBuffers=new Map;activeAgentId=null;constructor(e){this.config=e,this.memory=e.memory,this.runtime=new tc({onSubmit:(t,n)=>{this.callbacks?.onSubmit&&this.callbacks.onSubmit(t,n);},onInterrupt:()=>{this.callbacks?.onInterrupt&&this.callbacks.onInterrupt();},onExit:()=>{this.callbacks?.onExit&&this.callbacks.onExit();}}),e.getPendingMessages&&this.runtime.setGetPendingMessages(e.getPendingMessages);}start(e){this.callbacks=e,this.runtime.setVersion(this.config.version),this.runtime.setProvider(this.config.provider),this.runtime.setModel(this.config.model),this.runtime.setWorkDir(this.config.workDir),this.config.getCompletions&&this.runtime.setCompletionFunction(this.config.getCompletions),this.runtime.start(),p.info("INK_ADAPTER","Ink UI started");}stop(){this.runtime.stop(),this.callbacks=void 0,p.info("INK_ADAPTER","Ink UI stopped");}addUserMessage(e,t,n){let s=[{type:"text",text:e}];if(t&&t.length>0)for(let i of t)s.push({type:"image_url",image_url:{url:`file://${i.path}`}});let o={role:"user",content:s};this.lastEntryId=this.runtime.addEntry({type:"user",message:o,sourceLabel:n==="remote"?"Android":void 0}),this.lastMessageRole="user";}addAssistantMessage(e=""){if(e===""){this.lastMessageRole="assistant";return}let t={role:"assistant",content:[{type:"text",text:e}]};this.lastEntryId=this.runtime.addEntry({type:"assistant",message:t,isStreaming:false}),this.lastMessageRole="assistant";}addSupervisorMessage(e){let t={role:"user",content:[{type:"text",text:e}]};this.lastEntryId=this.runtime.addEntry({type:"supervisor",message:t}),this.lastMessageRole="user";}startSupervisorStreaming(){this.startAgentStreaming("Supervisor"),this.streamingSourceLabel="Supervisor",this.streamingSourceType="supervisor";}startExecutorStreaming(e){let t=e||"Executor";this.startAgentStreaming(t);}getStreamingSourceType(){return this.streamingSourceType}startAgentStreaming(e){this.agentBuffers.has(e)||this.agentBuffers.set(e,""),this.activeAgentId=e,this.lastMessageRole="assistant",p.debug("INK_ADAPTER",`Started agent streaming for ${e}`);}startWorkerStreaming(e){this.startAgentStreaming(e);}addWorkerTextDelta(e,t){this.streamText(t,e);}completeWorkerStreaming(e){this.completeTextStreaming(e);}addWorkerInfo(e,t,n,s="info"){let i=`${`[${e}]`} ${t}`,a=s==="error"?"warning":s;this.addInfo(i,n,a);}streamText(e,t){let n=Date.now(),s=t||this.activeAgentId||"default";p.debug("INK_ADAPTER",`streamText: ${e.length} chars to ${s}`,{snippet:e.substring(0,30),bufferExists:this.agentBuffers.has(s)});let o=Date.now()-n;o>10&&p.warn("INK_ADAPTER",`\u26A0\uFE0F streamText slow: ${o}ms for ${e.length} chars`);let i=this.agentBuffers.get(s)||"";this.agentBuffers.set(s,i+e);}addTextDelta(e,t){p.debug("INK_ADAPTER",`addTextDelta called: ${e.length} chars, agentId=${t||"default"}`,{delta:e.substring(0,50)}),this.streamText(e,t);}addAgentTextDelta(e,t,n){p.debug("INK_ADAPTER",`addAgentTextDelta: ${e.length} chars, agentId=${t}`,{delta:e.substring(0,50)}),this.agentBuffers.has(t)||this.agentBuffers.set(t,"");let s=this.agentBuffers.get(t)||"";this.agentBuffers.set(t,s+e);let i={role:"assistant",content:[{type:"text",text:this.agentBuffers.get(t)||""}]};this.runtime.updatePendingEntryByKey(t,{type:"assistant",message:i,isStreaming:true,isComplete:false,sourceLabel:n||t});}bufferAgentTextOnly(e,t){this.agentBuffers.has(t)||this.agentBuffers.set(t,"");let n=this.agentBuffers.get(t)||"";this.agentBuffers.set(t,n+e);}flushAgentBuffer(e){let t=this.agentBuffers.get(e)||"";return this.agentBuffers.delete(e),t}commitPendingEntryByKey(e){return this.agentBuffers.has(e)&&this.agentBuffers.delete(e),this.runtime.commitPendingEntryByKey(e)}addToolCall(e,t){let n={role:"assistant",content:[{type:"tool_use",id:`tool_${Math.floor(Date.now())}`,name:e,input:t}]};this.runtime.addMessage(n),this.lastMessageRole="tool_call";}addToolCallEntry(e,t,n){p.debug("INK_ADAPTER","Add tool call entry",{toolName:e,sourceLabel:n?.sourceLabel});let o={read_file:"readfile",Read:"readfile",search:"search",Grep:"search",grep:"search",glob:"search_files",Glob:"search_files",search_files:"search_files",smart_tree:"show_tree",tree:"show_tree",bash:"command_running",Bash:"command_running",shell:"command_running",execute_shell:"command_running",edit:"file_update",Edit:"file_update",write:"file_update",Write:"file_update",web_search:"web_search",WebSearch:"web_search",web_fetch:"web_fetch",WebFetch:"web_fetch",browser:"browser_debug",task:"task",Task:"task"}[e]||"tool_call",i=["bash","Bash","shell","execute_shell"].includes(e),a,l;i&&t.command?(l=`$ ${t.command}`,a="\u23F3 \u6B63\u5728\u6267\u884C\u4E2D..."):(l=e,a=JSON.stringify(t,null,2)),this.runtime.addEntry({type:o,text:l,details:a,isStreaming:i,sourceLabel:n?.sourceLabel});}addToolResult(e,t=false){let n={role:"user",content:[{type:"tool_result",tool_use_id:`tool_${Math.floor(Date.now())}`,content:e,is_error:t}]};this.runtime.addMessage(n),this.lastMessageRole="tool_result";}addEntry(e){return p.debug("INK_ADAPTER",`AddEntry: ${e.type}`,{text:e.text}),this.runtime.addEntry(e)}addInfo(e,t,n="info"){p.info("INK_ADAPTER",`Info: ${e}`,t?{details:t}:void 0);let s=n==="warning"||e.includes("\u26A0")||e.includes("\u23F3")||e.includes("\u23F1\uFE0F")||e.includes("\u{1F504}");this.runtime.addEntry({type:s?"warning":"info",text:e,details:t});}addError(e,t){let n=typeof t=="string"?t:t?.details,s=typeof t=="object"?t?.sourceLabel:void 0;p.error("INK_ADAPTER",e,n?{details:n}:void 0),this.runtime.addEntry({type:"error",text:e,details:n,sourceLabel:s});}addWarning(e,t,n){p.warn("INK_ADAPTER",e,t?{details:t}:void 0),this.runtime.addEntry({type:"warning",text:e,details:t,sourceLabel:n?.sourceLabel});}addCompacting(e,t){p.info("INK_ADAPTER",`Compacting: ${e}`,t?{details:t}:void 0),this.runtime.addEntry({type:"compacting",text:e,details:t});}updateStatus(e,t){if(t==="tool_call"&&e.includes("Streaming:")){let n=e.match(/\((\d+) chars\)/);if(n){let s=parseInt(n[1],10);this.streamingToolChars=s,this.runtime.updateStreamingStats(s);}}else t!=="tool_call"&&(this.streamingToolChars=0);t==="compacting"||t==="thinking"||t==="tool_call"?this.runtime.setRunning(true):(t==="complete"||t==="error")&&this.runtime.setRunning(false),this.runtime.setStatusText(e);}setRunning(e){this.runtime.setRunning(e);}startSessionTimer(){}getAccumulatedRunTime(){return this.runtime.getAccumulatedRunTime()}resetAccumulatedRunTime(){this.runtime.resetAccumulatedRunTime();}setCompressionMode(e){this.runtime.setCompressionMode(e);}setCompactionThreshold(e){this.runtime.setCompactionThreshold(e/100);}updateTokenStats(e,t){this.tokenStats.inputTokens=e,this.tokenStats.outputTokens=t,this.tokenStats.totalTokens=e+t,this.runtime.setTokenStats({input:e,output:t,total:e+t});}updateAgentContext(e,t){this.runtime.updateAgentContext(e,t);}clearAgentContext(e){this.runtime.clearAgentContext(e);}clearAllAgentContexts(){this.runtime.clearAllAgentContexts();}getTokenStats(){return {...this.tokenStats}}setTokenStats(e,t,n){p.info("DEBUG_CTX",`InkUIAdapter.setTokenStats: input=${e}, output=${t}, extras.contextWindow=${n?.contextWindow}`),this.tokenStats={inputTokens:e,outputTokens:t,totalTokens:e+t,...n};let s=n?.anthropicCacheCreationTokens||n?.openaiCachedTokens||n?.cacheCreationTokens,o=n?.anthropicCacheReadTokens||n?.cacheReadTokens,i=n?.contextWindow||0,a=n?.tokensUsedForContext||e+t+(o||0),l=i>0?a/i:0;p.info("DEBUG_CTX",`InkUIAdapter.setTokenStats: passing to runtime contextWindow=${n?.contextWindow}, calculated contextWindow=${i}`),this.runtime.setTokenStats({input:e,output:t,total:e+t,contextWindow:n?.contextWindow,tokensUsedForContext:n?.tokensUsedForContext,pressure:l,systemTokens:n?.systemTokens,userTokens:n?.userTokens,assistantTokens:n?.assistantTokens,toolCallTokens:n?.toolCallTokens,toolResultTokens:n?.toolResultTokens,toolTokens:n?.toolTokens,messageTokens:n?.messageTokens,cacheCreationTokens:s,cacheReadTokens:o});}startThinking(){this.streamingReasoningBuffer="",this.streamingReasoningType="thinking",this.hasInferredThinkingStatus=false,this.updateStatus(rc(),"thinking");}streamThinking(e,t="thinking"){if(this.streamingReasoningBuffer+=e,!this.hasInferredThinkingStatus&&this.streamingReasoningBuffer.length>30){let n=jb(this.streamingReasoningBuffer);n&&(this.updateStatus(n,"thinking"),this.hasInferredThinkingStatus=true);}this.streamingReasoningPendingId?this.runtime.updatePendingEntry(this.streamingReasoningPendingId,{text:this.streamingReasoningBuffer}):(this.streamingReasoningType=t,this.streamingReasoningPendingId=this.runtime.addPendingEntry({type:t,text:this.streamingReasoningBuffer,isStreaming:true}));}endThinking(){if(!this.streamingReasoningPendingId){this.updateStatus("","info");return}try{this.streamingReasoningBuffer&&this.streamingReasoningBuffer.trim().length>0?(this.runtime.updatePendingEntry(this.streamingReasoningPendingId,{isStreaming:!1,isComplete:!0}),this.runtime.commitPendingEntry(this.streamingReasoningPendingId),p.debug("INK_ADAPTER",`Committed reasoning entry (${this.streamingReasoningBuffer.length} chars)`)):p.debug("INK_ADAPTER","Discarding empty reasoning entry (no content)");}catch(e){p.warn("INK_ADAPTER","Failed to commit reasoning entry",{error:e});}finally{this.streamingReasoningPendingId=null,this.streamingReasoningBuffer="",this.runtime.resetStreamingStats(),this.updateStatus("","info");}}startTaskTimer(){this.runtime.setRunning(true);}stopTaskTimer(){this.runtime.setRunning(false);}setStreamingTokens(e){this.runtime.updateStreamingStats(e);}clear(){this.runtime.clearMessages(),this.lastMessageRole=null;}resetStreamingState(){this.agentBuffers.clear(),this.activeAgentId=null,this.streamingTextBuffer="",this.streamingTextPendingId=null,this.streamingReasoningBuffer="",this.streamingReasoningPendingId=null,this.currentThinkingText="",this.streamingToolChars=0,this.runtime.clearPendingEntries(),this.runtime.resetStreamingStats(),this.runtime.setStatusText(""),p.debug("INK_ADAPTER","Reset streaming state (cleared all pending entries and buffers)");}finalizeStreamingState(){let e=Array.from(this.agentBuffers.keys());if(e.length>0)for(let t of e)this.completeTextStreaming(t);else this.completeTextStreaming();this.completeReasoningStreaming();}startReasoningStreaming(){this.startThinking();}streamReasoningText(e){this.streamThinking(e);}addReasoningDelta(e){this.streamThinking(e,"reasoning");}completeReasoningStreaming(){this.endThinking();}addThinking(e){}completeTextStreaming(e){let t=e||this.activeAgentId||"default",n=this.agentBuffers.get(t)||"";if(!(n&&n.trim().length>0)){p.debug("INK_ADAPTER",`Complete text streaming (${t}) - no text to commit`),this.agentBuffers.delete(t),this.runtime.commitPendingEntryByKey(t),(t==="default"||t===this.activeAgentId)&&(this.streamingTextPendingId=null,this.streamingSourceLabel=null,this.streamingSourceType=null,this.runtime.resetStreamingStats());return}try{if(this.runtime.commitPendingEntryByKey(t))p.debug("INK_ADAPTER",`Complete text streaming (${t}) - committed pending entry ${n.length} chars`);else {let i={role:"assistant",content:[{type:"text",text:n}]};this.runtime.addEntry({type:"assistant",message:i,isStreaming:!1,isComplete:!0,sourceLabel:t==="default"?void 0:t}),p.debug("INK_ADAPTER",`Complete text streaming (${t}) - created static entry from buffer ${n.length} chars`);}}catch(o){p.warn("INK_ADAPTER","Failed to commit text entry",{error:o});}finally{this.agentBuffers.delete(t),(t==="default"||t===this.activeAgentId)&&(this.streamingTextPendingId=null,this.streamingSourceLabel=null,this.streamingSourceType=null,this.lastMessageRole="assistant",this.runtime.resetStreamingStats()),this.activeAgentId===t&&(this.activeAgentId=null);}}printCommandOutput(e){p.debug("INK_ADAPTER",`Command output: ${e}`);}setCommandOutputLines(e){p.debug("INK_ADAPTER",`Set command output lines: ${e.length}`),this.runtime.setCommandOutput(e);}clearCommandOutputLines(){p.debug("INK_ADAPTER","Clear command output lines"),this.runtime.clearCommandOutput();}startToolCallWithId(e,t,n,s){p.debug("INK_ADAPTER",`Start tool call: ${t}`,{toolId:e,args:n});let o=this.buildToolCallDetails(n,s),i=s?.sourceLabel,c={readfile:"readfile",Read:"readfile",read_file:"readfile",search:"search",Grep:"search",grep:"search",search_files:"search_files",Glob:"search_files",glob:"search_files",find_files:"search_files",show_tree:"show_tree",smart_tree:"show_tree",list_directory:"show_tree",ls:"show_tree",file_update:"file_update",Edit:"file_update",edit_file:"file_update",Write:"file_update",write_file:"file_update",command_exec:"command_exec",Bash:"command_exec",bash:"command_exec",shell:"command_exec",execute_command:"command_exec",code_exec:"code_exec",web_search:"web_search",WebSearch:"web_search",web_fetch:"web_fetch",WebFetch:"web_fetch",browser_debug:"browser_debug",TodoWrite:"todo",TodoRead:"todo",Task:"task",NotebookEdit:"notebook",NotebookRead:"notebook",AskUserQuestion:"ask_user"}[t]||"tool_call",u=this.runtime.addEntry({type:c,text:t,details:o,isStreaming:true,sourceLabel:i});this.toolLogIdByToolId.set(e,u),this.toolLogDetailsByToolId.set(e,o||""),this.toolLogNameByToolId.set(e,t),i&&this.toolLogSourceLabelByToolId.set(e,i);let d=sc(t,n);this.updateStatus(d,"tool_call");}updateToolCallOutput(e,t,n){p.debug("INK_ADAPTER",`Update tool output: ${e}`,{output:t});let s=this.toolLogIdByToolId.get(e);if(!s)return;let o=this.toolLogDetailsByToolId.get(e)||"",i=this.formatToolOutput(t,n?.truncated);i&&this.toolLogOutputByToolId.set(e,i);let a=this.mergeToolDetails(o,i);this.runtime.updateEntry(s,{details:a,isStreaming:true});}completeToolCall(e,t){p.debug("INK_ADAPTER",`Complete tool call: ${e}`);let n=this.toolLogIdByToolId.get(e);if(!n){t?.result&&this.addToolResult(t.result,t.isError||false);return}let s=this.toolLogNameByToolId.get(e)||"",o=this.toolLogDetailsByToolId.get(e)||"",i=this.toolLogOutputByToolId.get(e)||"",a=this.toolLogSourceLabelByToolId.get(e),l=t?.summary||t?.error||"",c=[];o&&c.push(o),l&&c.push(l),!l&&i&&c.push(i),typeof t?.duration=="number"&&c.push(`duration: ${this.formatDuration(t.duration)}`),typeof t?.resultLength=="number"&&c.push(`result: ${t.resultLength}B`);let u=c.length>0?c.join(`
|
|
1690
|
+
`,w)+1,de=F[se+1].length,N=Math.min(G,de),q=ee+N;v(r.length-q);}return}if(J.leftArrow){v(Math.min(b+1,r.length));return}if(J.rightArrow){v(Math.max(b-1,0));return}if(J.home||J.ctrl&&Y==="a"){v(r.length);return}if(J.end||J.ctrl&&Y==="e"){v(0);return}if(J.backspace||J.delete){if(b===r.length){r.length===0&&a>0&&c&&c();return}let Q=w-1,ee=r.slice(0,Q)+r.slice(Q+1);u(ee);return}if(!J.ctrl&&!J.meta&&Y){let Q=r.slice(0,w)+Y+r.slice(w);u(Q);return}}}},{isActive:W});let Z=!r,X=()=>Z?E.createElement(_,null,E.createElement(y,{color:"green",bold:true},"> "),E.createElement(y,{inverse:true}," "),E.createElement(y,{dimColor:true},e)):F.map((Y,J)=>{let Q=J===se,ee=F.slice(0,J).reduce((le,_e)=>le+_e.length+1,0);ee+Y.length;let N=-1;Q&&(N=w-ee);let q=J===0?"> ":"\u2502 ",ne="green";if(t)return E.createElement(_,{key:J},E.createElement(y,{color:ne,bold:true},q),E.createElement(y,{dimColor:true},Y));if(Q&&N>=0){let le=Y.slice(0,N),_e=Y[N]||" ",$e=Y.slice(N+1);return E.createElement(_,{key:J},E.createElement(y,{color:ne,bold:true},q),E.createElement(y,null,le,E.createElement(y,{inverse:true},_e),$e))}return E.createElement(_,{key:J},E.createElement(y,{color:ne,bold:true},q),E.createElement(y,null,Y))});return E.createElement(_,{flexDirection:"column"},U&&!t&&E.createElement(_,{marginBottom:0},E.createElement(y,{dimColor:true}," \u21B5 Shift+Enter \u6362\u884C \u2502 Enter \u53D1\u9001 \u2502 ",F.length," \u884C")),E.createElement(_,{flexDirection:"column"},X()))};var oE=({isRunning:r,statusText:e="",tokenStats:t,streamingTokens:n=0,streamingStartTime:s=null,provider:o,model:i,onContextMenuToggle:a,agentContextStats:l=[],maxDisplayAgents:c=3,runMode:u="single",networkStats:d,cooperateStats:m})=>{let[g,h]=useState(null),[f,b]=useState(0),[v,C]=useState(0),[T,I]=useState(0),[M,D]=useState(0);useEffect(()=>{r?(h(s||Date.now()),b(0)):!r&&(t?.output||0)===0&&(h(null),b(0));},[r,s,t?.output]),useEffect(()=>{if(!r||g===null)return;let Z=setInterval(()=>{b(Math.floor((Date.now()-g)/1e3));},500);return ()=>clearInterval(Z)},[r,g]),useEffect(()=>{if(!r||n===0){C(0);return}let Z=Math.floor(n);if(v===Z)return;let X=Z-v,Y=Math.min(Math.abs(X),20),J=X/Y,ee=setInterval(()=>{C(de=>{let N=de+J;return Math.abs(N-Z)<1?Z:N});},50);return ()=>clearInterval(ee)},[n,r,v]),useEffect(()=>{let Z=t?.output||0;if(T===Z)return;let X=Z-T;if(Math.abs(X)>100){I(Z);return}let Y=Math.max(Math.ceil(Math.abs(X)/10),3),J=X/Y,ee=setInterval(()=>{I(de=>{let N=de+J;return Math.abs(N-Z)<1?Z:N});},10);return ()=>clearInterval(ee)},[t?.output,T]),useEffect(()=>{if(!r){D(0);return}let X=(e||"Thinking...").length,Y=setInterval(()=>{D(J=>(J+1)%(X+3));},80);return ()=>clearInterval(Y)},[r,e]);let R=()=>{if(f<60)return `${f}s`;let Z=Math.floor(f/60),X=f%60;return `${Z}m ${X}s`},L=Z=>Z>=1e6?(Z/1e6).toFixed(1)+"M":Z>=1e3?(Z/1e3).toFixed(1)+"K":Z.toString(),S=t?.contextWindow||0,k=t?.tokensUsedForContext||t?.total||0,w=t?.pressure||0,A=Math.round(w*100),O=()=>w>.8?"red":w>.5?"yellow":"green",z=Z=>Z.split("").map((Y,J)=>{let Q=J-M;return Q>=0&&Q<2?E.createElement(y,{key:J,color:"white",bold:true},Y):Q>=-1&&Q<0?E.createElement(y,{key:J,color:"cyanBright"},Y):E.createElement(y,{key:J,color:"cyan"},Y)}),B=(()=>{switch(u){case "single":return {icon:"\u{1F464}",label:"Single",color:"cyan"};case "collab":return {icon:"\u{1F91D}",label:"Collab",color:"magenta"};case "cooperate":return {icon:"\u{1F527}",label:"Cooperate",color:"yellow"};case "network":return {icon:"\u{1F310}",label:"Network",color:"blue"};default:return {icon:"\u{1F464}",label:"Single",color:"cyan"}}})(),F=e&&(e.includes("Streaming:")||e.toLowerCase().includes("stream")),U=e?.match(/Streaming:\s*(\w+)/),H=U?U[1]:null,se=l.length>0,G=l.find(Z=>Z.agentId==="Main"),W=l.filter(Z=>Z.agentId!=="Main"),ce=W.length>c,V=()=>W.length===0?null:E.createElement(_,null,E.createElement(y,{dimColor:true}," \u2502 "),E.createElement(y,{color:"magenta"},W.length),E.createElement(y,{dimColor:true}," workers"),ce&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," \u2022 Ctrl+G"))),ve=(Z,X)=>{let Y=Z.pressure||0,J=Math.round(Y*100),Q=()=>Y>.8?"red":Y>.5?"yellow":"green",ee=()=>{switch(Z.status||"idle"){case "running":return {icon:"\u25CF",color:"green"};case "waiting":return {icon:"\u25D0",color:"yellow"};case "completed":return {icon:"\u2713",color:"blue"};case "error":return {icon:"\u2717",color:"red"};default:return {icon:"\u25CB",color:"gray"}}},{icon:de,color:N}=ee(),q=Z.currentTask?Z.currentTask.length>20?Z.currentTask.slice(0,17)+"...":Z.currentTask:"";return E.createElement(_,{key:Z.agentId,justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{dimColor:true},X?"\u2514\u2500 ":"\u251C\u2500 "),E.createElement(y,{color:N},de),E.createElement(y,null," "),E.createElement(y,{color:"magenta"},Z.agentLabel),q&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," "),E.createElement(y,{dimColor:true},q))),E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(Z.input)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(Z.output)),E.createElement(y,{dimColor:true}," \u2502 context "),E.createElement(y,{color:"yellow"},L(Z.tokensUsedForContext)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},L(Z.contextWindow)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:Q()},J,"%"),E.createElement(y,{dimColor:true},")")))};if(u==="network"){let Z=d?.teamSize||0,X=d?.activeAgents||0,Y=d?.currentPhase||"executing",J=d?.currentAgent,Q=d?.totalInputTokens||t?.input||0,ee=d?.totalOutputTokens||t?.output||0,de=d?.completedTasks,N=d?.totalTasks,ne=(()=>{switch(Y){case "analyzing":return {text:"Analyzing",color:"cyan"};case "bidding":return {text:"Bidding",color:"yellow"};case "negotiating":return {text:"Negotiating",color:"magenta"};case "executing":return {text:"Executing",color:"green"};case "reviewing":return {text:"Reviewing",color:"blue"};case "complete":return {text:"Complete",color:"green"};default:return {text:"Running",color:"cyan"}}})();return E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:"blue"},"\u{1F310}"),E.createElement(y,{dimColor:true}," \u2502 "),E.createElement(y,{color:"blue"},Z),E.createElement(y,{dimColor:true}," agents"),X>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"green"},X),E.createElement(y,{dimColor:true}," active)")),E.createElement(y,{dimColor:true}," \u2502 "),r?E.createElement(_,null,E.createElement(Xl,{type:"dots"}),E.createElement(y,null," "),J?E.createElement(E.Fragment,null,z(J),E.createElement(y,{dimColor:true},": "),E.createElement(y,{color:ne.color},ne.text)):E.createElement(y,{color:ne.color},ne.text),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(_,null,ee>0?E.createElement(E.Fragment,null,E.createElement(y,{color:"green",bold:true},"\u25A0"),E.createElement(y,null," "),E.createElement(y,{color:"green"},"Complete!"),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan",bold:true},"\u25CF"),E.createElement(y,null," "),E.createElement(y,{color:"cyan"},"Ready")))),E.createElement(_,null,de!==void 0&&N!==void 0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true},"tasks "),E.createElement(y,{color:"yellow"},de),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},N),E.createElement(y,{dimColor:true}," \u2502 ")),r&&v>0&&E.createElement(E.Fragment,null,E.createElement(y,{color:"green"},"\u2193 ",Math.floor(v)),E.createElement(y,{dimColor:true}," \u2502 ")),E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(Q)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(ee))))}if(u==="cooperate"&&m){let{models:Z,phase:X,totalInputTokens:Y,totalOutputTokens:J,ccbResult:Q,dagProgress:ee}=m,N=(()=>{switch(X){case "analyzing":return {text:"Analyzing",color:"cyan"};case "ccb_review":return {text:"CCB Review",color:"yellow"};case "dag_planning":return {text:"Planning",color:"magenta"};case "executing":return {text:"Executing",color:"green"};case "complete":return {text:"Complete",color:"green"};default:return {text:"Running",color:"cyan"}}})(),q=()=>Z.length===0?null:Z.map((le,_e)=>{let $e=le.status==="running"?"green":le.status==="completed"?"blue":"gray";return E.createElement(E.Fragment,{key:_e},_e>0&&E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:$e},le.shortName))}),ne=Z.filter(le=>le.status==="completed").length;return E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:"yellow"},"\u{1F527}"),E.createElement(y,{dimColor:true}," \u2502 "),r?E.createElement(_,null,E.createElement(Xl,{type:"dots"}),E.createElement(y,null," "),e?z(e):E.createElement(y,{color:N.color},N.text),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")")),v>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ~"),E.createElement(y,{color:"magenta"},Math.floor(v)),E.createElement(y,{dimColor:true}," tok"))):E.createElement(_,null,J>0?E.createElement(E.Fragment,null,E.createElement(y,{color:"green",bold:true},"\u25A0"),E.createElement(y,null," "),E.createElement(y,{color:"green"},"Complete!"),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan",bold:true},"\u25CF"),E.createElement(y,null," "),E.createElement(y,{color:"cyan"},"Ready")))),E.createElement(_,null,Z.length>0&&E.createElement(E.Fragment,null,q(),E.createElement(y,{dimColor:true}," "),E.createElement(y,{color:"yellow"},ne),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},Z.length),E.createElement(y,{dimColor:true}," \u2502 ")),Q&&E.createElement(E.Fragment,null,E.createElement(y,{color:Q.approved?"green":"red"},Q.approved?"\u2713":"\u2717"),E.createElement(y,{dimColor:true}," CCB "),E.createElement(y,{color:"yellow"},Q.approveCount),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},Q.totalCount),E.createElement(y,{dimColor:true}," \u2502 ")),ee&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true},"DAG "),E.createElement(y,{color:"yellow"},ee.completedNodes),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},ee.totalNodes),E.createElement(y,{dimColor:true}," \u2502 ")),E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(Y||t?.input||0)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(J||t?.output||0))))}if((u==="collab"||u==="cooperate")&&se){let Z=G?.pressure||0,X=Math.round(Z*100),Y=()=>Z>.8?"red":Z>.5?"yellow":"green",J=W.length<=c&&W.length>0,Q=G?.agentLabel||"Main";return E.createElement(_,{flexDirection:"column"},E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:B.color},B.icon),E.createElement(y,{dimColor:true}," \u2502 "),r?E.createElement(_,null,E.createElement(Xl,{type:"dots"}),E.createElement(y,null," "),E.createElement(y,{bold:true,color:"cyan"},"\u25CF"),E.createElement(y,null," "),F&&H?E.createElement(E.Fragment,null,z(`Streaming: ${H}`)):z(e||"Thinking..."),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(_,null,(G?.output||t?.output||0)>0?E.createElement(E.Fragment,null,E.createElement(y,{color:"green",bold:true},"\u25A0"),E.createElement(y,null," "),E.createElement(y,{color:"green"},"Complete!"),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan",bold:true},"\u25CF"),E.createElement(y,null," "),E.createElement(y,{color:"cyan"},"Ready")))),E.createElement(_,null,G?E.createElement(_,null,E.createElement(y,{dimColor:true},Q,": "),E.createElement(y,{color:"cyan"},L(G.input)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"green"},L(G.output)),(G.cacheCreationTokens||G.cacheReadTokens)&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," cache-w "),E.createElement(y,{color:"magenta"},L(G.cacheCreationTokens||0)),E.createElement(y,{dimColor:true}," cache-r "),E.createElement(y,{color:"blue"},L(G.cacheReadTokens||0))),E.createElement(y,{dimColor:true}," \u2502 "),E.createElement(y,{color:"yellow"},L(G.tokensUsedForContext)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},L(G.contextWindow)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:Y()},X,"%"),E.createElement(y,{dimColor:true},")"),V()):E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(t?.input||0)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(t?.output||0)),V()))),J&&W.map((ee,de)=>ve(ee,de===W.length-1)))}return E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:B.color},B.icon),E.createElement(y,{dimColor:true}," \u2502 "),r?E.createElement(_,null,E.createElement(Xl,{type:"dots"}),E.createElement(y,null," "),E.createElement(y,{bold:true,color:"cyan"},"\u25CF"),E.createElement(y,null," "),F&&H?E.createElement(E.Fragment,null,z(`Streaming: ${H}`)):z(e||"Thinking..."),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true}," \u2022 esc to interrupt"),v>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," \u2022 "),E.createElement(y,{color:"green"},"\u2193 ",Math.floor(v)),E.createElement(y,{dimColor:true}," ",F?"chars":"tokens")),E.createElement(y,{dimColor:true},")"))):E.createElement(_,null,(t?.output||0)>0?E.createElement(E.Fragment,null,E.createElement(y,{color:"green",bold:true},"\u25A0"),E.createElement(y,null," "),E.createElement(y,{color:"green"},"Complete!"),f>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"yellow"},R()),E.createElement(y,{dimColor:true},")"))):E.createElement(E.Fragment,null,E.createElement(y,{color:"cyan",bold:true},"\u25CF"),E.createElement(y,null," "),E.createElement(y,{color:"cyan"},"Ready")))),E.createElement(_,null,S>0?E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},L(t?.input||0)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},L(t?.output||0)),(t?.cacheCreationTokens||t?.cacheReadTokens)&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," cache-w "),E.createElement(y,{color:"magenta"},L(t.cacheCreationTokens||0)),E.createElement(y,{dimColor:true}," cache-r "),E.createElement(y,{color:"blue"},L(t.cacheReadTokens||0))),E.createElement(y,{dimColor:true}," \u2502 context "),E.createElement(y,{color:"yellow"},L(k)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},L(S)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:O()},A,"%"),E.createElement(y,{dimColor:true},")")):E.createElement(y,{dimColor:true},"context: --")))},iE=(r,e)=>!r&&!e?true:!r||!e||r.length!==e.length?false:r.every((t,n)=>{let s=e[n];return t.agentId===s.agentId&&t.input===s.input&&t.output===s.output&&t.pressure===s.pressure&&t.tokensUsedForContext===s.tokensUsedForContext&&t.status===s.status&&t.currentTask===s.currentTask&&t.contextWindow===s.contextWindow&&t.cacheCreationTokens===s.cacheCreationTokens&&t.cacheReadTokens===s.cacheReadTokens}),Sb=E.memo(oE,(r,e)=>r.isRunning===e.isRunning&&r.statusText===e.statusText&&r.streamingTokens===e.streamingTokens&&r.streamingStartTime===e.streamingStartTime&&r.tokenStats?.input===e.tokenStats?.input&&r.tokenStats?.output===e.tokenStats?.output&&r.tokenStats?.total===e.tokenStats?.total&&r.tokenStats?.pressure===e.tokenStats?.pressure&&r.tokenStats?.cacheCreationTokens===e.tokenStats?.cacheCreationTokens&&r.tokenStats?.cacheReadTokens===e.tokenStats?.cacheReadTokens&&r.runMode===e.runMode&&r.networkStats?.teamSize===e.networkStats?.teamSize&&r.networkStats?.activeAgents===e.networkStats?.activeAgents&&r.networkStats?.currentPhase===e.networkStats?.currentPhase&&r.networkStats?.currentAgent===e.networkStats?.currentAgent&&r.networkStats?.totalInputTokens===e.networkStats?.totalInputTokens&&r.networkStats?.totalOutputTokens===e.networkStats?.totalOutputTokens&&r.networkStats?.completedTasks===e.networkStats?.completedTasks&&r.networkStats?.totalTasks===e.networkStats?.totalTasks&&r.cooperateStats?.phase===e.cooperateStats?.phase&&r.cooperateStats?.totalInputTokens===e.cooperateStats?.totalInputTokens&&r.cooperateStats?.totalOutputTokens===e.cooperateStats?.totalOutputTokens&&r.cooperateStats?.ccbResult?.approved===e.cooperateStats?.ccbResult?.approved&&r.cooperateStats?.ccbResult?.approveCount===e.cooperateStats?.ccbResult?.approveCount&&r.cooperateStats?.dagProgress?.completedNodes===e.cooperateStats?.dagProgress?.completedNodes&&r.cooperateStats?.models?.length===e.cooperateStats?.models?.length&&iE(r.agentContextStats,e.agentContextStats));var kb=({isRunning:r,hasInput:e,customHints:t,menuActive:n=false,thinkingEnabled:s=true,accumulatedRunTime:o=0,provider:i,model:a,runMode:l="single"})=>{let[c,u]=useState(o);useEffect(()=>{if(!r){u(o);return}u(o);let f=setInterval(()=>{u(b=>b+1);},1e3);return ()=>clearInterval(f)},[r,o]);let d=()=>{if(c<60)return `${c}s`;let f=Math.floor(c/60),b=c%60;if(f<60)return `${f}m ${b}s`;let v=Math.floor(f/60),C=f%60;return `${v}h ${C}m`},m=()=>{if(!i||!a)return "";let f=i,b=i.indexOf(" (");b>0&&(f=i.substring(0,b));let v=a.length>35?a.substring(0,32)+"...":a;return `${f}/${v}`},h=(()=>{switch(l){case "single":return {label:"SINGLE",color:"cyan"};case "collab":return {label:"COLLAB",color:"magenta"};case "cooperate":return {label:"COOPERATE",color:"yellow"};case "network":return {label:"NETWORK",color:"blue"};default:return {label:"SINGLE",color:"cyan"}}})();return t?E.createElement(_,{justifyContent:"space-between"},E.createElement(y,{color:"yellow"},t)):n?E.createElement(_,{justifyContent:"space-between"},E.createElement(y,{dimColor:true}," ","\u2191\u2193 to select, Enter to confirm, ESC to cancel")):E.createElement(_,{justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{dimColor:true},"? for shortcuts"),c>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," \u2022 "),E.createElement(y,{color:"cyan"},d()),E.createElement(y,{dimColor:true}," session"))),E.createElement(_,null,E.createElement(y,{color:h.color,bold:true},"["),E.createElement(y,{color:h.color},h.label),E.createElement(y,{color:h.color,bold:true},"]"),E.createElement(y,{dimColor:true}," \u2022 "),m()&&E.createElement(E.Fragment,null,E.createElement(y,{color:"magenta",bold:true},"["),E.createElement(y,{color:"magenta"},m()),E.createElement(y,{color:"magenta",bold:true},"]"),E.createElement(y,{dimColor:true}," \u2022 ")),s?E.createElement(y,{color:"cyan"},"Thinking on"):E.createElement(y,{dimColor:true},"Thinking off"),E.createElement(y,{dimColor:true}," (tab to toggle)")))};var _b=({attachments:r,onRemove:e})=>r.length===0?null:E.createElement(_,{flexDirection:"column",paddingLeft:2,marginBottom:1},E.createElement(y,{color:"magenta",dimColor:true},"Attachments:"),r.map((t,n)=>{let s=t.name||t.path?.split("/").pop()||"unknown",o=t.type?.startsWith("image/")||t.mediaType?.startsWith("image/")||s.match(/\.(png|jpg|jpeg|gif|webp)$/i);return E.createElement(_,{key:n},E.createElement(y,{color:"magenta"},o?"\u{1F4CE} \u{1F5BC}\uFE0F ":"\u{1F4CE} ",s),e&&E.createElement(y,{color:"gray",dimColor:true}," (press \u232B Backspace to remove)"))}));var Ib=({planSteps:r,isRunning:e=false})=>{let t=r.find(s=>s.status==="pending");if(!t||!e)return null;let n=t.step.length>50?t.step.substring(0,47)+"...":t.step;return E.createElement(_,{paddingLeft:2},E.createElement(y,{dimColor:true},"\u2514\u2500 "),E.createElement(y,{color:"gray"},"\u25CB"),E.createElement(y,{dimColor:true}," Next: "),E.createElement(y,{color:"cyan"},n))};var Eb=({contextWindow:r,tokensUsed:e,systemTokens:t=0,userTokens:n=0,assistantTokens:s=0,toolCallTokens:o=0,toolResultTokens:i=0,compactionThreshold:a=.8,compressionMode:l="sync",agentContextStats:c=[],runMode:u="single",networkStats:d,onClose:m})=>{let g=R=>R>=1e6?`${(R/1e6).toFixed(1)}M`:R>=1e3?`${(R/1e3).toFixed(1)}k`:R.toString(),h=R=>R>.8?"red":R>.5?"yellow":"green",f=({color:R,label:L,tokens:S,total:k,indent:w=2})=>{let A=k>0?(S/k*100).toFixed(2):"0.00";return E.createElement(_,{marginLeft:w},E.createElement(y,{color:R},"\u25A0"),E.createElement(y,null," ",L,": "),E.createElement(y,{color:"yellow"},g(S)),E.createElement(y,{dimColor:true}," tokens (",A,"%)"))},b=({stat:R,indent:L=2})=>{let S=R.cacheCreationTokens||0,k=R.cacheReadTokens||0,w=R.contextWindow||2e5,A=R.tokensUsedForContext||0,O=w>0?A/w:0,z=Math.round(O*100);return E.createElement(_,{marginLeft:L,justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:"magenta"},R.agentLabel||R.agentId),R.status&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," "),E.createElement(y,{color:R.status==="running"?"green":R.status==="error"?"red":"gray"},R.status==="running"?"\u25CF":R.status==="completed"?"\u2713":R.status==="error"?"\u2717":"\u25CB"))),E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},g(R.input)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},g(R.output)),(S>0||k>0)&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," \u2502 cw "),E.createElement(y,{color:"blue"},g(S)),E.createElement(y,{dimColor:true}," cr "),E.createElement(y,{color:"blue"},g(k))),E.createElement(y,{dimColor:true}," \u2502 ctx "),E.createElement(y,{color:"yellow"},g(A)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},g(w)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:h(O)},z,"%"),E.createElement(y,{dimColor:true},")")))},v=({stat:R,indent:L=2})=>{let S=R.contextWindow>0?R.tokensUsedForContext/R.contextWindow:0,k=Math.round(S*100);return E.createElement(_,{marginLeft:L,justifyContent:"space-between"},E.createElement(_,null,E.createElement(y,{color:"magenta"},R.agentLabel||R.agentId),R.status&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," "),E.createElement(y,{color:R.status==="running"?"green":R.status==="error"?"red":"gray"},R.status==="running"?"\u25CF":R.status==="completed"?"\u2713":R.status==="error"?"\u2717":"\u25CB"))),E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},g(R.input)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},g(R.output)),E.createElement(y,{dimColor:true}," \u2502 "),E.createElement(y,{color:"yellow"},g(R.tokensUsedForContext)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},g(R.contextWindow)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:h(S)},k,"%"),E.createElement(y,{dimColor:true},")")))};if(u==="network"){let R=d?.teamSize||c.length||0,L=d?.activeAgents||0,S=d?.totalInputTokens||0,k=d?.totalOutputTokens||0,w=S+k,O=(z=>{switch(z){case "analyzing":return {text:"Analyzing",color:"cyan"};case "bidding":return {text:"Bidding",color:"yellow"};case "negotiating":return {text:"Negotiating",color:"magenta"};case "executing":return {text:"Executing",color:"green"};case "reviewing":return {text:"Reviewing",color:"blue"};case "complete":return {text:"Complete",color:"green"};default:return {text:"Idle",color:"gray"}}})(d?.currentPhase);return E.createElement(_,{flexDirection:"column",borderStyle:"round",borderColor:"blue",paddingX:2,paddingY:1},E.createElement(_,{justifyContent:"space-between",marginBottom:1},E.createElement(_,null,E.createElement(y,{color:"blue"},"\u{1F310}"),E.createElement(y,{bold:true,color:"blue"}," Network Context Overview")),E.createElement(y,{dimColor:true},"(press ESC to close)")),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{dimColor:true},"Team Size: "),E.createElement(y,{color:"blue",bold:true},R),E.createElement(y,{dimColor:true}," agents"),L>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"green"},L),E.createElement(y,{dimColor:true}," active)"))),E.createElement(_,null,E.createElement(y,{dimColor:true},"Current Phase: "),E.createElement(y,{color:O.color,bold:true},O.text),d?.currentAgent&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," - "),E.createElement(y,{color:"cyan"},d.currentAgent))),d?.completedTasks!==void 0&&d?.totalTasks!==void 0&&E.createElement(_,null,E.createElement(y,{dimColor:true},"Tasks: "),E.createElement(y,{color:"yellow"},d.completedTasks),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},d.totalTasks),E.createElement(y,{dimColor:true}," completed"))),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(y,{bold:true,dimColor:true},"Total Token Usage:"),E.createElement(_,{marginLeft:2},E.createElement(y,{dimColor:true},"Input: "),E.createElement(y,{color:"cyan"},g(S)),E.createElement(y,{dimColor:true}," \u2502 Output: "),E.createElement(y,{color:"green"},g(k)),E.createElement(y,{dimColor:true}," \u2502 Total: "),E.createElement(y,{color:"yellow"},g(w)))),c.length>0&&E.createElement(_,{flexDirection:"column"},E.createElement(y,{bold:true,dimColor:true},"Agent Context Details:"),c.map(z=>E.createElement(b,{key:z.agentId,stat:z})),E.createElement(_,{marginTop:1,marginLeft:2},E.createElement(y,{dimColor:true},"Total Tokens: "),E.createElement(y,{color:"yellow"},g(c.reduce((z,P)=>z+P.input+P.output,0))),E.createElement(y,{dimColor:true}," across "),E.createElement(y,{color:"cyan"},c.length),E.createElement(y,{dimColor:true}," agents"))),c.length===0&&E.createElement(_,{marginTop:1},E.createElement(y,{dimColor:true,italic:true},"Agent context details not available yet.")))}if((u==="collab"||u==="cooperate")&&c.length>0){let R=c.find(P=>P.agentId==="Main"),L=c.filter(P=>P.agentId!=="Main"&&P.agentId!=="supervisor"),S=c.reduce((P,B)=>P+B.tokensUsedForContext,0),k=c.reduce((P,B)=>P+B.input,0),w=c.reduce((P,B)=>P+B.output,0),A=u==="collab"?"\u{1F91D}":"\u{1F527}",O=u==="collab"?"Collab":"Cooperate",z=u==="collab"?"magenta":"yellow";return E.createElement(_,{flexDirection:"column",borderStyle:"round",borderColor:z,paddingX:2,paddingY:1},E.createElement(_,{justifyContent:"space-between",marginBottom:1},E.createElement(_,null,E.createElement(y,{color:z},A),E.createElement(y,{bold:true,color:z}," ",O," Context Overview")),E.createElement(y,{dimColor:true},"(press ESC to close)")),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{dimColor:true},"Total Agents: "),E.createElement(y,{color:z,bold:true},c.length),L.length>0&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," (1 Main + "),E.createElement(y,{color:"cyan"},L.length),E.createElement(y,{dimColor:true}," Workers)"))),E.createElement(_,null,E.createElement(y,{dimColor:true},"Total Tokens: "),E.createElement(y,{color:"cyan"},g(k)),E.createElement(y,{dimColor:true}," in / "),E.createElement(y,{color:"green"},g(w)),E.createElement(y,{dimColor:true}," out"))),R&&E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(y,{bold:true,dimColor:true},"Main Agent:"),E.createElement(v,{stat:R})),L.length>0&&E.createElement(_,{flexDirection:"column"},E.createElement(y,{bold:true,dimColor:true},"Worker Agents (",L.length,"):"),L.map(P=>E.createElement(v,{key:P.agentId,stat:P}))),E.createElement(_,{marginTop:1},E.createElement(y,{dimColor:true},"Combined Context: "),E.createElement(y,{color:"yellow"},g(S)),E.createElement(y,{dimColor:true}," tokens")))}let C=r-e,T=r>0?e/r:0,I=Math.floor(r*a),M=Math.max(0,I-e),D=Math.round(T*100);return E.createElement(_,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1},E.createElement(_,{justifyContent:"space-between",marginBottom:1},E.createElement(y,{bold:true,color:"cyan"},"Context Window Details"),E.createElement(y,{dimColor:true},"(press ESC to close)")),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{dimColor:true},"Total: "),E.createElement(y,{color:"yellow"},g(e)),E.createElement(y,{dimColor:true}," / "),E.createElement(y,{color:"yellow"},g(r)),E.createElement(y,{dimColor:true}," tokens ("),E.createElement(y,{color:h(T),bold:true},D,"%"),E.createElement(y,{dimColor:true},")")),E.createElement(_,null,E.createElement(y,{dimColor:true},"Remaining: "),E.createElement(y,{color:"green"},g(C)),E.createElement(y,{dimColor:true}," tokens"))),E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{dimColor:true},"Compression: "),E.createElement(y,{color:l==="sync"?"green":"yellow"},l==="sync"?"Sync LLM":"Async LLM"),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:"cyan"},Math.round(a*100),"%"),E.createElement(y,{dimColor:true}," threshold)"))),M>0?E.createElement(_,{marginBottom:1},E.createElement(y,{dimColor:true},"Compaction in: "),E.createElement(y,{color:"cyan"},g(M)),E.createElement(y,{dimColor:true}," tokens")):E.createElement(_,{marginBottom:1},E.createElement(y,{color:"red",bold:true},"\u26A0\uFE0F Compaction threshold reached!")),E.createElement(_,{flexDirection:"column"},E.createElement(y,{bold:true,dimColor:true},"Context Breakdown:"),E.createElement(f,{color:"magenta",label:"System",tokens:t,total:e}),E.createElement(f,{color:"cyan",label:"User",tokens:n,total:e}),E.createElement(f,{color:"green",label:"Assistant",tokens:s,total:e}),E.createElement(f,{color:"blue",label:"Tool Calls",tokens:o,total:e}),E.createElement(f,{color:"yellow",label:"Tool Results",tokens:i,total:e}),E.createElement(_,{marginTop:1,marginLeft:2},E.createElement(y,{dimColor:true},"Usage: "),E.createElement(y,{color:h(T)},"\u2588".repeat(Math.floor(T*20))),E.createElement(y,{dimColor:true},"\u2591".repeat(20-Math.floor(T*20))))))};var Pb=[{name:"/help",description:"\u663E\u793A\u5E2E\u52A9\u4FE1\u606F",category:"\u57FA\u7840"},{name:"/clear",description:"\u6E05\u7A7A\u5C4F\u5E55",category:"\u57FA\u7840"},{name:"/exit",description:"\u9000\u51FA\u7A0B\u5E8F",category:"\u57FA\u7840"},{name:"/mode",description:"\u5207\u6362 ask/agent \u6A21\u5F0F",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/collab",description:"\u534F\u4F5C\u6A21\u5F0F\u914D\u7F6E",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/thinking",description:"\u601D\u8003\u6A21\u5F0F\u5F00\u5173",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/approval",description:"\u5BA1\u6279\u6A21\u5F0F\u5F00\u5173",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/sandbox",description:"\u6C99\u76D2\u6A21\u5F0F\u8BBE\u7F6E",category:"\u6A21\u5F0F",hasSubMenu:true},{name:"/provider",description:"\u7BA1\u7406 AI \u670D\u52A1\u5546",category:"AI",hasSubMenu:true},{name:"/model",description:"\u7BA1\u7406\u6A21\u578B",category:"AI",hasSubMenu:true},{name:"/sessions",description:"\u67E5\u770B\u6240\u6709\u4F1A\u8BDD",category:"\u4F1A\u8BDD"},{name:"/session",description:"\u5207\u6362\u4F1A\u8BDD",category:"\u4F1A\u8BDD",hasSubMenu:true},{name:"/session-new",description:"\u521B\u5EFA\u65B0\u4F1A\u8BDD",category:"\u4F1A\u8BDD"},{name:"/session-info",description:"\u5F53\u524D\u4F1A\u8BDD\u4FE1\u606F",category:"\u4F1A\u8BDD"},{name:"/checkpoint",description:"\u521B\u5EFA\u68C0\u67E5\u70B9",category:"\u4F1A\u8BDD"},{name:"/checkpoints",description:"\u67E5\u770B\u68C0\u67E5\u70B9\u5217\u8868",category:"\u4F1A\u8BDD"},{name:"/rollback",description:"\u56DE\u6EDA\u5230\u68C0\u67E5\u70B9",category:"\u4F1A\u8BDD",hasSubMenu:true},{name:"/undo",description:"\u64A4\u9500\u64CD\u4F5C",category:"\u4F1A\u8BDD"},{name:"/compact",description:"\u538B\u7F29\u4E0A\u4E0B\u6587",category:"\u4F1A\u8BDD"},{name:"/processes",description:"\u67E5\u770B\u540E\u53F0\u8FDB\u7A0B",category:"\u8FDB\u7A0B"},{name:"/ps",description:"\u67E5\u770B\u540E\u53F0\u8FDB\u7A0B (\u7B80\u5199)",category:"\u8FDB\u7A0B"},{name:"/kill",description:"\u7EC8\u6B62\u8FDB\u7A0B",category:"\u8FDB\u7A0B",hasSubMenu:true},{name:"/attach",description:"\u6DFB\u52A0\u9644\u4EF6",category:"\u5DE5\u5177"},{name:"/attachments",description:"\u67E5\u770B\u9644\u4EF6",category:"\u5DE5\u5177"},{name:"/workspace",description:"\u5DE5\u4F5C\u533A\u7BA1\u7406",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/mcp",description:"MCP \u670D\u52A1\u5668\u7BA1\u7406",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/context",description:"\u4E0A\u4E0B\u6587\u7BA1\u7406",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/memory",description:"\u5185\u5B58\u8BCA\u65AD",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/remote",description:"\u8FDC\u7A0B\u670D\u52A1",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/index",description:"\u7D22\u5F15\u7BA1\u7406",category:"\u5DE5\u5177",hasSubMenu:true},{name:"/stats",description:"\u4F1A\u8BDD\u7EDF\u8BA1",category:"\u7EDF\u8BA1"},{name:"/statistic",description:"Token \u4F7F\u7528\u7EDF\u8BA1",category:"\u7EDF\u8BA1",hasSubMenu:true},{name:"/config-clear",description:"\u6E05\u9664\u914D\u7F6E",category:"\u914D\u7F6E"},{name:"/config-reset",description:"\u91CD\u7F6E\u914D\u7F6E",category:"\u914D\u7F6E"},{name:"/notify",description:"\u901A\u77E5\u8BBE\u7F6E",category:"\u914D\u7F6E",hasSubMenu:true}],cE=({isVisible:r,filter:e="",onSelect:t,onCancel:n})=>{let[s,o]=useState(0),[i,a]=useState(0),l=10,c=e&&e!=="/"?Pb.filter(m=>m.name.toLowerCase().includes(e.toLowerCase())||m.description.toLowerCase().includes(e.toLowerCase())):Pb;useEffect(()=>{o(0),a(0);},[e]),useEffect(()=>{s<i?a(s):s>=i+l&&a(s-l+1);},[s]),Xe((m,g)=>{if(r){if(g.escape){n();return}if(g.upArrow){o(h=>h>0?h-1:c.length-1);return}if(g.downArrow){o(h=>h<c.length-1?h+1:0);return}if(g.pageUp||g.ctrl&&m==="u"){o(h=>Math.max(0,h-l));return}if(g.pageDown||g.ctrl&&m==="d"){o(h=>Math.min(c.length-1,h+l));return}if(g.return){c.length>0&&t(c[s].name);return}if(g.tab){c.length>0&&t(c[s].name+" ");return}}},{isActive:r});let u=c.slice(i,i+l),d=E.useMemo(()=>u.map((m,g)=>{let f=i+g===s;return E.createElement(_,{key:m.name},E.createElement(y,{color:f?"cyan":"white"},f?"\u203A ":" "),E.createElement(y,{color:f?"cyan":"white",bold:f},"\u25CF ",m.name),E.createElement(y,{color:f?"cyan":"gray"}," ","- ",m.description))}),[u,i,s]);return !r||c.length===0?null:E.createElement(_,{flexDirection:"column",paddingLeft:0},E.createElement(y,{color:"cyan",bold:true},"\u547D\u4EE4\u83DC\u5355"),E.createElement(y,{dimColor:true},"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88"),i>0&&E.createElement(y,{dimColor:true}," \u2191 \u66F4\u591A..."),d,i+l<c.length&&E.createElement(y,{dimColor:true}," \u2193 \u66F4\u591A..."),E.createElement(y,{dimColor:true},"\u2500".repeat(40)),E.createElement(y,{dimColor:true},c.length," \u4E2A\u547D\u4EE4 \xB7 \u7B2C ",Math.floor(i/l)+1,"/",Math.ceil(c.length/l)," \u9875"))},Rb=E.memo(cE,(r,e)=>r.isVisible===e.isVisible&&r.filter===e.filter&&r.onSelect===e.onSelect&&r.onCancel===e.onCancel);re();var uE=({inputValue:r,isRunning:e,statusText:t="",tokenStats:n,streamingTokens:s=0,streamingStartTime:o=null,accumulatedRunTime:i=0,provider:a,model:l,customHints:c,attachments:u=[],multiline:d=false,completions:m=[],menuActive:g=false,promptActive:h=false,promptMessage:f,promptHint:b,promptOnCancel:v,thinkingEnabled:C=true,contextMenuActive:T=false,compressionMode:I="sync",compactionThreshold:M=.85,agentContextStats:D=[],runMode:R="single",networkStats:L,cooperateStats:S,currentPlanSteps:k=[],onInputChange:w,onSubmit:A,onInterrupt:O,onExit:z,onHistoryUp:P,onHistoryDown:B,onTabComplete:F,onRemoveAttachment:U,onContextMenuToggle:H,onAgentContextScreenToggle:se,onPasteImage:G,onShowInterruptInput:W})=>{let{columns:ce}=Ws(),V=r==="/"||r.startsWith("/")&&!r.includes(" "),ve=E.useCallback(X=>{X.endsWith(" ")?w(X.trim()):(w(""),setTimeout(()=>{A(X);},0));},[w,A]),Z=E.useCallback(()=>{w("");},[w]);return Xe((X,Y)=>{if(process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","BottomBar useInput",{key:Y,input:X,menuActive:g,promptActive:h,isRunning:e,inputValue:r.substring(0,20)}),!g){if(e&&X==="i"&&!Y.ctrl&&!Y.meta&&W){p.debug("INK_INPUT",'Interrupt input triggered with "i" key'),W();return}if(Y.ctrl&&X==="g"&&se){se();return}if(Y.ctrl&&X==="z"){process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","Ctrl+Z blocked (prevents suspension)");return}if(Y.escape){let J=!X||X==="\x1B"||X==="";if(p.info("INK_INPUT",`ESC detected: isRealEscape=${J}, input=${JSON.stringify(X)}, isRunning=${e}`),!J){p.debug("INK_INPUT","Ignoring escape sequence (not real ESC key)");return}if(T&&H){H();return}if(h&&v){v(),w("");return}e?(p.info("INK_INPUT","\u{1F6D1} User pressed ESC to interrupt task"),O()):r&&w("");return}Y.ctrl&&X==="c"&&(process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","Ctrl+C pressed",{isRunning:e}),e?O():(p.info("INK_INPUT","\u26A0\uFE0F Ctrl+C pressed - exiting"),z()));}},{isActive:true}),E.createElement(_,{flexDirection:"column"},h&&f&&E.createElement(_,{paddingX:2,paddingY:1},E.createElement(y,{color:"cyan",bold:true},f)),h&&b&&E.createElement(_,{paddingX:2,paddingBottom:1},E.createElement(y,{dimColor:true},b)),!h&&E.createElement(Sb,{isRunning:e,statusText:t,tokenStats:n,streamingTokens:s,streamingStartTime:o,provider:a,model:l,onContextMenuToggle:H,agentContextStats:D,runMode:R,networkStats:L,cooperateStats:S}),!h&&E.createElement(Ib,{planSteps:k,isRunning:e}),u.length>0&&E.createElement(_b,{attachments:u,onRemove:U}),E.createElement(_,{flexDirection:"column"},E.createElement(y,{color:"gray"},"\u2500".repeat(ce)),E.createElement(Tb,{value:r,placeholder:h?b||"Type your answer...":e?"Enter to interrupt and send...":"Type a message...",disabled:g,multiline:d,completions:[],menuActive:g,slashMenuActive:V,imageCount:u.length,onChange:w,onSubmit:X=>A(X??r),onHistoryUp:P,onHistoryDown:B,onTabComplete:F,onPasteImage:G,onRemoveLastAttachment:U?()=>U(u.length-1):void 0}),E.createElement(y,{color:"gray"},"\u2500".repeat(ce))),V&&!g&&!e&&E.createElement(Rb,{isVisible:true,filter:r,onSelect:ve,onCancel:Z}),!h&&E.createElement(kb,{isRunning:e,hasInput:r.length>0,customHints:c,menuActive:g,thinkingEnabled:C,accumulatedRunTime:i,provider:a,model:l,runMode:R}),T&&n?.contextWindow&&H&&E.createElement(Eb,{contextWindow:n.contextWindow,tokensUsed:n.tokensUsedForContext||n.total,systemTokens:n.systemTokens,userTokens:n.userTokens,assistantTokens:n.assistantTokens,toolCallTokens:n.toolCallTokens,toolResultTokens:n.toolResultTokens,compressionMode:I,compactionThreshold:M,agentContextStats:D,runMode:R,networkStats:L,onClose:H}))},Db=E.memo(uE);var Bp=({message:r,choices:e,initialIndex:t=0,hint:n,maxVisible:s=20,onSelect:o,onCancel:i,onExit:a})=>{let[l,c]=useState(t),[u,d]=useState(0),[m,g]=useState(null);useEffect(()=>{c(t);},[t]),useEffect(()=>{let v=setTimeout(()=>{g(Date.now());},200);return ()=>clearTimeout(v)},[]),useEffect(()=>{if(e.length<=s){d(0);return}l<u?d(l):l>=u+s&&d(l-s+1);},[l,e.length,s,u]),Xe((v,C)=>{if(C.ctrl&&v==="c"&&a){process.nextTick(()=>a());return}if(C.escape&&i){process.nextTick(()=>i());return}if(C.upArrow){c(T=>T>0?T-1:e.length-1);return}if(C.downArrow){c(T=>T<e.length-1?T+1:0);return}if(C.return){if(!m)return;process.nextTick(()=>o(e[l].value));return}});let h=Math.min(e.length,s),f=u>0,b=u+h<e.length;return E.createElement(_,{flexDirection:"column"},r&&E.createElement(_,{marginBottom:1,paddingX:2},E.createElement(y,{bold:true,color:"cyan"},r)),n&&E.createElement(_,{marginBottom:1,paddingX:2},E.createElement(y,{dimColor:true},n)),f&&E.createElement(_,{paddingX:2},E.createElement(y,{dimColor:true}," \u2191 more")),e.slice(u,u+h).map((v,C)=>{let T=u+C,I=T===l,M=I?"\u276F ":" ";return E.createElement(_,{key:`${v.value}-${T}`,flexDirection:"row",paddingX:2},E.createElement(y,{color:I?"cyan":void 0,bold:I},M,v.label),v.description&&E.createElement(y,{dimColor:true}," - ",v.description))}),b&&E.createElement(_,{paddingX:2},E.createElement(y,{dimColor:true}," \u2193 more")))};var Lb=({onSubmit:r,onCancel:e})=>{let[t,n]=useState(""),[s,o]=useState(0),i=t.length-s;Xe((u,d)=>{if(d.escape){e();return}if(d.return){let m=t.trim();m&&r(m);return}if(d.backspace||d.delete){if(s===t.length)return;let m=i-1,g=t.slice(0,m)+t.slice(m+1);n(g);return}if(d.leftArrow){o(Math.min(s+1,t.length));return}if(d.rightArrow){o(Math.max(s-1,0));return}if(d.home||d.ctrl&&u==="a"){o(t.length);return}if(d.end||d.ctrl&&u==="e"){o(0);return}if(!d.ctrl&&!d.meta&&u){let m=t.slice(0,i)+u+t.slice(i);n(m);return}},{isActive:true});let a=t.slice(0,i),l=t[i]||" ",c=t.slice(i+1);return E.createElement(_,{flexDirection:"column",borderStyle:"double",borderColor:"yellow",paddingX:2,paddingY:1,width:"80%"},E.createElement(_,{marginBottom:1,justifyContent:"center"},E.createElement(y,{bold:true,color:"yellow"},"\u2728 \u63D2\u961F\u6D88\u606F - \u5C06\u5728\u4E0B\u6B21\u8BF7\u6C42\u65F6\u53D1\u9001")),E.createElement(_,{flexDirection:"column"},E.createElement(y,{dimColor:true},"\u8F93\u5165\u4F60\u7684\u6D88\u606F:"),E.createElement(_,{marginTop:1},E.createElement(y,{color:"green",bold:true},"\u276F "),t?E.createElement(y,null,a,E.createElement(y,{inverse:true},l),c):E.createElement(_,null,E.createElement(y,{inverse:true}," "),E.createElement(y,{dimColor:true},"\u8F93\u5165\u6D88\u606F...")))),E.createElement(_,{marginTop:1,justifyContent:"space-between"},E.createElement(y,{dimColor:true},"Enter: \u786E\u8BA4"),E.createElement(y,{dimColor:true},"ESC: \u53D6\u6D88")))};var no=r=>r>=1e6?`${(r/1e6).toFixed(1)}M`:r>=1e3?`${(r/1e3).toFixed(1)}K`:String(r),dE=r=>{switch(r){case "running":return {icon:"\u25CF",color:"green"};case "waiting":return {icon:"\u25D0",color:"yellow"};case "completed":return {icon:"\u2713",color:"blue"};case "error":return {icon:"\u2717",color:"red"};default:return {icon:"\u25CB",color:"gray"}}},$b=({agentContextStats:r,onClose:e})=>{let{columns:t}=Ws();Xe((s,o)=>{(o.escape||s==="q")&&e();},{isActive:true});let n=[...r].sort((s,o)=>s.agentId==="Main"?-1:o.agentId==="Main"?1:s.agentLabel.localeCompare(o.agentLabel));return E.createElement(_,{flexDirection:"column",width:"100%"},E.createElement(_,{justifyContent:"space-between"},E.createElement(y,{bold:true,color:"cyan"},"Agent Context Overview"),E.createElement(y,{dimColor:true},"ESC to close")),E.createElement(y,{color:"gray"},"\u2500".repeat(Math.max(t,10))),n.length===0?E.createElement(y,{dimColor:true},"No agent context stats available."):n.map(s=>{let o=s.contextWindow||0,i=s.tokensUsedForContext||0,a=o>0?i/o:0,l=Math.round(a*100),{icon:c,color:u}=dE(s.status),d=s.currentTask?s.currentTask.length>40?`${s.currentTask.slice(0,37)}...`:s.currentTask:"";return E.createElement(_,{key:s.agentId,justifyContent:"space-between",marginTop:1},E.createElement(_,null,E.createElement(y,{color:"magenta"},s.agentLabel),E.createElement(y,{dimColor:true}," "),E.createElement(y,{color:u},c),d&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," "),E.createElement(y,{dimColor:true},d))),E.createElement(_,null,E.createElement(y,{dimColor:true},"in "),E.createElement(y,{color:"cyan"},no(s.input)),E.createElement(y,{dimColor:true}," out "),E.createElement(y,{color:"green"},no(s.output)),(s.cacheCreationTokens||s.cacheReadTokens)&&E.createElement(E.Fragment,null,E.createElement(y,{dimColor:true}," cache-w "),E.createElement(y,{color:"magenta"},no(s.cacheCreationTokens||0)),E.createElement(y,{dimColor:true}," cache-r "),E.createElement(y,{color:"blue"},no(s.cacheReadTokens||0))),E.createElement(y,{dimColor:true}," \u2502 context "),E.createElement(y,{color:"yellow"},no(i)),E.createElement(y,{dimColor:true},"/"),E.createElement(y,{color:"yellow"},no(o)),E.createElement(y,{dimColor:true}," ("),E.createElement(y,{color:a>.8?"red":a>.5?"yellow":"green"},l,"%"),E.createElement(y,{dimColor:true},")")))}),E.createElement(y,{color:"gray"},"\u2500".repeat(Math.max(t,10))),E.createElement(y,{dimColor:true},"Tip: Press Q or ESC to return"))};var Ob=({messages:r})=>r.length===0?null:E.createElement(_,{flexDirection:"column",marginBottom:1},E.createElement(_,null,E.createElement(y,{color:"magenta",bold:true},"\u250C\u2500 "),E.createElement(y,{color:"magenta",bold:true},"Queued (",r.length,")"),E.createElement(y,{color:"magenta",bold:true}," \u2500")),r.map((e,t)=>E.createElement(_,{key:e.id,paddingLeft:1},E.createElement(y,{color:"gray"},"\u2502 "),E.createElement(y,{color:"cyan",bold:true},"> "),E.createElement(y,{color:"white"},e.text.length>70?e.text.substring(0,67)+"...":e.text))),E.createElement(_,null,E.createElement(y,{color:"magenta",bold:true},"\u2514\u2500"),E.createElement(y,{dimColor:true}," Press "),E.createElement(y,{color:"yellow"},"\u2191"),E.createElement(y,{dimColor:true}," to edit queued messages")));Ql();re();var vE=[".png",".jpg",".jpeg",".gif",".webp",".bmp",".svg"],CE=r=>{let e=new WeakSet;try{return JSON.stringify(r,(t,n)=>{if(typeof n=="bigint")return n.toString();if(n instanceof Error)return {name:n.name,message:n.message,stack:n.stack};if(typeof n=="function")return "[Function]";if(typeof n=="object"&&n!==null){if(e.has(n))return "[Circular]";e.add(n);}return n})}catch{try{return String(r)}catch{return "[Unserializable]"}}};function xE(r){if(!r)return false;let e=r.trim(),t=e.toLowerCase(),n=vE.some(o=>t.endsWith(o)),s=e.startsWith("/")||e.startsWith("./")||e.startsWith("~/")||e.includes("/")&&n;return n&&s}var Bb=({staticEntries:r=[],pendingEntries:e=[],isRunning:t,statusText:n="",tokenStats:s,streamingTokens:o=0,streamingStartTime:i=null,accumulatedRunTime:a=0,version:l=ro,provider:c="OpenAI",model:u="gpt-4",workDir:d=process.cwd(),showHeader:m=true,thinkingEnabled:g=true,selectMenuOptions:h=null,textPromptOptions:f=null,contextMenuActive:b=false,agentContextScreenActive:v=false,compressionMode:C="sync",compactionThreshold:T=.85,agentContextStats:I=[],runMode:M="single",networkStats:D,cooperateStats:R,commandOutput:L=[],attachedImages:S=[],interruptInputActive:k=false,queuedMessages:w=[],currentPlanSteps:A=[],getCompletions:O,onStaticRendered:z,onSubmit:P,onInterrupt:B,onExit:F,onContextMenuToggle:U,onAgentContextScreenToggle:H,onClearCommandOutput:se,onAttachImage:G,onClearImages:W,onInterruptInputSubmit:ce,onInterruptInputCancel:V,onShowInterruptInput:ve})=>{let[Z,X]=useState(""),[Y,J]=useState([]),[Q,ee]=useState(-1),[de,N]=useState(null),q=useRef(false),ne=useMemo(()=>!O||!Z.startsWith("/")?[]:O(Z),[Z,O]),le=useContext(br);useEffect(()=>{if(!le?.internal_eventEmitter||!G)return;let K=xe=>{ae("CLI_APP",`\u{1F4CE} Received image-paste event from vendor Ink: ${xe.name}`),G(xe);};return le.internal_eventEmitter.on("image-paste",K),()=>{le.internal_eventEmitter.off("image-paste",K);}},[le,G]),useEffect(()=>{f?.defaultValue&&X(f.defaultValue);},[f?.defaultValue]),Xe((K,xe)=>{if(xe.escape){if(v)return;de?N(null):L.length>0&&se&&se();}},{isActive:!h&&!de});let _e=e.filter(K=>K.type!=="thinking"&&K.type!=="reasoning"),$e=K=>{if(!K)return false;let{content:xe}=K;return typeof xe=="string"?xe.trim().length>0:Array.isArray(xe)?xe.some(he=>{if(!he||typeof he!="object"||!("type"in he))return false;switch(he.type){case "text":return typeof he.text=="string"&&he.text.trim().length>0;case "image_url":return true;case "tool_use":return true;case "tool_result":return he.content!==null&&he.content!==void 0&&String(he.content).trim().length>0;case "thinking":return typeof he.thinking=="string"&&he.thinking.trim().length>0;case "redacted_thinking":return typeof he.data=="string"&&he.data.trim().length>0;default:return true}}):false},j=K=>{if(K.message){let _o=$e(K.message);if(K.type==="user"&&!_o&&process.env.CLI_DEBUG==="1"){let Io=CE(K.message.content).slice(0,100);ae("APP",`User message filtered out! entry.id=${K.id}, message.role=${K.message.role}, content=${Io}`);}return _o}let xe=typeof K.text=="string"&&K.text.trim().length>0,he=K.type==="plan"&&!!K.planSteps&&K.planSteps.length>0,et=(K.type==="pipeline_node_start"||K.type==="pipeline_node_complete"||K.type==="pipeline_node_fail"||K.type==="pipeline_node_retry")&&(K.pipelineNode||K.pipelineNodeRetry),Bs=(K.type==="network_node_start"||K.type==="network_node_complete"||K.type==="network_node_fail")&&K.networkNode,ma=(K.type==="ccb_review"||K.type==="ccb_agent_review"||K.type==="ccb_retry"||K.type==="ccb_failed")&&!!(K.ccbReview||K.ccbAgentReview||K.ccbRetry||K.ccbFailed),ga=K.type==="pipeline_dag"&&!!K.pipelineDAG;return !!(xe||he||et||Bs||ma||ga)},te=useMemo(()=>_e.filter(j),[_e]),ie=useMemo(()=>{let K=r.filter(j);return process.env.CLI_DEBUG==="1"&&ae("APP",`visibleStaticEntries: staticEntries=${r.length}, visible=${K.length}, types=${K.map(xe=>xe.type).join(",")}`),K},[r]),Ae=m&&!q.current,Ne=E.useCallback((K,xe)=>K,[]),Le=useMemo(()=>{let K=[],xe=ie.length+te.length;return Ae&&K.push(E.createElement(ob,{key:"header",version:l,provider:c,model:u,workDir:d})),ie.forEach((he,et)=>{K.push(E.createElement(Lp,{key:`static-entry-${he.id}`,entry:he})),(et<ie.length-1||xe>ie.length)&&K.push(E.createElement(y,{key:`static-spacer-${he.id}`},""));}),K},[Ae,ie,te.length,l,c,u,d]);if(useEffect(()=>{!Ae&&r.length===0||(Ae&&(q.current=true),z?.());},[Ae,r.length,z]),v)return E.createElement($b,{agentContextStats:I,onClose:()=>H?.()});let Ie=K=>{if(f){if(!K.trim()&&!f.allowEmpty)return;f.onSubmit(K),X("");return}let xe=S.length>0,he=K.trim().length>0;(he||xe)&&(he&&J([...Y,K]),ee(-1),X(""),P(K,xe?S:void 0));},Rt=()=>{if(Y.length===0)return;let K=Q+1;K<Y.length&&(ee(K),X(Y[Y.length-1-K]));},Fe=()=>{if(Q<=0){ee(-1),X("");return}let K=Q-1;ee(K),X(Y[Y.length-1-K]);},Me=K=>{if(!O)return null;let xe=O(K);if(xe.length===0)return null;if(xe.length===1)return xe[0];let he=xe.map(et=>({label:et,value:et,description:void 0}));return N({message:"Select completion:",choices:he,initialIndex:0,onSelect:et=>{X(et),N(null);},onCancel:()=>{N(null);}}),null};return E.createElement(_,{flexDirection:"column",width:"100%"},E.createElement(Fa,{items:Le},Ne),te.map((K,xe)=>E.createElement(_,{key:`pending-wrapper-${K.id}`,flexDirection:"column"},E.createElement(Lp,{entry:K}),xe<te.length-1&&E.createElement(y,null,""))),E.createElement(y,null,`
|
|
1691
|
+
`),k&&ce&&V?E.createElement(_,{flexShrink:0,flexDirection:"column"},E.createElement(Lb,{onSubmit:ce,onCancel:V})):E.createElement(_,{flexShrink:0,flexDirection:"column"},w.length>0&&E.createElement(Ob,{messages:w}),E.createElement(Db,{inputValue:Z,isRunning:t,statusText:n,tokenStats:s,streamingTokens:o,streamingStartTime:i,accumulatedRunTime:a,provider:c,model:u,menuActive:!!h||!!de,promptActive:!!f,promptMessage:f?.message,promptHint:f?.hint,promptOnCancel:f?.onCancel,thinkingEnabled:g,contextMenuActive:b,compressionMode:C,compactionThreshold:T,agentContextStats:I,runMode:M,networkStats:D,cooperateStats:R,currentPlanSteps:A,attachments:S,completions:ne,onInputChange:K=>{if(G&&xE(K)){G(K.trim());return}X(K);},onSubmit:Ie,onInterrupt:B,onExit:F,onHistoryUp:Rt,onHistoryDown:Fe,onTabComplete:Me,onContextMenuToggle:U,onAgentContextScreenToggle:H,onRemoveAttachment:W?K=>{W();}:void 0,onPasteImage:G,onShowInterruptInput:ve}),h&&E.createElement(Bp,{message:h.message,choices:h.choices,initialIndex:h.initialIndex,hint:h.hint,onSelect:h.onSelect,onCancel:h.onCancel,onExit:F}),de&&E.createElement(Bp,{message:de.message,choices:de.choices,initialIndex:de.initialIndex,hint:de.hint,onSelect:de.onSelect,onCancel:de.onCancel,onExit:F}),L.length>0&&E.createElement(_,{flexDirection:"column",paddingX:2,paddingY:1,borderStyle:"round",borderColor:"gray"},L.map((K,xe)=>E.createElement(y,{key:xe},K)))))};re();ps();var tc=class r{appInstance=null;messages=[];staticEntries=[];nextEntryId=1;isRunning=false;statusText="";tokenStats={input:0,output:0,total:0,contextWindow:void 0,tokensUsedForContext:0,pressure:0};version="";provider="";model="";workDir="";showHeader=true;thinkingEnabled=true;callbacks;forceUpdate=null;selectMenuOptions=null;textPromptOptions=null;contextMenuActive=false;agentContextScreenActive=false;commandOutput=[];getCompletions;memoryLogTimer=null;ttyWriteGuardActive=false;allowTTYWriteDepth=0;originalStdoutWrite=null;originalStderrWrite=null;inkStdout=null;attachedImages=[];pendingEntries=[];getPendingMessages=null;interruptInputActive=false;runMode="single";streamingTokens=0;streamingStartTime=null;accumulatedRunTime=0;runningStartTime=null;compressionMode="sync";compactionThreshold=.85;agentContextStats=new Map;networkStats=null;cooperateStats=null;currentPlanSteps=[];static MAX_QUEUED_STATIC=50;constructor(e){this.callbacks=e;}setCompletionFunction(e){this.getCompletions=e;}start(){p.info("INK","Starting Ink runtime"),this.startMemorySampler();let e=()=>{let[,s]=useState(0);return useLayoutEffect(()=>(this.forceUpdate=()=>{let o=Date.now();p.debug("RUNTIME",`>>> forceUpdate called, staticEntries=${this.staticEntries.length}, pendingEntries=${this.pendingEntries.length}`),s(a=>a+1);let i=Date.now()-o;i>50&&p.warn("RUNTIME",`\u26A0\uFE0F forceUpdate slow: setCounter took ${i}ms`);},()=>{this.forceUpdate=null;}),[]),E.createElement(Bb,{staticEntries:this.staticEntries,pendingEntries:this.pendingEntries,isRunning:this.isRunning,statusText:this.statusText,tokenStats:this.tokenStats,streamingTokens:this.streamingTokens,streamingStartTime:this.streamingStartTime,accumulatedRunTime:this.accumulatedRunTime,compressionMode:this.compressionMode,compactionThreshold:this.compactionThreshold,agentContextStats:this.getAgentContextStats(),runMode:this.runMode,networkStats:this.networkStats||void 0,cooperateStats:this.cooperateStats||void 0,currentPlanSteps:this.currentPlanSteps,version:this.version,provider:this.provider,model:this.model,workDir:this.workDir,showHeader:this.showHeader,thinkingEnabled:this.thinkingEnabled,selectMenuOptions:this.selectMenuOptions,textPromptOptions:this.textPromptOptions,contextMenuActive:this.contextMenuActive,agentContextScreenActive:this.agentContextScreenActive,commandOutput:this.commandOutput,attachedImages:this.attachedImages,interruptInputActive:this.interruptInputActive,queuedMessages:this.getQueuedMessagesForDisplay(),getCompletions:this.getCompletions,onStaticRendered:void 0,onSubmit:(o,i)=>{let a=i||this.attachedImages;this.attachedImages=[],this.callbacks.onSubmit(o,a);},onInterrupt:this.callbacks.onInterrupt,onExit:this.callbacks.onExit,onContextMenuToggle:()=>{this.contextMenuActive=!this.contextMenuActive,this.forceUpdate?.();},onAgentContextScreenToggle:()=>{this.agentContextScreenActive=!this.agentContextScreenActive,this.forceUpdate?.();},onClearCommandOutput:()=>{this.clearCommandOutput();},onAttachImage:o=>{this.attachImage(o);},onClearImages:()=>{this.clearAttachedImages();},onInterruptInputSubmit:o=>{this.handleInterruptInputSubmit(o);},onInterruptInputCancel:()=>{this.hideInterruptInput();},onShowInterruptInput:()=>{this.showInterruptInput();}})},t=Ve();t&&p.info("INK","WSL detected, disabling incremental rendering for compatibility");let n=this.installTTYWriteGuard();this.appInstance=Tr(E.createElement(e,null),{stdout:n,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false,incrementalRendering:!t}),t&&setTimeout(()=>{this.forceUpdate&&(p.debug("INK","WSL startup render nudge"),this.forceUpdate());},0);try{process.stdout.isTTY&&!process.stdout.destroyed&&(this.writeDirectStdout("\x1B[?2004h"),p.info("INK","Bracketed paste mode enabled for image paste detection"));}catch(s){p.warn("INK","Failed to enable bracketed paste mode",{error:s});}try{p.debug("TTY_STATE","\u{1F6E1}\uFE0F [INK] Re-registering SIGTSTP ignore handler after Ink starts"),process.removeAllListeners("SIGTSTP"),process.on("SIGTSTP","ignore"),p.debug("TTY_STATE","\u2705 [INK] SIGTSTP handler re-registered (Ctrl+Z ignored)"),process.env.CLI_DEBUG==="1"&&p.debug("INK","SIGTSTP handler registered (Ctrl+Z ignored)");}catch{p.debug("TTY_STATE","\u26A0\uFE0F [INK] SIGTSTP not supported on this platform"),process.env.CLI_DEBUG==="1"&&p.debug("INK","SIGTSTP not supported on this platform");}p.info("INK","Ink runtime started");}stop(){try{process.stdout.isTTY&&!process.stdout.destroyed&&(this.writeDirectStdout("\x1B[?2004l"),p.debug("INK","Bracketed paste mode disabled"));}catch(e){p.debug("INK","Failed to disable bracketed paste mode (ignored)",{error:e});}this.appInstance&&(this.appInstance.unmount(),this.appInstance=null,p.info("INK","Ink runtime stopped")),this.restoreTTYWriteGuard(),this.stopMemorySampler();}installTTYWriteGuard(){if(this.ttyWriteGuardActive)return this.inkStdout??process.stdout;this.originalStdoutWrite=process.stdout.write.bind(process.stdout),this.originalStderrWrite=process.stderr.write.bind(process.stderr);let e=t=>(n,s,o)=>{if(typeof s=="function"&&(o=s,s=void 0),this.allowTTYWriteDepth>0){let i=t==="stdout"?this.originalStdoutWrite:this.originalStderrWrite;if(i)return i(n,s,o)}return this.handleSuppressedWrite(t,n),typeof o=="function"&&o(),true};return process.stdout.write=e("stdout"),process.stderr.write=e("stderr"),this.inkStdout=this.createInkStdoutProxy(),this.ttyWriteGuardActive=true,p.info("INK","TTY output guard enabled"),this.inkStdout}restoreTTYWriteGuard(){this.ttyWriteGuardActive&&(this.originalStdoutWrite&&(process.stdout.write=this.originalStdoutWrite),this.originalStderrWrite&&(process.stderr.write=this.originalStderrWrite),this.ttyWriteGuardActive=false,this.inkStdout=null,p.info("INK","TTY output guard disabled"));}createInkStdoutProxy(){let e=process.stdout,t=this.originalStdoutWrite||e.write.bind(e);return new Proxy(e,{get:(n,s,o)=>{if(s==="write")return (a,l,c)=>this.withDirectTTYWrite(()=>t(a,l,c));let i=Reflect.get(n,s,o);return typeof i=="function"?i.bind(n):i}})}withDirectTTYWrite(e){this.allowTTYWriteDepth+=1;try{return e()}finally{this.allowTTYWriteDepth=Math.max(0,this.allowTTYWriteDepth-1);}}writeDirectStdout(e){let t=this.originalStdoutWrite||process.stdout.write.bind(process.stdout);this.withDirectTTYWrite(()=>{t(e);});}handleSuppressedWrite(e,t){if(t==null)return;let n="";if(typeof t=="string")n=t;else if(Buffer.isBuffer(t))n=t.toString("utf8");else try{n=String(t);}catch{return}if(!n||n.trim().length===0)return;let s=n.length>2e3?`${n.slice(0,2e3)}...`:n;p.warn("TTY_SUPPRESS",`[${e}] ${s}`);}addMessage(e){this.messages=[...this.messages.slice(-4),e],this.forceUpdate?.();}addEntry(e){let t={...e,id:this.nextEntryId++,timestamp:new Date};if(e.type==="user"){let n=!!e.message,s=e.message?.content;p.debug("INK_RUNTIME",`[addEntry] user entry id=${t.id}, hasMessage=${n}, contentType=${typeof s}, isArray=${Array.isArray(s)}`);}return this.staticEntries.length>=r.MAX_QUEUED_STATIC&&(p.warn("INK_RUNTIME",`Static queue reached limit (${this.staticEntries.length}). Forcing immediate render to prevent OOM.`),this.forceUpdate?.(),setImmediate(()=>{this.clearStaticEntries();})),this.staticEntries=[...this.staticEntries,t],p.debug("INK_RUNTIME",`Queued static entry ${t.id}. Pending static: ${this.staticEntries.length}, type: ${e.type}, forceUpdate: ${!!this.forceUpdate}`),this.forceUpdate?this.forceUpdate():setImmediate(()=>{this.forceUpdate?.();}),t.id}updateEntry(e,t){let n=this.staticEntries.findIndex(o=>o.id===e);if(n>=0){this.staticEntries=this.staticEntries.map((o,i)=>i===n?{...o,...t}:o),this.forceUpdate?.();return}let s=this.pendingEntries.findIndex(o=>o.id===e);s>=0&&(this.pendingEntries=this.pendingEntries.map((o,i)=>i===s?{...o,...t}:o),this.forceUpdate?.());}getEntry(e){return this.staticEntries.find(t=>t.id===e)||this.pendingEntries.find(t=>t.id===e)}addPendingEntry(e){let t={...e,id:this.nextEntryId++,timestamp:new Date};if(this.pendingEntries.length>=10){p.warn("INK_RUNTIME",`Too many pending entries (${this.pendingEntries.length}). Auto-committing oldest.`);let s=this.pendingEntries[0];this.staticEntries=[...this.staticEntries,s],this.pendingEntries=this.pendingEntries.slice(1);}return this.pendingEntries=[...this.pendingEntries,t],p.debug("INK_RUNTIME",`Added pending entry ${t.id}. Pending: ${this.pendingEntries.length}`),this.forceUpdate?.(),t.id}updatePendingEntry(e,t){let n=this.pendingEntries.findIndex(s=>s.id===e);n>=0&&(this.pendingEntries=this.pendingEntries.map((s,o)=>o===n?{...s,...t}:s),this.forceUpdate?.());}updatePendingEntryByKey(e,t){let n=this.pendingEntries.findIndex(s=>s.entryKey===e);if(n>=0)this.pendingEntries=this.pendingEntries.map((s,o)=>o===n?{...s,...t,entryKey:e,timestamp:new Date}:s);else {let s={...t,entryKey:e,id:this.nextEntryId++,timestamp:new Date};this.pendingEntries=[...this.pendingEntries,s];}this.forceUpdate?.();}commitPendingEntryByKey(e){let t=this.pendingEntries.findIndex(n=>n.entryKey===e);if(t>=0){let n=this.pendingEntries[t];return this.pendingEntries=this.pendingEntries.filter((s,o)=>o!==t),this.staticEntries=[...this.staticEntries,{...n,isStreaming:false,isComplete:true}],p.debug("INK_RUNTIME",`Committed entry by key ${e}. Static: ${this.staticEntries.length}, Pending: ${this.pendingEntries.length}`),this.forceUpdate?.(),true}return false}commitPendingEntry(e){let t=this.pendingEntries.findIndex(n=>n.id===e);if(t>=0){let n=this.pendingEntries[t];this.pendingEntries=this.pendingEntries.filter((s,o)=>o!==t),this.staticEntries=[...this.staticEntries,n],p.debug("INK_RUNTIME",`Committed entry ${e}. Static: ${this.staticEntries.length}, Pending: ${this.pendingEntries.length}`),this.forceUpdate?.();}else p.warn("INK_RUNTIME",`Cannot commit entry ${e} - not found in pending entries`);}clearPendingEntries(){this.pendingEntries.length>0&&(this.pendingEntries=[],this.forceUpdate?.());}commitAllPendingEntries(){if(this.pendingEntries.length>0){let e=this.pendingEntries.map(t=>({...t,isStreaming:false,isComplete:true}));this.staticEntries=[...this.staticEntries,...e],this.pendingEntries=[],p.debug("INK_RUNTIME",`Committed ${e.length} pending entries on run complete`),this.forceUpdate?.();}}updateStreamingStats(e){this.streamingTokens=e,this.streamingStartTime||(this.streamingStartTime=Date.now()),this.forceUpdate?.();}resetStreamingStats(){this.streamingTokens=0,this.streamingStartTime=null;}getAccumulatedRunTime(){if(this.isRunning&&this.runningStartTime!==null){let e=Math.floor((Date.now()-this.runningStartTime)/1e3);return this.accumulatedRunTime+e}return this.accumulatedRunTime}resetAccumulatedRunTime(){this.accumulatedRunTime=0,this.runningStartTime=null,this.forceUpdate?.();}setCompressionMode(e){this.compressionMode!==e&&(this.compressionMode=e,this.forceUpdate?.());}setCompactionThreshold(e){this.compactionThreshold!==e&&(this.compactionThreshold=e,this.forceUpdate?.());}updateAgentContext(e,t){this.agentContextStats.set(e,t),this.forceUpdate?.();}clearAgentContext(e){this.agentContextStats.has(e)&&(this.agentContextStats.delete(e),this.forceUpdate?.());}clearAllAgentContexts(){this.agentContextStats.size>0&&(this.agentContextStats.clear(),this.forceUpdate?.());}getAgentContextStats(){return Array.from(this.agentContextStats.values()).sort((t,n)=>t.agentId==="supervisor"?-1:n.agentId==="supervisor"?1:t.agentId.localeCompare(n.agentId))}updateLastMessage(e){if(this.messages.length===0)return;let t=this.messages[this.messages.length-1];if(typeof t.content=="string")t.content=e;else if(Array.isArray(t.content)){let n=t.content.find(s=>s.type==="text");n&&"text"in n&&(n.text=e);}this.forceUpdate?.();}getLastMessageText(){if(this.messages.length===0)return "";let e=this.messages[this.messages.length-1];if(typeof e.content=="string")return e.content;if(Array.isArray(e.content)){let t=e.content.find(n=>n.type==="text");if(t&&"text"in t)return t.text||""}return ""}setRunning(e){if(this.isRunning!==e){if(e)this.runningStartTime=Date.now();else if(this.runningStartTime!==null){let t=Math.floor((Date.now()-this.runningStartTime)/1e3);this.accumulatedRunTime+=t,this.runningStartTime=null;}this.isRunning=e,this.forceUpdate?.();}}triggerForceUpdate(){this.forceUpdate?.();}setStatusText(e){this.statusText!==e&&(this.statusText=e,this.forceUpdate?.());}setTokenStats(e){p.info("DEBUG_CTX",`InkRuntime.setTokenStats: received contextWindow=${e.contextWindow}, current=${this.tokenStats.contextWindow}`);let t=e.contextWindow!==void 0?e.contextWindow:this.tokenStats.contextWindow;(this.tokenStats.input!==e.input||this.tokenStats.output!==e.output||this.tokenStats.total!==e.total||this.tokenStats.contextWindow!==t||this.tokenStats.tokensUsedForContext!==e.tokensUsedForContext||this.tokenStats.pressure!==e.pressure||this.tokenStats.toolTokens!==e.toolTokens||this.tokenStats.messageTokens!==e.messageTokens||this.tokenStats.systemTokens!==e.systemTokens||this.tokenStats.userTokens!==e.userTokens||this.tokenStats.assistantTokens!==e.assistantTokens||this.tokenStats.toolCallTokens!==e.toolCallTokens||this.tokenStats.toolResultTokens!==e.toolResultTokens||this.tokenStats.cacheCreationTokens!==e.cacheCreationTokens||this.tokenStats.cacheReadTokens!==e.cacheReadTokens)&&(this.tokenStats={...e,contextWindow:t,tokensUsedForContext:e.tokensUsedForContext??this.tokenStats.tokensUsedForContext,pressure:e.pressure??this.tokenStats.pressure},p.info("DEBUG_CTX",`InkRuntime.setTokenStats: after update contextWindow=${this.tokenStats.contextWindow}`),this.forceUpdate?.());}clearMessages(){p.warn("INK_RUNTIME",`clearMessages called! This will clear pending/static queues. Messages: ${this.messages.length}`),this.messages=[],this.staticEntries=[],this.pendingEntries=[],this.forceUpdate?.();}setCommandOutput(e){p.debug("INK_RUNTIME","Set command output",{lineCount:e.length}),this.commandOutput=e,this.forceUpdate?.();}clearCommandOutput(){p.debug("INK_RUNTIME","Clear command output"),this.commandOutput=[],this.forceUpdate?.();}attachImage(e){let t;if(typeof e=="string")if(e.startsWith("data:")){let s=e.match(/^data:([^;]+);base64,(.+)$/);if(s){let o=`image_${Date.now()}.png`;t={mediaType:s[1],data:s[2],name:o};}else {p.error("INK_RUNTIME","Invalid data URL format",{imageData:e});return}}else {let s=e.split("/").pop()||e;t={path:e,name:s};}else t=e;if(this.attachedImages.some(s=>s.path&&t.path&&s.path===t.path||s.data&&t.data&&s.data===t.data)){p.debug("INK_RUNTIME","Image already attached");return}this.attachedImages.push(t),p.info("INK_RUNTIME",`\u{1F4CE} Attached image #${this.attachedImages.length}: ${t.name||"unnamed"}`),this.forceUpdate?.();}clearAttachedImages(){this.attachedImages.length>0&&(p.debug("INK_RUNTIME",`Cleared ${this.attachedImages.length} attached images`),this.attachedImages=[],this.forceUpdate?.());}getAttachedImages(){return [...this.attachedImages]}showInterruptInput(){p.debug("INK_RUNTIME","Show interrupt input"),this.interruptInputActive=true,this.forceUpdate?.();}hideInterruptInput(){p.debug("INK_RUNTIME","Hide interrupt input"),this.interruptInputActive=false,this.forceUpdate?.();}handleInterruptInputSubmit(e){p.debug("INK_RUNTIME","Handle interrupt input submit",{text:e.substring(0,50)}),this.hideInterruptInput(),this.callbacks.onSubmit(e);}setGetPendingMessages(e){this.getPendingMessages=e;}getQueuedMessagesForDisplay(){return this.getPendingMessages?this.getPendingMessages().map((e,t)=>({id:t+1,text:e.text,timestamp:e.timestamp})):[]}hasQueuedMessages(){return this.getPendingMessages?this.getPendingMessages().length>0:false}addAgentSpawnEntry(e,t,n,s){return this.addEntry({type:"agent_spawn",agentId:e,agentIndex:t,agentStatus:"running",agentTask:n,agentModel:s,text:n})}addAgentProgressEntry(e,t,n,s){return this.addEntry({type:"agent_progress",agentId:e,agentIndex:t,agentStatus:"running",agentProgress:n,text:s})}addAgentCompleteEntry(e,t,n){return this.addEntry({type:"agent_complete",agentId:e,agentIndex:t,agentStatus:"completed",text:n})}addAgentErrorEntry(e,t,n){return this.addEntry({type:"agent_error",agentId:e,agentIndex:t,agentStatus:"error",agentError:n,text:n})}setVersion(e){this.version=e,this.forceUpdate?.();}setProvider(e){this.provider=e,this.forceUpdate?.();}setModel(e){this.model=e,this.forceUpdate?.();}setRunMode(e){this.runMode=e,e!=="network"&&(this.networkStats=null),this.forceUpdate?.();}updateNetworkStats(e){this.networkStats||(this.networkStats={teamSize:0,activeAgents:0,totalInputTokens:0,totalOutputTokens:0}),Object.assign(this.networkStats,e),this.forceUpdate?.();}clearNetworkStats(){this.networkStats=null,this.forceUpdate?.();}getNetworkStats(){return this.networkStats}updateCooperateStats(e){this.cooperateStats||(this.cooperateStats={models:[],totalInputTokens:0,totalOutputTokens:0}),Object.assign(this.cooperateStats,e),this.forceUpdate?.();}clearCooperateStats(){this.cooperateStats=null,this.forceUpdate?.();}getCooperateStats(){return this.cooperateStats}setPlanSteps(e){this.currentPlanSteps=e,this.forceUpdate?.();}getPlanSteps(){return this.currentPlanSteps}clearPlanSteps(){this.currentPlanSteps=[],this.forceUpdate?.();}setWorkDir(e){this.workDir=e,this.forceUpdate?.();}setShowHeader(e){this.showHeader=e,this.forceUpdate?.();}setThinkingEnabled(e){this.thinkingEnabled!==e&&(this.thinkingEnabled=e,this.forceUpdate?.());}showSelectMenu(e){if(p.debug("INK_RUNTIME","Show select menu",{options:e}),process.stdin.isTTY&&!process.stdin.destroyed){let t=process.stdin.isPaused?.()||false;process.stdin.isRaw||false;if(t){process.env.CLI_DEBUG==="1"&&p.debug("INK_RUNTIME",`showSelectMenu: Resuming stdin (wasPaused=${t})`);try{process.stdin.resume(),p.info("INK_RUNTIME","\u2713 Stdin resumed for SelectMenu");}catch(s){p.error("INK_RUNTIME","Failed to resume stdin for SelectMenu",{error:s});}}}this.selectMenuOptions=e,this.forceUpdate?.();}hideSelectMenu(){p.debug("INK_RUNTIME","Hide select menu"),this.selectMenuOptions=null,this.forceUpdate?.(),process.nextTick(()=>{this.forceUpdate?.();});}isSelectMenuActive(){return this.selectMenuOptions!==null}updateSelectMenuIndex(e){if(!this.selectMenuOptions)return;let t=Math.max(0,this.selectMenuOptions.choices.length-1),n=Math.max(0,Math.min(e,t));this.selectMenuOptions={...this.selectMenuOptions,initialIndex:n},this.forceUpdate?.();}showTextPrompt(e){if(p.debug("INK_RUNTIME","Show text prompt",{options:e}),process.stdin.isTTY&&!process.stdin.destroyed){let t=process.stdin.isPaused?.()||false;if(t){process.env.CLI_DEBUG==="1"&&p.debug("INK_RUNTIME",`showTextPrompt: Resuming stdin (wasPaused=${t})`);try{process.stdin.resume(),p.info("INK_RUNTIME","\u2713 Stdin resumed for TextPrompt");}catch(n){p.error("INK_RUNTIME","Failed to resume stdin for TextPrompt",{error:n});}}}this.textPromptOptions=e,this.forceUpdate?.();}hideTextPrompt(){p.debug("INK_RUNTIME","Hide text prompt"),this.textPromptOptions=null,this.forceUpdate?.();}showContextMenu(){p.debug("INK_RUNTIME","Show context menu"),this.contextMenuActive=true,this.forceUpdate?.();}hideContextMenu(){p.debug("INK_RUNTIME","Hide context menu"),this.contextMenuActive=false,this.forceUpdate?.();}getContextMenuActive(){return this.contextMenuActive}clearStaticEntries(){if(this.staticEntries.length===0)return;let e=this.staticEntries.length;p.debug("INK_RUNTIME",`Clearing ${e} static entries from memory`),this.staticEntries=[],global.gc&&e>10&&(p.debug("INK_RUNTIME","Triggering manual GC after clearing entries"),setImmediate(()=>{global.gc&&global.gc();}));}startMemorySampler(){this.memoryLogTimer||process.env.INK_MEM!=="1"||(this.memoryLogTimer=setInterval(()=>{let e=process.memoryUsage(),t=n=>Math.round(n/1024/1024*10)/10;p.info("INK_MEM","usage",{rssMB:t(e.rss),heapUsedMB:t(e.heapUsed),heapTotalMB:t(e.heapTotal),externalMB:t(e.external),arrayBuffersMB:t(e.arrayBuffers??0),pendingEntries:this.pendingEntries.length,queuedStatic:this.staticEntries.length,isRunning:this.isRunning});},1e4));}stopMemorySampler(){this.memoryLogTimer&&(clearInterval(this.memoryLogTimer),this.memoryLogTimer=null);}};re();Li();var EE=r=>{let e=new WeakSet;try{return JSON.stringify(r,(t,n)=>{if(typeof n=="bigint")return n.toString();if(n instanceof Error)return {name:n.name,message:n.message,stack:n.stack};if(typeof n=="function")return "[Function]";if(typeof n=="object"&&n!==null){if(e.has(n))return "[Circular]";e.add(n);}return n})}catch{try{return String(r)}catch{return "[Unserializable]"}}},oc=class{runtime;config;callbacks;currentThinkingText="";lastMessageRole=null;lastEntryId=null;tokenStats={inputTokens:0,outputTokens:0,totalTokens:0};memory;streamingTextPendingId=null;streamingReasoningPendingId=null;streamingTextBuffer="";streamingReasoningBuffer="";streamingReasoningType="thinking";streamingToolChars=0;hasInferredThinkingStatus=false;toolLogIdByToolId=new Map;toolLogDetailsByToolId=new Map;toolLogNameByToolId=new Map;toolLogOutputByToolId=new Map;toolLogSourceLabelByToolId=new Map;streamingSourceLabel=null;streamingSourceType=null;agentBuffers=new Map;activeAgentId=null;constructor(e){this.config=e,this.memory=e.memory,this.runtime=new tc({onSubmit:(t,n)=>{this.callbacks?.onSubmit&&this.callbacks.onSubmit(t,n);},onInterrupt:()=>{this.callbacks?.onInterrupt&&this.callbacks.onInterrupt();},onExit:()=>{this.callbacks?.onExit&&this.callbacks.onExit();}}),e.getPendingMessages&&this.runtime.setGetPendingMessages(e.getPendingMessages);}start(e){this.callbacks=e,this.runtime.setVersion(this.config.version),this.runtime.setProvider(this.config.provider),this.runtime.setModel(this.config.model),this.runtime.setWorkDir(this.config.workDir),this.config.getCompletions&&this.runtime.setCompletionFunction(this.config.getCompletions),this.runtime.start(),p.info("INK_ADAPTER","Ink UI started");}stop(){this.runtime.stop(),this.callbacks=void 0,p.info("INK_ADAPTER","Ink UI stopped");}addUserMessage(e,t,n){let s=[{type:"text",text:e}];if(t&&t.length>0)for(let i of t)s.push({type:"image_url",image_url:{url:`file://${i.path}`}});let o={role:"user",content:s};this.lastEntryId=this.runtime.addEntry({type:"user",message:o,sourceLabel:n==="remote"?"Android":void 0}),this.lastMessageRole="user";}addAssistantMessage(e=""){if(e===""){this.lastMessageRole="assistant";return}let t={role:"assistant",content:[{type:"text",text:e}]};this.lastEntryId=this.runtime.addEntry({type:"assistant",message:t,isStreaming:false}),this.lastMessageRole="assistant";}addSupervisorMessage(e){let t={role:"user",content:[{type:"text",text:e}]};this.lastEntryId=this.runtime.addEntry({type:"supervisor",message:t}),this.lastMessageRole="user";}startSupervisorStreaming(){this.startAgentStreaming("Supervisor"),this.streamingSourceLabel="Supervisor",this.streamingSourceType="supervisor";}startExecutorStreaming(e){let t=e||"Executor";this.startAgentStreaming(t);}getStreamingSourceType(){return this.streamingSourceType}startAgentStreaming(e){this.agentBuffers.has(e)||this.agentBuffers.set(e,""),this.activeAgentId=e,this.lastMessageRole="assistant",p.debug("INK_ADAPTER",`Started agent streaming for ${e}`);}startWorkerStreaming(e){this.startAgentStreaming(e);}addWorkerTextDelta(e,t){this.streamText(t,e);}completeWorkerStreaming(e){this.completeTextStreaming(e);}addWorkerInfo(e,t,n,s="info"){let i=`${`[${e}]`} ${t}`,a=s==="error"?"warning":s;this.addInfo(i,n,a);}streamText(e,t){let n=Date.now(),s=t||this.activeAgentId||"default";p.debug("INK_ADAPTER",`streamText: ${e.length} chars to ${s}`,{snippet:e.substring(0,30),bufferExists:this.agentBuffers.has(s)});let o=Date.now()-n;o>10&&p.warn("INK_ADAPTER",`\u26A0\uFE0F streamText slow: ${o}ms for ${e.length} chars`);let i=this.agentBuffers.get(s)||"";this.agentBuffers.set(s,i+e);}addTextDelta(e,t){p.debug("INK_ADAPTER",`addTextDelta called: ${e.length} chars, agentId=${t||"default"}`,{delta:e.substring(0,50)}),this.streamText(e,t);}addAgentTextDelta(e,t,n){p.debug("INK_ADAPTER",`addAgentTextDelta: ${e.length} chars, agentId=${t}`,{delta:e.substring(0,50)}),this.agentBuffers.has(t)||this.agentBuffers.set(t,"");let s=this.agentBuffers.get(t)||"";this.agentBuffers.set(t,s+e);let i={role:"assistant",content:[{type:"text",text:this.agentBuffers.get(t)||""}]};this.runtime.updatePendingEntryByKey(t,{type:"assistant",message:i,isStreaming:true,isComplete:false,sourceLabel:n||t});}bufferAgentTextOnly(e,t){this.agentBuffers.has(t)||this.agentBuffers.set(t,"");let n=this.agentBuffers.get(t)||"";this.agentBuffers.set(t,n+e);}flushAgentBuffer(e){let t=this.agentBuffers.get(e)||"";return this.agentBuffers.delete(e),t}commitPendingEntryByKey(e){return this.agentBuffers.has(e)&&this.agentBuffers.delete(e),this.runtime.commitPendingEntryByKey(e)}addToolCall(e,t){let n={role:"assistant",content:[{type:"tool_use",id:`tool_${Math.floor(Date.now())}`,name:e,input:t}]};this.runtime.addMessage(n),this.lastMessageRole="tool_call";}addToolCallEntry(e,t,n){p.debug("INK_ADAPTER","Add tool call entry",{toolName:e,sourceLabel:n?.sourceLabel});let o={read_file:"readfile",Read:"readfile",search:"search",Grep:"search",grep:"search",glob:"search_files",Glob:"search_files",search_files:"search_files",smart_tree:"show_tree",tree:"show_tree",bash:"command_running",Bash:"command_running",shell:"command_running",execute_shell:"command_running",edit:"file_update",Edit:"file_update",write:"file_update",Write:"file_update",web_search:"web_search",WebSearch:"web_search",web_fetch:"web_fetch",WebFetch:"web_fetch",browser:"browser_debug",task:"task",Task:"task"}[e]||"tool_call",i=["bash","Bash","shell","execute_shell"].includes(e),a,l;i&&t.command?(l=`$ ${t.command}`,a="\u23F3 \u6B63\u5728\u6267\u884C\u4E2D..."):(l=e,a=JSON.stringify(t,null,2)),this.runtime.addEntry({type:o,text:l,details:a,isStreaming:i,sourceLabel:n?.sourceLabel});}addToolResult(e,t=false){let n={role:"user",content:[{type:"tool_result",tool_use_id:`tool_${Math.floor(Date.now())}`,content:e,is_error:t}]};this.runtime.addMessage(n),this.lastMessageRole="tool_result";}addEntry(e){return p.debug("INK_ADAPTER",`AddEntry: ${e.type}`,{text:e.text}),this.runtime.addEntry(e)}addInfo(e,t,n="info"){p.info("INK_ADAPTER",`Info: ${e}`,t?{details:t}:void 0);let s=n==="warning"||e.includes("\u26A0")||e.includes("\u23F3")||e.includes("\u23F1\uFE0F")||e.includes("\u{1F504}");this.runtime.addEntry({type:s?"warning":"info",text:e,details:t});}addError(e,t){let n=typeof t=="string"?t:t?.details,s=typeof t=="object"?t?.sourceLabel:void 0;p.error("INK_ADAPTER",e,n?{details:n}:void 0),this.runtime.addEntry({type:"error",text:e,details:n,sourceLabel:s});}addWarning(e,t,n){p.warn("INK_ADAPTER",e,t?{details:t}:void 0),this.runtime.addEntry({type:"warning",text:e,details:t,sourceLabel:n?.sourceLabel});}addCompacting(e,t){p.info("INK_ADAPTER",`Compacting: ${e}`,t?{details:t}:void 0),this.runtime.addEntry({type:"compacting",text:e,details:t});}updateStatus(e,t){if(t==="tool_call"&&e.includes("Streaming:")){let n=e.match(/\((\d+) chars\)/);if(n){let s=parseInt(n[1],10);this.streamingToolChars=s,this.runtime.updateStreamingStats(s);}}else t!=="tool_call"&&(this.streamingToolChars=0);t==="compacting"||t==="thinking"||t==="tool_call"?this.runtime.setRunning(true):(t==="complete"||t==="error")&&this.runtime.setRunning(false),this.runtime.setStatusText(e);}setRunning(e){this.runtime.setRunning(e);}startSessionTimer(){}getAccumulatedRunTime(){return this.runtime.getAccumulatedRunTime()}resetAccumulatedRunTime(){this.runtime.resetAccumulatedRunTime();}setCompressionMode(e){this.runtime.setCompressionMode(e);}setCompactionThreshold(e){this.runtime.setCompactionThreshold(e/100);}updateTokenStats(e,t){this.tokenStats.inputTokens=e,this.tokenStats.outputTokens=t,this.tokenStats.totalTokens=e+t,this.runtime.setTokenStats({input:e,output:t,total:e+t});}updateAgentContext(e,t){this.runtime.updateAgentContext(e,t);}clearAgentContext(e){this.runtime.clearAgentContext(e);}clearAllAgentContexts(){this.runtime.clearAllAgentContexts();}getTokenStats(){return {...this.tokenStats}}setTokenStats(e,t,n){p.info("DEBUG_CTX",`InkUIAdapter.setTokenStats: input=${e}, output=${t}, extras.contextWindow=${n?.contextWindow}`),this.tokenStats={inputTokens:e,outputTokens:t,totalTokens:e+t,...n};let s=n?.anthropicCacheCreationTokens||n?.openaiCachedTokens||n?.cacheCreationTokens,o=n?.anthropicCacheReadTokens||n?.cacheReadTokens,i=n?.contextWindow||0,a=n?.tokensUsedForContext||e+t+(o||0),l=i>0?a/i:0;p.info("DEBUG_CTX",`InkUIAdapter.setTokenStats: passing to runtime contextWindow=${n?.contextWindow}, calculated contextWindow=${i}`),this.runtime.setTokenStats({input:e,output:t,total:e+t,contextWindow:n?.contextWindow,tokensUsedForContext:n?.tokensUsedForContext,pressure:l,systemTokens:n?.systemTokens,userTokens:n?.userTokens,assistantTokens:n?.assistantTokens,toolCallTokens:n?.toolCallTokens,toolResultTokens:n?.toolResultTokens,toolTokens:n?.toolTokens,messageTokens:n?.messageTokens,cacheCreationTokens:s,cacheReadTokens:o});}startThinking(){this.streamingReasoningBuffer="",this.streamingReasoningType="thinking",this.hasInferredThinkingStatus=false,this.updateStatus(rc(),"thinking");}streamThinking(e,t="thinking"){if(this.streamingReasoningBuffer+=e,!this.hasInferredThinkingStatus&&this.streamingReasoningBuffer.length>30){let n=jb(this.streamingReasoningBuffer);n&&(this.updateStatus(n,"thinking"),this.hasInferredThinkingStatus=true);}this.streamingReasoningPendingId?this.runtime.updatePendingEntry(this.streamingReasoningPendingId,{text:this.streamingReasoningBuffer}):(this.streamingReasoningType=t,this.streamingReasoningPendingId=this.runtime.addPendingEntry({type:t,text:this.streamingReasoningBuffer,isStreaming:true}));}endThinking(){if(!this.streamingReasoningPendingId){this.updateStatus("","info");return}try{this.streamingReasoningBuffer&&this.streamingReasoningBuffer.trim().length>0?(this.runtime.updatePendingEntry(this.streamingReasoningPendingId,{isStreaming:!1,isComplete:!0}),this.runtime.commitPendingEntry(this.streamingReasoningPendingId),p.debug("INK_ADAPTER",`Committed reasoning entry (${this.streamingReasoningBuffer.length} chars)`)):p.debug("INK_ADAPTER","Discarding empty reasoning entry (no content)");}catch(e){p.warn("INK_ADAPTER","Failed to commit reasoning entry",{error:e});}finally{this.streamingReasoningPendingId=null,this.streamingReasoningBuffer="",this.runtime.resetStreamingStats(),this.updateStatus("","info");}}startTaskTimer(){this.runtime.setRunning(true);}stopTaskTimer(){this.runtime.setRunning(false);}setStreamingTokens(e){this.runtime.updateStreamingStats(e);}clear(){this.runtime.clearMessages(),this.lastMessageRole=null;}resetStreamingState(){this.agentBuffers.clear(),this.activeAgentId=null,this.streamingTextBuffer="",this.streamingTextPendingId=null,this.streamingReasoningBuffer="",this.streamingReasoningPendingId=null,this.currentThinkingText="",this.streamingToolChars=0,this.runtime.clearPendingEntries(),this.runtime.resetStreamingStats(),this.runtime.setStatusText(""),p.debug("INK_ADAPTER","Reset streaming state (cleared all pending entries and buffers)");}finalizeStreamingState(){let e=Array.from(this.agentBuffers.keys());if(e.length>0)for(let t of e)this.completeTextStreaming(t);else this.completeTextStreaming();this.completeReasoningStreaming();}startReasoningStreaming(){this.startThinking();}streamReasoningText(e){this.streamThinking(e);}addReasoningDelta(e){this.streamThinking(e,"reasoning");}completeReasoningStreaming(){this.endThinking();}addThinking(e){}completeTextStreaming(e){let t=e||this.activeAgentId||"default",n=this.agentBuffers.get(t)||"";if(!(n&&n.trim().length>0)){p.debug("INK_ADAPTER",`Complete text streaming (${t}) - no text to commit`),this.agentBuffers.delete(t),this.runtime.commitPendingEntryByKey(t),(t==="default"||t===this.activeAgentId)&&(this.streamingTextPendingId=null,this.streamingSourceLabel=null,this.streamingSourceType=null,this.runtime.resetStreamingStats());return}try{if(this.runtime.commitPendingEntryByKey(t))p.debug("INK_ADAPTER",`Complete text streaming (${t}) - committed pending entry ${n.length} chars`);else {let i={role:"assistant",content:[{type:"text",text:n}]};this.runtime.addEntry({type:"assistant",message:i,isStreaming:!1,isComplete:!0,sourceLabel:t==="default"?void 0:t}),p.debug("INK_ADAPTER",`Complete text streaming (${t}) - created static entry from buffer ${n.length} chars`);}}catch(o){p.warn("INK_ADAPTER","Failed to commit text entry",{error:o});}finally{this.agentBuffers.delete(t),(t==="default"||t===this.activeAgentId)&&(this.streamingTextPendingId=null,this.streamingSourceLabel=null,this.streamingSourceType=null,this.lastMessageRole="assistant",this.runtime.resetStreamingStats()),this.activeAgentId===t&&(this.activeAgentId=null);}}printCommandOutput(e){p.debug("INK_ADAPTER",`Command output: ${e}`);}setCommandOutputLines(e){p.debug("INK_ADAPTER",`Set command output lines: ${e.length}`),this.runtime.setCommandOutput(e);}clearCommandOutputLines(){p.debug("INK_ADAPTER","Clear command output lines"),this.runtime.clearCommandOutput();}startToolCallWithId(e,t,n,s){p.debug("INK_ADAPTER",`Start tool call: ${t}`,{toolId:e,args:n});let o=this.buildToolCallDetails(n,s),i=s?.sourceLabel,c={readfile:"readfile",Read:"readfile",read_file:"readfile",search:"search",Grep:"search",grep:"search",search_files:"search_files",Glob:"search_files",glob:"search_files",find_files:"search_files",show_tree:"show_tree",smart_tree:"show_tree",list_directory:"show_tree",ls:"show_tree",file_update:"file_update",Edit:"file_update",edit_file:"file_update",Write:"file_update",write_file:"file_update",command_exec:"command_exec",Bash:"command_exec",bash:"command_exec",shell:"command_exec",execute_command:"command_exec",code_exec:"code_exec",web_search:"web_search",WebSearch:"web_search",web_fetch:"web_fetch",WebFetch:"web_fetch",browser_debug:"browser_debug",TodoWrite:"todo",TodoRead:"todo",Task:"task",NotebookEdit:"notebook",NotebookRead:"notebook",AskUserQuestion:"ask_user"}[t]||"tool_call",u=this.runtime.addEntry({type:c,text:t,details:o,isStreaming:true,sourceLabel:i});this.toolLogIdByToolId.set(e,u),this.toolLogDetailsByToolId.set(e,o||""),this.toolLogNameByToolId.set(e,t),i&&this.toolLogSourceLabelByToolId.set(e,i);let d=sc(t,n);this.updateStatus(d,"tool_call");}updateToolCallOutput(e,t,n){p.debug("INK_ADAPTER",`Update tool output: ${e}`,{output:t});let s=this.toolLogIdByToolId.get(e);if(!s)return;let o=this.toolLogDetailsByToolId.get(e)||"",i=this.formatToolOutput(t,n?.truncated);i&&this.toolLogOutputByToolId.set(e,i);let a=this.mergeToolDetails(o,i);this.runtime.updateEntry(s,{details:a,isStreaming:true});}completeToolCall(e,t){p.debug("INK_ADAPTER",`Complete tool call: ${e}`);let n=this.toolLogIdByToolId.get(e);if(!n){t?.result&&this.addToolResult(t.result,t.isError||false);return}let s=this.toolLogNameByToolId.get(e)||"",o=this.toolLogDetailsByToolId.get(e)||"",i=this.toolLogOutputByToolId.get(e)||"",a=this.toolLogSourceLabelByToolId.get(e),l=t?.summary||t?.error||"",c=[];o&&c.push(o),l&&c.push(l),!l&&i&&c.push(i),typeof t?.duration=="number"&&c.push(`duration: ${this.formatDuration(t.duration)}`),typeof t?.resultLength=="number"&&c.push(`result: ${t.resultLength}B`);let u=c.length>0?c.join(`
|
|
1692
1692
|
`):void 0;this.runtime.updateEntry(n,{type:t?.success?"tool_result":"tool_error",text:s||void 0,details:u,isStreaming:false,isComplete:true,sourceLabel:a}),this.toolLogIdByToolId.delete(e),this.toolLogDetailsByToolId.delete(e),this.toolLogNameByToolId.delete(e),this.toolLogOutputByToolId.delete(e),this.toolLogSourceLabelByToolId.delete(e);}updateTaskTokens(e,t=false){p.debug("INK_ADAPTER",`Update task tokens: ${e}`,{isActual:t}),!t&&this.runtime.updateStreamingStats(e);}addToolError(e,t){p.error("INK_ADAPTER",`Tool error: ${e}`,{error:t}),this.addToolResult(t,true);}printCommandOutputLines(e){e.forEach(t=>this.printCommandOutput(t));}resetTokenStats(){this.tokenStats={inputTokens:0,outputTokens:0,totalTokens:0},this.runtime.setTokenStats({input:0,output:0,total:0});}pause(){p.debug("INK_ADAPTER","Pause UI");}resume(){p.debug("INK_ADAPTER","Resume UI");}refreshUI(){p.debug("INK_ADAPTER","Refresh UI");}forceUpdate(){p.debug("INK_ADAPTER","Force UI update"),this.runtime.triggerForceUpdate();}setPlanSteps(e){p.debug("INK_ADAPTER",`Set plan steps: ${e.length} items`),this.runtime.setPlanSteps(e);}getPlanSteps(){return this.runtime.getPlanSteps()}clearPlanSteps(){p.debug("INK_ADAPTER","Clear plan steps"),this.runtime.clearPlanSteps();}commitAllPendingEntries(){p.debug("INK_ADAPTER","Commit all pending entries"),this.runtime.commitAllPendingEntries();}updateProvider(e,t){this.config.provider=e,this.config.model=t,this.runtime.setProvider(e),this.runtime.setModel(t);}updateWorkDir(e){this.config.workDir=e,this.runtime.setWorkDir(e);}setThinkingEnabled(e){this.runtime.setThinkingEnabled(e);}setRunMode(e){this.runtime.setRunMode(e);}updateNetworkStats(e){this.runtime.updateNetworkStats(e);}clearNetworkStats(){this.runtime.clearNetworkStats();}updateCooperateStats(e){this.runtime.updateCooperateStats(e);}clearCooperateStats(){this.runtime.clearCooperateStats();}showContextMenu(){return new Promise(e=>{this.runtime.showContextMenu();let t=setInterval(()=>{this.runtime.getContextMenuActive()||(clearInterval(t),e());},100);})}async promptText(e){return new Promise(t=>{this.runtime.showTextPrompt({message:e.message,defaultValue:e.defaultValue??e.initial,hint:e.hint,allowEmpty:e.allowEmpty??false,onSubmit:n=>{this.runtime.hideTextPrompt(),t(n);},onCancel:()=>{this.runtime.hideTextPrompt(),t(null);}});})}async promptSelect(e){return new Promise(t=>{this.runtime.hideSelectMenu();let n=e.choices.map(o=>({label:o.title,value:o.value,description:o.description})),s=e.initial||0;if(e.initialValue){let o=e.choices.findIndex(i=>i.value===e.initialValue);o>=0&&(s=o);}setTimeout(()=>{this.runtime.showSelectMenu({message:e.message,choices:n,initialIndex:s,hint:e.hint,onSelect:o=>{this.runtime.hideSelectMenu(),setTimeout(()=>t(o),100);},onCancel:()=>{this.runtime.hideSelectMenu(),setTimeout(()=>t(null),100);}});},100);})}handleSelectBack(){return p.debug("INK_ADAPTER","Handle select back"),this.runtime.isSelectMenuActive()?(this.runtime.hideSelectMenu(),true):false}addWebSearchResult(e){if(e.status==="searching"){p.debug("INK_ADAPTER","Skip web search start (waiting for completion)");return}p.debug("INK_ADAPTER","Add web search result",{options:e});let t=e.query||"query",n=e.results?`Found ${e.results.length} results`:void 0;this.runtime.addEntry({type:"web_search",text:t,details:n,sourceLabel:e.sourceLabel});}addWebFetchResult(e){if(e.status==="fetching"){p.debug("INK_ADAPTER","Skip web fetch start (waiting for completion)");return}p.debug("INK_ADAPTER","Add web fetch result",{options:e});let t=e.url||"URL",n=e.contentLength?`${(e.contentLength/1024).toFixed(1)}KB`:e.contentPreview?`${e.contentPreview.length} chars`:void 0;this.runtime.addEntry({type:"web_fetch",text:t,details:n,sourceLabel:e.sourceLabel});}addReadFileResult(e){if(e.status==="reading"){p.debug("INK_ADAPTER","Skip read file start (waiting for completion)");return}p.debug("INK_ADAPTER","Add read file result",{options:e});let t=e.filePath||"file",n=[];e.totalLines&&n.push(`${e.totalLines} lines`),e.fileSize&&n.push(e.fileSize);let s=n.length>0?n.join(", "):void 0;this.runtime.addEntry({type:"readfile",text:t,details:s,sourceLabel:e.sourceLabel});}addSearchResult(e){if(e.status==="searching"){p.debug("INK_ADAPTER","Skip search start (waiting for completion)");return}p.debug("INK_ADAPTER","Add search result",{options:e});let t=[];if(e.pattern&&t.push(`pattern="${e.pattern}"`),e.filePath){let i=e.filePath==="."?".":e.filePath;t.push(`path="${i}"`);}e.mode&&t.push(`mode="${e.mode}"`),e.strategy&&t.push(`engine="${e.strategy}"`),e.status==="completed"?e.matchCount!==void 0&&t.push(`matches=${e.matchCount}`):e.status==="error"&&t.push("\u274C ERROR");let n=t.join(", "),s=[];if(e.command){let i=this.simplifyRipgrepCommand(e.command);s.push(`$ ${i}`),s.push("");}e.status==="error"&&e.error?s.push(this.parseErrorMessage(e.error)):e.details&&s.push(e.details);let o=s.length>0?s.join(`
|
|
1693
1693
|
`):void 0;this.runtime.addEntry({type:"search",text:n,details:o,sourceLabel:e.sourceLabel});}addSearchFilesResult(e){if(e.status==="searching"){p.debug("INK_ADAPTER","Skip search files start (waiting for completion)");return}p.debug("INK_ADAPTER","Add search files result",{options:e});let t=[];e.pattern&&t.push(`pattern="${e.pattern}"`),e.path&&t.push(`path="${e.path}"`),e.fileCount!==void 0&&t.push(`files=${e.fileCount}`);let n=t.length>0?t.join(", "):"Glob";this.runtime.addEntry({type:"search_files",text:n,sourceLabel:e.sourceLabel});}addShowTreeResult(e){if(e.status==="loading"){p.debug("INK_ADAPTER","Skip show tree start (waiting for completion)");return}p.debug("INK_ADAPTER","Add show tree result",{options:e});let n=[`path="${e.path||"."}"`];if(e.mode&&n.push(`mode="${e.mode}"`),e.maxDepth!==void 0&&e.maxDepth!==null&&n.push(`depth=${e.maxDepth}`),e.status==="completed"&&e.totalChars){let a=(e.totalChars/1024).toFixed(1);n.push(`${a}KB`);}else e.status==="error"&&n.push("\u274C ERROR");let s=n.join(", "),o=this.formatSmartTreeDetails(e.content),i;e.status==="error"&&e.error?i=`Error: ${e.error}`:o?i=o:e.content&&(i=e.content.length>500?e.content.slice(0,500)+"...":e.content),this.runtime.addEntry({type:"show_tree",text:s,details:i,sourceLabel:e.sourceLabel});}addCommandExecResult(e){let t=e.command||"command",n=`shell_${t.substring(0,50)}`;if(e.status==="running"){p.debug("INK_ADAPTER","Add command exec running",{command:t});let l=[];e.timeout&&l.push(`timeout=${Math.round(e.timeout/1e3)}s`),e.background&&l.push("bg");let c=l.length>0?` (${l.join(", ")})`:"";this.runtime.updatePendingEntryByKey(n,{type:"command_running",text:`$ ${t}${c}`,details:e.cwd?`cwd: ${e.cwd}`:void 0,isStreaming:true,sourceLabel:e.sourceLabel});return}p.debug("INK_ADAPTER","Add command exec result",{options:e});let s=e.status==="error",o,i=e.output||e.error||"";if(i){let l=i.split(`
|
|
1694
1694
|
`),c=10;l.length>c?o=l.slice(0,c).join(`
|
|
@@ -1756,10 +1756,10 @@ ${s.join(`
|
|
|
1756
1756
|
\u6587\u4EF6: ${n}
|
|
1757
1757
|
|
|
1758
1758
|
\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
|
|
1759
|
-
\u8FD9\u53EF\u4EE5\u907F\u514D\u57FA\u4E8E\u8FC7\u65F6\u4FE1\u606F\u8FDB\u884C\u7F16\u8F91\u3002`,{file_path:n,suggestion:"use readfile first"}))}};var ev=[rA],tv=[];re();function Oi(r){if(!r)return 0;let e=0;for(let t of r){let n=t.codePointAt(0)||0;n>=19968&&n<=40959||n>=12288&&n<=12351||n>=65280&&n<=65519||n>=44032&&n<=55215?e+=.67:e+=.25;}return Math.ceil(e)}var fn=class{messages=[];maxMessages;constructor(e=500){this.maxMessages=e;}add(e){let t=typeof e.content=="string"?e.content:JSON.stringify(e.content),n=Oi(t),s={...e,_timestamp:Date.now(),_estimatedTokens:n};if(this.messages.push(s),e.role==="assistant"&&e.tool_calls&&e.tool_calls.length>0&&process.env.CLI_DEBUG==="1"&&p.debug("MEMORY","Assistant message with tool_calls added:",{toolCallCount:e.tool_calls.length,toolCallIds:e.tool_calls.map(o=>({id:o.id,name:o.function.name}))}),this.messages.length>this.maxMessages){let o=this.messages.filter(l=>l.role==="system"),a=this.messages.filter(l=>l.role!=="system").slice(-(this.maxMessages-o.length));this.messages=[...o,...a];}}addToolResult(e,t,n){let s=Wd(t),o=null;try{let c=JSON.parse(n);c.type&&c.status&&c.summary&&(o=c);}catch{}let i,a=s;p.info("MEMORY","addToolResult: parsedResult\uFF1A"+o),p.info("MEMORY","addToolResult: effectiveResultType\uFF1A"+a),o?(a=o.type||s,i=Zf(o),p.info("MEMORY","\u7CBE\u7B80\u7ED3\u679C: content \uFF1A"+i),p.info("MEMORY",`addToolResult: ${t} parsed as ToolResult`,{parsedResult:JSON.stringify(o).substring(0,500),contentAfter:i.substring(0,500),rawLength:n.length,contentLength:i.length})):(i=n,p.debug("MEMORY",`addToolResult: ${t} using raw output`,{rawOutput:n.substring(0,500),rawLength:n.length}));let l={role:"tool",tool_call_id:e,name:t,content:i,_resultType:a,_toolName:t,_timestamp:Date.now(),_estimatedTokens:Oi(i)};if(process.env.CLI_DEBUG==="1"&&p.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(m=>m.role==="system"),d=this.messages.filter(m=>m.role!=="system").slice(-(this.maxMessages-c.length));this.messages=[...c,...d];}}stripMetadata(e){let{_resultType:t,_toolName:n,_timestamp:s,_estimatedTokens:o,_tag:i,...a}=e;return a}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(o=>o.role==="assistant"),n=e.filter(o=>o.role==="tool");p.debug("MEMORY","Messages for LLM:",{totalMessages:e.length,assistantCount:t.length,toolCount:n.length,messageSequence:e.map(o=>o.role).join(" -> ")}),e.slice(-5).forEach((o,i)=>{o.role==="assistant"&&o.tool_calls?p.debug("MEMORY",`Message ${e.length-5+i} (assistant):`,{toolCalls:o.tool_calls.map(a=>({id:a.id,name:a.function.name}))}):o.role==="tool"&&p.debug("MEMORY",`Message ${e.length-5+i} (tool):`,{name:o.name,tool_call_id:o.tool_call_id,contentLength:typeof o.content=="string"?o.content.length:0});});}return e}hasConversationMessages(){return this.messages.some(e=>e.role==="user"||e.role==="assistant")}upsertSystemTagged(e,t){let n=t.trim();if(!n){this.removeSystemTagged(e);return}let s=this.messages.findIndex(a=>a.role==="system"&&a._tag===e);if(s>=0){let a=this.messages[s];if(a.content===n)return;this.messages[s]={...a,content:n,_timestamp:Date.now(),_estimatedTokens:Oi(n)};return}let o={role:"system",content:n,_tag:e,_timestamp:Date.now(),_estimatedTokens:Oi(n)},i=this.getSystemInsertIndex();this.messages=[...this.messages.slice(0,i),o,...this.messages.slice(i)];}removeSystemTagged(e){let t=this.messages.length;this.messages=this.messages.filter(n=>!(n.role==="system"&&n._tag===e)),t!==this.messages.length&&process.env.CLI_DEBUG==="1"&&p.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 n of this.messages)if(n.role==="assistant"&&n.tool_calls)for(let s of n.tool_calls)s.id&&t.add(s.id);return this.messages=this.messages.filter(n=>n._resultType!=="ephemeral"||n.role!=="tool"||!n.tool_call_id?true:t.has(n.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,n=0,s=0;for(let a of this.messages){let l=a._estimatedTokens||Oi(typeof a.content=="string"?a.content:JSON.stringify(a.content));t+=l,a.role==="tool"?(s++,n+=l,a._resultType==="ephemeral"?(e.ephemeral.count++,e.ephemeral.tokens+=l):a._resultType==="contextual"?(e.contextual.count++,e.contextual.tokens+=l):a._resultType==="summarized"?(e.summarized.count++,e.summarized.tokens+=l):(e.other.count++,e.other.tokens+=l)):(e.other.count++,e.other.tokens+=l);}let o=t>0?n/t:0,i=[];return o>.5?i.push(`Tool results\u5360\u7528 ${(o*100).toFixed(1)}% \u7684\u4E0A\u4E0B\u6587\uFF08\u8D85\u8FC750%\u8B66\u6212\u7EBF\uFF09`):o>.4&&i.push(`Tool results\u5360\u7528 ${(o*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`),s>100?i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8FC7\u957F\uFF08${s} \u6761\uFF09`):s>60&&i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8F83\u957F\uFF08${s} \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:n,toolResultRatio:o,messageCount:this.messages.length,toolMessageCount:s,warnings:i,shouldCompress:o>.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,n=Math.round(t/1024*10)/10,s=this.messages.length*150,o=t+s,i=Math.round(o/1024*10)/10;return {totalKB:i,messagesKB:n,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();p.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:[],n=t.filter(a=>a.role==="system"),s=t.filter(a=>a.role!=="system"),o=Math.max(0,this.maxMessages-n.length),i=o>0?s.slice(-o):[];this.messages=[...n,...i].map(a=>({...a,_timestamp:Date.now()}));}get length(){return this.messages.length}};var ir=class r{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||ge__default.join(Cr__default.homedir(),".neox","sessions"),this.filePath=ge__default.join(this.directory,`${this.sessionId}.jsonl`);}async ensureDirectory(){await
|
|
1760
|
-
`;await
|
|
1761
|
-
`);await
|
|
1762
|
-
`:"","utf-8"),e.length>0?this.sequenceNumber=Math.max(...e.map(n=>n.seq))+1:this.sequenceNumber=0;}async getItems(e){await this.ensureInitialized();let n=(await this.readAllItems()).map(s=>s.item);return e===void 0?n:n.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 n=Math.min(e,t.length),s=t.splice(-n);return await this.writeAllItems(t),s.map(o=>o.item)}async createCheckpoint(e,t){await this.ensureInitialized();let n=`cp_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,s={type:"checkpoint",data:{id:n,name:e,description:t}};return await this.appendItem(s),n}async rollbackToCheckpoint(e){await this.ensureInitialized();let t=await this.readAllItems(),n=t.findIndex(i=>i.item.type==="checkpoint"&&i.item.data.id===e);if(n===-1)throw new Error(`Checkpoint not found: ${e}`);let s=t.slice(0,n+1),o=t.length-s.length;return await this.writeAllItems(s),o}async getCheckpoints(){await this.ensureInitialized();let e=await this.readAllItems(),t=[];for(let n of e)if(n.item.type==="checkpoint"){let s=n.item;t.push({id:s.data.id,name:s.data.name,timestamp:n.timestamp});}return t}async clearSession(){try{await Ie__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 n of e)n.item.type==="message"&&t.push(n.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((n,s)=>({item:n.item,timestamp:n.timestamp??Date.now(),seq:s}));await this.writeAllItems(t),this.initialized=true;}static async listSessions(e){let t=e||ge__default.join(Cr__default.homedir(),".neox","sessions");try{return (await Ie__default.readdir(t)).filter(s=>s.endsWith(".jsonl")).map(s=>s.replace(".jsonl",""))}catch{return []}}static async getMostRecentId(e){let t=e||ge__default.join(Cr__default.homedir(),".neox","sessions");try{let s=(await Ie__default.readdir(t)).filter(i=>i.endsWith(".jsonl"));if(s.length===0)return null;let o=await Promise.all(s.map(async i=>({name:i.replace(".jsonl",""),mtime:(await Ie__default.stat(ge__default.join(t,i))).mtime})));return o.sort((i,a)=>a.mtime.getTime()-i.mtime.getTime()),o[0].name}catch{return null}}static async deleteSession(e,t){let n=t||ge__default.join(Cr__default.homedir(),".neox","sessions"),s=ge__default.join(n,`${e}.jsonl`);try{return await Ie__default.unlink(s),!0}catch{return false}}static async getSessionInfo(e,t){let n=t||ge__default.join(Cr__default.homedir(),".neox","sessions"),s=ge__default.join(n,`${e}.jsonl`);try{let o=await Ie__default.stat(s);return {sessionId:e,filePath:s,size:o.size,createdAt:o.birthtime,updatedAt:o.mtime}}catch{return null}}static create(e){return new r({sessionId:Sr(),...e})}};var Fn=class{directory;options;sessionCache=new Map;constructor(e){this.options=e||{},this.directory=e?.directory||ge__default.join(Cr__default.homedir(),".neox","sessions");}async getSession(e){if(this.sessionCache.has(e))return this.sessionCache.get(e);let t=new ir({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 Ie__default.mkdir(this.directory,{recursive:!0});let t=await Ie__default.readdir(this.directory);for(let n of t){if(!n.endsWith(".jsonl"))continue;let s=n.replace(".jsonl",""),o=ge__default.join(this.directory,n);try{let i=await Ie__default.stat(o),a=await this.readSessionMeta(o),l=await this.countItems(o);e.push({sessionId:s,createdAt:i.birthtime,updatedAt:i.mtime,itemCount:l,agentName:a?.agentName});}catch{}}}catch(t){if(t.code!=="ENOENT")throw t}return e.sort((t,n)=>n.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=ge__default.join(this.directory,`${e}.jsonl`);try{return await Ie__default.unlink(t),!0}catch{return false}}async searchSessions(e){let t=await this.listSessions(),n=e.toLowerCase(),s=[];for(let o of t){if(o.sessionId.toLowerCase().includes(n)){s.push(o);continue}if(o.agentName?.toLowerCase().includes(n)){s.push(o);continue}let i=ge__default.join(this.directory,`${o.sessionId}.jsonl`);await this.searchInFile(i,n)&&s.push(o);}return s}async createSession(e){let t=e?.sessionId||Sr(),n=new ir({sessionId:t,directory:this.directory,agentName:e?.agentName||this.options.defaultAgentName,model:e?.model||this.options.defaultModel});return this.sessionCache.set(t,n),n}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(),n=Date.now()-e*24*60*60*1e3,s=0;for(let o of t)o.updatedAt.getTime()<n&&await this.deleteSession(o.sessionId)&&s++;return s}getDirectory(){return this.directory}async getSessionCount(){return (await this.listSessions()).length}async exportSession(e){let t=await this.getSession(e),n=await t.getItems(),s=await t.getMeta();return JSON.stringify({sessionId:e,meta:s,items:n,exportedAt:new Date().toISOString()},null,2)}async readSessionMeta(e){try{let t=createReadStream(e,{encoding:"utf-8"}),n=Xp__default.createInterface({input:t,crlfDelay:1/0});for await(let s of n)if(s.trim())try{let o=JSON.parse(s);if(o.item?.type==="meta")return n.close(),o.item.data}catch{}}catch{}return null}async countItems(e){let t=0;try{let n=createReadStream(e,{encoding:"utf-8"}),s=Xp__default.createInterface({input:n,crlfDelay:1/0});for await(let o of s)o.trim()&&t++;}catch{}return t}async searchInFile(e,t){try{let n=createReadStream(e,{encoding:"utf-8"}),s=Xp__default.createInterface({input:n,crlfDelay:1/0});for await(let o of s)if(o.toLowerCase().includes(t))return s.close(),!0}catch{}return false}};var lo=class{session;memory;systemPrompt;turnCount=0;isSyncing=false;constructor(e){this.session=e.session,this.memory=e.memory,this.systemPrompt=e.systemPrompt;}async loadHistory(){let e=await this.session.getMessages();this.memory.clear(),this.systemPrompt&&this.memory.add({role:"system",content:this.systemPrompt});for(let t of e)if(t.role!=="system"){let n=jh(t.content);this.memory.add({...t,content:n});}return this.turnCount=e.filter(t=>t.role==="user").length,e.length}async saveMessage(e){this.isSyncing||e.role!=="system"&&(await this.session.addItems([Fo(e)]),e.role==="assistant"&&this.turnCount++);}async saveTurn(e,t){this.isSyncing||(await this.session.addItems([Fo(e),Fo(t)]),this.turnCount++);}async undo(e=1){if(e<=0)return {success:false,undoneCount:0,messages:[]};this.isSyncing=true;let t=[];try{for(let n=0;n<e;n++){let s=await this.session.popItem();if(!s)break;let o=await this.session.popItem();if(!o){await this.session.addItems([s]);break}s.type==="message"&&t.unshift(s.data),o.type==="message"&&t.unshift(o.data);}return await this.loadHistory(),{success:t.length>0,undoneCount:Math.floor(t.length/2),messages:t}}finally{this.isSyncing=false;}}async undoUntil(e){this.isSyncing=true;let t=[];try{for(;;){let n=await this.session.popItem();if(!n)break;if(n.type==="message"){let s=n.data;if(t.unshift(s),Ce(s.content)?.startsWith(e)){await this.session.addItems([n]),t.shift();break}}}return await this.loadHistory(),{success:t.length>0,undoneCount:Math.ceil(t.length/2),messages:t}}finally{this.isSyncing=false;}}async createCheckpoint(e){let t=`Turn ${this.turnCount}, ${new Date().toLocaleString()}`;return await this.session.createCheckpoint(e,t)}async rollback(e){this.isSyncing=true;try{let t=await this.session.getItems(),n=t.findIndex(i=>i.type==="checkpoint"&&i.data.id===e);if(n===-1)throw new Error(`Checkpoint not found: ${e}`);let s=t.slice(n+1),o=await this.session.rollbackToCheckpoint(e);return await this.rollbackFileOperations(s),await this.loadHistory(),{success:!0,removedCount:o}}finally{this.isSyncing=false;}}async rollbackFileOperations(e){let t=[],n=[];for(let i of e)i.type==="file_snapshot"?t.push(i):i.type==="file_edit_snapshot"&&n.push(i);let s=new Map;for(let i of t){let a=i.data.filePath;s.has(a)||s.set(a,i);}let o=new Map;for(let i of n){let a=i.data.filePath;o.has(a)||o.set(a,[]),o.get(a).push(i);}for(let[i,a]of s)try{let l=ge.resolve(i);if(a.data.originalContent===null)Ze.existsSync(l)&&(await Ze.promises.unlink(l),console.log(` \u21BA Deleted file: ${i}`));else {let c=ge.dirname(l);await Ze.promises.mkdir(c,{recursive:!0}),await Ze.promises.writeFile(l,a.data.originalContent,"utf-8"),console.log(` \u21BA Restored file: ${i}`);}o.delete(i);}catch(l){console.error(` \u26A0 Failed to restore ${i}: ${l.message}`);}for(let[i,a]of o)try{let l=ge.resolve(i);if(!Ze.existsSync(l)){console.error(` \u26A0 File not found for rollback: ${i}`);continue}let c=await Ze.promises.readFile(l,"utf-8");for(let u=a.length-1;u>=0;u--){let d=a[u];if(d.data.replaceAll)c=c.split(d.data.newString).join(d.data.oldString);else {let m=c.lastIndexOf(d.data.newString);m!==-1&&(c=c.substring(0,m)+d.data.oldString+c.substring(m+d.data.newString.length));}}await Ze.promises.writeFile(l,c,"utf-8"),console.log(` \u21BA Reverted ${a.length} edit(s) in: ${i}`);}catch(l){console.error(` \u26A0 Failed to rollback edits in ${i}: ${l.message}`);}}async getCheckpoints(){return await this.session.getCheckpoints()}getTurnCount(){return this.turnCount}getSessionId(){return this.session.sessionId}getSession(){return this.session}getMemory(){return this.memory}async getSessionInfo(){let e=await this.session.getMeta();await this.session.getItemCount();let n=await this.session.getCheckpoints();return {sessionId:this.session.sessionId,turnCount:this.turnCount,messageCount:(await this.session.getMessages()).length,checkpointCount:n.length,meta:e}}setSystemPrompt(e){this.systemPrompt=e;}async clearSession(){await this.session.clearSession(),this.memory.clear(),this.turnCount=0,this.systemPrompt&&this.memory.add({role:"system",content:this.systemPrompt});}};var Un=class{prepareRequest(e,t){let{model:n,temperature:s,maxInputTokens:o,disableSystemPrompt:i,systemPromptOverride:a,...l}=t,c=this.constraints.validateParams({model:n,temperature:s,max_tokens:o,...l}),u=this.constraints.normalizeParams({model:n,temperature:s,max_tokens:o,...l}),d=i?null:a&&a.trim().length>0?a:this.promptBuilder.buildSystemPrompt({workDir:process.cwd(),language:this.detectLanguage(),modelName:n}),m=i||!d?e:this.injectSystemPrompt(e,d),g={...u,model:n,maxInputTokens:this.applyTokenLimits(n,o)};return {messages:m,options:g,validation:{valid:c.valid,errors:c.errors,warnings:c.warnings}}}injectSystemPrompt(e,t){if(e.some(s=>s.role==="system")){let s=e.filter(a=>a.role==="system").map(a=>this.normalizeSystemContent(a.content)).filter(a=>a.length>0),o=s.length>0?[t,...s].join(`
|
|
1759
|
+
\u8FD9\u53EF\u4EE5\u907F\u514D\u57FA\u4E8E\u8FC7\u65F6\u4FE1\u606F\u8FDB\u884C\u7F16\u8F91\u3002`,{file_path:n,suggestion:"use readfile first"}))}};var ev=[rA],tv=[];re();function Oi(r){if(!r)return 0;let e=0;for(let t of r){let n=t.codePointAt(0)||0;n>=19968&&n<=40959||n>=12288&&n<=12351||n>=65280&&n<=65519||n>=44032&&n<=55215?e+=.67:e+=.25;}return Math.ceil(e)}var fn=class{messages=[];maxMessages;constructor(e=500){this.maxMessages=e;}add(e){let t=typeof e.content=="string"?e.content:JSON.stringify(e.content),n=Oi(t),s={...e,_timestamp:Date.now(),_estimatedTokens:n};if(this.messages.push(s),e.role==="assistant"&&e.tool_calls&&e.tool_calls.length>0&&process.env.CLI_DEBUG==="1"&&p.debug("MEMORY","Assistant message with tool_calls added:",{toolCallCount:e.tool_calls.length,toolCallIds:e.tool_calls.map(o=>({id:o.id,name:o.function.name}))}),this.messages.length>this.maxMessages){let o=this.messages.filter(l=>l.role==="system"),a=this.messages.filter(l=>l.role!=="system").slice(-(this.maxMessages-o.length));this.messages=[...o,...a];}}addToolResult(e,t,n){let s=Wd(t),o=null;try{let c=JSON.parse(n);c.type&&c.status&&c.summary&&(o=c);}catch{}let i,a=s;p.info("MEMORY","addToolResult: parsedResult\uFF1A"+o),p.info("MEMORY","addToolResult: effectiveResultType\uFF1A"+a),o?(a=o.type||s,i=Zf(o),p.info("MEMORY","\u7CBE\u7B80\u7ED3\u679C: content \uFF1A"+i),p.info("MEMORY",`addToolResult: ${t} parsed as ToolResult`,{parsedResult:JSON.stringify(o).substring(0,500),contentAfter:i.substring(0,500),rawLength:n.length,contentLength:i.length})):(i=n,p.debug("MEMORY",`addToolResult: ${t} using raw output`,{rawOutput:n.substring(0,500),rawLength:n.length}));let l={role:"tool",tool_call_id:e,name:t,content:i,_resultType:a,_toolName:t,_timestamp:Date.now(),_estimatedTokens:Oi(i)};if(process.env.CLI_DEBUG==="1"&&p.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(m=>m.role==="system"),d=this.messages.filter(m=>m.role!=="system").slice(-(this.maxMessages-c.length));this.messages=[...c,...d];}}stripMetadata(e){let{_resultType:t,_toolName:n,_timestamp:s,_estimatedTokens:o,_tag:i,...a}=e;return a}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(o=>o.role==="assistant"),n=e.filter(o=>o.role==="tool");p.debug("MEMORY","Messages for LLM:",{totalMessages:e.length,assistantCount:t.length,toolCount:n.length,messageSequence:e.map(o=>o.role).join(" -> ")}),e.slice(-5).forEach((o,i)=>{o.role==="assistant"&&o.tool_calls?p.debug("MEMORY",`Message ${e.length-5+i} (assistant):`,{toolCalls:o.tool_calls.map(a=>({id:a.id,name:a.function.name}))}):o.role==="tool"&&p.debug("MEMORY",`Message ${e.length-5+i} (tool):`,{name:o.name,tool_call_id:o.tool_call_id,contentLength:typeof o.content=="string"?o.content.length:0});});}return e}hasConversationMessages(){return this.messages.some(e=>e.role==="user"||e.role==="assistant")}upsertSystemTagged(e,t){let n=t.trim();if(!n){this.removeSystemTagged(e);return}let s=this.messages.findIndex(a=>a.role==="system"&&a._tag===e);if(s>=0){let a=this.messages[s];if(a.content===n)return;this.messages[s]={...a,content:n,_timestamp:Date.now(),_estimatedTokens:Oi(n)};return}let o={role:"system",content:n,_tag:e,_timestamp:Date.now(),_estimatedTokens:Oi(n)},i=this.getSystemInsertIndex();this.messages=[...this.messages.slice(0,i),o,...this.messages.slice(i)];}removeSystemTagged(e){let t=this.messages.length;this.messages=this.messages.filter(n=>!(n.role==="system"&&n._tag===e)),t!==this.messages.length&&process.env.CLI_DEBUG==="1"&&p.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 n of this.messages)if(n.role==="assistant"&&n.tool_calls)for(let s of n.tool_calls)s.id&&t.add(s.id);return this.messages=this.messages.filter(n=>n._resultType!=="ephemeral"||n.role!=="tool"||!n.tool_call_id?true:t.has(n.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,n=0,s=0;for(let a of this.messages){let l=a._estimatedTokens||Oi(typeof a.content=="string"?a.content:JSON.stringify(a.content));t+=l,a.role==="tool"?(s++,n+=l,a._resultType==="ephemeral"?(e.ephemeral.count++,e.ephemeral.tokens+=l):a._resultType==="contextual"?(e.contextual.count++,e.contextual.tokens+=l):a._resultType==="summarized"?(e.summarized.count++,e.summarized.tokens+=l):(e.other.count++,e.other.tokens+=l)):(e.other.count++,e.other.tokens+=l);}let o=t>0?n/t:0,i=[];return o>.5?i.push(`Tool results\u5360\u7528 ${(o*100).toFixed(1)}% \u7684\u4E0A\u4E0B\u6587\uFF08\u8D85\u8FC750%\u8B66\u6212\u7EBF\uFF09`):o>.4&&i.push(`Tool results\u5360\u7528 ${(o*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`),s>100?i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8FC7\u957F\uFF08${s} \u6761\uFF09`):s>60&&i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8F83\u957F\uFF08${s} \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:n,toolResultRatio:o,messageCount:this.messages.length,toolMessageCount:s,warnings:i,shouldCompress:o>.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,n=Math.round(t/1024*10)/10,s=this.messages.length*150,o=t+s,i=Math.round(o/1024*10)/10;return {totalKB:i,messagesKB:n,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();p.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:[],n=t.filter(a=>a.role==="system"),s=t.filter(a=>a.role!=="system"),o=Math.max(0,this.maxMessages-n.length),i=o>0?s.slice(-o):[];this.messages=[...n,...i].map(a=>({...a,_timestamp:Date.now()}));}get length(){return this.messages.length}};var ir=class r{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||ge__default.join(Cr__default.homedir(),".neox","sessions"),this.filePath=ge__default.join(this.directory,`${this.sessionId}.jsonl`);}async ensureDirectory(){await Ee__default.mkdir(this.directory,{recursive:true});}async ensureInitialized(){if(!this.initialized){await this.ensureDirectory();try{await Ee__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=Ze__default.createReadStream(this.filePath,{encoding:"utf-8"}),n=Xp__default.createInterface({input:t,crlfDelay:1/0});for await(let s of n)if(s.trim())try{let o=JSON.parse(s);e.push(o);}catch{console.warn(`Invalid JSONL line: ${s.slice(0,50)}...`);}}catch(t){if(t.code!=="ENOENT")throw t}return e.sort((t,n)=>t.seq-n.seq),e}async appendItem(e){await this.ensureDirectory();let t={item:e,timestamp:Date.now(),seq:this.sequenceNumber++},n=JSON.stringify(t)+`
|
|
1760
|
+
`;await Ee__default.appendFile(this.filePath,n,"utf-8");}async writeAllItems(e){await this.ensureDirectory();let t=e.map(n=>JSON.stringify(n)).join(`
|
|
1761
|
+
`);await Ee__default.writeFile(this.filePath,t?t+`
|
|
1762
|
+
`:"","utf-8"),e.length>0?this.sequenceNumber=Math.max(...e.map(n=>n.seq))+1:this.sequenceNumber=0;}async getItems(e){await this.ensureInitialized();let n=(await this.readAllItems()).map(s=>s.item);return e===void 0?n:n.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 n=Math.min(e,t.length),s=t.splice(-n);return await this.writeAllItems(t),s.map(o=>o.item)}async createCheckpoint(e,t){await this.ensureInitialized();let n=`cp_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,s={type:"checkpoint",data:{id:n,name:e,description:t}};return await this.appendItem(s),n}async rollbackToCheckpoint(e){await this.ensureInitialized();let t=await this.readAllItems(),n=t.findIndex(i=>i.item.type==="checkpoint"&&i.item.data.id===e);if(n===-1)throw new Error(`Checkpoint not found: ${e}`);let s=t.slice(0,n+1),o=t.length-s.length;return await this.writeAllItems(s),o}async getCheckpoints(){await this.ensureInitialized();let e=await this.readAllItems(),t=[];for(let n of e)if(n.item.type==="checkpoint"){let s=n.item;t.push({id:s.data.id,name:s.data.name,timestamp:n.timestamp});}return t}async clearSession(){try{await Ee__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 n of e)n.item.type==="message"&&t.push(n.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((n,s)=>({item:n.item,timestamp:n.timestamp??Date.now(),seq:s}));await this.writeAllItems(t),this.initialized=true;}static async listSessions(e){let t=e||ge__default.join(Cr__default.homedir(),".neox","sessions");try{return (await Ee__default.readdir(t)).filter(s=>s.endsWith(".jsonl")).map(s=>s.replace(".jsonl",""))}catch{return []}}static async getMostRecentId(e){let t=e||ge__default.join(Cr__default.homedir(),".neox","sessions");try{let s=(await Ee__default.readdir(t)).filter(i=>i.endsWith(".jsonl"));if(s.length===0)return null;let o=await Promise.all(s.map(async i=>({name:i.replace(".jsonl",""),mtime:(await Ee__default.stat(ge__default.join(t,i))).mtime})));return o.sort((i,a)=>a.mtime.getTime()-i.mtime.getTime()),o[0].name}catch{return null}}static async deleteSession(e,t){let n=t||ge__default.join(Cr__default.homedir(),".neox","sessions"),s=ge__default.join(n,`${e}.jsonl`);try{return await Ee__default.unlink(s),!0}catch{return false}}static async getSessionInfo(e,t){let n=t||ge__default.join(Cr__default.homedir(),".neox","sessions"),s=ge__default.join(n,`${e}.jsonl`);try{let o=await Ee__default.stat(s);return {sessionId:e,filePath:s,size:o.size,createdAt:o.birthtime,updatedAt:o.mtime}}catch{return null}}static create(e){return new r({sessionId:Sr(),...e})}};var Fn=class{directory;options;sessionCache=new Map;constructor(e){this.options=e||{},this.directory=e?.directory||ge__default.join(Cr__default.homedir(),".neox","sessions");}async getSession(e){if(this.sessionCache.has(e))return this.sessionCache.get(e);let t=new ir({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 Ee__default.mkdir(this.directory,{recursive:!0});let t=await Ee__default.readdir(this.directory);for(let n of t){if(!n.endsWith(".jsonl"))continue;let s=n.replace(".jsonl",""),o=ge__default.join(this.directory,n);try{let i=await Ee__default.stat(o),a=await this.readSessionMeta(o),l=await this.countItems(o);e.push({sessionId:s,createdAt:i.birthtime,updatedAt:i.mtime,itemCount:l,agentName:a?.agentName});}catch{}}}catch(t){if(t.code!=="ENOENT")throw t}return e.sort((t,n)=>n.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=ge__default.join(this.directory,`${e}.jsonl`);try{return await Ee__default.unlink(t),!0}catch{return false}}async searchSessions(e){let t=await this.listSessions(),n=e.toLowerCase(),s=[];for(let o of t){if(o.sessionId.toLowerCase().includes(n)){s.push(o);continue}if(o.agentName?.toLowerCase().includes(n)){s.push(o);continue}let i=ge__default.join(this.directory,`${o.sessionId}.jsonl`);await this.searchInFile(i,n)&&s.push(o);}return s}async createSession(e){let t=e?.sessionId||Sr(),n=new ir({sessionId:t,directory:this.directory,agentName:e?.agentName||this.options.defaultAgentName,model:e?.model||this.options.defaultModel});return this.sessionCache.set(t,n),n}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(),n=Date.now()-e*24*60*60*1e3,s=0;for(let o of t)o.updatedAt.getTime()<n&&await this.deleteSession(o.sessionId)&&s++;return s}getDirectory(){return this.directory}async getSessionCount(){return (await this.listSessions()).length}async exportSession(e){let t=await this.getSession(e),n=await t.getItems(),s=await t.getMeta();return JSON.stringify({sessionId:e,meta:s,items:n,exportedAt:new Date().toISOString()},null,2)}async readSessionMeta(e){try{let t=createReadStream(e,{encoding:"utf-8"}),n=Xp__default.createInterface({input:t,crlfDelay:1/0});for await(let s of n)if(s.trim())try{let o=JSON.parse(s);if(o.item?.type==="meta")return n.close(),o.item.data}catch{}}catch{}return null}async countItems(e){let t=0;try{let n=createReadStream(e,{encoding:"utf-8"}),s=Xp__default.createInterface({input:n,crlfDelay:1/0});for await(let o of s)o.trim()&&t++;}catch{}return t}async searchInFile(e,t){try{let n=createReadStream(e,{encoding:"utf-8"}),s=Xp__default.createInterface({input:n,crlfDelay:1/0});for await(let o of s)if(o.toLowerCase().includes(t))return s.close(),!0}catch{}return false}};var lo=class{session;memory;systemPrompt;turnCount=0;isSyncing=false;constructor(e){this.session=e.session,this.memory=e.memory,this.systemPrompt=e.systemPrompt;}async loadHistory(){let e=await this.session.getMessages();this.memory.clear(),this.systemPrompt&&this.memory.add({role:"system",content:this.systemPrompt});for(let t of e)if(t.role!=="system"){let n=jh(t.content);this.memory.add({...t,content:n});}return this.turnCount=e.filter(t=>t.role==="user").length,e.length}async saveMessage(e){this.isSyncing||e.role!=="system"&&(await this.session.addItems([Fo(e)]),e.role==="assistant"&&this.turnCount++);}async saveTurn(e,t){this.isSyncing||(await this.session.addItems([Fo(e),Fo(t)]),this.turnCount++);}async undo(e=1){if(e<=0)return {success:false,undoneCount:0,messages:[]};this.isSyncing=true;let t=[];try{for(let n=0;n<e;n++){let s=await this.session.popItem();if(!s)break;let o=await this.session.popItem();if(!o){await this.session.addItems([s]);break}s.type==="message"&&t.unshift(s.data),o.type==="message"&&t.unshift(o.data);}return await this.loadHistory(),{success:t.length>0,undoneCount:Math.floor(t.length/2),messages:t}}finally{this.isSyncing=false;}}async undoUntil(e){this.isSyncing=true;let t=[];try{for(;;){let n=await this.session.popItem();if(!n)break;if(n.type==="message"){let s=n.data;if(t.unshift(s),Ce(s.content)?.startsWith(e)){await this.session.addItems([n]),t.shift();break}}}return await this.loadHistory(),{success:t.length>0,undoneCount:Math.ceil(t.length/2),messages:t}}finally{this.isSyncing=false;}}async createCheckpoint(e){let t=`Turn ${this.turnCount}, ${new Date().toLocaleString()}`;return await this.session.createCheckpoint(e,t)}async rollback(e){this.isSyncing=true;try{let t=await this.session.getItems(),n=t.findIndex(i=>i.type==="checkpoint"&&i.data.id===e);if(n===-1)throw new Error(`Checkpoint not found: ${e}`);let s=t.slice(n+1),o=await this.session.rollbackToCheckpoint(e);return await this.rollbackFileOperations(s),await this.loadHistory(),{success:!0,removedCount:o}}finally{this.isSyncing=false;}}async rollbackFileOperations(e){let t=[],n=[];for(let i of e)i.type==="file_snapshot"?t.push(i):i.type==="file_edit_snapshot"&&n.push(i);let s=new Map;for(let i of t){let a=i.data.filePath;s.has(a)||s.set(a,i);}let o=new Map;for(let i of n){let a=i.data.filePath;o.has(a)||o.set(a,[]),o.get(a).push(i);}for(let[i,a]of s)try{let l=ge.resolve(i);if(a.data.originalContent===null)Ze.existsSync(l)&&(await Ze.promises.unlink(l),console.log(` \u21BA Deleted file: ${i}`));else {let c=ge.dirname(l);await Ze.promises.mkdir(c,{recursive:!0}),await Ze.promises.writeFile(l,a.data.originalContent,"utf-8"),console.log(` \u21BA Restored file: ${i}`);}o.delete(i);}catch(l){console.error(` \u26A0 Failed to restore ${i}: ${l.message}`);}for(let[i,a]of o)try{let l=ge.resolve(i);if(!Ze.existsSync(l)){console.error(` \u26A0 File not found for rollback: ${i}`);continue}let c=await Ze.promises.readFile(l,"utf-8");for(let u=a.length-1;u>=0;u--){let d=a[u];if(d.data.replaceAll)c=c.split(d.data.newString).join(d.data.oldString);else {let m=c.lastIndexOf(d.data.newString);m!==-1&&(c=c.substring(0,m)+d.data.oldString+c.substring(m+d.data.newString.length));}}await Ze.promises.writeFile(l,c,"utf-8"),console.log(` \u21BA Reverted ${a.length} edit(s) in: ${i}`);}catch(l){console.error(` \u26A0 Failed to rollback edits in ${i}: ${l.message}`);}}async getCheckpoints(){return await this.session.getCheckpoints()}getTurnCount(){return this.turnCount}getSessionId(){return this.session.sessionId}getSession(){return this.session}getMemory(){return this.memory}async getSessionInfo(){let e=await this.session.getMeta();await this.session.getItemCount();let n=await this.session.getCheckpoints();return {sessionId:this.session.sessionId,turnCount:this.turnCount,messageCount:(await this.session.getMessages()).length,checkpointCount:n.length,meta:e}}setSystemPrompt(e){this.systemPrompt=e;}async clearSession(){await this.session.clearSession(),this.memory.clear(),this.turnCount=0,this.systemPrompt&&this.memory.add({role:"system",content:this.systemPrompt});}};var Un=class{prepareRequest(e,t){let{model:n,temperature:s,maxInputTokens:o,disableSystemPrompt:i,systemPromptOverride:a,...l}=t,c=this.constraints.validateParams({model:n,temperature:s,max_tokens:o,...l}),u=this.constraints.normalizeParams({model:n,temperature:s,max_tokens:o,...l}),d=i?null:a&&a.trim().length>0?a:this.promptBuilder.buildSystemPrompt({workDir:process.cwd(),language:this.detectLanguage(),modelName:n}),m=i||!d?e:this.injectSystemPrompt(e,d),g={...u,model:n,maxInputTokens:this.applyTokenLimits(n,o)};return {messages:m,options:g,validation:{valid:c.valid,errors:c.errors,warnings:c.warnings}}}injectSystemPrompt(e,t){if(e.some(s=>s.role==="system")){let s=e.filter(a=>a.role==="system").map(a=>this.normalizeSystemContent(a.content)).filter(a=>a.length>0),o=s.length>0?[t,...s].join(`
|
|
1763
1763
|
|
|
1764
1764
|
`):t,i=e.filter(a=>a.role!=="system");return [{role:"system",content:o},...i]}return [{role:"system",content:t},...e]}normalizeSystemContent(e){return e?typeof e=="string"?e.trim():Array.isArray(e)?e.map(n=>!n||typeof n!="object"?"":n.type==="text"&&typeof n.text=="string"?n.text:"").join("").trim():String(e).trim():""}applyTokenLimits(e,t){if(!e)return t;let n=this.constraints.getTokenLimits(e);return Math.min(t||4096,n.maxOutput)}detectLanguage(){return process.env.NEOX_LANGUAGE==="en"?"en":"zh"}};Es();var As=class{validateParams(e){let t=this.getConstraints(),n=[],s=[];for(let o of Object.keys(e))t.supportedParams.has(o)||s.push(`Parameter '${o}' is not supported by this provider and will be ignored`);if(t.validators){for(let[o,i]of Object.entries(t.validators))if(e[o]!==void 0){let a=i(e[o],e);a===false?n.push(`Invalid value for parameter '${o}': ${e[o]}`):typeof a=="string"&&n.push(`Parameter '${o}': ${a}`);}}if(e.model&&e.max_tokens!==void 0){let o=this.getTokenLimits(e.model);o.found&&e.max_tokens>o.maxInput?n.push(`max_tokens (${e.max_tokens}) exceeds model context window (${o.maxInput}) for ${e.model}`):o.found&&e.max_tokens>o.maxOutput&&s.push(`max_tokens (${e.max_tokens}) exceeds recommended output limit (${o.maxOutput}) for ${e.model}, but is within context window`);}return {valid:n.length===0,errors:n,warnings:s.length>0?s:void 0}}getTokenLimits(e){let t=Ft.getModel(e);if(t)return {maxOutput:t.maxOutputTokens,maxInput:t.maxInputTokens,found:true,source:"model"};let n=this.getConstraints(),s=n.maxOutputTokens[e],o=n.maxInputTokens[e];if(s!==void 0&&o!==void 0)return {maxOutput:s,maxInput:o,found:true,source:"model"};for(let[i,a]of Object.entries(n.maxOutputTokens))if(this.matchPattern(e,i))return {maxOutput:a,maxInput:n.maxInputTokens[i]||128e3,found:true,source:"model"};return {maxOutput:4096,maxInput:128e3,found:false,source:"fallback"}}normalizeParams(e){let t=this.getConstraints(),n={};for(let[s,o]of Object.entries(e)){let i=t.paramAliases?.[s]||s;t.supportedParams.has(s)&&(n[i]=o);}if(t.defaults)for(let[s,o]of Object.entries(t.defaults))n[s]===void 0&&(n[s]=o);return n}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 Pt(r,e){return t=>{let n=Number(t);return isNaN(n)?"Must be a number":n<r||n>e?`Must be between ${r} and ${e}`:true}}function co(r){return e=>r.includes(e)?true:`Must be one of: ${r.join(", ")}`}function nv(r){return e=>{let t=typeof e;return t!==r?`Expected ${r}, got ${t}`:true}}function hc(...r){return (e,t)=>{for(let n of r){let s=n(e,t);if(s!==true)return s}return true}}var ar=class extends As{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:Pt(0,2),top_p:Pt(0,1),frequency_penalty:Pt(-2,2),presence_penalty:Pt(-2,2),reasoning_effort:co(["low","medium","high"]),verbosity:co(["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":co(["text","json_object","json_schema"]),stream:e=>typeof e=="boolean"||"Must be a boolean",n:hc(e=>typeof e=="number"||"Must be a number",Pt(1,10)),max_tokens:(e,t)=>{let n=Number(e);if(isNaN(n))return "Must be a number";if(n<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 n=this.getTokenLimits(e);switch(t){case "short":return Math.min(1024,n.maxOutput);case "medium":return Math.min(4096,n.maxOutput);case "long":return n.maxOutput;default:return Math.min(4096,n.maxOutput)}}};var Ms=class{combinePromptSections(e){return e.filter(n=>n.content.trim().length>0).sort((n,s)=>(n.order||0)-(s.order||0)).map(n=>n.title?`# ${n.title}
|
|
1765
1765
|
|
|
@@ -3442,7 +3442,7 @@ ${t}
|
|
|
3442
3442
|
## \u8F93\u51FA\u8981\u6C42
|
|
3443
3443
|
- \u63D0\u4F9B\u6E05\u6670\u3001\u53EF\u6267\u884C\u7684\u89E3\u51B3\u65B9\u6848
|
|
3444
3444
|
- \u89E3\u91CA\u5173\u952E\u51B3\u7B56\u7684\u7406\u7531
|
|
3445
|
-
- \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 n=this.messageBus.subscribeForAgent(e,async s=>{if(s.type!=="task_broadcast")return;let o=s.payload;if(!(Date.now()>o.bidDeadline))try{let i=await t.evaluateTask(o);i.participate&&i.bid&&await this.messageBus.publishBid(i.bid);}catch(i){p.warn("NETWORK","Agent bid failed",{agentId:e,error:i instanceof Error?i.message:String(i)});}});this.agentSubscriptions.set(e,n);}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){try{(await this.replanningEngine.handleTrigger(e.dagId,e.trigger,{failedNodes:e.failedNodes,completedNodes:e.completedNodes})).success&&this.refreshDataFlow(e.dagId);}catch(t){p.warn("NETWORK","Replan handling failed",{dagId:e.dagId,error:t instanceof Error?t.message:String(t)});}}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.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}getModeName(){return "network"}abort(){p.info("NETWORK","Aborting network runtime"),this.aborted=true,this.abortController&&(this.abortController.abort(),this.abortController=null),this.stop();}isAborted(){return this.aborted}};re();var In=class{config;constructor(e){this.config=e;}create(e){switch(p.info("MODE_FACTORY",`Creating runtime for mode: ${e}`),e){case "single":return this.createSingleAgent();case "collab":return this.createCollabAgent();case "cooperate":return this.createCooperateAgent();case "network":return this.createNetworkAgent();default:return p.warn("MODE_FACTORY",`Unknown mode: ${e}, falling back to single`),this.createSingleAgent()}}createSingleAgent(){return new fo({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})}createCollabAgent(){return new bo({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 Rs({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 xo({llmCall:this.createLLMCall(),executionCapability:e,autoCreateDefaultAgents:true})}createLLMCall(){let{orchestrator:e}=this.config;return async(t,n)=>{if(!e)throw new Error("Orchestrator not available for LLM call");let s="",o=`network-llm-${Date.now()}`;return await e.runSession({sessionId:o,prompt:n,buildHostConfig:(i,a)=>({sessionId:o,configKey:"network_llm_call",provider:i,llmConfig:a,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"&&(s+=i.delta);}}),s}}static getDefaultMode(){return "single"}static isValidMode(e){return ["single","collab","cooperate","network"].includes(e)}static getAvailableModes(){return ["single","collab","cooperate","network"]}static getModeDescription(e){switch(e){case "single":return "\u5355 Agent \u6A21\u5F0F - \u65E5\u5E38\u5F00\u53D1\uFF0C\u5FEB\u901F\u8FED\u4EE3";case "collab":return "\u534F\u4F5C\u6A21\u5F0F - spawn_agent \u5DE5\u5177\uFF0C\u52A8\u6001\u59D4\u6D3E";case "cooperate":return "\u5408\u4F5C\u6A21\u5F0F - \u9759\u6001 DAG + CCB \u8BC4\u5BA1\u6D41\u7A0B";case "network":return "\u81EA\u7EC4\u7EC7\u7F51\u7EDC\u6A21\u5F0F - Agent \u81EA\u4E3B\u7EC4\u7F51\uFF0C\u52A8\u6001\u534F\u5546 (\u5F00\u53D1\u4E2D)";default:return ""}}};function Xm(r=process.argv){let e={continue:false,resume:false,help:false,version:false,noSession:false};for(let t=2;t<r.length;t++)
|
|
3445
|
+
- \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 n=this.messageBus.subscribeForAgent(e,async s=>{if(s.type!=="task_broadcast")return;let o=s.payload;if(!(Date.now()>o.bidDeadline))try{let i=await t.evaluateTask(o);i.participate&&i.bid&&await this.messageBus.publishBid(i.bid);}catch(i){p.warn("NETWORK","Agent bid failed",{agentId:e,error:i instanceof Error?i.message:String(i)});}});this.agentSubscriptions.set(e,n);}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){try{(await this.replanningEngine.handleTrigger(e.dagId,e.trigger,{failedNodes:e.failedNodes,completedNodes:e.completedNodes})).success&&this.refreshDataFlow(e.dagId);}catch(t){p.warn("NETWORK","Replan handling failed",{dagId:e.dagId,error:t instanceof Error?t.message:String(t)});}}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.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}getModeName(){return "network"}abort(){p.info("NETWORK","Aborting network runtime"),this.aborted=true,this.abortController&&(this.abortController.abort(),this.abortController=null),this.stop();}isAborted(){return this.aborted}};re();var In=class{config;constructor(e){this.config=e;}create(e){switch(p.info("MODE_FACTORY",`Creating runtime for mode: ${e}`),e){case "single":return this.createSingleAgent();case "collab":return this.createCollabAgent();case "cooperate":return this.createCooperateAgent();case "network":return this.createNetworkAgent();default:return p.warn("MODE_FACTORY",`Unknown mode: ${e}, falling back to single`),this.createSingleAgent()}}createSingleAgent(){return new fo({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})}createCollabAgent(){return new bo({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 Rs({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 xo({llmCall:this.createLLMCall(),executionCapability:e,autoCreateDefaultAgents:true})}createLLMCall(){let{orchestrator:e}=this.config;return async(t,n)=>{if(!e)throw new Error("Orchestrator not available for LLM call");let s="",o=`network-llm-${Date.now()}`;return await e.runSession({sessionId:o,prompt:n,buildHostConfig:(i,a)=>({sessionId:o,configKey:"network_llm_call",provider:i,llmConfig:a,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"&&(s+=i.delta);}}),s}}static getDefaultMode(){return "single"}static isValidMode(e){return ["single","collab","cooperate","network"].includes(e)}static getAvailableModes(){return ["single","collab","cooperate","network"]}static getModeDescription(e){switch(e){case "single":return "\u5355 Agent \u6A21\u5F0F - \u65E5\u5E38\u5F00\u53D1\uFF0C\u5FEB\u901F\u8FED\u4EE3";case "collab":return "\u534F\u4F5C\u6A21\u5F0F - spawn_agent \u5DE5\u5177\uFF0C\u52A8\u6001\u59D4\u6D3E";case "cooperate":return "\u5408\u4F5C\u6A21\u5F0F - \u9759\u6001 DAG + CCB \u8BC4\u5BA1\u6D41\u7A0B";case "network":return "\u81EA\u7EC4\u7EC7\u7F51\u7EDC\u6A21\u5F0F - Agent \u81EA\u4E3B\u7EC4\u7F51\uFF0C\u52A8\u6001\u534F\u5546 (\u5F00\u53D1\u4E2D)";default:return ""}}};function Xm(r=process.argv){let e={continue:false,resume:false,help:false,version:false,noSession:false};for(let t=2;t<r.length;t++){let n=r[t];switch(n){case "-c":case "--continue":e.continue=true;break;case "-r":case "--resume":let s=r[t+1];s&&!s.startsWith("-")?(e.resume=s,t++):e.resume=true;break;case "-m":case "--model":r[t+1]&&(e.model=r[++t]);break;case "-p":case "--provider":r[t+1]&&(e.provider=r[++t]);break;case "-d":case "--dir":case "--workdir":r[t+1]&&(e.workDir=r[++t]);break;case "-h":case "--help":case "-help":e.help=true;break;case "-v":case "-V":case "--version":case "-version":e.version=true;break;case "--no-session":e.noSession=true;break;case "--output-schema":r[t+1]&&(e.outputSchema=r[++t]);break;default:n.startsWith("-")&&(e.unknownArgs||(e.unknownArgs=[]),e.unknownArgs.push(n));break}}return e}function iC(r){console.log(`
|
|
3446
3446
|
Neox CLI - AI \u4EE3\u7801\u52A9\u624B (AI Code Assistant) v${r}
|
|
3447
3447
|
|
|
3448
3448
|
\u7528\u6CD5 (Usage): neox [options]
|
|
@@ -3506,21 +3506,21 @@ ${f.join(`
|
|
|
3506
3506
|
`)}`),h.length>0&&I.push(`${u.lastRunHeader}
|
|
3507
3507
|
${h.join(`
|
|
3508
3508
|
`)}`),I.join(`
|
|
3509
|
-
`)},v=["session","lastRun","lesson","standard","progress","pinned"],C=new Map([["session",{lines:f}],["lastRun",{lines:h}],...m.map(I=>[I.key,I])]),T=b();if(T.length>o){let I=0;for(;T.length>o&&I<500;){I+=1;let M=false;for(let D of v){let R=C.get(D);if(R&&R.lines.length>0){R.lines.shift(),M=true;break}}if(!M)break;T=b();}}return T.length>o&&(T=Kt(T,o)),p.info("MEMORY_INJECT","Context memory hit",{query:c?Kt(c,80):void 0,includePersistent:i,includeLastRun:a,includeSessionSummaries:l,memoryCounts:Object.fromEntries(m.map(I=>[I.key,I.lines.length])),sessionCount:f.length,lastRun:h.length>0,summaryChars:T.length}),T}async getMemoryStats(){await this.ensureReady(),this.summaryItems.length===0&&await this.loadSummarySnapshot();let e=this.summaryItems.length,t=this.summaryPath?await this.getFileSize(this.summaryPath):0,n=this.sessionSummaryPath?await this.countJsonlLines(this.sessionSummaryPath):0,s=this.sessionSummaryPath?await this.getFileSize(this.sessionSummaryPath):0,o=this.memoryPaths?.progress,i=this.memoryPaths?.standard,a=this.memoryPaths?.lesson,l=this.memoryPaths?.pinned,c=o?await this.countJsonlLines(o):0,u=i?await this.countJsonlLines(i):0,d=a?await this.countJsonlLines(a):0,m=l?await this.countJsonlLines(l):0,g=o?await this.getFileSize(o):0,h=i?await this.getFileSize(i):0,f=a?await this.getFileSize(a):0,b=l?await this.getFileSize(l):0,v=c+u+d,C=g+h+f,T=e+n+v+m,I=t+s+C+b,M=(D,R,L)=>({count:D,sizeBytes:R,path:L});return {shortTerm:M(e,t,this.summaryPath??void 0),session:M(n,s,this.sessionSummaryPath??void 0),longTerm:{total:M(v,C),progress:M(c,g,o),standard:M(u,h,i),lesson:M(d,f,a)},pinned:M(m,b,l),totals:M(T,I)}}async getRecentSessionSummaries(e=Qm){return await this.ensureReady(),this.sessionSummaryPath?this.readJsonlTail(this.sessionSummaryPath,e):[]}async getRecentEventSummaries(e){await this.ensureReady(),this.summaryItems.length===0&&await this.loadSummarySnapshot();let t=e?.maxItems??this.options.summaryWindow,n=this.summaryItems;return e?.sessionId&&(n=n.filter(s=>s.sessionId===e.sessionId)),e?.runId&&(n=n.filter(s=>s.runId===e.runId)),n.length<=t?n:n.slice(n.length-t)}async getLastMeaningfulSessionSummary(){if(!this.sessionSummaryPath)return null;let e=await this.readJsonlTail(this.sessionSummaryPath,8);if(e.length===0)return null;for(let t=e.length-1;t>=0;t-=1)if(!this.isMetaQuerySummary(e[t].summary))return e[t];return e[e.length-1]??null}isMetaQuerySummary(e){if(!e)return false;let t=e.trim().toLowerCase();return /(user:|用户:)?\s*(上次|之前|前面|上一|继续|回顾|resume|continue|previous|last)/i.test(t)}stripUserPrefix(e){return e.replace(/^(user|用户)\s*[::]\s*/i,"").trim()}isGreeting(e){let t=e.trim().toLowerCase();return !t||/^(hi|hello|hey|yo|good (morning|afternoon|evening))\b/i.test(t)?true:["\u4F60\u597D","\u60A8\u597D","\u54C8\u55BD","\u55E8","\u5728\u5417","\u65E9\u4E0A\u597D","\u4E0B\u5348\u597D","\u665A\u4E0A\u597D","\u665A\u5B89"].some(o=>t.startsWith(o))}isLowValuePrompt(e){let t=this.stripUserPrefix(e);return !t||this.isGreeting(t)||this.isMetaQuerySummary(t)?true:t.length<=2}isLowValueMemorySummary(e){let t=this.stripUserPrefix(e);return !t||this.isGreeting(t)||this.isMetaQuerySummary(t)?true:/(会话已建立|打招呼|session (started|created))/i.test(t)}isLowValueToolFailure(e,t){let n=e.toLowerCase(),s=t.toLowerCase();return !!((n.includes("git_status")||n.includes("git status")||n.includes("gitstatus"))&&s.includes("not a git repository"))}async getRecentMemoryItems(e,t=Zm){if(await this.ensureReady(),!this.memoryPaths)return [];let n=this.memoryPaths[e];return this.readJsonlTail(n,t)}async getRelevantSessionSummaries(e,t,n){if(!this.sessionSummaryPath)return [];let s=await this.readJsonlTail(this.sessionSummaryPath,t*6);return this.rankRelevantItems(s,e,t,void 0,n)}async getRelevantMemoryItems(e,t,n){if(!this.memoryPaths)return {progress:[],standard:[],lesson:[],pinned:[]};let s=["pinned","progress","standard","lesson"],o={pinned:[],progress:[],standard:[],lesson:[]};for(let i of s){let a=await this.readJsonlTail(this.memoryPaths[i],t*6);o[i]=await this.rankRelevantItems(a,e,t,i,n);}return o}async rankRelevantItems(e,t,n,s,o){let i=o?.tokens??this.tokenizeQuery(t);if(i.length===0)return e.slice(-n);let a=o?.graphMatches??await this.getGraphRunMatches(i),l=Date.now(),c=e.map(u=>{let d=this.scoreLexical(i,u.summary),m=this.scorePath(i,u.files),g=this.scoreRecency(l,u.ts),h=u.confidence??.5,f=u.runId&&a.has(u.runId)?1:0,b=u.summary&&u.summary.length>0?1:0,v=.35*d+.2*m+.2*f+.15*g+.1*h;return s==="pinned"&&v<.2&&(v=.2),b===0&&(v*=.8),{item:u,score:v}});return await this.applyEvidencePenalty(c,n),c.sort((u,d)=>d.score-u.score),c.filter(u=>u.score>0).slice(0,n).map(u=>u.item)}async applyEvidencePenalty(e,t){if(!this.workspacePath)return;let n=e.slice(0,Math.min(e.length,t*2));for(let s of n){let o=s.item.files?.[0];if(!o)continue;let i=this.resolveWorkspacePath(o);try{await
|
|
3509
|
+
`)},v=["session","lastRun","lesson","standard","progress","pinned"],C=new Map([["session",{lines:f}],["lastRun",{lines:h}],...m.map(I=>[I.key,I])]),T=b();if(T.length>o){let I=0;for(;T.length>o&&I<500;){I+=1;let M=false;for(let D of v){let R=C.get(D);if(R&&R.lines.length>0){R.lines.shift(),M=true;break}}if(!M)break;T=b();}}return T.length>o&&(T=Kt(T,o)),p.info("MEMORY_INJECT","Context memory hit",{query:c?Kt(c,80):void 0,includePersistent:i,includeLastRun:a,includeSessionSummaries:l,memoryCounts:Object.fromEntries(m.map(I=>[I.key,I.lines.length])),sessionCount:f.length,lastRun:h.length>0,summaryChars:T.length}),T}async getMemoryStats(){await this.ensureReady(),this.summaryItems.length===0&&await this.loadSummarySnapshot();let e=this.summaryItems.length,t=this.summaryPath?await this.getFileSize(this.summaryPath):0,n=this.sessionSummaryPath?await this.countJsonlLines(this.sessionSummaryPath):0,s=this.sessionSummaryPath?await this.getFileSize(this.sessionSummaryPath):0,o=this.memoryPaths?.progress,i=this.memoryPaths?.standard,a=this.memoryPaths?.lesson,l=this.memoryPaths?.pinned,c=o?await this.countJsonlLines(o):0,u=i?await this.countJsonlLines(i):0,d=a?await this.countJsonlLines(a):0,m=l?await this.countJsonlLines(l):0,g=o?await this.getFileSize(o):0,h=i?await this.getFileSize(i):0,f=a?await this.getFileSize(a):0,b=l?await this.getFileSize(l):0,v=c+u+d,C=g+h+f,T=e+n+v+m,I=t+s+C+b,M=(D,R,L)=>({count:D,sizeBytes:R,path:L});return {shortTerm:M(e,t,this.summaryPath??void 0),session:M(n,s,this.sessionSummaryPath??void 0),longTerm:{total:M(v,C),progress:M(c,g,o),standard:M(u,h,i),lesson:M(d,f,a)},pinned:M(m,b,l),totals:M(T,I)}}async getRecentSessionSummaries(e=Qm){return await this.ensureReady(),this.sessionSummaryPath?this.readJsonlTail(this.sessionSummaryPath,e):[]}async getRecentEventSummaries(e){await this.ensureReady(),this.summaryItems.length===0&&await this.loadSummarySnapshot();let t=e?.maxItems??this.options.summaryWindow,n=this.summaryItems;return e?.sessionId&&(n=n.filter(s=>s.sessionId===e.sessionId)),e?.runId&&(n=n.filter(s=>s.runId===e.runId)),n.length<=t?n:n.slice(n.length-t)}async getLastMeaningfulSessionSummary(){if(!this.sessionSummaryPath)return null;let e=await this.readJsonlTail(this.sessionSummaryPath,8);if(e.length===0)return null;for(let t=e.length-1;t>=0;t-=1)if(!this.isMetaQuerySummary(e[t].summary))return e[t];return e[e.length-1]??null}isMetaQuerySummary(e){if(!e)return false;let t=e.trim().toLowerCase();return /(user:|用户:)?\s*(上次|之前|前面|上一|继续|回顾|resume|continue|previous|last)/i.test(t)}stripUserPrefix(e){return e.replace(/^(user|用户)\s*[::]\s*/i,"").trim()}isGreeting(e){let t=e.trim().toLowerCase();return !t||/^(hi|hello|hey|yo|good (morning|afternoon|evening))\b/i.test(t)?true:["\u4F60\u597D","\u60A8\u597D","\u54C8\u55BD","\u55E8","\u5728\u5417","\u65E9\u4E0A\u597D","\u4E0B\u5348\u597D","\u665A\u4E0A\u597D","\u665A\u5B89"].some(o=>t.startsWith(o))}isLowValuePrompt(e){let t=this.stripUserPrefix(e);return !t||this.isGreeting(t)||this.isMetaQuerySummary(t)?true:t.length<=2}isLowValueMemorySummary(e){let t=this.stripUserPrefix(e);return !t||this.isGreeting(t)||this.isMetaQuerySummary(t)?true:/(会话已建立|打招呼|session (started|created))/i.test(t)}isLowValueToolFailure(e,t){let n=e.toLowerCase(),s=t.toLowerCase();return !!((n.includes("git_status")||n.includes("git status")||n.includes("gitstatus"))&&s.includes("not a git repository"))}async getRecentMemoryItems(e,t=Zm){if(await this.ensureReady(),!this.memoryPaths)return [];let n=this.memoryPaths[e];return this.readJsonlTail(n,t)}async getRelevantSessionSummaries(e,t,n){if(!this.sessionSummaryPath)return [];let s=await this.readJsonlTail(this.sessionSummaryPath,t*6);return this.rankRelevantItems(s,e,t,void 0,n)}async getRelevantMemoryItems(e,t,n){if(!this.memoryPaths)return {progress:[],standard:[],lesson:[],pinned:[]};let s=["pinned","progress","standard","lesson"],o={pinned:[],progress:[],standard:[],lesson:[]};for(let i of s){let a=await this.readJsonlTail(this.memoryPaths[i],t*6);o[i]=await this.rankRelevantItems(a,e,t,i,n);}return o}async rankRelevantItems(e,t,n,s,o){let i=o?.tokens??this.tokenizeQuery(t);if(i.length===0)return e.slice(-n);let a=o?.graphMatches??await this.getGraphRunMatches(i),l=Date.now(),c=e.map(u=>{let d=this.scoreLexical(i,u.summary),m=this.scorePath(i,u.files),g=this.scoreRecency(l,u.ts),h=u.confidence??.5,f=u.runId&&a.has(u.runId)?1:0,b=u.summary&&u.summary.length>0?1:0,v=.35*d+.2*m+.2*f+.15*g+.1*h;return s==="pinned"&&v<.2&&(v=.2),b===0&&(v*=.8),{item:u,score:v}});return await this.applyEvidencePenalty(c,n),c.sort((u,d)=>d.score-u.score),c.filter(u=>u.score>0).slice(0,n).map(u=>u.item)}async applyEvidencePenalty(e,t){if(!this.workspacePath)return;let n=e.slice(0,Math.min(e.length,t*2));for(let s of n){let o=s.item.files?.[0];if(!o)continue;let i=this.resolveWorkspacePath(o);try{await Ee__default.stat(i);}catch{s.score*=.7;}}}resolveWorkspacePath(e){return ge__default.isAbsolute(e)||!this.workspacePath?e:ge__default.join(this.workspacePath,e)}tokenizeQuery(e){let t=e.trim().toLowerCase();if(!t)return [];let n=t.split(/[^a-z0-9/_\-.]+/g).map(s=>s.trim()).filter(s=>s.length>2);return n.length===0&&t.length>0?[t]:n.slice(0,16)}scoreLexical(e,t){if(!t)return 0;let n=t.toLowerCase(),s=0;for(let o of e)n.includes(o)&&(s+=1);return s===0?0:Math.min(1,s/e.length)}scorePath(e,t){if(!t||t.length===0)return 0;let n=0;for(let s of t){let o=s.toLowerCase();for(let i of e)if(o.includes(i)){n+=1;break}}return n===0?0:Math.min(1,n/t.length)}scoreRecency(e,t){let s=Math.max(0,e-t)/(1440*60*1e3);return Math.exp(-Math.log(2)*s/7)}async getGraphRunMatches(e){if(!this.graphPaths||e.length===0)return new Set;let t=await this.readJsonlTail(this.graphPaths.nodes,4e3,{tailBytes:lC,requireSummary:false}),n=new Set;for(let i of t){if(!i?.label)continue;let a=i.label.toLowerCase();for(let l of e)if(a.includes(l)){n.add(i.id);break}}if(n.size===0)return new Set;let s=await this.readJsonlTail(this.graphPaths.edges,6e3,{tailBytes:lC,requireSummary:false}),o=new Set;for(let i of s)i?.runId&&(n.has(i.to)||n.has(i.from))&&o.add(i.runId);return o}async readJsonlTail(e,t,n){let s=n?.tailBytes??sP,o=n?.requireSummary??true;try{let i=await Ee__default.stat(e);if(i.size===0)return [];let a=Math.max(0,i.size-s),l=await Ee__default.open(e,"r");try{let c=Buffer.alloc(i.size-a);await l.read(c,0,c.length,a);let u=c.toString("utf-8");if(a>0){let g=u.indexOf(`
|
|
3510
3510
|
`);g!==-1&&(u=u.slice(g+1));}let d=u.split(`
|
|
3511
3511
|
`).filter(g=>g.trim().length>0),m=[];for(let g of d)try{let h=JSON.parse(g);o?h?.summary&&m.push(h):m.push(h);}catch{}return m.slice(-t)}finally{await l.close();}}catch{return []}}async countJsonlLines(e){return new Promise(t=>{let n=0,s="",o=false,i=createReadStream(e,{encoding:"utf-8"});i.on("data",a=>{let l=typeof a=="string"?a:a.toString("utf-8");o=true;for(let c=0;c<l.length;c+=1)l[c]===`
|
|
3512
3512
|
`&&(n+=1);s=l[l.length-1]||s;}),i.on("error",a=>{a.code,t(0);}),i.on("end",()=>{o&&s!==`
|
|
3513
3513
|
`&&(n+=1),t(n);});})}async flush(){if(this.isFlushing){this.flushPending=true;return}if(!(!this.workspacePath||!this.workspaceId)){this.isFlushing=true;try{await this.ensureReady();let e=this.queue.splice(0,this.queue.length),t=this.sessionSummaryQueue.splice(0,this.sessionSummaryQueue.length),n=this.memoryQueue.splice(0,this.memoryQueue.length),s=this.graphNodeQueue.splice(0,this.graphNodeQueue.length),o=this.graphEdgeQueue.splice(0,this.graphEdgeQueue.length);if(e.length===0&&t.length===0&&n.length===0&&s.length===0&&o.length===0){this.summaryDirty&&await this.persistSummarySnapshot();return}let i=this.currentFileBytes,a=[],l=[];if(e.length>0){await this.ensureLogFile();for(let c of e){let u=JSON.stringify(c),d=Buffer.byteLength(u)+1;if(c.seq%this.options.indexStride===0&&this.currentFile){let m={schemaVersion:1,seq:c.seq,ts:c.ts,file:ge__default.basename(this.currentFile),offset:i};l.push(JSON.stringify(m)+`
|
|
3514
3514
|
`);}a.push(u+`
|
|
3515
|
-
`),i+=d;}this.currentFile&&a.length>0&&(await
|
|
3515
|
+
`),i+=d;}this.currentFile&&a.length>0&&(await Ee__default.appendFile(this.currentFile,a.join(""),"utf-8"),this.currentFileBytes=i);}if(this.indexPath&&l.length>0&&await Ee__default.appendFile(this.indexPath,l.join(""),"utf-8"),e.length>0&&await this.persistMeta(),await this.persistSummarySnapshot(),this.sessionSummaryPath&&t.length>0){let c=t.map(u=>JSON.stringify(u)).join(`
|
|
3516
3516
|
`)+`
|
|
3517
|
-
`;await
|
|
3517
|
+
`;await Ee__default.appendFile(this.sessionSummaryPath,c,"utf-8"),p.info("SESSION_SUMMARY_FLUSHED","Session summaries persisted",{count:t.length,path:this.sessionSummaryPath});}if(this.memoryPaths&&n.length>0){let c=new Map;for(let u of n){let d=c.get(u.category);d?d.push(u):c.set(u.category,[u]);}for(let[u,d]of c){let m=this.memoryPaths[u],g=d.map(h=>JSON.stringify(h)).join(`
|
|
3518
3518
|
`)+`
|
|
3519
|
-
`;await
|
|
3519
|
+
`;await Ee__default.appendFile(m,g,"utf-8");}}if(this.graphPaths&&(s.length>0||o.length>0)){if(s.length>0){let c=s.map(u=>JSON.stringify(u)).join(`
|
|
3520
3520
|
`)+`
|
|
3521
|
-
`;await
|
|
3521
|
+
`;await Ee__default.appendFile(this.graphPaths.nodes,c,"utf-8");}if(o.length>0){let c=o.map(u=>JSON.stringify(u)).join(`
|
|
3522
3522
|
`)+`
|
|
3523
|
-
`;await
|
|
3523
|
+
`;await Ee__default.appendFile(this.graphPaths.edges,c,"utf-8");}}}finally{this.isFlushing=false,this.flushPending&&(this.flushPending=false,await this.flush());}}}async shutdown(){this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.summarizerTimer&&(clearTimeout(this.summarizerTimer),this.summarizerTimer=null),await this.flush();}async initializeWorkspace(){!this.eventsDir||!this.workspaceId||!this.workspacePath||(await Ee__default.mkdir(this.eventsDir,{recursive:true}),this.memoriesDir&&await Ee__default.mkdir(this.memoriesDir,{recursive:true}),await this.loadMeta(),await this.loadSummarySnapshot(),this.ensureFlushTimer(),this.ready=true);}ensureFlushTimer(){this.flushTimer||(this.flushTimer=setInterval(()=>{this.flush();},this.options.flushIntervalMs));}async ensureReady(){this.ready||this.initPromise&&await this.initPromise;}async ensureLogFile(){if(!this.eventsDir)return;let e=dP(Date.now());this.currentDate===e&&this.currentFile||(this.currentDate=e,this.currentFile=ge__default.join(this.eventsDir,`events-${e}.jsonl`),this.currentFileBytes=await this.getFileSize(this.currentFile));}async getFileSize(e){try{return (await Ee__default.stat(e)).size}catch{return 0}}updateSummary(e){e.summary&&(this.summaryItems.push({id:e.id,ts:e.ts,type:e.type,summary:e.summary,files:e.files,sessionId:e.sessionId,runId:e.runId}),this.summaryItems.length>this.options.summaryWindow&&this.summaryItems.splice(0,this.summaryItems.length-this.options.summaryWindow),this.summaryDirty=true);}queueMemoryEntries(e,t){if(!e.length)return;let n=e.filter(s=>!this.isLowValueMemorySummary(s.summary));if(n.length!==0){this.memoryQueue.push(...n);for(let s of n)p.info("MEMORY_WRITE","Memory item recorded",{source:t,category:s.category,summary:Kt(s.summary,160),runId:s.runId,sessionId:s.sessionId,files:s.files?.slice(0,3),confidence:s.confidence});}}queueGraphEntries(e){e.nodes.length>0&&this.graphNodeQueue.push(...e.nodes),e.edges.length>0&&this.graphEdgeQueue.push(...e.edges);}extractMemoryEntries(e){let t=[],n={ts:e.ts,sessionId:e.sessionId,runId:e.runId,files:e.files,evidence:{eventId:e.id}};if(e.type==="plan_update"&&e.summary&&t.push({schemaVersion:1,id:is.randomUUID(),category:"progress",summary:Kt(e.summary,Xi),confidence:.6,...n}),e.type==="tool_call_end"&&e.data?.success===false){let s=e.data?.name??"tool",o=e.data?.outputPreview??e.summary??"Tool failed";this.isLowValueToolFailure(s,String(o))||t.push({schemaVersion:1,id:is.randomUUID(),category:"lesson",summary:Kt(`Tool failed: ${s} - ${o}`,Xi),confidence:.45,...n});}if(e.type==="run_error"){let s=e.data?.message??e.summary??"Run error";t.push({schemaVersion:1,id:is.randomUUID(),category:"lesson",summary:Kt(`Run error: ${s}`,Xi),confidence:.4,...n});}if(e.type==="status"&&e.summary){let s=this.extractRuleMemory(e.summary);s&&t.push({schemaVersion:1,id:is.randomUUID(),category:s.category,summary:Kt(s.summary,Xi),confidence:s.confidence,...n});}return t}extractGraphEntries(e){let t=[],n=[];if(!this.graphPaths||!e.runId)return {nodes:t,edges:n};let s=this.buildGraphNode({id:`task:${e.runId}`,type:"task",label:Kt(e.summary??e.data?.prompt??"Task",120),event:e});if(e.type==="run_start"&&t.push(s),e.type==="tool_call_start"){let o=e.data?.name;if(o){let i=this.buildGraphNode({id:`tool:${o}`,type:"tool",label:o,event:e});t.push(i),n.push(this.buildGraphEdge({type:"uses",from:s.id,to:i.id,event:e}));}}if(e.type==="file_change"&&e.files?.length)for(let o of e.files){let i=this.buildGraphNode({id:`file:${o}`,type:"file",label:o,event:e});t.push(i),n.push(this.buildGraphEdge({type:"touches",from:s.id,to:i.id,event:e}));}return {nodes:t,edges:n}}buildGraphNode(e){return {schemaVersion:1,id:e.id,type:e.type,label:e.label,ts:e.event.ts,sessionId:e.event.sessionId,runId:e.event.runId,evidence:{eventId:e.event.id}}}buildGraphEdge(e){return {schemaVersion:1,id:is.randomUUID(),type:e.type,from:e.from,to:e.to,ts:e.event.ts,sessionId:e.event.sessionId,runId:e.event.runId,evidence:{eventId:e.event.id}}}extractRuleMemory(e){let t=e.trim();if(!t)return null;let n=t.toLowerCase(),s=/^(pinned|must|requirement|constraint|must:|禁止|必须|约束|不可)/i,o=/^(rule|standard|guideline|should|prefer|规范|约定|标准|建议|应该)/i;return s.test(n)?{category:"pinned",summary:t,confidence:.8}:o.test(n)?{category:"standard",summary:t,confidence:.65}:null}getSummarizerConfig(){let e=We(),t=e.memory??{},n=e.orchestrator?.contextSharing?.summarizerModel,s,o="default";return this.summarizerOverrides?.model?(s=this.summarizerOverrides.model,o="override"):t.summarizerModel?(s=t.summarizerModel,o="memory"):n?(s=n,o="orchestrator"):(s=lP,o="default"),{enabled:(this.summarizerOverrides?.enabled??t.summarizerEnabled??true)&&!!s,model:s??null,providerId:this.summarizerOverrides?.providerId??t.summarizerProviderId,idleDelayMs:this.summarizerOverrides?.idleDelayMs??t.summarizerIdleMs??rP,minIntervalMs:this.summarizerOverrides?.minIntervalMs??t.summarizerMinIntervalMs??oP,batchSize:this.summarizerOverrides?.batchSize??t.summarizerBatchSize??iP,queueSize:this.summarizerOverrides?.queueSize??t.summarizerQueueSize??aP,modelSource:o}}enqueueSummarizer(e){let t=this.getSummarizerConfig();t.enabled&&(this.summarizerQueue.push(e),this.summarizerQueue.length>t.queueSize&&this.summarizerQueue.splice(0,this.summarizerQueue.length-t.queueSize),this.scheduleSummarizer(t));}scheduleSummarizer(e){this.summarizerTimer||(this.summarizerTimer=setTimeout(()=>{this.runSummarizer();},e.idleDelayMs));}async runSummarizer(){this.summarizerTimer&&(clearTimeout(this.summarizerTimer),this.summarizerTimer=null);let e=this.getSummarizerConfig();if(!e.enabled){this.summarizerQueue=[];return}if(this.summarizerRunning){this.scheduleSummarizer(e);return}let t=Date.now(),n=e.minIntervalMs-(t-this.summarizerLastRun);if(n>0){this.summarizerTimer=setTimeout(()=>{this.runSummarizer();},n);return}let s=this.summarizerQueue.splice(0,e.batchSize);if(s.length===0)return;let o=this.resolveSummarizerProvider(e);if(!o){this.summarizerQueue=[],this.summarizerLastRun=t;return}this.summarizerRunning=true;try{let i=await this.summarizeMemoryBatch(o.provider,o.model,s);i.length>0&&(this.queueMemoryEntries(i,"summarizer"),this.flush());}catch(i){console.warn("[ActionLog] Memory summarizer failed:",i);}finally{this.summarizerRunning=false,this.summarizerLastRun=Date.now(),this.summarizerQueue.length>0&&this.scheduleSummarizer(e);}}resolveSummarizerProvider(e){if(!e.model)return null;let t=new qe(We()),n=e.providerId?t.getProvider(e.providerId):void 0;if(n||(n=t.getProviders().find(a=>a.models?.some(l=>l.name===e.model))),n||(n=t.getDefaultProvider()),!n||!n.apiKey)return null;let s=n.models?.some(a=>a.name===e.model),o=e.model;if(!s){if(e.modelSource!=="default")return null;o=n.defaultModel||n.lastSelectedModel||n.models?.[0]?.name||e.model;}if(!o)return null;if(this.summarizerProvider&&this.summarizerProviderModel===o)return {provider:this.summarizerProvider,model:o};let{llmProvider:i}=Mc({provider:n,model:o});return this.summarizerProvider=i,this.summarizerProviderModel=o,{provider:i,model:o}}async summarizeMemoryBatch(e,t,n){let s=this.buildMemorySummaryPrompt(n),o=[{role:"system",content:"You are a memory summarizer for an autonomous coding agent."},{role:"user",content:s}],a=(await e.chat(o,{model:t,temperature:.2})).choices[0]?.message?.content||"",l=this.parseSummaryItems(a);if(l.length===0)return [];let c=n[n.length-1],u=Date.now();return l.map(d=>({schemaVersion:1,id:is.randomUUID(),ts:u,category:d.category,summary:Kt(d.summary,Xi),sessionId:c.sessionId,runId:c.runId,files:d.files&&d.files.length>0?d.files:c.files,confidence:d.confidence,evidence:c.evidence}))}buildMemorySummaryPrompt(e){return `\u8BF7\u4ECE\u4EE5\u4E0B session \u6458\u8981\u4E2D\u63D0\u53D6\u957F\u671F\u53EF\u590D\u7528\u7684\u8BB0\u5FC6\uFF0C\u8F93\u51FA JSON \u6570\u7EC4\uFF08\u53EA\u8F93\u51FA JSON\uFF0C\u4E0D\u8981\u591A\u4F59\u6587\u672C\uFF09\u3002
|
|
3524
3524
|
|
|
3525
3525
|
\u89C4\u5219\uFF1A
|
|
3526
3526
|
1. category \u53EA\u80FD\u662F progress | standard | lesson | pinned
|
|
@@ -3538,7 +3538,7 @@ ${e.map(n=>{let s=Qi(n.ts),o=n.files&&n.files.length>0?` files=${n.files.join(",
|
|
|
3538
3538
|
[
|
|
3539
3539
|
{"category":"progress","summary":"\u5B8C\u6210\u4E86 X\uFF0C\u4E0B\u4E00\u6B65 Y","files":["src/app.ts"],"confidence":0.7},
|
|
3540
3540
|
{"category":"lesson","summary":"\u907F\u514D\u91CD\u590D\u6267\u884C Z\uFF0C\u5BB9\u6613\u8D85\u65F6","confidence":0.5}
|
|
3541
|
-
]`}parseSummaryItems(e){if(!e)return [];let t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/),n=t?t[1]:e,s=n.indexOf("["),o=n.lastIndexOf("]");if(s===-1||o===-1||o<=s)return [];try{let i=JSON.parse(n.slice(s,o+1));if(!Array.isArray(i))return [];let a=["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=>a.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 n of e.files){if(t.files.size>=nP)break;t.files.add(n);}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 n=t.durationMs??Math.max(0,e.ts-t.startTs),s=t.tokens,o=e.type==="run_result"?`Completed in ${n}ms, tokens ${s??"n/a"}`:`Failed: ${Kt(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 a=i.length?` (${i.join(", ")})`:"",l=t.promptSummary??"User request";if(this.isLowValuePrompt(l))return;let c=t.outputPreview?Kt(t.outputPreview.replace(/\s+/g," ").trim(),120):"",u=c?` | Result: ${c}`:"",d=Kt(`${l} -> ${o}${a}${u}`,tP),m=Array.from(t.files),g={schemaVersion:1,id:e.id,ts:e.ts,sessionId:t.sessionId,runId:e.runId,summary:d,files:m.length?m: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:n,tokens:s};this.sessionSummaryQueue.push(g),p.info("SESSION_SUMMARY_QUEUED","Session summary queued",{runId:g.runId,sessionId:g.sessionId,summary:Kt(g.summary,160),files:g.files,toolCalls:g.toolCalls,retries:t.retries,errors:g.errors,durationMs:g.durationMs,tokens:g.tokens}),this.enqueueSummarizer(g);}async loadSummarySnapshot(){if(this.summaryPath)try{let e=await Ie__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 Ie__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await Ie__default.rename(t,this.summaryPath),this.summaryDirty=false;}async loadMeta(){if(this.metaPath)try{let e=await Ie__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 n=ge__default.join(this.eventsDir,t.currentFile);this.currentFile=n,this.currentDate=t.currentFile.slice(7,17),this.currentFileBytes=await this.getFileSize(n);}}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?ge__default.basename(this.currentFile):void 0,currentFileBytes:this.currentFileBytes,source:this.options.source,agentName:this.options.agentName},t=`${this.metaPath}.${Date.now()}.tmp`;await Ie__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await Ie__default.rename(t,this.metaPath);}};re();var cC=[{name:"host_get_status",description:"\u83B7\u53D6 Neox CLI \u5BBF\u4E3B\u7684\u5F53\u524D\u8FD0\u884C\u72B6\u6001\uFF0C\u5305\u62EC\u662F\u5426\u6B63\u5728\u6267\u884C\u4EFB\u52A1\u3001\u5F53\u524D\u6A21\u5F0F\u3001\u5185\u5B58\u4F7F\u7528\u7B49",parameters:{},execute:async r=>r.getStatus()},{name:"host_get_agents",description:"\u83B7\u53D6\u5F53\u524D\u6B63\u5728\u8FD0\u884C\u7684\u6240\u6709 Agent \u4FE1\u606F\uFF0C\u5305\u62EC\u4E3B Agent \u548C Worker Agent",parameters:{},execute:async r=>r.getAgents()},{name:"host_get_activity",description:"\u83B7\u53D6\u6700\u8FD1\u7684\u6267\u884C\u6D3B\u52A8\u8BB0\u5F55\uFF0C\u5305\u62EC\u5DE5\u5177\u8C03\u7528\u3001\u6D88\u606F\u7B49",parameters:{limit:{type:"number",description:"\u8FD4\u56DE\u7684\u8BB0\u5F55\u6570\u91CF",default:10}},execute:async(r,e)=>{let t=e.limit||10;return r.getActivity(t)}},{name:"host_get_session",description:"\u83B7\u53D6\u5F53\u524D\u4F1A\u8BDD\u7684\u6458\u8981\u4FE1\u606F\uFF0C\u5305\u62EC\u6D88\u606F\u6570\u3001Token \u4F7F\u7528\u3001\u6700\u8FD1\u7684\u5BF9\u8BDD\u5185\u5BB9",parameters:{},execute:async r=>r.getSession()},{name:"host_get_system",description:"\u83B7\u53D6\u7CFB\u7EDF\u4FE1\u606F\uFF0C\u5305\u62EC\u5E73\u53F0\u3001\u5DE5\u4F5C\u76EE\u5F55\u3001Git \u72B6\u6001\u7B49",parameters:{},execute:async r=>r.getSystem()},{name:"host_interrupt",description:"\u4E2D\u65AD\u5F53\u524D\u6B63\u5728\u6267\u884C\u7684\u4EFB\u52A1",parameters:{reason:{type:"string",description:"\u4E2D\u65AD\u539F\u56E0\uFF08\u53EF\u9009\uFF09",required:false}},execute:async(r,e)=>{let t=e.reason;return r.interrupt(t)}},{name:"host_send_command",description:"\u5411\u4E3B Agent \u53D1\u9001\u547D\u4EE4\u6216\u6D88\u606F\uFF0C\u4F1A\u52A0\u5165\u6267\u884C\u961F\u5217",parameters:{text:{type:"string",description:"\u8981\u53D1\u9001\u7684\u547D\u4EE4\u6216\u6D88\u606F",required:true},priority:{type:"string",description:"\u4F18\u5148\u7EA7",enum:["normal","high"],default:"normal"}},execute:async(r,e)=>{let t=e.text,n=e.priority||"normal";return r.sendCommand(t,n)}},{name:"host_subscribe",description:"\u8BA2\u9605\u5BBF\u4E3B\u4E8B\u4EF6\uFF0C\u5B9E\u73B0\u5B9E\u65F6\u611F\u77E5",parameters:{events:{type:"array",description:"\u8981\u8BA2\u9605\u7684\u4E8B\u4EF6\u7C7B\u578B\u5217\u8868",items:{type:"string"},required:true}},execute:async(r,e)=>{let t=e.events,n=e._clientId,s=e._callback;return {subscriptionId:r.subscribe(n,t,s)}}},{name:"host_unsubscribe",description:"\u53D6\u6D88\u4E8B\u4EF6\u8BA2\u9605",parameters:{events:{type:"array",description:"\u8981\u53D6\u6D88\u8BA2\u9605\u7684\u4E8B\u4EF6\u7C7B\u578B\u5217\u8868\uFF08\u4E0D\u4F20\u5219\u53D6\u6D88\u6240\u6709\uFF09",items:{type:"string"},required:false}},execute:async(r,e)=>{let t=e.events,n=e._clientId;return {success:r.unsubscribe(n,t)}}}];function eg(){return cC.map(r=>r.name)}var mP={port:7091,host:"0.0.0.0",token:"",maxClients:10,maxConnectionsPerIp:3,idleTimeout:300*1e3,heartbeatInterval:30*1e3,maxPortRetries:10,rateLimit:{messages:60,window:60*1e3}},ea=class{wss=null;clients=new Map;config;hostContext;heartbeatTimer=null;version;actualPort;onRun;constructor(e,t,n){this.hostContext=e,this.config={...mP,...t},this.version=t.version||"1.0.0",this.actualPort=this.config.port,this.onRun=n;}async start(){if(this.wss)return;if(!this.config.token.trim())throw new Error("Remote server token is required");this.config.token=this.config.token.trim();let e=this.config.maxPortRetries??10,t=null;for(let n=0;n<e;n++){let s=this.config.port+n;try{await this.tryBindPort(s),this.actualPort=s,n>0&&p.info("CLIENT_AGENT",`Port ${this.config.port} in use, using port ${s} instead`),p.info("CLIENT_AGENT",`Server started on ${this.config.host}:${this.actualPort}`),this.startHeartbeat();return}catch(o){if(t=o,o.code!=="EADDRINUSE")throw o;this.wss&&(this.wss.close(),this.wss=null);}}throw t||new Error(`Failed to bind to any port in range ${this.config.port}-${this.config.port+e-1}`)}tryBindPort(e){return new Promise((t,n)=>{this.wss=new WebSocketServer({port:e,host:this.config.host});let s=o=>{n(o);};this.wss.once("error",s),this.wss.on("listening",()=>{this.wss?.removeListener("error",s),t();}),this.wss.on("connection",(o,i)=>{this.handleConnection(o,i);});})}async stop(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null);for(let e of this.clients.values())this.sendMessage(e.ws,{type:"close_ack"}),e.ws.close();if(this.clients.clear(),this.wss)return new Promise(e=>{this.wss.close(()=>{this.wss=null,p.info("CLIENT_AGENT","Server stopped"),e();});})}getStatus(){return {running:this.wss!==null,host:this.config.host||"0.0.0.0",port:this.actualPort,token:this.config.token,clients:this.clients.size}}updateToken(e){this.config.token=e.trim();}normalizeMessageData(e){return typeof e=="string"?e:Buffer.isBuffer(e)?e.toString():Array.isArray(e)?Buffer.concat(e).toString():e instanceof ArrayBuffer?Buffer.from(e).toString():null}handleConnection(e,t){let n=this.getClientIp(t);if(this.clients.size>=this.config.maxClients){p.warn("CLIENT_AGENT",`Max clients reached, rejecting connection from ${n}`),e.close(1013,"Max clients reached");return}if(Array.from(this.clients.values()).filter(a=>a.ip===n).length>=this.config.maxConnectionsPerIp){p.warn("CLIENT_AGENT",`Max connections per IP reached for ${n}`),e.close(1013,"Max connections per IP reached");return}let o=is.randomUUID(),i={id:o,ws:e,state:"connected",device:null,capabilities:[],agentId:null,subscriptions:new Set,connectedAt:Date.now(),lastActivity:Date.now(),ip:n,messageCount:0,messageWindowStart:Date.now()};this.clients.set(o,i),p.info("CLIENT_AGENT",`Client connected: ${o} from ${n}`),this.sendMessage(e,{type:"welcome",payload:{version:this.version,serverTime:Date.now(),features:["chat","voice","host_introspection","event_subscription"]}}),e.on("message",a=>{this.handleMessage(i,a);}),e.on("pong",()=>{i.lastActivity=Date.now();}),e.on("close",()=>{this.handleDisconnect(i);}),e.on("error",a=>{p.error("CLIENT_AGENT",`Client error: ${o}`,a);});}async handleMessage(e,t){if(e.lastActivity=Date.now(),!this.checkRateLimit(e)){this.sendError(e.ws,"RATE_LIMITED","Too many requests");return}let n=this.normalizeMessageData(t);if(n===null){this.sendError(e.ws,"INVALID_MESSAGE","Unsupported message format");return}let s;try{s=JSON.parse(n);}catch{this.sendError(e.ws,"INVALID_MESSAGE","Invalid JSON");return}switch(p.debug("CLIENT_AGENT",`Message from ${e.id}: ${s.type}`),s.type){case "auth":await this.handleAuth(e,s);break;case "register":await this.handleRegister(e,s);break;case "chat":await this.handleChat(e,s);break;case "voice":await this.handleVoice(e,s);break;case "subscribe":await this.handleSubscribe(e,s);break;case "unsubscribe":await this.handleUnsubscribe(e,s);break;case "ping":this.sendMessage(e.ws,{type:"pong",ts:Date.now(),payload:{serverTime:Date.now()}});break;case "close":this.sendMessage(e.ws,{type:"close_ack"}),e.ws.close();break;default:this.sendError(e.ws,"INVALID_MESSAGE",`Unknown message type: ${s.type}`);}}async handleAuth(e,t){let{token:n}=t.payload;if(n!==this.config.token){e.state="error",this.sendMessage(e.ws,{type:"auth_fail",payload:{reason:"Invalid token"}}),e.ws.close(1008,"Authentication failed");return}e.state="authenticated",this.sendMessage(e.ws,{type:"auth_ok",payload:{clientId:e.id}});}async handleRegister(e,t){if(e.state!=="authenticated"){this.sendError(e.ws,"AUTH_REQUIRED","Authentication required");return}let{device:n,capabilities:s}=t.payload;e.device=n,e.capabilities=s,e.agentId=`agent-${e.id}`,e.state="ready",p.info("CLIENT_AGENT",`Device registered: ${n.type} - ${n.name}`),this.sendMessage(e.ws,{type:"agent_ready",payload:{agentId:e.agentId,tools:eg(),model:"lightweight"}});}async handleChat(e,t){if(e.state!=="ready"){this.sendError(e.ws,"AUTH_REQUIRED","Registration required");return}let{text:n}=t.payload,s=t.id||is.randomUUID();if(p.info("CLIENT_AGENT",`Chat from ${e.device?.name}: ${n.slice(0,50)}...`),this.onRun)try{let o=await this.onRun({text:n,voice:!1});this.sendMessage(e.ws,{type:"response",id:s,payload:{text:o.ok?o.queued?`\u547D\u4EE4\u5DF2\u52A0\u5165\u961F\u5217\uFF0C\u4F4D\u7F6E: ${o.position}`:"\u547D\u4EE4\u5DF2\u53D1\u9001":o.error||"\u547D\u4EE4\u53D1\u9001\u5931\u8D25",queued:o.queued,position:o.position}});}catch(o){p.error("CLIENT_AGENT","Chat onRun failed",o),this.sendError(e.ws,"INTERNAL_ERROR","Command execution failed",s);}else this.sendError(e.ws,"HOST_UNAVAILABLE","CLI not available",s);}async handleVoice(e,t){if(e.state!=="ready"){this.sendError(e.ws,"AUTH_REQUIRED","Registration required");return}let{text:n,audio:s}=t.payload,o=t.id||is.randomUUID(),i=n;if(!i&&s&&(i="[Audio input - STT not implemented]"),!i){this.sendError(e.ws,"INVALID_MESSAGE","No text or audio provided");return}p.info("CLIENT_AGENT",`Voice from ${e.device?.name}: ${i.slice(0,50)}...`),await this.processAgentRequest(e,o,i);}async processAgentRequest(e,t,n){p.debug("CLIENT_AGENT",`Processing request: ${t}, text: ${n.slice(0,50)}`);try{let s="";if(n.includes("\u72B6\u6001")||n.includes("status")){let o=await this.hostContext.getStatus();s=o.isRunning?`\u6B63\u5728\u6267\u884C\u4EFB\u52A1\uFF0C\u6A21\u5F0F: ${o.mode}\uFF0C\u5185\u5B58\u4F7F\u7528: ${Math.round(o.memoryUsage.pressure*100)}%`:`\u7A7A\u95F2\u4E2D\uFF0C\u5DE5\u4F5C\u76EE\u5F55: ${o.workingDirectory}`;}else if(n.includes("\u8FDB\u5EA6")||n.includes("progress")){let i=(await this.hostContext.getAgents()).filter(a=>a.status==="running");s=i.length>0?`\u6709 ${i.length} \u4E2A Agent \u6B63\u5728\u8FD0\u884C`:"\u5F53\u524D\u6CA1\u6709\u6B63\u5728\u6267\u884C\u7684\u4EFB\u52A1";}else if(n.includes("\u4E2D\u65AD")||n.includes("stop")||n.includes("interrupt"))s=(await this.hostContext.interrupt("Voice command")).interrupted?"\u5DF2\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1":"\u6CA1\u6709\u6B63\u5728\u6267\u884C\u7684\u4EFB\u52A1";else if(n.includes("\u7CFB\u7EDF")||n.includes("system")){let o=await this.hostContext.getSystem();s=`\u5E73\u53F0: ${o.platform}, Git: ${o.gitBranch||"\u65E0"} (${o.gitStatus})`;}else s=`\u6536\u5230\u6D88\u606F: "${n.slice(0,100)}"\uFF0C\u547D\u4EE4\u5DF2\u52A0\u5165\u961F\u5217`,this.hostContext.sendCommand(n).catch(o=>{p.error("CLIENT_AGENT","sendCommand failed",o);});p.debug("CLIENT_AGENT",`Sending response: ${s.slice(0,50)}`),this.sendMessage(e.ws,{type:"response",id:t,payload:{text:s}}),p.debug("CLIENT_AGENT",`Response sent for request: ${t}`);}catch(s){p.error("CLIENT_AGENT","Agent request failed",s),this.sendError(e.ws,"INTERNAL_ERROR","Request processing failed",t);}}async handleSubscribe(e,t){if(e.state!=="ready"){this.sendError(e.ws,"AUTH_REQUIRED","Registration required");return}let{events:n}=t.payload;n.forEach(s=>e.subscriptions.add(s)),this.hostContext.subscribe(e.id,n,s=>{this.sendMessage(e.ws,{type:"host_event",payload:{event:s.type,timestamp:Date.now(),data:s.data}});}),p.info("CLIENT_AGENT",`Client ${e.id} subscribed to: ${n.join(", ")}`);}async handleUnsubscribe(e,t){let{events:n}=t.payload;n?(n.forEach(s=>e.subscriptions.delete(s)),this.hostContext.unsubscribe(e.id,n)):(e.subscriptions.clear(),this.hostContext.unsubscribe(e.id));}handleDisconnect(e){p.info("CLIENT_AGENT",`Client disconnected: ${e.id}`),this.hostContext.cleanupClient(e.id),this.clients.delete(e.id);}sendMessage(e,t){e.readyState===WebSocket.OPEN&&e.send(JSON.stringify(t));}sendError(e,t,n,s){this.sendMessage(e,{type:"error",id:s,payload:{code:t,message:n}});}getClientIp(e){let t=e.headers["x-forwarded-for"];return typeof t=="string"?t.split(",")[0].trim():e.socket.remoteAddress||"unknown"}checkRateLimit(e){let t=Date.now(),{messages:n,window:s}=this.config.rateLimit;return t-e.messageWindowStart>s&&(e.messageCount=0,e.messageWindowStart=t),e.messageCount++,e.messageCount<=n}startHeartbeat(){this.heartbeatTimer=setInterval(()=>{let e=Date.now();for(let[t,n]of this.clients){if(e-n.lastActivity>this.config.idleTimeout){p.info("CLIENT_AGENT",`Client ${t} idle timeout`),n.ws.close(1e3,"Idle timeout");continue}n.ws.readyState===WebSocket.OPEN&&n.ws.ping();}},this.config.heartbeatInterval);}broadcast(e){for(let t of this.clients.values())t.state==="ready"&&this.sendMessage(t.ws,e);}broadcastRaw(e){for(let t of this.clients.values())t.state==="ready"&&t.ws.readyState===WebSocket.OPEN&&t.ws.send(JSON.stringify(e));}broadcastRuntimeEvent(e){this.broadcastRaw({type:"runtime_event",ts:Date.now(),payload:e});}broadcastHostEvent(e,t){for(let n of this.clients.values())n.state==="ready"&&(n.subscriptions.has("*")||n.subscriptions.has(e))&&this.sendMessage(n.ws,{type:"host_event",payload:{event:e,timestamp:Date.now(),data:t}});}};function nu(){return is.randomBytes(16).toString("hex")}var ta=class{runtimeHost;sessionManager;version;workingDirectory;startTime;activityLog=[];maxActivityLog=100;eventSubscribers=new Map;eventCallbacks=new Map;constructor(e){this.runtimeHost=e.runtimeHost,this.sessionManager=e.sessionManager,this.version=e.version,this.workingDirectory=e.workingDirectory,this.startTime=Date.now();}setRuntimeHost(e){this.runtimeHost=e;}logActivity(e,t,n){this.activityLog.unshift({timestamp:Date.now(),type:e,summary:t,details:n}),this.activityLog.length>this.maxActivityLog&&this.activityLog.pop(),this.broadcastEvent(e,{summary:t,details:n});}broadcastEvent(e,t){for(let[n,s]of this.eventSubscribers)if(s.has("*")||s.has(e)){let o=this.eventCallbacks.get(n);o&&o({type:e,data:t});}}async getStatus(){let e=this.runtimeHost,t=e?.isExecuting?.()??false,n=e?.getCurrentTask?.()??null,s=e?.getMode?.()??"single",o=e?.getSessionId?.()??"",i=e?.getMemorySnapshot?.(),a=i?.tokensUsed??0,l=i?.contextWindow??128e3,c=l>0?a/l:0;return {isRunning:t,currentTask:n,mode:s,sessionId:o,workingDirectory:this.workingDirectory,uptime:Math.floor((Date.now()-this.startTime)/1e3),memoryUsage:{tokensUsed:a,contextWindow:l,pressure:c}}}async getAgents(){let e=[],t=this.runtimeHost;return t&&e.push({id:"main",role:"main",status:t.isExecuting?.()?"running":"idle",currentTool:t.getCurrentTool?.()??null,progress:t.getProgress?.()??0,startedAt:this.startTime}),e}async getActivity(e=10){return this.activityLog.slice(0,e)}async getSession(){let e=await this.sessionManager.getMostRecent();if(!e)return {sessionId:"",messageCount:0,tokensUsed:0,lastUserMessage:"",lastAssistantSummary:"",checkpoints:0};let t=await e.getMessages(),n=t.filter(l=>l.role==="user"),s=t.filter(l=>l.role==="assistant"),o=n[n.length-1]?.content??"",i=s[s.length-1]?.content??"",a=typeof i=="string"?i.slice(0,200):"";return {sessionId:e.sessionId,messageCount:t.length,tokensUsed:0,lastUserMessage:typeof o=="string"?o:"",lastAssistantSummary:a,checkpoints:0}}async getSystem(){let e=null,t="unknown";try{let{execSync:n}=await import('child_process');try{e=n("git rev-parse --abbrev-ref HEAD",{cwd:this.workingDirectory,encoding:"utf-8",timeout:5e3}).trim();}catch{e=null;}try{t=n("git status --porcelain",{cwd:this.workingDirectory,encoding:"utf-8",timeout:5e3}).trim().length===0?"clean":"dirty";}catch{t="unknown";}}catch{}return {platform:process.platform,arch:process.arch,cwd:this.workingDirectory,gitBranch:e,gitStatus:t,nodeVersion:process.version,neoxVersion:this.version}}async interrupt(e){if(!this.runtimeHost)return {interrupted:false};let t=this.runtimeHost,n=t.getCurrentTaskId?.();try{return t.interrupt?.(),this.logActivity("message",`Task interrupted${e?`: ${e}`:""}`,{taskId:n,reason:e}),{interrupted:!0,taskId:n}}catch{return {interrupted:false}}}async sendCommand(e,t="normal"){return this.logActivity("message",`Command queued: ${e.slice(0,50)}...`,{text:e,priority:t}),{queued:true,position:1}}subscribe(e,t,n){let s=`${e}-${Date.now()}`;this.eventSubscribers.has(e)||this.eventSubscribers.set(e,new Set);let o=this.eventSubscribers.get(e);return t.forEach(i=>o.add(i)),this.eventCallbacks.set(e,n),s}unsubscribe(e,t){if(!this.eventSubscribers.has(e))return false;if(t){let n=this.eventSubscribers.get(e);t.forEach(s=>n.delete(s));}else this.eventSubscribers.delete(e),this.eventCallbacks.delete(e);return true}cleanupClient(e){this.eventSubscribers.delete(e),this.eventCallbacks.delete(e);}};Gt();To();re();ps();var AP=new Set([".wav",".mp3",".m4a",".aiff",".aif",".ogg"]),rg="complete.wav";function ra(r){return {soundEnabled:r.completionAlerts?.soundEnabled??false,soundFile:r.completionAlerts?.soundFile??"",notifyEnabled:r.completionAlerts?.notifyEnabled??false}}function og(){try{return Ze__default.existsSync(ts)?Ze__default.readdirSync(ts).filter(r=>AP.has(ge__default.extname(r).toLowerCase())).sort((r,e)=>r.localeCompare(e)):[]}catch{return []}}function MP(r){if(r){let n=ge__default.isAbsolute(r)?r:ge__default.join(ts,r);if(Ze__default.existsSync(n))return n}let e=ge__default.join(ts,rg);if(Ze__default.existsSync(e))return e;let t=og();return t.length>0?ge__default.join(ts,t[0]):null}function TC(r,e){let t="Neox CLI",n="Task complete",s=e?.summary?.durationMs,o=s?`${n} - ${(s/1e3).toFixed(1)}s`:n;if(r.notifyEnabled&&RP(t,o),r.soundEnabled){let i=MP(r.soundFile);PP(i);}}function $s(r,e,t){try{let n=spawn(r,e,{stdio:"ignore"});n.on("error",s=>{process.env.CLI_DEBUG&&p.debug("ALERT",`Failed to spawn ${r}`,{error:s}),t&&t();}),n.unref();}catch(n){process.env.CLI_DEBUG&&p.debug("ALERT",`Failed to execute ${r}`,{error:n}),t&&t();}}function Ls(){try{process.stdout.write("\x07");}catch{}}function wC(r){return r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function au(r){return r.replace(/'/g,"''")}function PP(r){if(!r||!Ze__default.existsSync(r)){Ls();return}if(process.platform==="darwin"){$s("afplay",[r],Ls);return}if(Ve()){let e=ge__default.extname(r).toLowerCase();if(e!==".wav"&&e!==".wave"){Ls();return}let t=js(r),s=`(New-Object Media.SoundPlayer '${au(t)}').PlaySync()`;$s("powershell.exe",["-NoProfile","-Command",s],Ls);return}if(process.platform==="linux"){$s("paplay",[r],()=>{$s("aplay",[r],Ls);});return}if(process.platform==="win32"){let e=ge__default.extname(r).toLowerCase();if(e!==".wav"&&e!==".wave"){Ls();return}let n=`(New-Object Media.SoundPlayer '${au(r)}').PlaySync()`;$s("powershell",["-NoProfile","-Command",n],Ls);return}Ls();}function RP(r,e){if(process.platform==="darwin"){let t=`display notification "${wC(e)}" with title "${wC(r)}"`;$s("osascript",["-e",t]);return}if(Ve()){let t=au(r),n=au(e),s=`
|
|
3541
|
+
]`}parseSummaryItems(e){if(!e)return [];let t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/),n=t?t[1]:e,s=n.indexOf("["),o=n.lastIndexOf("]");if(s===-1||o===-1||o<=s)return [];try{let i=JSON.parse(n.slice(s,o+1));if(!Array.isArray(i))return [];let a=["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=>a.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 n of e.files){if(t.files.size>=nP)break;t.files.add(n);}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 n=t.durationMs??Math.max(0,e.ts-t.startTs),s=t.tokens,o=e.type==="run_result"?`Completed in ${n}ms, tokens ${s??"n/a"}`:`Failed: ${Kt(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 a=i.length?` (${i.join(", ")})`:"",l=t.promptSummary??"User request";if(this.isLowValuePrompt(l))return;let c=t.outputPreview?Kt(t.outputPreview.replace(/\s+/g," ").trim(),120):"",u=c?` | Result: ${c}`:"",d=Kt(`${l} -> ${o}${a}${u}`,tP),m=Array.from(t.files),g={schemaVersion:1,id:e.id,ts:e.ts,sessionId:t.sessionId,runId:e.runId,summary:d,files:m.length?m: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:n,tokens:s};this.sessionSummaryQueue.push(g),p.info("SESSION_SUMMARY_QUEUED","Session summary queued",{runId:g.runId,sessionId:g.sessionId,summary:Kt(g.summary,160),files:g.files,toolCalls:g.toolCalls,retries:t.retries,errors:g.errors,durationMs:g.durationMs,tokens:g.tokens}),this.enqueueSummarizer(g);}async loadSummarySnapshot(){if(this.summaryPath)try{let e=await Ee__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 Ee__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await Ee__default.rename(t,this.summaryPath),this.summaryDirty=false;}async loadMeta(){if(this.metaPath)try{let e=await Ee__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 n=ge__default.join(this.eventsDir,t.currentFile);this.currentFile=n,this.currentDate=t.currentFile.slice(7,17),this.currentFileBytes=await this.getFileSize(n);}}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?ge__default.basename(this.currentFile):void 0,currentFileBytes:this.currentFileBytes,source:this.options.source,agentName:this.options.agentName},t=`${this.metaPath}.${Date.now()}.tmp`;await Ee__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await Ee__default.rename(t,this.metaPath);}};re();var cC=[{name:"host_get_status",description:"\u83B7\u53D6 Neox CLI \u5BBF\u4E3B\u7684\u5F53\u524D\u8FD0\u884C\u72B6\u6001\uFF0C\u5305\u62EC\u662F\u5426\u6B63\u5728\u6267\u884C\u4EFB\u52A1\u3001\u5F53\u524D\u6A21\u5F0F\u3001\u5185\u5B58\u4F7F\u7528\u7B49",parameters:{},execute:async r=>r.getStatus()},{name:"host_get_agents",description:"\u83B7\u53D6\u5F53\u524D\u6B63\u5728\u8FD0\u884C\u7684\u6240\u6709 Agent \u4FE1\u606F\uFF0C\u5305\u62EC\u4E3B Agent \u548C Worker Agent",parameters:{},execute:async r=>r.getAgents()},{name:"host_get_activity",description:"\u83B7\u53D6\u6700\u8FD1\u7684\u6267\u884C\u6D3B\u52A8\u8BB0\u5F55\uFF0C\u5305\u62EC\u5DE5\u5177\u8C03\u7528\u3001\u6D88\u606F\u7B49",parameters:{limit:{type:"number",description:"\u8FD4\u56DE\u7684\u8BB0\u5F55\u6570\u91CF",default:10}},execute:async(r,e)=>{let t=e.limit||10;return r.getActivity(t)}},{name:"host_get_session",description:"\u83B7\u53D6\u5F53\u524D\u4F1A\u8BDD\u7684\u6458\u8981\u4FE1\u606F\uFF0C\u5305\u62EC\u6D88\u606F\u6570\u3001Token \u4F7F\u7528\u3001\u6700\u8FD1\u7684\u5BF9\u8BDD\u5185\u5BB9",parameters:{},execute:async r=>r.getSession()},{name:"host_get_system",description:"\u83B7\u53D6\u7CFB\u7EDF\u4FE1\u606F\uFF0C\u5305\u62EC\u5E73\u53F0\u3001\u5DE5\u4F5C\u76EE\u5F55\u3001Git \u72B6\u6001\u7B49",parameters:{},execute:async r=>r.getSystem()},{name:"host_interrupt",description:"\u4E2D\u65AD\u5F53\u524D\u6B63\u5728\u6267\u884C\u7684\u4EFB\u52A1",parameters:{reason:{type:"string",description:"\u4E2D\u65AD\u539F\u56E0\uFF08\u53EF\u9009\uFF09",required:false}},execute:async(r,e)=>{let t=e.reason;return r.interrupt(t)}},{name:"host_send_command",description:"\u5411\u4E3B Agent \u53D1\u9001\u547D\u4EE4\u6216\u6D88\u606F\uFF0C\u4F1A\u52A0\u5165\u6267\u884C\u961F\u5217",parameters:{text:{type:"string",description:"\u8981\u53D1\u9001\u7684\u547D\u4EE4\u6216\u6D88\u606F",required:true},priority:{type:"string",description:"\u4F18\u5148\u7EA7",enum:["normal","high"],default:"normal"}},execute:async(r,e)=>{let t=e.text,n=e.priority||"normal";return r.sendCommand(t,n)}},{name:"host_subscribe",description:"\u8BA2\u9605\u5BBF\u4E3B\u4E8B\u4EF6\uFF0C\u5B9E\u73B0\u5B9E\u65F6\u611F\u77E5",parameters:{events:{type:"array",description:"\u8981\u8BA2\u9605\u7684\u4E8B\u4EF6\u7C7B\u578B\u5217\u8868",items:{type:"string"},required:true}},execute:async(r,e)=>{let t=e.events,n=e._clientId,s=e._callback;return {subscriptionId:r.subscribe(n,t,s)}}},{name:"host_unsubscribe",description:"\u53D6\u6D88\u4E8B\u4EF6\u8BA2\u9605",parameters:{events:{type:"array",description:"\u8981\u53D6\u6D88\u8BA2\u9605\u7684\u4E8B\u4EF6\u7C7B\u578B\u5217\u8868\uFF08\u4E0D\u4F20\u5219\u53D6\u6D88\u6240\u6709\uFF09",items:{type:"string"},required:false}},execute:async(r,e)=>{let t=e.events,n=e._clientId;return {success:r.unsubscribe(n,t)}}}];function eg(){return cC.map(r=>r.name)}var mP={port:7091,host:"0.0.0.0",token:"",maxClients:10,maxConnectionsPerIp:3,idleTimeout:300*1e3,heartbeatInterval:30*1e3,maxPortRetries:10,rateLimit:{messages:60,window:60*1e3}},ea=class{wss=null;clients=new Map;config;hostContext;heartbeatTimer=null;version;actualPort;onRun;constructor(e,t,n){this.hostContext=e,this.config={...mP,...t},this.version=t.version||"1.0.0",this.actualPort=this.config.port,this.onRun=n;}async start(){if(this.wss)return;if(!this.config.token.trim())throw new Error("Remote server token is required");this.config.token=this.config.token.trim();let e=this.config.maxPortRetries??10,t=null;for(let n=0;n<e;n++){let s=this.config.port+n;try{await this.tryBindPort(s),this.actualPort=s,n>0&&p.info("CLIENT_AGENT",`Port ${this.config.port} in use, using port ${s} instead`),p.info("CLIENT_AGENT",`Server started on ${this.config.host}:${this.actualPort}`),this.startHeartbeat();return}catch(o){if(t=o,o.code!=="EADDRINUSE")throw o;this.wss&&(this.wss.close(),this.wss=null);}}throw t||new Error(`Failed to bind to any port in range ${this.config.port}-${this.config.port+e-1}`)}tryBindPort(e){return new Promise((t,n)=>{this.wss=new WebSocketServer({port:e,host:this.config.host});let s=o=>{n(o);};this.wss.once("error",s),this.wss.on("listening",()=>{this.wss?.removeListener("error",s),t();}),this.wss.on("connection",(o,i)=>{this.handleConnection(o,i);});})}async stop(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null);for(let e of this.clients.values())this.sendMessage(e.ws,{type:"close_ack"}),e.ws.close();if(this.clients.clear(),this.wss)return new Promise(e=>{this.wss.close(()=>{this.wss=null,p.info("CLIENT_AGENT","Server stopped"),e();});})}getStatus(){return {running:this.wss!==null,host:this.config.host||"0.0.0.0",port:this.actualPort,token:this.config.token,clients:this.clients.size}}updateToken(e){this.config.token=e.trim();}normalizeMessageData(e){return typeof e=="string"?e:Buffer.isBuffer(e)?e.toString():Array.isArray(e)?Buffer.concat(e).toString():e instanceof ArrayBuffer?Buffer.from(e).toString():null}handleConnection(e,t){let n=this.getClientIp(t);if(this.clients.size>=this.config.maxClients){p.warn("CLIENT_AGENT",`Max clients reached, rejecting connection from ${n}`),e.close(1013,"Max clients reached");return}if(Array.from(this.clients.values()).filter(a=>a.ip===n).length>=this.config.maxConnectionsPerIp){p.warn("CLIENT_AGENT",`Max connections per IP reached for ${n}`),e.close(1013,"Max connections per IP reached");return}let o=is.randomUUID(),i={id:o,ws:e,state:"connected",device:null,capabilities:[],agentId:null,subscriptions:new Set,connectedAt:Date.now(),lastActivity:Date.now(),ip:n,messageCount:0,messageWindowStart:Date.now()};this.clients.set(o,i),p.info("CLIENT_AGENT",`Client connected: ${o} from ${n}`),this.sendMessage(e,{type:"welcome",payload:{version:this.version,serverTime:Date.now(),features:["chat","voice","host_introspection","event_subscription"]}}),e.on("message",a=>{this.handleMessage(i,a);}),e.on("pong",()=>{i.lastActivity=Date.now();}),e.on("close",()=>{this.handleDisconnect(i);}),e.on("error",a=>{p.error("CLIENT_AGENT",`Client error: ${o}`,a);});}async handleMessage(e,t){if(e.lastActivity=Date.now(),!this.checkRateLimit(e)){this.sendError(e.ws,"RATE_LIMITED","Too many requests");return}let n=this.normalizeMessageData(t);if(n===null){this.sendError(e.ws,"INVALID_MESSAGE","Unsupported message format");return}let s;try{s=JSON.parse(n);}catch{this.sendError(e.ws,"INVALID_MESSAGE","Invalid JSON");return}switch(p.debug("CLIENT_AGENT",`Message from ${e.id}: ${s.type}`),s.type){case "auth":await this.handleAuth(e,s);break;case "register":await this.handleRegister(e,s);break;case "chat":await this.handleChat(e,s);break;case "voice":await this.handleVoice(e,s);break;case "subscribe":await this.handleSubscribe(e,s);break;case "unsubscribe":await this.handleUnsubscribe(e,s);break;case "ping":this.sendMessage(e.ws,{type:"pong",ts:Date.now(),payload:{serverTime:Date.now()}});break;case "close":this.sendMessage(e.ws,{type:"close_ack"}),e.ws.close();break;default:this.sendError(e.ws,"INVALID_MESSAGE",`Unknown message type: ${s.type}`);}}async handleAuth(e,t){let{token:n}=t.payload;if(n!==this.config.token){e.state="error",this.sendMessage(e.ws,{type:"auth_fail",payload:{reason:"Invalid token"}}),e.ws.close(1008,"Authentication failed");return}e.state="authenticated",this.sendMessage(e.ws,{type:"auth_ok",payload:{clientId:e.id}});}async handleRegister(e,t){if(e.state!=="authenticated"){this.sendError(e.ws,"AUTH_REQUIRED","Authentication required");return}let{device:n,capabilities:s}=t.payload;e.device=n,e.capabilities=s,e.agentId=`agent-${e.id}`,e.state="ready",p.info("CLIENT_AGENT",`Device registered: ${n.type} - ${n.name}`),this.sendMessage(e.ws,{type:"agent_ready",payload:{agentId:e.agentId,tools:eg(),model:"lightweight"}});}async handleChat(e,t){if(e.state!=="ready"){this.sendError(e.ws,"AUTH_REQUIRED","Registration required");return}let{text:n}=t.payload,s=t.id||is.randomUUID();if(p.info("CLIENT_AGENT",`Chat from ${e.device?.name}: ${n.slice(0,50)}...`),this.onRun)try{let o=await this.onRun({text:n,voice:!1});this.sendMessage(e.ws,{type:"response",id:s,payload:{text:o.ok?o.queued?`\u547D\u4EE4\u5DF2\u52A0\u5165\u961F\u5217\uFF0C\u4F4D\u7F6E: ${o.position}`:"\u547D\u4EE4\u5DF2\u53D1\u9001":o.error||"\u547D\u4EE4\u53D1\u9001\u5931\u8D25",queued:o.queued,position:o.position}});}catch(o){p.error("CLIENT_AGENT","Chat onRun failed",o),this.sendError(e.ws,"INTERNAL_ERROR","Command execution failed",s);}else this.sendError(e.ws,"HOST_UNAVAILABLE","CLI not available",s);}async handleVoice(e,t){if(e.state!=="ready"){this.sendError(e.ws,"AUTH_REQUIRED","Registration required");return}let{text:n,audio:s}=t.payload,o=t.id||is.randomUUID(),i=n;if(!i&&s&&(i="[Audio input - STT not implemented]"),!i){this.sendError(e.ws,"INVALID_MESSAGE","No text or audio provided");return}p.info("CLIENT_AGENT",`Voice from ${e.device?.name}: ${i.slice(0,50)}...`),await this.processAgentRequest(e,o,i);}async processAgentRequest(e,t,n){p.debug("CLIENT_AGENT",`Processing request: ${t}, text: ${n.slice(0,50)}`);try{let s="";if(n.includes("\u72B6\u6001")||n.includes("status")){let o=await this.hostContext.getStatus();s=o.isRunning?`\u6B63\u5728\u6267\u884C\u4EFB\u52A1\uFF0C\u6A21\u5F0F: ${o.mode}\uFF0C\u5185\u5B58\u4F7F\u7528: ${Math.round(o.memoryUsage.pressure*100)}%`:`\u7A7A\u95F2\u4E2D\uFF0C\u5DE5\u4F5C\u76EE\u5F55: ${o.workingDirectory}`;}else if(n.includes("\u8FDB\u5EA6")||n.includes("progress")){let i=(await this.hostContext.getAgents()).filter(a=>a.status==="running");s=i.length>0?`\u6709 ${i.length} \u4E2A Agent \u6B63\u5728\u8FD0\u884C`:"\u5F53\u524D\u6CA1\u6709\u6B63\u5728\u6267\u884C\u7684\u4EFB\u52A1";}else if(n.includes("\u4E2D\u65AD")||n.includes("stop")||n.includes("interrupt"))s=(await this.hostContext.interrupt("Voice command")).interrupted?"\u5DF2\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1":"\u6CA1\u6709\u6B63\u5728\u6267\u884C\u7684\u4EFB\u52A1";else if(n.includes("\u7CFB\u7EDF")||n.includes("system")){let o=await this.hostContext.getSystem();s=`\u5E73\u53F0: ${o.platform}, Git: ${o.gitBranch||"\u65E0"} (${o.gitStatus})`;}else s=`\u6536\u5230\u6D88\u606F: "${n.slice(0,100)}"\uFF0C\u547D\u4EE4\u5DF2\u52A0\u5165\u961F\u5217`,this.hostContext.sendCommand(n).catch(o=>{p.error("CLIENT_AGENT","sendCommand failed",o);});p.debug("CLIENT_AGENT",`Sending response: ${s.slice(0,50)}`),this.sendMessage(e.ws,{type:"response",id:t,payload:{text:s}}),p.debug("CLIENT_AGENT",`Response sent for request: ${t}`);}catch(s){p.error("CLIENT_AGENT","Agent request failed",s),this.sendError(e.ws,"INTERNAL_ERROR","Request processing failed",t);}}async handleSubscribe(e,t){if(e.state!=="ready"){this.sendError(e.ws,"AUTH_REQUIRED","Registration required");return}let{events:n}=t.payload;n.forEach(s=>e.subscriptions.add(s)),this.hostContext.subscribe(e.id,n,s=>{this.sendMessage(e.ws,{type:"host_event",payload:{event:s.type,timestamp:Date.now(),data:s.data}});}),p.info("CLIENT_AGENT",`Client ${e.id} subscribed to: ${n.join(", ")}`);}async handleUnsubscribe(e,t){let{events:n}=t.payload;n?(n.forEach(s=>e.subscriptions.delete(s)),this.hostContext.unsubscribe(e.id,n)):(e.subscriptions.clear(),this.hostContext.unsubscribe(e.id));}handleDisconnect(e){p.info("CLIENT_AGENT",`Client disconnected: ${e.id}`),this.hostContext.cleanupClient(e.id),this.clients.delete(e.id);}sendMessage(e,t){e.readyState===WebSocket.OPEN&&e.send(JSON.stringify(t));}sendError(e,t,n,s){this.sendMessage(e,{type:"error",id:s,payload:{code:t,message:n}});}getClientIp(e){let t=e.headers["x-forwarded-for"];return typeof t=="string"?t.split(",")[0].trim():e.socket.remoteAddress||"unknown"}checkRateLimit(e){let t=Date.now(),{messages:n,window:s}=this.config.rateLimit;return t-e.messageWindowStart>s&&(e.messageCount=0,e.messageWindowStart=t),e.messageCount++,e.messageCount<=n}startHeartbeat(){this.heartbeatTimer=setInterval(()=>{let e=Date.now();for(let[t,n]of this.clients){if(e-n.lastActivity>this.config.idleTimeout){p.info("CLIENT_AGENT",`Client ${t} idle timeout`),n.ws.close(1e3,"Idle timeout");continue}n.ws.readyState===WebSocket.OPEN&&n.ws.ping();}},this.config.heartbeatInterval);}broadcast(e){for(let t of this.clients.values())t.state==="ready"&&this.sendMessage(t.ws,e);}broadcastRaw(e){for(let t of this.clients.values())t.state==="ready"&&t.ws.readyState===WebSocket.OPEN&&t.ws.send(JSON.stringify(e));}broadcastRuntimeEvent(e){this.broadcastRaw({type:"runtime_event",ts:Date.now(),payload:e});}broadcastHostEvent(e,t){for(let n of this.clients.values())n.state==="ready"&&(n.subscriptions.has("*")||n.subscriptions.has(e))&&this.sendMessage(n.ws,{type:"host_event",payload:{event:e,timestamp:Date.now(),data:t}});}};function nu(){return is.randomBytes(16).toString("hex")}var ta=class{runtimeHost;sessionManager;version;workingDirectory;startTime;activityLog=[];maxActivityLog=100;eventSubscribers=new Map;eventCallbacks=new Map;constructor(e){this.runtimeHost=e.runtimeHost,this.sessionManager=e.sessionManager,this.version=e.version,this.workingDirectory=e.workingDirectory,this.startTime=Date.now();}setRuntimeHost(e){this.runtimeHost=e;}logActivity(e,t,n){this.activityLog.unshift({timestamp:Date.now(),type:e,summary:t,details:n}),this.activityLog.length>this.maxActivityLog&&this.activityLog.pop(),this.broadcastEvent(e,{summary:t,details:n});}broadcastEvent(e,t){for(let[n,s]of this.eventSubscribers)if(s.has("*")||s.has(e)){let o=this.eventCallbacks.get(n);o&&o({type:e,data:t});}}async getStatus(){let e=this.runtimeHost,t=e?.isExecuting?.()??false,n=e?.getCurrentTask?.()??null,s=e?.getMode?.()??"single",o=e?.getSessionId?.()??"",i=e?.getMemorySnapshot?.(),a=i?.tokensUsed??0,l=i?.contextWindow??128e3,c=l>0?a/l:0;return {isRunning:t,currentTask:n,mode:s,sessionId:o,workingDirectory:this.workingDirectory,uptime:Math.floor((Date.now()-this.startTime)/1e3),memoryUsage:{tokensUsed:a,contextWindow:l,pressure:c}}}async getAgents(){let e=[],t=this.runtimeHost;return t&&e.push({id:"main",role:"main",status:t.isExecuting?.()?"running":"idle",currentTool:t.getCurrentTool?.()??null,progress:t.getProgress?.()??0,startedAt:this.startTime}),e}async getActivity(e=10){return this.activityLog.slice(0,e)}async getSession(){let e=await this.sessionManager.getMostRecent();if(!e)return {sessionId:"",messageCount:0,tokensUsed:0,lastUserMessage:"",lastAssistantSummary:"",checkpoints:0};let t=await e.getMessages(),n=t.filter(l=>l.role==="user"),s=t.filter(l=>l.role==="assistant"),o=n[n.length-1]?.content??"",i=s[s.length-1]?.content??"",a=typeof i=="string"?i.slice(0,200):"";return {sessionId:e.sessionId,messageCount:t.length,tokensUsed:0,lastUserMessage:typeof o=="string"?o:"",lastAssistantSummary:a,checkpoints:0}}async getSystem(){let e=null,t="unknown";try{let{execSync:n}=await import('child_process');try{e=n("git rev-parse --abbrev-ref HEAD",{cwd:this.workingDirectory,encoding:"utf-8",timeout:5e3}).trim();}catch{e=null;}try{t=n("git status --porcelain",{cwd:this.workingDirectory,encoding:"utf-8",timeout:5e3}).trim().length===0?"clean":"dirty";}catch{t="unknown";}}catch{}return {platform:process.platform,arch:process.arch,cwd:this.workingDirectory,gitBranch:e,gitStatus:t,nodeVersion:process.version,neoxVersion:this.version}}async interrupt(e){if(!this.runtimeHost)return {interrupted:false};let t=this.runtimeHost,n=t.getCurrentTaskId?.();try{return t.interrupt?.(),this.logActivity("message",`Task interrupted${e?`: ${e}`:""}`,{taskId:n,reason:e}),{interrupted:!0,taskId:n}}catch{return {interrupted:false}}}async sendCommand(e,t="normal"){return this.logActivity("message",`Command queued: ${e.slice(0,50)}...`,{text:e,priority:t}),{queued:true,position:1}}subscribe(e,t,n){let s=`${e}-${Date.now()}`;this.eventSubscribers.has(e)||this.eventSubscribers.set(e,new Set);let o=this.eventSubscribers.get(e);return t.forEach(i=>o.add(i)),this.eventCallbacks.set(e,n),s}unsubscribe(e,t){if(!this.eventSubscribers.has(e))return false;if(t){let n=this.eventSubscribers.get(e);t.forEach(s=>n.delete(s));}else this.eventSubscribers.delete(e),this.eventCallbacks.delete(e);return true}cleanupClient(e){this.eventSubscribers.delete(e),this.eventCallbacks.delete(e);}};Gt();To();re();ps();var AP=new Set([".wav",".mp3",".m4a",".aiff",".aif",".ogg"]),rg="complete.wav";function ra(r){return {soundEnabled:r.completionAlerts?.soundEnabled??false,soundFile:r.completionAlerts?.soundFile??"",notifyEnabled:r.completionAlerts?.notifyEnabled??false}}function og(){try{return Ze__default.existsSync(ts)?Ze__default.readdirSync(ts).filter(r=>AP.has(ge__default.extname(r).toLowerCase())).sort((r,e)=>r.localeCompare(e)):[]}catch{return []}}function MP(r){if(r){let n=ge__default.isAbsolute(r)?r:ge__default.join(ts,r);if(Ze__default.existsSync(n))return n}let e=ge__default.join(ts,rg);if(Ze__default.existsSync(e))return e;let t=og();return t.length>0?ge__default.join(ts,t[0]):null}function TC(r,e){let t="Neox CLI",n="Task complete",s=e?.summary?.durationMs,o=s?`${n} - ${(s/1e3).toFixed(1)}s`:n;if(r.notifyEnabled&&RP(t,o),r.soundEnabled){let i=MP(r.soundFile);PP(i);}}function $s(r,e,t){try{let n=spawn(r,e,{stdio:"ignore"});n.on("error",s=>{process.env.CLI_DEBUG&&p.debug("ALERT",`Failed to spawn ${r}`,{error:s}),t&&t();}),n.unref();}catch(n){process.env.CLI_DEBUG&&p.debug("ALERT",`Failed to execute ${r}`,{error:n}),t&&t();}}function Ls(){try{process.stdout.write("\x07");}catch{}}function wC(r){return r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function au(r){return r.replace(/'/g,"''")}function PP(r){if(!r||!Ze__default.existsSync(r)){Ls();return}if(process.platform==="darwin"){$s("afplay",[r],Ls);return}if(Ve()){let e=ge__default.extname(r).toLowerCase();if(e!==".wav"&&e!==".wave"){Ls();return}let t=js(r),s=`(New-Object Media.SoundPlayer '${au(t)}').PlaySync()`;$s("powershell.exe",["-NoProfile","-Command",s],Ls);return}if(process.platform==="linux"){$s("paplay",[r],()=>{$s("aplay",[r],Ls);});return}if(process.platform==="win32"){let e=ge__default.extname(r).toLowerCase();if(e!==".wav"&&e!==".wave"){Ls();return}let n=`(New-Object Media.SoundPlayer '${au(r)}').PlaySync()`;$s("powershell",["-NoProfile","-Command",n],Ls);return}Ls();}function RP(r,e){if(process.platform==="darwin"){let t=`display notification "${wC(e)}" with title "${wC(r)}"`;$s("osascript",["-e",t]);return}if(Ve()){let t=au(r),n=au(e),s=`
|
|
3542
3542
|
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
|
|
3543
3543
|
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
|
|
3544
3544
|
$template = '<toast><visual><binding template="ToastText02"><text id="1">${t}</text><text id="2">${n}</text></binding></visual></toast>'
|
|
@@ -3613,9 +3613,9 @@ ${t.join(`
|
|
|
3613
3613
|
`),this.uiController.stop(),bg(false),Tu=false,process.env.CLI_DEBUG==="1"&&process.stderr.write(`[DEBUG] uiController.stop() returned
|
|
3614
3614
|
`)),await this.stopRemoteServer(),await this.actionLog.shutdown(),!e){let t=bt.getBackgroundRunning();if(t.length>0){console.log(),console.log(x.warning(` \u26A0\uFE0F \u6709 ${t.length} \u4E2A\u540E\u53F0\u8FDB\u7A0B\u6B63\u5728\u8FD0\u884C:`)),console.log(),t.forEach(s=>{console.log(x.dim(` PID ${s.pid}: ${s.command.substring(0,50)}${s.command.length>50?"...":""}`));}),console.log();let{action:n}=await wu({type:"select",name:"action",message:"\u5982\u4F55\u5904\u7406\u8FD9\u4E9B\u540E\u53F0\u8FDB\u7A0B?",choices:[{title:"\u7EC8\u6B62\u6240\u6709\u540E\u53F0\u8FDB\u7A0B\u5E76\u9000\u51FA",value:"kill"},{title:"\u4FDD\u6301\u8FD0\u884C\u5E76\u9000\u51FA (\u8FDB\u7A0B\u5C06\u7EE7\u7EED\u5728\u540E\u53F0\u8FD0\u884C)",value:"keep"},{title:"\u53D6\u6D88\u9000\u51FA",value:"cancel"}]});if(n==="cancel")throw new Error("exit_cancelled");if(n==="kill"){console.log(),console.log(x.info(" \u6B63\u5728\u7EC8\u6B62\u540E\u53F0\u8FDB\u7A0B..."));let s=bt.killAll(true);console.log(x.success(` \u2713 \u5DF2\u7EC8\u6B62 ${s.killed} \u4E2A\u8FDB\u7A0B`)),s.failed>0&&console.log(x.warning(` \u26A0 ${s.failed} \u4E2A\u8FDB\u7A0B\u7EC8\u6B62\u5931\u8D25`));}}}}async exitWithCleanup(e){if(this.exiting)return;this.exiting=true;let t=2e3,n=null,s=new Promise(o=>{n=setTimeout(o,t);});try{await Promise.race([this.cleanup(e.skipProcessCheck),s]);}catch(o){process.env.CLI_DEBUG==="1"&&process.stderr.write(`[DEBUG] exitWithCleanup failed (${e.reason}): ${o?.message}
|
|
3615
3615
|
`);}finally{n&&clearTimeout(n),process.exit(e.exitCode);}}buildInstructions(){let e=this.providerSettings.protocol||"openai",t=e==="openai-responses";return process.env.CLI_DEBUG==="1"&&p.debug("PROMPT",`Protocol: ${e}, useCodexStyle: ${t}`),(n,s)=>fi({workDir:this.workDir,language:"zh",useCodexStyle:t})}buildStaticInstructions(){let t=(this.providerSettings.protocol||"openai")==="openai-responses";return fi({workDir:this.workDir,language:"zh",useCodexStyle:t})}displayHeader(){console.clear(),console.log();let t=Zb(process.stdout.columns).split(`
|
|
3616
|
-
`);t.forEach((s,o)=>{if(!s.trim()){console.log();return}let i=o/Math.max(t.length-1,1),a;i<.33?a=
|
|
3616
|
+
`);t.forEach((s,o)=>{if(!s.trim()){console.log();return}let i=o/Math.max(t.length-1,1),a;i<.33?a=ke.cyan(s):i<.66?a=ke.magenta(s):a=ke.hex("#FF69B4")(s),console.log(a);}),console.log(),console.log(x.dim(" "+"\u2500".repeat(50))),console.log();let n=this.workDir.replace(process.env.HOME||"","~");console.log(x.dim(" Provider: ")+x.info(this.getProviderDisplayName())),console.log(x.dim(" Model: ")+x.info(this.model)),console.log(x.dim(" Dir: ")+x.info(n)),console.log(x.dim(" Tools: ")+x.info(this.tools.length.toString())),console.log(),console.log(x.dim(" Type ")+x.highlight("/help")+x.dim(" for commands \u2502 ")+x.highlight("ESC")+x.dim(" to interrupt \u2502 ")+x.error("Ctrl+C")+x.dim(" to exit")),console.log(),console.log(x.dim("\u2500".repeat(50)));}showProviderConfigurationGuide(){console.clear(),console.log(),console.log(ke.yellow("\u2501".repeat(60))),console.log(),console.log(ke.bold.yellow(" \u26A0\uFE0F \u6B22\u8FCE\u4F7F\u7528 Neox CLI")),console.log(),console.log(ke.cyan(" \u{1F3AF} \u68C0\u6D4B\u5230\u60A8\u8FD8\u6CA1\u6709\u914D\u7F6E AI Provider")),console.log(ke.dim(" \u4E3A\u4E86\u4F7F\u7528 Neox CLI\uFF0C\u60A8\u9700\u8981\u5148\u914D\u7F6E\u4E00\u4E2A AI Provider\uFF08\u5982 OpenAI\u3001Claude \u7B49\uFF09")),console.log(),console.log(ke.bold.green(" \u{1F4A1} \u5FEB\u901F\u5F00\u59CB\uFF1A")),console.log(ke.dim(" \u2022 \u60A8\u53EF\u4EE5\u4F7F\u7528 OpenAI\u3001Anthropic Claude\u3001Gemini \u7B49\u670D\u52A1")),console.log(ke.dim(" \u2022 \u9700\u8981\u51C6\u5907 API Key\uFF08\u4ECE\u5BF9\u5E94\u670D\u52A1\u5546\u83B7\u53D6\uFF09")),console.log(ke.dim(" \u2022 \u53EF\u4EE5\u4F7F\u7528\u4EE3\u7406\u5730\u5740\uFF08\u5982\u679C\u60A8\u4F7F\u7528\u7B2C\u4E09\u65B9\u4EE3\u7406\uFF09")),console.log(),console.log(ke.bold.magenta(" \u{1F4CB} \u652F\u6301\u7684 Provider\uFF1A")),console.log(ke.green(" OpenAI")+ke.dim(" - GPT-4o, GPT-4, o3-mini \u7B49")),console.log(ke.cyan(" Anthropic")+ke.dim(" - Claude Sonnet 4.5, Claude Opus \u7B49")),console.log(ke.yellow(" Gemini")+ke.dim(" - Gemini 2.5 \u7CFB\u5217")),console.log(ke.blue(" \u8C46\u5305 (Doubao)")+ke.dim(" - \u706B\u5C71\u65B9\u821F\u6DF1\u5EA6\u601D\u8003\u6A21\u578B")),console.log(),console.log(ke.yellow("\u2501".repeat(60))),console.log();}async runModernUI(){if(process.env.CLI_DEBUG&&(p.info("CLI","=== runModernUI() starting ==="),Jt.logStdinState("runModernUI.start")),kx()){this.showProviderConfigurationGuide(),await _x(),this.userConfig=We(),this.providerStore=new qe(this.userConfig);let s=this.resolveProvider(void 0);this.providerSettings=s,this.providerId=s.id,this.provider=s.protocol;let o=this.providerStore.resolveModel(s.id);if(!o)throw new Error(`Provider "${s.name}" does not have any models configured. Use /model add to configure one.`);this.model=o,this.providerStore.setLastSelectedModel(s.id,this.model),this.refreshProviderSettings();}let e=this.workDir.replace(process.env.HOME||"","~");await this.initializeSession(),p.info("CLI","Using Ink UI"),this.uiController=new oc({version:wo,provider:this.getProviderDisplayName(),model:this.model,workDir:e,commandHints:su,getCompletions:s=>this.getCompletionSuggestions(s),memory:this.memory,getPendingMessages:()=>this.runtimeHost.getPendingMessagesForDisplay()});let t=this.getCompressionMode(),n=this.getCompactionThreshold();if(this.uiController.setCompressionMode(t),this.uiController.setCompactionThreshold(n),this.currentRunMode==="cooperate"){let o=new Ut().getEnabledWorkerModels().map(i=>this.getModelShortName(i.model));this.uiController.updateCooperateStats({models:o.map(i=>({shortName:i,status:"idle"})),totalInputTokens:0,totalOutputTokens:0});}this.uiController.setRunMode(this.currentRunMode),this.runtimeHost.setCompressionMode(t),this.updateContextWindowDisplay(),p.debug("CLI","Initialized context settings from userConfig",{compressionMode:t,thresholdPercent:n}),process.env.CLI_DEBUG&&(p.debug("CLI","Ink UI adapter created, starting UI..."),Jt.logStdinState("runModernUI.beforeStart")),bg(true);try{Tu=!0,this.uiController.start({onSubmit:async(s,o)=>{let i=o?.map(a=>({mediaType:a.mediaType,data:a.data,name:a.name||"image"}));await this.handleUserInput(s,i,"local");},onExit:()=>{process.env.CLI_DEBUG==="1"&&process.stderr.write(`
|
|
3617
3617
|
[DEBUG] onExit callback invoked
|
|
3618
|
-
`),this.exitWithCleanup({skipProcessCheck:!0,exitCode:0,reason:"ui-exit"});},onInterrupt:()=>{this.isTaskRunning=!1,this.runtimeHost.interrupt(),this.collabRuntime&&(this.collabRuntime.abort(),p.debug("INTERRUPT","CollabAgentRuntime aborted")),this.singleRuntime&&(this.singleRuntime.abort(),p.debug("INTERRUPT","SingleAgentRuntime aborted")),this.cooperateRuntime&&(this.cooperateRuntime.abort(),p.debug("INTERRUPT","CooperateRuntime aborted")),this.networkRuntime&&(this.networkRuntime.abort(),p.debug("INTERRUPT","NetworkRuntime aborted")),this.uiController&&(this.uiController.stopTaskTimer(),this.uiController.finalizeStreamingState?.(),this.uiController.resetStreamingState(),this.uiController.updateStatus("Ready","complete"),this.uiController.flushRenderScheduler(),this.uiController.addInfo(
|
|
3618
|
+
`),this.exitWithCleanup({skipProcessCheck:!0,exitCode:0,reason:"ui-exit"});},onInterrupt:()=>{this.isTaskRunning=!1,this.runtimeHost.interrupt(),this.collabRuntime&&(this.collabRuntime.abort(),p.debug("INTERRUPT","CollabAgentRuntime aborted")),this.singleRuntime&&(this.singleRuntime.abort(),p.debug("INTERRUPT","SingleAgentRuntime aborted")),this.cooperateRuntime&&(this.cooperateRuntime.abort(),p.debug("INTERRUPT","CooperateRuntime aborted")),this.networkRuntime&&(this.networkRuntime.abort(),p.debug("INTERRUPT","NetworkRuntime aborted")),this.uiController&&(this.uiController.stopTaskTimer(),this.uiController.finalizeStreamingState?.(),this.uiController.resetStreamingState(),this.uiController.updateStatus("Ready","complete"),this.uiController.flushRenderScheduler(),this.uiController.addInfo(ke.red("\u26A0\uFE0F Task interrupted by user"))),process.env.CLI_DEBUG==="1"&&p.debug("INTERRUPT","Task interrupted, isTaskRunning set to false"),Jt.stop();},isTaskRunning:()=>this.isTaskRunning,onToggleThinking:s=>{this.thinkingMode=s?"enabled":"disabled",kv(this.thinkingMode,this.providerControls,this.llmProvider),process.env.CLI_DEBUG==="1"&&console.log(`[THINKING] Toggled to: ${this.thinkingMode}`);}});}catch(s){throw bg(false),Tu=false,s}return process.env.CLI_DEBUG&&(p.info("CLI","=== runModernUI() UI started, entering event loop ==="),Jt.logStdinState("runModernUI.afterStart")),await this.startRemoteServer(),new Promise(()=>{})}getRuntimeEventContext(){return {uiController:this.uiController,lastToolCallArgs:this.lastToolCallArgs,toolIdToName:this.toolIdToName,toolIdToArgs:this.toolIdToArgs,pushTokenStats:(e,t,n,s)=>this.pushTokenStats(e,t,n,s),getRuntimeTokens:()=>({input:this.runtimeInputTokens,output:this.runtimeOutputTokens}),setRuntimeTokens:(e,t)=>{this.runtimeInputTokens=e,this.runtimeOutputTokens=t;},getStreamingTokenCount:()=>this.streamingTokenCount,setStreamingTokenCount:e=>{this.streamingTokenCount=e;},provider:this.getProviderDisplayName(),model:this.model,sessionId:this.currentSession?.sessionId,tokenUsage:this.platformServices.tokenUsage}}async handleUserInput(e,t,n="local"){if(process.env.CLI_DEBUG==="1"&&(p.debug("INPUT","========================================"),p.debug("INPUT","=== handleUserInput ENTRY ==="),p.debug("INPUT",` rawInput: "${e?.substring(0,50)}..."`),p.debug("INPUT",` uiController exists: ${!!this.uiController}`),p.debug("INPUT",` isTaskRunning: ${this.isTaskRunning}`),p.debug("INPUT",` stdin.isPaused: ${process.stdin.isPaused?.()}`),p.debug("INPUT",` stdin.destroyed: ${process.stdin.destroyed}`),p.debug("INPUT",` stdin.readable: ${process.stdin.readable}`),Jt.logStdinState("handleUserInput.entry")),this.isTaskRunning){if(n==="remote"){p.debug("INPUT",`\u{1F525} Remote message while task running, enqueueing: "${e?.substring(0,50)}"`),this.enqueueExecutorRun(e,n);return}let l=e?e.trim():"";if(l){process.env.CLI_DEBUG&&p.debug("INPUT","Task running: injecting user message",{message:l.substring(0,50)});let c=this.runtimeHost.injectUserMessage(l);process.env.CLI_DEBUG&&c>0&&p.debug("INPUT",`Message queued at position ${c}`);return}}let s=e?e.trim():"";if(s=s.replace(/\[image:[^\]]+\]/g,"").trim(),!s&&t&&t.length>0&&(s="\u8BF7\u5206\u6790\u8FD9\u5F20\u56FE\u7247"),!s&&(!t||t.length===0)){process.env.CLI_DEBUG==="1"&&p.debug("INPUT","Empty input received, ignoring");return}if(s.startsWith("/")){await this.handleCommand(s);return}if(!this.uiController)return;this.sessionRequests++,this.uiController.resetStreamingState(),this.runtimeInputTokens=0,this.runtimeOutputTokens=0,this.streamingTokenCount=0,this.uiController.startTaskTimer();let o=this.pendingAttachments.length?[...this.pendingAttachments]:[];if(o.length>0&&(this.pendingAttachments=[]),t&&t.length>0){for(let l of t)try{let c;if(l.mediaType&&l.data){let u=l.mediaType,d=l.data;c=`data:${u};base64,${d}`;}else if(l.path){let u=Ze.readFileSync(l.path),d=ge.extname(l.path).toLowerCase();c=`data:${ru[d]||"image/png"};base64,${u.toString("base64")}`;}else throw new Error("Invalid image format: missing path or data");o.push({type:"image",data:c,path:l.path,name:l.name});}catch(c){this.uiController.addInfo(`[x] Failed to read image: ${l.name}`,c?.message);}o.some(l=>l.type==="image")&&this.uiController.addInfo(`[i] ${t.length} image(s) attached`);}let i=o.length>0||this.interactionMode!=="agent"?{mode:this.interactionMode,attachments:o.length>0?o:void 0}:void 0;process.env.CLI_DEBUG==="1"&&(p.debug("INPUT","=== handleUserInput calling runTask ==="),Jt.logStdinState("handleUserInput.beforeRunTask"));let a=t?.map(l=>({data:"",mediaType:"image/png",path:l.path,name:l.name}));process.env.CLI_DEBUG==="1"&&p.debug("MAIN","Calling addUserMessage",{userInput:s,source:n}),this.uiController.addUserMessage(s,a,n),p.debug("MAIN",`\u{1F525} addUserMessage called for source=${n}, text="${s?.substring(0,50)}"`),this.clientAgentServer&&this.clientAgentServer.broadcastRaw({type:"user_input",ts:Date.now(),payload:{text:s,source:n}}),this.uiController.startSessionTimer(),this.isTaskRunning=true,this.clientAgentServer&&this.clientAgentServer.broadcastRaw({type:"run_start",ts:Date.now(),payload:{source:n}});try{switch(this.currentRunMode){case "single":let l=await this.runOrchestratedTask(s,i);this.maybeTriggerCompletionAlerts(l);break;case "collab":await this.runCollabModeTask(s,i);break;case "cooperate":await this.runCooperateModeTask(s,i);break;case "network":await this.runNetworkModeTask(s,i);break;default:let c=await this.runOrchestratedTask(s,i);this.maybeTriggerCompletionAlerts(c);}process.env.CLI_DEBUG==="1"&&(p.debug("INPUT","=== handleUserInput runTask completed successfully ==="),Jt.logStdinState("handleUserInput.afterRunTask.success"));}catch(l){if(l instanceof Ki||l?.code==="missing_provider"){let u="No provider configured. Use /provider add to configure one.";this.uiController?(this.uiController.updateStatus(u,"error"),this.uiController.addInfo(u)):oe(x.warning(` \u26A0 ${u}`));return}let c=l?.message||String(l)||"Unknown error";p.error("Agent","Task execution failed",{error:c,stack:l?.stack,userInput:s.substring(0,200)}),process.env.CLI_DEBUG==="1"&&Jt.logStdinState("handleUserInput.afterRunTask.error"),this.uiController.updateStatus(`Error: ${c}`,"error"),this.uiController.addInfo(`Error: ${c}`),this.clientAgentServer&&this.clientAgentServer.broadcastRaw({type:"run_error",ts:Date.now(),payload:{message:c}});}finally{this.isTaskRunning=false,this.clientAgentServer&&this.clientAgentServer.broadcastRaw({type:"run_end",ts:Date.now()}),process.env.CLI_DEBUG==="1"&&(p.debug("INPUT","=== handleUserInput finally block ==="),p.debug("INPUT",` stdin.isPaused: ${process.stdin.isPaused?.()}`),p.debug("INPUT",` stdin.destroyed: ${process.stdin.destroyed}`),Jt.logStdinState("handleUserInput.finally")),this.memory&&process.env.INK_MEM==="1"&&this.memory.logMemoryStats(),this.uiController.stopTaskTimer(),process.env.CLI_DEBUG==="1"&&p.debug("INPUT","=== handleUserInput END - input should be available now ===");let l=this.runtimeHost.getAndClearPendingMessages();if(l.length>0){let c=l.map(u=>u.text).join(`
|
|
3619
3619
|
|
|
3620
3620
|
`);process.env.CLI_DEBUG&&p.debug("INPUT",`Processing ${l.length} queued messages: "${c.substring(0,50)}..."`),setImmediate(()=>{this.handleUserInput(c);});}}}maybeTriggerCompletionAlerts(e){if(e.interrupted)return;let t=ra(this.userConfig);!t.soundEnabled&&!t.notifyEnabled||TC(t,{language:this.userConfig.language,summary:e});}async runInteractive(){let e=kg();return e.debug&&p.info("CLI","Experimental features",e),e.eventLoopMonitoring&&(Sg({checkInterval:1e3,warnThreshold:5e3,criticalThreshold:1e4,autoRecover:true}).onRecovery(n=>{p.error("CLI","\u{1F6A8} Event loop critical delay detected, attempting recovery",{stats:n});}),p.info("CLI","\u2713 Event Loop monitoring enabled")),e.useInputWorker&&p.debug("CLI","InputWorker skipped in Ink UI mode (Ink has own stdin handling)"),this.runModernUI()}async handleCommand(e){let t=e.trim();if(!t)return;if(t.toLowerCase().startsWith("/thinking")){await HC(this.getThinkingCommandContext(),t);return}let[s,...o]=t.split(/\s+/);switch(s.toLowerCase()){case "/exit":case "/quit":case "exit":case "quit":console.log(x.info(`
|
|
3621
3621
|
\u{1F44B} Goodbye!`)),this.exitWithCleanup({skipProcessCheck:false,exitCode:0,reason:"command"});break;case "/help":if(this.uiController)e:for(;;)try{let a=await this.uiController.promptSelect({message:"Select action",choices:kC(),initialValue:this.helpMenuLastSelection});if(a===null||a==="exit")break e;switch(a&&(this.helpMenuLastSelection=a),await new Promise(l=>setTimeout(l,50)),a){case "provider":await this.handleCommand("/provider");break;case "model":await this.handleCommand("/model");break;case "session":await this.handleCommand("/sessions");break;case "workspace":await this.handleCommand("/workspace");break;case "mode":await this.handleCommand("/mode");break;case "collab":await this.handleCommand("/collab");break;case "sandbox":await this.handleCommand("/sandbox");break;case "thinking":await this.handleCommand("/thinking");break;case "approval":await this.handleCommand("/approval");break;case "notify":await this.handleCommand("/notify");break;case "index":await this.handleCommand("/index");break;case "context":await this.handleCommand("/context");break;case "memory":await this.handleCommand("/memory");break;case "remote":await this.handleCommand("/remote");break;case "statistic":await this.handleCommand("/statistic");break;case "help-text":let l=[];lu(c=>{l.push(c);}),this.logInfo("Neox CLI Help",l.join(`
|
|
@@ -3625,6 +3625,6 @@ ${t.join(`
|
|
|
3625
3625
|
Type /help for available commands`);}}async rebuildAgentAndRunner(){if(!this.providerSettings)throw new Error("No provider configured.");this.memory=ho(500),this.baseTools=await to(this.workDir,this.platformServices),await this.loadMcpTools({refresh:true}),this.initThreeRuntimes();let e={maxIterations:0,temperature:.7,mode:this.currentMode},t=this.buildRuntimeHostConfig(e);if(this.runtimeHost=await this.hostService.getOrCreateHost(t),this.runtimeHost.setSandboxMode(sr()),this.resetMemoryPressureMonitor(),this.sessionEnabled&&this.currentSession){this.sessionSync=new lo({session:this.currentSession,memory:this.memory,systemPrompt:this.buildStaticInstructions()}),this.runtimeHost.setSession(this.currentSession,this.sessionSync);let n=await this.sessionSync.loadHistory();n>0&&p.info("MODEL",`Model switched, reloaded ${n} messages from session history`);}p.info("MODEL","Agent, runner, and three-mode runtimes rebuilt");}logInfo(e,t){this.uiController?this.uiController.addInfo(e,t):(oe(""),oe(x.highlight(` ${e}`)),t&&oe(x.dim(t)),oe(""));}normalizeWorkspacePath(e){let t=e.trim();if(!t)throw new Error("Empty workspace path");if(t==="~")return process.env.HOME||t;if(t.startsWith("~/")){let n=process.env.HOME||"";return ge.join(n,t.slice(2))}return ge.resolve(t)}formatWorkspaceLabel(e){let t=process.env.HOME||"";return t&&e.startsWith(t)?`~${e.slice(t.length)}`:e}getWorkspaceHistory(){let e=Array.isArray(this.userConfig.recentWorkspaces)?this.userConfig.recentWorkspaces:[],t=[],n=new Set,s=o=>{try{let i=this.normalizeWorkspacePath(o);n.has(i)||(n.add(i),t.push(i));}catch{}};s(this.workDir);for(let o of e)s(o);return t}saveWorkspaceHistory(e){let t=Array.from(new Set(e)),n=this.userConfig.recentWorkspaces||[];n.length===t.length&&n.every((o,i)=>o===t[i])||(this.userConfig={...this.userConfig,recentWorkspaces:t},Pe(this.userConfig));}showWorkspaceList(e){let t=[];if(t.push(""),t.push(x.highlight(" Workspaces")),t.push(""),e.length===0?t.push(x.dim(" (none)")):e.forEach((n,s)=>{let o=ge.resolve(n)===this.workDir,i=this.formatWorkspaceLabel(n),a=o?x.success("*"):x.dim(" ");t.push(`${x.dim(` ${s+1}.`)} ${a} ${x.info(i)}`);}),t.push(""),this.uiController&&typeof this.uiController.setCommandOutputLines=="function"){this.uiController.setCommandOutputLines(t);return}for(let n of t)oe(n);}async promptWorkspaceSelection(){let e=this.getWorkspaceHistory(),t=this.workDir,n=e.map(o=>({label:this.formatWorkspaceLabel(o),value:o,description:o===t?"current":void 0}));n.push({label:"+ Add workspace",value:"__add__"}),n.push({label:"Show list",value:"__list__"});let s=await this.promptSelect("Workspace",n,t);if(s==="__list__"){this.showWorkspaceList(e);return}if(s==="__add__"){let o=await this.promptText("Workspace path",{allowEmpty:false});await this.switchWorkspace(o);return}await this.switchWorkspace(s);}async switchWorkspace(e){if(this.isTaskRunning){this.logInfo("\u5F53\u524D\u4EFB\u52A1\u8FD0\u884C\u4E2D\uFF0C\u65E0\u6CD5\u5207\u6362\u5DE5\u4F5C\u533A");return}let t;try{t=this.normalizeWorkspacePath(e);}catch(i){this.logInfo("\u5DE5\u4F5C\u533A\u8DEF\u5F84\u65E0\u6548",i?.message||String(i));return}if(!Ze.existsSync(t)){this.logInfo("\u5DE5\u4F5C\u533A\u4E0D\u5B58\u5728",t);return}if(!Ze.statSync(t).isDirectory()){this.logInfo("\u76EE\u6807\u4E0D\u662F\u76EE\u5F55",t);return}if(ge.resolve(t)===this.workDir){this.logInfo("\u5DF2\u5728\u5F53\u524D\u5DE5\u4F5C\u533A",this.formatWorkspaceLabel(t));return}let n=[t,...this.getWorkspaceHistory()];this.saveWorkspaceHistory(n),this.workDir=t,process.chdir(this.workDir),process.env.NEOX_WORKDIR=this.workDir,await this.actionLog.setWorkspace(this.workDir),this.hostService.setWorkspace(this.workDir),this.hostService.clearHost("cli"),this.baseTools=await to(this.workDir,this.platformServices),this.mcpManager?this.mcpManager.setWorkDir(this.workDir):this.mcpManager=new On({workDir:this.workDir}),await this.loadMcpTools({refresh:true}),this.memory=ho(500),this.initThreeRuntimes();let s={maxIterations:0,temperature:.7,mode:this.currentMode},o=this.buildRuntimeHostConfig(s);if(this.runtimeHost=await this.hostService.getOrCreateHost(o),this.runtimeHost.setSandboxMode(sr()),this.runtimeHost.setCompressionMode(this.getCompressionMode()),this.sessionEnabled){let i=await this.sessionManager.createSession({model:this.model});await this.activateSession(i,{loadHistory:false});}else {this.memory.clear(),this.memory.add({role:"system",content:this.buildStaticInstructions()});let i=await this.actionLog.getContextSummary({language:this.userConfig.language??"zh"});i&&this.memory.add({role:"system",content:i});}this.uiController&&(this.uiController.updateWorkDir(this.formatWorkspaceLabel(this.workDir)),this.uiController.updateStatus("Workspace switched","complete")),this.logInfo("\u5DF2\u5207\u6362\u5DE5\u4F5C\u533A",this.formatWorkspaceLabel(this.workDir));}async handleWorkspaceCommand(e){let t=e[0]?.toLowerCase();if(!t){await this.promptWorkspaceSelection();return}if(t==="list"){this.showWorkspaceList(this.getWorkspaceHistory());return}if(t==="current"){this.logInfo("\u5F53\u524D\u5DE5\u4F5C\u533A",this.formatWorkspaceLabel(this.workDir));return}if(t==="add"){let n=e.slice(1).join(" ")||await this.promptText("Workspace path",{allowEmpty:false});try{let s=this.normalizeWorkspacePath(n),o=[s,...this.getWorkspaceHistory()];this.saveWorkspaceHistory(o),this.logInfo("\u5DF2\u6DFB\u52A0\u5DE5\u4F5C\u533A",this.formatWorkspaceLabel(s));}catch(s){this.logInfo("\u5DE5\u4F5C\u533A\u8DEF\u5F84\u65E0\u6548",s?.message||String(s));}return}if(t==="switch"){let n=e.slice(1).join(" ");if(!n){await this.promptWorkspaceSelection();return}await this.switchWorkspace(n);return}await this.switchWorkspace(e.join(" "));}getRuntimeHostConfigKey(e,t){return JSON.stringify({providerId:e.id,protocol:e.protocol,baseUrl:e.baseUrl,model:t.model,useResponsesAPI:e.useResponsesAPI??false,maxInputTokens:t.maxInputTokens??e.maxInputTokens??null})}getCommandContext(){return {runtimeHost:this.runtimeHost,uiController:this.uiController,colors:x,sessionEnabled:this.sessionEnabled,sessionManager:this.sessionManager,sessionSync:this.sessionSync,currentSession:this.currentSession,compatProfile:this.compatProfile,autoCompactionInProgress:this.autoCompactionInProgress,isRunning:this.isTaskRunning,logInfo:(e,t)=>this.logInfo(e,t),activateSession:(e,t)=>this.activateSession(e,t),normalizeCheckpoints:SC,withRuntimeEvents:e=>this.withRuntimeEvents(e),promptSelect:(e,t,n)=>this.promptSelect(e,t,n),promptText:(e,t)=>this.promptText(e,t),outputLines:this.uiController&&typeof this.uiController.setCommandOutputLines=="function"?e=>{this.uiController.setCommandOutputLines(e);}:void 0,clearOutputLines:this.uiController&&typeof this.uiController.clearCommandOutputLines=="function"?()=>{this.uiController.clearCommandOutputLines();}:void 0}}async withRuntimeEvents(e){let t=sg(this.getRuntimeEventContext()),n=this.runtimeHost.on(t);try{return await e()}finally{n();}}getProviderCommandContext(){return {providerId:this.providerId,provider:this.provider,model:this.model,providerSettings:this.providerSettings,getProviders:()=>this.providerStore.getProviders(),getProvider:e=>this.providerStore.getProvider(e),getDefaultProvider:()=>this.providerStore.getDefaultProvider(),getProviderCount:()=>this.providerStore.getProviderCount(),resolveModel:e=>this.providerStore.resolveModel(e),addProvider:e=>this.providerStore.addProvider(e),updateProvider:(e,t)=>this.providerStore.updateProvider(e,t),deleteProvider:e=>this.providerStore.deleteProvider(e),renameProvider:(e,t)=>this.providerStore.renameProvider(e,t),setDefaultProvider:e=>this.providerStore.setDefaultProvider(e),setLastSelectedModel:(e,t)=>this.providerStore.setLastSelectedModel(e,t),addModel:(e,t,n,s)=>this.providerStore.addModel(e,t,n,s),removeModel:(e,t)=>this.providerStore.removeModel(e,t),updateModelConfig:(e,t,n)=>this.providerStore.updateModelConfig(e,t,n),promptText:(e,t)=>this.promptText(e,t),promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),promptYesNo:(e,t)=>this.promptYesNo(e,t),promptConfirmKeyword:(e,t)=>this.promptConfirmKeyword(e,t),selectProviderFromList:e=>this.selectProviderFromList(e),selectModelFromProvider:(e,t)=>this.selectModelFromProvider(e,t),selectModelFromCurrentProvider:e=>this.selectModelFromCurrentProvider(e),getProviderByIdentifier:e=>this.getProviderByIdentifier(e),applyProviderState:async e=>{this.providerId=e.providerId,this.provider=e.provider,this.model=e.model,this.providerSettings=e.providerSettings,this.refreshProviderSettings(),this.rebuildCompatProfile(),await this.rebuildAgentAndRunner(),this.updateContextWindowDisplay();},refreshProviderSettings:()=>this.refreshProviderSettings(),getProviderDisplayName:()=>this.getProviderDisplayName(),logInfo:(e,t)=>this.logInfo(e,t),updateProviderDisplay:(e,t)=>{this.uiController&&this.uiController.updateProvider(e,t);},outputFn:this.uiController?e=>this.uiController.printCommandOutput(e):void 0}}getThinkingCommandContext(){return {model:this.model,providerSettings:this.providerSettings,thinkingMode:this.thinkingMode,llmProvider:this.providerControls?.anthropic||this.llmProvider,setThinkingMode:e=>{this.thinkingMode=e;},promptSelect:(e,t,n)=>this.promptSelect(e,t,n),logInfo:(e,t)=>this.logInfo(e,t)}}getConfigCommandContext(){return {approvalMode:this.approvalMode,userConfig:this.userConfig,promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),logInfo:(e,t)=>this.logInfo(e,t),cleanup:()=>this.cleanup(),setApprovalMode:e=>{this.approvalMode=e,e==="auto"?(this.currentMode="auto",this.runner&&this.runner.setMode("auto")):e==="manual"&&(this.currentMode="agent",this.runner&&this.runner.setMode("agent"));},updateConfig:e=>{this.userConfig=e;}}}getNotifyCommandContext(){return {userConfig:this.userConfig,promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;}}}getMcpCommandContext(){return this.mcpManager?this.mcpManager.setWorkDir(this.workDir):this.mcpManager=new On({workDir:this.workDir}),{workDir:this.workDir,mcpManager:this.mcpManager,promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),promptText:(e,t)=>this.promptText(e,t),logInfo:(e,t)=>this.logInfo(e,t),refreshMcpTools:async()=>{await this.rebuildAgentAndRunner();},outputLines:e=>this.uiController?.setCommandOutputLines(e)}}getIndexCommandContext(){return {userConfig:this.userConfig,workspacePath:this.workDir,promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;}}}getContextCommandContext(){return {userConfig:this.userConfig,promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;},runner:this.runner,uiController:this.uiController,memoryPressure:this.memoryPressure,updateCompactionThreshold:e=>this.updateCompactionThreshold(e),updateCompressionMode:e=>this.runtimeHost.setCompressionMode(e)}}getMemoryCommandContext(){return {actionLog:this.actionLog,userConfig:this.userConfig,promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),promptText:(e,t)=>this.promptText(e,t),logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;},uiController:this.uiController}}getRemoteCommandContext(){return {userConfig:this.userConfig,promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),promptText:(e,t)=>this.promptText(e,t),logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;},startRemote:()=>this.startRemoteServer(),stopRemote:()=>this.stopRemoteServer(),regenerateToken:()=>this.regenerateRemoteToken(),getStatus:()=>this.getRemoteStatus(),outputLines:this.uiController&&typeof this.uiController.setCommandOutputLines=="function"?e=>{this.uiController.setCommandOutputLines(e);}:void 0,clearOutputLines:this.uiController&&typeof this.uiController.clearCommandOutputLines=="function"?()=>{this.uiController.clearCommandOutputLines();}:void 0}}getSupervisorCommandContext(){return {userConfig:this.userConfig,logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;}}}getCollabCommandContext(){return {userConfig:this.userConfig,promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),promptText:(e,t)=>this.promptText(e,t),getProviders:()=>this.providerStore.getProviders(),activeProviderId:this.providerId,logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;},currentMode:this.currentRunMode,setMode:e=>this.setRunMode(e),workDir:this.workDir,llmCall:async(e,t)=>{if(!this.providerStore.getProviders().find(o=>o.id===this.providerId)?.models?.[0])throw new Error("\u672A\u914D\u7F6E\u53EF\u7528\u7684 LLM \u6A21\u578B");return (await this.orchestrator.runSession({sessionId:`llm-call-${Date.now()}`,prompt:`${e}
|
|
3626
3626
|
|
|
3627
3627
|
${t}`,providerId:this.providerId,modelName:this.model,buildHostConfig:(o,i)=>this.buildRuntimeHostConfig({},o,i)})).summary.output||""},readFile:async e=>{try{return await(await import('fs/promises')).readFile(e,"utf-8")}catch{return null}},listDir:async e=>{try{return await(await import('fs/promises')).readdir(e)}catch{return []}}}}getStatisticCommandContext(){return {promptSelect:(e,t,n,s)=>this.promptSelect(e,t,n,s),logInfo:(e,t)=>this.logInfo(e,t),outputLines:this.uiController&&typeof this.uiController.setCommandOutputLines=="function"?e=>{this.uiController.setCommandOutputLines(e);}:void 0,clearOutputLines:this.uiController&&typeof this.uiController.clearCommandOutputLines=="function"?()=>{this.uiController.clearCommandOutputLines();}:void 0}}getProcessCommandContext(){return {outputLines:this.uiController&&typeof this.uiController.setCommandOutputLines=="function"?e=>{this.uiController.setCommandOutputLines(e);}:void 0,clearOutputLines:this.uiController&&typeof this.uiController.clearCommandOutputLines=="function"?()=>{this.uiController.clearCommandOutputLines();}:void 0}}async addPendingAttachment(e){let t=e.trim();if(!t){this.logInfo("\u9644\u4EF6\u65E0\u6548","\u8BF7\u8F93\u5165\u672C\u5730\u56FE\u7247\u8DEF\u5F84\u6216 https \u94FE\u63A5");return}if(/^https?:\/\//i.test(t)){try{let i=new URL(t);this.pendingAttachments.push({type:"url",data:t,name:i.hostname}),this.logInfo("\u5DF2\u6DFB\u52A0\u94FE\u63A5\u9644\u4EF6",t);}catch{this.logInfo("\u65E0\u6548\u7684 URL",t);}return}let n=ge.isAbsolute(t)?t:ge.resolve(process.cwd(),t);if(!Ze.existsSync(n)){this.logInfo("\u6587\u4EF6\u4E0D\u5B58\u5728",n);return}let s=ge.extname(n).toLowerCase(),o=ru[s];if(!o){this.logInfo("\u4EC5\u652F\u6301\u56FE\u7247\u9644\u4EF6",`\u5141\u8BB8\u7684\u7C7B\u578B: ${Object.keys(ru).join(", ")}`);return}try{let i=await Ze.promises.readFile(n),a=`data:${o};base64,${i.toString("base64")}`;this.pendingAttachments.push({type:"image",data:a,name:ge.basename(n)}),this.logInfo("\u5DF2\u6DFB\u52A0\u56FE\u7247\u9644\u4EF6",ge.basename(n));}catch(i){this.logInfo("\u8BFB\u53D6\u9644\u4EF6\u5931\u8D25",i?.message||"\u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6");}}listPendingAttachments(){if(this.pendingAttachments.length===0){this.logInfo("\u9644\u4EF6\u5217\u8868","\u6CA1\u6709\u5F85\u53D1\u9001\u7684\u9644\u4EF6\u3002");return}oe(""),oe(x.highlight(" Pending attachments:")),this.pendingAttachments.forEach((e,t)=>{let n=e.type==="url"?e.data:e.name||`Image ${t+1}`;oe(x.dim(` ${t+1}. `)+x.info(n));}),oe("");}clearPendingAttachments(){if(this.pendingAttachments.length===0){this.logInfo("\u9644\u4EF6\u5217\u8868","\u6CA1\u6709\u53EF\u6E05\u9664\u7684\u9644\u4EF6\u3002");return}this.pendingAttachments=[],this.logInfo("\u9644\u4EF6\u5DF2\u6E05\u9664","\u6240\u6709\u5F85\u53D1\u9001\u9644\u4EF6\u5DF2\u79FB\u9664\u3002");}removePendingAttachment(e){if(e<0||e>=this.pendingAttachments.length){this.logInfo("\u9644\u4EF6\u7D22\u5F15\u65E0\u6548",`\u5F53\u524D\u5171\u6709 ${this.pendingAttachments.length} \u4E2A\u9644\u4EF6\u3002`);return}let[t]=this.pendingAttachments.splice(e,1),n=t.type==="url"?t.data:t.name||`Attachment #${e+1}`;this.logInfo("\u5DF2\u79FB\u9664\u9644\u4EF6",n);}};function dD(){if(process.platform==="win32"){let e=process.env.USERPROFILE,t=process.env.APPDATA;if(e){let n=ge.join(e,".codex","config.toml");if(Ze.existsSync(n))return n}if(t){let n=ge.join(t,"codex","config.toml");if(Ze.existsSync(n))return n}return null}else {let e=process.env.HOME;if(!e)return null;let t=ge.join(e,".codex","config.toml");return Ze.existsSync(t)?t:null}}function pD(r){let e={providers:{}},t=r.split(`
|
|
3628
|
-
`),n="",s="";for(let o of t){let i=o.trim();if(!i||i.startsWith("#"))continue;let a=i.match(/^\[model_providers\.([^\]]+)\]$/);if(a){n="model_providers",s=a[1],e.providers[s]={name:s};continue}if(i.startsWith("[")&&i.endsWith("]")){n="",s="";continue}let l=i.match(/^(\w+)\s*=\s*"?([^"]*)"?$/);if(l&&!n){let[,c,u]=l;c==="model_provider"?e.defaultProvider=u:c==="model"&&(e.defaultModel=u);continue}if(n==="model_providers"&&s){let c=i.match(/^(\w+)\s*=\s*(.+)$/);if(c){let[,u,d]=c,m=d.trim();m.startsWith('"')&&m.endsWith('"')?m=m.slice(1,-1):m==="true"?m=true:m==="false"&&(m=false);let g=e.providers[s];switch(u){case "name":g.name=m;break;case "base_url":g.base_url=m;break;case "wire_api":g.wire_api=m;break;case "env_key":g.env_key=m;break;case "temp_env_key":g.temp_env_key=m;break;case "requires_openai_auth":g.requires_openai_auth=m;break;case "model":g.model=m;break}}}}return e}function mD(){let r=[],e=dD();if(!e)return r;try{let t=Ze.readFileSync(e,"utf-8"),n=pD(t),s=ge.join(ge.dirname(e),"auth.json"),o={};if(Ze.existsSync(s))try{o=JSON.parse(Ze.readFileSync(s,"utf-8"));}catch{}let i=n.defaultProvider;for(let[a,l]of Object.entries(n.providers)){let c;if(l.env_key&&process.env[l.env_key]&&(c=process.env[l.env_key]),!c&&l.temp_env_key&&process.env[l.temp_env_key]&&(c=process.env[l.temp_env_key]),!c&&l.temp_env_key&&o[l.temp_env_key]&&(c=o[l.temp_env_key]),!c&&l.env_key&&o[l.env_key]&&(c=o[l.env_key]),!c&&l.requires_openai_auth&&(c=o.OPENAI_API_KEY||process.env.OPENAI_API_KEY),c||(c=process.env.CODEX_API_KEY||process.env[`${a.toUpperCase()}_API_KEY`]),!c||!c.trim())continue;let u="openai";l.wire_api==="responses"&&(u="openai-responses");let d=[];l.model?d.push(l.model):n.defaultModel?d.push(n.defaultModel):d.push("gpt-5.2-codex","gpt-5.1-codex"),r.push({name:`Codex (${l.name||a})`,protocol:u,apiKey:c.trim(),baseUrl:l.base_url,models:d});}}catch(t){process.env.CLI_DEBUG==="1"&&console.error(`Failed to read Codex config: ${t}`);}return r}function Sx(){let r=[],e=process.env.ANTHROPIC_API_KEY||process.env.ANTHROPIC_AUTH_TOKEN;e&&e.trim()&&r.push({name:"Anthropic",protocol:"anthropic",apiKey:e.trim(),baseUrl:process.env.ANTHROPIC_BASE_URL?.trim(),models:["claude-sonnet-4-5-20250929","claude-3-5-sonnet-20241022"]});let t=process.env.OPENAI_API_KEY,n=process.env.OPENAI_BASE_URL?.trim();if(t&&t.trim()){let l=process.env.OPENAI_PROTOCOL==="responses"||process.env.OPENAI_PROTOCOL==="openai-responses"?"openai-responses":process.env.OPENAI_PROTOCOL==="anthropic"||process.env.OPENAI_PROTOCOL==="anthropic-openai"?"anthropic-openai":"openai",c=l==="openai-responses"?["gpt-5.1","o3-mini"]:["gpt-4o","gpt-4-turbo","gpt-3.5-turbo"];r.push({name:n?"OpenAI Proxy":"OpenAI",protocol:l,apiKey:t.trim(),baseUrl:n,models:c});}let s=process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY;s&&s.trim()&&r.push({name:"Gemini",protocol:"gemini",apiKey:s.trim(),baseUrl:process.env.GEMINI_BASE_URL?.trim(),models:["gemini-2.0-flash-exp","gemini-1.5-pro"]});let o=process.env.MOONSHOT_API_KEY||process.env.KIMI_API_KEY;o&&o.trim()&&r.push({name:"Kimi (Moonshot)",protocol:"kimi",apiKey:o.trim(),baseUrl:process.env.MOONSHOT_BASE_URL?.trim()||process.env.KIMI_BASE_URL?.trim(),models:["kimi-k2-0905-preview"]});let i=process.env.DOUBAO_API_KEY||process.env.VOLCENGINE_API_KEY;i&&i.trim()&&r.push({name:"Doubao",protocol:"doubao",apiKey:i.trim(),baseUrl:process.env.DOUBAO_BASE_URL?.trim(),models:["doubao-pro-256k"]});let a=mD();for(let l of a)r.push(l);if(a.length===0){let l=process.env.CODEX_API_KEY,c=process.env.CODEX_BASE_URL?.trim();l&&l.trim()&&r.push({name:"Codex",protocol:"openai-responses",apiKey:l.trim(),baseUrl:c,models:["gpt-5.2-codex","gpt-5.1-codex"]});}return r}function kx(){let r=We(),t=new qe(r).getDefaultProvider();return !(t&&t.apiKey&&t.apiKey.trim().length>0)}async function gD(){let r=Sx();return new Promise(e=>{let t=false,n=Tr(E.createElement(Kb,{detectedProviders:r,onComplete:()=>{t||(t=true,n.unmount(),e("exit"));},onStartSetup:()=>{t||(t=true,n.unmount(),e("setup"));},onManualEdit:()=>{t||(t=true,n.unmount(),e("manual"));},onAutoCreate:()=>{t||(t=true,n.unmount(),e("auto"));}}),{stdout:process.stdout,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false});})}function hD(){let r=Sx();if(r.length===0)return false;let e=We(),t=new qe(e);for(let n of r)t.addProvider({name:n.name,protocol:n.protocol,apiKey:n.apiKey,baseUrl:n.baseUrl,models:n.models,defaultModel:n.models[0],setAsDefault:r.length===1});return console.log(),console.log(
|
|
3629
|
-
`).slice(1,4).join(" -> ")}`),process.stdin.setRawMode(false),p.debug("TTY_STATE","\u2705 setRawMode(false) completed in SIGTERM")),process.exit(0);});try{p.debug("TTY_STATE","\u{1F6E1}\uFE0F Registering SIGTSTP ignore handler"),process.on("SIGTSTP",()=>{p.error("TTY_STATE","\u{1F6A8}\u{1F6A8}\u{1F6A8} SIGTSTP (Ctrl+Z) RECEIVED! This should have been ignored!"),p.error("TTY_STATE",` Stack: ${new Error().stack}`);}),p.debug("TTY_STATE","\u2705 SIGTSTP monitoring handler registered");}catch{p.debug("TTY_STATE","\u26A0\uFE0F SIGTSTP not supported on this platform");}try{p.debug("TTY_STATE","\u{1F6E1}\uFE0F [CRITICAL] Registering SIGTTIN ignore handler"),process.on("SIGTTIN",()=>{p.error("TTY_STATE","\u{1F6A8}\u{1F6A8}\u{1F6A8} SIGTTIN RECEIVED! This should have been ignored!"),p.error("TTY_STATE",` stdin.isTTY: ${process.stdin.isTTY}`),p.error("TTY_STATE",` stdin.isRaw: ${process.stdin.isRaw}`),p.error("TTY_STATE",` stdin.destroyed: ${process.stdin.destroyed}`),p.error("TTY_STATE",` Stack: ${new Error().stack}`);}),p.debug("TTY_STATE","\u2705 SIGTTIN monitoring handler registered");}catch{p.debug("TTY_STATE","\u26A0\uFE0F SIGTTIN not supported on this platform");}try{p.debug("TTY_STATE","\u{1F6E1}\uFE0F [CRITICAL] Registering SIGTTOU ignore handler"),process.on("SIGTTOU",()=>{p.error("TTY_STATE","\u{1F6A8}\u{1F6A8}\u{1F6A8} SIGTTOU RECEIVED! This should have been ignored!"),p.error("TTY_STATE",` stdout.isTTY: ${process.stdout.isTTY}`),p.error("TTY_STATE",` Stack: ${new Error().stack}`);}),p.debug("TTY_STATE","\u2705 SIGTTOU monitoring handler registered");}catch{p.debug("TTY_STATE","\u26A0\uFE0F SIGTTOU not supported on this platform");}process.on("SIGCONT",()=>{if(p.debug("TTY_STATE","\u{1F504} [CRITICAL] SIGCONT received (process resumed)"),process.stdin.isTTY&&!process.stdin.destroyed)try{let r=process.stdin.isRaw;p.debug("TTY_STATE",` wasRaw: ${r}`),r!==!1&&(p.debug("TTY_STATE","\u{1F534} About to call setRawMode(true) in SIGCONT"),process.stdin.setRawMode(!0),p.debug("TTY_STATE","\u2705 setRawMode(true) completed in SIGCONT")),process.stdin.resume(),p.debug("SIGNAL","SIGCONT: stdin recovered after resume");}catch(r){p.warn("SIGNAL","SIGCONT: failed to recover stdin",{error:r});}});process.on("exit",()=>{p.debug("TTY_STATE","\u{1F534} [CRITICAL] exit event triggered"),process.stdin.isTTY&&(p.debug("TTY_STATE","\u{1F534} [CRITICAL] About to call setRawMode(false) in exit handler"),process.stdin.setRawMode(false),p.debug("TTY_STATE","\u2705 setRawMode(false) completed in exit"));});if(process.env.NEOX_WORKER==="execute_shell"){let{runExecuteShellWorker:r}=await Promise.resolve().then(()=>(yx(),fx));await r(),process.exit(0);}yD().catch(r=>{p.debug("TTY_STATE","\u{1F534} [CRITICAL] Unhandled error in main()"),process.stdin.isTTY&&(p.debug("TTY_STATE","\u{1F534} [CRITICAL] About to call setRawMode(false) in main() catch"),p.debug("TTY_STATE",` Error: ${r.message}`),process.stdin.setRawMode(false),p.debug("TTY_STATE","\u2705 setRawMode(false) completed in main() catch")),console.error(
|
|
3628
|
+
`),n="",s="";for(let o of t){let i=o.trim();if(!i||i.startsWith("#"))continue;let a=i.match(/^\[model_providers\.([^\]]+)\]$/);if(a){n="model_providers",s=a[1],e.providers[s]={name:s};continue}if(i.startsWith("[")&&i.endsWith("]")){n="",s="";continue}let l=i.match(/^(\w+)\s*=\s*"?([^"]*)"?$/);if(l&&!n){let[,c,u]=l;c==="model_provider"?e.defaultProvider=u:c==="model"&&(e.defaultModel=u);continue}if(n==="model_providers"&&s){let c=i.match(/^(\w+)\s*=\s*(.+)$/);if(c){let[,u,d]=c,m=d.trim();m.startsWith('"')&&m.endsWith('"')?m=m.slice(1,-1):m==="true"?m=true:m==="false"&&(m=false);let g=e.providers[s];switch(u){case "name":g.name=m;break;case "base_url":g.base_url=m;break;case "wire_api":g.wire_api=m;break;case "env_key":g.env_key=m;break;case "temp_env_key":g.temp_env_key=m;break;case "requires_openai_auth":g.requires_openai_auth=m;break;case "model":g.model=m;break}}}}return e}function mD(){let r=[],e=dD();if(!e)return r;try{let t=Ze.readFileSync(e,"utf-8"),n=pD(t),s=ge.join(ge.dirname(e),"auth.json"),o={};if(Ze.existsSync(s))try{o=JSON.parse(Ze.readFileSync(s,"utf-8"));}catch{}let i=n.defaultProvider;for(let[a,l]of Object.entries(n.providers)){let c;if(l.env_key&&process.env[l.env_key]&&(c=process.env[l.env_key]),!c&&l.temp_env_key&&process.env[l.temp_env_key]&&(c=process.env[l.temp_env_key]),!c&&l.temp_env_key&&o[l.temp_env_key]&&(c=o[l.temp_env_key]),!c&&l.env_key&&o[l.env_key]&&(c=o[l.env_key]),!c&&l.requires_openai_auth&&(c=o.OPENAI_API_KEY||process.env.OPENAI_API_KEY),c||(c=process.env.CODEX_API_KEY||process.env[`${a.toUpperCase()}_API_KEY`]),!c||!c.trim())continue;let u="openai";l.wire_api==="responses"&&(u="openai-responses");let d=[];l.model?d.push(l.model):n.defaultModel?d.push(n.defaultModel):d.push("gpt-5.2-codex","gpt-5.1-codex"),r.push({name:`Codex (${l.name||a})`,protocol:u,apiKey:c.trim(),baseUrl:l.base_url,models:d});}}catch(t){process.env.CLI_DEBUG==="1"&&console.error(`Failed to read Codex config: ${t}`);}return r}function Sx(){let r=[],e=process.env.ANTHROPIC_API_KEY||process.env.ANTHROPIC_AUTH_TOKEN;e&&e.trim()&&r.push({name:"Anthropic",protocol:"anthropic",apiKey:e.trim(),baseUrl:process.env.ANTHROPIC_BASE_URL?.trim(),models:["claude-sonnet-4-5-20250929","claude-3-5-sonnet-20241022"]});let t=process.env.OPENAI_API_KEY,n=process.env.OPENAI_BASE_URL?.trim();if(t&&t.trim()){let l=process.env.OPENAI_PROTOCOL==="responses"||process.env.OPENAI_PROTOCOL==="openai-responses"?"openai-responses":process.env.OPENAI_PROTOCOL==="anthropic"||process.env.OPENAI_PROTOCOL==="anthropic-openai"?"anthropic-openai":"openai",c=l==="openai-responses"?["gpt-5.1","o3-mini"]:["gpt-4o","gpt-4-turbo","gpt-3.5-turbo"];r.push({name:n?"OpenAI Proxy":"OpenAI",protocol:l,apiKey:t.trim(),baseUrl:n,models:c});}let s=process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY;s&&s.trim()&&r.push({name:"Gemini",protocol:"gemini",apiKey:s.trim(),baseUrl:process.env.GEMINI_BASE_URL?.trim(),models:["gemini-2.0-flash-exp","gemini-1.5-pro"]});let o=process.env.MOONSHOT_API_KEY||process.env.KIMI_API_KEY;o&&o.trim()&&r.push({name:"Kimi (Moonshot)",protocol:"kimi",apiKey:o.trim(),baseUrl:process.env.MOONSHOT_BASE_URL?.trim()||process.env.KIMI_BASE_URL?.trim(),models:["kimi-k2-0905-preview"]});let i=process.env.DOUBAO_API_KEY||process.env.VOLCENGINE_API_KEY;i&&i.trim()&&r.push({name:"Doubao",protocol:"doubao",apiKey:i.trim(),baseUrl:process.env.DOUBAO_BASE_URL?.trim(),models:["doubao-pro-256k"]});let a=mD();for(let l of a)r.push(l);if(a.length===0){let l=process.env.CODEX_API_KEY,c=process.env.CODEX_BASE_URL?.trim();l&&l.trim()&&r.push({name:"Codex",protocol:"openai-responses",apiKey:l.trim(),baseUrl:c,models:["gpt-5.2-codex","gpt-5.1-codex"]});}return r}function kx(){let r=We(),t=new qe(r).getDefaultProvider();return !(t&&t.apiKey&&t.apiKey.trim().length>0)}async function gD(){let r=Sx();return new Promise(e=>{let t=false,n=Tr(E.createElement(Kb,{detectedProviders:r,onComplete:()=>{t||(t=true,n.unmount(),e("exit"));},onStartSetup:()=>{t||(t=true,n.unmount(),e("setup"));},onManualEdit:()=>{t||(t=true,n.unmount(),e("manual"));},onAutoCreate:()=>{t||(t=true,n.unmount(),e("auto"));}}),{stdout:process.stdout,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false});})}function hD(){let r=Sx();if(r.length===0)return false;let e=We(),t=new qe(e);for(let n of r)t.addProvider({name:n.name,protocol:n.protocol,apiKey:n.apiKey,baseUrl:n.baseUrl,models:n.models,defaultModel:n.models[0],setAsDefault:r.length===1});return console.log(),console.log(ke.green(`\u2713 \u5DF2\u4ECE\u73AF\u5883\u53D8\u91CF\u521B\u5EFA ${r.length} \u4E2A Provider\uFF01`)),console.log(ke.dim(` \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230: ${dn}`)),console.log(),true}async function _x(){let r=We(),t=new qe(r).getDefaultProvider();if(t&&t.apiKey&&t.apiKey.trim().length>0)return;let n=await fD();n||(console.log(),console.log(ke.red("\u914D\u7F6E\u5DF2\u53D6\u6D88")),process.exit(1));let s=n.protocol,o=n.baseUrl?.trim()||Ds[s],i=[n.model],a={providers:{}};new qe(a).addProvider({name:n.name.trim(),protocol:s,apiKey:n.apiKey.trim(),baseUrl:o,defaultModel:n.model,models:i,setAsDefault:true}),console.log(),console.log(ke.green(`\u2713 Provider "${n.name.trim()}" \u914D\u7F6E\u6210\u529F!`)),console.log(ke.dim(` \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230: ${dn}`)),console.log();}async function fD(){return new Promise(r=>{let e=false,t=Tr(E.createElement(Jb,{onComplete:n=>{e||(e=true,t.unmount(),r(n));},onCancel:()=>{e||(e=true,t.unmount(),r(null));}}),{stdout:process.stdout,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false});})}async function yD(){let r=process.argv.slice(2);if(r[0]==="mcp"){let t=ge.resolve(process.cwd()),n=await gx(r.slice(1),{workDir:t});process.exit(n);}let e=Xm();p.info("CLI","Arguments parsed",{model:e.model,provider:e.provider,workDir:e.workDir}),e.unknownArgs&&e.unknownArgs.length>0&&(console.error(ke.red(`\u9519\u8BEF: \u4E0D\u652F\u6301\u7684\u53C2\u6570: ${e.unknownArgs.join(", ")}`)),console.error(ke.yellow("\u4F7F\u7528 'neox --help' \u67E5\u770B\u652F\u6301\u7684\u53C2\u6570\u5217\u8868")),process.exit(1)),e.help&&(iC(wo),process.exit(0)),e.version&&(aC(wo),process.exit(0));try{if(kx()){let n=await gD();if(n==="exit"&&process.exit(0),n==="auto"&&hD(),n==="manual"){console.log(),console.log(ke.yellow("\u8BF7\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u5E76\u586B\u5165\u60A8\u7684 API Key:")),console.log(ke.cyan(` ${dn}`)),console.log();let{spawn:s}=await import('child_process'),{isWSL:o}=await Promise.resolve().then(()=>(ps(),ph)),i;process.env.EDITOR||process.env.VISUAL?i=process.env.EDITOR||process.env.VISUAL:process.platform==="darwin"?i="open":o()?i="wslview":i="xdg-open",console.log(ke.dim(` \u4F7F\u7528 ${i} \u6253\u5F00\u914D\u7F6E\u6587\u4EF6...`)),s(i,[dn],{detached:!0,stdio:"ignore"}).unref(),console.log(),console.log(ke.dim("\u7F16\u8F91\u5B8C\u6210\u540E\uFF0C\u8BF7\u91CD\u65B0\u8FD0\u884C CLI\u3002")),console.log(),process.exit(0);}}await _x();let t=new vg(e.model,e.workDir,e.provider,e);await t.init(),p.info("CLI","CLI initialized successfully"),await t.runInteractive();}catch(t){throw p.error("CLI","Fatal error in main",{error:t.message,stack:t.stack}),t}}process.on("SIGINT",()=>{bt.getBackgroundRunning().length>0&&bt.killAll(true),Tu||process.exit(0);});var Cx=Date.now(),bD=1e3,vD=5e3,CD=6e4,xD=setInterval(()=>{let r=Date.now(),e=r-Cx;Cx=r,e>vD&&e<CD&&p.warn("EVENT_LOOP",`\u26A0\uFE0F Event loop blocked for ${Math.round(e/1e3)}s`,{elapsedMs:e,elapsedSec:Math.round(e/1e3)});},bD);xD.unref();process.on("SIGTERM",()=>{p.debug("TTY_STATE","\u{1F534} [CRITICAL] SIGTERM received"),bt.killAll(true),process.stdin.isTTY&&(p.debug("TTY_STATE","\u{1F534} [CRITICAL] About to call setRawMode(false) in SIGTERM handler"),p.debug("TTY_STATE",` Stack: ${new Error().stack?.split(`
|
|
3629
|
+
`).slice(1,4).join(" -> ")}`),process.stdin.setRawMode(false),p.debug("TTY_STATE","\u2705 setRawMode(false) completed in SIGTERM")),process.exit(0);});try{p.debug("TTY_STATE","\u{1F6E1}\uFE0F Registering SIGTSTP ignore handler"),process.on("SIGTSTP",()=>{p.error("TTY_STATE","\u{1F6A8}\u{1F6A8}\u{1F6A8} SIGTSTP (Ctrl+Z) RECEIVED! This should have been ignored!"),p.error("TTY_STATE",` Stack: ${new Error().stack}`);}),p.debug("TTY_STATE","\u2705 SIGTSTP monitoring handler registered");}catch{p.debug("TTY_STATE","\u26A0\uFE0F SIGTSTP not supported on this platform");}try{p.debug("TTY_STATE","\u{1F6E1}\uFE0F [CRITICAL] Registering SIGTTIN ignore handler"),process.on("SIGTTIN",()=>{p.error("TTY_STATE","\u{1F6A8}\u{1F6A8}\u{1F6A8} SIGTTIN RECEIVED! This should have been ignored!"),p.error("TTY_STATE",` stdin.isTTY: ${process.stdin.isTTY}`),p.error("TTY_STATE",` stdin.isRaw: ${process.stdin.isRaw}`),p.error("TTY_STATE",` stdin.destroyed: ${process.stdin.destroyed}`),p.error("TTY_STATE",` Stack: ${new Error().stack}`);}),p.debug("TTY_STATE","\u2705 SIGTTIN monitoring handler registered");}catch{p.debug("TTY_STATE","\u26A0\uFE0F SIGTTIN not supported on this platform");}try{p.debug("TTY_STATE","\u{1F6E1}\uFE0F [CRITICAL] Registering SIGTTOU ignore handler"),process.on("SIGTTOU",()=>{p.error("TTY_STATE","\u{1F6A8}\u{1F6A8}\u{1F6A8} SIGTTOU RECEIVED! This should have been ignored!"),p.error("TTY_STATE",` stdout.isTTY: ${process.stdout.isTTY}`),p.error("TTY_STATE",` Stack: ${new Error().stack}`);}),p.debug("TTY_STATE","\u2705 SIGTTOU monitoring handler registered");}catch{p.debug("TTY_STATE","\u26A0\uFE0F SIGTTOU not supported on this platform");}process.on("SIGCONT",()=>{if(p.debug("TTY_STATE","\u{1F504} [CRITICAL] SIGCONT received (process resumed)"),process.stdin.isTTY&&!process.stdin.destroyed)try{let r=process.stdin.isRaw;p.debug("TTY_STATE",` wasRaw: ${r}`),r!==!1&&(p.debug("TTY_STATE","\u{1F534} About to call setRawMode(true) in SIGCONT"),process.stdin.setRawMode(!0),p.debug("TTY_STATE","\u2705 setRawMode(true) completed in SIGCONT")),process.stdin.resume(),p.debug("SIGNAL","SIGCONT: stdin recovered after resume");}catch(r){p.warn("SIGNAL","SIGCONT: failed to recover stdin",{error:r});}});process.on("exit",()=>{p.debug("TTY_STATE","\u{1F534} [CRITICAL] exit event triggered"),process.stdin.isTTY&&(p.debug("TTY_STATE","\u{1F534} [CRITICAL] About to call setRawMode(false) in exit handler"),process.stdin.setRawMode(false),p.debug("TTY_STATE","\u2705 setRawMode(false) completed in exit"));});if(process.env.NEOX_WORKER==="execute_shell"){let{runExecuteShellWorker:r}=await Promise.resolve().then(()=>(yx(),fx));await r(),process.exit(0);}yD().catch(r=>{p.debug("TTY_STATE","\u{1F534} [CRITICAL] Unhandled error in main()"),process.stdin.isTTY&&(p.debug("TTY_STATE","\u{1F534} [CRITICAL] About to call setRawMode(false) in main() catch"),p.debug("TTY_STATE",` Error: ${r.message}`),process.stdin.setRawMode(false),p.debug("TTY_STATE","\u2705 setRawMode(false) completed in main() catch")),console.error(ke.red(`
|
|
3630
3630
|
[x] Unexpected error:`),r.message),process.exit(1);});export{yg as originalConsole};
|